2026-04-12T09:00:11.545 [DEBUG] [Thread-186306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:00:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:00:22.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:00:22.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:00:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 0, 12), -0.002835, 100.319, 0.0, 26.9431, 10.3003, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:00:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:00:12
2026-04-12T09:00:24.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:00:24.772 [DEBUG] [Thread-186307] [transport.py] [_log()] starting thread (client mode): 0xae5b3e50
2026-04-12T09:00:24.772 [DEBUG] [Thread-186307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:00:24.773 [DEBUG] [Thread-186308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:00:24.793 [DEBUG] [Thread-186307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:00:24.793 [INFO] [Thread-186307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:00:24.796 [DEBUG] [Thread-186307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] client lang: <none>
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] server lang: <none>
2026-04-12T09:00:24.797 [DEBUG] [Thread-186307] [transport.py] [_log()] kex follows: False
2026-04-12T09:00:24.798 [DEBUG] [Thread-186307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:00:24.798 [DEBUG] [Thread-186307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:00:24.798 [DEBUG] [Thread-186307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:00:24.798 [DEBUG] [Thread-186307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:00:24.798 [DEBUG] [Thread-186307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:00:24.798 [DEBUG] [Thread-186307] [transport.py] [_log()] Compression: none
2026-04-12T09:00:24.798 [DEBUG] [Thread-186307] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:00:24.818 [DEBUG] [Thread-186307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:00:24.818 [DEBUG] [Thread-186307] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:00:24.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:00:24.820 [DEBUG] [Thread-186307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:00:24.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:00:24.822 [DEBUG] [Thread-186307] [transport.py] [_log()] userauth is OK
2026-04-12T09:00:24.822 [DEBUG] [Thread-186307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:00:24.822 [DEBUG] [Thread-186307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:00:24.822 [DEBUG] [Thread-186307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:00:24.822 [DEBUG] [Thread-186307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:00:24.847 [INFO] [Thread-186307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:00:24.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:00:26.580 [DEBUG] [Thread-186310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:00:32.704 [DEBUG] [Thread-186307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:00:32.704 [DEBUG] [Thread-186307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:00:32.705 [DEBUG] [Thread-186307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:00:32.745 [DEBUG] [Thread-186307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:00:32.745 [DEBUG] [Thread-186307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:00:32.748 [DEBUG] [Thread-186307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:00:32.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:00:32.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:00:32.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:00:32.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:00:32.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:00:32.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:00:32.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:00:32.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:00:32.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:00:32.919 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T09:00:32.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:00:12', tmtdew=-0.002835, humidity=100.319, cloud=0.0, wind=26.9431, temperature=10.3003, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:00:32.920 [DEBUG] [Thread-186307] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:00:33.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:00:33.015 [DEBUG] [Thread-186312] [transport.py] [_log()] starting thread (client mode): 0xae5e6ef0
2026-04-12T09:00:33.015 [DEBUG] [Thread-186312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:00:33.030 [DEBUG] [Thread-186312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:00:33.030 [INFO] [Thread-186312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:00:33.037 [DEBUG] [Thread-186312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] client lang: <none>
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] server lang: <none>
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] kex follows: False
2026-04-12T09:00:33.038 [DEBUG] [Thread-186312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:00:33.039 [DEBUG] [Thread-186312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:00:33.039 [DEBUG] [Thread-186312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:00:33.039 [DEBUG] [Thread-186312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:00:33.039 [DEBUG] [Thread-186312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:00:33.039 [DEBUG] [Thread-186312] [transport.py] [_log()] Compression: none
2026-04-12T09:00:33.039 [DEBUG] [Thread-186312] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:00:33.095 [DEBUG] [Thread-186312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:00:33.095 [DEBUG] [Thread-186312] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:00:33.096 [DEBUG] [Thread-186312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:00:33.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:00:33.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:00:33.151 [DEBUG] [Thread-186312] [transport.py] [_log()] userauth is OK
2026-04-12T09:00:33.151 [DEBUG] [Thread-186312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:00:33.152 [DEBUG] [Thread-186312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:00:33.152 [DEBUG] [Thread-186312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:00:33.152 [DEBUG] [Thread-186312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:00:33.171 [INFO] [Thread-186312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:00:33.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:00:33.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:00:33.981 [DEBUG] [Thread-186312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:00:33.981 [DEBUG] [Thread-186312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:00:34.029 [DEBUG] [Thread-186312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:00:34.030 [DEBUG] [Thread-186312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:00:34.038 [DEBUG] [Thread-186312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:00:34.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:00:34.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:00:34.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:00:34.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:00:34.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:00:34.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:00:34.073 [DEBUG] [Thread-186312] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:00:41.617 [DEBUG] [Thread-186314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:00:43.303 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:00:43.304 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:00:56.672 [DEBUG] [Thread-186315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:01:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:01:04.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:01:04.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:01:05.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 0, 48), -0.10561, 100.639, 0.0, 29.7446, 10.8675, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:01:05.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:00:48
2026-04-12T09:01:05.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:01:05.834 [DEBUG] [Thread-186316] [transport.py] [_log()] starting thread (client mode): 0xae5e70a0
2026-04-12T09:01:05.834 [DEBUG] [Thread-186316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:01:05.854 [DEBUG] [Thread-186316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:01:05.854 [INFO] [Thread-186316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:01:05.857 [DEBUG] [Thread-186316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:01:05.857 [DEBUG] [Thread-186316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:01:05.857 [DEBUG] [Thread-186316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:01:05.857 [DEBUG] [Thread-186316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] client lang: <none>
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] server lang: <none>
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] kex follows: False
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:01:05.858 [DEBUG] [Thread-186316] [transport.py] [_log()] Compression: none
2026-04-12T09:01:05.859 [DEBUG] [Thread-186316] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:01:05.876 [DEBUG] [Thread-186316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:01:05.876 [DEBUG] [Thread-186316] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:01:05.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:01:05.877 [DEBUG] [Thread-186316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:01:05.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:01:05.879 [DEBUG] [Thread-186316] [transport.py] [_log()] userauth is OK
2026-04-12T09:01:05.879 [DEBUG] [Thread-186316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:01:05.879 [DEBUG] [Thread-186316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:01:05.879 [DEBUG] [Thread-186316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:01:05.880 [DEBUG] [Thread-186316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:01:05.902 [INFO] [Thread-186316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:01:05.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:01:06.698 [DEBUG] [Thread-186316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:01:06.698 [DEBUG] [Thread-186316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:01:06.699 [DEBUG] [Thread-186316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:01:06.739 [DEBUG] [Thread-186316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:01:06.739 [DEBUG] [Thread-186316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:01:06.742 [DEBUG] [Thread-186316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:01:06.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:01:06.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:01:06.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:01:06.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:01:06.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:01:06.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:01:06.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:01:06.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:01:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:01:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.291778 -999.00  +10.20  27.12     96   +9.70 1 3 1 3 1   887    0 0.83 15.14 ----- 30.3 27.1 278.6 35.1 12.5 -8.6 12.1 -6.5 11.4 -8.2 12.1 -7.6
2026-04-12T09:01:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:01:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:01:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.291778
2026-04-12T09:01:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:01:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:01:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:01:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:01:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:01:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:00:48', tmtdew=-0.10561, humidity=100.639, cloud=0.0, wind=29.7446, temperature=10.8675, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:00:09.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:01:06.768 [DEBUG] [Thread-186316] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:01:06.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:01:06.860 [DEBUG] [Thread-186319] [transport.py] [_log()] starting thread (client mode): 0xb0f8db10
2026-04-12T09:01:06.861 [DEBUG] [Thread-186319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:01:06.875 [DEBUG] [Thread-186319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:01:06.875 [INFO] [Thread-186319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] client lang: <none>
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] server lang: <none>
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] kex follows: False
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:01:06.883 [DEBUG] [Thread-186319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:01:06.884 [DEBUG] [Thread-186319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:01:06.884 [DEBUG] [Thread-186319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:01:06.884 [DEBUG] [Thread-186319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:01:06.884 [DEBUG] [Thread-186319] [transport.py] [_log()] Compression: none
2026-04-12T09:01:06.884 [DEBUG] [Thread-186319] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:01:06.944 [DEBUG] [Thread-186319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:01:06.944 [DEBUG] [Thread-186319] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:01:06.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:01:06.945 [DEBUG] [Thread-186319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:01:06.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:01:06.999 [DEBUG] [Thread-186319] [transport.py] [_log()] userauth is OK
2026-04-12T09:01:07.000 [DEBUG] [Thread-186319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:01:07.000 [DEBUG] [Thread-186319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:01:07.000 [DEBUG] [Thread-186319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:01:07.000 [DEBUG] [Thread-186319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:01:07.019 [INFO] [Thread-186319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:01:07.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:01:07.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:01:07.861 [DEBUG] [Thread-186319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:01:07.861 [DEBUG] [Thread-186319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:01:07.908 [DEBUG] [Thread-186319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:01:07.908 [DEBUG] [Thread-186319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:01:07.917 [DEBUG] [Thread-186319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:01:07.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:01:07.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:01:07.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:01:07.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:01:07.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:01:07.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:01:07.951 [DEBUG] [Thread-186319] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:01:11.709 [DEBUG] [Thread-186321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:01:24.806 [DEBUG] [Thread-186322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:01:26.764 [DEBUG] [Thread-186323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:01:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:01:37.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:01:37.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:01:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 1, 24), -0.050155, 100.303, 0.0, 23.7319, 10.1342, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:01:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:01:24
2026-04-12T09:01:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:01:39.740 [DEBUG] [Thread-186324] [transport.py] [_log()] starting thread (client mode): 0xae563be0
2026-04-12T09:01:39.740 [DEBUG] [Thread-186324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:01:39.752 [DEBUG] [Thread-186324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:01:39.752 [INFO] [Thread-186324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:01:39.753 [DEBUG] [Thread-186324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] client lang: <none>
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] server lang: <none>
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] kex follows: False
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] Compression: none
2026-04-12T09:01:39.754 [DEBUG] [Thread-186324] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:01:39.761 [DEBUG] [Thread-186324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:01:39.762 [DEBUG] [Thread-186324] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:01:39.762 [DEBUG] [Thread-186324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:01:39.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:01:39.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:01:39.763 [DEBUG] [Thread-186324] [transport.py] [_log()] userauth is OK
2026-04-12T09:01:39.763 [DEBUG] [Thread-186324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:01:39.763 [DEBUG] [Thread-186324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:01:39.763 [DEBUG] [Thread-186324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:01:39.763 [DEBUG] [Thread-186324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:01:39.777 [INFO] [Thread-186324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:01:39.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:01:40.373 [DEBUG] [Thread-186324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:01:40.373 [DEBUG] [Thread-186324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:01:40.373 [DEBUG] [Thread-186324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:01:40.414 [DEBUG] [Thread-186324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:01:40.414 [DEBUG] [Thread-186324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:01:40.418 [DEBUG] [Thread-186324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:01:40.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:01:40.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:01:40.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:01:40.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:01:40.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:01:40.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:01:40.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:01:40.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:01:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:01:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.292125 -999.00  +10.20  24.21     96   +9.70 1 3 1 3 1   887    0 0.88 16.70 ----- 24.6 24.2 277.8 34.2 12.5 -8.2 12.1 -6.6 11.4 -7.5 12.1 -8.6
2026-04-12T09:01:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:01:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:01:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.292125
2026-04-12T09:01:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:01:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:01:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:01:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:01:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:01:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:01:24', tmtdew=-0.050155, humidity=100.303, cloud=0.0, wind=23.7319, temperature=10.1342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:00:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:01:40.445 [DEBUG] [Thread-186324] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:01:40.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:01:40.544 [DEBUG] [Thread-186327] [transport.py] [_log()] starting thread (client mode): 0xae5b4280
2026-04-12T09:01:40.544 [DEBUG] [Thread-186327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:01:40.558 [DEBUG] [Thread-186327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:01:40.558 [INFO] [Thread-186327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:01:40.566 [DEBUG] [Thread-186327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] client lang: <none>
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] server lang: <none>
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] kex follows: False
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] Compression: none
2026-04-12T09:01:40.567 [DEBUG] [Thread-186327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:01:40.626 [DEBUG] [Thread-186327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:01:40.627 [DEBUG] [Thread-186327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:01:40.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:01:40.628 [DEBUG] [Thread-186327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:01:40.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:01:40.684 [DEBUG] [Thread-186327] [transport.py] [_log()] userauth is OK
2026-04-12T09:01:40.685 [DEBUG] [Thread-186327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:01:40.685 [DEBUG] [Thread-186327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:01:40.685 [DEBUG] [Thread-186327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:01:40.685 [DEBUG] [Thread-186327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:01:40.705 [INFO] [Thread-186327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:01:40.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:01:40.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:01:41.562 [DEBUG] [Thread-186327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:01:41.562 [DEBUG] [Thread-186327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:01:41.624 [DEBUG] [Thread-186327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:01:41.624 [DEBUG] [Thread-186327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:01:41.647 [DEBUG] [Thread-186327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:01:41.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:01: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')
2026-04-12T09:01:41.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:01:41.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:01:41.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:01:41.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:01:41.742 [DEBUG] [Thread-186327] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:01:41.801 [DEBUG] [Thread-186329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:01:43.446 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:01:43.447 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:01:56.860 [DEBUG] [Thread-186330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:02:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:02:11.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:02:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:02:11.894 [DEBUG] [Thread-186331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:02:13.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 1, 59), -0.00272, 100.319, 0.0, 26.4316, 10.184, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:02:13.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:01:59
2026-04-12T09:02:13.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:02:13.531 [DEBUG] [Thread-186332] [transport.py] [_log()] starting thread (client mode): 0xb0fb4ac0
2026-04-12T09:02:13.531 [DEBUG] [Thread-186332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:02:13.551 [DEBUG] [Thread-186332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:02:13.551 [INFO] [Thread-186332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] client lang: <none>
2026-04-12T09:02:13.554 [DEBUG] [Thread-186332] [transport.py] [_log()] server lang: <none>
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] kex follows: False
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] Compression: none
2026-04-12T09:02:13.555 [DEBUG] [Thread-186332] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:02:13.571 [DEBUG] [Thread-186332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:02:13.571 [DEBUG] [Thread-186332] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:02:13.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:02:13.573 [DEBUG] [Thread-186332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:02:13.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:02:13.575 [DEBUG] [Thread-186332] [transport.py] [_log()] userauth is OK
2026-04-12T09:02:13.575 [DEBUG] [Thread-186332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:02:13.575 [DEBUG] [Thread-186332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:02:13.575 [DEBUG] [Thread-186332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:02:13.575 [DEBUG] [Thread-186332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:02:13.610 [INFO] [Thread-186332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:02:13.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:02:14.235 [DEBUG] [Thread-186332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:02:14.235 [DEBUG] [Thread-186332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:02:14.236 [DEBUG] [Thread-186332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:02:14.276 [DEBUG] [Thread-186332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:02:14.276 [DEBUG] [Thread-186332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:02:14.280 [DEBUG] [Thread-186332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:02:14.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:02:14.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:02:14.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:02:14.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:02:14.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:02:14.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:02:14.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:02:14.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:02:14.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:02:14.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.293167 -999.00  +10.20  27.11     96   +9.70 1 3 1 3 1   887    0 0.88 15.76 ----- 25.3 27.1 277.2 31.9 12.4 -9.6 12.0 -6.6 11.3 -6.9 12.0 -8.0
2026-04-12T09:02:14.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:02:14.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:02:14.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.293167
2026-04-12T09:02:14.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:02:14.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:02:14.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:02:14.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:02:14.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:02:14.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:01:59', tmtdew=-0.00272, humidity=100.319, cloud=0.0, wind=26.4316, temperature=10.184, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:02:09.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:02:14.308 [DEBUG] [Thread-186332] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:02:14.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:02:14.409 [DEBUG] [Thread-186335] [transport.py] [_log()] starting thread (client mode): 0xae5e47c0
2026-04-12T09:02:14.409 [DEBUG] [Thread-186335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:02:14.432 [DEBUG] [Thread-186335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:02:14.433 [INFO] [Thread-186335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:02:14.448 [DEBUG] [Thread-186335] [transport.py] [_log()] client lang: <none>
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] server lang: <none>
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] kex follows: False
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] Compression: none
2026-04-12T09:02:14.449 [DEBUG] [Thread-186335] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:02:14.515 [DEBUG] [Thread-186335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:02:14.515 [DEBUG] [Thread-186335] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:02:14.516 [DEBUG] [Thread-186335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:02:14.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:02:14.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:02:14.587 [DEBUG] [Thread-186335] [transport.py] [_log()] userauth is OK
2026-04-12T09:02:14.588 [DEBUG] [Thread-186335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:02:14.588 [DEBUG] [Thread-186335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:02:14.588 [DEBUG] [Thread-186335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:02:14.588 [DEBUG] [Thread-186335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:02:14.616 [INFO] [Thread-186335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:02:14.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:02:14.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:02:15.442 [DEBUG] [Thread-186335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:02:15.442 [DEBUG] [Thread-186335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:02:15.503 [DEBUG] [Thread-186335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:02:15.503 [DEBUG] [Thread-186335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:02:15.526 [DEBUG] [Thread-186335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:02:15.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:02:15.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:02:15.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:02:15.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:02:15.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:02:15.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:02:15.615 [DEBUG] [Thread-186335] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:02:24.853 [DEBUG] [Thread-186337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:02:26.935 [DEBUG] [Thread-186338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:02:41.987 [DEBUG] [Thread-186339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:02:43.587 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:02:43.588 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:02:45.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:02:45.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:02:45.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:02:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 2, 35), -0.11534, 100.705, 0.0, 27.522, 10.768, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:02:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:02:35
2026-04-12T09:02:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:02:47.401 [DEBUG] [Thread-186340] [transport.py] [_log()] starting thread (client mode): 0xb0fb75e0
2026-04-12T09:02:47.402 [DEBUG] [Thread-186340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:02:47.422 [DEBUG] [Thread-186340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:02:47.422 [INFO] [Thread-186340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] client lang: <none>
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] server lang: <none>
2026-04-12T09:02:47.425 [DEBUG] [Thread-186340] [transport.py] [_log()] kex follows: False
2026-04-12T09:02:47.426 [DEBUG] [Thread-186340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:02:47.426 [DEBUG] [Thread-186340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:02:47.426 [DEBUG] [Thread-186340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:02:47.426 [DEBUG] [Thread-186340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:02:47.426 [DEBUG] [Thread-186340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:02:47.426 [DEBUG] [Thread-186340] [transport.py] [_log()] Compression: none
2026-04-12T09:02:47.426 [DEBUG] [Thread-186340] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:02:47.442 [DEBUG] [Thread-186340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:02:47.442 [DEBUG] [Thread-186340] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:02:47.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:02:47.444 [DEBUG] [Thread-186340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:02:47.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:02:47.446 [DEBUG] [Thread-186340] [transport.py] [_log()] userauth is OK
2026-04-12T09:02:47.446 [DEBUG] [Thread-186340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:02:47.446 [DEBUG] [Thread-186340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:02:47.446 [DEBUG] [Thread-186340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:02:47.447 [DEBUG] [Thread-186340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:02:47.470 [INFO] [Thread-186340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:02:47.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:02:48.120 [DEBUG] [Thread-186340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:02:48.121 [DEBUG] [Thread-186340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:02:48.121 [DEBUG] [Thread-186340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:02:48.163 [DEBUG] [Thread-186340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:02:48.163 [DEBUG] [Thread-186340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:02:48.166 [DEBUG] [Thread-186340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:02:48.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:02:48.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:02:48.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:02:48.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:02:48.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:02:48.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:02:48.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:02:48.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:02:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:02:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.293514 -999.00  +10.30  20.02     96   +9.80 1 3 1 3 1   887    0 0.89 16.15 ----- 20.8 20.0 277.4 26.5 12.4 -7.5 12.0 -8.3 11.3 -10.2 11.9 -11.5
2026-04-12T09:02:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:02:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:02:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.293514
2026-04-12T09:02:48.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:02:48.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:02:48.188 [DEBUG] [Thread-186340] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:02:48.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:02:48.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:02:48.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:02:48.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:02:35', tmtdew=-0.11534, humidity=100.705, cloud=0.0, wind=27.522, temperature=10.768, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:02:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:02:48.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:02:48.307 [DEBUG] [Thread-186343] [transport.py] [_log()] starting thread (client mode): 0xb0f8f8e0
2026-04-12T09:02:48.307 [DEBUG] [Thread-186343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:02:48.336 [DEBUG] [Thread-186343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:02:48.337 [INFO] [Thread-186343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:02:48.359 [DEBUG] [Thread-186343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:02:48.359 [DEBUG] [Thread-186343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:02:48.359 [DEBUG] [Thread-186343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] client lang: <none>
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] server lang: <none>
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] kex follows: False
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:02:48.360 [DEBUG] [Thread-186343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:02:48.361 [DEBUG] [Thread-186343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:02:48.361 [DEBUG] [Thread-186343] [transport.py] [_log()] Compression: none
2026-04-12T09:02:48.361 [DEBUG] [Thread-186343] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:02:48.427 [DEBUG] [Thread-186343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:02:48.427 [DEBUG] [Thread-186343] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:02:48.428 [DEBUG] [Thread-186343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:02:48.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:02:48.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:02:48.512 [DEBUG] [Thread-186343] [transport.py] [_log()] userauth is OK
2026-04-12T09:02:48.512 [DEBUG] [Thread-186343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:02:48.512 [DEBUG] [Thread-186343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:02:48.513 [DEBUG] [Thread-186343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:02:48.513 [DEBUG] [Thread-186343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:02:48.546 [INFO] [Thread-186343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:02:48.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:02:48.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:02:49.348 [DEBUG] [Thread-186343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:02:49.348 [DEBUG] [Thread-186343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:02:49.412 [DEBUG] [Thread-186343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:02:49.412 [DEBUG] [Thread-186343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:02:49.438 [DEBUG] [Thread-186343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:02:49.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:02:49.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:02:49.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:02:49.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:02:49.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:02:49.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:02:49.544 [DEBUG] [Thread-186343] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:02:57.025 [DEBUG] [Thread-186345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:03:12.071 [DEBUG] [Thread-186346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:03:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:03:19.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:03:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:03:20.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 3, 10), -0.007645, 100.352, 0.0, 27.2606, 10.1674, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:03:20.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:03:10
2026-04-12T09:03:21.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:03:21.395 [DEBUG] [Thread-186347] [transport.py] [_log()] starting thread (client mode): 0xb0f8e860
2026-04-12T09:03:21.395 [DEBUG] [Thread-186347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:03:21.410 [DEBUG] [Thread-186347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:03:21.410 [INFO] [Thread-186347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] client lang: <none>
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] server lang: <none>
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] kex follows: False
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] Compression: none
2026-04-12T09:03:21.411 [DEBUG] [Thread-186347] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:03:21.421 [DEBUG] [Thread-186347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:03:21.421 [DEBUG] [Thread-186347] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:03:21.422 [DEBUG] [Thread-186347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:03:21.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:03:21.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:03:21.423 [DEBUG] [Thread-186347] [transport.py] [_log()] userauth is OK
2026-04-12T09:03:21.423 [DEBUG] [Thread-186347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:03:21.423 [DEBUG] [Thread-186347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:03:21.423 [DEBUG] [Thread-186347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:03:21.423 [DEBUG] [Thread-186347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:03:21.437 [INFO] [Thread-186347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:03:21.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:03:22.021 [DEBUG] [Thread-186347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:03:22.021 [DEBUG] [Thread-186347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:03:22.022 [DEBUG] [Thread-186347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:03:22.062 [DEBUG] [Thread-186347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:03:22.062 [DEBUG] [Thread-186347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:03:22.065 [DEBUG] [Thread-186347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:03:22.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:03:22.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:03:22.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:03:22.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:03:22.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:03:22.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:03:22.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:03:22.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:03:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:03:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.293861 -999.00  +10.30  23.13     96   +9.80 1 2 1 3 1   887    0 0.89 16.46 ----- 23.6 23.1 273.0 32.0 12.4 -10.6 12.0 -9.3 11.3 -12.7 11.9 -11.4
2026-04-12T09:03:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:03:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:03:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.293861
2026-04-12T09:03:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:03:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:03:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:03:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:03:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:03:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:03:10', tmtdew=-0.007645, humidity=100.352, cloud=0.0, wind=27.2606, temperature=10.1674, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:03:09.590', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:03:22.095 [DEBUG] [Thread-186347] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:03:22.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:03:22.189 [DEBUG] [Thread-186350] [transport.py] [_log()] starting thread (client mode): 0xb0f55720
2026-04-12T09:03:22.189 [DEBUG] [Thread-186350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:03:22.204 [DEBUG] [Thread-186350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:03:22.204 [INFO] [Thread-186350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:03:22.213 [DEBUG] [Thread-186350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:03:22.214 [DEBUG] [Thread-186350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:03:22.214 [DEBUG] [Thread-186350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:03:22.214 [DEBUG] [Thread-186350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:22.214 [DEBUG] [Thread-186350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:22.214 [DEBUG] [Thread-186350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:22.214 [DEBUG] [Thread-186350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:22.214 [DEBUG] [Thread-186350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] client lang: <none>
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] server lang: <none>
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] kex follows: False
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:03:22.215 [DEBUG] [Thread-186350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:03:22.216 [DEBUG] [Thread-186350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:03:22.216 [DEBUG] [Thread-186350] [transport.py] [_log()] Compression: none
2026-04-12T09:03:22.216 [DEBUG] [Thread-186350] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:03:22.274 [DEBUG] [Thread-186350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:03:22.275 [DEBUG] [Thread-186350] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:03:22.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:03:22.276 [DEBUG] [Thread-186350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:03:22.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:03:22.331 [DEBUG] [Thread-186350] [transport.py] [_log()] userauth is OK
2026-04-12T09:03:22.331 [DEBUG] [Thread-186350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:03:22.331 [DEBUG] [Thread-186350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:03:22.332 [DEBUG] [Thread-186350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:03:22.332 [DEBUG] [Thread-186350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:03:22.350 [INFO] [Thread-186350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:03:22.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:03:22.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:03:23.179 [DEBUG] [Thread-186350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:03:23.179 [DEBUG] [Thread-186350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:03:23.254 [DEBUG] [Thread-186350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:03:23.254 [DEBUG] [Thread-186350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:03:23.294 [DEBUG] [Thread-186350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:03:23.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:03: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')
2026-04-12T09:03:23.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:03:23.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:03:23.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:03:23.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:03:23.443 [DEBUG] [Thread-186350] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:03:24.890 [DEBUG] [Thread-186352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:03:27.109 [DEBUG] [Thread-186353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:03:42.164 [DEBUG] [Thread-186354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:03:43.728 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:03:43.730 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:03:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:03:53.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:03:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:03:54.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 3, 46), -0.11038, 100.672, 0.0, 27.8748, 10.7679, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:03:54.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:03:46
2026-04-12T09:03:55.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:03:55.265 [DEBUG] [Thread-186355] [transport.py] [_log()] starting thread (client mode): 0xa7968d90
2026-04-12T09:03:55.265 [DEBUG] [Thread-186355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:03:55.285 [DEBUG] [Thread-186355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:03:55.285 [INFO] [Thread-186355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:03:55.288 [DEBUG] [Thread-186355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:03:55.288 [DEBUG] [Thread-186355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] client lang: <none>
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] server lang: <none>
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] kex follows: False
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:03:55.289 [DEBUG] [Thread-186355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:03:55.290 [DEBUG] [Thread-186355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:03:55.290 [DEBUG] [Thread-186355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:03:55.290 [DEBUG] [Thread-186355] [transport.py] [_log()] Compression: none
2026-04-12T09:03:55.290 [DEBUG] [Thread-186355] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:03:55.309 [DEBUG] [Thread-186355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:03:55.310 [DEBUG] [Thread-186355] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:03:55.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:03:55.312 [DEBUG] [Thread-186355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:03:55.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:03:55.314 [DEBUG] [Thread-186355] [transport.py] [_log()] userauth is OK
2026-04-12T09:03:55.314 [DEBUG] [Thread-186355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:03:55.314 [DEBUG] [Thread-186355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:03:55.314 [DEBUG] [Thread-186355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:03:55.314 [DEBUG] [Thread-186355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:03:55.340 [INFO] [Thread-186355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:03:55.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:03:55.923 [DEBUG] [Thread-186355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:03:55.923 [DEBUG] [Thread-186355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:03:55.923 [DEBUG] [Thread-186355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:03:55.964 [DEBUG] [Thread-186355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:03:55.964 [DEBUG] [Thread-186355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:03:55.967 [DEBUG] [Thread-186355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:03:55.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:03:55.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:03:55.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:03:55.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:03:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:03:55.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:03:55.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:03:55.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:03:56.002 [DEBUG] [Thread-186355] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:03:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:03:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.294209 -999.00  +10.20  25.37     96   +9.70 1 2 1 3 1   887    0 0.92 16.85 ----- 28.4 25.4 282.6 30.5 12.3 -12.3 12.0 -13.5 11.3 -9.8 12.0 -10.3
2026-04-12T09:03:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:03:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:03:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.294209
2026-04-12T09:03:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:03:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:03:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:03:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:03:56.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:03:56.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:03:46', tmtdew=-0.11038, humidity=100.672, cloud=0.0, wind=27.8748, temperature=10.7679, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:03:39.658', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:03:56.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:03:56.098 [DEBUG] [Thread-186358] [transport.py] [_log()] starting thread (client mode): 0xb0fb5300
2026-04-12T09:03:56.099 [DEBUG] [Thread-186358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:03:56.113 [DEBUG] [Thread-186358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:03:56.113 [INFO] [Thread-186358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:03:56.121 [DEBUG] [Thread-186358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:03:56.121 [DEBUG] [Thread-186358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:03:56.121 [DEBUG] [Thread-186358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:03:56.121 [DEBUG] [Thread-186358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:56.121 [DEBUG] [Thread-186358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:03:56.121 [DEBUG] [Thread-186358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] client lang: <none>
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] server lang: <none>
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] kex follows: False
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:03:56.122 [DEBUG] [Thread-186358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:03:56.123 [DEBUG] [Thread-186358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:03:56.123 [DEBUG] [Thread-186358] [transport.py] [_log()] Compression: none
2026-04-12T09:03:56.123 [DEBUG] [Thread-186358] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:03:56.178 [DEBUG] [Thread-186358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:03:56.179 [DEBUG] [Thread-186358] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:03:56.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:03:56.180 [DEBUG] [Thread-186358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:03:56.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:03:56.234 [DEBUG] [Thread-186358] [transport.py] [_log()] userauth is OK
2026-04-12T09:03:56.234 [DEBUG] [Thread-186358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:03:56.234 [DEBUG] [Thread-186358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:03:56.235 [DEBUG] [Thread-186358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:03:56.235 [DEBUG] [Thread-186358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:03:56.254 [INFO] [Thread-186358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:03:56.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:03:56.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:03:57.061 [DEBUG] [Thread-186358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:03:57.061 [DEBUG] [Thread-186358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:03:57.109 [DEBUG] [Thread-186358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:03:57.110 [DEBUG] [Thread-186358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:03:57.119 [DEBUG] [Thread-186358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:03:57.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:03:57.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:03:57.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:03:57.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:03:57.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:03:57.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:03:57.159 [DEBUG] [Thread-186358] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:03:57.201 [DEBUG] [Thread-186360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:04:12.242 [DEBUG] [Thread-186361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:04:24.935 [DEBUG] [Thread-186362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:04:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:04:27.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:04:27.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:04:27.283 [DEBUG] [Thread-186363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:04:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 4, 21), -0.0077, 100.352, 0.0, 26.7844, 10.2006, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:04:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:04:21
2026-04-12T09:04:28.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:04:28.959 [DEBUG] [Thread-186364] [transport.py] [_log()] starting thread (client mode): 0xb0fb4c40
2026-04-12T09:04:28.959 [DEBUG] [Thread-186364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:04:28.974 [DEBUG] [Thread-186364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:04:28.974 [INFO] [Thread-186364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] client lang: <none>
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] server lang: <none>
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] kex follows: False
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:04:28.976 [DEBUG] [Thread-186364] [transport.py] [_log()] Compression: none
2026-04-12T09:04:28.977 [DEBUG] [Thread-186364] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:04:28.988 [DEBUG] [Thread-186364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:04:28.988 [DEBUG] [Thread-186364] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:04:28.989 [DEBUG] [Thread-186364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:04:28.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:04:28.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:04:28.991 [DEBUG] [Thread-186364] [transport.py] [_log()] userauth is OK
2026-04-12T09:04:28.991 [DEBUG] [Thread-186364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:04:28.991 [DEBUG] [Thread-186364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:04:28.991 [DEBUG] [Thread-186364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:04:28.991 [DEBUG] [Thread-186364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:04:29.009 [INFO] [Thread-186364] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:04:29.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:04:29.635 [DEBUG] [Thread-186364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:04:29.635 [DEBUG] [Thread-186364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:04:29.635 [DEBUG] [Thread-186364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:04:29.676 [DEBUG] [Thread-186364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:04:29.676 [DEBUG] [Thread-186364] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:04:29.680 [DEBUG] [Thread-186364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:04:29.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:04:29.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:04:29.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:04:29.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:04:29.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:04:29.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:04:29.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:04:29.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:04:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:04:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.294556 -999.00  +10.20  19.95     96   +9.70 1 3 1 3 1   887    0 0.92 16.75 ----- 22.4 19.9 271.3 29.8 12.3 -12.2 12.0 -6.4 11.3 -4.8 12.0 -3.9
2026-04-12T09:04:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:04:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:04:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.294556
2026-04-12T09:04:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:04:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:04:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:04:29.707 [DEBUG] [Thread-186364] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:04:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:04:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:04:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:04:21', tmtdew=-0.0077, humidity=100.352, cloud=0.0, wind=26.7844, temperature=10.2006, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:04:09.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:04:29.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:04:29.801 [DEBUG] [Thread-186367] [transport.py] [_log()] starting thread (client mode): 0xae516500
2026-04-12T09:04:29.801 [DEBUG] [Thread-186367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:04:29.819 [DEBUG] [Thread-186367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:04:29.819 [INFO] [Thread-186367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:04:29.826 [DEBUG] [Thread-186367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] client lang: <none>
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] server lang: <none>
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] kex follows: False
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:04:29.827 [DEBUG] [Thread-186367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:04:29.828 [DEBUG] [Thread-186367] [transport.py] [_log()] Compression: none
2026-04-12T09:04:29.828 [DEBUG] [Thread-186367] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:04:29.890 [DEBUG] [Thread-186367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:04:29.891 [DEBUG] [Thread-186367] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:04:29.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:04:29.892 [DEBUG] [Thread-186367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:04:29.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:04:29.950 [DEBUG] [Thread-186367] [transport.py] [_log()] userauth is OK
2026-04-12T09:04:29.950 [DEBUG] [Thread-186367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:04:29.950 [DEBUG] [Thread-186367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:04:29.950 [DEBUG] [Thread-186367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:04:29.951 [DEBUG] [Thread-186367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:04:29.970 [INFO] [Thread-186367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:04:29.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:04:29.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:04:30.818 [DEBUG] [Thread-186367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:04:30.818 [DEBUG] [Thread-186367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:04:30.866 [DEBUG] [Thread-186367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:04:30.866 [DEBUG] [Thread-186367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:04:30.875 [DEBUG] [Thread-186367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:04:30.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:04:30.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:04:30.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:04:31.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:04:31.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:04:31.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:04:31.135 [DEBUG] [Thread-186367] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:04:42.321 [DEBUG] [Thread-186369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:04:43.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:04:43.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:04:57.376 [DEBUG] [Thread-186370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:05:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:05:01.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:05:01.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:05:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 4, 21), -0.0077, 100.352, 0.0, 26.7844, 10.2006, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:05:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:04:21
2026-04-12T09:05:02.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:05:03.051 [DEBUG] [Thread-186371] [transport.py] [_log()] starting thread (client mode): 0xa79689d0
2026-04-12T09:05:03.051 [DEBUG] [Thread-186371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:05:03.071 [DEBUG] [Thread-186371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:05:03.071 [INFO] [Thread-186371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] client lang: <none>
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] server lang: <none>
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] kex follows: False
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] Compression: none
2026-04-12T09:05:03.074 [DEBUG] [Thread-186371] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:05:03.099 [DEBUG] [Thread-186371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:05:03.099 [DEBUG] [Thread-186371] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:05:03.100 [DEBUG] [Thread-186371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:05:03.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:05:03.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:05:03.102 [DEBUG] [Thread-186371] [transport.py] [_log()] userauth is OK
2026-04-12T09:05:03.102 [DEBUG] [Thread-186371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:05:03.102 [DEBUG] [Thread-186371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:05:03.102 [DEBUG] [Thread-186371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:05:03.102 [DEBUG] [Thread-186371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:05:03.139 [INFO] [Thread-186371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:05:03.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:05:07.403 [DEBUG] [Thread-186371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:05:07.403 [DEBUG] [Thread-186371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:05:07.404 [DEBUG] [Thread-186371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:05:07.444 [DEBUG] [Thread-186371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:05:07.444 [DEBUG] [Thread-186371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:05:07.447 [DEBUG] [Thread-186371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:05:07.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:05:07.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:05:07.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:05:07.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:05:07.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:05:07.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:05:07.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:05:07.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:05:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:05:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.294903 -999.00  +10.30  23.23     97   +9.80 1 2 1 3 1   887    0 0.90 16.05 ----- 22.1 23.2 277.2 28.1 12.4 -5.2 12.0 -10.1 11.4 -10.5 11.9 -9.0
2026-04-12T09:05:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:05:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:05:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.294903
2026-04-12T09:05:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:05:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:05:07.617 [DEBUG] [Thread-186371] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:05:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:05:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:05:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:05:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:04:21', tmtdew=-0.0077, humidity=100.352, cloud=0.0, wind=26.7844, temperature=10.2006, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:04:39.619', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:05:07.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:05:07.716 [DEBUG] [Thread-186374] [transport.py] [_log()] starting thread (client mode): 0xa79696c0
2026-04-12T09:05:07.716 [DEBUG] [Thread-186374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:05:07.730 [DEBUG] [Thread-186374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:05:07.730 [INFO] [Thread-186374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:05:07.738 [DEBUG] [Thread-186374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] client lang: <none>
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] server lang: <none>
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] kex follows: False
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] Compression: none
2026-04-12T09:05:07.739 [DEBUG] [Thread-186374] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:05:07.797 [DEBUG] [Thread-186374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:05:07.798 [DEBUG] [Thread-186374] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:05:07.798 [DEBUG] [Thread-186374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:05:07.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:05:07.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:05:07.856 [DEBUG] [Thread-186374] [transport.py] [_log()] userauth is OK
2026-04-12T09:05:07.857 [DEBUG] [Thread-186374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:05:07.857 [DEBUG] [Thread-186374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:05:07.857 [DEBUG] [Thread-186374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:05:07.857 [DEBUG] [Thread-186374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:05:07.881 [INFO] [Thread-186374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:05:07.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:05:07.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:05:08.704 [DEBUG] [Thread-186374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:05:08.704 [DEBUG] [Thread-186374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:05:08.752 [DEBUG] [Thread-186374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:05:08.752 [DEBUG] [Thread-186374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:05:08.761 [DEBUG] [Thread-186374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:05:08.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:05:08.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:05:08.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:05:08.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:05:08.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:05:08.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:05:08.804 [DEBUG] [Thread-186374] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:05:12.411 [DEBUG] [Thread-186376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:05:24.968 [DEBUG] [Thread-186377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:05:27.462 [DEBUG] [Thread-186378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:05:38.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:05:38.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:05:38.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:05:40.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 5, 32), -0.00767, 100.352, 0.0, 24.0134, 10.284, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:05:40.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:05:32
2026-04-12T09:05:40.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:05:40.667 [DEBUG] [Thread-186379] [transport.py] [_log()] starting thread (client mode): 0xae514970
2026-04-12T09:05:40.667 [DEBUG] [Thread-186379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:05:40.687 [DEBUG] [Thread-186379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:05:40.688 [INFO] [Thread-186379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] client lang: <none>
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] server lang: <none>
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] kex follows: False
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:05:40.691 [DEBUG] [Thread-186379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:05:40.692 [DEBUG] [Thread-186379] [transport.py] [_log()] Compression: none
2026-04-12T09:05:40.692 [DEBUG] [Thread-186379] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:05:40.703 [DEBUG] [Thread-186379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:05:40.704 [DEBUG] [Thread-186379] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:05:40.704 [DEBUG] [Thread-186379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:05:40.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:05:40.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:05:40.706 [DEBUG] [Thread-186379] [transport.py] [_log()] userauth is OK
2026-04-12T09:05:40.706 [DEBUG] [Thread-186379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:05:40.706 [DEBUG] [Thread-186379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:05:40.707 [DEBUG] [Thread-186379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:05:40.707 [DEBUG] [Thread-186379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:05:40.731 [INFO] [Thread-186379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:05:40.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:05:41.338 [DEBUG] [Thread-186379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:05:41.339 [DEBUG] [Thread-186379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:05:41.339 [DEBUG] [Thread-186379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:05:41.380 [DEBUG] [Thread-186379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:05:41.380 [DEBUG] [Thread-186379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:05:41.383 [DEBUG] [Thread-186379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:05:41.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:05:41.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:05:41.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:05:41.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:05:41.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:05:41.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:05:41.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:05:41.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:05:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:05:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.295250 -999.00  +10.30  25.37     97   +9.80 1 2 1 3 1   887    0 0.88 15.59 ----- 23.6 25.4 283.0 27.9 12.4 -10.7 12.1 -12.7 11.4 -10.8 12.0 -11.7
2026-04-12T09:05:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:05:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:05:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.295250
2026-04-12T09:05:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:05:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:05:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:05:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:05:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:05:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:05:32', tmtdew=-0.00767, humidity=100.352, cloud=0.0, wind=24.0134, temperature=10.284, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:05:09.600', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:05:41.409 [DEBUG] [Thread-186379] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:05:41.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:05:41.516 [DEBUG] [Thread-186382] [transport.py] [_log()] starting thread (client mode): 0xa796b1f0
2026-04-12T09:05:41.516 [DEBUG] [Thread-186382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:05:41.532 [DEBUG] [Thread-186382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:05:41.532 [INFO] [Thread-186382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:05:41.540 [DEBUG] [Thread-186382] [transport.py] [_log()] client lang: <none>
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] server lang: <none>
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] kex follows: False
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] Compression: none
2026-04-12T09:05:41.541 [DEBUG] [Thread-186382] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:05:41.597 [DEBUG] [Thread-186382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:05:41.597 [DEBUG] [Thread-186382] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:05:41.598 [DEBUG] [Thread-186382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:05:41.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:05:41.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:05:41.653 [DEBUG] [Thread-186382] [transport.py] [_log()] userauth is OK
2026-04-12T09:05:41.654 [DEBUG] [Thread-186382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:05:41.654 [DEBUG] [Thread-186382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:05:41.654 [DEBUG] [Thread-186382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:05:41.654 [DEBUG] [Thread-186382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:05:41.678 [INFO] [Thread-186382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:05:41.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:05:41.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:05:42.499 [DEBUG] [Thread-186384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:05:42.552 [DEBUG] [Thread-186382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:05:42.553 [DEBUG] [Thread-186382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:05:42.600 [DEBUG] [Thread-186382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:05:42.600 [DEBUG] [Thread-186382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:05:42.610 [DEBUG] [Thread-186382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:05:42.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:05:42.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:05:42.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:05:42.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:05:42.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:05:42.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:05:42.648 [DEBUG] [Thread-186382] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:05:44.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:05:44.021 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:05:57.556 [DEBUG] [Thread-186385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:06:12.596 [DEBUG] [Thread-186386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:06:12.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:06:12.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:06:12.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:06:13.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 5, 32), -0.00767, 100.352, 0.0, 24.0134, 10.284, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:06:13.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:05:32
2026-04-12T09:06:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:06:14.476 [DEBUG] [Thread-186387] [transport.py] [_log()] starting thread (client mode): 0xb0fb4a30
2026-04-12T09:06:14.476 [DEBUG] [Thread-186387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:06:14.496 [DEBUG] [Thread-186387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:06:14.496 [INFO] [Thread-186387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:06:14.499 [DEBUG] [Thread-186387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:06:14.499 [DEBUG] [Thread-186387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] client lang: <none>
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] server lang: <none>
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] kex follows: False
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] Compression: none
2026-04-12T09:06:14.500 [DEBUG] [Thread-186387] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:06:14.508 [DEBUG] [Thread-186387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:06:14.508 [DEBUG] [Thread-186387] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:06:14.509 [DEBUG] [Thread-186387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:06:14.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:06:14.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:06:14.510 [DEBUG] [Thread-186387] [transport.py] [_log()] userauth is OK
2026-04-12T09:06:14.510 [DEBUG] [Thread-186387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:06:14.510 [DEBUG] [Thread-186387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:06:14.511 [DEBUG] [Thread-186387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:06:14.511 [DEBUG] [Thread-186387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:06:14.528 [INFO] [Thread-186387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:06:14.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:06:15.127 [DEBUG] [Thread-186387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:06:15.128 [DEBUG] [Thread-186387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:06:15.128 [DEBUG] [Thread-186387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:06:15.169 [DEBUG] [Thread-186387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:06:15.169 [DEBUG] [Thread-186387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:06:15.172 [DEBUG] [Thread-186387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:06:15.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:06:15.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:06:15.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:06:15.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:06:15.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:06:15.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:06:15.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:06:15.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:06:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:06:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.295945 -999.00  +10.20  23.00     96   +9.70 1 3 1 3 1   887    0 0.89 15.51 ----- 26.1 23.0 277.4 32.1 12.4 -10.8 12.1 -6.2 11.4 -10.0 11.9 -7.4
2026-04-12T09:06:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:06:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:06:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.295945
2026-04-12T09:06:15.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:06:15.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:06:15.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:06:15.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:06:15.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:06:15.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:05:32', tmtdew=-0.00767, humidity=100.352, cloud=0.0, wind=24.0134, temperature=10.284, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:06:09.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:06:15.200 [DEBUG] [Thread-186387] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:06:15.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:06:15.313 [DEBUG] [Thread-186390] [transport.py] [_log()] starting thread (client mode): 0xae515ea0
2026-04-12T09:06:15.313 [DEBUG] [Thread-186390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:06:15.342 [DEBUG] [Thread-186390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:06:15.343 [INFO] [Thread-186390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:06:15.364 [DEBUG] [Thread-186390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] client lang: <none>
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] server lang: <none>
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] kex follows: False
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:06:15.365 [DEBUG] [Thread-186390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:06:15.366 [DEBUG] [Thread-186390] [transport.py] [_log()] Compression: none
2026-04-12T09:06:15.366 [DEBUG] [Thread-186390] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:06:15.438 [DEBUG] [Thread-186390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:06:15.439 [DEBUG] [Thread-186390] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:06:15.440 [DEBUG] [Thread-186390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:06:15.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:06:15.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:06:15.497 [DEBUG] [Thread-186390] [transport.py] [_log()] userauth is OK
2026-04-12T09:06:15.497 [DEBUG] [Thread-186390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:06:15.498 [DEBUG] [Thread-186390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:06:15.498 [DEBUG] [Thread-186390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:06:15.498 [DEBUG] [Thread-186390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:06:15.537 [INFO] [Thread-186390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:06:15.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:06:15.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:06:16.443 [DEBUG] [Thread-186390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:06:16.443 [DEBUG] [Thread-186390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:06:16.506 [DEBUG] [Thread-186390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:06:16.506 [DEBUG] [Thread-186390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:06:16.530 [DEBUG] [Thread-186390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:06:16.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:06:16.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:06:16.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:06:16.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:06:16.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:06:16.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:06:16.625 [DEBUG] [Thread-186390] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:06:25.013 [DEBUG] [Thread-186392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:06:27.631 [DEBUG] [Thread-186393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:06:42.688 [DEBUG] [Thread-186394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:06:44.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:06:44.164 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:06:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:06:46.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:06:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:06:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 6, 7), -0.002655, 100.319, 0.0, 22.4788, 10.2508, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:06:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:06:07
2026-04-12T09:06:48.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:06:48.493 [DEBUG] [Thread-186395] [transport.py] [_log()] starting thread (client mode): 0xb0fb77c0
2026-04-12T09:06:48.493 [DEBUG] [Thread-186395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:06:48.508 [DEBUG] [Thread-186395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:06:48.508 [INFO] [Thread-186395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] client lang: <none>
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] server lang: <none>
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] kex follows: False
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] Compression: none
2026-04-12T09:06:48.511 [DEBUG] [Thread-186395] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:06:48.530 [DEBUG] [Thread-186395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:06:48.530 [DEBUG] [Thread-186395] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:06:48.531 [DEBUG] [Thread-186395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:06:48.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:06:48.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:06:48.533 [DEBUG] [Thread-186395] [transport.py] [_log()] userauth is OK
2026-04-12T09:06:48.533 [DEBUG] [Thread-186395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:06:48.533 [DEBUG] [Thread-186395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:06:48.533 [DEBUG] [Thread-186395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:06:48.533 [DEBUG] [Thread-186395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:06:48.557 [INFO] [Thread-186395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:06:48.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:06:49.163 [DEBUG] [Thread-186395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:06:49.164 [DEBUG] [Thread-186395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:06:49.164 [DEBUG] [Thread-186395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:06:49.204 [DEBUG] [Thread-186395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:06:49.204 [DEBUG] [Thread-186395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:06:49.208 [DEBUG] [Thread-186395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:06:49.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:06:49.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:06:49.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:06:49.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:06:49.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:06:49.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:06:49.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:06:49.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:06:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:06:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.296292 -999.00  +10.20  21.79     96   +9.70 1 3 1 3 1   887    0 0.90 15.97 ----- 23.4 21.8 278.0 35.1 12.4 -7.4 12.0 -4.4 11.4 -6.5 12.0 -4.7
2026-04-12T09:06:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:06:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:06:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.296292
2026-04-12T09:06:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:06:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:06:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:06:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:06:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:06:49.227 [DEBUG] [Thread-186395] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:06:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:06:07', tmtdew=-0.002655, humidity=100.319, cloud=0.0, wind=22.4788, temperature=10.2508, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:06:39.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:06:49.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:06:49.327 [DEBUG] [Thread-186398] [transport.py] [_log()] starting thread (client mode): 0xae562530
2026-04-12T09:06:49.327 [DEBUG] [Thread-186398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:06:49.350 [DEBUG] [Thread-186398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:06:49.351 [INFO] [Thread-186398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:06:49.366 [DEBUG] [Thread-186398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] client lang: <none>
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] server lang: <none>
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] kex follows: False
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] Compression: none
2026-04-12T09:06:49.367 [DEBUG] [Thread-186398] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:06:49.435 [DEBUG] [Thread-186398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:06:49.436 [DEBUG] [Thread-186398] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:06:49.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:06:49.437 [DEBUG] [Thread-186398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:06:49.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:06:49.512 [DEBUG] [Thread-186398] [transport.py] [_log()] userauth is OK
2026-04-12T09:06:49.512 [DEBUG] [Thread-186398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:06:49.513 [DEBUG] [Thread-186398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:06:49.513 [DEBUG] [Thread-186398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:06:49.513 [DEBUG] [Thread-186398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:06:49.540 [INFO] [Thread-186398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:06:49.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:06:49.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:06:50.401 [DEBUG] [Thread-186398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:06:50.401 [DEBUG] [Thread-186398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:06:50.458 [DEBUG] [Thread-186398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:06:50.458 [DEBUG] [Thread-186398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:06:50.476 [DEBUG] [Thread-186398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:06:50.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:06:50.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:06:50.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:06:50.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:06:50.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:06:50.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:06:50.550 [DEBUG] [Thread-186398] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:06:57.725 [DEBUG] [Thread-186400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:12.785 [DEBUG] [Thread-186401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:20.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:07:20.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:07:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:07:21.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 6, 43), -0.11539, 100.705, 0.0, 31.932, 10.8011, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:07:21.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:06:43
2026-04-12T09:07:22.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:07:22.445 [DEBUG] [Thread-186402] [transport.py] [_log()] starting thread (client mode): 0xb0fb5cc0
2026-04-12T09:07:22.445 [DEBUG] [Thread-186402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:07:22.460 [DEBUG] [Thread-186402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:07:22.460 [INFO] [Thread-186402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:07:22.463 [DEBUG] [Thread-186402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] client lang: <none>
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] server lang: <none>
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] kex follows: False
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] Compression: none
2026-04-12T09:07:22.464 [DEBUG] [Thread-186402] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:07:22.481 [DEBUG] [Thread-186402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:07:22.482 [DEBUG] [Thread-186402] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:07:22.483 [DEBUG] [Thread-186402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:07:22.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:07:22.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:07:22.485 [DEBUG] [Thread-186402] [transport.py] [_log()] userauth is OK
2026-04-12T09:07:22.485 [DEBUG] [Thread-186402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:07:22.485 [DEBUG] [Thread-186402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:07:22.485 [DEBUG] [Thread-186402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:07:22.485 [DEBUG] [Thread-186402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:07:22.502 [INFO] [Thread-186402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:07:22.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:07:23.096 [DEBUG] [Thread-186402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:07:23.096 [DEBUG] [Thread-186402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:07:23.096 [DEBUG] [Thread-186402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:07:23.137 [DEBUG] [Thread-186402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:07:23.137 [DEBUG] [Thread-186402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:07:23.139 [DEBUG] [Thread-186402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:07:23.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:07:23.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:07:23.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:07:23.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:07:23.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:07:23.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:07:23.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:07:23.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:07:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:07:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.296639 -999.00  +10.20  23.52     97   +9.80 1 3 1 3 1   887    0 0.85 14.10 ----- 24.2 23.5 274.8 28.2 12.4 -5.2 12.0 -5.1 11.4 -4.6 12.0 -4.6
2026-04-12T09:07:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:07:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:07:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.296639
2026-04-12T09:07:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:07:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:07:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:07:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:07:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:07:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:06:43', tmtdew=-0.11539, humidity=100.705, cloud=0.0, wind=31.932, temperature=10.8011, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:07:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:07:23.157 [DEBUG] [Thread-186402] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:07:23.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:07:23.252 [DEBUG] [Thread-186405] [transport.py] [_log()] starting thread (client mode): 0xb0fb46d0
2026-04-12T09:07:23.252 [DEBUG] [Thread-186405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:07:23.267 [DEBUG] [Thread-186405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:07:23.268 [INFO] [Thread-186405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:07:23.276 [DEBUG] [Thread-186405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:07:23.277 [DEBUG] [Thread-186405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:07:23.277 [DEBUG] [Thread-186405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:07:23.277 [DEBUG] [Thread-186405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:23.277 [DEBUG] [Thread-186405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:23.277 [DEBUG] [Thread-186405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:23.277 [DEBUG] [Thread-186405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:23.277 [DEBUG] [Thread-186405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] client lang: <none>
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] server lang: <none>
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] kex follows: False
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:07:23.278 [DEBUG] [Thread-186405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:07:23.279 [DEBUG] [Thread-186405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:07:23.279 [DEBUG] [Thread-186405] [transport.py] [_log()] Compression: none
2026-04-12T09:07:23.279 [DEBUG] [Thread-186405] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:07:23.338 [DEBUG] [Thread-186405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:07:23.339 [DEBUG] [Thread-186405] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:07:23.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:07:23.340 [DEBUG] [Thread-186405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:07:23.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:07:23.405 [DEBUG] [Thread-186405] [transport.py] [_log()] userauth is OK
2026-04-12T09:07:23.405 [DEBUG] [Thread-186405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:07:23.405 [DEBUG] [Thread-186405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:07:23.406 [DEBUG] [Thread-186405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:07:23.406 [DEBUG] [Thread-186405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:07:23.429 [INFO] [Thread-186405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:07:23.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:07:23.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:07:24.232 [DEBUG] [Thread-186405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:07:24.233 [DEBUG] [Thread-186405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:07:24.282 [DEBUG] [Thread-186405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:07:24.282 [DEBUG] [Thread-186405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:07:24.292 [DEBUG] [Thread-186405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:07:24.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:07:24.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:07:24.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:07:24.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:07:24.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:07:24.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:07:24.334 [DEBUG] [Thread-186405] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:07:25.072 [DEBUG] [Thread-186407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:27.819 [DEBUG] [Thread-186408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:42.878 [DEBUG] [Thread-186409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:44.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:44.306 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:07:54.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:07:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:07:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 7, 18), -0.010115, 100.369, 0.0, 26.3963, 10.2174, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:07:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:07:18
2026-04-12T09:07:56.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:07:56.216 [DEBUG] [Thread-186410] [transport.py] [_log()] starting thread (client mode): 0xb0f8c310
2026-04-12T09:07:56.216 [DEBUG] [Thread-186410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:07:56.235 [DEBUG] [Thread-186410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:07:56.235 [INFO] [Thread-186410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] client lang: <none>
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] server lang: <none>
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] kex follows: False
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] Compression: none
2026-04-12T09:07:56.236 [DEBUG] [Thread-186410] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:07:56.245 [DEBUG] [Thread-186410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:07:56.245 [DEBUG] [Thread-186410] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:07:56.246 [DEBUG] [Thread-186410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:07:56.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:07:56.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:07:56.247 [DEBUG] [Thread-186410] [transport.py] [_log()] userauth is OK
2026-04-12T09:07:56.247 [DEBUG] [Thread-186410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:07:56.247 [DEBUG] [Thread-186410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:07:56.248 [DEBUG] [Thread-186410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:07:56.248 [DEBUG] [Thread-186410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:07:56.266 [INFO] [Thread-186410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:07:56.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:07:56.887 [DEBUG] [Thread-186410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:07:56.887 [DEBUG] [Thread-186410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:07:56.888 [DEBUG] [Thread-186410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:07:56.928 [DEBUG] [Thread-186410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:07:56.928 [DEBUG] [Thread-186410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:07:56.932 [DEBUG] [Thread-186410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:07:56.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:07:56.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:07:56.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:07:56.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:07:56.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:07:56.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:07:56.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:07:56.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:07:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:07:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.296986 -999.00  +10.20  23.36     97   +9.80 1 3 1 3 1   887    0 0.84 13.19 ----- 25.1 23.4 280.8 28.8 12.3 -5.1 12.0 -2.3 11.3 -4.3 12.0 -1.9
2026-04-12T09:07:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:07:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:07:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.296986
2026-04-12T09:07:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:07:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:07:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:07:56.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:07:56.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:07:56.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:07:18', tmtdew=-0.010115, humidity=100.369, cloud=0.0, wind=26.3963, temperature=10.2174, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:07:39.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:07:56.960 [DEBUG] [Thread-186410] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:07:57.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:07:57.056 [DEBUG] [Thread-186413] [transport.py] [_log()] starting thread (client mode): 0xae5146a0
2026-04-12T09:07:57.056 [DEBUG] [Thread-186413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:07:57.071 [DEBUG] [Thread-186413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:07:57.071 [INFO] [Thread-186413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:07:57.080 [DEBUG] [Thread-186413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:07:57.080 [DEBUG] [Thread-186413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:07:57.080 [DEBUG] [Thread-186413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:07:57.080 [DEBUG] [Thread-186413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:57.080 [DEBUG] [Thread-186413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:07:57.080 [DEBUG] [Thread-186413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] client lang: <none>
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] server lang: <none>
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] kex follows: False
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] Compression: none
2026-04-12T09:07:57.081 [DEBUG] [Thread-186413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:07:57.140 [DEBUG] [Thread-186413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:07:57.140 [DEBUG] [Thread-186413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:07:57.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:07:57.142 [DEBUG] [Thread-186413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:07:57.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:07:57.197 [DEBUG] [Thread-186413] [transport.py] [_log()] userauth is OK
2026-04-12T09:07:57.197 [DEBUG] [Thread-186413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:07:57.198 [DEBUG] [Thread-186413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:07:57.198 [DEBUG] [Thread-186413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:07:57.198 [DEBUG] [Thread-186413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:07:57.223 [INFO] [Thread-186413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:07:57.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:07:57.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:07:57.916 [DEBUG] [Thread-186415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:07:58.115 [DEBUG] [Thread-186413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:07:58.115 [DEBUG] [Thread-186413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:07:58.163 [DEBUG] [Thread-186413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:07:58.163 [DEBUG] [Thread-186413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:07:58.172 [DEBUG] [Thread-186413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:07:58.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:07:58.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:07:58.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:07:58.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:07:58.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:07:58.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:07:58.206 [DEBUG] [Thread-186413] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:08:12.964 [DEBUG] [Thread-186416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:08:25.116 [DEBUG] [Thread-186417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:08:28.001 [DEBUG] [Thread-186418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:08:28.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:08:28.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:08:28.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:08:29.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 7, 54), -0.10531, 100.639, 0.0, 27.7337, 10.7016, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:08:29.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:07:54
2026-04-12T09:08:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:08:30.063 [DEBUG] [Thread-186419] [transport.py] [_log()] starting thread (client mode): 0xa796b3a0
2026-04-12T09:08:30.063 [DEBUG] [Thread-186419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:08:30.078 [DEBUG] [Thread-186419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:08:30.079 [INFO] [Thread-186419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] client lang: <none>
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] server lang: <none>
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] kex follows: False
2026-04-12T09:08:30.082 [DEBUG] [Thread-186419] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:08:30.083 [DEBUG] [Thread-186419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:08:30.083 [DEBUG] [Thread-186419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:08:30.083 [DEBUG] [Thread-186419] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:08:30.083 [DEBUG] [Thread-186419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:08:30.083 [DEBUG] [Thread-186419] [transport.py] [_log()] Compression: none
2026-04-12T09:08:30.083 [DEBUG] [Thread-186419] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:08:30.101 [DEBUG] [Thread-186419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:08:30.102 [DEBUG] [Thread-186419] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:08:30.102 [DEBUG] [Thread-186419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:08:30.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:08:30.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:08:30.104 [DEBUG] [Thread-186419] [transport.py] [_log()] userauth is OK
2026-04-12T09:08:30.105 [DEBUG] [Thread-186419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:08:30.105 [DEBUG] [Thread-186419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:08:30.105 [DEBUG] [Thread-186419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:08:30.105 [DEBUG] [Thread-186419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:08:30.128 [INFO] [Thread-186419] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:08:30.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:08:30.725 [DEBUG] [Thread-186419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:08:30.725 [DEBUG] [Thread-186419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:08:30.726 [DEBUG] [Thread-186419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:08:30.766 [DEBUG] [Thread-186419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:08:30.766 [DEBUG] [Thread-186419] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:08:30.769 [DEBUG] [Thread-186419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:08:30.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:08:30.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:08:30.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:08:30.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:08:30.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:08:30.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:08:30.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:08:30.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:08:30.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:08:30.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.297333 -999.00  +10.20  24.48     96   +9.70 1 3 1 3 1   887    0 0.79 11.73 ----- 27.6 24.5 281.6 35.9 12.3 -3.1 12.0 -3.0 11.4 -2.3 -999.0 -999.0
2026-04-12T09:08:30.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:08:30.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:08:30.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.297333
2026-04-12T09:08:30.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:08:30.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:08:30.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:08:30.794 [DEBUG] [Thread-186419] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:08:30.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:08:30.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:08:30.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:07:54', tmtdew=-0.10531, humidity=100.639, cloud=0.0, wind=27.7337, temperature=10.7016, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:08:09.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:08:30.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:08:30.912 [DEBUG] [Thread-186422] [transport.py] [_log()] starting thread (client mode): 0xb0fb4760
2026-04-12T09:08:30.912 [DEBUG] [Thread-186422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:08:30.948 [DEBUG] [Thread-186422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:08:30.948 [INFO] [Thread-186422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:08:30.980 [DEBUG] [Thread-186422] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:08:30.980 [DEBUG] [Thread-186422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:08:30.980 [DEBUG] [Thread-186422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:08:30.980 [DEBUG] [Thread-186422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:08:30.980 [DEBUG] [Thread-186422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:08:30.980 [DEBUG] [Thread-186422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:08:30.980 [DEBUG] [Thread-186422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] client lang: <none>
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] server lang: <none>
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] kex follows: False
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] Compression: none
2026-04-12T09:08:30.981 [DEBUG] [Thread-186422] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:08:31.062 [DEBUG] [Thread-186422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:08:31.063 [DEBUG] [Thread-186422] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:08:31.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:08:31.064 [DEBUG] [Thread-186422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:08:31.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:08:31.171 [DEBUG] [Thread-186422] [transport.py] [_log()] userauth is OK
2026-04-12T09:08:31.171 [DEBUG] [Thread-186422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:08:31.171 [DEBUG] [Thread-186422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:08:31.171 [DEBUG] [Thread-186422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:08:31.171 [DEBUG] [Thread-186422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:08:31.216 [INFO] [Thread-186422] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:08:31.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:08:31.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:08:32.042 [DEBUG] [Thread-186422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:08:32.042 [DEBUG] [Thread-186422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:08:32.116 [DEBUG] [Thread-186422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:08:32.116 [DEBUG] [Thread-186422] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:08:32.152 [DEBUG] [Thread-186422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:08:32.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:08:32.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:08:32.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:08:32.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:08:32.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:08:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:08:32.287 [DEBUG] [Thread-186422] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:08:43.036 [DEBUG] [Thread-186424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:08:44.445 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:08:44.447 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:08:58.089 [DEBUG] [Thread-186425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:09:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:09:02.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:09:02.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:09:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 8, 29), -0.05254, 100.319, 0.0, 24.3839, 10.1344, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:09:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:08:29
2026-04-12T09:09:03.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:09:04.068 [DEBUG] [Thread-186426] [transport.py] [_log()] starting thread (client mode): 0xae561450
2026-04-12T09:09:04.068 [DEBUG] [Thread-186426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:09:04.077 [DEBUG] [Thread-186426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:09:04.078 [INFO] [Thread-186426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:09:04.081 [DEBUG] [Thread-186426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:09:04.081 [DEBUG] [Thread-186426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:09:04.081 [DEBUG] [Thread-186426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:09:04.081 [DEBUG] [Thread-186426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:04.081 [DEBUG] [Thread-186426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:04.081 [DEBUG] [Thread-186426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:04.081 [DEBUG] [Thread-186426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] client lang: <none>
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] server lang: <none>
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] kex follows: False
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] Compression: none
2026-04-12T09:09:04.082 [DEBUG] [Thread-186426] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:09:04.099 [DEBUG] [Thread-186426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:09:04.099 [DEBUG] [Thread-186426] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:09:04.100 [DEBUG] [Thread-186426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:09:04.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:09:04.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:09:04.102 [DEBUG] [Thread-186426] [transport.py] [_log()] userauth is OK
2026-04-12T09:09:04.102 [DEBUG] [Thread-186426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:09:04.102 [DEBUG] [Thread-186426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:09:04.102 [DEBUG] [Thread-186426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:09:04.102 [DEBUG] [Thread-186426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:09:04.126 [INFO] [Thread-186426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:09:04.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:09:04.769 [DEBUG] [Thread-186426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:09:04.769 [DEBUG] [Thread-186426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:09:04.770 [DEBUG] [Thread-186426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:09:04.810 [DEBUG] [Thread-186426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:09:04.811 [DEBUG] [Thread-186426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:09:04.814 [DEBUG] [Thread-186426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:09:04.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:09:04.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:09:04.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:09:04.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:09:04.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:09:04.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:09:04.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:09:04.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:09:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:09:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.297681 -999.00  +10.20  21.87     97   +9.70 1 3 1 3 1   887    0 0.78 11.25 ----- 27.0 21.9 276.8 29.9 12.3 -3.4 12.0 -2.7 11.3 -3.2 12.0 -1.7
2026-04-12T09:09:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:09:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:09:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.297681
2026-04-12T09:09:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:09:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:09:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:09:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:09:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:09:04.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:08:29', tmtdew=-0.05254, humidity=100.319, cloud=0.0, wind=24.3839, temperature=10.1344, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:08:39.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:09:04.841 [DEBUG] [Thread-186426] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:09:04.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:09:04.956 [DEBUG] [Thread-186429] [transport.py] [_log()] starting thread (client mode): 0xb0fb5870
2026-04-12T09:09:04.957 [DEBUG] [Thread-186429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:09:04.991 [DEBUG] [Thread-186429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:09:04.991 [INFO] [Thread-186429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:09:05.021 [DEBUG] [Thread-186429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] client lang: <none>
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] server lang: <none>
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] kex follows: False
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:09:05.022 [DEBUG] [Thread-186429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:09:05.023 [DEBUG] [Thread-186429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:09:05.023 [DEBUG] [Thread-186429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:09:05.023 [DEBUG] [Thread-186429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:09:05.023 [DEBUG] [Thread-186429] [transport.py] [_log()] Compression: none
2026-04-12T09:09:05.023 [DEBUG] [Thread-186429] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:09:05.110 [DEBUG] [Thread-186429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:09:05.110 [DEBUG] [Thread-186429] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:09:05.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:09:05.111 [DEBUG] [Thread-186429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:09:05.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:09:05.211 [DEBUG] [Thread-186429] [transport.py] [_log()] userauth is OK
2026-04-12T09:09:05.211 [DEBUG] [Thread-186429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:09:05.211 [DEBUG] [Thread-186429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:09:05.211 [DEBUG] [Thread-186429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:09:05.211 [DEBUG] [Thread-186429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:09:05.251 [INFO] [Thread-186429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:09:05.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:09:05.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:09:06.095 [DEBUG] [Thread-186429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:09:06.095 [DEBUG] [Thread-186429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:09:06.157 [DEBUG] [Thread-186429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:09:06.157 [DEBUG] [Thread-186429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:09:06.188 [DEBUG] [Thread-186429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:09:06.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:09:06.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:09:06.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:09:06.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:09:06.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:09:06.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:09:06.310 [DEBUG] [Thread-186429] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:09:13.128 [DEBUG] [Thread-186431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:09:25.156 [DEBUG] [Thread-186432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:09:28.182 [DEBUG] [Thread-186433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:09:36.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:09:36.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:09:36.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:09:37.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 9, 5), -0.05257, 100.319, 0.0, 25.3012, 10.151, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:09:37.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:09:05
2026-04-12T09:09:37.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:09:38.088 [DEBUG] [Thread-186434] [transport.py] [_log()] starting thread (client mode): 0xb0fb69e0
2026-04-12T09:09:38.088 [DEBUG] [Thread-186434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:09:38.107 [DEBUG] [Thread-186434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:09:38.107 [INFO] [Thread-186434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] client lang: <none>
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] server lang: <none>
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] kex follows: False
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:09:38.110 [DEBUG] [Thread-186434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:09:38.111 [DEBUG] [Thread-186434] [transport.py] [_log()] Compression: none
2026-04-12T09:09:38.111 [DEBUG] [Thread-186434] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:09:38.126 [DEBUG] [Thread-186434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:09:38.127 [DEBUG] [Thread-186434] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:09:38.127 [DEBUG] [Thread-186434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:09:38.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:09:38.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:09:38.129 [DEBUG] [Thread-186434] [transport.py] [_log()] userauth is OK
2026-04-12T09:09:38.129 [DEBUG] [Thread-186434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:09:38.129 [DEBUG] [Thread-186434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:09:38.130 [DEBUG] [Thread-186434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:09:38.130 [DEBUG] [Thread-186434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:09:38.165 [INFO] [Thread-186434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:09:38.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:09:38.800 [DEBUG] [Thread-186434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:09:38.800 [DEBUG] [Thread-186434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:09:38.801 [DEBUG] [Thread-186434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:09:38.841 [DEBUG] [Thread-186434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:09:38.841 [DEBUG] [Thread-186434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:09:38.845 [DEBUG] [Thread-186434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:09:38.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:09:38.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:09:38.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:09:38.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:09:38.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:09:38.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:09:38.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:09:38.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:09:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:09:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.298028 -999.00  +10.20  26.83     97   +9.80 1 3 1 3 1   887    0 0.78 11.36 ----- 24.2 26.8 280.4 32.2 12.3 -2.6 12.0 -6.2 11.4 -2.7 12.0 -7.3
2026-04-12T09:09:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:09:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:09:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.298028
2026-04-12T09:09:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:09:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:09:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:09:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:09:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:09:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:09:05', tmtdew=-0.05257, humidity=100.319, cloud=0.0, wind=25.3012, temperature=10.151, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:09:09.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:09:38.871 [DEBUG] [Thread-186434] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:09:38.988 [DEBUG] [Thread-186437] [transport.py] [_log()] starting thread (client mode): 0xae516a40
2026-04-12T09:09:38.989 [DEBUG] [Thread-186437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:09:39.023 [DEBUG] [Thread-186437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:09:39.024 [INFO] [Thread-186437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:09:39.042 [DEBUG] [Thread-186437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:09:39.043 [DEBUG] [Thread-186437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:09:39.043 [DEBUG] [Thread-186437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:09:39.043 [DEBUG] [Thread-186437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] client lang: <none>
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] server lang: <none>
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] kex follows: False
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:09:39.044 [DEBUG] [Thread-186437] [transport.py] [_log()] Compression: none
2026-04-12T09:09:39.045 [DEBUG] [Thread-186437] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:09:39.132 [DEBUG] [Thread-186437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:09:39.132 [DEBUG] [Thread-186437] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:09:39.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:09:39.134 [DEBUG] [Thread-186437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:09:39.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:09:39.230 [DEBUG] [Thread-186437] [transport.py] [_log()] userauth is OK
2026-04-12T09:09:39.230 [DEBUG] [Thread-186437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:09:39.230 [DEBUG] [Thread-186437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:09:39.230 [DEBUG] [Thread-186437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:09:39.230 [DEBUG] [Thread-186437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:09:39.269 [INFO] [Thread-186437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:09:39.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:09:39.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:09:40.161 [DEBUG] [Thread-186437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:09:40.161 [DEBUG] [Thread-186437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:09:40.229 [DEBUG] [Thread-186437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:09:40.230 [DEBUG] [Thread-186437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:09:40.261 [DEBUG] [Thread-186437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:09:40.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:09:40.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:09:40.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:09:40.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:09:40.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:09:40.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:09:40.383 [DEBUG] [Thread-186437] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:09:43.222 [DEBUG] [Thread-186439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:09:44.591 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:09:44.592 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:09:58.286 [DEBUG] [Thread-186440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:10:10.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:10:10.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:10:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 9, 40), -0.10508, 100.639, 0.0, 31.5792, 10.5689, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:10:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:09:40
2026-04-12T09:10:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:10:12.338 [DEBUG] [Thread-186441] [transport.py] [_log()] starting thread (client mode): 0xb0fb7fd0
2026-04-12T09:10:12.338 [DEBUG] [Thread-186441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:10:12.359 [DEBUG] [Thread-186441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:10:12.360 [INFO] [Thread-186441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] client lang: <none>
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] server lang: <none>
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] kex follows: False
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] Compression: none
2026-04-12T09:10:12.363 [DEBUG] [Thread-186441] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:10:12.381 [DEBUG] [Thread-186441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:10:12.382 [DEBUG] [Thread-186441] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:10:12.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:10:12.383 [DEBUG] [Thread-186441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:10:12.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:10:12.385 [DEBUG] [Thread-186441] [transport.py] [_log()] userauth is OK
2026-04-12T09:10:12.385 [DEBUG] [Thread-186441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:10:12.385 [DEBUG] [Thread-186441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:10:12.386 [DEBUG] [Thread-186441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:10:12.386 [DEBUG] [Thread-186441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:10:12.402 [INFO] [Thread-186441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:10:12.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:10:13.325 [DEBUG] [Thread-186443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:23.639 [DEBUG] [Thread-186441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:10:23.639 [DEBUG] [Thread-186441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:10:23.640 [DEBUG] [Thread-186441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:10:23.680 [DEBUG] [Thread-186441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:10:23.680 [DEBUG] [Thread-186441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:10:23.684 [DEBUG] [Thread-186441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:10:23.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:10:23.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:10:23.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:10:23.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:10:23.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:10:23.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:10:23.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:10:23.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:10:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:10:23.970 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T09:10:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:09:40', tmtdew=-0.10508, humidity=100.639, cloud=0.0, wind=31.5792, temperature=10.5689, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:10:23.972 [DEBUG] [Thread-186441] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:10:24.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:10:24.057 [DEBUG] [Thread-186445] [transport.py] [_log()] starting thread (client mode): 0xae5e73a0
2026-04-12T09:10:24.057 [DEBUG] [Thread-186445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:10:24.075 [DEBUG] [Thread-186445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:10:24.075 [INFO] [Thread-186445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:10:24.082 [DEBUG] [Thread-186445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] client lang: <none>
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] server lang: <none>
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] kex follows: False
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:10:24.083 [DEBUG] [Thread-186445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:10:24.084 [DEBUG] [Thread-186445] [transport.py] [_log()] Compression: none
2026-04-12T09:10:24.084 [DEBUG] [Thread-186445] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:10:24.140 [DEBUG] [Thread-186445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:10:24.141 [DEBUG] [Thread-186445] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:10:24.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:10:24.142 [DEBUG] [Thread-186445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:10:24.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:10:24.196 [DEBUG] [Thread-186445] [transport.py] [_log()] userauth is OK
2026-04-12T09:10:24.196 [DEBUG] [Thread-186445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:10:24.197 [DEBUG] [Thread-186445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:10:24.197 [DEBUG] [Thread-186445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:10:24.197 [DEBUG] [Thread-186445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:10:24.222 [INFO] [Thread-186445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:10:24.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:10:24.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:10:25.075 [DEBUG] [Thread-186445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:10:25.075 [DEBUG] [Thread-186445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:10:25.125 [DEBUG] [Thread-186445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:10:25.126 [DEBUG] [Thread-186445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:10:25.136 [DEBUG] [Thread-186445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:10:25.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:10:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:10:25.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:10:25.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:10:25.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:10:25.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:10:25.179 [DEBUG] [Thread-186445] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:10:25.199 [DEBUG] [Thread-186447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:28.364 [DEBUG] [Thread-186448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:43.415 [DEBUG] [Thread-186449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:44.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:44.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:10:55.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:10:55.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:10:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 10, 15), -0.00257, 100.319, 0.0, 24.9667, 10.151, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:10:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:10:15
2026-04-12T09:10:56.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:10:57.117 [DEBUG] [Thread-186450] [transport.py] [_log()] starting thread (client mode): 0xae560850
2026-04-12T09:10:57.117 [DEBUG] [Thread-186450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:10:57.139 [DEBUG] [Thread-186450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:10:57.139 [INFO] [Thread-186450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] client lang: <none>
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] server lang: <none>
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] kex follows: False
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:10:57.141 [DEBUG] [Thread-186450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:10:57.142 [DEBUG] [Thread-186450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:10:57.142 [DEBUG] [Thread-186450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:10:57.142 [DEBUG] [Thread-186450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:10:57.142 [DEBUG] [Thread-186450] [transport.py] [_log()] Compression: none
2026-04-12T09:10:57.142 [DEBUG] [Thread-186450] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:10:57.161 [DEBUG] [Thread-186450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:10:57.162 [DEBUG] [Thread-186450] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:10:57.162 [DEBUG] [Thread-186450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:10:57.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:10:57.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:10:57.164 [DEBUG] [Thread-186450] [transport.py] [_log()] userauth is OK
2026-04-12T09:10:57.165 [DEBUG] [Thread-186450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:10:57.165 [DEBUG] [Thread-186450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:10:57.165 [DEBUG] [Thread-186450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:10:57.165 [DEBUG] [Thread-186450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:10:57.189 [INFO] [Thread-186450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:10:57.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:10:57.898 [DEBUG] [Thread-186450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:10:57.898 [DEBUG] [Thread-186450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:10:57.898 [DEBUG] [Thread-186450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:10:57.939 [DEBUG] [Thread-186450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:10:57.939 [DEBUG] [Thread-186450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:10:57.941 [DEBUG] [Thread-186450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:10:57.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:10:57.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:10:57.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:10:57.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:10:57.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:10:57.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:10:57.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:10:57.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:10:57.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:10:57.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.298375 -999.00  +10.30  21.59     97   +9.80 1 3 1 3 1   887    0 0.77 10.97 ----- 19.9 21.6 270.0 28.1 12.3 -7.9 12.0 -4.4 11.3 -7.6 12.0 -7.3
2026-04-12T09:10:57.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:10:57.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:10:57.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.298375
2026-04-12T09:10:57.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:10:57.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:10:57.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:10:57.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:10:57.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:10:57.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:10:15', tmtdew=-0.00257, humidity=100.319, cloud=0.0, wind=24.9667, temperature=10.151, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:09:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:10:57.968 [DEBUG] [Thread-186450] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:10:58.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:10:58.069 [DEBUG] [Thread-186453] [transport.py] [_log()] starting thread (client mode): 0xae5e53f0
2026-04-12T09:10:58.069 [DEBUG] [Thread-186453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:10:58.083 [DEBUG] [Thread-186453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:10:58.083 [INFO] [Thread-186453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] client lang: <none>
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] server lang: <none>
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] kex follows: False
2026-04-12T09:10:58.091 [DEBUG] [Thread-186453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:10:58.092 [DEBUG] [Thread-186453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:10:58.092 [DEBUG] [Thread-186453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:10:58.092 [DEBUG] [Thread-186453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:10:58.092 [DEBUG] [Thread-186453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:10:58.092 [DEBUG] [Thread-186453] [transport.py] [_log()] Compression: none
2026-04-12T09:10:58.092 [DEBUG] [Thread-186453] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:10:58.148 [DEBUG] [Thread-186453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:10:58.148 [DEBUG] [Thread-186453] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:10:58.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:10:58.149 [DEBUG] [Thread-186453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:10:58.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:10:58.206 [DEBUG] [Thread-186453] [transport.py] [_log()] userauth is OK
2026-04-12T09:10:58.207 [DEBUG] [Thread-186453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:10:58.207 [DEBUG] [Thread-186453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:10:58.207 [DEBUG] [Thread-186453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:10:58.207 [DEBUG] [Thread-186453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:10:58.225 [INFO] [Thread-186453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:10:58.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:10:58.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:10:58.450 [DEBUG] [Thread-186455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:10:59.030 [DEBUG] [Thread-186453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:10:59.030 [DEBUG] [Thread-186453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:10:59.079 [DEBUG] [Thread-186453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:10:59.079 [DEBUG] [Thread-186453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:10:59.088 [DEBUG] [Thread-186453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:10:59.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:10:59.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:10:59.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:10:59.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:10:59.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:10:59.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:10:59.125 [DEBUG] [Thread-186453] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:11:13.506 [DEBUG] [Thread-186456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:11:25.247 [DEBUG] [Thread-186457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:11:28.547 [DEBUG] [Thread-186458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:11:29.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:11:29.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:11:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:11:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 10, 51), -0.11014, 100.672, 0.0, 30.0974, 10.6352, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:11:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:10:51
2026-04-12T09:11:31.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:11:31.187 [DEBUG] [Thread-186459] [transport.py] [_log()] starting thread (client mode): 0xb0f55450
2026-04-12T09:11:31.187 [DEBUG] [Thread-186459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:11:31.208 [DEBUG] [Thread-186459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:11:31.208 [INFO] [Thread-186459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:11:31.211 [DEBUG] [Thread-186459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:11:31.211 [DEBUG] [Thread-186459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] client lang: <none>
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] server lang: <none>
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] kex follows: False
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:11:31.212 [DEBUG] [Thread-186459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:11:31.213 [DEBUG] [Thread-186459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:11:31.213 [DEBUG] [Thread-186459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:11:31.213 [DEBUG] [Thread-186459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:11:31.213 [DEBUG] [Thread-186459] [transport.py] [_log()] Compression: none
2026-04-12T09:11:31.213 [DEBUG] [Thread-186459] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:11:31.233 [DEBUG] [Thread-186459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:11:31.234 [DEBUG] [Thread-186459] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:11:31.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:11:31.235 [DEBUG] [Thread-186459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:11:31.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:11:31.237 [DEBUG] [Thread-186459] [transport.py] [_log()] userauth is OK
2026-04-12T09:11:31.238 [DEBUG] [Thread-186459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:11:31.238 [DEBUG] [Thread-186459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:11:31.238 [DEBUG] [Thread-186459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:11:31.238 [DEBUG] [Thread-186459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:11:31.263 [INFO] [Thread-186459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:11:31.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:11:31.829 [DEBUG] [Thread-186459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:11:31.829 [DEBUG] [Thread-186459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:11:31.830 [DEBUG] [Thread-186459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:11:31.870 [DEBUG] [Thread-186459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:11:31.870 [DEBUG] [Thread-186459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:11:31.873 [DEBUG] [Thread-186459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:11:31.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:11:31.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:11:31.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:11:31.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:11:31.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:11:31.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:11:31.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:11:31.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:11:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:11:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.299417 -999.00  +10.40  19.44     97   +9.90 1 3 1 3 1   887    0 0.70 8.55 ----- 26.1 19.4 282.4 21.5 12.4 -4.8 12.2 -9.6 11.6 -5.0 12.1 -3.6
2026-04-12T09:11:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:11:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:11:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.299417
2026-04-12T09:11:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:11:31.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:11:31.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:11:31.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:11:31.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:11:31.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:10:51', tmtdew=-0.11014, humidity=100.672, cloud=0.0, wind=30.0974, temperature=10.6352, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:11:09.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:11:31.894 [DEBUG] [Thread-186459] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:11:31.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:11:31.997 [DEBUG] [Thread-186462] [transport.py] [_log()] starting thread (client mode): 0xb0f6c6a0
2026-04-12T09:11:31.997 [DEBUG] [Thread-186462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:11:32.020 [DEBUG] [Thread-186462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:11:32.020 [INFO] [Thread-186462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:11:32.037 [DEBUG] [Thread-186462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:11:32.037 [DEBUG] [Thread-186462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:11:32.037 [DEBUG] [Thread-186462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:11:32.037 [DEBUG] [Thread-186462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] client lang: <none>
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] server lang: <none>
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] kex follows: False
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:11:32.038 [DEBUG] [Thread-186462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:11:32.039 [DEBUG] [Thread-186462] [transport.py] [_log()] Compression: none
2026-04-12T09:11:32.039 [DEBUG] [Thread-186462] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:11:32.110 [DEBUG] [Thread-186462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:11:32.110 [DEBUG] [Thread-186462] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:11:32.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:11:32.112 [DEBUG] [Thread-186462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:11:32.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:11:32.173 [DEBUG] [Thread-186462] [transport.py] [_log()] userauth is OK
2026-04-12T09:11:32.173 [DEBUG] [Thread-186462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:11:32.174 [DEBUG] [Thread-186462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:11:32.174 [DEBUG] [Thread-186462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:11:32.174 [DEBUG] [Thread-186462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:11:32.195 [INFO] [Thread-186462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:11:32.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:11:32.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:11:33.036 [DEBUG] [Thread-186462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:11:33.036 [DEBUG] [Thread-186462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:11:33.092 [DEBUG] [Thread-186462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:11:33.092 [DEBUG] [Thread-186462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:11:33.107 [DEBUG] [Thread-186462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:11:33.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:11:33.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:11:33.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:11:33.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:11:33.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:11:33.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:11:33.176 [DEBUG] [Thread-186462] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:11:43.584 [DEBUG] [Thread-186464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:11:44.873 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:11:44.874 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:11:58.636 [DEBUG] [Thread-186465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:12:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:12:03.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:12:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:12:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 11, 27), -0.002735, 100.319, 0.0, 27.5605, 10.2505, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:12:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:11:27
2026-04-12T09:12:04.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:12:05.154 [DEBUG] [Thread-186466] [transport.py] [_log()] starting thread (client mode): 0xae5e4400
2026-04-12T09:12:05.154 [DEBUG] [Thread-186466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:12:05.174 [DEBUG] [Thread-186466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:12:05.174 [INFO] [Thread-186466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] client lang: <none>
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] server lang: <none>
2026-04-12T09:12:05.178 [DEBUG] [Thread-186466] [transport.py] [_log()] kex follows: False
2026-04-12T09:12:05.179 [DEBUG] [Thread-186466] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:12:05.179 [DEBUG] [Thread-186466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:12:05.179 [DEBUG] [Thread-186466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:12:05.179 [DEBUG] [Thread-186466] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:12:05.179 [DEBUG] [Thread-186466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:12:05.179 [DEBUG] [Thread-186466] [transport.py] [_log()] Compression: none
2026-04-12T09:12:05.179 [DEBUG] [Thread-186466] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:12:05.195 [DEBUG] [Thread-186466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:12:05.196 [DEBUG] [Thread-186466] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:12:05.196 [DEBUG] [Thread-186466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:12:05.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:12:05.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:12:05.198 [DEBUG] [Thread-186466] [transport.py] [_log()] userauth is OK
2026-04-12T09:12:05.199 [DEBUG] [Thread-186466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:12:05.199 [DEBUG] [Thread-186466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:12:05.199 [DEBUG] [Thread-186466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:12:05.199 [DEBUG] [Thread-186466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:12:05.222 [INFO] [Thread-186466] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:12:05.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:12:05.805 [DEBUG] [Thread-186466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:12:05.805 [DEBUG] [Thread-186466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:12:05.806 [DEBUG] [Thread-186466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:12:05.846 [DEBUG] [Thread-186466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:12:05.846 [DEBUG] [Thread-186466] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:12:05.850 [DEBUG] [Thread-186466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:12:05.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:12:05.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:12:05.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:12:05.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:12:05.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:12:05.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:12:05.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:12:05.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:12:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:12:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.299764 -999.00  +10.20  24.04     96   +9.70 1 3 1 3 1   887    0 0.70 8.28 ----- 25.2 24.0 276.2 34.5 12.4 -9.5 12.1 -8.5 11.5 -8.9 12.1 -9.6
2026-04-12T09:12:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:12:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:12:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.299764
2026-04-12T09:12:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:12:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:12:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:12:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:12:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:12:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:11:27', tmtdew=-0.002735, humidity=100.319, cloud=0.0, wind=27.5605, temperature=10.2505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:11:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:12:05.877 [DEBUG] [Thread-186466] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:12:05.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:12:05.973 [DEBUG] [Thread-186469] [transport.py] [_log()] starting thread (client mode): 0xae562f50
2026-04-12T09:12:05.973 [DEBUG] [Thread-186469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:12:05.988 [DEBUG] [Thread-186469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:12:05.988 [INFO] [Thread-186469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:12:05.997 [DEBUG] [Thread-186469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:12:05.997 [DEBUG] [Thread-186469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:12:05.997 [DEBUG] [Thread-186469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:12:05.997 [DEBUG] [Thread-186469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:05.997 [DEBUG] [Thread-186469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:05.997 [DEBUG] [Thread-186469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] client lang: <none>
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] server lang: <none>
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] kex follows: False
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] Compression: none
2026-04-12T09:12:05.998 [DEBUG] [Thread-186469] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:12:06.061 [DEBUG] [Thread-186469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:12:06.061 [DEBUG] [Thread-186469] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:12:06.062 [DEBUG] [Thread-186469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:12:06.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:12:06.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:12:06.120 [DEBUG] [Thread-186469] [transport.py] [_log()] userauth is OK
2026-04-12T09:12:06.120 [DEBUG] [Thread-186469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:12:06.120 [DEBUG] [Thread-186469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:12:06.120 [DEBUG] [Thread-186469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:12:06.120 [DEBUG] [Thread-186469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:12:06.139 [INFO] [Thread-186469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:12:06.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:12:06.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:12:06.968 [DEBUG] [Thread-186469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:12:06.968 [DEBUG] [Thread-186469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:12:07.016 [DEBUG] [Thread-186469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:12:07.017 [DEBUG] [Thread-186469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:12:07.025 [DEBUG] [Thread-186469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:12:07.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:12:07.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:12:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:12:07.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:12:07.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:12:07.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:12:07.063 [DEBUG] [Thread-186469] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:12:13.677 [DEBUG] [Thread-186471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:12:25.280 [DEBUG] [Thread-186472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:12:28.739 [DEBUG] [Thread-186473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:12:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:12:37.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:12:37.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:12:38.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 12, 2), -0.005185, 100.336, 0.0, 25.6907, 10.2339, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:12:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:12:02
2026-04-12T09:12:38.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:12:38.945 [DEBUG] [Thread-186474] [transport.py] [_log()] starting thread (client mode): 0xae5608e0
2026-04-12T09:12:38.946 [DEBUG] [Thread-186474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:12:38.956 [DEBUG] [Thread-186474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:12:38.956 [INFO] [Thread-186474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] client lang: <none>
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] server lang: <none>
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] kex follows: False
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:12:38.958 [DEBUG] [Thread-186474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:12:38.959 [DEBUG] [Thread-186474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:12:38.959 [DEBUG] [Thread-186474] [transport.py] [_log()] Compression: none
2026-04-12T09:12:38.959 [DEBUG] [Thread-186474] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:12:38.971 [DEBUG] [Thread-186474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:12:38.971 [DEBUG] [Thread-186474] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:12:38.971 [DEBUG] [Thread-186474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:12:38.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:12:38.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:12:38.972 [DEBUG] [Thread-186474] [transport.py] [_log()] userauth is OK
2026-04-12T09:12:38.973 [DEBUG] [Thread-186474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:12:38.973 [DEBUG] [Thread-186474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:12:38.973 [DEBUG] [Thread-186474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:12:38.973 [DEBUG] [Thread-186474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:12:38.986 [INFO] [Thread-186474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:12:38.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:12:39.593 [DEBUG] [Thread-186474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:12:39.594 [DEBUG] [Thread-186474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:12:39.594 [DEBUG] [Thread-186474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:12:39.635 [DEBUG] [Thread-186474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:12:39.635 [DEBUG] [Thread-186474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:12:39.637 [DEBUG] [Thread-186474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:12:39.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:12:39.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:12:39.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:12:39.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:12:39.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:12:39.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:12:39.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:12:39.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:12:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:12:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.300111 -999.00  +10.20  26.52     97   +9.70 1 3 1 3 1   887    0 0.67 7.33 ----- 21.4 26.5 281.2 29.1 12.4 -9.9 12.2 -9.7 11.5 -9.0 12.1 -8.9
2026-04-12T09:12:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:12:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:12:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.300111
2026-04-12T09:12:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:12:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:12:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:12:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:12:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:12:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:12:02', tmtdew=-0.005185, humidity=100.336, cloud=0.0, wind=25.6907, temperature=10.2339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:12:09.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:12:39.662 [DEBUG] [Thread-186474] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:12:39.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:12:39.756 [DEBUG] [Thread-186477] [transport.py] [_log()] starting thread (client mode): 0xae5e7250
2026-04-12T09:12:39.756 [DEBUG] [Thread-186477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:12:39.770 [DEBUG] [Thread-186477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:12:39.770 [INFO] [Thread-186477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] client lang: <none>
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] server lang: <none>
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] kex follows: False
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:12:39.778 [DEBUG] [Thread-186477] [transport.py] [_log()] Compression: none
2026-04-12T09:12:39.779 [DEBUG] [Thread-186477] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:12:39.838 [DEBUG] [Thread-186477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:12:39.839 [DEBUG] [Thread-186477] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:12:39.839 [DEBUG] [Thread-186477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:12:39.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:12:39.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:12:39.896 [DEBUG] [Thread-186477] [transport.py] [_log()] userauth is OK
2026-04-12T09:12:39.896 [DEBUG] [Thread-186477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:12:39.896 [DEBUG] [Thread-186477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:12:39.896 [DEBUG] [Thread-186477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:12:39.896 [DEBUG] [Thread-186477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:12:39.921 [INFO] [Thread-186477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:12:39.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:12:39.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:12:40.747 [DEBUG] [Thread-186477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:12:40.748 [DEBUG] [Thread-186477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:12:40.796 [DEBUG] [Thread-186477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:12:40.796 [DEBUG] [Thread-186477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:12:40.805 [DEBUG] [Thread-186477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:12:40.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:12:40.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:12:40.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:12:40.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:12:40.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:12:40.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:12:40.840 [DEBUG] [Thread-186477] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:12:43.776 [DEBUG] [Thread-186479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:12:45.016 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:12:45.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:12:58.830 [DEBUG] [Thread-186480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:13:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:13:10.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:13:10.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:13:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 12, 38), -0.10045, 100.605, 0.0, 21.6655, 10.7679, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:13:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:12:38
2026-04-12T09:13:12.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:13:12.650 [DEBUG] [Thread-186481] [transport.py] [_log()] starting thread (client mode): 0xa796bfa0
2026-04-12T09:13:12.650 [DEBUG] [Thread-186481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:13:12.664 [DEBUG] [Thread-186481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:13:12.664 [INFO] [Thread-186481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] client lang: <none>
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] server lang: <none>
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] kex follows: False
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:13:12.666 [DEBUG] [Thread-186481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:13:12.667 [DEBUG] [Thread-186481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:13:12.667 [DEBUG] [Thread-186481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:13:12.667 [DEBUG] [Thread-186481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:13:12.667 [DEBUG] [Thread-186481] [transport.py] [_log()] Compression: none
2026-04-12T09:13:12.667 [DEBUG] [Thread-186481] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:13:12.681 [DEBUG] [Thread-186481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:13:12.682 [DEBUG] [Thread-186481] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:13:12.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:13:12.684 [DEBUG] [Thread-186481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:13:12.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:13:12.686 [DEBUG] [Thread-186481] [transport.py] [_log()] userauth is OK
2026-04-12T09:13:12.686 [DEBUG] [Thread-186481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:13:12.687 [DEBUG] [Thread-186481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:13:12.687 [DEBUG] [Thread-186481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:13:12.687 [DEBUG] [Thread-186481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:13:12.712 [INFO] [Thread-186481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:13:12.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:13:13.330 [DEBUG] [Thread-186481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:13:13.330 [DEBUG] [Thread-186481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:13:13.330 [DEBUG] [Thread-186481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:13:13.371 [DEBUG] [Thread-186481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:13:13.371 [DEBUG] [Thread-186481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:13:13.374 [DEBUG] [Thread-186481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:13:13.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:13:13.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:13:13.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:13:13.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:13:13.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:13:13.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:13:13.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:13:13.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:13:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:13:13.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.300458 -999.00  +10.20  26.69     96   +9.70 1 3 1 3 1   887    0 0.68 7.29 ----- 26.7 26.7 276.4 30.6 12.4 -10.5 12.1 -7.9 11.5 -9.9 12.1 -8.4
2026-04-12T09:13:13.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:13:13.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:13:13.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.300458
2026-04-12T09:13:13.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:13:13.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:13:13.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:13:13.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:13:13.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:13:13.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:12:38', tmtdew=-0.10045, humidity=100.605, cloud=0.0, wind=21.6655, temperature=10.7679, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:12:39.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:13:13.397 [DEBUG] [Thread-186481] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:13:13.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:13:13.492 [DEBUG] [Thread-186484] [transport.py] [_log()] starting thread (client mode): 0xae51ad40
2026-04-12T09:13:13.492 [DEBUG] [Thread-186484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:13:13.506 [DEBUG] [Thread-186484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:13:13.506 [INFO] [Thread-186484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:13.514 [DEBUG] [Thread-186484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] client lang: <none>
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] server lang: <none>
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] kex follows: False
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] Compression: none
2026-04-12T09:13:13.515 [DEBUG] [Thread-186484] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:13:13.571 [DEBUG] [Thread-186484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:13:13.572 [DEBUG] [Thread-186484] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:13:13.572 [DEBUG] [Thread-186484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:13:13.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:13:13.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:13:13.627 [DEBUG] [Thread-186484] [transport.py] [_log()] userauth is OK
2026-04-12T09:13:13.628 [DEBUG] [Thread-186484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:13:13.628 [DEBUG] [Thread-186484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:13:13.628 [DEBUG] [Thread-186484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:13:13.628 [DEBUG] [Thread-186484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:13:13.649 [INFO] [Thread-186484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:13:13.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:13:13.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:13:13.866 [DEBUG] [Thread-186486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:13:14.446 [DEBUG] [Thread-186484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:13:14.446 [DEBUG] [Thread-186484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:13:14.494 [DEBUG] [Thread-186484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:13:14.494 [DEBUG] [Thread-186484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:13:14.503 [DEBUG] [Thread-186484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:13:14.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:13:14.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:13:14.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:13:14.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:13:14.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:13:14.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:13:14.540 [DEBUG] [Thread-186484] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:13:25.314 [DEBUG] [Thread-186487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:13:28.921 [DEBUG] [Thread-186488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:13:43.962 [DEBUG] [Thread-186489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:13:44.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:13:44.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:13:44.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:13:45.161 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:13:45.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:13:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 13, 13), -0.00533, 100.336, 0.0, 25.4437, 10.3169, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:13:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:13:13
2026-04-12T09:13:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:13:46.498 [DEBUG] [Thread-186490] [transport.py] [_log()] starting thread (client mode): 0xa796b3a0
2026-04-12T09:13:46.498 [DEBUG] [Thread-186490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:13:46.518 [DEBUG] [Thread-186490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:13:46.518 [INFO] [Thread-186490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:13:46.521 [DEBUG] [Thread-186490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:13:46.521 [DEBUG] [Thread-186490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:13:46.521 [DEBUG] [Thread-186490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:13:46.521 [DEBUG] [Thread-186490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:46.521 [DEBUG] [Thread-186490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] client lang: <none>
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] server lang: <none>
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] kex follows: False
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] Compression: none
2026-04-12T09:13:46.522 [DEBUG] [Thread-186490] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:13:46.531 [DEBUG] [Thread-186490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:13:46.531 [DEBUG] [Thread-186490] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:13:46.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:13:46.532 [DEBUG] [Thread-186490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:13:46.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:13:46.534 [DEBUG] [Thread-186490] [transport.py] [_log()] userauth is OK
2026-04-12T09:13:46.534 [DEBUG] [Thread-186490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:13:46.534 [DEBUG] [Thread-186490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:13:46.534 [DEBUG] [Thread-186490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:13:46.534 [DEBUG] [Thread-186490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:13:46.552 [INFO] [Thread-186490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:13:46.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:13:47.202 [DEBUG] [Thread-186490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:13:47.202 [DEBUG] [Thread-186490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:13:47.202 [DEBUG] [Thread-186490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:13:47.243 [DEBUG] [Thread-186490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:13:47.243 [DEBUG] [Thread-186490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:13:47.247 [DEBUG] [Thread-186490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:13:47.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:13:47.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:13:47.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:13:47.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:13:47.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:13:47.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:13:47.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:13:47.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:13:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:13:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.301153 -999.00  +10.30  17.01     97   +9.80 1 3 1 3 1   887    0 0.65 6.46 ----- 20.9 17.0 267.9 25.2 12.5 -9.3 12.2 -6.2 11.5 -8.2 12.1 -7.7
2026-04-12T09:13:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:13:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:13:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.301153
2026-04-12T09:13:47.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:13:47.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:13:47.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:13:47.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:13:47.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:13:47.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:13:13', tmtdew=-0.00533, humidity=100.336, cloud=0.0, wind=25.4437, temperature=10.3169, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:13:39.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:13:47.274 [DEBUG] [Thread-186490] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:13:47.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:13:47.385 [DEBUG] [Thread-186493] [transport.py] [_log()] starting thread (client mode): 0xae5b23b0
2026-04-12T09:13:47.386 [DEBUG] [Thread-186493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:13:47.417 [DEBUG] [Thread-186493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:13:47.418 [INFO] [Thread-186493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:13:47.444 [DEBUG] [Thread-186493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:13:47.444 [DEBUG] [Thread-186493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:13:47.444 [DEBUG] [Thread-186493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:13:47.444 [DEBUG] [Thread-186493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] client lang: <none>
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] server lang: <none>
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] kex follows: False
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] Compression: none
2026-04-12T09:13:47.445 [DEBUG] [Thread-186493] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:13:47.527 [DEBUG] [Thread-186493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:13:47.527 [DEBUG] [Thread-186493] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:13:47.528 [DEBUG] [Thread-186493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:13:47.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:13:47.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:13:47.628 [DEBUG] [Thread-186493] [transport.py] [_log()] userauth is OK
2026-04-12T09:13:47.628 [DEBUG] [Thread-186493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:13:47.628 [DEBUG] [Thread-186493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:13:47.628 [DEBUG] [Thread-186493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:13:47.628 [DEBUG] [Thread-186493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:13:47.665 [INFO] [Thread-186493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:13:47.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:13:47.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:13:48.533 [DEBUG] [Thread-186493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:13:48.534 [DEBUG] [Thread-186493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:13:48.600 [DEBUG] [Thread-186493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:13:48.601 [DEBUG] [Thread-186493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:13:48.629 [DEBUG] [Thread-186493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:13:48.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:13:48.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:13:48.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:13:48.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:13:48.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:13:48.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:13:48.722 [DEBUG] [Thread-186493] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:13:58.997 [DEBUG] [Thread-186495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:14:14.056 [DEBUG] [Thread-186496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:14:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:14:18.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:14:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:14:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 13, 48), -0.10559, 100.639, 0.0, 26.6047, 10.8674, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:14:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:13:48
2026-04-12T09:14:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:14:20.540 [DEBUG] [Thread-186497] [transport.py] [_log()] starting thread (client mode): 0xae5e7e80
2026-04-12T09:14:20.540 [DEBUG] [Thread-186497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:14:20.561 [DEBUG] [Thread-186497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:14:20.561 [INFO] [Thread-186497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] client lang: <none>
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] server lang: <none>
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] kex follows: False
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:14:20.564 [DEBUG] [Thread-186497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:14:20.565 [DEBUG] [Thread-186497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:14:20.565 [DEBUG] [Thread-186497] [transport.py] [_log()] Compression: none
2026-04-12T09:14:20.565 [DEBUG] [Thread-186497] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:14:20.582 [DEBUG] [Thread-186497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:14:20.582 [DEBUG] [Thread-186497] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:14:20.583 [DEBUG] [Thread-186497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:14:20.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:14:20.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:14:20.585 [DEBUG] [Thread-186497] [transport.py] [_log()] userauth is OK
2026-04-12T09:14:20.586 [DEBUG] [Thread-186497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:14:20.586 [DEBUG] [Thread-186497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:14:20.586 [DEBUG] [Thread-186497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:14:20.586 [DEBUG] [Thread-186497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:14:20.609 [INFO] [Thread-186497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:14:20.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:14:21.267 [DEBUG] [Thread-186497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:14:21.267 [DEBUG] [Thread-186497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:14:21.268 [DEBUG] [Thread-186497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:14:21.308 [DEBUG] [Thread-186497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:14:21.308 [DEBUG] [Thread-186497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:14:21.311 [DEBUG] [Thread-186497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:14:21.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:14:21.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:14:21.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:14:21.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:14:21.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:14:21.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:14:21.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:14:21.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:14:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:14:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.301500 -999.00  +10.30  21.03     97   +9.80 1 3 1 3 1   887    0 0.65 6.09 ----- 20.8 21.0 274.0 26.9 12.6 -3.7 12.3 -3.2 11.6 -2.1 12.2 -2.4
2026-04-12T09:14:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:14:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:14:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.301500
2026-04-12T09:14:21.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:14:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:14:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:14:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:14:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:14:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:13:48', tmtdew=-0.10559, humidity=100.639, cloud=0.0, wind=26.6047, temperature=10.8674, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:14:09.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:14:21.336 [DEBUG] [Thread-186497] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:14:21.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:14:21.429 [DEBUG] [Thread-186500] [transport.py] [_log()] starting thread (client mode): 0xae5e53f0
2026-04-12T09:14:21.429 [DEBUG] [Thread-186500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:14:21.444 [DEBUG] [Thread-186500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:14:21.444 [INFO] [Thread-186500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] client lang: <none>
2026-04-12T09:14:21.451 [DEBUG] [Thread-186500] [transport.py] [_log()] server lang: <none>
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] kex follows: False
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] Compression: none
2026-04-12T09:14:21.452 [DEBUG] [Thread-186500] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:14:21.511 [DEBUG] [Thread-186500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:14:21.512 [DEBUG] [Thread-186500] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:14:21.512 [DEBUG] [Thread-186500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:14:21.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:14:21.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:14:21.568 [DEBUG] [Thread-186500] [transport.py] [_log()] userauth is OK
2026-04-12T09:14:21.568 [DEBUG] [Thread-186500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:14:21.568 [DEBUG] [Thread-186500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:14:21.568 [DEBUG] [Thread-186500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:14:21.568 [DEBUG] [Thread-186500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:14:21.588 [INFO] [Thread-186500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:14:21.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:14:21.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:14:22.393 [DEBUG] [Thread-186500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:14:22.393 [DEBUG] [Thread-186500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:14:22.441 [DEBUG] [Thread-186500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:14:22.441 [DEBUG] [Thread-186500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:14:22.450 [DEBUG] [Thread-186500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:14:22.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:14:22.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:14:22.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:14:22.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:14:22.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:14:22.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:14:22.485 [DEBUG] [Thread-186500] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:14:25.360 [DEBUG] [Thread-186502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:14:29.096 [DEBUG] [Thread-186503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:14:44.152 [DEBUG] [Thread-186504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:14:45.304 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:14:45.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:14:52.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:14:52.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:14:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:14:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 14, 24), -0.002735, 100.319, 0.0, 25.0196, 10.2505, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:14:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:14:24
2026-04-12T09:14:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:14:54.344 [DEBUG] [Thread-186505] [transport.py] [_log()] starting thread (client mode): 0xb0fb6260
2026-04-12T09:14:54.344 [DEBUG] [Thread-186505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:14:54.363 [DEBUG] [Thread-186505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:14:54.363 [INFO] [Thread-186505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:14:54.366 [DEBUG] [Thread-186505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] client lang: <none>
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] server lang: <none>
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] kex follows: False
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:14:54.367 [DEBUG] [Thread-186505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:14:54.368 [DEBUG] [Thread-186505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:14:54.368 [DEBUG] [Thread-186505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:14:54.368 [DEBUG] [Thread-186505] [transport.py] [_log()] Compression: none
2026-04-12T09:14:54.368 [DEBUG] [Thread-186505] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:14:54.386 [DEBUG] [Thread-186505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:14:54.387 [DEBUG] [Thread-186505] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:14:54.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:14:54.389 [DEBUG] [Thread-186505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:14:54.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:14:54.391 [DEBUG] [Thread-186505] [transport.py] [_log()] userauth is OK
2026-04-12T09:14:54.391 [DEBUG] [Thread-186505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:14:54.392 [DEBUG] [Thread-186505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:14:54.392 [DEBUG] [Thread-186505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:14:54.392 [DEBUG] [Thread-186505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:14:54.428 [INFO] [Thread-186505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:14:54.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:14:55.040 [DEBUG] [Thread-186505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:14:55.049 [DEBUG] [Thread-186505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:14:55.050 [DEBUG] [Thread-186505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:14:55.081 [DEBUG] [Thread-186505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:14:55.081 [DEBUG] [Thread-186505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:14:55.085 [DEBUG] [Thread-186505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:14:55.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:14:55.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:14:55.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:14:55.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:14:55.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:14:55.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:14:55.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:14:55.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:14:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:14:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.301847 -999.00  +10.40  21.29     97   +9.90 1 3 1 3 1   887    0 0.63 5.49 ----- 23.8 21.3 281.2 25.7 12.6 -4.0 12.3 -2.9 11.6 -3.5 12.2 -2.7
2026-04-12T09:14:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:14:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:14:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.301847
2026-04-12T09:14:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:14:55.109 [DEBUG] [Thread-186505] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:14:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:14:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:14:55.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:14:55.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:14:55.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:14:24', tmtdew=-0.002735, humidity=100.319, cloud=0.0, wind=25.0196, temperature=10.2505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:14:39.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:14:55.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:14:55.211 [DEBUG] [Thread-186508] [transport.py] [_log()] starting thread (client mode): 0xa796bfa0
2026-04-12T09:14:55.211 [DEBUG] [Thread-186508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:14:55.250 [DEBUG] [Thread-186508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:14:55.250 [INFO] [Thread-186508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:14:55.295 [DEBUG] [Thread-186508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:14:55.295 [DEBUG] [Thread-186508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:14:55.295 [DEBUG] [Thread-186508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:14:55.295 [DEBUG] [Thread-186508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:55.295 [DEBUG] [Thread-186508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:14:55.295 [DEBUG] [Thread-186508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:55.295 [DEBUG] [Thread-186508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] client lang: <none>
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] server lang: <none>
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] kex follows: False
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] Compression: none
2026-04-12T09:14:55.296 [DEBUG] [Thread-186508] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:14:55.369 [DEBUG] [Thread-186508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:14:55.369 [DEBUG] [Thread-186508] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:14:55.370 [DEBUG] [Thread-186508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:14:55.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:14:55.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:14:55.479 [DEBUG] [Thread-186508] [transport.py] [_log()] userauth is OK
2026-04-12T09:14:55.479 [DEBUG] [Thread-186508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:14:55.480 [DEBUG] [Thread-186508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:14:55.480 [DEBUG] [Thread-186508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:14:55.488 [DEBUG] [Thread-186508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:14:55.524 [INFO] [Thread-186508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:14:55.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:14:55.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:14:56.349 [DEBUG] [Thread-186508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:14:56.349 [DEBUG] [Thread-186508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:14:56.421 [DEBUG] [Thread-186508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:14:56.421 [DEBUG] [Thread-186508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:14:56.454 [DEBUG] [Thread-186508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:14:56.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:14:56.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:14:56.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:14:56.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:14:56.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:14:56.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:14:56.569 [DEBUG] [Thread-186508] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:14:59.191 [DEBUG] [Thread-186510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:15:14.250 [DEBUG] [Thread-186511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:15:25.389 [DEBUG] [Thread-186512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:15:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:15:26.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:15:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:15:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 14, 59), -0.062715, 100.386, 0.0, 23.0962, 10.2837, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:15:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:14:59
2026-04-12T09:15:28.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:15:28.463 [DEBUG] [Thread-186513] [transport.py] [_log()] starting thread (client mode): 0xae535fc0
2026-04-12T09:15:28.463 [DEBUG] [Thread-186513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:15:28.483 [DEBUG] [Thread-186513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:15:28.484 [INFO] [Thread-186513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:15:28.487 [DEBUG] [Thread-186513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] client lang: <none>
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] server lang: <none>
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] kex follows: False
2026-04-12T09:15:28.488 [DEBUG] [Thread-186513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:15:28.489 [DEBUG] [Thread-186513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:15:28.489 [DEBUG] [Thread-186513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:15:28.489 [DEBUG] [Thread-186513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:15:28.489 [DEBUG] [Thread-186513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:15:28.489 [DEBUG] [Thread-186513] [transport.py] [_log()] Compression: none
2026-04-12T09:15:28.489 [DEBUG] [Thread-186513] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:15:28.499 [DEBUG] [Thread-186513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:15:28.500 [DEBUG] [Thread-186513] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:15:28.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:15:28.502 [DEBUG] [Thread-186513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:15:28.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:15:28.504 [DEBUG] [Thread-186513] [transport.py] [_log()] userauth is OK
2026-04-12T09:15:28.504 [DEBUG] [Thread-186513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:15:28.505 [DEBUG] [Thread-186513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:15:28.505 [DEBUG] [Thread-186513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:15:28.505 [DEBUG] [Thread-186513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:15:28.540 [INFO] [Thread-186513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:15:28.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:15:29.288 [DEBUG] [Thread-186515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:15:34.501 [DEBUG] [Thread-186513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:15:34.501 [DEBUG] [Thread-186513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:15:34.501 [DEBUG] [Thread-186513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:15:34.542 [DEBUG] [Thread-186513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:15:34.542 [DEBUG] [Thread-186513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:15:34.545 [DEBUG] [Thread-186513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:15:34.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:15:34.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:15:34.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:15:34.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:15:34.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:15:34.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:15:34.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:15:34.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:15:34.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:15:34.709 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T09:15:34.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:14:59', tmtdew=-0.062715, humidity=100.386, cloud=0.0, wind=23.0962, temperature=10.2837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:15:34.712 [DEBUG] [Thread-186513] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:15:34.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:15:34.791 [DEBUG] [Thread-186517] [transport.py] [_log()] starting thread (client mode): 0xae51bbe0
2026-04-12T09:15:34.791 [DEBUG] [Thread-186517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:15:34.808 [DEBUG] [Thread-186517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:15:34.808 [INFO] [Thread-186517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] client lang: <none>
2026-04-12T09:15:34.815 [DEBUG] [Thread-186517] [transport.py] [_log()] server lang: <none>
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] kex follows: False
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] Compression: none
2026-04-12T09:15:34.816 [DEBUG] [Thread-186517] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:15:34.875 [DEBUG] [Thread-186517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:15:34.876 [DEBUG] [Thread-186517] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:15:34.876 [DEBUG] [Thread-186517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:15:34.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:15:34.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:15:34.931 [DEBUG] [Thread-186517] [transport.py] [_log()] userauth is OK
2026-04-12T09:15:34.932 [DEBUG] [Thread-186517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:15:34.932 [DEBUG] [Thread-186517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:15:34.932 [DEBUG] [Thread-186517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:15:34.932 [DEBUG] [Thread-186517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:15:34.951 [INFO] [Thread-186517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:15:34.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:15:34.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:15:35.767 [DEBUG] [Thread-186517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:15:35.767 [DEBUG] [Thread-186517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:15:35.815 [DEBUG] [Thread-186517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:15:35.815 [DEBUG] [Thread-186517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:15:35.824 [DEBUG] [Thread-186517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:15:35.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:15:35.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:15:35.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:15:35.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:15:35.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:15:35.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:15:35.856 [DEBUG] [Thread-186517] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:15:44.325 [DEBUG] [Thread-186519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:15:45.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:15:45.455 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:15:59.376 [DEBUG] [Thread-186520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:16:05.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:16:05.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:16:05.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:16:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 15, 35), -0.10547, 100.639, 0.0, 24.241, 10.8011, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:16:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:15:35
2026-04-12T09:16:07.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:16:07.696 [DEBUG] [Thread-186521] [transport.py] [_log()] starting thread (client mode): 0xb0f41de0
2026-04-12T09:16:07.697 [DEBUG] [Thread-186521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:16:07.717 [DEBUG] [Thread-186521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:16:07.717 [INFO] [Thread-186521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:16:07.720 [DEBUG] [Thread-186521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:16:07.720 [DEBUG] [Thread-186521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:16:07.720 [DEBUG] [Thread-186521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] client lang: <none>
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] server lang: <none>
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] kex follows: False
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:16:07.721 [DEBUG] [Thread-186521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:16:07.722 [DEBUG] [Thread-186521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:16:07.722 [DEBUG] [Thread-186521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:16:07.722 [DEBUG] [Thread-186521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:16:07.722 [DEBUG] [Thread-186521] [transport.py] [_log()] Compression: none
2026-04-12T09:16:07.722 [DEBUG] [Thread-186521] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:16:07.737 [DEBUG] [Thread-186521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:16:07.738 [DEBUG] [Thread-186521] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:16:07.738 [DEBUG] [Thread-186521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:16:07.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:16:07.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:16:07.739 [DEBUG] [Thread-186521] [transport.py] [_log()] userauth is OK
2026-04-12T09:16:07.739 [DEBUG] [Thread-186521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:16:07.739 [DEBUG] [Thread-186521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:16:07.739 [DEBUG] [Thread-186521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:16:07.739 [DEBUG] [Thread-186521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:16:07.756 [INFO] [Thread-186521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:16:07.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:16:08.496 [DEBUG] [Thread-186521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:16:08.496 [DEBUG] [Thread-186521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:16:08.497 [DEBUG] [Thread-186521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:16:08.537 [DEBUG] [Thread-186521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:16:08.537 [DEBUG] [Thread-186521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:16:08.541 [DEBUG] [Thread-186521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:16:08.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:16:08.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:16:08.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:16:08.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:16:08.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:16:08.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:16:08.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:16:08.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:16:08.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:16:08.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.302194 -999.00  +10.40  17.29     97  +10.00 1 3 1 3 1   887    0 0.61 5.17 ----- 17.5 17.3 275.0 23.9 12.7 -4.0 12.3 -4.3 11.7 -3.5 12.2 -2.6
2026-04-12T09:16:08.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:16:08.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:16:08.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.302194
2026-04-12T09:16:08.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:16:08.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:16:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:16:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:16:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:16:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:15:35', tmtdew=-0.10547, humidity=100.639, cloud=0.0, wind=24.241, temperature=10.8011, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:15:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:16:08.580 [DEBUG] [Thread-186521] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:16:08.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:16:08.677 [DEBUG] [Thread-186524] [transport.py] [_log()] starting thread (client mode): 0xae515270
2026-04-12T09:16:08.677 [DEBUG] [Thread-186524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:16:08.692 [DEBUG] [Thread-186524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:16:08.692 [INFO] [Thread-186524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:16:08.700 [DEBUG] [Thread-186524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] client lang: <none>
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] server lang: <none>
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] kex follows: False
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] Compression: none
2026-04-12T09:16:08.701 [DEBUG] [Thread-186524] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:16:08.764 [DEBUG] [Thread-186524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:16:08.765 [DEBUG] [Thread-186524] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:16:08.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:16:08.766 [DEBUG] [Thread-186524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:16:08.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:16:08.823 [DEBUG] [Thread-186524] [transport.py] [_log()] userauth is OK
2026-04-12T09:16:08.823 [DEBUG] [Thread-186524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:16:08.824 [DEBUG] [Thread-186524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:16:08.824 [DEBUG] [Thread-186524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:16:08.824 [DEBUG] [Thread-186524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:16:08.842 [INFO] [Thread-186524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:16:08.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:16:08.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:16:09.648 [DEBUG] [Thread-186524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:16:09.649 [DEBUG] [Thread-186524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:16:09.697 [DEBUG] [Thread-186524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:16:09.697 [DEBUG] [Thread-186524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:16:09.707 [DEBUG] [Thread-186524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:16:09.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:16:09.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:16:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:16:09.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:16:09.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:16:09.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:16:09.744 [DEBUG] [Thread-186524] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:16:14.413 [DEBUG] [Thread-186526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:16:25.422 [DEBUG] [Thread-186527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:16:29.457 [DEBUG] [Thread-186528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:16:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:16:39.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:16:39.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:16:41.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 16, 10), -0.007935, 100.352, 0.0, 24.2971, 10.3832, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:16:41.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:16:10
2026-04-12T09:16:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:16:41.637 [DEBUG] [Thread-186529] [transport.py] [_log()] starting thread (client mode): 0xb0f42d40
2026-04-12T09:16:41.638 [DEBUG] [Thread-186529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:16:41.647 [DEBUG] [Thread-186529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:16:41.647 [INFO] [Thread-186529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] client lang: <none>
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] server lang: <none>
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] kex follows: False
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] Compression: none
2026-04-12T09:16:41.649 [DEBUG] [Thread-186529] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:16:41.659 [DEBUG] [Thread-186529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:16:41.660 [DEBUG] [Thread-186529] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:16:41.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:16:41.660 [DEBUG] [Thread-186529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:16:41.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:16:41.661 [DEBUG] [Thread-186529] [transport.py] [_log()] userauth is OK
2026-04-12T09:16:41.662 [DEBUG] [Thread-186529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:16:41.662 [DEBUG] [Thread-186529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:16:41.662 [DEBUG] [Thread-186529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:16:41.662 [DEBUG] [Thread-186529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:16:41.676 [INFO] [Thread-186529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:16:41.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:16:42.355 [DEBUG] [Thread-186529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:16:42.355 [DEBUG] [Thread-186529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:16:42.355 [DEBUG] [Thread-186529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:16:42.396 [DEBUG] [Thread-186529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:16:42.396 [DEBUG] [Thread-186529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:16:42.400 [DEBUG] [Thread-186529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:16:42.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:16:42.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:16:42.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:16:42.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:16:42.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:16:42.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:16:42.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:16:42.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:16:42.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:16:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.302889 -999.00  +10.30  21.05     97   +9.80 1 3 1 3 1   887    0 0.58 3.99 ----- 18.3 21.1 279.8 32.5 12.7 -3.7 12.3 -5.9 11.7 -3.2 12.3 -2.6
2026-04-12T09:16:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:16:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:16:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.302889
2026-04-12T09:16:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:16:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:16:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:16:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:16:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:16:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:16:10', tmtdew=-0.007935, humidity=100.352, cloud=0.0, wind=24.2971, temperature=10.3832, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:16:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:16:42.428 [DEBUG] [Thread-186529] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:16:42.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:16:42.546 [DEBUG] [Thread-186532] [transport.py] [_log()] starting thread (client mode): 0xb0f430d0
2026-04-12T09:16:42.546 [DEBUG] [Thread-186532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:16:42.585 [DEBUG] [Thread-186532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:16:42.585 [INFO] [Thread-186532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] client lang: <none>
2026-04-12T09:16:42.617 [DEBUG] [Thread-186532] [transport.py] [_log()] server lang: <none>
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] kex follows: False
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] Compression: none
2026-04-12T09:16:42.618 [DEBUG] [Thread-186532] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:16:42.700 [DEBUG] [Thread-186532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:16:42.701 [DEBUG] [Thread-186532] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:16:42.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:16:42.702 [DEBUG] [Thread-186532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:16:42.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:16:42.789 [DEBUG] [Thread-186532] [transport.py] [_log()] userauth is OK
2026-04-12T09:16:42.790 [DEBUG] [Thread-186532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:16:42.790 [DEBUG] [Thread-186532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:16:42.790 [DEBUG] [Thread-186532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:16:42.790 [DEBUG] [Thread-186532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:16:42.834 [INFO] [Thread-186532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:16:42.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:16:42.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:16:43.682 [DEBUG] [Thread-186532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:16:43.682 [DEBUG] [Thread-186532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:16:43.732 [DEBUG] [Thread-186532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:16:43.733 [DEBUG] [Thread-186532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:16:43.744 [DEBUG] [Thread-186532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:16:43.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:16:43.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:16:43.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:16:43.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:16:43.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:16:43.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:16:43.788 [DEBUG] [Thread-186532] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:16:44.491 [DEBUG] [Thread-186534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:16:45.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:16:45.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:16:59.544 [DEBUG] [Thread-186535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:17:13.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:17:13.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:17:13.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:17:14.579 [DEBUG] [Thread-186536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:17:15.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 16, 46), -0.10587, 100.639, 0.0, 22.4064, 11.0332, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:17:15.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:16:46
2026-04-12T09:17:15.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:17:15.647 [DEBUG] [Thread-186537] [transport.py] [_log()] starting thread (client mode): 0xb0f427a0
2026-04-12T09:17:15.647 [DEBUG] [Thread-186537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:17:15.667 [DEBUG] [Thread-186537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:17:15.667 [INFO] [Thread-186537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:17:15.669 [DEBUG] [Thread-186537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] client lang: <none>
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] server lang: <none>
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] kex follows: False
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] Compression: none
2026-04-12T09:17:15.670 [DEBUG] [Thread-186537] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:17:15.679 [DEBUG] [Thread-186537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:17:15.679 [DEBUG] [Thread-186537] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:17:15.679 [DEBUG] [Thread-186537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:17:15.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:17:15.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:17:15.681 [DEBUG] [Thread-186537] [transport.py] [_log()] userauth is OK
2026-04-12T09:17:15.681 [DEBUG] [Thread-186537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:17:15.681 [DEBUG] [Thread-186537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:17:15.681 [DEBUG] [Thread-186537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:17:15.681 [DEBUG] [Thread-186537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:17:15.709 [INFO] [Thread-186537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:17:15.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:17:16.278 [DEBUG] [Thread-186537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:17:16.279 [DEBUG] [Thread-186537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:17:16.279 [DEBUG] [Thread-186537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:17:16.320 [DEBUG] [Thread-186537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:17:16.320 [DEBUG] [Thread-186537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:17:16.324 [DEBUG] [Thread-186537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:17:16.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:17:16.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:17:16.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:17:16.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:17:16.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:17:16.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:17:16.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:17:16.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:17:16.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:17:16.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.303583 -999.00  +10.20  21.79     96   +9.80 1 3 1 3 1   887    0 0.57 3.13 ----- 18.0 21.8 271.8 31.7 12.7 -7.4 12.4 -8.4 11.7 -7.5 12.3 -5.7
2026-04-12T09:17:16.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:17:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:17:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.303583
2026-04-12T09:17:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:17:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:17:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:17:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:17:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:17:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:16:46', tmtdew=-0.10587, humidity=100.639, cloud=0.0, wind=22.4064, temperature=11.0332, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:17:09.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:17:16.351 [DEBUG] [Thread-186537] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:17:16.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:17:16.471 [DEBUG] [Thread-186540] [transport.py] [_log()] starting thread (client mode): 0xae5b7fd0
2026-04-12T09:17:16.471 [DEBUG] [Thread-186540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:17:16.507 [DEBUG] [Thread-186540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:17:16.508 [INFO] [Thread-186540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:17:16.541 [DEBUG] [Thread-186540] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:17:16.542 [DEBUG] [Thread-186540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:17:16.542 [DEBUG] [Thread-186540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:17:16.542 [DEBUG] [Thread-186540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:16.542 [DEBUG] [Thread-186540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:16.542 [DEBUG] [Thread-186540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:16.542 [DEBUG] [Thread-186540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] client lang: <none>
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] server lang: <none>
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] kex follows: False
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] Compression: none
2026-04-12T09:17:16.543 [DEBUG] [Thread-186540] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:17:16.631 [DEBUG] [Thread-186540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:17:16.631 [DEBUG] [Thread-186540] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:17:16.632 [DEBUG] [Thread-186540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:17:16.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:17:16.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:17:16.742 [DEBUG] [Thread-186540] [transport.py] [_log()] userauth is OK
2026-04-12T09:17:16.743 [DEBUG] [Thread-186540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:17:16.743 [DEBUG] [Thread-186540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:17:16.743 [DEBUG] [Thread-186540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:17:16.743 [DEBUG] [Thread-186540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:17:16.788 [INFO] [Thread-186540] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:17:16.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:17:16.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:17:17.620 [DEBUG] [Thread-186540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:17:17.621 [DEBUG] [Thread-186540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:17:17.697 [DEBUG] [Thread-186540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:17:17.697 [DEBUG] [Thread-186540] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:17:17.733 [DEBUG] [Thread-186540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:17:17.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:17: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')
2026-04-12T09:17:17.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:17:17.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:17:17.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:17:17.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:17:17.855 [DEBUG] [Thread-186540] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:17:25.456 [DEBUG] [Thread-186542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:17:29.618 [DEBUG] [Thread-186543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:17:44.675 [DEBUG] [Thread-186544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:17:45.738 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:17:45.739 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:17:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:17:47.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:17:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:17:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 17, 22), -0.06051, 100.369, 0.0, 21.4916, 10.433, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:17:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:17:22
2026-04-12T09:17:49.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:17:49.769 [DEBUG] [Thread-186545] [transport.py] [_log()] starting thread (client mode): 0xae51a950
2026-04-12T09:17:49.769 [DEBUG] [Thread-186545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:17:49.789 [DEBUG] [Thread-186545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:17:49.789 [INFO] [Thread-186545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] client lang: <none>
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] server lang: <none>
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] kex follows: False
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] Compression: none
2026-04-12T09:17:49.792 [DEBUG] [Thread-186545] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:17:49.804 [DEBUG] [Thread-186545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:17:49.805 [DEBUG] [Thread-186545] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:17:49.805 [DEBUG] [Thread-186545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:17:49.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:17:49.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:17:49.806 [DEBUG] [Thread-186545] [transport.py] [_log()] userauth is OK
2026-04-12T09:17:49.807 [DEBUG] [Thread-186545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:17:49.807 [DEBUG] [Thread-186545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:17:49.807 [DEBUG] [Thread-186545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:17:49.807 [DEBUG] [Thread-186545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:17:49.830 [INFO] [Thread-186545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:17:49.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:17:50.448 [DEBUG] [Thread-186545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:17:50.448 [DEBUG] [Thread-186545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:17:50.448 [DEBUG] [Thread-186545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:17:50.490 [DEBUG] [Thread-186545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:17:50.490 [DEBUG] [Thread-186545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:17:50.493 [DEBUG] [Thread-186545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:17:50.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:17:50.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:17:50.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:17:50.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:17:50.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:17:50.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:17:50.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:17:50.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:17:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:17:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.303931 -999.00  +10.40  15.94     97   +9.90 1 3 1 3 1   887    0 0.56 2.80 ----- 20.9 15.9 280.2 22.5 12.7 -7.8 12.5 -4.5 11.8 -5.8 12.4 -5.3
2026-04-12T09:17:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:17:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:17:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.303931
2026-04-12T09:17:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:17:50.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:17:50.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:17:50.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:17:50.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:17:50.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:17:22', tmtdew=-0.06051, humidity=100.369, cloud=0.0, wind=21.4916, temperature=10.433, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:17:39.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:17:50.518 [DEBUG] [Thread-186545] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:17:50.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:17:50.610 [DEBUG] [Thread-186548] [transport.py] [_log()] starting thread (client mode): 0xae51a200
2026-04-12T09:17:50.610 [DEBUG] [Thread-186548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:17:50.625 [DEBUG] [Thread-186548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:17:50.625 [INFO] [Thread-186548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] client lang: <none>
2026-04-12T09:17:50.633 [DEBUG] [Thread-186548] [transport.py] [_log()] server lang: <none>
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] kex follows: False
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] Compression: none
2026-04-12T09:17:50.634 [DEBUG] [Thread-186548] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:17:50.691 [DEBUG] [Thread-186548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:17:50.692 [DEBUG] [Thread-186548] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:17:50.693 [DEBUG] [Thread-186548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:17:50.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:17:50.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:17:50.747 [DEBUG] [Thread-186548] [transport.py] [_log()] userauth is OK
2026-04-12T09:17:50.748 [DEBUG] [Thread-186548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:17:50.748 [DEBUG] [Thread-186548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:17:50.748 [DEBUG] [Thread-186548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:17:50.748 [DEBUG] [Thread-186548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:17:50.767 [INFO] [Thread-186548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:17:50.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:17:50.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:17:51.612 [DEBUG] [Thread-186548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:17:51.612 [DEBUG] [Thread-186548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:17:51.661 [DEBUG] [Thread-186548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:17:51.661 [DEBUG] [Thread-186548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:17:51.670 [DEBUG] [Thread-186548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:17:51.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:17:51.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:17:51.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
2026-04-12T09:17:51.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:17:51.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:17:51.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:17:51.710 [DEBUG] [Thread-186548] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:17:59.712 [DEBUG] [Thread-186550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:18:14.767 [DEBUG] [Thread-186551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:18:21.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:18:21.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:18:21.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:18:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 17, 57), -0.04794, 100.286, 0.0, 24.9145, 10.3, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:18:23.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:17:57
2026-04-12T09:18:23.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:18:23.580 [DEBUG] [Thread-186552] [transport.py] [_log()] starting thread (client mode): 0xae5b4cd0
2026-04-12T09:18:23.580 [DEBUG] [Thread-186552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:18:23.601 [DEBUG] [Thread-186552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:18:23.601 [INFO] [Thread-186552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:18:23.604 [DEBUG] [Thread-186552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] client lang: <none>
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] server lang: <none>
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] kex follows: False
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:18:23.605 [DEBUG] [Thread-186552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:18:23.606 [DEBUG] [Thread-186552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:18:23.606 [DEBUG] [Thread-186552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:18:23.606 [DEBUG] [Thread-186552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:18:23.606 [DEBUG] [Thread-186552] [transport.py] [_log()] Compression: none
2026-04-12T09:18:23.606 [DEBUG] [Thread-186552] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:18:23.615 [DEBUG] [Thread-186552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:18:23.616 [DEBUG] [Thread-186552] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:18:23.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:18:23.617 [DEBUG] [Thread-186552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:18:23.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:18:23.618 [DEBUG] [Thread-186552] [transport.py] [_log()] userauth is OK
2026-04-12T09:18:23.618 [DEBUG] [Thread-186552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:18:23.618 [DEBUG] [Thread-186552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:18:23.619 [DEBUG] [Thread-186552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:18:23.619 [DEBUG] [Thread-186552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:18:23.642 [INFO] [Thread-186552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:18:23.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:18:24.271 [DEBUG] [Thread-186552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:18:24.271 [DEBUG] [Thread-186552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:18:24.272 [DEBUG] [Thread-186552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:18:24.312 [DEBUG] [Thread-186552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:18:24.312 [DEBUG] [Thread-186552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:18:24.315 [DEBUG] [Thread-186552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:18:24.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:18:24.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:18:24.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:18:24.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:18:24.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:18:24.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:18:24.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:18:24.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:18:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:18:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.304278 -999.00  +10.30  23.36     96   +9.80 1 3 1 3 1   887    0 0.54 2.02 ----- 23.5 23.4 271.0 30.1 12.9 -3.5 12.5 -3.1 11.8 -2.8 12.5 -2.2
2026-04-12T09:18:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:18:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:18:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.304278
2026-04-12T09:18:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:18:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:18:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:18:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:18:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:18:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:17:57', tmtdew=-0.04794, humidity=100.286, cloud=0.0, wind=24.9145, temperature=10.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:18:09.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:18:24.343 [DEBUG] [Thread-186552] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:18:24.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:18:24.436 [DEBUG] [Thread-186555] [transport.py] [_log()] starting thread (client mode): 0xb0f41300
2026-04-12T09:18:24.436 [DEBUG] [Thread-186555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:18:24.450 [DEBUG] [Thread-186555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:18:24.450 [INFO] [Thread-186555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:18:24.457 [DEBUG] [Thread-186555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] client lang: <none>
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] server lang: <none>
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] kex follows: False
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:18:24.458 [DEBUG] [Thread-186555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:18:24.459 [DEBUG] [Thread-186555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:18:24.459 [DEBUG] [Thread-186555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:18:24.459 [DEBUG] [Thread-186555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:18:24.459 [DEBUG] [Thread-186555] [transport.py] [_log()] Compression: none
2026-04-12T09:18:24.459 [DEBUG] [Thread-186555] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:18:24.514 [DEBUG] [Thread-186555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:18:24.515 [DEBUG] [Thread-186555] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:18:24.515 [DEBUG] [Thread-186555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:18:24.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:18:24.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:18:24.571 [DEBUG] [Thread-186555] [transport.py] [_log()] userauth is OK
2026-04-12T09:18:24.572 [DEBUG] [Thread-186555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:18:24.572 [DEBUG] [Thread-186555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:18:24.572 [DEBUG] [Thread-186555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:18:24.572 [DEBUG] [Thread-186555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:18:24.591 [INFO] [Thread-186555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:18:24.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:18:24.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:18:25.397 [DEBUG] [Thread-186555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:18:25.398 [DEBUG] [Thread-186555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:18:25.445 [DEBUG] [Thread-186555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:18:25.446 [DEBUG] [Thread-186555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:18:25.455 [DEBUG] [Thread-186555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:18:25.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:18:25.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:18: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
2026-04-12T09:18:25.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:18:25.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:18:25.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:18:25.489 [DEBUG] [Thread-186555] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:18:25.491 [DEBUG] [Thread-186557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:18:29.805 [DEBUG] [Thread-186558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:18:44.859 [DEBUG] [Thread-186559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:18:45.882 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:18:45.883 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:18:55.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:18:55.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:18:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:18:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 18, 33), -0.11575, 100.705, 0.0, 27.5926, 11.0001, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:18:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:18:33
2026-04-12T09:18:57.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:18:57.352 [DEBUG] [Thread-186560] [transport.py] [_log()] starting thread (client mode): 0xae5e6500
2026-04-12T09:18:57.352 [DEBUG] [Thread-186560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:18:57.370 [DEBUG] [Thread-186560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:18:57.370 [INFO] [Thread-186560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:18:57.372 [DEBUG] [Thread-186560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] client lang: <none>
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] server lang: <none>
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] kex follows: False
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:18:57.373 [DEBUG] [Thread-186560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:18:57.374 [DEBUG] [Thread-186560] [transport.py] [_log()] Compression: none
2026-04-12T09:18:57.374 [DEBUG] [Thread-186560] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:18:57.393 [DEBUG] [Thread-186560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:18:57.394 [DEBUG] [Thread-186560] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:18:57.394 [DEBUG] [Thread-186560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:18:57.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:18:57.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:18:57.396 [DEBUG] [Thread-186560] [transport.py] [_log()] userauth is OK
2026-04-12T09:18:57.396 [DEBUG] [Thread-186560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:18:57.396 [DEBUG] [Thread-186560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:18:57.397 [DEBUG] [Thread-186560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:18:57.397 [DEBUG] [Thread-186560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:18:57.419 [INFO] [Thread-186560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:18:57.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:18:58.010 [DEBUG] [Thread-186560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:18:58.010 [DEBUG] [Thread-186560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:18:58.011 [DEBUG] [Thread-186560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:18:58.051 [DEBUG] [Thread-186560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:18:58.051 [DEBUG] [Thread-186560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:18:58.053 [DEBUG] [Thread-186560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:18:58.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:18:58.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:18:58.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:18:58.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:18:58.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:18:58.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:18:58.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:18:58.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:18:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:18:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.304625 -999.00  +10.30  21.51     96   +9.80 1 3 1 3 1   887    0 0.53 1.66 ----- 20.5 21.5 279.2 26.7 12.8 -3.6 12.4 -4.5 11.8 -3.3 12.4 -2.2
2026-04-12T09:18:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:18:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:18:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.304625
2026-04-12T09:18:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:18:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:18:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:18:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:18:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:18:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:18:33', tmtdew=-0.11575, humidity=100.705, cloud=0.0, wind=27.5926, temperature=11.0001, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:18:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:18:58.078 [DEBUG] [Thread-186560] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:18:58.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:18:58.172 [DEBUG] [Thread-186563] [transport.py] [_log()] starting thread (client mode): 0xb0fb6d10
2026-04-12T09:18:58.172 [DEBUG] [Thread-186563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:18:58.186 [DEBUG] [Thread-186563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:18:58.186 [INFO] [Thread-186563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] client lang: <none>
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] server lang: <none>
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] kex follows: False
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:18:58.194 [DEBUG] [Thread-186563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:18:58.195 [DEBUG] [Thread-186563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:18:58.195 [DEBUG] [Thread-186563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:18:58.195 [DEBUG] [Thread-186563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:18:58.195 [DEBUG] [Thread-186563] [transport.py] [_log()] Compression: none
2026-04-12T09:18:58.195 [DEBUG] [Thread-186563] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:18:58.251 [DEBUG] [Thread-186563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:18:58.251 [DEBUG] [Thread-186563] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:18:58.252 [DEBUG] [Thread-186563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:18:58.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:18:58.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:18:58.307 [DEBUG] [Thread-186563] [transport.py] [_log()] userauth is OK
2026-04-12T09:18:58.307 [DEBUG] [Thread-186563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:18:58.308 [DEBUG] [Thread-186563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:18:58.308 [DEBUG] [Thread-186563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:18:58.308 [DEBUG] [Thread-186563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:18:58.327 [INFO] [Thread-186563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:18:58.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:18:58.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:18:59.152 [DEBUG] [Thread-186563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:18:59.152 [DEBUG] [Thread-186563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:18:59.201 [DEBUG] [Thread-186563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:18:59.201 [DEBUG] [Thread-186563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:18:59.210 [DEBUG] [Thread-186563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:18:59.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:18:59.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:18:59.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:18:59.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:18:59.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:18:59.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:18:59.252 [DEBUG] [Thread-186563] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:18:59.893 [DEBUG] [Thread-186565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:19:14.946 [DEBUG] [Thread-186566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:19:25.529 [DEBUG] [Thread-186567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:19:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:19:29.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:19:29.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:19:29.987 [DEBUG] [Thread-186568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:19:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 19, 8), -0.005215, 100.336, 0.0, 28.9372, 10.2505, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:19:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:19:08
2026-04-12T09:19:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:19:31.072 [DEBUG] [Thread-186569] [transport.py] [_log()] starting thread (client mode): 0xae5152d0
2026-04-12T09:19:31.073 [DEBUG] [Thread-186569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:19:31.092 [DEBUG] [Thread-186569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:19:31.093 [INFO] [Thread-186569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] client lang: <none>
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] server lang: <none>
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] kex follows: False
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:19:31.096 [DEBUG] [Thread-186569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:19:31.097 [DEBUG] [Thread-186569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:19:31.097 [DEBUG] [Thread-186569] [transport.py] [_log()] Compression: none
2026-04-12T09:19:31.097 [DEBUG] [Thread-186569] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:19:31.116 [DEBUG] [Thread-186569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:19:31.117 [DEBUG] [Thread-186569] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:19:31.117 [DEBUG] [Thread-186569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:19:31.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:19:31.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:19:31.119 [DEBUG] [Thread-186569] [transport.py] [_log()] userauth is OK
2026-04-12T09:19:31.120 [DEBUG] [Thread-186569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:19:31.120 [DEBUG] [Thread-186569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:19:31.120 [DEBUG] [Thread-186569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:19:31.120 [DEBUG] [Thread-186569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:19:31.155 [INFO] [Thread-186569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:19:31.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:19:31.815 [DEBUG] [Thread-186569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:19:31.815 [DEBUG] [Thread-186569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:19:31.815 [DEBUG] [Thread-186569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:19:31.856 [DEBUG] [Thread-186569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:19:31.856 [DEBUG] [Thread-186569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:19:31.858 [DEBUG] [Thread-186569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:19:31.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:19:31.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:19:31.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:19:31.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:19:31.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:19:31.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:19:31.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:19:31.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:19:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:19:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.304972 -999.00  +10.40  18.32     97  +10.00 1 3 1 3 1   887    0 0.51 1.17 ----- 20.7 18.3 281.9 23.2 12.8 -3.6 12.4 -3.1 11.7 -2.7 12.4 -2.3
2026-04-12T09:19:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:19:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:19:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.304972
2026-04-12T09:19:31.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:19:31.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:19:31.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:19:31.883 [DEBUG] [Thread-186569] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:19:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:19:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:19:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:19:08', tmtdew=-0.005215, humidity=100.336, cloud=0.0, wind=28.9372, temperature=10.2505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:19:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:19:31.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:19:31.992 [DEBUG] [Thread-186572] [transport.py] [_log()] starting thread (client mode): 0xb0fb6530
2026-04-12T09:19:31.992 [DEBUG] [Thread-186572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:19:32.020 [DEBUG] [Thread-186572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:19:32.020 [INFO] [Thread-186572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:19:32.040 [DEBUG] [Thread-186572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:19:32.040 [DEBUG] [Thread-186572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:19:32.040 [DEBUG] [Thread-186572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:19:32.040 [DEBUG] [Thread-186572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:19:32.040 [DEBUG] [Thread-186572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:19:32.040 [DEBUG] [Thread-186572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:19:32.040 [DEBUG] [Thread-186572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] client lang: <none>
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] server lang: <none>
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] kex follows: False
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] Compression: none
2026-04-12T09:19:32.041 [DEBUG] [Thread-186572] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:19:32.113 [DEBUG] [Thread-186572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:19:32.114 [DEBUG] [Thread-186572] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:19:32.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:19:32.115 [DEBUG] [Thread-186572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:19:32.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:19:32.198 [DEBUG] [Thread-186572] [transport.py] [_log()] userauth is OK
2026-04-12T09:19:32.198 [DEBUG] [Thread-186572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:19:32.198 [DEBUG] [Thread-186572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:19:32.198 [DEBUG] [Thread-186572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:19:32.198 [DEBUG] [Thread-186572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:19:32.231 [INFO] [Thread-186572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:19:32.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:19:32.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:19:33.069 [DEBUG] [Thread-186572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:19:33.069 [DEBUG] [Thread-186572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:19:33.131 [DEBUG] [Thread-186572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:19:33.131 [DEBUG] [Thread-186572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:19:33.154 [DEBUG] [Thread-186572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:19:33.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:19:33.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:19:33.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:19:33.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:19:33.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:19:33.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:19:33.252 [DEBUG] [Thread-186572] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:19:45.024 [DEBUG] [Thread-186574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:19:46.024 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:19:46.025 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:00.076 [DEBUG] [Thread-186575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:03.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:20:03.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:20:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:20:04.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 19, 44), -0.09539, 100.572, 0.0, 28.5098, 10.7015, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:20:04.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:19:44
2026-04-12T09:20:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:20:05.181 [DEBUG] [Thread-186576] [transport.py] [_log()] starting thread (client mode): 0xb0fb6f50
2026-04-12T09:20:05.182 [DEBUG] [Thread-186576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:20:05.204 [DEBUG] [Thread-186576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:20:05.204 [INFO] [Thread-186576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] client lang: <none>
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] server lang: <none>
2026-04-12T09:20:05.207 [DEBUG] [Thread-186576] [transport.py] [_log()] kex follows: False
2026-04-12T09:20:05.208 [DEBUG] [Thread-186576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:20:05.208 [DEBUG] [Thread-186576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:20:05.208 [DEBUG] [Thread-186576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:20:05.208 [DEBUG] [Thread-186576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:20:05.208 [DEBUG] [Thread-186576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:20:05.208 [DEBUG] [Thread-186576] [transport.py] [_log()] Compression: none
2026-04-12T09:20:05.208 [DEBUG] [Thread-186576] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:20:05.225 [DEBUG] [Thread-186576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:20:05.226 [DEBUG] [Thread-186576] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:20:05.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:20:05.227 [DEBUG] [Thread-186576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:20:05.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:20:05.229 [DEBUG] [Thread-186576] [transport.py] [_log()] userauth is OK
2026-04-12T09:20:05.229 [DEBUG] [Thread-186576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:20:05.229 [DEBUG] [Thread-186576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:20:05.229 [DEBUG] [Thread-186576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:20:05.230 [DEBUG] [Thread-186576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:20:05.253 [INFO] [Thread-186576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:20:05.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:20:15.105 [DEBUG] [Thread-186576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:20:15.105 [DEBUG] [Thread-186576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:20:15.106 [DEBUG] [Thread-186576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:20:15.116 [DEBUG] [Thread-186578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:15.146 [DEBUG] [Thread-186576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:20:15.146 [DEBUG] [Thread-186576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:20:15.149 [DEBUG] [Thread-186576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:20:15.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:20:15.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:20:15.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:20:15.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:20:15.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:20:15.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:20:15.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:20:15.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:20:15.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:20:15.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.305319 -999.00  +10.30  23.29     96   +9.80 1 3 1 3 1   887    0 0.49 0.60 ----- 21.4 23.3 279.8 31.8 12.8 -3.1 12.4 -3.4 11.8 -3.2 12.4 -2.1
2026-04-12T09:20:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:20:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:20:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.305319
2026-04-12T09:20:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:20:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:20:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:20:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:20:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:20:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:19:44', tmtdew=-0.09539, humidity=100.572, cloud=0.0, wind=28.5098, temperature=10.7015, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:19:39.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:20:15.259 [DEBUG] [Thread-186576] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:20:15.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:20:15.359 [DEBUG] [Thread-186580] [transport.py] [_log()] starting thread (client mode): 0xb0f556c0
2026-04-12T09:20:15.359 [DEBUG] [Thread-186580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:20:15.377 [DEBUG] [Thread-186580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:20:15.378 [INFO] [Thread-186580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:20:15.392 [DEBUG] [Thread-186580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] client lang: <none>
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] server lang: <none>
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] kex follows: False
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] Compression: none
2026-04-12T09:20:15.393 [DEBUG] [Thread-186580] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:20:15.456 [DEBUG] [Thread-186580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:20:15.456 [DEBUG] [Thread-186580] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:20:15.457 [DEBUG] [Thread-186580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:20:15.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:20:15.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:20:15.523 [DEBUG] [Thread-186580] [transport.py] [_log()] userauth is OK
2026-04-12T09:20:15.523 [DEBUG] [Thread-186580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:20:15.524 [DEBUG] [Thread-186580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:20:15.524 [DEBUG] [Thread-186580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:20:15.524 [DEBUG] [Thread-186580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:20:15.548 [INFO] [Thread-186580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:20:15.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:20:15.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:20:16.371 [DEBUG] [Thread-186580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:20:16.371 [DEBUG] [Thread-186580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:20:16.426 [DEBUG] [Thread-186580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:20:16.426 [DEBUG] [Thread-186580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:20:16.440 [DEBUG] [Thread-186580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:20:16.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:20:16.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:20:16.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:20:16.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:20:16.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:20:16.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:20:16.506 [DEBUG] [Thread-186580] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:20:25.569 [DEBUG] [Thread-186582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:30.156 [DEBUG] [Thread-186583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:45.209 [DEBUG] [Thread-186584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:46.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:46.168 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:20:46.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:20:46.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:20:46.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:20:47.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 20, 20), -0.05516, 100.336, 0.0, 27.0137, 10.2174, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:20:47.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:20:20
2026-04-12T09:20:48.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:20:48.427 [DEBUG] [Thread-186585] [transport.py] [_log()] starting thread (client mode): 0xb0f413c0
2026-04-12T09:20:48.427 [DEBUG] [Thread-186585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:20:48.445 [DEBUG] [Thread-186585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:20:48.445 [INFO] [Thread-186585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:20:48.447 [DEBUG] [Thread-186585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:20:48.447 [DEBUG] [Thread-186585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] client lang: <none>
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] server lang: <none>
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] kex follows: False
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:20:48.448 [DEBUG] [Thread-186585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:20:48.449 [DEBUG] [Thread-186585] [transport.py] [_log()] Compression: none
2026-04-12T09:20:48.449 [DEBUG] [Thread-186585] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:20:48.460 [DEBUG] [Thread-186585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:20:48.460 [DEBUG] [Thread-186585] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:20:48.461 [DEBUG] [Thread-186585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:20:48.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:20:48.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:20:48.464 [DEBUG] [Thread-186585] [transport.py] [_log()] userauth is OK
2026-04-12T09:20:48.464 [DEBUG] [Thread-186585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:20:48.464 [DEBUG] [Thread-186585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:20:48.464 [DEBUG] [Thread-186585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:20:48.465 [DEBUG] [Thread-186585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:20:48.501 [INFO] [Thread-186585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:20:48.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:20:49.089 [DEBUG] [Thread-186585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:20:49.089 [DEBUG] [Thread-186585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:20:49.090 [DEBUG] [Thread-186585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:20:49.130 [DEBUG] [Thread-186585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:20:49.131 [DEBUG] [Thread-186585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:20:49.134 [DEBUG] [Thread-186585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:20:49.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:20:49.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:20:49.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:20:49.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:20:49.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:20:49.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:20:49.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:20:49.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:20:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:20:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.306014 -999.00  +10.40  15.78     96   +9.90 1 3 1 3 1   887    0 0.47 -0.11 ----- 12.1 15.8 278.0 22.8 12.8 -4.8 12.5 -5.6 11.8 -3.6 12.4 -3.4
2026-04-12T09:20:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:20:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:20:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.306014
2026-04-12T09:20:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:20:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:20:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:20:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:20:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:20:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:20:20', tmtdew=-0.05516, humidity=100.336, cloud=0.0, wind=27.0137, temperature=10.2174, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:20:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:20:49.156 [DEBUG] [Thread-186585] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:20:49.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:20:49.273 [DEBUG] [Thread-186588] [transport.py] [_log()] starting thread (client mode): 0xb0f42200
2026-04-12T09:20:49.273 [DEBUG] [Thread-186588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:20:49.309 [DEBUG] [Thread-186588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:20:49.309 [INFO] [Thread-186588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:20:49.339 [DEBUG] [Thread-186588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] client lang: <none>
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] server lang: <none>
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] kex follows: False
2026-04-12T09:20:49.340 [DEBUG] [Thread-186588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:20:49.341 [DEBUG] [Thread-186588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:20:49.341 [DEBUG] [Thread-186588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:20:49.341 [DEBUG] [Thread-186588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:20:49.341 [DEBUG] [Thread-186588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:20:49.341 [DEBUG] [Thread-186588] [transport.py] [_log()] Compression: none
2026-04-12T09:20:49.341 [DEBUG] [Thread-186588] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:20:49.401 [DEBUG] [Thread-186588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:20:49.401 [DEBUG] [Thread-186588] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:20:49.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:20:49.402 [DEBUG] [Thread-186588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:20:49.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:20:49.500 [DEBUG] [Thread-186588] [transport.py] [_log()] userauth is OK
2026-04-12T09:20:49.500 [DEBUG] [Thread-186588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:20:49.500 [DEBUG] [Thread-186588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:20:49.500 [DEBUG] [Thread-186588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:20:49.501 [DEBUG] [Thread-186588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:20:49.539 [INFO] [Thread-186588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:20:49.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:20:49.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:20:50.329 [DEBUG] [Thread-186588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:20:50.330 [DEBUG] [Thread-186588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:20:50.401 [DEBUG] [Thread-186588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:20:50.401 [DEBUG] [Thread-186588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:20:50.432 [DEBUG] [Thread-186588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:20:50.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:20: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')
2026-04-12T09:20:50.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:20:50.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:20:50.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:20:50.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:20:50.565 [DEBUG] [Thread-186588] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:21:00.243 [DEBUG] [Thread-186590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:21:15.294 [DEBUG] [Thread-186591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:21:20.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:21:20.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:21:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:21:21.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 20, 55), -0.057695, 100.352, 0.0, 23.3968, 10.2505, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:21:21.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:20:55
2026-04-12T09:21:22.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:21:22.402 [DEBUG] [Thread-186592] [transport.py] [_log()] starting thread (client mode): 0xae5b6d10
2026-04-12T09:21:22.402 [DEBUG] [Thread-186592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:21:22.411 [DEBUG] [Thread-186592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:21:22.411 [INFO] [Thread-186592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] client lang: <none>
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] server lang: <none>
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] kex follows: False
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] Compression: none
2026-04-12T09:21:22.413 [DEBUG] [Thread-186592] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:21:22.423 [DEBUG] [Thread-186592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:21:22.423 [DEBUG] [Thread-186592] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:21:22.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:21:22.424 [DEBUG] [Thread-186592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:21:22.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:21:22.425 [DEBUG] [Thread-186592] [transport.py] [_log()] userauth is OK
2026-04-12T09:21:22.425 [DEBUG] [Thread-186592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:21:22.425 [DEBUG] [Thread-186592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:21:22.425 [DEBUG] [Thread-186592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:21:22.425 [DEBUG] [Thread-186592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:21:22.437 [INFO] [Thread-186592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:21:22.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:21:23.033 [DEBUG] [Thread-186592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:21:23.033 [DEBUG] [Thread-186592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:21:23.034 [DEBUG] [Thread-186592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:21:23.074 [DEBUG] [Thread-186592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:21:23.074 [DEBUG] [Thread-186592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:21:23.077 [DEBUG] [Thread-186592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:21:23.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:21:23.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:21:23.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:21:23.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:21:23.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:21:23.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:21:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:21:23.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:21:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:21:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.306361 -999.00  +10.40  13.73     96   +9.90 1 3 1 3 1   887    0 0.47 -0.34 ----- 14.6 13.7 288.0 18.9 12.9 -5.5 12.6 -4.9 11.9 -4.7 12.5 -4.3
2026-04-12T09:21:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:21:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:21:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.306361
2026-04-12T09:21:23.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:21:23.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:21:23.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:21:23.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:21:23.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:21:23.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:20:55', tmtdew=-0.057695, humidity=100.352, cloud=0.0, wind=23.3968, temperature=10.2505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:21:09.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:21:23.101 [DEBUG] [Thread-186592] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:21:23.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:21:23.207 [DEBUG] [Thread-186595] [transport.py] [_log()] starting thread (client mode): 0xae519bd0
2026-04-12T09:21:23.207 [DEBUG] [Thread-186595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:21:23.223 [DEBUG] [Thread-186595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:21:23.223 [INFO] [Thread-186595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] client lang: <none>
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] server lang: <none>
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] kex follows: False
2026-04-12T09:21:23.230 [DEBUG] [Thread-186595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:21:23.231 [DEBUG] [Thread-186595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:21:23.231 [DEBUG] [Thread-186595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:21:23.231 [DEBUG] [Thread-186595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:21:23.231 [DEBUG] [Thread-186595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:21:23.231 [DEBUG] [Thread-186595] [transport.py] [_log()] Compression: none
2026-04-12T09:21:23.231 [DEBUG] [Thread-186595] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:21:23.290 [DEBUG] [Thread-186595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:21:23.290 [DEBUG] [Thread-186595] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:21:23.291 [DEBUG] [Thread-186595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:21:23.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:21:23.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:21:23.346 [DEBUG] [Thread-186595] [transport.py] [_log()] userauth is OK
2026-04-12T09:21:23.346 [DEBUG] [Thread-186595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:21:23.346 [DEBUG] [Thread-186595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:21:23.346 [DEBUG] [Thread-186595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:21:23.346 [DEBUG] [Thread-186595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:21:23.369 [INFO] [Thread-186595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:21:23.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:21:23.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:21:24.169 [DEBUG] [Thread-186595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:21:24.169 [DEBUG] [Thread-186595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:21:24.217 [DEBUG] [Thread-186595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:21:24.217 [DEBUG] [Thread-186595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:21:24.226 [DEBUG] [Thread-186595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:21:24.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:21:24.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:21:24.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:21:24.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:21:24.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:21:24.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:21:24.263 [DEBUG] [Thread-186595] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:21:25.602 [DEBUG] [Thread-186597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:21:30.333 [DEBUG] [Thread-186598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:21:45.387 [DEBUG] [Thread-186599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:21:46.309 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:21:46.311 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:21:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:21:54.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:21:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:21:55.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 21, 31), -0.05513, 100.336, 0.0, 23.679, 10.2008, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:21:55.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:21:31
2026-04-12T09:21:55.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:21:56.069 [DEBUG] [Thread-186600] [transport.py] [_log()] starting thread (client mode): 0xb0fb5b40
2026-04-12T09:21:56.069 [DEBUG] [Thread-186600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:21:56.088 [DEBUG] [Thread-186600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:21:56.088 [INFO] [Thread-186600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:21:56.090 [DEBUG] [Thread-186600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] client lang: <none>
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] server lang: <none>
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] kex follows: False
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:21:56.091 [DEBUG] [Thread-186600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:21:56.092 [DEBUG] [Thread-186600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:21:56.092 [DEBUG] [Thread-186600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:21:56.092 [DEBUG] [Thread-186600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:21:56.092 [DEBUG] [Thread-186600] [transport.py] [_log()] Compression: none
2026-04-12T09:21:56.092 [DEBUG] [Thread-186600] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:21:56.103 [DEBUG] [Thread-186600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:21:56.104 [DEBUG] [Thread-186600] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:21:56.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:21:56.105 [DEBUG] [Thread-186600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:21:56.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:21:56.107 [DEBUG] [Thread-186600] [transport.py] [_log()] userauth is OK
2026-04-12T09:21:56.107 [DEBUG] [Thread-186600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:21:56.108 [DEBUG] [Thread-186600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:21:56.108 [DEBUG] [Thread-186600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:21:56.108 [DEBUG] [Thread-186600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:21:56.133 [INFO] [Thread-186600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:21:56.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:21:56.739 [DEBUG] [Thread-186600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:21:56.739 [DEBUG] [Thread-186600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:21:56.740 [DEBUG] [Thread-186600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:21:56.780 [DEBUG] [Thread-186600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:21:56.780 [DEBUG] [Thread-186600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:21:56.783 [DEBUG] [Thread-186600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:21:56.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:21:56.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:21:56.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:21:56.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:21:56.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:21:56.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:21:56.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:21:56.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:21:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:21:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.306708 -999.00  +10.40  15.62     96   +9.90 1 3 1 3 1   887    0 0.46 -0.44 ----- 16.7 15.6 279.6 23.0 12.9 -5.8 12.6 -8.2 11.9 -6.0 12.5 -4.6
2026-04-12T09:21:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:21:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:21:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.306708
2026-04-12T09:21:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:21:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:21:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:21:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:21:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:21:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:21:31', tmtdew=-0.05513, humidity=100.336, cloud=0.0, wind=23.679, temperature=10.2008, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:21:39.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:21:56.805 [DEBUG] [Thread-186600] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:21:56.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:21:56.948 [DEBUG] [Thread-186603] [transport.py] [_log()] starting thread (client mode): 0xae5e49a0
2026-04-12T09:21:56.949 [DEBUG] [Thread-186603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:21:57.001 [DEBUG] [Thread-186603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:21:57.001 [INFO] [Thread-186603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:21:57.046 [DEBUG] [Thread-186603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:21:57.047 [DEBUG] [Thread-186603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:21:57.047 [DEBUG] [Thread-186603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:21:57.047 [DEBUG] [Thread-186603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:57.047 [DEBUG] [Thread-186603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] client lang: <none>
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] server lang: <none>
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] kex follows: False
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] Compression: none
2026-04-12T09:21:57.048 [DEBUG] [Thread-186603] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:21:57.110 [DEBUG] [Thread-186603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:21:57.111 [DEBUG] [Thread-186603] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:21:57.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:21:57.112 [DEBUG] [Thread-186603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:21:57.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:21:57.225 [DEBUG] [Thread-186603] [transport.py] [_log()] userauth is OK
2026-04-12T09:21:57.225 [DEBUG] [Thread-186603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:21:57.225 [DEBUG] [Thread-186603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:21:57.225 [DEBUG] [Thread-186603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:21:57.225 [DEBUG] [Thread-186603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:21:57.274 [INFO] [Thread-186603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:21:57.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:21:57.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:21:58.162 [DEBUG] [Thread-186603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:21:58.162 [DEBUG] [Thread-186603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:21:58.239 [DEBUG] [Thread-186603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:21:58.239 [DEBUG] [Thread-186603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:21:58.277 [DEBUG] [Thread-186603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:21:58.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:21:58.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:21:58.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:21:58.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:21:58.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:21:58.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:21:58.343 [DEBUG] [Thread-186603] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:22:00.424 [DEBUG] [Thread-186605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:22:15.474 [DEBUG] [Thread-186606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:22:25.647 [DEBUG] [Thread-186607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:22:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:22:28.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:22:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:22:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 22, 6), -0.057665, 100.352, 0.0, 23.7848, 10.2339, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:22:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:22:06
2026-04-12T09:22:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:22:30.189 [DEBUG] [Thread-186608] [transport.py] [_log()] starting thread (client mode): 0xb0fb4310
2026-04-12T09:22:30.189 [DEBUG] [Thread-186608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:22:30.202 [DEBUG] [Thread-186608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:22:30.202 [INFO] [Thread-186608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] client lang: <none>
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] server lang: <none>
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] kex follows: False
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] Compression: none
2026-04-12T09:22:30.203 [DEBUG] [Thread-186608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:22:30.212 [DEBUG] [Thread-186608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:22:30.212 [DEBUG] [Thread-186608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:22:30.212 [DEBUG] [Thread-186608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:22:30.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:22:30.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:22:30.214 [DEBUG] [Thread-186608] [transport.py] [_log()] userauth is OK
2026-04-12T09:22:30.214 [DEBUG] [Thread-186608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:22:30.214 [DEBUG] [Thread-186608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:22:30.214 [DEBUG] [Thread-186608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:22:30.214 [DEBUG] [Thread-186608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:22:30.228 [INFO] [Thread-186608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:22:30.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:22:30.511 [DEBUG] [Thread-186610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:22:30.838 [DEBUG] [Thread-186608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:22:30.838 [DEBUG] [Thread-186608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:22:30.838 [DEBUG] [Thread-186608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:22:30.879 [DEBUG] [Thread-186608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:22:30.879 [DEBUG] [Thread-186608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:22:30.882 [DEBUG] [Thread-186608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:22:30.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:22:30.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:22:30.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:22:30.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:22:30.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:22:30.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:22:30.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:22:30.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:22:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:22:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.307055 -999.00  +10.40  15.82     96   +9.90 1 3 1 3 1   887    0 0.47 -0.77 ----- 15.2 15.8 278.6 26.6 -999.0 -999.0 12.6 -9.3 11.9 -7.1 12.6 -5.5
2026-04-12T09:22:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:22:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:22:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.307055
2026-04-12T09:22:30.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:22:30.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:22:30.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:22:30.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:22:30.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:22:30.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:22:06', tmtdew=-0.057665, humidity=100.352, cloud=0.0, wind=23.7848, temperature=10.2339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:22:09.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:22:30.908 [DEBUG] [Thread-186608] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:22:30.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:22:31.000 [DEBUG] [Thread-186612] [transport.py] [_log()] starting thread (client mode): 0xb0f544f0
2026-04-12T09:22:31.000 [DEBUG] [Thread-186612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:22:31.014 [DEBUG] [Thread-186612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:22:31.014 [INFO] [Thread-186612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:22:31.022 [DEBUG] [Thread-186612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:22:31.022 [DEBUG] [Thread-186612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:22:31.022 [DEBUG] [Thread-186612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:22:31.022 [DEBUG] [Thread-186612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:22:31.022 [DEBUG] [Thread-186612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] client lang: <none>
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] server lang: <none>
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] kex follows: False
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] Compression: none
2026-04-12T09:22:31.023 [DEBUG] [Thread-186612] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:22:31.086 [DEBUG] [Thread-186612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:22:31.087 [DEBUG] [Thread-186612] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:22:31.087 [DEBUG] [Thread-186612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:22:31.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:22:31.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:22:31.143 [DEBUG] [Thread-186612] [transport.py] [_log()] userauth is OK
2026-04-12T09:22:31.143 [DEBUG] [Thread-186612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:22:31.143 [DEBUG] [Thread-186612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:22:31.143 [DEBUG] [Thread-186612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:22:31.143 [DEBUG] [Thread-186612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:22:31.162 [INFO] [Thread-186612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:22:31.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:22:31.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:22:31.985 [DEBUG] [Thread-186612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:22:31.985 [DEBUG] [Thread-186612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:22:32.033 [DEBUG] [Thread-186612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:22:32.033 [DEBUG] [Thread-186612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:22:32.042 [DEBUG] [Thread-186612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:22:32.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:22:32.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:22:32.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:22:32.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:22:32.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:22:32.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:22:32.079 [DEBUG] [Thread-186612] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:22:45.552 [DEBUG] [Thread-186614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:22:46.449 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:22:46.451 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:23:00.604 [DEBUG] [Thread-186615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:23:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:23:02.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:23:02.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:23:03.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 22, 42), -0.11527, 100.705, 0.0, 22.5475, 10.7347, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:23:03.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:22:42
2026-04-12T09:23:03.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:23:03.958 [DEBUG] [Thread-186616] [transport.py] [_log()] starting thread (client mode): 0xb0fb5fc0
2026-04-12T09:23:03.958 [DEBUG] [Thread-186616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:23:03.978 [DEBUG] [Thread-186616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:23:03.978 [INFO] [Thread-186616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:23:03.981 [DEBUG] [Thread-186616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:23:03.981 [DEBUG] [Thread-186616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] client lang: <none>
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] server lang: <none>
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] kex follows: False
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] Compression: none
2026-04-12T09:23:03.982 [DEBUG] [Thread-186616] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:23:03.999 [DEBUG] [Thread-186616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:23:04.000 [DEBUG] [Thread-186616] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:23:04.000 [DEBUG] [Thread-186616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:23:04.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:23:04.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:23:04.002 [DEBUG] [Thread-186616] [transport.py] [_log()] userauth is OK
2026-04-12T09:23:04.002 [DEBUG] [Thread-186616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:23:04.003 [DEBUG] [Thread-186616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:23:04.003 [DEBUG] [Thread-186616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:23:04.003 [DEBUG] [Thread-186616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:23:04.024 [INFO] [Thread-186616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:23:04.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:23:04.618 [DEBUG] [Thread-186616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:23:04.618 [DEBUG] [Thread-186616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:23:04.619 [DEBUG] [Thread-186616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:23:04.659 [DEBUG] [Thread-186616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:23:04.659 [DEBUG] [Thread-186616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:23:04.663 [DEBUG] [Thread-186616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:23:04.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:23:04.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:23:04.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:23:04.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:23:04.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:23:04.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:23:04.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:23:04.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:23:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:23:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.307403 -999.00  +10.40  18.22     96   +9.90 1 3 1 3 1   887    0 0.45 -1.19 ----- 17.6 18.2 290.8 24.2 13.1 -9.0 12.7 -7.3 12.1 -7.5 12.6 -7.3
2026-04-12T09:23:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:23:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:23:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.307403
2026-04-12T09:23:04.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:23:04.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:23:04.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:23:04.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:23:04.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:23:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:22:42', tmtdew=-0.11527, humidity=100.705, cloud=0.0, wind=22.5475, temperature=10.7347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:22:39.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:23:04.689 [DEBUG] [Thread-186616] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:23:04.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:23:04.808 [DEBUG] [Thread-186619] [transport.py] [_log()] starting thread (client mode): 0xb0fb55d0
2026-04-12T09:23:04.808 [DEBUG] [Thread-186619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:23:04.846 [DEBUG] [Thread-186619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:23:04.846 [INFO] [Thread-186619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:23:04.877 [DEBUG] [Thread-186619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:23:04.877 [DEBUG] [Thread-186619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:23:04.877 [DEBUG] [Thread-186619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:23:04.877 [DEBUG] [Thread-186619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:04.877 [DEBUG] [Thread-186619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] client lang: <none>
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] server lang: <none>
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] kex follows: False
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] Compression: none
2026-04-12T09:23:04.878 [DEBUG] [Thread-186619] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:23:04.960 [DEBUG] [Thread-186619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:23:04.961 [DEBUG] [Thread-186619] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:23:04.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:23:04.962 [DEBUG] [Thread-186619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:23:04.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:23:05.064 [DEBUG] [Thread-186619] [transport.py] [_log()] userauth is OK
2026-04-12T09:23:05.065 [DEBUG] [Thread-186619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:23:05.065 [DEBUG] [Thread-186619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:23:05.065 [DEBUG] [Thread-186619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:23:05.065 [DEBUG] [Thread-186619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:23:05.106 [INFO] [Thread-186619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:23:05.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:23:05.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:23:05.949 [DEBUG] [Thread-186619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:23:05.949 [DEBUG] [Thread-186619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:23:06.021 [DEBUG] [Thread-186619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:23:06.021 [DEBUG] [Thread-186619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:23:06.054 [DEBUG] [Thread-186619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:23:06.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:23:06.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:23:06.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:23:06.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:23:06.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:23:06.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:23:06.186 [DEBUG] [Thread-186619] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:23:15.642 [DEBUG] [Thread-186621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:23:25.699 [DEBUG] [Thread-186622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:23:30.697 [DEBUG] [Thread-186623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:23:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:23:36.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:23:36.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:23:37.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 23, 17), -0.002765, 100.319, 0.0, 21.9503, 10.3171, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:23:37.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:23:17
2026-04-12T09:23:37.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:23:38.060 [DEBUG] [Thread-186624] [transport.py] [_log()] starting thread (client mode): 0xb0f8cc40
2026-04-12T09:23:38.060 [DEBUG] [Thread-186624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:23:38.080 [DEBUG] [Thread-186624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:23:38.081 [INFO] [Thread-186624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:23:38.084 [DEBUG] [Thread-186624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:23:38.084 [DEBUG] [Thread-186624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:23:38.084 [DEBUG] [Thread-186624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:23:38.084 [DEBUG] [Thread-186624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:38.084 [DEBUG] [Thread-186624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:38.084 [DEBUG] [Thread-186624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] client lang: <none>
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] server lang: <none>
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] kex follows: False
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:23:38.085 [DEBUG] [Thread-186624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:23:38.086 [DEBUG] [Thread-186624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:23:38.086 [DEBUG] [Thread-186624] [transport.py] [_log()] Compression: none
2026-04-12T09:23:38.086 [DEBUG] [Thread-186624] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:23:38.107 [DEBUG] [Thread-186624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:23:38.108 [DEBUG] [Thread-186624] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:23:38.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:23:38.109 [DEBUG] [Thread-186624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:23:38.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:23:38.111 [DEBUG] [Thread-186624] [transport.py] [_log()] userauth is OK
2026-04-12T09:23:38.111 [DEBUG] [Thread-186624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:23:38.111 [DEBUG] [Thread-186624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:23:38.111 [DEBUG] [Thread-186624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:23:38.111 [DEBUG] [Thread-186624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:23:38.147 [INFO] [Thread-186624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:23:38.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:23:38.790 [DEBUG] [Thread-186624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:23:38.791 [DEBUG] [Thread-186624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:23:38.791 [DEBUG] [Thread-186624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:23:38.832 [DEBUG] [Thread-186624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:23:38.832 [DEBUG] [Thread-186624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:23:38.836 [DEBUG] [Thread-186624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:23:38.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:23:38.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:23:38.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:23:38.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:23:38.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:23:38.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:23:38.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:23:38.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:23:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:23:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.307750 -999.00  +10.40  19.81     96   +9.90 1 3 1 3 1   887    0 0.46 -1.23 ----- 18.8 19.8 277.8 27.4 13.1 -8.4 12.7 -8.0 12.1 -7.7 12.7 -7.1
2026-04-12T09:23:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:23:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:23:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.307750
2026-04-12T09:23:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:23:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:23:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:23:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:23:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:23:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:23:17', tmtdew=-0.002765, humidity=100.319, cloud=0.0, wind=21.9503, temperature=10.3171, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:23:09.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:23:38.863 [DEBUG] [Thread-186624] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:23:38.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:23:38.977 [DEBUG] [Thread-186627] [transport.py] [_log()] starting thread (client mode): 0xb0f8c160
2026-04-12T09:23:38.978 [DEBUG] [Thread-186627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:23:39.011 [DEBUG] [Thread-186627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:23:39.012 [INFO] [Thread-186627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:23:39.042 [DEBUG] [Thread-186627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:23:39.042 [DEBUG] [Thread-186627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:23:39.042 [DEBUG] [Thread-186627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] client lang: <none>
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] server lang: <none>
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] kex follows: False
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:23:39.043 [DEBUG] [Thread-186627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:23:39.044 [DEBUG] [Thread-186627] [transport.py] [_log()] Compression: none
2026-04-12T09:23:39.044 [DEBUG] [Thread-186627] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:23:39.120 [DEBUG] [Thread-186627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:23:39.121 [DEBUG] [Thread-186627] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:23:39.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:23:39.122 [DEBUG] [Thread-186627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:23:39.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:23:39.204 [DEBUG] [Thread-186627] [transport.py] [_log()] userauth is OK
2026-04-12T09:23:39.205 [DEBUG] [Thread-186627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:23:39.205 [DEBUG] [Thread-186627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:23:39.205 [DEBUG] [Thread-186627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:23:39.205 [DEBUG] [Thread-186627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:23:39.243 [INFO] [Thread-186627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:23:39.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:23:39.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:23:40.076 [DEBUG] [Thread-186627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:23:40.077 [DEBUG] [Thread-186627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:23:40.144 [DEBUG] [Thread-186627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:23:40.145 [DEBUG] [Thread-186627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:23:40.162 [DEBUG] [Thread-186627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:23:40.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:23:40.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:23:40.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:23:40.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:23:40.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:23:40.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:23:40.276 [DEBUG] [Thread-186627] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:23:45.735 [DEBUG] [Thread-186629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:23:46.592 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:23:46.594 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:00.788 [DEBUG] [Thread-186630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:24:10.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:24:10.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:24:11.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 23, 52), -0.10565, 100.639, 0.0, 22.477, 10.9006, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:24:11.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:23:52
2026-04-12T09:24:11.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:24:12.118 [DEBUG] [Thread-186631] [transport.py] [_log()] starting thread (client mode): 0xb0f8e860
2026-04-12T09:24:12.118 [DEBUG] [Thread-186631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:24:12.137 [DEBUG] [Thread-186631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:24:12.137 [INFO] [Thread-186631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:24:12.140 [DEBUG] [Thread-186631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:24:12.140 [DEBUG] [Thread-186631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:24:12.140 [DEBUG] [Thread-186631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] client lang: <none>
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] server lang: <none>
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] kex follows: False
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:24:12.141 [DEBUG] [Thread-186631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:24:12.142 [DEBUG] [Thread-186631] [transport.py] [_log()] Compression: none
2026-04-12T09:24:12.142 [DEBUG] [Thread-186631] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:24:12.162 [DEBUG] [Thread-186631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:24:12.163 [DEBUG] [Thread-186631] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:24:12.164 [DEBUG] [Thread-186631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:24:12.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:24:12.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:24:12.166 [DEBUG] [Thread-186631] [transport.py] [_log()] userauth is OK
2026-04-12T09:24:12.166 [DEBUG] [Thread-186631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:24:12.167 [DEBUG] [Thread-186631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:24:12.167 [DEBUG] [Thread-186631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:24:12.167 [DEBUG] [Thread-186631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:24:12.190 [INFO] [Thread-186631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:24:12.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:24:12.840 [DEBUG] [Thread-186631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:24:12.840 [DEBUG] [Thread-186631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:24:12.840 [DEBUG] [Thread-186631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:24:12.881 [DEBUG] [Thread-186631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:24:12.881 [DEBUG] [Thread-186631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:24:12.884 [DEBUG] [Thread-186631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:24:12.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:24:12.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:24:12.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:24:12.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:24:12.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:24:12.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:24:12.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:24:12.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:24:12.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:24:12.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.308097 -999.00  +10.50  22.19     96   +9.90 1 3 1 3 1   887    0 0.46 -0.98 ----- 22.2 22.2 274.6 26.1 13.1 -8.1 12.7 -5.0 12.0 -6.5 12.7 -7.1
2026-04-12T09:24:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:24:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:24:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.308097
2026-04-12T09:24:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:24:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:24:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:24:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:24:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:24:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:23:52', tmtdew=-0.10565, humidity=100.639, cloud=0.0, wind=22.477, temperature=10.9006, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:23:39.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:24:12.908 [DEBUG] [Thread-186631] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:24:12.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:24:13.019 [DEBUG] [Thread-186634] [transport.py] [_log()] starting thread (client mode): 0xb0f55db0
2026-04-12T09:24:13.019 [DEBUG] [Thread-186634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:24:13.051 [DEBUG] [Thread-186634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:24:13.051 [INFO] [Thread-186634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:24:13.075 [DEBUG] [Thread-186634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:24:13.075 [DEBUG] [Thread-186634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:24:13.075 [DEBUG] [Thread-186634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] client lang: <none>
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] server lang: <none>
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] kex follows: False
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:24:13.076 [DEBUG] [Thread-186634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:24:13.077 [DEBUG] [Thread-186634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:24:13.077 [DEBUG] [Thread-186634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:24:13.077 [DEBUG] [Thread-186634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:24:13.077 [DEBUG] [Thread-186634] [transport.py] [_log()] Compression: none
2026-04-12T09:24:13.077 [DEBUG] [Thread-186634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:24:13.141 [DEBUG] [Thread-186634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:24:13.142 [DEBUG] [Thread-186634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:24:13.142 [DEBUG] [Thread-186634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:24:13.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:24:13.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:24:13.232 [DEBUG] [Thread-186634] [transport.py] [_log()] userauth is OK
2026-04-12T09:24:13.232 [DEBUG] [Thread-186634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:24:13.233 [DEBUG] [Thread-186634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:24:13.233 [DEBUG] [Thread-186634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:24:13.233 [DEBUG] [Thread-186634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:24:13.273 [INFO] [Thread-186634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:24:13.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:24:13.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:24:14.061 [DEBUG] [Thread-186634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:24:14.062 [DEBUG] [Thread-186634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:24:14.110 [DEBUG] [Thread-186634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:24:14.110 [DEBUG] [Thread-186634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:24:14.119 [DEBUG] [Thread-186634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:24:14.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:24:14.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:24:14.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:24:14.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:24:14.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:24:14.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:24:14.154 [DEBUG] [Thread-186634] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:24:15.824 [DEBUG] [Thread-186636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:25.733 [DEBUG] [Thread-186637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:30.883 [DEBUG] [Thread-186638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:24:44.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:24:44.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:24:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 24, 28), -0.057875, 100.352, 0.0, 19.9739, 10.4, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:24:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:24:28
2026-04-12T09:24:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:24:45.917 [DEBUG] [Thread-186639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:45.954 [DEBUG] [Thread-186640] [transport.py] [_log()] starting thread (client mode): 0xa796a260
2026-04-12T09:24:45.954 [DEBUG] [Thread-186640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:24:45.974 [DEBUG] [Thread-186640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:24:45.975 [INFO] [Thread-186640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] client lang: <none>
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] server lang: <none>
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] kex follows: False
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] Compression: none
2026-04-12T09:24:45.978 [DEBUG] [Thread-186640] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:24:45.996 [DEBUG] [Thread-186640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:24:45.996 [DEBUG] [Thread-186640] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:24:45.996 [DEBUG] [Thread-186640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:24:45.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:24:45.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:24:45.998 [DEBUG] [Thread-186640] [transport.py] [_log()] userauth is OK
2026-04-12T09:24:45.998 [DEBUG] [Thread-186640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:24:45.998 [DEBUG] [Thread-186640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:24:45.998 [DEBUG] [Thread-186640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:24:45.998 [DEBUG] [Thread-186640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:24:46.021 [INFO] [Thread-186640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:24:46.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:24:46.631 [DEBUG] [Thread-186640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:24:46.631 [DEBUG] [Thread-186640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:24:46.631 [DEBUG] [Thread-186640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:24:46.672 [DEBUG] [Thread-186640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:24:46.672 [DEBUG] [Thread-186640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:24:46.675 [DEBUG] [Thread-186640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:24:46.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:24:46.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:24:46.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:24:46.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:24:46.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:24:46.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:24:46.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:24:46.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:24:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:24:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.308444 -999.00  +10.40  22.56     96   +9.80 1 3 1 3 1   887    0 0.47 -0.79 ----- 25.7 22.6 275.2 27.8 13.1 -4.8 12.7 -6.6 11.9 -4.0 12.7 -3.8
2026-04-12T09:24:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:24:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:24:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.308444
2026-04-12T09:24:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:24:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:24:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:24:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:24:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:24:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:24:28', tmtdew=-0.057875, humidity=100.352, cloud=0.0, wind=19.9739, temperature=10.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:24:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:24:46.703 [DEBUG] [Thread-186640] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:24:46.735 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:46.735 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:24:46.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:24:46.795 [DEBUG] [Thread-186643] [transport.py] [_log()] starting thread (client mode): 0xae560a60
2026-04-12T09:24:46.795 [DEBUG] [Thread-186643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:24:46.810 [DEBUG] [Thread-186643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:24:46.810 [INFO] [Thread-186643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] client lang: <none>
2026-04-12T09:24:46.818 [DEBUG] [Thread-186643] [transport.py] [_log()] server lang: <none>
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] kex follows: False
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] Compression: none
2026-04-12T09:24:46.819 [DEBUG] [Thread-186643] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:24:46.879 [DEBUG] [Thread-186643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:24:46.879 [DEBUG] [Thread-186643] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:24:46.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:24:46.880 [DEBUG] [Thread-186643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:24:46.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:24:46.935 [DEBUG] [Thread-186643] [transport.py] [_log()] userauth is OK
2026-04-12T09:24:46.936 [DEBUG] [Thread-186643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:24:46.936 [DEBUG] [Thread-186643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:24:46.936 [DEBUG] [Thread-186643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:24:46.936 [DEBUG] [Thread-186643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:24:46.961 [INFO] [Thread-186643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:24:46.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:24:46.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:24:47.796 [DEBUG] [Thread-186643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:24:47.796 [DEBUG] [Thread-186643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:24:47.843 [DEBUG] [Thread-186643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:24:47.843 [DEBUG] [Thread-186643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:24:47.852 [DEBUG] [Thread-186643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:24:47.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:24:47.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:24:47.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:24:47.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:24:47.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:24:47.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:24:47.886 [DEBUG] [Thread-186643] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:25:00.949 [DEBUG] [Thread-186645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:25:16.001 [DEBUG] [Thread-186646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:25:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:25:17.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:25:17.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:25:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 25, 4), -0.05542, 100.336, 0.0, 20.556, 10.4166, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:25:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:25:04
2026-04-12T09:25:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:25:19.845 [DEBUG] [Thread-186647] [transport.py] [_log()] starting thread (client mode): 0xae560ca0
2026-04-12T09:25:19.845 [DEBUG] [Thread-186647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:25:19.862 [DEBUG] [Thread-186647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:25:19.862 [INFO] [Thread-186647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] client lang: <none>
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] server lang: <none>
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] kex follows: False
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] Compression: none
2026-04-12T09:25:19.865 [DEBUG] [Thread-186647] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:25:19.882 [DEBUG] [Thread-186647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:25:19.883 [DEBUG] [Thread-186647] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:25:19.883 [DEBUG] [Thread-186647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:25:19.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:25:19.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:25:19.885 [DEBUG] [Thread-186647] [transport.py] [_log()] userauth is OK
2026-04-12T09:25:19.885 [DEBUG] [Thread-186647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:25:19.886 [DEBUG] [Thread-186647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:25:19.886 [DEBUG] [Thread-186647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:25:19.886 [DEBUG] [Thread-186647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:25:19.924 [INFO] [Thread-186647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:25:19.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:25:25.766 [DEBUG] [Thread-186649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:25:29.168 [DEBUG] [Thread-186647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:25:29.169 [DEBUG] [Thread-186647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:25:29.169 [DEBUG] [Thread-186647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:25:29.210 [DEBUG] [Thread-186647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:25:29.210 [DEBUG] [Thread-186647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:25:29.213 [DEBUG] [Thread-186647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:25:29.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:25:29.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:25:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:25:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:25:29.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:25:29.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:25:29.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:25:29.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:25:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:25:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.308444 -999.00  +10.40  22.56     96   +9.80 1 3 1 3 1   887    0 0.47 -0.79 ----- 25.7 22.6 275.2 27.8 13.1 -4.8 12.7 -6.6 11.9 -4.0 12.7 -3.8
2026-04-12T09:25:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:25:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:25:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.308444
2026-04-12T09:25:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:25:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:25:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:25:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:25:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:25:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:25:04', tmtdew=-0.05542, humidity=100.336, cloud=0.0, wind=20.556, temperature=10.4166, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:24:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:25:29.400 [DEBUG] [Thread-186647] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:25:29.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:25:29.493 [DEBUG] [Thread-186651] [transport.py] [_log()] starting thread (client mode): 0xa796baf0
2026-04-12T09:25:29.493 [DEBUG] [Thread-186651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:25:29.508 [DEBUG] [Thread-186651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:25:29.508 [INFO] [Thread-186651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:25:29.515 [DEBUG] [Thread-186651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:25:29.515 [DEBUG] [Thread-186651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:25:29.515 [DEBUG] [Thread-186651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] client lang: <none>
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] server lang: <none>
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] kex follows: False
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] Compression: none
2026-04-12T09:25:29.516 [DEBUG] [Thread-186651] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:25:29.574 [DEBUG] [Thread-186651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:25:29.575 [DEBUG] [Thread-186651] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:25:29.575 [DEBUG] [Thread-186651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:25:29.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:25:29.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:25:29.630 [DEBUG] [Thread-186651] [transport.py] [_log()] userauth is OK
2026-04-12T09:25:29.630 [DEBUG] [Thread-186651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:25:29.630 [DEBUG] [Thread-186651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:25:29.630 [DEBUG] [Thread-186651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:25:29.630 [DEBUG] [Thread-186651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:25:29.643 [INFO] [Thread-186651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:25:29.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:25:29.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:25:30.457 [DEBUG] [Thread-186651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:25:30.457 [DEBUG] [Thread-186651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:25:30.505 [DEBUG] [Thread-186651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:25:30.506 [DEBUG] [Thread-186651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:25:30.515 [DEBUG] [Thread-186651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:25:30.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:25:30.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:25:30.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
2026-04-12T09:25:30.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:25:30.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:25:30.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:25:30.553 [DEBUG] [Thread-186651] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:25:31.037 [DEBUG] [Thread-186653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:25:46.089 [DEBUG] [Thread-186654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:25:46.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:25:46.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:26:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:26:00.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:26:00.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:26:01.126 [DEBUG] [Thread-186655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:26:01.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 25, 40), -0.12071, 100.738, 0.0, 27.5926, 11.0001, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:26:01.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:25:40
2026-04-12T09:26:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:26:02.374 [DEBUG] [Thread-186656] [transport.py] [_log()] starting thread (client mode): 0xa796b190
2026-04-12T09:26:02.374 [DEBUG] [Thread-186656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:26:02.391 [DEBUG] [Thread-186656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:26:02.391 [INFO] [Thread-186656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] client lang: <none>
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] server lang: <none>
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] kex follows: False
2026-04-12T09:26:02.394 [DEBUG] [Thread-186656] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:26:02.395 [DEBUG] [Thread-186656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:26:02.395 [DEBUG] [Thread-186656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:26:02.395 [DEBUG] [Thread-186656] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:26:02.395 [DEBUG] [Thread-186656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:26:02.395 [DEBUG] [Thread-186656] [transport.py] [_log()] Compression: none
2026-04-12T09:26:02.395 [DEBUG] [Thread-186656] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:26:02.407 [DEBUG] [Thread-186656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:26:02.408 [DEBUG] [Thread-186656] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:26:02.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:26:02.409 [DEBUG] [Thread-186656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:26:02.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:26:02.410 [DEBUG] [Thread-186656] [transport.py] [_log()] userauth is OK
2026-04-12T09:26:02.411 [DEBUG] [Thread-186656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:26:02.411 [DEBUG] [Thread-186656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:26:02.411 [DEBUG] [Thread-186656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:26:02.411 [DEBUG] [Thread-186656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:26:02.435 [INFO] [Thread-186656] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:26:02.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:26:03.007 [DEBUG] [Thread-186656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:26:03.007 [DEBUG] [Thread-186656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:26:03.007 [DEBUG] [Thread-186656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:26:03.048 [DEBUG] [Thread-186656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:26:03.049 [DEBUG] [Thread-186656] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:26:03.052 [DEBUG] [Thread-186656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:26:03.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:26:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:26:03.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:26:03.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:26:03.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:26:03.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:26:03.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:26:03.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:26:03.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:26:03.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.309486 -999.00  +10.50  20.78     96  +10.00 1 3 1 3 1   887    0 0.49 -0.20 ----- 19.0 20.8 283.8 24.7 13.1 -3.5 12.7 -2.9 12.0 -2.4 12.7 -2.4
2026-04-12T09:26:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:26:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:26:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.309486
2026-04-12T09:26:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:26:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:26:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:26:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:26:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:26:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:25:40', tmtdew=-0.12071, humidity=100.738, cloud=0.0, wind=27.5926, temperature=11.0001, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:25:39.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:26:03.082 [DEBUG] [Thread-186656] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:26:03.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:26:03.193 [DEBUG] [Thread-186659] [transport.py] [_log()] starting thread (client mode): 0xb0f8c9d0
2026-04-12T09:26:03.194 [DEBUG] [Thread-186659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:26:03.224 [DEBUG] [Thread-186659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:26:03.224 [INFO] [Thread-186659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:26:03.246 [DEBUG] [Thread-186659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:26:03.246 [DEBUG] [Thread-186659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:26:03.246 [DEBUG] [Thread-186659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] client lang: <none>
2026-04-12T09:26:03.247 [DEBUG] [Thread-186659] [transport.py] [_log()] server lang: <none>
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] kex follows: False
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] Compression: none
2026-04-12T09:26:03.248 [DEBUG] [Thread-186659] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:26:03.324 [DEBUG] [Thread-186659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:26:03.325 [DEBUG] [Thread-186659] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:26:03.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:26:03.326 [DEBUG] [Thread-186659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:26:03.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:26:03.418 [DEBUG] [Thread-186659] [transport.py] [_log()] userauth is OK
2026-04-12T09:26:03.418 [DEBUG] [Thread-186659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:26:03.418 [DEBUG] [Thread-186659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:26:03.418 [DEBUG] [Thread-186659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:26:03.418 [DEBUG] [Thread-186659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:26:03.459 [INFO] [Thread-186659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:26:03.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:26:03.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:26:04.285 [DEBUG] [Thread-186659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:26:04.285 [DEBUG] [Thread-186659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:26:04.349 [DEBUG] [Thread-186659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:26:04.350 [DEBUG] [Thread-186659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:26:04.377 [DEBUG] [Thread-186659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:26:04.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:26:04.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')
2026-04-12T09:26:04.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:26:04.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:26:04.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:26:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:26:04.484 [DEBUG] [Thread-186659] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:26:16.160 [DEBUG] [Thread-186661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:26:25.814 [DEBUG] [Thread-186662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:26:31.208 [DEBUG] [Thread-186663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:26:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:26:34.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:26:34.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:26:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 26, 15), -0.055365, 100.336, 0.0, 22.0738, 10.3834, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:26:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:26:15
2026-04-12T09:26:36.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:26:36.300 [DEBUG] [Thread-186664] [transport.py] [_log()] starting thread (client mode): 0xa796a440
2026-04-12T09:26:36.300 [DEBUG] [Thread-186664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:26:36.322 [DEBUG] [Thread-186664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:26:36.322 [INFO] [Thread-186664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:26:36.325 [DEBUG] [Thread-186664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:26:36.325 [DEBUG] [Thread-186664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:26:36.325 [DEBUG] [Thread-186664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:26:36.325 [DEBUG] [Thread-186664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] client lang: <none>
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] server lang: <none>
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] kex follows: False
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:26:36.326 [DEBUG] [Thread-186664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:26:36.327 [DEBUG] [Thread-186664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:26:36.327 [DEBUG] [Thread-186664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:26:36.327 [DEBUG] [Thread-186664] [transport.py] [_log()] Compression: none
2026-04-12T09:26:36.327 [DEBUG] [Thread-186664] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:26:36.348 [DEBUG] [Thread-186664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:26:36.349 [DEBUG] [Thread-186664] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:26:36.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:26:36.350 [DEBUG] [Thread-186664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:26:36.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:26:36.352 [DEBUG] [Thread-186664] [transport.py] [_log()] userauth is OK
2026-04-12T09:26:36.353 [DEBUG] [Thread-186664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:26:36.353 [DEBUG] [Thread-186664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:26:36.353 [DEBUG] [Thread-186664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:26:36.353 [DEBUG] [Thread-186664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:26:36.388 [INFO] [Thread-186664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:26:36.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:26:37.100 [DEBUG] [Thread-186664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:26:37.100 [DEBUG] [Thread-186664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:26:37.101 [DEBUG] [Thread-186664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:26:37.140 [DEBUG] [Thread-186664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:26:37.140 [DEBUG] [Thread-186664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:26:37.142 [DEBUG] [Thread-186664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:26:37.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:26:37.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:26:37.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:26:37.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:26:37.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:26:37.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:26:37.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.309833 -999.00  +10.50  17.89     96  +10.00 1 3 1 3 1   887    0 0.48 -0.11 ----- 19.3 17.9 286.4 26.8 13.1 -3.6 12.7 -3.9 12.1 -2.9 12.8 -2.1
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.309833
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:26:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:26:15', tmtdew=-0.055365, humidity=100.336, cloud=0.0, wind=22.0738, temperature=10.3834, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:26:09.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:26:37.163 [DEBUG] [Thread-186664] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:26:37.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:26:37.268 [DEBUG] [Thread-186667] [transport.py] [_log()] starting thread (client mode): 0xb0f548b0
2026-04-12T09:26:37.268 [DEBUG] [Thread-186667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:26:37.310 [DEBUG] [Thread-186667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:26:37.310 [INFO] [Thread-186667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:26:37.329 [DEBUG] [Thread-186667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:26:37.329 [DEBUG] [Thread-186667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] client lang: <none>
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] server lang: <none>
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] kex follows: False
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:26:37.330 [DEBUG] [Thread-186667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:26:37.331 [DEBUG] [Thread-186667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:26:37.331 [DEBUG] [Thread-186667] [transport.py] [_log()] Compression: none
2026-04-12T09:26:37.331 [DEBUG] [Thread-186667] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:26:37.418 [DEBUG] [Thread-186667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:26:37.419 [DEBUG] [Thread-186667] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:26:37.420 [DEBUG] [Thread-186667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:26:37.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:26:37.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:26:37.513 [DEBUG] [Thread-186667] [transport.py] [_log()] userauth is OK
2026-04-12T09:26:37.514 [DEBUG] [Thread-186667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:26:37.514 [DEBUG] [Thread-186667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:26:37.514 [DEBUG] [Thread-186667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:26:37.514 [DEBUG] [Thread-186667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:26:37.552 [INFO] [Thread-186667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:26:37.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:26:37.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:26:38.377 [DEBUG] [Thread-186667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:26:38.378 [DEBUG] [Thread-186667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:26:38.447 [DEBUG] [Thread-186667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:26:38.447 [DEBUG] [Thread-186667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:26:38.476 [DEBUG] [Thread-186667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:26:38.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:26:38.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:26:38.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:26:38.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:26:38.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:26:38.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:26:38.595 [DEBUG] [Thread-186667] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:26:46.246 [DEBUG] [Thread-186669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:26:47.020 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:26:47.021 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:27:01.307 [DEBUG] [Thread-186670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:27:08.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:27:08.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:27:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:27:09.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 26, 51), -0.10576, 100.639, 0.0, 27.3809, 10.9669, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:27:09.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:26:51
2026-04-12T09:27:10.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:27:10.360 [DEBUG] [Thread-186671] [transport.py] [_log()] starting thread (client mode): 0xae5b4f70
2026-04-12T09:27:10.360 [DEBUG] [Thread-186671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:27:10.379 [DEBUG] [Thread-186671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:27:10.379 [INFO] [Thread-186671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:27:10.382 [DEBUG] [Thread-186671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:27:10.382 [DEBUG] [Thread-186671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:27:10.382 [DEBUG] [Thread-186671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:27:10.382 [DEBUG] [Thread-186671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] client lang: <none>
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] server lang: <none>
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] kex follows: False
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] Compression: none
2026-04-12T09:27:10.383 [DEBUG] [Thread-186671] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:27:10.400 [DEBUG] [Thread-186671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:27:10.401 [DEBUG] [Thread-186671] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:27:10.401 [DEBUG] [Thread-186671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:27:10.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:27:10.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:27:10.403 [DEBUG] [Thread-186671] [transport.py] [_log()] userauth is OK
2026-04-12T09:27:10.403 [DEBUG] [Thread-186671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:27:10.403 [DEBUG] [Thread-186671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:27:10.403 [DEBUG] [Thread-186671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:27:10.404 [DEBUG] [Thread-186671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:27:10.423 [INFO] [Thread-186671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:27:10.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:27:11.032 [DEBUG] [Thread-186671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:27:11.032 [DEBUG] [Thread-186671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:27:11.032 [DEBUG] [Thread-186671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:27:11.073 [DEBUG] [Thread-186671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:27:11.073 [DEBUG] [Thread-186671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:27:11.076 [DEBUG] [Thread-186671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:27:11.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:27:11.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:27:11.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:27:11.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:27:11.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:27:11.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:27:11.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:27:11.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:27:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:27:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.310180 -999.00  +10.50  22.01     96   +9.90 1 3 1 3 1   887    0 0.49 0.04 ----- 25.7 22.0 278.0 28.4 13.2 -3.5 12.7 -2.8 12.1 -2.1 12.7 -2.1
2026-04-12T09:27:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:27:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:27:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.310180
2026-04-12T09:27:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:27:11.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:27:11.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:27:11.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:27:11.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:27:11.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:26:51', tmtdew=-0.10576, humidity=100.639, cloud=0.0, wind=27.3809, temperature=10.9669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:26:39.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:27:11.102 [DEBUG] [Thread-186671] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:27:11.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:27:11.194 [DEBUG] [Thread-186674] [transport.py] [_log()] starting thread (client mode): 0xae563c70
2026-04-12T09:27:11.194 [DEBUG] [Thread-186674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:27:11.212 [DEBUG] [Thread-186674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:27:11.213 [INFO] [Thread-186674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:27:11.221 [DEBUG] [Thread-186674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] client lang: <none>
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] server lang: <none>
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] kex follows: False
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] Compression: none
2026-04-12T09:27:11.222 [DEBUG] [Thread-186674] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:27:11.278 [DEBUG] [Thread-186674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:27:11.279 [DEBUG] [Thread-186674] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:27:11.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:27:11.280 [DEBUG] [Thread-186674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:27:11.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:27:11.336 [DEBUG] [Thread-186674] [transport.py] [_log()] userauth is OK
2026-04-12T09:27:11.336 [DEBUG] [Thread-186674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:27:11.336 [DEBUG] [Thread-186674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:27:11.336 [DEBUG] [Thread-186674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:27:11.336 [DEBUG] [Thread-186674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:27:11.355 [INFO] [Thread-186674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:27:11.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:27:11.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:27:12.140 [DEBUG] [Thread-186674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:27:12.141 [DEBUG] [Thread-186674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:27:12.189 [DEBUG] [Thread-186674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:27:12.189 [DEBUG] [Thread-186674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:27:12.199 [DEBUG] [Thread-186674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:27:12.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:27:12.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:27:12.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:27:12.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:27:12.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:27:12.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:27:12.236 [DEBUG] [Thread-186674] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:27:16.345 [DEBUG] [Thread-186676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:27:25.858 [DEBUG] [Thread-186677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:27:31.403 [DEBUG] [Thread-186678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:27:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:27:42.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:27:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:27:43.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 27, 27), -0.002825, 100.319, 0.0, 26.325, 10.4503, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:27:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:27:27
2026-04-12T09:27:44.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:27:44.154 [DEBUG] [Thread-186679] [transport.py] [_log()] starting thread (client mode): 0xae5b6860
2026-04-12T09:27:44.154 [DEBUG] [Thread-186679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:27:44.174 [DEBUG] [Thread-186679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:27:44.174 [INFO] [Thread-186679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:27:44.175 [DEBUG] [Thread-186679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:27:44.175 [DEBUG] [Thread-186679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:27:44.175 [DEBUG] [Thread-186679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:27:44.175 [DEBUG] [Thread-186679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:44.175 [DEBUG] [Thread-186679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] client lang: <none>
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] server lang: <none>
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] kex follows: False
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] Compression: none
2026-04-12T09:27:44.176 [DEBUG] [Thread-186679] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:27:44.188 [DEBUG] [Thread-186679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:27:44.189 [DEBUG] [Thread-186679] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:27:44.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:27:44.190 [DEBUG] [Thread-186679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:27:44.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:27:44.192 [DEBUG] [Thread-186679] [transport.py] [_log()] userauth is OK
2026-04-12T09:27:44.192 [DEBUG] [Thread-186679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:27:44.192 [DEBUG] [Thread-186679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:27:44.192 [DEBUG] [Thread-186679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:27:44.192 [DEBUG] [Thread-186679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:27:44.212 [INFO] [Thread-186679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:27:44.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:27:44.791 [DEBUG] [Thread-186679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:27:44.791 [DEBUG] [Thread-186679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:27:44.792 [DEBUG] [Thread-186679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:27:44.832 [DEBUG] [Thread-186679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:27:44.832 [DEBUG] [Thread-186679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:27:44.834 [DEBUG] [Thread-186679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:27:44.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:27:44.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:27:44.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:27:44.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:27:44.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:27:44.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:27:44.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:27:44.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:27:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:27:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.310875 -999.00  +10.50  24.25     96  +10.00 1 3 1 3 1   887    0 0.50 0.27 ----- 26.6 24.2 274.8 28.6 13.2 -4.0 12.8 -4.1 12.1 -2.4 12.7 -2.2
2026-04-12T09:27:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:27:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:27:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.310875
2026-04-12T09:27:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:27:44.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:27:44.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:27:44.857 [DEBUG] [Thread-186679] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:27:44.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:27:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:27:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:27:27', tmtdew=-0.002825, humidity=100.319, cloud=0.0, wind=26.325, temperature=10.4503, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:27:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:27:44.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:27:44.970 [DEBUG] [Thread-186682] [transport.py] [_log()] starting thread (client mode): 0xae5b4880
2026-04-12T09:27:44.970 [DEBUG] [Thread-186682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:27:45.006 [DEBUG] [Thread-186682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:27:45.006 [INFO] [Thread-186682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:27:45.033 [DEBUG] [Thread-186682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:27:45.033 [DEBUG] [Thread-186682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:27:45.033 [DEBUG] [Thread-186682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] client lang: <none>
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] server lang: <none>
2026-04-12T09:27:45.034 [DEBUG] [Thread-186682] [transport.py] [_log()] kex follows: False
2026-04-12T09:27:45.035 [DEBUG] [Thread-186682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:27:45.035 [DEBUG] [Thread-186682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:27:45.035 [DEBUG] [Thread-186682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:27:45.035 [DEBUG] [Thread-186682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:27:45.035 [DEBUG] [Thread-186682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:27:45.035 [DEBUG] [Thread-186682] [transport.py] [_log()] Compression: none
2026-04-12T09:27:45.035 [DEBUG] [Thread-186682] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:27:45.112 [DEBUG] [Thread-186682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:27:45.113 [DEBUG] [Thread-186682] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:27:45.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:27:45.114 [DEBUG] [Thread-186682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:27:45.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:27:45.210 [DEBUG] [Thread-186682] [transport.py] [_log()] userauth is OK
2026-04-12T09:27:45.210 [DEBUG] [Thread-186682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:27:45.210 [DEBUG] [Thread-186682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:27:45.210 [DEBUG] [Thread-186682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:27:45.210 [DEBUG] [Thread-186682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:27:45.248 [INFO] [Thread-186682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:27:45.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:27:45.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:27:46.058 [DEBUG] [Thread-186682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:27:46.059 [DEBUG] [Thread-186682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:27:46.126 [DEBUG] [Thread-186682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:27:46.127 [DEBUG] [Thread-186682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:27:46.159 [DEBUG] [Thread-186682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:27:46.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:27:46.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:27:46.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:27:46.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:27:46.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:27:46.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:27:46.270 [DEBUG] [Thread-186682] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:27:46.438 [DEBUG] [Thread-186684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:27:47.163 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:27:47.165 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:01.479 [DEBUG] [Thread-186685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:28:16.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:28:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:28:16.516 [DEBUG] [Thread-186686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:17.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 28, 2), -0.007785, 100.352, 0.0, 26.0251, 10.4503, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:28:17.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:28:02
2026-04-12T09:28:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:28:18.165 [DEBUG] [Thread-186687] [transport.py] [_log()] starting thread (client mode): 0xae5b6410
2026-04-12T09:28:18.165 [DEBUG] [Thread-186687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:28:18.181 [DEBUG] [Thread-186687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:28:18.181 [INFO] [Thread-186687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] client lang: <none>
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] server lang: <none>
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] kex follows: False
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] Compression: none
2026-04-12T09:28:18.184 [DEBUG] [Thread-186687] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:28:18.191 [DEBUG] [Thread-186687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:28:18.192 [DEBUG] [Thread-186687] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:28:18.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:28:18.192 [DEBUG] [Thread-186687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:28:18.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:28:18.193 [DEBUG] [Thread-186687] [transport.py] [_log()] userauth is OK
2026-04-12T09:28:18.194 [DEBUG] [Thread-186687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:28:18.194 [DEBUG] [Thread-186687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:28:18.194 [DEBUG] [Thread-186687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:28:18.194 [DEBUG] [Thread-186687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:28:18.226 [INFO] [Thread-186687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:28:18.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:28:18.815 [DEBUG] [Thread-186687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:28:18.815 [DEBUG] [Thread-186687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:28:18.815 [DEBUG] [Thread-186687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:28:18.857 [DEBUG] [Thread-186687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:28:18.857 [DEBUG] [Thread-186687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:28:18.859 [DEBUG] [Thread-186687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:28:18.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:28:18.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:28:18.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:28:18.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:28:18.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:28:18.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:28:18.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:28:18.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:28:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:28:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.311222 -999.00  +10.50  22.70     96  +10.00 1 3 1 3 1   887    0 0.51 0.53 ----- 20.8 22.7 277.0 26.2 13.2 -3.4 12.8 -3.1 12.1 -2.2 12.8 -2.3
2026-04-12T09:28:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:28:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:28:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.311222
2026-04-12T09:28:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:28:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:28:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:28:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:28:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:28:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:28:02', tmtdew=-0.007785, humidity=100.352, cloud=0.0, wind=26.0251, temperature=10.4503, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:28:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:28:18.880 [DEBUG] [Thread-186687] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:28:18.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:28:18.971 [DEBUG] [Thread-186690] [transport.py] [_log()] starting thread (client mode): 0xa7968250
2026-04-12T09:28:18.971 [DEBUG] [Thread-186690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:28:18.986 [DEBUG] [Thread-186690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:28:18.986 [INFO] [Thread-186690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:28:18.993 [DEBUG] [Thread-186690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:28:18.994 [DEBUG] [Thread-186690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:28:18.994 [DEBUG] [Thread-186690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:28:18.994 [DEBUG] [Thread-186690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:18.994 [DEBUG] [Thread-186690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:18.994 [DEBUG] [Thread-186690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:18.994 [DEBUG] [Thread-186690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] client lang: <none>
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] server lang: <none>
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] kex follows: False
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] Compression: none
2026-04-12T09:28:18.995 [DEBUG] [Thread-186690] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:28:19.051 [DEBUG] [Thread-186690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:28:19.051 [DEBUG] [Thread-186690] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:28:19.052 [DEBUG] [Thread-186690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:28:19.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:28:19.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:28:19.107 [DEBUG] [Thread-186690] [transport.py] [_log()] userauth is OK
2026-04-12T09:28:19.108 [DEBUG] [Thread-186690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:28:19.108 [DEBUG] [Thread-186690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:28:19.108 [DEBUG] [Thread-186690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:28:19.108 [DEBUG] [Thread-186690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:28:19.128 [INFO] [Thread-186690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:28:19.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:28:19.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:28:19.941 [DEBUG] [Thread-186690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:28:19.941 [DEBUG] [Thread-186690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:28:19.989 [DEBUG] [Thread-186690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:28:19.989 [DEBUG] [Thread-186690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:28:19.998 [DEBUG] [Thread-186690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:28:20.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:28:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:28:20.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:28:20.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:28:20.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:28:20.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:28:20.045 [DEBUG] [Thread-186690] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:28:25.891 [DEBUG] [Thread-186692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:31.554 [DEBUG] [Thread-186693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:46.605 [DEBUG] [Thread-186694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:47.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:47.307 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:28:50.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:28:50.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:28:50.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:28:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 28, 38), -0.11575, 100.705, 0.0, 25.8286, 11.0001, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:28:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:28:38
2026-04-12T09:28:51.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:28:51.920 [DEBUG] [Thread-186695] [transport.py] [_log()] starting thread (client mode): 0xae5b58d0
2026-04-12T09:28:51.920 [DEBUG] [Thread-186695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:28:51.941 [DEBUG] [Thread-186695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:28:51.941 [INFO] [Thread-186695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] client lang: <none>
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] server lang: <none>
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] kex follows: False
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] Compression: none
2026-04-12T09:28:51.942 [DEBUG] [Thread-186695] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:28:51.954 [DEBUG] [Thread-186695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:28:51.955 [DEBUG] [Thread-186695] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:28:51.955 [DEBUG] [Thread-186695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:28:51.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:28:51.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:28:51.957 [DEBUG] [Thread-186695] [transport.py] [_log()] userauth is OK
2026-04-12T09:28:51.957 [DEBUG] [Thread-186695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:28:51.957 [DEBUG] [Thread-186695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:28:51.958 [DEBUG] [Thread-186695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:28:51.958 [DEBUG] [Thread-186695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:28:51.976 [INFO] [Thread-186695] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:28:51.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:28:52.638 [DEBUG] [Thread-186695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:28:52.638 [DEBUG] [Thread-186695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:28:52.639 [DEBUG] [Thread-186695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:28:52.679 [DEBUG] [Thread-186695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:28:52.679 [DEBUG] [Thread-186695] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:28:52.683 [DEBUG] [Thread-186695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:28:52.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:28:52.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:28:52.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:28:52.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:28:52.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:28:52.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:28:52.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:28:52.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:28:52.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:28:52.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.311569 -999.00  +10.50  21.33     96  +10.00 1 3 1 3 1   887    0 0.52 0.64 ----- 18.4 21.3 272.4 24.0 13.2 -3.6 12.8 -3.6 12.1 -2.7 12.8 -2.2
2026-04-12T09:28:52.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:28:52.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:28:52.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.311569
2026-04-12T09:28:52.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:28:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:28:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:28:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:28:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:28:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:28:38', tmtdew=-0.11575, humidity=100.705, cloud=0.0, wind=25.8286, temperature=11.0001, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:28:39.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:28:52.709 [DEBUG] [Thread-186695] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:28:52.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:28:52.802 [DEBUG] [Thread-186698] [transport.py] [_log()] starting thread (client mode): 0xae561600
2026-04-12T09:28:52.803 [DEBUG] [Thread-186698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:28:52.819 [DEBUG] [Thread-186698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:28:52.820 [INFO] [Thread-186698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:28:52.827 [DEBUG] [Thread-186698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] client lang: <none>
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] server lang: <none>
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] kex follows: False
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] Compression: none
2026-04-12T09:28:52.828 [DEBUG] [Thread-186698] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:28:52.885 [DEBUG] [Thread-186698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:28:52.886 [DEBUG] [Thread-186698] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:28:52.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:28:52.887 [DEBUG] [Thread-186698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:28:52.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:28:52.948 [DEBUG] [Thread-186698] [transport.py] [_log()] userauth is OK
2026-04-12T09:28:52.948 [DEBUG] [Thread-186698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:28:52.948 [DEBUG] [Thread-186698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:28:52.948 [DEBUG] [Thread-186698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:28:52.948 [DEBUG] [Thread-186698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:28:52.967 [INFO] [Thread-186698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:28:52.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:28:52.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:28:53.823 [DEBUG] [Thread-186698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:28:53.823 [DEBUG] [Thread-186698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:28:53.871 [DEBUG] [Thread-186698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:28:53.871 [DEBUG] [Thread-186698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:28:53.880 [DEBUG] [Thread-186698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:28:53.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:28: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')
2026-04-12T09:28:53.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:28:53.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:28:53.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:28:53.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:28:53.917 [DEBUG] [Thread-186698] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:29:01.640 [DEBUG] [Thread-186700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:29:16.703 [DEBUG] [Thread-186701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:29:23.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:29:23.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:29:23.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:29:25.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 29, 13), -0.0129, 100.386, 0.0, 23.6084, 10.4332, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:29:25.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:29:13
2026-04-12T09:29:25.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:29:25.766 [DEBUG] [Thread-186702] [transport.py] [_log()] starting thread (client mode): 0xa79695a0
2026-04-12T09:29:25.766 [DEBUG] [Thread-186702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:29:25.789 [DEBUG] [Thread-186702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:29:25.789 [INFO] [Thread-186702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:29:25.792 [DEBUG] [Thread-186702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] client lang: <none>
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] server lang: <none>
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] kex follows: False
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:29:25.793 [DEBUG] [Thread-186702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:29:25.794 [DEBUG] [Thread-186702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:29:25.794 [DEBUG] [Thread-186702] [transport.py] [_log()] Compression: none
2026-04-12T09:29:25.794 [DEBUG] [Thread-186702] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:29:25.802 [DEBUG] [Thread-186702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:29:25.803 [DEBUG] [Thread-186702] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:29:25.803 [DEBUG] [Thread-186702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:29:25.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:29:25.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:29:25.805 [DEBUG] [Thread-186702] [transport.py] [_log()] userauth is OK
2026-04-12T09:29:25.805 [DEBUG] [Thread-186702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:29:25.805 [DEBUG] [Thread-186702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:29:25.805 [DEBUG] [Thread-186702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:29:25.805 [DEBUG] [Thread-186702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:29:25.828 [INFO] [Thread-186702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:29:25.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:29:25.940 [DEBUG] [Thread-186704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:29:26.469 [DEBUG] [Thread-186702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:29:26.469 [DEBUG] [Thread-186702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:29:26.469 [DEBUG] [Thread-186702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:29:26.510 [DEBUG] [Thread-186702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:29:26.510 [DEBUG] [Thread-186702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:29:26.514 [DEBUG] [Thread-186702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:29:26.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:29:26.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:29:26.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:29:26.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:29:26.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:29:26.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:29:26.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:29:26.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:29:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:29:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.311916 -999.00  +10.60  18.99     96  +10.10 1 3 1 3 1   887    0 0.51 0.73 ----- 17.3 19.0 275.0 26.1 13.2 -3.1 12.8 -2.3 12.2 -3.1 12.8 -2.3
2026-04-12T09:29:26.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:29:26.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:29:26.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.311916
2026-04-12T09:29:26.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:29:26.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:29:26.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:29:26.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:29:26.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:29:26.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:29:13', tmtdew=-0.0129, humidity=100.386, cloud=0.0, wind=23.6084, temperature=10.4332, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:29:09.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:29:26.541 [DEBUG] [Thread-186702] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:29:26.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:29:26.635 [DEBUG] [Thread-186706] [transport.py] [_log()] starting thread (client mode): 0xae5b54e0
2026-04-12T09:29:26.635 [DEBUG] [Thread-186706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:29:26.650 [DEBUG] [Thread-186706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:29:26.651 [INFO] [Thread-186706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:29:26.658 [DEBUG] [Thread-186706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:29:26.658 [DEBUG] [Thread-186706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:29:26.658 [DEBUG] [Thread-186706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] client lang: <none>
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] server lang: <none>
2026-04-12T09:29:26.659 [DEBUG] [Thread-186706] [transport.py] [_log()] kex follows: False
2026-04-12T09:29:26.660 [DEBUG] [Thread-186706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:29:26.660 [DEBUG] [Thread-186706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:29:26.660 [DEBUG] [Thread-186706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:29:26.660 [DEBUG] [Thread-186706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:29:26.660 [DEBUG] [Thread-186706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:29:26.660 [DEBUG] [Thread-186706] [transport.py] [_log()] Compression: none
2026-04-12T09:29:26.660 [DEBUG] [Thread-186706] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:29:26.719 [DEBUG] [Thread-186706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:29:26.720 [DEBUG] [Thread-186706] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:29:26.721 [DEBUG] [Thread-186706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:29:26.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:29:26.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:29:26.775 [DEBUG] [Thread-186706] [transport.py] [_log()] userauth is OK
2026-04-12T09:29:26.775 [DEBUG] [Thread-186706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:29:26.776 [DEBUG] [Thread-186706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:29:26.776 [DEBUG] [Thread-186706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:29:26.776 [DEBUG] [Thread-186706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:29:26.795 [INFO] [Thread-186706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:29:26.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:29:26.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:29:27.662 [DEBUG] [Thread-186706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:29:27.662 [DEBUG] [Thread-186706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:29:27.710 [DEBUG] [Thread-186706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:29:27.710 [DEBUG] [Thread-186706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:29:27.719 [DEBUG] [Thread-186706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:29:27.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:29:27.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:29:27.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:29:27.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:29:27.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:29:27.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:29:27.751 [DEBUG] [Thread-186706] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:29:31.740 [DEBUG] [Thread-186708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:29:46.798 [DEBUG] [Thread-186709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:29:47.447 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:29:47.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:29:57.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:29:57.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:29:57.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:29:59.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 29, 49), -0.11073, 100.672, 0.0, 28.157, 10.9669, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:29:59.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:29:49
2026-04-12T09:29:59.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:29:59.729 [DEBUG] [Thread-186710] [transport.py] [_log()] starting thread (client mode): 0xae5b44f0
2026-04-12T09:29:59.730 [DEBUG] [Thread-186710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:29:59.749 [DEBUG] [Thread-186710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:29:59.749 [INFO] [Thread-186710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] client lang: <none>
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] server lang: <none>
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] kex follows: False
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] Compression: none
2026-04-12T09:29:59.753 [DEBUG] [Thread-186710] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:29:59.770 [DEBUG] [Thread-186710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:29:59.771 [DEBUG] [Thread-186710] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:29:59.772 [DEBUG] [Thread-186710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:29:59.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:29:59.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:29:59.773 [DEBUG] [Thread-186710] [transport.py] [_log()] userauth is OK
2026-04-12T09:29:59.774 [DEBUG] [Thread-186710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:29:59.774 [DEBUG] [Thread-186710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:29:59.774 [DEBUG] [Thread-186710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:29:59.774 [DEBUG] [Thread-186710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:29:59.798 [INFO] [Thread-186710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:29:59.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:30:00.453 [DEBUG] [Thread-186710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:30:00.453 [DEBUG] [Thread-186710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:30:00.453 [DEBUG] [Thread-186710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:30:00.494 [DEBUG] [Thread-186710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:30:00.494 [DEBUG] [Thread-186710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:30:00.497 [DEBUG] [Thread-186710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:30:00.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:30:00.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:30:00.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:30:00.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:30:00.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:30:00.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:30:00.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:30:00.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:30:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:30:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.312264 -999.00  +10.60  20.86     96  +10.10 1 3 1 3 1   887    0 0.51 0.74 ----- 18.6 20.9 284.4 23.7 13.2 -3.1 12.9 -2.9 12.2 -2.8 12.8 -2.4
2026-04-12T09:30:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:30:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.312264
2026-04-12T09:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:30:00.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:30:00.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:30:00.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:30:00.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:29:49', tmtdew=-0.11073, humidity=100.672, cloud=0.0, wind=28.157, temperature=10.9669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:29:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:30:00.521 [DEBUG] [Thread-186710] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:30:00.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:30:00.649 [DEBUG] [Thread-186713] [transport.py] [_log()] starting thread (client mode): 0xb0f8d660
2026-04-12T09:30:00.649 [DEBUG] [Thread-186713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:30:00.687 [DEBUG] [Thread-186713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:30:00.688 [INFO] [Thread-186713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:30:00.726 [DEBUG] [Thread-186713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:30:00.726 [DEBUG] [Thread-186713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:30:00.726 [DEBUG] [Thread-186713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:30:00.726 [DEBUG] [Thread-186713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] client lang: <none>
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] server lang: <none>
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] kex follows: False
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:30:00.727 [DEBUG] [Thread-186713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:30:00.728 [DEBUG] [Thread-186713] [transport.py] [_log()] Compression: none
2026-04-12T09:30:00.728 [DEBUG] [Thread-186713] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:30:00.817 [DEBUG] [Thread-186713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:30:00.818 [DEBUG] [Thread-186713] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:30:00.818 [DEBUG] [Thread-186713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:30:00.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:30:00.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:30:00.938 [DEBUG] [Thread-186713] [transport.py] [_log()] userauth is OK
2026-04-12T09:30:00.938 [DEBUG] [Thread-186713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:30:00.938 [DEBUG] [Thread-186713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:30:00.938 [DEBUG] [Thread-186713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:30:00.938 [DEBUG] [Thread-186713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:30:00.989 [INFO] [Thread-186713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:30:00.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:30:00.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:30:01.824 [DEBUG] [Thread-186713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:30:01.824 [DEBUG] [Thread-186713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:30:01.833 [DEBUG] [Thread-186715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:30:01.902 [DEBUG] [Thread-186713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:30:01.903 [DEBUG] [Thread-186713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:30:01.941 [DEBUG] [Thread-186713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:30:01.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:30:01.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:30:02.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:30:02.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:30:02.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:30:02.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:30:02.078 [DEBUG] [Thread-186713] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:30:16.878 [DEBUG] [Thread-186716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:30:25.973 [DEBUG] [Thread-186717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:30:31.916 [DEBUG] [Thread-186718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:30:32.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:30:32.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:30:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:30:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 30, 25), -0.005275, 100.336, 0.0, 25.038, 10.3837, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:30:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:30:25
2026-04-12T09:30:33.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:30:33.892 [DEBUG] [Thread-186719] [transport.py] [_log()] starting thread (client mode): 0xae561ff0
2026-04-12T09:30:33.892 [DEBUG] [Thread-186719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:30:33.911 [DEBUG] [Thread-186719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:30:33.911 [INFO] [Thread-186719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] client lang: <none>
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] server lang: <none>
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] kex follows: False
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] Compression: none
2026-04-12T09:30:33.914 [DEBUG] [Thread-186719] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:30:33.929 [DEBUG] [Thread-186719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:30:33.929 [DEBUG] [Thread-186719] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:30:33.929 [DEBUG] [Thread-186719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:30:33.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:30:33.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:30:33.930 [DEBUG] [Thread-186719] [transport.py] [_log()] userauth is OK
2026-04-12T09:30:33.930 [DEBUG] [Thread-186719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:30:33.930 [DEBUG] [Thread-186719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:30:33.930 [DEBUG] [Thread-186719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:30:33.930 [DEBUG] [Thread-186719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:30:33.942 [INFO] [Thread-186719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:30:33.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:30:45.684 [DEBUG] [Thread-186719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:30:45.684 [DEBUG] [Thread-186719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:30:45.685 [DEBUG] [Thread-186719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:30:45.725 [DEBUG] [Thread-186719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:30:45.725 [DEBUG] [Thread-186719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:30:45.729 [DEBUG] [Thread-186719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:30:45.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:30:45.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:30:45.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:30:45.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:30:45.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:30:45.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:30:45.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:30:45.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:30:45.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:30:45.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.312264 -999.00  +10.60  20.86     96  +10.10 1 3 1 3 1   887    0 0.51 0.74 ----- 18.6 20.9 284.4 23.7 13.2 -3.1 12.9 -2.9 12.2 -2.8 12.8 -2.4
2026-04-12T09:30:45.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:30:45.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:30:45.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.312264
2026-04-12T09:30:45.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:30:45.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:30:45.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:30:45.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:30:45.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:30:45.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:30:25', tmtdew=-0.005275, humidity=100.336, cloud=0.0, wind=25.038, temperature=10.3837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:29:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:30:45.805 [DEBUG] [Thread-186719] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:30:45.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:30:45.932 [DEBUG] [Thread-186722] [transport.py] [_log()] starting thread (client mode): 0xb0f56d40
2026-04-12T09:30:45.932 [DEBUG] [Thread-186722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:30:45.974 [DEBUG] [Thread-186722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:30:45.974 [INFO] [Thread-186722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:30:45.987 [DEBUG] [Thread-186722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] client lang: <none>
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] server lang: <none>
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] kex follows: False
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:30:45.988 [DEBUG] [Thread-186722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:30:45.989 [DEBUG] [Thread-186722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:30:45.989 [DEBUG] [Thread-186722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:30:45.989 [DEBUG] [Thread-186722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:30:45.989 [DEBUG] [Thread-186722] [transport.py] [_log()] Compression: none
2026-04-12T09:30:45.989 [DEBUG] [Thread-186722] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:30:46.104 [DEBUG] [Thread-186722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:30:46.105 [DEBUG] [Thread-186722] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:30:46.105 [DEBUG] [Thread-186722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:30:46.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:30:46.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:30:46.219 [DEBUG] [Thread-186722] [transport.py] [_log()] userauth is OK
2026-04-12T09:30:46.219 [DEBUG] [Thread-186722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:30:46.220 [DEBUG] [Thread-186722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:30:46.220 [DEBUG] [Thread-186722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:30:46.220 [DEBUG] [Thread-186722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:30:46.267 [INFO] [Thread-186722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:30:46.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:30:46.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:30:46.956 [DEBUG] [Thread-186724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:30:47.118 [DEBUG] [Thread-186722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:30:47.118 [DEBUG] [Thread-186722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:30:47.194 [DEBUG] [Thread-186722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:30:47.195 [DEBUG] [Thread-186722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:30:47.231 [DEBUG] [Thread-186722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:30:47.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:30:47.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:30:47.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:30:47.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:30:47.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:30:47.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:30:47.384 [DEBUG] [Thread-186722] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:30:47.587 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:30:47.589 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:02.014 [DEBUG] [Thread-186725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:17.052 [DEBUG] [Thread-186726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:17.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:31:17.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:31:17.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:31:18.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 31), -0.007785, 100.352, 0.0, 25.4437, 10.3503, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:31:18.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:31:00
2026-04-12T09:31:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:31:19.235 [DEBUG] [Thread-186727] [transport.py] [_log()] starting thread (client mode): 0xb0f54370
2026-04-12T09:31:19.236 [DEBUG] [Thread-186727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:31:19.255 [DEBUG] [Thread-186727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:31:19.255 [INFO] [Thread-186727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] client lang: <none>
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] server lang: <none>
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] kex follows: False
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] Compression: none
2026-04-12T09:31:19.258 [DEBUG] [Thread-186727] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:31:19.276 [DEBUG] [Thread-186727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:31:19.277 [DEBUG] [Thread-186727] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:31:19.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:31:19.278 [DEBUG] [Thread-186727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:31:19.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:31:19.279 [DEBUG] [Thread-186727] [transport.py] [_log()] userauth is OK
2026-04-12T09:31:19.280 [DEBUG] [Thread-186727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:31:19.280 [DEBUG] [Thread-186727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:31:19.280 [DEBUG] [Thread-186727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:31:19.280 [DEBUG] [Thread-186727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:31:19.295 [INFO] [Thread-186727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:31:19.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:31:20.007 [DEBUG] [Thread-186727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:31:20.008 [DEBUG] [Thread-186727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:31:20.008 [DEBUG] [Thread-186727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:31:20.049 [DEBUG] [Thread-186727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:31:20.049 [DEBUG] [Thread-186727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:31:20.052 [DEBUG] [Thread-186727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:31:20.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:31:20.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:31:20.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:31:20.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:31:20.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:31:20.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:31:20.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:31:20.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:31:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:31:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.313305 -999.00  +10.50  17.00     96  +10.00 1 3 1 3 1   887    0 0.56 2.02 ----- 19.4 17.0 281.2 23.6 13.4 -4.9 13.0 -3.1 12.3 -3.3 13.0 -3.1
2026-04-12T09:31:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:31:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:31:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.313305
2026-04-12T09:31:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:31:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:31:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:31:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:31:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:31:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:31:00', tmtdew=-0.007785, humidity=100.352, cloud=0.0, wind=25.4437, temperature=10.3503, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:31:09.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:31:20.077 [DEBUG] [Thread-186727] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:31:20.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:31:20.194 [DEBUG] [Thread-186730] [transport.py] [_log()] starting thread (client mode): 0xa7969ea0
2026-04-12T09:31:20.194 [DEBUG] [Thread-186730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:31:20.236 [DEBUG] [Thread-186730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:31:20.237 [INFO] [Thread-186730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:31:20.271 [DEBUG] [Thread-186730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:31:20.271 [DEBUG] [Thread-186730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:31:20.271 [DEBUG] [Thread-186730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] client lang: <none>
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] server lang: <none>
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] kex follows: False
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:31:20.272 [DEBUG] [Thread-186730] [transport.py] [_log()] Compression: none
2026-04-12T09:31:20.273 [DEBUG] [Thread-186730] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:31:20.366 [DEBUG] [Thread-186730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:31:20.367 [DEBUG] [Thread-186730] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:31:20.367 [DEBUG] [Thread-186730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:31:20.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:31:20.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:31:20.482 [DEBUG] [Thread-186730] [transport.py] [_log()] userauth is OK
2026-04-12T09:31:20.482 [DEBUG] [Thread-186730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:31:20.482 [DEBUG] [Thread-186730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:31:20.482 [DEBUG] [Thread-186730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:31:20.482 [DEBUG] [Thread-186730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:31:20.527 [INFO] [Thread-186730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:31:20.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:31:20.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:31:21.387 [DEBUG] [Thread-186730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:31:21.387 [DEBUG] [Thread-186730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:31:21.465 [DEBUG] [Thread-186730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:31:21.466 [DEBUG] [Thread-186730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:31:21.505 [DEBUG] [Thread-186730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:31:21.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:31:21.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:31:21.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:31:21.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:31:21.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:31:21.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:31:21.635 [DEBUG] [Thread-186730] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:31:26.011 [DEBUG] [Thread-186732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:32.089 [DEBUG] [Thread-186733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:47.141 [DEBUG] [Thread-186734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:47.728 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:47.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:31:51.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:31:51.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:31:51.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:31:52.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 31, 36), -0.11078, 100.672, 0.0, 21.5597, 11.0001, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:31:52.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:31:36
2026-04-12T09:31:53.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:31:53.428 [DEBUG] [Thread-186735] [transport.py] [_log()] starting thread (client mode): 0xae51b940
2026-04-12T09:31:53.428 [DEBUG] [Thread-186735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:31:53.441 [DEBUG] [Thread-186735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:31:53.441 [INFO] [Thread-186735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] client lang: <none>
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] server lang: <none>
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] kex follows: False
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:31:53.442 [DEBUG] [Thread-186735] [transport.py] [_log()] Compression: none
2026-04-12T09:31:53.443 [DEBUG] [Thread-186735] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:31:53.451 [DEBUG] [Thread-186735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:31:53.451 [DEBUG] [Thread-186735] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:31:53.452 [DEBUG] [Thread-186735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:31:53.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:31:53.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:31:53.453 [DEBUG] [Thread-186735] [transport.py] [_log()] userauth is OK
2026-04-12T09:31:53.454 [DEBUG] [Thread-186735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:31:53.454 [DEBUG] [Thread-186735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:31:53.454 [DEBUG] [Thread-186735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:31:53.454 [DEBUG] [Thread-186735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:31:53.479 [INFO] [Thread-186735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:31:53.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:31:54.040 [DEBUG] [Thread-186735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:31:54.040 [DEBUG] [Thread-186735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:31:54.040 [DEBUG] [Thread-186735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:31:54.081 [DEBUG] [Thread-186735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:31:54.081 [DEBUG] [Thread-186735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:31:54.085 [DEBUG] [Thread-186735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:31:54.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:31:54.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:31:54.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:31:54.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:31:54.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:31:54.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:31:54.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:31:54.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:31:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:31:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.313653 -999.00  +10.60  19.55     96  +10.00 1 3 1 3 1   887    0 0.58 2.63 ----- 18.6 19.6 279.2 24.1 13.4 -4.0 13.0 -3.9 12.3 -3.1 13.1 -2.6
2026-04-12T09:31:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:31:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:31:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.313653
2026-04-12T09:31:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:31:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:31:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:31:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:31:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:31:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:31:36', tmtdew=-0.11078, humidity=100.672, cloud=0.0, wind=21.5597, temperature=11.0001, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:31:39.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:31:54.111 [DEBUG] [Thread-186735] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:31:54.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:31:54.202 [DEBUG] [Thread-186738] [transport.py] [_log()] starting thread (client mode): 0xb0f8edd0
2026-04-12T09:31:54.202 [DEBUG] [Thread-186738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:31:54.218 [DEBUG] [Thread-186738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:31:54.218 [INFO] [Thread-186738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:31:54.226 [DEBUG] [Thread-186738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] client lang: <none>
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] server lang: <none>
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] kex follows: False
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] Compression: none
2026-04-12T09:31:54.227 [DEBUG] [Thread-186738] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:31:54.287 [DEBUG] [Thread-186738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:31:54.287 [DEBUG] [Thread-186738] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:31:54.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:31:54.288 [DEBUG] [Thread-186738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:31:54.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:31:54.343 [DEBUG] [Thread-186738] [transport.py] [_log()] userauth is OK
2026-04-12T09:31:54.343 [DEBUG] [Thread-186738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:31:54.344 [DEBUG] [Thread-186738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:31:54.344 [DEBUG] [Thread-186738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:31:54.344 [DEBUG] [Thread-186738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:31:54.367 [INFO] [Thread-186738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:31:54.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:31:54.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:31:55.210 [DEBUG] [Thread-186738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:31:55.210 [DEBUG] [Thread-186738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:31:55.258 [DEBUG] [Thread-186738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:31:55.258 [DEBUG] [Thread-186738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:31:55.268 [DEBUG] [Thread-186738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:31:55.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:31:55.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:31:55.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:31:55.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:31:55.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:31:55.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:31:55.305 [DEBUG] [Thread-186738] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:32:02.180 [DEBUG] [Thread-186740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:32:17.234 [DEBUG] [Thread-186741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:32:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:32:25.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:32:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:32:26.043 [DEBUG] [Thread-186742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:32:26.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 32, 11), -0.05542, 100.336, 0.0, 20.5024, 10.5666, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:32:26.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:32:11
2026-04-12T09:32:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:32:27.125 [DEBUG] [Thread-186743] [transport.py] [_log()] starting thread (client mode): 0xae563550
2026-04-12T09:32:27.125 [DEBUG] [Thread-186743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:32:27.145 [DEBUG] [Thread-186743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:32:27.145 [INFO] [Thread-186743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:32:27.148 [DEBUG] [Thread-186743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:32:27.148 [DEBUG] [Thread-186743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:32:27.148 [DEBUG] [Thread-186743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:32:27.148 [DEBUG] [Thread-186743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:32:27.148 [DEBUG] [Thread-186743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] client lang: <none>
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] server lang: <none>
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] kex follows: False
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] Compression: none
2026-04-12T09:32:27.149 [DEBUG] [Thread-186743] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:32:27.166 [DEBUG] [Thread-186743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:32:27.166 [DEBUG] [Thread-186743] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:32:27.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:32:27.167 [DEBUG] [Thread-186743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:32:27.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:32:27.170 [DEBUG] [Thread-186743] [transport.py] [_log()] userauth is OK
2026-04-12T09:32:27.170 [DEBUG] [Thread-186743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:32:27.170 [DEBUG] [Thread-186743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:32:27.170 [DEBUG] [Thread-186743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:32:27.170 [DEBUG] [Thread-186743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:32:27.188 [INFO] [Thread-186743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:32:27.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:32:27.769 [DEBUG] [Thread-186743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:32:27.770 [DEBUG] [Thread-186743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:32:27.770 [DEBUG] [Thread-186743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:32:27.811 [DEBUG] [Thread-186743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:32:27.811 [DEBUG] [Thread-186743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:32:27.812 [DEBUG] [Thread-186743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:32:27.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:32:27.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:32:27.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:32:27.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:32:27.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:32:27.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:32:27.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:32:27.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:32:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:32:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.314000 -999.00  +10.60  19.07     96  +10.00 1 3 1 3 1   887    0 0.61 3.65 ----- 20.4 19.1 289.8 23.8 13.4 -4.6 13.0 -3.2 12.3 -2.9 12.9 -3.5
2026-04-12T09:32:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:32:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:32:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.314000
2026-04-12T09:32:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:32:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:32:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:32:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:32:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:32:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:32:11', tmtdew=-0.05542, humidity=100.336, cloud=0.0, wind=20.5024, temperature=10.5666, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:32:09.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:32:27.831 [DEBUG] [Thread-186743] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:32:27.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:32:27.920 [DEBUG] [Thread-186746] [transport.py] [_log()] starting thread (client mode): 0xae563160
2026-04-12T09:32:27.920 [DEBUG] [Thread-186746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:32:27.934 [DEBUG] [Thread-186746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:32:27.934 [INFO] [Thread-186746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:32:27.942 [DEBUG] [Thread-186746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] client lang: <none>
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] server lang: <none>
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] kex follows: False
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] Compression: none
2026-04-12T09:32:27.943 [DEBUG] [Thread-186746] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:32:28.002 [DEBUG] [Thread-186746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:32:28.003 [DEBUG] [Thread-186746] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:32:28.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:32:28.004 [DEBUG] [Thread-186746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:32:28.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:32:28.061 [DEBUG] [Thread-186746] [transport.py] [_log()] userauth is OK
2026-04-12T09:32:28.061 [DEBUG] [Thread-186746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:32:28.061 [DEBUG] [Thread-186746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:32:28.061 [DEBUG] [Thread-186746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:32:28.062 [DEBUG] [Thread-186746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:32:28.081 [INFO] [Thread-186746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:32:28.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:32:28.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:32:28.889 [DEBUG] [Thread-186746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:32:28.889 [DEBUG] [Thread-186746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:32:28.937 [DEBUG] [Thread-186746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:32:28.937 [DEBUG] [Thread-186746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:32:28.946 [DEBUG] [Thread-186746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:32:28.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:32:28.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:32:28.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:32:28.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:32:28.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:32:28.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:32:28.982 [DEBUG] [Thread-186746] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:32:32.272 [DEBUG] [Thread-186748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:32:47.328 [DEBUG] [Thread-186749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:32:47.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:32:47.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:32:58.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:32:58.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:32:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:33:00.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 32, 47), -0.10057, 100.605, 0.0, 29.9563, 10.8342, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:33:00.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:32:47
2026-04-12T09:33:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:33:00.907 [DEBUG] [Thread-186750] [transport.py] [_log()] starting thread (client mode): 0xb0f568c0
2026-04-12T09:33:00.907 [DEBUG] [Thread-186750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:33:00.917 [DEBUG] [Thread-186750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:33:00.918 [INFO] [Thread-186750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] client lang: <none>
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] server lang: <none>
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] kex follows: False
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] Compression: none
2026-04-12T09:33:00.921 [DEBUG] [Thread-186750] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:33:00.937 [DEBUG] [Thread-186750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:33:00.937 [DEBUG] [Thread-186750] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:33:00.937 [DEBUG] [Thread-186750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:33:00.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:33:00.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:33:00.938 [DEBUG] [Thread-186750] [transport.py] [_log()] userauth is OK
2026-04-12T09:33:00.938 [DEBUG] [Thread-186750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:33:00.938 [DEBUG] [Thread-186750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:33:00.938 [DEBUG] [Thread-186750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:33:00.938 [DEBUG] [Thread-186750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:33:00.949 [INFO] [Thread-186750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:33:00.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:33:01.546 [DEBUG] [Thread-186750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:33:01.546 [DEBUG] [Thread-186750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:33:01.546 [DEBUG] [Thread-186750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:33:01.587 [DEBUG] [Thread-186750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:33:01.587 [DEBUG] [Thread-186750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:33:01.592 [DEBUG] [Thread-186750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:33:01.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:33:01.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:33:01.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:33:01.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:33:01.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:33:01.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:33:01.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:33:01.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:33:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:33:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.314347 -999.00  +10.60  20.13     96  +10.10 1 3 1 3 1   887    0 0.61 3.80 ----- 16.2 20.1 269.2 24.2 13.5 -3.6 13.1 -3.9 12.4 -4.2 13.1 -2.9
2026-04-12T09:33:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:33:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:33:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.314347
2026-04-12T09:33:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:33:01.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:33:01.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:33:01.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:33:01.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:33:01.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:32:47', tmtdew=-0.10057, humidity=100.605, cloud=0.0, wind=29.9563, temperature=10.8342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:32:39.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:33:01.616 [DEBUG] [Thread-186750] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:33:01.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:33:01.710 [DEBUG] [Thread-186753] [transport.py] [_log()] starting thread (client mode): 0xae562530
2026-04-12T09:33:01.710 [DEBUG] [Thread-186753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:33:01.726 [DEBUG] [Thread-186753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:33:01.726 [INFO] [Thread-186753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:33:01.733 [DEBUG] [Thread-186753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:33:01.733 [DEBUG] [Thread-186753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] client lang: <none>
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] server lang: <none>
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] kex follows: False
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] Compression: none
2026-04-12T09:33:01.734 [DEBUG] [Thread-186753] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:33:01.792 [DEBUG] [Thread-186753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:33:01.792 [DEBUG] [Thread-186753] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:33:01.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:33:01.793 [DEBUG] [Thread-186753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:33:01.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:33:01.848 [DEBUG] [Thread-186753] [transport.py] [_log()] userauth is OK
2026-04-12T09:33:01.848 [DEBUG] [Thread-186753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:33:01.848 [DEBUG] [Thread-186753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:33:01.848 [DEBUG] [Thread-186753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:33:01.848 [DEBUG] [Thread-186753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:33:01.867 [INFO] [Thread-186753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:33:01.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:33:01.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:33:02.365 [DEBUG] [Thread-186755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:33:02.728 [DEBUG] [Thread-186753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:33:02.728 [DEBUG] [Thread-186753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:33:02.776 [DEBUG] [Thread-186753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:33:02.776 [DEBUG] [Thread-186753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:33:02.786 [DEBUG] [Thread-186753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:33:02.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:33:02.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:33:02.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:33:02.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:33:02.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:33:02.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:33:02.823 [DEBUG] [Thread-186753] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:33:17.419 [DEBUG] [Thread-186756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:33:26.099 [DEBUG] [Thread-186757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:33:32.457 [DEBUG] [Thread-186758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:33:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:33:32.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:33:32.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:33:34.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 33, 23), -0.052825, 100.319, 0.0, 23.2726, 10.5003, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:33:34.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:33:23
2026-04-12T09:33:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:33:34.715 [DEBUG] [Thread-186759] [transport.py] [_log()] starting thread (client mode): 0xae5e6ad0
2026-04-12T09:33:34.715 [DEBUG] [Thread-186759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:33:34.735 [DEBUG] [Thread-186759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:33:34.736 [INFO] [Thread-186759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:34.740 [DEBUG] [Thread-186759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] client lang: <none>
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] server lang: <none>
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] kex follows: False
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] Compression: none
2026-04-12T09:33:34.741 [DEBUG] [Thread-186759] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:33:34.756 [DEBUG] [Thread-186759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:33:34.757 [DEBUG] [Thread-186759] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:33:34.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:33:34.758 [DEBUG] [Thread-186759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:33:34.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:33:34.760 [DEBUG] [Thread-186759] [transport.py] [_log()] userauth is OK
2026-04-12T09:33:34.760 [DEBUG] [Thread-186759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:33:34.760 [DEBUG] [Thread-186759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:33:34.761 [DEBUG] [Thread-186759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:33:34.761 [DEBUG] [Thread-186759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:33:34.779 [INFO] [Thread-186759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:33:34.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:33:35.373 [DEBUG] [Thread-186759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:33:35.374 [DEBUG] [Thread-186759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:33:35.374 [DEBUG] [Thread-186759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:33:35.415 [DEBUG] [Thread-186759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:33:35.415 [DEBUG] [Thread-186759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:33:35.419 [DEBUG] [Thread-186759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:33:35.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:33:35.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:33:35.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:33:35.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:33:35.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:33:35.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:33:35.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:33:35.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:33:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:33:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.314694 -999.00  +10.70  23.33     96  +10.10 1 3 1 3 1   887    0 0.62 4.02 ----- 22.6 23.3 268.2 31.0 13.5 -6.2 13.1 -8.7 12.4 -6.4 13.1 -5.0
2026-04-12T09:33:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:33:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:33:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.314694
2026-04-12T09:33:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:33:35.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:33:35.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:33:35.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:33:35.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:33:35.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:33:23', tmtdew=-0.052825, humidity=100.319, cloud=0.0, wind=23.2726, temperature=10.5003, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:33:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:33:35.451 [DEBUG] [Thread-186759] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:33:35.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:33:35.544 [DEBUG] [Thread-186762] [transport.py] [_log()] starting thread (client mode): 0xb0fb75e0
2026-04-12T09:33:35.544 [DEBUG] [Thread-186762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:33:35.559 [DEBUG] [Thread-186762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:33:35.559 [INFO] [Thread-186762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:33:35.567 [DEBUG] [Thread-186762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:33:35.567 [DEBUG] [Thread-186762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:33:35.567 [DEBUG] [Thread-186762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:33:35.567 [DEBUG] [Thread-186762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:35.567 [DEBUG] [Thread-186762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:33:35.567 [DEBUG] [Thread-186762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:35.567 [DEBUG] [Thread-186762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] client lang: <none>
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] server lang: <none>
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] kex follows: False
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] Compression: none
2026-04-12T09:33:35.568 [DEBUG] [Thread-186762] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:33:35.626 [DEBUG] [Thread-186762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:33:35.626 [DEBUG] [Thread-186762] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:33:35.627 [DEBUG] [Thread-186762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:33:35.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:33:35.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:33:35.682 [DEBUG] [Thread-186762] [transport.py] [_log()] userauth is OK
2026-04-12T09:33:35.682 [DEBUG] [Thread-186762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:33:35.683 [DEBUG] [Thread-186762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:33:35.683 [DEBUG] [Thread-186762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:33:35.683 [DEBUG] [Thread-186762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:33:35.701 [INFO] [Thread-186762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:33:35.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:33:35.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:33:36.559 [DEBUG] [Thread-186762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:33:36.559 [DEBUG] [Thread-186762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:33:36.607 [DEBUG] [Thread-186762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:33:36.608 [DEBUG] [Thread-186762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:33:36.617 [DEBUG] [Thread-186762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:33:36.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:33: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')
2026-04-12T09:33:36.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:33:36.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:33:36.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:33:36.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:33:36.653 [DEBUG] [Thread-186762] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:33:47.491 [DEBUG] [Thread-186764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:33:48.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:33:48.010 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:34:02.556 [DEBUG] [Thread-186765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:34:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:34:06.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:34:06.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:34:07.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 33, 58), -0.052825, 100.319, 0.0, 23.238, 10.4503, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:34:07.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:33:58
2026-04-12T09:34:08.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:34:08.538 [DEBUG] [Thread-186766] [transport.py] [_log()] starting thread (client mode): 0xae560ca0
2026-04-12T09:34:08.538 [DEBUG] [Thread-186766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:34:08.558 [DEBUG] [Thread-186766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:34:08.558 [INFO] [Thread-186766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:34:08.560 [DEBUG] [Thread-186766] [transport.py] [_log()] client lang: <none>
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] server lang: <none>
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] kex follows: False
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] Compression: none
2026-04-12T09:34:08.561 [DEBUG] [Thread-186766] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:34:08.579 [DEBUG] [Thread-186766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:34:08.580 [DEBUG] [Thread-186766] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:34:08.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:34:08.582 [DEBUG] [Thread-186766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:34:08.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:34:08.584 [DEBUG] [Thread-186766] [transport.py] [_log()] userauth is OK
2026-04-12T09:34:08.584 [DEBUG] [Thread-186766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:34:08.584 [DEBUG] [Thread-186766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:34:08.584 [DEBUG] [Thread-186766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:34:08.584 [DEBUG] [Thread-186766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:34:08.604 [INFO] [Thread-186766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:34:08.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:34:09.250 [DEBUG] [Thread-186766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:34:09.251 [DEBUG] [Thread-186766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:34:09.251 [DEBUG] [Thread-186766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:34:09.292 [DEBUG] [Thread-186766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:34:09.292 [DEBUG] [Thread-186766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:34:09.295 [DEBUG] [Thread-186766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:34:09.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:34:09.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:34:09.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:34:09.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:34:09.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:34:09.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:34:09.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:34:09.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:34:09.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:34:09.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.315041 -999.00  +10.60  18.99     96  +10.00 1 3 1 3 1   887    0 0.63 4.31 ----- 17.4 19.0 280.0 26.1 13.5 -11.5 13.1 -9.9 12.3 -9.7 13.1 -10.2
2026-04-12T09:34:09.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:34:09.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:34:09.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.315041
2026-04-12T09:34:09.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:34:09.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:34:09.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:34:09.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:34:09.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:34:09.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:33:58', tmtdew=-0.052825, humidity=100.319, cloud=0.0, wind=23.238, temperature=10.4503, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:33:39.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:34:09.323 [DEBUG] [Thread-186766] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:34:09.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:34:09.415 [DEBUG] [Thread-186769] [transport.py] [_log()] starting thread (client mode): 0xb0f54fa0
2026-04-12T09:34:09.415 [DEBUG] [Thread-186769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:34:09.429 [DEBUG] [Thread-186769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:34:09.429 [INFO] [Thread-186769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:34:09.437 [DEBUG] [Thread-186769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:34:09.437 [DEBUG] [Thread-186769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:34:09.437 [DEBUG] [Thread-186769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:34:09.437 [DEBUG] [Thread-186769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:09.437 [DEBUG] [Thread-186769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:09.437 [DEBUG] [Thread-186769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] client lang: <none>
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] server lang: <none>
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] kex follows: False
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] Compression: none
2026-04-12T09:34:09.438 [DEBUG] [Thread-186769] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:34:09.497 [DEBUG] [Thread-186769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:34:09.497 [DEBUG] [Thread-186769] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:34:09.498 [DEBUG] [Thread-186769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:34:09.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:34:09.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:34:09.552 [DEBUG] [Thread-186769] [transport.py] [_log()] userauth is OK
2026-04-12T09:34:09.552 [DEBUG] [Thread-186769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:34:09.552 [DEBUG] [Thread-186769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:34:09.552 [DEBUG] [Thread-186769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:34:09.552 [DEBUG] [Thread-186769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:34:09.565 [INFO] [Thread-186769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:34:09.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:34:09.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:34:10.402 [DEBUG] [Thread-186769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:34:10.402 [DEBUG] [Thread-186769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:34:10.450 [DEBUG] [Thread-186769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:34:10.450 [DEBUG] [Thread-186769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:34:10.459 [DEBUG] [Thread-186769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:34:10.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:34:10.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:34:10.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:34:10.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:34:10.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:34:10.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:34:10.497 [DEBUG] [Thread-186769] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:34:17.595 [DEBUG] [Thread-186771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:34:26.133 [DEBUG] [Thread-186772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:34:32.646 [DEBUG] [Thread-186773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:34:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:34:40.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:34:40.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:34:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 34, 34), -0.11587, 100.705, 0.0, 23.2884, 11.0664, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:34:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:34:34
2026-04-12T09:34:42.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:34:42.350 [DEBUG] [Thread-186774] [transport.py] [_log()] starting thread (client mode): 0xb0fb46a0
2026-04-12T09:34:42.350 [DEBUG] [Thread-186774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:34:42.369 [DEBUG] [Thread-186774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:34:42.370 [INFO] [Thread-186774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:34:42.372 [DEBUG] [Thread-186774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] client lang: <none>
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] server lang: <none>
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] kex follows: False
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] Compression: none
2026-04-12T09:34:42.373 [DEBUG] [Thread-186774] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:34:42.391 [DEBUG] [Thread-186774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:34:42.392 [DEBUG] [Thread-186774] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:34:42.392 [DEBUG] [Thread-186774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:34:42.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:34:42.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:34:42.394 [DEBUG] [Thread-186774] [transport.py] [_log()] userauth is OK
2026-04-12T09:34:42.394 [DEBUG] [Thread-186774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:34:42.394 [DEBUG] [Thread-186774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:34:42.395 [DEBUG] [Thread-186774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:34:42.395 [DEBUG] [Thread-186774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:34:42.413 [INFO] [Thread-186774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:34:42.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:34:43.035 [DEBUG] [Thread-186774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:34:43.035 [DEBUG] [Thread-186774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:34:43.036 [DEBUG] [Thread-186774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:34:43.076 [DEBUG] [Thread-186774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:34:43.076 [DEBUG] [Thread-186774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:34:43.079 [DEBUG] [Thread-186774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:34:43.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:34:43.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:34:43.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:34:43.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:34:43.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:34:43.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:34:43.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:34:43.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:34:43.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:34:43.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.315389 -999.00  +10.60  22.82     96  +10.00 1 3 1 3 1   887    0 0.64 4.87 ----- 19.1 22.8 283.6 26.4 13.6 -11.4 13.2 -8.6 12.3 -10.0 13.1 -11.0
2026-04-12T09:34:43.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:34:43.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:34:43.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.315389
2026-04-12T09:34:43.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:34:43.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:34:43.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:34:43.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:34:43.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:34:43.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:34:34', tmtdew=-0.11587, humidity=100.705, cloud=0.0, wind=23.2884, temperature=11.0664, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:34:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:34:43.100 [DEBUG] [Thread-186774] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:34:43.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:34:43.207 [DEBUG] [Thread-186777] [transport.py] [_log()] starting thread (client mode): 0xae5b06a0
2026-04-12T09:34:43.207 [DEBUG] [Thread-186777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:34:43.244 [DEBUG] [Thread-186777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:34:43.244 [INFO] [Thread-186777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:34:43.275 [DEBUG] [Thread-186777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] client lang: <none>
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] server lang: <none>
2026-04-12T09:34:43.276 [DEBUG] [Thread-186777] [transport.py] [_log()] kex follows: False
2026-04-12T09:34:43.277 [DEBUG] [Thread-186777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:34:43.277 [DEBUG] [Thread-186777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:34:43.277 [DEBUG] [Thread-186777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:34:43.277 [DEBUG] [Thread-186777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:34:43.277 [DEBUG] [Thread-186777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:34:43.277 [DEBUG] [Thread-186777] [transport.py] [_log()] Compression: none
2026-04-12T09:34:43.277 [DEBUG] [Thread-186777] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:34:43.361 [DEBUG] [Thread-186777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:34:43.361 [DEBUG] [Thread-186777] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:34:43.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:34:43.362 [DEBUG] [Thread-186777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:34:43.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:34:43.465 [DEBUG] [Thread-186777] [transport.py] [_log()] userauth is OK
2026-04-12T09:34:43.466 [DEBUG] [Thread-186777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:34:43.466 [DEBUG] [Thread-186777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:34:43.466 [DEBUG] [Thread-186777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:34:43.466 [DEBUG] [Thread-186777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:34:43.509 [INFO] [Thread-186777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:34:43.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:34:43.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:34:44.342 [DEBUG] [Thread-186777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:34:44.342 [DEBUG] [Thread-186777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:34:44.416 [DEBUG] [Thread-186777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:34:44.417 [DEBUG] [Thread-186777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:34:44.452 [DEBUG] [Thread-186777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:34:44.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:34:44.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:34:44.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:34:44.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:34:44.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:34:44.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:34:44.590 [DEBUG] [Thread-186777] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:34:47.682 [DEBUG] [Thread-186779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:34:48.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:34:48.152 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:02.745 [DEBUG] [Thread-186780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:14.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:35:14.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:35:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 34, 34), -0.11587, 100.705, 0.0, 23.2884, 11.0664, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:35:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:34:34
2026-04-12T09:35:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:35:16.313 [DEBUG] [Thread-186781] [transport.py] [_log()] starting thread (client mode): 0xa796b070
2026-04-12T09:35:16.313 [DEBUG] [Thread-186781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:35:16.334 [DEBUG] [Thread-186781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:35:16.334 [INFO] [Thread-186781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:35:16.337 [DEBUG] [Thread-186781] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:35:16.337 [DEBUG] [Thread-186781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] client lang: <none>
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] server lang: <none>
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] kex follows: False
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:35:16.338 [DEBUG] [Thread-186781] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:35:16.339 [DEBUG] [Thread-186781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:35:16.339 [DEBUG] [Thread-186781] [transport.py] [_log()] Compression: none
2026-04-12T09:35:16.339 [DEBUG] [Thread-186781] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:35:16.356 [DEBUG] [Thread-186781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:35:16.357 [DEBUG] [Thread-186781] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:35:16.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:35:16.358 [DEBUG] [Thread-186781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:35:16.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:35:16.360 [DEBUG] [Thread-186781] [transport.py] [_log()] userauth is OK
2026-04-12T09:35:16.360 [DEBUG] [Thread-186781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:35:16.360 [DEBUG] [Thread-186781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:35:16.360 [DEBUG] [Thread-186781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:35:16.361 [DEBUG] [Thread-186781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:35:16.384 [INFO] [Thread-186781] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:35:16.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:35:17.782 [DEBUG] [Thread-186783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:24.418 [DEBUG] [Thread-186781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:35:24.418 [DEBUG] [Thread-186781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:35:24.419 [DEBUG] [Thread-186781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:35:24.459 [DEBUG] [Thread-186781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:35:24.459 [DEBUG] [Thread-186781] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:35:24.462 [DEBUG] [Thread-186781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:35:24.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:35:24.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:35:24.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:35:24.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:35:24.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:35:24.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:35:24.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:35:24.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:35:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:35:24.629 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T09:35:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:34:34', tmtdew=-0.11587, humidity=100.705, cloud=0.0, wind=23.2884, temperature=11.0664, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:35:24.630 [DEBUG] [Thread-186781] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:35:24.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:35:24.735 [DEBUG] [Thread-186785] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T09:35:24.736 [DEBUG] [Thread-186785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:35:24.769 [DEBUG] [Thread-186785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:35:24.769 [INFO] [Thread-186785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:35:24.796 [DEBUG] [Thread-186785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:35:24.797 [DEBUG] [Thread-186785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:35:24.806 [DEBUG] [Thread-186785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:35:24.806 [DEBUG] [Thread-186785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:24.806 [DEBUG] [Thread-186785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] client lang: <none>
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] server lang: <none>
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] kex follows: False
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] Compression: none
2026-04-12T09:35:24.807 [DEBUG] [Thread-186785] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:35:24.877 [DEBUG] [Thread-186785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:35:24.878 [DEBUG] [Thread-186785] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:35:24.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:35:24.879 [DEBUG] [Thread-186785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:35:24.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:35:24.973 [DEBUG] [Thread-186785] [transport.py] [_log()] userauth is OK
2026-04-12T09:35:24.973 [DEBUG] [Thread-186785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:35:24.973 [DEBUG] [Thread-186785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:35:24.973 [DEBUG] [Thread-186785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:35:24.973 [DEBUG] [Thread-186785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:35:25.010 [INFO] [Thread-186785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:35:25.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:35:25.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:35:25.913 [DEBUG] [Thread-186785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:35:25.913 [DEBUG] [Thread-186785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:35:25.982 [DEBUG] [Thread-186785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:35:25.982 [DEBUG] [Thread-186785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:35:26.013 [DEBUG] [Thread-186785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:35:26.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:35:26.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:35:26.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:35:26.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:35:26.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:35:26.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:35:26.134 [DEBUG] [Thread-186785] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:35:26.174 [DEBUG] [Thread-186787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:32.814 [DEBUG] [Thread-186788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:47.871 [DEBUG] [Thread-186789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:48.294 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:48.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:35:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:35:56.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:35:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:35:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 35, 45), -0.09621, 100.572, 0.0, 21.9478, 11.1991, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:35:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:35:45
2026-04-12T09:35:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:35:58.006 [DEBUG] [Thread-186790] [transport.py] [_log()] starting thread (client mode): 0xae561390
2026-04-12T09:35:58.006 [DEBUG] [Thread-186790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:35:58.033 [DEBUG] [Thread-186790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:35:58.034 [INFO] [Thread-186790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:35:58.035 [DEBUG] [Thread-186790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:35:58.035 [DEBUG] [Thread-186790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:35:58.035 [DEBUG] [Thread-186790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:35:58.035 [DEBUG] [Thread-186790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:58.035 [DEBUG] [Thread-186790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] client lang: <none>
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] server lang: <none>
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] kex follows: False
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] Compression: none
2026-04-12T09:35:58.036 [DEBUG] [Thread-186790] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:35:58.047 [DEBUG] [Thread-186790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:35:58.048 [DEBUG] [Thread-186790] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:35:58.048 [DEBUG] [Thread-186790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:35:58.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:35:58.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:35:58.050 [DEBUG] [Thread-186790] [transport.py] [_log()] userauth is OK
2026-04-12T09:35:58.050 [DEBUG] [Thread-186790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:35:58.051 [DEBUG] [Thread-186790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:35:58.051 [DEBUG] [Thread-186790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:35:58.051 [DEBUG] [Thread-186790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:35:58.069 [INFO] [Thread-186790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:35:58.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:35:58.679 [DEBUG] [Thread-186790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:35:58.679 [DEBUG] [Thread-186790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:35:58.680 [DEBUG] [Thread-186790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:35:58.720 [DEBUG] [Thread-186790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:35:58.720 [DEBUG] [Thread-186790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:35:58.724 [DEBUG] [Thread-186790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:35:58.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:35:58.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:35:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:35:58.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:35:58.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:35:58.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:35:58.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:35:58.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:35:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:35:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.316431 -999.00  +10.90  13.69     96  +10.30 1 3 1 3 1   887    0 0.70 6.41 ----- 19.9 13.7 269.1 22.4 14.2 -8.7 13.7 -8.4 12.8 -6.9 13.5 -7.7
2026-04-12T09:35:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:35:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:35:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.316431
2026-04-12T09:35:58.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:35:58.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:35:58.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:35:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:35:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:35:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:35:45', tmtdew=-0.09621, humidity=100.572, cloud=0.0, wind=21.9478, temperature=11.1991, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:35:39.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:35:58.751 [DEBUG] [Thread-186790] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:35:58.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:35:58.849 [DEBUG] [Thread-186793] [transport.py] [_log()] starting thread (client mode): 0xae51ae30
2026-04-12T09:35:58.849 [DEBUG] [Thread-186793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:35:58.863 [DEBUG] [Thread-186793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:35:58.864 [INFO] [Thread-186793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:35:58.871 [DEBUG] [Thread-186793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:35:58.871 [DEBUG] [Thread-186793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] client lang: <none>
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] server lang: <none>
2026-04-12T09:35:58.872 [DEBUG] [Thread-186793] [transport.py] [_log()] kex follows: False
2026-04-12T09:35:58.873 [DEBUG] [Thread-186793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:35:58.873 [DEBUG] [Thread-186793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:35:58.873 [DEBUG] [Thread-186793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:35:58.873 [DEBUG] [Thread-186793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:35:58.873 [DEBUG] [Thread-186793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:35:58.873 [DEBUG] [Thread-186793] [transport.py] [_log()] Compression: none
2026-04-12T09:35:58.873 [DEBUG] [Thread-186793] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:35:58.928 [DEBUG] [Thread-186793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:35:58.929 [DEBUG] [Thread-186793] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:35:58.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:35:58.930 [DEBUG] [Thread-186793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:35:58.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:35:58.985 [DEBUG] [Thread-186793] [transport.py] [_log()] userauth is OK
2026-04-12T09:35:58.985 [DEBUG] [Thread-186793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:35:58.986 [DEBUG] [Thread-186793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:35:58.986 [DEBUG] [Thread-186793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:35:58.986 [DEBUG] [Thread-186793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:35:59.005 [INFO] [Thread-186793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:35:59.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:35:59.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:35:59.835 [DEBUG] [Thread-186793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:35:59.835 [DEBUG] [Thread-186793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:35:59.883 [DEBUG] [Thread-186793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:35:59.883 [DEBUG] [Thread-186793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:35:59.893 [DEBUG] [Thread-186793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:35:59.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:35: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')
2026-04-12T09:35:59.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:35:59.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:35:59.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:35:59.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:35:59.932 [DEBUG] [Thread-186793] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:36:02.909 [DEBUG] [Thread-186795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:36:17.971 [DEBUG] [Thread-186796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:36:26.224 [DEBUG] [Thread-186797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:36:29.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:36:29.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:36:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:36:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 36, 21), 0.001955, 100.286, 0.0, 22.6559, 10.5164, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:36:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:36:21
2026-04-12T09:36:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:36:31.735 [DEBUG] [Thread-186798] [transport.py] [_log()] starting thread (client mode): 0xb0f56920
2026-04-12T09:36:31.735 [DEBUG] [Thread-186798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:36:31.749 [DEBUG] [Thread-186798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:36:31.749 [INFO] [Thread-186798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:36:31.750 [DEBUG] [Thread-186798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:36:31.750 [DEBUG] [Thread-186798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:36:31.750 [DEBUG] [Thread-186798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:36:31.750 [DEBUG] [Thread-186798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:36:31.750 [DEBUG] [Thread-186798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] client lang: <none>
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] server lang: <none>
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] kex follows: False
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] Compression: none
2026-04-12T09:36:31.751 [DEBUG] [Thread-186798] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:36:31.760 [DEBUG] [Thread-186798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:36:31.761 [DEBUG] [Thread-186798] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:36:31.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:36:31.762 [DEBUG] [Thread-186798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:36:31.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:36:31.763 [DEBUG] [Thread-186798] [transport.py] [_log()] userauth is OK
2026-04-12T09:36:31.763 [DEBUG] [Thread-186798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:36:31.764 [DEBUG] [Thread-186798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:36:31.764 [DEBUG] [Thread-186798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:36:31.764 [DEBUG] [Thread-186798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:36:31.783 [INFO] [Thread-186798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:36:31.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:36:32.369 [DEBUG] [Thread-186798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:36:32.369 [DEBUG] [Thread-186798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:36:32.370 [DEBUG] [Thread-186798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:36:32.410 [DEBUG] [Thread-186798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:36:32.410 [DEBUG] [Thread-186798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:36:32.413 [DEBUG] [Thread-186798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:36:32.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:36:32.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:36:32.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:36:32.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:36:32.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:36:32.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:36:32.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:36:32.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:36:32.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:36:32.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.316777 -999.00  +10.70  25.38     95  +10.00 1 3 1 3 1   887    0 0.75 7.91 ----- 21.9 25.4 276.4 28.2 14.3 -9.0 13.7 -6.8 12.8 -6.6 13.6 -6.6
2026-04-12T09:36:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:36:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:36:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.316777
2026-04-12T09:36:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:36:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:36:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:36:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:36:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:36:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:36:21', tmtdew=0.001955, humidity=100.286, cloud=0.0, wind=22.6559, temperature=10.5164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:36:09.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:36:32.433 [DEBUG] [Thread-186798] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:36:32.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:36:32.551 [DEBUG] [Thread-186801] [transport.py] [_log()] starting thread (client mode): 0xb0f55600
2026-04-12T09:36:32.551 [DEBUG] [Thread-186801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:36:32.590 [DEBUG] [Thread-186801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:36:32.590 [INFO] [Thread-186801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:36:32.623 [DEBUG] [Thread-186801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:36:32.623 [DEBUG] [Thread-186801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] client lang: <none>
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] server lang: <none>
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] kex follows: False
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:36:32.624 [DEBUG] [Thread-186801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:36:32.625 [DEBUG] [Thread-186801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:36:32.625 [DEBUG] [Thread-186801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:36:32.625 [DEBUG] [Thread-186801] [transport.py] [_log()] Compression: none
2026-04-12T09:36:32.625 [DEBUG] [Thread-186801] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:36:32.703 [DEBUG] [Thread-186801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:36:32.704 [DEBUG] [Thread-186801] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:36:32.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:36:32.705 [DEBUG] [Thread-186801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:36:32.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:36:32.806 [DEBUG] [Thread-186801] [transport.py] [_log()] userauth is OK
2026-04-12T09:36:32.807 [DEBUG] [Thread-186801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:36:32.807 [DEBUG] [Thread-186801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:36:32.807 [DEBUG] [Thread-186801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:36:32.807 [DEBUG] [Thread-186801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:36:32.849 [INFO] [Thread-186801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:36:32.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:36:32.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:36:33.009 [DEBUG] [Thread-186803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:36:33.701 [DEBUG] [Thread-186801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:36:33.701 [DEBUG] [Thread-186801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:36:33.774 [DEBUG] [Thread-186801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:36:33.775 [DEBUG] [Thread-186801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:36:33.807 [DEBUG] [Thread-186801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:36:33.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:36:33.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:36:33.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:36:33.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:36:33.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:36:33.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:36:33.932 [DEBUG] [Thread-186801] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:36:48.059 [DEBUG] [Thread-186804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:36:48.435 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:36:48.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:37:03.095 [DEBUG] [Thread-186805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:37:03.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:37:03.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:37:03.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:37:05.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 36, 56), -0.055505, 100.336, 0.0, 20.6089, 10.6164, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:37:05.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:36:56
2026-04-12T09:37:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:37:05.737 [DEBUG] [Thread-186806] [transport.py] [_log()] starting thread (client mode): 0xae561390
2026-04-12T09:37:05.737 [DEBUG] [Thread-186806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:37:05.753 [DEBUG] [Thread-186806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:37:05.753 [INFO] [Thread-186806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:37:05.755 [DEBUG] [Thread-186806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] client lang: <none>
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] server lang: <none>
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] kex follows: False
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] Compression: none
2026-04-12T09:37:05.756 [DEBUG] [Thread-186806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:37:05.769 [DEBUG] [Thread-186806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:37:05.770 [DEBUG] [Thread-186806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:37:05.770 [DEBUG] [Thread-186806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:37:05.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:37:05.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:37:05.772 [DEBUG] [Thread-186806] [transport.py] [_log()] userauth is OK
2026-04-12T09:37:05.772 [DEBUG] [Thread-186806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:37:05.772 [DEBUG] [Thread-186806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:37:05.773 [DEBUG] [Thread-186806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:37:05.773 [DEBUG] [Thread-186806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:37:05.791 [INFO] [Thread-186806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:37:05.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:37:06.381 [DEBUG] [Thread-186806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:37:06.381 [DEBUG] [Thread-186806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:37:06.381 [DEBUG] [Thread-186806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:37:06.422 [DEBUG] [Thread-186806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:37:06.422 [DEBUG] [Thread-186806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:37:06.425 [DEBUG] [Thread-186806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:37:06.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:37:06.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:37:06.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:37:06.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:37:06.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:37:06.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:37:06.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:37:06.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:37:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:37:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.317125 -999.00  +10.70  17.85     95  +10.00 1 3 1 3 1   887    0 0.79 8.81 ----- 17.9 17.9 273.8 24.1 14.4 -6.2 13.8 -4.8 12.8 -3.4 13.7 -3.5
2026-04-12T09:37:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:37:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:37:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.317125
2026-04-12T09:37:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:37:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:37:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:37:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:37:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:37:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:36:56', tmtdew=-0.055505, humidity=100.336, cloud=0.0, wind=20.6089, temperature=10.6164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:36:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:37:06.450 [DEBUG] [Thread-186806] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:37:06.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:37:06.540 [DEBUG] [Thread-186809] [transport.py] [_log()] starting thread (client mode): 0xb0f41bd0
2026-04-12T09:37:06.540 [DEBUG] [Thread-186809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:37:06.555 [DEBUG] [Thread-186809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:37:06.555 [INFO] [Thread-186809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:37:06.564 [DEBUG] [Thread-186809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:37:06.564 [DEBUG] [Thread-186809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:37:06.564 [DEBUG] [Thread-186809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:37:06.564 [DEBUG] [Thread-186809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:06.564 [DEBUG] [Thread-186809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] client lang: <none>
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] server lang: <none>
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] kex follows: False
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] Compression: none
2026-04-12T09:37:06.565 [DEBUG] [Thread-186809] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:37:06.621 [DEBUG] [Thread-186809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:37:06.622 [DEBUG] [Thread-186809] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:37:06.622 [DEBUG] [Thread-186809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:37:06.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:37:06.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:37:06.678 [DEBUG] [Thread-186809] [transport.py] [_log()] userauth is OK
2026-04-12T09:37:06.678 [DEBUG] [Thread-186809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:37:06.678 [DEBUG] [Thread-186809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:37:06.678 [DEBUG] [Thread-186809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:37:06.678 [DEBUG] [Thread-186809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:37:06.701 [INFO] [Thread-186809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:37:06.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:37:06.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:37:07.533 [DEBUG] [Thread-186809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:37:07.534 [DEBUG] [Thread-186809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:37:07.581 [DEBUG] [Thread-186809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:37:07.581 [DEBUG] [Thread-186809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:37:07.590 [DEBUG] [Thread-186809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:37:07.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:37:07.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:37:07.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:37:07.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:37:07.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:37:07.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:37:07.628 [DEBUG] [Thread-186809] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:37:18.130 [DEBUG] [Thread-186811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:37:26.269 [DEBUG] [Thread-186812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:37:33.185 [DEBUG] [Thread-186813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:37:37.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:37:37.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:37:37.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:37:38.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 36, 56), -0.055505, 100.336, 0.0, 20.6089, 10.6164, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:37:38.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:36:56
2026-04-12T09:37:39.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:37:39.499 [DEBUG] [Thread-186814] [transport.py] [_log()] starting thread (client mode): 0xa796b070
2026-04-12T09:37:39.499 [DEBUG] [Thread-186814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:37:39.518 [DEBUG] [Thread-186814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:37:39.518 [INFO] [Thread-186814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] client lang: <none>
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] server lang: <none>
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] kex follows: False
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] Compression: none
2026-04-12T09:37:39.520 [DEBUG] [Thread-186814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:37:39.529 [DEBUG] [Thread-186814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:37:39.529 [DEBUG] [Thread-186814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:37:39.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:37:39.530 [DEBUG] [Thread-186814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:37:39.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:37:39.531 [DEBUG] [Thread-186814] [transport.py] [_log()] userauth is OK
2026-04-12T09:37:39.531 [DEBUG] [Thread-186814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:37:39.531 [DEBUG] [Thread-186814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:37:39.531 [DEBUG] [Thread-186814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:37:39.532 [DEBUG] [Thread-186814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:37:39.548 [INFO] [Thread-186814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:37:39.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:37:40.174 [DEBUG] [Thread-186814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:37:40.174 [DEBUG] [Thread-186814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:37:40.174 [DEBUG] [Thread-186814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:37:40.215 [DEBUG] [Thread-186814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:37:40.215 [DEBUG] [Thread-186814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:37:40.217 [DEBUG] [Thread-186814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:37:40.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:37:40.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:37:40.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:37:40.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:37:40.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:37:40.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:37:40.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:37:40.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:37:40.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:37:40.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.317472 -999.00  +10.70  23.13     95  +10.00 1 3 1 3 1   887    0 0.85 10.61 ----- 24.4 23.1 269.0 27.9 14.4 -6.1 13.8 -5.7 12.8 -4.4 13.7 -3.7
2026-04-12T09:37:40.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:37:40.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:37:40.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.317472
2026-04-12T09:37:40.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:37:40.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:37:40.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:37:40.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:37:40.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:37:40.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:36:56', tmtdew=-0.055505, humidity=100.336, cloud=0.0, wind=20.6089, temperature=10.6164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:37:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:37:40.234 [DEBUG] [Thread-186814] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:37:40.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:37:40.324 [DEBUG] [Thread-186817] [transport.py] [_log()] starting thread (client mode): 0xae5e4070
2026-04-12T09:37:40.324 [DEBUG] [Thread-186817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:37:40.339 [DEBUG] [Thread-186817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:37:40.339 [INFO] [Thread-186817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:37:40.347 [DEBUG] [Thread-186817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] client lang: <none>
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] server lang: <none>
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] kex follows: False
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] Compression: none
2026-04-12T09:37:40.348 [DEBUG] [Thread-186817] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:37:40.404 [DEBUG] [Thread-186817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:37:40.404 [DEBUG] [Thread-186817] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:37:40.404 [DEBUG] [Thread-186817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:37:40.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:37:40.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:37:40.466 [DEBUG] [Thread-186817] [transport.py] [_log()] userauth is OK
2026-04-12T09:37:40.467 [DEBUG] [Thread-186817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:37:40.467 [DEBUG] [Thread-186817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:37:40.467 [DEBUG] [Thread-186817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:37:40.467 [DEBUG] [Thread-186817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:37:40.488 [INFO] [Thread-186817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:37:40.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:37:40.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:37:41.367 [DEBUG] [Thread-186817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:37:41.367 [DEBUG] [Thread-186817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:37:41.422 [DEBUG] [Thread-186817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:37:41.422 [DEBUG] [Thread-186817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:37:41.443 [DEBUG] [Thread-186817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:37:41.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:37:41.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:37:41.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:37:41.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:37:41.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:37:41.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:37:41.506 [DEBUG] [Thread-186817] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:37:48.220 [DEBUG] [Thread-186819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:37:48.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:37:48.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:03.272 [DEBUG] [Thread-186820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:11.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:38:11.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:38:11.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:38:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 37, 32), -0.05305, 100.319, 0.0, 21.3322, 10.633, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:38:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:37:32
2026-04-12T09:38:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:38:13.443 [DEBUG] [Thread-186821] [transport.py] [_log()] starting thread (client mode): 0xb0f40070
2026-04-12T09:38:13.443 [DEBUG] [Thread-186821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:38:13.461 [DEBUG] [Thread-186821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:38:13.461 [INFO] [Thread-186821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:13.462 [DEBUG] [Thread-186821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] client lang: <none>
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] server lang: <none>
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] kex follows: False
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] Compression: none
2026-04-12T09:38:13.463 [DEBUG] [Thread-186821] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:38:13.473 [DEBUG] [Thread-186821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:38:13.474 [DEBUG] [Thread-186821] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:38:13.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:38:13.475 [DEBUG] [Thread-186821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:38:13.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:38:13.477 [DEBUG] [Thread-186821] [transport.py] [_log()] userauth is OK
2026-04-12T09:38:13.477 [DEBUG] [Thread-186821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:38:13.477 [DEBUG] [Thread-186821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:38:13.477 [DEBUG] [Thread-186821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:38:13.477 [DEBUG] [Thread-186821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:38:13.503 [INFO] [Thread-186821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:38:13.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:38:14.137 [DEBUG] [Thread-186821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:38:14.138 [DEBUG] [Thread-186821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:38:14.138 [DEBUG] [Thread-186821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:38:14.178 [DEBUG] [Thread-186821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:38:14.178 [DEBUG] [Thread-186821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:38:14.182 [DEBUG] [Thread-186821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:38:14.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:38:14.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:38:14.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:38:14.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:38:14.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:38:14.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:38:14.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:38:14.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:38:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:38:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.317819 -999.00  +10.80  11.14     95  +10.10 1 3 1 3 1   887    0 0.89 11.52 ----- 18.2 11.1 282.2 23.1 14.4 -6.4 13.7 -7.0 12.7 -4.7 13.6 -4.7
2026-04-12T09:38:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:38:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:38:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.317819
2026-04-12T09:38:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:38:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:38:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:38:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:38:14.209 [DEBUG] [Thread-186821] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:38:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:38:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:37:32', tmtdew=-0.05305, humidity=100.319, cloud=0.0, wind=21.3322, temperature=10.633, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:37:39.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:38:14.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:38:14.303 [DEBUG] [Thread-186824] [transport.py] [_log()] starting thread (client mode): 0xa79687f0
2026-04-12T09:38:14.303 [DEBUG] [Thread-186824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:38:14.318 [DEBUG] [Thread-186824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:38:14.318 [INFO] [Thread-186824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] client lang: <none>
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] server lang: <none>
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] kex follows: False
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:38:14.326 [DEBUG] [Thread-186824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:38:14.327 [DEBUG] [Thread-186824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:38:14.327 [DEBUG] [Thread-186824] [transport.py] [_log()] Compression: none
2026-04-12T09:38:14.327 [DEBUG] [Thread-186824] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:38:14.394 [DEBUG] [Thread-186824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:38:14.394 [DEBUG] [Thread-186824] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:38:14.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:38:14.395 [DEBUG] [Thread-186824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:38:14.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:38:14.454 [DEBUG] [Thread-186824] [transport.py] [_log()] userauth is OK
2026-04-12T09:38:14.454 [DEBUG] [Thread-186824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:38:14.454 [DEBUG] [Thread-186824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:38:14.455 [DEBUG] [Thread-186824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:38:14.455 [DEBUG] [Thread-186824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:38:14.475 [INFO] [Thread-186824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:38:14.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:38:14.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:38:15.310 [DEBUG] [Thread-186824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:38:15.310 [DEBUG] [Thread-186824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:38:15.358 [DEBUG] [Thread-186824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:38:15.358 [DEBUG] [Thread-186824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:38:15.367 [DEBUG] [Thread-186824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:38:15.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:38:15.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:38:15.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:38:15.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:38:15.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:38:15.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:38:15.404 [DEBUG] [Thread-186824] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:38:18.313 [DEBUG] [Thread-186826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:26.303 [DEBUG] [Thread-186827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:33.366 [DEBUG] [Thread-186828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:45.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:38:45.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:38:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:38:46.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 38, 7), -0.05296, 100.319, 0.0, 22.0554, 10.6161, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:38:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:38:07
2026-04-12T09:38:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:38:47.375 [DEBUG] [Thread-186829] [transport.py] [_log()] starting thread (client mode): 0xb0f43400
2026-04-12T09:38:47.375 [DEBUG] [Thread-186829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:38:47.396 [DEBUG] [Thread-186829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:38:47.396 [INFO] [Thread-186829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] client lang: <none>
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] server lang: <none>
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] kex follows: False
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] Compression: none
2026-04-12T09:38:47.399 [DEBUG] [Thread-186829] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:38:47.417 [DEBUG] [Thread-186829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:38:47.418 [DEBUG] [Thread-186829] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:38:47.418 [DEBUG] [Thread-186829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:38:47.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:38:47.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:38:47.420 [DEBUG] [Thread-186829] [transport.py] [_log()] userauth is OK
2026-04-12T09:38:47.420 [DEBUG] [Thread-186829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:38:47.421 [DEBUG] [Thread-186829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:38:47.421 [DEBUG] [Thread-186829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:38:47.421 [DEBUG] [Thread-186829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:38:47.439 [INFO] [Thread-186829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:38:47.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:38:48.013 [DEBUG] [Thread-186829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:38:48.014 [DEBUG] [Thread-186829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:38:48.014 [DEBUG] [Thread-186829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:38:48.055 [DEBUG] [Thread-186829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:38:48.055 [DEBUG] [Thread-186829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:38:48.058 [DEBUG] [Thread-186829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:38:48.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:38:48.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:38:48.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:38:48.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:38:48.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:38:48.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:38:48.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:38:48.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:38:48.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:38:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.318514 -999.00  +10.80  26.34     95  +10.10 1 3 1 3 1   887    0 0.92 12.55 ----- 23.3 26.3 277.8 29.1 14.4 -7.3 13.8 -10.3 12.9 -6.9 13.7 -4.7
2026-04-12T09:38:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:38:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:38:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.318514
2026-04-12T09:38:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:38:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:38:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:38:48.082 [DEBUG] [Thread-186829] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:38:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:38:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:38:48.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:38:07', tmtdew=-0.05296, humidity=100.319, cloud=0.0, wind=22.0554, temperature=10.6161, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:38:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:38:48.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:38:48.180 [DEBUG] [Thread-186832] [transport.py] [_log()] starting thread (client mode): 0xb0f41360
2026-04-12T09:38:48.180 [DEBUG] [Thread-186832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:38:48.203 [DEBUG] [Thread-186832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:38:48.204 [INFO] [Thread-186832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:38:48.215 [DEBUG] [Thread-186832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:38:48.215 [DEBUG] [Thread-186832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:38:48.215 [DEBUG] [Thread-186832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:38:48.215 [DEBUG] [Thread-186832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:48.215 [DEBUG] [Thread-186832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:38:48.215 [DEBUG] [Thread-186832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] client lang: <none>
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] server lang: <none>
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] kex follows: False
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:38:48.216 [DEBUG] [Thread-186832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:38:48.217 [DEBUG] [Thread-186832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:38:48.217 [DEBUG] [Thread-186832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:38:48.217 [DEBUG] [Thread-186832] [transport.py] [_log()] Compression: none
2026-04-12T09:38:48.217 [DEBUG] [Thread-186832] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:38:48.276 [DEBUG] [Thread-186832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:38:48.276 [DEBUG] [Thread-186832] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:38:48.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:38:48.277 [DEBUG] [Thread-186832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:38:48.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:38:48.335 [DEBUG] [Thread-186832] [transport.py] [_log()] userauth is OK
2026-04-12T09:38:48.336 [DEBUG] [Thread-186832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:38:48.336 [DEBUG] [Thread-186832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:38:48.336 [DEBUG] [Thread-186832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:38:48.336 [DEBUG] [Thread-186832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:38:48.355 [INFO] [Thread-186832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:38:48.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:38:48.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:38:48.402 [DEBUG] [Thread-186834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:48.725 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:48.726 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:38:49.191 [DEBUG] [Thread-186832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:38:49.191 [DEBUG] [Thread-186832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:38:49.239 [DEBUG] [Thread-186832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:38:49.239 [DEBUG] [Thread-186832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:38:49.248 [DEBUG] [Thread-186832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:38:49.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:38:49.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:38:49.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:38:49.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:38:49.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:38:49.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:38:49.285 [DEBUG] [Thread-186832] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:39:03.454 [DEBUG] [Thread-186835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:39:18.493 [DEBUG] [Thread-186836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:39:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:39:19.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:39:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:39:20.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 38, 43), -0.10095, 100.605, 0.0, 25.1582, 11.1322, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:39:20.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:38:43
2026-04-12T09:39:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:39:21.247 [DEBUG] [Thread-186837] [transport.py] [_log()] starting thread (client mode): 0xb0fb7940
2026-04-12T09:39:21.247 [DEBUG] [Thread-186837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:39:21.270 [DEBUG] [Thread-186837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:39:21.270 [INFO] [Thread-186837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:39:21.274 [DEBUG] [Thread-186837] [transport.py] [_log()] client lang: <none>
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] server lang: <none>
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] kex follows: False
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] Compression: none
2026-04-12T09:39:21.275 [DEBUG] [Thread-186837] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:39:21.293 [DEBUG] [Thread-186837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:39:21.294 [DEBUG] [Thread-186837] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:39:21.295 [DEBUG] [Thread-186837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:39:21.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:39:21.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:39:21.336 [DEBUG] [Thread-186837] [transport.py] [_log()] userauth is OK
2026-04-12T09:39:21.336 [DEBUG] [Thread-186837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:39:21.337 [DEBUG] [Thread-186837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:39:21.337 [DEBUG] [Thread-186837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:39:21.337 [DEBUG] [Thread-186837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:39:21.359 [INFO] [Thread-186837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:39:21.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:39:22.013 [DEBUG] [Thread-186837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:39:22.013 [DEBUG] [Thread-186837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:39:22.013 [DEBUG] [Thread-186837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:39:22.054 [DEBUG] [Thread-186837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:39:22.054 [DEBUG] [Thread-186837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:39:22.058 [DEBUG] [Thread-186837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:39:22.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:39:22.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:39:22.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:39:22.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:39:22.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:39:22.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:39:22.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:39:22.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:39:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:39:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.318861 -999.00  +10.70  21.59     95  +10.00 1 2 1 3 1   887    0 0.96 13.76 ----- 21.2 21.6 284.4 28.8 14.3 -14.1 13.7 -14.9 12.7 -14.5 13.7 -11.8
2026-04-12T09:39:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:39:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:39:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.318861
2026-04-12T09:39:22.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:39:22.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:39:22.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:39:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:39:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:39:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:38:43', tmtdew=-0.10095, humidity=100.605, cloud=0.0, wind=25.1582, temperature=11.1322, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:39:09.590', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:39:22.085 [DEBUG] [Thread-186837] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:39:22.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:39:22.169 [DEBUG] [Thread-186840] [transport.py] [_log()] starting thread (client mode): 0xb0fb46a0
2026-04-12T09:39:22.169 [DEBUG] [Thread-186840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:39:22.184 [DEBUG] [Thread-186840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:39:22.184 [INFO] [Thread-186840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:39:22.191 [DEBUG] [Thread-186840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:39:22.192 [DEBUG] [Thread-186840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:39:22.192 [DEBUG] [Thread-186840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:39:22.192 [DEBUG] [Thread-186840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:22.192 [DEBUG] [Thread-186840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:22.192 [DEBUG] [Thread-186840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:22.192 [DEBUG] [Thread-186840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:22.192 [DEBUG] [Thread-186840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:39:22.193 [DEBUG] [Thread-186840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:39:22.193 [DEBUG] [Thread-186840] [transport.py] [_log()] client lang: <none>
2026-04-12T09:39:22.193 [DEBUG] [Thread-186840] [transport.py] [_log()] server lang: <none>
2026-04-12T09:39:22.193 [DEBUG] [Thread-186840] [transport.py] [_log()] kex follows: False
2026-04-12T09:39:22.193 [DEBUG] [Thread-186840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:39:22.193 [DEBUG] [Thread-186840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:39:22.193 [DEBUG] [Thread-186840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:39:22.194 [DEBUG] [Thread-186840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:39:22.194 [DEBUG] [Thread-186840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:39:22.194 [DEBUG] [Thread-186840] [transport.py] [_log()] Compression: none
2026-04-12T09:39:22.194 [DEBUG] [Thread-186840] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:39:22.251 [DEBUG] [Thread-186840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:39:22.252 [DEBUG] [Thread-186840] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:39:22.252 [DEBUG] [Thread-186840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:39:22.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:39:22.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:39:22.311 [DEBUG] [Thread-186840] [transport.py] [_log()] userauth is OK
2026-04-12T09:39:22.311 [DEBUG] [Thread-186840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:39:22.311 [DEBUG] [Thread-186840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:39:22.311 [DEBUG] [Thread-186840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:39:22.311 [DEBUG] [Thread-186840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:39:22.330 [INFO] [Thread-186840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:39:22.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:39:22.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:39:23.180 [DEBUG] [Thread-186840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:39:23.181 [DEBUG] [Thread-186840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:39:23.229 [DEBUG] [Thread-186840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:39:23.229 [DEBUG] [Thread-186840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:39:23.239 [DEBUG] [Thread-186840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:39:23.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:39:23.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:39:23.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:39:23.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:39:23.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:39:23.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:39:23.276 [DEBUG] [Thread-186840] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:39:26.347 [DEBUG] [Thread-186842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:39:33.533 [DEBUG] [Thread-186843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:39:48.595 [DEBUG] [Thread-186844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:39:48.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:39:48.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:39:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:39:53.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:39:53.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:39:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 39, 19), -0.06046, 100.369, 0.0, 24.4022, 10.5828, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:39:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:39:19
2026-04-12T09:39:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:39:55.149 [DEBUG] [Thread-186845] [transport.py] [_log()] starting thread (client mode): 0xae5b3fd0
2026-04-12T09:39:55.149 [DEBUG] [Thread-186845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:39:55.160 [DEBUG] [Thread-186845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:39:55.161 [INFO] [Thread-186845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] client lang: <none>
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] server lang: <none>
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] kex follows: False
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] Compression: none
2026-04-12T09:39:55.164 [DEBUG] [Thread-186845] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:39:55.180 [DEBUG] [Thread-186845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:39:55.180 [DEBUG] [Thread-186845] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:39:55.181 [DEBUG] [Thread-186845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:39:55.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:39:55.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:39:55.182 [DEBUG] [Thread-186845] [transport.py] [_log()] userauth is OK
2026-04-12T09:39:55.182 [DEBUG] [Thread-186845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:39:55.183 [DEBUG] [Thread-186845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:39:55.183 [DEBUG] [Thread-186845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:39:55.183 [DEBUG] [Thread-186845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:39:55.197 [INFO] [Thread-186845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:39:55.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:39:55.846 [DEBUG] [Thread-186845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:39:55.846 [DEBUG] [Thread-186845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:39:55.847 [DEBUG] [Thread-186845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:39:55.887 [DEBUG] [Thread-186845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:39:55.888 [DEBUG] [Thread-186845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:39:55.891 [DEBUG] [Thread-186845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:39:55.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:39:55.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:39:55.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:39:55.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:39:55.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:39:55.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:39:55.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:39:55.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:39:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:39:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.319208 -999.00  +10.60  23.12     95   +9.90 1 2 1 3 1   887    0 0.99 14.82 ----- 19.0 23.1 282.0 28.4 14.4 -16.6 13.8 -13.0 12.8 -14.3 13.7 -14.8
2026-04-12T09:39:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:39:55.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:39:55.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.319208
2026-04-12T09:39:55.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:39:55.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:39:55.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:39:55.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:39:55.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:39:55.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:39:19', tmtdew=-0.06046, humidity=100.369, cloud=0.0, wind=24.4022, temperature=10.5828, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:39:39.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:39:55.913 [DEBUG] [Thread-186845] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:39:55.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:39:56.026 [DEBUG] [Thread-186848] [transport.py] [_log()] starting thread (client mode): 0xae5b1e40
2026-04-12T09:39:56.026 [DEBUG] [Thread-186848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:39:56.059 [DEBUG] [Thread-186848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:39:56.059 [INFO] [Thread-186848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] client lang: <none>
2026-04-12T09:39:56.087 [DEBUG] [Thread-186848] [transport.py] [_log()] server lang: <none>
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] kex follows: False
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] Compression: none
2026-04-12T09:39:56.088 [DEBUG] [Thread-186848] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:39:56.169 [DEBUG] [Thread-186848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:39:56.169 [DEBUG] [Thread-186848] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:39:56.170 [DEBUG] [Thread-186848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:39:56.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:39:56.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:39:56.259 [DEBUG] [Thread-186848] [transport.py] [_log()] userauth is OK
2026-04-12T09:39:56.259 [DEBUG] [Thread-186848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:39:56.259 [DEBUG] [Thread-186848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:39:56.259 [DEBUG] [Thread-186848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:39:56.260 [DEBUG] [Thread-186848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:39:56.297 [INFO] [Thread-186848] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:39:56.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:39:56.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:39:57.149 [DEBUG] [Thread-186848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:39:57.149 [DEBUG] [Thread-186848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:39:57.218 [DEBUG] [Thread-186848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:39:57.218 [DEBUG] [Thread-186848] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:39:57.251 [DEBUG] [Thread-186848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:39:57.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:39:57.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:39:57.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:39:57.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:39:57.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:39:57.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:39:57.374 [DEBUG] [Thread-186848] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:40:03.629 [DEBUG] [Thread-186850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:40:18.691 [DEBUG] [Thread-186851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:40:26.380 [DEBUG] [Thread-186852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:40:27.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:40:27.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:40:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:40:28.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 39, 54), -0.10608, 100.638, 0.0, 26.4283, 11.1988, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:40:28.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:39:54
2026-04-12T09:40:29.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:40:29.190 [DEBUG] [Thread-186853] [transport.py] [_log()] starting thread (client mode): 0xae518c70
2026-04-12T09:40:29.190 [DEBUG] [Thread-186853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:40:29.211 [DEBUG] [Thread-186853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:40:29.211 [INFO] [Thread-186853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:40:29.214 [DEBUG] [Thread-186853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:40:29.214 [DEBUG] [Thread-186853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] client lang: <none>
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] server lang: <none>
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] kex follows: False
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] Compression: none
2026-04-12T09:40:29.215 [DEBUG] [Thread-186853] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:40:29.226 [DEBUG] [Thread-186853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:40:29.226 [DEBUG] [Thread-186853] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:40:29.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:40:29.228 [DEBUG] [Thread-186853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:40:29.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:40:29.229 [DEBUG] [Thread-186853] [transport.py] [_log()] userauth is OK
2026-04-12T09:40:29.230 [DEBUG] [Thread-186853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:40:29.230 [DEBUG] [Thread-186853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:40:29.230 [DEBUG] [Thread-186853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:40:29.230 [DEBUG] [Thread-186853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:40:29.265 [INFO] [Thread-186853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:40:29.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:40:33.731 [DEBUG] [Thread-186855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:40:35.838 [DEBUG] [Thread-186853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:40:35.839 [DEBUG] [Thread-186853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:40:35.839 [DEBUG] [Thread-186853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:40:35.880 [DEBUG] [Thread-186853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:40:35.881 [DEBUG] [Thread-186853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:40:35.884 [DEBUG] [Thread-186853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:40:36.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:40:36.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:40:36.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:40:36.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:40:36.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:40:36.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:40:36.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:40:36.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:40:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:40:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.319208 -999.00  +10.60  23.12     95   +9.90 1 2 1 3 1   887    0 0.99 14.82 ----- 19.0 23.1 282.0 28.4 14.4 -16.6 13.8 -13.0 12.8 -14.3 13.7 -14.8
2026-04-12T09:40:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:40:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:40:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.319208
2026-04-12T09:40:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:40:36.054 [DEBUG] [Thread-186853] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:40:36.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:40:36.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:40:36.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:40:36.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:40:36.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:39:54', tmtdew=-0.10608, humidity=100.638, cloud=0.0, wind=26.4283, temperature=11.1988, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:39:39.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:40:36.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:40:36.138 [DEBUG] [Thread-186857] [transport.py] [_log()] starting thread (client mode): 0xae51a9b0
2026-04-12T09:40:36.138 [DEBUG] [Thread-186857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:40:36.153 [DEBUG] [Thread-186857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:40:36.153 [INFO] [Thread-186857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:40:36.165 [DEBUG] [Thread-186857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:40:36.165 [DEBUG] [Thread-186857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:40:36.165 [DEBUG] [Thread-186857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] client lang: <none>
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] server lang: <none>
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] kex follows: False
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] Compression: none
2026-04-12T09:40:36.166 [DEBUG] [Thread-186857] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:40:36.220 [DEBUG] [Thread-186857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:40:36.221 [DEBUG] [Thread-186857] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:40:36.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:40:36.222 [DEBUG] [Thread-186857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:40:36.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:40:36.277 [DEBUG] [Thread-186857] [transport.py] [_log()] userauth is OK
2026-04-12T09:40:36.277 [DEBUG] [Thread-186857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:40:36.277 [DEBUG] [Thread-186857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:40:36.277 [DEBUG] [Thread-186857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:40:36.277 [DEBUG] [Thread-186857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:40:36.296 [INFO] [Thread-186857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:40:36.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:40:36.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:40:37.119 [DEBUG] [Thread-186857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:40:37.120 [DEBUG] [Thread-186857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:40:37.167 [DEBUG] [Thread-186857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:40:37.167 [DEBUG] [Thread-186857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:40:37.176 [DEBUG] [Thread-186857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:40:37.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:40:37.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:40:37.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:40:37.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:40:37.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:40:37.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:40:37.217 [DEBUG] [Thread-186857] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:40:48.768 [DEBUG] [Thread-186859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:40:49.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:40:49.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:41:03.820 [DEBUG] [Thread-186860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:41:07.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:41:07.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:41:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:41:08.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 40, 30), -0.005525, 100.336, 0.0, 23.2556, 10.6494, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:41:08.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:40:30
2026-04-12T09:41:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:41:09.059 [DEBUG] [Thread-186861] [transport.py] [_log()] starting thread (client mode): 0xb0f43400
2026-04-12T09:41:09.059 [DEBUG] [Thread-186861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:41:09.079 [DEBUG] [Thread-186861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:41:09.080 [INFO] [Thread-186861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:41:09.081 [DEBUG] [Thread-186861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] client lang: <none>
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] server lang: <none>
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] kex follows: False
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] Compression: none
2026-04-12T09:41:09.082 [DEBUG] [Thread-186861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:41:09.100 [DEBUG] [Thread-186861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:41:09.101 [DEBUG] [Thread-186861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:41:09.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:41:09.102 [DEBUG] [Thread-186861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:41:09.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:41:09.104 [DEBUG] [Thread-186861] [transport.py] [_log()] userauth is OK
2026-04-12T09:41:09.104 [DEBUG] [Thread-186861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:41:09.104 [DEBUG] [Thread-186861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:41:09.105 [DEBUG] [Thread-186861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:41:09.105 [DEBUG] [Thread-186861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:41:09.128 [INFO] [Thread-186861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:41:09.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:41:09.923 [DEBUG] [Thread-186861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:41:09.923 [DEBUG] [Thread-186861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:41:09.924 [DEBUG] [Thread-186861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:41:09.964 [DEBUG] [Thread-186861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:41:09.964 [DEBUG] [Thread-186861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:41:09.967 [DEBUG] [Thread-186861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:41:09.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:41:09.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:41:09.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:41:09.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:41:09.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:41:09.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:41:09.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:41:09.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:41:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:41:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.319555 -999.00  +10.70  20.61     95  +10.00 1 2 1 3 1   887    0 1.06 16.76 ----- 17.5 20.6 280.8 26.4 14.8 -15.2 14.0 -13.3 12.9 -13.1 13.8 -12.2
2026-04-12T09:41:09.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:41:09.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:41:09.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.319555
2026-04-12T09:41:09.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:41:09.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:41:09.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:41:09.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:41:09.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:41:09.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:40:30', tmtdew=-0.005525, humidity=100.336, cloud=0.0, wind=23.2556, temperature=10.6494, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:40:09.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:41:09.987 [DEBUG] [Thread-186861] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:41:10.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:41:10.109 [DEBUG] [Thread-186864] [transport.py] [_log()] starting thread (client mode): 0xae5b1ab0
2026-04-12T09:41:10.110 [DEBUG] [Thread-186864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:41:10.151 [DEBUG] [Thread-186864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:41:10.151 [INFO] [Thread-186864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:41:10.183 [DEBUG] [Thread-186864] [transport.py] [_log()] client lang: <none>
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] server lang: <none>
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] kex follows: False
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] Compression: none
2026-04-12T09:41:10.184 [DEBUG] [Thread-186864] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:41:10.275 [DEBUG] [Thread-186864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:41:10.275 [DEBUG] [Thread-186864] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:41:10.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:41:10.277 [DEBUG] [Thread-186864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:41:10.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:41:10.386 [DEBUG] [Thread-186864] [transport.py] [_log()] userauth is OK
2026-04-12T09:41:10.386 [DEBUG] [Thread-186864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:41:10.386 [DEBUG] [Thread-186864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:41:10.386 [DEBUG] [Thread-186864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:41:10.387 [DEBUG] [Thread-186864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:41:10.430 [INFO] [Thread-186864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:41:10.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:41:10.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:41:11.243 [DEBUG] [Thread-186864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:41:11.244 [DEBUG] [Thread-186864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:41:11.319 [DEBUG] [Thread-186864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:41:11.319 [DEBUG] [Thread-186864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:41:11.357 [DEBUG] [Thread-186864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:41:11.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:41:11.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:41:11.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:41:11.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:41:11.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:41:11.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:41:11.507 [DEBUG] [Thread-186864] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:41:18.863 [DEBUG] [Thread-186866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:41:26.411 [DEBUG] [Thread-186867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:41:33.917 [DEBUG] [Thread-186868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:41:41.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:41:41.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:41:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:41:42.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 41, 5), 0.001885, 100.286, 0.0, 23.7848, 10.6826, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:41:42.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:41:05
2026-04-12T09:41:43.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:41:43.380 [DEBUG] [Thread-186869] [transport.py] [_log()] starting thread (client mode): 0xb0fb7040
2026-04-12T09:41:43.380 [DEBUG] [Thread-186869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:41:43.400 [DEBUG] [Thread-186869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:41:43.400 [INFO] [Thread-186869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] client lang: <none>
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] server lang: <none>
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] kex follows: False
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] Compression: none
2026-04-12T09:41:43.403 [DEBUG] [Thread-186869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:41:43.422 [DEBUG] [Thread-186869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:41:43.422 [DEBUG] [Thread-186869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:41:43.423 [DEBUG] [Thread-186869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:41:43.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:41:43.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:41:43.425 [DEBUG] [Thread-186869] [transport.py] [_log()] userauth is OK
2026-04-12T09:41:43.425 [DEBUG] [Thread-186869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:41:43.425 [DEBUG] [Thread-186869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:41:43.425 [DEBUG] [Thread-186869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:41:43.425 [DEBUG] [Thread-186869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:41:43.445 [INFO] [Thread-186869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:41:43.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:41:44.040 [DEBUG] [Thread-186869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:41:44.040 [DEBUG] [Thread-186869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:41:44.040 [DEBUG] [Thread-186869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:41:44.081 [DEBUG] [Thread-186869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:41:44.081 [DEBUG] [Thread-186869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:41:44.085 [DEBUG] [Thread-186869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:41:44.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:41:44.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:41:44.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:41:44.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:41:44.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:41:44.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:41:44.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:41:44.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:41:44.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:41:44.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.320250 -999.00  +10.90  22.54     95  +10.20 1 3 1 3 1   887    0 1.06 16.30 ----- 21.5 22.5 279.6 25.3 15.1 -6.3 14.2 -7.5 13.2 -5.4 14.2 -3.8
2026-04-12T09:41:44.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:41:44.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:41:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.320250
2026-04-12T09:41:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:41:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:41:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:41:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:41:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T09:41:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:41:05', tmtdew=0.001885, humidity=100.286, cloud=0.0, wind=23.7848, temperature=10.6826, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:41:09.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:41:44.111 [DEBUG] [Thread-186869] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:41:44.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:41:44.203 [DEBUG] [Thread-186872] [transport.py] [_log()] starting thread (client mode): 0xae5b1510
2026-04-12T09:41:44.203 [DEBUG] [Thread-186872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:41:44.223 [DEBUG] [Thread-186872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:41:44.223 [INFO] [Thread-186872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:41:44.231 [DEBUG] [Thread-186872] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:41:44.231 [DEBUG] [Thread-186872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:41:44.231 [DEBUG] [Thread-186872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:41:44.231 [DEBUG] [Thread-186872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] client lang: <none>
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] server lang: <none>
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] kex follows: False
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] Compression: none
2026-04-12T09:41:44.232 [DEBUG] [Thread-186872] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:41:44.291 [DEBUG] [Thread-186872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:41:44.292 [DEBUG] [Thread-186872] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:41:44.292 [DEBUG] [Thread-186872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:41:44.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:41:44.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:41:44.347 [DEBUG] [Thread-186872] [transport.py] [_log()] userauth is OK
2026-04-12T09:41:44.347 [DEBUG] [Thread-186872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:41:44.347 [DEBUG] [Thread-186872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:41:44.348 [DEBUG] [Thread-186872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:41:44.348 [DEBUG] [Thread-186872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:41:44.367 [INFO] [Thread-186872] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:41:44.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:41:44.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:41:45.211 [DEBUG] [Thread-186872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:41:45.211 [DEBUG] [Thread-186872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:41:45.259 [DEBUG] [Thread-186872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:41:45.259 [DEBUG] [Thread-186872] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:41:45.269 [DEBUG] [Thread-186872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:41:45.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:41:45.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:41:45.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:41:45.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:41:45.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:41:45.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:41:45.306 [DEBUG] [Thread-186872] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:41:48.952 [DEBUG] [Thread-186874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:41:49.150 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:41:49.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:04.007 [DEBUG] [Thread-186875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:15.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:42:15.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:42:15.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:42:16.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 41, 41), -0.11136, 100.671, 0.0, 24.241, 11.3647, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:42:16.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:41:41
2026-04-12T09:42:16.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:42:17.157 [DEBUG] [Thread-186876] [transport.py] [_log()] starting thread (client mode): 0xae518ca0
2026-04-12T09:42:17.157 [DEBUG] [Thread-186876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:42:17.178 [DEBUG] [Thread-186876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:42:17.178 [INFO] [Thread-186876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:42:17.179 [DEBUG] [Thread-186876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:42:17.179 [DEBUG] [Thread-186876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:42:17.179 [DEBUG] [Thread-186876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] client lang: <none>
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] server lang: <none>
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] kex follows: False
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] Compression: none
2026-04-12T09:42:17.180 [DEBUG] [Thread-186876] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:42:17.188 [DEBUG] [Thread-186876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:42:17.189 [DEBUG] [Thread-186876] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:42:17.189 [DEBUG] [Thread-186876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:42:17.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:42:17.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:42:17.191 [DEBUG] [Thread-186876] [transport.py] [_log()] userauth is OK
2026-04-12T09:42:17.191 [DEBUG] [Thread-186876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:42:17.191 [DEBUG] [Thread-186876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:42:17.191 [DEBUG] [Thread-186876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:42:17.192 [DEBUG] [Thread-186876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:42:17.209 [INFO] [Thread-186876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:42:17.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:42:17.747 [DEBUG] [Thread-186876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:42:17.747 [DEBUG] [Thread-186876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:42:17.748 [DEBUG] [Thread-186876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:42:17.789 [DEBUG] [Thread-186876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:42:17.789 [DEBUG] [Thread-186876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:42:17.793 [DEBUG] [Thread-186876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:42:17.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:42:17.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:42:17.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:42:17.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:42:17.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:42:17.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:42:17.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:42:17.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:42:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:42:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.320944 -999.00  +10.80  22.26     95  +10.00 1 2 1 3 1   887    0 1.03 15.35 ----- 21.8 22.3 280.0 24.9 14.7 -13.2 13.9 -15.9 12.9 -10.8 13.8 -9.0
2026-04-12T09:42:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:42:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:42:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.320944
2026-04-12T09:42:17.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:42:17.812 [DEBUG] [Thread-186876] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:42:17.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:42:17.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:42:17.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:42:17.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:42:17.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:41:41', tmtdew=-0.11136, humidity=100.671, cloud=0.0, wind=24.241, temperature=11.3647, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:42:09.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:42:17.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:42:17.914 [DEBUG] [Thread-186879] [transport.py] [_log()] starting thread (client mode): 0xae5b6050
2026-04-12T09:42:17.914 [DEBUG] [Thread-186879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:42:17.929 [DEBUG] [Thread-186879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:42:17.929 [INFO] [Thread-186879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:42:17.936 [DEBUG] [Thread-186879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:42:17.936 [DEBUG] [Thread-186879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:42:17.936 [DEBUG] [Thread-186879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] client lang: <none>
2026-04-12T09:42:17.937 [DEBUG] [Thread-186879] [transport.py] [_log()] server lang: <none>
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] kex follows: False
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] Compression: none
2026-04-12T09:42:17.938 [DEBUG] [Thread-186879] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:42:18.003 [DEBUG] [Thread-186879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:42:18.004 [DEBUG] [Thread-186879] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:42:18.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:42:18.004 [DEBUG] [Thread-186879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:42:18.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:42:18.062 [DEBUG] [Thread-186879] [transport.py] [_log()] userauth is OK
2026-04-12T09:42:18.062 [DEBUG] [Thread-186879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:42:18.062 [DEBUG] [Thread-186879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:42:18.062 [DEBUG] [Thread-186879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:42:18.062 [DEBUG] [Thread-186879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:42:18.081 [INFO] [Thread-186879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:42:18.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:42:18.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:42:18.912 [DEBUG] [Thread-186879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:42:18.912 [DEBUG] [Thread-186879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:42:18.960 [DEBUG] [Thread-186879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:42:18.960 [DEBUG] [Thread-186879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:42:18.969 [DEBUG] [Thread-186879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:42:18.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:42:18.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:42:18.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:42:18.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:42:18.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:42:18.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:42:19.006 [DEBUG] [Thread-186879] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:42:19.048 [DEBUG] [Thread-186881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:26.454 [DEBUG] [Thread-186882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:34.107 [DEBUG] [Thread-186883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:49.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:42:49.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:42:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:42:49.144 [DEBUG] [Thread-186884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:49.291 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:49.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:42:50.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 42, 17), -0.01027, 100.369, 0.0, 20.7677, 10.5668, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:42:50.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:42:17
2026-04-12T09:42:50.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:42:50.861 [DEBUG] [Thread-186885] [transport.py] [_log()] starting thread (client mode): 0xb0fb43a0
2026-04-12T09:42:50.861 [DEBUG] [Thread-186885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:42:50.881 [DEBUG] [Thread-186885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:42:50.881 [INFO] [Thread-186885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:42:50.884 [DEBUG] [Thread-186885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:42:50.884 [DEBUG] [Thread-186885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:42:50.884 [DEBUG] [Thread-186885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:42:50.884 [DEBUG] [Thread-186885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:50.884 [DEBUG] [Thread-186885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] client lang: <none>
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] server lang: <none>
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] kex follows: False
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] Compression: none
2026-04-12T09:42:50.885 [DEBUG] [Thread-186885] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:42:50.902 [DEBUG] [Thread-186885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:42:50.902 [DEBUG] [Thread-186885] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:42:50.903 [DEBUG] [Thread-186885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:42:50.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:42:50.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:42:50.905 [DEBUG] [Thread-186885] [transport.py] [_log()] userauth is OK
2026-04-12T09:42:50.905 [DEBUG] [Thread-186885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:42:50.905 [DEBUG] [Thread-186885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:42:50.905 [DEBUG] [Thread-186885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:42:50.905 [DEBUG] [Thread-186885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:42:50.924 [INFO] [Thread-186885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:42:50.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:42:51.550 [DEBUG] [Thread-186885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:42:51.551 [DEBUG] [Thread-186885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:42:51.552 [DEBUG] [Thread-186885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:42:51.592 [DEBUG] [Thread-186885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:42:51.592 [DEBUG] [Thread-186885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:42:51.595 [DEBUG] [Thread-186885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:42:51.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:42:51.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:42:51.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:42:51.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:42:51.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:42:51.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:42:51.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:42:51.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:42:51.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:42:51.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.321291 -999.00  +10.70  19.09     95   +9.90 1 2 1 3 1   887    0 1.02 14.94 ----- 18.2 19.1 277.4 25.5 14.6 -16.1 13.8 -12.7 12.8 -12.5 13.8 -12.5
2026-04-12T09:42:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:42:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:42:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.321291
2026-04-12T09:42:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:42:51.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:42:51.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:42:51.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:42:51.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:42:51.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:42:17', tmtdew=-0.01027, humidity=100.369, cloud=0.0, wind=20.7677, temperature=10.5668, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:42:39.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:42:51.618 [DEBUG] [Thread-186885] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:42:51.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:42:51.740 [DEBUG] [Thread-186888] [transport.py] [_log()] starting thread (client mode): 0xae5b1510
2026-04-12T09:42:51.740 [DEBUG] [Thread-186888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:42:51.771 [DEBUG] [Thread-186888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:42:51.771 [INFO] [Thread-186888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:42:51.796 [DEBUG] [Thread-186888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:42:51.796 [DEBUG] [Thread-186888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:42:51.796 [DEBUG] [Thread-186888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:42:51.796 [DEBUG] [Thread-186888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:51.796 [DEBUG] [Thread-186888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] client lang: <none>
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] server lang: <none>
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] kex follows: False
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] Compression: none
2026-04-12T09:42:51.797 [DEBUG] [Thread-186888] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:42:51.870 [DEBUG] [Thread-186888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:42:51.871 [DEBUG] [Thread-186888] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:42:51.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:42:51.872 [DEBUG] [Thread-186888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:42:51.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:42:51.959 [DEBUG] [Thread-186888] [transport.py] [_log()] userauth is OK
2026-04-12T09:42:51.959 [DEBUG] [Thread-186888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:42:51.959 [DEBUG] [Thread-186888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:42:51.959 [DEBUG] [Thread-186888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:42:51.959 [DEBUG] [Thread-186888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:42:51.989 [INFO] [Thread-186888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:42:51.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:42:51.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:42:52.795 [DEBUG] [Thread-186888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:42:52.796 [DEBUG] [Thread-186888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:42:52.861 [DEBUG] [Thread-186888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:42:52.862 [DEBUG] [Thread-186888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:42:52.889 [DEBUG] [Thread-186888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:42:52.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:42:52.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:42:52.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:42:52.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:42:52.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:42:52.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:42:52.997 [DEBUG] [Thread-186888] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:43:04.183 [DEBUG] [Thread-186890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:43:19.223 [DEBUG] [Thread-186891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:43:23.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:43:23.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:43:23.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:43:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 42, 52), -0.11114, 100.671, 0.0, 24.8407, 11.232, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:43:24.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:42:52
2026-04-12T09:43:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:43:24.931 [DEBUG] [Thread-186892] [transport.py] [_log()] starting thread (client mode): 0xb0f549d0
2026-04-12T09:43:24.931 [DEBUG] [Thread-186892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:43:24.950 [DEBUG] [Thread-186892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:43:24.950 [INFO] [Thread-186892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] client lang: <none>
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] server lang: <none>
2026-04-12T09:43:24.951 [DEBUG] [Thread-186892] [transport.py] [_log()] kex follows: False
2026-04-12T09:43:24.952 [DEBUG] [Thread-186892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:43:24.952 [DEBUG] [Thread-186892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:43:24.952 [DEBUG] [Thread-186892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:43:24.952 [DEBUG] [Thread-186892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:43:24.952 [DEBUG] [Thread-186892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:43:24.952 [DEBUG] [Thread-186892] [transport.py] [_log()] Compression: none
2026-04-12T09:43:24.952 [DEBUG] [Thread-186892] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:43:24.964 [DEBUG] [Thread-186892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:43:24.965 [DEBUG] [Thread-186892] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:43:24.965 [DEBUG] [Thread-186892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:43:24.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:43:24.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:43:24.967 [DEBUG] [Thread-186892] [transport.py] [_log()] userauth is OK
2026-04-12T09:43:24.967 [DEBUG] [Thread-186892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:43:24.967 [DEBUG] [Thread-186892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:43:24.967 [DEBUG] [Thread-186892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:43:24.968 [DEBUG] [Thread-186892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:43:25.003 [INFO] [Thread-186892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:43:25.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:43:25.633 [DEBUG] [Thread-186892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:43:25.633 [DEBUG] [Thread-186892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:43:25.633 [DEBUG] [Thread-186892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:43:25.674 [DEBUG] [Thread-186892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:43:25.675 [DEBUG] [Thread-186892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:43:25.678 [DEBUG] [Thread-186892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:43:25.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:43:25.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:43:25.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:43:25.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:43:25.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:43:25.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:43:25.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:43:25.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:43:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:43:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.321638 -999.00  +10.70  18.27     94   +9.90 1 2 1 3 1   887    0 1.04 15.19 ----- 22.1 18.3 277.2 21.8 14.6 -12.6 13.8 -13.6 12.9 -8.9 13.8 -8.9
2026-04-12T09:43:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:43:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:43:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.321638
2026-04-12T09:43:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:43:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:43:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:43:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:43:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:43:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:42:52', tmtdew=-0.11114, humidity=100.671, cloud=0.0, wind=24.8407, temperature=11.232, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:43:09.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:43:25.703 [DEBUG] [Thread-186892] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:43:25.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:43:25.796 [DEBUG] [Thread-186895] [transport.py] [_log()] starting thread (client mode): 0xb0f55ab0
2026-04-12T09:43:25.796 [DEBUG] [Thread-186895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:43:25.811 [DEBUG] [Thread-186895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:43:25.811 [INFO] [Thread-186895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:43:25.818 [DEBUG] [Thread-186895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] client lang: <none>
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] server lang: <none>
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] kex follows: False
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] Compression: none
2026-04-12T09:43:25.819 [DEBUG] [Thread-186895] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:43:25.876 [DEBUG] [Thread-186895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:43:25.877 [DEBUG] [Thread-186895] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:43:25.877 [DEBUG] [Thread-186895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:43:25.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:43:25.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:43:25.933 [DEBUG] [Thread-186895] [transport.py] [_log()] userauth is OK
2026-04-12T09:43:25.934 [DEBUG] [Thread-186895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:43:25.934 [DEBUG] [Thread-186895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:43:25.934 [DEBUG] [Thread-186895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:43:25.934 [DEBUG] [Thread-186895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:43:25.953 [INFO] [Thread-186895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:43:25.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:43:25.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:43:26.491 [DEBUG] [Thread-186897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:43:26.731 [DEBUG] [Thread-186895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:43:26.731 [DEBUG] [Thread-186895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:43:26.779 [DEBUG] [Thread-186895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:43:26.779 [DEBUG] [Thread-186895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:43:26.789 [DEBUG] [Thread-186895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:43:26.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:43:26.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:43:26.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:43:26.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:43:26.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:43:26.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:43:26.826 [DEBUG] [Thread-186895] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:43:34.262 [DEBUG] [Thread-186898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:43:49.316 [DEBUG] [Thread-186899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:43:49.433 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:43:49.435 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:43:56.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:43:56.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:43:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:43:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 43, 28), -0.00283, 100.319, 0.0, 22.8676, 10.4668, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:43:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:43:28
2026-04-12T09:43:58.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:43:58.654 [DEBUG] [Thread-186900] [transport.py] [_log()] starting thread (client mode): 0xae5183d0
2026-04-12T09:43:58.654 [DEBUG] [Thread-186900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:43:58.674 [DEBUG] [Thread-186900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:43:58.674 [INFO] [Thread-186900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:58.678 [DEBUG] [Thread-186900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] client lang: <none>
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] server lang: <none>
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] kex follows: False
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] Compression: none
2026-04-12T09:43:58.679 [DEBUG] [Thread-186900] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:43:58.694 [DEBUG] [Thread-186900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:43:58.694 [DEBUG] [Thread-186900] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:43:58.695 [DEBUG] [Thread-186900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:43:58.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:43:58.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:43:58.698 [DEBUG] [Thread-186900] [transport.py] [_log()] userauth is OK
2026-04-12T09:43:58.698 [DEBUG] [Thread-186900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:43:58.698 [DEBUG] [Thread-186900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:43:58.699 [DEBUG] [Thread-186900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:43:58.699 [DEBUG] [Thread-186900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:43:58.724 [INFO] [Thread-186900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:43:58.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:43:59.372 [DEBUG] [Thread-186900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:43:59.373 [DEBUG] [Thread-186900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:43:59.373 [DEBUG] [Thread-186900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:43:59.414 [DEBUG] [Thread-186900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:43:59.414 [DEBUG] [Thread-186900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:43:59.418 [DEBUG] [Thread-186900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:43:59.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:43:59.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:43:59.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:43:59.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:43:59.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:43:59.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:43:59.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:43:59.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:43:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:43:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.321986 -999.00  +10.60  23.33     94   +9.80 1 2 1 3 1   887    0 1.05 15.54 ----- 23.7 23.3 275.6 25.3 14.3 -13.8 13.7 -13.4 12.7 -11.9 13.7 -10.1
2026-04-12T09:43:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:43:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:43:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.321986
2026-04-12T09:43:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:43:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:43:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:43:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:43:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:43:59.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:43:28', tmtdew=-0.00283, humidity=100.319, cloud=0.0, wind=22.8676, temperature=10.4668, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:43:39.590', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:43:59.443 [DEBUG] [Thread-186900] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:43:59.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:43:59.536 [DEBUG] [Thread-186903] [transport.py] [_log()] starting thread (client mode): 0xae5b4880
2026-04-12T09:43:59.536 [DEBUG] [Thread-186903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:43:59.551 [DEBUG] [Thread-186903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:43:59.551 [INFO] [Thread-186903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:43:59.558 [DEBUG] [Thread-186903] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] client lang: <none>
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] server lang: <none>
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] kex follows: False
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] Compression: none
2026-04-12T09:43:59.559 [DEBUG] [Thread-186903] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:43:59.620 [DEBUG] [Thread-186903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:43:59.621 [DEBUG] [Thread-186903] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:43:59.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:43:59.622 [DEBUG] [Thread-186903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:43:59.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:43:59.676 [DEBUG] [Thread-186903] [transport.py] [_log()] userauth is OK
2026-04-12T09:43:59.676 [DEBUG] [Thread-186903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:43:59.677 [DEBUG] [Thread-186903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:43:59.677 [DEBUG] [Thread-186903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:43:59.677 [DEBUG] [Thread-186903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:43:59.695 [INFO] [Thread-186903] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:43:59.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:43:59.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:44:00.534 [DEBUG] [Thread-186903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:44:00.534 [DEBUG] [Thread-186903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:44:00.581 [DEBUG] [Thread-186903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:44:00.582 [DEBUG] [Thread-186903] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:44:00.591 [DEBUG] [Thread-186903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:44:00.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:44:00.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:44:00.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:44:00.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:44:00.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:44:00.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:44:00.625 [DEBUG] [Thread-186903] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:44:04.352 [DEBUG] [Thread-186905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:44:19.413 [DEBUG] [Thread-186906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:44:26.540 [DEBUG] [Thread-186907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:44:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:44:30.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:44:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:44:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 44, 3), -0.007915, 100.352, 0.0, 22.4795, 10.5331, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:44:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:44:03
2026-04-12T09:44:32.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:44:32.409 [DEBUG] [Thread-186908] [transport.py] [_log()] starting thread (client mode): 0xae561ae0
2026-04-12T09:44:32.409 [DEBUG] [Thread-186908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:44:32.426 [DEBUG] [Thread-186908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:44:32.426 [INFO] [Thread-186908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:44:32.428 [DEBUG] [Thread-186908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] client lang: <none>
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] server lang: <none>
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] kex follows: False
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] Compression: none
2026-04-12T09:44:32.429 [DEBUG] [Thread-186908] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:44:32.442 [DEBUG] [Thread-186908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:44:32.443 [DEBUG] [Thread-186908] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:44:32.443 [DEBUG] [Thread-186908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:44:32.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:44:32.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:44:32.445 [DEBUG] [Thread-186908] [transport.py] [_log()] userauth is OK
2026-04-12T09:44:32.445 [DEBUG] [Thread-186908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:44:32.446 [DEBUG] [Thread-186908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:44:32.446 [DEBUG] [Thread-186908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:44:32.446 [DEBUG] [Thread-186908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:44:32.464 [INFO] [Thread-186908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:44:32.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:44:33.074 [DEBUG] [Thread-186908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:44:33.075 [DEBUG] [Thread-186908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:44:33.075 [DEBUG] [Thread-186908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:44:33.116 [DEBUG] [Thread-186908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:44:33.116 [DEBUG] [Thread-186908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:44:33.119 [DEBUG] [Thread-186908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:44:33.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:44:33.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:44:33.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:44:33.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:44:33.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:44:33.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:44:33.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:44:33.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:44:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:44:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.322333 -999.00  +10.60  25.35     94   +9.80 1 2 1 3 1   887    0 1.01 13.94 ----- 23.0 25.4 274.4 29.4 14.2 -16.8 13.6 -16.9 12.6 -14.9 13.6 -12.3
2026-04-12T09:44:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:44:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:44:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.322333
2026-04-12T09:44:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:44:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:44:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:44:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:44:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:44:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:44:03', tmtdew=-0.007915, humidity=100.352, cloud=0.0, wind=22.4795, temperature=10.5331, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:44:09.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:44:33.144 [DEBUG] [Thread-186908] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:44:33.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:44:33.237 [DEBUG] [Thread-186911] [transport.py] [_log()] starting thread (client mode): 0xae5b58d0
2026-04-12T09:44:33.237 [DEBUG] [Thread-186911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:44:33.251 [DEBUG] [Thread-186911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:44:33.251 [INFO] [Thread-186911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:44:33.263 [DEBUG] [Thread-186911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] client lang: <none>
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] server lang: <none>
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] kex follows: False
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] Compression: none
2026-04-12T09:44:33.264 [DEBUG] [Thread-186911] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:44:33.323 [DEBUG] [Thread-186911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:44:33.323 [DEBUG] [Thread-186911] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:44:33.324 [DEBUG] [Thread-186911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:44:33.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:44:33.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:44:33.390 [DEBUG] [Thread-186911] [transport.py] [_log()] userauth is OK
2026-04-12T09:44:33.391 [DEBUG] [Thread-186911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:44:33.391 [DEBUG] [Thread-186911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:44:33.391 [DEBUG] [Thread-186911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:44:33.391 [DEBUG] [Thread-186911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:44:33.409 [INFO] [Thread-186911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:44:33.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:44:33.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:44:34.232 [DEBUG] [Thread-186911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:44:34.232 [DEBUG] [Thread-186911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:44:34.279 [DEBUG] [Thread-186911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:44:34.280 [DEBUG] [Thread-186911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:44:34.288 [DEBUG] [Thread-186911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:44:34.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:44:34.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:44:34.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:44:34.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:44:34.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:44:34.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:44:34.322 [DEBUG] [Thread-186911] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:44:34.446 [DEBUG] [Thread-186913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:44:49.499 [DEBUG] [Thread-186914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:44:49.575 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:44:49.577 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:45:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:45:04.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:45:04.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:45:04.537 [DEBUG] [Thread-186915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:45:05.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 44, 38), -0.10589, 100.638, 0.0, 23.5001, 11.0663, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:45:05.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:44:38
2026-04-12T09:45:06.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:45:06.168 [DEBUG] [Thread-186916] [transport.py] [_log()] starting thread (client mode): 0xae519000
2026-04-12T09:45:06.168 [DEBUG] [Thread-186916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:45:06.190 [DEBUG] [Thread-186916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:45:06.190 [INFO] [Thread-186916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:45:06.194 [DEBUG] [Thread-186916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:45:06.194 [DEBUG] [Thread-186916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:45:06.194 [DEBUG] [Thread-186916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:45:06.194 [DEBUG] [Thread-186916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] client lang: <none>
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] server lang: <none>
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] kex follows: False
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:45:06.195 [DEBUG] [Thread-186916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:45:06.196 [DEBUG] [Thread-186916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:45:06.196 [DEBUG] [Thread-186916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:45:06.196 [DEBUG] [Thread-186916] [transport.py] [_log()] Compression: none
2026-04-12T09:45:06.196 [DEBUG] [Thread-186916] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:45:06.215 [DEBUG] [Thread-186916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:45:06.216 [DEBUG] [Thread-186916] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:45:06.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:45:06.217 [DEBUG] [Thread-186916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:45:06.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:45:06.219 [DEBUG] [Thread-186916] [transport.py] [_log()] userauth is OK
2026-04-12T09:45:06.219 [DEBUG] [Thread-186916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:45:06.219 [DEBUG] [Thread-186916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:45:06.219 [DEBUG] [Thread-186916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:45:06.220 [DEBUG] [Thread-186916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:45:06.245 [INFO] [Thread-186916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:45:06.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:45:14.032 [DEBUG] [Thread-186916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:45:14.033 [DEBUG] [Thread-186916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:45:14.033 [DEBUG] [Thread-186916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:45:14.074 [DEBUG] [Thread-186916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:45:14.074 [DEBUG] [Thread-186916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:45:14.078 [DEBUG] [Thread-186916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:45:14.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:45:14.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:45:14.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:45:14.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:45:14.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:45:14.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:45:14.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:45:14.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:45:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:45:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.322680 -999.00  +10.50  19.19     94   +9.70 1 2 1 3 1   888    0 1.07 15.43 ----- 24.3 19.2 275.8 25.8 14.2 -15.4 13.5 -14.0 12.5 -13.0 13.5 -11.8
2026-04-12T09:45:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:45:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:45:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.322680
2026-04-12T09:45:14.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:45:14.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:45:14.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:45:14.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:45:14.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:45:14.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:44:38', tmtdew=-0.10589, humidity=100.638, cloud=0.0, wind=23.5001, temperature=11.0663, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:44:39.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:45:14.130 [DEBUG] [Thread-186916] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:45:14.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:45:14.252 [DEBUG] [Thread-186919] [transport.py] [_log()] starting thread (client mode): 0xae519db0
2026-04-12T09:45:14.253 [DEBUG] [Thread-186919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:45:14.295 [DEBUG] [Thread-186919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:45:14.296 [INFO] [Thread-186919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:45:14.331 [DEBUG] [Thread-186919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:45:14.331 [DEBUG] [Thread-186919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:45:14.332 [DEBUG] [Thread-186919] [transport.py] [_log()] client lang: <none>
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] server lang: <none>
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] kex follows: False
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] Compression: none
2026-04-12T09:45:14.333 [DEBUG] [Thread-186919] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:45:14.420 [DEBUG] [Thread-186919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:45:14.420 [DEBUG] [Thread-186919] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:45:14.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:45:14.421 [DEBUG] [Thread-186919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:45:14.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:45:14.539 [DEBUG] [Thread-186919] [transport.py] [_log()] userauth is OK
2026-04-12T09:45:14.539 [DEBUG] [Thread-186919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:45:14.540 [DEBUG] [Thread-186919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:45:14.540 [DEBUG] [Thread-186919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:45:14.540 [DEBUG] [Thread-186919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:45:14.587 [INFO] [Thread-186919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:45:14.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:45:14.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:45:15.389 [DEBUG] [Thread-186919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:45:15.389 [DEBUG] [Thread-186919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:45:15.465 [DEBUG] [Thread-186919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:45:15.466 [DEBUG] [Thread-186919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:45:15.511 [DEBUG] [Thread-186919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:45:15.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:45:15.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:45:15.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:45:15.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:45:15.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:45:15.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:45:15.686 [DEBUG] [Thread-186919] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:45:19.576 [DEBUG] [Thread-186921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:45:26.585 [DEBUG] [Thread-186922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:45:34.638 [DEBUG] [Thread-186923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:45:45.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:45:45.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:45:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:45:46.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 45, 14), -0.00537, 100.336, 0.0, 20.0268, 10.4, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:45:46.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:45:14
2026-04-12T09:45:47.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:45:47.493 [DEBUG] [Thread-186924] [transport.py] [_log()] starting thread (client mode): 0xb0f8c0a0
2026-04-12T09:45:47.493 [DEBUG] [Thread-186924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:45:47.512 [DEBUG] [Thread-186924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:45:47.512 [INFO] [Thread-186924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] client lang: <none>
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] server lang: <none>
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] kex follows: False
2026-04-12T09:45:47.516 [DEBUG] [Thread-186924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:45:47.517 [DEBUG] [Thread-186924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:45:47.517 [DEBUG] [Thread-186924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:45:47.517 [DEBUG] [Thread-186924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:45:47.517 [DEBUG] [Thread-186924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:45:47.517 [DEBUG] [Thread-186924] [transport.py] [_log()] Compression: none
2026-04-12T09:45:47.517 [DEBUG] [Thread-186924] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:45:47.533 [DEBUG] [Thread-186924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:45:47.534 [DEBUG] [Thread-186924] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:45:47.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:45:47.535 [DEBUG] [Thread-186924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:45:47.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:45:47.537 [DEBUG] [Thread-186924] [transport.py] [_log()] userauth is OK
2026-04-12T09:45:47.537 [DEBUG] [Thread-186924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:45:47.538 [DEBUG] [Thread-186924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:45:47.538 [DEBUG] [Thread-186924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:45:47.538 [DEBUG] [Thread-186924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:45:47.556 [INFO] [Thread-186924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:45:47.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:45:48.116 [DEBUG] [Thread-186924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:45:48.116 [DEBUG] [Thread-186924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:45:48.117 [DEBUG] [Thread-186924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:45:48.157 [DEBUG] [Thread-186924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:45:48.157 [DEBUG] [Thread-186924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:45:48.158 [DEBUG] [Thread-186924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:45:48.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:45:48.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:45:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:45:48.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:45:48.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:45:48.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:45:48.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:45:48.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:45:48.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:45:48.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.323374 -999.00  +10.70  13.51     94   +9.90 1 2 1 3 1   888    0 1.11 16.46 ----- 11.9 13.5 282.6 24.9 14.4 -12.4 13.7 -12.8 12.6 -10.7 13.6 -8.5
2026-04-12T09:45:48.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:45:48.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:45:48.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.323374
2026-04-12T09:45:48.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:45:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:45:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:45:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:45:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:45:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:45:14', tmtdew=-0.00537, humidity=100.336, cloud=0.0, wind=20.0268, temperature=10.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:45:39.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:45:48.177 [DEBUG] [Thread-186924] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:45:48.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:45:48.283 [DEBUG] [Thread-186927] [transport.py] [_log()] starting thread (client mode): 0xae5b2140
2026-04-12T09:45:48.283 [DEBUG] [Thread-186927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:45:48.315 [DEBUG] [Thread-186927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:45:48.315 [INFO] [Thread-186927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:45:48.341 [DEBUG] [Thread-186927] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] client lang: <none>
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] server lang: <none>
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] kex follows: False
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:45:48.342 [DEBUG] [Thread-186927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:45:48.343 [DEBUG] [Thread-186927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:45:48.343 [DEBUG] [Thread-186927] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:45:48.343 [DEBUG] [Thread-186927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:45:48.343 [DEBUG] [Thread-186927] [transport.py] [_log()] Compression: none
2026-04-12T09:45:48.343 [DEBUG] [Thread-186927] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:45:48.419 [DEBUG] [Thread-186927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:45:48.419 [DEBUG] [Thread-186927] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:45:48.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:45:48.421 [DEBUG] [Thread-186927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:45:48.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:45:48.510 [DEBUG] [Thread-186927] [transport.py] [_log()] userauth is OK
2026-04-12T09:45:48.511 [DEBUG] [Thread-186927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:45:48.511 [DEBUG] [Thread-186927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:45:48.511 [DEBUG] [Thread-186927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:45:48.511 [DEBUG] [Thread-186927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:45:48.548 [INFO] [Thread-186927] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:45:48.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:45:48.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:45:49.375 [DEBUG] [Thread-186927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:45:49.375 [DEBUG] [Thread-186927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:45:49.441 [DEBUG] [Thread-186927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:45:49.442 [DEBUG] [Thread-186927] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:45:49.470 [DEBUG] [Thread-186927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:45:49.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:45:49.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:45:49.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:45:49.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:45:49.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:45:49.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:45:49.582 [DEBUG] [Thread-186927] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:45:49.674 [DEBUG] [Thread-186929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:45:49.725 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:45:49.726 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:04.733 [DEBUG] [Thread-186930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:46:19.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:46:19.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:46:19.773 [DEBUG] [Thread-186931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:20.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 45, 49), -0.11087, 100.672, 0.0, 19.7251, 11.0663, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:46:20.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:45:49
2026-04-12T09:46:21.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:46:21.453 [DEBUG] [Thread-186932] [transport.py] [_log()] starting thread (client mode): 0xae5b3d00
2026-04-12T09:46:21.453 [DEBUG] [Thread-186932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:46:21.469 [DEBUG] [Thread-186932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:46:21.470 [INFO] [Thread-186932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:46:21.471 [DEBUG] [Thread-186932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:46:21.471 [DEBUG] [Thread-186932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:46:21.471 [DEBUG] [Thread-186932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] client lang: <none>
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] server lang: <none>
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] kex follows: False
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] Compression: none
2026-04-12T09:46:21.472 [DEBUG] [Thread-186932] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:46:21.482 [DEBUG] [Thread-186932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:46:21.483 [DEBUG] [Thread-186932] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:46:21.483 [DEBUG] [Thread-186932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:46:21.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:46:21.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:46:21.485 [DEBUG] [Thread-186932] [transport.py] [_log()] userauth is OK
2026-04-12T09:46:21.485 [DEBUG] [Thread-186932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:46:21.485 [DEBUG] [Thread-186932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:46:21.485 [DEBUG] [Thread-186932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:46:21.485 [DEBUG] [Thread-186932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:46:21.503 [INFO] [Thread-186932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:46:21.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:46:22.114 [DEBUG] [Thread-186932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:46:22.114 [DEBUG] [Thread-186932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:46:22.115 [DEBUG] [Thread-186932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:46:22.155 [DEBUG] [Thread-186932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:46:22.156 [DEBUG] [Thread-186932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:46:22.164 [DEBUG] [Thread-186932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:46:22.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:46:22.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:46:22.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:46:22.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:46:22.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:46:22.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:46:22.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:46:22.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:46:22.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:46:22.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.323722 -999.00  +10.80  18.95     95  +10.00 1 2 1 3 1   888    0 1.12 16.84 ----- 19.6 18.9 271.0 22.7 14.5 -11.2 13.8 -13.1 12.8 -9.0 13.6 -8.7
2026-04-12T09:46:22.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:46:22.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:46:22.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.323722
2026-04-12T09:46:22.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:46:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:46:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:46:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:46:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:46:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:45:49', tmtdew=-0.11087, humidity=100.672, cloud=0.0, wind=19.7251, temperature=11.0663, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:46:09.581', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:46:22.188 [DEBUG] [Thread-186932] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:46:22.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:46:22.281 [DEBUG] [Thread-186935] [transport.py] [_log()] starting thread (client mode): 0xae5b2020
2026-04-12T09:46:22.281 [DEBUG] [Thread-186935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:46:22.296 [DEBUG] [Thread-186935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:46:22.297 [INFO] [Thread-186935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:46:22.305 [DEBUG] [Thread-186935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:46:22.305 [DEBUG] [Thread-186935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:46:22.305 [DEBUG] [Thread-186935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:46:22.305 [DEBUG] [Thread-186935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:22.305 [DEBUG] [Thread-186935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:22.305 [DEBUG] [Thread-186935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] client lang: <none>
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] server lang: <none>
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] kex follows: False
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] Compression: none
2026-04-12T09:46:22.306 [DEBUG] [Thread-186935] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:46:22.362 [DEBUG] [Thread-186935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:46:22.362 [DEBUG] [Thread-186935] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:46:22.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:46:22.363 [DEBUG] [Thread-186935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:46:22.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:46:22.418 [DEBUG] [Thread-186935] [transport.py] [_log()] userauth is OK
2026-04-12T09:46:22.418 [DEBUG] [Thread-186935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:46:22.418 [DEBUG] [Thread-186935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:46:22.418 [DEBUG] [Thread-186935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:46:22.419 [DEBUG] [Thread-186935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:46:22.437 [INFO] [Thread-186935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:46:22.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:46:22.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:46:23.292 [DEBUG] [Thread-186935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:46:23.292 [DEBUG] [Thread-186935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:46:23.340 [DEBUG] [Thread-186935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:46:23.340 [DEBUG] [Thread-186935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:46:23.349 [DEBUG] [Thread-186935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:46:23.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:46:23.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:46:23.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:46:23.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:46:23.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:46:23.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:46:23.387 [DEBUG] [Thread-186935] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:46:26.621 [DEBUG] [Thread-186937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:34.811 [DEBUG] [Thread-186938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:49.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:49.868 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:49.868 [DEBUG] [Thread-186939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:46:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:46:53.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:46:53.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:46:54.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 46, 25), -0.005465, 100.336, 0.0, 20.5031, 10.4997, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:46:54.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:46:25
2026-04-12T09:46:54.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:46:55.152 [DEBUG] [Thread-186940] [transport.py] [_log()] starting thread (client mode): 0xae5b2fb0
2026-04-12T09:46:55.152 [DEBUG] [Thread-186940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:46:55.172 [DEBUG] [Thread-186940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:46:55.172 [INFO] [Thread-186940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:46:55.175 [DEBUG] [Thread-186940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] client lang: <none>
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] server lang: <none>
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] kex follows: False
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] Compression: none
2026-04-12T09:46:55.176 [DEBUG] [Thread-186940] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:46:55.192 [DEBUG] [Thread-186940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:46:55.192 [DEBUG] [Thread-186940] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:46:55.193 [DEBUG] [Thread-186940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:46:55.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:46:55.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:46:55.195 [DEBUG] [Thread-186940] [transport.py] [_log()] userauth is OK
2026-04-12T09:46:55.195 [DEBUG] [Thread-186940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:46:55.195 [DEBUG] [Thread-186940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:46:55.195 [DEBUG] [Thread-186940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:46:55.195 [DEBUG] [Thread-186940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:46:55.220 [INFO] [Thread-186940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:46:55.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:46:55.847 [DEBUG] [Thread-186940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:46:55.848 [DEBUG] [Thread-186940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:46:55.848 [DEBUG] [Thread-186940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:46:55.888 [DEBUG] [Thread-186940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:46:55.889 [DEBUG] [Thread-186940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:46:55.892 [DEBUG] [Thread-186940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:46:55.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:46:55.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:46:55.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:46:55.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:46:55.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:46:55.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:46:55.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:46:55.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:46:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:46:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.324069 -999.00  +10.70  21.22     94   +9.90 1 2 1 3 1   888    0 1.15 16.83 ----- 17.5 21.2 273.8 24.2 14.3 -13.0 13.7 -12.5 12.7 -10.5 13.6 -10.8
2026-04-12T09:46:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:46:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:46:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.324069
2026-04-12T09:46:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:46:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:46:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:46:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:46:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:46:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:46:25', tmtdew=-0.005465, humidity=100.336, cloud=0.0, wind=20.5031, temperature=10.4997, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:46:39.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:46:55.920 [DEBUG] [Thread-186940] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:46:56.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:46:56.017 [DEBUG] [Thread-186943] [transport.py] [_log()] starting thread (client mode): 0xb0f8da80
2026-04-12T09:46:56.018 [DEBUG] [Thread-186943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:46:56.034 [DEBUG] [Thread-186943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:46:56.034 [INFO] [Thread-186943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:46:56.042 [DEBUG] [Thread-186943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] client lang: <none>
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] server lang: <none>
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] kex follows: False
2026-04-12T09:46:56.043 [DEBUG] [Thread-186943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:46:56.044 [DEBUG] [Thread-186943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:46:56.044 [DEBUG] [Thread-186943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:46:56.044 [DEBUG] [Thread-186943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:46:56.044 [DEBUG] [Thread-186943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:46:56.044 [DEBUG] [Thread-186943] [transport.py] [_log()] Compression: none
2026-04-12T09:46:56.044 [DEBUG] [Thread-186943] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:46:56.101 [DEBUG] [Thread-186943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:46:56.102 [DEBUG] [Thread-186943] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:46:56.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:46:56.103 [DEBUG] [Thread-186943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:46:56.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:46:56.162 [DEBUG] [Thread-186943] [transport.py] [_log()] userauth is OK
2026-04-12T09:46:56.162 [DEBUG] [Thread-186943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:46:56.162 [DEBUG] [Thread-186943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:46:56.162 [DEBUG] [Thread-186943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:46:56.162 [DEBUG] [Thread-186943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:46:56.181 [INFO] [Thread-186943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:46:56.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:46:56.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:46:56.998 [DEBUG] [Thread-186943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:46:56.998 [DEBUG] [Thread-186943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:46:57.046 [DEBUG] [Thread-186943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:46:57.046 [DEBUG] [Thread-186943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:46:57.055 [DEBUG] [Thread-186943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:46:57.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:46:57.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:46:57.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:46:57.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:46:57.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:46:57.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:46:57.093 [DEBUG] [Thread-186943] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:47:04.907 [DEBUG] [Thread-186945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:47:19.961 [DEBUG] [Thread-186946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:47:26.655 [DEBUG] [Thread-186947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:47:27.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:47:27.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:47:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:47:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 47), -0.052895, 100.319, 0.0, 19.0037, 10.5329, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:47:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:47:00
2026-04-12T09:47:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:47:29.003 [DEBUG] [Thread-186948] [transport.py] [_log()] starting thread (client mode): 0xb0f41150
2026-04-12T09:47:29.003 [DEBUG] [Thread-186948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:47:29.023 [DEBUG] [Thread-186948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:47:29.023 [INFO] [Thread-186948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:47:29.026 [DEBUG] [Thread-186948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:47:29.026 [DEBUG] [Thread-186948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:47:29.026 [DEBUG] [Thread-186948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:47:29.026 [DEBUG] [Thread-186948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:47:29.026 [DEBUG] [Thread-186948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] client lang: <none>
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] server lang: <none>
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] kex follows: False
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:47:29.027 [DEBUG] [Thread-186948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:47:29.028 [DEBUG] [Thread-186948] [transport.py] [_log()] Compression: none
2026-04-12T09:47:29.028 [DEBUG] [Thread-186948] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:47:29.043 [DEBUG] [Thread-186948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:47:29.043 [DEBUG] [Thread-186948] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:47:29.044 [DEBUG] [Thread-186948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:47:29.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:47:29.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:47:29.046 [DEBUG] [Thread-186948] [transport.py] [_log()] userauth is OK
2026-04-12T09:47:29.046 [DEBUG] [Thread-186948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:47:29.046 [DEBUG] [Thread-186948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:47:29.046 [DEBUG] [Thread-186948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:47:29.046 [DEBUG] [Thread-186948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:47:29.064 [INFO] [Thread-186948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:47:29.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:47:29.653 [DEBUG] [Thread-186948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:47:29.653 [DEBUG] [Thread-186948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:47:29.653 [DEBUG] [Thread-186948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:47:29.694 [DEBUG] [Thread-186948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:47:29.694 [DEBUG] [Thread-186948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:47:29.698 [DEBUG] [Thread-186948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:47:29.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:47:29.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:47:29.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:47:29.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:47:29.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:47:29.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:47:29.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:47:29.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:47:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:47:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.324416 -999.00  +10.70  19.04     94   +9.90 1 2 1 3 1   888    0 1.14 16.84 ----- 19.9 19.0 271.3 24.2 14.4 -14.4 13.7 -16.2 12.7 -12.3 13.7 -12.2
2026-04-12T09:47:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:47:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:47:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.324416
2026-04-12T09:47:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:47:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:47:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:47:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:47:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:47:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:47:00', tmtdew=-0.052895, humidity=100.319, cloud=0.0, wind=19.0037, temperature=10.5329, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:47:09.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:47:29.724 [DEBUG] [Thread-186948] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:47:29.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:47:29.852 [DEBUG] [Thread-186951] [transport.py] [_log()] starting thread (client mode): 0xb0f8d8a0
2026-04-12T09:47:29.853 [DEBUG] [Thread-186951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:47:29.896 [DEBUG] [Thread-186951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:47:29.897 [INFO] [Thread-186951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:47:29.927 [DEBUG] [Thread-186951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] client lang: <none>
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] server lang: <none>
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] kex follows: False
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:47:29.928 [DEBUG] [Thread-186951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:47:29.929 [DEBUG] [Thread-186951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:47:29.929 [DEBUG] [Thread-186951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:47:29.929 [DEBUG] [Thread-186951] [transport.py] [_log()] Compression: none
2026-04-12T09:47:29.929 [DEBUG] [Thread-186951] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:47:29.979 [DEBUG] [Thread-186951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:47:29.980 [DEBUG] [Thread-186951] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:47:29.980 [DEBUG] [Thread-186951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:47:29.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:47:29.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:47:30.071 [DEBUG] [Thread-186951] [transport.py] [_log()] userauth is OK
2026-04-12T09:47:30.071 [DEBUG] [Thread-186951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:47:30.071 [DEBUG] [Thread-186951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:47:30.071 [DEBUG] [Thread-186951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:47:30.071 [DEBUG] [Thread-186951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:47:30.115 [INFO] [Thread-186951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:47:30.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:47:30.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:47:30.982 [DEBUG] [Thread-186951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:47:30.982 [DEBUG] [Thread-186951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:47:31.053 [DEBUG] [Thread-186951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:47:31.053 [DEBUG] [Thread-186951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:47:31.087 [DEBUG] [Thread-186951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:47:31.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:47:31.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:47:31.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:47:31.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:47:31.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:47:31.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:47:31.203 [DEBUG] [Thread-186951] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:47:35.001 [DEBUG] [Thread-186953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:47:50.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:47:50.010 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:47:50.062 [DEBUG] [Thread-186954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:48:01.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:48:01.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:48:01.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:48:02.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 47, 35), -0.11601, 100.704, 0.0, 25.758, 11.2317, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:48:02.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:47:35
2026-04-12T09:48:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:48:03.079 [DEBUG] [Thread-186955] [transport.py] [_log()] starting thread (client mode): 0xa796a710
2026-04-12T09:48:03.079 [DEBUG] [Thread-186955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:48:03.097 [DEBUG] [Thread-186955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:48:03.097 [INFO] [Thread-186955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:48:03.100 [DEBUG] [Thread-186955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] client lang: <none>
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] server lang: <none>
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] kex follows: False
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:48:03.101 [DEBUG] [Thread-186955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:48:03.102 [DEBUG] [Thread-186955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:48:03.102 [DEBUG] [Thread-186955] [transport.py] [_log()] Compression: none
2026-04-12T09:48:03.102 [DEBUG] [Thread-186955] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:48:03.118 [DEBUG] [Thread-186955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:48:03.119 [DEBUG] [Thread-186955] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:48:03.119 [DEBUG] [Thread-186955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:48:03.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:48:03.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:48:03.121 [DEBUG] [Thread-186955] [transport.py] [_log()] userauth is OK
2026-04-12T09:48:03.121 [DEBUG] [Thread-186955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:48:03.121 [DEBUG] [Thread-186955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:48:03.121 [DEBUG] [Thread-186955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:48:03.121 [DEBUG] [Thread-186955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:48:03.141 [INFO] [Thread-186955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:48:03.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:48:03.728 [DEBUG] [Thread-186955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:48:03.729 [DEBUG] [Thread-186955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:48:03.729 [DEBUG] [Thread-186955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:48:03.770 [DEBUG] [Thread-186955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:48:03.770 [DEBUG] [Thread-186955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:48:03.773 [DEBUG] [Thread-186955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:48:03.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:48:03.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:48:03.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:48:03.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:48:03.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:48:03.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:48:03.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:48:03.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:48:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:48:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.324763 -999.00  +10.60  18.53     94   +9.70 1 2 1 3 1   888    0 1.11 15.34 ----- 18.2 18.5 286.6 24.7 14.3 -18.0 13.7 -14.7 12.7 -16.6 13.5 -16.7
2026-04-12T09:48:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:48:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:48:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.324763
2026-04-12T09:48:03.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:48:03.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:48:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:48:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:48:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:48:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:47:35', tmtdew=-0.11601, humidity=100.704, cloud=0.0, wind=25.758, temperature=11.2317, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:47:39.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:48:03.798 [DEBUG] [Thread-186955] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:48:03.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:48:03.891 [DEBUG] [Thread-186958] [transport.py] [_log()] starting thread (client mode): 0xb0f57c10
2026-04-12T09:48:03.891 [DEBUG] [Thread-186958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:48:03.906 [DEBUG] [Thread-186958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:48:03.906 [INFO] [Thread-186958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] client lang: <none>
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] server lang: <none>
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] kex follows: False
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:48:03.914 [DEBUG] [Thread-186958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:48:03.915 [DEBUG] [Thread-186958] [transport.py] [_log()] Compression: none
2026-04-12T09:48:03.915 [DEBUG] [Thread-186958] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:48:03.973 [DEBUG] [Thread-186958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:48:03.973 [DEBUG] [Thread-186958] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:48:03.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:48:03.974 [DEBUG] [Thread-186958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:48:03.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:48:04.032 [DEBUG] [Thread-186958] [transport.py] [_log()] userauth is OK
2026-04-12T09:48:04.032 [DEBUG] [Thread-186958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:48:04.033 [DEBUG] [Thread-186958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:48:04.033 [DEBUG] [Thread-186958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:48:04.033 [DEBUG] [Thread-186958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:48:04.052 [INFO] [Thread-186958] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:48:04.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:48:04.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:48:04.918 [DEBUG] [Thread-186958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:48:04.918 [DEBUG] [Thread-186958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:48:04.966 [DEBUG] [Thread-186958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:48:04.966 [DEBUG] [Thread-186958] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:48:04.975 [DEBUG] [Thread-186958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:48:04.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:48:04.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:48:04.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:48:05.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:48:05.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:48:05.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:48:05.013 [DEBUG] [Thread-186958] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:48:05.101 [DEBUG] [Thread-186960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:48:20.162 [DEBUG] [Thread-186961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:48:26.699 [DEBUG] [Thread-186962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:48:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:48:35.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:48:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:48:35.199 [DEBUG] [Thread-186963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:48:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 48, 11), -0.05013, 100.302, 0.0, 22.1972, 10.15, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:48:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:48:11
2026-04-12T09:48:36.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:48:36.894 [DEBUG] [Thread-186964] [transport.py] [_log()] starting thread (client mode): 0xae51a530
2026-04-12T09:48:36.894 [DEBUG] [Thread-186964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:48:36.918 [DEBUG] [Thread-186964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:48:36.918 [INFO] [Thread-186964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] client lang: <none>
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] server lang: <none>
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] kex follows: False
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:48:36.921 [DEBUG] [Thread-186964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:48:36.922 [DEBUG] [Thread-186964] [transport.py] [_log()] Compression: none
2026-04-12T09:48:36.922 [DEBUG] [Thread-186964] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:48:36.934 [DEBUG] [Thread-186964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:48:36.934 [DEBUG] [Thread-186964] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:48:36.935 [DEBUG] [Thread-186964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:48:36.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:48:36.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:48:36.937 [DEBUG] [Thread-186964] [transport.py] [_log()] userauth is OK
2026-04-12T09:48:36.937 [DEBUG] [Thread-186964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:48:36.937 [DEBUG] [Thread-186964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:48:36.937 [DEBUG] [Thread-186964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:48:36.937 [DEBUG] [Thread-186964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:48:36.973 [INFO] [Thread-186964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:48:36.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:48:37.580 [DEBUG] [Thread-186964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:48:37.580 [DEBUG] [Thread-186964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:48:37.581 [DEBUG] [Thread-186964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:48:37.621 [DEBUG] [Thread-186964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:48:37.622 [DEBUG] [Thread-186964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:48:37.626 [DEBUG] [Thread-186964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:48:37.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:48:37.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:48:37.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:48:37.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:48:37.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:48:37.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:48:37.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:48:37.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:48:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:48:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.325111 -999.00  +10.70  17.72     94   +9.80 1 2 1 3 1   888    0 1.11 15.96 ----- 19.0 17.7 278.9 21.4 14.6 -17.4 13.8 -16.1 12.8 -15.3 13.8 -16.5
2026-04-12T09:48:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:48:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:48:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.325111
2026-04-12T09:48:37.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:48:37.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:48:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:48:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:48:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:48:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:48:11', tmtdew=-0.05013, humidity=100.302, cloud=0.0, wind=22.1972, temperature=10.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:48:09.590', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:48:37.651 [DEBUG] [Thread-186964] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:48:37.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:48:37.773 [DEBUG] [Thread-186967] [transport.py] [_log()] starting thread (client mode): 0xae5b1ae0
2026-04-12T09:48:37.774 [DEBUG] [Thread-186967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:48:37.813 [DEBUG] [Thread-186967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:48:37.813 [INFO] [Thread-186967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:48:37.847 [DEBUG] [Thread-186967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:48:37.849 [DEBUG] [Thread-186967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:48:37.849 [DEBUG] [Thread-186967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:48:37.849 [DEBUG] [Thread-186967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:37.849 [DEBUG] [Thread-186967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] client lang: <none>
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] server lang: <none>
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] kex follows: False
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] Compression: none
2026-04-12T09:48:37.850 [DEBUG] [Thread-186967] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:48:37.895 [DEBUG] [Thread-186967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:48:37.896 [DEBUG] [Thread-186967] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:48:37.896 [DEBUG] [Thread-186967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:48:37.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:48:37.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:48:37.952 [DEBUG] [Thread-186967] [transport.py] [_log()] userauth is OK
2026-04-12T09:48:37.952 [DEBUG] [Thread-186967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:48:37.953 [DEBUG] [Thread-186967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:48:37.953 [DEBUG] [Thread-186967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:48:37.953 [DEBUG] [Thread-186967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:48:37.975 [INFO] [Thread-186967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:48:37.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:48:37.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:48:38.851 [DEBUG] [Thread-186967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:48:38.851 [DEBUG] [Thread-186967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:48:38.926 [DEBUG] [Thread-186967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:48:38.927 [DEBUG] [Thread-186967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:48:38.965 [DEBUG] [Thread-186967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:48:39.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:48: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')
2026-04-12T09:48:39.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:48:39.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:48:39.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:48:39.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:48:39.112 [DEBUG] [Thread-186967] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:48:50.152 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:48:50.153 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:48:50.237 [DEBUG] [Thread-186969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:49:05.292 [DEBUG] [Thread-186970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:49:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:49:09.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:49:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:49:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 48, 47), -0.11071, 100.67, 0.0, 21.348, 11.0986, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:49:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:48:47
2026-04-12T09:49:10.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:49:11.025 [DEBUG] [Thread-186971] [transport.py] [_log()] starting thread (client mode): 0xae5b2470
2026-04-12T09:49:11.026 [DEBUG] [Thread-186971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:49:11.044 [DEBUG] [Thread-186971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:49:11.044 [INFO] [Thread-186971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:49:11.047 [DEBUG] [Thread-186971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:49:11.047 [DEBUG] [Thread-186971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] client lang: <none>
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] server lang: <none>
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] kex follows: False
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:49:11.048 [DEBUG] [Thread-186971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:49:11.049 [DEBUG] [Thread-186971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:49:11.049 [DEBUG] [Thread-186971] [transport.py] [_log()] Compression: none
2026-04-12T09:49:11.049 [DEBUG] [Thread-186971] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:49:11.058 [DEBUG] [Thread-186971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:49:11.058 [DEBUG] [Thread-186971] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:49:11.059 [DEBUG] [Thread-186971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:49:11.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:49:11.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:49:11.060 [DEBUG] [Thread-186971] [transport.py] [_log()] userauth is OK
2026-04-12T09:49:11.061 [DEBUG] [Thread-186971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:49:11.061 [DEBUG] [Thread-186971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:49:11.061 [DEBUG] [Thread-186971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:49:11.061 [DEBUG] [Thread-186971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:49:11.084 [INFO] [Thread-186971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:49:11.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:49:11.722 [DEBUG] [Thread-186971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:49:11.722 [DEBUG] [Thread-186971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:49:11.723 [DEBUG] [Thread-186971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:49:11.763 [DEBUG] [Thread-186971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:49:11.763 [DEBUG] [Thread-186971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:49:11.767 [DEBUG] [Thread-186971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:49:11.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:49:11.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:49:11.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:49:11.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:49:11.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:49:11.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:49:11.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:49:11.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:49:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:49:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.325458 -999.00  +10.60  15.33     94   +9.70 1 2 1 3 1   888    0 1.16 16.54 ----- 17.2 15.3 284.3 23.1 -999.0 -999.0 13.8 -11.7 12.6 -15.3 13.6 -15.9
2026-04-12T09:49:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:49:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:49:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.325458
2026-04-12T09:49:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:49:11.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:49:11.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:49:11.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:49:11.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:49:11.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:48:47', tmtdew=-0.11071, humidity=100.67, cloud=0.0, wind=21.348, temperature=11.0986, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:48:39.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:49:11.793 [DEBUG] [Thread-186971] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:49:11.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:49:11.908 [DEBUG] [Thread-186974] [transport.py] [_log()] starting thread (client mode): 0xa7939810
2026-04-12T09:49:11.909 [DEBUG] [Thread-186974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:49:11.941 [DEBUG] [Thread-186974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:49:11.942 [INFO] [Thread-186974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:49:11.967 [DEBUG] [Thread-186974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] client lang: <none>
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] server lang: <none>
2026-04-12T09:49:11.968 [DEBUG] [Thread-186974] [transport.py] [_log()] kex follows: False
2026-04-12T09:49:11.969 [DEBUG] [Thread-186974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:49:11.969 [DEBUG] [Thread-186974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:49:11.969 [DEBUG] [Thread-186974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:49:11.969 [DEBUG] [Thread-186974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:49:11.969 [DEBUG] [Thread-186974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:49:11.969 [DEBUG] [Thread-186974] [transport.py] [_log()] Compression: none
2026-04-12T09:49:11.969 [DEBUG] [Thread-186974] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:49:12.045 [DEBUG] [Thread-186974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:49:12.045 [DEBUG] [Thread-186974] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:49:12.046 [DEBUG] [Thread-186974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:49:12.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:49:12.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:49:12.130 [DEBUG] [Thread-186974] [transport.py] [_log()] userauth is OK
2026-04-12T09:49:12.130 [DEBUG] [Thread-186974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:49:12.130 [DEBUG] [Thread-186974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:49:12.130 [DEBUG] [Thread-186974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:49:12.131 [DEBUG] [Thread-186974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:49:12.168 [INFO] [Thread-186974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:49:12.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:49:12.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:49:13.011 [DEBUG] [Thread-186974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:49:13.011 [DEBUG] [Thread-186974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:49:13.078 [DEBUG] [Thread-186974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:49:13.078 [DEBUG] [Thread-186974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:49:13.107 [DEBUG] [Thread-186974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:49:13.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:49:13.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:49:13.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:49:13.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:49:13.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:49:13.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:49:13.220 [DEBUG] [Thread-186974] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:49:20.335 [DEBUG] [Thread-186976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:49:26.733 [DEBUG] [Thread-186977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:49:35.389 [DEBUG] [Thread-186978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:49:43.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:49:43.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:49:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:49:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 49, 22), 0.002205, 100.285, 0.0, 20.3443, 10.4989, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:49:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:49:22
2026-04-12T09:49:44.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:49:45.058 [DEBUG] [Thread-186979] [transport.py] [_log()] starting thread (client mode): 0xa7969780
2026-04-12T09:49:45.058 [DEBUG] [Thread-186979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:49:45.079 [DEBUG] [Thread-186979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:49:45.079 [INFO] [Thread-186979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:45.082 [DEBUG] [Thread-186979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:49:45.083 [DEBUG] [Thread-186979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:49:45.083 [DEBUG] [Thread-186979] [transport.py] [_log()] client lang: <none>
2026-04-12T09:49:45.083 [DEBUG] [Thread-186979] [transport.py] [_log()] server lang: <none>
2026-04-12T09:49:45.083 [DEBUG] [Thread-186979] [transport.py] [_log()] kex follows: False
2026-04-12T09:49:45.083 [DEBUG] [Thread-186979] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:49:45.083 [DEBUG] [Thread-186979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:49:45.092 [DEBUG] [Thread-186979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:49:45.092 [DEBUG] [Thread-186979] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:49:45.092 [DEBUG] [Thread-186979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:49:45.092 [DEBUG] [Thread-186979] [transport.py] [_log()] Compression: none
2026-04-12T09:49:45.092 [DEBUG] [Thread-186979] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:49:45.113 [DEBUG] [Thread-186979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:49:45.114 [DEBUG] [Thread-186979] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:49:45.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:49:45.115 [DEBUG] [Thread-186979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:49:45.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:49:45.156 [DEBUG] [Thread-186979] [transport.py] [_log()] userauth is OK
2026-04-12T09:49:45.157 [DEBUG] [Thread-186979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:49:45.157 [DEBUG] [Thread-186979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:49:45.157 [DEBUG] [Thread-186979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:49:45.157 [DEBUG] [Thread-186979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:49:45.177 [INFO] [Thread-186979] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:49:45.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:49:45.812 [DEBUG] [Thread-186979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:49:45.812 [DEBUG] [Thread-186979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:49:45.813 [DEBUG] [Thread-186979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:49:45.853 [DEBUG] [Thread-186979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:49:45.853 [DEBUG] [Thread-186979] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:49:45.857 [DEBUG] [Thread-186979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:49:45.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:49:45.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:49:45.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:49:45.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:49:45.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:49:45.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:49:45.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:49:45.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:49:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:49:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.325805 -999.00  +10.80  19.89     94   +9.90 1 2 1 3 1   888    0 1.17 17.13 ----- 17.3 19.9 268.4 24.0 14.9 -11.5 14.0 -13.2 12.9 -10.0 13.9 -10.6
2026-04-12T09:49:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:49:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:49:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.325805
2026-04-12T09:49:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:49:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:49:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:49:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:49:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:49:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:49:22', tmtdew=0.002205, humidity=100.285, cloud=0.0, wind=20.3443, temperature=10.4989, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:49:09.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:49:45.884 [DEBUG] [Thread-186979] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:49:45.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:49:45.985 [DEBUG] [Thread-186982] [transport.py] [_log()] starting thread (client mode): 0xb0f8f070
2026-04-12T09:49:45.985 [DEBUG] [Thread-186982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:49:46.008 [DEBUG] [Thread-186982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:49:46.009 [INFO] [Thread-186982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:49:46.016 [DEBUG] [Thread-186982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:49:46.017 [DEBUG] [Thread-186982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:49:46.017 [DEBUG] [Thread-186982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:49:46.017 [DEBUG] [Thread-186982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:46.017 [DEBUG] [Thread-186982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:49:46.017 [DEBUG] [Thread-186982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:46.017 [DEBUG] [Thread-186982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] client lang: <none>
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] server lang: <none>
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] kex follows: False
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] Compression: none
2026-04-12T09:49:46.018 [DEBUG] [Thread-186982] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:49:46.101 [DEBUG] [Thread-186982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:49:46.102 [DEBUG] [Thread-186982] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:49:46.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:49:46.103 [DEBUG] [Thread-186982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:49:46.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:49:46.162 [DEBUG] [Thread-186982] [transport.py] [_log()] userauth is OK
2026-04-12T09:49:46.163 [DEBUG] [Thread-186982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:49:46.163 [DEBUG] [Thread-186982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:49:46.163 [DEBUG] [Thread-186982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:49:46.163 [DEBUG] [Thread-186982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:49:46.190 [INFO] [Thread-186982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:49:46.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:49:46.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:49:47.027 [DEBUG] [Thread-186982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:49:47.027 [DEBUG] [Thread-186982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:49:47.099 [DEBUG] [Thread-186982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:49:47.100 [DEBUG] [Thread-186982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:49:47.133 [DEBUG] [Thread-186982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:49:47.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:49:47.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:49:47.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:49:47.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:49:47.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:49:47.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:49:47.272 [DEBUG] [Thread-186982] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:49:50.294 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:49:50.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:49:50.426 [DEBUG] [Thread-186984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:05.481 [DEBUG] [Thread-186985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:17.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:50:17.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:50:17.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:50:18.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 49, 58), -0.055225, 100.334, 0.0, 22.9734, 10.4323, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:50:18.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:49:58
2026-04-12T09:50:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:50:19.070 [DEBUG] [Thread-186986] [transport.py] [_log()] starting thread (client mode): 0xa793a2c0
2026-04-12T09:50:19.070 [DEBUG] [Thread-186986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:50:19.090 [DEBUG] [Thread-186986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:50:19.090 [INFO] [Thread-186986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:50:19.093 [DEBUG] [Thread-186986] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:50:19.093 [DEBUG] [Thread-186986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] client lang: <none>
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] server lang: <none>
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] kex follows: False
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] Compression: none
2026-04-12T09:50:19.094 [DEBUG] [Thread-186986] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:50:19.110 [DEBUG] [Thread-186986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:50:19.111 [DEBUG] [Thread-186986] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:50:19.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:50:19.112 [DEBUG] [Thread-186986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:50:19.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:50:19.152 [DEBUG] [Thread-186986] [transport.py] [_log()] userauth is OK
2026-04-12T09:50:19.152 [DEBUG] [Thread-186986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:50:19.153 [DEBUG] [Thread-186986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:50:19.153 [DEBUG] [Thread-186986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:50:19.153 [DEBUG] [Thread-186986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:50:19.184 [INFO] [Thread-186986] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:50:19.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:50:20.520 [DEBUG] [Thread-186988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:26.780 [DEBUG] [Thread-186989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:28.103 [DEBUG] [Thread-186986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:50:28.103 [DEBUG] [Thread-186986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:50:28.103 [DEBUG] [Thread-186986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:50:28.144 [DEBUG] [Thread-186986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:50:28.144 [DEBUG] [Thread-186986] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:50:28.146 [DEBUG] [Thread-186986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:50:28.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:50:28.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:50:28.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:50:28.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:50:28.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:50:28.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:50:28.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:50:28.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:50:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:50:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.325805 -999.00  +10.80  19.89     94   +9.90 1 2 1 3 1   888    0 1.17 17.13 ----- 17.3 19.9 268.4 24.0 14.9 -11.5 14.0 -13.2 12.9 -10.0 13.9 -10.6
2026-04-12T09:50:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:50:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:50:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.325805
2026-04-12T09:50:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:50:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:50:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:50:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:50:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:50:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:49:58', tmtdew=-0.055225, humidity=100.334, cloud=0.0, wind=22.9734, temperature=10.4323, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:49:09.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:50:28.293 [DEBUG] [Thread-186986] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:50:28.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:50:28.415 [DEBUG] [Thread-186991] [transport.py] [_log()] starting thread (client mode): 0xa793bf70
2026-04-12T09:50:28.416 [DEBUG] [Thread-186991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:50:28.456 [DEBUG] [Thread-186991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:50:28.456 [INFO] [Thread-186991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:50:28.492 [DEBUG] [Thread-186991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:50:28.492 [DEBUG] [Thread-186991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] client lang: <none>
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] server lang: <none>
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] kex follows: False
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:50:28.493 [DEBUG] [Thread-186991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:50:28.494 [DEBUG] [Thread-186991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:50:28.494 [DEBUG] [Thread-186991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:50:28.494 [DEBUG] [Thread-186991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:50:28.494 [DEBUG] [Thread-186991] [transport.py] [_log()] Compression: none
2026-04-12T09:50:28.494 [DEBUG] [Thread-186991] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:50:28.576 [DEBUG] [Thread-186991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:50:28.577 [DEBUG] [Thread-186991] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:50:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:50:28.578 [DEBUG] [Thread-186991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:50:28.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:50:28.688 [DEBUG] [Thread-186991] [transport.py] [_log()] userauth is OK
2026-04-12T09:50:28.688 [DEBUG] [Thread-186991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:50:28.688 [DEBUG] [Thread-186991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:50:28.688 [DEBUG] [Thread-186991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:50:28.688 [DEBUG] [Thread-186991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:50:28.716 [INFO] [Thread-186991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:50:28.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:50:28.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:50:29.549 [DEBUG] [Thread-186991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:50:29.549 [DEBUG] [Thread-186991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:50:29.601 [DEBUG] [Thread-186991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:50:29.601 [DEBUG] [Thread-186991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:50:29.612 [DEBUG] [Thread-186991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:50:29.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:50:29.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:50:29.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:50:29.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:50:29.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:50:29.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:50:29.656 [DEBUG] [Thread-186991] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:50:35.556 [DEBUG] [Thread-186993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:50.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:50.438 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:50.610 [DEBUG] [Thread-186994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:50:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:50:59.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:50:59.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:51:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 50, 33), -0.10545, 100.635, 0.0, 23.7823, 11.0645, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:51:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:50:33
2026-04-12T09:51:01.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:51:01.495 [DEBUG] [Thread-186995] [transport.py] [_log()] starting thread (client mode): 0xa7938790
2026-04-12T09:51:01.495 [DEBUG] [Thread-186995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:51:01.515 [DEBUG] [Thread-186995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:51:01.515 [INFO] [Thread-186995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:51:01.518 [DEBUG] [Thread-186995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] client lang: <none>
2026-04-12T09:51:01.519 [DEBUG] [Thread-186995] [transport.py] [_log()] server lang: <none>
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] kex follows: False
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] Compression: none
2026-04-12T09:51:01.520 [DEBUG] [Thread-186995] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:51:01.540 [DEBUG] [Thread-186995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:51:01.540 [DEBUG] [Thread-186995] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:51:01.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:51:01.542 [DEBUG] [Thread-186995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:51:01.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:51:01.544 [DEBUG] [Thread-186995] [transport.py] [_log()] userauth is OK
2026-04-12T09:51:01.544 [DEBUG] [Thread-186995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:51:01.544 [DEBUG] [Thread-186995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:51:01.544 [DEBUG] [Thread-186995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:51:01.544 [DEBUG] [Thread-186995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:51:01.567 [INFO] [Thread-186995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:51:01.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:51:02.311 [DEBUG] [Thread-186995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:51:02.312 [DEBUG] [Thread-186995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:51:02.312 [DEBUG] [Thread-186995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:51:02.353 [DEBUG] [Thread-186995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:51:02.353 [DEBUG] [Thread-186995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:51:02.356 [DEBUG] [Thread-186995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:51:02.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:51:02.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:51:02.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:51:02.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:51:02.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:51:02.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:51:02.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:51:02.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:51:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:51:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.326847 -999.00  +10.60  22.60     94   +9.70 1 2 1 3 1   888    0 1.26 19.08 ----- 19.9 22.6 275.2 24.9 14.4 -19.7 13.7 -18.4 12.5 -17.6 13.5 -16.8
2026-04-12T09:51:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:51:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:51:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.326847
2026-04-12T09:51:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:51:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:51:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:51:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:51:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:51:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:50:33', tmtdew=-0.10545, humidity=100.635, cloud=0.0, wind=23.7823, temperature=11.0645, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:50:39.581', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:51:02.381 [DEBUG] [Thread-186995] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:51:02.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:51:02.500 [DEBUG] [Thread-186998] [transport.py] [_log()] starting thread (client mode): 0xa7968c70
2026-04-12T09:51:02.501 [DEBUG] [Thread-186998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:51:02.527 [DEBUG] [Thread-186998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:51:02.528 [INFO] [Thread-186998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] client lang: <none>
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] server lang: <none>
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] kex follows: False
2026-04-12T09:51:02.547 [DEBUG] [Thread-186998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:51:02.548 [DEBUG] [Thread-186998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:51:02.548 [DEBUG] [Thread-186998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:51:02.548 [DEBUG] [Thread-186998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:51:02.548 [DEBUG] [Thread-186998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:51:02.548 [DEBUG] [Thread-186998] [transport.py] [_log()] Compression: none
2026-04-12T09:51:02.548 [DEBUG] [Thread-186998] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:51:02.622 [DEBUG] [Thread-186998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:51:02.623 [DEBUG] [Thread-186998] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:51:02.623 [DEBUG] [Thread-186998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:51:02.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:51:02.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:51:02.705 [DEBUG] [Thread-186998] [transport.py] [_log()] userauth is OK
2026-04-12T09:51:02.705 [DEBUG] [Thread-186998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:51:02.706 [DEBUG] [Thread-186998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:51:02.706 [DEBUG] [Thread-186998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:51:02.706 [DEBUG] [Thread-186998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:51:02.750 [INFO] [Thread-186998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:51:02.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:51:02.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:51:03.581 [DEBUG] [Thread-186998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:51:03.582 [DEBUG] [Thread-186998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:51:03.630 [DEBUG] [Thread-186998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:51:03.630 [DEBUG] [Thread-186998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:51:03.643 [DEBUG] [Thread-186998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:51:03.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:51:03.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:51:03.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:51:03.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:51:03.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:51:03.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:51:03.680 [DEBUG] [Thread-186998] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:51:05.646 [DEBUG] [Thread-187000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:51:20.691 [DEBUG] [Thread-187001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:51:26.814 [DEBUG] [Thread-187002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:51:33.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:51:33.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:51:33.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:51:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 51, 8), -0.00251, 100.318, 0.0, 21.5093, 10.2161, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:51:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:51:08
2026-04-12T09:51:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:51:35.488 [DEBUG] [Thread-187003] [transport.py] [_log()] starting thread (client mode): 0xa793bd00
2026-04-12T09:51:35.488 [DEBUG] [Thread-187003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:51:35.503 [DEBUG] [Thread-187003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:51:35.503 [INFO] [Thread-187003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:51:35.506 [DEBUG] [Thread-187003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:51:35.506 [DEBUG] [Thread-187003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:51:35.506 [DEBUG] [Thread-187003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:51:35.506 [DEBUG] [Thread-187003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:35.506 [DEBUG] [Thread-187003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:35.506 [DEBUG] [Thread-187003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:35.506 [DEBUG] [Thread-187003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] client lang: <none>
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] server lang: <none>
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] kex follows: False
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] Compression: none
2026-04-12T09:51:35.507 [DEBUG] [Thread-187003] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:51:35.524 [DEBUG] [Thread-187003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:51:35.525 [DEBUG] [Thread-187003] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:51:35.525 [DEBUG] [Thread-187003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:51:35.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:51:35.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:51:35.527 [DEBUG] [Thread-187003] [transport.py] [_log()] userauth is OK
2026-04-12T09:51:35.527 [DEBUG] [Thread-187003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:51:35.528 [DEBUG] [Thread-187003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:51:35.528 [DEBUG] [Thread-187003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:51:35.528 [DEBUG] [Thread-187003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:51:35.546 [INFO] [Thread-187003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:51:35.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:51:35.725 [DEBUG] [Thread-187005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:51:36.154 [DEBUG] [Thread-187003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:51:36.154 [DEBUG] [Thread-187003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:51:36.154 [DEBUG] [Thread-187003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:51:36.195 [DEBUG] [Thread-187003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:51:36.195 [DEBUG] [Thread-187003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:51:36.198 [DEBUG] [Thread-187003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:51:36.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:51:36.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:51:36.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:51:36.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:51:36.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:51:36.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:51:36.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:51:36.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:51:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:51:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.327194 -999.00  +10.60  19.80     93   +9.70 1 2 1 3 1   888    0 1.22 18.16 ----- 19.6 19.8 276.8 23.9 14.5 -18.6 13.8 -14.5 12.5 -16.0 13.5 -16.9
2026-04-12T09:51:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:51:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:51:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.327194
2026-04-12T09:51:36.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:51:36.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:51:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:51:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:51:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:51:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:51:08', tmtdew=-0.00251, humidity=100.318, cloud=0.0, wind=21.5093, temperature=10.2161, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:51:09.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:51:36.224 [DEBUG] [Thread-187003] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:51:36.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:51:36.342 [DEBUG] [Thread-187007] [transport.py] [_log()] starting thread (client mode): 0xa793a980
2026-04-12T09:51:36.343 [DEBUG] [Thread-187007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:51:36.381 [DEBUG] [Thread-187007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:51:36.382 [INFO] [Thread-187007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:51:36.412 [DEBUG] [Thread-187007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] client lang: <none>
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] server lang: <none>
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] kex follows: False
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:51:36.413 [DEBUG] [Thread-187007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:51:36.414 [DEBUG] [Thread-187007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:51:36.414 [DEBUG] [Thread-187007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:51:36.414 [DEBUG] [Thread-187007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:51:36.414 [DEBUG] [Thread-187007] [transport.py] [_log()] Compression: none
2026-04-12T09:51:36.414 [DEBUG] [Thread-187007] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:51:36.473 [DEBUG] [Thread-187007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:51:36.473 [DEBUG] [Thread-187007] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:51:36.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:51:36.474 [DEBUG] [Thread-187007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:51:36.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:51:36.579 [DEBUG] [Thread-187007] [transport.py] [_log()] userauth is OK
2026-04-12T09:51:36.579 [DEBUG] [Thread-187007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:51:36.580 [DEBUG] [Thread-187007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:51:36.580 [DEBUG] [Thread-187007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:51:36.580 [DEBUG] [Thread-187007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:51:36.635 [INFO] [Thread-187007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:51:36.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:51:36.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:51:37.481 [DEBUG] [Thread-187007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:51:37.481 [DEBUG] [Thread-187007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:51:37.537 [DEBUG] [Thread-187007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:51:37.537 [DEBUG] [Thread-187007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:51:37.547 [DEBUG] [Thread-187007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:51:37.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:51:37.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:51:37.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:51:37.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:51:37.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:51:37.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:51:37.657 [DEBUG] [Thread-187007] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:51:50.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:51:50.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:51:50.762 [DEBUG] [Thread-187009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:52:05.818 [DEBUG] [Thread-187010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:52:07.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:52:07.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:52:07.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:52:08.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 51, 44), -0.11511, 100.701, 0.0, 20.5013, 10.9317, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:52:08.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:51:44
2026-04-12T09:52:09.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:52:09.455 [DEBUG] [Thread-187011] [transport.py] [_log()] starting thread (client mode): 0xa793a2f0
2026-04-12T09:52:09.455 [DEBUG] [Thread-187011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:52:09.474 [DEBUG] [Thread-187011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:52:09.474 [INFO] [Thread-187011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] client lang: <none>
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] server lang: <none>
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] kex follows: False
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] Compression: none
2026-04-12T09:52:09.476 [DEBUG] [Thread-187011] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:52:09.486 [DEBUG] [Thread-187011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:52:09.486 [DEBUG] [Thread-187011] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:52:09.487 [DEBUG] [Thread-187011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:52:09.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:52:09.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:52:09.489 [DEBUG] [Thread-187011] [transport.py] [_log()] userauth is OK
2026-04-12T09:52:09.489 [DEBUG] [Thread-187011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:52:09.489 [DEBUG] [Thread-187011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:52:09.489 [DEBUG] [Thread-187011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:52:09.489 [DEBUG] [Thread-187011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:52:09.506 [INFO] [Thread-187011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:52:09.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:52:10.067 [DEBUG] [Thread-187011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:52:10.067 [DEBUG] [Thread-187011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:52:10.067 [DEBUG] [Thread-187011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:52:10.108 [DEBUG] [Thread-187011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:52:10.108 [DEBUG] [Thread-187011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:52:10.111 [DEBUG] [Thread-187011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:52:10.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:52:10.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:52:10.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:52:10.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:52:10.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:52:10.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:52:10.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:52:10.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:52:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:52:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.327541 -999.00  +10.70  19.06     94   +9.80 1 2 1 3 1   888    0 1.25 18.54 ----- 16.9 19.1 290.6 24.6 14.8 -15.6 13.9 -15.9 12.7 -13.0 13.8 -13.6
2026-04-12T09:52:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:52:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:52:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.327541
2026-04-12T09:52:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:52:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:52:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:52:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:52:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:52:10.134 [DEBUG] [Thread-187011] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:52:10.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:51:44', tmtdew=-0.11511, humidity=100.701, cloud=0.0, wind=20.5013, temperature=10.9317, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:51:39.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:52:10.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:52:10.227 [DEBUG] [Thread-187014] [transport.py] [_log()] starting thread (client mode): 0xae5180d0
2026-04-12T09:52:10.227 [DEBUG] [Thread-187014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:52:10.242 [DEBUG] [Thread-187014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:52:10.242 [INFO] [Thread-187014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] client lang: <none>
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] server lang: <none>
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] kex follows: False
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:52:10.250 [DEBUG] [Thread-187014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:52:10.251 [DEBUG] [Thread-187014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:52:10.251 [DEBUG] [Thread-187014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:52:10.251 [DEBUG] [Thread-187014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:52:10.251 [DEBUG] [Thread-187014] [transport.py] [_log()] Compression: none
2026-04-12T09:52:10.251 [DEBUG] [Thread-187014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:52:10.310 [DEBUG] [Thread-187014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:52:10.310 [DEBUG] [Thread-187014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:52:10.311 [DEBUG] [Thread-187014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:52:10.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:52:10.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:52:10.376 [DEBUG] [Thread-187014] [transport.py] [_log()] userauth is OK
2026-04-12T09:52:10.376 [DEBUG] [Thread-187014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:52:10.377 [DEBUG] [Thread-187014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:52:10.377 [DEBUG] [Thread-187014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:52:10.377 [DEBUG] [Thread-187014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:52:10.397 [INFO] [Thread-187014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:52:10.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:52:10.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:52:11.226 [DEBUG] [Thread-187014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:52:11.227 [DEBUG] [Thread-187014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:52:11.275 [DEBUG] [Thread-187014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:52:11.275 [DEBUG] [Thread-187014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:52:11.283 [DEBUG] [Thread-187014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:52:11.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:52:11.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:52: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') -> 00000000
2026-04-12T09:52:11.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:52:11.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:52:11.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:52:11.318 [DEBUG] [Thread-187014] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:52:20.855 [DEBUG] [Thread-187016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:52:26.859 [DEBUG] [Thread-187017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:52:35.910 [DEBUG] [Thread-187018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:52:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:52:41.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:52:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:52:42.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 52, 19), 0.002425, 100.284, 0.0, 21.9679, 10.3827, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:52:42.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:52:19
2026-04-12T09:52:43.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:52:43.288 [DEBUG] [Thread-187019] [transport.py] [_log()] starting thread (client mode): 0xa793b6a0
2026-04-12T09:52:43.288 [DEBUG] [Thread-187019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:52:43.304 [DEBUG] [Thread-187019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:52:43.304 [INFO] [Thread-187019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:52:43.306 [DEBUG] [Thread-187019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] client lang: <none>
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] server lang: <none>
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] kex follows: False
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] Compression: none
2026-04-12T09:52:43.307 [DEBUG] [Thread-187019] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:52:43.315 [DEBUG] [Thread-187019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:52:43.315 [DEBUG] [Thread-187019] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:52:43.315 [DEBUG] [Thread-187019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:52:43.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:52:43.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:52:43.317 [DEBUG] [Thread-187019] [transport.py] [_log()] userauth is OK
2026-04-12T09:52:43.317 [DEBUG] [Thread-187019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:52:43.317 [DEBUG] [Thread-187019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:52:43.317 [DEBUG] [Thread-187019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:52:43.317 [DEBUG] [Thread-187019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:52:43.334 [INFO] [Thread-187019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:52:43.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:52:43.892 [DEBUG] [Thread-187019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:52:43.893 [DEBUG] [Thread-187019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:52:43.893 [DEBUG] [Thread-187019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:52:43.933 [DEBUG] [Thread-187019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:52:43.933 [DEBUG] [Thread-187019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:52:43.936 [DEBUG] [Thread-187019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:52:43.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:52:43.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:52:43.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:52:43.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:52:43.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:52:43.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:52:43.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:52:43.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:52:43.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:52:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.327889 -999.00  +10.90  21.36     94  +10.00 1 2 1 3 1   888    0 1.29 19.36 ----- 15.5 21.4 276.2 25.1 14.9 -16.6 14.1 -14.5 12.8 -14.0 13.8 -14.6
2026-04-12T09:52:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:52:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:52:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.327889
2026-04-12T09:52:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:52:43.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:52:43.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:52:43.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:52:43.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:52:43.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:52:19', tmtdew=0.002425, humidity=100.284, cloud=0.0, wind=21.9679, temperature=10.3827, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:52:09.610', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:52:43.960 [DEBUG] [Thread-187019] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:52:44.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:52:44.056 [DEBUG] [Thread-187022] [transport.py] [_log()] starting thread (client mode): 0xa793af80
2026-04-12T09:52:44.056 [DEBUG] [Thread-187022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:52:44.071 [DEBUG] [Thread-187022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:52:44.071 [INFO] [Thread-187022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:52:44.081 [DEBUG] [Thread-187022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:52:44.081 [DEBUG] [Thread-187022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:52:44.081 [DEBUG] [Thread-187022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] client lang: <none>
2026-04-12T09:52:44.082 [DEBUG] [Thread-187022] [transport.py] [_log()] server lang: <none>
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] kex follows: False
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] Compression: none
2026-04-12T09:52:44.083 [DEBUG] [Thread-187022] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:52:44.138 [DEBUG] [Thread-187022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:52:44.139 [DEBUG] [Thread-187022] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:52:44.139 [DEBUG] [Thread-187022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:52:44.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:52:44.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:52:44.198 [DEBUG] [Thread-187022] [transport.py] [_log()] userauth is OK
2026-04-12T09:52:44.198 [DEBUG] [Thread-187022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:52:44.198 [DEBUG] [Thread-187022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:52:44.198 [DEBUG] [Thread-187022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:52:44.198 [DEBUG] [Thread-187022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:52:44.222 [INFO] [Thread-187022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:52:44.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:52:44.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:52:45.075 [DEBUG] [Thread-187022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:52:45.075 [DEBUG] [Thread-187022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:52:45.123 [DEBUG] [Thread-187022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:52:45.123 [DEBUG] [Thread-187022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:52:45.132 [DEBUG] [Thread-187022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:52:45.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:52:45.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:52:45.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:52:45.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:52:45.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:52:45.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:52:45.170 [DEBUG] [Thread-187022] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:52:50.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:52:50.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:52:50.944 [DEBUG] [Thread-187024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:05.987 [DEBUG] [Thread-187025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:15.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:53:15.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:53:15.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:53:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 52, 54), -0.11514, 100.7, 0.0, 24.0998, 11.0306, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:53:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:52:54
2026-04-12T09:53:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:53:17.011 [DEBUG] [Thread-187026] [transport.py] [_log()] starting thread (client mode): 0xb0fb57e0
2026-04-12T09:53:17.011 [DEBUG] [Thread-187026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:53:17.031 [DEBUG] [Thread-187026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:53:17.031 [INFO] [Thread-187026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:53:17.033 [DEBUG] [Thread-187026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:53:17.033 [DEBUG] [Thread-187026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:53:17.033 [DEBUG] [Thread-187026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:53:17.033 [DEBUG] [Thread-187026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:17.033 [DEBUG] [Thread-187026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] client lang: <none>
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] server lang: <none>
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] kex follows: False
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] Compression: none
2026-04-12T09:53:17.034 [DEBUG] [Thread-187026] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:53:17.047 [DEBUG] [Thread-187026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:53:17.047 [DEBUG] [Thread-187026] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:53:17.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:53:17.048 [DEBUG] [Thread-187026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:53:17.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:53:17.050 [DEBUG] [Thread-187026] [transport.py] [_log()] userauth is OK
2026-04-12T09:53:17.050 [DEBUG] [Thread-187026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:53:17.050 [DEBUG] [Thread-187026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:53:17.050 [DEBUG] [Thread-187026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:53:17.050 [DEBUG] [Thread-187026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:53:17.073 [INFO] [Thread-187026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:53:17.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:53:17.726 [DEBUG] [Thread-187026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:53:17.726 [DEBUG] [Thread-187026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:53:17.726 [DEBUG] [Thread-187026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:53:17.769 [DEBUG] [Thread-187026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:53:17.769 [DEBUG] [Thread-187026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:53:17.772 [DEBUG] [Thread-187026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:53:17.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:53:17.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:53:17.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:53:17.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:53:17.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:53:17.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:53:17.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:53:17.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:53:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:53:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.328583 -999.00  +11.00  22.54     94  +10.10 1 2 1 3 1   888    0 1.33 20.52 ----- 22.8 22.5 285.6 27.1 14.9 -18.2 14.0 -17.9 12.9 -15.1 13.9 -15.6
2026-04-12T09:53:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:53:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:53:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.328583
2026-04-12T09:53:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:53:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:53:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:53:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:53:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:53:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:52:54', tmtdew=-0.11514, humidity=100.7, cloud=0.0, wind=24.0998, temperature=11.0306, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:53:09.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:53:17.790 [DEBUG] [Thread-187026] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:53:17.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:53:17.904 [DEBUG] [Thread-187029] [transport.py] [_log()] starting thread (client mode): 0xa796b3d0
2026-04-12T09:53:17.904 [DEBUG] [Thread-187029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:53:17.937 [DEBUG] [Thread-187029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:53:17.937 [INFO] [Thread-187029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:53:17.961 [DEBUG] [Thread-187029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] client lang: <none>
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] server lang: <none>
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] kex follows: False
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:53:17.962 [DEBUG] [Thread-187029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:53:17.963 [DEBUG] [Thread-187029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:53:17.963 [DEBUG] [Thread-187029] [transport.py] [_log()] Compression: none
2026-04-12T09:53:17.963 [DEBUG] [Thread-187029] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:53:18.046 [DEBUG] [Thread-187029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:53:18.046 [DEBUG] [Thread-187029] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:53:18.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:53:18.047 [DEBUG] [Thread-187029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:53:18.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:53:18.143 [DEBUG] [Thread-187029] [transport.py] [_log()] userauth is OK
2026-04-12T09:53:18.143 [DEBUG] [Thread-187029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:53:18.143 [DEBUG] [Thread-187029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:53:18.143 [DEBUG] [Thread-187029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:53:18.143 [DEBUG] [Thread-187029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:53:18.186 [INFO] [Thread-187029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:53:18.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:53:18.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:53:19.040 [DEBUG] [Thread-187029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:53:19.041 [DEBUG] [Thread-187029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:53:19.109 [DEBUG] [Thread-187029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:53:19.109 [DEBUG] [Thread-187029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:53:19.138 [DEBUG] [Thread-187029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:53:19.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:53:19.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:53:19.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
2026-04-12T09:53:19.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:53:19.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:53:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:53:19.255 [DEBUG] [Thread-187029] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:53:21.023 [DEBUG] [Thread-187031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:26.891 [DEBUG] [Thread-187032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:36.073 [DEBUG] [Thread-187033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:53:49.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:53:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:53:50.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 53, 30), -0.057455, 100.35, 0.0, 22.32, 10.5819, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:53:50.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:53:30
2026-04-12T09:53:50.874 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:50.875 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:53:51.073 [DEBUG] [Thread-187034] [transport.py] [_log()] starting thread (client mode): 0xa7968c70
2026-04-12T09:53:51.073 [DEBUG] [Thread-187034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:53:51.096 [DEBUG] [Thread-187034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:53:51.096 [INFO] [Thread-187034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:53:51.100 [DEBUG] [Thread-187034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:53:51.100 [DEBUG] [Thread-187034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:53:51.100 [DEBUG] [Thread-187034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] client lang: <none>
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] server lang: <none>
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] kex follows: False
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:53:51.101 [DEBUG] [Thread-187034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:53:51.102 [DEBUG] [Thread-187034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:53:51.102 [DEBUG] [Thread-187034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:53:51.102 [DEBUG] [Thread-187034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:53:51.102 [DEBUG] [Thread-187034] [transport.py] [_log()] Compression: none
2026-04-12T09:53:51.102 [DEBUG] [Thread-187034] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:53:51.113 [DEBUG] [Thread-187036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:53:51.116 [DEBUG] [Thread-187034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:53:51.117 [DEBUG] [Thread-187034] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:53:51.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:53:51.118 [DEBUG] [Thread-187034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:53:51.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:53:51.121 [DEBUG] [Thread-187034] [transport.py] [_log()] userauth is OK
2026-04-12T09:53:51.121 [DEBUG] [Thread-187034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:53:51.121 [DEBUG] [Thread-187034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:53:51.121 [DEBUG] [Thread-187034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:53:51.121 [DEBUG] [Thread-187034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:53:51.150 [INFO] [Thread-187034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:53:51.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:53:51.796 [DEBUG] [Thread-187034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:53:51.796 [DEBUG] [Thread-187034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:53:51.796 [DEBUG] [Thread-187034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:53:51.837 [DEBUG] [Thread-187034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:53:51.837 [DEBUG] [Thread-187034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:53:51.841 [DEBUG] [Thread-187034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:53:51.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:53:51.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:53:51.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:53:51.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:53:51.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:53:51.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:53:51.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:53:51.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:53:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:53:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.328930 -999.00  +10.90  17.14     93   +9.90 1 2 1 3 1   888    0 1.34 20.85 ----- 22.1 17.1 283.4 24.4 14.7 -19.3 13.9 -14.3 12.8 -15.2 13.8 -16.9
2026-04-12T09:53:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:53:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:53:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.328930
2026-04-12T09:53:51.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:53:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:53:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:53:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:53:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:53:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:53:30', tmtdew=-0.057455, humidity=100.35, cloud=0.0, wind=22.32, temperature=10.5819, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:53:39.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:53:51.868 [DEBUG] [Thread-187034] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:53:51.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:53:51.975 [DEBUG] [Thread-187038] [transport.py] [_log()] starting thread (client mode): 0xb0f8d570
2026-04-12T09:53:51.976 [DEBUG] [Thread-187038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:53:52.002 [DEBUG] [Thread-187038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:53:52.002 [INFO] [Thread-187038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:53:52.022 [DEBUG] [Thread-187038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] client lang: <none>
2026-04-12T09:53:52.023 [DEBUG] [Thread-187038] [transport.py] [_log()] server lang: <none>
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] kex follows: False
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] Compression: none
2026-04-12T09:53:52.024 [DEBUG] [Thread-187038] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:53:52.092 [DEBUG] [Thread-187038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:53:52.092 [DEBUG] [Thread-187038] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:53:52.092 [DEBUG] [Thread-187038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:53:52.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:53:52.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:53:52.173 [DEBUG] [Thread-187038] [transport.py] [_log()] userauth is OK
2026-04-12T09:53:52.174 [DEBUG] [Thread-187038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:53:52.174 [DEBUG] [Thread-187038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:53:52.174 [DEBUG] [Thread-187038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:53:52.174 [DEBUG] [Thread-187038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:53:52.206 [INFO] [Thread-187038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:53:52.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:53:52.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:53:53.026 [DEBUG] [Thread-187038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:53:53.032 [DEBUG] [Thread-187038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:53:53.085 [DEBUG] [Thread-187038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:53:53.085 [DEBUG] [Thread-187038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:53:53.108 [DEBUG] [Thread-187038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:53:53.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:53:53.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:53:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:53:53.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:53:53.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:53:53.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:53:53.197 [DEBUG] [Thread-187038] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:54:06.153 [DEBUG] [Thread-187040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:54:21.206 [DEBUG] [Thread-187041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:54:23.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:54:23.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:54:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:54:24.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 54, 5), -0.05503, 100.333, 0.0, 21.8261, 10.615, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:54:24.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:54:05
2026-04-12T09:54:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:54:25.008 [DEBUG] [Thread-187042] [transport.py] [_log()] starting thread (client mode): 0xa796a200
2026-04-12T09:54:25.008 [DEBUG] [Thread-187042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:54:25.028 [DEBUG] [Thread-187042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:54:25.029 [INFO] [Thread-187042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] client lang: <none>
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] server lang: <none>
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] kex follows: False
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] Compression: none
2026-04-12T09:54:25.032 [DEBUG] [Thread-187042] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:54:25.055 [DEBUG] [Thread-187042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:54:25.055 [DEBUG] [Thread-187042] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:54:25.056 [DEBUG] [Thread-187042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:54:25.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:54:25.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:54:25.058 [DEBUG] [Thread-187042] [transport.py] [_log()] userauth is OK
2026-04-12T09:54:25.058 [DEBUG] [Thread-187042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:54:25.058 [DEBUG] [Thread-187042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:54:25.059 [DEBUG] [Thread-187042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:54:25.059 [DEBUG] [Thread-187042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:54:25.094 [INFO] [Thread-187042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:54:25.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:54:25.724 [DEBUG] [Thread-187042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:54:25.724 [DEBUG] [Thread-187042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:54:25.725 [DEBUG] [Thread-187042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:54:25.766 [DEBUG] [Thread-187042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:54:25.766 [DEBUG] [Thread-187042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:54:25.770 [DEBUG] [Thread-187042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:54:25.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:54:25.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:54:25.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:54:25.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:54:25.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:54:25.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:54:25.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:54:25.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:54:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:54:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.329277 -999.00  +10.90  20.16     93   +9.90 1 2 1 3 1   888    0 1.38 21.19 ----- 21.7 20.2 283.8 26.6 14.6 -14.6 13.8 -10.4 12.7 -10.4 13.8 -12.3
2026-04-12T09:54:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:54:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:54:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.329277
2026-04-12T09:54:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:54:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:54:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:54:25.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:54:25.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:54:25.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:54:05', tmtdew=-0.05503, humidity=100.333, cloud=0.0, wind=21.8261, temperature=10.615, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:54:09.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:54:25.798 [DEBUG] [Thread-187042] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:54:25.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:54:25.887 [DEBUG] [Thread-187045] [transport.py] [_log()] starting thread (client mode): 0xae51b010
2026-04-12T09:54:25.887 [DEBUG] [Thread-187045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:54:25.902 [DEBUG] [Thread-187045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:54:25.902 [INFO] [Thread-187045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] client lang: <none>
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] server lang: <none>
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] kex follows: False
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:54:25.910 [DEBUG] [Thread-187045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:54:25.911 [DEBUG] [Thread-187045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:54:25.911 [DEBUG] [Thread-187045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:54:25.911 [DEBUG] [Thread-187045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:54:25.911 [DEBUG] [Thread-187045] [transport.py] [_log()] Compression: none
2026-04-12T09:54:25.911 [DEBUG] [Thread-187045] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:54:25.967 [DEBUG] [Thread-187045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:54:25.968 [DEBUG] [Thread-187045] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:54:25.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:54:25.969 [DEBUG] [Thread-187045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:54:25.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:54:26.024 [DEBUG] [Thread-187045] [transport.py] [_log()] userauth is OK
2026-04-12T09:54:26.024 [DEBUG] [Thread-187045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:54:26.024 [DEBUG] [Thread-187045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:54:26.024 [DEBUG] [Thread-187045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:54:26.024 [DEBUG] [Thread-187045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:54:26.043 [INFO] [Thread-187045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:54:26.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:54:26.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:54:26.879 [DEBUG] [Thread-187045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:54:26.879 [DEBUG] [Thread-187045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:54:26.926 [DEBUG] [Thread-187045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:54:26.927 [DEBUG] [Thread-187045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:54:26.935 [DEBUG] [Thread-187045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:54:26.937 [DEBUG] [Thread-187047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:54:26.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:54: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')
2026-04-12T09:54:26.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:54:26.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:54:26.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:54:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:54:26.968 [DEBUG] [Thread-187045] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:54:36.243 [DEBUG] [Thread-187048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:54:51.017 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:54:51.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:54:51.302 [DEBUG] [Thread-187049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:54:56.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:54:56.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:54: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
2026-04-12T09:54:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 54, 41), -0.1152, 100.7, 0.0, 22.5122, 11.1296, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:54:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:54:41
2026-04-12T09:54:58.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:54:58.859 [DEBUG] [Thread-187050] [transport.py] [_log()] starting thread (client mode): 0xb0f54130
2026-04-12T09:54:58.860 [DEBUG] [Thread-187050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:54:58.879 [DEBUG] [Thread-187050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:54:58.879 [INFO] [Thread-187050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] client lang: <none>
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] server lang: <none>
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] kex follows: False
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] Compression: none
2026-04-12T09:54:58.882 [DEBUG] [Thread-187050] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:54:58.901 [DEBUG] [Thread-187050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:54:58.901 [DEBUG] [Thread-187050] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:54:58.902 [DEBUG] [Thread-187050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:54:58.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:54:58.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:54:58.903 [DEBUG] [Thread-187050] [transport.py] [_log()] userauth is OK
2026-04-12T09:54:58.904 [DEBUG] [Thread-187050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:54:58.904 [DEBUG] [Thread-187050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:54:58.904 [DEBUG] [Thread-187050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:54:58.904 [DEBUG] [Thread-187050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:54:58.921 [INFO] [Thread-187050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:54:58.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:54:59.556 [DEBUG] [Thread-187050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:54:59.557 [DEBUG] [Thread-187050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:54:59.557 [DEBUG] [Thread-187050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:54:59.598 [DEBUG] [Thread-187050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:54:59.598 [DEBUG] [Thread-187050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:54:59.601 [DEBUG] [Thread-187050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:54:59.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:54:59.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:54:59.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:54:59.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:54:59.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:54:59.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:54:59.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:54:59.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:54:59.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:54:59.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.329624 -999.00  +10.80  18.09     93   +9.80 1 2 1 3 1   888    0 1.40 22.06 ----- 17.3 18.1 275.0 25.1 14.5 -13.6 13.8 -12.3 12.7 -12.1 13.7 -13.1
2026-04-12T09:54:59.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:54:59.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:54:59.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.329624
2026-04-12T09:54:59.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:54:59.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:54:59.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:54:59.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:54:59.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:54:59.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:54:41', tmtdew=-0.1152, humidity=100.7, cloud=0.0, wind=22.5122, temperature=11.1296, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:54:39.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:54:59.629 [DEBUG] [Thread-187050] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:54:59.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:54:59.722 [DEBUG] [Thread-187053] [transport.py] [_log()] starting thread (client mode): 0xb0f553f0
2026-04-12T09:54:59.722 [DEBUG] [Thread-187053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:54:59.737 [DEBUG] [Thread-187053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:54:59.737 [INFO] [Thread-187053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:54:59.748 [DEBUG] [Thread-187053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:54:59.748 [DEBUG] [Thread-187053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:54:59.748 [DEBUG] [Thread-187053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] client lang: <none>
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] server lang: <none>
2026-04-12T09:54:59.749 [DEBUG] [Thread-187053] [transport.py] [_log()] kex follows: False
2026-04-12T09:54:59.750 [DEBUG] [Thread-187053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:54:59.750 [DEBUG] [Thread-187053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:54:59.750 [DEBUG] [Thread-187053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:54:59.750 [DEBUG] [Thread-187053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:54:59.750 [DEBUG] [Thread-187053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:54:59.750 [DEBUG] [Thread-187053] [transport.py] [_log()] Compression: none
2026-04-12T09:54:59.750 [DEBUG] [Thread-187053] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:54:59.808 [DEBUG] [Thread-187053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:54:59.809 [DEBUG] [Thread-187053] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:54:59.810 [DEBUG] [Thread-187053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:54:59.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:54:59.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:54:59.868 [DEBUG] [Thread-187053] [transport.py] [_log()] userauth is OK
2026-04-12T09:54:59.868 [DEBUG] [Thread-187053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:54:59.868 [DEBUG] [Thread-187053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:54:59.869 [DEBUG] [Thread-187053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:54:59.869 [DEBUG] [Thread-187053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:54:59.887 [INFO] [Thread-187053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:54:59.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:54:59.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:55:00.733 [DEBUG] [Thread-187053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:55:00.733 [DEBUG] [Thread-187053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:55:00.780 [DEBUG] [Thread-187053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:55:00.781 [DEBUG] [Thread-187053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:55:00.789 [DEBUG] [Thread-187053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:55:00.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:55:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:55:00.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:55:00.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:55:00.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:55:00.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:55:00.823 [DEBUG] [Thread-187053] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:55:06.342 [DEBUG] [Thread-187055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:55:21.394 [DEBUG] [Thread-187056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:55:26.979 [DEBUG] [Thread-187057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:55:30.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:55:30.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:55:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:55:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 55, 17), 0.002365, 100.283, 0.0, 20.4149, 10.5312, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:55:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:55:17
2026-04-12T09:55:32.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:55:32.698 [DEBUG] [Thread-187058] [transport.py] [_log()] starting thread (client mode): 0xae5193f0
2026-04-12T09:55:32.698 [DEBUG] [Thread-187058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:55:32.717 [DEBUG] [Thread-187058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:55:32.717 [INFO] [Thread-187058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] client lang: <none>
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] server lang: <none>
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] kex follows: False
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] Compression: none
2026-04-12T09:55:32.719 [DEBUG] [Thread-187058] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:55:32.737 [DEBUG] [Thread-187058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:55:32.737 [DEBUG] [Thread-187058] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:55:32.738 [DEBUG] [Thread-187058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:55:32.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:55:32.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:55:32.739 [DEBUG] [Thread-187058] [transport.py] [_log()] userauth is OK
2026-04-12T09:55:32.740 [DEBUG] [Thread-187058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:55:32.740 [DEBUG] [Thread-187058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:55:32.740 [DEBUG] [Thread-187058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:55:32.740 [DEBUG] [Thread-187058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:55:32.756 [INFO] [Thread-187058] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:55:32.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:55:33.366 [DEBUG] [Thread-187058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:55:33.366 [DEBUG] [Thread-187058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:55:33.366 [DEBUG] [Thread-187058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:55:33.407 [DEBUG] [Thread-187058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:55:33.408 [DEBUG] [Thread-187058] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:55:33.410 [DEBUG] [Thread-187058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:55:33.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:55:33.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:55:33.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:55:33.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:55:33.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:55:33.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:55:33.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:55:33.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:55:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:55:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.329971 -999.00  +11.00  13.93     94  +10.10 1 2 1 3 1   888    0 1.42 22.48 ----- 14.0 13.9 295.2 21.9 14.6 -14.5 14.0 -14.2 12.8 -13.0 13.7 -14.9
2026-04-12T09:55:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:55:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:55:33.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.329971
2026-04-12T09:55:33.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:55:33.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:55:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:55:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:55:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:55:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:55:17', tmtdew=0.002365, humidity=100.283, cloud=0.0, wind=20.4149, temperature=10.5312, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:55:09.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:55:33.434 [DEBUG] [Thread-187058] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:55:33.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:55:33.532 [DEBUG] [Thread-187061] [transport.py] [_log()] starting thread (client mode): 0xa796a500
2026-04-12T09:55:33.532 [DEBUG] [Thread-187061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:55:33.553 [DEBUG] [Thread-187061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:55:33.553 [INFO] [Thread-187061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:55:33.581 [DEBUG] [Thread-187061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:55:33.581 [DEBUG] [Thread-187061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:55:33.581 [DEBUG] [Thread-187061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] client lang: <none>
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] server lang: <none>
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] kex follows: False
2026-04-12T09:55:33.582 [DEBUG] [Thread-187061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:55:33.583 [DEBUG] [Thread-187061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:55:33.583 [DEBUG] [Thread-187061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:55:33.583 [DEBUG] [Thread-187061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:55:33.583 [DEBUG] [Thread-187061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:55:33.583 [DEBUG] [Thread-187061] [transport.py] [_log()] Compression: none
2026-04-12T09:55:33.583 [DEBUG] [Thread-187061] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:55:33.676 [DEBUG] [Thread-187061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:55:33.676 [DEBUG] [Thread-187061] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:55:33.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:55:33.677 [DEBUG] [Thread-187061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:55:33.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:55:33.746 [DEBUG] [Thread-187061] [transport.py] [_log()] userauth is OK
2026-04-12T09:55:33.746 [DEBUG] [Thread-187061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:55:33.746 [DEBUG] [Thread-187061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:55:33.746 [DEBUG] [Thread-187061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:55:33.746 [DEBUG] [Thread-187061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:55:33.766 [INFO] [Thread-187061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:55:33.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:55:33.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:55:34.629 [DEBUG] [Thread-187061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:55:34.629 [DEBUG] [Thread-187061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:55:34.679 [DEBUG] [Thread-187061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:55:34.680 [DEBUG] [Thread-187061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:55:34.689 [DEBUG] [Thread-187061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:55:34.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:55:34.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:55:34.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:55:34.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:55:34.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:55:34.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:55:34.728 [DEBUG] [Thread-187061] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:55:36.429 [DEBUG] [Thread-187063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:55:51.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:55:51.168 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:55:51.486 [DEBUG] [Thread-187064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:56:04.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:56:04.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:56:04.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:56:06.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 55, 52), -0.11006, 100.665, 0.0, 21.8066, 11.1289, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:56:06.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:55:52
2026-04-12T09:56:06.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:56:06.526 [DEBUG] [Thread-187065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:56:06.591 [DEBUG] [Thread-187066] [transport.py] [_log()] starting thread (client mode): 0xa79698a0
2026-04-12T09:56:06.591 [DEBUG] [Thread-187066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:56:06.609 [DEBUG] [Thread-187066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:56:06.609 [INFO] [Thread-187066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:56:06.612 [DEBUG] [Thread-187066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] client lang: <none>
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] server lang: <none>
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] kex follows: False
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:56:06.613 [DEBUG] [Thread-187066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:56:06.614 [DEBUG] [Thread-187066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:56:06.614 [DEBUG] [Thread-187066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:56:06.614 [DEBUG] [Thread-187066] [transport.py] [_log()] Compression: none
2026-04-12T09:56:06.614 [DEBUG] [Thread-187066] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:56:06.634 [DEBUG] [Thread-187066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:56:06.635 [DEBUG] [Thread-187066] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:56:06.635 [DEBUG] [Thread-187066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:56:06.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:56:06.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:56:06.637 [DEBUG] [Thread-187066] [transport.py] [_log()] userauth is OK
2026-04-12T09:56:06.638 [DEBUG] [Thread-187066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:56:06.638 [DEBUG] [Thread-187066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:56:06.638 [DEBUG] [Thread-187066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:56:06.638 [DEBUG] [Thread-187066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:56:06.663 [INFO] [Thread-187066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:56:06.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:56:07.295 [DEBUG] [Thread-187066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:56:07.295 [DEBUG] [Thread-187066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:56:07.295 [DEBUG] [Thread-187066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:56:07.336 [DEBUG] [Thread-187066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:56:07.337 [DEBUG] [Thread-187066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:56:07.340 [DEBUG] [Thread-187066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:56:07.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:56:07.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:56:07.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:56:07.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:56:07.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:56:07.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:56:07.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:56:07.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:56:07.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:56:07.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.330319 -999.00  +11.00  19.09     94  +10.10 1 2 1 3 1   888    0 1.44 22.98 ----- 16.5 19.1 273.2 21.4 14.9 -14.8 14.2 -15.9 13.0 -13.1 14.0 -13.1
2026-04-12T09:56:07.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:56:07.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:56:07.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.330319
2026-04-12T09:56:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:56:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:56:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:56:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:56:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:56:07.364 [DEBUG] [Thread-187066] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:56:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:55:52', tmtdew=-0.11006, humidity=100.665, cloud=0.0, wind=21.8066, temperature=11.1289, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:55:39.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:56:07.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:56:07.483 [DEBUG] [Thread-187069] [transport.py] [_log()] starting thread (client mode): 0xa7969c90
2026-04-12T09:56:07.484 [DEBUG] [Thread-187069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:56:07.518 [DEBUG] [Thread-187069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:56:07.518 [INFO] [Thread-187069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:56:07.549 [DEBUG] [Thread-187069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:56:07.549 [DEBUG] [Thread-187069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:56:07.549 [DEBUG] [Thread-187069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:56:07.549 [DEBUG] [Thread-187069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:07.549 [DEBUG] [Thread-187069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:07.549 [DEBUG] [Thread-187069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] client lang: <none>
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] server lang: <none>
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] kex follows: False
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] Compression: none
2026-04-12T09:56:07.550 [DEBUG] [Thread-187069] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:56:07.627 [DEBUG] [Thread-187069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:56:07.628 [DEBUG] [Thread-187069] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:56:07.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:56:07.629 [DEBUG] [Thread-187069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:56:07.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:56:07.728 [DEBUG] [Thread-187069] [transport.py] [_log()] userauth is OK
2026-04-12T09:56:07.728 [DEBUG] [Thread-187069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:56:07.728 [DEBUG] [Thread-187069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:56:07.728 [DEBUG] [Thread-187069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:56:07.728 [DEBUG] [Thread-187069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:56:07.766 [INFO] [Thread-187069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:56:07.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:56:07.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:56:08.664 [DEBUG] [Thread-187069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:56:08.664 [DEBUG] [Thread-187069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:56:08.720 [DEBUG] [Thread-187069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:56:08.720 [DEBUG] [Thread-187069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:56:08.743 [DEBUG] [Thread-187069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:56:08.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:56:08.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:56:08.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:56:08.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:56:08.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:56:08.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:56:08.823 [DEBUG] [Thread-187069] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:56:21.562 [DEBUG] [Thread-187071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:56:27.023 [DEBUG] [Thread-187072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:56:36.615 [DEBUG] [Thread-187073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:56:38.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:56:38.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:56:38.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:56:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 56, 28), -0.007515, 100.349, 0.0, 20.0444, 10.5645, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:56:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:56:28
2026-04-12T09:56:40.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:56:40.761 [DEBUG] [Thread-187074] [transport.py] [_log()] starting thread (client mode): 0xae5629e0
2026-04-12T09:56:40.761 [DEBUG] [Thread-187074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:56:40.782 [DEBUG] [Thread-187074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:56:40.782 [INFO] [Thread-187074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:56:40.785 [DEBUG] [Thread-187074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:56:40.785 [DEBUG] [Thread-187074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:56:40.785 [DEBUG] [Thread-187074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:56:40.785 [DEBUG] [Thread-187074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:40.785 [DEBUG] [Thread-187074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:40.785 [DEBUG] [Thread-187074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:40.785 [DEBUG] [Thread-187074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] client lang: <none>
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] server lang: <none>
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] kex follows: False
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] Compression: none
2026-04-12T09:56:40.786 [DEBUG] [Thread-187074] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:56:40.802 [DEBUG] [Thread-187074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:56:40.802 [DEBUG] [Thread-187074] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:56:40.803 [DEBUG] [Thread-187074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:56:40.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:56:40.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:56:40.805 [DEBUG] [Thread-187074] [transport.py] [_log()] userauth is OK
2026-04-12T09:56:40.805 [DEBUG] [Thread-187074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:56:40.805 [DEBUG] [Thread-187074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:56:40.805 [DEBUG] [Thread-187074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:56:40.805 [DEBUG] [Thread-187074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:56:40.840 [INFO] [Thread-187074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:56:40.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:56:41.506 [DEBUG] [Thread-187074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:56:41.507 [DEBUG] [Thread-187074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:56:41.507 [DEBUG] [Thread-187074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:56:41.547 [DEBUG] [Thread-187074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:56:41.547 [DEBUG] [Thread-187074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:56:41.551 [DEBUG] [Thread-187074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:56:41.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:56:41.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:56:41.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:56:41.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:56:41.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:56:41.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:56:41.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:56:41.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:56:41.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:56:41.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.330666 -999.00  +11.00  17.31     94  +10.10 1 2 1 3 1   888    0 1.41 21.39 ----- 16.7 17.3 284.2 23.6 14.9 -19.8 14.1 -18.4 13.0 -17.9 14.0 -17.8
2026-04-12T09:56:41.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:56:41.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:56:41.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.330666
2026-04-12T09:56:41.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:56:41.579 [DEBUG] [Thread-187074] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:56:41.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:56:41.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:56:41.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:56:41.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:56:41.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:56:28', tmtdew=-0.007515, humidity=100.349, cloud=0.0, wind=20.0444, temperature=10.5645, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:56:09.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:56:41.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:56:41.690 [DEBUG] [Thread-187077] [transport.py] [_log()] starting thread (client mode): 0xae562f50
2026-04-12T09:56:41.690 [DEBUG] [Thread-187077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:56:41.718 [DEBUG] [Thread-187077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:56:41.719 [INFO] [Thread-187077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:56:41.738 [DEBUG] [Thread-187077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:56:41.738 [DEBUG] [Thread-187077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] client lang: <none>
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] server lang: <none>
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] kex follows: False
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:56:41.739 [DEBUG] [Thread-187077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:56:41.740 [DEBUG] [Thread-187077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:56:41.740 [DEBUG] [Thread-187077] [transport.py] [_log()] Compression: none
2026-04-12T09:56:41.740 [DEBUG] [Thread-187077] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:56:41.812 [DEBUG] [Thread-187077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:56:41.813 [DEBUG] [Thread-187077] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:56:41.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:56:41.814 [DEBUG] [Thread-187077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:56:41.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:56:41.897 [DEBUG] [Thread-187077] [transport.py] [_log()] userauth is OK
2026-04-12T09:56:41.897 [DEBUG] [Thread-187077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:56:41.897 [DEBUG] [Thread-187077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:56:41.897 [DEBUG] [Thread-187077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:56:41.897 [DEBUG] [Thread-187077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:56:41.928 [INFO] [Thread-187077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:56:41.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:56:41.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:56:42.795 [DEBUG] [Thread-187077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:56:42.795 [DEBUG] [Thread-187077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:56:42.856 [DEBUG] [Thread-187077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:56:42.856 [DEBUG] [Thread-187077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:56:42.878 [DEBUG] [Thread-187077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:56:42.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:56:42.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:56:42.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:56:42.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:56:42.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:56:42.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:56:42.974 [DEBUG] [Thread-187077] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:56:51.308 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:56:51.309 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:56:51.656 [DEBUG] [Thread-187079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:57:06.707 [DEBUG] [Thread-187080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:57:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:57:12.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:57:12.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:57:14.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 57, 4), -0.002545, 100.316, 0.0, 19.3036, 10.548, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:57:14.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:57:04
2026-04-12T09:57:14.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:57:14.866 [DEBUG] [Thread-187081] [transport.py] [_log()] starting thread (client mode): 0xb0f8dd20
2026-04-12T09:57:14.866 [DEBUG] [Thread-187081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:57:14.886 [DEBUG] [Thread-187081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:57:14.886 [INFO] [Thread-187081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] client lang: <none>
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] server lang: <none>
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] kex follows: False
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:57:14.889 [DEBUG] [Thread-187081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:57:14.890 [DEBUG] [Thread-187081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:57:14.890 [DEBUG] [Thread-187081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:57:14.890 [DEBUG] [Thread-187081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:57:14.890 [DEBUG] [Thread-187081] [transport.py] [_log()] Compression: none
2026-04-12T09:57:14.890 [DEBUG] [Thread-187081] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:57:14.905 [DEBUG] [Thread-187081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:57:14.906 [DEBUG] [Thread-187081] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:57:14.906 [DEBUG] [Thread-187081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:57:14.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:57:14.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:57:14.948 [DEBUG] [Thread-187081] [transport.py] [_log()] userauth is OK
2026-04-12T09:57:14.948 [DEBUG] [Thread-187081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:57:14.949 [DEBUG] [Thread-187081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:57:14.949 [DEBUG] [Thread-187081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:57:14.949 [DEBUG] [Thread-187081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:57:14.969 [INFO] [Thread-187081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:57:14.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:57:15.612 [DEBUG] [Thread-187081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:57:15.612 [DEBUG] [Thread-187081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:57:15.612 [DEBUG] [Thread-187081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:57:15.653 [DEBUG] [Thread-187081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:57:15.653 [DEBUG] [Thread-187081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:57:15.657 [DEBUG] [Thread-187081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:57:15.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:57:15.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:57:15.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:57:15.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:57:15.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:57:15.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:57:15.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:57:15.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:57:15.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:57:15.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.331013 -999.00  +10.90  15.89     93  +10.00 1 2 1 3 1   888    0 1.40 21.41 ----- 17.8 15.9 291.8 23.0 14.7 -21.4 14.0 -18.6 12.8 -17.7 13.8 -19.4
2026-04-12T09:57:15.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:57:15.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:57:15.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.331013
2026-04-12T09:57:15.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:57:15.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:57:15.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:57:15.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:57:15.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:57:15.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:57:04', tmtdew=-0.002545, humidity=100.316, cloud=0.0, wind=19.3036, temperature=10.548, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:56:39.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:57:15.687 [DEBUG] [Thread-187081] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:57:15.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:57:15.808 [DEBUG] [Thread-187084] [transport.py] [_log()] starting thread (client mode): 0xae562ad0
2026-04-12T09:57:15.809 [DEBUG] [Thread-187084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:57:15.850 [DEBUG] [Thread-187084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:57:15.850 [INFO] [Thread-187084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:57:15.884 [DEBUG] [Thread-187084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] client lang: <none>
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] server lang: <none>
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] kex follows: False
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] Compression: none
2026-04-12T09:57:15.885 [DEBUG] [Thread-187084] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:57:15.973 [DEBUG] [Thread-187084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:57:15.974 [DEBUG] [Thread-187084] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:57:15.975 [DEBUG] [Thread-187084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:57:15.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:57:15.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:57:16.085 [DEBUG] [Thread-187084] [transport.py] [_log()] userauth is OK
2026-04-12T09:57:16.086 [DEBUG] [Thread-187084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:57:16.086 [DEBUG] [Thread-187084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:57:16.086 [DEBUG] [Thread-187084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:57:16.086 [DEBUG] [Thread-187084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:57:16.131 [INFO] [Thread-187084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:57:16.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:57:16.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:57:17.053 [DEBUG] [Thread-187084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:57:17.054 [DEBUG] [Thread-187084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:57:17.132 [DEBUG] [Thread-187084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:57:17.132 [DEBUG] [Thread-187084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:57:17.172 [DEBUG] [Thread-187084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:57:17.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:57:17.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:57:17.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:57:17.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:57:17.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:57:17.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:57:17.333 [DEBUG] [Thread-187084] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:57:21.745 [DEBUG] [Thread-187086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:57:27.056 [DEBUG] [Thread-187087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:57:36.800 [DEBUG] [Thread-187088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:57:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:57:47.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:57:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:57:48.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 57, 39), -0.12031, 100.732, 0.0, 22.5475, 11.2618, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:57:48.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:57:39
2026-04-12T09:57:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:57:49.240 [DEBUG] [Thread-187089] [transport.py] [_log()] starting thread (client mode): 0xb0f40280
2026-04-12T09:57:49.240 [DEBUG] [Thread-187089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:57:49.259 [DEBUG] [Thread-187089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:57:49.259 [INFO] [Thread-187089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:57:49.262 [DEBUG] [Thread-187089] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:57:49.262 [DEBUG] [Thread-187089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:57:49.262 [DEBUG] [Thread-187089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:57:49.262 [DEBUG] [Thread-187089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:49.262 [DEBUG] [Thread-187089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:49.262 [DEBUG] [Thread-187089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] client lang: <none>
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] server lang: <none>
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] kex follows: False
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] Compression: none
2026-04-12T09:57:49.263 [DEBUG] [Thread-187089] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:57:49.271 [DEBUG] [Thread-187089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:57:49.272 [DEBUG] [Thread-187089] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:57:49.272 [DEBUG] [Thread-187089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:57:49.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:57:49.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:57:49.274 [DEBUG] [Thread-187089] [transport.py] [_log()] userauth is OK
2026-04-12T09:57:49.274 [DEBUG] [Thread-187089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:57:49.274 [DEBUG] [Thread-187089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:57:49.275 [DEBUG] [Thread-187089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:57:49.275 [DEBUG] [Thread-187089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:57:49.309 [INFO] [Thread-187089] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:57:49.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:57:49.953 [DEBUG] [Thread-187089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:57:49.954 [DEBUG] [Thread-187089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:57:49.954 [DEBUG] [Thread-187089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:57:49.995 [DEBUG] [Thread-187089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:57:49.995 [DEBUG] [Thread-187089] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:57:49.999 [DEBUG] [Thread-187089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:57:50.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:57:50.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:57:50.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:57:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:57:50.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:57:50.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:57:50.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:57:50.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:57:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:57:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.331708 -999.00  +11.00  19.79     93  +10.00 1 2 1 3 1   888    0 1.47 22.49 ----- 18.8 19.8 271.6 23.6 15.1 -19.1 14.3 -18.4 13.1 -17.2 14.1 -17.0
2026-04-12T09:57:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:57:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:57:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.331708
2026-04-12T09:57:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:57:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:57:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:57:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:57:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:57:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:57:39', tmtdew=-0.12031, humidity=100.732, cloud=0.0, wind=22.5475, temperature=11.2618, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:57:39.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:57:50.028 [DEBUG] [Thread-187089] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:57:50.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:57:50.137 [DEBUG] [Thread-187092] [transport.py] [_log()] starting thread (client mode): 0xb0f42fe0
2026-04-12T09:57:50.137 [DEBUG] [Thread-187092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:57:50.172 [DEBUG] [Thread-187092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:57:50.173 [INFO] [Thread-187092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] client lang: <none>
2026-04-12T09:57:50.196 [DEBUG] [Thread-187092] [transport.py] [_log()] server lang: <none>
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] kex follows: False
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] Compression: none
2026-04-12T09:57:50.197 [DEBUG] [Thread-187092] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:57:50.268 [DEBUG] [Thread-187092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:57:50.268 [DEBUG] [Thread-187092] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:57:50.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:57:50.269 [DEBUG] [Thread-187092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:57:50.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:57:50.355 [DEBUG] [Thread-187092] [transport.py] [_log()] userauth is OK
2026-04-12T09:57:50.355 [DEBUG] [Thread-187092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:57:50.355 [DEBUG] [Thread-187092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:57:50.355 [DEBUG] [Thread-187092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:57:50.355 [DEBUG] [Thread-187092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:57:50.385 [INFO] [Thread-187092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:57:50.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:57:50.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:57:51.215 [DEBUG] [Thread-187092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:57:51.215 [DEBUG] [Thread-187092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:57:51.278 [DEBUG] [Thread-187092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:57:51.278 [DEBUG] [Thread-187092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:57:51.303 [DEBUG] [Thread-187092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:57:51.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:57:51.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:57:51.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:57:51.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:57:51.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:57:51.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:57:51.401 [DEBUG] [Thread-187092] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:57:51.449 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:57:51.450 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:57:51.837 [DEBUG] [Thread-187094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:06.902 [DEBUG] [Thread-187095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:21.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:58:21.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:58:21.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:58:21.939 [DEBUG] [Thread-187096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:22.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 58, 15), -0.002735, 100.316, 0.0, 18.3157, 10.6305, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:58:22.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:58:15
2026-04-12T09:58:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:58:23.229 [DEBUG] [Thread-187097] [transport.py] [_log()] starting thread (client mode): 0xb0f8dbd0
2026-04-12T09:58:23.229 [DEBUG] [Thread-187097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:58:23.253 [DEBUG] [Thread-187097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:58:23.253 [INFO] [Thread-187097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:58:23.257 [DEBUG] [Thread-187097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:58:23.257 [DEBUG] [Thread-187097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] client lang: <none>
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] server lang: <none>
2026-04-12T09:58:23.258 [DEBUG] [Thread-187097] [transport.py] [_log()] kex follows: False
2026-04-12T09:58:23.259 [DEBUG] [Thread-187097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:58:23.259 [DEBUG] [Thread-187097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:58:23.259 [DEBUG] [Thread-187097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:58:23.259 [DEBUG] [Thread-187097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:58:23.259 [DEBUG] [Thread-187097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:58:23.259 [DEBUG] [Thread-187097] [transport.py] [_log()] Compression: none
2026-04-12T09:58:23.259 [DEBUG] [Thread-187097] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:58:23.279 [DEBUG] [Thread-187097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:58:23.280 [DEBUG] [Thread-187097] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:58:23.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:58:23.281 [DEBUG] [Thread-187097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:58:23.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:58:23.283 [DEBUG] [Thread-187097] [transport.py] [_log()] userauth is OK
2026-04-12T09:58:23.283 [DEBUG] [Thread-187097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:58:23.283 [DEBUG] [Thread-187097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:58:23.283 [DEBUG] [Thread-187097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:58:23.283 [DEBUG] [Thread-187097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:58:23.308 [INFO] [Thread-187097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:58:23.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:58:23.969 [DEBUG] [Thread-187097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:58:23.969 [DEBUG] [Thread-187097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:58:23.970 [DEBUG] [Thread-187097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:58:24.010 [DEBUG] [Thread-187097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:58:24.010 [DEBUG] [Thread-187097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:58:24.011 [DEBUG] [Thread-187097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:58:24.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:58:24.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:58:24.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:58:24.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:58:24.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:58:24.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:58:24.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:58:24.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:58:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:58:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.332055 -999.00  +10.90  17.65     93   +9.90 1 2 1 3 1   888    0 1.41 20.69 ----- 16.8 17.6 284.2 23.7 15.2 -19.4 14.4 -18.8 13.1 -19.1 14.2 -17.8
2026-04-12T09:58:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:58:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:58:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.332055
2026-04-12T09:58:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:58:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:58:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:58:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:58:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:58:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:58:15', tmtdew=-0.002735, humidity=100.316, cloud=0.0, wind=18.3157, temperature=10.6305, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:58:09.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:58:24.030 [DEBUG] [Thread-187097] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:58:24.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:58:24.150 [DEBUG] [Thread-187100] [transport.py] [_log()] starting thread (client mode): 0xb0f57b80
2026-04-12T09:58:24.151 [DEBUG] [Thread-187100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:58:24.194 [DEBUG] [Thread-187100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:58:24.194 [INFO] [Thread-187100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:58:24.231 [DEBUG] [Thread-187100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] client lang: <none>
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] server lang: <none>
2026-04-12T09:58:24.232 [DEBUG] [Thread-187100] [transport.py] [_log()] kex follows: False
2026-04-12T09:58:24.233 [DEBUG] [Thread-187100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:58:24.233 [DEBUG] [Thread-187100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:58:24.233 [DEBUG] [Thread-187100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:58:24.233 [DEBUG] [Thread-187100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:58:24.233 [DEBUG] [Thread-187100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:58:24.233 [DEBUG] [Thread-187100] [transport.py] [_log()] Compression: none
2026-04-12T09:58:24.233 [DEBUG] [Thread-187100] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:58:24.320 [DEBUG] [Thread-187100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:58:24.321 [DEBUG] [Thread-187100] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:58:24.322 [DEBUG] [Thread-187100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:58:24.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:58:24.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:58:24.437 [DEBUG] [Thread-187100] [transport.py] [_log()] userauth is OK
2026-04-12T09:58:24.437 [DEBUG] [Thread-187100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:58:24.437 [DEBUG] [Thread-187100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:58:24.437 [DEBUG] [Thread-187100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:58:24.437 [DEBUG] [Thread-187100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:58:24.485 [INFO] [Thread-187100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:58:24.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:58:24.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:58:25.312 [DEBUG] [Thread-187100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:58:25.313 [DEBUG] [Thread-187100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:58:25.391 [DEBUG] [Thread-187100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:58:25.391 [DEBUG] [Thread-187100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:58:25.431 [DEBUG] [Thread-187100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:58:25.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:58:25.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:58:25.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:58:25.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:58:25.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:58:25.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:58:25.588 [DEBUG] [Thread-187100] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:58:27.083 [DEBUG] [Thread-187102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:36.978 [DEBUG] [Thread-187103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:51.590 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:51.593 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:52.031 [DEBUG] [Thread-187104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:58:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:58:55.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:58:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:58:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 58, 15), -0.002735, 100.316, 0.0, 18.3157, 10.6305, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:58:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:58:15
2026-04-12T09:58:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:58:57.581 [DEBUG] [Thread-187105] [transport.py] [_log()] starting thread (client mode): 0xb0f8e8c0
2026-04-12T09:58:57.581 [DEBUG] [Thread-187105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:58:57.602 [DEBUG] [Thread-187105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:58:57.602 [INFO] [Thread-187105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] client lang: <none>
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] server lang: <none>
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] kex follows: False
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] Compression: none
2026-04-12T09:58:57.606 [DEBUG] [Thread-187105] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:58:57.624 [DEBUG] [Thread-187105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:58:57.624 [DEBUG] [Thread-187105] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:58:57.625 [DEBUG] [Thread-187105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:58:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:58:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:58:57.626 [DEBUG] [Thread-187105] [transport.py] [_log()] userauth is OK
2026-04-12T09:58:57.626 [DEBUG] [Thread-187105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:58:57.626 [DEBUG] [Thread-187105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:58:57.626 [DEBUG] [Thread-187105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:58:57.626 [DEBUG] [Thread-187105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:58:57.641 [INFO] [Thread-187105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:58:57.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:58:58.285 [DEBUG] [Thread-187105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:58:58.285 [DEBUG] [Thread-187105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:58:58.286 [DEBUG] [Thread-187105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:58:58.326 [DEBUG] [Thread-187105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:58:58.326 [DEBUG] [Thread-187105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:58:58.330 [DEBUG] [Thread-187105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:58:58.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:58:58.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:58:58.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:58:58.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:58:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:58:58.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:58:58.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:58:58.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:58:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:58:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.332402 -999.00  +11.10  16.93     94  +10.20 1 2 1 3 1   888    0 1.43 20.98 ----- 16.1 16.9 280.2 20.1 15.7 -18.1 14.7 -16.0 13.3 -14.1 14.4 -16.0
2026-04-12T09:58:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:58:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:58:58.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.332402
2026-04-12T09:58:58.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:58:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:58:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:58:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:58:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:58:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:58:15', tmtdew=-0.002735, humidity=100.316, cloud=0.0, wind=18.3157, temperature=10.6305, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:58:39.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:58:58.358 [DEBUG] [Thread-187105] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:58:58.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:58:58.451 [DEBUG] [Thread-187108] [transport.py] [_log()] starting thread (client mode): 0xae563b20
2026-04-12T09:58:58.452 [DEBUG] [Thread-187108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:58:58.466 [DEBUG] [Thread-187108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:58:58.466 [INFO] [Thread-187108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:58:58.473 [DEBUG] [Thread-187108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] client lang: <none>
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] server lang: <none>
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] kex follows: False
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] Compression: none
2026-04-12T09:58:58.474 [DEBUG] [Thread-187108] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:58:58.530 [DEBUG] [Thread-187108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:58:58.531 [DEBUG] [Thread-187108] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:58:58.531 [DEBUG] [Thread-187108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:58:58.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:58:58.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:58:58.588 [DEBUG] [Thread-187108] [transport.py] [_log()] userauth is OK
2026-04-12T09:58:58.588 [DEBUG] [Thread-187108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:58:58.588 [DEBUG] [Thread-187108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:58:58.588 [DEBUG] [Thread-187108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:58:58.588 [DEBUG] [Thread-187108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:58:58.601 [INFO] [Thread-187108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:58:58.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:58:58.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:58:59.419 [DEBUG] [Thread-187108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:58:59.419 [DEBUG] [Thread-187108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:58:59.467 [DEBUG] [Thread-187108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:58:59.468 [DEBUG] [Thread-187108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:58:59.477 [DEBUG] [Thread-187108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:58:59.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:58:59.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:58:59.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:58:59.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:58:59.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:58:59.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:58:59.514 [DEBUG] [Thread-187108] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:59:07.068 [DEBUG] [Thread-187110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:59:22.121 [DEBUG] [Thread-187111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:59:27.121 [DEBUG] [Thread-187112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:59:29.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T09:59:29.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T09:59:29.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T09:59:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 58, 50), -0.11087, 100.665, 0.0, 22.0536, 11.5932, 2, 2, 0, 2, 0, 0),)
2026-04-12T09:59:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:58:50
2026-04-12T09:59:31.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T09:59:31.501 [DEBUG] [Thread-187113] [transport.py] [_log()] starting thread (client mode): 0xae518c70
2026-04-12T09:59:31.501 [DEBUG] [Thread-187113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:59:31.522 [DEBUG] [Thread-187113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T09:59:31.522 [INFO] [Thread-187113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T09:59:31.525 [DEBUG] [Thread-187113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] client lang: <none>
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] server lang: <none>
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] kex follows: False
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:59:31.526 [DEBUG] [Thread-187113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:59:31.527 [DEBUG] [Thread-187113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:59:31.527 [DEBUG] [Thread-187113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:59:31.527 [DEBUG] [Thread-187113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:59:31.527 [DEBUG] [Thread-187113] [transport.py] [_log()] Compression: none
2026-04-12T09:59:31.527 [DEBUG] [Thread-187113] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:59:31.544 [DEBUG] [Thread-187113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:59:31.545 [DEBUG] [Thread-187113] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:59:31.545 [DEBUG] [Thread-187113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T09:59:31.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T09:59:31.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:59:31.548 [DEBUG] [Thread-187113] [transport.py] [_log()] userauth is OK
2026-04-12T09:59:31.548 [DEBUG] [Thread-187113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:59:31.548 [DEBUG] [Thread-187113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:59:31.548 [DEBUG] [Thread-187113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T09:59:31.549 [DEBUG] [Thread-187113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:59:31.573 [INFO] [Thread-187113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:59:31.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:59:32.165 [DEBUG] [Thread-187113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:59:32.165 [DEBUG] [Thread-187113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:59:32.166 [DEBUG] [Thread-187113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T09:59:32.206 [DEBUG] [Thread-187113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:59:32.206 [DEBUG] [Thread-187113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:59:32.209 [DEBUG] [Thread-187113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:59:32.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:59:32.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T09:59:32.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T09:59:32.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T09:59:32.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:59:32.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T09:59:32.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:59:32.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:59:32.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T09:59:32.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.332749 -999.00  +11.20  19.44     93  +10.20 1 2 1 3 1   888    0 1.38 19.15 ----- 19.2 19.4 274.8 22.8 15.8 -16.6 14.8 -14.0 13.4 -11.9 14.5 -12.9
2026-04-12T09:59:32.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T09:59:32.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T09:59:32.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.332749
2026-04-12T09:59:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T09:59:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T09:59:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T09:59:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T09:59:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T09:59:32.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:58:50', tmtdew=-0.11087, humidity=100.665, cloud=0.0, wind=22.0536, temperature=11.5932, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:59:09.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T09:59:32.237 [DEBUG] [Thread-187113] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:59:32.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T09:59:32.330 [DEBUG] [Thread-187116] [transport.py] [_log()] starting thread (client mode): 0xae5e4760
2026-04-12T09:59:32.330 [DEBUG] [Thread-187116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T09:59:32.345 [DEBUG] [Thread-187116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T09:59:32.346 [INFO] [Thread-187116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] client lang: <none>
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] server lang: <none>
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] kex follows: False
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T09:59:32.356 [DEBUG] [Thread-187116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T09:59:32.357 [DEBUG] [Thread-187116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T09:59:32.357 [DEBUG] [Thread-187116] [transport.py] [_log()] Compression: none
2026-04-12T09:59:32.357 [DEBUG] [Thread-187116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T09:59:32.418 [DEBUG] [Thread-187116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T09:59:32.418 [DEBUG] [Thread-187116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T09:59:32.419 [DEBUG] [Thread-187116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T09:59:32.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T09:59:32.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T09:59:32.476 [DEBUG] [Thread-187116] [transport.py] [_log()] userauth is OK
2026-04-12T09:59:32.477 [DEBUG] [Thread-187116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T09:59:32.477 [DEBUG] [Thread-187116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T09:59:32.477 [DEBUG] [Thread-187116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T09:59:32.477 [DEBUG] [Thread-187116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T09:59:32.495 [INFO] [Thread-187116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T09:59:32.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T09:59:32.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T09:59:33.312 [DEBUG] [Thread-187116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T09:59:33.313 [DEBUG] [Thread-187116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T09:59:33.360 [DEBUG] [Thread-187116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T09:59:33.360 [DEBUG] [Thread-187116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T09:59:33.370 [DEBUG] [Thread-187116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T09:59:33.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T09:59:33.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T09:59:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T09:59:33.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T09:59:33.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T09:59:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T09:59:33.405 [DEBUG] [Thread-187116] [transport.py] [_log()] EOF in transport thread
2026-04-12T09:59:37.158 [DEBUG] [Thread-187118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:59:51.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:59:51.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T09:59:52.211 [DEBUG] [Thread-187119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:00:03.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:00:03.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:00:03.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:00:04.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 9, 59, 26), -0.00793, 100.349, 0.0, 19.6564, 10.8131, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:00:04.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 09:59:26
2026-04-12T10:00:05.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:00:05.335 [DEBUG] [Thread-187120] [transport.py] [_log()] starting thread (client mode): 0xb0f8f790
2026-04-12T10:00:05.335 [DEBUG] [Thread-187120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:00:05.355 [DEBUG] [Thread-187120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:00:05.356 [INFO] [Thread-187120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] client lang: <none>
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] server lang: <none>
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] kex follows: False
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] Compression: none
2026-04-12T10:00:05.359 [DEBUG] [Thread-187120] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:00:05.378 [DEBUG] [Thread-187120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:00:05.379 [DEBUG] [Thread-187120] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:00:05.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:00:05.380 [DEBUG] [Thread-187120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:00:05.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:00:05.383 [DEBUG] [Thread-187120] [transport.py] [_log()] userauth is OK
2026-04-12T10:00:05.383 [DEBUG] [Thread-187120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:00:05.383 [DEBUG] [Thread-187120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:00:05.383 [DEBUG] [Thread-187120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:00:05.383 [DEBUG] [Thread-187120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:00:05.407 [INFO] [Thread-187120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:00:05.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:00:06.256 [DEBUG] [Thread-187120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:00:06.256 [DEBUG] [Thread-187120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:00:06.257 [DEBUG] [Thread-187120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:00:06.297 [DEBUG] [Thread-187120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:00:06.297 [DEBUG] [Thread-187120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:00:06.300 [DEBUG] [Thread-187120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:00:06.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:00:06.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:00:06.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:00:06.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:00:06.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:00:06.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:00:06.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:00:06.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:00:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:00:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.333097 -999.00  +11.30  21.97     94  +10.40 1 2 1 3 1   888    0 1.38 19.28 ----- 17.8 22.0 274.0 25.0 15.9 -15.4 14.8 -15.3 13.4 -11.5 14.7 -11.3
2026-04-12T10:00:06.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:00:06.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:00:06.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.333097
2026-04-12T10:00:06.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:00:06.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:00:06.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:00:06.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:00:06.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:00:06.334 [DEBUG] [Thread-187120] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:00:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T09:59:26', tmtdew=-0.00793, humidity=100.349, cloud=0.0, wind=19.6564, temperature=10.8131, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T07:59:39.581', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:00:06.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:00:06.429 [DEBUG] [Thread-187123] [transport.py] [_log()] starting thread (client mode): 0xa796a920
2026-04-12T10:00:06.429 [DEBUG] [Thread-187123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:00:06.444 [DEBUG] [Thread-187123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:00:06.444 [INFO] [Thread-187123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:00:06.451 [DEBUG] [Thread-187123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] client lang: <none>
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] server lang: <none>
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] kex follows: False
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:00:06.452 [DEBUG] [Thread-187123] [transport.py] [_log()] Compression: none
2026-04-12T10:00:06.453 [DEBUG] [Thread-187123] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:00:06.512 [DEBUG] [Thread-187123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:00:06.513 [DEBUG] [Thread-187123] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:00:06.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:00:06.514 [DEBUG] [Thread-187123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:00:06.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:00:06.572 [DEBUG] [Thread-187123] [transport.py] [_log()] userauth is OK
2026-04-12T10:00:06.572 [DEBUG] [Thread-187123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:00:06.572 [DEBUG] [Thread-187123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:00:06.572 [DEBUG] [Thread-187123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:00:06.572 [DEBUG] [Thread-187123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:00:06.591 [INFO] [Thread-187123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:00:06.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:00:06.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:00:07.246 [DEBUG] [Thread-187125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:00:07.443 [DEBUG] [Thread-187123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:00:07.443 [DEBUG] [Thread-187123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:00:07.492 [DEBUG] [Thread-187123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:00:07.492 [DEBUG] [Thread-187123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:00:07.502 [DEBUG] [Thread-187123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:00:07.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:00:07.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:00:07.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:00:07.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:00:07.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:00:07.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:00:07.542 [DEBUG] [Thread-187123] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:00:22.298 [DEBUG] [Thread-187126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:00:27.154 [DEBUG] [Thread-187127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:00:37.335 [DEBUG] [Thread-187128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:00:37.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:00:37.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:00:37.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:00:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 0, 2), -0.002855, 100.316, 0.0, 18.9684, 10.7633, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:00:38.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:00:02
2026-04-12T10:00:39.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:00:39.513 [DEBUG] [Thread-187129] [transport.py] [_log()] starting thread (client mode): 0xa7969ff0
2026-04-12T10:00:39.513 [DEBUG] [Thread-187129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:00:39.532 [DEBUG] [Thread-187129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:00:39.533 [INFO] [Thread-187129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:00:39.535 [DEBUG] [Thread-187129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] client lang: <none>
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] server lang: <none>
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] kex follows: False
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] Compression: none
2026-04-12T10:00:39.536 [DEBUG] [Thread-187129] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:00:39.554 [DEBUG] [Thread-187129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:00:39.555 [DEBUG] [Thread-187129] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:00:39.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:00:39.556 [DEBUG] [Thread-187129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:00:39.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:00:39.558 [DEBUG] [Thread-187129] [transport.py] [_log()] userauth is OK
2026-04-12T10:00:39.559 [DEBUG] [Thread-187129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:00:39.559 [DEBUG] [Thread-187129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:00:39.559 [DEBUG] [Thread-187129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:00:39.559 [DEBUG] [Thread-187129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:00:39.584 [INFO] [Thread-187129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:00:39.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:00:40.203 [DEBUG] [Thread-187129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:00:40.203 [DEBUG] [Thread-187129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:00:40.203 [DEBUG] [Thread-187129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:00:40.244 [DEBUG] [Thread-187129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:00:40.244 [DEBUG] [Thread-187129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:00:40.248 [DEBUG] [Thread-187129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:00:40.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:00:40.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:00:40.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:00:40.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:00:40.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:00:40.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:00:40.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:00:40.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:00:40.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:00:40.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.333443 -999.00  +11.20  19.59     93  +10.20 1 2 1 3 1   888    0 1.33 17.51 ----- 20.4 19.6 274.2 23.6 15.9 -15.8 14.9 -11.9 13.3 -12.9 14.7 -12.1
2026-04-12T10:00:40.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:00:40.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:00:40.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.333443
2026-04-12T10:00:40.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:00:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:00:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:00:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:00:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:00:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:00:02', tmtdew=-0.002855, humidity=100.316, cloud=0.0, wind=18.9684, temperature=10.7633, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:00:09.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:00:40.276 [DEBUG] [Thread-187129] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:00:40.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:00:40.377 [DEBUG] [Thread-187132] [transport.py] [_log()] starting thread (client mode): 0xb0f8c4f0
2026-04-12T10:00:40.377 [DEBUG] [Thread-187132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:00:40.400 [DEBUG] [Thread-187132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:00:40.400 [INFO] [Thread-187132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:00:40.416 [DEBUG] [Thread-187132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:00:40.416 [DEBUG] [Thread-187132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] client lang: <none>
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] server lang: <none>
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] kex follows: False
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:00:40.417 [DEBUG] [Thread-187132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:00:40.418 [DEBUG] [Thread-187132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:00:40.418 [DEBUG] [Thread-187132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:00:40.418 [DEBUG] [Thread-187132] [transport.py] [_log()] Compression: none
2026-04-12T10:00:40.418 [DEBUG] [Thread-187132] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:00:40.485 [DEBUG] [Thread-187132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:00:40.486 [DEBUG] [Thread-187132] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:00:40.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:00:40.487 [DEBUG] [Thread-187132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:00:40.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:00:40.564 [DEBUG] [Thread-187132] [transport.py] [_log()] userauth is OK
2026-04-12T10:00:40.565 [DEBUG] [Thread-187132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:00:40.565 [DEBUG] [Thread-187132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:00:40.565 [DEBUG] [Thread-187132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:00:40.565 [DEBUG] [Thread-187132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:00:40.599 [INFO] [Thread-187132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:00:40.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:00:40.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:00:41.424 [DEBUG] [Thread-187132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:00:41.424 [DEBUG] [Thread-187132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:00:41.488 [DEBUG] [Thread-187132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:00:41.488 [DEBUG] [Thread-187132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:00:41.514 [DEBUG] [Thread-187132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:00:41.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:00:41.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:00:41.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:00:41.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:00:41.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:00:41.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:00:41.613 [DEBUG] [Thread-187132] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:00:51.888 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:00:51.889 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:00:52.377 [DEBUG] [Thread-187134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:01:07.432 [DEBUG] [Thread-187135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:01:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:01:11.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:01:11.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:01:12.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 0, 38), -0.11088, 100.665, 0.0, 18.5609, 11.6591, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:01:12.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:00:38
2026-04-12T10:01:13.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:01:13.459 [DEBUG] [Thread-187136] [transport.py] [_log()] starting thread (client mode): 0xb0f56470
2026-04-12T10:01:13.460 [DEBUG] [Thread-187136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:01:13.481 [DEBUG] [Thread-187136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:01:13.481 [INFO] [Thread-187136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:01:13.483 [DEBUG] [Thread-187136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] client lang: <none>
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] server lang: <none>
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] kex follows: False
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] Compression: none
2026-04-12T10:01:13.484 [DEBUG] [Thread-187136] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:01:13.498 [DEBUG] [Thread-187136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:01:13.499 [DEBUG] [Thread-187136] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:01:13.499 [DEBUG] [Thread-187136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:01:13.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:01:13.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:01:13.501 [DEBUG] [Thread-187136] [transport.py] [_log()] userauth is OK
2026-04-12T10:01:13.501 [DEBUG] [Thread-187136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:01:13.502 [DEBUG] [Thread-187136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:01:13.502 [DEBUG] [Thread-187136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:01:13.502 [DEBUG] [Thread-187136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:01:13.534 [INFO] [Thread-187136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:01:13.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:01:14.177 [DEBUG] [Thread-187136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:01:14.178 [DEBUG] [Thread-187136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:01:14.178 [DEBUG] [Thread-187136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:01:14.218 [DEBUG] [Thread-187136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:01:14.219 [DEBUG] [Thread-187136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:01:14.222 [DEBUG] [Thread-187136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:01:14.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:01:14.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:01:14.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:01:14.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:01:14.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:01:14.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:01:14.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:01:14.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:01:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:01:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.333791 -999.00  +11.40  13.58     94  +10.40 1 2 1 3 1   888    0 1.32 16.74 ----- 17.0 13.6 280.8 20.9 16.2 -11.3 15.0 -13.3 13.7 -8.6 14.9 -7.8
2026-04-12T10:01:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:01:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:01:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.333791
2026-04-12T10:01:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:01:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:01:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:01:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:01:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:01:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:00:38', tmtdew=-0.11088, humidity=100.665, cloud=0.0, wind=18.5609, temperature=11.6591, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:00:39.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:01:14.259 [DEBUG] [Thread-187136] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:01:14.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:01:14.354 [DEBUG] [Thread-187139] [transport.py] [_log()] starting thread (client mode): 0xb0f56b00
2026-04-12T10:01:14.354 [DEBUG] [Thread-187139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:01:14.368 [DEBUG] [Thread-187139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:01:14.369 [INFO] [Thread-187139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:01:14.385 [DEBUG] [Thread-187139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] client lang: <none>
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] server lang: <none>
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] kex follows: False
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:01:14.386 [DEBUG] [Thread-187139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:01:14.387 [DEBUG] [Thread-187139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:01:14.387 [DEBUG] [Thread-187139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:01:14.387 [DEBUG] [Thread-187139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:01:14.387 [DEBUG] [Thread-187139] [transport.py] [_log()] Compression: none
2026-04-12T10:01:14.387 [DEBUG] [Thread-187139] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:01:14.436 [DEBUG] [Thread-187139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:01:14.437 [DEBUG] [Thread-187139] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:01:14.438 [DEBUG] [Thread-187139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:01:14.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:01:14.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:01:14.495 [DEBUG] [Thread-187139] [transport.py] [_log()] userauth is OK
2026-04-12T10:01:14.495 [DEBUG] [Thread-187139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:01:14.496 [DEBUG] [Thread-187139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:01:14.496 [DEBUG] [Thread-187139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:01:14.496 [DEBUG] [Thread-187139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:01:14.514 [INFO] [Thread-187139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:01:14.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:01:14.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:01:15.384 [DEBUG] [Thread-187139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:01:15.384 [DEBUG] [Thread-187139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:01:15.432 [DEBUG] [Thread-187139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:01:15.432 [DEBUG] [Thread-187139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:01:15.442 [DEBUG] [Thread-187139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:01:15.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:01:15.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:01:15.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:01:15.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:01:15.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:01:15.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:01:15.479 [DEBUG] [Thread-187139] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:01:22.470 [DEBUG] [Thread-187141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:01:27.187 [DEBUG] [Thread-187142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:01:37.534 [DEBUG] [Thread-187143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:01:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:01:45.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:01:45.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:01:46.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 1, 14), -0.005555, 100.332, 0.0, 20.1679, 10.9959, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:01:46.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:01:14
2026-04-12T10:01:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:01:47.368 [DEBUG] [Thread-187144] [transport.py] [_log()] starting thread (client mode): 0xae5e5390
2026-04-12T10:01:47.368 [DEBUG] [Thread-187144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:01:47.389 [DEBUG] [Thread-187144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:01:47.389 [INFO] [Thread-187144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:01:47.392 [DEBUG] [Thread-187144] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:01:47.392 [DEBUG] [Thread-187144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:01:47.392 [DEBUG] [Thread-187144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] client lang: <none>
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] server lang: <none>
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] kex follows: False
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] Compression: none
2026-04-12T10:01:47.393 [DEBUG] [Thread-187144] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:01:47.410 [DEBUG] [Thread-187144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:01:47.410 [DEBUG] [Thread-187144] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:01:47.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:01:47.411 [DEBUG] [Thread-187144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:01:47.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:01:47.414 [DEBUG] [Thread-187144] [transport.py] [_log()] userauth is OK
2026-04-12T10:01:47.414 [DEBUG] [Thread-187144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:01:47.414 [DEBUG] [Thread-187144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:01:47.414 [DEBUG] [Thread-187144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:01:47.414 [DEBUG] [Thread-187144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:01:47.451 [INFO] [Thread-187144] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:01:47.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:01:48.610 [DEBUG] [Thread-187144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:01:48.610 [DEBUG] [Thread-187144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:01:48.610 [DEBUG] [Thread-187144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:01:48.651 [DEBUG] [Thread-187144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:01:48.651 [DEBUG] [Thread-187144] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:01:48.655 [DEBUG] [Thread-187144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:01:48.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:01:48.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:01:48.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:01:48.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:01:48.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:01:48.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:01:48.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:01:48.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:01:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:01:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.334138 -999.00  +11.30  23.98     93  +10.30 1 2 1 3 1   888    0 1.39 18.73 ----- 21.9 24.0 275.4 26.0 16.0 -18.3 14.8 -20.6 13.6 -18.0 14.8 -14.6
2026-04-12T10:01:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:01:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:01:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.334138
2026-04-12T10:01:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:01:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:01:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:01:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:01:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:01:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:01:14', tmtdew=-0.005555, humidity=100.332, cloud=0.0, wind=20.1679, temperature=10.9959, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:01:09.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:01:48.682 [DEBUG] [Thread-187144] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:01:48.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:01:48.779 [DEBUG] [Thread-187147] [transport.py] [_log()] starting thread (client mode): 0xae5e6aa0
2026-04-12T10:01:48.779 [DEBUG] [Thread-187147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:01:48.798 [DEBUG] [Thread-187147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:01:48.798 [INFO] [Thread-187147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] client lang: <none>
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] server lang: <none>
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] kex follows: False
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:01:48.810 [DEBUG] [Thread-187147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:01:48.811 [DEBUG] [Thread-187147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:01:48.811 [DEBUG] [Thread-187147] [transport.py] [_log()] Compression: none
2026-04-12T10:01:48.811 [DEBUG] [Thread-187147] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:01:48.873 [DEBUG] [Thread-187147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:01:48.873 [DEBUG] [Thread-187147] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:01:48.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:01:48.874 [DEBUG] [Thread-187147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:01:48.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:01:48.940 [DEBUG] [Thread-187147] [transport.py] [_log()] userauth is OK
2026-04-12T10:01:48.941 [DEBUG] [Thread-187147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:01:48.941 [DEBUG] [Thread-187147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:01:48.941 [DEBUG] [Thread-187147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:01:48.941 [DEBUG] [Thread-187147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:01:48.964 [INFO] [Thread-187147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:01:48.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:01:48.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:01:49.764 [DEBUG] [Thread-187147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:01:49.764 [DEBUG] [Thread-187147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:01:49.817 [DEBUG] [Thread-187147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:01:49.818 [DEBUG] [Thread-187147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:01:49.831 [DEBUG] [Thread-187147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:01:49.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:01:49.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:01:49.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:01:49.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:01:49.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:01:49.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:01:49.886 [DEBUG] [Thread-187147] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:01:52.030 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:01:52.031 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:01:52.571 [DEBUG] [Thread-187149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:07.628 [DEBUG] [Thread-187150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:02:19.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:02:19.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:02:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 1, 49), -0.10602, 100.631, 0.0, 25.4758, 11.7585, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:02:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:01:49
2026-04-12T10:02:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:02:21.740 [DEBUG] [Thread-187151] [transport.py] [_log()] starting thread (client mode): 0xb0f434c0
2026-04-12T10:02:21.740 [DEBUG] [Thread-187151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:02:21.761 [DEBUG] [Thread-187151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:02:21.761 [INFO] [Thread-187151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:02:21.764 [DEBUG] [Thread-187151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:02:21.764 [DEBUG] [Thread-187151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:02:21.764 [DEBUG] [Thread-187151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] client lang: <none>
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] server lang: <none>
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] kex follows: False
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] Compression: none
2026-04-12T10:02:21.765 [DEBUG] [Thread-187151] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:02:21.784 [DEBUG] [Thread-187151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:02:21.784 [DEBUG] [Thread-187151] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:02:21.785 [DEBUG] [Thread-187151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:02:21.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:02:21.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:02:21.787 [DEBUG] [Thread-187151] [transport.py] [_log()] userauth is OK
2026-04-12T10:02:21.787 [DEBUG] [Thread-187151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:02:21.787 [DEBUG] [Thread-187151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:02:21.787 [DEBUG] [Thread-187151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:02:21.787 [DEBUG] [Thread-187151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:02:21.811 [INFO] [Thread-187151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:02:21.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:02:22.467 [DEBUG] [Thread-187151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:02:22.467 [DEBUG] [Thread-187151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:02:22.467 [DEBUG] [Thread-187151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:02:22.508 [DEBUG] [Thread-187151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:02:22.508 [DEBUG] [Thread-187151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:02:22.511 [DEBUG] [Thread-187151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:02:22.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:02:22.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:02:22.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:02:22.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:02:22.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:02:22.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:02:22.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:02:22.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:02:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:02:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.334485 -999.00  +11.20  16.31     93  +10.20 1 2 1 3 1   888    0 1.34 16.89 ----- 20.0 16.3 278.0 23.9 15.8 -20.3 14.9 -19.8 13.3 -20.4 14.5 -20.0
2026-04-12T10:02:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:02:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:02:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.334485
2026-04-12T10:02:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:02:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:02:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:02:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:02:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:02:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:01:49', tmtdew=-0.10602, humidity=100.631, cloud=0.0, wind=25.4758, temperature=11.7585, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:01:39.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:02:22.541 [DEBUG] [Thread-187151] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:02:22.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:02:22.636 [DEBUG] [Thread-187154] [transport.py] [_log()] starting thread (client mode): 0xae5b33a0
2026-04-12T10:02:22.636 [DEBUG] [Thread-187154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:02:22.652 [DEBUG] [Thread-187154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:02:22.652 [INFO] [Thread-187154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:02:22.659 [DEBUG] [Thread-187154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] client lang: <none>
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] server lang: <none>
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] kex follows: False
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] Compression: none
2026-04-12T10:02:22.660 [DEBUG] [Thread-187154] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:02:22.667 [DEBUG] [Thread-187156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:22.722 [DEBUG] [Thread-187154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:02:22.722 [DEBUG] [Thread-187154] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:02:22.723 [DEBUG] [Thread-187154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:02:22.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:02:22.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:02:22.778 [DEBUG] [Thread-187154] [transport.py] [_log()] userauth is OK
2026-04-12T10:02:22.779 [DEBUG] [Thread-187154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:02:22.779 [DEBUG] [Thread-187154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:02:22.779 [DEBUG] [Thread-187154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:02:22.779 [DEBUG] [Thread-187154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:02:22.803 [INFO] [Thread-187154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:02:22.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:02:22.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:02:23.645 [DEBUG] [Thread-187154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:02:23.645 [DEBUG] [Thread-187154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:02:23.693 [DEBUG] [Thread-187154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:02:23.693 [DEBUG] [Thread-187154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:02:23.702 [DEBUG] [Thread-187154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:02:23.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:02:23.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:02:23.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:02:23.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:02:23.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:02:23.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:02:23.739 [DEBUG] [Thread-187154] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:02:27.232 [DEBUG] [Thread-187157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:37.726 [DEBUG] [Thread-187158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:52.173 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:52.174 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:52.752 [DEBUG] [Thread-187159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:02:53.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:02:53.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:02:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:02:55.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 2, 26), 0.002085, 100.282, 0.0, 20.3796, 11.0794, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:02:55.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:02:26
2026-04-12T10:02:55.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:02:55.595 [DEBUG] [Thread-187160] [transport.py] [_log()] starting thread (client mode): 0xae5e5a80
2026-04-12T10:02:55.595 [DEBUG] [Thread-187160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:02:55.622 [DEBUG] [Thread-187160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:02:55.622 [INFO] [Thread-187160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] client lang: <none>
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] server lang: <none>
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] kex follows: False
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:02:55.626 [DEBUG] [Thread-187160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:02:55.627 [DEBUG] [Thread-187160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:02:55.627 [DEBUG] [Thread-187160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:02:55.627 [DEBUG] [Thread-187160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:02:55.627 [DEBUG] [Thread-187160] [transport.py] [_log()] Compression: none
2026-04-12T10:02:55.627 [DEBUG] [Thread-187160] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:02:55.645 [DEBUG] [Thread-187160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:02:55.645 [DEBUG] [Thread-187160] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:02:55.645 [DEBUG] [Thread-187160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:02:55.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:02:55.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:02:55.646 [DEBUG] [Thread-187160] [transport.py] [_log()] userauth is OK
2026-04-12T10:02:55.646 [DEBUG] [Thread-187160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:02:55.646 [DEBUG] [Thread-187160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:02:55.646 [DEBUG] [Thread-187160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:02:55.646 [DEBUG] [Thread-187160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:02:55.662 [INFO] [Thread-187160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:02:55.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:02:56.282 [DEBUG] [Thread-187160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:02:56.282 [DEBUG] [Thread-187160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:02:56.282 [DEBUG] [Thread-187160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:02:56.323 [DEBUG] [Thread-187160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:02:56.323 [DEBUG] [Thread-187160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:02:56.326 [DEBUG] [Thread-187160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:02:56.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:02:56.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:02:56.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:02:56.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:02:56.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:02:56.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:02:56.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.335180 -999.00  +11.40  16.65     93  +10.40 1 2 1 3 1   888    0 1.38 17.37 ----- 14.6 16.6 297.4 24.2 16.0 -18.2 15.0 -16.8 13.4 -16.3 14.8 -16.7
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.335180
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:02:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:02:26', tmtdew=0.002085, humidity=100.282, cloud=0.0, wind=20.3796, temperature=11.0794, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:02:39.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:02:56.348 [DEBUG] [Thread-187160] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:02:56.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:02:56.450 [DEBUG] [Thread-187163] [transport.py] [_log()] starting thread (client mode): 0xae5e7160
2026-04-12T10:02:56.450 [DEBUG] [Thread-187163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:02:56.484 [DEBUG] [Thread-187163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:02:56.484 [INFO] [Thread-187163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] client lang: <none>
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] server lang: <none>
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] kex follows: False
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] Compression: none
2026-04-12T10:02:56.510 [DEBUG] [Thread-187163] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:02:56.583 [DEBUG] [Thread-187163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:02:56.583 [DEBUG] [Thread-187163] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:02:56.583 [DEBUG] [Thread-187163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:02:56.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:02:56.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:02:56.677 [DEBUG] [Thread-187163] [transport.py] [_log()] userauth is OK
2026-04-12T10:02:56.677 [DEBUG] [Thread-187163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:02:56.677 [DEBUG] [Thread-187163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:02:56.677 [DEBUG] [Thread-187163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:02:56.677 [DEBUG] [Thread-187163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:02:56.709 [INFO] [Thread-187163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:02:56.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:02:56.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:02:57.552 [DEBUG] [Thread-187163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:02:57.552 [DEBUG] [Thread-187163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:02:57.617 [DEBUG] [Thread-187163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:02:57.617 [DEBUG] [Thread-187163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:02:57.644 [DEBUG] [Thread-187163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:02:57.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:02:57.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:02:57.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:02:57.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:02:57.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:02:57.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:02:57.745 [DEBUG] [Thread-187163] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:03:07.777 [DEBUG] [Thread-187165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:03:22.813 [DEBUG] [Thread-187166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:03:27.261 [DEBUG] [Thread-187167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:03:27.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:03:27.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:03:27.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:03:29.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 3, 1), -0.00793, 100.349, 0.0, 20.9794, 11.096, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:03:29.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:03:01
2026-04-12T10:03:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:03:30.211 [DEBUG] [Thread-187168] [transport.py] [_log()] starting thread (client mode): 0xae562bf0
2026-04-12T10:03:30.211 [DEBUG] [Thread-187168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:03:30.231 [DEBUG] [Thread-187168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:03:30.231 [INFO] [Thread-187168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:03:30.234 [DEBUG] [Thread-187168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] client lang: <none>
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] server lang: <none>
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] kex follows: False
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] Compression: none
2026-04-12T10:03:30.235 [DEBUG] [Thread-187168] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:03:30.254 [DEBUG] [Thread-187168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:03:30.254 [DEBUG] [Thread-187168] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:03:30.254 [DEBUG] [Thread-187168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:03:30.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:03:30.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:03:30.256 [DEBUG] [Thread-187168] [transport.py] [_log()] userauth is OK
2026-04-12T10:03:30.256 [DEBUG] [Thread-187168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:03:30.256 [DEBUG] [Thread-187168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:03:30.256 [DEBUG] [Thread-187168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:03:30.256 [DEBUG] [Thread-187168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:03:30.271 [INFO] [Thread-187168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:03:30.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:03:31.090 [DEBUG] [Thread-187168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:03:31.090 [DEBUG] [Thread-187168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:03:31.090 [DEBUG] [Thread-187168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:03:31.130 [DEBUG] [Thread-187168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:03:31.131 [DEBUG] [Thread-187168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:03:31.133 [DEBUG] [Thread-187168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:03:31.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:03:31.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:03:31.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:03:31.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:03:31.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:03:31.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:03:31.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:03:31.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:03:31.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:03:31.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.335527 -999.00  +11.60  13.56     94  +10.70 1 2 1 3 1   888    0 1.40 17.77 ----- 14.8 13.6 285.5 20.3 16.3 -19.1 15.2 -18.3 13.8 -16.2 14.9 -17.1
2026-04-12T10:03:31.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:03:31.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:03:31.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.335527
2026-04-12T10:03:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:03:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:03:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:03:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:03:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:03:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:03:01', tmtdew=-0.00793, humidity=100.349, cloud=0.0, wind=20.9794, temperature=11.096, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:03:09.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:03:31.153 [DEBUG] [Thread-187168] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:03:31.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:03:31.234 [DEBUG] [Thread-187171] [transport.py] [_log()] starting thread (client mode): 0xae562ad0
2026-04-12T10:03:31.235 [DEBUG] [Thread-187171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:03:31.250 [DEBUG] [Thread-187171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:03:31.250 [INFO] [Thread-187171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] client lang: <none>
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] server lang: <none>
2026-04-12T10:03:31.257 [DEBUG] [Thread-187171] [transport.py] [_log()] kex follows: False
2026-04-12T10:03:31.258 [DEBUG] [Thread-187171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:03:31.258 [DEBUG] [Thread-187171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:03:31.258 [DEBUG] [Thread-187171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:03:31.258 [DEBUG] [Thread-187171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:03:31.258 [DEBUG] [Thread-187171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:03:31.258 [DEBUG] [Thread-187171] [transport.py] [_log()] Compression: none
2026-04-12T10:03:31.258 [DEBUG] [Thread-187171] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:03:31.315 [DEBUG] [Thread-187171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:03:31.315 [DEBUG] [Thread-187171] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:03:31.315 [DEBUG] [Thread-187171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:03:31.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:03:31.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:03:31.373 [DEBUG] [Thread-187171] [transport.py] [_log()] userauth is OK
2026-04-12T10:03:31.373 [DEBUG] [Thread-187171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:03:31.373 [DEBUG] [Thread-187171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:03:31.373 [DEBUG] [Thread-187171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:03:31.373 [DEBUG] [Thread-187171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:03:31.387 [INFO] [Thread-187171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:03:31.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:03:31.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:03:32.215 [DEBUG] [Thread-187171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:03:32.215 [DEBUG] [Thread-187171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:03:32.262 [DEBUG] [Thread-187171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:03:32.262 [DEBUG] [Thread-187171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:03:32.270 [DEBUG] [Thread-187171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:03:32.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:03:32.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:03:32.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
2026-04-12T10:03:32.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:03:32.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:03:32.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:03:32.304 [DEBUG] [Thread-187171] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:03:37.843 [DEBUG] [Thread-187173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:03:52.318 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:03:52.319 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:03:52.888 [DEBUG] [Thread-187174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:04:02.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:04:02.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:04:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:04:03.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 3, 37), -0.11093, 100.664, 0.0, 19.4429, 11.7252, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:04:03.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:03:37
2026-04-12T10:04:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:04:04.876 [DEBUG] [Thread-187175] [transport.py] [_log()] starting thread (client mode): 0xb0f426b0
2026-04-12T10:04:04.876 [DEBUG] [Thread-187175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:04:04.897 [DEBUG] [Thread-187175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:04:04.897 [INFO] [Thread-187175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:04:04.900 [DEBUG] [Thread-187175] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] client lang: <none>
2026-04-12T10:04:04.901 [DEBUG] [Thread-187175] [transport.py] [_log()] server lang: <none>
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] kex follows: False
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] Compression: none
2026-04-12T10:04:04.902 [DEBUG] [Thread-187175] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:04:04.921 [DEBUG] [Thread-187175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:04:04.921 [DEBUG] [Thread-187175] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:04:04.922 [DEBUG] [Thread-187175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:04:04.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:04:04.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:04:04.924 [DEBUG] [Thread-187175] [transport.py] [_log()] userauth is OK
2026-04-12T10:04:04.925 [DEBUG] [Thread-187175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:04:04.925 [DEBUG] [Thread-187175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:04:04.925 [DEBUG] [Thread-187175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:04:04.925 [DEBUG] [Thread-187175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:04:04.951 [INFO] [Thread-187175] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:04:04.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:04:05.768 [DEBUG] [Thread-187175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:04:05.768 [DEBUG] [Thread-187175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:04:05.769 [DEBUG] [Thread-187175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:04:05.809 [DEBUG] [Thread-187175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:04:05.809 [DEBUG] [Thread-187175] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:04:05.812 [DEBUG] [Thread-187175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:04:05.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:04:05.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:04:05.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:04:05.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:04:05.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:04:05.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:04:05.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.335874 -999.00  +11.60  17.59     93  +10.60 1 2 1 3 1   888    0 1.39 17.65 ----- 19.7 17.6 288.4 24.4 16.4 -19.9 15.3 -17.7 13.7 -17.0 15.1 -18.1
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.335874
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:04:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:04:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:03:37', tmtdew=-0.11093, humidity=100.664, cloud=0.0, wind=19.4429, temperature=11.7252, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:03:39.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:04:05.832 [DEBUG] [Thread-187175] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:04:05.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:04:05.930 [DEBUG] [Thread-187178] [transport.py] [_log()] starting thread (client mode): 0xae5e5a80
2026-04-12T10:04:05.930 [DEBUG] [Thread-187178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:04:05.959 [DEBUG] [Thread-187178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:04:05.959 [INFO] [Thread-187178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] client lang: <none>
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] server lang: <none>
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] kex follows: False
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:04:05.982 [DEBUG] [Thread-187178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:04:05.983 [DEBUG] [Thread-187178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:04:05.983 [DEBUG] [Thread-187178] [transport.py] [_log()] Compression: none
2026-04-12T10:04:05.983 [DEBUG] [Thread-187178] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:04:06.053 [DEBUG] [Thread-187178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:04:06.053 [DEBUG] [Thread-187178] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:04:06.053 [DEBUG] [Thread-187178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:04:06.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:04:06.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:04:06.142 [DEBUG] [Thread-187178] [transport.py] [_log()] userauth is OK
2026-04-12T10:04:06.142 [DEBUG] [Thread-187178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:04:06.142 [DEBUG] [Thread-187178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:04:06.142 [DEBUG] [Thread-187178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:04:06.142 [DEBUG] [Thread-187178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:04:06.166 [INFO] [Thread-187178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:04:06.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:04:06.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:04:07.042 [DEBUG] [Thread-187178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:04:07.042 [DEBUG] [Thread-187178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:04:07.090 [DEBUG] [Thread-187178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:04:07.090 [DEBUG] [Thread-187178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:04:07.099 [DEBUG] [Thread-187178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:04:07.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:04:07.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:04:07.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:04:07.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:04:07.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:04:07.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:04:07.137 [DEBUG] [Thread-187178] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:04:07.918 [DEBUG] [Thread-187180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:04:22.954 [DEBUG] [Thread-187181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:04:27.288 [DEBUG] [Thread-187182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:04:37.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:04:37.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:04:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:04:37.984 [DEBUG] [Thread-187183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:04:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 4, 13), -0.008185, 100.349, 0.0, 21.9503, 11.1452, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:04:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:04:13
2026-04-12T10:04:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:04:38.926 [DEBUG] [Thread-187184] [transport.py] [_log()] starting thread (client mode): 0xae5b2020
2026-04-12T10:04:38.926 [DEBUG] [Thread-187184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:04:38.945 [DEBUG] [Thread-187184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:04:38.946 [INFO] [Thread-187184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:04:38.949 [DEBUG] [Thread-187184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:04:38.949 [DEBUG] [Thread-187184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:04:38.949 [DEBUG] [Thread-187184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:04:38.949 [DEBUG] [Thread-187184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:38.949 [DEBUG] [Thread-187184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] client lang: <none>
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] server lang: <none>
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] kex follows: False
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] Compression: none
2026-04-12T10:04:38.950 [DEBUG] [Thread-187184] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:04:38.970 [DEBUG] [Thread-187184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:04:38.970 [DEBUG] [Thread-187184] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:04:38.971 [DEBUG] [Thread-187184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:04:38.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:04:38.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:04:38.973 [DEBUG] [Thread-187184] [transport.py] [_log()] userauth is OK
2026-04-12T10:04:38.973 [DEBUG] [Thread-187184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:04:38.973 [DEBUG] [Thread-187184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:04:38.973 [DEBUG] [Thread-187184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:04:38.973 [DEBUG] [Thread-187184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:04:39.009 [INFO] [Thread-187184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:04:39.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:04:39.808 [DEBUG] [Thread-187184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:04:39.808 [DEBUG] [Thread-187184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:04:39.808 [DEBUG] [Thread-187184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:04:39.849 [DEBUG] [Thread-187184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:04:39.849 [DEBUG] [Thread-187184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:04:39.852 [DEBUG] [Thread-187184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:04:39.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:04:39.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:04:39.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:04:39.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:04:39.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:04:39.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:04:39.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:04:39.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.336221 -999.00  +11.40  19.67     93  +10.30 1 2 1 3 1   888    0 1.39 17.25 ----- 20.0 19.7 284.0 26.2 16.4 -20.7 15.3 -18.7 13.7 -19.1 15.1 -18.4
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.336221
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:04:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:04:13', tmtdew=-0.008185, humidity=100.349, cloud=0.0, wind=21.9503, temperature=11.1452, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:04:09.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:04:39.877 [DEBUG] [Thread-187184] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:04:39.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:04:39.970 [DEBUG] [Thread-187187] [transport.py] [_log()] starting thread (client mode): 0xae5e7c10
2026-04-12T10:04:39.970 [DEBUG] [Thread-187187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:04:39.993 [DEBUG] [Thread-187187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:04:39.994 [INFO] [Thread-187187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] client lang: <none>
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] server lang: <none>
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] kex follows: False
2026-04-12T10:04:40.010 [DEBUG] [Thread-187187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:04:40.011 [DEBUG] [Thread-187187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:04:40.011 [DEBUG] [Thread-187187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:04:40.011 [DEBUG] [Thread-187187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:04:40.011 [DEBUG] [Thread-187187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:04:40.011 [DEBUG] [Thread-187187] [transport.py] [_log()] Compression: none
2026-04-12T10:04:40.011 [DEBUG] [Thread-187187] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:04:40.076 [DEBUG] [Thread-187187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:04:40.077 [DEBUG] [Thread-187187] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:04:40.077 [DEBUG] [Thread-187187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:04:40.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:04:40.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:04:40.153 [DEBUG] [Thread-187187] [transport.py] [_log()] userauth is OK
2026-04-12T10:04:40.154 [DEBUG] [Thread-187187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:04:40.154 [DEBUG] [Thread-187187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:04:40.154 [DEBUG] [Thread-187187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:04:40.154 [DEBUG] [Thread-187187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:04:40.186 [INFO] [Thread-187187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:04:40.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:04:40.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:04:41.004 [DEBUG] [Thread-187187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:04:41.004 [DEBUG] [Thread-187187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:04:41.068 [DEBUG] [Thread-187187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:04:41.068 [DEBUG] [Thread-187187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:04:41.091 [DEBUG] [Thread-187187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:04:41.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:04: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')
2026-04-12T10:04:41.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:04:41.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:04:41.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:04:41.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:04:41.186 [DEBUG] [Thread-187187] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:04:52.462 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:04:52.463 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:04:53.010 [DEBUG] [Thread-187189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:05:08.041 [DEBUG] [Thread-187190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:05:11.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:05:11.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:05:11.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:05:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 4, 52), -0.12148, 100.73, 0.0, 19.2312, 12.0567, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:05:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:04:52
2026-04-12T10:05:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:05:12.960 [DEBUG] [Thread-187191] [transport.py] [_log()] starting thread (client mode): 0xae5e6fe0
2026-04-12T10:05:12.960 [DEBUG] [Thread-187191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:05:12.981 [DEBUG] [Thread-187191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:05:12.981 [INFO] [Thread-187191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] client lang: <none>
2026-04-12T10:05:12.985 [DEBUG] [Thread-187191] [transport.py] [_log()] server lang: <none>
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] kex follows: False
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] Compression: none
2026-04-12T10:05:12.986 [DEBUG] [Thread-187191] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:05:13.004 [DEBUG] [Thread-187191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:05:13.004 [DEBUG] [Thread-187191] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:05:13.005 [DEBUG] [Thread-187191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:05:13.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:05:13.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:05:13.007 [DEBUG] [Thread-187191] [transport.py] [_log()] userauth is OK
2026-04-12T10:05:13.007 [DEBUG] [Thread-187191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:05:13.007 [DEBUG] [Thread-187191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:05:13.007 [DEBUG] [Thread-187191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:05:13.007 [DEBUG] [Thread-187191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:05:13.030 [INFO] [Thread-187191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:05:13.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:05:14.397 [DEBUG] [Thread-187191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:05:14.397 [DEBUG] [Thread-187191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:05:14.398 [DEBUG] [Thread-187191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:05:14.437 [DEBUG] [Thread-187191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:05:14.438 [DEBUG] [Thread-187191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:05:14.441 [DEBUG] [Thread-187191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:05:14.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:05:14.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:05:14.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:05:14.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:05:14.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:05:14.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:05:14.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:05:14.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:05:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:05:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.336569 -999.00  +11.30  21.67     92  +10.20 1 2 1 3 1   888    0 1.47 19.46 ----- 20.1 21.7 290.4 26.0 16.6 -20.9 15.4 -19.3 13.7 -19.4 15.2 -18.8
2026-04-12T10:05:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:05:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:05:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.336569
2026-04-12T10:05:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:05:14.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:05:14.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:05:14.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:05:14.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:05:14.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:04:52', tmtdew=-0.12148, humidity=100.73, cloud=0.0, wind=19.2312, temperature=12.0567, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:04:39.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:05:14.484 [DEBUG] [Thread-187191] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:05:14.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:05:14.582 [DEBUG] [Thread-187194] [transport.py] [_log()] starting thread (client mode): 0xb0f54910
2026-04-12T10:05:14.582 [DEBUG] [Thread-187194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:05:14.597 [DEBUG] [Thread-187194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:05:14.597 [INFO] [Thread-187194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:05:14.604 [DEBUG] [Thread-187194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] client lang: <none>
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] server lang: <none>
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] kex follows: False
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] Compression: none
2026-04-12T10:05:14.605 [DEBUG] [Thread-187194] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:05:14.662 [DEBUG] [Thread-187194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:05:14.662 [DEBUG] [Thread-187194] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:05:14.663 [DEBUG] [Thread-187194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:05:14.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:05:14.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:05:14.722 [DEBUG] [Thread-187194] [transport.py] [_log()] userauth is OK
2026-04-12T10:05:14.723 [DEBUG] [Thread-187194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:05:14.723 [DEBUG] [Thread-187194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:05:14.723 [DEBUG] [Thread-187194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:05:14.723 [DEBUG] [Thread-187194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:05:14.741 [INFO] [Thread-187194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:05:14.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:05:14.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:05:15.570 [DEBUG] [Thread-187194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:05:15.570 [DEBUG] [Thread-187194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:05:15.619 [DEBUG] [Thread-187194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:05:15.619 [DEBUG] [Thread-187194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:05:15.628 [DEBUG] [Thread-187194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:05:15.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:05:15.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:05:15.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:05:15.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:05:15.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:05:15.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:05:15.663 [DEBUG] [Thread-187194] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:05:23.069 [DEBUG] [Thread-187196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:05:27.320 [DEBUG] [Thread-187197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:05:38.114 [DEBUG] [Thread-187198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:05:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:05:45.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:05:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:05:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 5, 28), -0.005765, 100.332, 0.0, 19.1448, 11.0949, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:05:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:05:28
2026-04-12T10:05:47.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:05:47.472 [DEBUG] [Thread-187199] [transport.py] [_log()] starting thread (client mode): 0xae5b2d40
2026-04-12T10:05:47.473 [DEBUG] [Thread-187199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:05:47.493 [DEBUG] [Thread-187199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:05:47.493 [INFO] [Thread-187199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:05:47.496 [DEBUG] [Thread-187199] [transport.py] [_log()] client lang: <none>
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] server lang: <none>
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] kex follows: False
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] Compression: none
2026-04-12T10:05:47.497 [DEBUG] [Thread-187199] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:05:47.509 [DEBUG] [Thread-187199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:05:47.510 [DEBUG] [Thread-187199] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:05:47.510 [DEBUG] [Thread-187199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:05:47.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:05:47.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:05:47.511 [DEBUG] [Thread-187199] [transport.py] [_log()] userauth is OK
2026-04-12T10:05:47.511 [DEBUG] [Thread-187199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:05:47.511 [DEBUG] [Thread-187199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:05:47.511 [DEBUG] [Thread-187199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:05:47.511 [DEBUG] [Thread-187199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:05:47.522 [INFO] [Thread-187199] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:05:47.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:05:48.345 [DEBUG] [Thread-187199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:05:48.345 [DEBUG] [Thread-187199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:05:48.345 [DEBUG] [Thread-187199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:05:48.385 [DEBUG] [Thread-187199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:05:48.385 [DEBUG] [Thread-187199] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:05:48.388 [DEBUG] [Thread-187199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:05:48.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:05:48.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:05:48.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:05:48.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:05:48.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:05:48.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:05:48.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:05:48.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:05:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:05:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.336916 -999.00  +11.40  18.68     93  +10.30 1 2 1 3 1   888    0 1.51 20.70 ----- 17.4 18.7 272.8 23.3 16.6 -21.5 15.4 -19.0 13.9 -17.4 15.2 -18.9
2026-04-12T10:05:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:05:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:05:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.336916
2026-04-12T10:05:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:05:48.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:05:48.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:05:48.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:05:48.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:05:48.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:05:28', tmtdew=-0.005765, humidity=100.332, cloud=0.0, wind=19.1448, temperature=11.0949, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:05:09.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:05:48.409 [DEBUG] [Thread-187199] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:05:48.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:05:48.492 [DEBUG] [Thread-187202] [transport.py] [_log()] starting thread (client mode): 0xae5b0250
2026-04-12T10:05:48.493 [DEBUG] [Thread-187202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:05:48.509 [DEBUG] [Thread-187202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:05:48.509 [INFO] [Thread-187202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] client lang: <none>
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] server lang: <none>
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] kex follows: False
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] Compression: none
2026-04-12T10:05:48.519 [DEBUG] [Thread-187202] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:05:48.583 [DEBUG] [Thread-187202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:05:48.584 [DEBUG] [Thread-187202] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:05:48.584 [DEBUG] [Thread-187202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:05:48.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:05:48.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:05:48.650 [DEBUG] [Thread-187202] [transport.py] [_log()] userauth is OK
2026-04-12T10:05:48.650 [DEBUG] [Thread-187202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:05:48.650 [DEBUG] [Thread-187202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:05:48.650 [DEBUG] [Thread-187202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:05:48.650 [DEBUG] [Thread-187202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:05:48.666 [INFO] [Thread-187202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:05:48.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:05:48.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:05:49.471 [DEBUG] [Thread-187202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:05:49.471 [DEBUG] [Thread-187202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:05:49.527 [DEBUG] [Thread-187202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:05:49.527 [DEBUG] [Thread-187202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:05:49.544 [DEBUG] [Thread-187202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:05:49.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:05:49.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:05:49.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:05:49.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:05:49.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:05:49.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:05:49.613 [DEBUG] [Thread-187202] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:05:52.604 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:05:52.605 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:05:53.144 [DEBUG] [Thread-187204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:08.180 [DEBUG] [Thread-187205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:19.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:06:19.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:06:19.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:06:21.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 6, 3), -0.005705, 100.332, 0.0, 18.1922, 11.0618, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:06:21.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:06:03
2026-04-12T10:06:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:06:21.663 [DEBUG] [Thread-187206] [transport.py] [_log()] starting thread (client mode): 0xa793ba00
2026-04-12T10:06:21.663 [DEBUG] [Thread-187206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:06:21.683 [DEBUG] [Thread-187206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:06:21.683 [INFO] [Thread-187206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:06:21.686 [DEBUG] [Thread-187206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] client lang: <none>
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] server lang: <none>
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] kex follows: False
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] Compression: none
2026-04-12T10:06:21.687 [DEBUG] [Thread-187206] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:06:21.705 [DEBUG] [Thread-187206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:06:21.705 [DEBUG] [Thread-187206] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:06:21.705 [DEBUG] [Thread-187206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:06:21.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:06:21.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:06:21.706 [DEBUG] [Thread-187206] [transport.py] [_log()] userauth is OK
2026-04-12T10:06:21.706 [DEBUG] [Thread-187206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:06:21.706 [DEBUG] [Thread-187206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:06:21.706 [DEBUG] [Thread-187206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:06:21.706 [DEBUG] [Thread-187206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:06:21.717 [INFO] [Thread-187206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:06:21.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:06:22.476 [DEBUG] [Thread-187206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:06:22.476 [DEBUG] [Thread-187206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:06:22.476 [DEBUG] [Thread-187206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:06:22.517 [DEBUG] [Thread-187206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:06:22.517 [DEBUG] [Thread-187206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:06:22.520 [DEBUG] [Thread-187206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:06:22.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:06:22.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:06:22.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:06:22.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:06:22.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:06:22.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:06:22.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:06:22.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:06:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:06:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.337263 -999.00  +11.30  22.14     93  +10.20 1 2 1 3 1   888    0 1.53 21.23 ----- 22.1 22.1 271.6 26.6 16.6 -21.8 15.4 -18.7 13.8 -19.5 15.2 -19.2
2026-04-12T10:06:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:06:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:06:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.337263
2026-04-12T10:06:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:06:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:06:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:06:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:06:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:06:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:06:03', tmtdew=-0.005705, humidity=100.332, cloud=0.0, wind=18.1922, temperature=11.0618, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:05:39.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:06:22.542 [DEBUG] [Thread-187206] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:06:22.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:06:22.630 [DEBUG] [Thread-187209] [transport.py] [_log()] starting thread (client mode): 0xa793bb80
2026-04-12T10:06:22.630 [DEBUG] [Thread-187209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:06:22.653 [DEBUG] [Thread-187209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:06:22.653 [INFO] [Thread-187209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:06:22.669 [DEBUG] [Thread-187209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:06:22.669 [DEBUG] [Thread-187209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:06:22.669 [DEBUG] [Thread-187209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:06:22.669 [DEBUG] [Thread-187209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:22.669 [DEBUG] [Thread-187209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:22.669 [DEBUG] [Thread-187209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] client lang: <none>
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] server lang: <none>
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] kex follows: False
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] Compression: none
2026-04-12T10:06:22.670 [DEBUG] [Thread-187209] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:06:22.727 [DEBUG] [Thread-187209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:06:22.727 [DEBUG] [Thread-187209] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:06:22.727 [DEBUG] [Thread-187209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:06:22.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:06:22.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:06:22.792 [DEBUG] [Thread-187209] [transport.py] [_log()] userauth is OK
2026-04-12T10:06:22.792 [DEBUG] [Thread-187209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:06:22.792 [DEBUG] [Thread-187209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:06:22.792 [DEBUG] [Thread-187209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:06:22.792 [DEBUG] [Thread-187209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:06:22.811 [INFO] [Thread-187209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:06:22.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:06:22.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:06:23.208 [DEBUG] [Thread-187211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:23.682 [DEBUG] [Thread-187209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:06:23.682 [DEBUG] [Thread-187209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:06:23.736 [DEBUG] [Thread-187209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:06:23.736 [DEBUG] [Thread-187209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:06:23.749 [DEBUG] [Thread-187209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:06:23.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:06:23.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:06:23.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:06:23.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:06:23.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:06:23.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:06:23.803 [DEBUG] [Thread-187209] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:06:27.348 [DEBUG] [Thread-187212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:38.240 [DEBUG] [Thread-187213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:52.757 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:52.759 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:53.267 [DEBUG] [Thread-187214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:06:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:06:53.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:06:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:06:55.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 6, 39), -0.10633, 100.631, 0.0, 20.466, 11.9903, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:06:55.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:06:39
2026-04-12T10:06:55.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:06:55.663 [DEBUG] [Thread-187215] [transport.py] [_log()] starting thread (client mode): 0xae561bd0
2026-04-12T10:06:55.663 [DEBUG] [Thread-187215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:06:55.683 [DEBUG] [Thread-187215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:06:55.683 [INFO] [Thread-187215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] client lang: <none>
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] server lang: <none>
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] kex follows: False
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:06:55.686 [DEBUG] [Thread-187215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:06:55.687 [DEBUG] [Thread-187215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:06:55.687 [DEBUG] [Thread-187215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:06:55.687 [DEBUG] [Thread-187215] [transport.py] [_log()] Compression: none
2026-04-12T10:06:55.687 [DEBUG] [Thread-187215] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:06:55.704 [DEBUG] [Thread-187215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:06:55.704 [DEBUG] [Thread-187215] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:06:55.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:06:55.705 [DEBUG] [Thread-187215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:06:55.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:06:55.707 [DEBUG] [Thread-187215] [transport.py] [_log()] userauth is OK
2026-04-12T10:06:55.707 [DEBUG] [Thread-187215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:06:55.707 [DEBUG] [Thread-187215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:06:55.707 [DEBUG] [Thread-187215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:06:55.707 [DEBUG] [Thread-187215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:06:55.731 [INFO] [Thread-187215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:06:55.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:06:56.496 [DEBUG] [Thread-187215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:06:56.497 [DEBUG] [Thread-187215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:06:56.497 [DEBUG] [Thread-187215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:06:56.538 [DEBUG] [Thread-187215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:06:56.538 [DEBUG] [Thread-187215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:06:56.541 [DEBUG] [Thread-187215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:06:56.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:06:56.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:06:56.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:06:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:06:56.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:06:56.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:06:56.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:06:56.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:06:56.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:06:56.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.337610 -999.00  +11.30  14.01     92  +10.20 1 2 1 3 1   888    0 1.58 22.49 ----- 17.4 14.0 279.8 22.2 16.8 -20.1 15.6 -18.1 13.8 -16.8 15.3 -17.8
2026-04-12T10:06:56.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:06:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:06:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.337610
2026-04-12T10:06:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:06:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:06:56.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:06:56.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:06:56.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:06:56.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:06:39', tmtdew=-0.10633, humidity=100.631, cloud=0.0, wind=20.466, temperature=11.9903, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:06:09.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:06:56.564 [DEBUG] [Thread-187215] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:06:56.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:06:56.659 [DEBUG] [Thread-187218] [transport.py] [_log()] starting thread (client mode): 0xb0f40670
2026-04-12T10:06:56.659 [DEBUG] [Thread-187218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:06:56.675 [DEBUG] [Thread-187218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:06:56.675 [INFO] [Thread-187218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:06:56.683 [DEBUG] [Thread-187218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:06:56.683 [DEBUG] [Thread-187218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:06:56.683 [DEBUG] [Thread-187218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:06:56.683 [DEBUG] [Thread-187218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:56.683 [DEBUG] [Thread-187218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:06:56.683 [DEBUG] [Thread-187218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:56.683 [DEBUG] [Thread-187218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] client lang: <none>
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] server lang: <none>
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] kex follows: False
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:06:56.684 [DEBUG] [Thread-187218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:06:56.685 [DEBUG] [Thread-187218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:06:56.685 [DEBUG] [Thread-187218] [transport.py] [_log()] Compression: none
2026-04-12T10:06:56.685 [DEBUG] [Thread-187218] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:06:56.740 [DEBUG] [Thread-187218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:06:56.741 [DEBUG] [Thread-187218] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:06:56.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:06:56.742 [DEBUG] [Thread-187218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:06:56.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:06:56.796 [DEBUG] [Thread-187218] [transport.py] [_log()] userauth is OK
2026-04-12T10:06:56.797 [DEBUG] [Thread-187218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:06:56.797 [DEBUG] [Thread-187218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:06:56.797 [DEBUG] [Thread-187218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:06:56.797 [DEBUG] [Thread-187218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:06:56.815 [INFO] [Thread-187218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:06:56.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:06:56.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:06:57.666 [DEBUG] [Thread-187218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:06:57.666 [DEBUG] [Thread-187218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:06:57.716 [DEBUG] [Thread-187218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:06:57.716 [DEBUG] [Thread-187218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:06:57.727 [DEBUG] [Thread-187218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:06:57.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:06:57.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:06:57.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:06:57.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:06:57.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:06:57.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:06:57.771 [DEBUG] [Thread-187218] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:07:08.292 [DEBUG] [Thread-187220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:07:23.328 [DEBUG] [Thread-187221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:07:27.376 [DEBUG] [Thread-187222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:07:27.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:07:27.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:07:27.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:07:29.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 7, 15), -0.00575, 100.332, 0.0, 17.627, 11.2449, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:07:29.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:07:15
2026-04-12T10:07:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:07:29.625 [DEBUG] [Thread-187223] [transport.py] [_log()] starting thread (client mode): 0xb0f57d30
2026-04-12T10:07:29.625 [DEBUG] [Thread-187223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:07:29.646 [DEBUG] [Thread-187223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:07:29.646 [INFO] [Thread-187223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] client lang: <none>
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] server lang: <none>
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] kex follows: False
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] Compression: none
2026-04-12T10:07:29.649 [DEBUG] [Thread-187223] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:07:29.666 [DEBUG] [Thread-187223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:07:29.666 [DEBUG] [Thread-187223] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:07:29.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:07:29.667 [DEBUG] [Thread-187223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:07:29.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:07:29.669 [DEBUG] [Thread-187223] [transport.py] [_log()] userauth is OK
2026-04-12T10:07:29.670 [DEBUG] [Thread-187223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:07:29.670 [DEBUG] [Thread-187223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:07:29.670 [DEBUG] [Thread-187223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:07:29.670 [DEBUG] [Thread-187223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:07:29.689 [INFO] [Thread-187223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:07:29.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:07:30.544 [DEBUG] [Thread-187223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:07:30.544 [DEBUG] [Thread-187223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:07:30.545 [DEBUG] [Thread-187223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:07:30.585 [DEBUG] [Thread-187223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:07:30.585 [DEBUG] [Thread-187223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:07:30.588 [DEBUG] [Thread-187223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:07:30.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:07:30.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:07:30.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:07:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:07:30.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:07:30.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:07:30.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:07:30.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.337958 -999.00  +11.40  18.55     93  +10.40 1 2 1 3 1   888    0 1.58 22.40 ----- 19.1 18.6 280.2 24.1 16.9 -19.8 15.7 -17.6 13.9 -15.9 15.4 -17.6
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.337958
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:07:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:07:15', tmtdew=-0.00575, humidity=100.332, cloud=0.0, wind=17.627, temperature=11.2449, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:06:39.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:07:30.619 [DEBUG] [Thread-187223] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:07:30.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:07:30.728 [DEBUG] [Thread-187226] [transport.py] [_log()] starting thread (client mode): 0xae5b27a0
2026-04-12T10:07:30.728 [DEBUG] [Thread-187226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:07:30.746 [DEBUG] [Thread-187226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:07:30.746 [INFO] [Thread-187226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] client lang: <none>
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] server lang: <none>
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] kex follows: False
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] Compression: none
2026-04-12T10:07:30.757 [DEBUG] [Thread-187226] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:07:30.818 [DEBUG] [Thread-187226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:07:30.818 [DEBUG] [Thread-187226] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:07:30.819 [DEBUG] [Thread-187226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:07:30.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:07:30.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:07:30.883 [DEBUG] [Thread-187226] [transport.py] [_log()] userauth is OK
2026-04-12T10:07:30.883 [DEBUG] [Thread-187226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:07:30.883 [DEBUG] [Thread-187226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:07:30.883 [DEBUG] [Thread-187226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:07:30.884 [DEBUG] [Thread-187226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:07:30.913 [INFO] [Thread-187226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:07:30.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:07:30.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:07:31.750 [DEBUG] [Thread-187226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:07:31.750 [DEBUG] [Thread-187226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:07:31.808 [DEBUG] [Thread-187226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:07:31.808 [DEBUG] [Thread-187226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:07:31.825 [DEBUG] [Thread-187226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:07:31.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:07:31.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:07:31.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:07:31.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:07:31.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:07:31.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:07:31.894 [DEBUG] [Thread-187226] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:07:38.353 [DEBUG] [Thread-187228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:07:52.907 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:07:52.908 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:07:53.391 [DEBUG] [Thread-187229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:08:01.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:08:01.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:08:01.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:08:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 7, 50), -0.11114, 100.664, 0.0, 18.3492, 11.8907, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:08:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:07:50
2026-04-12T10:08:03.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:08:03.796 [DEBUG] [Thread-187230] [transport.py] [_log()] starting thread (client mode): 0xb0f57670
2026-04-12T10:08:03.796 [DEBUG] [Thread-187230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:08:03.816 [DEBUG] [Thread-187230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:08:03.816 [INFO] [Thread-187230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] client lang: <none>
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] server lang: <none>
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] kex follows: False
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] Compression: none
2026-04-12T10:08:03.820 [DEBUG] [Thread-187230] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:08:03.830 [DEBUG] [Thread-187230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:08:03.830 [DEBUG] [Thread-187230] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:08:03.830 [DEBUG] [Thread-187230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:08:03.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:08:03.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:08:03.831 [DEBUG] [Thread-187230] [transport.py] [_log()] userauth is OK
2026-04-12T10:08:03.831 [DEBUG] [Thread-187230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:08:03.831 [DEBUG] [Thread-187230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:08:03.831 [DEBUG] [Thread-187230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:08:03.831 [DEBUG] [Thread-187230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:08:03.858 [INFO] [Thread-187230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:08:03.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:08:04.674 [DEBUG] [Thread-187230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:08:04.674 [DEBUG] [Thread-187230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:08:04.674 [DEBUG] [Thread-187230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:08:04.715 [DEBUG] [Thread-187230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:08:04.715 [DEBUG] [Thread-187230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:08:04.716 [DEBUG] [Thread-187230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:08:04.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:08:04.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:08:04.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:08:04.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:08:04.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:08:04.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:08:04.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.338652 -999.00  +11.60  12.49     92  +10.40 1 2 1 3 1   888    0 1.72 25.50 ----- 14.7 12.5 280.0 20.3 17.4 -17.8 16.1 -17.2 14.4 -15.3 15.7 -17.2
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.338652
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:08:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:07:50', tmtdew=-0.11114, humidity=100.664, cloud=0.0, wind=18.3492, temperature=11.8907, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:07:39.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:08:04.738 [DEBUG] [Thread-187230] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:08:04.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:08:04.821 [DEBUG] [Thread-187233] [transport.py] [_log()] starting thread (client mode): 0xb0f8eb60
2026-04-12T10:08:04.821 [DEBUG] [Thread-187233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:08:04.836 [DEBUG] [Thread-187233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:08:04.836 [INFO] [Thread-187233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] client lang: <none>
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] server lang: <none>
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] kex follows: False
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] Compression: none
2026-04-12T10:08:04.844 [DEBUG] [Thread-187233] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:08:04.900 [DEBUG] [Thread-187233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:08:04.900 [DEBUG] [Thread-187233] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:08:04.900 [DEBUG] [Thread-187233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:08:04.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:08:04.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:08:04.957 [DEBUG] [Thread-187233] [transport.py] [_log()] userauth is OK
2026-04-12T10:08:04.957 [DEBUG] [Thread-187233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:08:04.957 [DEBUG] [Thread-187233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:08:04.957 [DEBUG] [Thread-187233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:08:04.957 [DEBUG] [Thread-187233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:08:04.972 [INFO] [Thread-187233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:08:04.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:08:04.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:08:05.806 [DEBUG] [Thread-187233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:08:05.806 [DEBUG] [Thread-187233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:08:05.856 [DEBUG] [Thread-187233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:08:05.856 [DEBUG] [Thread-187233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:08:05.866 [DEBUG] [Thread-187233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:08:05.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:08:05.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:08:05.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:08:05.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:08:05.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:08:05.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:08:05.906 [DEBUG] [Thread-187233] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:08:08.420 [DEBUG] [Thread-187235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:08:23.452 [DEBUG] [Thread-187236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:08:27.404 [DEBUG] [Thread-187237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:08:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:08:35.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:08:35.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:08:37.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 8, 26), -0.06087, 100.365, 0.0, 18.0504, 11.5612, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:08:37.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:08:26
2026-04-12T10:08:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:08:37.768 [DEBUG] [Thread-187238] [transport.py] [_log()] starting thread (client mode): 0xb0f57130
2026-04-12T10:08:37.768 [DEBUG] [Thread-187238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:08:37.788 [DEBUG] [Thread-187238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:08:37.788 [INFO] [Thread-187238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] client lang: <none>
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] server lang: <none>
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] kex follows: False
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] Compression: none
2026-04-12T10:08:37.791 [DEBUG] [Thread-187238] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:08:37.807 [DEBUG] [Thread-187238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:08:37.807 [DEBUG] [Thread-187238] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:08:37.807 [DEBUG] [Thread-187238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:08:37.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:08:37.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:08:37.807 [DEBUG] [Thread-187238] [transport.py] [_log()] userauth is OK
2026-04-12T10:08:37.807 [DEBUG] [Thread-187238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:08:37.808 [DEBUG] [Thread-187238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:08:37.808 [DEBUG] [Thread-187238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:08:37.808 [DEBUG] [Thread-187238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:08:37.817 [INFO] [Thread-187238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:08:37.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:08:38.477 [DEBUG] [Thread-187240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:08:38.565 [DEBUG] [Thread-187238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:08:38.565 [DEBUG] [Thread-187238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:08:38.565 [DEBUG] [Thread-187238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:08:38.605 [DEBUG] [Thread-187238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:08:38.605 [DEBUG] [Thread-187238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:08:38.607 [DEBUG] [Thread-187238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:08:38.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:08:38.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:08:38.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:08:38.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:08:38.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:08:38.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:08:38.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.338999 -999.00  +11.90  18.71     93  +10.90 1 2 1 3 1   888    0 1.68 24.12 ----- 18.4 18.7 264.6 22.4 17.5 -19.4 16.1 -17.1 14.4 -16.2 15.9 -16.3
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.338999
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:08:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:08:26', tmtdew=-0.06087, humidity=100.365, cloud=0.0, wind=18.0504, temperature=11.5612, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:08:09.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:08:38.626 [DEBUG] [Thread-187238] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:08:38.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:08:38.708 [DEBUG] [Thread-187242] [transport.py] [_log()] starting thread (client mode): 0xae561bd0
2026-04-12T10:08:38.708 [DEBUG] [Thread-187242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:08:38.722 [DEBUG] [Thread-187242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:08:38.722 [INFO] [Thread-187242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] client lang: <none>
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] server lang: <none>
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] kex follows: False
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] Compression: none
2026-04-12T10:08:38.730 [DEBUG] [Thread-187242] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:08:38.785 [DEBUG] [Thread-187242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:08:38.785 [DEBUG] [Thread-187242] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:08:38.785 [DEBUG] [Thread-187242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:08:38.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:08:38.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:08:38.842 [DEBUG] [Thread-187242] [transport.py] [_log()] userauth is OK
2026-04-12T10:08:38.842 [DEBUG] [Thread-187242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:08:38.842 [DEBUG] [Thread-187242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:08:38.842 [DEBUG] [Thread-187242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:08:38.842 [DEBUG] [Thread-187242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:08:38.855 [INFO] [Thread-187242] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:08:38.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:08:38.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:08:39.737 [DEBUG] [Thread-187242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:08:39.737 [DEBUG] [Thread-187242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:08:39.786 [DEBUG] [Thread-187242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:08:39.786 [DEBUG] [Thread-187242] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:08:39.795 [DEBUG] [Thread-187242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:08:39.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:08:39.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:08:39.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:08:39.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:08:39.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:08:39.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:08:39.828 [DEBUG] [Thread-187242] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:08:53.047 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:08:53.048 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:08:53.503 [DEBUG] [Thread-187244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:09:08.546 [DEBUG] [Thread-187245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:09:09.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:09:09.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:09: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
2026-04-12T10:09:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 9, 1), -0.05843, 100.348, 0.0, 16.1276, 11.5943, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:09:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:09:01
2026-04-12T10:09:11.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:09:11.672 [DEBUG] [Thread-187246] [transport.py] [_log()] starting thread (client mode): 0xb0fb6b90
2026-04-12T10:09:11.672 [DEBUG] [Thread-187246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:09:11.687 [DEBUG] [Thread-187246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:09:11.687 [INFO] [Thread-187246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] client lang: <none>
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] server lang: <none>
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] kex follows: False
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:09:11.690 [DEBUG] [Thread-187246] [transport.py] [_log()] Compression: none
2026-04-12T10:09:11.691 [DEBUG] [Thread-187246] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:09:11.707 [DEBUG] [Thread-187246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:09:11.707 [DEBUG] [Thread-187246] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:09:11.707 [DEBUG] [Thread-187246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:09:11.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:09:11.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:09:11.708 [DEBUG] [Thread-187246] [transport.py] [_log()] userauth is OK
2026-04-12T10:09:11.708 [DEBUG] [Thread-187246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:09:11.708 [DEBUG] [Thread-187246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:09:11.708 [DEBUG] [Thread-187246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:09:11.708 [DEBUG] [Thread-187246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:09:11.719 [INFO] [Thread-187246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:09:11.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:09:12.495 [DEBUG] [Thread-187246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:09:12.495 [DEBUG] [Thread-187246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:09:12.495 [DEBUG] [Thread-187246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:09:12.536 [DEBUG] [Thread-187246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:09:12.536 [DEBUG] [Thread-187246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:09:12.539 [DEBUG] [Thread-187246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:09:12.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:09:12.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:09:12.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:09:12.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:09:12.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:09:12.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:09:12.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.339346 -999.00  +11.80  17.98     92  +10.60 1 2 1 3 1   888    0 1.61 22.31 ----- 14.9 18.0 281.2 22.7 17.6 -17.8 16.3 -17.2 14.4 -15.1 15.9 -16.6
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.339346
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:09:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:09:01', tmtdew=-0.05843, humidity=100.348, cloud=0.0, wind=16.1276, temperature=11.5943, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:08:39.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:09:12.557 [DEBUG] [Thread-187246] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:09:12.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:09:12.642 [DEBUG] [Thread-187249] [transport.py] [_log()] starting thread (client mode): 0xb0fb4250
2026-04-12T10:09:12.642 [DEBUG] [Thread-187249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:09:12.656 [DEBUG] [Thread-187249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:09:12.656 [INFO] [Thread-187249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:09:12.663 [DEBUG] [Thread-187249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:09:12.663 [DEBUG] [Thread-187249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] client lang: <none>
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] server lang: <none>
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] kex follows: False
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] Compression: none
2026-04-12T10:09:12.664 [DEBUG] [Thread-187249] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:09:12.718 [DEBUG] [Thread-187249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:09:12.719 [DEBUG] [Thread-187249] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:09:12.719 [DEBUG] [Thread-187249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:09:12.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:09:12.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:09:12.776 [DEBUG] [Thread-187249] [transport.py] [_log()] userauth is OK
2026-04-12T10:09:12.776 [DEBUG] [Thread-187249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:09:12.776 [DEBUG] [Thread-187249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:09:12.776 [DEBUG] [Thread-187249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:09:12.776 [DEBUG] [Thread-187249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:09:12.791 [INFO] [Thread-187249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:09:12.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:09:12.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:09:13.624 [DEBUG] [Thread-187249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:09:13.624 [DEBUG] [Thread-187249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:09:13.672 [DEBUG] [Thread-187249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:09:13.672 [DEBUG] [Thread-187249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:09:13.680 [DEBUG] [Thread-187249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:09:13.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:09:13.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:09:13.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:09:13.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:09:13.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:09:13.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:09:13.712 [DEBUG] [Thread-187249] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:09:23.570 [DEBUG] [Thread-187251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:09:27.432 [DEBUG] [Thread-187252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:09:38.602 [DEBUG] [Thread-187253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:09:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:09:43.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:09:43.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:09:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 9, 37), -0.11642, 100.697, 0.0, 20.3249, 12.0565, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:09:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:09:37
2026-04-12T10:09:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:09:45.661 [DEBUG] [Thread-187254] [transport.py] [_log()] starting thread (client mode): 0xa793b6a0
2026-04-12T10:09:45.662 [DEBUG] [Thread-187254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:09:45.682 [DEBUG] [Thread-187254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:09:45.682 [INFO] [Thread-187254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:09:45.685 [DEBUG] [Thread-187254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:09:45.685 [DEBUG] [Thread-187254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] client lang: <none>
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] server lang: <none>
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] kex follows: False
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:09:45.686 [DEBUG] [Thread-187254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:09:45.687 [DEBUG] [Thread-187254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:09:45.687 [DEBUG] [Thread-187254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:09:45.687 [DEBUG] [Thread-187254] [transport.py] [_log()] Compression: none
2026-04-12T10:09:45.687 [DEBUG] [Thread-187254] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:09:45.705 [DEBUG] [Thread-187254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:09:45.706 [DEBUG] [Thread-187254] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:09:45.707 [DEBUG] [Thread-187254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:09:45.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:09:45.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:09:45.709 [DEBUG] [Thread-187254] [transport.py] [_log()] userauth is OK
2026-04-12T10:09:45.709 [DEBUG] [Thread-187254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:09:45.709 [DEBUG] [Thread-187254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:09:45.709 [DEBUG] [Thread-187254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:09:45.710 [DEBUG] [Thread-187254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:09:45.732 [INFO] [Thread-187254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:09:45.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:09:46.547 [DEBUG] [Thread-187254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:09:46.547 [DEBUG] [Thread-187254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:09:46.548 [DEBUG] [Thread-187254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:09:46.588 [DEBUG] [Thread-187254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:09:46.588 [DEBUG] [Thread-187254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:09:46.591 [DEBUG] [Thread-187254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:09:46.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:09:46.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:09:46.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:09:46.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:09:46.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:09:46.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:09:46.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:09:46.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:09:46.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:09:46.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.339694 -999.00  +11.70  18.65     92  +10.50 1 2 1 3 1   888    0 1.64 23.51 ----- 19.7 18.6 271.6 21.1 17.5 -20.5 16.2 -19.1 14.4 -17.6 16.0 -18.2
2026-04-12T10:09:46.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:09:46.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:09:46.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.339694
2026-04-12T10:09:46.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:09:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:09:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:09:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:09:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:09:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:09:37', tmtdew=-0.11642, humidity=100.697, cloud=0.0, wind=20.3249, temperature=12.0565, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:09:09.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:09:46.615 [DEBUG] [Thread-187254] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:09:46.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:09:46.709 [DEBUG] [Thread-187257] [transport.py] [_log()] starting thread (client mode): 0xb0f42950
2026-04-12T10:09:46.709 [DEBUG] [Thread-187257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:09:46.729 [DEBUG] [Thread-187257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:09:46.729 [INFO] [Thread-187257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] client lang: <none>
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] server lang: <none>
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] kex follows: False
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:09:46.740 [DEBUG] [Thread-187257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:09:46.741 [DEBUG] [Thread-187257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:09:46.741 [DEBUG] [Thread-187257] [transport.py] [_log()] Compression: none
2026-04-12T10:09:46.741 [DEBUG] [Thread-187257] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:09:46.803 [DEBUG] [Thread-187257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:09:46.804 [DEBUG] [Thread-187257] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:09:46.805 [DEBUG] [Thread-187257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:09:46.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:09:46.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:09:46.867 [DEBUG] [Thread-187257] [transport.py] [_log()] userauth is OK
2026-04-12T10:09:46.867 [DEBUG] [Thread-187257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:09:46.867 [DEBUG] [Thread-187257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:09:46.867 [DEBUG] [Thread-187257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:09:46.867 [DEBUG] [Thread-187257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:09:46.891 [INFO] [Thread-187257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:09:46.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:09:46.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:09:47.758 [DEBUG] [Thread-187257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:09:47.758 [DEBUG] [Thread-187257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:09:47.807 [DEBUG] [Thread-187257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:09:47.807 [DEBUG] [Thread-187257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:09:47.819 [DEBUG] [Thread-187257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:09:47.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:09:47.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:09:47.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:09:47.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:09:47.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:09:47.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:09:47.861 [DEBUG] [Thread-187257] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:09:53.187 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:09:53.189 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:09:53.627 [DEBUG] [Thread-187259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:08.661 [DEBUG] [Thread-187260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:17.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:10:17.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:10:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:10:19.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 9, 37), -0.11642, 100.697, 0.0, 20.3249, 12.0565, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:10:19.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:09:37
2026-04-12T10:10:19.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:10:19.707 [DEBUG] [Thread-187261] [transport.py] [_log()] starting thread (client mode): 0xb0f41c00
2026-04-12T10:10:19.707 [DEBUG] [Thread-187261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:10:19.728 [DEBUG] [Thread-187261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:10:19.728 [INFO] [Thread-187261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] client lang: <none>
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] server lang: <none>
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] kex follows: False
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:10:19.732 [DEBUG] [Thread-187261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:10:19.733 [DEBUG] [Thread-187261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:10:19.733 [DEBUG] [Thread-187261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:10:19.733 [DEBUG] [Thread-187261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:10:19.733 [DEBUG] [Thread-187261] [transport.py] [_log()] Compression: none
2026-04-12T10:10:19.733 [DEBUG] [Thread-187261] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:10:19.748 [DEBUG] [Thread-187261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:10:19.748 [DEBUG] [Thread-187261] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:10:19.749 [DEBUG] [Thread-187261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:10:19.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:10:19.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:10:19.749 [DEBUG] [Thread-187261] [transport.py] [_log()] userauth is OK
2026-04-12T10:10:19.749 [DEBUG] [Thread-187261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:10:19.749 [DEBUG] [Thread-187261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:10:19.749 [DEBUG] [Thread-187261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:10:19.749 [DEBUG] [Thread-187261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:10:19.759 [INFO] [Thread-187261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:10:19.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:10:20.948 [DEBUG] [Thread-187261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:10:20.948 [DEBUG] [Thread-187261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:10:20.948 [DEBUG] [Thread-187261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:10:20.989 [DEBUG] [Thread-187261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:10:20.989 [DEBUG] [Thread-187261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:10:20.992 [DEBUG] [Thread-187261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:10:21.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:10:21.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:10:21.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:10:21.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:10:21.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:10:21.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:10:21.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:10:21.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:10:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:10:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.340041 -999.00  +11.60  22.77     92  +10.40 1 2 1 3 1   888    0 1.63 22.09 ----- 22.6 22.8 272.0 25.3 17.4 -21.5 16.1 -19.5 14.2 -18.3 15.8 -18.9
2026-04-12T10:10:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:10:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:10:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.340041
2026-04-12T10:10:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:10:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:10:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:10:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:10:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:10:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:09:37', tmtdew=-0.11642, humidity=100.697, cloud=0.0, wind=20.3249, temperature=12.0565, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:09:39.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:10:21.015 [DEBUG] [Thread-187261] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:10:21.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:10:21.098 [DEBUG] [Thread-187264] [transport.py] [_log()] starting thread (client mode): 0xb0f578b0
2026-04-12T10:10:21.098 [DEBUG] [Thread-187264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:10:21.113 [DEBUG] [Thread-187264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:10:21.113 [INFO] [Thread-187264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] client lang: <none>
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] server lang: <none>
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] kex follows: False
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:10:21.120 [DEBUG] [Thread-187264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:10:21.121 [DEBUG] [Thread-187264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:10:21.121 [DEBUG] [Thread-187264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:10:21.121 [DEBUG] [Thread-187264] [transport.py] [_log()] Compression: none
2026-04-12T10:10:21.121 [DEBUG] [Thread-187264] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:10:21.182 [DEBUG] [Thread-187264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:10:21.183 [DEBUG] [Thread-187264] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:10:21.183 [DEBUG] [Thread-187264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:10:21.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:10:21.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:10:21.243 [DEBUG] [Thread-187264] [transport.py] [_log()] userauth is OK
2026-04-12T10:10:21.243 [DEBUG] [Thread-187264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:10:21.243 [DEBUG] [Thread-187264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:10:21.243 [DEBUG] [Thread-187264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:10:21.243 [DEBUG] [Thread-187264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:10:21.267 [INFO] [Thread-187264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:10:21.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:10:21.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:10:22.095 [DEBUG] [Thread-187264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:10:22.096 [DEBUG] [Thread-187264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:10:22.152 [DEBUG] [Thread-187264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:10:22.152 [DEBUG] [Thread-187264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:10:22.169 [DEBUG] [Thread-187264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:10:22.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:10:22.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:10:22.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:10:22.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:10:22.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:10:22.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:10:22.234 [DEBUG] [Thread-187264] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:10:23.689 [DEBUG] [Thread-187266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:27.470 [DEBUG] [Thread-187267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:38.726 [DEBUG] [Thread-187268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:10:52.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:10:52.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:10:53.328 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:53.330 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 10, 13), -0.000425, 100.299, 0.0, 20.4685, 11.0624, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:10:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:10:13
2026-04-12T10:10:53.750 [DEBUG] [Thread-187269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:10:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:10:54.136 [DEBUG] [Thread-187270] [transport.py] [_log()] starting thread (client mode): 0xb0f57d30
2026-04-12T10:10:54.136 [DEBUG] [Thread-187270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:10:54.157 [DEBUG] [Thread-187270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:10:54.157 [INFO] [Thread-187270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] client lang: <none>
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] server lang: <none>
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] kex follows: False
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] Compression: none
2026-04-12T10:10:54.160 [DEBUG] [Thread-187270] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:10:54.176 [DEBUG] [Thread-187270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:10:54.176 [DEBUG] [Thread-187270] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:10:54.176 [DEBUG] [Thread-187270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:10:54.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:10:54.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:10:54.177 [DEBUG] [Thread-187270] [transport.py] [_log()] userauth is OK
2026-04-12T10:10:54.177 [DEBUG] [Thread-187270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:10:54.177 [DEBUG] [Thread-187270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:10:54.177 [DEBUG] [Thread-187270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:10:54.177 [DEBUG] [Thread-187270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:10:54.187 [INFO] [Thread-187270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:10:54.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:10:54.965 [DEBUG] [Thread-187270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:10:54.965 [DEBUG] [Thread-187270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:10:54.965 [DEBUG] [Thread-187270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:10:55.006 [DEBUG] [Thread-187270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:10:55.006 [DEBUG] [Thread-187270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:10:55.009 [DEBUG] [Thread-187270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:10:55.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:10:55.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:10:55.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:10:55.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:10:55.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:10:55.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:10:55.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.340388 -999.00  +11.60  16.36     92  +10.40 1 2 1 3 1   888    0 1.59 20.91 ----- 15.2 16.4 275.2 22.5 17.2 -21.1 16.0 -19.1 14.2 -18.3 15.7 -19.9
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.340388
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:10:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:10:13', tmtdew=-0.000425, humidity=100.299, cloud=0.0, wind=20.4685, temperature=11.0624, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:10:09.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:10:55.029 [DEBUG] [Thread-187270] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:10:55.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:10:55.121 [DEBUG] [Thread-187273] [transport.py] [_log()] starting thread (client mode): 0xa7968730
2026-04-12T10:10:55.121 [DEBUG] [Thread-187273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:10:55.136 [DEBUG] [Thread-187273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:10:55.136 [INFO] [Thread-187273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] client lang: <none>
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] server lang: <none>
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] kex follows: False
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:10:55.143 [DEBUG] [Thread-187273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:10:55.144 [DEBUG] [Thread-187273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:10:55.144 [DEBUG] [Thread-187273] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:10:55.144 [DEBUG] [Thread-187273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:10:55.144 [DEBUG] [Thread-187273] [transport.py] [_log()] Compression: none
2026-04-12T10:10:55.144 [DEBUG] [Thread-187273] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:10:55.200 [DEBUG] [Thread-187273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:10:55.201 [DEBUG] [Thread-187273] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:10:55.201 [DEBUG] [Thread-187273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:10:55.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:10:55.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:10:55.256 [DEBUG] [Thread-187273] [transport.py] [_log()] userauth is OK
2026-04-12T10:10:55.256 [DEBUG] [Thread-187273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:10:55.256 [DEBUG] [Thread-187273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:10:55.257 [DEBUG] [Thread-187273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:10:55.257 [DEBUG] [Thread-187273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:10:55.275 [INFO] [Thread-187273] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:10:55.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:10:55.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:10:56.107 [DEBUG] [Thread-187273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:10:56.107 [DEBUG] [Thread-187273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:10:56.155 [DEBUG] [Thread-187273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:10:56.155 [DEBUG] [Thread-187273] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:10:56.164 [DEBUG] [Thread-187273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:10:56.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:10:56.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:10:56.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:10:56.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:10:56.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:10:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:10:56.197 [DEBUG] [Thread-187273] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:11:08.777 [DEBUG] [Thread-187275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:11:23.811 [DEBUG] [Thread-187276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:11:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:11:26.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:11:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:11:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 10, 48), -0.11071, 100.663, 0.0, 17.9258, 11.6585, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:11:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:10:48
2026-04-12T10:11:27.514 [DEBUG] [Thread-187277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:11:27.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:11:28.131 [DEBUG] [Thread-187278] [transport.py] [_log()] starting thread (client mode): 0xb0f408b0
2026-04-12T10:11:28.131 [DEBUG] [Thread-187278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:11:28.151 [DEBUG] [Thread-187278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:11:28.151 [INFO] [Thread-187278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] client lang: <none>
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] server lang: <none>
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] kex follows: False
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] Compression: none
2026-04-12T10:11:28.155 [DEBUG] [Thread-187278] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:11:28.172 [DEBUG] [Thread-187278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:11:28.172 [DEBUG] [Thread-187278] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:11:28.172 [DEBUG] [Thread-187278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:11:28.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:11:28.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:11:28.174 [DEBUG] [Thread-187278] [transport.py] [_log()] userauth is OK
2026-04-12T10:11:28.174 [DEBUG] [Thread-187278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:11:28.174 [DEBUG] [Thread-187278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:11:28.174 [DEBUG] [Thread-187278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:11:28.174 [DEBUG] [Thread-187278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:11:28.184 [INFO] [Thread-187278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:11:28.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:11:28.960 [DEBUG] [Thread-187278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:11:28.960 [DEBUG] [Thread-187278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:11:28.960 [DEBUG] [Thread-187278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:11:29.001 [DEBUG] [Thread-187278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:11:29.001 [DEBUG] [Thread-187278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:11:29.004 [DEBUG] [Thread-187278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:11:29.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:11:29.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:11:29.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:11:29.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:11:29.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:11:29.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:11:29.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.340735 -999.00  +11.60  12.76     92  +10.40 1 2 1 3 1   888    0 1.63 22.13 ----- 12.4 12.8 277.4 19.0 17.1 -21.8 15.9 -19.5 14.2 -19.7 15.6 -19.6
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.340735
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:11:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:10:48', tmtdew=-0.11071, humidity=100.663, cloud=0.0, wind=17.9258, temperature=11.6585, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:10:39.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:11:29.027 [DEBUG] [Thread-187278] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:11:29.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:11:29.114 [DEBUG] [Thread-187281] [transport.py] [_log()] starting thread (client mode): 0xb0f578b0
2026-04-12T10:11:29.115 [DEBUG] [Thread-187281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:11:29.138 [DEBUG] [Thread-187281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:11:29.138 [INFO] [Thread-187281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:11:29.153 [DEBUG] [Thread-187281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:11:29.153 [DEBUG] [Thread-187281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] client lang: <none>
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] server lang: <none>
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] kex follows: False
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] Compression: none
2026-04-12T10:11:29.154 [DEBUG] [Thread-187281] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:11:29.215 [DEBUG] [Thread-187281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:11:29.215 [DEBUG] [Thread-187281] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:11:29.215 [DEBUG] [Thread-187281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:11:29.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:11:29.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:11:29.290 [DEBUG] [Thread-187281] [transport.py] [_log()] userauth is OK
2026-04-12T10:11:29.290 [DEBUG] [Thread-187281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:11:29.290 [DEBUG] [Thread-187281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:11:29.290 [DEBUG] [Thread-187281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:11:29.290 [DEBUG] [Thread-187281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:11:29.311 [INFO] [Thread-187281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:11:29.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:11:29.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:11:30.198 [DEBUG] [Thread-187281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:11:30.198 [DEBUG] [Thread-187281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:11:30.255 [DEBUG] [Thread-187281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:11:30.255 [DEBUG] [Thread-187281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:11:30.272 [DEBUG] [Thread-187281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:11:30.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:11:30.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:11:30.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:11:30.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:11:30.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:11:30.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:11:30.338 [DEBUG] [Thread-187281] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:11:38.840 [DEBUG] [Thread-187283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:11:53.501 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:11:53.502 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:11:53.885 [DEBUG] [Thread-187284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:12:00.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:12:00.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:12:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:12:01.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 11, 24), -0.00794, 100.348, 0.0, 15.6154, 11.029, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:12:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:11:24
2026-04-12T10:12:02.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:12:02.295 [DEBUG] [Thread-187285] [transport.py] [_log()] starting thread (client mode): 0xb0f57c70
2026-04-12T10:12:02.295 [DEBUG] [Thread-187285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:12:02.314 [DEBUG] [Thread-187285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:12:02.314 [INFO] [Thread-187285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:12:02.317 [DEBUG] [Thread-187285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] client lang: <none>
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] server lang: <none>
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] kex follows: False
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] Compression: none
2026-04-12T10:12:02.318 [DEBUG] [Thread-187285] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:12:02.333 [DEBUG] [Thread-187285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:12:02.333 [DEBUG] [Thread-187285] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:12:02.334 [DEBUG] [Thread-187285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:12:02.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:12:02.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:12:02.335 [DEBUG] [Thread-187285] [transport.py] [_log()] userauth is OK
2026-04-12T10:12:02.335 [DEBUG] [Thread-187285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:12:02.335 [DEBUG] [Thread-187285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:12:02.335 [DEBUG] [Thread-187285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:12:02.335 [DEBUG] [Thread-187285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:12:02.346 [INFO] [Thread-187285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:12:02.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:12:03.116 [DEBUG] [Thread-187285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:12:03.116 [DEBUG] [Thread-187285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:12:03.116 [DEBUG] [Thread-187285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:12:03.156 [DEBUG] [Thread-187285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:12:03.157 [DEBUG] [Thread-187285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:12:03.159 [DEBUG] [Thread-187285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:12:03.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:12:03.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:12:03.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:12:03.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:12:03.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:12:03.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:12:03.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:12:03.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:12:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:12:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.341083 -999.00  +11.60  17.85     92  +10.40 1 2 1 3 1   888    0 1.65 21.82 ----- 13.1 17.9 266.2 20.9 16.9 -23.1 15.8 -20.2 14.1 -20.1 15.5 -20.4
2026-04-12T10:12:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:12:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:12:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.341083
2026-04-12T10:12:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:12:03.174 [DEBUG] [Thread-187285] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:12:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:12:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:12:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:12:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:12:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:11:24', tmtdew=-0.00794, humidity=100.348, cloud=0.0, wind=15.6154, temperature=11.029, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:11:09.571', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:12:03.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:12:03.280 [DEBUG] [Thread-187288] [transport.py] [_log()] starting thread (client mode): 0xb0f542e0
2026-04-12T10:12:03.281 [DEBUG] [Thread-187288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:12:03.305 [DEBUG] [Thread-187288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:12:03.305 [INFO] [Thread-187288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:12:03.323 [DEBUG] [Thread-187288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] client lang: <none>
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] server lang: <none>
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] kex follows: False
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:12:03.324 [DEBUG] [Thread-187288] [transport.py] [_log()] Compression: none
2026-04-12T10:12:03.325 [DEBUG] [Thread-187288] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:12:03.393 [DEBUG] [Thread-187288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:12:03.393 [DEBUG] [Thread-187288] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:12:03.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:12:03.394 [DEBUG] [Thread-187288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:12:03.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:12:03.474 [DEBUG] [Thread-187288] [transport.py] [_log()] userauth is OK
2026-04-12T10:12:03.474 [DEBUG] [Thread-187288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:12:03.474 [DEBUG] [Thread-187288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:12:03.474 [DEBUG] [Thread-187288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:12:03.474 [DEBUG] [Thread-187288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:12:03.504 [INFO] [Thread-187288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:12:03.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:12:03.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:12:04.383 [DEBUG] [Thread-187288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:12:04.383 [DEBUG] [Thread-187288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:12:04.443 [DEBUG] [Thread-187288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:12:04.443 [DEBUG] [Thread-187288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:12:04.468 [DEBUG] [Thread-187288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:12:04.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:12:04.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:12:04.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:12:04.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:12:04.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:12:04.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:12:04.560 [DEBUG] [Thread-187288] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:12:08.911 [DEBUG] [Thread-187290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:12:23.953 [DEBUG] [Thread-187291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:12:27.542 [DEBUG] [Thread-187292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:12:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:12:34.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:12:34.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:12:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 11, 24), -0.00794, 100.348, 0.0, 15.6154, 11.029, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:12:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:11:24
2026-04-12T10:12:36.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:12:36.430 [DEBUG] [Thread-187293] [transport.py] [_log()] starting thread (client mode): 0xa793ba60
2026-04-12T10:12:36.430 [DEBUG] [Thread-187293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:12:36.451 [DEBUG] [Thread-187293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:12:36.451 [INFO] [Thread-187293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:12:36.454 [DEBUG] [Thread-187293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] client lang: <none>
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] server lang: <none>
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] kex follows: False
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] Compression: none
2026-04-12T10:12:36.455 [DEBUG] [Thread-187293] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:12:36.473 [DEBUG] [Thread-187293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:12:36.473 [DEBUG] [Thread-187293] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:12:36.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:12:36.474 [DEBUG] [Thread-187293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:12:36.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:12:36.476 [DEBUG] [Thread-187293] [transport.py] [_log()] userauth is OK
2026-04-12T10:12:36.477 [DEBUG] [Thread-187293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:12:36.477 [DEBUG] [Thread-187293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:12:36.477 [DEBUG] [Thread-187293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:12:36.477 [DEBUG] [Thread-187293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:12:36.509 [INFO] [Thread-187293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:12:36.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:12:37.312 [DEBUG] [Thread-187293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:12:37.313 [DEBUG] [Thread-187293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:12:37.313 [DEBUG] [Thread-187293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:12:37.354 [DEBUG] [Thread-187293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:12:37.354 [DEBUG] [Thread-187293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:12:37.357 [DEBUG] [Thread-187293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:12:37.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:12:37.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:12:37.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:12:37.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:12:37.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:12:37.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:12:37.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:12:37.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.341430 -999.00  +11.70  20.53     92  +10.50 1 2 1 3 1   888    0 1.66 22.17 ----- 14.4 20.5 273.0 23.2 16.7 -23.3 15.7 -20.3 14.1 -19.6 15.4 -20.7
2026-04-12T10:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.341430
2026-04-12T10:12:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:12:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:12:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:12:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:12:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:12:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:11:24', tmtdew=-0.00794, humidity=100.348, cloud=0.0, wind=15.6154, temperature=11.029, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:11:39.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:12:37.380 [DEBUG] [Thread-187293] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:12:37.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:12:37.464 [DEBUG] [Thread-187296] [transport.py] [_log()] starting thread (client mode): 0xae5b29e0
2026-04-12T10:12:37.464 [DEBUG] [Thread-187296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:12:37.481 [DEBUG] [Thread-187296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:12:37.481 [INFO] [Thread-187296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] client lang: <none>
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] server lang: <none>
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] kex follows: False
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:12:37.489 [DEBUG] [Thread-187296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:12:37.490 [DEBUG] [Thread-187296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:12:37.490 [DEBUG] [Thread-187296] [transport.py] [_log()] Compression: none
2026-04-12T10:12:37.490 [DEBUG] [Thread-187296] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:12:37.548 [DEBUG] [Thread-187296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:12:37.548 [DEBUG] [Thread-187296] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:12:37.548 [DEBUG] [Thread-187296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:12:37.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:12:37.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:12:37.605 [DEBUG] [Thread-187296] [transport.py] [_log()] userauth is OK
2026-04-12T10:12:37.605 [DEBUG] [Thread-187296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:12:37.605 [DEBUG] [Thread-187296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:12:37.605 [DEBUG] [Thread-187296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:12:37.605 [DEBUG] [Thread-187296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:12:37.621 [INFO] [Thread-187296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:12:37.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:12:37.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:12:38.438 [DEBUG] [Thread-187296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:12:38.438 [DEBUG] [Thread-187296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:12:38.486 [DEBUG] [Thread-187296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:12:38.486 [DEBUG] [Thread-187296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:12:38.494 [DEBUG] [Thread-187296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:12:38.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:12: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')
2026-04-12T10:12:38.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:12:38.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:12:38.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:12:38.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:12:38.527 [DEBUG] [Thread-187296] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:12:38.988 [DEBUG] [Thread-187298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:12:53.648 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:12:53.649 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:12:54.018 [DEBUG] [Thread-187299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:13:08.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:13:08.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:13:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:13:09.045 [DEBUG] [Thread-187300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:13:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 12, 36), -0.09579, 100.564, 0.0, 18.4198, 11.6916, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:13:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:12:36
2026-04-12T10:13:10.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:13:10.271 [DEBUG] [Thread-187301] [transport.py] [_log()] starting thread (client mode): 0xa796a320
2026-04-12T10:13:10.271 [DEBUG] [Thread-187301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:13:10.292 [DEBUG] [Thread-187301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:13:10.293 [INFO] [Thread-187301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:10.296 [DEBUG] [Thread-187301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] client lang: <none>
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] server lang: <none>
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] kex follows: False
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] Compression: none
2026-04-12T10:13:10.297 [DEBUG] [Thread-187301] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:13:10.316 [DEBUG] [Thread-187301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:13:10.316 [DEBUG] [Thread-187301] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:13:10.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:13:10.317 [DEBUG] [Thread-187301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:13:10.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:13:10.318 [DEBUG] [Thread-187301] [transport.py] [_log()] userauth is OK
2026-04-12T10:13:10.318 [DEBUG] [Thread-187301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:13:10.318 [DEBUG] [Thread-187301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:13:10.318 [DEBUG] [Thread-187301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:13:10.318 [DEBUG] [Thread-187301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:13:10.328 [INFO] [Thread-187301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:13:10.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:13:11.135 [DEBUG] [Thread-187301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:13:11.136 [DEBUG] [Thread-187301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:13:11.136 [DEBUG] [Thread-187301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:13:11.177 [DEBUG] [Thread-187301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:13:11.177 [DEBUG] [Thread-187301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:13:11.180 [DEBUG] [Thread-187301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:13:11.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:13:11.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:13:11.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:13:11.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:13:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:13:11.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:13:11.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:13:11.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:13:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:13:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.341777 -999.00  +11.90  15.34     93  +10.80 1 2 1 3 1   888    0 1.62 20.43 ----- 20.0 15.3 277.0 20.8 16.6 -22.7 15.6 -20.2 14.2 -17.4 15.3 -20.1
2026-04-12T10:13:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:13:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:13:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.341777
2026-04-12T10:13:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:13:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:13:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:13:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:13:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:13:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:12:36', tmtdew=-0.09579, humidity=100.564, cloud=0.0, wind=18.4198, temperature=11.6916, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:12:09.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:13:11.208 [DEBUG] [Thread-187301] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:13:11.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:13:11.326 [DEBUG] [Thread-187304] [transport.py] [_log()] starting thread (client mode): 0xb0fb7490
2026-04-12T10:13:11.326 [DEBUG] [Thread-187304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:13:11.359 [DEBUG] [Thread-187304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:13:11.359 [INFO] [Thread-187304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:13:11.384 [DEBUG] [Thread-187304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:13:11.384 [DEBUG] [Thread-187304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:13:11.384 [DEBUG] [Thread-187304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:13:11.384 [DEBUG] [Thread-187304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] client lang: <none>
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] server lang: <none>
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] kex follows: False
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] Compression: none
2026-04-12T10:13:11.385 [DEBUG] [Thread-187304] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:13:11.463 [DEBUG] [Thread-187304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:13:11.464 [DEBUG] [Thread-187304] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:13:11.464 [DEBUG] [Thread-187304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:13:11.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:13:11.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:13:11.561 [DEBUG] [Thread-187304] [transport.py] [_log()] userauth is OK
2026-04-12T10:13:11.561 [DEBUG] [Thread-187304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:13:11.561 [DEBUG] [Thread-187304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:13:11.561 [DEBUG] [Thread-187304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:13:11.561 [DEBUG] [Thread-187304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:13:11.598 [INFO] [Thread-187304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:13:11.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:13:11.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:13:12.482 [DEBUG] [Thread-187304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:13:12.482 [DEBUG] [Thread-187304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:13:12.551 [DEBUG] [Thread-187304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:13:12.551 [DEBUG] [Thread-187304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:13:12.580 [DEBUG] [Thread-187304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:13:12.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:13:12.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:13:12.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:13:12.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:13:12.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:13:12.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:13:12.696 [DEBUG] [Thread-187304] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:13:24.070 [DEBUG] [Thread-187306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:13:27.569 [DEBUG] [Thread-187307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:13:39.107 [DEBUG] [Thread-187308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:13:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:13:42.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:13:42.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:13:43.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 13, 11), -0.01043, 100.364, 0.0, 20.9441, 11.1619, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:13:43.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:13:11
2026-04-12T10:13:44.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:13:44.478 [DEBUG] [Thread-187309] [transport.py] [_log()] starting thread (client mode): 0xa796a440
2026-04-12T10:13:44.478 [DEBUG] [Thread-187309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:13:44.501 [DEBUG] [Thread-187309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:13:44.501 [INFO] [Thread-187309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] client lang: <none>
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] server lang: <none>
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] kex follows: False
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] Compression: none
2026-04-12T10:13:44.505 [DEBUG] [Thread-187309] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:13:44.522 [DEBUG] [Thread-187309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:13:44.522 [DEBUG] [Thread-187309] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:13:44.522 [DEBUG] [Thread-187309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:13:44.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:13:44.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:13:44.525 [DEBUG] [Thread-187309] [transport.py] [_log()] userauth is OK
2026-04-12T10:13:44.525 [DEBUG] [Thread-187309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:13:44.525 [DEBUG] [Thread-187309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:13:44.525 [DEBUG] [Thread-187309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:13:44.525 [DEBUG] [Thread-187309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:13:44.535 [INFO] [Thread-187309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:13:44.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:13:45.333 [DEBUG] [Thread-187309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:13:45.333 [DEBUG] [Thread-187309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:13:45.333 [DEBUG] [Thread-187309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:13:45.373 [DEBUG] [Thread-187309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:13:45.373 [DEBUG] [Thread-187309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:13:45.375 [DEBUG] [Thread-187309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:13:45.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:13:45.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:13:45.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:13:45.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:13:45.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:13:45.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:13:45.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:13:45.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:13:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:13:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.342471 -999.00  +11.80  17.76     93  +10.70 1 2 1 3 1   888    0 1.58 18.97 ----- 18.7 17.8 281.0 21.2 16.2 -22.1 15.4 -20.0 14.1 -18.9 15.1 -20.3
2026-04-12T10:13:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:13:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:13:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.342471
2026-04-12T10:13:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:13:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:13:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:13:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:13:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:13:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:13:11', tmtdew=-0.01043, humidity=100.364, cloud=0.0, wind=20.9441, temperature=11.1619, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:13:09.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:13:45.398 [DEBUG] [Thread-187309] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:13:45.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:13:45.506 [DEBUG] [Thread-187312] [transport.py] [_log()] starting thread (client mode): 0xb0f8ebc0
2026-04-12T10:13:45.506 [DEBUG] [Thread-187312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:13:45.544 [DEBUG] [Thread-187312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:13:45.544 [INFO] [Thread-187312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:13:45.575 [DEBUG] [Thread-187312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] client lang: <none>
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] server lang: <none>
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] kex follows: False
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] Compression: none
2026-04-12T10:13:45.576 [DEBUG] [Thread-187312] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:13:45.668 [DEBUG] [Thread-187312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:13:45.668 [DEBUG] [Thread-187312] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:13:45.668 [DEBUG] [Thread-187312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:13:45.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:13:45.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:13:45.773 [DEBUG] [Thread-187312] [transport.py] [_log()] userauth is OK
2026-04-12T10:13:45.773 [DEBUG] [Thread-187312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:13:45.773 [DEBUG] [Thread-187312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:13:45.773 [DEBUG] [Thread-187312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:13:45.773 [DEBUG] [Thread-187312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:13:45.811 [INFO] [Thread-187312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:13:45.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:13:45.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:13:46.684 [DEBUG] [Thread-187312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:13:46.684 [DEBUG] [Thread-187312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:13:46.764 [DEBUG] [Thread-187312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:13:46.764 [DEBUG] [Thread-187312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:13:46.797 [DEBUG] [Thread-187312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:13:46.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:13:46.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:13:46.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:13:46.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:13:46.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:13:46.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:13:46.927 [DEBUG] [Thread-187312] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:13:53.804 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:13:53.804 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:13:54.138 [DEBUG] [Thread-187314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:09.170 [DEBUG] [Thread-187315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:14:16.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:14:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:14:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 13, 46), -0.11054, 100.663, 0.0, 18.8078, 11.6248, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:14:18.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:13:46
2026-04-12T10:14:18.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:14:18.908 [DEBUG] [Thread-187316] [transport.py] [_log()] starting thread (client mode): 0xa7969e40
2026-04-12T10:14:18.908 [DEBUG] [Thread-187316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:14:18.927 [DEBUG] [Thread-187316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:14:18.927 [INFO] [Thread-187316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] client lang: <none>
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] server lang: <none>
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] kex follows: False
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] Compression: none
2026-04-12T10:14:18.931 [DEBUG] [Thread-187316] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:14:18.947 [DEBUG] [Thread-187316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:14:18.947 [DEBUG] [Thread-187316] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:14:18.947 [DEBUG] [Thread-187316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:14:18.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:14:18.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:14:18.948 [DEBUG] [Thread-187316] [transport.py] [_log()] userauth is OK
2026-04-12T10:14:18.948 [DEBUG] [Thread-187316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:14:18.948 [DEBUG] [Thread-187316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:14:18.948 [DEBUG] [Thread-187316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:14:18.948 [DEBUG] [Thread-187316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:14:18.962 [INFO] [Thread-187316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:14:18.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:14:19.737 [DEBUG] [Thread-187316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:14:19.738 [DEBUG] [Thread-187316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:14:19.738 [DEBUG] [Thread-187316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:14:19.779 [DEBUG] [Thread-187316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:14:19.779 [DEBUG] [Thread-187316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:14:19.782 [DEBUG] [Thread-187316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:14:19.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:14:19.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:14:19.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:14:19.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:14:19.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:14:19.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:14:19.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.342819 -999.00  +11.80  16.60     92  +10.60 1 2 1 3 1   888    0 1.66 21.02 ----- 17.7 16.6 291.2 23.1 16.1 -22.3 15.2 -19.2 14.0 -18.5 15.1 -20.2
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.342819
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:14:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:13:46', tmtdew=-0.11054, humidity=100.663, cloud=0.0, wind=18.8078, temperature=11.6248, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:13:39.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:14:19.800 [DEBUG] [Thread-187316] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:14:19.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:14:19.882 [DEBUG] [Thread-187319] [transport.py] [_log()] starting thread (client mode): 0xae561030
2026-04-12T10:14:19.882 [DEBUG] [Thread-187319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:14:19.897 [DEBUG] [Thread-187319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:14:19.897 [INFO] [Thread-187319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] client lang: <none>
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] server lang: <none>
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] kex follows: False
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:14:19.904 [DEBUG] [Thread-187319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:14:19.905 [DEBUG] [Thread-187319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:14:19.905 [DEBUG] [Thread-187319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:14:19.905 [DEBUG] [Thread-187319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:14:19.905 [DEBUG] [Thread-187319] [transport.py] [_log()] Compression: none
2026-04-12T10:14:19.905 [DEBUG] [Thread-187319] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:14:19.963 [DEBUG] [Thread-187319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:14:19.963 [DEBUG] [Thread-187319] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:14:19.963 [DEBUG] [Thread-187319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:14:19.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:14:19.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:14:20.020 [DEBUG] [Thread-187319] [transport.py] [_log()] userauth is OK
2026-04-12T10:14:20.020 [DEBUG] [Thread-187319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:14:20.020 [DEBUG] [Thread-187319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:14:20.020 [DEBUG] [Thread-187319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:14:20.020 [DEBUG] [Thread-187319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:14:20.033 [INFO] [Thread-187319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:14:20.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:14:20.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:14:20.874 [DEBUG] [Thread-187319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:14:20.874 [DEBUG] [Thread-187319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:14:20.923 [DEBUG] [Thread-187319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:14:20.923 [DEBUG] [Thread-187319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:14:20.931 [DEBUG] [Thread-187319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:14:20.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:14:20.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:14:20.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:14:20.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:14:20.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:14:20.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:14:20.962 [DEBUG] [Thread-187319] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:14:24.194 [DEBUG] [Thread-187321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:27.598 [DEBUG] [Thread-187322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:39.230 [DEBUG] [Thread-187323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:50.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:14:50.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:14:50.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:14:52.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 14, 22), -0.063035, 100.381, 0.0, 18.7736, 11.1117, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:14:52.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:14:22
2026-04-12T10:14:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:14:52.798 [DEBUG] [Thread-187324] [transport.py] [_log()] starting thread (client mode): 0xb0f8cc40
2026-04-12T10:14:52.798 [DEBUG] [Thread-187324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:14:52.819 [DEBUG] [Thread-187324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:14:52.819 [INFO] [Thread-187324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] client lang: <none>
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] server lang: <none>
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] kex follows: False
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:14:52.822 [DEBUG] [Thread-187324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:14:52.823 [DEBUG] [Thread-187324] [transport.py] [_log()] Compression: none
2026-04-12T10:14:52.823 [DEBUG] [Thread-187324] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:14:52.836 [DEBUG] [Thread-187324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:14:52.836 [DEBUG] [Thread-187324] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:14:52.837 [DEBUG] [Thread-187324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:14:52.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:14:52.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:14:52.837 [DEBUG] [Thread-187324] [transport.py] [_log()] userauth is OK
2026-04-12T10:14:52.837 [DEBUG] [Thread-187324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:14:52.837 [DEBUG] [Thread-187324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:14:52.837 [DEBUG] [Thread-187324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:14:52.838 [DEBUG] [Thread-187324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:14:52.856 [INFO] [Thread-187324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:14:52.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:14:53.668 [DEBUG] [Thread-187324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:14:53.668 [DEBUG] [Thread-187324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:14:53.668 [DEBUG] [Thread-187324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:14:53.709 [DEBUG] [Thread-187324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:14:53.709 [DEBUG] [Thread-187324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:14:53.711 [DEBUG] [Thread-187324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:14:53.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:14:53.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:14:53.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:14:53.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:14:53.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:14:53.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:14:53.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:14:53.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:14:53.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.343166 -999.00  +11.80  16.56     92  +10.60 1 2 1 3 1   888    0 1.62 19.79 ----- 16.6 16.6 282.1 19.9 15.9 -20.2 15.2 -17.8 14.1 -16.1 15.0 -18.5
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.343166
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:14:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:14:22', tmtdew=-0.063035, humidity=100.381, cloud=0.0, wind=18.7736, temperature=11.1117, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:14:09.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:14:53.730 [DEBUG] [Thread-187324] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:14:53.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:14:53.838 [DEBUG] [Thread-187327] [transport.py] [_log()] starting thread (client mode): 0xb0fb4910
2026-04-12T10:14:53.838 [DEBUG] [Thread-187327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:14:53.879 [DEBUG] [Thread-187327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:14:53.880 [INFO] [Thread-187327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] client lang: <none>
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] server lang: <none>
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] kex follows: False
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] Compression: none
2026-04-12T10:14:53.915 [DEBUG] [Thread-187327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:14:53.947 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:53.948 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:53.997 [DEBUG] [Thread-187327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:14:53.998 [DEBUG] [Thread-187327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:14:53.998 [DEBUG] [Thread-187327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:14:53.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:14:53.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:14:54.106 [DEBUG] [Thread-187327] [transport.py] [_log()] userauth is OK
2026-04-12T10:14:54.106 [DEBUG] [Thread-187327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:14:54.106 [DEBUG] [Thread-187327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:14:54.106 [DEBUG] [Thread-187327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:14:54.106 [DEBUG] [Thread-187327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:14:54.147 [INFO] [Thread-187327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:14:54.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:14:54.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:14:54.255 [DEBUG] [Thread-187329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:14:54.966 [DEBUG] [Thread-187327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:14:54.966 [DEBUG] [Thread-187327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:14:55.040 [DEBUG] [Thread-187327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:14:55.040 [DEBUG] [Thread-187327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:14:55.076 [DEBUG] [Thread-187327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:14:55.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:14:55.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:14:55.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:14:55.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:14:55.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:14:55.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:14:55.215 [DEBUG] [Thread-187327] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:15:09.289 [DEBUG] [Thread-187330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:15:24.318 [DEBUG] [Thread-187331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:15:25.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:15:25.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:15:25.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:15:26.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 14, 57), -0.0102, 100.365, 0.0, 17.186, 10.9792, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:15:26.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:14:57
2026-04-12T10:15:26.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:15:27.018 [DEBUG] [Thread-187332] [transport.py] [_log()] starting thread (client mode): 0xa796ba90
2026-04-12T10:15:27.018 [DEBUG] [Thread-187332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:15:27.037 [DEBUG] [Thread-187332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:15:27.037 [INFO] [Thread-187332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] client lang: <none>
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] server lang: <none>
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] kex follows: False
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:15:27.041 [DEBUG] [Thread-187332] [transport.py] [_log()] Compression: none
2026-04-12T10:15:27.042 [DEBUG] [Thread-187332] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:15:27.057 [DEBUG] [Thread-187332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:15:27.057 [DEBUG] [Thread-187332] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:15:27.057 [DEBUG] [Thread-187332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:15:27.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:15:27.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:15:27.060 [DEBUG] [Thread-187332] [transport.py] [_log()] userauth is OK
2026-04-12T10:15:27.060 [DEBUG] [Thread-187332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:15:27.060 [DEBUG] [Thread-187332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:15:27.060 [DEBUG] [Thread-187332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:15:27.060 [DEBUG] [Thread-187332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:15:27.069 [INFO] [Thread-187332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:15:27.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:15:27.626 [DEBUG] [Thread-187334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:15:28.639 [DEBUG] [Thread-187332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:15:28.640 [DEBUG] [Thread-187332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:15:28.640 [DEBUG] [Thread-187332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:15:28.680 [DEBUG] [Thread-187332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:15:28.680 [DEBUG] [Thread-187332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:15:28.683 [DEBUG] [Thread-187332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:15:28.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:15:28.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:15:28.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:15:28.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:15:28.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:15:28.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:15:28.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.343860 -999.00  +11.80  15.47     92  +10.70 1 2 1 3 1   888    0 1.63 19.97 ----- 17.6 15.5 288.8 22.6 15.7 -20.8 15.0 -18.7 13.9 -17.0 14.9 -18.9
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.343860
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:15:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:14:57', tmtdew=-0.0102, humidity=100.365, cloud=0.0, wind=17.186, temperature=10.9792, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:15:09.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:15:28.703 [DEBUG] [Thread-187332] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:15:28.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:15:28.788 [DEBUG] [Thread-187336] [transport.py] [_log()] starting thread (client mode): 0xb0fb4580
2026-04-12T10:15:28.788 [DEBUG] [Thread-187336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:15:28.806 [DEBUG] [Thread-187336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:15:28.806 [INFO] [Thread-187336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] client lang: <none>
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] server lang: <none>
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] kex follows: False
2026-04-12T10:15:28.817 [DEBUG] [Thread-187336] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:15:28.818 [DEBUG] [Thread-187336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:15:28.818 [DEBUG] [Thread-187336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:15:28.818 [DEBUG] [Thread-187336] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:15:28.818 [DEBUG] [Thread-187336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:15:28.818 [DEBUG] [Thread-187336] [transport.py] [_log()] Compression: none
2026-04-12T10:15:28.818 [DEBUG] [Thread-187336] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:15:28.880 [DEBUG] [Thread-187336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:15:28.880 [DEBUG] [Thread-187336] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:15:28.880 [DEBUG] [Thread-187336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:15:28.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:15:28.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:15:28.944 [DEBUG] [Thread-187336] [transport.py] [_log()] userauth is OK
2026-04-12T10:15:28.944 [DEBUG] [Thread-187336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:15:28.944 [DEBUG] [Thread-187336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:15:28.944 [DEBUG] [Thread-187336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:15:28.944 [DEBUG] [Thread-187336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:15:28.962 [INFO] [Thread-187336] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:15:28.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:15:28.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:15:29.799 [DEBUG] [Thread-187336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:15:29.799 [DEBUG] [Thread-187336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:15:29.851 [DEBUG] [Thread-187336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:15:29.851 [DEBUG] [Thread-187336] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:15:29.864 [DEBUG] [Thread-187336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:15:29.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:15:29.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:15:29.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
2026-04-12T10:15:29.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:15:29.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:15:29.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:15:29.913 [DEBUG] [Thread-187336] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:15:39.342 [DEBUG] [Thread-187338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:15:54.095 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:15:54.095 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:15:54.376 [DEBUG] [Thread-187339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:15:59.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:15:59.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:15: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
2026-04-12T10:16:01.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 15, 33), -0.11506, 100.695, 0.0, 20.8188, 11.4254, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:16:01.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:15:33
2026-04-12T10:16:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:16:01.711 [DEBUG] [Thread-187340] [transport.py] [_log()] starting thread (client mode): 0xa796beb0
2026-04-12T10:16:01.711 [DEBUG] [Thread-187340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:16:01.733 [DEBUG] [Thread-187340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:16:01.733 [INFO] [Thread-187340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] client lang: <none>
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] server lang: <none>
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] kex follows: False
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] Compression: none
2026-04-12T10:16:01.736 [DEBUG] [Thread-187340] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:16:01.752 [DEBUG] [Thread-187340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:16:01.753 [DEBUG] [Thread-187340] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:16:01.753 [DEBUG] [Thread-187340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:16:01.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:16:01.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:16:01.754 [DEBUG] [Thread-187340] [transport.py] [_log()] userauth is OK
2026-04-12T10:16:01.754 [DEBUG] [Thread-187340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:16:01.754 [DEBUG] [Thread-187340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:16:01.754 [DEBUG] [Thread-187340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:16:01.754 [DEBUG] [Thread-187340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:16:01.769 [INFO] [Thread-187340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:16:01.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:16:02.322 [DEBUG] [Thread-187340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:16:02.322 [DEBUG] [Thread-187340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:16:02.322 [DEBUG] [Thread-187340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:16:02.363 [DEBUG] [Thread-187340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:16:02.364 [DEBUG] [Thread-187340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:16:02.366 [DEBUG] [Thread-187340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:16:02.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:16:02.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:16:02.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:16:02.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:16:02.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:16:02.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:16:02.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.344207 -999.00  +11.80  17.32     92  +10.60 1 2 1 3 1   888    0 1.69 22.08 ----- 17.9 17.3 286.8 24.8 15.6 -20.4 15.0 -18.4 13.9 -18.0 14.7 -19.2
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.344207
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:16:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:16:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:16:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:16:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:15:33', tmtdew=-0.11506, humidity=100.695, cloud=0.0, wind=20.8188, temperature=11.4254, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:15:39.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:16:02.382 [DEBUG] [Thread-187340] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:16:02.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:16:02.491 [DEBUG] [Thread-187343] [transport.py] [_log()] starting thread (client mode): 0xa796ace0
2026-04-12T10:16:02.492 [DEBUG] [Thread-187343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:16:02.536 [DEBUG] [Thread-187343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:16:02.536 [INFO] [Thread-187343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:02.575 [DEBUG] [Thread-187343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] client lang: <none>
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] server lang: <none>
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] kex follows: False
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] Compression: none
2026-04-12T10:16:02.576 [DEBUG] [Thread-187343] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:16:02.663 [DEBUG] [Thread-187343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:16:02.663 [DEBUG] [Thread-187343] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:16:02.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:16:02.663 [DEBUG] [Thread-187343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:16:02.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:16:02.780 [DEBUG] [Thread-187343] [transport.py] [_log()] userauth is OK
2026-04-12T10:16:02.780 [DEBUG] [Thread-187343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:16:02.780 [DEBUG] [Thread-187343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:16:02.780 [DEBUG] [Thread-187343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:16:02.780 [DEBUG] [Thread-187343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:16:02.825 [INFO] [Thread-187343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:16:02.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:16:02.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:16:03.661 [DEBUG] [Thread-187343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:16:03.661 [DEBUG] [Thread-187343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:16:03.738 [DEBUG] [Thread-187343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:16:03.738 [DEBUG] [Thread-187343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:16:03.779 [DEBUG] [Thread-187343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:16:03.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:16:03.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:16:03.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:16:03.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:16:03.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:16:03.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:16:03.926 [DEBUG] [Thread-187343] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:16:09.400 [DEBUG] [Thread-187345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:16:24.439 [DEBUG] [Thread-187346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:16:27.670 [DEBUG] [Thread-187347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:16:33.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:16:33.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:16:33.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:16:35.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 16, 8), -0.052565, 100.314, 0.0, 20.4325, 10.9957, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:16:35.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:16:08
2026-04-12T10:16:35.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:16:35.812 [DEBUG] [Thread-187348] [transport.py] [_log()] starting thread (client mode): 0xa79398a0
2026-04-12T10:16:35.812 [DEBUG] [Thread-187348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:16:35.835 [DEBUG] [Thread-187348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:16:35.835 [INFO] [Thread-187348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:16:35.837 [DEBUG] [Thread-187348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] client lang: <none>
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] server lang: <none>
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] kex follows: False
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] Compression: none
2026-04-12T10:16:35.838 [DEBUG] [Thread-187348] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:16:35.848 [DEBUG] [Thread-187348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:16:35.849 [DEBUG] [Thread-187348] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:16:35.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:16:35.850 [DEBUG] [Thread-187348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:16:35.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:16:35.852 [DEBUG] [Thread-187348] [transport.py] [_log()] userauth is OK
2026-04-12T10:16:35.852 [DEBUG] [Thread-187348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:16:35.852 [DEBUG] [Thread-187348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:16:35.852 [DEBUG] [Thread-187348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:16:35.853 [DEBUG] [Thread-187348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:16:35.877 [INFO] [Thread-187348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:16:35.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:16:36.473 [DEBUG] [Thread-187348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:16:36.473 [DEBUG] [Thread-187348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:16:36.473 [DEBUG] [Thread-187348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:16:36.513 [DEBUG] [Thread-187348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:16:36.513 [DEBUG] [Thread-187348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:16:36.516 [DEBUG] [Thread-187348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:16:36.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:16:36.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:16:36.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:16:36.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:16:36.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:16:36.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:16:36.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:16:36.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:16:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:16:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.344555 -999.00  +11.80  12.13     92  +10.60 1 2 1 3 1   888    0 1.76 23.44 ----- 14.8 12.1 264.0 26.5 15.5 -19.8 -999.0 -999.0 13.9 -17.3 14.7 -18.8
2026-04-12T10:16:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:16:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:16:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.344555
2026-04-12T10:16:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:16:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:16:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:16:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:16:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:16:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:16:08', tmtdew=-0.052565, humidity=100.314, cloud=0.0, wind=20.4325, temperature=10.9957, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:16:09.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:16:36.532 [DEBUG] [Thread-187348] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:16:36.637 [DEBUG] [Thread-187351] [transport.py] [_log()] starting thread (client mode): 0xb0f41db0
2026-04-12T10:16:36.637 [DEBUG] [Thread-187351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:16:36.670 [DEBUG] [Thread-187351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:16:36.670 [INFO] [Thread-187351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:16:36.698 [DEBUG] [Thread-187351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:16:36.698 [DEBUG] [Thread-187351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:16:36.698 [DEBUG] [Thread-187351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:16:36.698 [DEBUG] [Thread-187351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:36.698 [DEBUG] [Thread-187351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:16:36.698 [DEBUG] [Thread-187351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] client lang: <none>
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] server lang: <none>
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] kex follows: False
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] Compression: none
2026-04-12T10:16:36.699 [DEBUG] [Thread-187351] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:16:36.778 [DEBUG] [Thread-187351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:16:36.779 [DEBUG] [Thread-187351] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:16:36.780 [DEBUG] [Thread-187351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:16:36.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:16:36.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:16:36.873 [DEBUG] [Thread-187351] [transport.py] [_log()] userauth is OK
2026-04-12T10:16:36.873 [DEBUG] [Thread-187351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:16:36.873 [DEBUG] [Thread-187351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:16:36.873 [DEBUG] [Thread-187351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:16:36.874 [DEBUG] [Thread-187351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:16:36.910 [INFO] [Thread-187351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:16:36.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:16:36.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:16:37.697 [DEBUG] [Thread-187351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:16:37.697 [DEBUG] [Thread-187351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:16:37.765 [DEBUG] [Thread-187351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:16:37.765 [DEBUG] [Thread-187351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:16:37.793 [DEBUG] [Thread-187351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:16:37.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:16:37.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:16:37.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:16:37.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:16:37.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:16:37.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:16:37.900 [DEBUG] [Thread-187351] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:16:39.485 [DEBUG] [Thread-187353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:16:54.237 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:16:54.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:16:54.537 [DEBUG] [Thread-187354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:17:07.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:17:07.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:17:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:17:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 16, 43), -0.11539, 100.695, 0.0, 23.0767, 11.6572, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:17:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:16:43
2026-04-12T10:17:09.571 [DEBUG] [Thread-187355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:17:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:17:09.818 [DEBUG] [Thread-187356] [transport.py] [_log()] starting thread (client mode): 0xb0f8f340
2026-04-12T10:17:09.818 [DEBUG] [Thread-187356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:17:09.838 [DEBUG] [Thread-187356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:17:09.838 [INFO] [Thread-187356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] client lang: <none>
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] server lang: <none>
2026-04-12T10:17:09.841 [DEBUG] [Thread-187356] [transport.py] [_log()] kex follows: False
2026-04-12T10:17:09.842 [DEBUG] [Thread-187356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:17:09.842 [DEBUG] [Thread-187356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:17:09.842 [DEBUG] [Thread-187356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:17:09.842 [DEBUG] [Thread-187356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:17:09.842 [DEBUG] [Thread-187356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:17:09.842 [DEBUG] [Thread-187356] [transport.py] [_log()] Compression: none
2026-04-12T10:17:09.842 [DEBUG] [Thread-187356] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:17:09.850 [DEBUG] [Thread-187356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:17:09.851 [DEBUG] [Thread-187356] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:17:09.851 [DEBUG] [Thread-187356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:17:09.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:17:09.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:17:09.853 [DEBUG] [Thread-187356] [transport.py] [_log()] userauth is OK
2026-04-12T10:17:09.853 [DEBUG] [Thread-187356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:17:09.853 [DEBUG] [Thread-187356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:17:09.853 [DEBUG] [Thread-187356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:17:09.853 [DEBUG] [Thread-187356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:17:09.878 [INFO] [Thread-187356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:17:09.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:17:10.500 [DEBUG] [Thread-187356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:17:10.500 [DEBUG] [Thread-187356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:17:10.501 [DEBUG] [Thread-187356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:17:10.541 [DEBUG] [Thread-187356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:17:10.541 [DEBUG] [Thread-187356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:17:10.544 [DEBUG] [Thread-187356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:17:10.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:17:10.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:17:10.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:17:10.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:17:10.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:17:10.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:17:10.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:17:10.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:17:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:17:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.344902 -999.00  +11.70  17.67     92  +10.60 1 2 1 3 1   888    0 1.80 24.83 ----- 16.2 17.7 275.3 22.1 15.5 -19.8 14.8 -17.9 13.9 -17.0 14.7 -19.1
2026-04-12T10:17:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:17:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:17:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.344902
2026-04-12T10:17:10.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:17:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:17:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:17:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:17:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:17:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:16:43', tmtdew=-0.11539, humidity=100.695, cloud=0.0, wind=23.0767, temperature=11.6572, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:16:39.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:17:10.573 [DEBUG] [Thread-187356] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:17:10.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:17:10.675 [DEBUG] [Thread-187359] [transport.py] [_log()] starting thread (client mode): 0xb0fb7fd0
2026-04-12T10:17:10.676 [DEBUG] [Thread-187359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:17:10.702 [DEBUG] [Thread-187359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:17:10.702 [INFO] [Thread-187359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:17:10.721 [DEBUG] [Thread-187359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] client lang: <none>
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] server lang: <none>
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] kex follows: False
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:17:10.722 [DEBUG] [Thread-187359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:17:10.723 [DEBUG] [Thread-187359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:17:10.723 [DEBUG] [Thread-187359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:17:10.723 [DEBUG] [Thread-187359] [transport.py] [_log()] Compression: none
2026-04-12T10:17:10.723 [DEBUG] [Thread-187359] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:17:10.793 [DEBUG] [Thread-187359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:17:10.793 [DEBUG] [Thread-187359] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:17:10.794 [DEBUG] [Thread-187359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:17:10.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:17:10.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:17:10.873 [DEBUG] [Thread-187359] [transport.py] [_log()] userauth is OK
2026-04-12T10:17:10.873 [DEBUG] [Thread-187359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:17:10.873 [DEBUG] [Thread-187359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:17:10.874 [DEBUG] [Thread-187359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:17:10.874 [DEBUG] [Thread-187359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:17:10.904 [INFO] [Thread-187359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:17:10.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:17:10.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:17:11.798 [DEBUG] [Thread-187359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:17:11.798 [DEBUG] [Thread-187359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:17:11.859 [DEBUG] [Thread-187359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:17:11.860 [DEBUG] [Thread-187359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:17:11.882 [DEBUG] [Thread-187359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:17:11.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:17:11.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:17:11.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:17:11.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:17:11.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:17:11.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:17:11.973 [DEBUG] [Thread-187359] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:17:24.605 [DEBUG] [Thread-187361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:17:27.715 [DEBUG] [Thread-187362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:17:39.651 [DEBUG] [Thread-187363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:17:41.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:17:41.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:17:41.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:17:43.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 17, 19), -0.01022, 100.364, 0.0, 21.2087, 10.9952, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:17:43.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:17:19
2026-04-12T10:17:43.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:17:43.826 [DEBUG] [Thread-187364] [transport.py] [_log()] starting thread (client mode): 0xae5e66e0
2026-04-12T10:17:43.826 [DEBUG] [Thread-187364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:17:43.846 [DEBUG] [Thread-187364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:17:43.846 [INFO] [Thread-187364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:17:43.850 [DEBUG] [Thread-187364] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:17:43.850 [DEBUG] [Thread-187364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:17:43.850 [DEBUG] [Thread-187364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:17:43.850 [DEBUG] [Thread-187364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] client lang: <none>
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] server lang: <none>
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] kex follows: False
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:17:43.851 [DEBUG] [Thread-187364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:17:43.852 [DEBUG] [Thread-187364] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:17:43.852 [DEBUG] [Thread-187364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:17:43.852 [DEBUG] [Thread-187364] [transport.py] [_log()] Compression: none
2026-04-12T10:17:43.852 [DEBUG] [Thread-187364] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:17:43.868 [DEBUG] [Thread-187364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:17:43.868 [DEBUG] [Thread-187364] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:17:43.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:17:43.869 [DEBUG] [Thread-187364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:17:43.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:17:43.873 [DEBUG] [Thread-187364] [transport.py] [_log()] userauth is OK
2026-04-12T10:17:43.873 [DEBUG] [Thread-187364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:17:43.873 [DEBUG] [Thread-187364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:17:43.873 [DEBUG] [Thread-187364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:17:43.873 [DEBUG] [Thread-187364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:17:43.909 [INFO] [Thread-187364] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:17:43.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:17:44.536 [DEBUG] [Thread-187364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:17:44.536 [DEBUG] [Thread-187364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:17:44.537 [DEBUG] [Thread-187364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:17:44.578 [DEBUG] [Thread-187364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:17:44.578 [DEBUG] [Thread-187364] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:17:44.581 [DEBUG] [Thread-187364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:17:44.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:17:44.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:17:44.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:17:44.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:17:44.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:17:44.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:17:44.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:17:44.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:17:44.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:17:44.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.345249 -999.00  +11.70  24.28     92  +10.50 1 2 1 3 1   888    0 1.81 25.10 ----- 23.9 24.3 272.0 25.9 15.2 -20.2 14.8 -17.6 13.7 -17.8 14.5 -19.8
2026-04-12T10:17:44.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:17:44.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:17:44.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.345249
2026-04-12T10:17:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:17:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:17:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:17:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:17:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:17:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:17:19', tmtdew=-0.01022, humidity=100.364, cloud=0.0, wind=21.2087, temperature=10.9952, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:17:09.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:17:44.615 [DEBUG] [Thread-187364] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:17:44.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:17:44.708 [DEBUG] [Thread-187367] [transport.py] [_log()] starting thread (client mode): 0xb0f8d2d0
2026-04-12T10:17:44.708 [DEBUG] [Thread-187367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:17:44.723 [DEBUG] [Thread-187367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:17:44.723 [INFO] [Thread-187367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:17:44.731 [DEBUG] [Thread-187367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] client lang: <none>
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] server lang: <none>
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] kex follows: False
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] Compression: none
2026-04-12T10:17:44.732 [DEBUG] [Thread-187367] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:17:44.789 [DEBUG] [Thread-187367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:17:44.790 [DEBUG] [Thread-187367] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:17:44.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:17:44.791 [DEBUG] [Thread-187367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:17:44.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:17:44.846 [DEBUG] [Thread-187367] [transport.py] [_log()] userauth is OK
2026-04-12T10:17:44.846 [DEBUG] [Thread-187367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:17:44.846 [DEBUG] [Thread-187367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:17:44.846 [DEBUG] [Thread-187367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:17:44.846 [DEBUG] [Thread-187367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:17:44.865 [INFO] [Thread-187367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:17:44.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:17:44.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:17:45.704 [DEBUG] [Thread-187367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:17:45.704 [DEBUG] [Thread-187367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:17:45.752 [DEBUG] [Thread-187367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:17:45.752 [DEBUG] [Thread-187367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:17:45.762 [DEBUG] [Thread-187367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:17:45.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:17:45.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:17:45.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:17:45.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:17:45.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:17:45.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:17:45.799 [DEBUG] [Thread-187367] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:17:54.392 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:17:54.393 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:17:54.689 [DEBUG] [Thread-187369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:18:09.749 [DEBUG] [Thread-187370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:18:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:18:15.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:18:15.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:18:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 17, 55), -0.055105, 100.33, 0.0, 20.4854, 10.9282, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:18:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:17:55
2026-04-12T10:18:17.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:18:17.640 [DEBUG] [Thread-187371] [transport.py] [_log()] starting thread (client mode): 0xb0fb7f70
2026-04-12T10:18:17.640 [DEBUG] [Thread-187371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:18:17.660 [DEBUG] [Thread-187371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:18:17.660 [INFO] [Thread-187371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:18:17.663 [DEBUG] [Thread-187371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] client lang: <none>
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] server lang: <none>
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] kex follows: False
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:18:17.664 [DEBUG] [Thread-187371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:18:17.665 [DEBUG] [Thread-187371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:18:17.665 [DEBUG] [Thread-187371] [transport.py] [_log()] Compression: none
2026-04-12T10:18:17.665 [DEBUG] [Thread-187371] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:18:17.686 [DEBUG] [Thread-187371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:18:17.687 [DEBUG] [Thread-187371] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:18:17.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:18:17.688 [DEBUG] [Thread-187371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:18:17.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:18:17.689 [DEBUG] [Thread-187371] [transport.py] [_log()] userauth is OK
2026-04-12T10:18:17.689 [DEBUG] [Thread-187371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:18:17.690 [DEBUG] [Thread-187371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:18:17.690 [DEBUG] [Thread-187371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:18:17.690 [DEBUG] [Thread-187371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:18:17.723 [INFO] [Thread-187371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:18:17.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:18:18.365 [DEBUG] [Thread-187371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:18:18.369 [DEBUG] [Thread-187371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:18:18.370 [DEBUG] [Thread-187371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:18:18.406 [DEBUG] [Thread-187371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:18:18.406 [DEBUG] [Thread-187371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:18:18.410 [DEBUG] [Thread-187371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:18:18.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:18:18.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:18:18.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:18:18.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:18:18.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:18:18.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:18:18.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:18:18.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:18:18.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:18:18.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.345944 -999.00  +11.50  24.84     92  +10.30 1 2 1 3 1   888    0 1.75 23.44 ----- 19.8 24.8 279.4 28.3 15.2 -17.8 14.7 -15.9 13.6 -16.2 14.5 -17.6
2026-04-12T10:18:18.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:18:18.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:18:18.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.345944
2026-04-12T10:18:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:18:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:18:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:18:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:18:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:18:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:17:55', tmtdew=-0.055105, humidity=100.33, cloud=0.0, wind=20.4854, temperature=10.9282, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:18:09.562', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:18:18.438 [DEBUG] [Thread-187371] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:18:18.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:18:18.529 [DEBUG] [Thread-187374] [transport.py] [_log()] starting thread (client mode): 0xb0f42200
2026-04-12T10:18:18.529 [DEBUG] [Thread-187374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:18:18.544 [DEBUG] [Thread-187374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:18:18.545 [INFO] [Thread-187374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:18:18.552 [DEBUG] [Thread-187374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:18:18.553 [DEBUG] [Thread-187374] [transport.py] [_log()] client lang: <none>
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] server lang: <none>
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] kex follows: False
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] Compression: none
2026-04-12T10:18:18.554 [DEBUG] [Thread-187374] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:18:18.610 [DEBUG] [Thread-187374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:18:18.610 [DEBUG] [Thread-187374] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:18:18.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:18:18.612 [DEBUG] [Thread-187374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:18:18.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:18:18.670 [DEBUG] [Thread-187374] [transport.py] [_log()] userauth is OK
2026-04-12T10:18:18.671 [DEBUG] [Thread-187374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:18:18.671 [DEBUG] [Thread-187374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:18:18.671 [DEBUG] [Thread-187374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:18:18.671 [DEBUG] [Thread-187374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:18:18.691 [INFO] [Thread-187374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:18:18.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:18:18.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:18:19.572 [DEBUG] [Thread-187374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:18:19.572 [DEBUG] [Thread-187374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:18:19.620 [DEBUG] [Thread-187374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:18:19.620 [DEBUG] [Thread-187374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:18:19.629 [DEBUG] [Thread-187374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:18:19.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:18:19.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:18:19.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:18:19.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:18:19.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:18:19.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:18:19.667 [DEBUG] [Thread-187374] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:18:24.789 [DEBUG] [Thread-187376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:18:27.758 [DEBUG] [Thread-187377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:18:39.847 [DEBUG] [Thread-187378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:18:49.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:18:49.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:18:49.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:18:51.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 18, 30), -0.06011, 100.363, 0.0, 18.1746, 10.9776, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:18:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:18:30
2026-04-12T10:18:51.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:18:51.576 [DEBUG] [Thread-187379] [transport.py] [_log()] starting thread (client mode): 0xa79683d0
2026-04-12T10:18:51.576 [DEBUG] [Thread-187379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:18:51.597 [DEBUG] [Thread-187379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:18:51.597 [INFO] [Thread-187379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] client lang: <none>
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] server lang: <none>
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] kex follows: False
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] Compression: none
2026-04-12T10:18:51.601 [DEBUG] [Thread-187379] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:18:51.618 [DEBUG] [Thread-187379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:18:51.619 [DEBUG] [Thread-187379] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:18:51.619 [DEBUG] [Thread-187379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:18:51.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:18:51.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:18:51.621 [DEBUG] [Thread-187379] [transport.py] [_log()] userauth is OK
2026-04-12T10:18:51.621 [DEBUG] [Thread-187379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:18:51.621 [DEBUG] [Thread-187379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:18:51.621 [DEBUG] [Thread-187379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:18:51.621 [DEBUG] [Thread-187379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:18:51.645 [INFO] [Thread-187379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:18:51.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:18:52.268 [DEBUG] [Thread-187379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:18:52.268 [DEBUG] [Thread-187379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:18:52.269 [DEBUG] [Thread-187379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:18:52.309 [DEBUG] [Thread-187379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:18:52.309 [DEBUG] [Thread-187379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:18:52.312 [DEBUG] [Thread-187379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:18:52.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:18:52.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:18:52.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:18:52.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:18:52.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:18:52.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:18:52.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:18:52.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:18:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:18:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.346291 -999.00  +11.50  15.55     92  +10.20 1 2 1 3 1   888    0 1.82 24.91 ----- 15.3 15.6 284.1 23.8 15.2 -16.4 14.8 -14.4 13.5 -15.7 14.5 -16.3
2026-04-12T10:18:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:18:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:18:52.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.346291
2026-04-12T10:18:52.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:18:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:18:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:18:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:18:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:18:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:18:30', tmtdew=-0.06011, humidity=100.363, cloud=0.0, wind=18.1746, temperature=10.9776, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:18:39.542', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:18:52.343 [DEBUG] [Thread-187379] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:18:52.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:18:52.463 [DEBUG] [Thread-187382] [transport.py] [_log()] starting thread (client mode): 0xb0f42950
2026-04-12T10:18:52.464 [DEBUG] [Thread-187382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:18:52.502 [DEBUG] [Thread-187382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:18:52.503 [INFO] [Thread-187382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:18:52.535 [DEBUG] [Thread-187382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:18:52.535 [DEBUG] [Thread-187382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:18:52.535 [DEBUG] [Thread-187382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:18:52.535 [DEBUG] [Thread-187382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] client lang: <none>
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] server lang: <none>
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] kex follows: False
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:18:52.536 [DEBUG] [Thread-187382] [transport.py] [_log()] Compression: none
2026-04-12T10:18:52.537 [DEBUG] [Thread-187382] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:18:52.623 [DEBUG] [Thread-187382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:18:52.623 [DEBUG] [Thread-187382] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:18:52.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:18:52.624 [DEBUG] [Thread-187382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:18:52.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:18:52.730 [DEBUG] [Thread-187382] [transport.py] [_log()] userauth is OK
2026-04-12T10:18:52.731 [DEBUG] [Thread-187382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:18:52.731 [DEBUG] [Thread-187382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:18:52.731 [DEBUG] [Thread-187382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:18:52.731 [DEBUG] [Thread-187382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:18:52.776 [INFO] [Thread-187382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:18:52.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:18:52.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:18:53.598 [DEBUG] [Thread-187382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:18:53.598 [DEBUG] [Thread-187382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:18:53.671 [DEBUG] [Thread-187382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:18:53.672 [DEBUG] [Thread-187382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:18:53.709 [DEBUG] [Thread-187382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:18:53.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:18:53.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:18:53.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:18:53.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:18:53.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:18:53.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:18:53.855 [DEBUG] [Thread-187382] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:18:54.546 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:18:54.548 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:18:54.888 [DEBUG] [Thread-187384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:09.941 [DEBUG] [Thread-187385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:23.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:19:23.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:19:23.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:19:24.978 [DEBUG] [Thread-187386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 19, 5), -0.060135, 100.363, 0.0, 18.6156, 10.9942, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:19:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:19:05
2026-04-12T10:19:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:19:25.658 [DEBUG] [Thread-187387] [transport.py] [_log()] starting thread (client mode): 0xb0f40c40
2026-04-12T10:19:25.658 [DEBUG] [Thread-187387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:19:25.677 [DEBUG] [Thread-187387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:19:25.678 [INFO] [Thread-187387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] client lang: <none>
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] server lang: <none>
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] kex follows: False
2026-04-12T10:19:25.681 [DEBUG] [Thread-187387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:19:25.682 [DEBUG] [Thread-187387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:19:25.682 [DEBUG] [Thread-187387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:19:25.682 [DEBUG] [Thread-187387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:19:25.682 [DEBUG] [Thread-187387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:19:25.682 [DEBUG] [Thread-187387] [transport.py] [_log()] Compression: none
2026-04-12T10:19:25.682 [DEBUG] [Thread-187387] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:19:25.692 [DEBUG] [Thread-187387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:19:25.692 [DEBUG] [Thread-187387] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:19:25.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:19:25.693 [DEBUG] [Thread-187387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:19:25.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:19:25.695 [DEBUG] [Thread-187387] [transport.py] [_log()] userauth is OK
2026-04-12T10:19:25.695 [DEBUG] [Thread-187387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:19:25.695 [DEBUG] [Thread-187387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:19:25.696 [DEBUG] [Thread-187387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:19:25.696 [DEBUG] [Thread-187387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:19:25.732 [INFO] [Thread-187387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:19:25.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:19:26.373 [DEBUG] [Thread-187387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:19:26.373 [DEBUG] [Thread-187387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:19:26.374 [DEBUG] [Thread-187387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:19:26.414 [DEBUG] [Thread-187387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:19:26.414 [DEBUG] [Thread-187387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:19:26.418 [DEBUG] [Thread-187387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:19:26.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:19:26.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:19:26.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:19:26.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:19:26.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:19:26.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:19:26.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:19:26.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:19:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:19:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.346638 -999.00  +11.60  12.15     92  +10.40 1 2 1 3 1   888    0 1.77 22.44 ----- 11.4 12.2 294.9 19.9 15.4 -15.0 14.8 -14.0 13.8 -14.2 14.6 -15.4
2026-04-12T10:19:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:19:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:19:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.346638
2026-04-12T10:19:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:19:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:19:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:19:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:19:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:19:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:19:05', tmtdew=-0.060135, humidity=100.363, cloud=0.0, wind=18.6156, temperature=10.9942, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:19:09.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:19:26.445 [DEBUG] [Thread-187387] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:19:26.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:19:26.571 [DEBUG] [Thread-187390] [transport.py] [_log()] starting thread (client mode): 0xae5b4310
2026-04-12T10:19:26.572 [DEBUG] [Thread-187390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:19:26.615 [DEBUG] [Thread-187390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:19:26.616 [INFO] [Thread-187390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:19:26.652 [DEBUG] [Thread-187390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:19:26.652 [DEBUG] [Thread-187390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:19:26.652 [DEBUG] [Thread-187390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:19:26.652 [DEBUG] [Thread-187390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:19:26.652 [DEBUG] [Thread-187390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:19:26.652 [DEBUG] [Thread-187390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] client lang: <none>
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] server lang: <none>
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] kex follows: False
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] Compression: none
2026-04-12T10:19:26.653 [DEBUG] [Thread-187390] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:19:26.742 [DEBUG] [Thread-187390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:19:26.742 [DEBUG] [Thread-187390] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:19:26.743 [DEBUG] [Thread-187390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:19:26.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:19:26.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:19:26.858 [DEBUG] [Thread-187390] [transport.py] [_log()] userauth is OK
2026-04-12T10:19:26.859 [DEBUG] [Thread-187390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:19:26.859 [DEBUG] [Thread-187390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:19:26.859 [DEBUG] [Thread-187390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:19:26.859 [DEBUG] [Thread-187390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:19:26.913 [INFO] [Thread-187390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:19:26.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:19:26.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:19:27.768 [DEBUG] [Thread-187390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:19:27.768 [DEBUG] [Thread-187390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:19:27.811 [DEBUG] [Thread-187392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:27.845 [DEBUG] [Thread-187390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:19:27.845 [DEBUG] [Thread-187390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:19:27.886 [DEBUG] [Thread-187390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:19:27.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:19:27.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:19:27.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:19:28.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:19:28.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:19:28.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:19:28.044 [DEBUG] [Thread-187390] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:19:40.012 [DEBUG] [Thread-187393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:54.695 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:54.696 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:55.074 [DEBUG] [Thread-187394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:19:58.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:19:58.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:19:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:19:59.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 19, 41), -0.10533, 100.625, 0.0, 21.348, 11.8874, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:19:59.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:19:41
2026-04-12T10:19:59.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:19:59.807 [DEBUG] [Thread-187395] [transport.py] [_log()] starting thread (client mode): 0xb0f42170
2026-04-12T10:19:59.807 [DEBUG] [Thread-187395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:19:59.826 [DEBUG] [Thread-187395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:19:59.826 [INFO] [Thread-187395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] client lang: <none>
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] server lang: <none>
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] kex follows: False
2026-04-12T10:19:59.829 [DEBUG] [Thread-187395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:19:59.830 [DEBUG] [Thread-187395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:19:59.830 [DEBUG] [Thread-187395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:19:59.830 [DEBUG] [Thread-187395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:19:59.830 [DEBUG] [Thread-187395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:19:59.830 [DEBUG] [Thread-187395] [transport.py] [_log()] Compression: none
2026-04-12T10:19:59.830 [DEBUG] [Thread-187395] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:19:59.846 [DEBUG] [Thread-187395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:19:59.846 [DEBUG] [Thread-187395] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:19:59.847 [DEBUG] [Thread-187395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:19:59.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:19:59.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:19:59.849 [DEBUG] [Thread-187395] [transport.py] [_log()] userauth is OK
2026-04-12T10:19:59.849 [DEBUG] [Thread-187395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:19:59.849 [DEBUG] [Thread-187395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:19:59.849 [DEBUG] [Thread-187395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:19:59.849 [DEBUG] [Thread-187395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:19:59.873 [INFO] [Thread-187395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:19:59.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:20:00.465 [DEBUG] [Thread-187395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:20:00.465 [DEBUG] [Thread-187395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:20:00.465 [DEBUG] [Thread-187395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:20:00.506 [DEBUG] [Thread-187395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:20:00.506 [DEBUG] [Thread-187395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:20:00.509 [DEBUG] [Thread-187395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:20:00.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:20:00.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:20:00.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:20:00.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:20:00.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:20:00.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:20:00.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:20:00.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:20:00.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:20:00.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.346985 -999.00  +11.70  15.68     92  +10.50 1 2 1 3 1   888    0 1.68 20.27 ----- 17.6 15.7 283.6 20.3 15.6 -16.2 15.0 -14.6 13.9 -14.0 14.7 -15.7
2026-04-12T10:20:00.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:20:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:20:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.346985
2026-04-12T10:20:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:20:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:20:00.534 [DEBUG] [Thread-187395] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:20:00.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:20:00.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:20:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:20:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:19:41', tmtdew=-0.10533, humidity=100.625, cloud=0.0, wind=21.348, temperature=11.8874, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:19:39.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:20:00.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:20:00.624 [DEBUG] [Thread-187398] [transport.py] [_log()] starting thread (client mode): 0xb0f42fe0
2026-04-12T10:20:00.624 [DEBUG] [Thread-187398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:20:00.643 [DEBUG] [Thread-187398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:20:00.643 [INFO] [Thread-187398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:20:00.651 [DEBUG] [Thread-187398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:20:00.652 [DEBUG] [Thread-187398] [transport.py] [_log()] client lang: <none>
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] server lang: <none>
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] kex follows: False
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] Compression: none
2026-04-12T10:20:00.653 [DEBUG] [Thread-187398] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:20:00.712 [DEBUG] [Thread-187398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:20:00.712 [DEBUG] [Thread-187398] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:20:00.713 [DEBUG] [Thread-187398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:20:00.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:20:00.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:20:00.768 [DEBUG] [Thread-187398] [transport.py] [_log()] userauth is OK
2026-04-12T10:20:00.768 [DEBUG] [Thread-187398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:20:00.768 [DEBUG] [Thread-187398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:20:00.768 [DEBUG] [Thread-187398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:20:00.768 [DEBUG] [Thread-187398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:20:00.786 [INFO] [Thread-187398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:20:00.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:20:00.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:20:01.623 [DEBUG] [Thread-187398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:20:01.623 [DEBUG] [Thread-187398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:20:01.671 [DEBUG] [Thread-187398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:20:01.671 [DEBUG] [Thread-187398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:20:01.680 [DEBUG] [Thread-187398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:20:01.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:20:01.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:20:01.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:20:01.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:20:01.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:20:01.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:20:01.717 [DEBUG] [Thread-187398] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:20:10.107 [DEBUG] [Thread-187400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:20:25.160 [DEBUG] [Thread-187401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:20:27.876 [DEBUG] [Thread-187402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:20:31.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:20:31.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:20:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:20:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 20, 16), -0.00511, 100.329, 0.0, 19.1272, 11.1606, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:20:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:20:16
2026-04-12T10:20:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:20:33.637 [DEBUG] [Thread-187403] [transport.py] [_log()] starting thread (client mode): 0xae519db0
2026-04-12T10:20:33.637 [DEBUG] [Thread-187403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:20:33.655 [DEBUG] [Thread-187403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:20:33.656 [INFO] [Thread-187403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:20:33.659 [DEBUG] [Thread-187403] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:20:33.659 [DEBUG] [Thread-187403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:20:33.659 [DEBUG] [Thread-187403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:20:33.659 [DEBUG] [Thread-187403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:20:33.659 [DEBUG] [Thread-187403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] client lang: <none>
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] server lang: <none>
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] kex follows: False
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:20:33.660 [DEBUG] [Thread-187403] [transport.py] [_log()] Compression: none
2026-04-12T10:20:33.661 [DEBUG] [Thread-187403] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:20:33.676 [DEBUG] [Thread-187403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:20:33.677 [DEBUG] [Thread-187403] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:20:33.677 [DEBUG] [Thread-187403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:20:33.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:20:33.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:20:33.679 [DEBUG] [Thread-187403] [transport.py] [_log()] userauth is OK
2026-04-12T10:20:33.679 [DEBUG] [Thread-187403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:20:33.679 [DEBUG] [Thread-187403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:20:33.679 [DEBUG] [Thread-187403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:20:33.679 [DEBUG] [Thread-187403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:20:33.701 [INFO] [Thread-187403] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:20:33.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:20:34.381 [DEBUG] [Thread-187403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:20:34.381 [DEBUG] [Thread-187403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:20:34.382 [DEBUG] [Thread-187403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:20:34.422 [DEBUG] [Thread-187403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:20:34.422 [DEBUG] [Thread-187403] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:20:34.426 [DEBUG] [Thread-187403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:20:34.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:20:34.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:20:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:20:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:20:34.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:20:34.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:20:34.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:20:34.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:20:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:20:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.347332 -999.00  +11.80  18.49     92  +10.60 1 2 1 3 1   888    0 1.67 19.60 ----- 20.9 18.5 280.4 21.6 15.5 -16.6 14.9 -14.7 13.9 -16.1 14.7 -16.7
2026-04-12T10:20:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:20:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:20:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.347332
2026-04-12T10:20:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:20:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:20:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:20:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:20:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:20:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:20:16', tmtdew=-0.00511, humidity=100.329, cloud=0.0, wind=19.1272, temperature=11.1606, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:20:09.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:20:34.450 [DEBUG] [Thread-187403] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:20:34.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:20:34.557 [DEBUG] [Thread-187406] [transport.py] [_log()] starting thread (client mode): 0xae51a980
2026-04-12T10:20:34.557 [DEBUG] [Thread-187406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:20:34.572 [DEBUG] [Thread-187406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:20:34.572 [INFO] [Thread-187406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:20:34.579 [DEBUG] [Thread-187406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:20:34.579 [DEBUG] [Thread-187406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:20:34.579 [DEBUG] [Thread-187406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:20:34.579 [DEBUG] [Thread-187406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] client lang: <none>
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] server lang: <none>
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] kex follows: False
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] Compression: none
2026-04-12T10:20:34.580 [DEBUG] [Thread-187406] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:20:34.640 [DEBUG] [Thread-187406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:20:34.640 [DEBUG] [Thread-187406] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:20:34.641 [DEBUG] [Thread-187406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:20:34.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:20:34.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:20:34.697 [DEBUG] [Thread-187406] [transport.py] [_log()] userauth is OK
2026-04-12T10:20:34.697 [DEBUG] [Thread-187406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:20:34.697 [DEBUG] [Thread-187406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:20:34.697 [DEBUG] [Thread-187406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:20:34.698 [DEBUG] [Thread-187406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:20:34.718 [INFO] [Thread-187406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:20:34.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:20:34.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:20:35.574 [DEBUG] [Thread-187406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:20:35.575 [DEBUG] [Thread-187406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:20:35.623 [DEBUG] [Thread-187406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:20:35.623 [DEBUG] [Thread-187406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:20:35.632 [DEBUG] [Thread-187406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:20:35.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:20: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')
2026-04-12T10:20:35.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:20:35.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:20:35.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:20:35.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:20:35.668 [DEBUG] [Thread-187406] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:20:40.197 [DEBUG] [Thread-187408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:20:54.837 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:20:54.839 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:20:55.255 [DEBUG] [Thread-187409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:21:05.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:21:05.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:21: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
2026-04-12T10:21:07.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 20, 52), -0.11012, 100.658, 0.0, 23.4648, 11.7549, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:21:07.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:20:52
2026-04-12T10:21:07.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:21:07.620 [DEBUG] [Thread-187410] [transport.py] [_log()] starting thread (client mode): 0xa793bd60
2026-04-12T10:21:07.620 [DEBUG] [Thread-187410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:21:07.640 [DEBUG] [Thread-187410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:21:07.640 [INFO] [Thread-187410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] client lang: <none>
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] server lang: <none>
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] kex follows: False
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] Compression: none
2026-04-12T10:21:07.643 [DEBUG] [Thread-187410] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:21:07.652 [DEBUG] [Thread-187410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:21:07.653 [DEBUG] [Thread-187410] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:21:07.653 [DEBUG] [Thread-187410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:21:07.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:21:07.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:21:07.655 [DEBUG] [Thread-187410] [transport.py] [_log()] userauth is OK
2026-04-12T10:21:07.655 [DEBUG] [Thread-187410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:21:07.655 [DEBUG] [Thread-187410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:21:07.655 [DEBUG] [Thread-187410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:21:07.655 [DEBUG] [Thread-187410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:21:07.685 [INFO] [Thread-187410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:21:07.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:21:08.323 [DEBUG] [Thread-187410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:21:08.323 [DEBUG] [Thread-187410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:21:08.323 [DEBUG] [Thread-187410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:21:08.363 [DEBUG] [Thread-187410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:21:08.364 [DEBUG] [Thread-187410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:21:08.366 [DEBUG] [Thread-187410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:21:08.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:21:08.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:21:08.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:21:08.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:21:08.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:21:08.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:21:08.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:21:08.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:21:08.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:21:08.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.347680 -999.00  +11.80  16.03     92  +10.50 1 2 1 3 1   888    0 1.62 18.09 ----- 17.0 16.0 277.4 23.9 15.6 -15.6 15.0 -14.6 13.8 -14.1 14.7 -15.1
2026-04-12T10:21:08.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:21:08.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:21:08.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.347680
2026-04-12T10:21:08.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:21:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:21:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:21:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:21:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:21:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:20:52', tmtdew=-0.11012, humidity=100.658, cloud=0.0, wind=23.4648, temperature=11.7549, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:20:39.552', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:21:08.391 [DEBUG] [Thread-187410] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:21:08.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:21:08.478 [DEBUG] [Thread-187413] [transport.py] [_log()] starting thread (client mode): 0xae5b0250
2026-04-12T10:21:08.478 [DEBUG] [Thread-187413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:21:08.496 [DEBUG] [Thread-187413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:21:08.496 [INFO] [Thread-187413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] client lang: <none>
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] server lang: <none>
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] kex follows: False
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] Compression: none
2026-04-12T10:21:08.509 [DEBUG] [Thread-187413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:21:08.566 [DEBUG] [Thread-187413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:21:08.567 [DEBUG] [Thread-187413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:21:08.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:21:08.569 [DEBUG] [Thread-187413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:21:08.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:21:08.625 [DEBUG] [Thread-187413] [transport.py] [_log()] userauth is OK
2026-04-12T10:21:08.626 [DEBUG] [Thread-187413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:21:08.626 [DEBUG] [Thread-187413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:21:08.626 [DEBUG] [Thread-187413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:21:08.627 [DEBUG] [Thread-187413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:21:08.645 [INFO] [Thread-187413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:21:08.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:21:08.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:21:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:21:09.580 [DEBUG] [Thread-187413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:21:09.627 [DEBUG] [Thread-187413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:21:09.627 [DEBUG] [Thread-187413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:21:09.637 [DEBUG] [Thread-187413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:21:09.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:21:09.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:21:09.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:21:09.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:21:09.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:21:09.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:21:09.675 [DEBUG] [Thread-187413] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:21:10.290 [DEBUG] [Thread-187415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:21:25.354 [DEBUG] [Thread-187416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:21:27.906 [DEBUG] [Thread-187417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:21:39.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:21:39.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:21:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:21:40.392 [DEBUG] [Thread-187418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:21:40.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 21, 27), -0.012525, 100.379, 0.0, 20.0621, 11.1109, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:21:40.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:21:27
2026-04-12T10:21:41.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:21:41.549 [DEBUG] [Thread-187419] [transport.py] [_log()] starting thread (client mode): 0xa79399c0
2026-04-12T10:21:41.549 [DEBUG] [Thread-187419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:21:41.569 [DEBUG] [Thread-187419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:21:41.569 [INFO] [Thread-187419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:21:41.572 [DEBUG] [Thread-187419] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] client lang: <none>
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] server lang: <none>
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] kex follows: False
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:21:41.573 [DEBUG] [Thread-187419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:21:41.574 [DEBUG] [Thread-187419] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:21:41.574 [DEBUG] [Thread-187419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:21:41.574 [DEBUG] [Thread-187419] [transport.py] [_log()] Compression: none
2026-04-12T10:21:41.574 [DEBUG] [Thread-187419] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:21:41.594 [DEBUG] [Thread-187419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:21:41.594 [DEBUG] [Thread-187419] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:21:41.595 [DEBUG] [Thread-187419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:21:41.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:21:41.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:21:41.597 [DEBUG] [Thread-187419] [transport.py] [_log()] userauth is OK
2026-04-12T10:21:41.598 [DEBUG] [Thread-187419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:21:41.598 [DEBUG] [Thread-187419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:21:41.598 [DEBUG] [Thread-187419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:21:41.598 [DEBUG] [Thread-187419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:21:41.616 [INFO] [Thread-187419] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:21:41.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:21:42.258 [DEBUG] [Thread-187419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:21:42.258 [DEBUG] [Thread-187419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:21:42.259 [DEBUG] [Thread-187419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:21:42.300 [DEBUG] [Thread-187419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:21:42.300 [DEBUG] [Thread-187419] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:21:42.303 [DEBUG] [Thread-187419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:21:42.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:21:42.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:21:42.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:21:42.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:21:42.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:21:42.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:21:42.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:21:42.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:21:42.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:21:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.348027 -999.00  +11.70  18.81     91  +10.50 1 2 1 3 1   888    0 1.65 18.45 ----- 14.5 18.8 275.2 27.7 15.6 -15.6 14.9 -14.2 13.8 -14.9 14.7 -15.0
2026-04-12T10:21:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:21:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:21:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.348027
2026-04-12T10:21:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:21:42.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:21:42.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:21:42.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:21:42.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:21:42.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:21:27', tmtdew=-0.012525, humidity=100.379, cloud=0.0, wind=20.0621, temperature=11.1109, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:21:09.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:21:42.325 [DEBUG] [Thread-187419] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:21:42.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:21:42.422 [DEBUG] [Thread-187422] [transport.py] [_log()] starting thread (client mode): 0xae5b7970
2026-04-12T10:21:42.422 [DEBUG] [Thread-187422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:21:42.436 [DEBUG] [Thread-187422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:21:42.436 [INFO] [Thread-187422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] client lang: <none>
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] server lang: <none>
2026-04-12T10:21:42.444 [DEBUG] [Thread-187422] [transport.py] [_log()] kex follows: False
2026-04-12T10:21:42.445 [DEBUG] [Thread-187422] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:21:42.445 [DEBUG] [Thread-187422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:21:42.445 [DEBUG] [Thread-187422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:21:42.445 [DEBUG] [Thread-187422] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:21:42.445 [DEBUG] [Thread-187422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:21:42.445 [DEBUG] [Thread-187422] [transport.py] [_log()] Compression: none
2026-04-12T10:21:42.445 [DEBUG] [Thread-187422] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:21:42.506 [DEBUG] [Thread-187422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:21:42.506 [DEBUG] [Thread-187422] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:21:42.506 [DEBUG] [Thread-187422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:21:42.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:21:42.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:21:42.567 [DEBUG] [Thread-187422] [transport.py] [_log()] userauth is OK
2026-04-12T10:21:42.567 [DEBUG] [Thread-187422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:21:42.567 [DEBUG] [Thread-187422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:21:42.567 [DEBUG] [Thread-187422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:21:42.567 [DEBUG] [Thread-187422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:21:42.589 [INFO] [Thread-187422] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:21:42.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:21:42.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:21:43.438 [DEBUG] [Thread-187422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:21:43.439 [DEBUG] [Thread-187422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:21:43.488 [DEBUG] [Thread-187422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:21:43.488 [DEBUG] [Thread-187422] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:21:43.497 [DEBUG] [Thread-187422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:21:43.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:21:43.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:21:43.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:21:43.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:21:43.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:21:43.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:21:43.536 [DEBUG] [Thread-187422] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:21:54.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:21:54.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:21:55.431 [DEBUG] [Thread-187424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:22:10.491 [DEBUG] [Thread-187425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:22:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:22:13.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:22:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:22:14.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 22, 3), -0.007625, 100.345, 0.0, 20.3972, 11.1936, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:22:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:22:03
2026-04-12T10:22:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:22:15.343 [DEBUG] [Thread-187426] [transport.py] [_log()] starting thread (client mode): 0xae51b370
2026-04-12T10:22:15.343 [DEBUG] [Thread-187426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:22:15.362 [DEBUG] [Thread-187426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:22:15.362 [INFO] [Thread-187426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] client lang: <none>
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] server lang: <none>
2026-04-12T10:22:15.366 [DEBUG] [Thread-187426] [transport.py] [_log()] kex follows: False
2026-04-12T10:22:15.367 [DEBUG] [Thread-187426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:22:15.367 [DEBUG] [Thread-187426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:22:15.367 [DEBUG] [Thread-187426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:22:15.367 [DEBUG] [Thread-187426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:22:15.367 [DEBUG] [Thread-187426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:22:15.367 [DEBUG] [Thread-187426] [transport.py] [_log()] Compression: none
2026-04-12T10:22:15.367 [DEBUG] [Thread-187426] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:22:15.379 [DEBUG] [Thread-187426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:22:15.379 [DEBUG] [Thread-187426] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:22:15.379 [DEBUG] [Thread-187426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:22:15.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:22:15.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:22:15.420 [DEBUG] [Thread-187426] [transport.py] [_log()] userauth is OK
2026-04-12T10:22:15.421 [DEBUG] [Thread-187426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:22:15.421 [DEBUG] [Thread-187426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:22:15.421 [DEBUG] [Thread-187426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:22:15.421 [DEBUG] [Thread-187426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:22:15.458 [INFO] [Thread-187426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:22:15.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:22:16.047 [DEBUG] [Thread-187426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:22:16.047 [DEBUG] [Thread-187426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:22:16.048 [DEBUG] [Thread-187426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:22:16.088 [DEBUG] [Thread-187426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:22:16.088 [DEBUG] [Thread-187426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:22:16.091 [DEBUG] [Thread-187426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:22:16.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:22:16.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:22:16.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:22:16.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:22:16.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:22:16.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:22:16.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:22:16.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:22:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:22:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.348374 -999.00  +11.70  20.22     92  +10.50 1 2 1 3 1   888    0 1.70 19.36 ----- 17.4 20.2 275.0 23.6 15.6 -15.3 14.9 -13.8 13.8 -13.1 14.8 -14.9
2026-04-12T10:22:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:22:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:22:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.348374
2026-04-12T10:22:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:22:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:22:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:22:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:22:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:22:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:22:03', tmtdew=-0.007625, humidity=100.345, cloud=0.0, wind=20.3972, temperature=11.1936, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:21:39.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:22:16.118 [DEBUG] [Thread-187426] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:22:16.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:22:16.211 [DEBUG] [Thread-187429] [transport.py] [_log()] starting thread (client mode): 0xae51b0d0
2026-04-12T10:22:16.211 [DEBUG] [Thread-187429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:22:16.230 [DEBUG] [Thread-187429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:22:16.231 [INFO] [Thread-187429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:22:16.242 [DEBUG] [Thread-187429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] client lang: <none>
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] server lang: <none>
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] kex follows: False
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] Compression: none
2026-04-12T10:22:16.243 [DEBUG] [Thread-187429] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:22:16.299 [DEBUG] [Thread-187429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:22:16.300 [DEBUG] [Thread-187429] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:22:16.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:22:16.301 [DEBUG] [Thread-187429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:22:16.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:22:16.359 [DEBUG] [Thread-187429] [transport.py] [_log()] userauth is OK
2026-04-12T10:22:16.359 [DEBUG] [Thread-187429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:22:16.360 [DEBUG] [Thread-187429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:22:16.360 [DEBUG] [Thread-187429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:22:16.360 [DEBUG] [Thread-187429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:22:16.396 [INFO] [Thread-187429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:22:16.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:22:16.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:22:17.218 [DEBUG] [Thread-187429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:22:17.219 [DEBUG] [Thread-187429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:22:17.267 [DEBUG] [Thread-187429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:22:17.267 [DEBUG] [Thread-187429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:22:17.276 [DEBUG] [Thread-187429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:22:17.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:22:17.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:22:17.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:22:17.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:22:17.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:22:17.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:22:17.319 [DEBUG] [Thread-187429] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:22:25.529 [DEBUG] [Thread-187431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:22:27.964 [DEBUG] [Thread-187432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:22:40.580 [DEBUG] [Thread-187433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:22:47.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:22:47.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:22: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
2026-04-12T10:22:48.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 22, 38), -0.11061, 100.658, 0.0, 20.4307, 12.0861, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:22:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:22:38
2026-04-12T10:22:48.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:22:49.140 [DEBUG] [Thread-187434] [transport.py] [_log()] starting thread (client mode): 0xa793b2e0
2026-04-12T10:22:49.140 [DEBUG] [Thread-187434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:22:49.160 [DEBUG] [Thread-187434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:22:49.160 [INFO] [Thread-187434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] client lang: <none>
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] server lang: <none>
2026-04-12T10:22:49.163 [DEBUG] [Thread-187434] [transport.py] [_log()] kex follows: False
2026-04-12T10:22:49.164 [DEBUG] [Thread-187434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:22:49.164 [DEBUG] [Thread-187434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:22:49.164 [DEBUG] [Thread-187434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:22:49.164 [DEBUG] [Thread-187434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:22:49.164 [DEBUG] [Thread-187434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:22:49.164 [DEBUG] [Thread-187434] [transport.py] [_log()] Compression: none
2026-04-12T10:22:49.164 [DEBUG] [Thread-187434] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:22:49.182 [DEBUG] [Thread-187434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:22:49.182 [DEBUG] [Thread-187434] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:22:49.183 [DEBUG] [Thread-187434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:22:49.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:22:49.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:22:49.183 [DEBUG] [Thread-187434] [transport.py] [_log()] userauth is OK
2026-04-12T10:22:49.183 [DEBUG] [Thread-187434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:22:49.184 [DEBUG] [Thread-187434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:22:49.184 [DEBUG] [Thread-187434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:22:49.184 [DEBUG] [Thread-187434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:22:49.211 [INFO] [Thread-187434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:22:49.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:22:49.830 [DEBUG] [Thread-187434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:22:49.830 [DEBUG] [Thread-187434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:22:49.830 [DEBUG] [Thread-187434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:22:49.871 [DEBUG] [Thread-187434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:22:49.871 [DEBUG] [Thread-187434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:22:49.873 [DEBUG] [Thread-187434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:22:49.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:22:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:22:49.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:22:49.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:22:49.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:22:49.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:22:49.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:22:49.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:22:49.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:22:49.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.349068 -999.00  +11.90  14.13     92  +10.70 1 2 1 3 1   888    0 1.64 17.85 ----- 16.5 14.1 268.0 18.5 15.8 -13.1 15.1 -11.2 14.1 -12.0 14.8 -12.3
2026-04-12T10:22:49.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:22:49.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:22:49.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.349068
2026-04-12T10:22:49.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:22:49.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:22:49.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:22:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:22:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:22:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:22:38', tmtdew=-0.11061, humidity=100.658, cloud=0.0, wind=20.4307, temperature=12.0861, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:22:39.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:22:49.894 [DEBUG] [Thread-187434] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:22:49.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:22:49.989 [DEBUG] [Thread-187437] [transport.py] [_log()] starting thread (client mode): 0xb0f41270
2026-04-12T10:22:49.989 [DEBUG] [Thread-187437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:22:50.003 [DEBUG] [Thread-187437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:22:50.004 [INFO] [Thread-187437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:22:50.011 [DEBUG] [Thread-187437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:22:50.011 [DEBUG] [Thread-187437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:22:50.011 [DEBUG] [Thread-187437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:22:50.011 [DEBUG] [Thread-187437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:50.011 [DEBUG] [Thread-187437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:22:50.011 [DEBUG] [Thread-187437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] client lang: <none>
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] server lang: <none>
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] kex follows: False
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] Compression: none
2026-04-12T10:22:50.012 [DEBUG] [Thread-187437] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:22:50.071 [DEBUG] [Thread-187437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:22:50.072 [DEBUG] [Thread-187437] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:22:50.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:22:50.073 [DEBUG] [Thread-187437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:22:50.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:22:50.126 [DEBUG] [Thread-187437] [transport.py] [_log()] userauth is OK
2026-04-12T10:22:50.127 [DEBUG] [Thread-187437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:22:50.127 [DEBUG] [Thread-187437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:22:50.127 [DEBUG] [Thread-187437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:22:50.127 [DEBUG] [Thread-187437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:22:50.145 [INFO] [Thread-187437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:22:50.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:22:50.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:22:51.035 [DEBUG] [Thread-187437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:22:51.035 [DEBUG] [Thread-187437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:22:51.110 [DEBUG] [Thread-187437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:22:51.110 [DEBUG] [Thread-187437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:22:51.147 [DEBUG] [Thread-187437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:22:51.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:22:51.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:22:51.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:22:51.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:22:51.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:22:51.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:22:51.292 [DEBUG] [Thread-187437] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:22:55.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:22:55.141 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:22:55.616 [DEBUG] [Thread-187439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:10.669 [DEBUG] [Thread-187440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:23:21.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:23:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:23:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 23, 14), -0.005405, 100.329, 0.0, 18.9853, 11.4258, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:23:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:23:14
2026-04-12T10:23:22.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:23:23.096 [DEBUG] [Thread-187441] [transport.py] [_log()] starting thread (client mode): 0xb0f41c00
2026-04-12T10:23:23.096 [DEBUG] [Thread-187441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:23:23.116 [DEBUG] [Thread-187441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:23:23.116 [INFO] [Thread-187441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] client lang: <none>
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] server lang: <none>
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] kex follows: False
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:23:23.117 [DEBUG] [Thread-187441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:23:23.118 [DEBUG] [Thread-187441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:23:23.118 [DEBUG] [Thread-187441] [transport.py] [_log()] Compression: none
2026-04-12T10:23:23.118 [DEBUG] [Thread-187441] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:23:23.134 [DEBUG] [Thread-187441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:23:23.134 [DEBUG] [Thread-187441] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:23:23.135 [DEBUG] [Thread-187441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:23:23.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:23:23.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:23:23.137 [DEBUG] [Thread-187441] [transport.py] [_log()] userauth is OK
2026-04-12T10:23:23.138 [DEBUG] [Thread-187441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:23:23.138 [DEBUG] [Thread-187441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:23:23.138 [DEBUG] [Thread-187441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:23:23.138 [DEBUG] [Thread-187441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:23:23.173 [INFO] [Thread-187441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:23:23.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:23:23.780 [DEBUG] [Thread-187441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:23:23.780 [DEBUG] [Thread-187441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:23:23.780 [DEBUG] [Thread-187441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:23:23.821 [DEBUG] [Thread-187441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:23:23.821 [DEBUG] [Thread-187441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:23:23.825 [DEBUG] [Thread-187441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:23:23.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:23:23.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:23:23.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:23:23.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:23:23.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:23:23.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:23:23.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:23:23.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:23:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:23:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.349416 -999.00  +11.90  17.62     92  +10.60 1 3 1 3 1   888    0 1.60 15.70 ----- 17.3 17.6 265.6 20.1 15.7 -11.9 15.1 -10.3 14.1 -9.4 14.9 -11.7
2026-04-12T10:23:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:23:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:23:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.349416
2026-04-12T10:23:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:23:23.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:23:23.843 [DEBUG] [Thread-187441] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:23:23.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:23:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:23:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:23:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:23:14', tmtdew=-0.005405, humidity=100.329, cloud=0.0, wind=18.9853, temperature=11.4258, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:23:09.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:23:23.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:23:23.934 [DEBUG] [Thread-187444] [transport.py] [_log()] starting thread (client mode): 0xa7939ab0
2026-04-12T10:23:23.934 [DEBUG] [Thread-187444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:23:23.949 [DEBUG] [Thread-187444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:23:23.949 [INFO] [Thread-187444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] client lang: <none>
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] server lang: <none>
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] kex follows: False
2026-04-12T10:23:23.957 [DEBUG] [Thread-187444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:23:23.958 [DEBUG] [Thread-187444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:23:23.958 [DEBUG] [Thread-187444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:23:23.958 [DEBUG] [Thread-187444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:23:23.958 [DEBUG] [Thread-187444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:23:23.958 [DEBUG] [Thread-187444] [transport.py] [_log()] Compression: none
2026-04-12T10:23:23.958 [DEBUG] [Thread-187444] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:23:24.016 [DEBUG] [Thread-187444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:23:24.016 [DEBUG] [Thread-187444] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:23:24.017 [DEBUG] [Thread-187444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:23:24.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:23:24.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:23:24.071 [DEBUG] [Thread-187444] [transport.py] [_log()] userauth is OK
2026-04-12T10:23:24.071 [DEBUG] [Thread-187444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:23:24.072 [DEBUG] [Thread-187444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:23:24.072 [DEBUG] [Thread-187444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:23:24.072 [DEBUG] [Thread-187444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:23:24.091 [INFO] [Thread-187444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:23:24.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:23:24.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:23:24.941 [DEBUG] [Thread-187444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:23:24.941 [DEBUG] [Thread-187444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:23:24.989 [DEBUG] [Thread-187444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:23:24.989 [DEBUG] [Thread-187444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:23:24.998 [DEBUG] [Thread-187444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:23:25.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:23:25.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:23:25.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:23:25.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:23:25.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:23:25.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:23:25.036 [DEBUG] [Thread-187444] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:23:25.705 [DEBUG] [Thread-187446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:28.022 [DEBUG] [Thread-187447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:40.767 [DEBUG] [Thread-187448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:55.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:23:55.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:23:55.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:23:55.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:55.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:55.805 [DEBUG] [Thread-187449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:23:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 23, 14), -0.005405, 100.329, 0.0, 18.9853, 11.4258, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:23:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:23:14
2026-04-12T10:23:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:23:56.878 [DEBUG] [Thread-187450] [transport.py] [_log()] starting thread (client mode): 0xae51beb0
2026-04-12T10:23:56.878 [DEBUG] [Thread-187450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:23:56.893 [DEBUG] [Thread-187450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:23:56.893 [INFO] [Thread-187450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] client lang: <none>
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] server lang: <none>
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] kex follows: False
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:23:56.894 [DEBUG] [Thread-187450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:23:56.895 [DEBUG] [Thread-187450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:23:56.895 [DEBUG] [Thread-187450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:23:56.895 [DEBUG] [Thread-187450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:23:56.895 [DEBUG] [Thread-187450] [transport.py] [_log()] Compression: none
2026-04-12T10:23:56.895 [DEBUG] [Thread-187450] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:23:56.906 [DEBUG] [Thread-187450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:23:56.906 [DEBUG] [Thread-187450] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:23:56.907 [DEBUG] [Thread-187450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:23:56.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:23:56.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:23:56.908 [DEBUG] [Thread-187450] [transport.py] [_log()] userauth is OK
2026-04-12T10:23:56.909 [DEBUG] [Thread-187450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:23:56.909 [DEBUG] [Thread-187450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:23:56.909 [DEBUG] [Thread-187450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:23:56.909 [DEBUG] [Thread-187450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:23:56.927 [INFO] [Thread-187450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:23:56.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:23:57.573 [DEBUG] [Thread-187450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:23:57.574 [DEBUG] [Thread-187450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:23:57.574 [DEBUG] [Thread-187450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:23:57.615 [DEBUG] [Thread-187450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:23:57.615 [DEBUG] [Thread-187450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:23:57.619 [DEBUG] [Thread-187450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:23:57.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:23:57.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:23:57.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:23:57.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:23:57.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:23:57.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:23:57.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:23:57.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:23:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:23:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.349763 -999.00  +11.80  15.22     91  +10.60 1 2 1 3 1   888    0 1.60 15.88 ----- 16.5 15.2 283.4 21.8 15.7 -12.8 15.1 -11.4 14.1 -12.1 14.9 -11.9
2026-04-12T10:23:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:23:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:23:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.349763
2026-04-12T10:23:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:23:57.644 [DEBUG] [Thread-187450] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:23:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:23:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:23:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:23:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:23:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:23:14', tmtdew=-0.005405, humidity=100.329, cloud=0.0, wind=18.9853, temperature=11.4258, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:23:39.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:23:57.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:23:57.742 [DEBUG] [Thread-187453] [transport.py] [_log()] starting thread (client mode): 0xa79686a0
2026-04-12T10:23:57.742 [DEBUG] [Thread-187453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:23:57.756 [DEBUG] [Thread-187453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:23:57.756 [INFO] [Thread-187453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:23:57.772 [DEBUG] [Thread-187453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] client lang: <none>
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] server lang: <none>
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] kex follows: False
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] Compression: none
2026-04-12T10:23:57.773 [DEBUG] [Thread-187453] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:23:57.830 [DEBUG] [Thread-187453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:23:57.831 [DEBUG] [Thread-187453] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:23:57.831 [DEBUG] [Thread-187453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:23:57.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:23:57.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:23:57.887 [DEBUG] [Thread-187453] [transport.py] [_log()] userauth is OK
2026-04-12T10:23:57.888 [DEBUG] [Thread-187453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:23:57.888 [DEBUG] [Thread-187453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:23:57.888 [DEBUG] [Thread-187453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:23:57.888 [DEBUG] [Thread-187453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:23:57.909 [INFO] [Thread-187453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:23:57.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:23:57.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:23:58.710 [DEBUG] [Thread-187453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:23:58.711 [DEBUG] [Thread-187453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:23:58.758 [DEBUG] [Thread-187453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:23:58.758 [DEBUG] [Thread-187453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:23:58.767 [DEBUG] [Thread-187453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:23:58.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:23: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')
2026-04-12T10:23:58.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:23:58.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:23:58.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:23:58.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:23:58.805 [DEBUG] [Thread-187453] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:24:10.839 [DEBUG] [Thread-187455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:24:25.898 [DEBUG] [Thread-187456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:24:28.066 [DEBUG] [Thread-187457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:24:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:24:28.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:24:28.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:24:30.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 23, 49), -0.11552, 100.69, 0.0, 16.2677, 12.0858, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:24:30.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:23:49
2026-04-12T10:24:30.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:24:30.712 [DEBUG] [Thread-187458] [transport.py] [_log()] starting thread (client mode): 0xae5e6950
2026-04-12T10:24:30.712 [DEBUG] [Thread-187458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:24:30.733 [DEBUG] [Thread-187458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:24:30.733 [INFO] [Thread-187458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] client lang: <none>
2026-04-12T10:24:30.736 [DEBUG] [Thread-187458] [transport.py] [_log()] server lang: <none>
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] kex follows: False
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] Compression: none
2026-04-12T10:24:30.737 [DEBUG] [Thread-187458] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:24:30.754 [DEBUG] [Thread-187458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:24:30.755 [DEBUG] [Thread-187458] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:24:30.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:24:30.756 [DEBUG] [Thread-187458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:24:30.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:24:30.758 [DEBUG] [Thread-187458] [transport.py] [_log()] userauth is OK
2026-04-12T10:24:30.758 [DEBUG] [Thread-187458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:24:30.758 [DEBUG] [Thread-187458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:24:30.758 [DEBUG] [Thread-187458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:24:30.758 [DEBUG] [Thread-187458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:24:30.794 [INFO] [Thread-187458] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:24:30.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:24:31.417 [DEBUG] [Thread-187458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:24:31.417 [DEBUG] [Thread-187458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:24:31.418 [DEBUG] [Thread-187458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:24:31.458 [DEBUG] [Thread-187458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:24:31.458 [DEBUG] [Thread-187458] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:24:31.461 [DEBUG] [Thread-187458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:24:31.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:24:31.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:24:31.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:24:31.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:24:31.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:24:31.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:24:31.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:24:31.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:24:31.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:24:31.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.350110 -999.00  +11.90  14.13     92  +10.60 1 2 1 3 1   888    0 1.60 16.21 ----- 11.5 14.1 266.4 23.3 15.8 -12.1 15.2 -11.7 14.1 -11.2 14.9 -12.8
2026-04-12T10:24:31.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:24:31.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:24:31.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.350110
2026-04-12T10:24:31.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:24:31.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:24:31.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:24:31.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:24:31.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:24:31.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:23:49', tmtdew=-0.11552, humidity=100.69, cloud=0.0, wind=16.2677, temperature=12.0858, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:24:09.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:24:31.492 [DEBUG] [Thread-187458] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:24:31.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:24:31.589 [DEBUG] [Thread-187461] [transport.py] [_log()] starting thread (client mode): 0xae5b1d50
2026-04-12T10:24:31.590 [DEBUG] [Thread-187461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:24:31.604 [DEBUG] [Thread-187461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:24:31.604 [INFO] [Thread-187461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] client lang: <none>
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] server lang: <none>
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] kex follows: False
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] Compression: none
2026-04-12T10:24:31.612 [DEBUG] [Thread-187461] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:24:31.672 [DEBUG] [Thread-187461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:24:31.672 [DEBUG] [Thread-187461] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:24:31.673 [DEBUG] [Thread-187461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:24:31.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:24:31.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:24:31.728 [DEBUG] [Thread-187461] [transport.py] [_log()] userauth is OK
2026-04-12T10:24:31.728 [DEBUG] [Thread-187461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:24:31.729 [DEBUG] [Thread-187461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:24:31.729 [DEBUG] [Thread-187461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:24:31.729 [DEBUG] [Thread-187461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:24:31.747 [INFO] [Thread-187461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:24:31.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:24:31.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:24:32.574 [DEBUG] [Thread-187461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:24:32.574 [DEBUG] [Thread-187461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:24:32.622 [DEBUG] [Thread-187461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:24:32.623 [DEBUG] [Thread-187461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:24:32.631 [DEBUG] [Thread-187461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:24:32.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:24:32.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:24:32.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:24:32.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:24:32.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:24:32.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:24:32.666 [DEBUG] [Thread-187461] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:24:40.934 [DEBUG] [Thread-187463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:24:55.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:24:55.455 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:24:55.991 [DEBUG] [Thread-187464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:25:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:25:02.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:25:02.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:25:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 24, 25), -0.00782, 100.345, 0.0, 16.0042, 11.3925, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:25:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:24:25
2026-04-12T10:25:04.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:25:04.555 [DEBUG] [Thread-187465] [transport.py] [_log()] starting thread (client mode): 0xae5e6500
2026-04-12T10:25:04.555 [DEBUG] [Thread-187465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:25:04.570 [DEBUG] [Thread-187465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:25:04.571 [INFO] [Thread-187465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] client lang: <none>
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] server lang: <none>
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] kex follows: False
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:25:04.574 [DEBUG] [Thread-187465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:25:04.575 [DEBUG] [Thread-187465] [transport.py] [_log()] Compression: none
2026-04-12T10:25:04.575 [DEBUG] [Thread-187465] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:25:04.592 [DEBUG] [Thread-187465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:25:04.592 [DEBUG] [Thread-187465] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:25:04.593 [DEBUG] [Thread-187465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:25:04.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:25:04.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:25:04.636 [DEBUG] [Thread-187465] [transport.py] [_log()] userauth is OK
2026-04-12T10:25:04.637 [DEBUG] [Thread-187465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:25:04.637 [DEBUG] [Thread-187465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:25:04.637 [DEBUG] [Thread-187465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:25:04.637 [DEBUG] [Thread-187465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:25:04.664 [INFO] [Thread-187465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:25:04.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:25:05.612 [DEBUG] [Thread-187465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:25:05.612 [DEBUG] [Thread-187465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:25:05.613 [DEBUG] [Thread-187465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:25:05.653 [DEBUG] [Thread-187465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:25:05.653 [DEBUG] [Thread-187465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:25:05.656 [DEBUG] [Thread-187465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:25:05.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:25:05.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:25:05.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:25:05.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:25:05.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:25:05.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:25:05.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:25:05.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:25:05.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:25:05.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.350457 -999.00  +12.00  18.40     92  +10.90 1 2 1 3 1   888    0 1.63 16.56 ----- 20.1 18.4 277.4 20.4 15.8 -11.9 15.2 -10.8 -999.0 -999.0 15.0 -11.6
2026-04-12T10:25:05.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:25:05.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:25:05.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.350457
2026-04-12T10:25:05.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:25:05.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:25:05.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:25:05.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:25:05.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:25:05.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:24:25', tmtdew=-0.00782, humidity=100.345, cloud=0.0, wind=16.0042, temperature=11.3925, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:24:39.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:25:05.703 [DEBUG] [Thread-187465] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:25:05.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:25:05.812 [DEBUG] [Thread-187468] [transport.py] [_log()] starting thread (client mode): 0xb0f564d0
2026-04-12T10:25:05.812 [DEBUG] [Thread-187468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:25:05.841 [DEBUG] [Thread-187468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:25:05.841 [INFO] [Thread-187468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:25:05.862 [DEBUG] [Thread-187468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:25:05.862 [DEBUG] [Thread-187468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:25:05.862 [DEBUG] [Thread-187468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:25:05.862 [DEBUG] [Thread-187468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:05.862 [DEBUG] [Thread-187468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] client lang: <none>
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] server lang: <none>
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] kex follows: False
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] Compression: none
2026-04-12T10:25:05.863 [DEBUG] [Thread-187468] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:25:05.940 [DEBUG] [Thread-187468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:25:05.941 [DEBUG] [Thread-187468] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:25:05.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:25:05.942 [DEBUG] [Thread-187468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:25:05.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:25:06.025 [DEBUG] [Thread-187468] [transport.py] [_log()] userauth is OK
2026-04-12T10:25:06.025 [DEBUG] [Thread-187468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:25:06.025 [DEBUG] [Thread-187468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:25:06.025 [DEBUG] [Thread-187468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:25:06.025 [DEBUG] [Thread-187468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:25:06.058 [INFO] [Thread-187468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:25:06.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:25:06.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:25:06.894 [DEBUG] [Thread-187468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:25:06.895 [DEBUG] [Thread-187468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:25:06.958 [DEBUG] [Thread-187468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:25:06.959 [DEBUG] [Thread-187468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:25:06.982 [DEBUG] [Thread-187468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:25:07.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:25:07.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:25:07.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:25:07.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:25:07.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:25:07.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:25:07.079 [DEBUG] [Thread-187468] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:25:11.027 [DEBUG] [Thread-187470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:25:26.082 [DEBUG] [Thread-187471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:25:28.095 [DEBUG] [Thread-187472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:25:37.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:25:37.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:25:37.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:25:38.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 25), -0.007995, 100.345, 0.0, 19.71, 11.492, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:25:38.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:25:00
2026-04-12T10:25:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:25:38.945 [DEBUG] [Thread-187473] [transport.py] [_log()] starting thread (client mode): 0xae5e7f10
2026-04-12T10:25:38.945 [DEBUG] [Thread-187473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:25:38.966 [DEBUG] [Thread-187473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:25:38.966 [INFO] [Thread-187473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:25:38.969 [DEBUG] [Thread-187473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] client lang: <none>
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] server lang: <none>
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] kex follows: False
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] Compression: none
2026-04-12T10:25:38.970 [DEBUG] [Thread-187473] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:25:38.987 [DEBUG] [Thread-187473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:25:38.988 [DEBUG] [Thread-187473] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:25:38.989 [DEBUG] [Thread-187473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:25:38.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:25:38.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:25:38.991 [DEBUG] [Thread-187473] [transport.py] [_log()] userauth is OK
2026-04-12T10:25:38.991 [DEBUG] [Thread-187473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:25:38.991 [DEBUG] [Thread-187473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:25:38.992 [DEBUG] [Thread-187473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:25:38.992 [DEBUG] [Thread-187473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:25:39.012 [INFO] [Thread-187473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:25:39.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:25:39.652 [DEBUG] [Thread-187473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:25:39.653 [DEBUG] [Thread-187473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:25:39.653 [DEBUG] [Thread-187473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:25:39.693 [DEBUG] [Thread-187473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:25:39.694 [DEBUG] [Thread-187473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:25:39.696 [DEBUG] [Thread-187473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:25:39.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:25:39.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:25:39.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:25:39.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:25:39.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:25:39.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:25:39.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:25:39.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:25:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:25:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.350804 -999.00  +12.00  17.33     92  +10.70 1 3 1 3 1   888    0 1.63 16.63 ----- 13.6 17.3 268.0 20.3 15.8 -11.7 15.2 -10.2 14.3 -9.7 15.0 -11.7
2026-04-12T10:25:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:25:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:25:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.350804
2026-04-12T10:25:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:25:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:25:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:25:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:25:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:25:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:25:00', tmtdew=-0.007995, humidity=100.345, cloud=0.0, wind=19.71, temperature=11.492, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:25:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:25:39.714 [DEBUG] [Thread-187473] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:25:39.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:25:39.803 [DEBUG] [Thread-187476] [transport.py] [_log()] starting thread (client mode): 0xae5193f0
2026-04-12T10:25:39.803 [DEBUG] [Thread-187476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:25:39.822 [DEBUG] [Thread-187476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:25:39.822 [INFO] [Thread-187476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:25:39.833 [DEBUG] [Thread-187476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] client lang: <none>
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] server lang: <none>
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] kex follows: False
2026-04-12T10:25:39.834 [DEBUG] [Thread-187476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:25:39.835 [DEBUG] [Thread-187476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:25:39.835 [DEBUG] [Thread-187476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:25:39.835 [DEBUG] [Thread-187476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:25:39.835 [DEBUG] [Thread-187476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:25:39.835 [DEBUG] [Thread-187476] [transport.py] [_log()] Compression: none
2026-04-12T10:25:39.835 [DEBUG] [Thread-187476] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:25:39.889 [DEBUG] [Thread-187476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:25:39.889 [DEBUG] [Thread-187476] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:25:39.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:25:39.891 [DEBUG] [Thread-187476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:25:39.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:25:39.949 [DEBUG] [Thread-187476] [transport.py] [_log()] userauth is OK
2026-04-12T10:25:39.949 [DEBUG] [Thread-187476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:25:39.950 [DEBUG] [Thread-187476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:25:39.950 [DEBUG] [Thread-187476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:25:39.950 [DEBUG] [Thread-187476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:25:39.967 [INFO] [Thread-187476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:25:39.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:25:39.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:25:40.821 [DEBUG] [Thread-187476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:25:40.821 [DEBUG] [Thread-187476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:25:40.869 [DEBUG] [Thread-187476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:25:40.869 [DEBUG] [Thread-187476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:25:40.878 [DEBUG] [Thread-187476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:25:40.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:25:40.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:25:40.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:25:40.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:25:40.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:25:40.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:25:40.916 [DEBUG] [Thread-187476] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:25:41.119 [DEBUG] [Thread-187478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:25:55.609 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:25:55.610 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:25:56.180 [DEBUG] [Thread-187479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:26:10.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:26:10.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:26:10.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:26:11.213 [DEBUG] [Thread-187480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:26:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 25, 36), -0.11582, 100.69, 0.0, 22.8298, 12.3174, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:26:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:25:36
2026-04-12T10:26:12.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:26:12.829 [DEBUG] [Thread-187481] [transport.py] [_log()] starting thread (client mode): 0xae5b2920
2026-04-12T10:26:12.829 [DEBUG] [Thread-187481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:26:12.848 [DEBUG] [Thread-187481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:26:12.848 [INFO] [Thread-187481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:26:12.851 [DEBUG] [Thread-187481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:26:12.851 [DEBUG] [Thread-187481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:26:12.851 [DEBUG] [Thread-187481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] client lang: <none>
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] server lang: <none>
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] kex follows: False
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] Compression: none
2026-04-12T10:26:12.852 [DEBUG] [Thread-187481] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:26:12.872 [DEBUG] [Thread-187481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:26:12.873 [DEBUG] [Thread-187481] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:26:12.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:26:12.874 [DEBUG] [Thread-187481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:26:12.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:26:12.875 [DEBUG] [Thread-187481] [transport.py] [_log()] userauth is OK
2026-04-12T10:26:12.876 [DEBUG] [Thread-187481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:26:12.876 [DEBUG] [Thread-187481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:26:12.876 [DEBUG] [Thread-187481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:26:12.876 [DEBUG] [Thread-187481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:26:12.911 [INFO] [Thread-187481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:26:12.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:26:13.526 [DEBUG] [Thread-187481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:26:13.526 [DEBUG] [Thread-187481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:26:13.527 [DEBUG] [Thread-187481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:26:13.567 [DEBUG] [Thread-187481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:26:13.567 [DEBUG] [Thread-187481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:26:13.570 [DEBUG] [Thread-187481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:26:13.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:26:13.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:26:13.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:26:13.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:26:13.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:26:13.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:26:13.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:26:13.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:26:13.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:26:13.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.351152 -999.00  +12.00  15.44     91  +10.80 1 3 1 3 1   888    0 1.70 17.98 ----- 15.8 15.4 284.2 18.2 15.9 -10.7 15.3 -8.8 14.2 -8.8 15.1 -10.8
2026-04-12T10:26:13.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:26:13.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:26:13.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.351152
2026-04-12T10:26:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:26:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:26:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:26:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:26:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:26:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:25:36', tmtdew=-0.11582, humidity=100.69, cloud=0.0, wind=22.8298, temperature=12.3174, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:25:39.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:26:13.599 [DEBUG] [Thread-187481] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:26:13.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:26:13.692 [DEBUG] [Thread-187484] [transport.py] [_log()] starting thread (client mode): 0xae5b7f10
2026-04-12T10:26:13.692 [DEBUG] [Thread-187484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:26:13.707 [DEBUG] [Thread-187484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:26:13.707 [INFO] [Thread-187484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:26:13.714 [DEBUG] [Thread-187484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] client lang: <none>
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] server lang: <none>
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] kex follows: False
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:26:13.715 [DEBUG] [Thread-187484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:26:13.716 [DEBUG] [Thread-187484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:26:13.716 [DEBUG] [Thread-187484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:26:13.716 [DEBUG] [Thread-187484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:26:13.716 [DEBUG] [Thread-187484] [transport.py] [_log()] Compression: none
2026-04-12T10:26:13.716 [DEBUG] [Thread-187484] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:26:13.773 [DEBUG] [Thread-187484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:26:13.774 [DEBUG] [Thread-187484] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:26:13.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:26:13.775 [DEBUG] [Thread-187484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:26:13.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:26:13.829 [DEBUG] [Thread-187484] [transport.py] [_log()] userauth is OK
2026-04-12T10:26:13.830 [DEBUG] [Thread-187484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:26:13.830 [DEBUG] [Thread-187484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:26:13.830 [DEBUG] [Thread-187484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:26:13.830 [DEBUG] [Thread-187484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:26:13.849 [INFO] [Thread-187484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:26:13.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:26:13.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:26:14.695 [DEBUG] [Thread-187484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:26:14.695 [DEBUG] [Thread-187484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:26:14.743 [DEBUG] [Thread-187484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:26:14.743 [DEBUG] [Thread-187484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:26:14.752 [DEBUG] [Thread-187484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:26:14.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:26:14.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:26:14.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:26:14.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:26:14.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:26:14.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:26:14.788 [DEBUG] [Thread-187484] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:26:26.253 [DEBUG] [Thread-187486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:26:28.153 [DEBUG] [Thread-187487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:26:41.305 [DEBUG] [Thread-187488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:26:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:26:44.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:26:44.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:26:46.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 26, 12), -0.05529, 100.328, 0.0, 21.1212, 11.4424, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:26:46.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:26:12
2026-04-12T10:26:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:26:46.695 [DEBUG] [Thread-187489] [transport.py] [_log()] starting thread (client mode): 0xae51b550
2026-04-12T10:26:46.695 [DEBUG] [Thread-187489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:26:46.716 [DEBUG] [Thread-187489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:26:46.716 [INFO] [Thread-187489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:26:46.719 [DEBUG] [Thread-187489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:26:46.719 [DEBUG] [Thread-187489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:26:46.719 [DEBUG] [Thread-187489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:26:46.719 [DEBUG] [Thread-187489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] client lang: <none>
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] server lang: <none>
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] kex follows: False
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:26:46.720 [DEBUG] [Thread-187489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:26:46.721 [DEBUG] [Thread-187489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:26:46.721 [DEBUG] [Thread-187489] [transport.py] [_log()] Compression: none
2026-04-12T10:26:46.721 [DEBUG] [Thread-187489] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:26:46.740 [DEBUG] [Thread-187489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:26:46.741 [DEBUG] [Thread-187489] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:26:46.741 [DEBUG] [Thread-187489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:26:46.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:26:46.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:26:46.744 [DEBUG] [Thread-187489] [transport.py] [_log()] userauth is OK
2026-04-12T10:26:46.744 [DEBUG] [Thread-187489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:26:46.744 [DEBUG] [Thread-187489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:26:46.744 [DEBUG] [Thread-187489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:26:46.744 [DEBUG] [Thread-187489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:26:46.776 [INFO] [Thread-187489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:26:46.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:26:47.408 [DEBUG] [Thread-187489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:26:47.409 [DEBUG] [Thread-187489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:26:47.409 [DEBUG] [Thread-187489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:26:47.449 [DEBUG] [Thread-187489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:26:47.449 [DEBUG] [Thread-187489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:26:47.454 [DEBUG] [Thread-187489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:26:47.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:26:47.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:26:47.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:26:47.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:26:47.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:26:47.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:26:47.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:26:47.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:26:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:26:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.351499 -999.00  +12.00  17.24     92  +10.80 1 3 1 3 1   888    0 1.72 18.66 ----- 17.0 17.2 285.2 23.3 15.9 -8.6 15.3 -7.4 14.2 -7.5 15.2 -8.5
2026-04-12T10:26:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:26:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:26:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.351499
2026-04-12T10:26:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:26:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:26:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:26:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:26:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:26:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:26:12', tmtdew=-0.05529, humidity=100.328, cloud=0.0, wind=21.1212, temperature=11.4424, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:26:09.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:26:47.477 [DEBUG] [Thread-187489] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:26:47.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:26:47.568 [DEBUG] [Thread-187492] [transport.py] [_log()] starting thread (client mode): 0xae518550
2026-04-12T10:26:47.569 [DEBUG] [Thread-187492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:26:47.584 [DEBUG] [Thread-187492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:26:47.584 [INFO] [Thread-187492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:26:47.592 [DEBUG] [Thread-187492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:26:47.593 [DEBUG] [Thread-187492] [transport.py] [_log()] client lang: <none>
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] server lang: <none>
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] kex follows: False
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:26:47.594 [DEBUG] [Thread-187492] [transport.py] [_log()] Compression: none
2026-04-12T10:26:47.595 [DEBUG] [Thread-187492] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:26:47.651 [DEBUG] [Thread-187492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:26:47.652 [DEBUG] [Thread-187492] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:26:47.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:26:47.653 [DEBUG] [Thread-187492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:26:47.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:26:47.710 [DEBUG] [Thread-187492] [transport.py] [_log()] userauth is OK
2026-04-12T10:26:47.710 [DEBUG] [Thread-187492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:26:47.711 [DEBUG] [Thread-187492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:26:47.711 [DEBUG] [Thread-187492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:26:47.711 [DEBUG] [Thread-187492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:26:47.736 [INFO] [Thread-187492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:26:47.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:26:47.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:26:48.588 [DEBUG] [Thread-187492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:26:48.589 [DEBUG] [Thread-187492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:26:48.637 [DEBUG] [Thread-187492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:26:48.638 [DEBUG] [Thread-187492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:26:48.647 [DEBUG] [Thread-187492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:26:48.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:26:48.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:26:48.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:26:48.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:26:48.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:26:48.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:26:48.684 [DEBUG] [Thread-187492] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:26:55.749 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:26:55.750 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:26:56.342 [DEBUG] [Thread-187494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:27:11.394 [DEBUG] [Thread-187495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:27:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:27:18.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:27:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:27:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 26, 47), -0.12556, 100.756, 0.0, 19.0901, 12.1846, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:27:20.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:26:47
2026-04-12T10:27:20.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:27:20.640 [DEBUG] [Thread-187496] [transport.py] [_log()] starting thread (client mode): 0xae51aaa0
2026-04-12T10:27:20.640 [DEBUG] [Thread-187496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:27:20.662 [DEBUG] [Thread-187496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:27:20.662 [INFO] [Thread-187496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:20.666 [DEBUG] [Thread-187496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] client lang: <none>
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] server lang: <none>
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] kex follows: False
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:27:20.667 [DEBUG] [Thread-187496] [transport.py] [_log()] Compression: none
2026-04-12T10:27:20.668 [DEBUG] [Thread-187496] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:27:20.686 [DEBUG] [Thread-187496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:27:20.686 [DEBUG] [Thread-187496] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:27:20.687 [DEBUG] [Thread-187496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:27:20.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:27:20.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:27:20.689 [DEBUG] [Thread-187496] [transport.py] [_log()] userauth is OK
2026-04-12T10:27:20.689 [DEBUG] [Thread-187496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:27:20.689 [DEBUG] [Thread-187496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:27:20.689 [DEBUG] [Thread-187496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:27:20.690 [DEBUG] [Thread-187496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:27:20.725 [INFO] [Thread-187496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:27:20.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:27:21.369 [DEBUG] [Thread-187496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:27:21.369 [DEBUG] [Thread-187496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:27:21.370 [DEBUG] [Thread-187496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:27:21.410 [DEBUG] [Thread-187496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:27:21.410 [DEBUG] [Thread-187496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:27:21.413 [DEBUG] [Thread-187496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:27:21.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:27:21.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:27:21.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:27:21.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:27:21.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:27:21.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:27:21.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:27:21.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:27:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:27:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.351846 -999.00  +12.10  16.43     91  +10.80 1 3 1 3 1   888    0 1.69 18.14 ----- 11.3 16.4 283.6 18.5 15.9 -9.2 15.3 -8.0 14.3 -7.2 15.2 -8.8
2026-04-12T10:27:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:27:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:27:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.351846
2026-04-12T10:27:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:27:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:27:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:27:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:27:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:27:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:26:47', tmtdew=-0.12556, humidity=100.756, cloud=0.0, wind=19.0901, temperature=12.1846, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:26:39.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:27:21.439 [DEBUG] [Thread-187496] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:27:21.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:27:21.526 [DEBUG] [Thread-187499] [transport.py] [_log()] starting thread (client mode): 0xb0f55570
2026-04-12T10:27:21.526 [DEBUG] [Thread-187499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:27:21.540 [DEBUG] [Thread-187499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:27:21.540 [INFO] [Thread-187499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:27:21.548 [DEBUG] [Thread-187499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:27:21.548 [DEBUG] [Thread-187499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] client lang: <none>
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] server lang: <none>
2026-04-12T10:27:21.549 [DEBUG] [Thread-187499] [transport.py] [_log()] kex follows: False
2026-04-12T10:27:21.550 [DEBUG] [Thread-187499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:27:21.550 [DEBUG] [Thread-187499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:27:21.550 [DEBUG] [Thread-187499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:27:21.550 [DEBUG] [Thread-187499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:27:21.550 [DEBUG] [Thread-187499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:27:21.550 [DEBUG] [Thread-187499] [transport.py] [_log()] Compression: none
2026-04-12T10:27:21.550 [DEBUG] [Thread-187499] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:27:21.607 [DEBUG] [Thread-187499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:27:21.608 [DEBUG] [Thread-187499] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:27:21.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:27:21.609 [DEBUG] [Thread-187499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:27:21.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:27:21.666 [DEBUG] [Thread-187499] [transport.py] [_log()] userauth is OK
2026-04-12T10:27:21.667 [DEBUG] [Thread-187499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:27:21.667 [DEBUG] [Thread-187499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:27:21.667 [DEBUG] [Thread-187499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:27:21.667 [DEBUG] [Thread-187499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:27:21.689 [INFO] [Thread-187499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:27:21.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:27:21.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:27:22.558 [DEBUG] [Thread-187499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:27:22.559 [DEBUG] [Thread-187499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:27:22.606 [DEBUG] [Thread-187499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:27:22.607 [DEBUG] [Thread-187499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:27:22.616 [DEBUG] [Thread-187499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:27:22.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:27:22.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:27:22.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:27:22.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:27:22.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:27:22.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:27:22.653 [DEBUG] [Thread-187499] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:27:26.425 [DEBUG] [Thread-187501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:27:28.199 [DEBUG] [Thread-187502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:27:41.478 [DEBUG] [Thread-187503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:27:52.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:27:52.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:27:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:27:53.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 27, 22), -0.010305, 100.361, 0.0, 21.3329, 11.5589, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:27:53.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:27:22
2026-04-12T10:27:54.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:27:54.483 [DEBUG] [Thread-187504] [transport.py] [_log()] starting thread (client mode): 0xb0f40670
2026-04-12T10:27:54.483 [DEBUG] [Thread-187504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:27:54.502 [DEBUG] [Thread-187504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:27:54.503 [INFO] [Thread-187504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] client lang: <none>
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] server lang: <none>
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] kex follows: False
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] Compression: none
2026-04-12T10:27:54.506 [DEBUG] [Thread-187504] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:27:54.522 [DEBUG] [Thread-187504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:27:54.523 [DEBUG] [Thread-187504] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:27:54.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:27:54.524 [DEBUG] [Thread-187504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:27:54.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:27:54.564 [DEBUG] [Thread-187504] [transport.py] [_log()] userauth is OK
2026-04-12T10:27:54.565 [DEBUG] [Thread-187504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:27:54.565 [DEBUG] [Thread-187504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:27:54.565 [DEBUG] [Thread-187504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:27:54.565 [DEBUG] [Thread-187504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:27:54.586 [INFO] [Thread-187504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:27:54.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:27:55.210 [DEBUG] [Thread-187504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:27:55.210 [DEBUG] [Thread-187504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:27:55.210 [DEBUG] [Thread-187504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:27:55.251 [DEBUG] [Thread-187504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:27:55.251 [DEBUG] [Thread-187504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:27:55.254 [DEBUG] [Thread-187504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:27:55.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:27:55.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:27:55.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:27:55.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:27:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:27:55.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:27:55.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:27:55.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:27:55.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:27:55.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.352541 -999.00  +12.00  17.04     91  +10.60 1 3 1 3 1   888    0 1.75 18.60 ----- 16.9 17.0 274.0 21.8 15.8 -7.8 15.2 -7.2 14.2 -8.6 15.1 -7.9
2026-04-12T10:27:55.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:27:55.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:27:55.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.352541
2026-04-12T10:27:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:27:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:27:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:27:55.279 [DEBUG] [Thread-187504] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:27:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:27:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:27:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:27:22', tmtdew=-0.010305, humidity=100.361, cloud=0.0, wind=21.3329, temperature=11.5589, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:27:39.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:27:55.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:27:55.370 [DEBUG] [Thread-187507] [transport.py] [_log()] starting thread (client mode): 0xa796bdf0
2026-04-12T10:27:55.370 [DEBUG] [Thread-187507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:27:55.385 [DEBUG] [Thread-187507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:27:55.386 [INFO] [Thread-187507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:27:55.393 [DEBUG] [Thread-187507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] client lang: <none>
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] server lang: <none>
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] kex follows: False
2026-04-12T10:27:55.394 [DEBUG] [Thread-187507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:27:55.395 [DEBUG] [Thread-187507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:27:55.395 [DEBUG] [Thread-187507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:27:55.395 [DEBUG] [Thread-187507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:27:55.395 [DEBUG] [Thread-187507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:27:55.395 [DEBUG] [Thread-187507] [transport.py] [_log()] Compression: none
2026-04-12T10:27:55.395 [DEBUG] [Thread-187507] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:27:55.451 [DEBUG] [Thread-187507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:27:55.451 [DEBUG] [Thread-187507] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:27:55.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:27:55.452 [DEBUG] [Thread-187507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:27:55.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:27:55.507 [DEBUG] [Thread-187507] [transport.py] [_log()] userauth is OK
2026-04-12T10:27:55.507 [DEBUG] [Thread-187507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:27:55.507 [DEBUG] [Thread-187507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:27:55.507 [DEBUG] [Thread-187507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:27:55.508 [DEBUG] [Thread-187507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:27:55.526 [INFO] [Thread-187507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:27:55.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:27:55.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:27:55.892 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:27:55.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:27:56.355 [DEBUG] [Thread-187507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:27:56.355 [DEBUG] [Thread-187507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:27:56.404 [DEBUG] [Thread-187507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:27:56.404 [DEBUG] [Thread-187507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:27:56.414 [DEBUG] [Thread-187507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:27:56.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:27:56.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:27:56.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:27:56.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:27:56.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:27:56.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:27:56.456 [DEBUG] [Thread-187507] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:27:56.517 [DEBUG] [Thread-187509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:28:11.563 [DEBUG] [Thread-187510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:28:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:28:26.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:28:26.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:28:26.597 [DEBUG] [Thread-187511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:28:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 27, 58), -0.00772, 100.345, 0.0, 17.4683, 11.5256, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:28:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:27:58
2026-04-12T10:28:28.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:28:28.242 [DEBUG] [Thread-187512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:28:28.247 [DEBUG] [Thread-187513] [transport.py] [_log()] starting thread (client mode): 0xae515f90
2026-04-12T10:28:28.247 [DEBUG] [Thread-187513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:28:28.268 [DEBUG] [Thread-187513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:28:28.268 [INFO] [Thread-187513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:28:28.271 [DEBUG] [Thread-187513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] client lang: <none>
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] server lang: <none>
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] kex follows: False
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] Compression: none
2026-04-12T10:28:28.272 [DEBUG] [Thread-187513] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:28:28.289 [DEBUG] [Thread-187513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:28:28.289 [DEBUG] [Thread-187513] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:28:28.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:28:28.290 [DEBUG] [Thread-187513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:28:28.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:28:28.292 [DEBUG] [Thread-187513] [transport.py] [_log()] userauth is OK
2026-04-12T10:28:28.293 [DEBUG] [Thread-187513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:28:28.293 [DEBUG] [Thread-187513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:28:28.293 [DEBUG] [Thread-187513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:28:28.293 [DEBUG] [Thread-187513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:28:28.316 [INFO] [Thread-187513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:28:28.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:28:28.970 [DEBUG] [Thread-187513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:28:28.970 [DEBUG] [Thread-187513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:28:28.971 [DEBUG] [Thread-187513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:28:29.011 [DEBUG] [Thread-187513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:28:29.011 [DEBUG] [Thread-187513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:28:29.014 [DEBUG] [Thread-187513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:28:29.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:28:29.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:28:29.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:28:29.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:28:29.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:28:29.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:28:29.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:28:29.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:28:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:28:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.352888 -999.00  +12.10  22.65     91  +10.80 1 3 1 3 1   888    0 1.73 17.98 ----- 21.3 22.6 275.6 26.5 15.8 -9.7 15.2 -9.7 14.2 -10.1 15.1 -10.1
2026-04-12T10:28:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:28:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:28:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.352888
2026-04-12T10:28:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:28:29.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:28:29.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:28:29.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:28:29.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:28:29.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:27:58', tmtdew=-0.00772, humidity=100.345, cloud=0.0, wind=17.4683, temperature=11.5256, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:28:09.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:28:29.042 [DEBUG] [Thread-187513] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:28:29.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:28:29.135 [DEBUG] [Thread-187516] [transport.py] [_log()] starting thread (client mode): 0xae560b20
2026-04-12T10:28:29.135 [DEBUG] [Thread-187516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:28:29.150 [DEBUG] [Thread-187516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:28:29.150 [INFO] [Thread-187516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] client lang: <none>
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] server lang: <none>
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] kex follows: False
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:28:29.158 [DEBUG] [Thread-187516] [transport.py] [_log()] Compression: none
2026-04-12T10:28:29.159 [DEBUG] [Thread-187516] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:28:29.215 [DEBUG] [Thread-187516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:28:29.215 [DEBUG] [Thread-187516] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:28:29.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:28:29.216 [DEBUG] [Thread-187516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:28:29.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:28:29.271 [DEBUG] [Thread-187516] [transport.py] [_log()] userauth is OK
2026-04-12T10:28:29.271 [DEBUG] [Thread-187516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:28:29.271 [DEBUG] [Thread-187516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:28:29.271 [DEBUG] [Thread-187516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:28:29.271 [DEBUG] [Thread-187516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:28:29.290 [INFO] [Thread-187516] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:28:29.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:28:29.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:28:30.133 [DEBUG] [Thread-187516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:28:30.133 [DEBUG] [Thread-187516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:28:30.181 [DEBUG] [Thread-187516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:28:30.181 [DEBUG] [Thread-187516] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:28:30.191 [DEBUG] [Thread-187516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:28:30.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:28:30.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:28:30.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:28:30.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:28:30.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:28:30.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:28:30.226 [DEBUG] [Thread-187516] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:28:41.635 [DEBUG] [Thread-187518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:28:56.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:28:56.034 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:28:56.688 [DEBUG] [Thread-187519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:29:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:29:00.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:29:00.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:29:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 28, 34), -0.1105, 100.656, 0.0, 19.8662, 12.1845, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:29:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:28:34
2026-04-12T10:29:01.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:29:02.052 [DEBUG] [Thread-187520] [transport.py] [_log()] starting thread (client mode): 0xa796b400
2026-04-12T10:29:02.052 [DEBUG] [Thread-187520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:29:02.072 [DEBUG] [Thread-187520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:29:02.072 [INFO] [Thread-187520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:29:02.075 [DEBUG] [Thread-187520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:29:02.075 [DEBUG] [Thread-187520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:29:02.075 [DEBUG] [Thread-187520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] client lang: <none>
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] server lang: <none>
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] kex follows: False
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] Compression: none
2026-04-12T10:29:02.076 [DEBUG] [Thread-187520] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:29:02.094 [DEBUG] [Thread-187520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:29:02.094 [DEBUG] [Thread-187520] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:29:02.095 [DEBUG] [Thread-187520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:29:02.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:29:02.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:29:02.097 [DEBUG] [Thread-187520] [transport.py] [_log()] userauth is OK
2026-04-12T10:29:02.097 [DEBUG] [Thread-187520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:29:02.097 [DEBUG] [Thread-187520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:29:02.097 [DEBUG] [Thread-187520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:29:02.097 [DEBUG] [Thread-187520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:29:02.114 [INFO] [Thread-187520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:29:02.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:29:02.774 [DEBUG] [Thread-187520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:29:02.775 [DEBUG] [Thread-187520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:29:02.775 [DEBUG] [Thread-187520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:29:02.815 [DEBUG] [Thread-187520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:29:02.815 [DEBUG] [Thread-187520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:29:02.819 [DEBUG] [Thread-187520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:29:02.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:29:02.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:29:02.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:29:02.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:29:02.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:29:02.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:29:02.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:29:02.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:29:02.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:29:02.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.353235 -999.00  +12.10  18.85     91  +10.70 1 2 1 3 1   888    0 1.73 18.53 ----- 16.4 18.9 275.6 27.1 15.8 -10.6 15.2 -10.1 14.3 -10.0 15.1 -10.6
2026-04-12T10:29:02.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:29:02.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:29:02.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.353235
2026-04-12T10:29:02.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:29:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:29:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:29:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:29:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:29:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:28:34', tmtdew=-0.1105, humidity=100.656, cloud=0.0, wind=19.8662, temperature=12.1845, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:28:39.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:29:02.847 [DEBUG] [Thread-187520] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:29:02.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:29:02.940 [DEBUG] [Thread-187523] [transport.py] [_log()] starting thread (client mode): 0xae5e5b40
2026-04-12T10:29:02.940 [DEBUG] [Thread-187523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:29:02.955 [DEBUG] [Thread-187523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:29:02.956 [INFO] [Thread-187523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:29:02.963 [DEBUG] [Thread-187523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:29:02.964 [DEBUG] [Thread-187523] [transport.py] [_log()] client lang: <none>
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] server lang: <none>
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] kex follows: False
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:29:02.965 [DEBUG] [Thread-187523] [transport.py] [_log()] Compression: none
2026-04-12T10:29:02.966 [DEBUG] [Thread-187523] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:29:03.024 [DEBUG] [Thread-187523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:29:03.025 [DEBUG] [Thread-187523] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:29:03.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:29:03.027 [DEBUG] [Thread-187523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:29:03.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:29:03.083 [DEBUG] [Thread-187523] [transport.py] [_log()] userauth is OK
2026-04-12T10:29:03.084 [DEBUG] [Thread-187523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:29:03.084 [DEBUG] [Thread-187523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:29:03.085 [DEBUG] [Thread-187523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:29:03.085 [DEBUG] [Thread-187523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:29:03.103 [INFO] [Thread-187523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:29:03.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:29:03.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:29:03.935 [DEBUG] [Thread-187523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:29:03.936 [DEBUG] [Thread-187523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:29:03.984 [DEBUG] [Thread-187523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:29:03.985 [DEBUG] [Thread-187523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:29:03.994 [DEBUG] [Thread-187523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:29:04.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:29:04.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:29:04.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:29:04.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:29:04.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:29:04.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:29:04.029 [DEBUG] [Thread-187523] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:29:11.725 [DEBUG] [Thread-187525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:29:26.786 [DEBUG] [Thread-187526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:29:28.288 [DEBUG] [Thread-187527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:29:34.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:29:34.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:29:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:29:35.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 29, 9), -0.055405, 100.328, 0.0, 20.4502, 11.6417, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:29:35.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:29:09
2026-04-12T10:29:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:29:35.880 [DEBUG] [Thread-187528] [transport.py] [_log()] starting thread (client mode): 0xb0f54310
2026-04-12T10:29:35.880 [DEBUG] [Thread-187528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:29:35.899 [DEBUG] [Thread-187528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:29:35.899 [INFO] [Thread-187528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:29:35.902 [DEBUG] [Thread-187528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:29:35.902 [DEBUG] [Thread-187528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] client lang: <none>
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] server lang: <none>
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] kex follows: False
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] Compression: none
2026-04-12T10:29:35.903 [DEBUG] [Thread-187528] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:29:35.922 [DEBUG] [Thread-187528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:29:35.922 [DEBUG] [Thread-187528] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:29:35.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:29:35.923 [DEBUG] [Thread-187528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:29:35.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:29:35.925 [DEBUG] [Thread-187528] [transport.py] [_log()] userauth is OK
2026-04-12T10:29:35.926 [DEBUG] [Thread-187528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:29:35.926 [DEBUG] [Thread-187528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:29:35.926 [DEBUG] [Thread-187528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:29:35.926 [DEBUG] [Thread-187528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:29:35.944 [INFO] [Thread-187528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:29:35.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:29:36.550 [DEBUG] [Thread-187528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:29:36.551 [DEBUG] [Thread-187528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:29:36.551 [DEBUG] [Thread-187528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:29:36.592 [DEBUG] [Thread-187528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:29:36.592 [DEBUG] [Thread-187528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:29:36.595 [DEBUG] [Thread-187528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:29:36.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:29:36.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:29:36.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:29:36.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:29:36.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:29:36.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:29:36.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:29:36.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:29:36.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:29:36.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.353582 -999.00  +12.00  20.98     90  +10.60 1 2 1 3 1   888    0 1.77 18.67 ----- 18.0 21.0 272.0 25.9 15.7 -11.3 15.2 -10.4 14.1 -11.2 15.1 -10.7
2026-04-12T10:29:36.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:29:36.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:29:36.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.353582
2026-04-12T10:29:36.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:29:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:29:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:29:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:29:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T10:29:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:29:09', tmtdew=-0.055405, humidity=100.328, cloud=0.0, wind=20.4502, temperature=11.6417, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:29:09.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:29:36.622 [DEBUG] [Thread-187528] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:29:36.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:29:36.761 [DEBUG] [Thread-187531] [transport.py] [_log()] starting thread (client mode): 0xae5b7fd0
2026-04-12T10:29:36.761 [DEBUG] [Thread-187531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:29:36.817 [DEBUG] [Thread-187531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:29:36.817 [INFO] [Thread-187531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:29:36.855 [DEBUG] [Thread-187531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] client lang: <none>
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] server lang: <none>
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] kex follows: False
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] Compression: none
2026-04-12T10:29:36.856 [DEBUG] [Thread-187531] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:29:36.951 [DEBUG] [Thread-187531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:29:36.952 [DEBUG] [Thread-187531] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:29:36.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:29:36.953 [DEBUG] [Thread-187531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:29:36.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:29:37.074 [DEBUG] [Thread-187531] [transport.py] [_log()] userauth is OK
2026-04-12T10:29:37.075 [DEBUG] [Thread-187531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:29:37.075 [DEBUG] [Thread-187531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:29:37.075 [DEBUG] [Thread-187531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:29:37.075 [DEBUG] [Thread-187531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:29:37.124 [INFO] [Thread-187531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:29:37.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:29:37.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:29:37.987 [DEBUG] [Thread-187531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:29:37.987 [DEBUG] [Thread-187531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:29:38.068 [DEBUG] [Thread-187531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:29:38.068 [DEBUG] [Thread-187531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:29:38.110 [DEBUG] [Thread-187531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:29:38.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:29:38.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:29:38.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:29:38.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:29:38.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:29:38.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:29:38.276 [DEBUG] [Thread-187531] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:29:41.821 [DEBUG] [Thread-187533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:29:56.183 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:29:56.184 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:29:56.875 [DEBUG] [Thread-187534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:30:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:30:08.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:30:08.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:30:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 29, 45), -0.10551, 100.623, 0.0, 22.5828, 12.2175, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:30:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:29:45
2026-04-12T10:30:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:30:10.071 [DEBUG] [Thread-187535] [transport.py] [_log()] starting thread (client mode): 0xb0fb5cf0
2026-04-12T10:30:10.071 [DEBUG] [Thread-187535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:30:10.092 [DEBUG] [Thread-187535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:30:10.093 [INFO] [Thread-187535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:30:10.096 [DEBUG] [Thread-187535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:30:10.096 [DEBUG] [Thread-187535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:30:10.096 [DEBUG] [Thread-187535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:30:10.096 [DEBUG] [Thread-187535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] client lang: <none>
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] server lang: <none>
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] kex follows: False
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:30:10.097 [DEBUG] [Thread-187535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:30:10.098 [DEBUG] [Thread-187535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:30:10.098 [DEBUG] [Thread-187535] [transport.py] [_log()] Compression: none
2026-04-12T10:30:10.098 [DEBUG] [Thread-187535] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:30:10.108 [DEBUG] [Thread-187535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:30:10.108 [DEBUG] [Thread-187535] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:30:10.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:30:10.110 [DEBUG] [Thread-187535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:30:10.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:30:10.112 [DEBUG] [Thread-187535] [transport.py] [_log()] userauth is OK
2026-04-12T10:30:10.112 [DEBUG] [Thread-187535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:30:10.113 [DEBUG] [Thread-187535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:30:10.113 [DEBUG] [Thread-187535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:30:10.113 [DEBUG] [Thread-187535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:30:10.137 [INFO] [Thread-187535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:30:10.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:30:11.495 [DEBUG] [Thread-187535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:30:11.495 [DEBUG] [Thread-187535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:30:11.496 [DEBUG] [Thread-187535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:30:11.536 [DEBUG] [Thread-187535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:30:11.536 [DEBUG] [Thread-187535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:30:11.540 [DEBUG] [Thread-187535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:30:11.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:30:11.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:30:11.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:30:11.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:30:11.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:30:11.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:30:11.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:30:11.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:30:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:30:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.353929 -999.00  +12.00  17.91     90  +10.50 1 3 1 3 1   888    0 1.80 18.97 ----- 13.3 17.9 295.4 24.9 15.8 -9.6 15.2 -9.2 14.2 -8.0 15.1 -8.9
2026-04-12T10:30:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:30:11.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:30:11.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.353929
2026-04-12T10:30:11.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:30:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:30:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:30:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:30:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:30:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:29:45', tmtdew=-0.10551, humidity=100.623, cloud=0.0, wind=22.5828, temperature=12.2175, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:29:39.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:30:11.569 [DEBUG] [Thread-187535] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:30:11.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:30:11.673 [DEBUG] [Thread-187538] [transport.py] [_log()] starting thread (client mode): 0xa796be50
2026-04-12T10:30:11.673 [DEBUG] [Thread-187538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:30:11.697 [DEBUG] [Thread-187538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:30:11.698 [INFO] [Thread-187538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:30:11.716 [DEBUG] [Thread-187538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:30:11.716 [DEBUG] [Thread-187538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:30:11.717 [DEBUG] [Thread-187538] [transport.py] [_log()] client lang: <none>
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] server lang: <none>
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] kex follows: False
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] Compression: none
2026-04-12T10:30:11.718 [DEBUG] [Thread-187538] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:30:11.786 [DEBUG] [Thread-187538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:30:11.787 [DEBUG] [Thread-187538] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:30:11.788 [DEBUG] [Thread-187538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:30:11.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:30:11.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:30:11.865 [DEBUG] [Thread-187538] [transport.py] [_log()] userauth is OK
2026-04-12T10:30:11.865 [DEBUG] [Thread-187538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:30:11.865 [DEBUG] [Thread-187538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:30:11.865 [DEBUG] [Thread-187538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:30:11.865 [DEBUG] [Thread-187538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:30:11.895 [INFO] [Thread-187538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:30:11.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:30:11.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:30:11.910 [DEBUG] [Thread-187540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:30:12.743 [DEBUG] [Thread-187538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:30:12.744 [DEBUG] [Thread-187538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:30:12.803 [DEBUG] [Thread-187538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:30:12.803 [DEBUG] [Thread-187538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:30:12.823 [DEBUG] [Thread-187538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:30:12.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:30:12.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:30:12.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:30:12.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:30:12.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:30:12.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:30:12.912 [DEBUG] [Thread-187538] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:30:26.960 [DEBUG] [Thread-187541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:30:28.341 [DEBUG] [Thread-187542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:30:42.002 [DEBUG] [Thread-187543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:30:42.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:30:42.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:30:42.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:30:44.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 30, 20), -0.057815, 100.344, 0.0, 18.792, 11.4419, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:30:44.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:30:20
2026-04-12T10:30:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:30:44.737 [DEBUG] [Thread-187544] [transport.py] [_log()] starting thread (client mode): 0xae5b40d0
2026-04-12T10:30:44.737 [DEBUG] [Thread-187544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:30:44.758 [DEBUG] [Thread-187544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:30:44.758 [INFO] [Thread-187544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] client lang: <none>
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] server lang: <none>
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] kex follows: False
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] Compression: none
2026-04-12T10:30:44.762 [DEBUG] [Thread-187544] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:30:44.780 [DEBUG] [Thread-187544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:30:44.781 [DEBUG] [Thread-187544] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:30:44.782 [DEBUG] [Thread-187544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:30:44.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:30:44.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:30:44.784 [DEBUG] [Thread-187544] [transport.py] [_log()] userauth is OK
2026-04-12T10:30:44.784 [DEBUG] [Thread-187544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:30:44.784 [DEBUG] [Thread-187544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:30:44.784 [DEBUG] [Thread-187544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:30:44.784 [DEBUG] [Thread-187544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:30:44.809 [INFO] [Thread-187544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:30:44.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:30:45.580 [DEBUG] [Thread-187544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:30:45.580 [DEBUG] [Thread-187544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:30:45.580 [DEBUG] [Thread-187544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:30:45.621 [DEBUG] [Thread-187544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:30:45.621 [DEBUG] [Thread-187544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:30:45.625 [DEBUG] [Thread-187544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:30:45.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:30:45.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:30:45.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:30:45.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:30:45.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:30:45.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:30:45.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:30:45.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:30:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:30:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.354276 -999.00  +12.10  13.62     91  +10.70 1 3 1 3 1   888    0 1.78 20.07 ----- 14.8 13.6 293.6 18.8 15.8 -9.0 15.2 -8.4 14.3 -6.7 15.1 -6.8
2026-04-12T10:30:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:30:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:30:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.354276
2026-04-12T10:30:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:30:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:30:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:30:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:30:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:30:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:30:20', tmtdew=-0.057815, humidity=100.344, cloud=0.0, wind=18.792, temperature=11.4419, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:30:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:30:45.651 [DEBUG] [Thread-187544] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:30:45.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:30:45.767 [DEBUG] [Thread-187547] [transport.py] [_log()] starting thread (client mode): 0xb0f41a80
2026-04-12T10:30:45.768 [DEBUG] [Thread-187547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:30:45.802 [DEBUG] [Thread-187547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:30:45.802 [INFO] [Thread-187547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:30:45.831 [DEBUG] [Thread-187547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:30:45.831 [DEBUG] [Thread-187547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:30:45.832 [DEBUG] [Thread-187547] [transport.py] [_log()] client lang: <none>
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] server lang: <none>
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] kex follows: False
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] Compression: none
2026-04-12T10:30:45.833 [DEBUG] [Thread-187547] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:30:45.911 [DEBUG] [Thread-187547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:30:45.912 [DEBUG] [Thread-187547] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:30:45.913 [DEBUG] [Thread-187547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:30:45.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:30:45.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:30:46.007 [DEBUG] [Thread-187547] [transport.py] [_log()] userauth is OK
2026-04-12T10:30:46.007 [DEBUG] [Thread-187547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:30:46.008 [DEBUG] [Thread-187547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:30:46.008 [DEBUG] [Thread-187547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:30:46.008 [DEBUG] [Thread-187547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:30:46.054 [INFO] [Thread-187547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:30:46.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:30:46.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:30:46.935 [DEBUG] [Thread-187547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:30:46.935 [DEBUG] [Thread-187547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:30:47.005 [DEBUG] [Thread-187547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:30:47.005 [DEBUG] [Thread-187547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:30:47.037 [DEBUG] [Thread-187547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:30:47.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:30:47.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:30:47.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:30:47.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:30:47.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:30:47.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:30:47.160 [DEBUG] [Thread-187547] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:30:56.326 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:30:56.328 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:30:57.039 [DEBUG] [Thread-187549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:31:12.094 [DEBUG] [Thread-187550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:31:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:31:17.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:31:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:31:18.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 30, 56), -0.00527, 100.328, 0.0, 16.0218, 11.4753, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:31:18.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:30:56
2026-04-12T10:31:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:31:18.974 [DEBUG] [Thread-187551] [transport.py] [_log()] starting thread (client mode): 0xa796b010
2026-04-12T10:31:18.974 [DEBUG] [Thread-187551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:31:18.995 [DEBUG] [Thread-187551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:31:18.995 [INFO] [Thread-187551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] client lang: <none>
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] server lang: <none>
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] kex follows: False
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:31:18.996 [DEBUG] [Thread-187551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:31:18.997 [DEBUG] [Thread-187551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:31:18.997 [DEBUG] [Thread-187551] [transport.py] [_log()] Compression: none
2026-04-12T10:31:18.997 [DEBUG] [Thread-187551] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:31:19.005 [DEBUG] [Thread-187551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:31:19.005 [DEBUG] [Thread-187551] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:31:19.006 [DEBUG] [Thread-187551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:31:19.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:31:19.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:31:19.008 [DEBUG] [Thread-187551] [transport.py] [_log()] userauth is OK
2026-04-12T10:31:19.008 [DEBUG] [Thread-187551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:31:19.008 [DEBUG] [Thread-187551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:31:19.008 [DEBUG] [Thread-187551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:31:19.008 [DEBUG] [Thread-187551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:31:19.032 [INFO] [Thread-187551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:31:19.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:31:19.832 [DEBUG] [Thread-187551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:31:19.832 [DEBUG] [Thread-187551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:31:19.833 [DEBUG] [Thread-187551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:31:19.873 [DEBUG] [Thread-187551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:31:19.873 [DEBUG] [Thread-187551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:31:19.877 [DEBUG] [Thread-187551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:31:19.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:31:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:31:19.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:31:19.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:31:19.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:31:19.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:31:19.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:31:19.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:31:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:31:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.354624 -999.00  +12.10  16.41     91  +10.70 1 3 1 3 1   888    0 1.77 18.12 ----- 13.3 16.4 276.6 17.9 15.7 -8.0 15.2 -7.4 14.3 -7.5 15.2 -6.1
2026-04-12T10:31:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:31:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:31:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.354624
2026-04-12T10:31:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:31:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:31:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:31:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:31:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:31:19.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:30:56', tmtdew=-0.00527, humidity=100.328, cloud=0.0, wind=16.0218, temperature=11.4753, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:30:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:31:19.904 [DEBUG] [Thread-187551] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:31:19.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:31:27.129 [DEBUG] [Thread-187554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:31:28.402 [DEBUG] [Thread-187555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:31:42.193 [DEBUG] [Thread-187556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:31:56.484 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:31:56.485 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:31:57.233 [DEBUG] [Thread-187557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:32:12.269 [DEBUG] [Thread-187558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:32:27.309 [DEBUG] [Thread-187559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:32:28.442 [DEBUG] [Thread-187560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:32:42.346 [DEBUG] [Thread-187561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:32:56.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:32:56.640 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:32:57.383 [DEBUG] [Thread-187562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:33:12.417 [DEBUG] [Thread-187563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:33:27.453 [DEBUG] [Thread-187564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:33:28.478 [DEBUG] [Thread-187565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:33:32.808 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T10:33:42.489 [DEBUG] [Thread-187566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:33:56.795 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:33:56.797 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:33:57.529 [DEBUG] [Thread-187567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:34:02.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:34:02.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:34:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:34:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 33, 53), -0.10673, 100.622, 0.0, 18.8784, 12.98, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:34:04.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:33:53
2026-04-12T10:34:04.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:34:04.675 [DEBUG] [Thread-187568] [transport.py] [_log()] starting thread (client mode): 0xae5b1e40
2026-04-12T10:34:04.675 [DEBUG] [Thread-187568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:34:04.693 [DEBUG] [Thread-187568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:34:04.693 [INFO] [Thread-187568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:34:04.696 [DEBUG] [Thread-187568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:34:04.696 [DEBUG] [Thread-187568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:34:04.696 [DEBUG] [Thread-187568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:34:04.696 [DEBUG] [Thread-187568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] client lang: <none>
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] server lang: <none>
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] kex follows: False
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] Compression: none
2026-04-12T10:34:04.697 [DEBUG] [Thread-187568] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:34:04.715 [DEBUG] [Thread-187568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:34:04.715 [DEBUG] [Thread-187568] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:34:04.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:34:04.717 [DEBUG] [Thread-187568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:34:04.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:34:04.718 [DEBUG] [Thread-187568] [transport.py] [_log()] userauth is OK
2026-04-12T10:34:04.719 [DEBUG] [Thread-187568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:34:04.719 [DEBUG] [Thread-187568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:34:04.719 [DEBUG] [Thread-187568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:34:04.719 [DEBUG] [Thread-187568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:34:04.733 [INFO] [Thread-187568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:34:04.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:34:05.496 [DEBUG] [Thread-187568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:34:05.496 [DEBUG] [Thread-187568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:34:05.497 [DEBUG] [Thread-187568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:34:05.537 [DEBUG] [Thread-187568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:34:05.538 [DEBUG] [Thread-187568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:34:05.542 [DEBUG] [Thread-187568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:34:05.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:34:05.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:34:05.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:34:05.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:34:05.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:34:05.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:34:05.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.356707 -999.00  +12.30  15.60     90  +10.80 1 3 1 3 1   888    0 1.81 18.84 ----- 14.9 15.6 265.7 22.0 16.0 -7.3 15.5 -7.0 14.8 -5.8 15.4 -5.7
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.356707
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:34:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:33:53', tmtdew=-0.10673, humidity=100.622, cloud=0.0, wind=18.8784, temperature=12.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:33:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:34:05.558 [DEBUG] [Thread-187568] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:34:05.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:34:05.641 [DEBUG] [Thread-187571] [transport.py] [_log()] starting thread (client mode): 0xb0f8ce50
2026-04-12T10:34:05.641 [DEBUG] [Thread-187571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:34:05.656 [DEBUG] [Thread-187571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:34:05.656 [INFO] [Thread-187571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:34:05.664 [DEBUG] [Thread-187571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:34:05.664 [DEBUG] [Thread-187571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:34:05.664 [DEBUG] [Thread-187571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] client lang: <none>
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] server lang: <none>
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] kex follows: False
2026-04-12T10:34:05.665 [DEBUG] [Thread-187571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:34:05.666 [DEBUG] [Thread-187571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:34:05.666 [DEBUG] [Thread-187571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:34:05.666 [DEBUG] [Thread-187571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:34:05.666 [DEBUG] [Thread-187571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:34:05.666 [DEBUG] [Thread-187571] [transport.py] [_log()] Compression: none
2026-04-12T10:34:05.666 [DEBUG] [Thread-187571] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:34:05.723 [DEBUG] [Thread-187571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:34:05.723 [DEBUG] [Thread-187571] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:34:05.724 [DEBUG] [Thread-187571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:34:05.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:34:05.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:34:05.781 [DEBUG] [Thread-187571] [transport.py] [_log()] userauth is OK
2026-04-12T10:34:05.781 [DEBUG] [Thread-187571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:34:05.782 [DEBUG] [Thread-187571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:34:05.782 [DEBUG] [Thread-187571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:34:05.782 [DEBUG] [Thread-187571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:34:05.800 [INFO] [Thread-187571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:34:05.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:34:05.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:34:06.635 [DEBUG] [Thread-187571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:34:06.636 [DEBUG] [Thread-187571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:34:06.684 [DEBUG] [Thread-187571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:34:06.684 [DEBUG] [Thread-187571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:34:06.694 [DEBUG] [Thread-187571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:34:06.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:34:06.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:34:06.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:34:06.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:34:06.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:34:06.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:34:06.731 [DEBUG] [Thread-187571] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:34:12.568 [DEBUG] [Thread-187573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:34:27.628 [DEBUG] [Thread-187574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:34:28.537 [DEBUG] [Thread-187575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:34:36.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:34:36.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:34:36.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:34:38.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 34, 29), -0.055395, 100.328, 0.0, 15.1222, 11.6581, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:34:38.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:34:29
2026-04-12T10:34:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:34:38.562 [DEBUG] [Thread-187576] [transport.py] [_log()] starting thread (client mode): 0xb0f57d30
2026-04-12T10:34:38.562 [DEBUG] [Thread-187576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:34:38.582 [DEBUG] [Thread-187576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:34:38.582 [INFO] [Thread-187576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] client lang: <none>
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] server lang: <none>
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] kex follows: False
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] Compression: none
2026-04-12T10:34:38.586 [DEBUG] [Thread-187576] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:34:38.604 [DEBUG] [Thread-187576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:34:38.604 [DEBUG] [Thread-187576] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:34:38.605 [DEBUG] [Thread-187576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:34:38.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:34:38.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:34:38.607 [DEBUG] [Thread-187576] [transport.py] [_log()] userauth is OK
2026-04-12T10:34:38.607 [DEBUG] [Thread-187576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:34:38.607 [DEBUG] [Thread-187576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:34:38.607 [DEBUG] [Thread-187576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:34:38.607 [DEBUG] [Thread-187576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:34:38.640 [INFO] [Thread-187576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:34:38.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:34:39.404 [DEBUG] [Thread-187576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:34:39.404 [DEBUG] [Thread-187576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:34:39.404 [DEBUG] [Thread-187576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:34:39.445 [DEBUG] [Thread-187576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:34:39.446 [DEBUG] [Thread-187576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:34:39.448 [DEBUG] [Thread-187576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:34:39.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:34:39.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:34:39.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:34:39.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:34:39.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:34:39.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:34:39.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:34:39.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:34:39.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:34:39.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.357054 -999.00  +12.30  18.89     90  +10.80 1 3 1 3 1   888    0 1.85 19.70 ----- 15.9 18.9 254.2 22.7 16.0 -8.0 15.6 -7.4 14.8 -7.4 15.4 -6.5
2026-04-12T10:34:39.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:34:39.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:34:39.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.357054
2026-04-12T10:34:39.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:34:39.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:34:39.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:34:39.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:34:39.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:34:39.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:34:29', tmtdew=-0.055395, humidity=100.328, cloud=0.0, wind=15.1222, temperature=11.6581, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:34:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:34:39.470 [DEBUG] [Thread-187576] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:34:39.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:34:39.565 [DEBUG] [Thread-187579] [transport.py] [_log()] starting thread (client mode): 0xa793b9d0
2026-04-12T10:34:39.565 [DEBUG] [Thread-187579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:34:39.580 [DEBUG] [Thread-187579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:34:39.580 [INFO] [Thread-187579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:34:39.587 [DEBUG] [Thread-187579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:34:39.587 [DEBUG] [Thread-187579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] client lang: <none>
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] server lang: <none>
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] kex follows: False
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] Compression: none
2026-04-12T10:34:39.588 [DEBUG] [Thread-187579] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:34:39.649 [DEBUG] [Thread-187579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:34:39.649 [DEBUG] [Thread-187579] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:34:39.650 [DEBUG] [Thread-187579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:34:39.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:34:39.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:34:39.706 [DEBUG] [Thread-187579] [transport.py] [_log()] userauth is OK
2026-04-12T10:34:39.706 [DEBUG] [Thread-187579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:34:39.706 [DEBUG] [Thread-187579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:34:39.707 [DEBUG] [Thread-187579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:34:39.707 [DEBUG] [Thread-187579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:34:39.725 [INFO] [Thread-187579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:34:39.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:34:39.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:34:40.589 [DEBUG] [Thread-187579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:34:40.589 [DEBUG] [Thread-187579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:34:40.637 [DEBUG] [Thread-187579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:34:40.638 [DEBUG] [Thread-187579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:34:40.649 [DEBUG] [Thread-187579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:34:40.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:34:40.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:34:40.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:34:40.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:34:40.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:34:40.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:34:40.688 [DEBUG] [Thread-187579] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:34:42.661 [DEBUG] [Thread-187581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:34:56.939 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:34:56.941 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:34:57.715 [DEBUG] [Thread-187582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:35:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:35:10.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:35:10.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:35:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 35, 4), -0.057875, 100.344, 0.0, 15.2456, 11.6415, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:35:11.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:35:04
2026-04-12T10:35:12.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:35:12.566 [DEBUG] [Thread-187583] [transport.py] [_log()] starting thread (client mode): 0xa793a920
2026-04-12T10:35:12.566 [DEBUG] [Thread-187583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:35:12.586 [DEBUG] [Thread-187583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:35:12.586 [INFO] [Thread-187583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:35:12.590 [DEBUG] [Thread-187583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:35:12.590 [DEBUG] [Thread-187583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] client lang: <none>
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] server lang: <none>
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] kex follows: False
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] Compression: none
2026-04-12T10:35:12.591 [DEBUG] [Thread-187583] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:35:12.613 [DEBUG] [Thread-187583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:35:12.613 [DEBUG] [Thread-187583] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:35:12.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:35:12.614 [DEBUG] [Thread-187583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:35:12.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:35:12.617 [DEBUG] [Thread-187583] [transport.py] [_log()] userauth is OK
2026-04-12T10:35:12.617 [DEBUG] [Thread-187583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:35:12.617 [DEBUG] [Thread-187583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:35:12.617 [DEBUG] [Thread-187583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:35:12.617 [DEBUG] [Thread-187583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:35:12.640 [INFO] [Thread-187583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:35:12.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:35:12.755 [DEBUG] [Thread-187585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:35:14.029 [DEBUG] [Thread-187583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:35:14.029 [DEBUG] [Thread-187583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:35:14.029 [DEBUG] [Thread-187583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:35:14.070 [DEBUG] [Thread-187583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:35:14.070 [DEBUG] [Thread-187583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:35:14.073 [DEBUG] [Thread-187583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:35:14.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:35:14.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:35:14.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:35:14.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:35:14.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:35:14.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:35:14.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:35:14.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:35:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:35:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.357402 -999.00  +12.30  18.22     90  +10.70 1 3 1 3 1   888    0 1.91 20.45 ----- 16.6 18.2 263.8 24.8 16.1 -8.3 15.6 -7.6 14.8 -6.8 15.4 -7.1
2026-04-12T10:35:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:35:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:35:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.357402
2026-04-12T10:35:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:35:14.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:35:14.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:35:14.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:35:14.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:35:14.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:35:04', tmtdew=-0.057875, humidity=100.344, cloud=0.0, wind=15.2456, temperature=11.6415, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:34:39.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:35:14.123 [DEBUG] [Thread-187583] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:35:14.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:35:14.217 [DEBUG] [Thread-187587] [transport.py] [_log()] starting thread (client mode): 0xae5e6950
2026-04-12T10:35:14.218 [DEBUG] [Thread-187587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:35:14.233 [DEBUG] [Thread-187587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:35:14.233 [INFO] [Thread-187587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:35:14.240 [DEBUG] [Thread-187587] [transport.py] [_log()] client lang: <none>
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] server lang: <none>
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] kex follows: False
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] Compression: none
2026-04-12T10:35:14.241 [DEBUG] [Thread-187587] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:35:14.298 [DEBUG] [Thread-187587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:35:14.299 [DEBUG] [Thread-187587] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:35:14.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:35:14.300 [DEBUG] [Thread-187587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:35:14.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:35:14.355 [DEBUG] [Thread-187587] [transport.py] [_log()] userauth is OK
2026-04-12T10:35:14.355 [DEBUG] [Thread-187587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:35:14.355 [DEBUG] [Thread-187587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:35:14.355 [DEBUG] [Thread-187587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:35:14.356 [DEBUG] [Thread-187587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:35:14.379 [INFO] [Thread-187587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:35:14.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:35:14.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:35:15.222 [DEBUG] [Thread-187587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:35:15.222 [DEBUG] [Thread-187587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:35:15.271 [DEBUG] [Thread-187587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:35:15.271 [DEBUG] [Thread-187587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:35:15.280 [DEBUG] [Thread-187587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:35:15.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:35:15.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:35:15.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:35:15.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:35:15.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:35:15.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:35:15.317 [DEBUG] [Thread-187587] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:35:27.792 [DEBUG] [Thread-187589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:35:28.585 [DEBUG] [Thread-187590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:35:42.833 [DEBUG] [Thread-187591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:35:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:35:45.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:35:45.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:35:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 35, 4), -0.057875, 100.344, 0.0, 15.2456, 11.6415, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:35:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:35:04
2026-04-12T10:35:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:35:47.293 [DEBUG] [Thread-187592] [transport.py] [_log()] starting thread (client mode): 0xb0f54970
2026-04-12T10:35:47.293 [DEBUG] [Thread-187592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:35:47.314 [DEBUG] [Thread-187592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:35:47.314 [INFO] [Thread-187592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] client lang: <none>
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] server lang: <none>
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] kex follows: False
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:35:47.318 [DEBUG] [Thread-187592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:35:47.319 [DEBUG] [Thread-187592] [transport.py] [_log()] Compression: none
2026-04-12T10:35:47.319 [DEBUG] [Thread-187592] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:35:47.337 [DEBUG] [Thread-187592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:35:47.337 [DEBUG] [Thread-187592] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:35:47.338 [DEBUG] [Thread-187592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:35:47.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:35:47.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:35:47.339 [DEBUG] [Thread-187592] [transport.py] [_log()] userauth is OK
2026-04-12T10:35:47.339 [DEBUG] [Thread-187592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:35:47.340 [DEBUG] [Thread-187592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:35:47.340 [DEBUG] [Thread-187592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:35:47.340 [DEBUG] [Thread-187592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:35:47.363 [INFO] [Thread-187592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:35:47.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:35:48.169 [DEBUG] [Thread-187592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:35:48.169 [DEBUG] [Thread-187592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:35:48.169 [DEBUG] [Thread-187592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:35:48.210 [DEBUG] [Thread-187592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:35:48.210 [DEBUG] [Thread-187592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:35:48.213 [DEBUG] [Thread-187592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:35:48.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:35:48.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:35:48.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:35:48.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:35:48.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:35:48.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:35:48.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:35:48.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:35:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:35:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.357748 -999.00  +12.30  16.89     90  +10.70 1 3 1 3 1   888    0 1.89 20.34 ----- 19.5 16.9 273.0 24.3 16.1 -8.8 15.6 -7.8 14.8 -7.7 15.4 -8.0
2026-04-12T10:35:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:35:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:35:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.357748
2026-04-12T10:35:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:35:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:35:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:35:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:35:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:35:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:35:04', tmtdew=-0.057875, humidity=100.344, cloud=0.0, wind=15.2456, temperature=11.6415, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:35:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:35:48.239 [DEBUG] [Thread-187592] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:35:48.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:35:48.329 [DEBUG] [Thread-187595] [transport.py] [_log()] starting thread (client mode): 0xa79380a0
2026-04-12T10:35:48.329 [DEBUG] [Thread-187595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:35:48.344 [DEBUG] [Thread-187595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:35:48.344 [INFO] [Thread-187595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:35:48.352 [DEBUG] [Thread-187595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:35:48.352 [DEBUG] [Thread-187595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] client lang: <none>
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] server lang: <none>
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] kex follows: False
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:35:48.353 [DEBUG] [Thread-187595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:35:48.354 [DEBUG] [Thread-187595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:35:48.354 [DEBUG] [Thread-187595] [transport.py] [_log()] Compression: none
2026-04-12T10:35:48.354 [DEBUG] [Thread-187595] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:35:48.411 [DEBUG] [Thread-187595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:35:48.411 [DEBUG] [Thread-187595] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:35:48.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:35:48.412 [DEBUG] [Thread-187595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:35:48.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:35:48.467 [DEBUG] [Thread-187595] [transport.py] [_log()] userauth is OK
2026-04-12T10:35:48.467 [DEBUG] [Thread-187595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:35:48.467 [DEBUG] [Thread-187595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:35:48.467 [DEBUG] [Thread-187595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:35:48.467 [DEBUG] [Thread-187595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:35:48.485 [INFO] [Thread-187595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:35:48.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:35:48.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:35:49.310 [DEBUG] [Thread-187595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:35:49.310 [DEBUG] [Thread-187595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:35:49.359 [DEBUG] [Thread-187595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:35:49.359 [DEBUG] [Thread-187595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:35:49.369 [DEBUG] [Thread-187595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:35:49.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:35:49.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:35:49.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:35:49.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:35:49.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:35:49.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:35:49.408 [DEBUG] [Thread-187595] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:35:57.095 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:35:57.096 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:35:57.872 [DEBUG] [Thread-187597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:36:12.920 [DEBUG] [Thread-187598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:36:19.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:36:19.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:36:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:36:20.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 35, 40), -0.12615, 100.755, 0.0, 18.7726, 12.582, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:36:20.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:35:40
2026-04-12T10:36:21.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:36:21.352 [DEBUG] [Thread-187599] [transport.py] [_log()] starting thread (client mode): 0xb0f56320
2026-04-12T10:36:21.352 [DEBUG] [Thread-187599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:36:21.372 [DEBUG] [Thread-187599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:36:21.372 [INFO] [Thread-187599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] client lang: <none>
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] server lang: <none>
2026-04-12T10:36:21.375 [DEBUG] [Thread-187599] [transport.py] [_log()] kex follows: False
2026-04-12T10:36:21.376 [DEBUG] [Thread-187599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:36:21.376 [DEBUG] [Thread-187599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:36:21.376 [DEBUG] [Thread-187599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:36:21.376 [DEBUG] [Thread-187599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:36:21.376 [DEBUG] [Thread-187599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:36:21.376 [DEBUG] [Thread-187599] [transport.py] [_log()] Compression: none
2026-04-12T10:36:21.376 [DEBUG] [Thread-187599] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:36:21.393 [DEBUG] [Thread-187599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:36:21.393 [DEBUG] [Thread-187599] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:36:21.394 [DEBUG] [Thread-187599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:36:21.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:36:21.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:36:21.396 [DEBUG] [Thread-187599] [transport.py] [_log()] userauth is OK
2026-04-12T10:36:21.397 [DEBUG] [Thread-187599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:36:21.397 [DEBUG] [Thread-187599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:36:21.397 [DEBUG] [Thread-187599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:36:21.397 [DEBUG] [Thread-187599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:36:21.420 [INFO] [Thread-187599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:36:21.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:36:22.180 [DEBUG] [Thread-187599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:36:22.180 [DEBUG] [Thread-187599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:36:22.180 [DEBUG] [Thread-187599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:36:22.221 [DEBUG] [Thread-187599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:36:22.221 [DEBUG] [Thread-187599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:36:22.225 [DEBUG] [Thread-187599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:36:22.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:36:22.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:36:22.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:36:22.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:36:22.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:36:22.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:36:22.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:36:22.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:36:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:36:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.358096 -999.00  +12.30  22.01     89  +10.60 1 3 1 3 1   888    0 1.96 22.57 ----- 15.5 22.0 261.4 28.7 16.1 -8.6 15.6 -7.6 14.7 -9.7 15.4 -8.0
2026-04-12T10:36:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:36:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:36:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.358096
2026-04-12T10:36:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:36:22.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:36:22.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:36:22.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:36:22.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:36:22.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:35:40', tmtdew=-0.12615, humidity=100.755, cloud=0.0, wind=18.7726, temperature=12.582, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:35:39.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:36:22.252 [DEBUG] [Thread-187599] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:36:22.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:36:22.343 [DEBUG] [Thread-187602] [transport.py] [_log()] starting thread (client mode): 0xb0fb5cf0
2026-04-12T10:36:22.343 [DEBUG] [Thread-187602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:36:22.359 [DEBUG] [Thread-187602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:36:22.359 [INFO] [Thread-187602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] client lang: <none>
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] server lang: <none>
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] kex follows: False
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:36:22.367 [DEBUG] [Thread-187602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:36:22.368 [DEBUG] [Thread-187602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:36:22.368 [DEBUG] [Thread-187602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:36:22.368 [DEBUG] [Thread-187602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:36:22.368 [DEBUG] [Thread-187602] [transport.py] [_log()] Compression: none
2026-04-12T10:36:22.368 [DEBUG] [Thread-187602] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:36:22.425 [DEBUG] [Thread-187602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:36:22.425 [DEBUG] [Thread-187602] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:36:22.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:36:22.426 [DEBUG] [Thread-187602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:36:22.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:36:22.481 [DEBUG] [Thread-187602] [transport.py] [_log()] userauth is OK
2026-04-12T10:36:22.481 [DEBUG] [Thread-187602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:36:22.481 [DEBUG] [Thread-187602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:36:22.481 [DEBUG] [Thread-187602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:36:22.481 [DEBUG] [Thread-187602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:36:22.500 [INFO] [Thread-187602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:36:22.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:36:22.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:36:23.325 [DEBUG] [Thread-187602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:36:23.325 [DEBUG] [Thread-187602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:36:23.373 [DEBUG] [Thread-187602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:36:23.374 [DEBUG] [Thread-187602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:36:23.382 [DEBUG] [Thread-187602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:36:23.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:36:23.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:36:23.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:36:23.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:36:23.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:36:23.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:36:23.416 [DEBUG] [Thread-187602] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:36:27.955 [DEBUG] [Thread-187604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:36:28.620 [DEBUG] [Thread-187605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:36:43.012 [DEBUG] [Thread-187606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:36:53.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:36:53.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:36:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:36:54.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 36, 15), -0.007935, 100.344, 0.0, 20.0974, 11.6747, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:36:54.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:36:15
2026-04-12T10:36:55.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:36:55.458 [DEBUG] [Thread-187607] [transport.py] [_log()] starting thread (client mode): 0xa793bca0
2026-04-12T10:36:55.458 [DEBUG] [Thread-187607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:36:55.472 [DEBUG] [Thread-187607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:36:55.472 [INFO] [Thread-187607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:36:55.482 [DEBUG] [Thread-187607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:36:55.482 [DEBUG] [Thread-187607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:36:55.482 [DEBUG] [Thread-187607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] client lang: <none>
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] server lang: <none>
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] kex follows: False
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] Compression: none
2026-04-12T10:36:55.483 [DEBUG] [Thread-187607] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:36:55.502 [DEBUG] [Thread-187607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:36:55.503 [DEBUG] [Thread-187607] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:36:55.503 [DEBUG] [Thread-187607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:36:55.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:36:55.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:36:55.505 [DEBUG] [Thread-187607] [transport.py] [_log()] userauth is OK
2026-04-12T10:36:55.505 [DEBUG] [Thread-187607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:36:55.505 [DEBUG] [Thread-187607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:36:55.506 [DEBUG] [Thread-187607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:36:55.506 [DEBUG] [Thread-187607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:36:55.531 [INFO] [Thread-187607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:36:55.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:36:56.331 [DEBUG] [Thread-187607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:36:56.331 [DEBUG] [Thread-187607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:36:56.332 [DEBUG] [Thread-187607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:36:56.372 [DEBUG] [Thread-187607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:36:56.372 [DEBUG] [Thread-187607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:36:56.376 [DEBUG] [Thread-187607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:36:56.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:36:56.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:36:56.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:36:56.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:36:56.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:36:56.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:36:56.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:36:56.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:36:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:36:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.358443 -999.00  +12.30  14.93     89  +10.60 1 3 1 3 1   888    0 2.01 24.30 ----- 20.6 14.9 266.2 20.8 16.1 -8.5 15.6 -7.4 14.8 -7.9 15.4 -7.9
2026-04-12T10:36:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:36:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:36:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.358443
2026-04-12T10:36:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:36:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:36:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:36:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:36:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:36:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:36:15', tmtdew=-0.007935, humidity=100.344, cloud=0.0, wind=20.0974, temperature=11.6747, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:36:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:36:56.401 [DEBUG] [Thread-187607] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:36:56.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:36:56.510 [DEBUG] [Thread-187610] [transport.py] [_log()] starting thread (client mode): 0xae5e5450
2026-04-12T10:36:56.511 [DEBUG] [Thread-187610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:36:56.542 [DEBUG] [Thread-187610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:36:56.543 [INFO] [Thread-187610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:36:56.566 [DEBUG] [Thread-187610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] client lang: <none>
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] server lang: <none>
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] kex follows: False
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:36:56.567 [DEBUG] [Thread-187610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:36:56.568 [DEBUG] [Thread-187610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:36:56.568 [DEBUG] [Thread-187610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:36:56.568 [DEBUG] [Thread-187610] [transport.py] [_log()] Compression: none
2026-04-12T10:36:56.568 [DEBUG] [Thread-187610] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:36:56.643 [DEBUG] [Thread-187610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:36:56.643 [DEBUG] [Thread-187610] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:36:56.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:36:56.644 [DEBUG] [Thread-187610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:36:56.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:36:56.734 [DEBUG] [Thread-187610] [transport.py] [_log()] userauth is OK
2026-04-12T10:36:56.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:36:56.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:36:56.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:36:56.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:36:56.770 [INFO] [Thread-187610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:36:56.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:36:56.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:36:57.237 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:36:57.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:36:57.642 [DEBUG] [Thread-187610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:36:57.643 [DEBUG] [Thread-187610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:36:57.691 [DEBUG] [Thread-187610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:36:57.691 [DEBUG] [Thread-187610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:36:57.700 [DEBUG] [Thread-187610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:36:57.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:36:57.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:36:57.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:36:57.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:36:57.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:36:57.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:36:57.738 [DEBUG] [Thread-187610] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:36:58.053 [DEBUG] [Thread-187612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:37:13.114 [DEBUG] [Thread-187613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:37:27.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:37:27.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:37:27.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
2026-04-12T10:37:28.149 [DEBUG] [Thread-187614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:37:28.663 [DEBUG] [Thread-187615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:37:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 36, 51), -0.12076, 100.721, 0.0, 18.2786, 12.383, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:37:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:36:51
2026-04-12T10:37:29.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:37:29.646 [DEBUG] [Thread-187616] [transport.py] [_log()] starting thread (client mode): 0xb0fb7310
2026-04-12T10:37:29.646 [DEBUG] [Thread-187616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:37:29.666 [DEBUG] [Thread-187616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:37:29.666 [INFO] [Thread-187616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:37:29.669 [DEBUG] [Thread-187616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:37:29.669 [DEBUG] [Thread-187616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:37:29.669 [DEBUG] [Thread-187616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] client lang: <none>
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] server lang: <none>
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] kex follows: False
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] Compression: none
2026-04-12T10:37:29.670 [DEBUG] [Thread-187616] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:37:29.688 [DEBUG] [Thread-187616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:37:29.688 [DEBUG] [Thread-187616] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:37:29.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:37:29.689 [DEBUG] [Thread-187616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:37:29.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:37:29.691 [DEBUG] [Thread-187616] [transport.py] [_log()] userauth is OK
2026-04-12T10:37:29.692 [DEBUG] [Thread-187616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:37:29.692 [DEBUG] [Thread-187616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:37:29.692 [DEBUG] [Thread-187616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:37:29.692 [DEBUG] [Thread-187616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:37:29.716 [INFO] [Thread-187616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:37:29.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:37:30.482 [DEBUG] [Thread-187616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:37:30.483 [DEBUG] [Thread-187616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:37:30.483 [DEBUG] [Thread-187616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:37:30.524 [DEBUG] [Thread-187616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:37:30.524 [DEBUG] [Thread-187616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:37:30.527 [DEBUG] [Thread-187616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:37:30.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:37:30.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:37:30.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:37:30.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:37:30.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:37:30.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:37:30.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:37:30.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:37:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:37:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.358790 -999.00  +12.40  14.82     89  +10.60 1 3 1 3 1   888    0 2.14 27.37 ----- 11.6 14.8 272.2 20.7 16.1 -7.0 15.6 -5.9 14.8 -6.2 15.5 -6.1
2026-04-12T10:37:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:37:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:37:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.358790
2026-04-12T10:37:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:37:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:37:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:37:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:37:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:37:30.559 [DEBUG] [Thread-187616] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:37:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:36:51', tmtdew=-0.12076, humidity=100.721, cloud=0.0, wind=18.2786, temperature=12.383, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:36:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:37:30.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:37:30.653 [DEBUG] [Thread-187619] [transport.py] [_log()] starting thread (client mode): 0xa79c6500
2026-04-12T10:37:30.653 [DEBUG] [Thread-187619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:37:30.668 [DEBUG] [Thread-187619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:37:30.668 [INFO] [Thread-187619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:37:30.684 [DEBUG] [Thread-187619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] client lang: <none>
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] server lang: <none>
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] kex follows: False
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] Compression: none
2026-04-12T10:37:30.685 [DEBUG] [Thread-187619] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:37:30.736 [DEBUG] [Thread-187619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:37:30.737 [DEBUG] [Thread-187619] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:37:30.737 [DEBUG] [Thread-187619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:37:30.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:37:30.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:37:30.795 [DEBUG] [Thread-187619] [transport.py] [_log()] userauth is OK
2026-04-12T10:37:30.795 [DEBUG] [Thread-187619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:37:30.795 [DEBUG] [Thread-187619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:37:30.795 [DEBUG] [Thread-187619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:37:30.795 [DEBUG] [Thread-187619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:37:30.814 [INFO] [Thread-187619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:37:30.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:37:30.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:37:31.676 [DEBUG] [Thread-187619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:37:31.676 [DEBUG] [Thread-187619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:37:31.724 [DEBUG] [Thread-187619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:37:31.724 [DEBUG] [Thread-187619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:37:31.733 [DEBUG] [Thread-187619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:37:31.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:37:31.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:37:31.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:37:31.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:37:31.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:37:31.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:37:31.778 [DEBUG] [Thread-187619] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:37:43.187 [DEBUG] [Thread-187621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:37:57.382 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:37:57.383 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:37:58.239 [DEBUG] [Thread-187622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:38:01.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:38:01.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:38:01.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:38:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 37, 27), -0.002765, 100.311, 0.0, 18.7031, 11.6417, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:38:03.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:37:27
2026-04-12T10:38:03.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:38:03.794 [DEBUG] [Thread-187623] [transport.py] [_log()] starting thread (client mode): 0xb0f8e920
2026-04-12T10:38:03.795 [DEBUG] [Thread-187623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:38:03.814 [DEBUG] [Thread-187623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:38:03.814 [INFO] [Thread-187623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] client lang: <none>
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] server lang: <none>
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] kex follows: False
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:38:03.817 [DEBUG] [Thread-187623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:38:03.818 [DEBUG] [Thread-187623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:38:03.818 [DEBUG] [Thread-187623] [transport.py] [_log()] Compression: none
2026-04-12T10:38:03.818 [DEBUG] [Thread-187623] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:38:03.836 [DEBUG] [Thread-187623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:38:03.837 [DEBUG] [Thread-187623] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:38:03.837 [DEBUG] [Thread-187623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:38:03.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:38:03.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:38:03.839 [DEBUG] [Thread-187623] [transport.py] [_log()] userauth is OK
2026-04-12T10:38:03.839 [DEBUG] [Thread-187623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:38:03.839 [DEBUG] [Thread-187623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:38:03.839 [DEBUG] [Thread-187623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:38:03.840 [DEBUG] [Thread-187623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:38:03.859 [INFO] [Thread-187623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:38:03.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:38:04.612 [DEBUG] [Thread-187623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:38:04.613 [DEBUG] [Thread-187623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:38:04.613 [DEBUG] [Thread-187623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:38:04.654 [DEBUG] [Thread-187623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:38:04.654 [DEBUG] [Thread-187623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:38:04.658 [DEBUG] [Thread-187623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:38:04.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:38:04.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:38:04.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:38:04.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:38:04.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:38:04.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:38:04.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:38:04.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:38:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:38:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.359485 -999.00  +12.40  18.11     89  +10.70 1 3 1 3 1   888    0 2.32 31.33 ----- 15.8 18.1 272.6 21.3 16.2 -7.8 15.6 -6.4 14.6 -7.0 15.6 -6.4
2026-04-12T10:38:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:38:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:38:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.359485
2026-04-12T10:38:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:38:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:38:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:38:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:38:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:38:04.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:37:27', tmtdew=-0.002765, humidity=100.311, cloud=0.0, wind=18.7031, temperature=11.6417, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:37:39.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:38:04.683 [DEBUG] [Thread-187623] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:38:04.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:38:04.777 [DEBUG] [Thread-187626] [transport.py] [_log()] starting thread (client mode): 0xa79c4460
2026-04-12T10:38:04.777 [DEBUG] [Thread-187626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:38:04.792 [DEBUG] [Thread-187626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:38:04.792 [INFO] [Thread-187626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:38:04.800 [DEBUG] [Thread-187626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] client lang: <none>
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] server lang: <none>
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] kex follows: False
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] Compression: none
2026-04-12T10:38:04.801 [DEBUG] [Thread-187626] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:38:04.857 [DEBUG] [Thread-187626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:38:04.857 [DEBUG] [Thread-187626] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:38:04.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:38:04.859 [DEBUG] [Thread-187626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:38:04.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:38:04.913 [DEBUG] [Thread-187626] [transport.py] [_log()] userauth is OK
2026-04-12T10:38:04.913 [DEBUG] [Thread-187626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:38:04.914 [DEBUG] [Thread-187626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:38:04.914 [DEBUG] [Thread-187626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:38:04.914 [DEBUG] [Thread-187626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:38:04.938 [INFO] [Thread-187626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:38:04.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:38:04.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:38:05.794 [DEBUG] [Thread-187626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:38:05.795 [DEBUG] [Thread-187626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:38:05.842 [DEBUG] [Thread-187626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:38:05.843 [DEBUG] [Thread-187626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:38:05.852 [DEBUG] [Thread-187626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:38:05.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:38:05.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:38:05.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:38:05.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:38:05.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:38:05.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:38:05.887 [DEBUG] [Thread-187626] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:38:13.281 [DEBUG] [Thread-187628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:38:28.334 [DEBUG] [Thread-187629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:38:28.696 [DEBUG] [Thread-187630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:38:35.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:38:35.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:38:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:38:37.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 38, 2), -0.007865, 100.344, 0.0, 19.1617, 11.7244, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:38:37.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:38:02
2026-04-12T10:38:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:38:37.752 [DEBUG] [Thread-187631] [transport.py] [_log()] starting thread (client mode): 0xa79c5840
2026-04-12T10:38:37.752 [DEBUG] [Thread-187631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:38:37.775 [DEBUG] [Thread-187631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:38:37.776 [INFO] [Thread-187631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:38:37.779 [DEBUG] [Thread-187631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] client lang: <none>
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] server lang: <none>
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] kex follows: False
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] Compression: none
2026-04-12T10:38:37.780 [DEBUG] [Thread-187631] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:38:37.797 [DEBUG] [Thread-187631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:38:37.798 [DEBUG] [Thread-187631] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:38:37.798 [DEBUG] [Thread-187631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:38:37.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:38:37.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:38:37.800 [DEBUG] [Thread-187631] [transport.py] [_log()] userauth is OK
2026-04-12T10:38:37.800 [DEBUG] [Thread-187631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:38:37.800 [DEBUG] [Thread-187631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:38:37.800 [DEBUG] [Thread-187631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:38:37.800 [DEBUG] [Thread-187631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:38:37.821 [INFO] [Thread-187631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:38:37.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:38:38.651 [DEBUG] [Thread-187631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:38:38.651 [DEBUG] [Thread-187631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:38:38.651 [DEBUG] [Thread-187631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:38:38.692 [DEBUG] [Thread-187631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:38:38.692 [DEBUG] [Thread-187631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:38:38.695 [DEBUG] [Thread-187631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:38:38.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:38:38.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:38:38.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:38:38.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:38:38.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:38:38.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:38:38.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:38:38.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:38:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:38:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.359832 -999.00  +12.30  11.75     88  +10.50 1 3 1 3 1   888    0 2.33 31.81 ----- 9.0 11.8 275.2 21.9 16.2 -7.1 15.7 -6.0 14.7 -6.0 15.6 -6.3
2026-04-12T10:38:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:38:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:38:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.359832
2026-04-12T10:38:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:38:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:38:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:38:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:38:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:38:38.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:38:02', tmtdew=-0.007865, humidity=100.344, cloud=0.0, wind=19.1617, temperature=11.7244, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:38:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:38:38.721 [DEBUG] [Thread-187631] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:38:38.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:38:38.817 [DEBUG] [Thread-187634] [transport.py] [_log()] starting thread (client mode): 0xa79c5060
2026-04-12T10:38:38.818 [DEBUG] [Thread-187634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:38:38.833 [DEBUG] [Thread-187634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:38:38.833 [INFO] [Thread-187634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:38:38.841 [DEBUG] [Thread-187634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:38:38.841 [DEBUG] [Thread-187634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:38:38.841 [DEBUG] [Thread-187634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:38:38.841 [DEBUG] [Thread-187634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] client lang: <none>
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] server lang: <none>
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] kex follows: False
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] Compression: none
2026-04-12T10:38:38.842 [DEBUG] [Thread-187634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:38:38.904 [DEBUG] [Thread-187634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:38:38.904 [DEBUG] [Thread-187634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:38:38.905 [DEBUG] [Thread-187634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:38:38.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:38:38.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:38:38.963 [DEBUG] [Thread-187634] [transport.py] [_log()] userauth is OK
2026-04-12T10:38:38.964 [DEBUG] [Thread-187634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:38:38.964 [DEBUG] [Thread-187634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:38:38.964 [DEBUG] [Thread-187634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:38:38.964 [DEBUG] [Thread-187634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:38:38.983 [INFO] [Thread-187634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:38:38.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:38:38.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:38:39.827 [DEBUG] [Thread-187634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:38:39.827 [DEBUG] [Thread-187634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:38:39.875 [DEBUG] [Thread-187634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:38:39.875 [DEBUG] [Thread-187634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:38:39.884 [DEBUG] [Thread-187634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:38:39.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:38:39.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:38:39.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:38:39.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:38:39.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:38:39.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:38:39.922 [DEBUG] [Thread-187634] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:38:43.368 [DEBUG] [Thread-187636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:38:57.522 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:38:57.523 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:38:58.417 [DEBUG] [Thread-187637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:39:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:39:09.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:39:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:39:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 38, 38), -0.10557, 100.621, 0.0, 18.8431, 12.3824, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:39:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:38:38
2026-04-12T10:39:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:39:11.758 [DEBUG] [Thread-187638] [transport.py] [_log()] starting thread (client mode): 0xa79c7f10
2026-04-12T10:39:11.758 [DEBUG] [Thread-187638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:39:11.779 [DEBUG] [Thread-187638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:39:11.779 [INFO] [Thread-187638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:11.782 [DEBUG] [Thread-187638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] client lang: <none>
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] server lang: <none>
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] kex follows: False
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] Compression: none
2026-04-12T10:39:11.783 [DEBUG] [Thread-187638] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:39:11.799 [DEBUG] [Thread-187638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:39:11.800 [DEBUG] [Thread-187638] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:39:11.800 [DEBUG] [Thread-187638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:39:11.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:39:11.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:39:11.803 [DEBUG] [Thread-187638] [transport.py] [_log()] userauth is OK
2026-04-12T10:39:11.804 [DEBUG] [Thread-187638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:39:11.804 [DEBUG] [Thread-187638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:39:11.804 [DEBUG] [Thread-187638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:39:11.804 [DEBUG] [Thread-187638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:39:11.827 [INFO] [Thread-187638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:39:11.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:39:12.620 [DEBUG] [Thread-187638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:39:12.621 [DEBUG] [Thread-187638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:39:12.621 [DEBUG] [Thread-187638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:39:12.662 [DEBUG] [Thread-187638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:39:12.662 [DEBUG] [Thread-187638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:39:12.665 [DEBUG] [Thread-187638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:39:12.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:39:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:39:12.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:39:12.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:39:12.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:39:12.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:39:12.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:39:12.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:39:12.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:39:12.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.360179 -999.00  +12.40  15.15     89  +10.80 1 3 1 3 1   888    0 2.31 31.51 ----- 11.2 15.2 277.0 22.9 16.2 -7.5 15.7 -6.5 14.8 -6.7 15.6 -6.3
2026-04-12T10:39:12.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:39:12.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:39:12.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.360179
2026-04-12T10:39:12.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:39:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:39:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:39:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:39:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:39:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:38:38', tmtdew=-0.10557, humidity=100.621, cloud=0.0, wind=18.8431, temperature=12.3824, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:38:39.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:39:12.698 [DEBUG] [Thread-187638] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:39:12.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:39:12.793 [DEBUG] [Thread-187641] [transport.py] [_log()] starting thread (client mode): 0xa79c7a60
2026-04-12T10:39:12.793 [DEBUG] [Thread-187641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:39:12.807 [DEBUG] [Thread-187641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:39:12.808 [INFO] [Thread-187641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:39:12.815 [DEBUG] [Thread-187641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] client lang: <none>
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] server lang: <none>
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] kex follows: False
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:39:12.816 [DEBUG] [Thread-187641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:39:12.817 [DEBUG] [Thread-187641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:39:12.817 [DEBUG] [Thread-187641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:39:12.817 [DEBUG] [Thread-187641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:39:12.817 [DEBUG] [Thread-187641] [transport.py] [_log()] Compression: none
2026-04-12T10:39:12.817 [DEBUG] [Thread-187641] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:39:12.873 [DEBUG] [Thread-187641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:39:12.873 [DEBUG] [Thread-187641] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:39:12.874 [DEBUG] [Thread-187641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:39:12.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:39:12.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:39:12.929 [DEBUG] [Thread-187641] [transport.py] [_log()] userauth is OK
2026-04-12T10:39:12.929 [DEBUG] [Thread-187641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:39:12.929 [DEBUG] [Thread-187641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:39:12.929 [DEBUG] [Thread-187641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:39:12.930 [DEBUG] [Thread-187641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:39:12.947 [INFO] [Thread-187641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:39:12.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:39:12.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:39:13.460 [DEBUG] [Thread-187643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:39:13.845 [DEBUG] [Thread-187641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:39:13.845 [DEBUG] [Thread-187641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:39:13.893 [DEBUG] [Thread-187641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:39:13.893 [DEBUG] [Thread-187641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:39:13.903 [DEBUG] [Thread-187641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:39:13.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:39: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')
2026-04-12T10:39:13.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
2026-04-12T10:39:13.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:39:13.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:39:13.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:39:13.940 [DEBUG] [Thread-187641] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:39:28.510 [DEBUG] [Thread-187644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:39:28.728 [DEBUG] [Thread-187645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:39:43.543 [DEBUG] [Thread-187646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:39:43.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:39:43.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:39:43.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:39:45.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 39, 13), 0.014905, 100.194, 0.0, 20.273, 11.6578, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:39:45.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:39:13
2026-04-12T10:39:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:39:45.763 [DEBUG] [Thread-187647] [transport.py] [_log()] starting thread (client mode): 0xb0f8d6c0
2026-04-12T10:39:45.764 [DEBUG] [Thread-187647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:39:45.784 [DEBUG] [Thread-187647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:39:45.785 [INFO] [Thread-187647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] client lang: <none>
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] server lang: <none>
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] kex follows: False
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:39:45.788 [DEBUG] [Thread-187647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:39:45.789 [DEBUG] [Thread-187647] [transport.py] [_log()] Compression: none
2026-04-12T10:39:45.789 [DEBUG] [Thread-187647] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:39:45.806 [DEBUG] [Thread-187647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:39:45.807 [DEBUG] [Thread-187647] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:39:45.807 [DEBUG] [Thread-187647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:39:45.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:39:45.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:39:45.809 [DEBUG] [Thread-187647] [transport.py] [_log()] userauth is OK
2026-04-12T10:39:45.810 [DEBUG] [Thread-187647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:39:45.810 [DEBUG] [Thread-187647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:39:45.810 [DEBUG] [Thread-187647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:39:45.810 [DEBUG] [Thread-187647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:39:45.834 [INFO] [Thread-187647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:39:45.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:39:46.609 [DEBUG] [Thread-187647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:39:46.609 [DEBUG] [Thread-187647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:39:46.609 [DEBUG] [Thread-187647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:39:46.650 [DEBUG] [Thread-187647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:39:46.650 [DEBUG] [Thread-187647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:39:46.653 [DEBUG] [Thread-187647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:39:46.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:39:46.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:39:46.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:39:46.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:39:46.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:39:46.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:39:46.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:39:46.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.360526 -999.00  +12.50  13.52     89  +10.90 1 3 1 3 1   888    0 2.28 29.83 ----- 12.3 13.5 274.8 23.5 16.3 -7.5 15.7 -6.3 15.0 -5.9 15.7 -6.2
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.360526
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:39:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:39:13', tmtdew=0.014905, humidity=100.194, cloud=0.0, wind=20.273, temperature=11.6578, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:39:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:39:46.680 [DEBUG] [Thread-187647] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:39:46.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:39:46.770 [DEBUG] [Thread-187650] [transport.py] [_log()] starting thread (client mode): 0xae5b23b0
2026-04-12T10:39:46.770 [DEBUG] [Thread-187650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:39:46.784 [DEBUG] [Thread-187650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:39:46.784 [INFO] [Thread-187650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:39:46.792 [DEBUG] [Thread-187650] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:39:46.792 [DEBUG] [Thread-187650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:39:46.792 [DEBUG] [Thread-187650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:39:46.792 [DEBUG] [Thread-187650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:46.792 [DEBUG] [Thread-187650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:39:46.792 [DEBUG] [Thread-187650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:46.792 [DEBUG] [Thread-187650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] client lang: <none>
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] server lang: <none>
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] kex follows: False
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] Compression: none
2026-04-12T10:39:46.793 [DEBUG] [Thread-187650] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:39:46.849 [DEBUG] [Thread-187650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:39:46.849 [DEBUG] [Thread-187650] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:39:46.849 [DEBUG] [Thread-187650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:39:46.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:39:46.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:39:46.907 [DEBUG] [Thread-187650] [transport.py] [_log()] userauth is OK
2026-04-12T10:39:46.907 [DEBUG] [Thread-187650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:39:46.907 [DEBUG] [Thread-187650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:39:46.907 [DEBUG] [Thread-187650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:39:46.907 [DEBUG] [Thread-187650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:39:46.926 [INFO] [Thread-187650] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:39:46.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:39:46.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:39:47.779 [DEBUG] [Thread-187650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:39:47.779 [DEBUG] [Thread-187650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:39:47.826 [DEBUG] [Thread-187650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:39:47.827 [DEBUG] [Thread-187650] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:39:47.836 [DEBUG] [Thread-187650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:39:47.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:39: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')
2026-04-12T10:39:47.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:39:47.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:39:47.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:39:47.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:39:47.869 [DEBUG] [Thread-187650] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:39:57.663 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:39:57.664 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:39:58.581 [DEBUG] [Thread-187652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:40:13.637 [DEBUG] [Thread-187653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:40:17.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:40:17.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:40:17.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:40:19.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 39, 49), -0.09044, 100.521, 0.0, 19.7957, 12.4152, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:40:19.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:39:49
2026-04-12T10:40:19.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:40:19.687 [DEBUG] [Thread-187654] [transport.py] [_log()] starting thread (client mode): 0xb0f8e470
2026-04-12T10:40:19.687 [DEBUG] [Thread-187654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:40:19.707 [DEBUG] [Thread-187654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:40:19.707 [INFO] [Thread-187654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:40:19.710 [DEBUG] [Thread-187654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] client lang: <none>
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] server lang: <none>
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] kex follows: False
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] Compression: none
2026-04-12T10:40:19.711 [DEBUG] [Thread-187654] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:40:19.728 [DEBUG] [Thread-187654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:40:19.729 [DEBUG] [Thread-187654] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:40:19.729 [DEBUG] [Thread-187654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:40:19.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:40:19.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:40:19.773 [DEBUG] [Thread-187654] [transport.py] [_log()] userauth is OK
2026-04-12T10:40:19.773 [DEBUG] [Thread-187654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:40:19.774 [DEBUG] [Thread-187654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:40:19.774 [DEBUG] [Thread-187654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:40:19.774 [DEBUG] [Thread-187654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:40:19.794 [INFO] [Thread-187654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:40:19.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:40:21.244 [DEBUG] [Thread-187654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:40:21.244 [DEBUG] [Thread-187654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:40:21.245 [DEBUG] [Thread-187654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:40:21.285 [DEBUG] [Thread-187654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:40:21.285 [DEBUG] [Thread-187654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:40:21.289 [DEBUG] [Thread-187654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:40:21.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:40:21.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:40:21.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:40:21.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:40:21.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:40:21.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:40:21.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:40:21.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:40:21.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:40:21.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.360874 -999.00  +12.40  14.13     89  +10.70 1 3 1 3 1   888    0 2.27 30.85 ----- 14.0 14.1 272.4 19.8 16.3 -7.5 15.7 -6.0 14.9 -5.8 15.7 -6.0
2026-04-12T10:40:21.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:40:21.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:40:21.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.360874
2026-04-12T10:40:21.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:40:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:40:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:40:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:40:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:40:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:39:49', tmtdew=-0.09044, humidity=100.521, cloud=0.0, wind=19.7957, temperature=12.4152, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:39:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:40:21.356 [DEBUG] [Thread-187654] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:40:21.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:40:21.451 [DEBUG] [Thread-187657] [transport.py] [_log()] starting thread (client mode): 0xb0f8c310
2026-04-12T10:40:21.452 [DEBUG] [Thread-187657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:40:21.466 [DEBUG] [Thread-187657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:40:21.467 [INFO] [Thread-187657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:40:21.475 [DEBUG] [Thread-187657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:40:21.475 [DEBUG] [Thread-187657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:40:21.475 [DEBUG] [Thread-187657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:40:21.475 [DEBUG] [Thread-187657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:21.475 [DEBUG] [Thread-187657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] client lang: <none>
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] server lang: <none>
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] kex follows: False
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:40:21.476 [DEBUG] [Thread-187657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:40:21.477 [DEBUG] [Thread-187657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:40:21.477 [DEBUG] [Thread-187657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:40:21.477 [DEBUG] [Thread-187657] [transport.py] [_log()] Compression: none
2026-04-12T10:40:21.477 [DEBUG] [Thread-187657] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:40:21.534 [DEBUG] [Thread-187657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:40:21.534 [DEBUG] [Thread-187657] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:40:21.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:40:21.535 [DEBUG] [Thread-187657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:40:21.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:40:21.593 [DEBUG] [Thread-187657] [transport.py] [_log()] userauth is OK
2026-04-12T10:40:21.593 [DEBUG] [Thread-187657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:40:21.594 [DEBUG] [Thread-187657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:40:21.594 [DEBUG] [Thread-187657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:40:21.594 [DEBUG] [Thread-187657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:40:21.619 [INFO] [Thread-187657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:40:21.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:40:21.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:40:22.437 [DEBUG] [Thread-187657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:40:22.437 [DEBUG] [Thread-187657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:40:22.485 [DEBUG] [Thread-187657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:40:22.485 [DEBUG] [Thread-187657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:40:22.495 [DEBUG] [Thread-187657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:40:22.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:40:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:40:22.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:40:22.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:40:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:40:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:40:22.531 [DEBUG] [Thread-187657] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:40:28.673 [DEBUG] [Thread-187659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:40:28.774 [DEBUG] [Thread-187660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:40:43.714 [DEBUG] [Thread-187661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:40:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:40:52.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:40:52.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:40:53.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 40, 24), 0.01234, 100.21, 0.0, 18.6156, 11.624, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:40:53.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:40:24
2026-04-12T10:40:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:40:54.344 [DEBUG] [Thread-187662] [transport.py] [_log()] starting thread (client mode): 0xa79c7fd0
2026-04-12T10:40:54.344 [DEBUG] [Thread-187662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:40:54.363 [DEBUG] [Thread-187662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:40:54.363 [INFO] [Thread-187662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:40:54.366 [DEBUG] [Thread-187662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] client lang: <none>
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] server lang: <none>
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] kex follows: False
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] Compression: none
2026-04-12T10:40:54.367 [DEBUG] [Thread-187662] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:40:54.386 [DEBUG] [Thread-187662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:40:54.386 [DEBUG] [Thread-187662] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:40:54.387 [DEBUG] [Thread-187662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:40:54.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:40:54.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:40:54.389 [DEBUG] [Thread-187662] [transport.py] [_log()] userauth is OK
2026-04-12T10:40:54.389 [DEBUG] [Thread-187662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:40:54.389 [DEBUG] [Thread-187662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:40:54.389 [DEBUG] [Thread-187662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:40:54.389 [DEBUG] [Thread-187662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:40:54.414 [INFO] [Thread-187662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:40:54.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:40:55.149 [DEBUG] [Thread-187662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:40:55.149 [DEBUG] [Thread-187662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:40:55.150 [DEBUG] [Thread-187662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:40:55.190 [DEBUG] [Thread-187662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:40:55.190 [DEBUG] [Thread-187662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:40:55.193 [DEBUG] [Thread-187662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:40:55.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:40:55.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:40:55.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:40:55.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:40:55.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:40:55.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:40:55.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:40:55.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:40:55.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:40:55.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.361222 -999.00  +12.50  20.69     89  +10.80 1 3 1 3 1   888    0 2.35 31.24 ----- 13.2 20.7 266.8 24.6 16.3 -6.9 15.8 -7.1 14.9 -8.0 15.7 -6.3
2026-04-12T10:40:55.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:40:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:40:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.361222
2026-04-12T10:40:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:40:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:40:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:40:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:40:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:40:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:40:24', tmtdew=0.01234, humidity=100.21, cloud=0.0, wind=18.6156, temperature=11.624, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:40:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:40:55.222 [DEBUG] [Thread-187662] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:40:55.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:40:55.318 [DEBUG] [Thread-187665] [transport.py] [_log()] starting thread (client mode): 0xa7939960
2026-04-12T10:40:55.319 [DEBUG] [Thread-187665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:40:55.334 [DEBUG] [Thread-187665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:40:55.334 [INFO] [Thread-187665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] client lang: <none>
2026-04-12T10:40:55.341 [DEBUG] [Thread-187665] [transport.py] [_log()] server lang: <none>
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] kex follows: False
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] Compression: none
2026-04-12T10:40:55.342 [DEBUG] [Thread-187665] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:40:55.403 [DEBUG] [Thread-187665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:40:55.404 [DEBUG] [Thread-187665] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:40:55.404 [DEBUG] [Thread-187665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:40:55.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:40:55.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:40:55.459 [DEBUG] [Thread-187665] [transport.py] [_log()] userauth is OK
2026-04-12T10:40:55.460 [DEBUG] [Thread-187665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:40:55.460 [DEBUG] [Thread-187665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:40:55.460 [DEBUG] [Thread-187665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:40:55.460 [DEBUG] [Thread-187665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:40:55.479 [INFO] [Thread-187665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:40:55.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:40:55.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:40:56.373 [DEBUG] [Thread-187665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:40:56.373 [DEBUG] [Thread-187665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:40:56.421 [DEBUG] [Thread-187665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:40:56.421 [DEBUG] [Thread-187665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:40:56.431 [DEBUG] [Thread-187665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:40:56.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:40:56.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:40:56.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:40:56.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:40:56.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:40:56.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:40:56.468 [DEBUG] [Thread-187665] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:40:57.809 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:40:57.810 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:40:58.751 [DEBUG] [Thread-187667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:41:13.813 [DEBUG] [Thread-187668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:41:26.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:41:26.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:41:26.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:41:27.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 40, 59), -0.03778, 100.21, 0.0, 22.6919, 11.5069, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:41:27.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:40:59
2026-04-12T10:41:28.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:41:28.266 [DEBUG] [Thread-187669] [transport.py] [_log()] starting thread (client mode): 0xa79c48b0
2026-04-12T10:41:28.266 [DEBUG] [Thread-187669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:41:28.286 [DEBUG] [Thread-187669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:41:28.286 [INFO] [Thread-187669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:41:28.289 [DEBUG] [Thread-187669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:41:28.289 [DEBUG] [Thread-187669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:41:28.289 [DEBUG] [Thread-187669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:41:28.289 [DEBUG] [Thread-187669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] client lang: <none>
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] server lang: <none>
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] kex follows: False
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] Compression: none
2026-04-12T10:41:28.290 [DEBUG] [Thread-187669] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:41:28.307 [DEBUG] [Thread-187669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:41:28.308 [DEBUG] [Thread-187669] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:41:28.308 [DEBUG] [Thread-187669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:41:28.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:41:28.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:41:28.310 [DEBUG] [Thread-187669] [transport.py] [_log()] userauth is OK
2026-04-12T10:41:28.310 [DEBUG] [Thread-187669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:41:28.310 [DEBUG] [Thread-187669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:41:28.310 [DEBUG] [Thread-187669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:41:28.310 [DEBUG] [Thread-187669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:41:28.327 [INFO] [Thread-187669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:41:28.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:41:28.839 [DEBUG] [Thread-187671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:41:28.850 [DEBUG] [Thread-187672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:41:29.097 [DEBUG] [Thread-187669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:41:29.097 [DEBUG] [Thread-187669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:41:29.098 [DEBUG] [Thread-187669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:41:29.138 [DEBUG] [Thread-187669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:41:29.138 [DEBUG] [Thread-187669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:41:29.142 [DEBUG] [Thread-187669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:41:29.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:41:29.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:41:29.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:41:29.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:41:29.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:41:29.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:41:29.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:41:29.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:41:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:41:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.361568 -999.00  +12.40  17.45     89  +10.60 1 3 1 3 1   888    0 2.34 30.59 ----- 21.5 17.4 272.8 25.2 16.3 -7.9 15.8 -7.3 14.9 -6.6 15.7 -7.3
2026-04-12T10:41:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:41:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:41:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.361568
2026-04-12T10:41:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:41:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:41:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:41:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:41:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:41:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:40:59', tmtdew=-0.03778, humidity=100.21, cloud=0.0, wind=22.6919, temperature=11.5069, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:40:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:41:29.171 [DEBUG] [Thread-187669] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:41:29.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:41:29.267 [DEBUG] [Thread-187674] [transport.py] [_log()] starting thread (client mode): 0xa79c70d0
2026-04-12T10:41:29.268 [DEBUG] [Thread-187674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:41:29.282 [DEBUG] [Thread-187674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:41:29.282 [INFO] [Thread-187674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:41:29.292 [DEBUG] [Thread-187674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:41:29.292 [DEBUG] [Thread-187674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:41:29.292 [DEBUG] [Thread-187674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] client lang: <none>
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] server lang: <none>
2026-04-12T10:41:29.293 [DEBUG] [Thread-187674] [transport.py] [_log()] kex follows: False
2026-04-12T10:41:29.294 [DEBUG] [Thread-187674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:41:29.294 [DEBUG] [Thread-187674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:41:29.294 [DEBUG] [Thread-187674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:41:29.294 [DEBUG] [Thread-187674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:41:29.294 [DEBUG] [Thread-187674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:41:29.294 [DEBUG] [Thread-187674] [transport.py] [_log()] Compression: none
2026-04-12T10:41:29.294 [DEBUG] [Thread-187674] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:41:29.351 [DEBUG] [Thread-187674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:41:29.351 [DEBUG] [Thread-187674] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:41:29.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:41:29.353 [DEBUG] [Thread-187674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:41:29.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:41:29.409 [DEBUG] [Thread-187674] [transport.py] [_log()] userauth is OK
2026-04-12T10:41:29.410 [DEBUG] [Thread-187674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:41:29.410 [DEBUG] [Thread-187674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:41:29.410 [DEBUG] [Thread-187674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:41:29.410 [DEBUG] [Thread-187674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:41:29.429 [INFO] [Thread-187674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:41:29.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:41:29.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:41:30.257 [DEBUG] [Thread-187674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:41:30.257 [DEBUG] [Thread-187674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:41:30.306 [DEBUG] [Thread-187674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:41:30.306 [DEBUG] [Thread-187674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:41:30.315 [DEBUG] [Thread-187674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:41:30.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:41:30.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:41:30.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:41:30.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:41:30.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:41:30.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:41:30.350 [DEBUG] [Thread-187674] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:41:43.886 [DEBUG] [Thread-187676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:41:57.965 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:41:57.966 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:41:58.939 [DEBUG] [Thread-187677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:42:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:42:00.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:42:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:42:01.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 41, 35), -0.05003, 100.254, 0.0, 22.4064, 12.5135, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:42:01.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:41:35
2026-04-12T10:42:01.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:42:02.147 [DEBUG] [Thread-187678] [transport.py] [_log()] starting thread (client mode): 0xae5b2a10
2026-04-12T10:42:02.147 [DEBUG] [Thread-187678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:42:02.167 [DEBUG] [Thread-187678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:42:02.167 [INFO] [Thread-187678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:42:02.170 [DEBUG] [Thread-187678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:42:02.170 [DEBUG] [Thread-187678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:42:02.170 [DEBUG] [Thread-187678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:42:02.170 [DEBUG] [Thread-187678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:02.170 [DEBUG] [Thread-187678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:02.170 [DEBUG] [Thread-187678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:02.170 [DEBUG] [Thread-187678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] client lang: <none>
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] server lang: <none>
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] kex follows: False
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] Compression: none
2026-04-12T10:42:02.171 [DEBUG] [Thread-187678] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:42:02.189 [DEBUG] [Thread-187678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:42:02.190 [DEBUG] [Thread-187678] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:42:02.190 [DEBUG] [Thread-187678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:42:02.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:42:02.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:42:02.233 [DEBUG] [Thread-187678] [transport.py] [_log()] userauth is OK
2026-04-12T10:42:02.233 [DEBUG] [Thread-187678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:42:02.233 [DEBUG] [Thread-187678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:42:02.233 [DEBUG] [Thread-187678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:42:02.233 [DEBUG] [Thread-187678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:42:02.265 [INFO] [Thread-187678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:42:02.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:42:03.021 [DEBUG] [Thread-187678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:42:03.022 [DEBUG] [Thread-187678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:42:03.022 [DEBUG] [Thread-187678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:42:03.062 [DEBUG] [Thread-187678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:42:03.062 [DEBUG] [Thread-187678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:42:03.065 [DEBUG] [Thread-187678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:42:03.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:42:03.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:42:03.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:42:03.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:42:03.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:42:03.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:42:03.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:42:03.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:42:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.361915 -999.00  +12.30  21.56     89  +10.50 1 3 1 3 1   888    0 2.31 30.73 ----- 17.2 21.6 266.4 24.3 16.3 -8.0 15.8 -6.7 14.9 -8.2 15.7 -6.6
2026-04-12T10:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.361915
2026-04-12T10:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:42:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:42:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:42:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:42:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:42:03.091 [DEBUG] [Thread-187678] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:42:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:41:35', tmtdew=-0.05003, humidity=100.254, cloud=0.0, wind=22.4064, temperature=12.5135, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:41:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:42:03.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:42:03.187 [DEBUG] [Thread-187681] [transport.py] [_log()] starting thread (client mode): 0xae5b1d50
2026-04-12T10:42:03.187 [DEBUG] [Thread-187681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:42:03.203 [DEBUG] [Thread-187681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:42:03.203 [INFO] [Thread-187681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] client lang: <none>
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] server lang: <none>
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] kex follows: False
2026-04-12T10:42:03.211 [DEBUG] [Thread-187681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:42:03.212 [DEBUG] [Thread-187681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:42:03.212 [DEBUG] [Thread-187681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:42:03.212 [DEBUG] [Thread-187681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:42:03.212 [DEBUG] [Thread-187681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:42:03.212 [DEBUG] [Thread-187681] [transport.py] [_log()] Compression: none
2026-04-12T10:42:03.212 [DEBUG] [Thread-187681] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:42:03.283 [DEBUG] [Thread-187681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:42:03.284 [DEBUG] [Thread-187681] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:42:03.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:42:03.285 [DEBUG] [Thread-187681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:42:03.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:42:03.340 [DEBUG] [Thread-187681] [transport.py] [_log()] userauth is OK
2026-04-12T10:42:03.341 [DEBUG] [Thread-187681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:42:03.341 [DEBUG] [Thread-187681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:42:03.341 [DEBUG] [Thread-187681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:42:03.341 [DEBUG] [Thread-187681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:42:03.381 [INFO] [Thread-187681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:42:03.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:42:03.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:42:04.193 [DEBUG] [Thread-187681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:42:04.193 [DEBUG] [Thread-187681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:42:04.258 [DEBUG] [Thread-187681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:42:04.258 [DEBUG] [Thread-187681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:42:04.284 [DEBUG] [Thread-187681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:42:04.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:42:04.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:42:04.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:42:04.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:42:04.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:42:04.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:42:04.389 [DEBUG] [Thread-187681] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:42:13.977 [DEBUG] [Thread-187683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:42:28.869 [DEBUG] [Thread-187684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:42:29.038 [DEBUG] [Thread-187685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:42:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:42:34.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:42: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
2026-04-12T10:42:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 42, 10), 0.03777, 100.043, 0.0, 20.8037, 11.5735, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:42:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:42:10
2026-04-12T10:42:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:42:36.240 [DEBUG] [Thread-187686] [transport.py] [_log()] starting thread (client mode): 0xa7939de0
2026-04-12T10:42:36.241 [DEBUG] [Thread-187686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:42:36.262 [DEBUG] [Thread-187686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:42:36.262 [INFO] [Thread-187686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:42:36.278 [DEBUG] [Thread-187686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] client lang: <none>
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] server lang: <none>
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] kex follows: False
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:42:36.279 [DEBUG] [Thread-187686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:42:36.280 [DEBUG] [Thread-187686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:42:36.280 [DEBUG] [Thread-187686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:42:36.280 [DEBUG] [Thread-187686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:42:36.280 [DEBUG] [Thread-187686] [transport.py] [_log()] Compression: none
2026-04-12T10:42:36.280 [DEBUG] [Thread-187686] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:42:36.290 [DEBUG] [Thread-187686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:42:36.291 [DEBUG] [Thread-187686] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:42:36.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:42:36.292 [DEBUG] [Thread-187686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:42:36.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:42:36.294 [DEBUG] [Thread-187686] [transport.py] [_log()] userauth is OK
2026-04-12T10:42:36.294 [DEBUG] [Thread-187686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:42:36.294 [DEBUG] [Thread-187686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:42:36.294 [DEBUG] [Thread-187686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:42:36.295 [DEBUG] [Thread-187686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:42:36.331 [INFO] [Thread-187686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:42:36.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:42:37.146 [DEBUG] [Thread-187686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:42:37.146 [DEBUG] [Thread-187686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:42:37.147 [DEBUG] [Thread-187686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:42:37.187 [DEBUG] [Thread-187686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:42:37.187 [DEBUG] [Thread-187686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:42:37.191 [DEBUG] [Thread-187686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:42:37.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:42:37.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:42:37.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:42:37.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:42:37.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:42:37.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:42:37.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:42:37.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:42:37.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:42:37.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.362263 -999.00  +12.40  16.24     90  +10.80 1 3 1 3 1   888    0 2.32 30.96 ----- 15.6 16.2 253.4 19.4 16.4 -7.8 15.9 -6.3 15.0 -5.3 15.7 -6.4
2026-04-12T10:42:37.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:42:37.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:42:37.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.362263
2026-04-12T10:42:37.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:42:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:42:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:42:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:42:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:42:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:42:10', tmtdew=0.03777, humidity=100.043, cloud=0.0, wind=20.8037, temperature=11.5735, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:41:39.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:42:37.220 [DEBUG] [Thread-187686] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:42:37.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:42:37.315 [DEBUG] [Thread-187689] [transport.py] [_log()] starting thread (client mode): 0xb0fb43a0
2026-04-12T10:42:37.315 [DEBUG] [Thread-187689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:42:37.330 [DEBUG] [Thread-187689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:42:37.331 [INFO] [Thread-187689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:42:37.338 [DEBUG] [Thread-187689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:42:37.338 [DEBUG] [Thread-187689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] client lang: <none>
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] server lang: <none>
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] kex follows: False
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] Compression: none
2026-04-12T10:42:37.339 [DEBUG] [Thread-187689] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:42:37.398 [DEBUG] [Thread-187689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:42:37.399 [DEBUG] [Thread-187689] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:42:37.400 [DEBUG] [Thread-187689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:42:37.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:42:37.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:42:37.466 [DEBUG] [Thread-187689] [transport.py] [_log()] userauth is OK
2026-04-12T10:42:37.467 [DEBUG] [Thread-187689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:42:37.467 [DEBUG] [Thread-187689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:42:37.467 [DEBUG] [Thread-187689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:42:37.467 [DEBUG] [Thread-187689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:42:37.486 [INFO] [Thread-187689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:42:37.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:42:37.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:42:38.344 [DEBUG] [Thread-187689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:42:38.345 [DEBUG] [Thread-187689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:42:38.393 [DEBUG] [Thread-187689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:42:38.393 [DEBUG] [Thread-187689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:42:38.403 [DEBUG] [Thread-187689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:42:38.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:42:38.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:42:38.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:42:38.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:42:38.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:42:38.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:42:38.478 [DEBUG] [Thread-187689] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:42:44.072 [DEBUG] [Thread-187691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:42:58.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:42:58.106 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:42:59.128 [DEBUG] [Thread-187692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:43:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:43:08.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:43:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:43:09.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 42, 46), -0.00949, 99.9875, 0.0, 24.5232, 12.5129, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:43:09.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:42:46
2026-04-12T10:43:10.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:43:10.322 [DEBUG] [Thread-187693] [transport.py] [_log()] starting thread (client mode): 0xae5b0550
2026-04-12T10:43:10.322 [DEBUG] [Thread-187693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:43:10.335 [DEBUG] [Thread-187693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:43:10.335 [INFO] [Thread-187693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] client lang: <none>
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] server lang: <none>
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] kex follows: False
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:43:10.338 [DEBUG] [Thread-187693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:43:10.339 [DEBUG] [Thread-187693] [transport.py] [_log()] Compression: none
2026-04-12T10:43:10.339 [DEBUG] [Thread-187693] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:43:10.349 [DEBUG] [Thread-187693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:43:10.349 [DEBUG] [Thread-187693] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:43:10.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:43:10.350 [DEBUG] [Thread-187693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:43:10.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:43:10.352 [DEBUG] [Thread-187693] [transport.py] [_log()] userauth is OK
2026-04-12T10:43:10.352 [DEBUG] [Thread-187693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:43:10.352 [DEBUG] [Thread-187693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:43:10.352 [DEBUG] [Thread-187693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:43:10.352 [DEBUG] [Thread-187693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:43:10.374 [INFO] [Thread-187693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:43:10.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:43:11.141 [DEBUG] [Thread-187693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:43:11.141 [DEBUG] [Thread-187693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:43:11.141 [DEBUG] [Thread-187693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:43:11.182 [DEBUG] [Thread-187693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:43:11.182 [DEBUG] [Thread-187693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:43:11.186 [DEBUG] [Thread-187693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:43:11.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:43:11.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:43:11.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:43:11.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:43:11.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:43:11.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:43:11.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:43:11.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:43:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:43:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.362610 -999.00  +12.40  15.70     90  +10.80 1 3 1 3 1   888    0 2.34 30.47 ----- 17.2 15.7 263.0 25.4 16.4 -7.8 16.0 -5.5 15.2 -4.5 15.8 -5.4
2026-04-12T10:43:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:43:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:43:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.362610
2026-04-12T10:43:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:43:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:43:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:43:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:43:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:43:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:42:46', tmtdew=-0.00949, humidity=99.9875, cloud=0.0, wind=24.5232, temperature=12.5129, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:42:09.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:43:11.210 [DEBUG] [Thread-187693] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:43:11.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:43:11.325 [DEBUG] [Thread-187696] [transport.py] [_log()] starting thread (client mode): 0xae5b3a90
2026-04-12T10:43:11.325 [DEBUG] [Thread-187696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:43:11.356 [DEBUG] [Thread-187696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:43:11.356 [INFO] [Thread-187696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:43:11.388 [DEBUG] [Thread-187696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:43:11.389 [DEBUG] [Thread-187696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:43:11.390 [DEBUG] [Thread-187696] [transport.py] [_log()] client lang: <none>
2026-04-12T10:43:11.390 [DEBUG] [Thread-187696] [transport.py] [_log()] server lang: <none>
2026-04-12T10:43:11.390 [DEBUG] [Thread-187696] [transport.py] [_log()] kex follows: False
2026-04-12T10:43:11.390 [DEBUG] [Thread-187696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:43:11.390 [DEBUG] [Thread-187696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:43:11.390 [DEBUG] [Thread-187696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:43:11.390 [DEBUG] [Thread-187696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:43:11.391 [DEBUG] [Thread-187696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:43:11.391 [DEBUG] [Thread-187696] [transport.py] [_log()] Compression: none
2026-04-12T10:43:11.391 [DEBUG] [Thread-187696] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:43:11.475 [DEBUG] [Thread-187696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:43:11.475 [DEBUG] [Thread-187696] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:43:11.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:43:11.476 [DEBUG] [Thread-187696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:43:11.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:43:11.571 [DEBUG] [Thread-187696] [transport.py] [_log()] userauth is OK
2026-04-12T10:43:11.571 [DEBUG] [Thread-187696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:43:11.571 [DEBUG] [Thread-187696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:43:11.571 [DEBUG] [Thread-187696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:43:11.571 [DEBUG] [Thread-187696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:43:11.600 [INFO] [Thread-187696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:43:11.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:43:11.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:43:12.417 [DEBUG] [Thread-187696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:43:12.417 [DEBUG] [Thread-187696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:43:12.464 [DEBUG] [Thread-187696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:43:12.465 [DEBUG] [Thread-187696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:43:12.473 [DEBUG] [Thread-187696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:43:12.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:43:12.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:43:12.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:43:12.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:43:12.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:43:12.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:43:12.507 [DEBUG] [Thread-187696] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:43:14.163 [DEBUG] [Thread-187698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:43:28.913 [DEBUG] [Thread-187699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:43:29.213 [DEBUG] [Thread-187700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:43:42.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:43:42.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:43:42.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:43:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 43, 21), -0.00733, 100.01, 0.0, 20.362, 11.7228, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:43:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:43:21
2026-04-12T10:43:44.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:43:44.250 [DEBUG] [Thread-187701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:43:44.354 [DEBUG] [Thread-187702] [transport.py] [_log()] starting thread (client mode): 0xae518190
2026-04-12T10:43:44.354 [DEBUG] [Thread-187702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:43:44.373 [DEBUG] [Thread-187702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:43:44.373 [INFO] [Thread-187702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:43:44.376 [DEBUG] [Thread-187702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:43:44.376 [DEBUG] [Thread-187702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] client lang: <none>
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] server lang: <none>
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] kex follows: False
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] Compression: none
2026-04-12T10:43:44.377 [DEBUG] [Thread-187702] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:43:44.393 [DEBUG] [Thread-187702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:43:44.394 [DEBUG] [Thread-187702] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:43:44.394 [DEBUG] [Thread-187702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:43:44.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:43:44.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:43:44.396 [DEBUG] [Thread-187702] [transport.py] [_log()] userauth is OK
2026-04-12T10:43:44.396 [DEBUG] [Thread-187702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:43:44.396 [DEBUG] [Thread-187702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:43:44.397 [DEBUG] [Thread-187702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:43:44.397 [DEBUG] [Thread-187702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:43:44.422 [INFO] [Thread-187702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:43:44.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:43:45.206 [DEBUG] [Thread-187702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:43:45.207 [DEBUG] [Thread-187702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:43:45.207 [DEBUG] [Thread-187702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:43:45.248 [DEBUG] [Thread-187702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:43:45.248 [DEBUG] [Thread-187702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:43:45.252 [DEBUG] [Thread-187702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:43:45.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:43:45.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:43:45.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:43:45.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:43:45.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:43:45.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:43:45.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:43:45.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:43:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:43:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.363304 -999.00  +12.40  13.24     90  +10.80 1 3 1 3 1   888    0 2.43 32.96 ----- 15.2 13.2 264.6 22.1 16.8 -6.9 16.2 -5.3 15.4 -4.4 16.1 -5.0
2026-04-12T10:43:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:43:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:43:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.363304
2026-04-12T10:43:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:43:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:43:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:43:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:43:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:43:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:43:21', tmtdew=-0.00733, humidity=100.01, cloud=0.0, wind=20.362, temperature=11.7228, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:43:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:43:45.277 [DEBUG] [Thread-187702] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:43:45.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:43:45.367 [DEBUG] [Thread-187705] [transport.py] [_log()] starting thread (client mode): 0xae5b0580
2026-04-12T10:43:45.368 [DEBUG] [Thread-187705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:43:45.390 [DEBUG] [Thread-187705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:43:45.390 [INFO] [Thread-187705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] client lang: <none>
2026-04-12T10:43:45.398 [DEBUG] [Thread-187705] [transport.py] [_log()] server lang: <none>
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] kex follows: False
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] Compression: none
2026-04-12T10:43:45.399 [DEBUG] [Thread-187705] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:43:45.458 [DEBUG] [Thread-187705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:43:45.459 [DEBUG] [Thread-187705] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:43:45.459 [DEBUG] [Thread-187705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:43:45.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:43:45.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:43:45.519 [DEBUG] [Thread-187705] [transport.py] [_log()] userauth is OK
2026-04-12T10:43:45.520 [DEBUG] [Thread-187705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:43:45.520 [DEBUG] [Thread-187705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:43:45.520 [DEBUG] [Thread-187705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:43:45.520 [DEBUG] [Thread-187705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:43:45.543 [INFO] [Thread-187705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:43:45.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:43:45.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:43:46.369 [DEBUG] [Thread-187705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:43:46.369 [DEBUG] [Thread-187705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:43:46.417 [DEBUG] [Thread-187705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:43:46.417 [DEBUG] [Thread-187705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:43:46.426 [DEBUG] [Thread-187705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:43:46.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:43:46.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:43:46.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:43:46.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:43:46.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:43:46.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:43:46.463 [DEBUG] [Thread-187705] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:43:58.247 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:43:58.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:43:59.283 [DEBUG] [Thread-187707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:44:14.346 [DEBUG] [Thread-187708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:44:16.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:44:16.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:44:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:44:17.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 43, 57), 0.045215, 99.9937, 0.0, 20.8037, 11.8062, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:44:17.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:43:57
2026-04-12T10:44:18.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:44:18.359 [DEBUG] [Thread-187709] [transport.py] [_log()] starting thread (client mode): 0xb0f8f9a0
2026-04-12T10:44:18.359 [DEBUG] [Thread-187709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:44:18.381 [DEBUG] [Thread-187709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:44:18.381 [INFO] [Thread-187709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] client lang: <none>
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] server lang: <none>
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] kex follows: False
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:44:18.384 [DEBUG] [Thread-187709] [transport.py] [_log()] Compression: none
2026-04-12T10:44:18.385 [DEBUG] [Thread-187709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:44:18.410 [DEBUG] [Thread-187709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:44:18.410 [DEBUG] [Thread-187709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:44:18.411 [DEBUG] [Thread-187709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:44:18.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:44:18.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:44:18.412 [DEBUG] [Thread-187709] [transport.py] [_log()] userauth is OK
2026-04-12T10:44:18.413 [DEBUG] [Thread-187709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:44:18.413 [DEBUG] [Thread-187709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:44:18.413 [DEBUG] [Thread-187709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:44:18.413 [DEBUG] [Thread-187709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:44:18.435 [INFO] [Thread-187709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:44:18.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:44:19.206 [DEBUG] [Thread-187709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:44:19.206 [DEBUG] [Thread-187709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:44:19.206 [DEBUG] [Thread-187709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:44:19.247 [DEBUG] [Thread-187709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:44:19.247 [DEBUG] [Thread-187709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:44:19.251 [DEBUG] [Thread-187709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:44:19.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:44:19.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:44:19.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:44:19.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:44:19.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:44:19.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:44:19.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:44:19.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:44:19.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:44:19.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.363651 -999.00  +12.30  15.37     90  +10.80 1 3 1 3 1   888    0 2.41 31.50 ----- 17.2 15.4 251.2 21.5 16.9 -6.5 16.3 -6.5 15.4 -4.8 16.1 -5.6
2026-04-12T10:44:19.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:44:19.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:44:19.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.363651
2026-04-12T10:44:19.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:44:19.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:44:19.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:44:19.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:44:19.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:44:19.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:43:57', tmtdew=0.045215, humidity=99.9937, cloud=0.0, wind=20.8037, temperature=11.8062, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:43:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:44:19.288 [DEBUG] [Thread-187709] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:44:19.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:44:19.382 [DEBUG] [Thread-187712] [transport.py] [_log()] starting thread (client mode): 0xb0fb5120
2026-04-12T10:44:19.382 [DEBUG] [Thread-187712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:44:19.396 [DEBUG] [Thread-187712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:44:19.396 [INFO] [Thread-187712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:19.404 [DEBUG] [Thread-187712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] client lang: <none>
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] server lang: <none>
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] kex follows: False
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:44:19.405 [DEBUG] [Thread-187712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:44:19.406 [DEBUG] [Thread-187712] [transport.py] [_log()] Compression: none
2026-04-12T10:44:19.406 [DEBUG] [Thread-187712] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:44:19.463 [DEBUG] [Thread-187712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:44:19.464 [DEBUG] [Thread-187712] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:44:19.465 [DEBUG] [Thread-187712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:44:19.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:44:19.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:44:19.523 [DEBUG] [Thread-187712] [transport.py] [_log()] userauth is OK
2026-04-12T10:44:19.523 [DEBUG] [Thread-187712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:44:19.524 [DEBUG] [Thread-187712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:44:19.524 [DEBUG] [Thread-187712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:44:19.525 [DEBUG] [Thread-187712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:44:19.543 [INFO] [Thread-187712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:44:19.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:44:19.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:44:20.396 [DEBUG] [Thread-187712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:44:20.396 [DEBUG] [Thread-187712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:44:20.444 [DEBUG] [Thread-187712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:44:20.444 [DEBUG] [Thread-187712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:44:20.454 [DEBUG] [Thread-187712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:44:20.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:44:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:44: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
2026-04-12T10:44:20.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:44:20.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:44:20.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:44:20.492 [DEBUG] [Thread-187712] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:44:28.971 [DEBUG] [Thread-187714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:44:29.382 [DEBUG] [Thread-187715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:44:44.445 [DEBUG] [Thread-187716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:44:50.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:44:50.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:44:50.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:44:51.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 44, 33), 0.00073, 99.9203, 0.0, 18.455, 12.5456, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:44:51.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:44:33
2026-04-12T10:44:52.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:44:52.507 [DEBUG] [Thread-187717] [transport.py] [_log()] starting thread (client mode): 0xb0fb79a0
2026-04-12T10:44:52.507 [DEBUG] [Thread-187717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:44:52.527 [DEBUG] [Thread-187717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:44:52.528 [INFO] [Thread-187717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] client lang: <none>
2026-04-12T10:44:52.531 [DEBUG] [Thread-187717] [transport.py] [_log()] server lang: <none>
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] kex follows: False
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] Compression: none
2026-04-12T10:44:52.532 [DEBUG] [Thread-187717] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:44:52.551 [DEBUG] [Thread-187717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:44:52.552 [DEBUG] [Thread-187717] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:44:52.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:44:52.553 [DEBUG] [Thread-187717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:44:52.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:44:52.556 [DEBUG] [Thread-187717] [transport.py] [_log()] userauth is OK
2026-04-12T10:44:52.556 [DEBUG] [Thread-187717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:44:52.556 [DEBUG] [Thread-187717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:44:52.556 [DEBUG] [Thread-187717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:44:52.556 [DEBUG] [Thread-187717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:44:52.580 [INFO] [Thread-187717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:44:52.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:44:53.375 [DEBUG] [Thread-187717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:44:53.375 [DEBUG] [Thread-187717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:44:53.376 [DEBUG] [Thread-187717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:44:53.416 [DEBUG] [Thread-187717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:44:53.416 [DEBUG] [Thread-187717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:44:53.420 [DEBUG] [Thread-187717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:44:53.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:44:53.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:44:53.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:44:53.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:44:53.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:44:53.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:44:53.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:44:53.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:44:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:44:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.363999 -999.00  +12.40  15.75     90  +10.90 1 3 1 3 1   888    0 2.47 34.12 ----- 16.0 15.8 254.6 19.5 16.9 -8.1 16.4 -5.0 15.5 -4.4 16.2 -4.6
2026-04-12T10:44:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:44:53.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:44:53.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.363999
2026-04-12T10:44:53.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:44:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:44:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:44:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:44:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:44:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:44:33', tmtdew=0.00073, humidity=99.9203, cloud=0.0, wind=18.455, temperature=12.5456, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:44:09.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:44:53.449 [DEBUG] [Thread-187717] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:44:53.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:44:53.543 [DEBUG] [Thread-187720] [transport.py] [_log()] starting thread (client mode): 0xb0f8d840
2026-04-12T10:44:53.543 [DEBUG] [Thread-187720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:44:53.558 [DEBUG] [Thread-187720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:44:53.558 [INFO] [Thread-187720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] client lang: <none>
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] server lang: <none>
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] kex follows: False
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:44:53.566 [DEBUG] [Thread-187720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:44:53.567 [DEBUG] [Thread-187720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:44:53.567 [DEBUG] [Thread-187720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:44:53.567 [DEBUG] [Thread-187720] [transport.py] [_log()] Compression: none
2026-04-12T10:44:53.567 [DEBUG] [Thread-187720] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:44:53.625 [DEBUG] [Thread-187720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:44:53.626 [DEBUG] [Thread-187720] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:44:53.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:44:53.627 [DEBUG] [Thread-187720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:44:53.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:44:53.681 [DEBUG] [Thread-187720] [transport.py] [_log()] userauth is OK
2026-04-12T10:44:53.682 [DEBUG] [Thread-187720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:44:53.682 [DEBUG] [Thread-187720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:44:53.682 [DEBUG] [Thread-187720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:44:53.682 [DEBUG] [Thread-187720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:44:53.701 [INFO] [Thread-187720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:44:53.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:44:53.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:44:54.557 [DEBUG] [Thread-187720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:44:54.557 [DEBUG] [Thread-187720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:44:54.605 [DEBUG] [Thread-187720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:44:54.605 [DEBUG] [Thread-187720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:44:54.616 [DEBUG] [Thread-187720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:44:54.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:44:54.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:44:54.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:44:54.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:44:54.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:44:54.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:44:54.653 [DEBUG] [Thread-187720] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:44:58.404 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:44:58.406 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:44:59.482 [DEBUG] [Thread-187722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:45:14.533 [DEBUG] [Thread-187723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:45:24.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:45:24.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:45:24.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:45:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 45, 8), -0.00474, 99.9933, 0.0, 16.8156, 11.7225, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:45:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:45:08
2026-04-12T10:45:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:45:26.534 [DEBUG] [Thread-187724] [transport.py] [_log()] starting thread (client mode): 0xa793a4d0
2026-04-12T10:45:26.535 [DEBUG] [Thread-187724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:45:26.554 [DEBUG] [Thread-187724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:45:26.554 [INFO] [Thread-187724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] client lang: <none>
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] server lang: <none>
2026-04-12T10:45:26.558 [DEBUG] [Thread-187724] [transport.py] [_log()] kex follows: False
2026-04-12T10:45:26.559 [DEBUG] [Thread-187724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:45:26.559 [DEBUG] [Thread-187724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:45:26.559 [DEBUG] [Thread-187724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:45:26.559 [DEBUG] [Thread-187724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:45:26.559 [DEBUG] [Thread-187724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:45:26.559 [DEBUG] [Thread-187724] [transport.py] [_log()] Compression: none
2026-04-12T10:45:26.559 [DEBUG] [Thread-187724] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:45:26.577 [DEBUG] [Thread-187724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:45:26.578 [DEBUG] [Thread-187724] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:45:26.579 [DEBUG] [Thread-187724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:45:26.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:45:26.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:45:26.581 [DEBUG] [Thread-187724] [transport.py] [_log()] userauth is OK
2026-04-12T10:45:26.581 [DEBUG] [Thread-187724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:45:26.582 [DEBUG] [Thread-187724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:45:26.582 [DEBUG] [Thread-187724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:45:26.582 [DEBUG] [Thread-187724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:45:26.603 [INFO] [Thread-187724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:45:26.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:45:28.933 [DEBUG] [Thread-187724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:45:28.933 [DEBUG] [Thread-187724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:45:28.933 [DEBUG] [Thread-187724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:45:28.973 [DEBUG] [Thread-187724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:45:28.974 [DEBUG] [Thread-187724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:45:28.976 [DEBUG] [Thread-187724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:45:29.003 [DEBUG] [Thread-187726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:45:29.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:45:29.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:45:29.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:45:29.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:45:29.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:45:29.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:45:29.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:45:29.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:45:29.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:45:29.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.364693 -999.00  +12.30  10.56     89  +10.70 1 3 1 3 1   888    0 2.40 30.87 ----- 10.3 10.6 253.0 15.3 17.1 -7.9 16.4 -5.8 15.6 -4.3 16.3 -5.9
2026-04-12T10:45:29.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:45:29.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:45:29.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.364693
2026-04-12T10:45:29.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:45:29.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:45:29.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:45:29.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:45:29.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:45:29.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:45:08', tmtdew=-0.00474, humidity=99.9933, cloud=0.0, wind=16.8156, temperature=11.7225, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:45:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:45:29.054 [DEBUG] [Thread-187724] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:45:29.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:45:29.147 [DEBUG] [Thread-187728] [transport.py] [_log()] starting thread (client mode): 0xae51a1a0
2026-04-12T10:45:29.147 [DEBUG] [Thread-187728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:45:29.163 [DEBUG] [Thread-187728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:45:29.163 [INFO] [Thread-187728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:45:29.170 [DEBUG] [Thread-187728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:45:29.170 [DEBUG] [Thread-187728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:45:29.170 [DEBUG] [Thread-187728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:45:29.170 [DEBUG] [Thread-187728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:45:29.170 [DEBUG] [Thread-187728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:45:29.170 [DEBUG] [Thread-187728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] client lang: <none>
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] server lang: <none>
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] kex follows: False
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] Compression: none
2026-04-12T10:45:29.171 [DEBUG] [Thread-187728] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:45:29.232 [DEBUG] [Thread-187728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:45:29.232 [DEBUG] [Thread-187728] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:45:29.233 [DEBUG] [Thread-187728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:45:29.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:45:29.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:45:29.288 [DEBUG] [Thread-187728] [transport.py] [_log()] userauth is OK
2026-04-12T10:45:29.288 [DEBUG] [Thread-187728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:45:29.288 [DEBUG] [Thread-187728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:45:29.289 [DEBUG] [Thread-187728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:45:29.289 [DEBUG] [Thread-187728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:45:29.308 [INFO] [Thread-187728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:45:29.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:45:29.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:45:29.575 [DEBUG] [Thread-187730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:45:30.165 [DEBUG] [Thread-187728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:45:30.166 [DEBUG] [Thread-187728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:45:30.217 [DEBUG] [Thread-187728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:45:30.217 [DEBUG] [Thread-187728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:45:30.229 [DEBUG] [Thread-187728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:45:30.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:45:30.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:45:30.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:45:30.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:45:30.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:45:30.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:45:30.268 [DEBUG] [Thread-187728] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:45:44.622 [DEBUG] [Thread-187731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:45:58.567 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:45:58.569 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:45:59.659 [DEBUG] [Thread-187732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:46:00.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:46:00.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:46:00.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:46:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 45, 44), 0.00578, 99.8872, 0.0, 14.6801, 12.5456, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:46:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:45:44
2026-04-12T10:46:01.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:46:02.059 [DEBUG] [Thread-187733] [transport.py] [_log()] starting thread (client mode): 0xa79c58a0
2026-04-12T10:46:02.059 [DEBUG] [Thread-187733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:46:02.079 [DEBUG] [Thread-187733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:46:02.079 [INFO] [Thread-187733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:46:02.082 [DEBUG] [Thread-187733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:46:02.082 [DEBUG] [Thread-187733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:46:02.082 [DEBUG] [Thread-187733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] client lang: <none>
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] server lang: <none>
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] kex follows: False
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] Compression: none
2026-04-12T10:46:02.083 [DEBUG] [Thread-187733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:46:02.101 [DEBUG] [Thread-187733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:46:02.102 [DEBUG] [Thread-187733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:46:02.102 [DEBUG] [Thread-187733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:46:02.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:46:02.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:46:02.145 [DEBUG] [Thread-187733] [transport.py] [_log()] userauth is OK
2026-04-12T10:46:02.145 [DEBUG] [Thread-187733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:46:02.145 [DEBUG] [Thread-187733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:46:02.145 [DEBUG] [Thread-187733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:46:02.145 [DEBUG] [Thread-187733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:46:02.166 [INFO] [Thread-187733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:46:02.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:46:02.895 [DEBUG] [Thread-187733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:46:02.895 [DEBUG] [Thread-187733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:46:02.896 [DEBUG] [Thread-187733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:46:02.936 [DEBUG] [Thread-187733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:46:02.936 [DEBUG] [Thread-187733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:46:02.939 [DEBUG] [Thread-187733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:46:02.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:46:02.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:46:02.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:46:02.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:46:02.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:46:02.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:46:02.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:46:02.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:46:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:46:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.365040 -999.00  +12.40  10.87     90  +10.80 1 3 1 3 1   888    0 2.36 28.51 ----- 10.8 10.9 265.0 15.3 17.1 -7.6 16.3 -5.5 15.6 -4.3 16.2 -5.9
2026-04-12T10:46:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:46:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:46:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.365040
2026-04-12T10:46:02.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:46:02.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:46:02.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:46:02.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:46:02.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:46:02.966 [DEBUG] [Thread-187733] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:46:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:45:44', tmtdew=0.00578, humidity=99.8872, cloud=0.0, wind=14.6801, temperature=12.5456, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:45:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:46:03.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:46:03.059 [DEBUG] [Thread-187736] [transport.py] [_log()] starting thread (client mode): 0xae5193f0
2026-04-12T10:46:03.059 [DEBUG] [Thread-187736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:46:03.073 [DEBUG] [Thread-187736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:46:03.073 [INFO] [Thread-187736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:46:03.080 [DEBUG] [Thread-187736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] client lang: <none>
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] server lang: <none>
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] kex follows: False
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] Compression: none
2026-04-12T10:46:03.081 [DEBUG] [Thread-187736] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:46:03.138 [DEBUG] [Thread-187736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:46:03.139 [DEBUG] [Thread-187736] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:46:03.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:46:03.140 [DEBUG] [Thread-187736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:46:03.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:46:03.195 [DEBUG] [Thread-187736] [transport.py] [_log()] userauth is OK
2026-04-12T10:46:03.195 [DEBUG] [Thread-187736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:46:03.195 [DEBUG] [Thread-187736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:46:03.195 [DEBUG] [Thread-187736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:46:03.196 [DEBUG] [Thread-187736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:46:03.214 [INFO] [Thread-187736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:46:03.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:46:03.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:46:04.068 [DEBUG] [Thread-187736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:46:04.068 [DEBUG] [Thread-187736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:46:04.116 [DEBUG] [Thread-187736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:46:04.116 [DEBUG] [Thread-187736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:46:04.126 [DEBUG] [Thread-187736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:46:04.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:46:04.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:46:04.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:46:04.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:46:04.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:46:04.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:46:04.164 [DEBUG] [Thread-187736] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:46:14.697 [DEBUG] [Thread-187738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:46:29.049 [DEBUG] [Thread-187739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:46:29.756 [DEBUG] [Thread-187740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:46:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:46:34.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:46:34.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:46:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 46, 19), 0.06056, 99.8935, 0.0, 13.4986, 11.8394, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:46:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:46:19
2026-04-12T10:46:35.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:46:35.993 [DEBUG] [Thread-187741] [transport.py] [_log()] starting thread (client mode): 0xb0f41540
2026-04-12T10:46:35.993 [DEBUG] [Thread-187741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:46:36.013 [DEBUG] [Thread-187741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:46:36.013 [INFO] [Thread-187741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] client lang: <none>
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] server lang: <none>
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] kex follows: False
2026-04-12T10:46:36.017 [DEBUG] [Thread-187741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:46:36.018 [DEBUG] [Thread-187741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:46:36.018 [DEBUG] [Thread-187741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:46:36.018 [DEBUG] [Thread-187741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:46:36.018 [DEBUG] [Thread-187741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:46:36.018 [DEBUG] [Thread-187741] [transport.py] [_log()] Compression: none
2026-04-12T10:46:36.018 [DEBUG] [Thread-187741] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:46:36.031 [DEBUG] [Thread-187741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:46:36.031 [DEBUG] [Thread-187741] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:46:36.032 [DEBUG] [Thread-187741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:46:36.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:46:36.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:46:36.034 [DEBUG] [Thread-187741] [transport.py] [_log()] userauth is OK
2026-04-12T10:46:36.034 [DEBUG] [Thread-187741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:46:36.034 [DEBUG] [Thread-187741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:46:36.034 [DEBUG] [Thread-187741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:46:36.035 [DEBUG] [Thread-187741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:46:36.055 [INFO] [Thread-187741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:46:36.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:46:36.661 [DEBUG] [Thread-187741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:46:36.662 [DEBUG] [Thread-187741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:46:36.662 [DEBUG] [Thread-187741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:46:36.703 [DEBUG] [Thread-187741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:46:36.703 [DEBUG] [Thread-187741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:46:36.706 [DEBUG] [Thread-187741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:46:36.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:46:36.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:46:36.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:46:36.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:46:36.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:46:36.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:46:36.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:46:36.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:46:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:46:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.365387 -999.00  +12.40  13.43     90  +10.90 1 3 1 3 1   888    0 2.32 29.01 ----- 15.1 13.4 259.6 16.7 17.0 -7.0 16.3 -5.5 15.6 -4.1 16.3 -5.1
2026-04-12T10:46:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:46:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:46:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.365387
2026-04-12T10:46:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:46:36.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:46:36.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:46:36.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:46:36.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:46:36.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:46:19', tmtdew=0.06056, humidity=99.8935, cloud=0.0, wind=13.4986, temperature=11.8394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:46:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:46:36.732 [DEBUG] [Thread-187741] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:46:36.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:46:36.825 [DEBUG] [Thread-187744] [transport.py] [_log()] starting thread (client mode): 0xb0fb43a0
2026-04-12T10:46:36.825 [DEBUG] [Thread-187744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:46:36.839 [DEBUG] [Thread-187744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:46:36.840 [INFO] [Thread-187744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:46:36.847 [DEBUG] [Thread-187744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] client lang: <none>
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] server lang: <none>
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] kex follows: False
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] Compression: none
2026-04-12T10:46:36.848 [DEBUG] [Thread-187744] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:46:36.906 [DEBUG] [Thread-187744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:46:36.907 [DEBUG] [Thread-187744] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:46:36.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:46:36.908 [DEBUG] [Thread-187744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:46:36.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:46:36.967 [DEBUG] [Thread-187744] [transport.py] [_log()] userauth is OK
2026-04-12T10:46:36.968 [DEBUG] [Thread-187744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:46:36.968 [DEBUG] [Thread-187744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:46:36.968 [DEBUG] [Thread-187744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:46:36.968 [DEBUG] [Thread-187744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:46:36.992 [INFO] [Thread-187744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:46:36.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:46:36.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:46:37.854 [DEBUG] [Thread-187744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:46:37.854 [DEBUG] [Thread-187744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:46:37.903 [DEBUG] [Thread-187744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:46:37.903 [DEBUG] [Thread-187744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:46:37.912 [DEBUG] [Thread-187744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:46:37.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:46:37.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:46:37.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:46:37.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:46:37.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:46:37.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:46:37.949 [DEBUG] [Thread-187744] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:46:44.796 [DEBUG] [Thread-187746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:46:58.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:46:58.725 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:46:59.860 [DEBUG] [Thread-187747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:47:07.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:47:07.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:47:07.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:47:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 46, 55), 0.053015, 99.943, 0.0, 14.787, 11.7392, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:47:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:46:55
2026-04-12T10:47:09.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:47:09.847 [DEBUG] [Thread-187748] [transport.py] [_log()] starting thread (client mode): 0xa79399c0
2026-04-12T10:47:09.847 [DEBUG] [Thread-187748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:47:09.865 [DEBUG] [Thread-187748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:47:09.865 [INFO] [Thread-187748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] client lang: <none>
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] server lang: <none>
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] kex follows: False
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] Compression: none
2026-04-12T10:47:09.868 [DEBUG] [Thread-187748] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:47:09.880 [DEBUG] [Thread-187748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:47:09.881 [DEBUG] [Thread-187748] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:47:09.881 [DEBUG] [Thread-187748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:47:09.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:47:09.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:47:09.883 [DEBUG] [Thread-187748] [transport.py] [_log()] userauth is OK
2026-04-12T10:47:09.883 [DEBUG] [Thread-187748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:47:09.884 [DEBUG] [Thread-187748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:47:09.884 [DEBUG] [Thread-187748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:47:09.884 [DEBUG] [Thread-187748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:47:09.904 [INFO] [Thread-187748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:47:09.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:47:10.507 [DEBUG] [Thread-187748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:47:10.507 [DEBUG] [Thread-187748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:47:10.508 [DEBUG] [Thread-187748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:47:10.549 [DEBUG] [Thread-187748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:47:10.549 [DEBUG] [Thread-187748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:47:10.552 [DEBUG] [Thread-187748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:47:10.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:47:10.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:47:10.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:47:10.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:47:10.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:47:10.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:47:10.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:47:10.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:47:10.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:47:10.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.365735 -999.00  +12.30  16.52     90  +10.80 1 3 1 3 1   888    0 2.34 28.89 ----- 14.1 16.5 254.4 17.3 16.9 -7.0 16.3 -5.1 15.5 -4.2 16.1 -5.3
2026-04-12T10:47:10.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:47:10.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:47:10.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.365735
2026-04-12T10:47:10.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:47:10.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:47:10.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:47:10.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:47:10.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:47:10.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:46:55', tmtdew=0.053015, humidity=99.943, cloud=0.0, wind=14.787, temperature=11.7392, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:46:39.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:47:10.569 [DEBUG] [Thread-187748] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:47:10.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:47:10.664 [DEBUG] [Thread-187751] [transport.py] [_log()] starting thread (client mode): 0xa7969c90
2026-04-12T10:47:10.664 [DEBUG] [Thread-187751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:47:10.678 [DEBUG] [Thread-187751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:47:10.678 [INFO] [Thread-187751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:47:10.685 [DEBUG] [Thread-187751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] client lang: <none>
2026-04-12T10:47:10.686 [DEBUG] [Thread-187751] [transport.py] [_log()] server lang: <none>
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] kex follows: False
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] Compression: none
2026-04-12T10:47:10.687 [DEBUG] [Thread-187751] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:47:10.744 [DEBUG] [Thread-187751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:47:10.745 [DEBUG] [Thread-187751] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:47:10.745 [DEBUG] [Thread-187751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:47:10.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:47:10.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:47:10.801 [DEBUG] [Thread-187751] [transport.py] [_log()] userauth is OK
2026-04-12T10:47:10.801 [DEBUG] [Thread-187751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:47:10.801 [DEBUG] [Thread-187751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:47:10.801 [DEBUG] [Thread-187751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:47:10.801 [DEBUG] [Thread-187751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:47:10.820 [INFO] [Thread-187751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:47:10.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:47:10.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:47:11.644 [DEBUG] [Thread-187751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:47:11.645 [DEBUG] [Thread-187751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:47:11.692 [DEBUG] [Thread-187751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:47:11.692 [DEBUG] [Thread-187751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:47:11.701 [DEBUG] [Thread-187751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:47:11.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:47:11.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:47:11.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:47:11.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:47:11.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:47:11.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:47:11.735 [DEBUG] [Thread-187751] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:47:14.897 [DEBUG] [Thread-187753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:47:29.087 [DEBUG] [Thread-187754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:47:29.950 [DEBUG] [Thread-187755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:47:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:47:41.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:47:41.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
2026-04-12T10:47:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 47, 30), 0.06311, 99.8767, 0.0, 13.8874, 11.7724, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:47:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:47:30
2026-04-12T10:47:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:47:43.545 [DEBUG] [Thread-187756] [transport.py] [_log()] starting thread (client mode): 0xae5e6a70
2026-04-12T10:47:43.545 [DEBUG] [Thread-187756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:47:43.565 [DEBUG] [Thread-187756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:47:43.566 [INFO] [Thread-187756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] client lang: <none>
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] server lang: <none>
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] kex follows: False
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] Compression: none
2026-04-12T10:47:43.567 [DEBUG] [Thread-187756] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:47:43.581 [DEBUG] [Thread-187756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:47:43.582 [DEBUG] [Thread-187756] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:47:43.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:47:43.583 [DEBUG] [Thread-187756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:47:43.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:47:43.585 [DEBUG] [Thread-187756] [transport.py] [_log()] userauth is OK
2026-04-12T10:47:43.585 [DEBUG] [Thread-187756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:47:43.585 [DEBUG] [Thread-187756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:47:43.585 [DEBUG] [Thread-187756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:47:43.585 [DEBUG] [Thread-187756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:47:43.610 [INFO] [Thread-187756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:47:43.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:47:44.203 [DEBUG] [Thread-187756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:47:44.204 [DEBUG] [Thread-187756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:47:44.205 [DEBUG] [Thread-187756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:47:44.244 [DEBUG] [Thread-187756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:47:44.244 [DEBUG] [Thread-187756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:47:44.248 [DEBUG] [Thread-187756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:47:44.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:47:44.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:47:44.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:47:44.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:47:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:47:44.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:47:44.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:47:44.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:47:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:47:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.366082 -999.00  +12.30  12.48     90  +10.70 1 3 1 3 1   888    0 2.34 28.80 ----- 10.8 12.5 262.6 15.0 16.9 -6.4 16.3 -4.7 15.5 -4.0 16.2 -4.5
2026-04-12T10:47:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:47:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:47:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.366082
2026-04-12T10:47:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:47:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:47:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:47:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:47:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:47:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:47:30', tmtdew=0.06311, humidity=99.8767, cloud=0.0, wind=13.8874, temperature=11.7724, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:47:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:47:44.267 [DEBUG] [Thread-187756] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:47:44.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:47:44.360 [DEBUG] [Thread-187759] [transport.py] [_log()] starting thread (client mode): 0xae5e7eb0
2026-04-12T10:47:44.361 [DEBUG] [Thread-187759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:47:44.375 [DEBUG] [Thread-187759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:47:44.375 [INFO] [Thread-187759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:47:44.383 [DEBUG] [Thread-187759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:47:44.383 [DEBUG] [Thread-187759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:47:44.383 [DEBUG] [Thread-187759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:47:44.383 [DEBUG] [Thread-187759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:44.383 [DEBUG] [Thread-187759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] client lang: <none>
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] server lang: <none>
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] kex follows: False
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:47:44.384 [DEBUG] [Thread-187759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:47:44.385 [DEBUG] [Thread-187759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:47:44.385 [DEBUG] [Thread-187759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:47:44.385 [DEBUG] [Thread-187759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:47:44.385 [DEBUG] [Thread-187759] [transport.py] [_log()] Compression: none
2026-04-12T10:47:44.385 [DEBUG] [Thread-187759] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:47:44.440 [DEBUG] [Thread-187759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:47:44.441 [DEBUG] [Thread-187759] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:47:44.442 [DEBUG] [Thread-187759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:47:44.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:47:44.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:47:44.500 [DEBUG] [Thread-187759] [transport.py] [_log()] userauth is OK
2026-04-12T10:47:44.501 [DEBUG] [Thread-187759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:47:44.501 [DEBUG] [Thread-187759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:47:44.501 [DEBUG] [Thread-187759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:47:44.501 [DEBUG] [Thread-187759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:47:44.520 [INFO] [Thread-187759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:47:44.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:47:44.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:47:44.984 [DEBUG] [Thread-187761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:47:45.401 [DEBUG] [Thread-187759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:47:45.401 [DEBUG] [Thread-187759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:47:45.450 [DEBUG] [Thread-187759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:47:45.450 [DEBUG] [Thread-187759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:47:45.460 [DEBUG] [Thread-187759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:47:45.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:47:45.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:47:45.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:47:45.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:47:45.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:47:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:47:45.500 [DEBUG] [Thread-187759] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:47:58.876 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:47:58.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:48:00.038 [DEBUG] [Thread-187762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:48:15.079 [DEBUG] [Thread-187763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:48:15.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:48:15.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:48:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:48:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 48, 5), 0.047885, 99.976, 0.0, 14.5753, 11.8552, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:48:16.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:48:05
2026-04-12T10:48:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:48:17.355 [DEBUG] [Thread-187764] [transport.py] [_log()] starting thread (client mode): 0xae5e6fb0
2026-04-12T10:48:17.355 [DEBUG] [Thread-187764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:48:17.376 [DEBUG] [Thread-187764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:48:17.376 [INFO] [Thread-187764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] client lang: <none>
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] server lang: <none>
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] kex follows: False
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] Compression: none
2026-04-12T10:48:17.379 [DEBUG] [Thread-187764] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:48:17.394 [DEBUG] [Thread-187764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:48:17.395 [DEBUG] [Thread-187764] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:48:17.395 [DEBUG] [Thread-187764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:48:17.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:48:17.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:48:17.397 [DEBUG] [Thread-187764] [transport.py] [_log()] userauth is OK
2026-04-12T10:48:17.397 [DEBUG] [Thread-187764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:48:17.397 [DEBUG] [Thread-187764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:48:17.398 [DEBUG] [Thread-187764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:48:17.398 [DEBUG] [Thread-187764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:48:17.420 [INFO] [Thread-187764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:48:17.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:48:18.026 [DEBUG] [Thread-187764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:48:18.026 [DEBUG] [Thread-187764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:48:18.027 [DEBUG] [Thread-187764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:48:18.066 [DEBUG] [Thread-187764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:48:18.067 [DEBUG] [Thread-187764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:48:18.069 [DEBUG] [Thread-187764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:48:18.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:48:18.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:48:18.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:48:18.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:48:18.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:48:18.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:48:18.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:48:18.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:48:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:48:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.366776 -999.00  +12.30  16.34     91  +10.90 1 3 1 3 1   888    0 2.29 26.97 ----- 16.6 16.3 269.8 18.3 16.6 -5.4 16.1 -4.7 15.3 -3.9 16.0 -5.0
2026-04-12T10:48:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:48:18.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:48:18.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.366776
2026-04-12T10:48:18.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:48:18.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:48:18.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:48:18.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:48:18.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:48:18.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:48:05', tmtdew=0.047885, humidity=99.976, cloud=0.0, wind=14.5753, temperature=11.8552, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:48:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:48:18.093 [DEBUG] [Thread-187764] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:48:18.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:48:18.186 [DEBUG] [Thread-187767] [transport.py] [_log()] starting thread (client mode): 0xb0f55540
2026-04-12T10:48:18.186 [DEBUG] [Thread-187767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:48:18.202 [DEBUG] [Thread-187767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:48:18.202 [INFO] [Thread-187767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] client lang: <none>
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] server lang: <none>
2026-04-12T10:48:18.210 [DEBUG] [Thread-187767] [transport.py] [_log()] kex follows: False
2026-04-12T10:48:18.211 [DEBUG] [Thread-187767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:48:18.211 [DEBUG] [Thread-187767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:48:18.211 [DEBUG] [Thread-187767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:48:18.211 [DEBUG] [Thread-187767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:48:18.211 [DEBUG] [Thread-187767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:48:18.211 [DEBUG] [Thread-187767] [transport.py] [_log()] Compression: none
2026-04-12T10:48:18.211 [DEBUG] [Thread-187767] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:48:18.268 [DEBUG] [Thread-187767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:48:18.268 [DEBUG] [Thread-187767] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:48:18.269 [DEBUG] [Thread-187767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:48:18.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:48:18.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:48:18.328 [DEBUG] [Thread-187767] [transport.py] [_log()] userauth is OK
2026-04-12T10:48:18.328 [DEBUG] [Thread-187767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:48:18.328 [DEBUG] [Thread-187767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:48:18.328 [DEBUG] [Thread-187767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:48:18.328 [DEBUG] [Thread-187767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:48:18.348 [INFO] [Thread-187767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:48:18.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:48:18.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:48:19.220 [DEBUG] [Thread-187767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:48:19.220 [DEBUG] [Thread-187767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:48:19.268 [DEBUG] [Thread-187767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:48:19.268 [DEBUG] [Thread-187767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:48:19.278 [DEBUG] [Thread-187767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:48:19.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:48:19.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:48:19.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:48:19.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:48:19.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:48:19.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:48:19.314 [DEBUG] [Thread-187767] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:48:29.138 [DEBUG] [Thread-187769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:48:30.117 [DEBUG] [Thread-187770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:48:45.169 [DEBUG] [Thread-187771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:48:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:48:49.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:48:49.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:48:50.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 48, 41), 0.00592, 99.8856, 0.0, 15.1034, 12.6772, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:48:50.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:48:41
2026-04-12T10:48:50.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:48:51.070 [DEBUG] [Thread-187772] [transport.py] [_log()] starting thread (client mode): 0xae560ac0
2026-04-12T10:48:51.070 [DEBUG] [Thread-187772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:48:51.089 [DEBUG] [Thread-187772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:48:51.089 [INFO] [Thread-187772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] client lang: <none>
2026-04-12T10:48:51.093 [DEBUG] [Thread-187772] [transport.py] [_log()] server lang: <none>
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] kex follows: False
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] Compression: none
2026-04-12T10:48:51.094 [DEBUG] [Thread-187772] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:48:51.112 [DEBUG] [Thread-187772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:48:51.113 [DEBUG] [Thread-187772] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:48:51.113 [DEBUG] [Thread-187772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:48:51.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:48:51.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:48:51.115 [DEBUG] [Thread-187772] [transport.py] [_log()] userauth is OK
2026-04-12T10:48:51.115 [DEBUG] [Thread-187772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:48:51.116 [DEBUG] [Thread-187772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:48:51.116 [DEBUG] [Thread-187772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:48:51.116 [DEBUG] [Thread-187772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:48:51.133 [INFO] [Thread-187772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:48:51.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:48:51.726 [DEBUG] [Thread-187772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:48:51.727 [DEBUG] [Thread-187772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:48:51.727 [DEBUG] [Thread-187772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:48:51.767 [DEBUG] [Thread-187772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:48:51.768 [DEBUG] [Thread-187772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:48:51.771 [DEBUG] [Thread-187772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:48:51.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:48:51.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:48:51.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:48:51.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:48:51.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:48:51.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:48:51.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:48:51.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:48:51.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:48:51.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.367124 -999.00  +12.30  14.52     91  +10.90 1 3 1 3 1   888    0 2.23 24.77 ----- 19.0 14.5 268.8 22.1 16.6 -5.5 16.0 -4.7 15.2 -4.8 16.0 -4.6
2026-04-12T10:48:51.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:48:51.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:48:51.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.367124
2026-04-12T10:48:51.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:48:51.791 [DEBUG] [Thread-187772] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:48:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:48:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:48:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:48:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:48:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:48:41', tmtdew=0.00592, humidity=99.8856, cloud=0.0, wind=15.1034, temperature=12.6772, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:48:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:48:51.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:48:51.884 [DEBUG] [Thread-187775] [transport.py] [_log()] starting thread (client mode): 0xa7939ea0
2026-04-12T10:48:51.884 [DEBUG] [Thread-187775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:48:51.899 [DEBUG] [Thread-187775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:48:51.899 [INFO] [Thread-187775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] client lang: <none>
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] server lang: <none>
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] kex follows: False
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:48:51.907 [DEBUG] [Thread-187775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:48:51.908 [DEBUG] [Thread-187775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:48:51.908 [DEBUG] [Thread-187775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:48:51.908 [DEBUG] [Thread-187775] [transport.py] [_log()] Compression: none
2026-04-12T10:48:51.908 [DEBUG] [Thread-187775] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:48:51.966 [DEBUG] [Thread-187775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:48:51.967 [DEBUG] [Thread-187775] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:48:51.968 [DEBUG] [Thread-187775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:48:51.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:48:51.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:48:52.022 [DEBUG] [Thread-187775] [transport.py] [_log()] userauth is OK
2026-04-12T10:48:52.022 [DEBUG] [Thread-187775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:48:52.022 [DEBUG] [Thread-187775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:48:52.022 [DEBUG] [Thread-187775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:48:52.022 [DEBUG] [Thread-187775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:48:52.041 [INFO] [Thread-187775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:48:52.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:48:52.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:48:52.875 [DEBUG] [Thread-187775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:48:52.875 [DEBUG] [Thread-187775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:48:52.924 [DEBUG] [Thread-187775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:48:52.925 [DEBUG] [Thread-187775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:48:52.934 [DEBUG] [Thread-187775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:48:52.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:48:52.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:48:52.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:48:52.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:48:52.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:48:52.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:48:52.971 [DEBUG] [Thread-187775] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:48:59.025 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:48:59.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:00.205 [DEBUG] [Thread-187777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:15.266 [DEBUG] [Thread-187778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:22.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:49:22.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:49:22.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:49:24.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 49, 16), 0.010565, 99.8929, 0.0, 18.1386, 11.9217, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:49:24.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:49:16
2026-04-12T10:49:24.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:49:24.776 [DEBUG] [Thread-187779] [transport.py] [_log()] starting thread (client mode): 0xae51a980
2026-04-12T10:49:24.776 [DEBUG] [Thread-187779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:49:24.796 [DEBUG] [Thread-187779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:49:24.796 [INFO] [Thread-187779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] client lang: <none>
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] server lang: <none>
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] kex follows: False
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:49:24.798 [DEBUG] [Thread-187779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:49:24.799 [DEBUG] [Thread-187779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:49:24.799 [DEBUG] [Thread-187779] [transport.py] [_log()] Compression: none
2026-04-12T10:49:24.799 [DEBUG] [Thread-187779] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:49:24.812 [DEBUG] [Thread-187779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:49:24.812 [DEBUG] [Thread-187779] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:49:24.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:49:24.814 [DEBUG] [Thread-187779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:49:24.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:49:24.816 [DEBUG] [Thread-187779] [transport.py] [_log()] userauth is OK
2026-04-12T10:49:24.816 [DEBUG] [Thread-187779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:49:24.816 [DEBUG] [Thread-187779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:49:24.817 [DEBUG] [Thread-187779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:49:24.817 [DEBUG] [Thread-187779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:49:24.834 [INFO] [Thread-187779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:49:24.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:49:25.447 [DEBUG] [Thread-187779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:49:25.448 [DEBUG] [Thread-187779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:49:25.448 [DEBUG] [Thread-187779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:49:25.489 [DEBUG] [Thread-187779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:49:25.489 [DEBUG] [Thread-187779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:49:25.491 [DEBUG] [Thread-187779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:49:25.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:49:25.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:49:25.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:49:25.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:49:25.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:49:25.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:49:25.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:49:25.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:49:25.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:49:25.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.367471 -999.00  +12.30  15.57     90  +10.80 1 3 1 3 1   888    0 2.19 23.04 ----- 17.6 15.6 264.2 20.6 16.6 -5.9 16.0 -4.5 15.2 -5.1 15.9 -4.9
2026-04-12T10:49:25.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:49:25.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:49:25.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.367471
2026-04-12T10:49:25.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:49:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:49:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:49:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:49:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:49:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:49:16', tmtdew=0.010565, humidity=99.8929, cloud=0.0, wind=18.1386, temperature=11.9217, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:49:09.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:49:25.518 [DEBUG] [Thread-187779] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:49:25.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:49:25.611 [DEBUG] [Thread-187782] [transport.py] [_log()] starting thread (client mode): 0xb0f564d0
2026-04-12T10:49:25.611 [DEBUG] [Thread-187782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:49:25.628 [DEBUG] [Thread-187782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:49:25.628 [INFO] [Thread-187782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:49:25.636 [DEBUG] [Thread-187782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:49:25.637 [DEBUG] [Thread-187782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] client lang: <none>
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] server lang: <none>
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] kex follows: False
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:49:25.638 [DEBUG] [Thread-187782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:49:25.639 [DEBUG] [Thread-187782] [transport.py] [_log()] Compression: none
2026-04-12T10:49:25.639 [DEBUG] [Thread-187782] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:49:25.694 [DEBUG] [Thread-187782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:49:25.694 [DEBUG] [Thread-187782] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:49:25.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:49:25.695 [DEBUG] [Thread-187782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:49:25.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:49:25.749 [DEBUG] [Thread-187782] [transport.py] [_log()] userauth is OK
2026-04-12T10:49:25.750 [DEBUG] [Thread-187782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:49:25.750 [DEBUG] [Thread-187782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:49:25.750 [DEBUG] [Thread-187782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:49:25.750 [DEBUG] [Thread-187782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:49:25.769 [INFO] [Thread-187782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:49:25.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:49:25.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:49:26.628 [DEBUG] [Thread-187782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:49:26.628 [DEBUG] [Thread-187782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:49:26.675 [DEBUG] [Thread-187782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:49:26.676 [DEBUG] [Thread-187782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:49:26.685 [DEBUG] [Thread-187782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:49:26.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:49:26.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:49:26.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:49:26.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:49:26.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:49:26.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:49:26.719 [DEBUG] [Thread-187782] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:49:29.183 [DEBUG] [Thread-187784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:30.304 [DEBUG] [Thread-187785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:45.357 [DEBUG] [Thread-187786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:49:56.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:49:56.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:49:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 49, 16), 0.010565, 99.8929, 0.0, 18.1386, 11.9217, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:49:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:49:16
2026-04-12T10:49:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:49:58.582 [DEBUG] [Thread-187787] [transport.py] [_log()] starting thread (client mode): 0xb0f56bc0
2026-04-12T10:49:58.582 [DEBUG] [Thread-187787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:49:58.601 [DEBUG] [Thread-187787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:49:58.601 [INFO] [Thread-187787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] client lang: <none>
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] server lang: <none>
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] kex follows: False
2026-04-12T10:49:58.603 [DEBUG] [Thread-187787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:49:58.604 [DEBUG] [Thread-187787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:49:58.604 [DEBUG] [Thread-187787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:49:58.604 [DEBUG] [Thread-187787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:49:58.604 [DEBUG] [Thread-187787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:49:58.604 [DEBUG] [Thread-187787] [transport.py] [_log()] Compression: none
2026-04-12T10:49:58.604 [DEBUG] [Thread-187787] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:49:58.619 [DEBUG] [Thread-187787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:49:58.619 [DEBUG] [Thread-187787] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:49:58.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:49:58.620 [DEBUG] [Thread-187787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:49:58.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:49:58.622 [DEBUG] [Thread-187787] [transport.py] [_log()] userauth is OK
2026-04-12T10:49:58.623 [DEBUG] [Thread-187787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:49:58.623 [DEBUG] [Thread-187787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:49:58.623 [DEBUG] [Thread-187787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:49:58.623 [DEBUG] [Thread-187787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:49:58.647 [INFO] [Thread-187787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:49:58.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:49:59.196 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:59.197 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:49:59.265 [DEBUG] [Thread-187787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:49:59.265 [DEBUG] [Thread-187787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:49:59.266 [DEBUG] [Thread-187787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:49:59.306 [DEBUG] [Thread-187787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:49:59.306 [DEBUG] [Thread-187787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:49:59.310 [DEBUG] [Thread-187787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:49:59.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:49:59.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:49:59.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:49:59.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:49:59.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:49:59.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:49:59.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:49:59.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:49:59.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:49:59.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.367818 -999.00  +12.30  16.38     90  +10.80 1 3 1 3 1   888    0 2.08 20.47 ----- 16.9 16.4 266.6 18.5 16.4 -5.6 16.0 -4.5 15.2 -5.5 15.9 -4.5
2026-04-12T10:49:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:49:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:49:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.367818
2026-04-12T10:49:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:49:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:49:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:49:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:49:59.337 [DEBUG] [Thread-187787] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:49:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:49:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:49:16', tmtdew=0.010565, humidity=99.8929, cloud=0.0, wind=18.1386, temperature=11.9217, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:49:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:49:59.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:49:59.441 [DEBUG] [Thread-187790] [transport.py] [_log()] starting thread (client mode): 0xb0f43010
2026-04-12T10:49:59.441 [DEBUG] [Thread-187790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:49:59.455 [DEBUG] [Thread-187790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:49:59.456 [INFO] [Thread-187790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:49:59.464 [DEBUG] [Thread-187790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:49:59.464 [DEBUG] [Thread-187790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:49:59.464 [DEBUG] [Thread-187790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:49:59.464 [DEBUG] [Thread-187790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:59.464 [DEBUG] [Thread-187790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:49:59.464 [DEBUG] [Thread-187790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:59.464 [DEBUG] [Thread-187790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] client lang: <none>
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] server lang: <none>
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] kex follows: False
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] Compression: none
2026-04-12T10:49:59.465 [DEBUG] [Thread-187790] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:49:59.521 [DEBUG] [Thread-187790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:49:59.522 [DEBUG] [Thread-187790] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:49:59.522 [DEBUG] [Thread-187790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:49:59.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:49:59.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:49:59.577 [DEBUG] [Thread-187790] [transport.py] [_log()] userauth is OK
2026-04-12T10:49:59.578 [DEBUG] [Thread-187790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:49:59.578 [DEBUG] [Thread-187790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:49:59.578 [DEBUG] [Thread-187790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:49:59.578 [DEBUG] [Thread-187790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:49:59.597 [INFO] [Thread-187790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:49:59.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:49:59.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:50:00.406 [DEBUG] [Thread-187792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:50:00.502 [DEBUG] [Thread-187790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:50:00.502 [DEBUG] [Thread-187790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:50:00.550 [DEBUG] [Thread-187790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:50:00.550 [DEBUG] [Thread-187790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:50:00.559 [DEBUG] [Thread-187790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:50:00.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:50:00.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:50:00.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:50:00.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:50:00.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:50:00.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:50:00.595 [DEBUG] [Thread-187790] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:50:15.446 [DEBUG] [Thread-187793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:50:29.216 [DEBUG] [Thread-187794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:50:30.482 [DEBUG] [Thread-187795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:50:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:50:30.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:50:30.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:50:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 49, 52), 0.0365, 99.6863, 0.0, 19.9721, 12.478, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:50:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:49:52
2026-04-12T10:50:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:50:32.536 [DEBUG] [Thread-187796] [transport.py] [_log()] starting thread (client mode): 0xae5e6230
2026-04-12T10:50:32.536 [DEBUG] [Thread-187796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:50:32.556 [DEBUG] [Thread-187796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:50:32.556 [INFO] [Thread-187796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:50:32.559 [DEBUG] [Thread-187796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:50:32.559 [DEBUG] [Thread-187796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:50:32.559 [DEBUG] [Thread-187796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:50:32.559 [DEBUG] [Thread-187796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:50:32.559 [DEBUG] [Thread-187796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] client lang: <none>
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] server lang: <none>
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] kex follows: False
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] Compression: none
2026-04-12T10:50:32.560 [DEBUG] [Thread-187796] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:50:32.580 [DEBUG] [Thread-187796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:50:32.580 [DEBUG] [Thread-187796] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:50:32.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:50:32.581 [DEBUG] [Thread-187796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:50:32.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:50:32.583 [DEBUG] [Thread-187796] [transport.py] [_log()] userauth is OK
2026-04-12T10:50:32.583 [DEBUG] [Thread-187796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:50:32.583 [DEBUG] [Thread-187796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:50:32.584 [DEBUG] [Thread-187796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:50:32.584 [DEBUG] [Thread-187796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:50:32.608 [INFO] [Thread-187796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:50:32.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:50:33.242 [DEBUG] [Thread-187796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:50:33.242 [DEBUG] [Thread-187796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:50:33.243 [DEBUG] [Thread-187796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:50:33.284 [DEBUG] [Thread-187796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:50:33.284 [DEBUG] [Thread-187796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:50:33.287 [DEBUG] [Thread-187796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:50:33.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:50:33.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:50:33.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:50:33.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:50:33.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:50:33.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:50:33.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:50:33.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:50:33.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:50:33.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.368165 -999.00  +12.30  15.95     90  +10.80 1 3 1 3 1   888    0 2.01 18.13 ----- 11.3 15.9 267.2 20.2 16.5 -5.7 16.0 -4.6 15.2 -4.2 15.9 -5.6
2026-04-12T10:50:33.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:50:33.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:50:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.368165
2026-04-12T10:50:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:50:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:50:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:50:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:50:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:50:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:49:52', tmtdew=0.0365, humidity=99.6863, cloud=0.0, wind=19.9721, temperature=12.478, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:50:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:50:33.313 [DEBUG] [Thread-187796] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:50:33.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:50:33.408 [DEBUG] [Thread-187799] [transport.py] [_log()] starting thread (client mode): 0xb0f42fe0
2026-04-12T10:50:33.408 [DEBUG] [Thread-187799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:50:33.423 [DEBUG] [Thread-187799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:50:33.423 [INFO] [Thread-187799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:50:33.434 [DEBUG] [Thread-187799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:50:33.435 [DEBUG] [Thread-187799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:50:33.435 [DEBUG] [Thread-187799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:50:33.435 [DEBUG] [Thread-187799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:50:33.435 [DEBUG] [Thread-187799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:50:33.435 [DEBUG] [Thread-187799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:50:33.435 [DEBUG] [Thread-187799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:50:33.435 [DEBUG] [Thread-187799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] client lang: <none>
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] server lang: <none>
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] kex follows: False
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] Compression: none
2026-04-12T10:50:33.436 [DEBUG] [Thread-187799] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:50:33.490 [DEBUG] [Thread-187799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:50:33.491 [DEBUG] [Thread-187799] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:50:33.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:50:33.491 [DEBUG] [Thread-187799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:50:33.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:50:33.547 [DEBUG] [Thread-187799] [transport.py] [_log()] userauth is OK
2026-04-12T10:50:33.547 [DEBUG] [Thread-187799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:50:33.547 [DEBUG] [Thread-187799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:50:33.548 [DEBUG] [Thread-187799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:50:33.548 [DEBUG] [Thread-187799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:50:33.565 [INFO] [Thread-187799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:50:33.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:50:33.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:50:34.457 [DEBUG] [Thread-187799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:50:34.457 [DEBUG] [Thread-187799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:50:34.532 [DEBUG] [Thread-187799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:50:34.532 [DEBUG] [Thread-187799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:50:34.556 [DEBUG] [Thread-187799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:50:34.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:50:34.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:50:34.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:50:34.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:50:34.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:50:34.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:50:34.683 [DEBUG] [Thread-187799] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:50:45.519 [DEBUG] [Thread-187801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:50:59.351 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:50:59.352 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:51:00.577 [DEBUG] [Thread-187802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:51:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:51:04.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:51:04.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:51:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 50, 27), 0.018275, 99.843, 0.0, 16.4275, 11.7389, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:51:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:50:27
2026-04-12T10:51:06.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:51:06.491 [DEBUG] [Thread-187803] [transport.py] [_log()] starting thread (client mode): 0xae519240
2026-04-12T10:51:06.491 [DEBUG] [Thread-187803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:51:06.511 [DEBUG] [Thread-187803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:51:06.511 [INFO] [Thread-187803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:51:06.514 [DEBUG] [Thread-187803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] client lang: <none>
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] server lang: <none>
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] kex follows: False
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:51:06.515 [DEBUG] [Thread-187803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:51:06.516 [DEBUG] [Thread-187803] [transport.py] [_log()] Compression: none
2026-04-12T10:51:06.516 [DEBUG] [Thread-187803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:51:06.533 [DEBUG] [Thread-187803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:51:06.533 [DEBUG] [Thread-187803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:51:06.534 [DEBUG] [Thread-187803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:51:06.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:51:06.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:51:06.577 [DEBUG] [Thread-187803] [transport.py] [_log()] userauth is OK
2026-04-12T10:51:06.577 [DEBUG] [Thread-187803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:51:06.577 [DEBUG] [Thread-187803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:51:06.578 [DEBUG] [Thread-187803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:51:06.578 [DEBUG] [Thread-187803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:51:06.609 [INFO] [Thread-187803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:51:06.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:51:07.213 [DEBUG] [Thread-187803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:51:07.213 [DEBUG] [Thread-187803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:51:07.213 [DEBUG] [Thread-187803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:51:07.254 [DEBUG] [Thread-187803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:51:07.254 [DEBUG] [Thread-187803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:51:07.257 [DEBUG] [Thread-187803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:51:07.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:51:07.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:51:07.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:51:07.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:51:07.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:51:07.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:51:07.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:51:07.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:51:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:51:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.368512 -999.00  +12.30  12.54     90  +10.80 1 3 1 3 1   888    0 2.03 17.51 ----- 10.8 12.5 254.6 16.9 16.4 -5.8 16.0 -4.7 15.2 -4.8 15.9 -5.6
2026-04-12T10:51:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:51:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:51:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.368512
2026-04-12T10:51:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:51:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:51:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:51:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:51:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:51:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:50:27', tmtdew=0.018275, humidity=99.843, cloud=0.0, wind=16.4275, temperature=11.7389, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:50:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:51:07.282 [DEBUG] [Thread-187803] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:51:07.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:51:07.375 [DEBUG] [Thread-187806] [transport.py] [_log()] starting thread (client mode): 0xae519ed0
2026-04-12T10:51:07.375 [DEBUG] [Thread-187806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:51:07.391 [DEBUG] [Thread-187806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:51:07.391 [INFO] [Thread-187806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:51:07.398 [DEBUG] [Thread-187806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:51:07.398 [DEBUG] [Thread-187806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:51:07.398 [DEBUG] [Thread-187806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:51:07.398 [DEBUG] [Thread-187806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] client lang: <none>
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] server lang: <none>
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] kex follows: False
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] Compression: none
2026-04-12T10:51:07.399 [DEBUG] [Thread-187806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:51:07.459 [DEBUG] [Thread-187806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:51:07.460 [DEBUG] [Thread-187806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:51:07.460 [DEBUG] [Thread-187806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:51:07.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:51:07.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:51:07.518 [DEBUG] [Thread-187806] [transport.py] [_log()] userauth is OK
2026-04-12T10:51:07.518 [DEBUG] [Thread-187806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:51:07.518 [DEBUG] [Thread-187806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:51:07.518 [DEBUG] [Thread-187806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:51:07.519 [DEBUG] [Thread-187806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:51:07.540 [INFO] [Thread-187806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:51:07.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:51:07.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:51:08.414 [DEBUG] [Thread-187806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:51:08.414 [DEBUG] [Thread-187806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:51:08.464 [DEBUG] [Thread-187806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:51:08.464 [DEBUG] [Thread-187806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:51:08.478 [DEBUG] [Thread-187806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:51:08.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:51:08.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:51: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') -> 00000000
2026-04-12T10:51:08.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:51:08.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:51:08.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:51:08.538 [DEBUG] [Thread-187806] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:51:15.617 [DEBUG] [Thread-187808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:51:29.271 [DEBUG] [Thread-187809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:51:30.671 [DEBUG] [Thread-187810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:51:38.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:51:38.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:51:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:51:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 51, 3), 0.028455, 99.7767, 0.0, 16.9391, 11.6394, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:51:39.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:51:03
2026-04-12T10:51:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:51:40.439 [DEBUG] [Thread-187811] [transport.py] [_log()] starting thread (client mode): 0xae5e6290
2026-04-12T10:51:40.439 [DEBUG] [Thread-187811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:51:40.459 [DEBUG] [Thread-187811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:51:40.459 [INFO] [Thread-187811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:40.462 [DEBUG] [Thread-187811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] client lang: <none>
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] server lang: <none>
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] kex follows: False
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] Compression: none
2026-04-12T10:51:40.463 [DEBUG] [Thread-187811] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:51:40.481 [DEBUG] [Thread-187811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:51:40.481 [DEBUG] [Thread-187811] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:51:40.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:51:40.482 [DEBUG] [Thread-187811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:51:40.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:51:40.525 [DEBUG] [Thread-187811] [transport.py] [_log()] userauth is OK
2026-04-12T10:51:40.525 [DEBUG] [Thread-187811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:51:40.526 [DEBUG] [Thread-187811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:51:40.526 [DEBUG] [Thread-187811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:51:40.526 [DEBUG] [Thread-187811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:51:40.553 [INFO] [Thread-187811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:51:40.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:51:41.184 [DEBUG] [Thread-187811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:51:41.184 [DEBUG] [Thread-187811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:51:41.184 [DEBUG] [Thread-187811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:51:41.225 [DEBUG] [Thread-187811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:51:41.225 [DEBUG] [Thread-187811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:51:41.229 [DEBUG] [Thread-187811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:51:41.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:51:41.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:51:41.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:51:41.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:51:41.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:51:41.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:51:41.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:51:41.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:51:41.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:51:41.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.368860 -999.00  +12.30  16.38     90  +10.80 1 3 1 3 1   888    0 2.01 17.20 ----- 12.8 16.4 267.4 19.2 16.5 -5.8 16.0 -4.9 15.3 -4.4 15.9 -5.5
2026-04-12T10:51:41.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:51:41.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:51:41.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.368860
2026-04-12T10:51:41.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:51:41.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:51:41.257 [DEBUG] [Thread-187811] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:51:41.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:51:41.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:51:41.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:51:41.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:51:03', tmtdew=0.028455, humidity=99.7767, cloud=0.0, wind=16.9391, temperature=11.6394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:51:09.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:51:41.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:51:41.351 [DEBUG] [Thread-187814] [transport.py] [_log()] starting thread (client mode): 0xae563c70
2026-04-12T10:51:41.351 [DEBUG] [Thread-187814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:51:41.365 [DEBUG] [Thread-187814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:51:41.366 [INFO] [Thread-187814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:51:41.375 [DEBUG] [Thread-187814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:51:41.375 [DEBUG] [Thread-187814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:51:41.375 [DEBUG] [Thread-187814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] client lang: <none>
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] server lang: <none>
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] kex follows: False
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] Compression: none
2026-04-12T10:51:41.376 [DEBUG] [Thread-187814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:51:41.430 [DEBUG] [Thread-187814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:51:41.431 [DEBUG] [Thread-187814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:51:41.432 [DEBUG] [Thread-187814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:51:41.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:51:41.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:51:41.486 [DEBUG] [Thread-187814] [transport.py] [_log()] userauth is OK
2026-04-12T10:51:41.487 [DEBUG] [Thread-187814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:51:41.487 [DEBUG] [Thread-187814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:51:41.487 [DEBUG] [Thread-187814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:51:41.487 [DEBUG] [Thread-187814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:51:41.506 [INFO] [Thread-187814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:51:41.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:51:41.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:51:42.330 [DEBUG] [Thread-187814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:51:42.330 [DEBUG] [Thread-187814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:51:42.377 [DEBUG] [Thread-187814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:51:42.377 [DEBUG] [Thread-187814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:51:42.386 [DEBUG] [Thread-187814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:51:42.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:51: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')
2026-04-12T10:51: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
2026-04-12T10:51:42.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:51:42.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:51:42.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:51:42.418 [DEBUG] [Thread-187814] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:51:45.707 [DEBUG] [Thread-187816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:51:59.506 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:51:59.507 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:52:00.758 [DEBUG] [Thread-187817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:52:12.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:52:12.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:52:12.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
2026-04-12T10:52:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 51, 38), 0.06206, 99.52, 0.0, 17.9258, 12.1461, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:52:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:51:38
2026-04-12T10:52:14.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:52:14.224 [DEBUG] [Thread-187818] [transport.py] [_log()] starting thread (client mode): 0xae5e5090
2026-04-12T10:52:14.224 [DEBUG] [Thread-187818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:52:14.245 [DEBUG] [Thread-187818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:52:14.245 [INFO] [Thread-187818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:52:14.248 [DEBUG] [Thread-187818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:52:14.248 [DEBUG] [Thread-187818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] client lang: <none>
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] server lang: <none>
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] kex follows: False
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:52:14.249 [DEBUG] [Thread-187818] [transport.py] [_log()] Compression: none
2026-04-12T10:52:14.250 [DEBUG] [Thread-187818] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:52:14.268 [DEBUG] [Thread-187818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:52:14.268 [DEBUG] [Thread-187818] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:52:14.269 [DEBUG] [Thread-187818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:52:14.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:52:14.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:52:14.271 [DEBUG] [Thread-187818] [transport.py] [_log()] userauth is OK
2026-04-12T10:52:14.271 [DEBUG] [Thread-187818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:52:14.271 [DEBUG] [Thread-187818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:52:14.271 [DEBUG] [Thread-187818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:52:14.271 [DEBUG] [Thread-187818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:52:14.296 [INFO] [Thread-187818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:52:14.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:52:14.917 [DEBUG] [Thread-187818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:52:14.917 [DEBUG] [Thread-187818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:52:14.918 [DEBUG] [Thread-187818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:52:14.958 [DEBUG] [Thread-187818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:52:14.959 [DEBUG] [Thread-187818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:52:14.962 [DEBUG] [Thread-187818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:52:14.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:52:14.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:52:14.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:52:14.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:52:14.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:52:14.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:52:14.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:52:14.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:52:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:52:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.369207 -999.00  +12.30  12.19     90  +10.80 1 3 1 3 1   888    0 1.98 15.86 ----- 11.6 12.2 275.4 15.6 16.5 -6.6 16.0 -5.1 15.1 -5.6 15.9 -4.8
2026-04-12T10:52:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:52:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:52:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.369207
2026-04-12T10:52:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:52:14.989 [DEBUG] [Thread-187818] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:52:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:52:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:52:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:52:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:52:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:51:38', tmtdew=0.06206, humidity=99.52, cloud=0.0, wind=17.9258, temperature=12.1461, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:51:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:52:15.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:52:15.082 [DEBUG] [Thread-187821] [transport.py] [_log()] starting thread (client mode): 0xae5e6f20
2026-04-12T10:52:15.082 [DEBUG] [Thread-187821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:52:15.097 [DEBUG] [Thread-187821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:52:15.097 [INFO] [Thread-187821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:52:15.104 [DEBUG] [Thread-187821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:52:15.104 [DEBUG] [Thread-187821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] client lang: <none>
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] server lang: <none>
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] kex follows: False
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] Compression: none
2026-04-12T10:52:15.105 [DEBUG] [Thread-187821] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:52:15.161 [DEBUG] [Thread-187821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:52:15.162 [DEBUG] [Thread-187821] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:52:15.162 [DEBUG] [Thread-187821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:52:15.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:52:15.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:52:15.217 [DEBUG] [Thread-187821] [transport.py] [_log()] userauth is OK
2026-04-12T10:52:15.217 [DEBUG] [Thread-187821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:52:15.218 [DEBUG] [Thread-187821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:52:15.218 [DEBUG] [Thread-187821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:52:15.218 [DEBUG] [Thread-187821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:52:15.237 [INFO] [Thread-187821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:52:15.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:52:15.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:52:15.797 [DEBUG] [Thread-187823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:52:16.082 [DEBUG] [Thread-187821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:52:16.082 [DEBUG] [Thread-187821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:52:16.130 [DEBUG] [Thread-187821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:52:16.130 [DEBUG] [Thread-187821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:52:16.140 [DEBUG] [Thread-187821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:52:16.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:52:16.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:52:16.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:52:16.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:52:16.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:52:16.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:52:16.184 [DEBUG] [Thread-187821] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:52:29.320 [DEBUG] [Thread-187824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:52:30.856 [DEBUG] [Thread-187825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:52:45.892 [DEBUG] [Thread-187826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:52:46.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:52:46.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:52:46.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:52:47.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 52, 14), 0.07341, 99.8097, 0.0, 15.2633, 11.5894, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:52:47.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:52:14
2026-04-12T10:52:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:52:48.000 [DEBUG] [Thread-187827] [transport.py] [_log()] starting thread (client mode): 0xa7969090
2026-04-12T10:52:48.000 [DEBUG] [Thread-187827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:52:48.020 [DEBUG] [Thread-187827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:52:48.020 [INFO] [Thread-187827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] client lang: <none>
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] server lang: <none>
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] kex follows: False
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] Compression: none
2026-04-12T10:52:48.024 [DEBUG] [Thread-187827] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:52:48.039 [DEBUG] [Thread-187827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:52:48.040 [DEBUG] [Thread-187827] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:52:48.040 [DEBUG] [Thread-187827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:52:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:52:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:52:48.042 [DEBUG] [Thread-187827] [transport.py] [_log()] userauth is OK
2026-04-12T10:52:48.043 [DEBUG] [Thread-187827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:52:48.043 [DEBUG] [Thread-187827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:52:48.043 [DEBUG] [Thread-187827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:52:48.043 [DEBUG] [Thread-187827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:52:48.061 [INFO] [Thread-187827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:52:48.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:52:48.631 [DEBUG] [Thread-187827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:52:48.631 [DEBUG] [Thread-187827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:52:48.631 [DEBUG] [Thread-187827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:52:48.672 [DEBUG] [Thread-187827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:52:48.672 [DEBUG] [Thread-187827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:52:48.676 [DEBUG] [Thread-187827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:52:48.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:52:48.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:52:48.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:52:48.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:52:48.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:52:48.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:52:48.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:52:48.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:52:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:52:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.369554 -999.00  +12.40  10.32     90  +10.90 1 3 1 3 1   888    0 1.96 14.96 ----- 11.1 10.3 282.6 18.4 16.4 -5.7 16.0 -5.1 15.3 -4.4 15.9 -5.0
2026-04-12T10:52:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:52:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:52:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.369554
2026-04-12T10:52:48.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:52:48.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:52:48.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:52:48.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:52:48.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:52:48.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:52:14', tmtdew=0.07341, humidity=99.8097, cloud=0.0, wind=15.2633, temperature=11.5894, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:52:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:52:48.699 [DEBUG] [Thread-187827] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:52:48.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:52:48.792 [DEBUG] [Thread-187830] [transport.py] [_log()] starting thread (client mode): 0xb0f55420
2026-04-12T10:52:48.792 [DEBUG] [Thread-187830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:52:48.806 [DEBUG] [Thread-187830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:52:48.806 [INFO] [Thread-187830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:52:48.814 [DEBUG] [Thread-187830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:52:48.814 [DEBUG] [Thread-187830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:52:48.814 [DEBUG] [Thread-187830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] client lang: <none>
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] server lang: <none>
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] kex follows: False
2026-04-12T10:52:48.815 [DEBUG] [Thread-187830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:52:48.816 [DEBUG] [Thread-187830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:52:48.816 [DEBUG] [Thread-187830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:52:48.816 [DEBUG] [Thread-187830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:52:48.816 [DEBUG] [Thread-187830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:52:48.816 [DEBUG] [Thread-187830] [transport.py] [_log()] Compression: none
2026-04-12T10:52:48.816 [DEBUG] [Thread-187830] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:52:48.874 [DEBUG] [Thread-187830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:52:48.875 [DEBUG] [Thread-187830] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:52:48.876 [DEBUG] [Thread-187830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:52:48.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:52:48.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:52:48.933 [DEBUG] [Thread-187830] [transport.py] [_log()] userauth is OK
2026-04-12T10:52:48.934 [DEBUG] [Thread-187830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:52:48.934 [DEBUG] [Thread-187830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:52:48.934 [DEBUG] [Thread-187830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:52:48.934 [DEBUG] [Thread-187830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:52:48.956 [INFO] [Thread-187830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:52:48.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:52:48.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:52:49.816 [DEBUG] [Thread-187830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:52:49.817 [DEBUG] [Thread-187830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:52:49.865 [DEBUG] [Thread-187830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:52:49.865 [DEBUG] [Thread-187830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:52:49.874 [DEBUG] [Thread-187830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:52:49.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:52:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:52:49.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:52:49.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:52:49.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:52:49.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:52:49.909 [DEBUG] [Thread-187830] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:52:59.651 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:52:59.653 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:53:00.931 [DEBUG] [Thread-187832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:53:15.982 [DEBUG] [Thread-187833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:53:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:53:19.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:53:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:53:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 52, 49), 0.04172, 99.6525, 0.0, 16.7263, 12.3781, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:53:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:52:49
2026-04-12T10:53:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:53:21.769 [DEBUG] [Thread-187834] [transport.py] [_log()] starting thread (client mode): 0xae51a1a0
2026-04-12T10:53:21.769 [DEBUG] [Thread-187834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:53:21.789 [DEBUG] [Thread-187834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:53:21.789 [INFO] [Thread-187834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:53:21.792 [DEBUG] [Thread-187834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:53:21.792 [DEBUG] [Thread-187834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] client lang: <none>
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] server lang: <none>
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] kex follows: False
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] Compression: none
2026-04-12T10:53:21.793 [DEBUG] [Thread-187834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:53:21.811 [DEBUG] [Thread-187834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:53:21.811 [DEBUG] [Thread-187834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:53:21.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:53:21.812 [DEBUG] [Thread-187834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:53:21.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:53:21.815 [DEBUG] [Thread-187834] [transport.py] [_log()] userauth is OK
2026-04-12T10:53:21.815 [DEBUG] [Thread-187834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:53:21.815 [DEBUG] [Thread-187834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:53:21.815 [DEBUG] [Thread-187834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:53:21.815 [DEBUG] [Thread-187834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:53:21.839 [INFO] [Thread-187834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:53:21.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:53:22.498 [DEBUG] [Thread-187834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:53:22.498 [DEBUG] [Thread-187834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:53:22.499 [DEBUG] [Thread-187834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:53:22.539 [DEBUG] [Thread-187834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:53:22.539 [DEBUG] [Thread-187834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:53:22.543 [DEBUG] [Thread-187834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:53:22.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:53:22.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:53:22.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:53:22.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:53:22.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:53:22.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:53:22.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:53:22.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:53:22.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:53:22.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.370248 -999.00  +12.50  12.14     91  +11.00 1 3 1 3 1   888    0 1.87 12.37 ----- 12.3 12.1 262.5 19.4 16.4 -6.8 16.0 -5.8 15.3 -5.4 15.9 -6.5
2026-04-12T10:53:22.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:53:22.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:53:22.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.370248
2026-04-12T10:53:22.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:53:22.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:53:22.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:53:22.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:53:22.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:53:22.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:52:49', tmtdew=0.04172, humidity=99.6525, cloud=0.0, wind=16.7263, temperature=12.3781, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:53:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:53:22.570 [DEBUG] [Thread-187834] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:53:22.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:53:22.684 [DEBUG] [Thread-187837] [transport.py] [_log()] starting thread (client mode): 0xb0f556f0
2026-04-12T10:53:22.684 [DEBUG] [Thread-187837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:53:22.720 [DEBUG] [Thread-187837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:53:22.720 [INFO] [Thread-187837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:53:22.749 [DEBUG] [Thread-187837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:53:22.749 [DEBUG] [Thread-187837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:53:22.749 [DEBUG] [Thread-187837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:53:22.749 [DEBUG] [Thread-187837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:22.749 [DEBUG] [Thread-187837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] client lang: <none>
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] server lang: <none>
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] kex follows: False
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] Compression: none
2026-04-12T10:53:22.750 [DEBUG] [Thread-187837] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:53:22.830 [DEBUG] [Thread-187837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:53:22.831 [DEBUG] [Thread-187837] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:53:22.831 [DEBUG] [Thread-187837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:53:22.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:53:22.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:53:22.918 [DEBUG] [Thread-187837] [transport.py] [_log()] userauth is OK
2026-04-12T10:53:22.919 [DEBUG] [Thread-187837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:53:22.919 [DEBUG] [Thread-187837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:53:22.919 [DEBUG] [Thread-187837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:53:22.919 [DEBUG] [Thread-187837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:53:22.961 [INFO] [Thread-187837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:53:22.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:53:22.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:53:23.761 [DEBUG] [Thread-187837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:53:23.761 [DEBUG] [Thread-187837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:53:23.809 [DEBUG] [Thread-187837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:53:23.809 [DEBUG] [Thread-187837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:53:23.819 [DEBUG] [Thread-187837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:53:23.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:53: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')
2026-04-12T10:53: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
2026-04-12T10:53:23.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:53:23.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:53:23.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:53:23.856 [DEBUG] [Thread-187837] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:53:29.376 [DEBUG] [Thread-187839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:53:31.019 [DEBUG] [Thread-187840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:53:46.072 [DEBUG] [Thread-187841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:53:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:53:53.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:53:53.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:53:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 53, 25), 0.068325, 99.8428, 0.0, 16.2511, 11.8556, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:53:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:53:25
2026-04-12T10:53:55.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:53:55.759 [DEBUG] [Thread-187842] [transport.py] [_log()] starting thread (client mode): 0xb0f56710
2026-04-12T10:53:55.759 [DEBUG] [Thread-187842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:53:55.781 [DEBUG] [Thread-187842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:53:55.781 [INFO] [Thread-187842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] client lang: <none>
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] server lang: <none>
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] kex follows: False
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] Compression: none
2026-04-12T10:53:55.784 [DEBUG] [Thread-187842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:53:55.801 [DEBUG] [Thread-187842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:53:55.801 [DEBUG] [Thread-187842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:53:55.802 [DEBUG] [Thread-187842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:53:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:53:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:53:55.803 [DEBUG] [Thread-187842] [transport.py] [_log()] userauth is OK
2026-04-12T10:53:55.804 [DEBUG] [Thread-187842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:53:55.804 [DEBUG] [Thread-187842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:53:55.804 [DEBUG] [Thread-187842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:53:55.804 [DEBUG] [Thread-187842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:53:55.822 [INFO] [Thread-187842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:53:55.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:53:56.457 [DEBUG] [Thread-187842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:53:56.457 [DEBUG] [Thread-187842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:53:56.457 [DEBUG] [Thread-187842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:53:56.497 [DEBUG] [Thread-187842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:53:56.498 [DEBUG] [Thread-187842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:53:56.500 [DEBUG] [Thread-187842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:53:56.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:53:56.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:53:56.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:53:56.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:53:56.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:53:56.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:53:56.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.370596 -999.00  +12.40  14.36     90  +10.80 1 3 1 3 1   888    0 1.85 11.50 ----- 10.3 14.4 254.8 17.0 16.4 -7.4 16.0 -6.3 15.3 -5.6 15.9 -7.0
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.370596
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:53:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:53:56.518 [DEBUG] [Thread-187842] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:53:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:53:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:53:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:53:25', tmtdew=0.068325, humidity=99.8428, cloud=0.0, wind=16.2511, temperature=11.8556, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:53:39.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:53:56.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:53:56.603 [DEBUG] [Thread-187845] [transport.py] [_log()] starting thread (client mode): 0xb0f57040
2026-04-12T10:53:56.603 [DEBUG] [Thread-187845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:53:56.618 [DEBUG] [Thread-187845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:53:56.618 [INFO] [Thread-187845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:53:56.626 [DEBUG] [Thread-187845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:53:56.626 [DEBUG] [Thread-187845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] client lang: <none>
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] server lang: <none>
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] kex follows: False
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] Compression: none
2026-04-12T10:53:56.627 [DEBUG] [Thread-187845] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:53:56.683 [DEBUG] [Thread-187845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:53:56.684 [DEBUG] [Thread-187845] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:53:56.684 [DEBUG] [Thread-187845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:53:56.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:53:56.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:53:56.740 [DEBUG] [Thread-187845] [transport.py] [_log()] userauth is OK
2026-04-12T10:53:56.740 [DEBUG] [Thread-187845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:53:56.741 [DEBUG] [Thread-187845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:53:56.741 [DEBUG] [Thread-187845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:53:56.741 [DEBUG] [Thread-187845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:53:56.764 [INFO] [Thread-187845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:53:56.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:53:56.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:53:57.601 [DEBUG] [Thread-187845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:53:57.602 [DEBUG] [Thread-187845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:53:57.650 [DEBUG] [Thread-187845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:53:57.650 [DEBUG] [Thread-187845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:53:57.659 [DEBUG] [Thread-187845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:53:57.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:53:57.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:53:57.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:53:57.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:53:57.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:53:57.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:53:57.698 [DEBUG] [Thread-187845] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:53:59.806 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:53:59.808 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:54:01.108 [DEBUG] [Thread-187847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:54:16.157 [DEBUG] [Thread-187848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:54:27.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:54:27.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:54:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:54:28.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 53, 25), 0.068325, 99.8428, 0.0, 16.2511, 11.8556, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:54:28.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:53:25
2026-04-12T10:54:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:54:29.420 [DEBUG] [Thread-187849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:54:29.544 [DEBUG] [Thread-187850] [transport.py] [_log()] starting thread (client mode): 0xae561780
2026-04-12T10:54:29.544 [DEBUG] [Thread-187850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:54:29.558 [DEBUG] [Thread-187850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:54:29.559 [INFO] [Thread-187850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:54:29.562 [DEBUG] [Thread-187850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:54:29.562 [DEBUG] [Thread-187850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:54:29.562 [DEBUG] [Thread-187850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:54:29.562 [DEBUG] [Thread-187850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:54:29.562 [DEBUG] [Thread-187850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] client lang: <none>
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] server lang: <none>
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] kex follows: False
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] Compression: none
2026-04-12T10:54:29.563 [DEBUG] [Thread-187850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:54:29.581 [DEBUG] [Thread-187850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:54:29.581 [DEBUG] [Thread-187850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:54:29.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:54:29.583 [DEBUG] [Thread-187850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:54:29.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:54:29.585 [DEBUG] [Thread-187850] [transport.py] [_log()] userauth is OK
2026-04-12T10:54:29.585 [DEBUG] [Thread-187850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:54:29.585 [DEBUG] [Thread-187850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:54:29.585 [DEBUG] [Thread-187850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:54:29.585 [DEBUG] [Thread-187850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:54:29.611 [INFO] [Thread-187850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:54:29.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:54:30.262 [DEBUG] [Thread-187850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:54:30.263 [DEBUG] [Thread-187850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:54:30.263 [DEBUG] [Thread-187850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:54:30.303 [DEBUG] [Thread-187850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:54:30.303 [DEBUG] [Thread-187850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:54:30.307 [DEBUG] [Thread-187850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:54:30.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:54:30.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:54:30.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:54:30.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:54:30.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:54:30.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:54:30.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:54:30.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:54:30.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:54:30.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.370943 -999.00  +12.30  15.15     90  +10.80 1 3 1 3 1   888    0 1.85 10.59 ----- 10.9 15.2 260.2 16.6 16.4 -7.3 15.9 -6.4 15.2 -5.2 16.0 -6.7
2026-04-12T10:54:30.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:54:30.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:54:30.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.370943
2026-04-12T10:54:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:54:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:54:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:54:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:54:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:54:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:53:25', tmtdew=0.068325, humidity=99.8428, cloud=0.0, wind=16.2511, temperature=11.8556, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:54:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:54:30.334 [DEBUG] [Thread-187850] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:54:30.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:54:30.434 [DEBUG] [Thread-187853] [transport.py] [_log()] starting thread (client mode): 0xae51aaa0
2026-04-12T10:54:30.434 [DEBUG] [Thread-187853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:54:30.452 [DEBUG] [Thread-187853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:54:30.452 [INFO] [Thread-187853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:54:30.459 [DEBUG] [Thread-187853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] client lang: <none>
2026-04-12T10:54:30.460 [DEBUG] [Thread-187853] [transport.py] [_log()] server lang: <none>
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] kex follows: False
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] Compression: none
2026-04-12T10:54:30.461 [DEBUG] [Thread-187853] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:54:30.520 [DEBUG] [Thread-187853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:54:30.520 [DEBUG] [Thread-187853] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:54:30.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:54:30.521 [DEBUG] [Thread-187853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:54:30.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:54:30.579 [DEBUG] [Thread-187853] [transport.py] [_log()] userauth is OK
2026-04-12T10:54:30.580 [DEBUG] [Thread-187853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:54:30.580 [DEBUG] [Thread-187853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:54:30.580 [DEBUG] [Thread-187853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:54:30.580 [DEBUG] [Thread-187853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:54:30.599 [INFO] [Thread-187853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:54:30.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:54:30.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:54:31.196 [DEBUG] [Thread-187855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:54:31.444 [DEBUG] [Thread-187853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:54:31.444 [DEBUG] [Thread-187853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:54:31.493 [DEBUG] [Thread-187853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:54:31.493 [DEBUG] [Thread-187853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:54:31.502 [DEBUG] [Thread-187853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:54:31.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:54:31.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:54:31.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:54:31.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:54:31.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:54:31.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:54:31.539 [DEBUG] [Thread-187853] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:54:46.250 [DEBUG] [Thread-187856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:54:59.948 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:54:59.949 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:55:01.290 [DEBUG] [Thread-187857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:55:01.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:55:01.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:55:01.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:55:02.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 54, 35), 0.02643, 99.7518, 0.0, 17.8553, 12.577, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:55:02.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:54:35
2026-04-12T10:55:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:55:03.413 [DEBUG] [Thread-187858] [transport.py] [_log()] starting thread (client mode): 0xa793aef0
2026-04-12T10:55:03.413 [DEBUG] [Thread-187858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:55:03.433 [DEBUG] [Thread-187858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:55:03.433 [INFO] [Thread-187858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:55:03.436 [DEBUG] [Thread-187858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:55:03.436 [DEBUG] [Thread-187858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:55:03.436 [DEBUG] [Thread-187858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:55:03.436 [DEBUG] [Thread-187858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] client lang: <none>
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] server lang: <none>
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] kex follows: False
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:55:03.437 [DEBUG] [Thread-187858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:55:03.438 [DEBUG] [Thread-187858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:55:03.438 [DEBUG] [Thread-187858] [transport.py] [_log()] Compression: none
2026-04-12T10:55:03.438 [DEBUG] [Thread-187858] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:55:03.456 [DEBUG] [Thread-187858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:55:03.456 [DEBUG] [Thread-187858] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:55:03.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:55:03.458 [DEBUG] [Thread-187858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:55:03.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:55:03.460 [DEBUG] [Thread-187858] [transport.py] [_log()] userauth is OK
2026-04-12T10:55:03.460 [DEBUG] [Thread-187858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:55:03.460 [DEBUG] [Thread-187858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:55:03.460 [DEBUG] [Thread-187858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:55:03.460 [DEBUG] [Thread-187858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:55:03.484 [INFO] [Thread-187858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:55:03.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:55:05.181 [DEBUG] [Thread-187858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:55:05.181 [DEBUG] [Thread-187858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:55:05.182 [DEBUG] [Thread-187858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:55:05.222 [DEBUG] [Thread-187858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:55:05.222 [DEBUG] [Thread-187858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:55:05.224 [DEBUG] [Thread-187858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:55:05.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:55:05.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:55:05.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:55:05.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:55:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:55:05.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:55:05.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:55:05.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:55:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:55:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.371290 -999.00  +12.30  13.58     90  +10.70 1 3 1 3 1   888    0 1.78 8.46 ----- 10.3 13.6 254.2 17.2 16.4 -6.8 15.9 -6.3 15.3 -4.7 15.9 -6.7
2026-04-12T10:55:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:55:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:55:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.371290
2026-04-12T10:55:05.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:55:05.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:55:05.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:55:05.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:55:05.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:55:05.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:54:35', tmtdew=0.02643, humidity=99.7518, cloud=0.0, wind=17.8553, temperature=12.577, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:54:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:55:05.273 [DEBUG] [Thread-187858] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:55:05.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:55:05.357 [DEBUG] [Thread-187861] [transport.py] [_log()] starting thread (client mode): 0xb0f413c0
2026-04-12T10:55:05.357 [DEBUG] [Thread-187861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:55:05.371 [DEBUG] [Thread-187861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:55:05.371 [INFO] [Thread-187861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] client lang: <none>
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] server lang: <none>
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] kex follows: False
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:55:05.379 [DEBUG] [Thread-187861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:55:05.380 [DEBUG] [Thread-187861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:55:05.380 [DEBUG] [Thread-187861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:55:05.380 [DEBUG] [Thread-187861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:55:05.380 [DEBUG] [Thread-187861] [transport.py] [_log()] Compression: none
2026-04-12T10:55:05.380 [DEBUG] [Thread-187861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:55:05.443 [DEBUG] [Thread-187861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:55:05.443 [DEBUG] [Thread-187861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:55:05.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:55:05.445 [DEBUG] [Thread-187861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:55:05.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:55:05.499 [DEBUG] [Thread-187861] [transport.py] [_log()] userauth is OK
2026-04-12T10:55:05.499 [DEBUG] [Thread-187861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:55:05.499 [DEBUG] [Thread-187861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:55:05.499 [DEBUG] [Thread-187861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:55:05.499 [DEBUG] [Thread-187861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:55:05.518 [INFO] [Thread-187861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:55:05.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:55:05.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:55:06.385 [DEBUG] [Thread-187861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:55:06.385 [DEBUG] [Thread-187861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:55:06.433 [DEBUG] [Thread-187861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:55:06.433 [DEBUG] [Thread-187861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:55:06.443 [DEBUG] [Thread-187861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:55:06.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:55:06.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:55:06.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:55:06.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:55:06.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:55:06.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:55:06.479 [DEBUG] [Thread-187861] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:55:16.326 [DEBUG] [Thread-187863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:55:29.488 [DEBUG] [Thread-187864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:55:31.390 [DEBUG] [Thread-187865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:55:36.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:55:36.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:55:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:55:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 55, 11), 0.081055, 99.7594, 0.0, 13.5875, 11.6051, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:55:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:55:11
2026-04-12T10:55:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:55:38.393 [DEBUG] [Thread-187866] [transport.py] [_log()] starting thread (client mode): 0xa7939570
2026-04-12T10:55:38.393 [DEBUG] [Thread-187866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:55:38.412 [DEBUG] [Thread-187866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:55:38.412 [INFO] [Thread-187866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:55:38.415 [DEBUG] [Thread-187866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:55:38.415 [DEBUG] [Thread-187866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:55:38.415 [DEBUG] [Thread-187866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:55:38.415 [DEBUG] [Thread-187866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:38.415 [DEBUG] [Thread-187866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:38.415 [DEBUG] [Thread-187866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:38.415 [DEBUG] [Thread-187866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] client lang: <none>
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] server lang: <none>
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] kex follows: False
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] Compression: none
2026-04-12T10:55:38.416 [DEBUG] [Thread-187866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:55:38.433 [DEBUG] [Thread-187866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:55:38.434 [DEBUG] [Thread-187866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:55:38.434 [DEBUG] [Thread-187866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:55:38.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:55:38.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:55:38.437 [DEBUG] [Thread-187866] [transport.py] [_log()] userauth is OK
2026-04-12T10:55:38.437 [DEBUG] [Thread-187866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:55:38.437 [DEBUG] [Thread-187866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:55:38.437 [DEBUG] [Thread-187866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:55:38.437 [DEBUG] [Thread-187866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:55:38.460 [INFO] [Thread-187866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:55:38.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:55:39.114 [DEBUG] [Thread-187866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:55:39.114 [DEBUG] [Thread-187866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:55:39.114 [DEBUG] [Thread-187866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:55:39.155 [DEBUG] [Thread-187866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:55:39.155 [DEBUG] [Thread-187866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:55:39.158 [DEBUG] [Thread-187866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:55:39.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:55:39.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:55:39.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:55:39.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:55:39.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:55:39.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:55:39.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:55:39.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:55:39.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:55:39.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.371637 -999.00  +12.30  12.90     90  +10.70 1 3 1 3 1   888    0 1.76 7.13 ----- 13.0 12.9 256.4 20.8 16.5 -7.0 16.0 -5.7 15.3 -4.5 15.9 -6.1
2026-04-12T10:55:39.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:55:39.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:55:39.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.371637
2026-04-12T10:55:39.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:55:39.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:55:39.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:55:39.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:55:39.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:55:39.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:55:11', tmtdew=0.081055, humidity=99.7594, cloud=0.0, wind=13.5875, temperature=11.6051, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:55:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:55:39.186 [DEBUG] [Thread-187866] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:55:39.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:55:39.279 [DEBUG] [Thread-187869] [transport.py] [_log()] starting thread (client mode): 0xa793b250
2026-04-12T10:55:39.279 [DEBUG] [Thread-187869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:55:39.294 [DEBUG] [Thread-187869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:55:39.294 [INFO] [Thread-187869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:55:39.302 [DEBUG] [Thread-187869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:55:39.303 [DEBUG] [Thread-187869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:55:39.303 [DEBUG] [Thread-187869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:55:39.303 [DEBUG] [Thread-187869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:39.303 [DEBUG] [Thread-187869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:55:39.303 [DEBUG] [Thread-187869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:39.303 [DEBUG] [Thread-187869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:55:39.304 [DEBUG] [Thread-187869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:55:39.304 [DEBUG] [Thread-187869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:55:39.304 [DEBUG] [Thread-187869] [transport.py] [_log()] client lang: <none>
2026-04-12T10:55:39.304 [DEBUG] [Thread-187869] [transport.py] [_log()] server lang: <none>
2026-04-12T10:55:39.304 [DEBUG] [Thread-187869] [transport.py] [_log()] kex follows: False
2026-04-12T10:55:39.304 [DEBUG] [Thread-187869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:55:39.305 [DEBUG] [Thread-187869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:55:39.305 [DEBUG] [Thread-187869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:55:39.305 [DEBUG] [Thread-187869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:55:39.305 [DEBUG] [Thread-187869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:55:39.305 [DEBUG] [Thread-187869] [transport.py] [_log()] Compression: none
2026-04-12T10:55:39.306 [DEBUG] [Thread-187869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:55:39.363 [DEBUG] [Thread-187869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:55:39.364 [DEBUG] [Thread-187869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:55:39.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:55:39.365 [DEBUG] [Thread-187869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:55:39.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:55:39.422 [DEBUG] [Thread-187869] [transport.py] [_log()] userauth is OK
2026-04-12T10:55:39.423 [DEBUG] [Thread-187869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:55:39.423 [DEBUG] [Thread-187869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:55:39.423 [DEBUG] [Thread-187869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:55:39.423 [DEBUG] [Thread-187869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:55:39.443 [INFO] [Thread-187869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:55:39.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:55:39.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:55:40.324 [DEBUG] [Thread-187869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:55:40.324 [DEBUG] [Thread-187869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:55:40.372 [DEBUG] [Thread-187869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:55:40.373 [DEBUG] [Thread-187869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:55:40.381 [DEBUG] [Thread-187869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:55:40.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:55:40.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:55:40.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:55:40.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:55:40.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:55:40.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:55:40.416 [DEBUG] [Thread-187869] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:55:46.423 [DEBUG] [Thread-187871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:00.103 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:00.104 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:01.480 [DEBUG] [Thread-187872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:10.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:56:10.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:56:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:56:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 55, 46), 0.05702, 99.552, 0.0, 15.2798, 12.5101, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:56:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:55:46
2026-04-12T10:56:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:56:12.281 [DEBUG] [Thread-187873] [transport.py] [_log()] starting thread (client mode): 0xb0fb7490
2026-04-12T10:56:12.281 [DEBUG] [Thread-187873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:56:12.302 [DEBUG] [Thread-187873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:56:12.302 [INFO] [Thread-187873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:56:12.305 [DEBUG] [Thread-187873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] client lang: <none>
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] server lang: <none>
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] kex follows: False
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] Compression: none
2026-04-12T10:56:12.306 [DEBUG] [Thread-187873] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:56:12.325 [DEBUG] [Thread-187873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:56:12.326 [DEBUG] [Thread-187873] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:56:12.326 [DEBUG] [Thread-187873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:56:12.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:56:12.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:56:12.328 [DEBUG] [Thread-187873] [transport.py] [_log()] userauth is OK
2026-04-12T10:56:12.328 [DEBUG] [Thread-187873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:56:12.328 [DEBUG] [Thread-187873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:56:12.328 [DEBUG] [Thread-187873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:56:12.328 [DEBUG] [Thread-187873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:56:12.351 [INFO] [Thread-187873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:56:12.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:56:13.014 [DEBUG] [Thread-187873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:56:13.015 [DEBUG] [Thread-187873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:56:13.015 [DEBUG] [Thread-187873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:56:13.056 [DEBUG] [Thread-187873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:56:13.056 [DEBUG] [Thread-187873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:56:13.059 [DEBUG] [Thread-187873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:56:13.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:56:13.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:56:13.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:56:13.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:56:13.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:56:13.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:56:13.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:56:13.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:56:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:56:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.371984 -999.00  +12.30  13.01     90  +10.70 1 3 1 3 1   888    0 1.75 6.99 ----- 11.0 13.0 266.4 19.9 16.5 -6.6 15.9 -5.2 15.2 -4.2 15.9 -5.7
2026-04-12T10:56:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:56:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:56:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.371984
2026-04-12T10:56:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:56:13.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:56:13.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:56:13.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:56:13.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:56:13.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:55:46', tmtdew=0.05702, humidity=99.552, cloud=0.0, wind=15.2798, temperature=12.5101, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:55:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:56:13.082 [DEBUG] [Thread-187873] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:56:13.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:56:13.188 [DEBUG] [Thread-187876] [transport.py] [_log()] starting thread (client mode): 0xae5e6290
2026-04-12T10:56:13.188 [DEBUG] [Thread-187876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:56:13.214 [DEBUG] [Thread-187876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:56:13.214 [INFO] [Thread-187876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:56:13.231 [DEBUG] [Thread-187876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:56:13.231 [DEBUG] [Thread-187876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:56:13.231 [DEBUG] [Thread-187876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:56:13.231 [DEBUG] [Thread-187876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] client lang: <none>
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] server lang: <none>
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] kex follows: False
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] Compression: none
2026-04-12T10:56:13.232 [DEBUG] [Thread-187876] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:56:13.301 [DEBUG] [Thread-187876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:56:13.302 [DEBUG] [Thread-187876] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:56:13.302 [DEBUG] [Thread-187876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:56:13.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:56:13.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:56:13.382 [DEBUG] [Thread-187876] [transport.py] [_log()] userauth is OK
2026-04-12T10:56:13.382 [DEBUG] [Thread-187876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:56:13.382 [DEBUG] [Thread-187876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:56:13.382 [DEBUG] [Thread-187876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:56:13.382 [DEBUG] [Thread-187876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:56:13.408 [INFO] [Thread-187876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:56:13.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:56:13.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:56:14.261 [DEBUG] [Thread-187876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:56:14.261 [DEBUG] [Thread-187876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:56:14.321 [DEBUG] [Thread-187876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:56:14.321 [DEBUG] [Thread-187876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:56:14.343 [DEBUG] [Thread-187876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:56:14.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:56:14.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:56:14.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:56:14.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:56:14.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:56:14.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:56:14.416 [DEBUG] [Thread-187876] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:56:16.522 [DEBUG] [Thread-187878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:29.540 [DEBUG] [Thread-187879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:31.570 [DEBUG] [Thread-187880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:56:44.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:56:44.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:56:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 56, 22), 0.081045, 99.2594, 0.0, 14.8576, 11.7551, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:56:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:56:22
2026-04-12T10:56:46.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:56:46.224 [DEBUG] [Thread-187881] [transport.py] [_log()] starting thread (client mode): 0xb0f8d240
2026-04-12T10:56:46.224 [DEBUG] [Thread-187881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:56:46.246 [DEBUG] [Thread-187881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:56:46.246 [INFO] [Thread-187881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:56:46.249 [DEBUG] [Thread-187881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:56:46.249 [DEBUG] [Thread-187881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] client lang: <none>
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] server lang: <none>
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] kex follows: False
2026-04-12T10:56:46.250 [DEBUG] [Thread-187881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:56:46.251 [DEBUG] [Thread-187881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:56:46.251 [DEBUG] [Thread-187881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:56:46.251 [DEBUG] [Thread-187881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:56:46.251 [DEBUG] [Thread-187881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:56:46.251 [DEBUG] [Thread-187881] [transport.py] [_log()] Compression: none
2026-04-12T10:56:46.251 [DEBUG] [Thread-187881] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:56:46.269 [DEBUG] [Thread-187881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:56:46.270 [DEBUG] [Thread-187881] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:56:46.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:56:46.271 [DEBUG] [Thread-187881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:56:46.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:56:46.273 [DEBUG] [Thread-187881] [transport.py] [_log()] userauth is OK
2026-04-12T10:56:46.273 [DEBUG] [Thread-187881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:56:46.273 [DEBUG] [Thread-187881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:56:46.273 [DEBUG] [Thread-187881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:56:46.273 [DEBUG] [Thread-187881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:56:46.296 [INFO] [Thread-187881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:56:46.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:56:46.606 [DEBUG] [Thread-187883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:56:46.912 [DEBUG] [Thread-187881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:56:46.912 [DEBUG] [Thread-187881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:56:46.913 [DEBUG] [Thread-187881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:56:46.953 [DEBUG] [Thread-187881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:56:46.953 [DEBUG] [Thread-187881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:56:46.956 [DEBUG] [Thread-187881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:56:46.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:56:46.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:56:46.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:56:46.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:56:46.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:56:46.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:56:46.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:56:46.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:56:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:56:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.372332 -999.00  +12.30   8.94     90  +10.80 1 3 1 3 1   888    0 1.72 5.93 ----- 10.5 8.9 222.1 13.5 16.4 -6.3 15.9 -5.1 15.2 -4.0 15.9 -5.5
2026-04-12T10:56:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:56:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:56:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.372332
2026-04-12T10:56:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:56:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:56:46.986 [DEBUG] [Thread-187881] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:56:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:56:46.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:56:46.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:56:46.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:56:22', tmtdew=0.081045, humidity=99.2594, cloud=0.0, wind=14.8576, temperature=11.7551, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:56:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:56:47.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:56:47.080 [DEBUG] [Thread-187885] [transport.py] [_log()] starting thread (client mode): 0xb0f429e0
2026-04-12T10:56:47.080 [DEBUG] [Thread-187885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:56:47.095 [DEBUG] [Thread-187885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:56:47.096 [INFO] [Thread-187885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:56:47.103 [DEBUG] [Thread-187885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] client lang: <none>
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] server lang: <none>
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] kex follows: False
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] Compression: none
2026-04-12T10:56:47.104 [DEBUG] [Thread-187885] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:56:47.161 [DEBUG] [Thread-187885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:56:47.162 [DEBUG] [Thread-187885] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:56:47.162 [DEBUG] [Thread-187885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:56:47.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:56:47.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:56:47.217 [DEBUG] [Thread-187885] [transport.py] [_log()] userauth is OK
2026-04-12T10:56:47.218 [DEBUG] [Thread-187885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:56:47.218 [DEBUG] [Thread-187885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:56:47.218 [DEBUG] [Thread-187885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:56:47.218 [DEBUG] [Thread-187885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:56:47.243 [INFO] [Thread-187885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:56:47.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:56:47.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:56:48.131 [DEBUG] [Thread-187885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:56:48.131 [DEBUG] [Thread-187885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:56:48.178 [DEBUG] [Thread-187885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:56:48.179 [DEBUG] [Thread-187885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:56:48.187 [DEBUG] [Thread-187885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:56:48.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:56:48.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:56:48.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:56:48.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:56:48.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:56:48.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:56:48.221 [DEBUG] [Thread-187885] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:57:00.260 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:57:00.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:57:01.643 [DEBUG] [Thread-187887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:57:16.698 [DEBUG] [Thread-187888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:57:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:57:18.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:57:18.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:57:19.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 56, 58), 0.041215, 99.6931, 0.0, 16.304, 11.6719, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:57:19.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:56:58
2026-04-12T10:57:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:57:20.123 [DEBUG] [Thread-187889] [transport.py] [_log()] starting thread (client mode): 0xb0f8fe20
2026-04-12T10:57:20.123 [DEBUG] [Thread-187889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:57:20.143 [DEBUG] [Thread-187889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:57:20.143 [INFO] [Thread-187889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] client lang: <none>
2026-04-12T10:57:20.146 [DEBUG] [Thread-187889] [transport.py] [_log()] server lang: <none>
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] kex follows: False
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] Compression: none
2026-04-12T10:57:20.147 [DEBUG] [Thread-187889] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:57:20.163 [DEBUG] [Thread-187889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:57:20.164 [DEBUG] [Thread-187889] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:57:20.165 [DEBUG] [Thread-187889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:57:20.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:57:20.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:57:20.209 [DEBUG] [Thread-187889] [transport.py] [_log()] userauth is OK
2026-04-12T10:57:20.209 [DEBUG] [Thread-187889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:57:20.210 [DEBUG] [Thread-187889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:57:20.210 [DEBUG] [Thread-187889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:57:20.210 [DEBUG] [Thread-187889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:57:20.237 [INFO] [Thread-187889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:57:20.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:57:20.874 [DEBUG] [Thread-187889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:57:20.874 [DEBUG] [Thread-187889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:57:20.874 [DEBUG] [Thread-187889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:57:20.915 [DEBUG] [Thread-187889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:57:20.915 [DEBUG] [Thread-187889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:57:20.919 [DEBUG] [Thread-187889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:57:20.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:57:20.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:57:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:57:20.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:57:20.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:57:20.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:57:20.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:57:20.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:57:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:57:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.372679 -999.00  +12.30  11.35     90  +10.80 1 3 1 3 1   888    0 1.65 4.45 ----- 10.0 11.3 250.4 17.9 16.4 -5.7 15.9 -4.8 15.3 -4.0 15.9 -5.0
2026-04-12T10:57:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:57:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:57:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.372679
2026-04-12T10:57:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:57:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:57:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:57:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:57:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:57:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:56:58', tmtdew=0.041215, humidity=99.6931, cloud=0.0, wind=16.304, temperature=11.6719, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:56:39.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:57:20.944 [DEBUG] [Thread-187889] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:57:21.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:57:21.046 [DEBUG] [Thread-187892] [transport.py] [_log()] starting thread (client mode): 0xb0f8c6d0
2026-04-12T10:57:21.047 [DEBUG] [Thread-187892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:57:21.092 [DEBUG] [Thread-187892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:57:21.093 [INFO] [Thread-187892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:57:21.127 [DEBUG] [Thread-187892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:57:21.127 [DEBUG] [Thread-187892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:57:21.127 [DEBUG] [Thread-187892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:57:21.127 [DEBUG] [Thread-187892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:21.127 [DEBUG] [Thread-187892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:21.127 [DEBUG] [Thread-187892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] client lang: <none>
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] server lang: <none>
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] kex follows: False
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] Compression: none
2026-04-12T10:57:21.128 [DEBUG] [Thread-187892] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:57:21.203 [DEBUG] [Thread-187892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:57:21.203 [DEBUG] [Thread-187892] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:57:21.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:57:21.203 [DEBUG] [Thread-187892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:57:21.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:57:21.309 [DEBUG] [Thread-187892] [transport.py] [_log()] userauth is OK
2026-04-12T10:57:21.310 [DEBUG] [Thread-187892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:57:21.311 [DEBUG] [Thread-187892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:57:21.311 [DEBUG] [Thread-187892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:57:21.311 [DEBUG] [Thread-187892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:57:21.360 [INFO] [Thread-187892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:57:21.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:57:21.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:57:22.192 [DEBUG] [Thread-187892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:57:22.192 [DEBUG] [Thread-187892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:57:22.269 [DEBUG] [Thread-187892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:57:22.269 [DEBUG] [Thread-187892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:57:22.304 [DEBUG] [Thread-187892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:57:22.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:57:22.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:57:22.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:57:22.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:57:22.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:57:22.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:57:22.454 [DEBUG] [Thread-187892] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:57:29.573 [DEBUG] [Thread-187894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:57:31.734 [DEBUG] [Thread-187895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:57:46.791 [DEBUG] [Thread-187896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:57:52.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:57:52.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:57:52.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:57:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 57, 33), 0.08765, 99.3522, 0.0, 12.4927, 12.2775, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:57:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:57:33
2026-04-12T10:57:54.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:57:54.359 [DEBUG] [Thread-187897] [transport.py] [_log()] starting thread (client mode): 0xa79c7d00
2026-04-12T10:57:54.360 [DEBUG] [Thread-187897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:57:54.378 [DEBUG] [Thread-187897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:57:54.378 [INFO] [Thread-187897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] client lang: <none>
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] server lang: <none>
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] kex follows: False
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] Compression: none
2026-04-12T10:57:54.382 [DEBUG] [Thread-187897] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:57:54.398 [DEBUG] [Thread-187897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:57:54.398 [DEBUG] [Thread-187897] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:57:54.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:57:54.399 [DEBUG] [Thread-187897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:57:54.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:57:54.404 [DEBUG] [Thread-187897] [transport.py] [_log()] userauth is OK
2026-04-12T10:57:54.405 [DEBUG] [Thread-187897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:57:54.405 [DEBUG] [Thread-187897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:57:54.405 [DEBUG] [Thread-187897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:57:54.405 [DEBUG] [Thread-187897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:57:54.425 [INFO] [Thread-187897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:57:54.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:57:55.097 [DEBUG] [Thread-187897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:57:55.097 [DEBUG] [Thread-187897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:57:55.098 [DEBUG] [Thread-187897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:57:55.138 [DEBUG] [Thread-187897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:57:55.138 [DEBUG] [Thread-187897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:57:55.141 [DEBUG] [Thread-187897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:57:55.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:57:55.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:57:55.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:57:55.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:57:55.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:57:55.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:57:55.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:57:55.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:57:55.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:57:55.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.373026 -999.00  +12.40   9.13     90  +10.90 1 3 1 3 1   888    0 1.62 3.10 ----- 9.9 9.1 267.8 17.4 16.4 -5.5 15.9 -4.8 15.2 -4.5 15.9 -4.8
2026-04-12T10:57:55.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:57:55.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:57:55.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.373026
2026-04-12T10:57:55.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:57:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:57:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:57:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:57:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:57:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:57:33', tmtdew=0.08765, humidity=99.3522, cloud=0.0, wind=12.4927, temperature=12.2775, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:57:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:57:55.170 [DEBUG] [Thread-187897] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:57:55.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:57:55.263 [DEBUG] [Thread-187900] [transport.py] [_log()] starting thread (client mode): 0xa79c5810
2026-04-12T10:57:55.263 [DEBUG] [Thread-187900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:57:55.278 [DEBUG] [Thread-187900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:57:55.278 [INFO] [Thread-187900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:57:55.287 [DEBUG] [Thread-187900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:57:55.287 [DEBUG] [Thread-187900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] client lang: <none>
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] server lang: <none>
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] kex follows: False
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] Compression: none
2026-04-12T10:57:55.288 [DEBUG] [Thread-187900] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:57:55.344 [DEBUG] [Thread-187900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:57:55.345 [DEBUG] [Thread-187900] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:57:55.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:57:55.346 [DEBUG] [Thread-187900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:57:55.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:57:55.400 [DEBUG] [Thread-187900] [transport.py] [_log()] userauth is OK
2026-04-12T10:57:55.400 [DEBUG] [Thread-187900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:57:55.401 [DEBUG] [Thread-187900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:57:55.401 [DEBUG] [Thread-187900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:57:55.401 [DEBUG] [Thread-187900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:57:55.419 [INFO] [Thread-187900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:57:55.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:57:55.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:57:56.279 [DEBUG] [Thread-187900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:57:56.279 [DEBUG] [Thread-187900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:57:56.327 [DEBUG] [Thread-187900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:57:56.327 [DEBUG] [Thread-187900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:57:56.337 [DEBUG] [Thread-187900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:57:56.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:57:56.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:57:56.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:57:56.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:57:56.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:57:56.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:57:56.373 [DEBUG] [Thread-187900] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:58:00.401 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:58:00.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:58:01.829 [DEBUG] [Thread-187902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:58:16.892 [DEBUG] [Thread-187903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:58:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:58:26.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:58:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:58:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 58, 8), 0.038775, 99.709, 0.0, 14.152, 11.7881, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:58:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:58:08
2026-04-12T10:58:28.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:58:28.206 [DEBUG] [Thread-187904] [transport.py] [_log()] starting thread (client mode): 0xa793b430
2026-04-12T10:58:28.206 [DEBUG] [Thread-187904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:58:28.228 [DEBUG] [Thread-187904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:58:28.228 [INFO] [Thread-187904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:58:28.231 [DEBUG] [Thread-187904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:58:28.231 [DEBUG] [Thread-187904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] client lang: <none>
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] server lang: <none>
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] kex follows: False
2026-04-12T10:58:28.232 [DEBUG] [Thread-187904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:58:28.233 [DEBUG] [Thread-187904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:58:28.233 [DEBUG] [Thread-187904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:58:28.233 [DEBUG] [Thread-187904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:58:28.233 [DEBUG] [Thread-187904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:58:28.233 [DEBUG] [Thread-187904] [transport.py] [_log()] Compression: none
2026-04-12T10:58:28.233 [DEBUG] [Thread-187904] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:58:28.254 [DEBUG] [Thread-187904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:58:28.254 [DEBUG] [Thread-187904] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:58:28.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:58:28.255 [DEBUG] [Thread-187904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:58:28.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:58:28.257 [DEBUG] [Thread-187904] [transport.py] [_log()] userauth is OK
2026-04-12T10:58:28.258 [DEBUG] [Thread-187904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:58:28.258 [DEBUG] [Thread-187904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:58:28.258 [DEBUG] [Thread-187904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:58:28.258 [DEBUG] [Thread-187904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:58:28.294 [INFO] [Thread-187904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:58:28.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:58:28.916 [DEBUG] [Thread-187904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:58:28.917 [DEBUG] [Thread-187904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:58:28.917 [DEBUG] [Thread-187904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:58:28.958 [DEBUG] [Thread-187904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:58:28.958 [DEBUG] [Thread-187904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:58:28.962 [DEBUG] [Thread-187904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:58:28.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:58:28.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:58:28.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:58:28.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:58:29.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:58:29.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:58:29.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:58:29.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:58:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:58:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.373721 -999.00  +12.40   7.55     91  +10.90 1 3 1 3 1   888    0 1.53 0.31 ----- 8.8 7.5 261.6 14.9 16.3 -6.8 15.8 -6.2 15.2 -6.3 15.8 -5.9
2026-04-12T10:58:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:58:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:58:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.373721
2026-04-12T10:58:29.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:58:29.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:58:29.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:58:29.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:58:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:58:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:58:08', tmtdew=0.038775, humidity=99.709, cloud=0.0, wind=14.152, temperature=11.7881, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:58:09.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:58:29.006 [DEBUG] [Thread-187904] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:58:29.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:58:29.100 [DEBUG] [Thread-187907] [transport.py] [_log()] starting thread (client mode): 0xae518550
2026-04-12T10:58:29.100 [DEBUG] [Thread-187907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:58:29.115 [DEBUG] [Thread-187907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:58:29.115 [INFO] [Thread-187907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] client lang: <none>
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] server lang: <none>
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] kex follows: False
2026-04-12T10:58:29.123 [DEBUG] [Thread-187907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:58:29.124 [DEBUG] [Thread-187907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:58:29.124 [DEBUG] [Thread-187907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:58:29.124 [DEBUG] [Thread-187907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:58:29.124 [DEBUG] [Thread-187907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:58:29.124 [DEBUG] [Thread-187907] [transport.py] [_log()] Compression: none
2026-04-12T10:58:29.124 [DEBUG] [Thread-187907] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:58:29.184 [DEBUG] [Thread-187907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:58:29.185 [DEBUG] [Thread-187907] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:58:29.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:58:29.186 [DEBUG] [Thread-187907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:58:29.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:58:29.243 [DEBUG] [Thread-187907] [transport.py] [_log()] userauth is OK
2026-04-12T10:58:29.244 [DEBUG] [Thread-187907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:58:29.244 [DEBUG] [Thread-187907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:58:29.244 [DEBUG] [Thread-187907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:58:29.244 [DEBUG] [Thread-187907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:58:29.264 [INFO] [Thread-187907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:58:29.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:58:29.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:58:29.614 [DEBUG] [Thread-187909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:58:30.142 [DEBUG] [Thread-187907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:58:30.142 [DEBUG] [Thread-187907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:58:30.190 [DEBUG] [Thread-187907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:58:30.190 [DEBUG] [Thread-187907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:58:30.199 [DEBUG] [Thread-187907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:58:30.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:58:30.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:58:30.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:58:30.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:58:30.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:58:30.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:58:30.236 [DEBUG] [Thread-187907] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:58:31.930 [DEBUG] [Thread-187910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:58:46.983 [DEBUG] [Thread-187911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:59:00.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:59:00.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:59:00.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:59:00.547 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:59:00.548 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:59:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 58, 44), 0.0928, 99.3185, 0.0, 13.7981, 12.3766, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:59:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:58:44
2026-04-12T10:59:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:59:02.020 [DEBUG] [Thread-187912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:59:02.106 [DEBUG] [Thread-187913] [transport.py] [_log()] starting thread (client mode): 0xb0f8d330
2026-04-12T10:59:02.107 [DEBUG] [Thread-187913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:59:02.125 [DEBUG] [Thread-187913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:59:02.125 [INFO] [Thread-187913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:02.126 [DEBUG] [Thread-187913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] client lang: <none>
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] server lang: <none>
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] kex follows: False
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] Compression: none
2026-04-12T10:59:02.127 [DEBUG] [Thread-187913] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:59:02.135 [DEBUG] [Thread-187913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:59:02.135 [DEBUG] [Thread-187913] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:59:02.135 [DEBUG] [Thread-187913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:59:02.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:59:02.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:59:02.137 [DEBUG] [Thread-187913] [transport.py] [_log()] userauth is OK
2026-04-12T10:59:02.137 [DEBUG] [Thread-187913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:59:02.137 [DEBUG] [Thread-187913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:59:02.137 [DEBUG] [Thread-187913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:59:02.137 [DEBUG] [Thread-187913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:59:02.159 [INFO] [Thread-187913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:59:02.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:59:02.908 [DEBUG] [Thread-187913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:59:02.908 [DEBUG] [Thread-187913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:59:02.908 [DEBUG] [Thread-187913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:59:02.949 [DEBUG] [Thread-187913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:59:02.949 [DEBUG] [Thread-187913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:59:02.953 [DEBUG] [Thread-187913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:59:02.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:59:02.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:59:02.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:59:02.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:59:02.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:59:02.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:59:02.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:59:02.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:59:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:59:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.374068 -999.00  +12.40  12.16     91  +11.10 1 3 1 3 1   888    0 1.47 -1.40 ----- 16.2 12.2 254.8 15.4 16.3 -7.6 15.8 -6.6 15.2 -5.8 15.9 -6.1
2026-04-12T10:59:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:59:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:59:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.374068
2026-04-12T10:59:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:59:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:59:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:59:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:59:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:59:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:58:44', tmtdew=0.0928, humidity=99.3185, cloud=0.0, wind=13.7981, temperature=12.3766, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:58:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:59:02.980 [DEBUG] [Thread-187913] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:59:03.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:59:03.089 [DEBUG] [Thread-187916] [transport.py] [_log()] starting thread (client mode): 0xa793bfa0
2026-04-12T10:59:03.089 [DEBUG] [Thread-187916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:59:03.110 [DEBUG] [Thread-187916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:59:03.110 [INFO] [Thread-187916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:59:03.123 [DEBUG] [Thread-187916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:59:03.123 [DEBUG] [Thread-187916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:59:03.123 [DEBUG] [Thread-187916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:59:03.123 [DEBUG] [Thread-187916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:03.123 [DEBUG] [Thread-187916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] client lang: <none>
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] server lang: <none>
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] kex follows: False
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] Compression: none
2026-04-12T10:59:03.124 [DEBUG] [Thread-187916] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:59:03.185 [DEBUG] [Thread-187916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:59:03.186 [DEBUG] [Thread-187916] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:59:03.187 [DEBUG] [Thread-187916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:59:03.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:59:03.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:59:03.254 [DEBUG] [Thread-187916] [transport.py] [_log()] userauth is OK
2026-04-12T10:59:03.254 [DEBUG] [Thread-187916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:59:03.254 [DEBUG] [Thread-187916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:59:03.254 [DEBUG] [Thread-187916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:59:03.255 [DEBUG] [Thread-187916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:59:03.279 [INFO] [Thread-187916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:59:03.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:59:03.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:59:04.127 [DEBUG] [Thread-187916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:59:04.127 [DEBUG] [Thread-187916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:59:04.181 [DEBUG] [Thread-187916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:59:04.181 [DEBUG] [Thread-187916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:59:04.197 [DEBUG] [Thread-187916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:59:04.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:59:04.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:59:04.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:59:04.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:59:04.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:59:04.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:59:04.260 [DEBUG] [Thread-187916] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:59:17.054 [DEBUG] [Thread-187918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:59:29.648 [DEBUG] [Thread-187919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:59:32.109 [DEBUG] [Thread-187920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T10:59:34.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T10:59:34.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T10:59:34.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T10:59:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 59, 19), 0.041355, 99.6922, 0.0, 15.0869, 11.7713, 2, 2, 0, 2, 0, 0),)
2026-04-12T10:59:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:59:19
2026-04-12T10:59:35.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T10:59:36.068 [DEBUG] [Thread-187921] [transport.py] [_log()] starting thread (client mode): 0xb0f8e890
2026-04-12T10:59:36.068 [DEBUG] [Thread-187921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:59:36.089 [DEBUG] [Thread-187921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T10:59:36.089 [INFO] [Thread-187921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T10:59:36.102 [DEBUG] [Thread-187921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:59:36.102 [DEBUG] [Thread-187921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T10:59:36.102 [DEBUG] [Thread-187921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] client lang: <none>
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] server lang: <none>
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] kex follows: False
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:59:36.103 [DEBUG] [Thread-187921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:59:36.104 [DEBUG] [Thread-187921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:59:36.104 [DEBUG] [Thread-187921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:59:36.104 [DEBUG] [Thread-187921] [transport.py] [_log()] Compression: none
2026-04-12T10:59:36.104 [DEBUG] [Thread-187921] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:59:36.122 [DEBUG] [Thread-187921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:59:36.123 [DEBUG] [Thread-187921] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:59:36.123 [DEBUG] [Thread-187921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T10:59:36.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T10:59:36.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:59:36.125 [DEBUG] [Thread-187921] [transport.py] [_log()] userauth is OK
2026-04-12T10:59:36.125 [DEBUG] [Thread-187921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:59:36.125 [DEBUG] [Thread-187921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:59:36.125 [DEBUG] [Thread-187921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T10:59:36.125 [DEBUG] [Thread-187921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:59:36.150 [INFO] [Thread-187921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:59:36.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:59:36.919 [DEBUG] [Thread-187921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:59:36.919 [DEBUG] [Thread-187921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:59:36.920 [DEBUG] [Thread-187921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T10:59:36.960 [DEBUG] [Thread-187921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:59:36.960 [DEBUG] [Thread-187921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:59:36.963 [DEBUG] [Thread-187921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:59:36.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:59:36.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T10:59:36.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T10:59:36.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T10:59:36.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:59:36.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T10:59:36.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:59:36.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:59:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T10:59:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.374415 -999.00  +12.30  11.41     90  +10.70 1 3 1 3 1   888    0 1.47 -2.13 ----- 11.6 11.4 256.2 19.3 16.2 -7.4 15.8 -6.8 15.2 -5.3 15.8 -6.9
2026-04-12T10:59:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T10:59:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T10:59:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.374415
2026-04-12T10:59:36.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T10:59:36.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T10:59:36.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T10:59:36.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T10:59:36.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T10:59:36.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:59:19', tmtdew=0.041355, humidity=99.6922, cloud=0.0, wind=15.0869, temperature=11.7713, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:59:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T10:59:36.991 [DEBUG] [Thread-187921] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:59:37.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T10:59:37.096 [DEBUG] [Thread-187924] [transport.py] [_log()] starting thread (client mode): 0xae5e5390
2026-04-12T10:59:37.096 [DEBUG] [Thread-187924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T10:59:37.111 [DEBUG] [Thread-187924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T10:59:37.111 [INFO] [Thread-187924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T10:59:37.119 [DEBUG] [Thread-187924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T10:59:37.120 [DEBUG] [Thread-187924] [transport.py] [_log()] client lang: <none>
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] server lang: <none>
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] kex follows: False
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] Compression: none
2026-04-12T10:59:37.121 [DEBUG] [Thread-187924] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T10:59:37.179 [DEBUG] [Thread-187924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T10:59:37.179 [DEBUG] [Thread-187924] [transport.py] [_log()] Switch to new keys ...
2026-04-12T10:59:37.180 [DEBUG] [Thread-187924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T10:59:37.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T10:59:37.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T10:59:37.235 [DEBUG] [Thread-187924] [transport.py] [_log()] userauth is OK
2026-04-12T10:59:37.235 [DEBUG] [Thread-187924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T10:59:37.235 [DEBUG] [Thread-187924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T10:59:37.235 [DEBUG] [Thread-187924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T10:59:37.235 [DEBUG] [Thread-187924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T10:59:37.254 [INFO] [Thread-187924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T10:59:37.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T10:59:37.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T10:59:38.104 [DEBUG] [Thread-187924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T10:59:38.104 [DEBUG] [Thread-187924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T10:59:38.154 [DEBUG] [Thread-187924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T10:59:38.154 [DEBUG] [Thread-187924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T10:59:38.162 [DEBUG] [Thread-187924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T10:59:38.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T10:59:38.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T10:59:38.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T10:59:38.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T10:59:38.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T10:59:38.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T10:59:38.195 [DEBUG] [Thread-187924] [transport.py] [_log()] EOF in transport thread
2026-04-12T10:59:47.150 [DEBUG] [Thread-187926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:00.704 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:00.705 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:02.203 [DEBUG] [Thread-187927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:08.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:00:08.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:00:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:00:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 10, 59, 55), 0.08372, 99.2419, 0.0, 13.9226, 11.7377, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:00:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 10:59:55
2026-04-12T11:00:09.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:00:09.973 [DEBUG] [Thread-187928] [transport.py] [_log()] starting thread (client mode): 0xa7939ab0
2026-04-12T11:00:09.973 [DEBUG] [Thread-187928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:00:09.993 [DEBUG] [Thread-187928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:00:09.993 [INFO] [Thread-187928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:00:09.995 [DEBUG] [Thread-187928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] client lang: <none>
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] server lang: <none>
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] kex follows: False
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] Compression: none
2026-04-12T11:00:09.996 [DEBUG] [Thread-187928] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:00:10.010 [DEBUG] [Thread-187928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:00:10.011 [DEBUG] [Thread-187928] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:00:10.012 [DEBUG] [Thread-187928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:00:10.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:00:10.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:00:10.015 [DEBUG] [Thread-187928] [transport.py] [_log()] userauth is OK
2026-04-12T11:00:10.015 [DEBUG] [Thread-187928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:00:10.015 [DEBUG] [Thread-187928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:00:10.015 [DEBUG] [Thread-187928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:00:10.015 [DEBUG] [Thread-187928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:00:10.039 [INFO] [Thread-187928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:00:10.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:00:13.626 [DEBUG] [Thread-187928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:00:13.626 [DEBUG] [Thread-187928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:00:13.627 [DEBUG] [Thread-187928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:00:13.667 [DEBUG] [Thread-187928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:00:13.667 [DEBUG] [Thread-187928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:00:13.671 [DEBUG] [Thread-187928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:00:13.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:00:13.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:00:13.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:00:13.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:00:13.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:00:13.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:00:13.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:00:13.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:00:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:00:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.374762 -999.00  +12.30  12.05     90  +10.80 1 3 1 3 1   888    0 1.45 -2.24 ----- 11.3 12.1 259.8 14.4 16.2 -7.3 15.8 -6.4 15.2 -5.1 15.8 -6.2
2026-04-12T11:00:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:00:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:00:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.374762
2026-04-12T11:00:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:00:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:00:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:00:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:00:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:00:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T10:59:55', tmtdew=0.08372, humidity=99.2419, cloud=0.0, wind=13.9226, temperature=11.7377, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T08:59:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:00:13.703 [DEBUG] [Thread-187928] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:00:13.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:00:13.804 [DEBUG] [Thread-187931] [transport.py] [_log()] starting thread (client mode): 0xb0fb7310
2026-04-12T11:00:13.804 [DEBUG] [Thread-187931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:00:13.819 [DEBUG] [Thread-187931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:00:13.820 [INFO] [Thread-187931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:00:13.832 [DEBUG] [Thread-187931] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:00:13.832 [DEBUG] [Thread-187931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:00:13.832 [DEBUG] [Thread-187931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] client lang: <none>
2026-04-12T11:00:13.833 [DEBUG] [Thread-187931] [transport.py] [_log()] server lang: <none>
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] kex follows: False
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] Compression: none
2026-04-12T11:00:13.834 [DEBUG] [Thread-187931] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:00:13.886 [DEBUG] [Thread-187931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:00:13.887 [DEBUG] [Thread-187931] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:00:13.887 [DEBUG] [Thread-187931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:00:13.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:00:13.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:00:13.942 [DEBUG] [Thread-187931] [transport.py] [_log()] userauth is OK
2026-04-12T11:00:13.942 [DEBUG] [Thread-187931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:00:13.943 [DEBUG] [Thread-187931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:00:13.943 [DEBUG] [Thread-187931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:00:13.943 [DEBUG] [Thread-187931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:00:13.962 [INFO] [Thread-187931] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:00:13.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:00:13.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:00:14.835 [DEBUG] [Thread-187931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:00:14.836 [DEBUG] [Thread-187931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:00:14.883 [DEBUG] [Thread-187931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:00:14.883 [DEBUG] [Thread-187931] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:00:14.892 [DEBUG] [Thread-187931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:00:14.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:00:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:00:14.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:00:14.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:00:14.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:00:14.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:00:14.926 [DEBUG] [Thread-187931] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:00:17.240 [DEBUG] [Thread-187933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:29.690 [DEBUG] [Thread-187934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:32.295 [DEBUG] [Thread-187935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:44.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:00:44.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:00:44.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:00:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 0, 32), 0.08629, 99.2251, 0.0, 15.7748, 11.7375, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:00:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:00:32
2026-04-12T11:00:46.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:00:46.768 [DEBUG] [Thread-187936] [transport.py] [_log()] starting thread (client mode): 0xa79c4790
2026-04-12T11:00:46.768 [DEBUG] [Thread-187936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:00:46.789 [DEBUG] [Thread-187936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:00:46.789 [INFO] [Thread-187936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] client lang: <none>
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] server lang: <none>
2026-04-12T11:00:46.793 [DEBUG] [Thread-187936] [transport.py] [_log()] kex follows: False
2026-04-12T11:00:46.794 [DEBUG] [Thread-187936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:00:46.794 [DEBUG] [Thread-187936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:00:46.794 [DEBUG] [Thread-187936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:00:46.794 [DEBUG] [Thread-187936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:00:46.794 [DEBUG] [Thread-187936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:00:46.794 [DEBUG] [Thread-187936] [transport.py] [_log()] Compression: none
2026-04-12T11:00:46.794 [DEBUG] [Thread-187936] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:00:46.811 [DEBUG] [Thread-187936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:00:46.812 [DEBUG] [Thread-187936] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:00:46.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:00:46.813 [DEBUG] [Thread-187936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:00:46.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:00:46.815 [DEBUG] [Thread-187936] [transport.py] [_log()] userauth is OK
2026-04-12T11:00:46.815 [DEBUG] [Thread-187936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:00:46.816 [DEBUG] [Thread-187936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:00:46.816 [DEBUG] [Thread-187936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:00:46.816 [DEBUG] [Thread-187936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:00:46.852 [INFO] [Thread-187936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:00:46.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:00:47.331 [DEBUG] [Thread-187938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:00:47.658 [DEBUG] [Thread-187936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:00:47.659 [DEBUG] [Thread-187936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:00:47.659 [DEBUG] [Thread-187936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:00:47.699 [DEBUG] [Thread-187936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:00:47.699 [DEBUG] [Thread-187936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:00:47.702 [DEBUG] [Thread-187936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:00:47.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:00:47.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:00:47.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:00:47.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:00:47.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:00:47.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:00:47.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:00:47.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:00:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:00:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.375109 -999.00  +12.20  14.01     90  +10.60 1 3 1 3 1   888    0 1.48 -2.59 ----- 15.6 14.0 257.4 16.4 16.2 -6.8 15.8 -6.1 15.2 -5.0 15.8 -5.7
2026-04-12T11:00:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:00:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:00:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.375109
2026-04-12T11:00:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:00:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:00:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:00:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:00:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:00:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:00:32', tmtdew=0.08629, humidity=99.2251, cloud=0.0, wind=15.7748, temperature=11.7375, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:00:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:00:47.728 [DEBUG] [Thread-187936] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:00:47.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:01:00.847 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:01:00.849 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:01:02.368 [DEBUG] [Thread-187940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:01:17.432 [DEBUG] [Thread-187941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:01:29.723 [DEBUG] [Thread-187942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:01:32.469 [DEBUG] [Thread-187943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:01:47.506 [DEBUG] [Thread-187944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:02:00.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:02:00.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:02:02.541 [DEBUG] [Thread-187945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:02:17.578 [DEBUG] [Thread-187946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:02:29.762 [DEBUG] [Thread-187947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:02:32.614 [DEBUG] [Thread-187948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:02:47.650 [DEBUG] [Thread-187949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:03:01.143 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:03:01.145 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:03:02.271 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T11:03:02.686 [DEBUG] [Thread-187950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:03:17.721 [DEBUG] [Thread-187951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:03:29.799 [DEBUG] [Thread-187952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:03:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:03:32.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:03:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:03:32.759 [DEBUG] [Thread-187953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:03:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 2, 54), 0.09327, 99.3156, 0.0, 16.8322, 12.2753, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:03:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:02:54
2026-04-12T11:03:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:03:34.299 [DEBUG] [Thread-187954] [transport.py] [_log()] starting thread (client mode): 0xa795d7e0
2026-04-12T11:03:34.299 [DEBUG] [Thread-187954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:03:34.321 [DEBUG] [Thread-187954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:03:34.321 [INFO] [Thread-187954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:03:34.324 [DEBUG] [Thread-187954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:03:34.324 [DEBUG] [Thread-187954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:03:34.324 [DEBUG] [Thread-187954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:03:34.324 [DEBUG] [Thread-187954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:03:34.324 [DEBUG] [Thread-187954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:03:34.324 [DEBUG] [Thread-187954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] client lang: <none>
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] server lang: <none>
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] kex follows: False
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] Compression: none
2026-04-12T11:03:34.325 [DEBUG] [Thread-187954] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:03:34.340 [DEBUG] [Thread-187954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:03:34.341 [DEBUG] [Thread-187954] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:03:34.341 [DEBUG] [Thread-187954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:03:34.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:03:34.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:03:34.343 [DEBUG] [Thread-187954] [transport.py] [_log()] userauth is OK
2026-04-12T11:03:34.344 [DEBUG] [Thread-187954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:03:34.344 [DEBUG] [Thread-187954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:03:34.344 [DEBUG] [Thread-187954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:03:34.344 [DEBUG] [Thread-187954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:03:34.378 [INFO] [Thread-187954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:03:34.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:03:35.188 [DEBUG] [Thread-187954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:03:35.188 [DEBUG] [Thread-187954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:03:35.189 [DEBUG] [Thread-187954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:03:35.229 [DEBUG] [Thread-187954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:03:35.229 [DEBUG] [Thread-187954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:03:35.233 [DEBUG] [Thread-187954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:03:35.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:03:35.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:03:35.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:03:35.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:03:35.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:03:35.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:03:35.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:03:35.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:03:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:03:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.377193 -999.00  +12.20  14.05     91  +10.80 1 3 1 3 1   888    0 1.31 -7.38 ----- 13.2 14.1 270.4 16.7 16.0 -5.5 15.6 -4.7 15.0 -3.9 15.5 -5.2
2026-04-12T11:03:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:03:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:03:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.377193
2026-04-12T11:03:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:03:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:03:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:03:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:03:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:03:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:02:54', tmtdew=0.09327, humidity=99.3156, cloud=0.0, wind=16.8322, temperature=12.2753, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:03:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:03:35.260 [DEBUG] [Thread-187954] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:03:35.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:03:35.376 [DEBUG] [Thread-187957] [transport.py] [_log()] starting thread (client mode): 0xa795cdc0
2026-04-12T11:03:35.377 [DEBUG] [Thread-187957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:03:35.413 [DEBUG] [Thread-187957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:03:35.414 [INFO] [Thread-187957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:03:35.444 [DEBUG] [Thread-187957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:03:35.444 [DEBUG] [Thread-187957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] client lang: <none>
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] server lang: <none>
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] kex follows: False
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:03:35.445 [DEBUG] [Thread-187957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:03:35.446 [DEBUG] [Thread-187957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:03:35.446 [DEBUG] [Thread-187957] [transport.py] [_log()] Compression: none
2026-04-12T11:03:35.446 [DEBUG] [Thread-187957] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:03:35.526 [DEBUG] [Thread-187957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:03:35.526 [DEBUG] [Thread-187957] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:03:35.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:03:35.528 [DEBUG] [Thread-187957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:03:35.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:03:35.617 [DEBUG] [Thread-187957] [transport.py] [_log()] userauth is OK
2026-04-12T11:03:35.618 [DEBUG] [Thread-187957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:03:35.618 [DEBUG] [Thread-187957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:03:35.618 [DEBUG] [Thread-187957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:03:35.618 [DEBUG] [Thread-187957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:03:35.642 [INFO] [Thread-187957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:03:35.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:03:35.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:03:36.515 [DEBUG] [Thread-187957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:03:36.515 [DEBUG] [Thread-187957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:03:36.582 [DEBUG] [Thread-187957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:03:36.582 [DEBUG] [Thread-187957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:03:36.611 [DEBUG] [Thread-187957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:03:36.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:03:36.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:03:36.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:03:36.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:03:36.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:03:36.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:03:36.724 [DEBUG] [Thread-187957] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:03:47.797 [DEBUG] [Thread-187959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:04:01.297 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:04:01.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:04:02.846 [DEBUG] [Thread-187960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:04:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:04:06.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:04:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:04:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 3, 29), 0.10425, 99.608, 0.0, 17.7336, 11.6877, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:04:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:03:29
2026-04-12T11:04:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:04:08.622 [DEBUG] [Thread-187961] [transport.py] [_log()] starting thread (client mode): 0xa795ce80
2026-04-12T11:04:08.622 [DEBUG] [Thread-187961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:04:08.642 [DEBUG] [Thread-187961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:04:08.642 [INFO] [Thread-187961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:04:08.643 [DEBUG] [Thread-187961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:04:08.643 [DEBUG] [Thread-187961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:04:08.643 [DEBUG] [Thread-187961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] client lang: <none>
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] server lang: <none>
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] kex follows: False
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] Compression: none
2026-04-12T11:04:08.644 [DEBUG] [Thread-187961] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:04:08.652 [DEBUG] [Thread-187961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:04:08.652 [DEBUG] [Thread-187961] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:04:08.653 [DEBUG] [Thread-187961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:04:08.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:04:08.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:04:08.654 [DEBUG] [Thread-187961] [transport.py] [_log()] userauth is OK
2026-04-12T11:04:08.655 [DEBUG] [Thread-187961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:04:08.655 [DEBUG] [Thread-187961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:04:08.655 [DEBUG] [Thread-187961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:04:08.655 [DEBUG] [Thread-187961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:04:08.678 [INFO] [Thread-187961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:04:08.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:04:09.460 [DEBUG] [Thread-187961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:04:09.461 [DEBUG] [Thread-187961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:04:09.461 [DEBUG] [Thread-187961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:04:09.501 [DEBUG] [Thread-187961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:04:09.502 [DEBUG] [Thread-187961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:04:09.505 [DEBUG] [Thread-187961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:04:09.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:04:09.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:04:09.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:04:09.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:04:09.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:04:09.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:04:09.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.377540 -999.00  +12.20  12.26     91  +10.80 1 3 1 3 1   888    0 1.27 -9.07 ----- 16.6 12.3 263.6 17.5 15.9 -5.5 15.6 -4.6 15.0 -4.0 15.5 -4.5
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.377540
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:04:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:03:29', tmtdew=0.10425, humidity=99.608, cloud=0.0, wind=17.7336, temperature=11.6877, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:03:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:04:09.528 [DEBUG] [Thread-187961] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:04:09.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:04:17.882 [DEBUG] [Thread-187964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:04:29.856 [DEBUG] [Thread-187965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:04:32.930 [DEBUG] [Thread-187966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:04:47.968 [DEBUG] [Thread-187967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:05:01.515 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:05:01.516 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:05:03.001 [DEBUG] [Thread-187968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:05:18.037 [DEBUG] [Thread-187969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:05:29.902 [DEBUG] [Thread-187970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:05:33.077 [DEBUG] [Thread-187971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:05:48.114 [DEBUG] [Thread-187972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:01.698 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:01.699 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:03.151 [DEBUG] [Thread-187973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:18.187 [DEBUG] [Thread-187974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:22.975 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T11:06:29.936 [DEBUG] [Thread-187975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:33.226 [DEBUG] [Thread-187976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:48.266 [DEBUG] [Thread-187977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:06:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:06:52.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:06:52.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:06:54.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 6, 27), 0.067085, 99.5242, 0.0, 16.2871, 11.4374, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:06:54.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:06:27
2026-04-12T11:06:54.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:06:54.830 [DEBUG] [Thread-187978] [transport.py] [_log()] starting thread (client mode): 0xa795e950
2026-04-12T11:06:54.830 [DEBUG] [Thread-187978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:06:54.849 [DEBUG] [Thread-187978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:06:54.849 [INFO] [Thread-187978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] client lang: <none>
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] server lang: <none>
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] kex follows: False
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] Compression: none
2026-04-12T11:06:54.852 [DEBUG] [Thread-187978] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:06:54.869 [DEBUG] [Thread-187978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:06:54.870 [DEBUG] [Thread-187978] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:06:54.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:06:54.871 [DEBUG] [Thread-187978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:06:54.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:06:54.873 [DEBUG] [Thread-187978] [transport.py] [_log()] userauth is OK
2026-04-12T11:06:54.873 [DEBUG] [Thread-187978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:06:54.874 [DEBUG] [Thread-187978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:06:54.874 [DEBUG] [Thread-187978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:06:54.874 [DEBUG] [Thread-187978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:06:54.897 [INFO] [Thread-187978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:06:54.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:06:55.651 [DEBUG] [Thread-187978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:06:55.651 [DEBUG] [Thread-187978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:06:55.652 [DEBUG] [Thread-187978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:06:55.692 [DEBUG] [Thread-187978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:06:55.692 [DEBUG] [Thread-187978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:06:55.696 [DEBUG] [Thread-187978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:06:55.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:06:55.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:06:55.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:06:55.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:06:55.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:06:55.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:06:55.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:06:55.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:06:55.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:06:55.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.379276 -999.00  +12.00  17.67     91  +10.60 1 3 1 3 1   888    0 1.15 -11.36 ----- 14.5 17.7 266.4 20.4 15.7 -5.2 15.3 -4.4 14.7 -3.7 15.3 -4.6
2026-04-12T11:06:55.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:06:55.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:06:55.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.379276
2026-04-12T11:06:55.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:06:55.722 [DEBUG] [Thread-187978] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:06:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:06:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:06:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:06:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:06:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:06:27', tmtdew=0.067085, humidity=99.5242, cloud=0.0, wind=16.2871, temperature=11.4374, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:06:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:06:55.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:06:55.824 [DEBUG] [Thread-187981] [transport.py] [_log()] starting thread (client mode): 0xa795faf0
2026-04-12T11:06:55.824 [DEBUG] [Thread-187981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:06:55.846 [DEBUG] [Thread-187981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:06:55.847 [INFO] [Thread-187981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:06:55.862 [DEBUG] [Thread-187981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:06:55.862 [DEBUG] [Thread-187981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:06:55.862 [DEBUG] [Thread-187981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:06:55.862 [DEBUG] [Thread-187981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] client lang: <none>
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] server lang: <none>
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] kex follows: False
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] Compression: none
2026-04-12T11:06:55.863 [DEBUG] [Thread-187981] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:06:55.929 [DEBUG] [Thread-187981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:06:55.929 [DEBUG] [Thread-187981] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:06:55.930 [DEBUG] [Thread-187981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:06:55.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:06:55.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:06:55.995 [DEBUG] [Thread-187981] [transport.py] [_log()] userauth is OK
2026-04-12T11:06:55.995 [DEBUG] [Thread-187981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:06:55.996 [DEBUG] [Thread-187981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:06:55.996 [DEBUG] [Thread-187981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:06:55.996 [DEBUG] [Thread-187981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:06:56.024 [INFO] [Thread-187981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:06:56.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:06:56.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:06:56.850 [DEBUG] [Thread-187981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:06:56.850 [DEBUG] [Thread-187981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:06:56.900 [DEBUG] [Thread-187981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:06:56.900 [DEBUG] [Thread-187981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:06:56.911 [DEBUG] [Thread-187981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:06:56.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:06: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')
2026-04-12T11:06:56.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:06:56.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:06:56.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:06:56.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:06:56.956 [DEBUG] [Thread-187981] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:07:01.850 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:07:01.851 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:07:03.303 [DEBUG] [Thread-187983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:07:18.355 [DEBUG] [Thread-187984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:07:26.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:07:26.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:07:26.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:07:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 7, 2), 0.06709, 99.5242, 0.0, 19.7446, 11.4539, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:07:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:07:02
2026-04-12T11:07:28.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:07:28.782 [DEBUG] [Thread-187985] [transport.py] [_log()] starting thread (client mode): 0xa795e860
2026-04-12T11:07:28.783 [DEBUG] [Thread-187985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:07:28.802 [DEBUG] [Thread-187985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:07:28.802 [INFO] [Thread-187985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] client lang: <none>
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] server lang: <none>
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] kex follows: False
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] Compression: none
2026-04-12T11:07:28.806 [DEBUG] [Thread-187985] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:07:28.824 [DEBUG] [Thread-187985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:07:28.824 [DEBUG] [Thread-187985] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:07:28.825 [DEBUG] [Thread-187985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:07:28.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:07:28.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:07:28.826 [DEBUG] [Thread-187985] [transport.py] [_log()] userauth is OK
2026-04-12T11:07:28.826 [DEBUG] [Thread-187985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:07:28.826 [DEBUG] [Thread-187985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:07:28.826 [DEBUG] [Thread-187985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:07:28.826 [DEBUG] [Thread-187985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:07:28.836 [INFO] [Thread-187985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:07:28.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:07:29.632 [DEBUG] [Thread-187985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:07:29.633 [DEBUG] [Thread-187985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:07:29.633 [DEBUG] [Thread-187985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:07:29.674 [DEBUG] [Thread-187985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:07:29.674 [DEBUG] [Thread-187985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:07:29.678 [DEBUG] [Thread-187985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:07:29.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:07:29.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:07:29.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:07:29.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:07:29.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:07:29.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:07:29.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:07:29.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:07:29.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:07:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.379623 -999.00  +12.00   9.04     91  +10.70 1 3 1 3 1   888    0 1.23 -10.75 ----- 9.3 9.0 271.1 19.8 15.6 -5.1 15.3 -4.2 14.6 -3.6 15.2 -4.5
2026-04-12T11:07:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:07:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:07:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.379623
2026-04-12T11:07:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:07:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:07:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:07:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:07:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:07:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:07:02', tmtdew=0.06709, humidity=99.5242, cloud=0.0, wind=19.7446, temperature=11.4539, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:06:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:07:29.708 [DEBUG] [Thread-187985] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:07:29.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:07:29.810 [DEBUG] [Thread-187988] [transport.py] [_log()] starting thread (client mode): 0xae562530
2026-04-12T11:07:29.810 [DEBUG] [Thread-187988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:07:29.826 [DEBUG] [Thread-187988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:07:29.826 [INFO] [Thread-187988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:07:29.836 [DEBUG] [Thread-187988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] client lang: <none>
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] server lang: <none>
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] kex follows: False
2026-04-12T11:07:29.837 [DEBUG] [Thread-187988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:07:29.838 [DEBUG] [Thread-187988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:07:29.838 [DEBUG] [Thread-187988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:07:29.838 [DEBUG] [Thread-187988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:07:29.838 [DEBUG] [Thread-187988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:07:29.838 [DEBUG] [Thread-187988] [transport.py] [_log()] Compression: none
2026-04-12T11:07:29.838 [DEBUG] [Thread-187988] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:07:29.900 [DEBUG] [Thread-187988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:07:29.901 [DEBUG] [Thread-187988] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:07:29.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:07:29.902 [DEBUG] [Thread-187988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:07:29.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:07:29.958 [DEBUG] [Thread-187988] [transport.py] [_log()] userauth is OK
2026-04-12T11:07:29.959 [DEBUG] [Thread-187988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:07:29.959 [DEBUG] [Thread-187988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:07:29.959 [DEBUG] [Thread-187988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:07:29.959 [DEBUG] [Thread-187988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:07:29.977 [INFO] [Thread-187988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:07:29.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:07:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:07:29.996 [DEBUG] [Thread-187990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:07:30.857 [DEBUG] [Thread-187988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:07:30.858 [DEBUG] [Thread-187988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:07:30.910 [DEBUG] [Thread-187988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:07:30.911 [DEBUG] [Thread-187988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:07:30.925 [DEBUG] [Thread-187988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:07:30.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:07:30.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:07:30.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:07:30.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:07:30.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:07:30.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:07:30.992 [DEBUG] [Thread-187988] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:07:33.394 [DEBUG] [Thread-187991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:07:48.444 [DEBUG] [Thread-187992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:08:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:08:01.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:08:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:08:02.003 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:08:02.005 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:08:02.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 7, 37), 0.12915, 99.0813, 0.0, 17.82, 12.2077, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:08:02.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:07:37
2026-04-12T11:08:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:08:02.865 [DEBUG] [Thread-187993] [transport.py] [_log()] starting thread (client mode): 0xa79c5930
2026-04-12T11:08:02.865 [DEBUG] [Thread-187993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:08:02.878 [DEBUG] [Thread-187993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:08:02.878 [INFO] [Thread-187993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] client lang: <none>
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] server lang: <none>
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] kex follows: False
2026-04-12T11:08:02.880 [DEBUG] [Thread-187993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:08:02.881 [DEBUG] [Thread-187993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:08:02.881 [DEBUG] [Thread-187993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:08:02.881 [DEBUG] [Thread-187993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:08:02.881 [DEBUG] [Thread-187993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:08:02.881 [DEBUG] [Thread-187993] [transport.py] [_log()] Compression: none
2026-04-12T11:08:02.881 [DEBUG] [Thread-187993] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:08:02.898 [DEBUG] [Thread-187993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:08:02.898 [DEBUG] [Thread-187993] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:08:02.899 [DEBUG] [Thread-187993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:08:02.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:08:02.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:08:02.900 [DEBUG] [Thread-187993] [transport.py] [_log()] userauth is OK
2026-04-12T11:08:02.900 [DEBUG] [Thread-187993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:08:02.900 [DEBUG] [Thread-187993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:08:02.900 [DEBUG] [Thread-187993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:08:02.900 [DEBUG] [Thread-187993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:08:02.924 [INFO] [Thread-187993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:08:02.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:08:03.486 [DEBUG] [Thread-187995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:08:03.680 [DEBUG] [Thread-187993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:08:03.680 [DEBUG] [Thread-187993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:08:03.681 [DEBUG] [Thread-187993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:08:03.721 [DEBUG] [Thread-187993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:08:03.721 [DEBUG] [Thread-187993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:08:03.724 [DEBUG] [Thread-187993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:08:03.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:08:03.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:08:03.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:08:03.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:08:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:08:03.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:08:03.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:08:03.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:08:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:08:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.379971 -999.00  +12.10  11.23     91  +10.70 1 3 1 3 1   888    0 1.21 -10.52 ----- 10.1 11.2 262.2 15.8 15.7 -4.9 15.2 -4.0 14.6 -3.6 15.2 -4.1
2026-04-12T11:08:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:08:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:08:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.379971
2026-04-12T11:08:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:08:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:08:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:08:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:08:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:08:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:07:37', tmtdew=0.12915, humidity=99.0813, cloud=0.0, wind=17.82, temperature=12.2077, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:07:09.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:08:03.752 [DEBUG] [Thread-187993] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:08:03.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:08:03.859 [DEBUG] [Thread-187997] [transport.py] [_log()] starting thread (client mode): 0xa79c5390
2026-04-12T11:08:03.860 [DEBUG] [Thread-187997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:08:03.888 [DEBUG] [Thread-187997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:08:03.889 [INFO] [Thread-187997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:08:03.911 [DEBUG] [Thread-187997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] client lang: <none>
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] server lang: <none>
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] kex follows: False
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:08:03.912 [DEBUG] [Thread-187997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:08:03.913 [DEBUG] [Thread-187997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:08:03.913 [DEBUG] [Thread-187997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:08:03.913 [DEBUG] [Thread-187997] [transport.py] [_log()] Compression: none
2026-04-12T11:08:03.913 [DEBUG] [Thread-187997] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:08:03.987 [DEBUG] [Thread-187997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:08:03.988 [DEBUG] [Thread-187997] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:08:03.988 [DEBUG] [Thread-187997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:08:03.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:08:03.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:08:04.074 [DEBUG] [Thread-187997] [transport.py] [_log()] userauth is OK
2026-04-12T11:08:04.075 [DEBUG] [Thread-187997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:08:04.075 [DEBUG] [Thread-187997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:08:04.075 [DEBUG] [Thread-187997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:08:04.076 [DEBUG] [Thread-187997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:08:04.109 [INFO] [Thread-187997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:08:04.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:08:04.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:08:04.964 [DEBUG] [Thread-187997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:08:04.964 [DEBUG] [Thread-187997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:08:05.028 [DEBUG] [Thread-187997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:08:05.028 [DEBUG] [Thread-187997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:08:05.054 [DEBUG] [Thread-187997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:08:05.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:08:05.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:08:05.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:08:05.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:08:05.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:08:05.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:08:05.154 [DEBUG] [Thread-187997] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:08:18.524 [DEBUG] [Thread-187999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:08:30.045 [DEBUG] [Thread-188000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:08:33.585 [DEBUG] [Thread-188001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:08:35.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:08:35.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:08:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:08:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 8, 13), 0.114575, 99.5406, 0.0, 15.7043, 11.6873, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:08:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:08:13
2026-04-12T11:08:36.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:08:37.086 [DEBUG] [Thread-188002] [transport.py] [_log()] starting thread (client mode): 0xae51ae30
2026-04-12T11:08:37.086 [DEBUG] [Thread-188002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:08:37.100 [DEBUG] [Thread-188002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:08:37.100 [INFO] [Thread-188002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:08:37.103 [DEBUG] [Thread-188002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] client lang: <none>
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] server lang: <none>
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] kex follows: False
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] Compression: none
2026-04-12T11:08:37.104 [DEBUG] [Thread-188002] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:08:37.123 [DEBUG] [Thread-188002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:08:37.123 [DEBUG] [Thread-188002] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:08:37.123 [DEBUG] [Thread-188002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:08:37.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:08:37.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:08:37.125 [DEBUG] [Thread-188002] [transport.py] [_log()] userauth is OK
2026-04-12T11:08:37.125 [DEBUG] [Thread-188002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:08:37.125 [DEBUG] [Thread-188002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:08:37.125 [DEBUG] [Thread-188002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:08:37.125 [DEBUG] [Thread-188002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:08:37.143 [INFO] [Thread-188002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:08:37.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:08:37.957 [DEBUG] [Thread-188002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:08:37.957 [DEBUG] [Thread-188002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:08:37.957 [DEBUG] [Thread-188002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:08:37.999 [DEBUG] [Thread-188002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:08:37.999 [DEBUG] [Thread-188002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:08:38.001 [DEBUG] [Thread-188002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:08:38.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:08:38.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:08:38.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:08:38.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:08:38.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:08:38.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:08:38.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:08:38.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:08:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:08:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.380665 -999.00  +12.30   7.11     91  +10.90 1 3 1 3 1   888    0 1.22 -10.05 ----- 8.3 7.1 268.4 12.5 15.7 -4.4 15.3 -3.7 14.8 -4.3 15.2 -4.0
2026-04-12T11:08:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:08:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:08:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.380665
2026-04-12T11:08:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:08:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:08:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:08:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:08:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:08:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:08:13', tmtdew=0.114575, humidity=99.5406, cloud=0.0, wind=15.7043, temperature=11.6873, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:08:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:08:38.027 [DEBUG] [Thread-188002] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:08:38.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:08:38.149 [DEBUG] [Thread-188005] [transport.py] [_log()] starting thread (client mode): 0xae5189a0
2026-04-12T11:08:38.150 [DEBUG] [Thread-188005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:08:38.189 [DEBUG] [Thread-188005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:08:38.189 [INFO] [Thread-188005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:08:38.221 [DEBUG] [Thread-188005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:08:38.221 [DEBUG] [Thread-188005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:08:38.221 [DEBUG] [Thread-188005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] client lang: <none>
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] server lang: <none>
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] kex follows: False
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:08:38.222 [DEBUG] [Thread-188005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:08:38.223 [DEBUG] [Thread-188005] [transport.py] [_log()] Compression: none
2026-04-12T11:08:38.223 [DEBUG] [Thread-188005] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:08:38.308 [DEBUG] [Thread-188005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:08:38.309 [DEBUG] [Thread-188005] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:08:38.310 [DEBUG] [Thread-188005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:08:38.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:08:38.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:08:38.411 [DEBUG] [Thread-188005] [transport.py] [_log()] userauth is OK
2026-04-12T11:08:38.412 [DEBUG] [Thread-188005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:08:38.412 [DEBUG] [Thread-188005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:08:38.412 [DEBUG] [Thread-188005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:08:38.412 [DEBUG] [Thread-188005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:08:38.453 [INFO] [Thread-188005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:08:38.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:08:38.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:08:39.309 [DEBUG] [Thread-188005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:08:39.309 [DEBUG] [Thread-188005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:08:39.386 [DEBUG] [Thread-188005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:08:39.386 [DEBUG] [Thread-188005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:08:39.422 [DEBUG] [Thread-188005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:08:39.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:08:39.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:08:39.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:08:39.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:08:39.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:08:39.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:08:39.568 [DEBUG] [Thread-188005] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:08:48.622 [DEBUG] [Thread-188007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:09:02.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:09:02.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:09:03.678 [DEBUG] [Thread-188008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:09:09.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:09:09.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:09:09.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:09:10.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 8, 48), 0.13425, 99.0478, 0.0, 18.6314, 12.0748, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:09:10.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:08:48
2026-04-12T11:09:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:09:11.441 [DEBUG] [Thread-188009] [transport.py] [_log()] starting thread (client mode): 0xa795e890
2026-04-12T11:09:11.441 [DEBUG] [Thread-188009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:09:11.461 [DEBUG] [Thread-188009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:09:11.461 [INFO] [Thread-188009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:09:11.464 [DEBUG] [Thread-188009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] client lang: <none>
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] server lang: <none>
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] kex follows: False
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] Compression: none
2026-04-12T11:09:11.465 [DEBUG] [Thread-188009] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:09:11.484 [DEBUG] [Thread-188009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:09:11.484 [DEBUG] [Thread-188009] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:09:11.485 [DEBUG] [Thread-188009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:09:11.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:09:11.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:09:11.487 [DEBUG] [Thread-188009] [transport.py] [_log()] userauth is OK
2026-04-12T11:09:11.487 [DEBUG] [Thread-188009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:09:11.487 [DEBUG] [Thread-188009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:09:11.487 [DEBUG] [Thread-188009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:09:11.487 [DEBUG] [Thread-188009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:09:11.509 [INFO] [Thread-188009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:09:11.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:09:12.293 [DEBUG] [Thread-188009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:09:12.294 [DEBUG] [Thread-188009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:09:12.294 [DEBUG] [Thread-188009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:09:12.335 [DEBUG] [Thread-188009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:09:12.335 [DEBUG] [Thread-188009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:09:12.339 [DEBUG] [Thread-188009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:09:12.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:09:12.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:09:12.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:09:12.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:09:12.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:09:12.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:09:12.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.381012 -999.00  +12.30  11.23     91  +11.00 1 3 1 3 1   888    0 1.21 -10.02 ----- 10.3 11.2 268.4 12.9 15.7 -4.5 15.3 -3.9 14.8 -3.5 15.3 -4.1
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.381012
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:09:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:08:48', tmtdew=0.13425, humidity=99.0478, cloud=0.0, wind=18.6314, temperature=12.0748, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:08:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:09:12.359 [DEBUG] [Thread-188009] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:09:12.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:09:12.468 [DEBUG] [Thread-188012] [transport.py] [_log()] starting thread (client mode): 0xa795d600
2026-04-12T11:09:12.469 [DEBUG] [Thread-188012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:09:12.514 [DEBUG] [Thread-188012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:09:12.514 [INFO] [Thread-188012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:09:12.552 [DEBUG] [Thread-188012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] client lang: <none>
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] server lang: <none>
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] kex follows: False
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:09:12.553 [DEBUG] [Thread-188012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:09:12.554 [DEBUG] [Thread-188012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:09:12.554 [DEBUG] [Thread-188012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:09:12.554 [DEBUG] [Thread-188012] [transport.py] [_log()] Compression: none
2026-04-12T11:09:12.554 [DEBUG] [Thread-188012] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:09:12.639 [DEBUG] [Thread-188012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:09:12.639 [DEBUG] [Thread-188012] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:09:12.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:09:12.640 [DEBUG] [Thread-188012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:09:12.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:09:12.752 [DEBUG] [Thread-188012] [transport.py] [_log()] userauth is OK
2026-04-12T11:09:12.753 [DEBUG] [Thread-188012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:09:12.753 [DEBUG] [Thread-188012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:09:12.753 [DEBUG] [Thread-188012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:09:12.753 [DEBUG] [Thread-188012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:09:12.806 [INFO] [Thread-188012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:09:12.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:09:12.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:09:13.631 [DEBUG] [Thread-188012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:09:13.632 [DEBUG] [Thread-188012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:09:13.709 [DEBUG] [Thread-188012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:09:13.709 [DEBUG] [Thread-188012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:09:13.749 [DEBUG] [Thread-188012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:09:13.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:09: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')
2026-04-12T11:09:13.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:09:13.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:09:13.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:09:13.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:09:13.904 [DEBUG] [Thread-188012] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:09:18.718 [DEBUG] [Thread-188014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:09:30.099 [DEBUG] [Thread-188015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:09:33.780 [DEBUG] [Thread-188016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:09:43.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:09:43.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:09:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:09:45.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 9, 24), 0.07221, 99.4908, 0.0, 17.8916, 11.554, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:09:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:09:24
2026-04-12T11:09:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:09:45.696 [DEBUG] [Thread-188017] [transport.py] [_log()] starting thread (client mode): 0xa79c6290
2026-04-12T11:09:45.696 [DEBUG] [Thread-188017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:09:45.716 [DEBUG] [Thread-188017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:09:45.716 [INFO] [Thread-188017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] client lang: <none>
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] server lang: <none>
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] kex follows: False
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] Compression: none
2026-04-12T11:09:45.719 [DEBUG] [Thread-188017] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:09:45.738 [DEBUG] [Thread-188017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:09:45.738 [DEBUG] [Thread-188017] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:09:45.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:09:45.739 [DEBUG] [Thread-188017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:09:45.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:09:45.741 [DEBUG] [Thread-188017] [transport.py] [_log()] userauth is OK
2026-04-12T11:09:45.741 [DEBUG] [Thread-188017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:09:45.742 [DEBUG] [Thread-188017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:09:45.742 [DEBUG] [Thread-188017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:09:45.742 [DEBUG] [Thread-188017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:09:45.766 [INFO] [Thread-188017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:09:45.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:09:46.525 [DEBUG] [Thread-188017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:09:46.526 [DEBUG] [Thread-188017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:09:46.526 [DEBUG] [Thread-188017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:09:46.567 [DEBUG] [Thread-188017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:09:46.567 [DEBUG] [Thread-188017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:09:46.571 [DEBUG] [Thread-188017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:09:46.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:09:46.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:09:46.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:09:46.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:09:46.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:09:46.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:09:46.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:09:46.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:09:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:09:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.381359 -999.00  +12.30   9.01     91  +10.90 1 3 1 3 1   888    0 1.16 -10.94 ----- 14.7 9.0 271.2 14.8 15.7 -4.1 15.3 -3.7 14.8 -3.5 15.4 -3.5
2026-04-12T11:09:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:09:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:09:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.381359
2026-04-12T11:09:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:09:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:09:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:09:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:09:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:09:46.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:09:24', tmtdew=0.07221, humidity=99.4908, cloud=0.0, wind=17.8916, temperature=11.554, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:09:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:09:46.597 [DEBUG] [Thread-188017] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:09:46.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:09:46.693 [DEBUG] [Thread-188020] [transport.py] [_log()] starting thread (client mode): 0xa79c7070
2026-04-12T11:09:46.693 [DEBUG] [Thread-188020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:09:46.711 [DEBUG] [Thread-188020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:09:46.711 [INFO] [Thread-188020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:09:46.721 [DEBUG] [Thread-188020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:09:46.721 [DEBUG] [Thread-188020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:09:46.721 [DEBUG] [Thread-188020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:09:46.721 [DEBUG] [Thread-188020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:46.721 [DEBUG] [Thread-188020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:09:46.721 [DEBUG] [Thread-188020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] client lang: <none>
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] server lang: <none>
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] kex follows: False
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] Compression: none
2026-04-12T11:09:46.722 [DEBUG] [Thread-188020] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:09:46.781 [DEBUG] [Thread-188020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:09:46.782 [DEBUG] [Thread-188020] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:09:46.782 [DEBUG] [Thread-188020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:09:46.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:09:46.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:09:46.846 [DEBUG] [Thread-188020] [transport.py] [_log()] userauth is OK
2026-04-12T11:09:46.846 [DEBUG] [Thread-188020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:09:46.846 [DEBUG] [Thread-188020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:09:46.847 [DEBUG] [Thread-188020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:09:46.847 [DEBUG] [Thread-188020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:09:46.869 [INFO] [Thread-188020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:09:46.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:09:46.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:09:47.687 [DEBUG] [Thread-188020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:09:47.688 [DEBUG] [Thread-188020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:09:47.738 [DEBUG] [Thread-188020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:09:47.739 [DEBUG] [Thread-188020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:09:47.750 [DEBUG] [Thread-188020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:09:47.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:09:47.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:09:47.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:09:47.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:09:47.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:09:47.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:09:47.797 [DEBUG] [Thread-188020] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:09:48.818 [DEBUG] [Thread-188022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:02.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:02.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:03.872 [DEBUG] [Thread-188023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:17.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:10:17.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:10:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:10:18.910 [DEBUG] [Thread-188024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 9, 59), 0.117155, 99.5238, 0.0, 17.9982, 11.6537, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:10:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:09:59
2026-04-12T11:10:19.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:10:19.604 [DEBUG] [Thread-188025] [transport.py] [_log()] starting thread (client mode): 0xa79c7820
2026-04-12T11:10:19.604 [DEBUG] [Thread-188025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:10:19.625 [DEBUG] [Thread-188025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:10:19.625 [INFO] [Thread-188025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] client lang: <none>
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] server lang: <none>
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] kex follows: False
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:10:19.628 [DEBUG] [Thread-188025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:10:19.629 [DEBUG] [Thread-188025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:10:19.629 [DEBUG] [Thread-188025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:10:19.629 [DEBUG] [Thread-188025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:10:19.629 [DEBUG] [Thread-188025] [transport.py] [_log()] Compression: none
2026-04-12T11:10:19.629 [DEBUG] [Thread-188025] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:10:19.646 [DEBUG] [Thread-188025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:10:19.646 [DEBUG] [Thread-188025] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:10:19.647 [DEBUG] [Thread-188025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:10:19.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:10:19.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:10:19.649 [DEBUG] [Thread-188025] [transport.py] [_log()] userauth is OK
2026-04-12T11:10:19.649 [DEBUG] [Thread-188025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:10:19.649 [DEBUG] [Thread-188025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:10:19.649 [DEBUG] [Thread-188025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:10:19.649 [DEBUG] [Thread-188025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:10:19.684 [INFO] [Thread-188025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:10:19.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:10:20.885 [DEBUG] [Thread-188025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:10:20.885 [DEBUG] [Thread-188025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:10:20.885 [DEBUG] [Thread-188025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:10:20.926 [DEBUG] [Thread-188025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:10:20.926 [DEBUG] [Thread-188025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:10:20.929 [DEBUG] [Thread-188025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:10:20.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:10:20.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:10:20.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:10:20.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:10:20.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:10:20.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:10:20.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:10:20.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:10:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:10:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.381707 -999.00  +12.30   4.56     90  +10.80 1 3 1 3 1   888    0 1.16 -10.70 ----- 6.3 4.6 261.4 19.5 15.7 -4.3 15.4 -4.1 14.8 -3.5 15.3 -3.7
2026-04-12T11:10:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:10:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:10:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.381707
2026-04-12T11:10:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:10:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:10:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:10:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:10:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:10:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:09:59', tmtdew=0.117155, humidity=99.5238, cloud=0.0, wind=17.9982, temperature=11.6537, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:09:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:10:20.957 [DEBUG] [Thread-188025] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:10:21.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:10:21.057 [DEBUG] [Thread-188028] [transport.py] [_log()] starting thread (client mode): 0xae5b3340
2026-04-12T11:10:21.057 [DEBUG] [Thread-188028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:10:21.072 [DEBUG] [Thread-188028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:10:21.073 [INFO] [Thread-188028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:10:21.081 [DEBUG] [Thread-188028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:10:21.081 [DEBUG] [Thread-188028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] client lang: <none>
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] server lang: <none>
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] kex follows: False
2026-04-12T11:10:21.082 [DEBUG] [Thread-188028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:10:21.083 [DEBUG] [Thread-188028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:10:21.083 [DEBUG] [Thread-188028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:10:21.083 [DEBUG] [Thread-188028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:10:21.083 [DEBUG] [Thread-188028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:10:21.083 [DEBUG] [Thread-188028] [transport.py] [_log()] Compression: none
2026-04-12T11:10:21.083 [DEBUG] [Thread-188028] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:10:21.144 [DEBUG] [Thread-188028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:10:21.145 [DEBUG] [Thread-188028] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:10:21.145 [DEBUG] [Thread-188028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:10:21.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:10:21.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:10:21.204 [DEBUG] [Thread-188028] [transport.py] [_log()] userauth is OK
2026-04-12T11:10:21.204 [DEBUG] [Thread-188028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:10:21.205 [DEBUG] [Thread-188028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:10:21.205 [DEBUG] [Thread-188028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:10:21.205 [DEBUG] [Thread-188028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:10:21.226 [INFO] [Thread-188028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:10:21.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:10:21.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:10:22.038 [DEBUG] [Thread-188028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:10:22.038 [DEBUG] [Thread-188028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:10:22.089 [DEBUG] [Thread-188028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:10:22.089 [DEBUG] [Thread-188028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:10:22.100 [DEBUG] [Thread-188028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:10:22.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:10:22.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:10:22.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:10:22.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:10:22.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:10:22.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:10:22.148 [DEBUG] [Thread-188028] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:10:30.143 [DEBUG] [Thread-188030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:33.947 [DEBUG] [Thread-188031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:48.992 [DEBUG] [Thread-188032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:10:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:10:52.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:10:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:10:53.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 10, 35), 0.12418, 99.1137, 0.0, 18.2786, 12.3067, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:10:53.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:10:35
2026-04-12T11:10:53.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:10:53.962 [DEBUG] [Thread-188033] [transport.py] [_log()] starting thread (client mode): 0xa79c56c0
2026-04-12T11:10:53.962 [DEBUG] [Thread-188033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:10:53.983 [DEBUG] [Thread-188033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:10:53.983 [INFO] [Thread-188033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] client lang: <none>
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] server lang: <none>
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] kex follows: False
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] Compression: none
2026-04-12T11:10:53.986 [DEBUG] [Thread-188033] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:10:54.003 [DEBUG] [Thread-188033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:10:54.004 [DEBUG] [Thread-188033] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:10:54.004 [DEBUG] [Thread-188033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:10:54.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:10:54.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:10:54.006 [DEBUG] [Thread-188033] [transport.py] [_log()] userauth is OK
2026-04-12T11:10:54.006 [DEBUG] [Thread-188033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:10:54.006 [DEBUG] [Thread-188033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:10:54.006 [DEBUG] [Thread-188033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:10:54.006 [DEBUG] [Thread-188033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:10:54.024 [INFO] [Thread-188033] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:10:54.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:10:54.780 [DEBUG] [Thread-188033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:10:54.781 [DEBUG] [Thread-188033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:10:54.781 [DEBUG] [Thread-188033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:10:54.821 [DEBUG] [Thread-188033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:10:54.821 [DEBUG] [Thread-188033] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:10:54.825 [DEBUG] [Thread-188033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:10:54.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:10:54.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:10:54.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:10:54.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:10:54.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:10:54.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:10:54.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:10:54.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:10:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:10:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.382054 -999.00  +12.30  12.74     91  +10.90 1 3 1 3 1   888    0 1.19 -10.56 ----- 10.6 12.7 274.8 15.2 15.7 -4.4 15.4 -3.8 14.9 -3.3 15.4 -3.8
2026-04-12T11:10:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:10:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:10:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.382054
2026-04-12T11:10:54.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:10:54.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:10:54.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:10:54.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:10:54.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:10:54.853 [DEBUG] [Thread-188033] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:10:54.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:10:35', tmtdew=0.12418, humidity=99.1137, cloud=0.0, wind=18.2786, temperature=12.3067, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:10:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:10:54.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:10:54.961 [DEBUG] [Thread-188036] [transport.py] [_log()] starting thread (client mode): 0xae519db0
2026-04-12T11:10:54.962 [DEBUG] [Thread-188036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:10:54.989 [DEBUG] [Thread-188036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:10:54.989 [INFO] [Thread-188036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:10:55.009 [DEBUG] [Thread-188036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:10:55.009 [DEBUG] [Thread-188036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:10:55.009 [DEBUG] [Thread-188036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] client lang: <none>
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] server lang: <none>
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] kex follows: False
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:10:55.010 [DEBUG] [Thread-188036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:10:55.011 [DEBUG] [Thread-188036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:10:55.011 [DEBUG] [Thread-188036] [transport.py] [_log()] Compression: none
2026-04-12T11:10:55.011 [DEBUG] [Thread-188036] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:10:55.084 [DEBUG] [Thread-188036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:10:55.084 [DEBUG] [Thread-188036] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:10:55.085 [DEBUG] [Thread-188036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:10:55.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:10:55.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:10:55.167 [DEBUG] [Thread-188036] [transport.py] [_log()] userauth is OK
2026-04-12T11:10:55.168 [DEBUG] [Thread-188036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:10:55.168 [DEBUG] [Thread-188036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:10:55.168 [DEBUG] [Thread-188036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:10:55.168 [DEBUG] [Thread-188036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:10:55.206 [INFO] [Thread-188036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:10:55.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:10:55.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:10:56.043 [DEBUG] [Thread-188036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:10:56.043 [DEBUG] [Thread-188036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:10:56.104 [DEBUG] [Thread-188036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:10:56.105 [DEBUG] [Thread-188036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:10:56.127 [DEBUG] [Thread-188036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:10:56.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:10: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')
2026-04-12T11:10:56.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:10:56.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:10:56.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:10:56.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:10:56.219 [DEBUG] [Thread-188036] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:11:02.452 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:11:02.454 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:11:04.032 [DEBUG] [Thread-188038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:11:19.086 [DEBUG] [Thread-188039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:11:26.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:11:26.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:11:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:11:27.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 11, 10), 0.12225, 99.4905, 0.0, 15.0347, 11.587, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:11:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:11:10
2026-04-12T11:11:27.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:11:28.012 [DEBUG] [Thread-188040] [transport.py] [_log()] starting thread (client mode): 0xb0f8f490
2026-04-12T11:11:28.012 [DEBUG] [Thread-188040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:11:28.025 [DEBUG] [Thread-188040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:11:28.025 [INFO] [Thread-188040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] client lang: <none>
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] server lang: <none>
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] kex follows: False
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] Compression: none
2026-04-12T11:11:28.028 [DEBUG] [Thread-188040] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:11:28.038 [DEBUG] [Thread-188040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:11:28.038 [DEBUG] [Thread-188040] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:11:28.039 [DEBUG] [Thread-188040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:11:28.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:11:28.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:11:28.040 [DEBUG] [Thread-188040] [transport.py] [_log()] userauth is OK
2026-04-12T11:11:28.040 [DEBUG] [Thread-188040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:11:28.040 [DEBUG] [Thread-188040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:11:28.040 [DEBUG] [Thread-188040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:11:28.040 [DEBUG] [Thread-188040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:11:28.053 [INFO] [Thread-188040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:11:28.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:11:28.817 [DEBUG] [Thread-188040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:11:28.817 [DEBUG] [Thread-188040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:11:28.818 [DEBUG] [Thread-188040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:11:28.859 [DEBUG] [Thread-188040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:11:28.859 [DEBUG] [Thread-188040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:11:28.862 [DEBUG] [Thread-188040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:11:28.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:11:28.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:11:28.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:11:28.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:11:28.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:11:28.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:11:28.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:11:28.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:11:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:11:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.382401 -999.00  +12.30  12.30     91  +10.90 1 3 1 3 1   888    0 1.19 -9.64 ----- 13.3 12.3 256.9 19.8 15.7 -4.5 15.4 -3.7 14.8 -3.3 15.4 -4.0
2026-04-12T11:11:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:11:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:11:28.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.382401
2026-04-12T11:11:28.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:11:28.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:11:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:11:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:11:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:11:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:11:10', tmtdew=0.12225, humidity=99.4905, cloud=0.0, wind=15.0347, temperature=11.587, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:10:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:11:28.889 [DEBUG] [Thread-188040] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:11:28.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:11:28.986 [DEBUG] [Thread-188043] [transport.py] [_log()] starting thread (client mode): 0xb0f57d30
2026-04-12T11:11:28.986 [DEBUG] [Thread-188043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:11:29.002 [DEBUG] [Thread-188043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:11:29.002 [INFO] [Thread-188043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:11:29.010 [DEBUG] [Thread-188043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:11:29.011 [DEBUG] [Thread-188043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:11:29.011 [DEBUG] [Thread-188043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:11:29.011 [DEBUG] [Thread-188043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:11:29.011 [DEBUG] [Thread-188043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] client lang: <none>
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] server lang: <none>
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] kex follows: False
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] Compression: none
2026-04-12T11:11:29.012 [DEBUG] [Thread-188043] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:11:29.070 [DEBUG] [Thread-188043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:11:29.070 [DEBUG] [Thread-188043] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:11:29.071 [DEBUG] [Thread-188043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:11:29.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:11:29.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:11:29.126 [DEBUG] [Thread-188043] [transport.py] [_log()] userauth is OK
2026-04-12T11:11:29.126 [DEBUG] [Thread-188043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:11:29.127 [DEBUG] [Thread-188043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:11:29.127 [DEBUG] [Thread-188043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:11:29.127 [DEBUG] [Thread-188043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:11:29.145 [INFO] [Thread-188043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:11:29.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:11:29.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:11:29.967 [DEBUG] [Thread-188043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:11:29.967 [DEBUG] [Thread-188043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:11:30.015 [DEBUG] [Thread-188043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:11:30.015 [DEBUG] [Thread-188043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:11:30.024 [DEBUG] [Thread-188043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:11:30.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:11:30.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:11:30.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:11:30.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:11:30.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:11:30.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:11:30.064 [DEBUG] [Thread-188043] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:11:30.200 [DEBUG] [Thread-188045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:11:34.125 [DEBUG] [Thread-188046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:11:49.164 [DEBUG] [Thread-188047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:12:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:12:00.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:12:00.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:12:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 11, 46), 0.1293, 99.0804, 0.0, 19.9368, 12.3397, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:12:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:11:46
2026-04-12T11:12:01.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:12:01.885 [DEBUG] [Thread-188048] [transport.py] [_log()] starting thread (client mode): 0xae518190
2026-04-12T11:12:01.885 [DEBUG] [Thread-188048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:12:01.905 [DEBUG] [Thread-188048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:12:01.905 [INFO] [Thread-188048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:12:01.906 [DEBUG] [Thread-188048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] client lang: <none>
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] server lang: <none>
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] kex follows: False
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:12:01.907 [DEBUG] [Thread-188048] [transport.py] [_log()] Compression: none
2026-04-12T11:12:01.908 [DEBUG] [Thread-188048] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:12:01.915 [DEBUG] [Thread-188048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:12:01.916 [DEBUG] [Thread-188048] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:12:01.916 [DEBUG] [Thread-188048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:12:01.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:12:01.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:12:01.917 [DEBUG] [Thread-188048] [transport.py] [_log()] userauth is OK
2026-04-12T11:12:01.918 [DEBUG] [Thread-188048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:12:01.918 [DEBUG] [Thread-188048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:12:01.918 [DEBUG] [Thread-188048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:12:01.918 [DEBUG] [Thread-188048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:12:01.935 [INFO] [Thread-188048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:12:01.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:12:02.611 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:12:02.612 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:12:02.684 [DEBUG] [Thread-188048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:12:02.684 [DEBUG] [Thread-188048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:12:02.685 [DEBUG] [Thread-188048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:12:02.725 [DEBUG] [Thread-188048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:12:02.726 [DEBUG] [Thread-188048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:12:02.729 [DEBUG] [Thread-188048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:12:02.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:12:02.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:12:02.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:12:02.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:12:02.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:12:02.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:12:02.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:12:02.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:12:02.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:12:02.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.382748 -999.00  +12.30   6.40     91  +11.00 1 3 1 3 1   888    0 1.20 -8.79 ----- 8.0 6.4 264.9 12.6 15.7 -4.6 15.4 -4.0 14.9 -3.5 15.4 -3.6
2026-04-12T11:12:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:12:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:12:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.382748
2026-04-12T11:12:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:12:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:12:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:12:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:12:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:12:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:11:46', tmtdew=0.1293, humidity=99.0804, cloud=0.0, wind=19.9368, temperature=12.3397, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:11:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:12:02.755 [DEBUG] [Thread-188048] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:12:02.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:12:02.855 [DEBUG] [Thread-188051] [transport.py] [_log()] starting thread (client mode): 0xae51b9a0
2026-04-12T11:12:02.856 [DEBUG] [Thread-188051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:12:02.871 [DEBUG] [Thread-188051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:12:02.871 [INFO] [Thread-188051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:12:02.878 [DEBUG] [Thread-188051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:12:02.878 [DEBUG] [Thread-188051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:12:02.878 [DEBUG] [Thread-188051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:12:02.878 [DEBUG] [Thread-188051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:02.878 [DEBUG] [Thread-188051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:02.878 [DEBUG] [Thread-188051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] client lang: <none>
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] server lang: <none>
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] kex follows: False
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] Compression: none
2026-04-12T11:12:02.879 [DEBUG] [Thread-188051] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:12:02.938 [DEBUG] [Thread-188051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:12:02.939 [DEBUG] [Thread-188051] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:12:02.940 [DEBUG] [Thread-188051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:12:02.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:12:02.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:12:02.994 [DEBUG] [Thread-188051] [transport.py] [_log()] userauth is OK
2026-04-12T11:12:02.995 [DEBUG] [Thread-188051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:12:02.995 [DEBUG] [Thread-188051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:12:02.995 [DEBUG] [Thread-188051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:12:02.995 [DEBUG] [Thread-188051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:12:03.014 [INFO] [Thread-188051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:12:03.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:12:03.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:12:03.842 [DEBUG] [Thread-188051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:12:03.843 [DEBUG] [Thread-188051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:12:03.891 [DEBUG] [Thread-188051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:12:03.891 [DEBUG] [Thread-188051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:12:03.901 [DEBUG] [Thread-188051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:12:03.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:12:03.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:12:03.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:12:03.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:12:03.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:12:03.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:12:03.940 [DEBUG] [Thread-188051] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:12:04.200 [DEBUG] [Thread-188053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:12:19.244 [DEBUG] [Thread-188054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:12:30.248 [DEBUG] [Thread-188055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:12:33.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:12:33.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:12:33.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:12:34.281 [DEBUG] [Thread-188056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:12:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 12, 21), 0.124815, 99.4739, 0.0, 15.5632, 11.6201, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:12:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:12:21
2026-04-12T11:12:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:12:35.796 [DEBUG] [Thread-188057] [transport.py] [_log()] starting thread (client mode): 0xb0f8c520
2026-04-12T11:12:35.797 [DEBUG] [Thread-188057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:12:35.817 [DEBUG] [Thread-188057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:12:35.817 [INFO] [Thread-188057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:12:35.820 [DEBUG] [Thread-188057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:12:35.820 [DEBUG] [Thread-188057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:12:35.820 [DEBUG] [Thread-188057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:12:35.820 [DEBUG] [Thread-188057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] client lang: <none>
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] server lang: <none>
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] kex follows: False
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] Compression: none
2026-04-12T11:12:35.821 [DEBUG] [Thread-188057] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:12:35.837 [DEBUG] [Thread-188057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:12:35.838 [DEBUG] [Thread-188057] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:12:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:12:35.839 [DEBUG] [Thread-188057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:12:35.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:12:35.841 [DEBUG] [Thread-188057] [transport.py] [_log()] userauth is OK
2026-04-12T11:12:35.842 [DEBUG] [Thread-188057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:12:35.842 [DEBUG] [Thread-188057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:12:35.842 [DEBUG] [Thread-188057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:12:35.842 [DEBUG] [Thread-188057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:12:35.862 [INFO] [Thread-188057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:12:35.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:12:36.646 [DEBUG] [Thread-188057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:12:36.647 [DEBUG] [Thread-188057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:12:36.647 [DEBUG] [Thread-188057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:12:36.687 [DEBUG] [Thread-188057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:12:36.687 [DEBUG] [Thread-188057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:12:36.690 [DEBUG] [Thread-188057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:12:36.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:12:36.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:12:36.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:12:36.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:12:36.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:12:36.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:12:36.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:12:36.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:12:36.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:12:36.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.383095 -999.00  +12.30  10.04     91  +10.90 1 3 1 3 1   888    0 1.23 -8.84 ----- 13.0 10.0 244.6 15.4 15.7 -4.5 15.4 -4.4 14.9 -3.6 15.4 -3.9
2026-04-12T11:12:36.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:12:36.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:12:36.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.383095
2026-04-12T11:12:36.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:12:36.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:12:36.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:12:36.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:12:36.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:12:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:12:21', tmtdew=0.124815, humidity=99.4739, cloud=0.0, wind=15.5632, temperature=11.6201, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:11:39.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:12:36.720 [DEBUG] [Thread-188057] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:12:36.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:12:36.815 [DEBUG] [Thread-188060] [transport.py] [_log()] starting thread (client mode): 0xae563c70
2026-04-12T11:12:36.815 [DEBUG] [Thread-188060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:12:36.830 [DEBUG] [Thread-188060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:12:36.830 [INFO] [Thread-188060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:12:36.841 [DEBUG] [Thread-188060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:12:36.841 [DEBUG] [Thread-188060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:12:36.841 [DEBUG] [Thread-188060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:12:36.841 [DEBUG] [Thread-188060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] client lang: <none>
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] server lang: <none>
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] kex follows: False
2026-04-12T11:12:36.842 [DEBUG] [Thread-188060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:12:36.843 [DEBUG] [Thread-188060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:12:36.843 [DEBUG] [Thread-188060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:12:36.843 [DEBUG] [Thread-188060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:12:36.843 [DEBUG] [Thread-188060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:12:36.843 [DEBUG] [Thread-188060] [transport.py] [_log()] Compression: none
2026-04-12T11:12:36.843 [DEBUG] [Thread-188060] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:12:36.900 [DEBUG] [Thread-188060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:12:36.900 [DEBUG] [Thread-188060] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:12:36.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:12:36.901 [DEBUG] [Thread-188060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:12:36.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:12:36.959 [DEBUG] [Thread-188060] [transport.py] [_log()] userauth is OK
2026-04-12T11:12:36.959 [DEBUG] [Thread-188060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:12:36.959 [DEBUG] [Thread-188060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:12:36.960 [DEBUG] [Thread-188060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:12:36.960 [DEBUG] [Thread-188060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:12:36.978 [INFO] [Thread-188060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:12:36.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:12:36.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:12:37.807 [DEBUG] [Thread-188060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:12:37.807 [DEBUG] [Thread-188060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:12:37.855 [DEBUG] [Thread-188060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:12:37.855 [DEBUG] [Thread-188060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:12:37.864 [DEBUG] [Thread-188060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:12:37.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:12:37.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:12:37.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:12:37.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:12:37.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:12:37.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:12:37.896 [DEBUG] [Thread-188060] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:12:49.317 [DEBUG] [Thread-188062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:13:02.756 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:13:02.758 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:13:04.369 [DEBUG] [Thread-188063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:13:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:13:07.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:13:07.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:13:09.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 12, 57), 0.119755, 99.007, 0.0, 18.0158, 11.653, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:13:09.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:12:57
2026-04-12T11:13:09.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:13:09.771 [DEBUG] [Thread-188064] [transport.py] [_log()] starting thread (client mode): 0xae5b0430
2026-04-12T11:13:09.772 [DEBUG] [Thread-188064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:13:09.792 [DEBUG] [Thread-188064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:13:09.792 [INFO] [Thread-188064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:13:09.795 [DEBUG] [Thread-188064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:13:09.795 [DEBUG] [Thread-188064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:13:09.795 [DEBUG] [Thread-188064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] client lang: <none>
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] server lang: <none>
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] kex follows: False
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:13:09.796 [DEBUG] [Thread-188064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:13:09.797 [DEBUG] [Thread-188064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:13:09.797 [DEBUG] [Thread-188064] [transport.py] [_log()] Compression: none
2026-04-12T11:13:09.797 [DEBUG] [Thread-188064] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:13:09.817 [DEBUG] [Thread-188064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:13:09.817 [DEBUG] [Thread-188064] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:13:09.818 [DEBUG] [Thread-188064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:13:09.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:13:09.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:13:09.820 [DEBUG] [Thread-188064] [transport.py] [_log()] userauth is OK
2026-04-12T11:13:09.820 [DEBUG] [Thread-188064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:13:09.820 [DEBUG] [Thread-188064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:13:09.820 [DEBUG] [Thread-188064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:13:09.820 [DEBUG] [Thread-188064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:13:09.835 [INFO] [Thread-188064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:13:09.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:13:10.618 [DEBUG] [Thread-188064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:13:10.618 [DEBUG] [Thread-188064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:13:10.619 [DEBUG] [Thread-188064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:13:10.659 [DEBUG] [Thread-188064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:13:10.659 [DEBUG] [Thread-188064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:13:10.663 [DEBUG] [Thread-188064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:13:10.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:13:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:13:10.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:13:10.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:13:10.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:13:10.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:13:10.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:13:10.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:13:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:13:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.383443 -999.00  +12.30  14.13     91  +10.90 1 3 1 3 1   888    0 1.22 -8.78 ----- 12.5 14.1 255.9 18.0 15.7 -4.6 15.4 -4.5 14.9 -3.7 15.4 -4.3
2026-04-12T11:13:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:13:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:13:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.383443
2026-04-12T11:13:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:13:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:13:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:13:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:13:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:13:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:12:57', tmtdew=0.119755, humidity=99.007, cloud=0.0, wind=18.0158, temperature=11.653, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:12:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:13:10.690 [DEBUG] [Thread-188064] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:13:10.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:13:10.782 [DEBUG] [Thread-188067] [transport.py] [_log()] starting thread (client mode): 0xae5b2fe0
2026-04-12T11:13:10.782 [DEBUG] [Thread-188067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:13:10.797 [DEBUG] [Thread-188067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:13:10.797 [INFO] [Thread-188067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] client lang: <none>
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] server lang: <none>
2026-04-12T11:13:10.805 [DEBUG] [Thread-188067] [transport.py] [_log()] kex follows: False
2026-04-12T11:13:10.806 [DEBUG] [Thread-188067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:13:10.806 [DEBUG] [Thread-188067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:13:10.806 [DEBUG] [Thread-188067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:13:10.806 [DEBUG] [Thread-188067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:13:10.806 [DEBUG] [Thread-188067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:13:10.806 [DEBUG] [Thread-188067] [transport.py] [_log()] Compression: none
2026-04-12T11:13:10.806 [DEBUG] [Thread-188067] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:13:10.863 [DEBUG] [Thread-188067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:13:10.864 [DEBUG] [Thread-188067] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:13:10.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:13:10.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:13:10.866 [DEBUG] [Thread-188067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:13:10.920 [DEBUG] [Thread-188067] [transport.py] [_log()] userauth is OK
2026-04-12T11:13:10.920 [DEBUG] [Thread-188067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:13:10.921 [DEBUG] [Thread-188067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:13:10.921 [DEBUG] [Thread-188067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:13:10.921 [DEBUG] [Thread-188067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:13:10.940 [INFO] [Thread-188067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:13:10.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:13:10.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:13:11.770 [DEBUG] [Thread-188067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:13:11.770 [DEBUG] [Thread-188067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:13:11.818 [DEBUG] [Thread-188067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:13:11.819 [DEBUG] [Thread-188067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:13:11.827 [DEBUG] [Thread-188067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:13:11.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:13:11.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:13:11.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:13:11.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:13:11.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:13:11.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:13:11.864 [DEBUG] [Thread-188067] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:13:19.407 [DEBUG] [Thread-188069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:13:30.300 [DEBUG] [Thread-188070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:13:34.461 [DEBUG] [Thread-188071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:13:41.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:13:41.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:13:41.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:13:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 13, 32), 0.11722, 99.0236, 0.0, 17.3102, 11.7027, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:13:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:13:32
2026-04-12T11:13:43.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:13:43.660 [DEBUG] [Thread-188072] [transport.py] [_log()] starting thread (client mode): 0xb0f8c0a0
2026-04-12T11:13:43.660 [DEBUG] [Thread-188072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:13:43.680 [DEBUG] [Thread-188072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:13:43.680 [INFO] [Thread-188072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] client lang: <none>
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] server lang: <none>
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] kex follows: False
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:13:43.683 [DEBUG] [Thread-188072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:13:43.684 [DEBUG] [Thread-188072] [transport.py] [_log()] Compression: none
2026-04-12T11:13:43.684 [DEBUG] [Thread-188072] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:13:43.700 [DEBUG] [Thread-188072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:13:43.700 [DEBUG] [Thread-188072] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:13:43.701 [DEBUG] [Thread-188072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:13:43.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:13:43.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:13:43.703 [DEBUG] [Thread-188072] [transport.py] [_log()] userauth is OK
2026-04-12T11:13:43.703 [DEBUG] [Thread-188072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:13:43.703 [DEBUG] [Thread-188072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:13:43.703 [DEBUG] [Thread-188072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:13:43.704 [DEBUG] [Thread-188072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:13:43.728 [INFO] [Thread-188072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:13:43.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:13:44.545 [DEBUG] [Thread-188072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:13:44.545 [DEBUG] [Thread-188072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:13:44.546 [DEBUG] [Thread-188072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:13:44.586 [DEBUG] [Thread-188072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:13:44.586 [DEBUG] [Thread-188072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:13:44.590 [DEBUG] [Thread-188072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:13:44.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:13:44.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:13:44.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:13:44.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:13:44.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:13:44.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:13:44.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:13:44.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:13:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:13:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.384137 -999.00  +12.30  13.27     91  +10.90 1 3 1 3 1   888    0 1.21 -8.17 ----- 13.7 13.3 260.2 19.5 15.8 -5.3 15.4 -4.4 14.9 -3.7 15.4 -4.3
2026-04-12T11:13:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:13:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:13:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.384137
2026-04-12T11:13:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:13:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:13:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:13:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:13:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:13:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:13:32', tmtdew=0.11722, humidity=99.0236, cloud=0.0, wind=17.3102, temperature=11.7027, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:13:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:13:44.616 [DEBUG] [Thread-188072] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:13:44.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:13:44.709 [DEBUG] [Thread-188075] [transport.py] [_log()] starting thread (client mode): 0xb0f57e50
2026-04-12T11:13:44.709 [DEBUG] [Thread-188075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:13:44.724 [DEBUG] [Thread-188075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:13:44.724 [INFO] [Thread-188075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:13:44.731 [DEBUG] [Thread-188075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:13:44.731 [DEBUG] [Thread-188075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:13:44.731 [DEBUG] [Thread-188075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] client lang: <none>
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] server lang: <none>
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] kex follows: False
2026-04-12T11:13:44.732 [DEBUG] [Thread-188075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:13:44.733 [DEBUG] [Thread-188075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:13:44.733 [DEBUG] [Thread-188075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:13:44.733 [DEBUG] [Thread-188075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:13:44.733 [DEBUG] [Thread-188075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:13:44.733 [DEBUG] [Thread-188075] [transport.py] [_log()] Compression: none
2026-04-12T11:13:44.733 [DEBUG] [Thread-188075] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:13:44.793 [DEBUG] [Thread-188075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:13:44.793 [DEBUG] [Thread-188075] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:13:44.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:13:44.795 [DEBUG] [Thread-188075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:13:44.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:13:44.852 [DEBUG] [Thread-188075] [transport.py] [_log()] userauth is OK
2026-04-12T11:13:44.853 [DEBUG] [Thread-188075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:13:44.853 [DEBUG] [Thread-188075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:13:44.853 [DEBUG] [Thread-188075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:13:44.853 [DEBUG] [Thread-188075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:13:44.873 [INFO] [Thread-188075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:13:44.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:13:44.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:13:45.714 [DEBUG] [Thread-188075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:13:45.715 [DEBUG] [Thread-188075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:13:45.763 [DEBUG] [Thread-188075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:13:45.764 [DEBUG] [Thread-188075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:13:45.773 [DEBUG] [Thread-188075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:13:45.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:13:45.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:13:45.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:13:45.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:13:45.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:13:45.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:13:45.811 [DEBUG] [Thread-188075] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:13:49.498 [DEBUG] [Thread-188077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:02.899 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:02.901 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:04.548 [DEBUG] [Thread-188078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:14:15.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:14:15.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:14:17.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 14, 7), 0.11724, 99.0235, 0.0, 19.5152, 11.769, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:14:17.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:14:07
2026-04-12T11:14:17.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:14:17.659 [DEBUG] [Thread-188079] [transport.py] [_log()] starting thread (client mode): 0xb0f57190
2026-04-12T11:14:17.659 [DEBUG] [Thread-188079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:14:17.679 [DEBUG] [Thread-188079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:14:17.679 [INFO] [Thread-188079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:14:17.682 [DEBUG] [Thread-188079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:14:17.682 [DEBUG] [Thread-188079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:14:17.682 [DEBUG] [Thread-188079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] client lang: <none>
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] server lang: <none>
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] kex follows: False
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:14:17.683 [DEBUG] [Thread-188079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:14:17.684 [DEBUG] [Thread-188079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:14:17.684 [DEBUG] [Thread-188079] [transport.py] [_log()] Compression: none
2026-04-12T11:14:17.684 [DEBUG] [Thread-188079] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:14:17.702 [DEBUG] [Thread-188079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:14:17.703 [DEBUG] [Thread-188079] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:14:17.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:14:17.704 [DEBUG] [Thread-188079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:14:17.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:14:17.744 [DEBUG] [Thread-188079] [transport.py] [_log()] userauth is OK
2026-04-12T11:14:17.744 [DEBUG] [Thread-188079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:14:17.745 [DEBUG] [Thread-188079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:14:17.745 [DEBUG] [Thread-188079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:14:17.745 [DEBUG] [Thread-188079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:14:17.778 [INFO] [Thread-188079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:14:17.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:14:18.563 [DEBUG] [Thread-188079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:14:18.563 [DEBUG] [Thread-188079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:14:18.564 [DEBUG] [Thread-188079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:14:18.604 [DEBUG] [Thread-188079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:14:18.604 [DEBUG] [Thread-188079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:14:18.608 [DEBUG] [Thread-188079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:14:18.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:14:18.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:14:18.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:14:18.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:14:18.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:14:18.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:14:18.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:14:18.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:14:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:14:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.384484 -999.00  +12.30  10.80     91  +10.90 1 3 1 3 1   888    0 1.21 -8.34 ----- 12.3 10.8 281.4 17.1 15.8 -5.7 15.5 -4.8 14.9 -4.4 15.4 -4.1
2026-04-12T11:14:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:14:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:14:18.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.384484
2026-04-12T11:14:18.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:14:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:14:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:14:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:14:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:14:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:14:07', tmtdew=0.11724, humidity=99.0235, cloud=0.0, wind=19.5152, temperature=11.769, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:13:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:14:18.634 [DEBUG] [Thread-188079] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:14:18.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:14:18.729 [DEBUG] [Thread-188082] [transport.py] [_log()] starting thread (client mode): 0xa7938d60
2026-04-12T11:14:18.729 [DEBUG] [Thread-188082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:14:18.744 [DEBUG] [Thread-188082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:14:18.744 [INFO] [Thread-188082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:14:18.752 [DEBUG] [Thread-188082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:14:18.752 [DEBUG] [Thread-188082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:14:18.752 [DEBUG] [Thread-188082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:14:18.752 [DEBUG] [Thread-188082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:18.752 [DEBUG] [Thread-188082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:18.752 [DEBUG] [Thread-188082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] client lang: <none>
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] server lang: <none>
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] kex follows: False
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:14:18.753 [DEBUG] [Thread-188082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:14:18.754 [DEBUG] [Thread-188082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:14:18.754 [DEBUG] [Thread-188082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:14:18.754 [DEBUG] [Thread-188082] [transport.py] [_log()] Compression: none
2026-04-12T11:14:18.754 [DEBUG] [Thread-188082] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:14:18.813 [DEBUG] [Thread-188082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:14:18.813 [DEBUG] [Thread-188082] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:14:18.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:14:18.815 [DEBUG] [Thread-188082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:14:18.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:14:18.869 [DEBUG] [Thread-188082] [transport.py] [_log()] userauth is OK
2026-04-12T11:14:18.869 [DEBUG] [Thread-188082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:14:18.870 [DEBUG] [Thread-188082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:14:18.870 [DEBUG] [Thread-188082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:14:18.870 [DEBUG] [Thread-188082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:14:18.889 [INFO] [Thread-188082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:14:18.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:14:18.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:14:19.587 [DEBUG] [Thread-188084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:19.717 [DEBUG] [Thread-188082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:14:19.717 [DEBUG] [Thread-188082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:14:19.765 [DEBUG] [Thread-188082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:14:19.765 [DEBUG] [Thread-188082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:14:19.774 [DEBUG] [Thread-188082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:14:19.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:14: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')
2026-04-12T11:14:19.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:14:19.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:14:19.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:14:19.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:14:19.811 [DEBUG] [Thread-188082] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:14:30.364 [DEBUG] [Thread-188085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:34.749 [DEBUG] [Thread-188086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:49.790 [DEBUG] [Thread-188087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:14:49.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:14:49.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:14:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:14:51.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 14, 43), 0.16503, 98.8481, 0.0, 21.4538, 12.4391, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:14:51.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:14:43
2026-04-12T11:14:51.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:14:51.663 [DEBUG] [Thread-188088] [transport.py] [_log()] starting thread (client mode): 0xa795eb00
2026-04-12T11:14:51.663 [DEBUG] [Thread-188088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:14:51.684 [DEBUG] [Thread-188088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:14:51.684 [INFO] [Thread-188088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:14:51.687 [DEBUG] [Thread-188088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] client lang: <none>
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] server lang: <none>
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] kex follows: False
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:14:51.688 [DEBUG] [Thread-188088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:14:51.689 [DEBUG] [Thread-188088] [transport.py] [_log()] Compression: none
2026-04-12T11:14:51.689 [DEBUG] [Thread-188088] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:14:51.704 [DEBUG] [Thread-188088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:14:51.705 [DEBUG] [Thread-188088] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:14:51.705 [DEBUG] [Thread-188088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:14:51.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:14:51.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:14:51.707 [DEBUG] [Thread-188088] [transport.py] [_log()] userauth is OK
2026-04-12T11:14:51.707 [DEBUG] [Thread-188088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:14:51.708 [DEBUG] [Thread-188088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:14:51.708 [DEBUG] [Thread-188088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:14:51.708 [DEBUG] [Thread-188088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:14:51.729 [INFO] [Thread-188088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:14:51.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:14:52.523 [DEBUG] [Thread-188088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:14:52.524 [DEBUG] [Thread-188088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:14:52.524 [DEBUG] [Thread-188088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:14:52.565 [DEBUG] [Thread-188088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:14:52.565 [DEBUG] [Thread-188088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:14:52.569 [DEBUG] [Thread-188088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:14:52.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:14:52.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:14:52.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:14:52.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:14:52.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:14:52.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:14:52.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:14:52.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:14:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:14:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.384832 -999.00  +12.20  19.48     91  +10.80 1 3 1 3 1   888    0 1.25 -7.83 ----- 16.1 19.5 279.0 22.0 15.9 -4.7 15.5 -4.3 14.9 -3.3 15.5 -4.0
2026-04-12T11:14:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:14:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:14:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.384832
2026-04-12T11:14:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:14:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:14:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:14:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:14:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:14:52.596 [DEBUG] [Thread-188088] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:14:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:14:43', tmtdew=0.16503, humidity=98.8481, cloud=0.0, wind=21.4538, temperature=12.4391, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:14:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:14:52.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:14:52.690 [DEBUG] [Thread-188091] [transport.py] [_log()] starting thread (client mode): 0xb0f8ec50
2026-04-12T11:14:52.690 [DEBUG] [Thread-188091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:14:52.705 [DEBUG] [Thread-188091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:14:52.705 [INFO] [Thread-188091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:14:52.712 [DEBUG] [Thread-188091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:14:52.712 [DEBUG] [Thread-188091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] client lang: <none>
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] server lang: <none>
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] kex follows: False
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] Compression: none
2026-04-12T11:14:52.713 [DEBUG] [Thread-188091] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:14:52.773 [DEBUG] [Thread-188091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:14:52.773 [DEBUG] [Thread-188091] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:14:52.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:14:52.775 [DEBUG] [Thread-188091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:14:52.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:14:52.833 [DEBUG] [Thread-188091] [transport.py] [_log()] userauth is OK
2026-04-12T11:14:52.834 [DEBUG] [Thread-188091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:14:52.834 [DEBUG] [Thread-188091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:14:52.834 [DEBUG] [Thread-188091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:14:52.834 [DEBUG] [Thread-188091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:14:52.852 [INFO] [Thread-188091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:14:52.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:14:52.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:14:53.716 [DEBUG] [Thread-188091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:14:53.716 [DEBUG] [Thread-188091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:14:53.764 [DEBUG] [Thread-188091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:14:53.764 [DEBUG] [Thread-188091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:14:53.773 [DEBUG] [Thread-188091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:14:53.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:14:53.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:14:53.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:14:53.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:14:53.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:14:53.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:14:53.810 [DEBUG] [Thread-188091] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:15:03.051 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:15:03.053 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:15:04.828 [DEBUG] [Thread-188093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:15:19.930 [DEBUG] [Thread-188094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:15:23.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:15:23.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:15:23.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:15:25.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 14, 43), 0.16503, 98.8481, 0.0, 21.4538, 12.4391, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:15:25.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:14:43
2026-04-12T11:15:25.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:15:25.816 [DEBUG] [Thread-188095] [transport.py] [_log()] starting thread (client mode): 0xb0fb6530
2026-04-12T11:15:25.816 [DEBUG] [Thread-188095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:15:25.839 [DEBUG] [Thread-188095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:15:25.839 [INFO] [Thread-188095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] client lang: <none>
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] server lang: <none>
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] kex follows: False
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] Compression: none
2026-04-12T11:15:25.841 [DEBUG] [Thread-188095] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:15:25.860 [DEBUG] [Thread-188095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:15:25.860 [DEBUG] [Thread-188095] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:15:25.861 [DEBUG] [Thread-188095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:15:25.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:15:25.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:15:25.862 [DEBUG] [Thread-188095] [transport.py] [_log()] userauth is OK
2026-04-12T11:15:25.863 [DEBUG] [Thread-188095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:15:25.863 [DEBUG] [Thread-188095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:15:25.863 [DEBUG] [Thread-188095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:15:25.863 [DEBUG] [Thread-188095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:15:25.900 [INFO] [Thread-188095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:15:25.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:15:27.161 [DEBUG] [Thread-188095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:15:27.162 [DEBUG] [Thread-188095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:15:27.162 [DEBUG] [Thread-188095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:15:27.203 [DEBUG] [Thread-188095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:15:27.203 [DEBUG] [Thread-188095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:15:27.207 [DEBUG] [Thread-188095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:15:27.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:15:27.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:15:27.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:15:27.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:15:27.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:15:27.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:15:27.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:15:27.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:15:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:15:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.385526 -999.00  +12.30  13.28     91  +11.00 1 3 1 3 1   888    0 1.23 -7.14 ----- 9.4 13.3 269.2 14.9 15.9 -4.5 15.5 -4.0 15.0 -3.4 15.5 -4.1
2026-04-12T11:15:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:15:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:15:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.385526
2026-04-12T11:15:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:15:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:15:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:15:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:15:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:15:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:14:43', tmtdew=0.16503, humidity=98.8481, cloud=0.0, wind=21.4538, temperature=12.4391, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:15:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:15:27.233 [DEBUG] [Thread-188095] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:15:27.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:15:27.326 [DEBUG] [Thread-188098] [transport.py] [_log()] starting thread (client mode): 0xb0fb46d0
2026-04-12T11:15:27.326 [DEBUG] [Thread-188098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:15:27.341 [DEBUG] [Thread-188098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:15:27.341 [INFO] [Thread-188098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:15:27.348 [DEBUG] [Thread-188098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] client lang: <none>
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] server lang: <none>
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] kex follows: False
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] Compression: none
2026-04-12T11:15:27.349 [DEBUG] [Thread-188098] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:15:27.410 [DEBUG] [Thread-188098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:15:27.410 [DEBUG] [Thread-188098] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:15:27.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:15:27.412 [DEBUG] [Thread-188098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:15:27.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:15:27.466 [DEBUG] [Thread-188098] [transport.py] [_log()] userauth is OK
2026-04-12T11:15:27.466 [DEBUG] [Thread-188098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:15:27.466 [DEBUG] [Thread-188098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:15:27.466 [DEBUG] [Thread-188098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:15:27.466 [DEBUG] [Thread-188098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:15:27.485 [INFO] [Thread-188098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:15:27.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:15:27.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:15:28.342 [DEBUG] [Thread-188098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:15:28.342 [DEBUG] [Thread-188098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:15:28.390 [DEBUG] [Thread-188098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:15:28.390 [DEBUG] [Thread-188098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:15:28.399 [DEBUG] [Thread-188098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:15:28.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:15:28.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:15:28.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:15:28.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:15:28.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:15:28.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:15:28.434 [DEBUG] [Thread-188098] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:15:30.418 [DEBUG] [Thread-188100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:15:34.969 [DEBUG] [Thread-188101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:15:50.021 [DEBUG] [Thread-188102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:15:58.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:15:58.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:15:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:15:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 15, 18), 0.095215, 99.3411, 0.0, 16.4981, 11.5535, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:15:59.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:15:18
2026-04-12T11:16:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:16:00.374 [DEBUG] [Thread-188103] [transport.py] [_log()] starting thread (client mode): 0xb0fb4490
2026-04-12T11:16:00.374 [DEBUG] [Thread-188103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:16:00.394 [DEBUG] [Thread-188103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:16:00.394 [INFO] [Thread-188103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:16:00.395 [DEBUG] [Thread-188103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:16:00.395 [DEBUG] [Thread-188103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] client lang: <none>
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] server lang: <none>
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] kex follows: False
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] Compression: none
2026-04-12T11:16:00.396 [DEBUG] [Thread-188103] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:16:00.404 [DEBUG] [Thread-188103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:16:00.404 [DEBUG] [Thread-188103] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:16:00.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:16:00.405 [DEBUG] [Thread-188103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:16:00.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:16:00.405 [DEBUG] [Thread-188103] [transport.py] [_log()] userauth is OK
2026-04-12T11:16:00.406 [DEBUG] [Thread-188103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:16:00.406 [DEBUG] [Thread-188103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:16:00.406 [DEBUG] [Thread-188103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:16:00.406 [DEBUG] [Thread-188103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:16:00.416 [INFO] [Thread-188103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:16:00.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:16:00.994 [DEBUG] [Thread-188103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:16:00.994 [DEBUG] [Thread-188103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:16:00.995 [DEBUG] [Thread-188103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:16:01.036 [DEBUG] [Thread-188103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:16:01.036 [DEBUG] [Thread-188103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:16:01.038 [DEBUG] [Thread-188103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:16:01.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:16:01.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:16:01.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:16:01.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:16:01.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:16:01.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:16:01.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.385873 -999.00  +12.30  10.75     91  +10.90 1 3 1 3 1   888    0 1.26 -6.45 ----- 12.4 10.8 275.0 13.8 15.9 -4.4 15.5 -3.8 14.9 -3.4 15.5 -4.0
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.385873
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:16:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:16:01.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:15:18', tmtdew=0.095215, humidity=99.3411, cloud=0.0, wind=16.4981, temperature=11.5535, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:15:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:16:01.057 [DEBUG] [Thread-188103] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:16:01.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:16:01.176 [DEBUG] [Thread-188106] [transport.py] [_log()] starting thread (client mode): 0xae5b1ab0
2026-04-12T11:16:01.177 [DEBUG] [Thread-188106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:16:01.195 [DEBUG] [Thread-188106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:16:01.195 [INFO] [Thread-188106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:16:01.212 [DEBUG] [Thread-188106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] client lang: <none>
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] server lang: <none>
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] kex follows: False
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] Compression: none
2026-04-12T11:16:01.213 [DEBUG] [Thread-188106] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:16:01.282 [DEBUG] [Thread-188106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:16:01.283 [DEBUG] [Thread-188106] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:16:01.284 [DEBUG] [Thread-188106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:16:01.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:16:01.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:16:01.368 [DEBUG] [Thread-188106] [transport.py] [_log()] userauth is OK
2026-04-12T11:16:01.369 [DEBUG] [Thread-188106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:16:01.369 [DEBUG] [Thread-188106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:16:01.369 [DEBUG] [Thread-188106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:16:01.369 [DEBUG] [Thread-188106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:16:01.402 [INFO] [Thread-188106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:16:01.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:16:01.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:16:02.275 [DEBUG] [Thread-188106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:16:02.275 [DEBUG] [Thread-188106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:16:02.337 [DEBUG] [Thread-188106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:16:02.338 [DEBUG] [Thread-188106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:16:02.361 [DEBUG] [Thread-188106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:16:02.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:16:02.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:16:02.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:16:02.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:16:02.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:16:02.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:16:02.416 [DEBUG] [Thread-188106] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:16:03.199 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:16:03.201 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:16:05.060 [DEBUG] [Thread-188108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:16:20.123 [DEBUG] [Thread-188109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:16:30.469 [DEBUG] [Thread-188110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:16:32.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:16:32.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:16:32.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:16:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 15, 54), 0.132495, 99.424, 0.0, 13.1465, 11.6198, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:16:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:15:54
2026-04-12T11:16:34.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:16:34.267 [DEBUG] [Thread-188111] [transport.py] [_log()] starting thread (client mode): 0xb0fb53f0
2026-04-12T11:16:34.267 [DEBUG] [Thread-188111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:16:34.287 [DEBUG] [Thread-188111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:16:34.287 [INFO] [Thread-188111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] client lang: <none>
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] server lang: <none>
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] kex follows: False
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] Compression: none
2026-04-12T11:16:34.290 [DEBUG] [Thread-188111] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:16:34.309 [DEBUG] [Thread-188111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:16:34.310 [DEBUG] [Thread-188111] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:16:34.310 [DEBUG] [Thread-188111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:16:34.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:16:34.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:16:34.312 [DEBUG] [Thread-188111] [transport.py] [_log()] userauth is OK
2026-04-12T11:16:34.312 [DEBUG] [Thread-188111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:16:34.313 [DEBUG] [Thread-188111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:16:34.313 [DEBUG] [Thread-188111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:16:34.313 [DEBUG] [Thread-188111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:16:34.333 [INFO] [Thread-188111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:16:34.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:16:34.974 [DEBUG] [Thread-188111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:16:34.974 [DEBUG] [Thread-188111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:16:34.974 [DEBUG] [Thread-188111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:16:35.015 [DEBUG] [Thread-188111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:16:35.015 [DEBUG] [Thread-188111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:16:35.019 [DEBUG] [Thread-188111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:16:35.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:16:35.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:16:35.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:16:35.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:16:35.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:16:35.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:16:35.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:16:35.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:16:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:16:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.386220 -999.00  +12.30  10.84     91  +11.00 1 3 1 3 1   888    0 1.26 -6.69 ----- 12.4 10.8 281.2 14.7 15.9 -4.5 15.5 -4.1 14.9 -3.6 15.5 -3.5
2026-04-12T11:16:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:16:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:16:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.386220
2026-04-12T11:16:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:16:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:16:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:16:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:16:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:16:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:15:54', tmtdew=0.132495, humidity=99.424, cloud=0.0, wind=13.1465, temperature=11.6198, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:16:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:16:35.049 [DEBUG] [Thread-188111] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:16:35.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:16:35.141 [DEBUG] [Thread-188114] [transport.py] [_log()] starting thread (client mode): 0xa7939870
2026-04-12T11:16:35.141 [DEBUG] [Thread-188114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:16:35.156 [DEBUG] [Thread-188114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:16:35.156 [INFO] [Thread-188114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:16:35.160 [DEBUG] [Thread-188116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:16:35.163 [DEBUG] [Thread-188114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:16:35.163 [DEBUG] [Thread-188114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] client lang: <none>
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] server lang: <none>
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] kex follows: False
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] Compression: none
2026-04-12T11:16:35.164 [DEBUG] [Thread-188114] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:16:35.221 [DEBUG] [Thread-188114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:16:35.222 [DEBUG] [Thread-188114] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:16:35.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:16:35.223 [DEBUG] [Thread-188114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:16:35.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:16:35.278 [DEBUG] [Thread-188114] [transport.py] [_log()] userauth is OK
2026-04-12T11:16:35.278 [DEBUG] [Thread-188114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:16:35.278 [DEBUG] [Thread-188114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:16:35.279 [DEBUG] [Thread-188114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:16:35.279 [DEBUG] [Thread-188114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:16:35.297 [INFO] [Thread-188114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:16:35.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:16:35.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:16:36.112 [DEBUG] [Thread-188114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:16:36.112 [DEBUG] [Thread-188114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:16:36.160 [DEBUG] [Thread-188114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:16:36.160 [DEBUG] [Thread-188114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:16:36.170 [DEBUG] [Thread-188114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:16:36.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:16:36.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:16:36.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:16:36.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:16:36.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:16:36.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:16:36.207 [DEBUG] [Thread-188114] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:16:50.212 [DEBUG] [Thread-188117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:17:03.343 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:17:03.344 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:17:05.249 [DEBUG] [Thread-188118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:17:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:17:06.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:17:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:17:07.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 16, 30), 0.127435, 99.4571, 0.0, 14.6635, 11.7027, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:17:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:16:30
2026-04-12T11:17:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:17:08.205 [DEBUG] [Thread-188119] [transport.py] [_log()] starting thread (client mode): 0xb0f550f0
2026-04-12T11:17:08.206 [DEBUG] [Thread-188119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:17:08.226 [DEBUG] [Thread-188119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:17:08.226 [INFO] [Thread-188119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:08.229 [DEBUG] [Thread-188119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] client lang: <none>
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] server lang: <none>
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] kex follows: False
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] Compression: none
2026-04-12T11:17:08.230 [DEBUG] [Thread-188119] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:17:08.249 [DEBUG] [Thread-188119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:17:08.250 [DEBUG] [Thread-188119] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:17:08.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:17:08.251 [DEBUG] [Thread-188119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:17:08.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:17:08.253 [DEBUG] [Thread-188119] [transport.py] [_log()] userauth is OK
2026-04-12T11:17:08.253 [DEBUG] [Thread-188119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:17:08.253 [DEBUG] [Thread-188119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:17:08.253 [DEBUG] [Thread-188119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:17:08.253 [DEBUG] [Thread-188119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:17:08.278 [INFO] [Thread-188119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:17:08.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:17:08.813 [DEBUG] [Thread-188119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:17:08.813 [DEBUG] [Thread-188119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:17:08.813 [DEBUG] [Thread-188119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:17:08.854 [DEBUG] [Thread-188119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:17:08.855 [DEBUG] [Thread-188119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:17:08.857 [DEBUG] [Thread-188119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:17:08.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:17:08.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:17:08.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:17:08.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:17:08.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:17:08.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:17:08.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:17:08.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:17:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:17:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.386568 -999.00  +12.40   9.49     91  +11.00 1 3 1 3 1   888    0 1.27 -6.85 ----- 10.2 9.5 285.2 15.7 16.0 -4.9 15.6 -4.5 15.0 -3.9 15.6 -3.5
2026-04-12T11:17:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:17:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:17:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.386568
2026-04-12T11:17:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:17:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:17:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:17:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:17:08.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:17:08.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:16:30', tmtdew=0.127435, humidity=99.4571, cloud=0.0, wind=14.6635, temperature=11.7027, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:16:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:17:08.875 [DEBUG] [Thread-188119] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:17:08.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:17:08.968 [DEBUG] [Thread-188122] [transport.py] [_log()] starting thread (client mode): 0xa7969c30
2026-04-12T11:17:08.968 [DEBUG] [Thread-188122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:17:08.984 [DEBUG] [Thread-188122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:17:08.984 [INFO] [Thread-188122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:17:08.992 [DEBUG] [Thread-188122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:17:08.992 [DEBUG] [Thread-188122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:17:08.992 [DEBUG] [Thread-188122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:17:08.992 [DEBUG] [Thread-188122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] client lang: <none>
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] server lang: <none>
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] kex follows: False
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] Compression: none
2026-04-12T11:17:08.993 [DEBUG] [Thread-188122] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:17:09.050 [DEBUG] [Thread-188122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:17:09.051 [DEBUG] [Thread-188122] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:17:09.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:17:09.052 [DEBUG] [Thread-188122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:17:09.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:17:09.108 [DEBUG] [Thread-188122] [transport.py] [_log()] userauth is OK
2026-04-12T11:17:09.108 [DEBUG] [Thread-188122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:17:09.108 [DEBUG] [Thread-188122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:17:09.108 [DEBUG] [Thread-188122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:17:09.108 [DEBUG] [Thread-188122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:17:09.131 [INFO] [Thread-188122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:17:09.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:17:09.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:17:09.972 [DEBUG] [Thread-188122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:17:09.972 [DEBUG] [Thread-188122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:17:10.020 [DEBUG] [Thread-188122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:17:10.020 [DEBUG] [Thread-188122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:17:10.029 [DEBUG] [Thread-188122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:17:10.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:17:10.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:17:10.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:17:10.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:17:10.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:17:10.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:17:10.065 [DEBUG] [Thread-188122] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:17:20.295 [DEBUG] [Thread-188124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:17:30.519 [DEBUG] [Thread-188125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:17:35.351 [DEBUG] [Thread-188126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:17:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:17:40.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:17:40.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:17:41.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 17, 5), 0.127445, 99.4571, 0.0, 17.2566, 11.7192, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:17:41.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:17:05
2026-04-12T11:17:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:17:41.958 [DEBUG] [Thread-188127] [transport.py] [_log()] starting thread (client mode): 0xb0f404f0
2026-04-12T11:17:41.959 [DEBUG] [Thread-188127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:17:41.978 [DEBUG] [Thread-188127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:17:41.978 [INFO] [Thread-188127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:41.980 [DEBUG] [Thread-188127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] client lang: <none>
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] server lang: <none>
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] kex follows: False
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] Compression: none
2026-04-12T11:17:41.981 [DEBUG] [Thread-188127] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:17:41.998 [DEBUG] [Thread-188127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:17:41.998 [DEBUG] [Thread-188127] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:17:41.999 [DEBUG] [Thread-188127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:17:41.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:17:41.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:17:42.000 [DEBUG] [Thread-188127] [transport.py] [_log()] userauth is OK
2026-04-12T11:17:42.000 [DEBUG] [Thread-188127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:17:42.001 [DEBUG] [Thread-188127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:17:42.001 [DEBUG] [Thread-188127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:17:42.001 [DEBUG] [Thread-188127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:17:42.024 [INFO] [Thread-188127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:17:42.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:17:42.553 [DEBUG] [Thread-188127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:17:42.553 [DEBUG] [Thread-188127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:17:42.553 [DEBUG] [Thread-188127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:17:42.594 [DEBUG] [Thread-188127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:17:42.594 [DEBUG] [Thread-188127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:17:42.598 [DEBUG] [Thread-188127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:17:42.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:17:42.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:17:42.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:17:42.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:17:42.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:17:42.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:17:42.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:17:42.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:17:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:17:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.386915 -999.00  +12.40  11.74     91  +11.10 1 3 1 3 1   888    0 1.24 -7.28 ----- 7.3 11.7 270.8 14.9 16.0 -5.3 15.7 -5.3 15.0 -4.1 15.6 -4.4
2026-04-12T11:17:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:17:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:17:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.386915
2026-04-12T11:17:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:17:42.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:17:42.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:17:42.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:17:42.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:17:42.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:17:05', tmtdew=0.127445, humidity=99.4571, cloud=0.0, wind=17.2566, temperature=11.7192, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:17:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:17:42.629 [DEBUG] [Thread-188127] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:17:42.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:17:42.725 [DEBUG] [Thread-188130] [transport.py] [_log()] starting thread (client mode): 0xb0fb4130
2026-04-12T11:17:42.725 [DEBUG] [Thread-188130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:17:42.739 [DEBUG] [Thread-188130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:17:42.739 [INFO] [Thread-188130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:17:42.747 [DEBUG] [Thread-188130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:17:42.747 [DEBUG] [Thread-188130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:17:42.747 [DEBUG] [Thread-188130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:17:42.747 [DEBUG] [Thread-188130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] client lang: <none>
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] server lang: <none>
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] kex follows: False
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:17:42.748 [DEBUG] [Thread-188130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:17:42.749 [DEBUG] [Thread-188130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:17:42.749 [DEBUG] [Thread-188130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:17:42.749 [DEBUG] [Thread-188130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:17:42.749 [DEBUG] [Thread-188130] [transport.py] [_log()] Compression: none
2026-04-12T11:17:42.749 [DEBUG] [Thread-188130] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:17:42.807 [DEBUG] [Thread-188130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:17:42.807 [DEBUG] [Thread-188130] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:17:42.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:17:42.808 [DEBUG] [Thread-188130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:17:42.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:17:42.863 [DEBUG] [Thread-188130] [transport.py] [_log()] userauth is OK
2026-04-12T11:17:42.863 [DEBUG] [Thread-188130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:17:42.863 [DEBUG] [Thread-188130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:17:42.863 [DEBUG] [Thread-188130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:17:42.864 [DEBUG] [Thread-188130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:17:42.882 [INFO] [Thread-188130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:17:42.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:17:43.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:17:43.694 [DEBUG] [Thread-188130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:17:43.695 [DEBUG] [Thread-188130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:17:43.708 [DEBUG] [Thread-188130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:17:43.709 [DEBUG] [Thread-188130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:17:43.730 [DEBUG] [Thread-188130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:17:43.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:17:43.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:17:43.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:17:43.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:17:43.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:17:43.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:17:43.779 [DEBUG] [Thread-188130] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:17:50.390 [DEBUG] [Thread-188132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:03.497 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:03.499 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:05.439 [DEBUG] [Thread-188133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:13.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:18:13.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:18:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:18:15.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 17, 41), 0.16507, 98.8479, 0.0, 19.0548, 12.4721, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:18:15.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:17:41
2026-04-12T11:18:15.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:18:15.638 [DEBUG] [Thread-188134] [transport.py] [_log()] starting thread (client mode): 0xb39c6740
2026-04-12T11:18:15.638 [DEBUG] [Thread-188134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:18:15.656 [DEBUG] [Thread-188134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:18:15.656 [INFO] [Thread-188134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] client lang: <none>
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] server lang: <none>
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] kex follows: False
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] Compression: none
2026-04-12T11:18:15.658 [DEBUG] [Thread-188134] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:18:15.666 [DEBUG] [Thread-188134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:18:15.667 [DEBUG] [Thread-188134] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:18:15.667 [DEBUG] [Thread-188134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:18:15.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:18:15.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:18:15.668 [DEBUG] [Thread-188134] [transport.py] [_log()] userauth is OK
2026-04-12T11:18:15.668 [DEBUG] [Thread-188134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:18:15.669 [DEBUG] [Thread-188134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:18:15.669 [DEBUG] [Thread-188134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:18:15.669 [DEBUG] [Thread-188134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:18:15.684 [INFO] [Thread-188134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:18:15.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:18:16.308 [DEBUG] [Thread-188134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:18:16.308 [DEBUG] [Thread-188134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:18:16.309 [DEBUG] [Thread-188134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:18:16.349 [DEBUG] [Thread-188134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:18:16.349 [DEBUG] [Thread-188134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:18:16.353 [DEBUG] [Thread-188134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:18:16.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:18:16.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:18:16.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:18:16.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:18:16.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:18:16.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:18:16.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:18:16.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:18:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:18:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.387609 -999.00  +12.40  12.12     91  +11.00 1 3 1 3 1   888    0 1.21 -7.94 ----- 12.7 12.1 272.4 17.8 16.2 -7.3 15.8 -6.7 15.2 -5.8 15.8 -6.3
2026-04-12T11:18:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:18:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:18:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.387609
2026-04-12T11:18:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:18:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:18:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:18:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:18:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:18:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:17:41', tmtdew=0.16507, humidity=98.8479, cloud=0.0, wind=19.0548, temperature=12.4721, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:18:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:18:16.373 [DEBUG] [Thread-188134] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:18:16.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:18:16.466 [DEBUG] [Thread-188137] [transport.py] [_log()] starting thread (client mode): 0xb39c7c10
2026-04-12T11:18:16.466 [DEBUG] [Thread-188137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:18:16.481 [DEBUG] [Thread-188137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:18:16.481 [INFO] [Thread-188137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] client lang: <none>
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] server lang: <none>
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] kex follows: False
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] Compression: none
2026-04-12T11:18:16.489 [DEBUG] [Thread-188137] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:18:16.547 [DEBUG] [Thread-188137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:18:16.548 [DEBUG] [Thread-188137] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:18:16.548 [DEBUG] [Thread-188137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:18:16.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:18:16.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:18:16.603 [DEBUG] [Thread-188137] [transport.py] [_log()] userauth is OK
2026-04-12T11:18:16.604 [DEBUG] [Thread-188137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:18:16.604 [DEBUG] [Thread-188137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:18:16.604 [DEBUG] [Thread-188137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:18:16.604 [DEBUG] [Thread-188137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:18:16.629 [INFO] [Thread-188137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:18:16.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:18:16.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:18:17.454 [DEBUG] [Thread-188137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:18:17.454 [DEBUG] [Thread-188137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:18:17.502 [DEBUG] [Thread-188137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:18:17.503 [DEBUG] [Thread-188137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:18:17.513 [DEBUG] [Thread-188137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:18:17.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:18: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')
2026-04-12T11:18:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:18:17.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:18:17.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:18:17.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:18:17.559 [DEBUG] [Thread-188137] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:18:20.477 [DEBUG] [Thread-188139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:30.568 [DEBUG] [Thread-188140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:35.528 [DEBUG] [Thread-188141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:47.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:18:47.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:18:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:18:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 18, 17), 0.13765, 99.3908, 0.0, 15.8101, 11.7026, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:18:48.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:18:17
2026-04-12T11:18:49.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:18:49.364 [DEBUG] [Thread-188142] [transport.py] [_log()] starting thread (client mode): 0xe6cd5d80
2026-04-12T11:18:49.364 [DEBUG] [Thread-188142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:18:49.385 [DEBUG] [Thread-188142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:18:49.385 [INFO] [Thread-188142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:18:49.387 [DEBUG] [Thread-188142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] client lang: <none>
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] server lang: <none>
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] kex follows: False
2026-04-12T11:18:49.388 [DEBUG] [Thread-188142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:18:49.389 [DEBUG] [Thread-188142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:18:49.389 [DEBUG] [Thread-188142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:18:49.389 [DEBUG] [Thread-188142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:18:49.389 [DEBUG] [Thread-188142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:18:49.389 [DEBUG] [Thread-188142] [transport.py] [_log()] Compression: none
2026-04-12T11:18:49.389 [DEBUG] [Thread-188142] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:18:49.408 [DEBUG] [Thread-188142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:18:49.408 [DEBUG] [Thread-188142] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:18:49.409 [DEBUG] [Thread-188142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:18:49.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:18:49.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:18:49.410 [DEBUG] [Thread-188142] [transport.py] [_log()] userauth is OK
2026-04-12T11:18:49.411 [DEBUG] [Thread-188142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:18:49.411 [DEBUG] [Thread-188142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:18:49.411 [DEBUG] [Thread-188142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:18:49.411 [DEBUG] [Thread-188142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:18:49.436 [INFO] [Thread-188142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:18:49.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:18:50.065 [DEBUG] [Thread-188142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:18:50.065 [DEBUG] [Thread-188142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:18:50.066 [DEBUG] [Thread-188142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:18:50.106 [DEBUG] [Thread-188142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:18:50.107 [DEBUG] [Thread-188142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:18:50.109 [DEBUG] [Thread-188142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:18:50.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:18:50.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:18:50.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:18:50.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:18:50.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:18:50.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:18:50.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:18:50.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:18:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:18:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.387956 -999.00  +12.30  16.10     90  +10.80 1 3 1 3 1   888    0 1.19 -7.65 ----- 16.3 16.1 263.2 18.2 16.3 -8.2 15.9 -7.3 15.2 -6.5 15.8 -7.0
2026-04-12T11:18:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:18:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:18:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.387956
2026-04-12T11:18:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:18:50.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:18:50.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:18:50.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:18:50.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:18:50.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:18:17', tmtdew=0.13765, humidity=99.3908, cloud=0.0, wind=15.8101, temperature=11.7026, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:18:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:18:50.134 [DEBUG] [Thread-188142] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:18:50.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:18:50.227 [DEBUG] [Thread-188145] [transport.py] [_log()] starting thread (client mode): 0xb39c7d30
2026-04-12T11:18:50.227 [DEBUG] [Thread-188145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:18:50.243 [DEBUG] [Thread-188145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:18:50.243 [INFO] [Thread-188145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] client lang: <none>
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] server lang: <none>
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] kex follows: False
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:18:50.253 [DEBUG] [Thread-188145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:18:50.254 [DEBUG] [Thread-188145] [transport.py] [_log()] Compression: none
2026-04-12T11:18:50.254 [DEBUG] [Thread-188145] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:18:50.330 [DEBUG] [Thread-188145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:18:50.330 [DEBUG] [Thread-188145] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:18:50.331 [DEBUG] [Thread-188145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:18:50.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:18:50.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:18:50.402 [DEBUG] [Thread-188145] [transport.py] [_log()] userauth is OK
2026-04-12T11:18:50.402 [DEBUG] [Thread-188145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:18:50.402 [DEBUG] [Thread-188145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:18:50.402 [DEBUG] [Thread-188145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:18:50.403 [DEBUG] [Thread-188145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:18:50.421 [INFO] [Thread-188145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:18:50.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:18:50.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:18:50.568 [DEBUG] [Thread-188147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:18:51.270 [DEBUG] [Thread-188145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:18:51.271 [DEBUG] [Thread-188145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:18:51.318 [DEBUG] [Thread-188145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:18:51.318 [DEBUG] [Thread-188145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:18:51.327 [DEBUG] [Thread-188145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:18:51.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:18:51.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:18:51.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:18:51.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:18:51.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:18:51.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:18:51.364 [DEBUG] [Thread-188145] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:19:03.652 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:19:03.654 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:19:05.624 [DEBUG] [Thread-188148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:19:20.662 [DEBUG] [Thread-188149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:19:21.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:19:21.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:19:21.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:19:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 18, 52), 0.19566, 98.6489, 0.0, 18.3845, 12.3726, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:19:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:18:52
2026-04-12T11:19:23.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:19:23.343 [DEBUG] [Thread-188150] [transport.py] [_log()] starting thread (client mode): 0xb39c5600
2026-04-12T11:19:23.344 [DEBUG] [Thread-188150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:19:23.364 [DEBUG] [Thread-188150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:19:23.364 [INFO] [Thread-188150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] client lang: <none>
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] server lang: <none>
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] kex follows: False
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:19:23.367 [DEBUG] [Thread-188150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:19:23.368 [DEBUG] [Thread-188150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:19:23.368 [DEBUG] [Thread-188150] [transport.py] [_log()] Compression: none
2026-04-12T11:19:23.368 [DEBUG] [Thread-188150] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:19:23.386 [DEBUG] [Thread-188150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:19:23.387 [DEBUG] [Thread-188150] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:19:23.388 [DEBUG] [Thread-188150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:19:23.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:19:23.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:19:23.390 [DEBUG] [Thread-188150] [transport.py] [_log()] userauth is OK
2026-04-12T11:19:23.390 [DEBUG] [Thread-188150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:19:23.390 [DEBUG] [Thread-188150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:19:23.391 [DEBUG] [Thread-188150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:19:23.391 [DEBUG] [Thread-188150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:19:23.414 [INFO] [Thread-188150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:19:23.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:19:24.073 [DEBUG] [Thread-188150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:19:24.074 [DEBUG] [Thread-188150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:19:24.074 [DEBUG] [Thread-188150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:19:24.115 [DEBUG] [Thread-188150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:19:24.115 [DEBUG] [Thread-188150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:19:24.119 [DEBUG] [Thread-188150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:19:24.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:19:24.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:19:24.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:19:24.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:19:24.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:19:24.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:19:24.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:19:24.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:19:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:19:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.388304 -999.00  +12.40  16.79     91  +11.00 1 3 1 3 1   888    0 1.22 -7.56 ----- 13.7 16.8 266.2 18.5 16.4 -8.6 15.9 -7.1 15.2 -6.7 16.0 -7.0
2026-04-12T11:19:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:19:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:19:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.388304
2026-04-12T11:19:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:19:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:19:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:19:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:19:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:19:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:18:52', tmtdew=0.19566, humidity=98.6489, cloud=0.0, wind=18.3845, temperature=12.3726, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:19:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:19:24.144 [DEBUG] [Thread-188150] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:19:24.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:19:24.238 [DEBUG] [Thread-188153] [transport.py] [_log()] starting thread (client mode): 0xb39c6bf0
2026-04-12T11:19:24.238 [DEBUG] [Thread-188153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:19:24.257 [DEBUG] [Thread-188153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:19:24.257 [INFO] [Thread-188153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] client lang: <none>
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] server lang: <none>
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] kex follows: False
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:19:24.265 [DEBUG] [Thread-188153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:19:24.266 [DEBUG] [Thread-188153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:19:24.266 [DEBUG] [Thread-188153] [transport.py] [_log()] Compression: none
2026-04-12T11:19:24.266 [DEBUG] [Thread-188153] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:19:24.326 [DEBUG] [Thread-188153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:19:24.326 [DEBUG] [Thread-188153] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:19:24.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:19:24.327 [DEBUG] [Thread-188153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:19:24.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:19:24.383 [DEBUG] [Thread-188153] [transport.py] [_log()] userauth is OK
2026-04-12T11:19:24.384 [DEBUG] [Thread-188153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:19:24.384 [DEBUG] [Thread-188153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:19:24.384 [DEBUG] [Thread-188153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:19:24.384 [DEBUG] [Thread-188153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:19:24.405 [INFO] [Thread-188153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:19:24.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:19:24.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:19:25.220 [DEBUG] [Thread-188153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:19:25.220 [DEBUG] [Thread-188153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:19:25.268 [DEBUG] [Thread-188153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:19:25.268 [DEBUG] [Thread-188153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:19:25.278 [DEBUG] [Thread-188153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:19:25.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:19:25.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:19:25.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:19:25.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:19:25.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:19:25.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:19:25.315 [DEBUG] [Thread-188153] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:19:30.633 [DEBUG] [Thread-188155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:19:35.699 [DEBUG] [Thread-188156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:19:50.774 [DEBUG] [Thread-188157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:19:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:19:55.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:19:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:19:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 19, 28), 0.08769, 99.3908, 0.0, 17.9276, 11.769, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:19:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:19:28
2026-04-12T11:19:57.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:19:57.245 [DEBUG] [Thread-188158] [transport.py] [_log()] starting thread (client mode): 0xb39c6230
2026-04-12T11:19:57.245 [DEBUG] [Thread-188158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:19:57.266 [DEBUG] [Thread-188158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:19:57.266 [INFO] [Thread-188158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] client lang: <none>
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] server lang: <none>
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] kex follows: False
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:19:57.269 [DEBUG] [Thread-188158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:19:57.270 [DEBUG] [Thread-188158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:19:57.270 [DEBUG] [Thread-188158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:19:57.270 [DEBUG] [Thread-188158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:19:57.270 [DEBUG] [Thread-188158] [transport.py] [_log()] Compression: none
2026-04-12T11:19:57.270 [DEBUG] [Thread-188158] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:19:57.287 [DEBUG] [Thread-188158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:19:57.287 [DEBUG] [Thread-188158] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:19:57.288 [DEBUG] [Thread-188158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:19:57.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:19:57.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:19:57.291 [DEBUG] [Thread-188158] [transport.py] [_log()] userauth is OK
2026-04-12T11:19:57.291 [DEBUG] [Thread-188158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:19:57.291 [DEBUG] [Thread-188158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:19:57.291 [DEBUG] [Thread-188158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:19:57.291 [DEBUG] [Thread-188158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:19:57.307 [INFO] [Thread-188158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:19:57.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:19:57.870 [DEBUG] [Thread-188158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:19:57.870 [DEBUG] [Thread-188158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:19:57.870 [DEBUG] [Thread-188158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:19:57.911 [DEBUG] [Thread-188158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:19:57.912 [DEBUG] [Thread-188158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:19:57.914 [DEBUG] [Thread-188158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:19:57.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:19:57.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:19:57.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:19:57.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:19:57.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:19:57.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:19:57.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:19:57.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:19:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:19:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.388651 -999.00  +12.50   8.36     91  +11.20 1 3 1 3 1   888    0 1.20 -7.74 ----- 10.0 8.4 269.1 16.7 16.6 -8.5 16.1 -7.0 15.4 -7.3 16.0 -7.4
2026-04-12T11:19:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:19:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:19:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.388651
2026-04-12T11:19:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:19:57.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:19:57.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:19:57.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:19:57.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:19:57.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:19:28', tmtdew=0.08769, humidity=99.3908, cloud=0.0, wind=17.9276, temperature=11.769, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:19:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:19:57.936 [DEBUG] [Thread-188158] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:19:58.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:19:58.033 [DEBUG] [Thread-188161] [transport.py] [_log()] starting thread (client mode): 0xb39c79a0
2026-04-12T11:19:58.033 [DEBUG] [Thread-188161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:19:58.047 [DEBUG] [Thread-188161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:19:58.047 [INFO] [Thread-188161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:19:58.055 [DEBUG] [Thread-188161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:19:58.055 [DEBUG] [Thread-188161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] client lang: <none>
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] server lang: <none>
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] kex follows: False
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:19:58.056 [DEBUG] [Thread-188161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:19:58.057 [DEBUG] [Thread-188161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:19:58.057 [DEBUG] [Thread-188161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:19:58.057 [DEBUG] [Thread-188161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:19:58.057 [DEBUG] [Thread-188161] [transport.py] [_log()] Compression: none
2026-04-12T11:19:58.057 [DEBUG] [Thread-188161] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:19:58.115 [DEBUG] [Thread-188161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:19:58.116 [DEBUG] [Thread-188161] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:19:58.116 [DEBUG] [Thread-188161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:19:58.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:19:58.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:19:58.171 [DEBUG] [Thread-188161] [transport.py] [_log()] userauth is OK
2026-04-12T11:19:58.172 [DEBUG] [Thread-188161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:19:58.172 [DEBUG] [Thread-188161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:19:58.172 [DEBUG] [Thread-188161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:19:58.173 [DEBUG] [Thread-188161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:19:58.192 [INFO] [Thread-188161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:19:58.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:19:58.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:19:59.012 [DEBUG] [Thread-188161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:19:59.012 [DEBUG] [Thread-188161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:19:59.060 [DEBUG] [Thread-188161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:19:59.060 [DEBUG] [Thread-188161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:19:59.069 [DEBUG] [Thread-188161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:19:59.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:19:59.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:19:59.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:19:59.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:19:59.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:19:59.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:19:59.108 [DEBUG] [Thread-188161] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:20:03.811 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:20:03.812 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:20:05.814 [DEBUG] [Thread-188163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:20:20.871 [DEBUG] [Thread-188164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:20:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:20:29.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:20:29.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:20:30.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 20, 3), 0.09789, 99.3244, 0.0, 16.2518, 11.7192, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:20:30.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:20:03
2026-04-12T11:20:30.695 [DEBUG] [Thread-188165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:20:30.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:20:30.934 [DEBUG] [Thread-188166] [transport.py] [_log()] starting thread (client mode): 0xb39c7f40
2026-04-12T11:20:30.934 [DEBUG] [Thread-188166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:20:30.956 [DEBUG] [Thread-188166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:20:30.956 [INFO] [Thread-188166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:20:30.959 [DEBUG] [Thread-188166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:20:30.960 [DEBUG] [Thread-188166] [transport.py] [_log()] client lang: <none>
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] server lang: <none>
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] kex follows: False
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] Compression: none
2026-04-12T11:20:30.961 [DEBUG] [Thread-188166] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:20:30.981 [DEBUG] [Thread-188166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:20:30.981 [DEBUG] [Thread-188166] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:20:30.982 [DEBUG] [Thread-188166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:20:30.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:20:30.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:20:30.984 [DEBUG] [Thread-188166] [transport.py] [_log()] userauth is OK
2026-04-12T11:20:30.984 [DEBUG] [Thread-188166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:20:30.984 [DEBUG] [Thread-188166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:20:30.984 [DEBUG] [Thread-188166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:20:30.984 [DEBUG] [Thread-188166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:20:31.003 [INFO] [Thread-188166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:20:31.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:20:31.619 [DEBUG] [Thread-188166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:20:31.619 [DEBUG] [Thread-188166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:20:31.620 [DEBUG] [Thread-188166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:20:31.660 [DEBUG] [Thread-188166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:20:31.660 [DEBUG] [Thread-188166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:20:31.663 [DEBUG] [Thread-188166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:20:31.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:20:31.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:20:31.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:20:31.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:20:31.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:20:31.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:20:31.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:20:31.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:20:31.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:20:31.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.388998 -999.00  +12.60   9.94     91  +11.10 1 3 1 3 1   888    0 1.22 -7.27 ----- 9.2 9.9 277.2 21.0 16.6 -8.6 16.1 -6.6 15.5 -5.8 16.1 -8.0
2026-04-12T11:20:31.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:20:31.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:20:31.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.388998
2026-04-12T11:20:31.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:20:31.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:20:31.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:20:31.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:20:31.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:20:31.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:20:03', tmtdew=0.09789, humidity=99.3244, cloud=0.0, wind=16.2518, temperature=11.7192, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:20:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:20:31.691 [DEBUG] [Thread-188166] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:20:31.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:20:31.785 [DEBUG] [Thread-188169] [transport.py] [_log()] starting thread (client mode): 0xb39c7b20
2026-04-12T11:20:31.785 [DEBUG] [Thread-188169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:20:31.800 [DEBUG] [Thread-188169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:20:31.800 [INFO] [Thread-188169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:20:31.807 [DEBUG] [Thread-188169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:20:31.808 [DEBUG] [Thread-188169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] client lang: <none>
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] server lang: <none>
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] kex follows: False
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:20:31.809 [DEBUG] [Thread-188169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:20:31.810 [DEBUG] [Thread-188169] [transport.py] [_log()] Compression: none
2026-04-12T11:20:31.810 [DEBUG] [Thread-188169] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:20:31.871 [DEBUG] [Thread-188169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:20:31.871 [DEBUG] [Thread-188169] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:20:31.872 [DEBUG] [Thread-188169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:20:31.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:20:31.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:20:31.972 [DEBUG] [Thread-188169] [transport.py] [_log()] userauth is OK
2026-04-12T11:20:31.972 [DEBUG] [Thread-188169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:20:31.972 [DEBUG] [Thread-188169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:20:31.972 [DEBUG] [Thread-188169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:20:31.972 [DEBUG] [Thread-188169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:20:32.015 [INFO] [Thread-188169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:20:32.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:20:32.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:20:32.801 [DEBUG] [Thread-188169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:20:32.801 [DEBUG] [Thread-188169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:20:32.849 [DEBUG] [Thread-188169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:20:32.849 [DEBUG] [Thread-188169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:20:32.858 [DEBUG] [Thread-188169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:20:32.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:20:32.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:20:32.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:20:32.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:20:32.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:20:32.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:20:32.896 [DEBUG] [Thread-188169] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:20:35.907 [DEBUG] [Thread-188171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:20:50.957 [DEBUG] [Thread-188172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:21:02.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:21:02.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:21:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:21:03.966 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:21:03.967 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:21:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 20, 39), 0.18567, 98.7152, 0.0, 17.3614, 12.7374, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:21:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:20:39
2026-04-12T11:21:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:21:04.765 [DEBUG] [Thread-188173] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-12T11:21:04.765 [DEBUG] [Thread-188173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:21:04.786 [DEBUG] [Thread-188173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:21:04.786 [INFO] [Thread-188173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:21:04.789 [DEBUG] [Thread-188173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:21:04.789 [DEBUG] [Thread-188173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:21:04.789 [DEBUG] [Thread-188173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] client lang: <none>
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] server lang: <none>
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] kex follows: False
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:21:04.790 [DEBUG] [Thread-188173] [transport.py] [_log()] Compression: none
2026-04-12T11:21:04.791 [DEBUG] [Thread-188173] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:21:04.806 [DEBUG] [Thread-188173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:21:04.807 [DEBUG] [Thread-188173] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:21:04.807 [DEBUG] [Thread-188173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:21:04.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:21:04.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:21:04.809 [DEBUG] [Thread-188173] [transport.py] [_log()] userauth is OK
2026-04-12T11:21:04.809 [DEBUG] [Thread-188173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:21:04.809 [DEBUG] [Thread-188173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:21:04.809 [DEBUG] [Thread-188173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:21:04.810 [DEBUG] [Thread-188173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:21:04.834 [INFO] [Thread-188173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:21:04.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:21:05.431 [DEBUG] [Thread-188173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:21:05.431 [DEBUG] [Thread-188173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:21:05.432 [DEBUG] [Thread-188173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:21:05.472 [DEBUG] [Thread-188173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:21:05.472 [DEBUG] [Thread-188173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:21:05.475 [DEBUG] [Thread-188173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:21:05.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:21:05.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:21:05.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:21:05.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:21:05.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:21:05.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:21:05.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:21:05.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:21:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:21:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.389345 -999.00  +12.60  10.53     91  +11.20 1 3 1 3 1   888    0 1.20 -7.46 ----- 15.8 10.5 270.0 14.3 16.7 -7.5 16.2 -6.0 15.6 -5.1 16.2 -6.7
2026-04-12T11:21:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:21:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:21:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.389345
2026-04-12T11:21:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:21:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:21:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:21:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:21:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:21:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:20:39', tmtdew=0.18567, humidity=98.7152, cloud=0.0, wind=17.3614, temperature=12.7374, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:20:39.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:21:05.504 [DEBUG] [Thread-188173] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:21:05.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:21:05.598 [DEBUG] [Thread-188176] [transport.py] [_log()] starting thread (client mode): 0xa79694e0
2026-04-12T11:21:05.599 [DEBUG] [Thread-188176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:21:05.613 [DEBUG] [Thread-188176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:21:05.613 [INFO] [Thread-188176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] client lang: <none>
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] server lang: <none>
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] kex follows: False
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:21:05.621 [DEBUG] [Thread-188176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:21:05.622 [DEBUG] [Thread-188176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:21:05.622 [DEBUG] [Thread-188176] [transport.py] [_log()] Compression: none
2026-04-12T11:21:05.622 [DEBUG] [Thread-188176] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:21:05.680 [DEBUG] [Thread-188176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:21:05.680 [DEBUG] [Thread-188176] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:21:05.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:21:05.681 [DEBUG] [Thread-188176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:21:05.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:21:05.736 [DEBUG] [Thread-188176] [transport.py] [_log()] userauth is OK
2026-04-12T11:21:05.736 [DEBUG] [Thread-188176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:21:05.736 [DEBUG] [Thread-188176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:21:05.736 [DEBUG] [Thread-188176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:21:05.737 [DEBUG] [Thread-188176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:21:05.756 [INFO] [Thread-188176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:21:05.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:21:05.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:21:05.993 [DEBUG] [Thread-188178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:21:06.573 [DEBUG] [Thread-188176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:21:06.574 [DEBUG] [Thread-188176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:21:06.623 [DEBUG] [Thread-188176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:21:06.623 [DEBUG] [Thread-188176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:21:06.635 [DEBUG] [Thread-188176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:21:06.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:21:06.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:21:06.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:21:06.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:21:06.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:21:06.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:21:06.678 [DEBUG] [Thread-188176] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:21:21.048 [DEBUG] [Thread-188179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:21:30.755 [DEBUG] [Thread-188180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:21:36.086 [DEBUG] [Thread-188181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:21:36.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:21:36.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:21:36.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:21:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 21, 15), 0.10818, 99.2581, 0.0, 16.3746, 11.8355, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:21:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:21:15
2026-04-12T11:21:38.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:21:38.707 [DEBUG] [Thread-188182] [transport.py] [_log()] starting thread (client mode): 0xa7969030
2026-04-12T11:21:38.707 [DEBUG] [Thread-188182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:21:38.719 [DEBUG] [Thread-188182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:21:38.719 [INFO] [Thread-188182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] client lang: <none>
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] server lang: <none>
2026-04-12T11:21:38.721 [DEBUG] [Thread-188182] [transport.py] [_log()] kex follows: False
2026-04-12T11:21:38.722 [DEBUG] [Thread-188182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:21:38.722 [DEBUG] [Thread-188182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:21:38.722 [DEBUG] [Thread-188182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:21:38.722 [DEBUG] [Thread-188182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:21:38.722 [DEBUG] [Thread-188182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:21:38.722 [DEBUG] [Thread-188182] [transport.py] [_log()] Compression: none
2026-04-12T11:21:38.722 [DEBUG] [Thread-188182] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:21:38.735 [DEBUG] [Thread-188182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:21:38.735 [DEBUG] [Thread-188182] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:21:38.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:21:38.737 [DEBUG] [Thread-188182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:21:38.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:21:38.739 [DEBUG] [Thread-188182] [transport.py] [_log()] userauth is OK
2026-04-12T11:21:38.739 [DEBUG] [Thread-188182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:21:38.739 [DEBUG] [Thread-188182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:21:38.739 [DEBUG] [Thread-188182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:21:38.739 [DEBUG] [Thread-188182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:21:38.763 [INFO] [Thread-188182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:21:38.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:21:39.419 [DEBUG] [Thread-188182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:21:39.419 [DEBUG] [Thread-188182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:21:39.420 [DEBUG] [Thread-188182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:21:39.460 [DEBUG] [Thread-188182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:21:39.460 [DEBUG] [Thread-188182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:21:39.464 [DEBUG] [Thread-188182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:21:39.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:21:39.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:21:39.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:21:39.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:21:39.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:21:39.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:21:39.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:21:39.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:21:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:21:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.389693 -999.00  +12.40  11.18     90  +10.90 1 3 1 3 1   888    0 1.21 -7.88 ----- 10.8 11.2 277.4 22.4 16.6 -7.2 16.2 -5.7 15.5 -4.5 16.2 -6.2
2026-04-12T11:21:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:21:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:21:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.389693
2026-04-12T11:21:39.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:21:39.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:21:39.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:21:39.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:21:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:21:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:21:15', tmtdew=0.10818, humidity=99.2581, cloud=0.0, wind=16.3746, temperature=11.8355, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:21:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:21:39.493 [DEBUG] [Thread-188182] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:21:39.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:21:39.588 [DEBUG] [Thread-188185] [transport.py] [_log()] starting thread (client mode): 0xa796b8b0
2026-04-12T11:21:39.588 [DEBUG] [Thread-188185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:21:39.605 [DEBUG] [Thread-188185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:21:39.605 [INFO] [Thread-188185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] client lang: <none>
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] server lang: <none>
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] kex follows: False
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:21:39.618 [DEBUG] [Thread-188185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:21:39.619 [DEBUG] [Thread-188185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:21:39.619 [DEBUG] [Thread-188185] [transport.py] [_log()] Compression: none
2026-04-12T11:21:39.619 [DEBUG] [Thread-188185] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:21:39.678 [DEBUG] [Thread-188185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:21:39.679 [DEBUG] [Thread-188185] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:21:39.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:21:39.680 [DEBUG] [Thread-188185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:21:39.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:21:39.737 [DEBUG] [Thread-188185] [transport.py] [_log()] userauth is OK
2026-04-12T11:21:39.738 [DEBUG] [Thread-188185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:21:39.738 [DEBUG] [Thread-188185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:21:39.738 [DEBUG] [Thread-188185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:21:39.738 [DEBUG] [Thread-188185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:21:39.758 [INFO] [Thread-188185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:21:39.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:21:39.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:21:40.599 [DEBUG] [Thread-188185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:21:40.600 [DEBUG] [Thread-188185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:21:40.652 [DEBUG] [Thread-188185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:21:40.653 [DEBUG] [Thread-188185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:21:40.667 [DEBUG] [Thread-188185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:21:40.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:21:40.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:21:40.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:21:40.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:21:40.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:21:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:21:40.712 [DEBUG] [Thread-188185] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:21:51.124 [DEBUG] [Thread-188187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:22:04.123 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:22:04.124 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:22:06.184 [DEBUG] [Thread-188188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:22:10.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:22:10.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:22:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:22:12.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 21, 50), 0.21628, 98.5162, 0.0, 18.0317, 12.5715, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:22:12.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:21:50
2026-04-12T11:22:12.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:22:12.558 [DEBUG] [Thread-188189] [transport.py] [_log()] starting thread (client mode): 0xb39c6dd0
2026-04-12T11:22:12.558 [DEBUG] [Thread-188189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:22:12.580 [DEBUG] [Thread-188189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:22:12.580 [INFO] [Thread-188189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:22:12.584 [DEBUG] [Thread-188189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:22:12.584 [DEBUG] [Thread-188189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:22:12.584 [DEBUG] [Thread-188189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:22:12.584 [DEBUG] [Thread-188189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:12.584 [DEBUG] [Thread-188189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] client lang: <none>
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] server lang: <none>
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] kex follows: False
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:22:12.585 [DEBUG] [Thread-188189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:22:12.586 [DEBUG] [Thread-188189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:22:12.586 [DEBUG] [Thread-188189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:22:12.586 [DEBUG] [Thread-188189] [transport.py] [_log()] Compression: none
2026-04-12T11:22:12.586 [DEBUG] [Thread-188189] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:22:12.604 [DEBUG] [Thread-188189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:22:12.605 [DEBUG] [Thread-188189] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:22:12.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:22:12.606 [DEBUG] [Thread-188189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:22:12.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:22:12.608 [DEBUG] [Thread-188189] [transport.py] [_log()] userauth is OK
2026-04-12T11:22:12.608 [DEBUG] [Thread-188189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:22:12.608 [DEBUG] [Thread-188189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:22:12.608 [DEBUG] [Thread-188189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:22:12.608 [DEBUG] [Thread-188189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:22:12.632 [INFO] [Thread-188189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:22:12.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:22:13.278 [DEBUG] [Thread-188189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:22:13.278 [DEBUG] [Thread-188189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:22:13.278 [DEBUG] [Thread-188189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:22:13.319 [DEBUG] [Thread-188189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:22:13.319 [DEBUG] [Thread-188189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:22:13.322 [DEBUG] [Thread-188189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:22:13.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:22:13.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:22:13.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:22:13.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:22:13.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:22:13.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:22:13.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:22:13.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:22:13.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:22:13.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.390040 -999.00  +12.50  13.39     91  +11.00 1 3 1 3 1   888    0 1.22 -7.91 ----- 12.8 13.4 278.2 18.1 16.7 -6.3 16.2 -4.9 15.6 -4.0 16.2 -5.3
2026-04-12T11:22:13.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:22:13.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:22:13.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.390040
2026-04-12T11:22:13.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:22:13.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:22:13.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:22:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:22:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:22:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:21:50', tmtdew=0.21628, humidity=98.5162, cloud=0.0, wind=18.0317, temperature=12.5715, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:21:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:22:13.349 [DEBUG] [Thread-188189] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:22:13.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:22:13.454 [DEBUG] [Thread-188192] [transport.py] [_log()] starting thread (client mode): 0xb39c6f80
2026-04-12T11:22:13.454 [DEBUG] [Thread-188192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:22:13.469 [DEBUG] [Thread-188192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:22:13.470 [INFO] [Thread-188192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:22:13.477 [DEBUG] [Thread-188192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] client lang: <none>
2026-04-12T11:22:13.478 [DEBUG] [Thread-188192] [transport.py] [_log()] server lang: <none>
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] kex follows: False
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] Compression: none
2026-04-12T11:22:13.479 [DEBUG] [Thread-188192] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:22:13.538 [DEBUG] [Thread-188192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:22:13.538 [DEBUG] [Thread-188192] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:22:13.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:22:13.539 [DEBUG] [Thread-188192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:22:13.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:22:13.596 [DEBUG] [Thread-188192] [transport.py] [_log()] userauth is OK
2026-04-12T11:22:13.597 [DEBUG] [Thread-188192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:22:13.597 [DEBUG] [Thread-188192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:22:13.597 [DEBUG] [Thread-188192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:22:13.597 [DEBUG] [Thread-188192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:22:13.616 [INFO] [Thread-188192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:22:13.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:22:13.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:22:14.458 [DEBUG] [Thread-188192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:22:14.458 [DEBUG] [Thread-188192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:22:14.506 [DEBUG] [Thread-188192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:22:14.507 [DEBUG] [Thread-188192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:22:14.516 [DEBUG] [Thread-188192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:22:14.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:22:14.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:22:14.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
2026-04-12T11:22:14.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:22:14.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:22:14.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:22:14.555 [DEBUG] [Thread-188192] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:22:21.220 [DEBUG] [Thread-188194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:22:30.806 [DEBUG] [Thread-188195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:22:36.277 [DEBUG] [Thread-188196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:22:44.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:22:44.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:22:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:22:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 22, 25), 0.11586, 98.7083, 0.0, 14.7863, 11.8689, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:22:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:22:25
2026-04-12T11:22:46.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:22:46.432 [DEBUG] [Thread-188197] [transport.py] [_log()] starting thread (client mode): 0xa796a380
2026-04-12T11:22:46.432 [DEBUG] [Thread-188197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:22:46.452 [DEBUG] [Thread-188197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:22:46.452 [INFO] [Thread-188197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] client lang: <none>
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] server lang: <none>
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] kex follows: False
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:22:46.455 [DEBUG] [Thread-188197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:22:46.456 [DEBUG] [Thread-188197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:22:46.456 [DEBUG] [Thread-188197] [transport.py] [_log()] Compression: none
2026-04-12T11:22:46.456 [DEBUG] [Thread-188197] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:22:46.473 [DEBUG] [Thread-188197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:22:46.474 [DEBUG] [Thread-188197] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:22:46.474 [DEBUG] [Thread-188197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:22:46.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:22:46.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:22:46.476 [DEBUG] [Thread-188197] [transport.py] [_log()] userauth is OK
2026-04-12T11:22:46.476 [DEBUG] [Thread-188197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:22:46.477 [DEBUG] [Thread-188197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:22:46.477 [DEBUG] [Thread-188197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:22:46.477 [DEBUG] [Thread-188197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:22:46.497 [INFO] [Thread-188197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:22:46.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:22:47.136 [DEBUG] [Thread-188197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:22:47.136 [DEBUG] [Thread-188197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:22:47.137 [DEBUG] [Thread-188197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:22:47.177 [DEBUG] [Thread-188197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:22:47.177 [DEBUG] [Thread-188197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:22:47.181 [DEBUG] [Thread-188197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:22:47.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:22:47.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:22:47.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:22:47.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:22:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:22:47.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:22:47.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:22:47.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:22:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:22:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.390387 -999.00  +12.50  11.24     91  +11.10 1 3 1 3 1   888    0 1.21 -7.69 ----- 12.0 11.2 270.1 16.5 16.6 -5.6 16.2 -5.1 15.5 -3.6 16.2 -4.4
2026-04-12T11:22:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:22:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:22:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.390387
2026-04-12T11:22:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:22:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:22:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:22:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:22:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:22:47.206 [DEBUG] [Thread-188197] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:22:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:22:25', tmtdew=0.11586, humidity=98.7083, cloud=0.0, wind=14.7863, temperature=11.8689, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:22:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:22:47.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:22:47.299 [DEBUG] [Thread-188200] [transport.py] [_log()] starting thread (client mode): 0xa7969db0
2026-04-12T11:22:47.299 [DEBUG] [Thread-188200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:22:47.317 [DEBUG] [Thread-188200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:22:47.317 [INFO] [Thread-188200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:22:47.325 [DEBUG] [Thread-188200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:22:47.326 [DEBUG] [Thread-188200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:22:47.327 [DEBUG] [Thread-188200] [transport.py] [_log()] client lang: <none>
2026-04-12T11:22:47.327 [DEBUG] [Thread-188200] [transport.py] [_log()] server lang: <none>
2026-04-12T11:22:47.327 [DEBUG] [Thread-188200] [transport.py] [_log()] kex follows: False
2026-04-12T11:22:47.327 [DEBUG] [Thread-188200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:22:47.327 [DEBUG] [Thread-188200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:22:47.327 [DEBUG] [Thread-188200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:22:47.327 [DEBUG] [Thread-188200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:22:47.328 [DEBUG] [Thread-188200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:22:47.328 [DEBUG] [Thread-188200] [transport.py] [_log()] Compression: none
2026-04-12T11:22:47.328 [DEBUG] [Thread-188200] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:22:47.385 [DEBUG] [Thread-188200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:22:47.385 [DEBUG] [Thread-188200] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:22:47.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:22:47.387 [DEBUG] [Thread-188200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:22:47.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:22:47.444 [DEBUG] [Thread-188200] [transport.py] [_log()] userauth is OK
2026-04-12T11:22:47.445 [DEBUG] [Thread-188200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:22:47.445 [DEBUG] [Thread-188200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:22:47.445 [DEBUG] [Thread-188200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:22:47.445 [DEBUG] [Thread-188200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:22:47.465 [INFO] [Thread-188200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:22:47.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:22:47.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:22:48.331 [DEBUG] [Thread-188200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:22:48.332 [DEBUG] [Thread-188200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:22:48.380 [DEBUG] [Thread-188200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:22:48.380 [DEBUG] [Thread-188200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:22:48.393 [DEBUG] [Thread-188200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:22:48.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:22:48.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:22:48.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:22:48.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:22:48.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:22:48.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:22:48.431 [DEBUG] [Thread-188200] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:22:51.318 [DEBUG] [Thread-188202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:04.271 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:04.272 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:06.371 [DEBUG] [Thread-188203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:18.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:23:18.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:23: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
2026-04-12T11:23:19.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 23, 1), 0.12607, 98.642, 0.0, 14.0101, 11.8192, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:23:19.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:23:01
2026-04-12T11:23:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:23:20.242 [DEBUG] [Thread-188204] [transport.py] [_log()] starting thread (client mode): 0xa79689a0
2026-04-12T11:23:20.242 [DEBUG] [Thread-188204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:23:20.261 [DEBUG] [Thread-188204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:23:20.261 [INFO] [Thread-188204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:23:20.263 [DEBUG] [Thread-188204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:23:20.263 [DEBUG] [Thread-188204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:23:20.263 [DEBUG] [Thread-188204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:23:20.263 [DEBUG] [Thread-188204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] client lang: <none>
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] server lang: <none>
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] kex follows: False
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] Compression: none
2026-04-12T11:23:20.264 [DEBUG] [Thread-188204] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:23:20.280 [DEBUG] [Thread-188204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:23:20.281 [DEBUG] [Thread-188204] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:23:20.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:23:20.282 [DEBUG] [Thread-188204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:23:20.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:23:20.284 [DEBUG] [Thread-188204] [transport.py] [_log()] userauth is OK
2026-04-12T11:23:20.284 [DEBUG] [Thread-188204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:23:20.284 [DEBUG] [Thread-188204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:23:20.284 [DEBUG] [Thread-188204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:23:20.284 [DEBUG] [Thread-188204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:23:20.303 [INFO] [Thread-188204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:23:20.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:23:20.932 [DEBUG] [Thread-188204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:23:20.932 [DEBUG] [Thread-188204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:23:20.932 [DEBUG] [Thread-188204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:23:20.973 [DEBUG] [Thread-188204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:23:20.973 [DEBUG] [Thread-188204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:23:20.975 [DEBUG] [Thread-188204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:23:20.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:23:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:23:20.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:23:20.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:23:20.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:23:20.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:23:20.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:23:20.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:23:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:23:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.390734 -999.00  +12.40  16.56     90  +11.00 1 3 1 3 1   888    0 1.20 -7.31 ----- 14.7 16.6 269.8 20.4 16.6 -6.8 16.2 -4.9 15.5 -4.1 16.2 -4.6
2026-04-12T11:23:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:23:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:23:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.390734
2026-04-12T11:23:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:23:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:23:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:23:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:23:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:23:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:23:01', tmtdew=0.12607, humidity=98.642, cloud=0.0, wind=14.0101, temperature=11.8192, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:22:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:23:21.001 [DEBUG] [Thread-188204] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:23:21.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:23:21.093 [DEBUG] [Thread-188207] [transport.py] [_log()] starting thread (client mode): 0xa796b100
2026-04-12T11:23:21.093 [DEBUG] [Thread-188207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:23:21.108 [DEBUG] [Thread-188207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:23:21.109 [INFO] [Thread-188207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:23:21.116 [DEBUG] [Thread-188207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:23:21.117 [DEBUG] [Thread-188207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:23:21.117 [DEBUG] [Thread-188207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:23:21.117 [DEBUG] [Thread-188207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:21.117 [DEBUG] [Thread-188207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:21.117 [DEBUG] [Thread-188207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:21.117 [DEBUG] [Thread-188207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:21.117 [DEBUG] [Thread-188207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] client lang: <none>
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] server lang: <none>
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] kex follows: False
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] Compression: none
2026-04-12T11:23:21.118 [DEBUG] [Thread-188207] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:23:21.180 [DEBUG] [Thread-188207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:23:21.180 [DEBUG] [Thread-188207] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:23:21.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:23:21.181 [DEBUG] [Thread-188207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:23:21.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:23:21.236 [DEBUG] [Thread-188207] [transport.py] [_log()] userauth is OK
2026-04-12T11:23:21.237 [DEBUG] [Thread-188207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:23:21.237 [DEBUG] [Thread-188207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:23:21.237 [DEBUG] [Thread-188207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:23:21.237 [DEBUG] [Thread-188207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:23:21.256 [INFO] [Thread-188207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:23:21.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:23:21.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:23:21.408 [DEBUG] [Thread-188209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:22.054 [DEBUG] [Thread-188207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:23:22.054 [DEBUG] [Thread-188207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:23:22.102 [DEBUG] [Thread-188207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:23:22.102 [DEBUG] [Thread-188207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:23:22.112 [DEBUG] [Thread-188207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:23:22.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:23:22.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:23:22.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:23:22.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:23:22.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:23:22.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:23:22.149 [DEBUG] [Thread-188207] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:23:30.844 [DEBUG] [Thread-188210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:36.469 [DEBUG] [Thread-188211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:51.508 [DEBUG] [Thread-188212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:23:52.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:23:52.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:23:52.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:23:53.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 23, 36), 0.25713, 98.2509, 0.0, 19.0901, 12.4057, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:23:53.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:23:36
2026-04-12T11:23:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:23:54.047 [DEBUG] [Thread-188213] [transport.py] [_log()] starting thread (client mode): 0xb39c5330
2026-04-12T11:23:54.047 [DEBUG] [Thread-188213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:23:54.067 [DEBUG] [Thread-188213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:23:54.067 [INFO] [Thread-188213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:23:54.070 [DEBUG] [Thread-188213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:23:54.070 [DEBUG] [Thread-188213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:23:54.070 [DEBUG] [Thread-188213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:23:54.070 [DEBUG] [Thread-188213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:54.070 [DEBUG] [Thread-188213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] client lang: <none>
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] server lang: <none>
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] kex follows: False
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:23:54.071 [DEBUG] [Thread-188213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:23:54.072 [DEBUG] [Thread-188213] [transport.py] [_log()] Compression: none
2026-04-12T11:23:54.072 [DEBUG] [Thread-188213] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:23:54.092 [DEBUG] [Thread-188213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:23:54.093 [DEBUG] [Thread-188213] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:23:54.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:23:54.095 [DEBUG] [Thread-188213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:23:54.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:23:54.097 [DEBUG] [Thread-188213] [transport.py] [_log()] userauth is OK
2026-04-12T11:23:54.097 [DEBUG] [Thread-188213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:23:54.097 [DEBUG] [Thread-188213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:23:54.098 [DEBUG] [Thread-188213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:23:54.098 [DEBUG] [Thread-188213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:23:54.129 [INFO] [Thread-188213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:23:54.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:23:54.767 [DEBUG] [Thread-188213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:23:54.767 [DEBUG] [Thread-188213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:23:54.768 [DEBUG] [Thread-188213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:23:54.808 [DEBUG] [Thread-188213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:23:54.808 [DEBUG] [Thread-188213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:23:54.812 [DEBUG] [Thread-188213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:23:54.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:23:54.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:23:54.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:23:54.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:23:54.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:23:54.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:23:54.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:23:54.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:23:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:23:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.391429 -999.00  +12.30  12.06     90  +10.80 1 3 1 3 1   888    0 1.25 -6.13 ----- 11.8 12.1 259.8 20.0 16.5 -5.4 16.1 -4.6 15.3 -3.9 16.0 -4.9
2026-04-12T11:23:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:23:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:23:54.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.391429
2026-04-12T11:23:54.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:23:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:23:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:23:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:23:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:23:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:23:36', tmtdew=0.25713, humidity=98.2509, cloud=0.0, wind=19.0901, temperature=12.4057, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:23:39.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:23:54.834 [DEBUG] [Thread-188213] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:23:54.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:23:54.927 [DEBUG] [Thread-188216] [transport.py] [_log()] starting thread (client mode): 0xb39c7bb0
2026-04-12T11:23:54.927 [DEBUG] [Thread-188216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:23:54.942 [DEBUG] [Thread-188216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:23:54.943 [INFO] [Thread-188216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:23:54.950 [DEBUG] [Thread-188216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:23:54.951 [DEBUG] [Thread-188216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:23:54.951 [DEBUG] [Thread-188216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:23:54.951 [DEBUG] [Thread-188216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:54.951 [DEBUG] [Thread-188216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:23:54.951 [DEBUG] [Thread-188216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:54.951 [DEBUG] [Thread-188216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] client lang: <none>
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] server lang: <none>
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] kex follows: False
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] Compression: none
2026-04-12T11:23:54.952 [DEBUG] [Thread-188216] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:23:55.010 [DEBUG] [Thread-188216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:23:55.011 [DEBUG] [Thread-188216] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:23:55.011 [DEBUG] [Thread-188216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:23:55.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:23:55.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:23:55.069 [DEBUG] [Thread-188216] [transport.py] [_log()] userauth is OK
2026-04-12T11:23:55.069 [DEBUG] [Thread-188216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:23:55.069 [DEBUG] [Thread-188216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:23:55.069 [DEBUG] [Thread-188216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:23:55.069 [DEBUG] [Thread-188216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:23:55.087 [INFO] [Thread-188216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:23:55.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:23:55.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:23:55.877 [DEBUG] [Thread-188216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:23:55.877 [DEBUG] [Thread-188216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:23:55.926 [DEBUG] [Thread-188216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:23:55.926 [DEBUG] [Thread-188216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:23:55.935 [DEBUG] [Thread-188216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:23:55.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:23:55.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:23:55.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:23:55.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:23:55.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:23:55.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:23:55.974 [DEBUG] [Thread-188216] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:24:04.427 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:24:04.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:24:06.546 [DEBUG] [Thread-188218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:24:21.599 [DEBUG] [Thread-188219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:24:25.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:24:25.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:24:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:24:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 24, 12), 0.183715, 99.0923, 0.0, 16.7274, 11.6194, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:24:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:24:12
2026-04-12T11:24:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:24:27.778 [DEBUG] [Thread-188220] [transport.py] [_log()] starting thread (client mode): 0xa7968160
2026-04-12T11:24:27.778 [DEBUG] [Thread-188220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:24:27.798 [DEBUG] [Thread-188220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:24:27.799 [INFO] [Thread-188220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] client lang: <none>
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] server lang: <none>
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] kex follows: False
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:24:27.808 [DEBUG] [Thread-188220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:24:27.809 [DEBUG] [Thread-188220] [transport.py] [_log()] Compression: none
2026-04-12T11:24:27.809 [DEBUG] [Thread-188220] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:24:27.825 [DEBUG] [Thread-188220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:24:27.825 [DEBUG] [Thread-188220] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:24:27.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:24:27.826 [DEBUG] [Thread-188220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:24:27.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:24:27.827 [DEBUG] [Thread-188220] [transport.py] [_log()] userauth is OK
2026-04-12T11:24:27.827 [DEBUG] [Thread-188220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:24:27.827 [DEBUG] [Thread-188220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:24:27.827 [DEBUG] [Thread-188220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:24:27.827 [DEBUG] [Thread-188220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:24:27.840 [INFO] [Thread-188220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:24:27.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:24:28.477 [DEBUG] [Thread-188220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:24:28.478 [DEBUG] [Thread-188220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:24:28.478 [DEBUG] [Thread-188220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:24:28.519 [DEBUG] [Thread-188220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:24:28.519 [DEBUG] [Thread-188220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:24:28.522 [DEBUG] [Thread-188220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:24:28.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:24:28.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:24:28.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:24:28.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:24:28.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:24:28.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:24:28.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:24:28.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:24:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:24:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.391776 -999.00  +12.30   9.12     90  +10.80 1 3 1 3 1   888    0 1.27 -5.07 ----- 7.1 9.1 282.3 13.8 16.5 -5.1 16.0 -4.4 15.4 -4.5 16.0 -3.8
2026-04-12T11:24:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:24:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:24:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.391776
2026-04-12T11:24:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:24:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:24:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:24:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:24:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:24:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:24:12', tmtdew=0.183715, humidity=99.0923, cloud=0.0, wind=16.7274, temperature=11.6194, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:24:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:24:28.549 [DEBUG] [Thread-188220] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:24:28.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:24:28.641 [DEBUG] [Thread-188223] [transport.py] [_log()] starting thread (client mode): 0xa7968460
2026-04-12T11:24:28.641 [DEBUG] [Thread-188223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:24:28.660 [DEBUG] [Thread-188223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:24:28.660 [INFO] [Thread-188223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:24:28.667 [DEBUG] [Thread-188223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] client lang: <none>
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] server lang: <none>
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] kex follows: False
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:24:28.668 [DEBUG] [Thread-188223] [transport.py] [_log()] Compression: none
2026-04-12T11:24:28.669 [DEBUG] [Thread-188223] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:24:28.730 [DEBUG] [Thread-188223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:24:28.731 [DEBUG] [Thread-188223] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:24:28.731 [DEBUG] [Thread-188223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:24:28.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:24:28.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:24:28.789 [DEBUG] [Thread-188223] [transport.py] [_log()] userauth is OK
2026-04-12T11:24:28.789 [DEBUG] [Thread-188223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:24:28.790 [DEBUG] [Thread-188223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:24:28.790 [DEBUG] [Thread-188223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:24:28.790 [DEBUG] [Thread-188223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:24:28.808 [INFO] [Thread-188223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:24:28.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:24:28.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:24:29.639 [DEBUG] [Thread-188223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:24:29.639 [DEBUG] [Thread-188223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:24:29.687 [DEBUG] [Thread-188223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:24:29.687 [DEBUG] [Thread-188223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:24:29.695 [DEBUG] [Thread-188223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:24:29.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:24:29.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:24:29.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:24:29.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:24:29.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:24:29.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:24:29.731 [DEBUG] [Thread-188223] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:24:30.877 [DEBUG] [Thread-188225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:24:36.636 [DEBUG] [Thread-188226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:24:51.692 [DEBUG] [Thread-188227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:24:59.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:24:59.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:24:59.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:25:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 24, 47), 0.27243, 98.1514, 0.0, 17.0438, 12.3394, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:25:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:24:47
2026-04-12T11:25:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:25:01.644 [DEBUG] [Thread-188228] [transport.py] [_log()] starting thread (client mode): 0xa796a1d0
2026-04-12T11:25:01.644 [DEBUG] [Thread-188228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:25:01.664 [DEBUG] [Thread-188228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:25:01.664 [INFO] [Thread-188228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:25:01.667 [DEBUG] [Thread-188228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] client lang: <none>
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] server lang: <none>
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] kex follows: False
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] Compression: none
2026-04-12T11:25:01.668 [DEBUG] [Thread-188228] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:25:01.686 [DEBUG] [Thread-188228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:25:01.687 [DEBUG] [Thread-188228] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:25:01.687 [DEBUG] [Thread-188228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:25:01.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:25:01.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:25:01.689 [DEBUG] [Thread-188228] [transport.py] [_log()] userauth is OK
2026-04-12T11:25:01.689 [DEBUG] [Thread-188228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:25:01.689 [DEBUG] [Thread-188228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:25:01.690 [DEBUG] [Thread-188228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:25:01.690 [DEBUG] [Thread-188228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:25:01.713 [INFO] [Thread-188228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:25:01.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:25:02.306 [DEBUG] [Thread-188228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:25:02.306 [DEBUG] [Thread-188228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:25:02.307 [DEBUG] [Thread-188228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:25:02.348 [DEBUG] [Thread-188228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:25:02.348 [DEBUG] [Thread-188228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:25:02.350 [DEBUG] [Thread-188228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:25:02.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:25:02.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:25:02.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:25:02.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:25:02.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:25:02.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:25:02.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:25:02.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:25:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:25:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.392123 -999.00  +12.40  11.64     91  +11.00 1 3 1 3 1   888    0 1.27 -5.02 ----- 12.3 11.6 282.9 14.1 16.4 -5.3 16.1 -4.6 15.4 -3.8 16.1 -3.8
2026-04-12T11:25:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:25:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:25:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.392123
2026-04-12T11:25:02.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:25:02.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:25:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:25:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:25:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:25:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:24:47', tmtdew=0.27243, humidity=98.1514, cloud=0.0, wind=17.0438, temperature=12.3394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:24:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:25:02.377 [DEBUG] [Thread-188228] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:25:02.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:25:02.472 [DEBUG] [Thread-188231] [transport.py] [_log()] starting thread (client mode): 0xb39c5f90
2026-04-12T11:25:02.472 [DEBUG] [Thread-188231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:25:02.487 [DEBUG] [Thread-188231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:25:02.487 [INFO] [Thread-188231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] client lang: <none>
2026-04-12T11:25:02.495 [DEBUG] [Thread-188231] [transport.py] [_log()] server lang: <none>
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] kex follows: False
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] Compression: none
2026-04-12T11:25:02.496 [DEBUG] [Thread-188231] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:25:02.559 [DEBUG] [Thread-188231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:25:02.559 [DEBUG] [Thread-188231] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:25:02.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:25:02.560 [DEBUG] [Thread-188231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:25:02.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:25:02.619 [DEBUG] [Thread-188231] [transport.py] [_log()] userauth is OK
2026-04-12T11:25:02.619 [DEBUG] [Thread-188231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:25:02.619 [DEBUG] [Thread-188231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:25:02.619 [DEBUG] [Thread-188231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:25:02.619 [DEBUG] [Thread-188231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:25:02.638 [INFO] [Thread-188231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:25:02.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:25:02.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:25:03.501 [DEBUG] [Thread-188231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:25:03.501 [DEBUG] [Thread-188231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:25:03.549 [DEBUG] [Thread-188231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:25:03.549 [DEBUG] [Thread-188231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:25:03.559 [DEBUG] [Thread-188231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:25:03.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:25:03.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:25:03.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:25:03.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:25:03.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:25:03.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:25:03.596 [DEBUG] [Thread-188231] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:25:04.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:25:04.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:25:06.730 [DEBUG] [Thread-188233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:25:21.780 [DEBUG] [Thread-188234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:25:30.910 [DEBUG] [Thread-188235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:25:33.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:25:33.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:25:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:25:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 25, 23), 0.13111, 99.1088, 0.0, 14.5224, 11.5863, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:25:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:25:23
2026-04-12T11:25:35.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:25:35.465 [DEBUG] [Thread-188236] [transport.py] [_log()] starting thread (client mode): 0xb0fb6c80
2026-04-12T11:25:35.465 [DEBUG] [Thread-188236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:25:35.485 [DEBUG] [Thread-188236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:25:35.485 [INFO] [Thread-188236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:25:35.488 [DEBUG] [Thread-188236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:25:35.488 [DEBUG] [Thread-188236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:25:35.488 [DEBUG] [Thread-188236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] client lang: <none>
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] server lang: <none>
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] kex follows: False
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] Compression: none
2026-04-12T11:25:35.489 [DEBUG] [Thread-188236] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:25:35.506 [DEBUG] [Thread-188236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:25:35.506 [DEBUG] [Thread-188236] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:25:35.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:25:35.507 [DEBUG] [Thread-188236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:25:35.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:25:35.509 [DEBUG] [Thread-188236] [transport.py] [_log()] userauth is OK
2026-04-12T11:25:35.510 [DEBUG] [Thread-188236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:25:35.510 [DEBUG] [Thread-188236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:25:35.510 [DEBUG] [Thread-188236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:25:35.510 [DEBUG] [Thread-188236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:25:35.535 [INFO] [Thread-188236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:25:35.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:25:36.135 [DEBUG] [Thread-188236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:25:36.135 [DEBUG] [Thread-188236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:25:36.136 [DEBUG] [Thread-188236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:25:36.176 [DEBUG] [Thread-188236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:25:36.177 [DEBUG] [Thread-188236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:25:36.180 [DEBUG] [Thread-188236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:25:36.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:25:36.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:25:36.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:25:36.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:25:36.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:25:36.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:25:36.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:25:36.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:25:36.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:25:36.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.392470 -999.00  +12.30  11.79     90  +10.80 1 3 1 3 1   888    0 1.32 -4.10 ----- 14.3 11.8 270.9 16.2 16.5 -5.5 16.1 -5.1 15.4 -4.5 16.1 -4.1
2026-04-12T11:25:36.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:25:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:25:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.392470
2026-04-12T11:25:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:25:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:25:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:25:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:25:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:25:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:25:23', tmtdew=0.13111, humidity=99.1088, cloud=0.0, wind=14.5224, temperature=11.5863, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:25:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:25:36.209 [DEBUG] [Thread-188236] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:25:36.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:25:36.310 [DEBUG] [Thread-188239] [transport.py] [_log()] starting thread (client mode): 0xb0fb5750
2026-04-12T11:25:36.310 [DEBUG] [Thread-188239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:25:36.331 [DEBUG] [Thread-188239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:25:36.331 [INFO] [Thread-188239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:25:36.345 [DEBUG] [Thread-188239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:25:36.345 [DEBUG] [Thread-188239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:25:36.345 [DEBUG] [Thread-188239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:25:36.345 [DEBUG] [Thread-188239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:36.345 [DEBUG] [Thread-188239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:25:36.345 [DEBUG] [Thread-188239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] client lang: <none>
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] server lang: <none>
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] kex follows: False
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] Compression: none
2026-04-12T11:25:36.346 [DEBUG] [Thread-188239] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:25:36.408 [DEBUG] [Thread-188239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:25:36.409 [DEBUG] [Thread-188239] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:25:36.410 [DEBUG] [Thread-188239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:25:36.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:25:36.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:25:36.464 [DEBUG] [Thread-188239] [transport.py] [_log()] userauth is OK
2026-04-12T11:25:36.465 [DEBUG] [Thread-188239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:25:36.465 [DEBUG] [Thread-188239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:25:36.465 [DEBUG] [Thread-188239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:25:36.465 [DEBUG] [Thread-188239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:25:36.490 [INFO] [Thread-188239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:25:36.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:25:36.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:25:36.816 [DEBUG] [Thread-188241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:25:37.298 [DEBUG] [Thread-188239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:25:37.298 [DEBUG] [Thread-188239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:25:37.346 [DEBUG] [Thread-188239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:25:37.346 [DEBUG] [Thread-188239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:25:37.355 [DEBUG] [Thread-188239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:25:37.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:25:37.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:25:37.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:25:37.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:25:37.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:25:37.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:25:37.394 [DEBUG] [Thread-188239] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:25:51.869 [DEBUG] [Thread-188242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:26:04.731 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:26:04.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:26:06.910 [DEBUG] [Thread-188243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:26:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:26:07.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:26:07.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:26:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 25, 59), 0.191285, 98.5425, 0.0, 14.7517, 11.62, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:26:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:25:59
2026-04-12T11:26:09.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:26:09.307 [DEBUG] [Thread-188244] [transport.py] [_log()] starting thread (client mode): 0xb0fb7b20
2026-04-12T11:26:09.307 [DEBUG] [Thread-188244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:26:09.322 [DEBUG] [Thread-188244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:26:09.322 [INFO] [Thread-188244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:26:09.325 [DEBUG] [Thread-188244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:26:09.325 [DEBUG] [Thread-188244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:26:09.325 [DEBUG] [Thread-188244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:26:09.325 [DEBUG] [Thread-188244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:09.325 [DEBUG] [Thread-188244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] client lang: <none>
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] server lang: <none>
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] kex follows: False
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] Compression: none
2026-04-12T11:26:09.326 [DEBUG] [Thread-188244] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:26:09.344 [DEBUG] [Thread-188244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:26:09.344 [DEBUG] [Thread-188244] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:26:09.345 [DEBUG] [Thread-188244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:26:09.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:26:09.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:26:09.347 [DEBUG] [Thread-188244] [transport.py] [_log()] userauth is OK
2026-04-12T11:26:09.347 [DEBUG] [Thread-188244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:26:09.347 [DEBUG] [Thread-188244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:26:09.347 [DEBUG] [Thread-188244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:26:09.347 [DEBUG] [Thread-188244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:26:09.366 [INFO] [Thread-188244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:26:09.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:26:09.985 [DEBUG] [Thread-188244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:26:09.985 [DEBUG] [Thread-188244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:26:09.986 [DEBUG] [Thread-188244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:26:10.026 [DEBUG] [Thread-188244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:26:10.026 [DEBUG] [Thread-188244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:26:10.029 [DEBUG] [Thread-188244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:26:10.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:26:10.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:26:10.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:26:10.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:26:10.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:26:10.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:26:10.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:26:10.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:26:10.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:26:10.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.392818 -999.00  +12.30  16.42     91  +10.90 1 3 1 3 1   888    0 1.31 -3.71 ----- 18.7 16.4 277.6 19.9 16.4 -5.8 16.0 -5.3 15.2 -6.6 16.0 -4.8
2026-04-12T11:26:10.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:26:10.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:26:10.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.392818
2026-04-12T11:26:10.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:26:10.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:26:10.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:26:10.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:26:10.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:26:10.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:25:59', tmtdew=0.191285, humidity=98.5425, cloud=0.0, wind=14.7517, temperature=11.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:25:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:26:10.058 [DEBUG] [Thread-188244] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:26:10.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:26:10.160 [DEBUG] [Thread-188247] [transport.py] [_log()] starting thread (client mode): 0xa79688e0
2026-04-12T11:26:10.160 [DEBUG] [Thread-188247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:26:10.186 [DEBUG] [Thread-188247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:26:10.186 [INFO] [Thread-188247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:26:10.205 [DEBUG] [Thread-188247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:26:10.205 [DEBUG] [Thread-188247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:26:10.205 [DEBUG] [Thread-188247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] client lang: <none>
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] server lang: <none>
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] kex follows: False
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:26:10.206 [DEBUG] [Thread-188247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:26:10.207 [DEBUG] [Thread-188247] [transport.py] [_log()] Compression: none
2026-04-12T11:26:10.207 [DEBUG] [Thread-188247] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:26:10.274 [DEBUG] [Thread-188247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:26:10.275 [DEBUG] [Thread-188247] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:26:10.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:26:10.276 [DEBUG] [Thread-188247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:26:10.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:26:10.355 [DEBUG] [Thread-188247] [transport.py] [_log()] userauth is OK
2026-04-12T11:26:10.355 [DEBUG] [Thread-188247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:26:10.355 [DEBUG] [Thread-188247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:26:10.355 [DEBUG] [Thread-188247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:26:10.355 [DEBUG] [Thread-188247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:26:10.385 [INFO] [Thread-188247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:26:10.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:26:10.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:26:11.190 [DEBUG] [Thread-188247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:26:11.191 [DEBUG] [Thread-188247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:26:11.243 [DEBUG] [Thread-188247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:26:11.244 [DEBUG] [Thread-188247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:26:11.257 [DEBUG] [Thread-188247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:26:11.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:26:11.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:26:11.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:26:11.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:26:11.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:26:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:26:11.312 [DEBUG] [Thread-188247] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:26:21.951 [DEBUG] [Thread-188249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:26:30.945 [DEBUG] [Thread-188250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:26:37.016 [DEBUG] [Thread-188251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:26:41.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:26:41.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:26:41.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:26:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 26, 34), 0.26229, 98.2177, 0.0, 15.809, 12.4389, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:26:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:26:34
2026-04-12T11:26:42.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:26:43.114 [DEBUG] [Thread-188252] [transport.py] [_log()] starting thread (client mode): 0xb0fb7cd0
2026-04-12T11:26:43.114 [DEBUG] [Thread-188252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:26:43.133 [DEBUG] [Thread-188252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:26:43.133 [INFO] [Thread-188252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:26:43.136 [DEBUG] [Thread-188252] [transport.py] [_log()] client lang: <none>
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] server lang: <none>
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] kex follows: False
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] Compression: none
2026-04-12T11:26:43.137 [DEBUG] [Thread-188252] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:26:43.146 [DEBUG] [Thread-188252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:26:43.147 [DEBUG] [Thread-188252] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:26:43.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:26:43.147 [DEBUG] [Thread-188252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:26:43.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:26:43.149 [DEBUG] [Thread-188252] [transport.py] [_log()] userauth is OK
2026-04-12T11:26:43.149 [DEBUG] [Thread-188252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:26:43.149 [DEBUG] [Thread-188252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:26:43.149 [DEBUG] [Thread-188252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:26:43.149 [DEBUG] [Thread-188252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:26:43.168 [INFO] [Thread-188252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:26:43.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:26:43.798 [DEBUG] [Thread-188252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:26:43.799 [DEBUG] [Thread-188252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:26:43.799 [DEBUG] [Thread-188252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:26:43.840 [DEBUG] [Thread-188252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:26:43.840 [DEBUG] [Thread-188252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:26:43.844 [DEBUG] [Thread-188252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:26:43.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:26:43.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:26:43.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:26:43.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:26:43.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:26:43.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:26:43.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:26:43.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:26:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:26:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.393165 -999.00  +12.30  16.28     91  +10.90 1 3 1 3 1   888    0 1.34 -3.26 ----- 16.1 16.3 275.8 20.3 16.4 -6.5 15.9 -5.8 15.3 -5.0 15.9 -4.9
2026-04-12T11:26:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:26:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:26:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.393165
2026-04-12T11:26:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:26:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:26:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:26:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:26:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:26:43.870 [DEBUG] [Thread-188252] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:26:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:26:34', tmtdew=0.26229, humidity=98.2177, cloud=0.0, wind=15.809, temperature=12.4389, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:26:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:26:43.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:26:43.993 [DEBUG] [Thread-188255] [transport.py] [_log()] starting thread (client mode): 0xa796b5e0
2026-04-12T11:26:43.994 [DEBUG] [Thread-188255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:26:44.036 [DEBUG] [Thread-188255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:26:44.036 [INFO] [Thread-188255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:26:44.073 [DEBUG] [Thread-188255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:26:44.073 [DEBUG] [Thread-188255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:26:44.073 [DEBUG] [Thread-188255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] client lang: <none>
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] server lang: <none>
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] kex follows: False
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:26:44.074 [DEBUG] [Thread-188255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:26:44.075 [DEBUG] [Thread-188255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:26:44.075 [DEBUG] [Thread-188255] [transport.py] [_log()] Compression: none
2026-04-12T11:26:44.075 [DEBUG] [Thread-188255] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:26:44.162 [DEBUG] [Thread-188255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:26:44.162 [DEBUG] [Thread-188255] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:26:44.162 [DEBUG] [Thread-188255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:26:44.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:26:44.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:26:44.279 [DEBUG] [Thread-188255] [transport.py] [_log()] userauth is OK
2026-04-12T11:26:44.279 [DEBUG] [Thread-188255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:26:44.280 [DEBUG] [Thread-188255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:26:44.280 [DEBUG] [Thread-188255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:26:44.280 [DEBUG] [Thread-188255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:26:44.329 [INFO] [Thread-188255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:26:44.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:26:44.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:26:45.222 [DEBUG] [Thread-188255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:26:45.222 [DEBUG] [Thread-188255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:26:45.300 [DEBUG] [Thread-188255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:26:45.300 [DEBUG] [Thread-188255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:26:45.338 [DEBUG] [Thread-188255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:26:45.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:26:45.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:26:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:26:45.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:26:45.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:26:45.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:26:45.495 [DEBUG] [Thread-188255] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:26:52.051 [DEBUG] [Thread-188257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:04.882 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:04.884 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:07.111 [DEBUG] [Thread-188258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:15.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:27:15.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:27:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:27:16.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 26, 34), 0.26229, 98.2177, 0.0, 15.809, 12.4389, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:27:16.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:26:34
2026-04-12T11:27:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:27:17.386 [DEBUG] [Thread-188259] [transport.py] [_log()] starting thread (client mode): 0xb0fb4e50
2026-04-12T11:27:17.387 [DEBUG] [Thread-188259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:27:17.407 [DEBUG] [Thread-188259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:27:17.407 [INFO] [Thread-188259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] client lang: <none>
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] server lang: <none>
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] kex follows: False
2026-04-12T11:27:17.411 [DEBUG] [Thread-188259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:27:17.412 [DEBUG] [Thread-188259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:27:17.412 [DEBUG] [Thread-188259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:27:17.412 [DEBUG] [Thread-188259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:27:17.412 [DEBUG] [Thread-188259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:27:17.412 [DEBUG] [Thread-188259] [transport.py] [_log()] Compression: none
2026-04-12T11:27:17.412 [DEBUG] [Thread-188259] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:27:17.432 [DEBUG] [Thread-188259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:27:17.432 [DEBUG] [Thread-188259] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:27:17.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:27:17.433 [DEBUG] [Thread-188259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:27:17.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:27:17.435 [DEBUG] [Thread-188259] [transport.py] [_log()] userauth is OK
2026-04-12T11:27:17.436 [DEBUG] [Thread-188259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:27:17.436 [DEBUG] [Thread-188259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:27:17.436 [DEBUG] [Thread-188259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:27:17.436 [DEBUG] [Thread-188259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:27:17.459 [INFO] [Thread-188259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:27:17.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:27:18.080 [DEBUG] [Thread-188259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:27:18.080 [DEBUG] [Thread-188259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:27:18.081 [DEBUG] [Thread-188259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:27:18.122 [DEBUG] [Thread-188259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:27:18.122 [DEBUG] [Thread-188259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:27:18.125 [DEBUG] [Thread-188259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:27:18.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:27:18.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:27:18.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:27:18.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:27:18.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:27:18.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:27:18.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:27:18.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:27:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:27:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.393512 -999.00  +12.10  20.20     91  +10.70 1 3 1 3 1   888    0 1.33 -2.78 ----- 18.8 20.2 270.2 24.8 16.2 -6.5 15.9 -6.0 15.2 -5.9 15.8 -5.4
2026-04-12T11:27:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:27:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:27:18.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.393512
2026-04-12T11:27:18.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:27:18.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:27:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:27:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:27:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:27:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:26:34', tmtdew=0.26229, humidity=98.2177, cloud=0.0, wind=15.809, temperature=12.4389, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:26:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:27:18.150 [DEBUG] [Thread-188259] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:27:18.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:27:18.246 [DEBUG] [Thread-188262] [transport.py] [_log()] starting thread (client mode): 0xb0fb5d50
2026-04-12T11:27:18.246 [DEBUG] [Thread-188262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:27:18.265 [DEBUG] [Thread-188262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:27:18.265 [INFO] [Thread-188262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:18.273 [DEBUG] [Thread-188262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] client lang: <none>
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] server lang: <none>
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] kex follows: False
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] Compression: none
2026-04-12T11:27:18.274 [DEBUG] [Thread-188262] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:27:18.333 [DEBUG] [Thread-188262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:27:18.333 [DEBUG] [Thread-188262] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:27:18.334 [DEBUG] [Thread-188262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:27:18.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:27:18.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:27:18.396 [DEBUG] [Thread-188262] [transport.py] [_log()] userauth is OK
2026-04-12T11:27:18.397 [DEBUG] [Thread-188262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:27:18.397 [DEBUG] [Thread-188262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:27:18.397 [DEBUG] [Thread-188262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:27:18.397 [DEBUG] [Thread-188262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:27:18.418 [INFO] [Thread-188262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:27:18.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:27:18.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:27:19.295 [DEBUG] [Thread-188262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:27:19.296 [DEBUG] [Thread-188262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:27:19.344 [DEBUG] [Thread-188262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:27:19.344 [DEBUG] [Thread-188262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:27:19.354 [DEBUG] [Thread-188262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:27:19.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:27:19.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:27:19.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:27:19.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:27:19.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:27:19.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:27:19.394 [DEBUG] [Thread-188262] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:27:22.148 [DEBUG] [Thread-188264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:30.982 [DEBUG] [Thread-188265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:37.199 [DEBUG] [Thread-188266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:49.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:27:49.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:27:49.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:27:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 27, 10), 0.14133, 99.0425, 0.0, 17.8571, 11.6031, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:27:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:27:10
2026-04-12T11:27:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:27:51.459 [DEBUG] [Thread-188267] [transport.py] [_log()] starting thread (client mode): 0xa796a2f0
2026-04-12T11:27:51.459 [DEBUG] [Thread-188267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:27:51.479 [DEBUG] [Thread-188267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:27:51.479 [INFO] [Thread-188267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:27:51.480 [DEBUG] [Thread-188267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:27:51.480 [DEBUG] [Thread-188267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] client lang: <none>
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] server lang: <none>
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] kex follows: False
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] Compression: none
2026-04-12T11:27:51.481 [DEBUG] [Thread-188267] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:27:51.492 [DEBUG] [Thread-188267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:27:51.492 [DEBUG] [Thread-188267] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:27:51.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:27:51.493 [DEBUG] [Thread-188267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:27:51.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:27:51.495 [DEBUG] [Thread-188267] [transport.py] [_log()] userauth is OK
2026-04-12T11:27:51.496 [DEBUG] [Thread-188267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:27:51.496 [DEBUG] [Thread-188267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:27:51.496 [DEBUG] [Thread-188267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:27:51.496 [DEBUG] [Thread-188267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:27:51.520 [INFO] [Thread-188267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:27:51.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:27:52.140 [DEBUG] [Thread-188267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:27:52.140 [DEBUG] [Thread-188267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:27:52.140 [DEBUG] [Thread-188267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:27:52.181 [DEBUG] [Thread-188267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:27:52.182 [DEBUG] [Thread-188267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:27:52.185 [DEBUG] [Thread-188267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:27:52.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:27:52.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:27:52.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:27:52.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:27:52.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:27:52.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:27:52.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:27:52.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:27:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:27:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.393859 -999.00  +12.00  18.39     90  +10.60 1 3 1 3 1   888    0 1.34 -3.06 ----- 15.9 18.4 287.2 23.4 16.1 -7.4 15.9 -6.4 15.0 -5.5 15.8 -5.6
2026-04-12T11:27:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:27:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:27:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.393859
2026-04-12T11:27:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:27:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:27:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:27:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:27:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:27:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:27:10', tmtdew=0.14133, humidity=99.0425, cloud=0.0, wind=17.8571, temperature=11.6031, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:27:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:27:52.214 [DEBUG] [Thread-188267] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:27:52.234 [DEBUG] [Thread-188270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:27:52.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:27:52.310 [DEBUG] [Thread-188271] [transport.py] [_log()] starting thread (client mode): 0xe6a3b1f0
2026-04-12T11:27:52.310 [DEBUG] [Thread-188271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:27:52.326 [DEBUG] [Thread-188271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:27:52.327 [INFO] [Thread-188271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:27:52.337 [DEBUG] [Thread-188271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:27:52.337 [DEBUG] [Thread-188271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:27:52.337 [DEBUG] [Thread-188271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:27:52.337 [DEBUG] [Thread-188271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:52.337 [DEBUG] [Thread-188271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] client lang: <none>
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] server lang: <none>
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] kex follows: False
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] Compression: none
2026-04-12T11:27:52.338 [DEBUG] [Thread-188271] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:27:52.398 [DEBUG] [Thread-188271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:27:52.399 [DEBUG] [Thread-188271] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:27:52.399 [DEBUG] [Thread-188271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:27:52.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:27:52.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:27:52.460 [DEBUG] [Thread-188271] [transport.py] [_log()] userauth is OK
2026-04-12T11:27:52.460 [DEBUG] [Thread-188271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:27:52.460 [DEBUG] [Thread-188271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:27:52.460 [DEBUG] [Thread-188271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:27:52.460 [DEBUG] [Thread-188271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:27:52.485 [INFO] [Thread-188271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:27:52.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:27:52.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:27:53.291 [DEBUG] [Thread-188271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:27:53.291 [DEBUG] [Thread-188271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:27:53.342 [DEBUG] [Thread-188271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:27:53.342 [DEBUG] [Thread-188271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:27:53.354 [DEBUG] [Thread-188271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:27:53.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:27:53.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:27:53.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:27:53.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:27:53.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:27:53.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:27:53.403 [DEBUG] [Thread-188271] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:28:05.040 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:28:05.041 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:28:07.275 [DEBUG] [Thread-188273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:28:22.313 [DEBUG] [Thread-188274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:28:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:28:23.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:28:23.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:28:24.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 27, 46), 0.27743, 98.1182, 0.0, 16.303, 12.2399, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:28:24.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:27:46
2026-04-12T11:28:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:28:25.432 [DEBUG] [Thread-188275] [transport.py] [_log()] starting thread (client mode): 0xb39c7550
2026-04-12T11:28:25.432 [DEBUG] [Thread-188275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:28:25.454 [DEBUG] [Thread-188275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:28:25.454 [INFO] [Thread-188275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] client lang: <none>
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] server lang: <none>
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] kex follows: False
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:28:25.458 [DEBUG] [Thread-188275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:28:25.459 [DEBUG] [Thread-188275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:28:25.459 [DEBUG] [Thread-188275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:28:25.459 [DEBUG] [Thread-188275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:28:25.459 [DEBUG] [Thread-188275] [transport.py] [_log()] Compression: none
2026-04-12T11:28:25.459 [DEBUG] [Thread-188275] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:28:25.476 [DEBUG] [Thread-188275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:28:25.476 [DEBUG] [Thread-188275] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:28:25.477 [DEBUG] [Thread-188275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:28:25.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:28:25.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:28:25.478 [DEBUG] [Thread-188275] [transport.py] [_log()] userauth is OK
2026-04-12T11:28:25.479 [DEBUG] [Thread-188275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:28:25.479 [DEBUG] [Thread-188275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:28:25.479 [DEBUG] [Thread-188275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:28:25.479 [DEBUG] [Thread-188275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:28:25.497 [INFO] [Thread-188275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:28:25.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:28:26.150 [DEBUG] [Thread-188275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:28:26.150 [DEBUG] [Thread-188275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:28:26.151 [DEBUG] [Thread-188275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:28:26.191 [DEBUG] [Thread-188275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:28:26.191 [DEBUG] [Thread-188275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:28:26.195 [DEBUG] [Thread-188275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:28:26.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:28:26.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:28:26.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:28:26.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:28:26.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:28:26.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:28:26.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:28:26.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:28:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:28:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.394206 -999.00  +12.00  15.03     91  +10.60 1 3 1 3 1   888    0 1.37 -3.12 ----- 15.6 15.0 282.8 21.9 16.1 -6.5 15.8 -5.7 14.9 -5.2 15.7 -4.7
2026-04-12T11:28:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:28:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:28:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.394206
2026-04-12T11:28:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:28:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:28:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:28:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:28:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:28:26.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:27:46', tmtdew=0.27743, humidity=98.1182, cloud=0.0, wind=16.303, temperature=12.2399, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:27:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:28:26.223 [DEBUG] [Thread-188275] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:28:26.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:28:26.330 [DEBUG] [Thread-188278] [transport.py] [_log()] starting thread (client mode): 0xb39c6c80
2026-04-12T11:28:26.330 [DEBUG] [Thread-188278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:28:26.350 [DEBUG] [Thread-188278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:28:26.351 [INFO] [Thread-188278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:28:26.365 [DEBUG] [Thread-188278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:28:26.365 [DEBUG] [Thread-188278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:28:26.365 [DEBUG] [Thread-188278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:28:26.365 [DEBUG] [Thread-188278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:28:26.365 [DEBUG] [Thread-188278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:28:26.365 [DEBUG] [Thread-188278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:28:26.365 [DEBUG] [Thread-188278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] client lang: <none>
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] server lang: <none>
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] kex follows: False
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] Compression: none
2026-04-12T11:28:26.366 [DEBUG] [Thread-188278] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:28:26.433 [DEBUG] [Thread-188278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:28:26.434 [DEBUG] [Thread-188278] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:28:26.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:28:26.435 [DEBUG] [Thread-188278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:28:26.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:28:26.506 [DEBUG] [Thread-188278] [transport.py] [_log()] userauth is OK
2026-04-12T11:28:26.506 [DEBUG] [Thread-188278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:28:26.507 [DEBUG] [Thread-188278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:28:26.507 [DEBUG] [Thread-188278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:28:26.507 [DEBUG] [Thread-188278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:28:26.533 [INFO] [Thread-188278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:28:26.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:28:26.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:28:27.333 [DEBUG] [Thread-188278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:28:27.333 [DEBUG] [Thread-188278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:28:27.381 [DEBUG] [Thread-188278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:28:27.381 [DEBUG] [Thread-188278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:28:27.390 [DEBUG] [Thread-188278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:28:27.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:28:27.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:28:27.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:28:27.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:28:27.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:28:27.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:28:27.428 [DEBUG] [Thread-188278] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:28:31.021 [DEBUG] [Thread-188280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:28:37.353 [DEBUG] [Thread-188281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:28:52.407 [DEBUG] [Thread-188282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:28:57.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:28:57.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:28:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:28:58.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 28, 21), 0.18109, 99.1088, 0.0, 17.9276, 11.6197, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:28:58.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:28:21
2026-04-12T11:28:59.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:28:59.323 [DEBUG] [Thread-188283] [transport.py] [_log()] starting thread (client mode): 0xb0fb4f40
2026-04-12T11:28:59.323 [DEBUG] [Thread-188283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:28:59.343 [DEBUG] [Thread-188283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:28:59.343 [INFO] [Thread-188283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:28:59.346 [DEBUG] [Thread-188283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:28:59.346 [DEBUG] [Thread-188283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:28:59.346 [DEBUG] [Thread-188283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:28:59.346 [DEBUG] [Thread-188283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:28:59.346 [DEBUG] [Thread-188283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:28:59.346 [DEBUG] [Thread-188283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] client lang: <none>
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] server lang: <none>
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] kex follows: False
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] Compression: none
2026-04-12T11:28:59.347 [DEBUG] [Thread-188283] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:28:59.364 [DEBUG] [Thread-188283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:28:59.364 [DEBUG] [Thread-188283] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:28:59.365 [DEBUG] [Thread-188283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:28:59.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:28:59.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:28:59.367 [DEBUG] [Thread-188283] [transport.py] [_log()] userauth is OK
2026-04-12T11:28:59.367 [DEBUG] [Thread-188283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:28:59.367 [DEBUG] [Thread-188283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:28:59.367 [DEBUG] [Thread-188283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:28:59.367 [DEBUG] [Thread-188283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:28:59.390 [INFO] [Thread-188283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:28:59.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:29:00.222 [DEBUG] [Thread-188283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:29:00.223 [DEBUG] [Thread-188283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:29:00.223 [DEBUG] [Thread-188283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:29:00.264 [DEBUG] [Thread-188283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:29:00.264 [DEBUG] [Thread-188283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:29:00.268 [DEBUG] [Thread-188283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:29:00.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:29:00.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:29:00.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:29:00.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:29:00.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:29:00.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:29:00.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:29:00.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.394901 -999.00  +12.10  17.39     91  +10.70 1 3 1 3 1   888    0 1.29 -3.70 ----- 14.3 17.4 283.4 20.7 15.9 -6.1 15.7 -5.1 14.9 -5.6 15.7 -4.3
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.394901
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:29:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:28:21', tmtdew=0.18109, humidity=99.1088, cloud=0.0, wind=17.9276, temperature=11.6197, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:28:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:29:00.294 [DEBUG] [Thread-188283] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:29:00.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:29:00.384 [DEBUG] [Thread-188286] [transport.py] [_log()] starting thread (client mode): 0xb0fb69e0
2026-04-12T11:29:00.384 [DEBUG] [Thread-188286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:29:00.404 [DEBUG] [Thread-188286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:29:00.405 [INFO] [Thread-188286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] client lang: <none>
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] server lang: <none>
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] kex follows: False
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] Compression: none
2026-04-12T11:29:00.419 [DEBUG] [Thread-188286] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:29:00.486 [DEBUG] [Thread-188286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:29:00.486 [DEBUG] [Thread-188286] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:29:00.487 [DEBUG] [Thread-188286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:29:00.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:29:00.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:29:00.559 [DEBUG] [Thread-188286] [transport.py] [_log()] userauth is OK
2026-04-12T11:29:00.559 [DEBUG] [Thread-188286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:29:00.559 [DEBUG] [Thread-188286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:29:00.559 [DEBUG] [Thread-188286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:29:00.560 [DEBUG] [Thread-188286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:29:00.588 [INFO] [Thread-188286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:29:00.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:29:00.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:29:01.387 [DEBUG] [Thread-188286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:29:01.387 [DEBUG] [Thread-188286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:29:01.439 [DEBUG] [Thread-188286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:29:01.439 [DEBUG] [Thread-188286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:29:01.452 [DEBUG] [Thread-188286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:29:01.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:29: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')
2026-04-12T11:29:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:29:01.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:29:01.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:29:01.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:29:01.505 [DEBUG] [Thread-188286] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:29:05.190 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:29:05.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:29:07.440 [DEBUG] [Thread-188288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:29:22.492 [DEBUG] [Thread-188289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:29:31.087 [DEBUG] [Thread-188290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:29:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:29:31.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:29:31.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:29:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 28, 57), 0.13374, 98.5923, 0.0, 19.6571, 11.736, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:29:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:28:57
2026-04-12T11:29:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:29:33.311 [DEBUG] [Thread-188291] [transport.py] [_log()] starting thread (client mode): 0xb0fb4070
2026-04-12T11:29:33.311 [DEBUG] [Thread-188291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:29:33.331 [DEBUG] [Thread-188291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:29:33.331 [INFO] [Thread-188291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:29:33.334 [DEBUG] [Thread-188291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] client lang: <none>
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] server lang: <none>
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] kex follows: False
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:29:33.335 [DEBUG] [Thread-188291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:29:33.336 [DEBUG] [Thread-188291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:29:33.336 [DEBUG] [Thread-188291] [transport.py] [_log()] Compression: none
2026-04-12T11:29:33.336 [DEBUG] [Thread-188291] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:29:33.351 [DEBUG] [Thread-188291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:29:33.352 [DEBUG] [Thread-188291] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:29:33.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:29:33.352 [DEBUG] [Thread-188291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:29:33.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:29:33.354 [DEBUG] [Thread-188291] [transport.py] [_log()] userauth is OK
2026-04-12T11:29:33.355 [DEBUG] [Thread-188291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:29:33.355 [DEBUG] [Thread-188291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:29:33.355 [DEBUG] [Thread-188291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:29:33.355 [DEBUG] [Thread-188291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:29:33.372 [INFO] [Thread-188291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:29:33.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:29:34.151 [DEBUG] [Thread-188291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:29:34.151 [DEBUG] [Thread-188291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:29:34.151 [DEBUG] [Thread-188291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:29:34.192 [DEBUG] [Thread-188291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:29:34.192 [DEBUG] [Thread-188291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:29:34.194 [DEBUG] [Thread-188291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:29:34.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:29:34.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:29:34.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:29:34.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:29:34.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:29:34.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:29:34.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:29:34.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:29:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:29:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.395248 -999.00  +12.20  19.20     91  +10.80 1 3 1 3 1   888    0 1.31 -3.69 ----- 19.2 19.2 280.4 23.7 16.0 -5.8 15.6 -5.9 14.8 -6.7 15.6 -5.3
2026-04-12T11:29:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:29:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:29:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.395248
2026-04-12T11:29:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:29:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:29:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:29:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:29:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:29:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:28:57', tmtdew=0.13374, humidity=98.5923, cloud=0.0, wind=19.6571, temperature=11.736, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:29:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:29:34.220 [DEBUG] [Thread-188291] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:29:34.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:29:34.310 [DEBUG] [Thread-188294] [transport.py] [_log()] starting thread (client mode): 0xb39c6170
2026-04-12T11:29:34.310 [DEBUG] [Thread-188294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:29:34.330 [DEBUG] [Thread-188294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:29:34.331 [INFO] [Thread-188294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:29:34.344 [DEBUG] [Thread-188294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] client lang: <none>
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] server lang: <none>
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] kex follows: False
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] Compression: none
2026-04-12T11:29:34.345 [DEBUG] [Thread-188294] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:29:34.408 [DEBUG] [Thread-188294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:29:34.409 [DEBUG] [Thread-188294] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:29:34.409 [DEBUG] [Thread-188294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:29:34.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:29:34.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:29:34.476 [DEBUG] [Thread-188294] [transport.py] [_log()] userauth is OK
2026-04-12T11:29:34.476 [DEBUG] [Thread-188294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:29:34.476 [DEBUG] [Thread-188294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:29:34.476 [DEBUG] [Thread-188294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:29:34.477 [DEBUG] [Thread-188294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:29:34.501 [INFO] [Thread-188294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:29:34.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:29:34.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:29:35.336 [DEBUG] [Thread-188294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:29:35.336 [DEBUG] [Thread-188294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:29:35.391 [DEBUG] [Thread-188294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:29:35.391 [DEBUG] [Thread-188294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:29:35.408 [DEBUG] [Thread-188294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:29:35.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:29:35.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:29:35.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:29:35.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:29:35.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:29:35.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:29:35.471 [DEBUG] [Thread-188294] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:29:37.530 [DEBUG] [Thread-188296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:29:52.586 [DEBUG] [Thread-188297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:30:05.345 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:30:05.346 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:30:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:30:05.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:30:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:30:06.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 29, 33), 0.30839, 97.9192, 0.0, 18.9842, 12.3394, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:30:06.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:29:33
2026-04-12T11:30:07.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:30:07.301 [DEBUG] [Thread-188298] [transport.py] [_log()] starting thread (client mode): 0xb39c79a0
2026-04-12T11:30:07.302 [DEBUG] [Thread-188298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:30:07.321 [DEBUG] [Thread-188298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:30:07.321 [INFO] [Thread-188298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:30:07.324 [DEBUG] [Thread-188298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:30:07.324 [DEBUG] [Thread-188298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:30:07.324 [DEBUG] [Thread-188298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] client lang: <none>
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] server lang: <none>
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] kex follows: False
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] Compression: none
2026-04-12T11:30:07.325 [DEBUG] [Thread-188298] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:30:07.344 [DEBUG] [Thread-188298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:30:07.345 [DEBUG] [Thread-188298] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:30:07.345 [DEBUG] [Thread-188298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:30:07.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:30:07.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:30:07.347 [DEBUG] [Thread-188298] [transport.py] [_log()] userauth is OK
2026-04-12T11:30:07.347 [DEBUG] [Thread-188298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:30:07.347 [DEBUG] [Thread-188298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:30:07.347 [DEBUG] [Thread-188298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:30:07.347 [DEBUG] [Thread-188298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:30:07.382 [INFO] [Thread-188298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:30:07.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:30:07.622 [DEBUG] [Thread-188300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:30:08.455 [DEBUG] [Thread-188298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:30:08.455 [DEBUG] [Thread-188298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:30:08.455 [DEBUG] [Thread-188298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:30:08.496 [DEBUG] [Thread-188298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:30:08.496 [DEBUG] [Thread-188298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:30:08.499 [DEBUG] [Thread-188298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:30:08.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:30:08.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:30:08.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:30:08.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:30:08.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:30:08.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:30:08.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:30:08.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:30:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:30:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.395595 -999.00  +12.10  18.93     91  +10.70 1 3 1 3 1   888    0 1.33 -3.37 ----- 16.9 18.9 275.8 21.8 15.9 -7.0 15.6 -6.1 14.8 -6.3 15.6 -5.7
2026-04-12T11:30:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:30:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:30:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.395595
2026-04-12T11:30:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:30:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:30:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:30:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:30:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:30:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:29:33', tmtdew=0.30839, humidity=97.9192, cloud=0.0, wind=18.9842, temperature=12.3394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:29:39.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:30:08.549 [DEBUG] [Thread-188298] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:30:08.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:30:08.658 [DEBUG] [Thread-188302] [transport.py] [_log()] starting thread (client mode): 0xb39c7ee0
2026-04-12T11:30:08.658 [DEBUG] [Thread-188302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:30:08.687 [DEBUG] [Thread-188302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:30:08.688 [INFO] [Thread-188302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] client lang: <none>
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] server lang: <none>
2026-04-12T11:30:08.709 [DEBUG] [Thread-188302] [transport.py] [_log()] kex follows: False
2026-04-12T11:30:08.710 [DEBUG] [Thread-188302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:30:08.710 [DEBUG] [Thread-188302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:30:08.710 [DEBUG] [Thread-188302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:30:08.710 [DEBUG] [Thread-188302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:30:08.710 [DEBUG] [Thread-188302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:30:08.710 [DEBUG] [Thread-188302] [transport.py] [_log()] Compression: none
2026-04-12T11:30:08.710 [DEBUG] [Thread-188302] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:30:08.785 [DEBUG] [Thread-188302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:30:08.786 [DEBUG] [Thread-188302] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:30:08.786 [DEBUG] [Thread-188302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:30:08.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:30:08.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:30:08.872 [DEBUG] [Thread-188302] [transport.py] [_log()] userauth is OK
2026-04-12T11:30:08.872 [DEBUG] [Thread-188302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:30:08.872 [DEBUG] [Thread-188302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:30:08.872 [DEBUG] [Thread-188302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:30:08.872 [DEBUG] [Thread-188302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:30:08.904 [INFO] [Thread-188302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:30:08.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:30:08.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:30:09.724 [DEBUG] [Thread-188302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:30:09.724 [DEBUG] [Thread-188302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:30:09.787 [DEBUG] [Thread-188302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:30:09.787 [DEBUG] [Thread-188302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:30:09.811 [DEBUG] [Thread-188302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:30:09.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:30:09.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:30:09.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:30:09.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:30:09.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:30:09.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:30:09.911 [DEBUG] [Thread-188302] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:30:22.662 [DEBUG] [Thread-188304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:30:31.131 [DEBUG] [Thread-188305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:30:37.714 [DEBUG] [Thread-188306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:30:39.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:30:39.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:30:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:30:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 30, 8), 0.188805, 99.0591, 0.0, 19.9386, 11.6363, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:30:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:30:08
2026-04-12T11:30:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:30:41.807 [DEBUG] [Thread-188307] [transport.py] [_log()] starting thread (client mode): 0xb0fb73d0
2026-04-12T11:30:41.807 [DEBUG] [Thread-188307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:30:41.824 [DEBUG] [Thread-188307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:30:41.824 [INFO] [Thread-188307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] client lang: <none>
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] server lang: <none>
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] kex follows: False
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] Compression: none
2026-04-12T11:30:41.826 [DEBUG] [Thread-188307] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:30:41.835 [DEBUG] [Thread-188307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:30:41.835 [DEBUG] [Thread-188307] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:30:41.835 [DEBUG] [Thread-188307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:30:41.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:30:41.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:30:41.836 [DEBUG] [Thread-188307] [transport.py] [_log()] userauth is OK
2026-04-12T11:30:41.837 [DEBUG] [Thread-188307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:30:41.837 [DEBUG] [Thread-188307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:30:41.837 [DEBUG] [Thread-188307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:30:41.837 [DEBUG] [Thread-188307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:30:41.859 [INFO] [Thread-188307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:30:41.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:30:42.637 [DEBUG] [Thread-188307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:30:42.638 [DEBUG] [Thread-188307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:30:42.638 [DEBUG] [Thread-188307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:30:42.679 [DEBUG] [Thread-188307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:30:42.679 [DEBUG] [Thread-188307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:30:42.682 [DEBUG] [Thread-188307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:30:42.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:30:42.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:30:42.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:30:42.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:30:42.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:30:42.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:30:42.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:30:42.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:30:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:30:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.395942 -999.00  +12.10  16.60     91  +10.70 1 3 1 3 1   888    0 1.36 -2.96 ----- 13.4 16.6 279.2 23.1 15.9 -6.8 15.6 -5.8 14.8 -7.1 15.4 -5.7
2026-04-12T11:30:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:30:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:30:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.395942
2026-04-12T11:30:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:30:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:30:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:30:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:30:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:30:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:30:08', tmtdew=0.188805, humidity=99.0591, cloud=0.0, wind=19.9386, temperature=11.6363, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:30:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:30:42.709 [DEBUG] [Thread-188307] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:30:42.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:30:42.824 [DEBUG] [Thread-188310] [transport.py] [_log()] starting thread (client mode): 0xb0fb4d00
2026-04-12T11:30:42.824 [DEBUG] [Thread-188310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:30:42.859 [DEBUG] [Thread-188310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:30:42.859 [INFO] [Thread-188310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:30:42.887 [DEBUG] [Thread-188310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:30:42.887 [DEBUG] [Thread-188310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:30:42.887 [DEBUG] [Thread-188310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:30:42.887 [DEBUG] [Thread-188310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] client lang: <none>
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] server lang: <none>
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] kex follows: False
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:30:42.888 [DEBUG] [Thread-188310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:30:42.889 [DEBUG] [Thread-188310] [transport.py] [_log()] Compression: none
2026-04-12T11:30:42.889 [DEBUG] [Thread-188310] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:30:42.965 [DEBUG] [Thread-188310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:30:42.965 [DEBUG] [Thread-188310] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:30:42.966 [DEBUG] [Thread-188310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:30:42.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:30:42.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:30:43.069 [DEBUG] [Thread-188310] [transport.py] [_log()] userauth is OK
2026-04-12T11:30:43.069 [DEBUG] [Thread-188310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:30:43.069 [DEBUG] [Thread-188310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:30:43.069 [DEBUG] [Thread-188310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:30:43.070 [DEBUG] [Thread-188310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:30:43.109 [INFO] [Thread-188310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:30:43.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:30:43.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:30:43.947 [DEBUG] [Thread-188310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:30:43.947 [DEBUG] [Thread-188310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:30:44.016 [DEBUG] [Thread-188310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:30:44.016 [DEBUG] [Thread-188310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:30:44.050 [DEBUG] [Thread-188310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:30:44.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:30:44.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:30:44.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:30:44.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:30:44.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:30:44.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:30:44.183 [DEBUG] [Thread-188310] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:30:52.752 [DEBUG] [Thread-188312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:31:05.498 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:31:05.499 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:31:07.800 [DEBUG] [Thread-188313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:31:14.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:31:14.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:31:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:31:15.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 30, 44), 0.29811, 97.9855, 0.0, 18.3139, 12.3394, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:31:15.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:30:44
2026-04-12T11:31:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:31:16.055 [DEBUG] [Thread-188314] [transport.py] [_log()] starting thread (client mode): 0xb39c7400
2026-04-12T11:31:16.055 [DEBUG] [Thread-188314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:31:16.074 [DEBUG] [Thread-188314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:31:16.074 [INFO] [Thread-188314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] client lang: <none>
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] server lang: <none>
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] kex follows: False
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] Compression: none
2026-04-12T11:31:16.077 [DEBUG] [Thread-188314] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:31:16.087 [DEBUG] [Thread-188314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:31:16.088 [DEBUG] [Thread-188314] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:31:16.088 [DEBUG] [Thread-188314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:31:16.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:31:16.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:31:16.089 [DEBUG] [Thread-188314] [transport.py] [_log()] userauth is OK
2026-04-12T11:31:16.089 [DEBUG] [Thread-188314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:31:16.089 [DEBUG] [Thread-188314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:31:16.089 [DEBUG] [Thread-188314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:31:16.089 [DEBUG] [Thread-188314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:31:16.109 [INFO] [Thread-188314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:31:16.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:31:16.912 [DEBUG] [Thread-188314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:31:16.912 [DEBUG] [Thread-188314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:31:16.913 [DEBUG] [Thread-188314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:31:16.953 [DEBUG] [Thread-188314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:31:16.953 [DEBUG] [Thread-188314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:31:16.957 [DEBUG] [Thread-188314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:31:16.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:31:16.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:31:16.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:31:16.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:31:16.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:31:16.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:31:16.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:31:16.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:31:16.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:31:16.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.396290 -999.00  +12.10  17.88     91  +10.70 1 3 1 3 1   888    0 1.31 -2.55 ----- 17.6 17.9 275.8 22.3 15.9 -6.9 15.6 -5.5 14.8 -4.7 15.5 -5.1
2026-04-12T11:31:16.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:31:16.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:31:16.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.396290
2026-04-12T11:31:16.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:31:16.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:31:16.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:31:16.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:31:16.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:31:16.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:30:44', tmtdew=0.29811, humidity=97.9855, cloud=0.0, wind=18.3139, temperature=12.3394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:30:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:31:16.985 [DEBUG] [Thread-188314] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:31:17.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:31:17.079 [DEBUG] [Thread-188317] [transport.py] [_log()] starting thread (client mode): 0xb39c4b20
2026-04-12T11:31:17.079 [DEBUG] [Thread-188317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:31:17.093 [DEBUG] [Thread-188317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:31:17.093 [INFO] [Thread-188317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] client lang: <none>
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] server lang: <none>
2026-04-12T11:31:17.101 [DEBUG] [Thread-188317] [transport.py] [_log()] kex follows: False
2026-04-12T11:31:17.102 [DEBUG] [Thread-188317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:31:17.102 [DEBUG] [Thread-188317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:31:17.102 [DEBUG] [Thread-188317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:31:17.102 [DEBUG] [Thread-188317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:31:17.102 [DEBUG] [Thread-188317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:31:17.102 [DEBUG] [Thread-188317] [transport.py] [_log()] Compression: none
2026-04-12T11:31:17.102 [DEBUG] [Thread-188317] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:31:17.160 [DEBUG] [Thread-188317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:31:17.160 [DEBUG] [Thread-188317] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:31:17.161 [DEBUG] [Thread-188317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:31:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:31:17.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:31:17.216 [DEBUG] [Thread-188317] [transport.py] [_log()] userauth is OK
2026-04-12T11:31:17.216 [DEBUG] [Thread-188317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:31:17.216 [DEBUG] [Thread-188317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:31:17.216 [DEBUG] [Thread-188317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:31:17.217 [DEBUG] [Thread-188317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:31:17.235 [INFO] [Thread-188317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:31:17.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:31:17.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:31:18.085 [DEBUG] [Thread-188317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:31:18.085 [DEBUG] [Thread-188317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:31:18.133 [DEBUG] [Thread-188317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:31:18.133 [DEBUG] [Thread-188317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:31:18.142 [DEBUG] [Thread-188317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:31:18.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:31:18.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:31:18.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:31:18.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:31:18.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:31:18.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:31:18.176 [DEBUG] [Thread-188317] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:31:22.836 [DEBUG] [Thread-188319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:31:31.165 [DEBUG] [Thread-188320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:31:37.885 [DEBUG] [Thread-188321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:31:48.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:31:48.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:31:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:31:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 31, 19), 0.19651, 99.0094, 0.0, 18.2628, 11.6363, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:31:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:31:19
2026-04-12T11:31:49.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:31:50.116 [DEBUG] [Thread-188322] [transport.py] [_log()] starting thread (client mode): 0xb0fb5e10
2026-04-12T11:31:50.116 [DEBUG] [Thread-188322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:31:50.136 [DEBUG] [Thread-188322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:31:50.136 [INFO] [Thread-188322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:31:50.138 [DEBUG] [Thread-188322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:31:50.138 [DEBUG] [Thread-188322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:31:50.138 [DEBUG] [Thread-188322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] client lang: <none>
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] server lang: <none>
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] kex follows: False
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:31:50.139 [DEBUG] [Thread-188322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:31:50.140 [DEBUG] [Thread-188322] [transport.py] [_log()] Compression: none
2026-04-12T11:31:50.140 [DEBUG] [Thread-188322] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:31:50.159 [DEBUG] [Thread-188322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:31:50.160 [DEBUG] [Thread-188322] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:31:50.161 [DEBUG] [Thread-188322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:31:50.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:31:50.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:31:50.163 [DEBUG] [Thread-188322] [transport.py] [_log()] userauth is OK
2026-04-12T11:31:50.163 [DEBUG] [Thread-188322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:31:50.163 [DEBUG] [Thread-188322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:31:50.163 [DEBUG] [Thread-188322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:31:50.163 [DEBUG] [Thread-188322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:31:50.199 [INFO] [Thread-188322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:31:50.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:31:51.009 [DEBUG] [Thread-188322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:31:51.009 [DEBUG] [Thread-188322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:31:51.010 [DEBUG] [Thread-188322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:31:51.050 [DEBUG] [Thread-188322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:31:51.050 [DEBUG] [Thread-188322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:31:51.053 [DEBUG] [Thread-188322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:31:51.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:31:51.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:31:51.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:31:51.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:31:51.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:31:51.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:31:51.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:31:51.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:31:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:31:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.396637 -999.00  +11.90  19.40     91  +10.60 1 3 1 3 1   888    0 1.35 -2.21 ----- 18.3 19.4 271.6 29.6 15.8 -6.5 15.5 -5.2 14.8 -6.5 15.4 -5.4
2026-04-12T11:31:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:31:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:31:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.396637
2026-04-12T11:31:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:31:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:31:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:31:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:31:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:31:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:31:19', tmtdew=0.19651, humidity=99.0094, cloud=0.0, wind=18.2628, temperature=11.6363, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:31:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:31:51.080 [DEBUG] [Thread-188322] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:31:51.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:31:51.175 [DEBUG] [Thread-188325] [transport.py] [_log()] starting thread (client mode): 0xb0fb78e0
2026-04-12T11:31:51.175 [DEBUG] [Thread-188325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:31:51.192 [DEBUG] [Thread-188325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:31:51.193 [INFO] [Thread-188325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:31:51.202 [DEBUG] [Thread-188325] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:31:51.202 [DEBUG] [Thread-188325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] client lang: <none>
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] server lang: <none>
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] kex follows: False
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:31:51.203 [DEBUG] [Thread-188325] [transport.py] [_log()] Compression: none
2026-04-12T11:31:51.204 [DEBUG] [Thread-188325] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:31:51.264 [DEBUG] [Thread-188325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:31:51.264 [DEBUG] [Thread-188325] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:31:51.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:31:51.266 [DEBUG] [Thread-188325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:31:51.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:31:51.325 [DEBUG] [Thread-188325] [transport.py] [_log()] userauth is OK
2026-04-12T11:31:51.326 [DEBUG] [Thread-188325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:31:51.326 [DEBUG] [Thread-188325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:31:51.326 [DEBUG] [Thread-188325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:31:51.326 [DEBUG] [Thread-188325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:31:51.348 [INFO] [Thread-188325] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:31:51.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:31:51.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:31:52.157 [DEBUG] [Thread-188325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:31:52.157 [DEBUG] [Thread-188325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:31:52.212 [DEBUG] [Thread-188325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:31:52.212 [DEBUG] [Thread-188325] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:31:52.226 [DEBUG] [Thread-188325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:31:52.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:31:52.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:31:52.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:31:52.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:31:52.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:31:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:31:52.285 [DEBUG] [Thread-188325] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:31:52.922 [DEBUG] [Thread-188327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:05.651 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:05.652 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:07.976 [DEBUG] [Thread-188328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:32:22.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:32:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:32:23.013 [DEBUG] [Thread-188329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 31, 55), 0.199105, 98.9928, 0.0, 20.3803, 11.7028, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:32:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:31:55
2026-04-12T11:32:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:32:24.156 [DEBUG] [Thread-188330] [transport.py] [_log()] starting thread (client mode): 0xb0fb62f0
2026-04-12T11:32:24.157 [DEBUG] [Thread-188330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:32:24.178 [DEBUG] [Thread-188330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:32:24.178 [INFO] [Thread-188330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] client lang: <none>
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] server lang: <none>
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] kex follows: False
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:32:24.181 [DEBUG] [Thread-188330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:32:24.182 [DEBUG] [Thread-188330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:32:24.182 [DEBUG] [Thread-188330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:32:24.182 [DEBUG] [Thread-188330] [transport.py] [_log()] Compression: none
2026-04-12T11:32:24.182 [DEBUG] [Thread-188330] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:32:24.199 [DEBUG] [Thread-188330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:32:24.199 [DEBUG] [Thread-188330] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:32:24.200 [DEBUG] [Thread-188330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:32:24.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:32:24.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:32:24.202 [DEBUG] [Thread-188330] [transport.py] [_log()] userauth is OK
2026-04-12T11:32:24.203 [DEBUG] [Thread-188330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:32:24.203 [DEBUG] [Thread-188330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:32:24.203 [DEBUG] [Thread-188330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:32:24.203 [DEBUG] [Thread-188330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:32:24.221 [INFO] [Thread-188330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:32:24.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:32:24.992 [DEBUG] [Thread-188330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:32:24.992 [DEBUG] [Thread-188330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:32:24.993 [DEBUG] [Thread-188330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:32:25.033 [DEBUG] [Thread-188330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:32:25.033 [DEBUG] [Thread-188330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:32:25.037 [DEBUG] [Thread-188330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:32:25.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:32:25.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:32:25.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:32:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:32:25.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:32:25.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:32:25.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:32:25.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:32:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:32:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.396984 -999.00  +11.90  22.41     91  +10.70 1 3 1 3 1   888    0 1.32 -1.98 ----- 18.9 22.4 270.0 26.0 15.7 -5.5 15.4 -4.8 14.5 -5.1 15.3 -4.3
2026-04-12T11:32:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:32:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:32:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.396984
2026-04-12T11:32:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:32:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:32:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:32:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:32:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:32:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:31:55', tmtdew=0.199105, humidity=98.9928, cloud=0.0, wind=20.3803, temperature=11.7028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:31:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:32:25.063 [DEBUG] [Thread-188330] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:32:25.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:32:25.153 [DEBUG] [Thread-188333] [transport.py] [_log()] starting thread (client mode): 0xb0fb4400
2026-04-12T11:32:25.154 [DEBUG] [Thread-188333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:32:25.168 [DEBUG] [Thread-188333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:32:25.168 [INFO] [Thread-188333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:32:25.176 [DEBUG] [Thread-188333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:32:25.176 [DEBUG] [Thread-188333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:32:25.176 [DEBUG] [Thread-188333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:32:25.176 [DEBUG] [Thread-188333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:25.176 [DEBUG] [Thread-188333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] client lang: <none>
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] server lang: <none>
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] kex follows: False
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:32:25.177 [DEBUG] [Thread-188333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:32:25.178 [DEBUG] [Thread-188333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:32:25.178 [DEBUG] [Thread-188333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:32:25.178 [DEBUG] [Thread-188333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:32:25.178 [DEBUG] [Thread-188333] [transport.py] [_log()] Compression: none
2026-04-12T11:32:25.178 [DEBUG] [Thread-188333] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:32:25.236 [DEBUG] [Thread-188333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:32:25.236 [DEBUG] [Thread-188333] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:32:25.237 [DEBUG] [Thread-188333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:32:25.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:32:25.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:32:25.292 [DEBUG] [Thread-188333] [transport.py] [_log()] userauth is OK
2026-04-12T11:32:25.292 [DEBUG] [Thread-188333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:32:25.292 [DEBUG] [Thread-188333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:32:25.293 [DEBUG] [Thread-188333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:32:25.293 [DEBUG] [Thread-188333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:32:25.312 [INFO] [Thread-188333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:32:25.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:32:25.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:32:26.175 [DEBUG] [Thread-188333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:32:26.175 [DEBUG] [Thread-188333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:32:26.223 [DEBUG] [Thread-188333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:32:26.224 [DEBUG] [Thread-188333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:32:26.233 [DEBUG] [Thread-188333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:32:26.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:32:26.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:32:26.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:32:26.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:32:26.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:32:26.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:32:26.270 [DEBUG] [Thread-188333] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:32:31.199 [DEBUG] [Thread-188335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:38.051 [DEBUG] [Thread-188336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:53.100 [DEBUG] [Thread-188337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:32:56.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:32:56.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:32: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
2026-04-12T11:32:57.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 32, 33), 0.28288, 98.085, 0.0, 20.466, 12.472, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:32:57.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:32:33
2026-04-12T11:32:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:32:58.145 [DEBUG] [Thread-188338] [transport.py] [_log()] starting thread (client mode): 0xb39c78e0
2026-04-12T11:32:58.145 [DEBUG] [Thread-188338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:32:58.163 [DEBUG] [Thread-188338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:32:58.163 [INFO] [Thread-188338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:32:58.166 [DEBUG] [Thread-188338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] client lang: <none>
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] server lang: <none>
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] kex follows: False
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:32:58.167 [DEBUG] [Thread-188338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:32:58.168 [DEBUG] [Thread-188338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:32:58.168 [DEBUG] [Thread-188338] [transport.py] [_log()] Compression: none
2026-04-12T11:32:58.168 [DEBUG] [Thread-188338] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:32:58.184 [DEBUG] [Thread-188338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:32:58.185 [DEBUG] [Thread-188338] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:32:58.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:32:58.186 [DEBUG] [Thread-188338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:32:58.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:32:58.187 [DEBUG] [Thread-188338] [transport.py] [_log()] userauth is OK
2026-04-12T11:32:58.187 [DEBUG] [Thread-188338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:32:58.188 [DEBUG] [Thread-188338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:32:58.188 [DEBUG] [Thread-188338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:32:58.188 [DEBUG] [Thread-188338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:32:58.210 [INFO] [Thread-188338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:32:58.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:32:58.994 [DEBUG] [Thread-188338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:32:58.994 [DEBUG] [Thread-188338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:32:58.995 [DEBUG] [Thread-188338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:32:59.035 [DEBUG] [Thread-188338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:32:59.035 [DEBUG] [Thread-188338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:32:59.039 [DEBUG] [Thread-188338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:32:59.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:32:59.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:32:59.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:32:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:32:59.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:32:59.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:32:59.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:32:59.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:32:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:32:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.397331 -999.00  +11.90  26.03     92  +10.70 1 3 1 3 1   888    0 1.32 -2.18 ----- 25.6 26.0 274.0 29.2 15.7 -5.4 15.4 -4.6 14.6 -5.7 15.3 -4.4
2026-04-12T11:32:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:32:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:32:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.397331
2026-04-12T11:32:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:32:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:32:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:32:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:32:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:32:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:32:33', tmtdew=0.28288, humidity=98.085, cloud=0.0, wind=20.466, temperature=12.472, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:32:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:32:59.063 [DEBUG] [Thread-188338] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:32:59.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:32:59.156 [DEBUG] [Thread-188341] [transport.py] [_log()] starting thread (client mode): 0xb39c55d0
2026-04-12T11:32:59.156 [DEBUG] [Thread-188341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:32:59.170 [DEBUG] [Thread-188341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:32:59.171 [INFO] [Thread-188341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:32:59.178 [DEBUG] [Thread-188341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:32:59.179 [DEBUG] [Thread-188341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:32:59.180 [DEBUG] [Thread-188341] [transport.py] [_log()] client lang: <none>
2026-04-12T11:32:59.180 [DEBUG] [Thread-188341] [transport.py] [_log()] server lang: <none>
2026-04-12T11:32:59.180 [DEBUG] [Thread-188341] [transport.py] [_log()] kex follows: False
2026-04-12T11:32:59.180 [DEBUG] [Thread-188341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:32:59.180 [DEBUG] [Thread-188341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:32:59.180 [DEBUG] [Thread-188341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:32:59.180 [DEBUG] [Thread-188341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:32:59.181 [DEBUG] [Thread-188341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:32:59.181 [DEBUG] [Thread-188341] [transport.py] [_log()] Compression: none
2026-04-12T11:32:59.181 [DEBUG] [Thread-188341] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:32:59.236 [DEBUG] [Thread-188341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:32:59.236 [DEBUG] [Thread-188341] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:32:59.237 [DEBUG] [Thread-188341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:32:59.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:32:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:32:59.292 [DEBUG] [Thread-188341] [transport.py] [_log()] userauth is OK
2026-04-12T11:32:59.292 [DEBUG] [Thread-188341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:32:59.292 [DEBUG] [Thread-188341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:32:59.292 [DEBUG] [Thread-188341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:32:59.292 [DEBUG] [Thread-188341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:32:59.312 [INFO] [Thread-188341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:32:59.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:32:59.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:33:00.164 [DEBUG] [Thread-188341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:33:00.164 [DEBUG] [Thread-188341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:33:00.212 [DEBUG] [Thread-188341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:33:00.212 [DEBUG] [Thread-188341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:33:00.221 [DEBUG] [Thread-188341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:33:00.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:33:00.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:33:00.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:33:00.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:33:00.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:33:00.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:33:00.258 [DEBUG] [Thread-188341] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:33:05.811 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:33:05.812 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:33:08.134 [DEBUG] [Thread-188343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:33:23.194 [DEBUG] [Thread-188344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:33:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:33:30.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:33:30.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:33:31.232 [DEBUG] [Thread-188345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:33:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 33, 8), 0.19149, 99.0425, 0.0, 22.0561, 11.7692, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:33:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:33:08
2026-04-12T11:33:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:33:32.138 [DEBUG] [Thread-188346] [transport.py] [_log()] starting thread (client mode): 0xb39c6950
2026-04-12T11:33:32.138 [DEBUG] [Thread-188346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:33:32.158 [DEBUG] [Thread-188346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:33:32.158 [INFO] [Thread-188346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:33:32.161 [DEBUG] [Thread-188346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:33:32.161 [DEBUG] [Thread-188346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:33:32.161 [DEBUG] [Thread-188346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] client lang: <none>
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] server lang: <none>
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] kex follows: False
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] Compression: none
2026-04-12T11:33:32.162 [DEBUG] [Thread-188346] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:33:32.179 [DEBUG] [Thread-188346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:33:32.180 [DEBUG] [Thread-188346] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:33:32.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:33:32.181 [DEBUG] [Thread-188346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:33:32.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:33:32.182 [DEBUG] [Thread-188346] [transport.py] [_log()] userauth is OK
2026-04-12T11:33:32.183 [DEBUG] [Thread-188346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:33:32.183 [DEBUG] [Thread-188346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:33:32.183 [DEBUG] [Thread-188346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:33:32.183 [DEBUG] [Thread-188346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:33:32.201 [INFO] [Thread-188346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:33:32.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:33:32.970 [DEBUG] [Thread-188346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:33:32.971 [DEBUG] [Thread-188346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:33:32.971 [DEBUG] [Thread-188346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:33:33.012 [DEBUG] [Thread-188346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:33:33.012 [DEBUG] [Thread-188346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:33:33.015 [DEBUG] [Thread-188346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:33:33.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:33:33.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:33:33.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:33:33.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:33:33.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:33:33.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:33:33.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:33:33.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:33:33.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:33:33.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.397678 -999.00  +11.90  18.20     92  +10.60 1 3 1 3 1   888    0 1.25 -2.83 ----- 18.8 18.2 276.2 23.3 15.6 -5.6 15.3 -5.3 14.5 -5.1 15.2 -4.9
2026-04-12T11:33:33.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:33:33.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:33:33.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.397678
2026-04-12T11:33:33.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:33:33.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:33:33.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:33:33.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:33:33.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:33:33.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:33:08', tmtdew=0.19149, humidity=99.0425, cloud=0.0, wind=22.0561, temperature=11.7692, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:32:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:33:33.038 [DEBUG] [Thread-188346] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:33:33.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:33:33.137 [DEBUG] [Thread-188349] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d00
2026-04-12T11:33:33.137 [DEBUG] [Thread-188349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:33:33.152 [DEBUG] [Thread-188349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:33:33.152 [INFO] [Thread-188349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:33:33.159 [DEBUG] [Thread-188349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:33:33.159 [DEBUG] [Thread-188349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] client lang: <none>
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] server lang: <none>
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] kex follows: False
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] Compression: none
2026-04-12T11:33:33.160 [DEBUG] [Thread-188349] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:33:33.220 [DEBUG] [Thread-188349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:33:33.220 [DEBUG] [Thread-188349] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:33:33.220 [DEBUG] [Thread-188349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:33:33.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:33:33.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:33:33.276 [DEBUG] [Thread-188349] [transport.py] [_log()] userauth is OK
2026-04-12T11:33:33.277 [DEBUG] [Thread-188349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:33:33.277 [DEBUG] [Thread-188349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:33:33.277 [DEBUG] [Thread-188349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:33:33.277 [DEBUG] [Thread-188349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:33:33.295 [INFO] [Thread-188349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:33:33.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:33:33.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:33:34.155 [DEBUG] [Thread-188349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:33:34.155 [DEBUG] [Thread-188349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:33:34.203 [DEBUG] [Thread-188349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:33:34.203 [DEBUG] [Thread-188349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:33:34.211 [DEBUG] [Thread-188349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:33:34.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:33:34.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:33:34.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:33:34.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:33:34.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:33:34.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:33:34.246 [DEBUG] [Thread-188349] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:33:38.230 [DEBUG] [Thread-188351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:33:53.284 [DEBUG] [Thread-188352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:34:04.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:34:04.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:34:04.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:34:05.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 33, 43), 0.29831, 97.9855, 0.0, 21.595, 12.472, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:34:05.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:33:43
2026-04-12T11:34:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:34:05.970 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:34:05.971 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:34:06.100 [DEBUG] [Thread-188353] [transport.py] [_log()] starting thread (client mode): 0xa7968160
2026-04-12T11:34:06.101 [DEBUG] [Thread-188353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:34:06.121 [DEBUG] [Thread-188353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:34:06.122 [INFO] [Thread-188353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] client lang: <none>
2026-04-12T11:34:06.125 [DEBUG] [Thread-188353] [transport.py] [_log()] server lang: <none>
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] kex follows: False
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] Compression: none
2026-04-12T11:34:06.126 [DEBUG] [Thread-188353] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:34:06.144 [DEBUG] [Thread-188353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:34:06.145 [DEBUG] [Thread-188353] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:34:06.146 [DEBUG] [Thread-188353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:34:06.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:34:06.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:34:06.148 [DEBUG] [Thread-188353] [transport.py] [_log()] userauth is OK
2026-04-12T11:34:06.148 [DEBUG] [Thread-188353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:34:06.148 [DEBUG] [Thread-188353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:34:06.148 [DEBUG] [Thread-188353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:34:06.149 [DEBUG] [Thread-188353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:34:06.181 [INFO] [Thread-188353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:34:06.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:34:06.998 [DEBUG] [Thread-188353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:34:06.998 [DEBUG] [Thread-188353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:34:06.998 [DEBUG] [Thread-188353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:34:07.039 [DEBUG] [Thread-188353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:34:07.039 [DEBUG] [Thread-188353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:34:07.042 [DEBUG] [Thread-188353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:34:07.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:34:07.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:34:07.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:34:07.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:34:07.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:34:07.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:34:07.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:34:07.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:34:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:34:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.398373 -999.00  +11.90  18.73     92  +10.70 1 3 1 3 1   888    0 1.24 -4.16 ----- 20.6 18.7 271.6 25.8 15.6 -5.3 15.3 -4.7 14.5 -4.7 15.2 -4.2
2026-04-12T11:34:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:34:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:34:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.398373
2026-04-12T11:34:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:34:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:34:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:34:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:34:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:34:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:33:43', tmtdew=0.29831, humidity=97.9855, cloud=0.0, wind=21.595, temperature=12.472, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:33:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:34:07.069 [DEBUG] [Thread-188353] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:34:07.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:34:07.163 [DEBUG] [Thread-188356] [transport.py] [_log()] starting thread (client mode): 0xa79697b0
2026-04-12T11:34:07.163 [DEBUG] [Thread-188356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:34:07.179 [DEBUG] [Thread-188356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:34:07.179 [INFO] [Thread-188356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] client lang: <none>
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] server lang: <none>
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] kex follows: False
2026-04-12T11:34:07.189 [DEBUG] [Thread-188356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:34:07.190 [DEBUG] [Thread-188356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:34:07.190 [DEBUG] [Thread-188356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:34:07.190 [DEBUG] [Thread-188356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:34:07.190 [DEBUG] [Thread-188356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:34:07.190 [DEBUG] [Thread-188356] [transport.py] [_log()] Compression: none
2026-04-12T11:34:07.190 [DEBUG] [Thread-188356] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:34:07.248 [DEBUG] [Thread-188356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:34:07.248 [DEBUG] [Thread-188356] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:34:07.249 [DEBUG] [Thread-188356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:34:07.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:34:07.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:34:07.303 [DEBUG] [Thread-188356] [transport.py] [_log()] userauth is OK
2026-04-12T11:34:07.303 [DEBUG] [Thread-188356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:34:07.303 [DEBUG] [Thread-188356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:34:07.303 [DEBUG] [Thread-188356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:34:07.303 [DEBUG] [Thread-188356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:34:07.319 [INFO] [Thread-188356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:34:07.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:34:07.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:34:08.218 [DEBUG] [Thread-188356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:34:08.218 [DEBUG] [Thread-188356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:34:08.266 [DEBUG] [Thread-188356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:34:08.266 [DEBUG] [Thread-188356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:34:08.275 [DEBUG] [Thread-188356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:34:08.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:34:08.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:34:08.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:34:08.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:34:08.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:34:08.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:34:08.312 [DEBUG] [Thread-188356] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:34:08.320 [DEBUG] [Thread-188358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:34:23.375 [DEBUG] [Thread-188359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:34:31.279 [DEBUG] [Thread-188360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:34:38.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:34:38.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:34:38.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:34:38.412 [DEBUG] [Thread-188361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:34:39.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 34, 19), 0.201675, 98.4762, 0.0, 16.745, 11.7528, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:34:39.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:34:19
2026-04-12T11:34:39.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:34:40.068 [DEBUG] [Thread-188362] [transport.py] [_log()] starting thread (client mode): 0xa796a6e0
2026-04-12T11:34:40.069 [DEBUG] [Thread-188362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:34:40.083 [DEBUG] [Thread-188362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:34:40.083 [INFO] [Thread-188362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:34:40.087 [DEBUG] [Thread-188362] [transport.py] [_log()] client lang: <none>
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] server lang: <none>
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] kex follows: False
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] Compression: none
2026-04-12T11:34:40.088 [DEBUG] [Thread-188362] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:34:40.104 [DEBUG] [Thread-188362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:34:40.104 [DEBUG] [Thread-188362] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:34:40.105 [DEBUG] [Thread-188362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:34:40.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:34:40.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:34:40.107 [DEBUG] [Thread-188362] [transport.py] [_log()] userauth is OK
2026-04-12T11:34:40.107 [DEBUG] [Thread-188362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:34:40.107 [DEBUG] [Thread-188362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:34:40.107 [DEBUG] [Thread-188362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:34:40.107 [DEBUG] [Thread-188362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:34:40.127 [INFO] [Thread-188362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:34:40.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:34:40.881 [DEBUG] [Thread-188362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:34:40.881 [DEBUG] [Thread-188362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:34:40.881 [DEBUG] [Thread-188362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:34:40.923 [DEBUG] [Thread-188362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:34:40.923 [DEBUG] [Thread-188362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:34:40.925 [DEBUG] [Thread-188362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:34:40.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:34:40.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:34:40.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:34:40.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:34:40.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:34:40.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:34:40.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:34:40.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:34:40.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:34:40.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.398720 -999.00  +11.80  20.57     91  +10.50 1 3 1 3 1   888    0 1.27 -4.04 ----- 21.4 20.6 271.8 26.0 15.5 -5.5 15.3 -4.6 14.4 -4.2 15.2 -4.2
2026-04-12T11:34:40.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:34:40.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:34:40.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.398720
2026-04-12T11:34:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:34:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:34:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:34:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:34:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:34:40.952 [DEBUG] [Thread-188362] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:34:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:34:19', tmtdew=0.201675, humidity=98.4762, cloud=0.0, wind=16.745, temperature=11.7528, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:34:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:34:41.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:34:41.059 [DEBUG] [Thread-188365] [transport.py] [_log()] starting thread (client mode): 0xb39c5c60
2026-04-12T11:34:41.059 [DEBUG] [Thread-188365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:34:41.086 [DEBUG] [Thread-188365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:34:41.086 [INFO] [Thread-188365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:34:41.106 [DEBUG] [Thread-188365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:34:41.106 [DEBUG] [Thread-188365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:34:41.106 [DEBUG] [Thread-188365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:34:41.106 [DEBUG] [Thread-188365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:41.106 [DEBUG] [Thread-188365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] client lang: <none>
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] server lang: <none>
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] kex follows: False
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] Compression: none
2026-04-12T11:34:41.107 [DEBUG] [Thread-188365] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:34:41.178 [DEBUG] [Thread-188365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:34:41.178 [DEBUG] [Thread-188365] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:34:41.179 [DEBUG] [Thread-188365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:34:41.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:34:41.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:34:41.259 [DEBUG] [Thread-188365] [transport.py] [_log()] userauth is OK
2026-04-12T11:34:41.259 [DEBUG] [Thread-188365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:34:41.259 [DEBUG] [Thread-188365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:34:41.259 [DEBUG] [Thread-188365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:34:41.259 [DEBUG] [Thread-188365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:34:41.289 [INFO] [Thread-188365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:34:41.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:34:41.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:34:42.119 [DEBUG] [Thread-188365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:34:42.119 [DEBUG] [Thread-188365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:34:42.180 [DEBUG] [Thread-188365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:34:42.181 [DEBUG] [Thread-188365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:34:42.202 [DEBUG] [Thread-188365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:34:42.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:34:42.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:34:42.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:34:42.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:34:42.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:34:42.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:34:42.291 [DEBUG] [Thread-188365] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:34:53.449 [DEBUG] [Thread-188367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:35:06.113 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:35:06.114 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:35:08.513 [DEBUG] [Thread-188368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:35:12.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:35:12.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:35:12.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:35:13.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 34, 54), 0.29312, 98.0187, 0.0, 22.6534, 12.4389, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:35:13.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:34:54
2026-04-12T11:35:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:35:14.152 [DEBUG] [Thread-188369] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-12T11:35:14.152 [DEBUG] [Thread-188369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:35:14.171 [DEBUG] [Thread-188369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:35:14.171 [INFO] [Thread-188369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] client lang: <none>
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] server lang: <none>
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] kex follows: False
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:35:14.174 [DEBUG] [Thread-188369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:35:14.175 [DEBUG] [Thread-188369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:35:14.175 [DEBUG] [Thread-188369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:35:14.175 [DEBUG] [Thread-188369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:35:14.175 [DEBUG] [Thread-188369] [transport.py] [_log()] Compression: none
2026-04-12T11:35:14.175 [DEBUG] [Thread-188369] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:35:14.192 [DEBUG] [Thread-188369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:35:14.193 [DEBUG] [Thread-188369] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:35:14.193 [DEBUG] [Thread-188369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:35:14.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:35:14.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:35:14.195 [DEBUG] [Thread-188369] [transport.py] [_log()] userauth is OK
2026-04-12T11:35:14.196 [DEBUG] [Thread-188369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:35:14.196 [DEBUG] [Thread-188369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:35:14.196 [DEBUG] [Thread-188369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:35:14.196 [DEBUG] [Thread-188369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:35:14.214 [INFO] [Thread-188369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:35:14.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:35:15.560 [DEBUG] [Thread-188369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:35:15.561 [DEBUG] [Thread-188369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:35:15.561 [DEBUG] [Thread-188369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:35:15.602 [DEBUG] [Thread-188369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:35:15.602 [DEBUG] [Thread-188369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:35:15.606 [DEBUG] [Thread-188369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:35:15.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:35:15.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:35:15.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:35:15.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:35:15.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:35:15.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:35:15.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:35:15.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:35:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:35:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.399067 -999.00  +11.80  17.04     91  +10.50 1 3 1 3 1   888    0 1.27 -3.93 ----- 17.4 17.0 279.0 25.5 15.5 -5.2 15.2 -4.6 14.3 -4.6 15.1 -4.2
2026-04-12T11:35:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:35:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:35:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.399067
2026-04-12T11:35:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:35:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:35:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:35:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:35:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:35:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:34:54', tmtdew=0.29312, humidity=98.0187, cloud=0.0, wind=22.6534, temperature=12.4389, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:34:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:35:15.671 [DEBUG] [Thread-188369] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:35:15.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:35:15.765 [DEBUG] [Thread-188372] [transport.py] [_log()] starting thread (client mode): 0xb0fb4dc0
2026-04-12T11:35:15.765 [DEBUG] [Thread-188372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:35:15.789 [DEBUG] [Thread-188372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:35:15.789 [INFO] [Thread-188372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] client lang: <none>
2026-04-12T11:35:15.807 [DEBUG] [Thread-188372] [transport.py] [_log()] server lang: <none>
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] kex follows: False
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] Compression: none
2026-04-12T11:35:15.808 [DEBUG] [Thread-188372] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:35:15.873 [DEBUG] [Thread-188372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:35:15.874 [DEBUG] [Thread-188372] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:35:15.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:35:15.875 [DEBUG] [Thread-188372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:35:15.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:35:15.950 [DEBUG] [Thread-188372] [transport.py] [_log()] userauth is OK
2026-04-12T11:35:15.951 [DEBUG] [Thread-188372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:35:15.951 [DEBUG] [Thread-188372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:35:15.951 [DEBUG] [Thread-188372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:35:15.951 [DEBUG] [Thread-188372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:35:15.979 [INFO] [Thread-188372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:35:15.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:35:15.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:35:16.815 [DEBUG] [Thread-188372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:35:16.815 [DEBUG] [Thread-188372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:35:16.873 [DEBUG] [Thread-188372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:35:16.873 [DEBUG] [Thread-188372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:35:16.892 [DEBUG] [Thread-188372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:35:16.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:35:16.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:35:16.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:35:16.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:35:16.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:35:16.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:35:16.972 [DEBUG] [Thread-188372] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:35:23.552 [DEBUG] [Thread-188374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:35:31.324 [DEBUG] [Thread-188375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:35:38.612 [DEBUG] [Thread-188376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:35:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:35:46.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:35:46.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:35:48.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 35, 29), 0.2017, 98.4762, 0.0, 21.227, 11.6694, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:35:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:35:29
2026-04-12T11:35:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:35:48.814 [DEBUG] [Thread-188377] [transport.py] [_log()] starting thread (client mode): 0xe6cd73d0
2026-04-12T11:35:48.814 [DEBUG] [Thread-188377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:35:48.829 [DEBUG] [Thread-188377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:35:48.829 [INFO] [Thread-188377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] client lang: <none>
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] server lang: <none>
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] kex follows: False
2026-04-12T11:35:48.832 [DEBUG] [Thread-188377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:35:48.833 [DEBUG] [Thread-188377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:35:48.833 [DEBUG] [Thread-188377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:35:48.833 [DEBUG] [Thread-188377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:35:48.833 [DEBUG] [Thread-188377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:35:48.833 [DEBUG] [Thread-188377] [transport.py] [_log()] Compression: none
2026-04-12T11:35:48.833 [DEBUG] [Thread-188377] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:35:48.849 [DEBUG] [Thread-188377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:35:48.849 [DEBUG] [Thread-188377] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:35:48.850 [DEBUG] [Thread-188377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:35:48.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:35:48.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:35:48.852 [DEBUG] [Thread-188377] [transport.py] [_log()] userauth is OK
2026-04-12T11:35:48.852 [DEBUG] [Thread-188377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:35:48.853 [DEBUG] [Thread-188377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:35:48.853 [DEBUG] [Thread-188377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:35:48.853 [DEBUG] [Thread-188377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:35:48.877 [INFO] [Thread-188377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:35:48.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:35:49.648 [DEBUG] [Thread-188377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:35:49.648 [DEBUG] [Thread-188377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:35:49.648 [DEBUG] [Thread-188377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:35:49.689 [DEBUG] [Thread-188377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:35:49.689 [DEBUG] [Thread-188377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:35:49.693 [DEBUG] [Thread-188377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:35:49.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:35:49.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:35:49.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:35:49.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:35:49.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:35:49.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:35:49.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:35:49.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:35:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:35:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.399414 -999.00  +11.80  18.64     92  +10.50 1 3 1 3 1   888    0 1.25 -4.24 ----- 18.9 18.6 274.4 25.2 15.5 -5.5 15.2 -4.9 14.3 -4.8 15.1 -4.0
2026-04-12T11:35:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:35:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:35:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.399414
2026-04-12T11:35:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:35:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:35:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:35:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:35:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:35:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:35:29', tmtdew=0.2017, humidity=98.4762, cloud=0.0, wind=21.227, temperature=11.6694, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:35:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:35:49.722 [DEBUG] [Thread-188377] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:35:49.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:35:49.815 [DEBUG] [Thread-188380] [transport.py] [_log()] starting thread (client mode): 0xb0fb4bb0
2026-04-12T11:35:49.815 [DEBUG] [Thread-188380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:35:49.830 [DEBUG] [Thread-188380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:35:49.830 [INFO] [Thread-188380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:35:49.838 [DEBUG] [Thread-188380] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:35:49.838 [DEBUG] [Thread-188380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:35:49.838 [DEBUG] [Thread-188380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:35:49.838 [DEBUG] [Thread-188380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:49.838 [DEBUG] [Thread-188380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:35:49.838 [DEBUG] [Thread-188380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] client lang: <none>
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] server lang: <none>
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] kex follows: False
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] Compression: none
2026-04-12T11:35:49.839 [DEBUG] [Thread-188380] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:35:49.895 [DEBUG] [Thread-188380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:35:49.895 [DEBUG] [Thread-188380] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:35:49.896 [DEBUG] [Thread-188380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:35:49.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:35:49.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:35:49.952 [DEBUG] [Thread-188380] [transport.py] [_log()] userauth is OK
2026-04-12T11:35:49.953 [DEBUG] [Thread-188380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:35:49.953 [DEBUG] [Thread-188380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:35:49.953 [DEBUG] [Thread-188380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:35:49.953 [DEBUG] [Thread-188380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:35:49.972 [INFO] [Thread-188380] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:35:49.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:35:49.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:35:50.798 [DEBUG] [Thread-188380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:35:50.798 [DEBUG] [Thread-188380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:35:50.847 [DEBUG] [Thread-188380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:35:50.847 [DEBUG] [Thread-188380] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:35:50.856 [DEBUG] [Thread-188380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:35:50.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:35:50.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:35:50.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:35:50.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:35:50.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:35:50.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:35:50.891 [DEBUG] [Thread-188380] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:35:53.654 [DEBUG] [Thread-188382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:06.260 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:06.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:08.709 [DEBUG] [Thread-188383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:20.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:36:20.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:36:20.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:36:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 36, 5), 0.196535, 98.5094, 0.0, 21.5798, 11.6528, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:36:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:36:05
2026-04-12T11:36:22.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:36:22.712 [DEBUG] [Thread-188384] [transport.py] [_log()] starting thread (client mode): 0xb39c7340
2026-04-12T11:36:22.713 [DEBUG] [Thread-188384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:36:22.733 [DEBUG] [Thread-188384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:36:22.733 [INFO] [Thread-188384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:36:22.736 [DEBUG] [Thread-188384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] client lang: <none>
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] server lang: <none>
2026-04-12T11:36:22.737 [DEBUG] [Thread-188384] [transport.py] [_log()] kex follows: False
2026-04-12T11:36:22.738 [DEBUG] [Thread-188384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:36:22.738 [DEBUG] [Thread-188384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:36:22.738 [DEBUG] [Thread-188384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:36:22.738 [DEBUG] [Thread-188384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:36:22.738 [DEBUG] [Thread-188384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:36:22.738 [DEBUG] [Thread-188384] [transport.py] [_log()] Compression: none
2026-04-12T11:36:22.738 [DEBUG] [Thread-188384] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:36:22.758 [DEBUG] [Thread-188384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:36:22.759 [DEBUG] [Thread-188384] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:36:22.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:36:22.760 [DEBUG] [Thread-188384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:36:22.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:36:22.762 [DEBUG] [Thread-188384] [transport.py] [_log()] userauth is OK
2026-04-12T11:36:22.763 [DEBUG] [Thread-188384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:36:22.763 [DEBUG] [Thread-188384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:36:22.763 [DEBUG] [Thread-188384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:36:22.763 [DEBUG] [Thread-188384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:36:22.785 [INFO] [Thread-188384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:36:22.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:36:23.541 [DEBUG] [Thread-188384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:36:23.542 [DEBUG] [Thread-188384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:36:23.542 [DEBUG] [Thread-188384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:36:23.582 [DEBUG] [Thread-188384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:36:23.582 [DEBUG] [Thread-188384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:36:23.585 [DEBUG] [Thread-188384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:36:23.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:36:23.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:36:23.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:36:23.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:36:23.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:36:23.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:36:23.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:36:23.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:36:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:36:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.399761 -999.00  +11.90  14.25     92  +10.60 1 3 1 3 1   888    0 1.25 -4.24 ----- 18.7 14.2 274.2 20.5 15.5 -5.1 15.2 -5.1 14.3 -4.6 15.1 -4.2
2026-04-12T11:36:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:36:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:36:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.399761
2026-04-12T11:36:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:36:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:36:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:36:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:36:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:36:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:36:05', tmtdew=0.196535, humidity=98.5094, cloud=0.0, wind=21.5798, temperature=11.6528, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:35:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:36:23.612 [DEBUG] [Thread-188384] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:36:23.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:36:23.705 [DEBUG] [Thread-188387] [transport.py] [_log()] starting thread (client mode): 0xb39c6c80
2026-04-12T11:36:23.705 [DEBUG] [Thread-188387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:36:23.719 [DEBUG] [Thread-188387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:36:23.719 [INFO] [Thread-188387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] client lang: <none>
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] server lang: <none>
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] kex follows: False
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:36:23.727 [DEBUG] [Thread-188387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:36:23.728 [DEBUG] [Thread-188387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:36:23.728 [DEBUG] [Thread-188387] [transport.py] [_log()] Compression: none
2026-04-12T11:36:23.728 [DEBUG] [Thread-188387] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:36:23.749 [DEBUG] [Thread-188389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:23.786 [DEBUG] [Thread-188387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:36:23.787 [DEBUG] [Thread-188387] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:36:23.787 [DEBUG] [Thread-188387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:36:23.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:36:23.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:36:23.843 [DEBUG] [Thread-188387] [transport.py] [_log()] userauth is OK
2026-04-12T11:36:23.843 [DEBUG] [Thread-188387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:36:23.844 [DEBUG] [Thread-188387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:36:23.844 [DEBUG] [Thread-188387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:36:23.844 [DEBUG] [Thread-188387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:36:23.862 [INFO] [Thread-188387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:36:23.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:36:23.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:36:24.677 [DEBUG] [Thread-188387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:36:24.678 [DEBUG] [Thread-188387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:36:24.725 [DEBUG] [Thread-188387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:36:24.725 [DEBUG] [Thread-188387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:36:24.735 [DEBUG] [Thread-188387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:36:24.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:36:24.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:36:24.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:36:24.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:36:24.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:36:24.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:36:24.770 [DEBUG] [Thread-188387] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:36:31.384 [DEBUG] [Thread-188390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:38.801 [DEBUG] [Thread-188391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:53.841 [DEBUG] [Thread-188392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:36:54.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:36:54.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:36:54.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:36:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 36, 40), 0.30335, 97.9524, 0.0, 22.1242, 12.4057, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:36:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:36:40
2026-04-12T11:36:56.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:36:56.714 [DEBUG] [Thread-188393] [transport.py] [_log()] starting thread (client mode): 0xa796a920
2026-04-12T11:36:56.714 [DEBUG] [Thread-188393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:36:56.735 [DEBUG] [Thread-188393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:36:56.735 [INFO] [Thread-188393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:36:56.738 [DEBUG] [Thread-188393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] client lang: <none>
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] server lang: <none>
2026-04-12T11:36:56.739 [DEBUG] [Thread-188393] [transport.py] [_log()] kex follows: False
2026-04-12T11:36:56.740 [DEBUG] [Thread-188393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:36:56.740 [DEBUG] [Thread-188393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:36:56.740 [DEBUG] [Thread-188393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:36:56.740 [DEBUG] [Thread-188393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:36:56.740 [DEBUG] [Thread-188393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:36:56.740 [DEBUG] [Thread-188393] [transport.py] [_log()] Compression: none
2026-04-12T11:36:56.740 [DEBUG] [Thread-188393] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:36:56.759 [DEBUG] [Thread-188393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:36:56.759 [DEBUG] [Thread-188393] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:36:56.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:36:56.760 [DEBUG] [Thread-188393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:36:56.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:36:56.763 [DEBUG] [Thread-188393] [transport.py] [_log()] userauth is OK
2026-04-12T11:36:56.763 [DEBUG] [Thread-188393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:36:56.763 [DEBUG] [Thread-188393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:36:56.763 [DEBUG] [Thread-188393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:36:56.763 [DEBUG] [Thread-188393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:36:56.788 [INFO] [Thread-188393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:36:56.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:36:57.531 [DEBUG] [Thread-188393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:36:57.531 [DEBUG] [Thread-188393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:36:57.532 [DEBUG] [Thread-188393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:36:57.572 [DEBUG] [Thread-188393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:36:57.572 [DEBUG] [Thread-188393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:36:57.576 [DEBUG] [Thread-188393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:36:57.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:36:57.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:36:57.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:36:57.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:36:57.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:36:57.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:36:57.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:36:57.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:36:57.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:36:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.400109 -999.00  +11.80  21.43     92  +10.60 1 3 1 3 1   888    0 1.23 -4.81 ----- 20.3 21.4 271.4 25.4 15.4 -5.7 15.2 -5.1 14.3 -6.2 15.1 -4.3
2026-04-12T11:36:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:36:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:36:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.400109
2026-04-12T11:36:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:36:57.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:36:57.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:36:57.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:36:57.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:36:57.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:36:40', tmtdew=0.30335, humidity=97.9524, cloud=0.0, wind=22.1242, temperature=12.4057, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:36:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:36:57.604 [DEBUG] [Thread-188393] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:36:57.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:36:57.713 [DEBUG] [Thread-188396] [transport.py] [_log()] starting thread (client mode): 0xb0fb68f0
2026-04-12T11:36:57.713 [DEBUG] [Thread-188396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:36:57.740 [DEBUG] [Thread-188396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:36:57.740 [INFO] [Thread-188396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:36:57.761 [DEBUG] [Thread-188396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] client lang: <none>
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] server lang: <none>
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] kex follows: False
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:36:57.762 [DEBUG] [Thread-188396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:36:57.763 [DEBUG] [Thread-188396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:36:57.763 [DEBUG] [Thread-188396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:36:57.763 [DEBUG] [Thread-188396] [transport.py] [_log()] Compression: none
2026-04-12T11:36:57.763 [DEBUG] [Thread-188396] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:36:57.833 [DEBUG] [Thread-188396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:36:57.834 [DEBUG] [Thread-188396] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:36:57.834 [DEBUG] [Thread-188396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:36:57.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:36:57.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:36:57.920 [DEBUG] [Thread-188396] [transport.py] [_log()] userauth is OK
2026-04-12T11:36:57.920 [DEBUG] [Thread-188396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:36:57.920 [DEBUG] [Thread-188396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:36:57.920 [DEBUG] [Thread-188396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:36:57.920 [DEBUG] [Thread-188396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:36:57.957 [INFO] [Thread-188396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:36:57.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:36:57.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:36:58.754 [DEBUG] [Thread-188396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:36:58.754 [DEBUG] [Thread-188396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:36:58.818 [DEBUG] [Thread-188396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:36:58.818 [DEBUG] [Thread-188396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:36:58.842 [DEBUG] [Thread-188396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:36:58.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:36:58.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:36:58.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:36:58.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:36:58.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:36:58.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:36:58.940 [DEBUG] [Thread-188396] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:37:06.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:37:06.404 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:37:08.877 [DEBUG] [Thread-188398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:37:23.937 [DEBUG] [Thread-188399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:37:28.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:37:28.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:37:28.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:37:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 37, 16), 0.20165, 98.4762, 0.0, 19.9922, 11.6863, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:37:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:37:16
2026-04-12T11:37:30.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:37:30.760 [DEBUG] [Thread-188400] [transport.py] [_log()] starting thread (client mode): 0xae515e70
2026-04-12T11:37:30.761 [DEBUG] [Thread-188400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:37:30.780 [DEBUG] [Thread-188400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:37:30.780 [INFO] [Thread-188400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] client lang: <none>
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] server lang: <none>
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] kex follows: False
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] Compression: none
2026-04-12T11:37:30.782 [DEBUG] [Thread-188400] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:37:30.791 [DEBUG] [Thread-188400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:37:30.791 [DEBUG] [Thread-188400] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:37:30.792 [DEBUG] [Thread-188400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:37:30.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:37:30.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:37:30.793 [DEBUG] [Thread-188400] [transport.py] [_log()] userauth is OK
2026-04-12T11:37:30.793 [DEBUG] [Thread-188400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:37:30.793 [DEBUG] [Thread-188400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:37:30.793 [DEBUG] [Thread-188400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:37:30.793 [DEBUG] [Thread-188400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:37:30.815 [INFO] [Thread-188400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:37:30.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:37:31.429 [DEBUG] [Thread-188402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:37:31.591 [DEBUG] [Thread-188400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:37:31.592 [DEBUG] [Thread-188400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:37:31.592 [DEBUG] [Thread-188400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:37:31.633 [DEBUG] [Thread-188400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:37:31.633 [DEBUG] [Thread-188400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:37:31.636 [DEBUG] [Thread-188400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:37:31.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:37:31.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:37:31.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:37:31.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:37:31.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:37:31.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:37:31.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:37:31.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:37:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:37:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.400456 -999.00  +11.80  15.11     91  +10.50 1 3 1 3 1   888    0 1.22 -5.26 ----- 17.1 15.1 277.8 23.6 15.4 -5.0 15.1 -5.0 14.2 -6.4 15.1 -4.3
2026-04-12T11:37:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:37:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:37:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.400456
2026-04-12T11:37:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:37:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:37:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:37:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:37:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:37:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:37:16', tmtdew=0.20165, humidity=98.4762, cloud=0.0, wind=19.9922, temperature=11.6863, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:36:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:37:31.663 [DEBUG] [Thread-188400] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:37:31.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:37:31.766 [DEBUG] [Thread-188404] [transport.py] [_log()] starting thread (client mode): 0xae514160
2026-04-12T11:37:31.766 [DEBUG] [Thread-188404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:37:31.782 [DEBUG] [Thread-188404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:37:31.782 [INFO] [Thread-188404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] client lang: <none>
2026-04-12T11:37:31.790 [DEBUG] [Thread-188404] [transport.py] [_log()] server lang: <none>
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] kex follows: False
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] Compression: none
2026-04-12T11:37:31.791 [DEBUG] [Thread-188404] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:37:31.847 [DEBUG] [Thread-188404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:37:31.848 [DEBUG] [Thread-188404] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:37:31.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:37:31.849 [DEBUG] [Thread-188404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:37:31.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:37:31.903 [DEBUG] [Thread-188404] [transport.py] [_log()] userauth is OK
2026-04-12T11:37:31.904 [DEBUG] [Thread-188404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:37:31.904 [DEBUG] [Thread-188404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:37:31.904 [DEBUG] [Thread-188404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:37:31.904 [DEBUG] [Thread-188404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:37:31.922 [INFO] [Thread-188404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:37:31.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:37:31.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:37:32.748 [DEBUG] [Thread-188404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:37:32.748 [DEBUG] [Thread-188404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:37:32.796 [DEBUG] [Thread-188404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:37:32.796 [DEBUG] [Thread-188404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:37:32.806 [DEBUG] [Thread-188404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:37:32.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:37:32.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:37:32.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:37:32.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:37:32.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:37:32.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:37:32.842 [DEBUG] [Thread-188404] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:37:38.971 [DEBUG] [Thread-188406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:37:54.026 [DEBUG] [Thread-188407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:38:02.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:38:02.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:38:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:38:04.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 37, 52), 0.29841, 97.9855, 0.0, 14.8565, 12.5383, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:38:04.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:37:52
2026-04-12T11:38:04.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:38:04.725 [DEBUG] [Thread-188408] [transport.py] [_log()] starting thread (client mode): 0xa796b250
2026-04-12T11:38:04.725 [DEBUG] [Thread-188408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:38:04.745 [DEBUG] [Thread-188408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:38:04.745 [INFO] [Thread-188408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:38:04.749 [DEBUG] [Thread-188408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] client lang: <none>
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] server lang: <none>
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] kex follows: False
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] Compression: none
2026-04-12T11:38:04.750 [DEBUG] [Thread-188408] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:38:04.771 [DEBUG] [Thread-188408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:38:04.772 [DEBUG] [Thread-188408] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:38:04.773 [DEBUG] [Thread-188408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:38:04.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:38:04.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:38:04.776 [DEBUG] [Thread-188408] [transport.py] [_log()] userauth is OK
2026-04-12T11:38:04.776 [DEBUG] [Thread-188408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:38:04.776 [DEBUG] [Thread-188408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:38:04.776 [DEBUG] [Thread-188408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:38:04.776 [DEBUG] [Thread-188408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:38:04.806 [INFO] [Thread-188408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:38:04.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:38:05.606 [DEBUG] [Thread-188408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:38:05.607 [DEBUG] [Thread-188408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:38:05.607 [DEBUG] [Thread-188408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:38:05.648 [DEBUG] [Thread-188408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:38:05.648 [DEBUG] [Thread-188408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:38:05.649 [DEBUG] [Thread-188408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:38:05.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:38:05.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:38:05.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:38:05.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:38:05.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:38:05.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:38:05.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:38:05.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:38:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:38:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.400803 -999.00  +11.80  22.50     91  +10.50 1 3 1 3 1   888    0 1.21 -5.53 ----- 24.1 22.5 274.4 26.3 15.4 -5.5 15.1 -4.8 14.4 -5.0 15.0 -4.2
2026-04-12T11:38:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:38:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:38:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.400803
2026-04-12T11:38:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:38:05.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:38:05.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:38:05.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:38:05.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:38:05.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:37:52', tmtdew=0.29841, humidity=97.9855, cloud=0.0, wind=14.8565, temperature=12.5383, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:37:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:38:05.669 [DEBUG] [Thread-188408] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:38:05.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:38:05.753 [DEBUG] [Thread-188411] [transport.py] [_log()] starting thread (client mode): 0xb0fb7f10
2026-04-12T11:38:05.754 [DEBUG] [Thread-188411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:38:05.769 [DEBUG] [Thread-188411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:38:05.769 [INFO] [Thread-188411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] client lang: <none>
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] server lang: <none>
2026-04-12T11:38:05.777 [DEBUG] [Thread-188411] [transport.py] [_log()] kex follows: False
2026-04-12T11:38:05.778 [DEBUG] [Thread-188411] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:38:05.778 [DEBUG] [Thread-188411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:38:05.778 [DEBUG] [Thread-188411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:38:05.778 [DEBUG] [Thread-188411] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:38:05.778 [DEBUG] [Thread-188411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:38:05.778 [DEBUG] [Thread-188411] [transport.py] [_log()] Compression: none
2026-04-12T11:38:05.778 [DEBUG] [Thread-188411] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:38:05.836 [DEBUG] [Thread-188411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:38:05.836 [DEBUG] [Thread-188411] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:38:05.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:38:05.837 [DEBUG] [Thread-188411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:38:05.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:38:05.894 [DEBUG] [Thread-188411] [transport.py] [_log()] userauth is OK
2026-04-12T11:38:05.895 [DEBUG] [Thread-188411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:38:05.895 [DEBUG] [Thread-188411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:38:05.895 [DEBUG] [Thread-188411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:38:05.895 [DEBUG] [Thread-188411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:38:05.915 [INFO] [Thread-188411] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:38:05.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:38:05.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:38:06.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:38:06.560 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:38:06.775 [DEBUG] [Thread-188411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:38:06.775 [DEBUG] [Thread-188411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:38:06.823 [DEBUG] [Thread-188411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:38:06.823 [DEBUG] [Thread-188411] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:38:06.833 [DEBUG] [Thread-188411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:38:06.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:38:06.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:38:06.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:38:06.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:38:06.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:38:06.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:38:06.869 [DEBUG] [Thread-188411] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:38:09.064 [DEBUG] [Thread-188413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:38:24.116 [DEBUG] [Thread-188414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:38:31.475 [DEBUG] [Thread-188415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:38:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:38:36.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:38:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:38:38.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 38, 27), 0.2069, 98.443, 0.0, 19.1801, 11.7526, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:38:38.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:38:27
2026-04-12T11:38:38.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:38:38.670 [DEBUG] [Thread-188416] [transport.py] [_log()] starting thread (client mode): 0xb0fb5150
2026-04-12T11:38:38.670 [DEBUG] [Thread-188416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:38:38.691 [DEBUG] [Thread-188416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:38:38.691 [INFO] [Thread-188416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:38:38.694 [DEBUG] [Thread-188416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:38:38.694 [DEBUG] [Thread-188416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:38:38.694 [DEBUG] [Thread-188416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:38:38.694 [DEBUG] [Thread-188416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:38.694 [DEBUG] [Thread-188416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:38.694 [DEBUG] [Thread-188416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] client lang: <none>
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] server lang: <none>
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] kex follows: False
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] Compression: none
2026-04-12T11:38:38.695 [DEBUG] [Thread-188416] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:38:38.713 [DEBUG] [Thread-188416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:38:38.713 [DEBUG] [Thread-188416] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:38:38.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:38:38.714 [DEBUG] [Thread-188416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:38:38.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:38:38.717 [DEBUG] [Thread-188416] [transport.py] [_log()] userauth is OK
2026-04-12T11:38:38.717 [DEBUG] [Thread-188416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:38:38.717 [DEBUG] [Thread-188416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:38:38.717 [DEBUG] [Thread-188416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:38:38.717 [DEBUG] [Thread-188416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:38:38.741 [INFO] [Thread-188416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:38:38.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:38:39.155 [DEBUG] [Thread-188418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:38:39.507 [DEBUG] [Thread-188416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:38:39.507 [DEBUG] [Thread-188416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:38:39.507 [DEBUG] [Thread-188416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:38:39.548 [DEBUG] [Thread-188416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:38:39.548 [DEBUG] [Thread-188416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:38:39.552 [DEBUG] [Thread-188416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:38:39.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:38:39.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:38:39.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:38:39.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:38:39.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:38:39.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:38:39.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:38:39.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:38:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:38:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.401151 -999.00  +11.70  20.62     91  +10.40 1 3 1 3 1   888    0 1.22 -5.51 ----- 17.7 20.6 274.2 28.8 15.3 -6.4 15.1 -5.3 14.2 -6.7 14.9 -5.3
2026-04-12T11:38:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:38:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:38:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.401151
2026-04-12T11:38:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:38:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:38:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:38:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:38:39.577 [DEBUG] [Thread-188416] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:38:39.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:38:39.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:38:27', tmtdew=0.2069, humidity=98.443, cloud=0.0, wind=19.1801, temperature=11.7526, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:37:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:38:39.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:38:39.679 [DEBUG] [Thread-188420] [transport.py] [_log()] starting thread (client mode): 0xb0fb6a40
2026-04-12T11:38:39.679 [DEBUG] [Thread-188420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:38:39.702 [DEBUG] [Thread-188420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:38:39.703 [INFO] [Thread-188420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:38:39.710 [DEBUG] [Thread-188420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:38:39.712 [DEBUG] [Thread-188420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:38:39.712 [DEBUG] [Thread-188420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:38:39.712 [DEBUG] [Thread-188420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:39.712 [DEBUG] [Thread-188420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:38:39.712 [DEBUG] [Thread-188420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:39.712 [DEBUG] [Thread-188420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:38:39.712 [DEBUG] [Thread-188420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] client lang: <none>
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] server lang: <none>
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] kex follows: False
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] Compression: none
2026-04-12T11:38:39.713 [DEBUG] [Thread-188420] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:38:39.775 [DEBUG] [Thread-188420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:38:39.775 [DEBUG] [Thread-188420] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:38:39.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:38:39.776 [DEBUG] [Thread-188420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:38:39.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:38:39.850 [DEBUG] [Thread-188420] [transport.py] [_log()] userauth is OK
2026-04-12T11:38:39.850 [DEBUG] [Thread-188420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:38:39.850 [DEBUG] [Thread-188420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:38:39.850 [DEBUG] [Thread-188420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:38:39.850 [DEBUG] [Thread-188420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:38:39.878 [INFO] [Thread-188420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:38:39.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:38:39.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:38:40.708 [DEBUG] [Thread-188420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:38:40.709 [DEBUG] [Thread-188420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:38:40.771 [DEBUG] [Thread-188420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:38:40.771 [DEBUG] [Thread-188420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:38:40.796 [DEBUG] [Thread-188420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:38:40.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:38:40.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:38:40.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:38:40.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:38:40.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:38:40.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:38:40.893 [DEBUG] [Thread-188420] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:38:54.193 [DEBUG] [Thread-188422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:39:06.702 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:39:06.703 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:39:09.246 [DEBUG] [Thread-188423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:39:10.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:39:10.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:39:10.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:39:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 39, 3), 0.217115, 98.3767, 0.0, 18.9508, 11.7028, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:39:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:39:03
2026-04-12T11:39:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:39:12.825 [DEBUG] [Thread-188424] [transport.py] [_log()] starting thread (client mode): 0xae516ce0
2026-04-12T11:39:12.825 [DEBUG] [Thread-188424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:39:12.844 [DEBUG] [Thread-188424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:39:12.844 [INFO] [Thread-188424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] client lang: <none>
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] server lang: <none>
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] kex follows: False
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:39:12.846 [DEBUG] [Thread-188424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:39:12.847 [DEBUG] [Thread-188424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:39:12.847 [DEBUG] [Thread-188424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:39:12.847 [DEBUG] [Thread-188424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:39:12.847 [DEBUG] [Thread-188424] [transport.py] [_log()] Compression: none
2026-04-12T11:39:12.847 [DEBUG] [Thread-188424] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:39:12.861 [DEBUG] [Thread-188424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:39:12.862 [DEBUG] [Thread-188424] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:39:12.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:39:12.863 [DEBUG] [Thread-188424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:39:12.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:39:12.866 [DEBUG] [Thread-188424] [transport.py] [_log()] userauth is OK
2026-04-12T11:39:12.866 [DEBUG] [Thread-188424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:39:12.866 [DEBUG] [Thread-188424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:39:12.866 [DEBUG] [Thread-188424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:39:12.866 [DEBUG] [Thread-188424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:39:12.891 [INFO] [Thread-188424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:39:12.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:39:13.632 [DEBUG] [Thread-188424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:39:13.633 [DEBUG] [Thread-188424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:39:13.633 [DEBUG] [Thread-188424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:39:13.673 [DEBUG] [Thread-188424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:39:13.673 [DEBUG] [Thread-188424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:39:13.677 [DEBUG] [Thread-188424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:39:13.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:39:13.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:39:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:39:13.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:39:13.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:39:13.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:39:13.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:39:13.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:39:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:39:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.401498 -999.00  +11.80  20.40     91  +10.50 1 3 1 3 1   888    0 1.22 -5.42 ----- 16.3 20.4 278.4 22.8 15.4 -5.9 15.1 -5.2 14.2 -4.6 15.0 -4.7
2026-04-12T11:39:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:39:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:39:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.401498
2026-04-12T11:39:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:39:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:39:13.704 [DEBUG] [Thread-188424] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:39:13.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:39:13.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:39:13.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:39:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:39:03', tmtdew=0.217115, humidity=98.3767, cloud=0.0, wind=18.9508, temperature=11.7028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:38:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:39:13.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:39:13.801 [DEBUG] [Thread-188427] [transport.py] [_log()] starting thread (client mode): 0xae5160b0
2026-04-12T11:39:13.801 [DEBUG] [Thread-188427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:39:13.816 [DEBUG] [Thread-188427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:39:13.816 [INFO] [Thread-188427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] client lang: <none>
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] server lang: <none>
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] kex follows: False
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:39:13.824 [DEBUG] [Thread-188427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:39:13.825 [DEBUG] [Thread-188427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:39:13.825 [DEBUG] [Thread-188427] [transport.py] [_log()] Compression: none
2026-04-12T11:39:13.825 [DEBUG] [Thread-188427] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:39:13.882 [DEBUG] [Thread-188427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:39:13.883 [DEBUG] [Thread-188427] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:39:13.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:39:13.884 [DEBUG] [Thread-188427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:39:13.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:39:13.939 [DEBUG] [Thread-188427] [transport.py] [_log()] userauth is OK
2026-04-12T11:39:13.939 [DEBUG] [Thread-188427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:39:13.940 [DEBUG] [Thread-188427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:39:13.940 [DEBUG] [Thread-188427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:39:13.940 [DEBUG] [Thread-188427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:39:13.959 [INFO] [Thread-188427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:39:13.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:39:13.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:39:14.795 [DEBUG] [Thread-188427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:39:14.795 [DEBUG] [Thread-188427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:39:14.846 [DEBUG] [Thread-188427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:39:14.846 [DEBUG] [Thread-188427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:39:14.856 [DEBUG] [Thread-188427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:39:14.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:39:14.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:39: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') -> 00000000
2026-04-12T11:39:14.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:39:14.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:39:14.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:39:14.894 [DEBUG] [Thread-188427] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:39:24.287 [DEBUG] [Thread-188429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:39:31.529 [DEBUG] [Thread-188430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:39:39.353 [DEBUG] [Thread-188431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:39:44.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:39:44.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:39:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:39:46.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 39, 39), 0.32925, 97.7866, 0.0, 20.3249, 12.5052, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:39:46.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:39:39
2026-04-12T11:39:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:39:46.731 [DEBUG] [Thread-188432] [transport.py] [_log()] starting thread (client mode): 0xae515a80
2026-04-12T11:39:46.731 [DEBUG] [Thread-188432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:39:46.751 [DEBUG] [Thread-188432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:39:46.751 [INFO] [Thread-188432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] client lang: <none>
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] server lang: <none>
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] kex follows: False
2026-04-12T11:39:46.755 [DEBUG] [Thread-188432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:39:46.756 [DEBUG] [Thread-188432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:39:46.756 [DEBUG] [Thread-188432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:39:46.756 [DEBUG] [Thread-188432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:39:46.756 [DEBUG] [Thread-188432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:39:46.756 [DEBUG] [Thread-188432] [transport.py] [_log()] Compression: none
2026-04-12T11:39:46.756 [DEBUG] [Thread-188432] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:39:46.772 [DEBUG] [Thread-188432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:39:46.773 [DEBUG] [Thread-188432] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:39:46.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:39:46.774 [DEBUG] [Thread-188432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:39:46.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:39:46.816 [DEBUG] [Thread-188432] [transport.py] [_log()] userauth is OK
2026-04-12T11:39:46.817 [DEBUG] [Thread-188432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:39:46.817 [DEBUG] [Thread-188432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:39:46.817 [DEBUG] [Thread-188432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:39:46.817 [DEBUG] [Thread-188432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:39:46.840 [INFO] [Thread-188432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:39:46.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:39:47.614 [DEBUG] [Thread-188432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:39:47.614 [DEBUG] [Thread-188432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:39:47.614 [DEBUG] [Thread-188432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:39:47.655 [DEBUG] [Thread-188432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:39:47.655 [DEBUG] [Thread-188432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:39:47.657 [DEBUG] [Thread-188432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:39:47.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:39:47.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:39:47.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:39:47.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:39:47.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:39:47.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:39:47.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:39:47.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:39:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:39:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.402192 -999.00  +12.00  13.06     92  +10.80 1 3 1 3 1   888    0 1.18 -6.38 ----- 16.8 13.1 281.6 18.2 15.5 -6.2 15.1 -5.3 14.3 -4.6 15.1 -4.6
2026-04-12T11:39:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:39:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:39:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.402192
2026-04-12T11:39:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:39:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:39:47.685 [DEBUG] [Thread-188432] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:39:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:39:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:39:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:39:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:39:39', tmtdew=0.32925, humidity=97.7866, cloud=0.0, wind=20.3249, temperature=12.5052, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:39:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:39:47.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:39:47.777 [DEBUG] [Thread-188435] [transport.py] [_log()] starting thread (client mode): 0xb0fb40a0
2026-04-12T11:39:47.777 [DEBUG] [Thread-188435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:39:47.792 [DEBUG] [Thread-188435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:39:47.792 [INFO] [Thread-188435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:39:47.799 [DEBUG] [Thread-188435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:39:47.799 [DEBUG] [Thread-188435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:39:47.799 [DEBUG] [Thread-188435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:39:47.799 [DEBUG] [Thread-188435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] client lang: <none>
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] server lang: <none>
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] kex follows: False
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:39:47.800 [DEBUG] [Thread-188435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:39:47.801 [DEBUG] [Thread-188435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:39:47.801 [DEBUG] [Thread-188435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:39:47.801 [DEBUG] [Thread-188435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:39:47.801 [DEBUG] [Thread-188435] [transport.py] [_log()] Compression: none
2026-04-12T11:39:47.801 [DEBUG] [Thread-188435] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:39:47.862 [DEBUG] [Thread-188435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:39:47.863 [DEBUG] [Thread-188435] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:39:47.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:39:47.864 [DEBUG] [Thread-188435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:39:47.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:39:47.918 [DEBUG] [Thread-188435] [transport.py] [_log()] userauth is OK
2026-04-12T11:39:47.918 [DEBUG] [Thread-188435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:39:47.918 [DEBUG] [Thread-188435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:39:47.918 [DEBUG] [Thread-188435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:39:47.918 [DEBUG] [Thread-188435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:39:47.940 [INFO] [Thread-188435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:39:47.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:39:47.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:39:48.789 [DEBUG] [Thread-188435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:39:48.789 [DEBUG] [Thread-188435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:39:48.836 [DEBUG] [Thread-188435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:39:48.837 [DEBUG] [Thread-188435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:39:48.845 [DEBUG] [Thread-188435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:39:48.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:39:48.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:39:48.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:39:48.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:39:48.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:39:48.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:39:48.879 [DEBUG] [Thread-188435] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:39:54.388 [DEBUG] [Thread-188437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:06.849 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:06.851 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:09.445 [DEBUG] [Thread-188438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:40:18.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:40:18.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:40:20.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 39, 39), 0.32925, 97.7866, 0.0, 20.3249, 12.5052, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:40:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:39:39
2026-04-12T11:40:20.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:40:20.695 [DEBUG] [Thread-188439] [transport.py] [_log()] starting thread (client mode): 0xb0fb4100
2026-04-12T11:40:20.696 [DEBUG] [Thread-188439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:40:20.718 [DEBUG] [Thread-188439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:40:20.718 [INFO] [Thread-188439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:40:20.722 [DEBUG] [Thread-188439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:40:20.722 [DEBUG] [Thread-188439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:40:20.722 [DEBUG] [Thread-188439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] client lang: <none>
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] server lang: <none>
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] kex follows: False
2026-04-12T11:40:20.723 [DEBUG] [Thread-188439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:40:20.724 [DEBUG] [Thread-188439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:40:20.724 [DEBUG] [Thread-188439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:40:20.724 [DEBUG] [Thread-188439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:40:20.724 [DEBUG] [Thread-188439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:40:20.724 [DEBUG] [Thread-188439] [transport.py] [_log()] Compression: none
2026-04-12T11:40:20.724 [DEBUG] [Thread-188439] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:40:20.743 [DEBUG] [Thread-188439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:40:20.743 [DEBUG] [Thread-188439] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:40:20.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:40:20.744 [DEBUG] [Thread-188439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:40:20.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:40:20.785 [DEBUG] [Thread-188439] [transport.py] [_log()] userauth is OK
2026-04-12T11:40:20.785 [DEBUG] [Thread-188439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:40:20.786 [DEBUG] [Thread-188439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:40:20.786 [DEBUG] [Thread-188439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:40:20.786 [DEBUG] [Thread-188439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:40:20.818 [INFO] [Thread-188439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:40:20.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:40:22.272 [DEBUG] [Thread-188439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:40:22.272 [DEBUG] [Thread-188439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:40:22.273 [DEBUG] [Thread-188439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:40:22.313 [DEBUG] [Thread-188439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:40:22.314 [DEBUG] [Thread-188439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:40:22.317 [DEBUG] [Thread-188439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:40:22.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:40:22.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:40:22.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:40:22.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:40:22.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:40:22.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:40:22.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:40:22.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:40:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:40:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.402886 -999.00  +11.90  19.71     91  +10.60 1 3 1 3 1   888    0 1.16 -6.51 ----- 21.3 19.7 276.2 23.5 15.4 -6.9 15.1 -6.2 14.4 -6.3 15.1 -5.4
2026-04-12T11:40:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:40:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:40:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.402886
2026-04-12T11:40:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:40:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:40:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:40:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:40:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:40:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:39:39', tmtdew=0.32925, humidity=97.7866, cloud=0.0, wind=20.3249, temperature=12.5052, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:40:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:40:22.344 [DEBUG] [Thread-188439] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:40:22.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:40:22.436 [DEBUG] [Thread-188442] [transport.py] [_log()] starting thread (client mode): 0xae516aa0
2026-04-12T11:40:22.437 [DEBUG] [Thread-188442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:40:22.451 [DEBUG] [Thread-188442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:40:22.451 [INFO] [Thread-188442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:40:22.459 [DEBUG] [Thread-188442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] client lang: <none>
2026-04-12T11:40:22.460 [DEBUG] [Thread-188442] [transport.py] [_log()] server lang: <none>
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] kex follows: False
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] Compression: none
2026-04-12T11:40:22.461 [DEBUG] [Thread-188442] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:40:22.519 [DEBUG] [Thread-188442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:40:22.519 [DEBUG] [Thread-188442] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:40:22.520 [DEBUG] [Thread-188442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:40:22.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:40:22.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:40:22.578 [DEBUG] [Thread-188442] [transport.py] [_log()] userauth is OK
2026-04-12T11:40:22.578 [DEBUG] [Thread-188442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:40:22.579 [DEBUG] [Thread-188442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:40:22.579 [DEBUG] [Thread-188442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:40:22.579 [DEBUG] [Thread-188442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:40:22.597 [INFO] [Thread-188442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:40:22.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:40:22.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:40:23.417 [DEBUG] [Thread-188442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:40:23.417 [DEBUG] [Thread-188442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:40:23.465 [DEBUG] [Thread-188442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:40:23.465 [DEBUG] [Thread-188442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:40:23.474 [DEBUG] [Thread-188442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:40:23.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:40:23.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:40:23.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:40:23.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:40:23.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:40:23.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:40:23.511 [DEBUG] [Thread-188442] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:40:24.484 [DEBUG] [Thread-188444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:31.573 [DEBUG] [Thread-188445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:39.543 [DEBUG] [Thread-188446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:40:53.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:40:53.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:40:54.581 [DEBUG] [Thread-188447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:40:54.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 40, 14), 0.206975, 98.443, 0.0, 19.9915, 11.7023, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:40:54.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:40:14
2026-04-12T11:40:55.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:40:55.480 [DEBUG] [Thread-188448] [transport.py] [_log()] starting thread (client mode): 0xae5140a0
2026-04-12T11:40:55.480 [DEBUG] [Thread-188448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:40:55.495 [DEBUG] [Thread-188448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:40:55.495 [INFO] [Thread-188448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:40:55.497 [DEBUG] [Thread-188448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] client lang: <none>
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] server lang: <none>
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] kex follows: False
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] Compression: none
2026-04-12T11:40:55.498 [DEBUG] [Thread-188448] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:40:55.511 [DEBUG] [Thread-188448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:40:55.512 [DEBUG] [Thread-188448] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:40:55.512 [DEBUG] [Thread-188448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:40:55.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:40:55.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:40:55.514 [DEBUG] [Thread-188448] [transport.py] [_log()] userauth is OK
2026-04-12T11:40:55.514 [DEBUG] [Thread-188448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:40:55.514 [DEBUG] [Thread-188448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:40:55.514 [DEBUG] [Thread-188448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:40:55.514 [DEBUG] [Thread-188448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:40:55.528 [INFO] [Thread-188448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:40:55.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:40:56.125 [DEBUG] [Thread-188448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:40:56.126 [DEBUG] [Thread-188448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:40:56.126 [DEBUG] [Thread-188448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:40:56.167 [DEBUG] [Thread-188448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:40:56.167 [DEBUG] [Thread-188448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:40:56.176 [DEBUG] [Thread-188448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:40:56.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:40:56.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:40:56.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:40:56.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:40:56.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:40:56.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:40:56.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:40:56.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:40:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:40:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.403234 -999.00  +11.90  19.56     91  +10.50 1 3 1 3 1   888    0 1.16 -5.96 ----- 20.5 19.6 272.2 24.7 15.4 -7.1 15.1 -5.9 14.3 -6.6 15.0 -5.3
2026-04-12T11:40:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:40:56.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:40:56.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.403234
2026-04-12T11:40:56.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:40:56.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:40:56.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:40:56.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:40:56.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:40:56.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:40:14', tmtdew=0.206975, humidity=98.443, cloud=0.0, wind=19.9915, temperature=11.7023, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:40:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:40:56.194 [DEBUG] [Thread-188448] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:40:56.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:40:56.293 [DEBUG] [Thread-188451] [transport.py] [_log()] starting thread (client mode): 0xae5151e0
2026-04-12T11:40:56.293 [DEBUG] [Thread-188451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:40:56.308 [DEBUG] [Thread-188451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:40:56.308 [INFO] [Thread-188451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] client lang: <none>
2026-04-12T11:40:56.316 [DEBUG] [Thread-188451] [transport.py] [_log()] server lang: <none>
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] kex follows: False
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] Compression: none
2026-04-12T11:40:56.317 [DEBUG] [Thread-188451] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:40:56.375 [DEBUG] [Thread-188451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:40:56.376 [DEBUG] [Thread-188451] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:40:56.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:40:56.377 [DEBUG] [Thread-188451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:40:56.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:40:56.434 [DEBUG] [Thread-188451] [transport.py] [_log()] userauth is OK
2026-04-12T11:40:56.434 [DEBUG] [Thread-188451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:40:56.435 [DEBUG] [Thread-188451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:40:56.435 [DEBUG] [Thread-188451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:40:56.435 [DEBUG] [Thread-188451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:40:56.453 [INFO] [Thread-188451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:40:56.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:40:56.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:40:57.267 [DEBUG] [Thread-188451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:40:57.268 [DEBUG] [Thread-188451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:40:57.315 [DEBUG] [Thread-188451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:40:57.315 [DEBUG] [Thread-188451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:40:57.325 [DEBUG] [Thread-188451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:40:57.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:40:57.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:40:57.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:40:57.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:40:57.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:40:57.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:40:57.360 [DEBUG] [Thread-188451] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:41:06.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:41:07.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:41:09.618 [DEBUG] [Thread-188453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:41:24.672 [DEBUG] [Thread-188454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:41:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:41:27.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:41:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:41:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 40, 49), 0.3449, 97.6871, 0.0, 18.5609, 12.6046, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:41:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:40:49
2026-04-12T11:41:29.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:41:29.245 [DEBUG] [Thread-188455] [transport.py] [_log()] starting thread (client mode): 0xb0fb4610
2026-04-12T11:41:29.245 [DEBUG] [Thread-188455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:41:29.265 [DEBUG] [Thread-188455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:41:29.265 [INFO] [Thread-188455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] client lang: <none>
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] server lang: <none>
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] kex follows: False
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] Compression: none
2026-04-12T11:41:29.267 [DEBUG] [Thread-188455] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:41:29.277 [DEBUG] [Thread-188455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:41:29.277 [DEBUG] [Thread-188455] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:41:29.278 [DEBUG] [Thread-188455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:41:29.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:41:29.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:41:29.280 [DEBUG] [Thread-188455] [transport.py] [_log()] userauth is OK
2026-04-12T11:41:29.280 [DEBUG] [Thread-188455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:41:29.280 [DEBUG] [Thread-188455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:41:29.280 [DEBUG] [Thread-188455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:41:29.280 [DEBUG] [Thread-188455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:41:29.319 [INFO] [Thread-188455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:41:29.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:41:29.858 [DEBUG] [Thread-188455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:41:29.859 [DEBUG] [Thread-188455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:41:29.859 [DEBUG] [Thread-188455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:41:29.900 [DEBUG] [Thread-188455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:41:29.900 [DEBUG] [Thread-188455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:41:29.903 [DEBUG] [Thread-188455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:41:29.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:41:29.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:41:29.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:41:29.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:41:29.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:41:29.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:41:29.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:41:29.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:41:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:41:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.403581 -999.00  +11.70  23.34     91  +10.40 1 3 1 3 1   888    0 1.16 -6.08 ----- 17.6 23.3 277.8 25.7 15.3 -6.8 15.0 -5.0 14.2 -6.5 14.9 -5.0
2026-04-12T11:41:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:41:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:41:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.403581
2026-04-12T11:41:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:41:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:41:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:41:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:41:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:41:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:40:49', tmtdew=0.3449, humidity=97.6871, cloud=0.0, wind=18.5609, temperature=12.6046, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:41:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:41:29.932 [DEBUG] [Thread-188455] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:41:30.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:41:30.026 [DEBUG] [Thread-188458] [transport.py] [_log()] starting thread (client mode): 0xb0fb4700
2026-04-12T11:41:30.026 [DEBUG] [Thread-188458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:41:30.040 [DEBUG] [Thread-188458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:41:30.041 [INFO] [Thread-188458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:41:30.048 [DEBUG] [Thread-188458] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:41:30.049 [DEBUG] [Thread-188458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:41:30.049 [DEBUG] [Thread-188458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:41:30.049 [DEBUG] [Thread-188458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:41:30.049 [DEBUG] [Thread-188458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:41:30.049 [DEBUG] [Thread-188458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:41:30.049 [DEBUG] [Thread-188458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:41:30.049 [DEBUG] [Thread-188458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] client lang: <none>
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] server lang: <none>
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] kex follows: False
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:41:30.050 [DEBUG] [Thread-188458] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:41:30.051 [DEBUG] [Thread-188458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:41:30.051 [DEBUG] [Thread-188458] [transport.py] [_log()] Compression: none
2026-04-12T11:41:30.051 [DEBUG] [Thread-188458] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:41:30.112 [DEBUG] [Thread-188458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:41:30.113 [DEBUG] [Thread-188458] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:41:30.113 [DEBUG] [Thread-188458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:41:30.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:41:30.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:41:30.170 [DEBUG] [Thread-188458] [transport.py] [_log()] userauth is OK
2026-04-12T11:41:30.170 [DEBUG] [Thread-188458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:41:30.171 [DEBUG] [Thread-188458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:41:30.171 [DEBUG] [Thread-188458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:41:30.171 [DEBUG] [Thread-188458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:41:30.189 [INFO] [Thread-188458] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:41:30.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:41:30.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:41:31.036 [DEBUG] [Thread-188458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:41:31.036 [DEBUG] [Thread-188458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:41:31.084 [DEBUG] [Thread-188458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:41:31.084 [DEBUG] [Thread-188458] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:41:31.093 [DEBUG] [Thread-188458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:41:31.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:41:31.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:41:31.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:41:31.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:41:31.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:41:31.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:41:31.130 [DEBUG] [Thread-188458] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:41:31.617 [DEBUG] [Thread-188460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:41:39.709 [DEBUG] [Thread-188461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:41:54.761 [DEBUG] [Thread-188462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:42:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:42:01.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:42:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:42:02.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 41, 25), 0.18013, 98.7934, 0.0, 17.8387, 11.6857, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:42:02.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:41:25
2026-04-12T11:42:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:42:02.998 [DEBUG] [Thread-188463] [transport.py] [_log()] starting thread (client mode): 0xae517c70
2026-04-12T11:42:02.998 [DEBUG] [Thread-188463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:42:03.015 [DEBUG] [Thread-188463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:42:03.015 [INFO] [Thread-188463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] client lang: <none>
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] server lang: <none>
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] kex follows: False
2026-04-12T11:42:03.016 [DEBUG] [Thread-188463] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:42:03.017 [DEBUG] [Thread-188463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:42:03.017 [DEBUG] [Thread-188463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:42:03.017 [DEBUG] [Thread-188463] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:42:03.017 [DEBUG] [Thread-188463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:42:03.017 [DEBUG] [Thread-188463] [transport.py] [_log()] Compression: none
2026-04-12T11:42:03.017 [DEBUG] [Thread-188463] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:42:03.028 [DEBUG] [Thread-188463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:42:03.029 [DEBUG] [Thread-188463] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:42:03.029 [DEBUG] [Thread-188463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:42:03.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:42:03.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:42:03.031 [DEBUG] [Thread-188463] [transport.py] [_log()] userauth is OK
2026-04-12T11:42:03.031 [DEBUG] [Thread-188463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:42:03.031 [DEBUG] [Thread-188463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:42:03.031 [DEBUG] [Thread-188463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:42:03.031 [DEBUG] [Thread-188463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:42:03.050 [INFO] [Thread-188463] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:42:03.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:42:03.664 [DEBUG] [Thread-188463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:42:03.664 [DEBUG] [Thread-188463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:42:03.665 [DEBUG] [Thread-188463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:42:03.705 [DEBUG] [Thread-188463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:42:03.705 [DEBUG] [Thread-188463] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:42:03.707 [DEBUG] [Thread-188463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:42:03.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:42:03.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:42:03.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:42:03.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:42:03.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:42:03.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:42:03.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.403928 -999.00  +11.80  17.94     91  +10.50 1 3 1 3 1   888    0 1.17 -5.90 ----- 22.2 17.9 280.7 21.6 15.4 -5.6 15.0 -5.2 14.2 -3.8 14.9 -4.4
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.403928
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:42:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:42:03.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:42:03.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:41:25', tmtdew=0.18013, humidity=98.7934, cloud=0.0, wind=17.8387, temperature=11.6857, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:41:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:42:03.720 [DEBUG] [Thread-188463] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:42:03.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:42:03.802 [DEBUG] [Thread-188466] [transport.py] [_log()] starting thread (client mode): 0xae516f50
2026-04-12T11:42:03.802 [DEBUG] [Thread-188466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:42:03.818 [DEBUG] [Thread-188466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:42:03.818 [INFO] [Thread-188466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] client lang: <none>
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] server lang: <none>
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] kex follows: False
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:42:03.826 [DEBUG] [Thread-188466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:42:03.827 [DEBUG] [Thread-188466] [transport.py] [_log()] Compression: none
2026-04-12T11:42:03.827 [DEBUG] [Thread-188466] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:42:03.886 [DEBUG] [Thread-188466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:42:03.887 [DEBUG] [Thread-188466] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:42:03.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:42:03.888 [DEBUG] [Thread-188466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:42:03.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:42:03.942 [DEBUG] [Thread-188466] [transport.py] [_log()] userauth is OK
2026-04-12T11:42:03.942 [DEBUG] [Thread-188466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:42:03.942 [DEBUG] [Thread-188466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:42:03.943 [DEBUG] [Thread-188466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:42:03.943 [DEBUG] [Thread-188466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:42:03.961 [INFO] [Thread-188466] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:42:03.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:42:03.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:42:04.854 [DEBUG] [Thread-188466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:42:04.854 [DEBUG] [Thread-188466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:42:04.902 [DEBUG] [Thread-188466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:42:04.902 [DEBUG] [Thread-188466] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:42:04.912 [DEBUG] [Thread-188466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:42:04.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:42:04.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:42:04.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:42:04.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:42:04.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:42:04.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:42:04.949 [DEBUG] [Thread-188466] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:42:07.140 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:42:07.140 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:42:09.798 [DEBUG] [Thread-188468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:42:24.859 [DEBUG] [Thread-188469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:42:31.661 [DEBUG] [Thread-188470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:42:34.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:42:34.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:42:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:42:36.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 42, 1), 0.18777, 98.7437, 0.0, 16.9744, 11.636, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:42:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:42:01
2026-04-12T11:42:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:42:36.747 [DEBUG] [Thread-188471] [transport.py] [_log()] starting thread (client mode): 0xae517220
2026-04-12T11:42:36.747 [DEBUG] [Thread-188471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:42:36.767 [DEBUG] [Thread-188471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:42:36.767 [INFO] [Thread-188471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:42:36.770 [DEBUG] [Thread-188471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:42:36.770 [DEBUG] [Thread-188471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:42:36.770 [DEBUG] [Thread-188471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:42:36.770 [DEBUG] [Thread-188471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:36.770 [DEBUG] [Thread-188471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:36.770 [DEBUG] [Thread-188471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] client lang: <none>
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] server lang: <none>
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] kex follows: False
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] Compression: none
2026-04-12T11:42:36.771 [DEBUG] [Thread-188471] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:42:36.788 [DEBUG] [Thread-188471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:42:36.788 [DEBUG] [Thread-188471] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:42:36.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:42:36.789 [DEBUG] [Thread-188471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:42:36.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:42:36.791 [DEBUG] [Thread-188471] [transport.py] [_log()] userauth is OK
2026-04-12T11:42:36.792 [DEBUG] [Thread-188471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:42:36.792 [DEBUG] [Thread-188471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:42:36.792 [DEBUG] [Thread-188471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:42:36.792 [DEBUG] [Thread-188471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:42:36.810 [INFO] [Thread-188471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:42:36.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:42:37.392 [DEBUG] [Thread-188471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:42:37.392 [DEBUG] [Thread-188471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:42:37.393 [DEBUG] [Thread-188471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:42:37.433 [DEBUG] [Thread-188471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:42:37.433 [DEBUG] [Thread-188471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:42:37.435 [DEBUG] [Thread-188471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:42:37.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:42:37.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:42:37.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:42:37.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:42:37.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:42:37.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:42:37.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:42:37.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:42:37.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:42:37.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.404275 -999.00  +11.90  11.22     91  +10.60 1 3 1 3 1   888    0 1.18 -5.45 ----- 11.8 11.2 287.1 18.0 15.4 -4.9 15.0 -4.3 14.3 -3.6 14.9 -3.9
2026-04-12T11:42:37.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:42:37.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:42:37.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.404275
2026-04-12T11:42:37.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:42:37.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:42:37.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:42:37.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:42:37.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:42:37.457 [DEBUG] [Thread-188471] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:42:37.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:42:01', tmtdew=0.18777, humidity=98.7437, cloud=0.0, wind=16.9744, temperature=11.636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:42:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:42:37.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:42:37.552 [DEBUG] [Thread-188474] [transport.py] [_log()] starting thread (client mode): 0xae517fa0
2026-04-12T11:42:37.552 [DEBUG] [Thread-188474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:42:37.570 [DEBUG] [Thread-188474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:42:37.570 [INFO] [Thread-188474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:42:37.578 [DEBUG] [Thread-188474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:42:37.578 [DEBUG] [Thread-188474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:42:37.578 [DEBUG] [Thread-188474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:42:37.578 [DEBUG] [Thread-188474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:37.578 [DEBUG] [Thread-188474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:42:37.578 [DEBUG] [Thread-188474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] client lang: <none>
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] server lang: <none>
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] kex follows: False
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:42:37.579 [DEBUG] [Thread-188474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:42:37.580 [DEBUG] [Thread-188474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:42:37.580 [DEBUG] [Thread-188474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:42:37.580 [DEBUG] [Thread-188474] [transport.py] [_log()] Compression: none
2026-04-12T11:42:37.580 [DEBUG] [Thread-188474] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:42:37.636 [DEBUG] [Thread-188474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:42:37.636 [DEBUG] [Thread-188474] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:42:37.636 [DEBUG] [Thread-188474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:42:37.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:42:37.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:42:37.693 [DEBUG] [Thread-188474] [transport.py] [_log()] userauth is OK
2026-04-12T11:42:37.693 [DEBUG] [Thread-188474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:42:37.693 [DEBUG] [Thread-188474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:42:37.693 [DEBUG] [Thread-188474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:42:37.693 [DEBUG] [Thread-188474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:42:37.711 [INFO] [Thread-188474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:42:37.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:42:37.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:42:38.542 [DEBUG] [Thread-188474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:42:38.543 [DEBUG] [Thread-188474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:42:38.592 [DEBUG] [Thread-188474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:42:38.592 [DEBUG] [Thread-188474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:42:38.604 [DEBUG] [Thread-188474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:42:38.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:42:38.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:42:38.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:42:38.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:42:38.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:42:38.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:42:38.641 [DEBUG] [Thread-188474] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:42:39.897 [DEBUG] [Thread-188476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:42:54.961 [DEBUG] [Thread-188477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:43:07.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:43:07.282 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:43:08.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:43:08.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:43:08.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:43:09.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 42, 37), 0.37023, 97.5207, 0.0, 17.7847, 12.3058, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:43:09.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:42:37
2026-04-12T11:43:09.999 [DEBUG] [Thread-188478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:43:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:43:10.508 [DEBUG] [Thread-188479] [transport.py] [_log()] starting thread (client mode): 0xb0fb4eb0
2026-04-12T11:43:10.508 [DEBUG] [Thread-188479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:43:10.527 [DEBUG] [Thread-188479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:43:10.527 [INFO] [Thread-188479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] client lang: <none>
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] server lang: <none>
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] kex follows: False
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] Compression: none
2026-04-12T11:43:10.530 [DEBUG] [Thread-188479] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:43:10.546 [DEBUG] [Thread-188479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:43:10.547 [DEBUG] [Thread-188479] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:43:10.547 [DEBUG] [Thread-188479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:43:10.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:43:10.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:43:10.549 [DEBUG] [Thread-188479] [transport.py] [_log()] userauth is OK
2026-04-12T11:43:10.549 [DEBUG] [Thread-188479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:43:10.549 [DEBUG] [Thread-188479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:43:10.549 [DEBUG] [Thread-188479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:43:10.550 [DEBUG] [Thread-188479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:43:10.584 [INFO] [Thread-188479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:43:10.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:43:11.203 [DEBUG] [Thread-188479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:43:11.204 [DEBUG] [Thread-188479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:43:11.204 [DEBUG] [Thread-188479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:43:11.245 [DEBUG] [Thread-188479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:43:11.246 [DEBUG] [Thread-188479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:43:11.249 [DEBUG] [Thread-188479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:43:11.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:43:11.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:43:11.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:43:11.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:43:11.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:43:11.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:43:11.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:43:11.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:43:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:43:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.404623 -999.00  +12.00  15.29     91  +10.70 1 3 1 3 1   888    0 1.21 -5.46 ----- 15.5 15.3 274.8 18.1 15.4 -4.4 15.0 -3.6 14.3 -3.3 15.0 -3.6
2026-04-12T11:43:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:43:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:43:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.404623
2026-04-12T11:43:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:43:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:43:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:43:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:43:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:43:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:42:37', tmtdew=0.37023, humidity=97.5207, cloud=0.0, wind=17.7847, temperature=12.3058, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:42:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:43:11.265 [DEBUG] [Thread-188479] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:43:11.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:43:11.351 [DEBUG] [Thread-188482] [transport.py] [_log()] starting thread (client mode): 0xb0fb63b0
2026-04-12T11:43:11.351 [DEBUG] [Thread-188482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:43:11.366 [DEBUG] [Thread-188482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:43:11.366 [INFO] [Thread-188482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:43:11.373 [DEBUG] [Thread-188482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] client lang: <none>
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] server lang: <none>
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] kex follows: False
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] Compression: none
2026-04-12T11:43:11.374 [DEBUG] [Thread-188482] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:43:11.434 [DEBUG] [Thread-188482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:43:11.434 [DEBUG] [Thread-188482] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:43:11.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:43:11.435 [DEBUG] [Thread-188482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:43:11.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:43:11.490 [DEBUG] [Thread-188482] [transport.py] [_log()] userauth is OK
2026-04-12T11:43:11.490 [DEBUG] [Thread-188482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:43:11.490 [DEBUG] [Thread-188482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:43:11.491 [DEBUG] [Thread-188482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:43:11.491 [DEBUG] [Thread-188482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:43:11.510 [INFO] [Thread-188482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:43:11.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:43:11.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:43:12.328 [DEBUG] [Thread-188482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:43:12.329 [DEBUG] [Thread-188482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:43:12.376 [DEBUG] [Thread-188482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:43:12.376 [DEBUG] [Thread-188482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:43:12.385 [DEBUG] [Thread-188482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:43:12.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:43:12.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:43:12.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:43:12.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:43:12.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:43:12.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:43:12.422 [DEBUG] [Thread-188482] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:43:25.042 [DEBUG] [Thread-188484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:43:31.718 [DEBUG] [Thread-188485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:43:40.093 [DEBUG] [Thread-188486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:43:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:43:42.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:43:42.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:43:43.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 43, 12), 0.245395, 98.694, 0.0, 17.5748, 11.5863, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:43:43.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:43:12
2026-04-12T11:43:44.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:43:44.265 [DEBUG] [Thread-188487] [transport.py] [_log()] starting thread (client mode): 0xb0fb6980
2026-04-12T11:43:44.265 [DEBUG] [Thread-188487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:43:44.284 [DEBUG] [Thread-188487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:43:44.284 [INFO] [Thread-188487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:43:44.296 [DEBUG] [Thread-188487] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:43:44.296 [DEBUG] [Thread-188487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:43:44.296 [DEBUG] [Thread-188487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:43:44.296 [DEBUG] [Thread-188487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:44.296 [DEBUG] [Thread-188487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] client lang: <none>
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] server lang: <none>
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] kex follows: False
2026-04-12T11:43:44.297 [DEBUG] [Thread-188487] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:43:44.298 [DEBUG] [Thread-188487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:43:44.298 [DEBUG] [Thread-188487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:43:44.298 [DEBUG] [Thread-188487] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:43:44.298 [DEBUG] [Thread-188487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:43:44.298 [DEBUG] [Thread-188487] [transport.py] [_log()] Compression: none
2026-04-12T11:43:44.298 [DEBUG] [Thread-188487] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:43:44.312 [DEBUG] [Thread-188487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:43:44.312 [DEBUG] [Thread-188487] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:43:44.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:43:44.313 [DEBUG] [Thread-188487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:43:44.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:43:44.316 [DEBUG] [Thread-188487] [transport.py] [_log()] userauth is OK
2026-04-12T11:43:44.316 [DEBUG] [Thread-188487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:43:44.316 [DEBUG] [Thread-188487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:43:44.316 [DEBUG] [Thread-188487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:43:44.316 [DEBUG] [Thread-188487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:43:44.341 [INFO] [Thread-188487] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:43:44.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:43:44.964 [DEBUG] [Thread-188487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:43:44.964 [DEBUG] [Thread-188487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:43:44.965 [DEBUG] [Thread-188487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:43:45.005 [DEBUG] [Thread-188487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:43:45.006 [DEBUG] [Thread-188487] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:43:45.009 [DEBUG] [Thread-188487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:43:45.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:43:45.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:43:45.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:43:45.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:43:45.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:43:45.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:43:45.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:43:45.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:43:45.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:43:45.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.404970 -999.00  +11.90  21.08     91  +10.50 1 3 1 3 1   888    0 1.18 -5.02 ----- 19.3 21.1 277.0 27.6 15.2 -4.9 14.9 -4.0 14.1 -5.6 14.9 -4.1
2026-04-12T11:43:45.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:43:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:43:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.404970
2026-04-12T11:43:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:43:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:43:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:43:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:43:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:43:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:43:12', tmtdew=0.245395, humidity=98.694, cloud=0.0, wind=17.5748, temperature=11.5863, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:43:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:43:45.037 [DEBUG] [Thread-188487] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:43:45.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:43:45.131 [DEBUG] [Thread-188490] [transport.py] [_log()] starting thread (client mode): 0xae516b30
2026-04-12T11:43:45.132 [DEBUG] [Thread-188490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:43:45.146 [DEBUG] [Thread-188490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:43:45.146 [INFO] [Thread-188490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:43:45.154 [DEBUG] [Thread-188490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:43:45.154 [DEBUG] [Thread-188490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:43:45.154 [DEBUG] [Thread-188490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] client lang: <none>
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] server lang: <none>
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] kex follows: False
2026-04-12T11:43:45.155 [DEBUG] [Thread-188490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:43:45.156 [DEBUG] [Thread-188490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:43:45.156 [DEBUG] [Thread-188490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:43:45.156 [DEBUG] [Thread-188490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:43:45.156 [DEBUG] [Thread-188490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:43:45.156 [DEBUG] [Thread-188490] [transport.py] [_log()] Compression: none
2026-04-12T11:43:45.157 [DEBUG] [Thread-188490] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:43:45.213 [DEBUG] [Thread-188490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:43:45.214 [DEBUG] [Thread-188490] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:43:45.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:43:45.215 [DEBUG] [Thread-188490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:43:45.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:43:45.270 [DEBUG] [Thread-188490] [transport.py] [_log()] userauth is OK
2026-04-12T11:43:45.270 [DEBUG] [Thread-188490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:43:45.270 [DEBUG] [Thread-188490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:43:45.270 [DEBUG] [Thread-188490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:43:45.270 [DEBUG] [Thread-188490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:43:45.288 [INFO] [Thread-188490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:43:45.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:43:45.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:43:46.137 [DEBUG] [Thread-188490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:43:46.137 [DEBUG] [Thread-188490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:43:46.185 [DEBUG] [Thread-188490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:43:46.186 [DEBUG] [Thread-188490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:43:46.199 [DEBUG] [Thread-188490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:43:46.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:43:46.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:43:46.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:43:46.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:43:46.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:43:46.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:43:46.244 [DEBUG] [Thread-188490] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:43:55.132 [DEBUG] [Thread-188492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:44:07.444 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:44:07.445 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:44:10.192 [DEBUG] [Thread-188493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:44:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:44:16.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:44:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:44:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 43, 47), 0.37529, 97.4876, 0.0, 21.0305, 12.2727, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:44:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:43:47
2026-04-12T11:44:17.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:44:18.033 [DEBUG] [Thread-188494] [transport.py] [_log()] starting thread (client mode): 0xa7969a20
2026-04-12T11:44:18.033 [DEBUG] [Thread-188494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:44:18.048 [DEBUG] [Thread-188494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:44:18.048 [INFO] [Thread-188494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] client lang: <none>
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] server lang: <none>
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] kex follows: False
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:44:18.051 [DEBUG] [Thread-188494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:44:18.052 [DEBUG] [Thread-188494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:44:18.052 [DEBUG] [Thread-188494] [transport.py] [_log()] Compression: none
2026-04-12T11:44:18.052 [DEBUG] [Thread-188494] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:44:18.070 [DEBUG] [Thread-188494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:44:18.070 [DEBUG] [Thread-188494] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:44:18.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:44:18.071 [DEBUG] [Thread-188494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:44:18.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:44:18.073 [DEBUG] [Thread-188494] [transport.py] [_log()] userauth is OK
2026-04-12T11:44:18.074 [DEBUG] [Thread-188494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:44:18.074 [DEBUG] [Thread-188494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:44:18.074 [DEBUG] [Thread-188494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:44:18.074 [DEBUG] [Thread-188494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:44:18.098 [INFO] [Thread-188494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:44:18.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:44:18.738 [DEBUG] [Thread-188494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:44:18.738 [DEBUG] [Thread-188494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:44:18.739 [DEBUG] [Thread-188494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:44:18.779 [DEBUG] [Thread-188494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:44:18.779 [DEBUG] [Thread-188494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:44:18.783 [DEBUG] [Thread-188494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:44:18.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:44:18.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:44:18.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:44:18.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:44:18.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:44:18.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:44:18.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:44:18.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:44:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:44:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.405664 -999.00  +11.70  20.66     91  +10.40 1 3 1 3 1   888    0 1.20 -4.96 ----- 24.2 20.7 271.2 30.8 15.1 -5.1 14.8 -4.1 14.1 -4.2 14.8 -3.8
2026-04-12T11:44:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:44:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:44:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.405664
2026-04-12T11:44:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:44:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:44:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:44:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:44:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:44:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:43:47', tmtdew=0.37529, humidity=97.4876, cloud=0.0, wind=21.0305, temperature=12.2727, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:44:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:44:18.811 [DEBUG] [Thread-188494] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:44:18.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:44:18.917 [DEBUG] [Thread-188497] [transport.py] [_log()] starting thread (client mode): 0xa796bdf0
2026-04-12T11:44:18.917 [DEBUG] [Thread-188497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:44:18.932 [DEBUG] [Thread-188497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:44:18.932 [INFO] [Thread-188497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:44:18.940 [DEBUG] [Thread-188497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:44:18.940 [DEBUG] [Thread-188497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:44:18.940 [DEBUG] [Thread-188497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:44:18.940 [DEBUG] [Thread-188497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:18.940 [DEBUG] [Thread-188497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:18.940 [DEBUG] [Thread-188497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:18.940 [DEBUG] [Thread-188497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] client lang: <none>
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] server lang: <none>
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] kex follows: False
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] Compression: none
2026-04-12T11:44:18.941 [DEBUG] [Thread-188497] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:44:18.997 [DEBUG] [Thread-188497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:44:18.998 [DEBUG] [Thread-188497] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:44:18.998 [DEBUG] [Thread-188497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:44:18.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:44:18.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:44:19.053 [DEBUG] [Thread-188497] [transport.py] [_log()] userauth is OK
2026-04-12T11:44:19.054 [DEBUG] [Thread-188497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:44:19.054 [DEBUG] [Thread-188497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:44:19.054 [DEBUG] [Thread-188497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:44:19.054 [DEBUG] [Thread-188497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:44:19.072 [INFO] [Thread-188497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:44:19.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:44:19.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:44:19.871 [DEBUG] [Thread-188497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:44:19.871 [DEBUG] [Thread-188497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:44:19.919 [DEBUG] [Thread-188497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:44:19.920 [DEBUG] [Thread-188497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:44:19.929 [DEBUG] [Thread-188497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:44:19.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:44:19.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:44:19.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:44:19.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:44:19.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:44:19.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:44:19.966 [DEBUG] [Thread-188497] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:44:25.232 [DEBUG] [Thread-188499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:44:31.771 [DEBUG] [Thread-188500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:44:40.296 [DEBUG] [Thread-188501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:44:49.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:44:49.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:44:49.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:44:51.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 44, 23), 0.190225, 98.2272, 0.0, 19.2866, 11.5864, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:44:51.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:44:23
2026-04-12T11:44:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:44:51.786 [DEBUG] [Thread-188502] [transport.py] [_log()] starting thread (client mode): 0xb0fb4700
2026-04-12T11:44:51.786 [DEBUG] [Thread-188502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:44:51.807 [DEBUG] [Thread-188502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:44:51.807 [INFO] [Thread-188502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:51.810 [DEBUG] [Thread-188502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] client lang: <none>
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] server lang: <none>
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] kex follows: False
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] Compression: none
2026-04-12T11:44:51.811 [DEBUG] [Thread-188502] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:44:51.828 [DEBUG] [Thread-188502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:44:51.829 [DEBUG] [Thread-188502] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:44:51.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:44:51.830 [DEBUG] [Thread-188502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:44:51.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:44:51.832 [DEBUG] [Thread-188502] [transport.py] [_log()] userauth is OK
2026-04-12T11:44:51.832 [DEBUG] [Thread-188502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:44:51.833 [DEBUG] [Thread-188502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:44:51.833 [DEBUG] [Thread-188502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:44:51.833 [DEBUG] [Thread-188502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:44:51.857 [INFO] [Thread-188502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:44:51.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:44:52.496 [DEBUG] [Thread-188502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:44:52.497 [DEBUG] [Thread-188502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:44:52.497 [DEBUG] [Thread-188502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:44:52.538 [DEBUG] [Thread-188502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:44:52.539 [DEBUG] [Thread-188502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:44:52.542 [DEBUG] [Thread-188502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:44:52.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:44:52.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:44:52.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:44:52.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:44:52.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:44:52.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:44:52.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:44:52.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:44:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:44:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.406012 -999.00  +11.60  25.75     92  +10.40 1 3 1 3 1   888    0 1.19 -5.34 ----- 25.3 25.8 275.8 29.6 15.0 -5.3 14.8 -4.4 14.1 -5.1 14.7 -4.4
2026-04-12T11:44:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:44:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:44:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.406012
2026-04-12T11:44:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:44:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:44:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:44:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:44:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:44:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:44:23', tmtdew=0.190225, humidity=98.2272, cloud=0.0, wind=19.2866, temperature=11.5864, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:44:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:44:52.567 [DEBUG] [Thread-188502] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:44:52.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:44:52.661 [DEBUG] [Thread-188505] [transport.py] [_log()] starting thread (client mode): 0xb0fb57b0
2026-04-12T11:44:52.661 [DEBUG] [Thread-188505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:44:52.677 [DEBUG] [Thread-188505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:44:52.677 [INFO] [Thread-188505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:44:52.685 [DEBUG] [Thread-188505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:44:52.685 [DEBUG] [Thread-188505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:44:52.685 [DEBUG] [Thread-188505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:44:52.685 [DEBUG] [Thread-188505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:52.685 [DEBUG] [Thread-188505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:44:52.685 [DEBUG] [Thread-188505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] client lang: <none>
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] server lang: <none>
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] kex follows: False
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] Compression: none
2026-04-12T11:44:52.686 [DEBUG] [Thread-188505] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:44:52.743 [DEBUG] [Thread-188505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:44:52.743 [DEBUG] [Thread-188505] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:44:52.744 [DEBUG] [Thread-188505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:44:52.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:44:52.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:44:52.802 [DEBUG] [Thread-188505] [transport.py] [_log()] userauth is OK
2026-04-12T11:44:52.802 [DEBUG] [Thread-188505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:44:52.803 [DEBUG] [Thread-188505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:44:52.803 [DEBUG] [Thread-188505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:44:52.803 [DEBUG] [Thread-188505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:44:52.821 [INFO] [Thread-188505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:44:52.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:44:52.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:44:53.646 [DEBUG] [Thread-188505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:44:53.646 [DEBUG] [Thread-188505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:44:53.694 [DEBUG] [Thread-188505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:44:53.695 [DEBUG] [Thread-188505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:44:53.704 [DEBUG] [Thread-188505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:44:53.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:44:53.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:44:53.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:44:53.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:44:53.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:44:53.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:44:53.741 [DEBUG] [Thread-188505] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:44:55.338 [DEBUG] [Thread-188507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:07.591 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:07.593 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:10.387 [DEBUG] [Thread-188508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:23.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:45:23.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:45:23.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:45:25.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 44, 59), 0.18271, 98.2766, 0.0, 20.5384, 11.669, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:45:25.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:44:59
2026-04-12T11:45:25.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:45:25.424 [DEBUG] [Thread-188509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:25.546 [DEBUG] [Thread-188510] [transport.py] [_log()] starting thread (client mode): 0xa7968d90
2026-04-12T11:45:25.546 [DEBUG] [Thread-188510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:45:25.566 [DEBUG] [Thread-188510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:45:25.566 [INFO] [Thread-188510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:45:25.569 [DEBUG] [Thread-188510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:45:25.569 [DEBUG] [Thread-188510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:45:25.569 [DEBUG] [Thread-188510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:45:25.569 [DEBUG] [Thread-188510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:45:25.569 [DEBUG] [Thread-188510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:45:25.569 [DEBUG] [Thread-188510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] client lang: <none>
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] server lang: <none>
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] kex follows: False
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] Compression: none
2026-04-12T11:45:25.570 [DEBUG] [Thread-188510] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:45:25.585 [DEBUG] [Thread-188510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:45:25.585 [DEBUG] [Thread-188510] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:45:25.585 [DEBUG] [Thread-188510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:45:25.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:45:25.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:45:25.587 [DEBUG] [Thread-188510] [transport.py] [_log()] userauth is OK
2026-04-12T11:45:25.587 [DEBUG] [Thread-188510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:45:25.588 [DEBUG] [Thread-188510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:45:25.588 [DEBUG] [Thread-188510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:45:25.588 [DEBUG] [Thread-188510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:45:25.611 [INFO] [Thread-188510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:45:25.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:45:26.221 [DEBUG] [Thread-188510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:45:26.221 [DEBUG] [Thread-188510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:45:26.222 [DEBUG] [Thread-188510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:45:26.262 [DEBUG] [Thread-188510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:45:26.262 [DEBUG] [Thread-188510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:45:26.266 [DEBUG] [Thread-188510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:45:26.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:45:26.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:45:26.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:45:26.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:45:26.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:45:26.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:45:26.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:45:26.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:45:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:45:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.406358 -999.00  +11.60  20.29     92  +10.40 1 3 1 3 1   888    0 1.15 -5.92 ----- 17.3 20.3 270.0 25.3 15.0 -5.1 14.8 -4.2 13.9 -5.7 14.7 -4.2
2026-04-12T11:45:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:45:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:45:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.406358
2026-04-12T11:45:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:45:26.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:45:26.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:45:26.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:45:26.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:45:26.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:44:59', tmtdew=0.18271, humidity=98.2766, cloud=0.0, wind=20.5384, temperature=11.669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:45:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:45:26.292 [DEBUG] [Thread-188510] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:45:26.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:45:26.387 [DEBUG] [Thread-188513] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ba0
2026-04-12T11:45:26.387 [DEBUG] [Thread-188513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:45:26.401 [DEBUG] [Thread-188513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:45:26.402 [INFO] [Thread-188513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:45:26.410 [DEBUG] [Thread-188513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:45:26.410 [DEBUG] [Thread-188513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:45:26.410 [DEBUG] [Thread-188513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:45:26.410 [DEBUG] [Thread-188513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:45:26.410 [DEBUG] [Thread-188513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:45:26.410 [DEBUG] [Thread-188513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:45:26.410 [DEBUG] [Thread-188513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] client lang: <none>
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] server lang: <none>
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] kex follows: False
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:45:26.411 [DEBUG] [Thread-188513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:45:26.412 [DEBUG] [Thread-188513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:45:26.412 [DEBUG] [Thread-188513] [transport.py] [_log()] Compression: none
2026-04-12T11:45:26.412 [DEBUG] [Thread-188513] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:45:26.468 [DEBUG] [Thread-188513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:45:26.468 [DEBUG] [Thread-188513] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:45:26.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:45:26.470 [DEBUG] [Thread-188513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:45:26.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:45:26.527 [DEBUG] [Thread-188513] [transport.py] [_log()] userauth is OK
2026-04-12T11:45:26.527 [DEBUG] [Thread-188513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:45:26.528 [DEBUG] [Thread-188513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:45:26.528 [DEBUG] [Thread-188513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:45:26.528 [DEBUG] [Thread-188513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:45:26.550 [INFO] [Thread-188513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:45:26.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:45:26.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:45:27.378 [DEBUG] [Thread-188513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:45:27.379 [DEBUG] [Thread-188513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:45:27.427 [DEBUG] [Thread-188513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:45:27.428 [DEBUG] [Thread-188513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:45:27.437 [DEBUG] [Thread-188513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:45:27.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:45:27.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:45:27.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:45:27.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:45:27.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:45:27.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:45:27.474 [DEBUG] [Thread-188513] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:45:31.822 [DEBUG] [Thread-188515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:40.460 [DEBUG] [Thread-188516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:55.522 [DEBUG] [Thread-188517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:45:57.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:45:57.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:45:57.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:45:58.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 45, 34), 0.39628, 97.3543, 0.0, 19.9368, 12.3717, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:45:58.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:45:34
2026-04-12T11:45:59.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:45:59.484 [DEBUG] [Thread-188518] [transport.py] [_log()] starting thread (client mode): 0xae516140
2026-04-12T11:45:59.485 [DEBUG] [Thread-188518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:45:59.505 [DEBUG] [Thread-188518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:45:59.505 [INFO] [Thread-188518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:45:59.508 [DEBUG] [Thread-188518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:45:59.508 [DEBUG] [Thread-188518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:45:59.508 [DEBUG] [Thread-188518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:45:59.508 [DEBUG] [Thread-188518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:45:59.508 [DEBUG] [Thread-188518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:45:59.508 [DEBUG] [Thread-188518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:45:59.508 [DEBUG] [Thread-188518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] client lang: <none>
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] server lang: <none>
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] kex follows: False
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] Compression: none
2026-04-12T11:45:59.509 [DEBUG] [Thread-188518] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:45:59.527 [DEBUG] [Thread-188518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:45:59.528 [DEBUG] [Thread-188518] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:45:59.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:45:59.530 [DEBUG] [Thread-188518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:45:59.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:45:59.532 [DEBUG] [Thread-188518] [transport.py] [_log()] userauth is OK
2026-04-12T11:45:59.532 [DEBUG] [Thread-188518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:45:59.532 [DEBUG] [Thread-188518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:45:59.533 [DEBUG] [Thread-188518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:45:59.533 [DEBUG] [Thread-188518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:45:59.568 [INFO] [Thread-188518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:45:59.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:46:00.198 [DEBUG] [Thread-188518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:46:00.199 [DEBUG] [Thread-188518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:46:00.199 [DEBUG] [Thread-188518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:46:00.240 [DEBUG] [Thread-188518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:46:00.240 [DEBUG] [Thread-188518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:46:00.244 [DEBUG] [Thread-188518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:46:00.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:46:00.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:46:00.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:46:00.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:46:00.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:46:00.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:46:00.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:46:00.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:46:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:46:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.406706 -999.00  +11.70  17.27     92  +10.50 1 3 1 3 1   888    0 1.13 -6.48 ----- 16.9 17.3 279.5 26.6 15.1 -4.1 14.7 -3.9 14.1 -3.0 14.7 -3.6
2026-04-12T11:46:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:46:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:46:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.406706
2026-04-12T11:46:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:46:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:46:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:46:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:46:00.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:46:00.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:45:34', tmtdew=0.39628, humidity=97.3543, cloud=0.0, wind=19.9368, temperature=12.3717, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:45:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:46:00.273 [DEBUG] [Thread-188518] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:46:00.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:46:00.367 [DEBUG] [Thread-188521] [transport.py] [_log()] starting thread (client mode): 0xae516fb0
2026-04-12T11:46:00.367 [DEBUG] [Thread-188521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:46:00.382 [DEBUG] [Thread-188521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:46:00.382 [INFO] [Thread-188521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:46:00.389 [DEBUG] [Thread-188521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] client lang: <none>
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] server lang: <none>
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] kex follows: False
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] Compression: none
2026-04-12T11:46:00.390 [DEBUG] [Thread-188521] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:46:00.445 [DEBUG] [Thread-188521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:46:00.445 [DEBUG] [Thread-188521] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:46:00.445 [DEBUG] [Thread-188521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:46:00.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:46:00.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:46:00.503 [DEBUG] [Thread-188521] [transport.py] [_log()] userauth is OK
2026-04-12T11:46:00.504 [DEBUG] [Thread-188521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:46:00.504 [DEBUG] [Thread-188521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:46:00.504 [DEBUG] [Thread-188521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:46:00.504 [DEBUG] [Thread-188521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:46:00.524 [INFO] [Thread-188521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:46:00.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:46:00.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:46:01.318 [DEBUG] [Thread-188521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:46:01.318 [DEBUG] [Thread-188521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:46:01.366 [DEBUG] [Thread-188521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:46:01.366 [DEBUG] [Thread-188521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:46:01.376 [DEBUG] [Thread-188521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:46:01.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:46:01.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:46:01.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:46:01.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:46:01.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:46:01.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:46:01.410 [DEBUG] [Thread-188521] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:46:07.735 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:46:07.736 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:46:10.556 [DEBUG] [Thread-188523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:46:25.612 [DEBUG] [Thread-188524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:46:31.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:46:31.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:46:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:46:31.878 [DEBUG] [Thread-188525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:46:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 46, 9), 0.198115, 98.1773, 0.0, 23.3438, 11.5359, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:46:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:46:09
2026-04-12T11:46:33.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:46:33.242 [DEBUG] [Thread-188526] [transport.py] [_log()] starting thread (client mode): 0xb0fb4910
2026-04-12T11:46:33.242 [DEBUG] [Thread-188526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:46:33.263 [DEBUG] [Thread-188526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:46:33.263 [INFO] [Thread-188526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:46:33.266 [DEBUG] [Thread-188526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:46:33.266 [DEBUG] [Thread-188526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:46:33.266 [DEBUG] [Thread-188526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:46:33.266 [DEBUG] [Thread-188526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:46:33.266 [DEBUG] [Thread-188526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] client lang: <none>
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] server lang: <none>
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] kex follows: False
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:46:33.267 [DEBUG] [Thread-188526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:46:33.268 [DEBUG] [Thread-188526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:46:33.268 [DEBUG] [Thread-188526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:46:33.268 [DEBUG] [Thread-188526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:46:33.268 [DEBUG] [Thread-188526] [transport.py] [_log()] Compression: none
2026-04-12T11:46:33.268 [DEBUG] [Thread-188526] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:46:33.289 [DEBUG] [Thread-188526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:46:33.290 [DEBUG] [Thread-188526] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:46:33.290 [DEBUG] [Thread-188526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:46:33.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:46:33.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:46:33.292 [DEBUG] [Thread-188526] [transport.py] [_log()] userauth is OK
2026-04-12T11:46:33.292 [DEBUG] [Thread-188526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:46:33.292 [DEBUG] [Thread-188526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:46:33.292 [DEBUG] [Thread-188526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:46:33.292 [DEBUG] [Thread-188526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:46:33.310 [INFO] [Thread-188526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:46:33.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:46:33.933 [DEBUG] [Thread-188526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:46:33.933 [DEBUG] [Thread-188526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:46:33.933 [DEBUG] [Thread-188526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:46:33.975 [DEBUG] [Thread-188526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:46:33.975 [DEBUG] [Thread-188526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:46:33.977 [DEBUG] [Thread-188526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:46:33.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:46:33.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:46:33.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:46:33.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:46:33.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:46:33.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:46:33.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.407053 -999.00  +11.80  14.58     92  +10.60 1 3 1 3 1   888    0 1.14 -7.63 ----- 15.7 14.6 284.9 25.9 15.1 -4.2 14.8 -3.9 14.1 -3.4 14.7 -3.1
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.407053
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:46:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:46:09', tmtdew=0.198115, humidity=98.1773, cloud=0.0, wind=23.3438, temperature=11.5359, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:46:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:46:33.989 [DEBUG] [Thread-188526] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:46:34.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:46:34.074 [DEBUG] [Thread-188529] [transport.py] [_log()] starting thread (client mode): 0xb0fb5bd0
2026-04-12T11:46:34.074 [DEBUG] [Thread-188529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:46:34.090 [DEBUG] [Thread-188529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:46:34.090 [INFO] [Thread-188529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:46:34.097 [DEBUG] [Thread-188529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] client lang: <none>
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] server lang: <none>
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] kex follows: False
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:46:34.098 [DEBUG] [Thread-188529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:46:34.099 [DEBUG] [Thread-188529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:46:34.099 [DEBUG] [Thread-188529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:46:34.099 [DEBUG] [Thread-188529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:46:34.099 [DEBUG] [Thread-188529] [transport.py] [_log()] Compression: none
2026-04-12T11:46:34.099 [DEBUG] [Thread-188529] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:46:34.164 [DEBUG] [Thread-188529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:46:34.164 [DEBUG] [Thread-188529] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:46:34.165 [DEBUG] [Thread-188529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:46:34.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:46:34.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:46:34.220 [DEBUG] [Thread-188529] [transport.py] [_log()] userauth is OK
2026-04-12T11:46:34.220 [DEBUG] [Thread-188529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:46:34.220 [DEBUG] [Thread-188529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:46:34.220 [DEBUG] [Thread-188529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:46:34.220 [DEBUG] [Thread-188529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:46:34.240 [INFO] [Thread-188529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:46:34.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:46:34.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:46:35.086 [DEBUG] [Thread-188529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:46:35.086 [DEBUG] [Thread-188529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:46:35.134 [DEBUG] [Thread-188529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:46:35.134 [DEBUG] [Thread-188529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:46:35.144 [DEBUG] [Thread-188529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:46:35.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:46:35.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:46:35.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:46:35.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:46:35.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:46:35.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:46:35.181 [DEBUG] [Thread-188529] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:46:40.649 [DEBUG] [Thread-188531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:46:55.702 [DEBUG] [Thread-188532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:47:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:47:05.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:47:05.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:47:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 46, 45), 0.38059, 97.454, 0.0, 22.477, 12.3056, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:47:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:46:45
2026-04-12T11:47:06.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:47:07.003 [DEBUG] [Thread-188533] [transport.py] [_log()] starting thread (client mode): 0xb39c70d0
2026-04-12T11:47:07.003 [DEBUG] [Thread-188533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:47:07.026 [DEBUG] [Thread-188533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:47:07.026 [INFO] [Thread-188533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] client lang: <none>
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] server lang: <none>
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] kex follows: False
2026-04-12T11:47:07.029 [DEBUG] [Thread-188533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:47:07.030 [DEBUG] [Thread-188533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:47:07.030 [DEBUG] [Thread-188533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:47:07.030 [DEBUG] [Thread-188533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:47:07.030 [DEBUG] [Thread-188533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:47:07.030 [DEBUG] [Thread-188533] [transport.py] [_log()] Compression: none
2026-04-12T11:47:07.030 [DEBUG] [Thread-188533] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:47:07.047 [DEBUG] [Thread-188533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:47:07.047 [DEBUG] [Thread-188533] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:47:07.048 [DEBUG] [Thread-188533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:47:07.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:47:07.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:47:07.050 [DEBUG] [Thread-188533] [transport.py] [_log()] userauth is OK
2026-04-12T11:47:07.050 [DEBUG] [Thread-188533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:47:07.050 [DEBUG] [Thread-188533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:47:07.050 [DEBUG] [Thread-188533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:47:07.050 [DEBUG] [Thread-188533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:47:07.068 [INFO] [Thread-188533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:47:07.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:47:07.680 [DEBUG] [Thread-188533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:47:07.680 [DEBUG] [Thread-188533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:47:07.680 [DEBUG] [Thread-188533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:47:07.721 [DEBUG] [Thread-188533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:47:07.721 [DEBUG] [Thread-188533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:47:07.724 [DEBUG] [Thread-188533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:47:07.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:47:07.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:47:07.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:47:07.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:47:07.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:47:07.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:47:07.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:47:07.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:47:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:47:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.407400 -999.00  +11.80  18.04     92  +10.60 1 3 1 3 1   888    0 1.06 -8.36 ----- 22.9 18.0 270.8 24.1 15.1 -5.5 14.8 -4.7 14.1 -3.4 14.7 -3.5
2026-04-12T11:47:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:47:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:47:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.407400
2026-04-12T11:47:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:47:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:47:07.737 [DEBUG] [Thread-188533] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:47:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:47:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:47:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:47:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:46:45', tmtdew=0.38059, humidity=97.454, cloud=0.0, wind=22.477, temperature=12.3056, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:46:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:47:07.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:47:07.841 [DEBUG] [Thread-188536] [transport.py] [_log()] starting thread (client mode): 0xb0fb4670
2026-04-12T11:47:07.841 [DEBUG] [Thread-188536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:47:07.855 [DEBUG] [Thread-188536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:47:07.856 [INFO] [Thread-188536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:47:07.863 [DEBUG] [Thread-188536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:47:07.863 [DEBUG] [Thread-188536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:47:07.863 [DEBUG] [Thread-188536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:47:07.863 [DEBUG] [Thread-188536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:47:07.863 [DEBUG] [Thread-188536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] client lang: <none>
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] server lang: <none>
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] kex follows: False
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:47:07.864 [DEBUG] [Thread-188536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:47:07.865 [DEBUG] [Thread-188536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:47:07.865 [DEBUG] [Thread-188536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:47:07.865 [DEBUG] [Thread-188536] [transport.py] [_log()] Compression: none
2026-04-12T11:47:07.865 [DEBUG] [Thread-188536] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:47:07.890 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:47:07.891 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:47:07.919 [DEBUG] [Thread-188536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:47:07.920 [DEBUG] [Thread-188536] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:47:07.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:47:07.921 [DEBUG] [Thread-188536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:47:07.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:47:07.976 [DEBUG] [Thread-188536] [transport.py] [_log()] userauth is OK
2026-04-12T11:47:07.976 [DEBUG] [Thread-188536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:47:07.976 [DEBUG] [Thread-188536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:47:07.976 [DEBUG] [Thread-188536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:47:07.976 [DEBUG] [Thread-188536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:47:07.999 [INFO] [Thread-188536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:47:07.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:47:07.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:47:08.865 [DEBUG] [Thread-188536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:47:08.865 [DEBUG] [Thread-188536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:47:08.913 [DEBUG] [Thread-188536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:47:08.913 [DEBUG] [Thread-188536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:47:08.922 [DEBUG] [Thread-188536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:47:08.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:47:08.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:47:08.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:47:08.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:47:08.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:47:08.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:47:08.957 [DEBUG] [Thread-188536] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:47:10.742 [DEBUG] [Thread-188538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:47:25.796 [DEBUG] [Thread-188539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:47:31.932 [DEBUG] [Thread-188540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:47:38.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:47:38.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:47:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:47:40.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 47, 22), 0.24289, 98.2101, 0.0, 18.5443, 11.736, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:47:40.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:47:22
2026-04-12T11:47:40.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:47:40.832 [DEBUG] [Thread-188541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:47:40.888 [DEBUG] [Thread-188542] [transport.py] [_log()] starting thread (client mode): 0xe6a3b1f0
2026-04-12T11:47:40.888 [DEBUG] [Thread-188542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:47:40.910 [DEBUG] [Thread-188542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:47:40.910 [INFO] [Thread-188542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] client lang: <none>
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] server lang: <none>
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] kex follows: False
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] Compression: none
2026-04-12T11:47:40.912 [DEBUG] [Thread-188542] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:47:40.921 [DEBUG] [Thread-188542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:47:40.921 [DEBUG] [Thread-188542] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:47:40.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:47:40.922 [DEBUG] [Thread-188542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:47:40.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:47:40.924 [DEBUG] [Thread-188542] [transport.py] [_log()] userauth is OK
2026-04-12T11:47:40.924 [DEBUG] [Thread-188542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:47:40.925 [DEBUG] [Thread-188542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:47:40.925 [DEBUG] [Thread-188542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:47:40.925 [DEBUG] [Thread-188542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:47:40.948 [INFO] [Thread-188542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:47:40.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:47:41.600 [DEBUG] [Thread-188542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:47:41.600 [DEBUG] [Thread-188542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:47:41.601 [DEBUG] [Thread-188542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:47:41.641 [DEBUG] [Thread-188542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:47:41.641 [DEBUG] [Thread-188542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:47:41.643 [DEBUG] [Thread-188542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:47:41.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:47:41.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:47:41.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:47:41.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:47:41.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:47:41.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:47:41.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:47:41.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:47:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:47:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.407748 -999.00  +11.60  19.61     91  +10.40 1 3 1 3 1   888    0 1.07 -8.75 ----- 17.9 19.6 280.2 26.7 15.0 -5.8 14.8 -5.4 14.0 -4.9 14.7 -4.4
2026-04-12T11:47:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:47:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:47:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.407748
2026-04-12T11:47:41.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:47:41.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:47:41.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:47:41.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:47:41.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:47:41.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:47:22', tmtdew=0.24289, humidity=98.2101, cloud=0.0, wind=18.5443, temperature=11.736, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:47:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:47:41.662 [DEBUG] [Thread-188542] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:47:41.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:47:55.866 [DEBUG] [Thread-188545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:48:08.041 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:48:08.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:48:10.927 [DEBUG] [Thread-188546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:48:25.967 [DEBUG] [Thread-188547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:48:31.994 [DEBUG] [Thread-188548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:48:41.007 [DEBUG] [Thread-188549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:48:56.049 [DEBUG] [Thread-188550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:08.183 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:08.185 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:11.085 [DEBUG] [Thread-188551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:26.124 [DEBUG] [Thread-188552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:32.048 [DEBUG] [Thread-188553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:41.162 [DEBUG] [Thread-188554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:56.199 [DEBUG] [Thread-188555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:49:56.223 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T11:50:08.330 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:50:08.332 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:50:11.235 [DEBUG] [Thread-188556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:50:26.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:50:26.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:50:26.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:50:26.274 [DEBUG] [Thread-188557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:50:27.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 50, 20), 0.240505, 98.2268, 0.0, 21.4733, 11.9856, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:50:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:50:20
2026-04-12T11:50:27.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:50:28.099 [DEBUG] [Thread-188558] [transport.py] [_log()] starting thread (client mode): 0xae516080
2026-04-12T11:50:28.099 [DEBUG] [Thread-188558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:50:28.118 [DEBUG] [Thread-188558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:50:28.118 [INFO] [Thread-188558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:50:28.121 [DEBUG] [Thread-188558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] client lang: <none>
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] server lang: <none>
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] kex follows: False
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:50:28.122 [DEBUG] [Thread-188558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:50:28.123 [DEBUG] [Thread-188558] [transport.py] [_log()] Compression: none
2026-04-12T11:50:28.123 [DEBUG] [Thread-188558] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:50:28.131 [DEBUG] [Thread-188558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:50:28.131 [DEBUG] [Thread-188558] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:50:28.131 [DEBUG] [Thread-188558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:50:28.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:50:28.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:50:28.132 [DEBUG] [Thread-188558] [transport.py] [_log()] userauth is OK
2026-04-12T11:50:28.132 [DEBUG] [Thread-188558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:50:28.132 [DEBUG] [Thread-188558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:50:28.132 [DEBUG] [Thread-188558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:50:28.132 [DEBUG] [Thread-188558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:50:28.155 [INFO] [Thread-188558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:50:28.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:50:28.749 [DEBUG] [Thread-188558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:50:28.750 [DEBUG] [Thread-188558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:50:28.750 [DEBUG] [Thread-188558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:50:28.791 [DEBUG] [Thread-188558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:50:28.791 [DEBUG] [Thread-188558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:50:28.794 [DEBUG] [Thread-188558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:50:28.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:50:28.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:50:28.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:50:28.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:50:28.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:50:28.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:50:28.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:50:28.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.409831 -999.00  +12.00  17.04     91  +10.70 1 3 1 3 1   888    0 1.02 -9.20 ----- 21.3 17.0 279.9 22.9 15.4 -5.0 14.9 -4.8 14.2 -5.3 14.9 -3.9
2026-04-12T11:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.409831
2026-04-12T11:50:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:50:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:50:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:50:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:50:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:50:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:50:20', tmtdew=0.240505, humidity=98.2268, cloud=0.0, wind=21.4733, temperature=11.9856, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:50:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:50:28.819 [DEBUG] [Thread-188558] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:50:28.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:50:28.923 [DEBUG] [Thread-188561] [transport.py] [_log()] starting thread (client mode): 0xae515660
2026-04-12T11:50:28.923 [DEBUG] [Thread-188561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:50:28.938 [DEBUG] [Thread-188561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:50:28.938 [INFO] [Thread-188561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] client lang: <none>
2026-04-12T11:50:28.948 [DEBUG] [Thread-188561] [transport.py] [_log()] server lang: <none>
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] kex follows: False
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] Compression: none
2026-04-12T11:50:28.949 [DEBUG] [Thread-188561] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:50:29.015 [DEBUG] [Thread-188561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:50:29.015 [DEBUG] [Thread-188561] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:50:29.016 [DEBUG] [Thread-188561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:50:29.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:50:29.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:50:29.070 [DEBUG] [Thread-188561] [transport.py] [_log()] userauth is OK
2026-04-12T11:50:29.071 [DEBUG] [Thread-188561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:50:29.071 [DEBUG] [Thread-188561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:50:29.071 [DEBUG] [Thread-188561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:50:29.071 [DEBUG] [Thread-188561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:50:29.093 [INFO] [Thread-188561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:50:29.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:50:29.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:50:29.941 [DEBUG] [Thread-188561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:50:29.942 [DEBUG] [Thread-188561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:50:29.989 [DEBUG] [Thread-188561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:50:29.989 [DEBUG] [Thread-188561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:50:29.999 [DEBUG] [Thread-188561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:50:30.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:50:30.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:50:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:50:30.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:50:30.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:50:30.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:50:30.036 [DEBUG] [Thread-188561] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:50:32.093 [DEBUG] [Thread-188563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:50:41.309 [DEBUG] [Thread-188564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:50:56.372 [DEBUG] [Thread-188565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:51:00.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:51:00.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:51:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:51:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 50, 20), 0.240505, 98.2268, 0.0, 21.4733, 11.9856, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:51:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:50:20
2026-04-12T11:51:01.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:51:01.949 [DEBUG] [Thread-188566] [transport.py] [_log()] starting thread (client mode): 0xae514460
2026-04-12T11:51:01.949 [DEBUG] [Thread-188566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:51:01.970 [DEBUG] [Thread-188566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:51:01.970 [INFO] [Thread-188566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:51:01.973 [DEBUG] [Thread-188566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] client lang: <none>
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] server lang: <none>
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] kex follows: False
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:51:01.974 [DEBUG] [Thread-188566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:51:01.975 [DEBUG] [Thread-188566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:51:01.975 [DEBUG] [Thread-188566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:51:01.975 [DEBUG] [Thread-188566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:51:01.975 [DEBUG] [Thread-188566] [transport.py] [_log()] Compression: none
2026-04-12T11:51:01.975 [DEBUG] [Thread-188566] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:51:01.993 [DEBUG] [Thread-188566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:51:01.994 [DEBUG] [Thread-188566] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:51:01.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:51:01.995 [DEBUG] [Thread-188566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:51:01.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:51:01.998 [DEBUG] [Thread-188566] [transport.py] [_log()] userauth is OK
2026-04-12T11:51:01.998 [DEBUG] [Thread-188566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:51:01.998 [DEBUG] [Thread-188566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:51:01.998 [DEBUG] [Thread-188566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:51:01.998 [DEBUG] [Thread-188566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:51:02.032 [INFO] [Thread-188566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:51:02.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:51:02.687 [DEBUG] [Thread-188566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:51:02.687 [DEBUG] [Thread-188566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:51:02.687 [DEBUG] [Thread-188566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:51:02.728 [DEBUG] [Thread-188566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:51:02.729 [DEBUG] [Thread-188566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:51:02.731 [DEBUG] [Thread-188566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:51:02.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:51:02.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:51:02.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:51:02.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:51:02.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:51:02.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:51:02.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:51:02.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:51:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:51:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.410178 -999.00  +12.00  19.66     91  +10.70 1 3 1 3 1   888    0 1.04 -9.59 ----- 16.4 19.7 273.1 23.9 15.4 -5.8 15.0 -4.6 14.3 -4.9 15.0 -4.2
2026-04-12T11:51:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:51:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:51:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.410178
2026-04-12T11:51:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:51:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:51:02.762 [DEBUG] [Thread-188566] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:51:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:51:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:51:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:51:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:50:20', tmtdew=0.240505, humidity=98.2268, cloud=0.0, wind=21.4733, temperature=11.9856, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:50:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:51:02.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:51:02.866 [DEBUG] [Thread-188569] [transport.py] [_log()] starting thread (client mode): 0xae517190
2026-04-12T11:51:02.866 [DEBUG] [Thread-188569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:51:02.880 [DEBUG] [Thread-188569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:51:02.880 [INFO] [Thread-188569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:51:02.888 [DEBUG] [Thread-188569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:51:02.888 [DEBUG] [Thread-188569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:51:02.888 [DEBUG] [Thread-188569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:51:02.888 [DEBUG] [Thread-188569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:02.888 [DEBUG] [Thread-188569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:02.888 [DEBUG] [Thread-188569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:02.888 [DEBUG] [Thread-188569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] client lang: <none>
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] server lang: <none>
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] kex follows: False
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] Compression: none
2026-04-12T11:51:02.889 [DEBUG] [Thread-188569] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:51:02.947 [DEBUG] [Thread-188569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:51:02.947 [DEBUG] [Thread-188569] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:51:02.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:51:02.949 [DEBUG] [Thread-188569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:51:02.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:51:03.003 [DEBUG] [Thread-188569] [transport.py] [_log()] userauth is OK
2026-04-12T11:51:03.003 [DEBUG] [Thread-188569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:51:03.003 [DEBUG] [Thread-188569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:51:03.004 [DEBUG] [Thread-188569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:51:03.004 [DEBUG] [Thread-188569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:51:03.022 [INFO] [Thread-188569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:51:03.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:51:03.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:51:03.825 [DEBUG] [Thread-188569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:51:03.825 [DEBUG] [Thread-188569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:51:03.873 [DEBUG] [Thread-188569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:51:03.873 [DEBUG] [Thread-188569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:51:03.882 [DEBUG] [Thread-188569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:51:03.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:51:03.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:51:03.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:51:03.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:51:03.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:51:03.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:51:03.915 [DEBUG] [Thread-188569] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:51:08.486 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:51:08.487 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:51:11.409 [DEBUG] [Thread-188571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:51:26.460 [DEBUG] [Thread-188572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:51:32.146 [DEBUG] [Thread-188573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:51:33.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:51:33.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:51:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:51:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 50, 55), 0.266125, 98.061, 0.0, 22.0032, 11.7361, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:51:35.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:50:55
2026-04-12T11:51:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:51:35.801 [DEBUG] [Thread-188574] [transport.py] [_log()] starting thread (client mode): 0xb39c6740
2026-04-12T11:51:35.801 [DEBUG] [Thread-188574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:51:35.821 [DEBUG] [Thread-188574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:51:35.821 [INFO] [Thread-188574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:51:35.824 [DEBUG] [Thread-188574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] client lang: <none>
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] server lang: <none>
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] kex follows: False
2026-04-12T11:51:35.825 [DEBUG] [Thread-188574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:51:35.826 [DEBUG] [Thread-188574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:51:35.826 [DEBUG] [Thread-188574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:51:35.826 [DEBUG] [Thread-188574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:51:35.826 [DEBUG] [Thread-188574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:51:35.826 [DEBUG] [Thread-188574] [transport.py] [_log()] Compression: none
2026-04-12T11:51:35.826 [DEBUG] [Thread-188574] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:51:35.845 [DEBUG] [Thread-188574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:51:35.846 [DEBUG] [Thread-188574] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:51:35.846 [DEBUG] [Thread-188574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:51:35.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:51:35.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:51:35.848 [DEBUG] [Thread-188574] [transport.py] [_log()] userauth is OK
2026-04-12T11:51:35.848 [DEBUG] [Thread-188574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:51:35.849 [DEBUG] [Thread-188574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:51:35.849 [DEBUG] [Thread-188574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:51:35.849 [DEBUG] [Thread-188574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:51:35.873 [INFO] [Thread-188574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:51:35.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:51:36.500 [DEBUG] [Thread-188574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:51:36.500 [DEBUG] [Thread-188574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:51:36.501 [DEBUG] [Thread-188574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:51:36.541 [DEBUG] [Thread-188574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:51:36.541 [DEBUG] [Thread-188574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:51:36.545 [DEBUG] [Thread-188574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:51:36.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:51:36.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:51:36.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:51:36.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:51:36.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:51:36.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:51:36.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:51:36.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:51:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:51:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.410525 -999.00  +12.00  16.86     91  +10.70 1 3 1 3 1   888    0 1.02 -9.67 ----- 18.8 16.9 278.4 25.0 15.4 -5.6 15.1 -4.7 14.2 -5.8 15.0 -4.0
2026-04-12T11:51:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:51:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:51:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.410525
2026-04-12T11:51:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:51:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:51:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:51:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:51:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:51:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:50:55', tmtdew=0.266125, humidity=98.061, cloud=0.0, wind=22.0032, temperature=11.7361, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:51:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:51:36.572 [DEBUG] [Thread-188574] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:51:36.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:51:36.665 [DEBUG] [Thread-188577] [transport.py] [_log()] starting thread (client mode): 0xae515330
2026-04-12T11:51:36.665 [DEBUG] [Thread-188577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:51:36.679 [DEBUG] [Thread-188577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:51:36.679 [INFO] [Thread-188577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] client lang: <none>
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] server lang: <none>
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] kex follows: False
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] Compression: none
2026-04-12T11:51:36.687 [DEBUG] [Thread-188577] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:51:36.747 [DEBUG] [Thread-188577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:51:36.748 [DEBUG] [Thread-188577] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:51:36.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:51:36.749 [DEBUG] [Thread-188577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:51:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:51:36.804 [DEBUG] [Thread-188577] [transport.py] [_log()] userauth is OK
2026-04-12T11:51:36.805 [DEBUG] [Thread-188577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:51:36.805 [DEBUG] [Thread-188577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:51:36.805 [DEBUG] [Thread-188577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:51:36.805 [DEBUG] [Thread-188577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:51:36.823 [INFO] [Thread-188577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:51:36.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:51:36.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:51:37.653 [DEBUG] [Thread-188577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:51:37.653 [DEBUG] [Thread-188577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:51:37.701 [DEBUG] [Thread-188577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:51:37.702 [DEBUG] [Thread-188577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:51:37.710 [DEBUG] [Thread-188577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:51:37.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:51:37.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:51:37.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:51:37.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:51:37.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:51:37.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:51:37.743 [DEBUG] [Thread-188577] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:51:41.496 [DEBUG] [Thread-188579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:51:56.553 [DEBUG] [Thread-188580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:52:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:52:07.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:52:07.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:52:08.634 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:52:08.635 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:52:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 51, 30), 0.268755, 98.0442, 0.0, 22.3384, 11.7359, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:52:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:51:30
2026-04-12T11:52:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:52:09.563 [DEBUG] [Thread-188581] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-12T11:52:09.563 [DEBUG] [Thread-188581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:52:09.582 [DEBUG] [Thread-188581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:52:09.582 [INFO] [Thread-188581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] client lang: <none>
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] server lang: <none>
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] kex follows: False
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:52:09.585 [DEBUG] [Thread-188581] [transport.py] [_log()] Compression: none
2026-04-12T11:52:09.586 [DEBUG] [Thread-188581] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:52:09.602 [DEBUG] [Thread-188581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:52:09.602 [DEBUG] [Thread-188581] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:52:09.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:52:09.603 [DEBUG] [Thread-188581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:52:09.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:52:09.605 [DEBUG] [Thread-188581] [transport.py] [_log()] userauth is OK
2026-04-12T11:52:09.605 [DEBUG] [Thread-188581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:52:09.605 [DEBUG] [Thread-188581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:52:09.605 [DEBUG] [Thread-188581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:52:09.605 [DEBUG] [Thread-188581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:52:09.638 [INFO] [Thread-188581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:52:09.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:52:10.261 [DEBUG] [Thread-188581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:52:10.261 [DEBUG] [Thread-188581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:52:10.261 [DEBUG] [Thread-188581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:52:10.302 [DEBUG] [Thread-188581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:52:10.302 [DEBUG] [Thread-188581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:52:10.305 [DEBUG] [Thread-188581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:52:10.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:52:10.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:52:10.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:52:10.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:52:10.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:52:10.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:52:10.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:52:10.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:52:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:52:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.410873 -999.00  +11.90  25.44     91  +10.50 1 3 1 3 1   888    0 1.04 -9.19 ----- 21.1 25.4 276.6 29.6 15.3 -5.2 15.0 -4.4 14.2 -5.6 15.0 -4.0
2026-04-12T11:52:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:52:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:52:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.410873
2026-04-12T11:52:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:52:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:52:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:52:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:52:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:52:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:51:30', tmtdew=0.268755, humidity=98.0442, cloud=0.0, wind=22.3384, temperature=11.7359, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:51:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:52:10.335 [DEBUG] [Thread-188581] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:52:10.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:52:10.429 [DEBUG] [Thread-188584] [transport.py] [_log()] starting thread (client mode): 0xb39c73a0
2026-04-12T11:52:10.429 [DEBUG] [Thread-188584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:52:10.444 [DEBUG] [Thread-188584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:52:10.444 [INFO] [Thread-188584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:52:10.451 [DEBUG] [Thread-188584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] client lang: <none>
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] server lang: <none>
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] kex follows: False
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] Compression: none
2026-04-12T11:52:10.452 [DEBUG] [Thread-188584] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:52:10.511 [DEBUG] [Thread-188584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:52:10.512 [DEBUG] [Thread-188584] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:52:10.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:52:10.513 [DEBUG] [Thread-188584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:52:10.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:52:10.567 [DEBUG] [Thread-188584] [transport.py] [_log()] userauth is OK
2026-04-12T11:52:10.568 [DEBUG] [Thread-188584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:52:10.568 [DEBUG] [Thread-188584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:52:10.568 [DEBUG] [Thread-188584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:52:10.568 [DEBUG] [Thread-188584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:52:10.587 [INFO] [Thread-188584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:52:10.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:52:10.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:52:11.431 [DEBUG] [Thread-188584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:52:11.431 [DEBUG] [Thread-188584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:52:11.479 [DEBUG] [Thread-188584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:52:11.480 [DEBUG] [Thread-188584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:52:11.489 [DEBUG] [Thread-188584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:52:11.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:52:11.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:52:11.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:52:11.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:52:11.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:52:11.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:52:11.525 [DEBUG] [Thread-188584] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:52:11.590 [DEBUG] [Thread-188586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:52:26.643 [DEBUG] [Thread-188587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:52:32.207 [DEBUG] [Thread-188588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:52:41.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:52:41.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:52:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:52:41.680 [DEBUG] [Thread-188589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:52:42.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 52, 6), 0.266255, 98.0608, 0.0, 22.7088, 11.7691, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:52:42.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:52:06
2026-04-12T11:52:43.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:52:43.378 [DEBUG] [Thread-188590] [transport.py] [_log()] starting thread (client mode): 0xb39c7340
2026-04-12T11:52:43.378 [DEBUG] [Thread-188590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:52:43.399 [DEBUG] [Thread-188590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:52:43.399 [INFO] [Thread-188590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] client lang: <none>
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] server lang: <none>
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] kex follows: False
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] Compression: none
2026-04-12T11:52:43.401 [DEBUG] [Thread-188590] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:52:43.410 [DEBUG] [Thread-188590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:52:43.410 [DEBUG] [Thread-188590] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:52:43.410 [DEBUG] [Thread-188590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:52:43.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:52:43.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:52:43.412 [DEBUG] [Thread-188590] [transport.py] [_log()] userauth is OK
2026-04-12T11:52:43.412 [DEBUG] [Thread-188590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:52:43.413 [DEBUG] [Thread-188590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:52:43.413 [DEBUG] [Thread-188590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:52:43.413 [DEBUG] [Thread-188590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:52:43.436 [INFO] [Thread-188590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:52:43.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:52:44.063 [DEBUG] [Thread-188590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:52:44.063 [DEBUG] [Thread-188590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:52:44.063 [DEBUG] [Thread-188590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:52:44.104 [DEBUG] [Thread-188590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:52:44.105 [DEBUG] [Thread-188590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:52:44.108 [DEBUG] [Thread-188590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:52:44.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:52:44.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:52:44.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:52:44.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:52:44.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:52:44.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:52:44.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:52:44.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:52:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:52:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.411220 -999.00  +11.80  22.11     91  +10.40 1 3 1 3 1   888    0 1.07 -8.48 ----- 16.3 22.1 284.4 25.1 15.2 -4.2 14.9 -3.7 14.2 -5.4 14.9 -4.0
2026-04-12T11:52:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:52:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:52:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.411220
2026-04-12T11:52:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:52:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:52:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:52:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:52:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:52:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:52:06', tmtdew=0.266255, humidity=98.0608, cloud=0.0, wind=22.7088, temperature=11.7691, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:52:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:52:44.136 [DEBUG] [Thread-188590] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:52:44.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:52:44.232 [DEBUG] [Thread-188593] [transport.py] [_log()] starting thread (client mode): 0xb39c5ea0
2026-04-12T11:52:44.233 [DEBUG] [Thread-188593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:52:44.247 [DEBUG] [Thread-188593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:52:44.247 [INFO] [Thread-188593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:52:44.255 [DEBUG] [Thread-188593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:52:44.256 [DEBUG] [Thread-188593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:52:44.256 [DEBUG] [Thread-188593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:52:44.256 [DEBUG] [Thread-188593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:44.256 [DEBUG] [Thread-188593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:52:44.256 [DEBUG] [Thread-188593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:44.256 [DEBUG] [Thread-188593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:52:44.256 [DEBUG] [Thread-188593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] client lang: <none>
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] server lang: <none>
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] kex follows: False
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:52:44.257 [DEBUG] [Thread-188593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:52:44.258 [DEBUG] [Thread-188593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:52:44.258 [DEBUG] [Thread-188593] [transport.py] [_log()] Compression: none
2026-04-12T11:52:44.258 [DEBUG] [Thread-188593] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:52:44.313 [DEBUG] [Thread-188593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:52:44.313 [DEBUG] [Thread-188593] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:52:44.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:52:44.314 [DEBUG] [Thread-188593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:52:44.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:52:44.374 [DEBUG] [Thread-188593] [transport.py] [_log()] userauth is OK
2026-04-12T11:52:44.374 [DEBUG] [Thread-188593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:52:44.374 [DEBUG] [Thread-188593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:52:44.374 [DEBUG] [Thread-188593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:52:44.375 [DEBUG] [Thread-188593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:52:44.393 [INFO] [Thread-188593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:52:44.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:52:44.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:52:45.222 [DEBUG] [Thread-188593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:52:45.222 [DEBUG] [Thread-188593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:52:45.270 [DEBUG] [Thread-188593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:52:45.270 [DEBUG] [Thread-188593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:52:45.279 [DEBUG] [Thread-188593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:52:45.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:52:45.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:52:45.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:52:45.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:52:45.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:52:45.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:52:45.316 [DEBUG] [Thread-188593] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:52:56.718 [DEBUG] [Thread-188595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:53:08.788 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:53:08.789 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:53:11.775 [DEBUG] [Thread-188596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:53:15.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:53:15.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:53:15.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:53:16.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 52, 42), 0.42201, 97.1882, 0.0, 26.393, 12.3052, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:53:16.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:52:42
2026-04-12T11:53:16.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:53:17.126 [DEBUG] [Thread-188597] [transport.py] [_log()] starting thread (client mode): 0xb39c7550
2026-04-12T11:53:17.126 [DEBUG] [Thread-188597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:53:17.146 [DEBUG] [Thread-188597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:53:17.146 [INFO] [Thread-188597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] client lang: <none>
2026-04-12T11:53:17.150 [DEBUG] [Thread-188597] [transport.py] [_log()] server lang: <none>
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] kex follows: False
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] Compression: none
2026-04-12T11:53:17.151 [DEBUG] [Thread-188597] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:53:17.170 [DEBUG] [Thread-188597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:53:17.171 [DEBUG] [Thread-188597] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:53:17.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:53:17.172 [DEBUG] [Thread-188597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:53:17.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:53:17.174 [DEBUG] [Thread-188597] [transport.py] [_log()] userauth is OK
2026-04-12T11:53:17.174 [DEBUG] [Thread-188597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:53:17.174 [DEBUG] [Thread-188597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:53:17.175 [DEBUG] [Thread-188597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:53:17.175 [DEBUG] [Thread-188597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:53:17.199 [INFO] [Thread-188597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:53:17.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:53:17.831 [DEBUG] [Thread-188597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:53:17.832 [DEBUG] [Thread-188597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:53:17.832 [DEBUG] [Thread-188597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:53:17.873 [DEBUG] [Thread-188597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:53:17.873 [DEBUG] [Thread-188597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:53:17.875 [DEBUG] [Thread-188597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:53:17.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:53:17.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:53:17.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:53:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:53:17.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:53:17.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:53:17.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:53:17.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:53:17.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:53:17.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.411567 -999.00  +11.80  16.21     91  +10.40 1 3 1 3 1   888    0 1.09 -7.90 ----- 19.8 16.2 289.8 23.3 15.3 -3.9 14.9 -3.5 14.3 -3.4 14.9 -3.6
2026-04-12T11:53:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:53:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:53:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.411567
2026-04-12T11:53:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:53:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:53:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:53:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:53:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:53:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:52:42', tmtdew=0.42201, humidity=97.1882, cloud=0.0, wind=26.393, temperature=12.3052, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:52:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:53:17.900 [DEBUG] [Thread-188597] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:53:17.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:53:17.997 [DEBUG] [Thread-188600] [transport.py] [_log()] starting thread (client mode): 0xa796afb0
2026-04-12T11:53:17.997 [DEBUG] [Thread-188600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:53:18.012 [DEBUG] [Thread-188600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:53:18.012 [INFO] [Thread-188600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:53:18.019 [DEBUG] [Thread-188600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:53:18.020 [DEBUG] [Thread-188600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] client lang: <none>
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] server lang: <none>
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] kex follows: False
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:53:18.021 [DEBUG] [Thread-188600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:53:18.022 [DEBUG] [Thread-188600] [transport.py] [_log()] Compression: none
2026-04-12T11:53:18.022 [DEBUG] [Thread-188600] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:53:18.080 [DEBUG] [Thread-188600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:53:18.080 [DEBUG] [Thread-188600] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:53:18.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:53:18.082 [DEBUG] [Thread-188600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:53:18.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:53:18.139 [DEBUG] [Thread-188600] [transport.py] [_log()] userauth is OK
2026-04-12T11:53:18.140 [DEBUG] [Thread-188600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:53:18.140 [DEBUG] [Thread-188600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:53:18.140 [DEBUG] [Thread-188600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:53:18.140 [DEBUG] [Thread-188600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:53:18.159 [INFO] [Thread-188600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:53:18.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:53:18.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:53:19.020 [DEBUG] [Thread-188600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:53:19.020 [DEBUG] [Thread-188600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:53:19.068 [DEBUG] [Thread-188600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:53:19.068 [DEBUG] [Thread-188600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:53:19.077 [DEBUG] [Thread-188600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:53:19.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:53:19.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:53: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') -> 00000000
2026-04-12T11:53:19.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:53:19.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:53:19.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:53:19.116 [DEBUG] [Thread-188600] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:53:26.816 [DEBUG] [Thread-188602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:53:32.260 [DEBUG] [Thread-188603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:53:41.870 [DEBUG] [Thread-188604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:53:49.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:53:49.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:53:49.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:53:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 53, 17), 0.21873, 98.5444, 0.0, 21.632, 11.636, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:53:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:53:17
2026-04-12T11:53:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:53:51.026 [DEBUG] [Thread-188605] [transport.py] [_log()] starting thread (client mode): 0xb0fb41f0
2026-04-12T11:53:51.026 [DEBUG] [Thread-188605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:53:51.046 [DEBUG] [Thread-188605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:53:51.046 [INFO] [Thread-188605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:53:51.049 [DEBUG] [Thread-188605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:53:51.049 [DEBUG] [Thread-188605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] client lang: <none>
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] server lang: <none>
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] kex follows: False
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:53:51.050 [DEBUG] [Thread-188605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:53:51.051 [DEBUG] [Thread-188605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:53:51.051 [DEBUG] [Thread-188605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:53:51.051 [DEBUG] [Thread-188605] [transport.py] [_log()] Compression: none
2026-04-12T11:53:51.051 [DEBUG] [Thread-188605] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:53:51.069 [DEBUG] [Thread-188605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:53:51.070 [DEBUG] [Thread-188605] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:53:51.071 [DEBUG] [Thread-188605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:53:51.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:53:51.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:53:51.073 [DEBUG] [Thread-188605] [transport.py] [_log()] userauth is OK
2026-04-12T11:53:51.073 [DEBUG] [Thread-188605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:53:51.074 [DEBUG] [Thread-188605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:53:51.074 [DEBUG] [Thread-188605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:53:51.074 [DEBUG] [Thread-188605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:53:51.091 [INFO] [Thread-188605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:53:51.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:53:51.748 [DEBUG] [Thread-188605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:53:51.748 [DEBUG] [Thread-188605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:53:51.748 [DEBUG] [Thread-188605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:53:51.789 [DEBUG] [Thread-188605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:53:51.789 [DEBUG] [Thread-188605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:53:51.792 [DEBUG] [Thread-188605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:53:51.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:53:51.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:53:51.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:53:51.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:53:51.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:53:51.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:53:51.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:53:51.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:53:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:53:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.411914 -999.00  +11.80  22.75     91  +10.50 1 3 1 3 1   888    0 1.09 -7.22 ----- 20.5 22.8 268.8 26.5 15.2 -4.4 14.9 -3.5 14.2 -3.9 14.9 -3.7
2026-04-12T11:53:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:53:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:53:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.411914
2026-04-12T11:53:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:53:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:53:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:53:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:53:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:53:51.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:53:17', tmtdew=0.21873, humidity=98.5444, cloud=0.0, wind=21.632, temperature=11.636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:53:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:53:51.815 [DEBUG] [Thread-188605] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:53:51.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:53:51.917 [DEBUG] [Thread-188608] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ba0
2026-04-12T11:53:51.917 [DEBUG] [Thread-188608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:53:51.932 [DEBUG] [Thread-188608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:53:51.932 [INFO] [Thread-188608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:53:51.939 [DEBUG] [Thread-188608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:53:51.940 [DEBUG] [Thread-188608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:53:51.940 [DEBUG] [Thread-188608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:53:51.940 [DEBUG] [Thread-188608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:51.940 [DEBUG] [Thread-188608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:53:51.940 [DEBUG] [Thread-188608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:51.940 [DEBUG] [Thread-188608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] client lang: <none>
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] server lang: <none>
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] kex follows: False
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] Compression: none
2026-04-12T11:53:51.941 [DEBUG] [Thread-188608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:53:52.001 [DEBUG] [Thread-188608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:53:52.001 [DEBUG] [Thread-188608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:53:52.002 [DEBUG] [Thread-188608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:53:52.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:53:52.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:53:52.060 [DEBUG] [Thread-188608] [transport.py] [_log()] userauth is OK
2026-04-12T11:53:52.060 [DEBUG] [Thread-188608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:53:52.060 [DEBUG] [Thread-188608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:53:52.060 [DEBUG] [Thread-188608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:53:52.060 [DEBUG] [Thread-188608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:53:52.078 [INFO] [Thread-188608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:53:52.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:53:52.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:53:52.958 [DEBUG] [Thread-188608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:53:52.958 [DEBUG] [Thread-188608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:53:53.006 [DEBUG] [Thread-188608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:53:53.007 [DEBUG] [Thread-188608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:53:53.016 [DEBUG] [Thread-188608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:53:53.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:53:53.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:53:53.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:53:53.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:53:53.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:53:53.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:53:53.052 [DEBUG] [Thread-188608] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:53:56.911 [DEBUG] [Thread-188610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:08.929 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:08.930 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:11.965 [DEBUG] [Thread-188611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:54:23.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:54:23.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:54:24.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 53, 52), 0.44297, 97.0551, 0.0, 26.7811, 12.3712, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:54:24.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:53:52
2026-04-12T11:54:24.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:54:24.858 [DEBUG] [Thread-188612] [transport.py] [_log()] starting thread (client mode): 0xa7969ea0
2026-04-12T11:54:24.858 [DEBUG] [Thread-188612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:54:24.879 [DEBUG] [Thread-188612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:54:24.879 [INFO] [Thread-188612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:54:24.882 [DEBUG] [Thread-188612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:54:24.882 [DEBUG] [Thread-188612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] client lang: <none>
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] server lang: <none>
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] kex follows: False
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:54:24.883 [DEBUG] [Thread-188612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:54:24.884 [DEBUG] [Thread-188612] [transport.py] [_log()] Compression: none
2026-04-12T11:54:24.884 [DEBUG] [Thread-188612] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:54:24.900 [DEBUG] [Thread-188612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:54:24.900 [DEBUG] [Thread-188612] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:54:24.901 [DEBUG] [Thread-188612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:54:24.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:54:24.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:54:24.903 [DEBUG] [Thread-188612] [transport.py] [_log()] userauth is OK
2026-04-12T11:54:24.903 [DEBUG] [Thread-188612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:54:24.903 [DEBUG] [Thread-188612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:54:24.903 [DEBUG] [Thread-188612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:54:24.903 [DEBUG] [Thread-188612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:54:24.922 [INFO] [Thread-188612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:54:24.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:54:25.574 [DEBUG] [Thread-188612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:54:25.574 [DEBUG] [Thread-188612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:54:25.574 [DEBUG] [Thread-188612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:54:25.615 [DEBUG] [Thread-188612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:54:25.615 [DEBUG] [Thread-188612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:54:25.619 [DEBUG] [Thread-188612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:54:25.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:54:25.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:54:25.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:54:25.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:54:25.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:54:25.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:54:25.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:54:25.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:54:25.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:54:25.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.412609 -999.00  +11.70  25.35     91  +10.40 1 3 1 3 1   888    0 1.12 -5.69 ----- 23.1 25.4 273.6 31.4 15.2 -4.1 14.9 -3.7 14.1 -4.2 14.8 -3.6
2026-04-12T11:54:25.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:54:25.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:54:25.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.412609
2026-04-12T11:54:25.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:54:25.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:54:25.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:54:25.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:54:25.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:54:25.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:53:52', tmtdew=0.44297, humidity=97.0551, cloud=0.0, wind=26.7811, temperature=12.3712, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:54:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:54:25.646 [DEBUG] [Thread-188612] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:54:25.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:54:25.753 [DEBUG] [Thread-188615] [transport.py] [_log()] starting thread (client mode): 0xae514250
2026-04-12T11:54:25.753 [DEBUG] [Thread-188615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:54:25.769 [DEBUG] [Thread-188615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:54:25.769 [INFO] [Thread-188615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] client lang: <none>
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] server lang: <none>
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] kex follows: False
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:54:25.777 [DEBUG] [Thread-188615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:54:25.778 [DEBUG] [Thread-188615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:54:25.778 [DEBUG] [Thread-188615] [transport.py] [_log()] Compression: none
2026-04-12T11:54:25.778 [DEBUG] [Thread-188615] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:54:25.842 [DEBUG] [Thread-188615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:54:25.842 [DEBUG] [Thread-188615] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:54:25.843 [DEBUG] [Thread-188615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:54:25.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:54:25.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:54:25.902 [DEBUG] [Thread-188615] [transport.py] [_log()] userauth is OK
2026-04-12T11:54:25.902 [DEBUG] [Thread-188615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:54:25.903 [DEBUG] [Thread-188615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:54:25.903 [DEBUG] [Thread-188615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:54:25.903 [DEBUG] [Thread-188615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:54:25.921 [INFO] [Thread-188615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:54:25.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:54:25.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:54:26.795 [DEBUG] [Thread-188615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:54:26.796 [DEBUG] [Thread-188615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:54:26.843 [DEBUG] [Thread-188615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:54:26.843 [DEBUG] [Thread-188615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:54:26.852 [DEBUG] [Thread-188615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:54:26.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:54:26.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:54:26.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
2026-04-12T11:54:26.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:54:26.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:54:26.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:54:26.890 [DEBUG] [Thread-188615] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:54:27.000 [DEBUG] [Thread-188617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:32.317 [DEBUG] [Thread-188618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:42.062 [DEBUG] [Thread-188619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:54:56.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:54:56.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:54:57.101 [DEBUG] [Thread-188620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:54:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 54, 28), 0.279125, 97.9778, 0.0, 23.1851, 11.7859, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:54:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:54:28
2026-04-12T11:54:58.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:54:58.670 [DEBUG] [Thread-188621] [transport.py] [_log()] starting thread (client mode): 0xa796ab00
2026-04-12T11:54:58.670 [DEBUG] [Thread-188621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:54:58.690 [DEBUG] [Thread-188621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:54:58.690 [INFO] [Thread-188621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:54:58.693 [DEBUG] [Thread-188621] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:54:58.693 [DEBUG] [Thread-188621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:54:58.693 [DEBUG] [Thread-188621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] client lang: <none>
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] server lang: <none>
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] kex follows: False
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] Compression: none
2026-04-12T11:54:58.694 [DEBUG] [Thread-188621] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:54:58.702 [DEBUG] [Thread-188621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:54:58.702 [DEBUG] [Thread-188621] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:54:58.703 [DEBUG] [Thread-188621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:54:58.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:54:58.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:54:58.704 [DEBUG] [Thread-188621] [transport.py] [_log()] userauth is OK
2026-04-12T11:54:58.704 [DEBUG] [Thread-188621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:54:58.705 [DEBUG] [Thread-188621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:54:58.705 [DEBUG] [Thread-188621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:54:58.705 [DEBUG] [Thread-188621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:54:58.720 [INFO] [Thread-188621] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:54:58.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:54:59.289 [DEBUG] [Thread-188621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:54:59.289 [DEBUG] [Thread-188621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:54:59.290 [DEBUG] [Thread-188621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:54:59.330 [DEBUG] [Thread-188621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:54:59.330 [DEBUG] [Thread-188621] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:54:59.334 [DEBUG] [Thread-188621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:54:59.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:54:59.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:54:59.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:54:59.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:54:59.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:54:59.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:54:59.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:54:59.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:54:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:54:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.412956 -999.00  +11.60  26.04     91  +10.30 1 3 1 3 1   888    0 1.14 -5.19 ----- 25.6 26.0 278.8 31.4 15.1 -4.2 14.8 -3.6 14.1 -4.6 14.7 -3.6
2026-04-12T11:54:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:54:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:54:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.412956
2026-04-12T11:54:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:54:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:54:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:54:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:54:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:54:59.359 [DEBUG] [Thread-188621] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:54:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:54:28', tmtdew=0.279125, humidity=97.9778, cloud=0.0, wind=23.1851, temperature=11.7859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:54:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:54:59.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:54:59.457 [DEBUG] [Thread-188624] [transport.py] [_log()] starting thread (client mode): 0xa7968940
2026-04-12T11:54:59.457 [DEBUG] [Thread-188624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:54:59.472 [DEBUG] [Thread-188624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:54:59.472 [INFO] [Thread-188624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:54:59.480 [DEBUG] [Thread-188624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:54:59.480 [DEBUG] [Thread-188624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:54:59.480 [DEBUG] [Thread-188624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:54:59.480 [DEBUG] [Thread-188624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:59.480 [DEBUG] [Thread-188624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:54:59.480 [DEBUG] [Thread-188624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] client lang: <none>
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] server lang: <none>
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] kex follows: False
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:54:59.481 [DEBUG] [Thread-188624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:54:59.482 [DEBUG] [Thread-188624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:54:59.482 [DEBUG] [Thread-188624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:54:59.482 [DEBUG] [Thread-188624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:54:59.482 [DEBUG] [Thread-188624] [transport.py] [_log()] Compression: none
2026-04-12T11:54:59.482 [DEBUG] [Thread-188624] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:54:59.541 [DEBUG] [Thread-188624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:54:59.542 [DEBUG] [Thread-188624] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:54:59.543 [DEBUG] [Thread-188624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:54:59.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:54:59.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:54:59.597 [DEBUG] [Thread-188624] [transport.py] [_log()] userauth is OK
2026-04-12T11:54:59.597 [DEBUG] [Thread-188624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:54:59.597 [DEBUG] [Thread-188624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:54:59.598 [DEBUG] [Thread-188624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:54:59.598 [DEBUG] [Thread-188624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:54:59.617 [INFO] [Thread-188624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:54:59.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:54:59.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:55:00.404 [DEBUG] [Thread-188624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:55:00.404 [DEBUG] [Thread-188624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:55:00.453 [DEBUG] [Thread-188624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:55:00.453 [DEBUG] [Thread-188624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:55:00.461 [DEBUG] [Thread-188624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:55:00.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:55:00.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:55:00.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:55:00.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:55:00.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:55:00.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:55:00.494 [DEBUG] [Thread-188624] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:55:09.082 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:55:09.083 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:55:12.137 [DEBUG] [Thread-188626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:55:27.191 [DEBUG] [Thread-188627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:55:30.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:55:30.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:55:30.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:55:31.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 55, 3), 0.279115, 97.9776, 0.0, 22.55, 11.7692, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:55:31.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:55:03
2026-04-12T11:55:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:55:32.339 [DEBUG] [Thread-188628] [transport.py] [_log()] starting thread (client mode): 0xb0fb66b0
2026-04-12T11:55:32.339 [DEBUG] [Thread-188628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:55:32.360 [DEBUG] [Thread-188629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:55:32.366 [DEBUG] [Thread-188628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:55:32.366 [INFO] [Thread-188628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] client lang: <none>
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] server lang: <none>
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] kex follows: False
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] Compression: none
2026-04-12T11:55:32.369 [DEBUG] [Thread-188628] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:55:32.385 [DEBUG] [Thread-188628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:55:32.385 [DEBUG] [Thread-188628] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:55:32.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:55:32.385 [DEBUG] [Thread-188628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:55:32.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:55:32.386 [DEBUG] [Thread-188628] [transport.py] [_log()] userauth is OK
2026-04-12T11:55:32.387 [DEBUG] [Thread-188628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:55:32.387 [DEBUG] [Thread-188628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:55:32.387 [DEBUG] [Thread-188628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:55:32.387 [DEBUG] [Thread-188628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:55:32.408 [INFO] [Thread-188628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:55:32.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:55:33.068 [DEBUG] [Thread-188628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:55:33.068 [DEBUG] [Thread-188628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:55:33.069 [DEBUG] [Thread-188628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:55:33.109 [DEBUG] [Thread-188628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:55:33.109 [DEBUG] [Thread-188628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:55:33.112 [DEBUG] [Thread-188628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:55:33.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:55:33.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:55:33.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:55:33.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:55:33.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:55:33.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:55:33.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:55:33.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:55:33.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:55:33.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.413303 -999.00  +11.60  19.60     91  +10.30 1 3 1 3 1   888    0 1.13 -4.74 ----- 21.8 19.6 279.0 30.9 15.1 -4.3 14.8 -3.3 14.0 -4.5 14.7 -2.8
2026-04-12T11:55:33.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.413303
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:55:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:55:03', tmtdew=0.279115, humidity=97.9776, cloud=0.0, wind=22.55, temperature=11.7692, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:55:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:55:33.136 [DEBUG] [Thread-188628] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:55:33.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:55:33.221 [DEBUG] [Thread-188632] [transport.py] [_log()] starting thread (client mode): 0xb0fb55a0
2026-04-12T11:55:33.222 [DEBUG] [Thread-188632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:55:33.236 [DEBUG] [Thread-188632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:55:33.236 [INFO] [Thread-188632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:55:33.244 [DEBUG] [Thread-188632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:55:33.244 [DEBUG] [Thread-188632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:55:33.244 [DEBUG] [Thread-188632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:55:33.244 [DEBUG] [Thread-188632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] client lang: <none>
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] server lang: <none>
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] kex follows: False
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:55:33.245 [DEBUG] [Thread-188632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:55:33.246 [DEBUG] [Thread-188632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:55:33.246 [DEBUG] [Thread-188632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:55:33.246 [DEBUG] [Thread-188632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:55:33.246 [DEBUG] [Thread-188632] [transport.py] [_log()] Compression: none
2026-04-12T11:55:33.246 [DEBUG] [Thread-188632] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:55:33.304 [DEBUG] [Thread-188632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:55:33.305 [DEBUG] [Thread-188632] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:55:33.305 [DEBUG] [Thread-188632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:55:33.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:55:33.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:55:33.360 [DEBUG] [Thread-188632] [transport.py] [_log()] userauth is OK
2026-04-12T11:55:33.360 [DEBUG] [Thread-188632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:55:33.360 [DEBUG] [Thread-188632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:55:33.360 [DEBUG] [Thread-188632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:55:33.361 [DEBUG] [Thread-188632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:55:33.380 [INFO] [Thread-188632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:55:33.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:55:33.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:55:34.187 [DEBUG] [Thread-188632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:55:34.187 [DEBUG] [Thread-188632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:55:34.234 [DEBUG] [Thread-188632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:55:34.235 [DEBUG] [Thread-188632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:55:34.243 [DEBUG] [Thread-188632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:55:34.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:55:34.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:55:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:55:34.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:55:34.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:55:34.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:55:34.278 [DEBUG] [Thread-188632] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:55:42.228 [DEBUG] [Thread-188634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:55:57.283 [DEBUG] [Thread-188635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:56:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:56:04.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:56:04.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:56:05.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 55, 39), 0.43811, 97.0878, 0.0, 25.123, 12.4705, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:56:05.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:55:39
2026-04-12T11:56:05.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:56:06.151 [DEBUG] [Thread-188636] [transport.py] [_log()] starting thread (client mode): 0xae516fb0
2026-04-12T11:56:06.151 [DEBUG] [Thread-188636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:56:06.171 [DEBUG] [Thread-188636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:56:06.171 [INFO] [Thread-188636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] client lang: <none>
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] server lang: <none>
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] kex follows: False
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:56:06.175 [DEBUG] [Thread-188636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:56:06.176 [DEBUG] [Thread-188636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:56:06.176 [DEBUG] [Thread-188636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:56:06.176 [DEBUG] [Thread-188636] [transport.py] [_log()] Compression: none
2026-04-12T11:56:06.176 [DEBUG] [Thread-188636] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:56:06.192 [DEBUG] [Thread-188636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:56:06.193 [DEBUG] [Thread-188636] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:56:06.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:56:06.193 [DEBUG] [Thread-188636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:56:06.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:56:06.195 [DEBUG] [Thread-188636] [transport.py] [_log()] userauth is OK
2026-04-12T11:56:06.196 [DEBUG] [Thread-188636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:56:06.196 [DEBUG] [Thread-188636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:56:06.196 [DEBUG] [Thread-188636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:56:06.196 [DEBUG] [Thread-188636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:56:06.220 [INFO] [Thread-188636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:56:06.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:56:06.842 [DEBUG] [Thread-188636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:56:06.842 [DEBUG] [Thread-188636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:56:06.843 [DEBUG] [Thread-188636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:56:06.883 [DEBUG] [Thread-188636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:56:06.884 [DEBUG] [Thread-188636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:56:06.887 [DEBUG] [Thread-188636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:56:06.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:56:06.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:56:06.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:56:06.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:56:06.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:56:06.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:56:06.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:56:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:56:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:56:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.413650 -999.00  +11.60  18.54     91  +10.20 1 3 1 3 1   888    0 1.21 -3.79 ----- 21.2 18.5 281.0 31.1 15.1 -4.3 14.8 -3.4 14.1 -3.4 14.7 -3.2
2026-04-12T11:56:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:56:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:56:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.413650
2026-04-12T11:56:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:56:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:56:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:56:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:56:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:56:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:55:39', tmtdew=0.43811, humidity=97.0878, cloud=0.0, wind=25.123, temperature=12.4705, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:55:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:56:06.912 [DEBUG] [Thread-188636] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:56:06.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:56:07.003 [DEBUG] [Thread-188639] [transport.py] [_log()] starting thread (client mode): 0xa7969ff0
2026-04-12T11:56:07.004 [DEBUG] [Thread-188639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:56:07.018 [DEBUG] [Thread-188639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:56:07.018 [INFO] [Thread-188639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:56:07.026 [DEBUG] [Thread-188639] [transport.py] [_log()] client lang: <none>
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] server lang: <none>
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] kex follows: False
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] Compression: none
2026-04-12T11:56:07.027 [DEBUG] [Thread-188639] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:56:07.085 [DEBUG] [Thread-188639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:56:07.086 [DEBUG] [Thread-188639] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:56:07.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:56:07.087 [DEBUG] [Thread-188639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:56:07.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:56:07.145 [DEBUG] [Thread-188639] [transport.py] [_log()] userauth is OK
2026-04-12T11:56:07.145 [DEBUG] [Thread-188639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:56:07.145 [DEBUG] [Thread-188639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:56:07.145 [DEBUG] [Thread-188639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:56:07.145 [DEBUG] [Thread-188639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:56:07.164 [INFO] [Thread-188639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:56:07.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:56:07.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:56:07.978 [DEBUG] [Thread-188639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:56:07.978 [DEBUG] [Thread-188639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:56:08.025 [DEBUG] [Thread-188639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:56:08.026 [DEBUG] [Thread-188639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:56:08.034 [DEBUG] [Thread-188639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:56:08.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:56: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')
2026-04-12T11:56:08.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:56:08.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:56:08.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:56:08.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:56:08.068 [DEBUG] [Thread-188639] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:56:09.238 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:56:09.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:56:12.322 [DEBUG] [Thread-188641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:56:27.383 [DEBUG] [Thread-188642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:56:32.410 [DEBUG] [Thread-188643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:56:38.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:56:38.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:56:38.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:56:39.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 56, 14), 0.28454, 97.9447, 0.0, 23.9267, 11.7188, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:56:39.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:56:14
2026-04-12T11:56:39.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:56:39.902 [DEBUG] [Thread-188644] [transport.py] [_log()] starting thread (client mode): 0xa7969a80
2026-04-12T11:56:39.902 [DEBUG] [Thread-188644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:56:39.923 [DEBUG] [Thread-188644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:56:39.923 [INFO] [Thread-188644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:56:39.926 [DEBUG] [Thread-188644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] client lang: <none>
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] server lang: <none>
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] kex follows: False
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:56:39.927 [DEBUG] [Thread-188644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:56:39.928 [DEBUG] [Thread-188644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:56:39.928 [DEBUG] [Thread-188644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:56:39.928 [DEBUG] [Thread-188644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:56:39.928 [DEBUG] [Thread-188644] [transport.py] [_log()] Compression: none
2026-04-12T11:56:39.928 [DEBUG] [Thread-188644] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:56:39.947 [DEBUG] [Thread-188644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:56:39.948 [DEBUG] [Thread-188644] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:56:39.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:56:39.949 [DEBUG] [Thread-188644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:56:39.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:56:39.951 [DEBUG] [Thread-188644] [transport.py] [_log()] userauth is OK
2026-04-12T11:56:39.951 [DEBUG] [Thread-188644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:56:39.951 [DEBUG] [Thread-188644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:56:39.951 [DEBUG] [Thread-188644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:56:39.951 [DEBUG] [Thread-188644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:56:39.973 [INFO] [Thread-188644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:56:39.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:56:40.602 [DEBUG] [Thread-188644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:56:40.603 [DEBUG] [Thread-188644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:56:40.603 [DEBUG] [Thread-188644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:56:40.644 [DEBUG] [Thread-188644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:56:40.644 [DEBUG] [Thread-188644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:56:40.646 [DEBUG] [Thread-188644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:56:40.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:56:40.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:56:40.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:56:40.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:56:40.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:56:40.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:56:40.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:56:40.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:56:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:56:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.413997 -999.00  +11.60  30.06     92  +10.40 1 3 2 3 1   888    0 1.19 -3.50 ----- 24.3 30.1 269.6 32.7 15.1 -4.8 14.8 -3.3 14.1 -3.1 14.7 -3.1
2026-04-12T11:56:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:56:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:56:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.413997
2026-04-12T11:56:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:56:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:56:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:56:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:56:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:56:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:56:14', tmtdew=0.28454, humidity=97.9447, cloud=0.0, wind=23.9267, temperature=11.7188, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:56:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:56:40.663 [DEBUG] [Thread-188644] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:56:40.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:56:40.745 [DEBUG] [Thread-188647] [transport.py] [_log()] starting thread (client mode): 0xa796b7c0
2026-04-12T11:56:40.746 [DEBUG] [Thread-188647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:56:40.760 [DEBUG] [Thread-188647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:56:40.760 [INFO] [Thread-188647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] client lang: <none>
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] server lang: <none>
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] kex follows: False
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] Compression: none
2026-04-12T11:56:40.768 [DEBUG] [Thread-188647] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:56:40.828 [DEBUG] [Thread-188647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:56:40.828 [DEBUG] [Thread-188647] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:56:40.829 [DEBUG] [Thread-188647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:56:40.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:56:40.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:56:40.884 [DEBUG] [Thread-188647] [transport.py] [_log()] userauth is OK
2026-04-12T11:56:40.884 [DEBUG] [Thread-188647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:56:40.884 [DEBUG] [Thread-188647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:56:40.884 [DEBUG] [Thread-188647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:56:40.884 [DEBUG] [Thread-188647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:56:40.898 [INFO] [Thread-188647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:56:40.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:56:40.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:56:41.713 [DEBUG] [Thread-188647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:56:41.714 [DEBUG] [Thread-188647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:56:41.762 [DEBUG] [Thread-188647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:56:41.762 [DEBUG] [Thread-188647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:56:41.772 [DEBUG] [Thread-188647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:56:41.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:56:41.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:56:41.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:56:41.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:56:41.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:56:41.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:56:41.808 [DEBUG] [Thread-188647] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:56:42.421 [DEBUG] [Thread-188649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:56:57.471 [DEBUG] [Thread-188650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:57:09.379 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:57:09.380 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:57:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:57:11.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:57:11.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:57:12.509 [DEBUG] [Thread-188651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:57:13.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 56, 49), 0.48466, 96.7899, 0.0, 26.887, 12.4376, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:57:13.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:56:49
2026-04-12T11:57:13.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:57:13.623 [DEBUG] [Thread-188652] [transport.py] [_log()] starting thread (client mode): 0xa796b0a0
2026-04-12T11:57:13.623 [DEBUG] [Thread-188652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:57:13.643 [DEBUG] [Thread-188652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:57:13.643 [INFO] [Thread-188652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] client lang: <none>
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] server lang: <none>
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] kex follows: False
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:57:13.646 [DEBUG] [Thread-188652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:57:13.647 [DEBUG] [Thread-188652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:57:13.647 [DEBUG] [Thread-188652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:57:13.647 [DEBUG] [Thread-188652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:57:13.647 [DEBUG] [Thread-188652] [transport.py] [_log()] Compression: none
2026-04-12T11:57:13.647 [DEBUG] [Thread-188652] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:57:13.664 [DEBUG] [Thread-188652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:57:13.664 [DEBUG] [Thread-188652] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:57:13.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:57:13.665 [DEBUG] [Thread-188652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:57:13.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:57:13.667 [DEBUG] [Thread-188652] [transport.py] [_log()] userauth is OK
2026-04-12T11:57:13.667 [DEBUG] [Thread-188652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:57:13.667 [DEBUG] [Thread-188652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:57:13.667 [DEBUG] [Thread-188652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:57:13.667 [DEBUG] [Thread-188652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:57:13.684 [INFO] [Thread-188652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:57:13.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:57:14.303 [DEBUG] [Thread-188652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:57:14.303 [DEBUG] [Thread-188652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:57:14.304 [DEBUG] [Thread-188652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:57:14.344 [DEBUG] [Thread-188652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:57:14.344 [DEBUG] [Thread-188652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:57:14.361 [DEBUG] [Thread-188652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:57:14.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:57:14.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:57:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:57:14.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:57:14.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:57:14.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:57:14.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:57:14.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:57:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:57:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.414345 -999.00  +11.80  16.33     92  +10.50 1 3 1 3 1   888    0 1.18 -2.54 ----- 18.6 16.3 273.8 23.7 15.2 -4.0 14.7 -3.5 14.0 -3.4 14.7 -2.7
2026-04-12T11:57:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:57:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:57:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.414345
2026-04-12T11:57:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:57:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:57:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:57:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:57:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:57:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:56:49', tmtdew=0.48466, humidity=96.7899, cloud=0.0, wind=26.887, temperature=12.4376, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:56:39.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:57:14.383 [DEBUG] [Thread-188652] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:57:14.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:57:14.475 [DEBUG] [Thread-188655] [transport.py] [_log()] starting thread (client mode): 0xa7969120
2026-04-12T11:57:14.476 [DEBUG] [Thread-188655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:57:14.490 [DEBUG] [Thread-188655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:57:14.490 [INFO] [Thread-188655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:57:14.497 [DEBUG] [Thread-188655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:57:14.497 [DEBUG] [Thread-188655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] client lang: <none>
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] server lang: <none>
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] kex follows: False
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] Compression: none
2026-04-12T11:57:14.498 [DEBUG] [Thread-188655] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:57:14.556 [DEBUG] [Thread-188655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:57:14.557 [DEBUG] [Thread-188655] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:57:14.557 [DEBUG] [Thread-188655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:57:14.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:57:14.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:57:14.613 [DEBUG] [Thread-188655] [transport.py] [_log()] userauth is OK
2026-04-12T11:57:14.613 [DEBUG] [Thread-188655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:57:14.613 [DEBUG] [Thread-188655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:57:14.613 [DEBUG] [Thread-188655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:57:14.614 [DEBUG] [Thread-188655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:57:14.632 [INFO] [Thread-188655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:57:14.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:57:14.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:57:15.487 [DEBUG] [Thread-188655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:57:15.487 [DEBUG] [Thread-188655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:57:15.535 [DEBUG] [Thread-188655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:57:15.535 [DEBUG] [Thread-188655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:57:15.544 [DEBUG] [Thread-188655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:57:15.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:57:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:57:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:57:15.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:57:15.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:57:15.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:57:15.579 [DEBUG] [Thread-188655] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:57:27.546 [DEBUG] [Thread-188657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:57:32.489 [DEBUG] [Thread-188658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:57:42.600 [DEBUG] [Thread-188659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:57:45.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:57:45.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:57:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:57:46.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 57, 25), 0.29725, 98.362, 0.0, 21.2969, 11.836, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:57:46.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:57:25
2026-04-12T11:57:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:57:47.452 [DEBUG] [Thread-188660] [transport.py] [_log()] starting thread (client mode): 0xb0f54bb0
2026-04-12T11:57:47.452 [DEBUG] [Thread-188660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:57:47.472 [DEBUG] [Thread-188660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:57:47.472 [INFO] [Thread-188660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:57:47.475 [DEBUG] [Thread-188660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] client lang: <none>
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] server lang: <none>
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] kex follows: False
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] Compression: none
2026-04-12T11:57:47.476 [DEBUG] [Thread-188660] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:57:47.484 [DEBUG] [Thread-188660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:57:47.485 [DEBUG] [Thread-188660] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:57:47.485 [DEBUG] [Thread-188660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:57:47.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:57:47.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:57:47.487 [DEBUG] [Thread-188660] [transport.py] [_log()] userauth is OK
2026-04-12T11:57:47.487 [DEBUG] [Thread-188660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:57:47.488 [DEBUG] [Thread-188660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:57:47.488 [DEBUG] [Thread-188660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:57:47.488 [DEBUG] [Thread-188660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:57:47.512 [INFO] [Thread-188660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:57:47.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:57:48.132 [DEBUG] [Thread-188660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:57:48.132 [DEBUG] [Thread-188660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:57:48.132 [DEBUG] [Thread-188660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:57:48.173 [DEBUG] [Thread-188660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:57:48.174 [DEBUG] [Thread-188660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:57:48.175 [DEBUG] [Thread-188660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:57:48.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:57:48.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:57:48.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:57:48.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:57:48.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:57:48.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:57:48.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:57:48.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:57:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:57:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.414692 -999.00  +11.80  13.23     92  +10.60 1 3 1 3 1   888    0 1.23 -2.06 ----- 15.5 13.2 266.1 19.8 15.2 -4.5 14.8 -3.3 14.2 -2.3 14.8 -2.7
2026-04-12T11:57:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:57:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:57:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.414692
2026-04-12T11:57:48.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:57:48.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:57:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:57:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:57:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:57:48.197 [DEBUG] [Thread-188660] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:57:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:57:25', tmtdew=0.29725, humidity=98.362, cloud=0.0, wind=21.2969, temperature=11.836, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:57:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:57:48.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:57:48.288 [DEBUG] [Thread-188663] [transport.py] [_log()] starting thread (client mode): 0xb0f555a0
2026-04-12T11:57:48.288 [DEBUG] [Thread-188663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:57:48.306 [DEBUG] [Thread-188663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:57:48.306 [INFO] [Thread-188663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:57:48.314 [DEBUG] [Thread-188663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:57:48.314 [DEBUG] [Thread-188663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:57:48.314 [DEBUG] [Thread-188663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:57:48.314 [DEBUG] [Thread-188663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] client lang: <none>
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] server lang: <none>
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] kex follows: False
2026-04-12T11:57:48.315 [DEBUG] [Thread-188663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:57:48.316 [DEBUG] [Thread-188663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:57:48.316 [DEBUG] [Thread-188663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:57:48.316 [DEBUG] [Thread-188663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:57:48.316 [DEBUG] [Thread-188663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:57:48.316 [DEBUG] [Thread-188663] [transport.py] [_log()] Compression: none
2026-04-12T11:57:48.316 [DEBUG] [Thread-188663] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:57:48.374 [DEBUG] [Thread-188663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:57:48.374 [DEBUG] [Thread-188663] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:57:48.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:57:48.376 [DEBUG] [Thread-188663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:57:48.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:57:48.434 [DEBUG] [Thread-188663] [transport.py] [_log()] userauth is OK
2026-04-12T11:57:48.435 [DEBUG] [Thread-188663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:57:48.435 [DEBUG] [Thread-188663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:57:48.435 [DEBUG] [Thread-188663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:57:48.435 [DEBUG] [Thread-188663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:57:48.456 [INFO] [Thread-188663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:57:48.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:57:48.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:57:49.307 [DEBUG] [Thread-188663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:57:49.308 [DEBUG] [Thread-188663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:57:49.356 [DEBUG] [Thread-188663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:57:49.356 [DEBUG] [Thread-188663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:57:49.365 [DEBUG] [Thread-188663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:57:49.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:57:49.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:57:49.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:57:49.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:57:49.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:57:49.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:57:49.402 [DEBUG] [Thread-188663] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:57:57.637 [DEBUG] [Thread-188665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:58:09.521 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:58:09.522 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:58:12.688 [DEBUG] [Thread-188666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:58:19.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:58:19.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:58: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
2026-04-12T11:58:20.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 58, 1), 0.28975, 98.4117, 0.0, 22.8845, 11.9355, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:58:20.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:58:01
2026-04-12T11:58:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:58:21.222 [DEBUG] [Thread-188667] [transport.py] [_log()] starting thread (client mode): 0xb0f54790
2026-04-12T11:58:21.223 [DEBUG] [Thread-188667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:58:21.243 [DEBUG] [Thread-188667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:58:21.243 [INFO] [Thread-188667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] client lang: <none>
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] server lang: <none>
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] kex follows: False
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:58:21.247 [DEBUG] [Thread-188667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:58:21.248 [DEBUG] [Thread-188667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:58:21.248 [DEBUG] [Thread-188667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:58:21.248 [DEBUG] [Thread-188667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:58:21.248 [DEBUG] [Thread-188667] [transport.py] [_log()] Compression: none
2026-04-12T11:58:21.248 [DEBUG] [Thread-188667] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:58:21.265 [DEBUG] [Thread-188667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:58:21.266 [DEBUG] [Thread-188667] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:58:21.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:58:21.267 [DEBUG] [Thread-188667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:58:21.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:58:21.269 [DEBUG] [Thread-188667] [transport.py] [_log()] userauth is OK
2026-04-12T11:58:21.270 [DEBUG] [Thread-188667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:58:21.270 [DEBUG] [Thread-188667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:58:21.270 [DEBUG] [Thread-188667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:58:21.270 [DEBUG] [Thread-188667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:58:21.296 [INFO] [Thread-188667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:58:21.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:58:22.064 [DEBUG] [Thread-188667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:58:22.064 [DEBUG] [Thread-188667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:58:22.065 [DEBUG] [Thread-188667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:58:22.105 [DEBUG] [Thread-188667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:58:22.105 [DEBUG] [Thread-188667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:58:22.109 [DEBUG] [Thread-188667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:58:22.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:58:22.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:58:22.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:58:22.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:58:22.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:58:22.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:58:22.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:58:22.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:58:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:58:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.415039 -999.00  +11.90  15.62     91  +10.50 1 3 1 3 1   888    0 1.27 -1.21 ----- 14.9 15.6 286.8 21.2 15.3 -3.8 14.9 -3.6 14.3 -3.0 14.9 -2.9
2026-04-12T11:58:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:58:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:58:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.415039
2026-04-12T11:58:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:58:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:58:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:58:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:58:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:58:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:58:01', tmtdew=0.28975, humidity=98.4117, cloud=0.0, wind=22.8845, temperature=11.9355, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:57:39.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:58:22.136 [DEBUG] [Thread-188667] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:58:22.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:58:22.229 [DEBUG] [Thread-188670] [transport.py] [_log()] starting thread (client mode): 0xb0f57a00
2026-04-12T11:58:22.230 [DEBUG] [Thread-188670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:58:22.244 [DEBUG] [Thread-188670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:58:22.244 [INFO] [Thread-188670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:58:22.252 [DEBUG] [Thread-188670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:58:22.252 [DEBUG] [Thread-188670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:58:22.252 [DEBUG] [Thread-188670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] client lang: <none>
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] server lang: <none>
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] kex follows: False
2026-04-12T11:58:22.253 [DEBUG] [Thread-188670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:58:22.254 [DEBUG] [Thread-188670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:58:22.254 [DEBUG] [Thread-188670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:58:22.254 [DEBUG] [Thread-188670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:58:22.254 [DEBUG] [Thread-188670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:58:22.254 [DEBUG] [Thread-188670] [transport.py] [_log()] Compression: none
2026-04-12T11:58:22.254 [DEBUG] [Thread-188670] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:58:22.311 [DEBUG] [Thread-188670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:58:22.312 [DEBUG] [Thread-188670] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:58:22.312 [DEBUG] [Thread-188670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:58:22.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:58:22.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:58:22.369 [DEBUG] [Thread-188670] [transport.py] [_log()] userauth is OK
2026-04-12T11:58:22.370 [DEBUG] [Thread-188670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:58:22.370 [DEBUG] [Thread-188670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:58:22.370 [DEBUG] [Thread-188670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:58:22.370 [DEBUG] [Thread-188670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:58:22.395 [INFO] [Thread-188670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:58:22.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:58:22.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:58:23.213 [DEBUG] [Thread-188670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:58:23.213 [DEBUG] [Thread-188670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:58:23.261 [DEBUG] [Thread-188670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:58:23.261 [DEBUG] [Thread-188670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:58:23.272 [DEBUG] [Thread-188670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:58:23.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:58:23.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:58:23.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:58:23.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:58:23.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:58:23.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:58:23.309 [DEBUG] [Thread-188670] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:58:27.722 [DEBUG] [Thread-188672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:58:32.544 [DEBUG] [Thread-188673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:58:42.769 [DEBUG] [Thread-188674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:58:53.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:58:53.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:58:53.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:58:54.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 58, 36), 0.51037, 96.624, 0.0, 26.4283, 12.3381, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:58:54.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:58:36
2026-04-12T11:58:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:58:55.187 [DEBUG] [Thread-188675] [transport.py] [_log()] starting thread (client mode): 0xa7968430
2026-04-12T11:58:55.187 [DEBUG] [Thread-188675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:58:55.207 [DEBUG] [Thread-188675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:58:55.207 [INFO] [Thread-188675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:58:55.210 [DEBUG] [Thread-188675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:58:55.210 [DEBUG] [Thread-188675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] client lang: <none>
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] server lang: <none>
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] kex follows: False
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:58:55.211 [DEBUG] [Thread-188675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:58:55.212 [DEBUG] [Thread-188675] [transport.py] [_log()] Compression: none
2026-04-12T11:58:55.212 [DEBUG] [Thread-188675] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:58:55.229 [DEBUG] [Thread-188675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:58:55.230 [DEBUG] [Thread-188675] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:58:55.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:58:55.231 [DEBUG] [Thread-188675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:58:55.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:58:55.272 [DEBUG] [Thread-188675] [transport.py] [_log()] userauth is OK
2026-04-12T11:58:55.272 [DEBUG] [Thread-188675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:58:55.273 [DEBUG] [Thread-188675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:58:55.273 [DEBUG] [Thread-188675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:58:55.273 [DEBUG] [Thread-188675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:58:55.309 [INFO] [Thread-188675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:58:55.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:58:56.077 [DEBUG] [Thread-188675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:58:56.077 [DEBUG] [Thread-188675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:58:56.078 [DEBUG] [Thread-188675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:58:56.118 [DEBUG] [Thread-188675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:58:56.118 [DEBUG] [Thread-188675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:58:56.121 [DEBUG] [Thread-188675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:58:56.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:58:56.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:58:56.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:58:56.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:58:56.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:58:56.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:58:56.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:58:56.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:58:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:58:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.415387 -999.00  +11.90  23.16     91  +10.60 1 3 1 3 1   888    0 1.28 -0.54 ----- 22.8 23.2 283.6 28.0 15.3 -4.0 14.9 -3.5 14.3 -2.9 14.9 -3.3
2026-04-12T11:58:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:58:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:58:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.415387
2026-04-12T11:58:56.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:58:56.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:58:56.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:58:56.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:58:56.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:58:56.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:58:36', tmtdew=0.51037, humidity=96.624, cloud=0.0, wind=26.4283, temperature=12.3381, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:58:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:58:56.145 [DEBUG] [Thread-188675] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:58:56.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:58:56.239 [DEBUG] [Thread-188678] [transport.py] [_log()] starting thread (client mode): 0xa79697b0
2026-04-12T11:58:56.239 [DEBUG] [Thread-188678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:58:56.254 [DEBUG] [Thread-188678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:58:56.254 [INFO] [Thread-188678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:58:56.262 [DEBUG] [Thread-188678] [transport.py] [_log()] client lang: <none>
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] server lang: <none>
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] kex follows: False
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] Compression: none
2026-04-12T11:58:56.263 [DEBUG] [Thread-188678] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:58:56.323 [DEBUG] [Thread-188678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:58:56.324 [DEBUG] [Thread-188678] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:58:56.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:58:56.324 [DEBUG] [Thread-188678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:58:56.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:58:56.381 [DEBUG] [Thread-188678] [transport.py] [_log()] userauth is OK
2026-04-12T11:58:56.381 [DEBUG] [Thread-188678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:58:56.381 [DEBUG] [Thread-188678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:58:56.381 [DEBUG] [Thread-188678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:58:56.381 [DEBUG] [Thread-188678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:58:56.405 [INFO] [Thread-188678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:58:56.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:58:56.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:58:57.215 [DEBUG] [Thread-188678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:58:57.215 [DEBUG] [Thread-188678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:58:57.263 [DEBUG] [Thread-188678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:58:57.263 [DEBUG] [Thread-188678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:58:57.272 [DEBUG] [Thread-188678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:58:57.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:58:57.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:58:57.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:58:57.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:58:57.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:58:57.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:58:57.308 [DEBUG] [Thread-188678] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:58:57.804 [DEBUG] [Thread-188680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:59:09.665 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:59:09.666 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:59:12.854 [DEBUG] [Thread-188681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:59:27.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T11:59:27.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T11:59:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T11:59:27.893 [DEBUG] [Thread-188682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:59:28.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 59, 11), 0.30768, 97.7954, 0.0, 24.3846, 11.6859, 2, 2, 0, 2, 0, 0),)
2026-04-12T11:59:28.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:59:11
2026-04-12T11:59:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T11:59:29.163 [DEBUG] [Thread-188683] [transport.py] [_log()] starting thread (client mode): 0xb0fb7a60
2026-04-12T11:59:29.163 [DEBUG] [Thread-188683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:59:29.184 [DEBUG] [Thread-188683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T11:59:29.184 [INFO] [Thread-188683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] client lang: <none>
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] server lang: <none>
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] kex follows: False
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:59:29.187 [DEBUG] [Thread-188683] [transport.py] [_log()] Compression: none
2026-04-12T11:59:29.188 [DEBUG] [Thread-188683] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:59:29.204 [DEBUG] [Thread-188683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:59:29.204 [DEBUG] [Thread-188683] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:59:29.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T11:59:29.205 [DEBUG] [Thread-188683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T11:59:29.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:59:29.249 [DEBUG] [Thread-188683] [transport.py] [_log()] userauth is OK
2026-04-12T11:59:29.249 [DEBUG] [Thread-188683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:59:29.249 [DEBUG] [Thread-188683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:59:29.249 [DEBUG] [Thread-188683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T11:59:29.249 [DEBUG] [Thread-188683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:59:29.281 [INFO] [Thread-188683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:59:29.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:59:30.065 [DEBUG] [Thread-188683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:59:30.065 [DEBUG] [Thread-188683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:59:30.066 [DEBUG] [Thread-188683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T11:59:30.106 [DEBUG] [Thread-188683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:59:30.107 [DEBUG] [Thread-188683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:59:30.110 [DEBUG] [Thread-188683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:59:30.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:59:30.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T11:59:30.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T11:59:30.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T11:59:30.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:59:30.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T11:59:30.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:59:30.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:59:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T11:59:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.416081 -999.00  +11.70  27.78     91  +10.40 1 3 1 3 1   888    0 1.32 0.21 ----- 17.4 27.8 275.4 31.0 15.1 -4.4 14.9 -3.5 14.3 -3.4 14.8 -3.7
2026-04-12T11:59:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T11:59:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T11:59:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.416081
2026-04-12T11:59:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T11:59:30.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T11:59:30.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T11:59:30.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T11:59:30.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T11:59:30.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:59:11', tmtdew=0.30768, humidity=97.7954, cloud=0.0, wind=24.3846, temperature=11.6859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:59:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T11:59:30.140 [DEBUG] [Thread-188683] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:59:30.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T11:59:30.232 [DEBUG] [Thread-188686] [transport.py] [_log()] starting thread (client mode): 0xb0fb6a40
2026-04-12T11:59:30.232 [DEBUG] [Thread-188686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T11:59:30.247 [DEBUG] [Thread-188686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T11:59:30.248 [INFO] [Thread-188686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T11:59:30.255 [DEBUG] [Thread-188686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T11:59:30.255 [DEBUG] [Thread-188686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T11:59:30.255 [DEBUG] [Thread-188686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T11:59:30.255 [DEBUG] [Thread-188686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] client lang: <none>
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] server lang: <none>
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] kex follows: False
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] Compression: none
2026-04-12T11:59:30.256 [DEBUG] [Thread-188686] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T11:59:30.313 [DEBUG] [Thread-188686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T11:59:30.314 [DEBUG] [Thread-188686] [transport.py] [_log()] Switch to new keys ...
2026-04-12T11:59:30.315 [DEBUG] [Thread-188686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T11:59:30.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T11:59:30.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T11:59:30.369 [DEBUG] [Thread-188686] [transport.py] [_log()] userauth is OK
2026-04-12T11:59:30.369 [DEBUG] [Thread-188686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T11:59:30.369 [DEBUG] [Thread-188686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T11:59:30.370 [DEBUG] [Thread-188686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T11:59:30.370 [DEBUG] [Thread-188686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T11:59:30.389 [INFO] [Thread-188686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T11:59:30.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T11:59:30.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T11:59:31.191 [DEBUG] [Thread-188686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T11:59:31.191 [DEBUG] [Thread-188686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T11:59:31.239 [DEBUG] [Thread-188686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T11:59:31.239 [DEBUG] [Thread-188686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T11:59:31.248 [DEBUG] [Thread-188686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T11:59:31.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T11:59:31.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T11:59:31.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T11:59:31.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T11:59:31.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T11:59:31.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T11:59:31.286 [DEBUG] [Thread-188686] [transport.py] [_log()] EOF in transport thread
2026-04-12T11:59:32.605 [DEBUG] [Thread-188688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:59:42.929 [DEBUG] [Thread-188689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T11:59:57.993 [DEBUG] [Thread-188690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:00:01.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:00:01.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:00:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:00:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 11, 59, 47), 0.50554, 96.6568, 0.0, 24.8054, 12.4373, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:00:02.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 11:59:47
2026-04-12T12:00:02.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:00:03.138 [DEBUG] [Thread-188691] [transport.py] [_log()] starting thread (client mode): 0xb0f54c40
2026-04-12T12:00:03.138 [DEBUG] [Thread-188691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:00:03.160 [DEBUG] [Thread-188691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:00:03.160 [INFO] [Thread-188691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:00:03.166 [DEBUG] [Thread-188691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:00:03.166 [DEBUG] [Thread-188691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:00:03.166 [DEBUG] [Thread-188691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:00:03.166 [DEBUG] [Thread-188691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] client lang: <none>
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] server lang: <none>
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] kex follows: False
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:00:03.167 [DEBUG] [Thread-188691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:00:03.168 [DEBUG] [Thread-188691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:00:03.168 [DEBUG] [Thread-188691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:00:03.168 [DEBUG] [Thread-188691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:00:03.168 [DEBUG] [Thread-188691] [transport.py] [_log()] Compression: none
2026-04-12T12:00:03.168 [DEBUG] [Thread-188691] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:00:03.181 [DEBUG] [Thread-188691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:00:03.182 [DEBUG] [Thread-188691] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:00:03.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:00:03.183 [DEBUG] [Thread-188691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:00:03.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:00:03.185 [DEBUG] [Thread-188691] [transport.py] [_log()] userauth is OK
2026-04-12T12:00:03.186 [DEBUG] [Thread-188691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:00:03.186 [DEBUG] [Thread-188691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:00:03.186 [DEBUG] [Thread-188691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:00:03.186 [DEBUG] [Thread-188691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:00:03.208 [INFO] [Thread-188691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:00:03.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:00:09.823 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:00:09.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:00:11.917 [DEBUG] [Thread-188691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:00:11.918 [DEBUG] [Thread-188691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:00:11.918 [DEBUG] [Thread-188691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:00:11.958 [DEBUG] [Thread-188691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:00:11.959 [DEBUG] [Thread-188691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:00:11.962 [DEBUG] [Thread-188691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:00:11.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:00:11.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:00:11.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:00:11.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:00:11.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:00:11.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:00:11.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:00:11.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:00:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:00:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.416428 -999.00  +11.80  25.70     91  +10.50 1 3 1 3 1   888    0 1.30 0.90 ----- 30.5 25.7 277.8 31.1 15.1 -4.8 14.9 -3.4 14.2 -4.0 14.9 -3.2
2026-04-12T12:00:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:00:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:00:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.416428
2026-04-12T12:00:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:00:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:00:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:00:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:00:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:00:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T11:59:47', tmtdew=0.50554, humidity=96.6568, cloud=0.0, wind=24.8054, temperature=12.4373, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T09:59:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:00:11.992 [DEBUG] [Thread-188691] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:00:12.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:00:12.097 [DEBUG] [Thread-188694] [transport.py] [_log()] starting thread (client mode): 0xb0f57160
2026-04-12T12:00:12.097 [DEBUG] [Thread-188694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:00:12.113 [DEBUG] [Thread-188694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:00:12.114 [INFO] [Thread-188694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:00:12.121 [DEBUG] [Thread-188694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:00:12.121 [DEBUG] [Thread-188694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:00:12.121 [DEBUG] [Thread-188694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:00:12.121 [DEBUG] [Thread-188694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] client lang: <none>
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] server lang: <none>
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] kex follows: False
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:00:12.122 [DEBUG] [Thread-188694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:00:12.123 [DEBUG] [Thread-188694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:00:12.123 [DEBUG] [Thread-188694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:00:12.123 [DEBUG] [Thread-188694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:00:12.123 [DEBUG] [Thread-188694] [transport.py] [_log()] Compression: none
2026-04-12T12:00:12.123 [DEBUG] [Thread-188694] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:00:12.182 [DEBUG] [Thread-188694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:00:12.182 [DEBUG] [Thread-188694] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:00:12.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:00:12.183 [DEBUG] [Thread-188694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:00:12.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:00:12.241 [DEBUG] [Thread-188694] [transport.py] [_log()] userauth is OK
2026-04-12T12:00:12.242 [DEBUG] [Thread-188694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:00:12.242 [DEBUG] [Thread-188694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:00:12.242 [DEBUG] [Thread-188694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:00:12.242 [DEBUG] [Thread-188694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:00:12.262 [INFO] [Thread-188694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:00:12.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:00:12.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:00:13.032 [DEBUG] [Thread-188696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:00:13.123 [DEBUG] [Thread-188694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:00:13.123 [DEBUG] [Thread-188694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:00:13.171 [DEBUG] [Thread-188694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:00:13.171 [DEBUG] [Thread-188694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:00:13.180 [DEBUG] [Thread-188694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:00:13.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:00:13.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:00:13.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:00:13.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:00:13.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:00:13.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:00:13.217 [DEBUG] [Thread-188694] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:00:28.084 [DEBUG] [Thread-188697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:00:32.659 [DEBUG] [Thread-188698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:00:43.124 [DEBUG] [Thread-188699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:00:43.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:00:43.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:00:43.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:00:44.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 0, 23), 0.24767, 97.8615, 0.0, 24.7374, 11.8018, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:00:44.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:00:23
2026-04-12T12:00:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:00:45.046 [DEBUG] [Thread-188700] [transport.py] [_log()] starting thread (client mode): 0xa7968040
2026-04-12T12:00:45.046 [DEBUG] [Thread-188700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:00:45.068 [DEBUG] [Thread-188700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:00:45.068 [INFO] [Thread-188700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] client lang: <none>
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] server lang: <none>
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] kex follows: False
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:00:45.071 [DEBUG] [Thread-188700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:00:45.072 [DEBUG] [Thread-188700] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:00:45.072 [DEBUG] [Thread-188700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:00:45.072 [DEBUG] [Thread-188700] [transport.py] [_log()] Compression: none
2026-04-12T12:00:45.072 [DEBUG] [Thread-188700] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:00:45.089 [DEBUG] [Thread-188700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:00:45.089 [DEBUG] [Thread-188700] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:00:45.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:00:45.090 [DEBUG] [Thread-188700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:00:45.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:00:45.093 [DEBUG] [Thread-188700] [transport.py] [_log()] userauth is OK
2026-04-12T12:00:45.093 [DEBUG] [Thread-188700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:00:45.093 [DEBUG] [Thread-188700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:00:45.093 [DEBUG] [Thread-188700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:00:45.093 [DEBUG] [Thread-188700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:00:45.117 [INFO] [Thread-188700] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:00:45.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:00:45.953 [DEBUG] [Thread-188700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:00:45.954 [DEBUG] [Thread-188700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:00:45.954 [DEBUG] [Thread-188700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:00:45.995 [DEBUG] [Thread-188700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:00:45.995 [DEBUG] [Thread-188700] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:00:45.999 [DEBUG] [Thread-188700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:00:46.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:00:46.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:00:46.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:00:46.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:00:46.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:00:46.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:00:46.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:00:46.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:00:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:00:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.416775 -999.00  +11.80  17.40     91  +10.50 1 3 1 3 1   888    0 1.33 1.55 ----- 12.0 17.4 288.6 30.0 15.1 -3.7 14.8 -3.6 14.1 -3.6 14.7 -2.9
2026-04-12T12:00:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:00:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:00:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.416775
2026-04-12T12:00:46.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:00:46.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:00:46.027 [DEBUG] [Thread-188700] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:00:46.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:00:46.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:00:46.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:00:46.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:00:23', tmtdew=0.24767, humidity=97.8615, cloud=0.0, wind=24.7374, temperature=11.8018, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:00:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:00:46.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:00:46.121 [DEBUG] [Thread-188703] [transport.py] [_log()] starting thread (client mode): 0xa7969c30
2026-04-12T12:00:46.121 [DEBUG] [Thread-188703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:00:46.136 [DEBUG] [Thread-188703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:00:46.136 [INFO] [Thread-188703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:00:46.143 [DEBUG] [Thread-188703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] client lang: <none>
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] server lang: <none>
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] kex follows: False
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:00:46.144 [DEBUG] [Thread-188703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:00:46.145 [DEBUG] [Thread-188703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:00:46.145 [DEBUG] [Thread-188703] [transport.py] [_log()] Compression: none
2026-04-12T12:00:46.145 [DEBUG] [Thread-188703] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:00:46.207 [DEBUG] [Thread-188703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:00:46.208 [DEBUG] [Thread-188703] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:00:46.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:00:46.209 [DEBUG] [Thread-188703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:00:46.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:00:46.265 [DEBUG] [Thread-188703] [transport.py] [_log()] userauth is OK
2026-04-12T12:00:46.266 [DEBUG] [Thread-188703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:00:46.266 [DEBUG] [Thread-188703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:00:46.266 [DEBUG] [Thread-188703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:00:46.266 [DEBUG] [Thread-188703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:00:46.287 [INFO] [Thread-188703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:00:46.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:00:46.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:00:47.109 [DEBUG] [Thread-188703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:00:47.109 [DEBUG] [Thread-188703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:00:47.157 [DEBUG] [Thread-188703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:00:47.157 [DEBUG] [Thread-188703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:00:47.166 [DEBUG] [Thread-188703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:00:47.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:00:47.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:00:47.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:00:47.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:00:47.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:00:47.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:00:47.204 [DEBUG] [Thread-188703] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:00:58.160 [DEBUG] [Thread-188705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:01:09.963 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:01:09.965 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:01:13.205 [DEBUG] [Thread-188706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:01:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:01:17.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:01:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:01:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 0, 23), 0.24767, 97.8615, 0.0, 24.7374, 11.8018, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:01:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:00:23
2026-04-12T12:01:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:01:19.201 [DEBUG] [Thread-188707] [transport.py] [_log()] starting thread (client mode): 0xa7969570
2026-04-12T12:01:19.201 [DEBUG] [Thread-188707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:01:19.222 [DEBUG] [Thread-188707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:01:19.222 [INFO] [Thread-188707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:01:19.225 [DEBUG] [Thread-188707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:01:19.225 [DEBUG] [Thread-188707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] client lang: <none>
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] server lang: <none>
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] kex follows: False
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:01:19.226 [DEBUG] [Thread-188707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:01:19.227 [DEBUG] [Thread-188707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:01:19.227 [DEBUG] [Thread-188707] [transport.py] [_log()] Compression: none
2026-04-12T12:01:19.227 [DEBUG] [Thread-188707] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:01:19.244 [DEBUG] [Thread-188707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:01:19.245 [DEBUG] [Thread-188707] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:01:19.245 [DEBUG] [Thread-188707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:01:19.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:01:19.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:01:19.248 [DEBUG] [Thread-188707] [transport.py] [_log()] userauth is OK
2026-04-12T12:01:19.248 [DEBUG] [Thread-188707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:01:19.248 [DEBUG] [Thread-188707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:01:19.248 [DEBUG] [Thread-188707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:01:19.248 [DEBUG] [Thread-188707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:01:19.271 [INFO] [Thread-188707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:01:19.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:01:20.040 [DEBUG] [Thread-188707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:01:20.041 [DEBUG] [Thread-188707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:01:20.041 [DEBUG] [Thread-188707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:01:20.082 [DEBUG] [Thread-188707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:01:20.082 [DEBUG] [Thread-188707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:01:20.086 [DEBUG] [Thread-188707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:01:20.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:01:20.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:01:20.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:01:20.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:01:20.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:01:20.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:01:20.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:01:20.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:01:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:01:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.417123 -999.00  +11.90  20.25     91  +10.60 1 3 1 3 1   888    0 1.34 1.74 ----- 17.5 20.2 281.2 24.7 15.1 -4.2 14.8 -3.2 14.2 -3.2 14.8 -3.0
2026-04-12T12:01:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:01:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:01:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.417123
2026-04-12T12:01:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:00:23', tmtdew=0.24767, humidity=97.8615, cloud=0.0, wind=24.7374, temperature=11.8018, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:00:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:01:20.111 [DEBUG] [Thread-188707] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:01:20.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:01:20.205 [DEBUG] [Thread-188710] [transport.py] [_log()] starting thread (client mode): 0xb0f55960
2026-04-12T12:01:20.205 [DEBUG] [Thread-188710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:01:20.220 [DEBUG] [Thread-188710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:01:20.220 [INFO] [Thread-188710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:01:20.227 [DEBUG] [Thread-188710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:01:20.227 [DEBUG] [Thread-188710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] client lang: <none>
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] server lang: <none>
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] kex follows: False
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:01:20.228 [DEBUG] [Thread-188710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:01:20.229 [DEBUG] [Thread-188710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:01:20.229 [DEBUG] [Thread-188710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:01:20.229 [DEBUG] [Thread-188710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:01:20.229 [DEBUG] [Thread-188710] [transport.py] [_log()] Compression: none
2026-04-12T12:01:20.229 [DEBUG] [Thread-188710] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:01:20.285 [DEBUG] [Thread-188710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:01:20.286 [DEBUG] [Thread-188710] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:01:20.286 [DEBUG] [Thread-188710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:01:20.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:01:20.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:01:20.342 [DEBUG] [Thread-188710] [transport.py] [_log()] userauth is OK
2026-04-12T12:01:20.342 [DEBUG] [Thread-188710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:01:20.343 [DEBUG] [Thread-188710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:01:20.343 [DEBUG] [Thread-188710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:01:20.343 [DEBUG] [Thread-188710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:01:20.362 [INFO] [Thread-188710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:01:20.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:01:20.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:01:21.175 [DEBUG] [Thread-188710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:01:21.175 [DEBUG] [Thread-188710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:01:21.223 [DEBUG] [Thread-188710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:01:21.223 [DEBUG] [Thread-188710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:01:21.232 [DEBUG] [Thread-188710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:01:21.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:01:21.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:01:21.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:01:21.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:01:21.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:01:21.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:01:21.269 [DEBUG] [Thread-188710] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:01:28.244 [DEBUG] [Thread-188712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:01:32.714 [DEBUG] [Thread-188713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:01:43.297 [DEBUG] [Thread-188714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:01:51.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:01:51.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:01:51.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:01:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 1, 36), 0.53111, 96.4918, 0.0, 23.1826, 12.3384, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:01:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:01:36
2026-04-12T12:01:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:01:53.163 [DEBUG] [Thread-188715] [transport.py] [_log()] starting thread (client mode): 0xb0fb7fa0
2026-04-12T12:01:53.163 [DEBUG] [Thread-188715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:01:53.184 [DEBUG] [Thread-188715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:01:53.184 [INFO] [Thread-188715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:01:53.185 [DEBUG] [Thread-188715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] client lang: <none>
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] server lang: <none>
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] kex follows: False
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] Compression: none
2026-04-12T12:01:53.186 [DEBUG] [Thread-188715] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:01:53.199 [DEBUG] [Thread-188715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:01:53.199 [DEBUG] [Thread-188715] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:01:53.199 [DEBUG] [Thread-188715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:01:53.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:01:53.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:01:53.201 [DEBUG] [Thread-188715] [transport.py] [_log()] userauth is OK
2026-04-12T12:01:53.201 [DEBUG] [Thread-188715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:01:53.201 [DEBUG] [Thread-188715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:01:53.201 [DEBUG] [Thread-188715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:01:53.201 [DEBUG] [Thread-188715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:01:53.226 [INFO] [Thread-188715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:01:53.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:01:53.992 [DEBUG] [Thread-188715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:01:53.992 [DEBUG] [Thread-188715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:01:53.993 [DEBUG] [Thread-188715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:01:54.033 [DEBUG] [Thread-188715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:01:54.033 [DEBUG] [Thread-188715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:01:54.036 [DEBUG] [Thread-188715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:01:54.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:01:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:01:54.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:01:54.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:01:54.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:01:54.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:01:54.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:01:54.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:01:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:01:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.417470 -999.00  +11.70  21.17     91  +10.30 1 3 1 3 1   888    0 1.37 2.16 ----- 19.3 21.2 275.2 27.9 15.0 -4.5 14.8 -3.7 14.0 -4.8 14.7 -3.6
2026-04-12T12:01:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:01:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:01:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.417470
2026-04-12T12:01:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:01:54.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:01:54.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:01:54.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:01:54.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:01:54.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:01:36', tmtdew=0.53111, humidity=96.4918, cloud=0.0, wind=23.1826, temperature=12.3384, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:01:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:01:54.062 [DEBUG] [Thread-188715] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:01:54.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:01:54.156 [DEBUG] [Thread-188718] [transport.py] [_log()] starting thread (client mode): 0xb0fb4070
2026-04-12T12:01:54.157 [DEBUG] [Thread-188718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:01:54.171 [DEBUG] [Thread-188718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:01:54.171 [INFO] [Thread-188718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:01:54.178 [DEBUG] [Thread-188718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] client lang: <none>
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] server lang: <none>
2026-04-12T12:01:54.179 [DEBUG] [Thread-188718] [transport.py] [_log()] kex follows: False
2026-04-12T12:01:54.180 [DEBUG] [Thread-188718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:01:54.180 [DEBUG] [Thread-188718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:01:54.180 [DEBUG] [Thread-188718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:01:54.180 [DEBUG] [Thread-188718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:01:54.180 [DEBUG] [Thread-188718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:01:54.180 [DEBUG] [Thread-188718] [transport.py] [_log()] Compression: none
2026-04-12T12:01:54.180 [DEBUG] [Thread-188718] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:01:54.238 [DEBUG] [Thread-188718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:01:54.238 [DEBUG] [Thread-188718] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:01:54.239 [DEBUG] [Thread-188718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:01:54.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:01:54.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:01:54.293 [DEBUG] [Thread-188718] [transport.py] [_log()] userauth is OK
2026-04-12T12:01:54.294 [DEBUG] [Thread-188718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:01:54.294 [DEBUG] [Thread-188718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:01:54.294 [DEBUG] [Thread-188718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:01:54.294 [DEBUG] [Thread-188718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:01:54.313 [INFO] [Thread-188718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:01:54.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:01:54.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:01:55.123 [DEBUG] [Thread-188718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:01:55.124 [DEBUG] [Thread-188718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:01:55.171 [DEBUG] [Thread-188718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:01:55.171 [DEBUG] [Thread-188718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:01:55.181 [DEBUG] [Thread-188718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:01:55.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:01:55.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:01:55.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:01:55.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:01:55.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:01:55.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:01:55.219 [DEBUG] [Thread-188718] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:01:58.337 [DEBUG] [Thread-188720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:10.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:10.113 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:13.394 [DEBUG] [Thread-188721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:02:25.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:02:25.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:02:26.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 2, 11), 0.312955, 98.2625, 0.0, 22.2678, 11.7192, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:02:26.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:02:11
2026-04-12T12:02:26.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:02:27.052 [DEBUG] [Thread-188722] [transport.py] [_log()] starting thread (client mode): 0xb0f555d0
2026-04-12T12:02:27.052 [DEBUG] [Thread-188722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:02:27.072 [DEBUG] [Thread-188722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:02:27.073 [INFO] [Thread-188722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] client lang: <none>
2026-04-12T12:02:27.076 [DEBUG] [Thread-188722] [transport.py] [_log()] server lang: <none>
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] kex follows: False
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] Compression: none
2026-04-12T12:02:27.077 [DEBUG] [Thread-188722] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:02:27.096 [DEBUG] [Thread-188722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:02:27.097 [DEBUG] [Thread-188722] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:02:27.097 [DEBUG] [Thread-188722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:02:27.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:02:27.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:02:27.099 [DEBUG] [Thread-188722] [transport.py] [_log()] userauth is OK
2026-04-12T12:02:27.100 [DEBUG] [Thread-188722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:02:27.100 [DEBUG] [Thread-188722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:02:27.100 [DEBUG] [Thread-188722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:02:27.100 [DEBUG] [Thread-188722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:02:27.123 [INFO] [Thread-188722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:02:27.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:02:28.205 [DEBUG] [Thread-188722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:02:28.205 [DEBUG] [Thread-188722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:02:28.206 [DEBUG] [Thread-188722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:02:28.246 [DEBUG] [Thread-188722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:02:28.246 [DEBUG] [Thread-188722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:02:28.250 [DEBUG] [Thread-188722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:02:28.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:02:28.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:02:28.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:02:28.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:02:28.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:02:28.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:02:28.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:02:28.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:02:28.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:02:28.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.417817 -999.00  +11.70  18.62     91  +10.40 1 3 1 3 1   888    0 1.40 2.87 ----- 19.8 18.6 292.0 28.7 15.0 -4.4 14.7 -4.3 13.9 -4.9 14.6 -3.6
2026-04-12T12:02:28.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:02:28.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:02:28.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.417817
2026-04-12T12:02:28.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:02:28.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:02:28.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:02:28.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:02:28.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:02:28.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:02:11', tmtdew=0.312955, humidity=98.2625, cloud=0.0, wind=22.2678, temperature=11.7192, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:01:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:02:28.277 [DEBUG] [Thread-188722] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:02:28.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:02:28.372 [DEBUG] [Thread-188725] [transport.py] [_log()] starting thread (client mode): 0xb0fb68f0
2026-04-12T12:02:28.372 [DEBUG] [Thread-188725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:02:28.388 [DEBUG] [Thread-188725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:02:28.388 [INFO] [Thread-188725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:02:28.396 [DEBUG] [Thread-188725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:02:28.396 [DEBUG] [Thread-188725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:02:28.396 [DEBUG] [Thread-188725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:02:28.396 [DEBUG] [Thread-188725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:02:28.396 [DEBUG] [Thread-188725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] client lang: <none>
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] server lang: <none>
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] kex follows: False
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] Compression: none
2026-04-12T12:02:28.397 [DEBUG] [Thread-188725] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:02:28.432 [DEBUG] [Thread-188727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:28.454 [DEBUG] [Thread-188725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:02:28.455 [DEBUG] [Thread-188725] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:02:28.455 [DEBUG] [Thread-188725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:02:28.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:02:28.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:02:28.513 [DEBUG] [Thread-188725] [transport.py] [_log()] userauth is OK
2026-04-12T12:02:28.514 [DEBUG] [Thread-188725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:02:28.514 [DEBUG] [Thread-188725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:02:28.514 [DEBUG] [Thread-188725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:02:28.514 [DEBUG] [Thread-188725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:02:28.532 [INFO] [Thread-188725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:02:28.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:02:28.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:02:29.371 [DEBUG] [Thread-188725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:02:29.371 [DEBUG] [Thread-188725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:02:29.419 [DEBUG] [Thread-188725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:02:29.419 [DEBUG] [Thread-188725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:02:29.428 [DEBUG] [Thread-188725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:02:29.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:02:29.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:02:29.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:02:29.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:02:29.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:02:29.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:02:29.469 [DEBUG] [Thread-188725] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:02:32.751 [DEBUG] [Thread-188728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:43.484 [DEBUG] [Thread-188729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:58.522 [DEBUG] [Thread-188730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:02:59.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:02:59.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:02:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:03:00.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 2, 47), 0.5312, 96.4913, 0.0, 23.9587, 12.338, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:03:00.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:02:47
2026-04-12T12:03:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:03:01.454 [DEBUG] [Thread-188731] [transport.py] [_log()] starting thread (client mode): 0xb0fb73a0
2026-04-12T12:03:01.455 [DEBUG] [Thread-188731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:03:01.474 [DEBUG] [Thread-188731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:03:01.474 [INFO] [Thread-188731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] client lang: <none>
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] server lang: <none>
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] kex follows: False
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:03:01.477 [DEBUG] [Thread-188731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:03:01.478 [DEBUG] [Thread-188731] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:03:01.478 [DEBUG] [Thread-188731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:03:01.478 [DEBUG] [Thread-188731] [transport.py] [_log()] Compression: none
2026-04-12T12:03:01.478 [DEBUG] [Thread-188731] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:03:01.495 [DEBUG] [Thread-188731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:03:01.496 [DEBUG] [Thread-188731] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:03:01.496 [DEBUG] [Thread-188731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:03:01.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:03:01.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:03:01.498 [DEBUG] [Thread-188731] [transport.py] [_log()] userauth is OK
2026-04-12T12:03:01.499 [DEBUG] [Thread-188731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:03:01.499 [DEBUG] [Thread-188731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:03:01.499 [DEBUG] [Thread-188731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:03:01.499 [DEBUG] [Thread-188731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:03:01.518 [INFO] [Thread-188731] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:03:01.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:03:02.311 [DEBUG] [Thread-188731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:03:02.312 [DEBUG] [Thread-188731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:03:02.312 [DEBUG] [Thread-188731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:03:02.353 [DEBUG] [Thread-188731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:03:02.353 [DEBUG] [Thread-188731] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:03:02.356 [DEBUG] [Thread-188731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:03:02.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:03:02.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:03:02.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:03:02.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:03:02.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:03:02.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:03:02.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:03:02.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:03:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:03:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.418164 -999.00  +11.80  23.03     91  +10.50 1 3 1 3 1   888    0 1.38 2.35 ----- 26.3 23.0 284.9 25.9 15.0 -7.1 14.7 -5.1 14.0 -5.4 14.7 -4.6
2026-04-12T12:03:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:03:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:03:02.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.418164
2026-04-12T12:03:02.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:03:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:03:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:03:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:03:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:03:02.383 [DEBUG] [Thread-188731] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:03:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:02:47', tmtdew=0.5312, humidity=96.4913, cloud=0.0, wind=23.9587, temperature=12.338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:02:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:03:02.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:03:02.477 [DEBUG] [Thread-188734] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d00
2026-04-12T12:03:02.477 [DEBUG] [Thread-188734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:03:02.491 [DEBUG] [Thread-188734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:03:02.491 [INFO] [Thread-188734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:03:02.499 [DEBUG] [Thread-188734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:03:02.499 [DEBUG] [Thread-188734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:03:02.499 [DEBUG] [Thread-188734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:03:02.499 [DEBUG] [Thread-188734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:02.499 [DEBUG] [Thread-188734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:02.499 [DEBUG] [Thread-188734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:02.499 [DEBUG] [Thread-188734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] client lang: <none>
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] server lang: <none>
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] kex follows: False
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:03:02.500 [DEBUG] [Thread-188734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:03:02.501 [DEBUG] [Thread-188734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:03:02.501 [DEBUG] [Thread-188734] [transport.py] [_log()] Compression: none
2026-04-12T12:03:02.501 [DEBUG] [Thread-188734] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:03:02.562 [DEBUG] [Thread-188734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:03:02.563 [DEBUG] [Thread-188734] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:03:02.564 [DEBUG] [Thread-188734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:03:02.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:03:02.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:03:02.622 [DEBUG] [Thread-188734] [transport.py] [_log()] userauth is OK
2026-04-12T12:03:02.622 [DEBUG] [Thread-188734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:03:02.622 [DEBUG] [Thread-188734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:03:02.622 [DEBUG] [Thread-188734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:03:02.622 [DEBUG] [Thread-188734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:03:02.646 [INFO] [Thread-188734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:03:02.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:03:02.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:03:03.541 [DEBUG] [Thread-188734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:03:03.542 [DEBUG] [Thread-188734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:03:03.590 [DEBUG] [Thread-188734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:03:03.591 [DEBUG] [Thread-188734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:03:03.600 [DEBUG] [Thread-188734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:03:03.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:03:03.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:03:03.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:03:03.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:03:03.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:03:03.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:03:03.636 [DEBUG] [Thread-188734] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:03:10.275 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:03:10.277 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:03:13.560 [DEBUG] [Thread-188736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:03:28.619 [DEBUG] [Thread-188737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:03:32.816 [DEBUG] [Thread-188738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:03:33.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:03:33.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:03:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:03:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 3, 23), 0.318365, 97.7291, 0.0, 21.915, 11.7688, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:03:35.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:03:23
2026-04-12T12:03:35.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:03:35.584 [DEBUG] [Thread-188739] [transport.py] [_log()] starting thread (client mode): 0xae515330
2026-04-12T12:03:35.584 [DEBUG] [Thread-188739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:03:35.605 [DEBUG] [Thread-188739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:03:35.605 [INFO] [Thread-188739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:03:35.607 [DEBUG] [Thread-188739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] client lang: <none>
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] server lang: <none>
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] kex follows: False
2026-04-12T12:03:35.608 [DEBUG] [Thread-188739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:03:35.609 [DEBUG] [Thread-188739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:03:35.609 [DEBUG] [Thread-188739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:03:35.609 [DEBUG] [Thread-188739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:03:35.609 [DEBUG] [Thread-188739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:03:35.609 [DEBUG] [Thread-188739] [transport.py] [_log()] Compression: none
2026-04-12T12:03:35.609 [DEBUG] [Thread-188739] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:03:35.622 [DEBUG] [Thread-188739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:03:35.623 [DEBUG] [Thread-188739] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:03:35.623 [DEBUG] [Thread-188739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:03:35.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:03:35.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:03:35.625 [DEBUG] [Thread-188739] [transport.py] [_log()] userauth is OK
2026-04-12T12:03:35.626 [DEBUG] [Thread-188739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:03:35.626 [DEBUG] [Thread-188739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:03:35.626 [DEBUG] [Thread-188739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:03:35.626 [DEBUG] [Thread-188739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:03:35.645 [INFO] [Thread-188739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:03:35.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:03:36.426 [DEBUG] [Thread-188739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:03:36.426 [DEBUG] [Thread-188739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:03:36.426 [DEBUG] [Thread-188739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:03:36.468 [DEBUG] [Thread-188739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:03:36.468 [DEBUG] [Thread-188739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:03:36.470 [DEBUG] [Thread-188739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:03:36.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:03:36.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:03:36.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:03:36.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:03:36.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:03:36.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:03:36.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:03:36.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:03:36.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:03:36.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.418511 -999.00  +11.70  25.23     91  +10.30 1 3 1 3 1   888    0 1.37 2.48 ----- 22.6 25.2 274.0 30.7 15.0 -6.2 14.7 -5.5 13.9 -6.5 14.6 -5.4
2026-04-12T12:03:36.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:03:36.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:03:36.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.418511
2026-04-12T12:03:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:03:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:03:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:03:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:03:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:03:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:03:23', tmtdew=0.318365, humidity=97.7291, cloud=0.0, wind=21.915, temperature=11.7688, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:02:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:03:36.495 [DEBUG] [Thread-188739] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:03:36.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:03:36.582 [DEBUG] [Thread-188742] [transport.py] [_log()] starting thread (client mode): 0xb0f57550
2026-04-12T12:03:36.582 [DEBUG] [Thread-188742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:03:36.597 [DEBUG] [Thread-188742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:03:36.597 [INFO] [Thread-188742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] client lang: <none>
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] server lang: <none>
2026-04-12T12:03:36.605 [DEBUG] [Thread-188742] [transport.py] [_log()] kex follows: False
2026-04-12T12:03:36.606 [DEBUG] [Thread-188742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:03:36.606 [DEBUG] [Thread-188742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:03:36.606 [DEBUG] [Thread-188742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:03:36.606 [DEBUG] [Thread-188742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:03:36.606 [DEBUG] [Thread-188742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:03:36.606 [DEBUG] [Thread-188742] [transport.py] [_log()] Compression: none
2026-04-12T12:03:36.606 [DEBUG] [Thread-188742] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:03:36.660 [DEBUG] [Thread-188742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:03:36.661 [DEBUG] [Thread-188742] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:03:36.662 [DEBUG] [Thread-188742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:03:36.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:03:36.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:03:36.717 [DEBUG] [Thread-188742] [transport.py] [_log()] userauth is OK
2026-04-12T12:03:36.718 [DEBUG] [Thread-188742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:03:36.718 [DEBUG] [Thread-188742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:03:36.718 [DEBUG] [Thread-188742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:03:36.718 [DEBUG] [Thread-188742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:03:36.736 [INFO] [Thread-188742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:03:36.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:03:36.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:03:37.549 [DEBUG] [Thread-188742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:03:37.549 [DEBUG] [Thread-188742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:03:37.597 [DEBUG] [Thread-188742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:03:37.597 [DEBUG] [Thread-188742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:03:37.606 [DEBUG] [Thread-188742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:03:37.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:03:37.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:03:37.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:03:37.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:03:37.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:03:37.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:03:37.640 [DEBUG] [Thread-188742] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:03:43.660 [DEBUG] [Thread-188744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:03:58.714 [DEBUG] [Thread-188745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:04:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:04:07.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:04:07.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:04:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 3, 59), 0.318335, 97.7293, 0.0, 20.5391, 11.8189, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:04:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:03:59
2026-04-12T12:04:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:04:09.437 [DEBUG] [Thread-188746] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d00
2026-04-12T12:04:09.438 [DEBUG] [Thread-188746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:04:09.458 [DEBUG] [Thread-188746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:04:09.458 [INFO] [Thread-188746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:04:09.459 [DEBUG] [Thread-188746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:04:09.459 [DEBUG] [Thread-188746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:04:09.459 [DEBUG] [Thread-188746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] client lang: <none>
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] server lang: <none>
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] kex follows: False
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] Compression: none
2026-04-12T12:04:09.460 [DEBUG] [Thread-188746] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:04:09.473 [DEBUG] [Thread-188746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:04:09.473 [DEBUG] [Thread-188746] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:04:09.474 [DEBUG] [Thread-188746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:04:09.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:04:09.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:04:09.476 [DEBUG] [Thread-188746] [transport.py] [_log()] userauth is OK
2026-04-12T12:04:09.476 [DEBUG] [Thread-188746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:04:09.476 [DEBUG] [Thread-188746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:04:09.476 [DEBUG] [Thread-188746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:04:09.476 [DEBUG] [Thread-188746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:04:09.501 [INFO] [Thread-188746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:04:09.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:04:10.302 [DEBUG] [Thread-188746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:04:10.302 [DEBUG] [Thread-188746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:04:10.303 [DEBUG] [Thread-188746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:04:10.343 [DEBUG] [Thread-188746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:04:10.343 [DEBUG] [Thread-188746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:04:10.346 [DEBUG] [Thread-188746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:04:10.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:04:10.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:04:10.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:04:10.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:04:10.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:04:10.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:04:10.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:04:10.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:04:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:04:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.418859 -999.00  +11.80  21.38     91  +10.50 1 3 1 3 1   888    0 1.37 2.27 ----- 19.9 21.4 276.2 23.9 15.1 -5.8 14.7 -4.6 14.1 -3.9 14.8 -4.5
2026-04-12T12:04:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:04:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:04:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.418859
2026-04-12T12:04:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:04:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:04:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:04:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:04:10.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:04:10.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:03:59', tmtdew=0.318335, humidity=97.7293, cloud=0.0, wind=20.5391, temperature=11.8189, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:03:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:04:10.372 [DEBUG] [Thread-188746] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:04:10.421 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:04:10.422 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:04:10.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:04:10.465 [DEBUG] [Thread-188749] [transport.py] [_log()] starting thread (client mode): 0xb0fb4ca0
2026-04-12T12:04:10.466 [DEBUG] [Thread-188749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:04:10.481 [DEBUG] [Thread-188749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:04:10.481 [INFO] [Thread-188749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:04:10.489 [DEBUG] [Thread-188749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:04:10.489 [DEBUG] [Thread-188749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] client lang: <none>
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] server lang: <none>
2026-04-12T12:04:10.490 [DEBUG] [Thread-188749] [transport.py] [_log()] kex follows: False
2026-04-12T12:04:10.491 [DEBUG] [Thread-188749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:04:10.491 [DEBUG] [Thread-188749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:04:10.491 [DEBUG] [Thread-188749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:04:10.491 [DEBUG] [Thread-188749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:04:10.491 [DEBUG] [Thread-188749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:04:10.491 [DEBUG] [Thread-188749] [transport.py] [_log()] Compression: none
2026-04-12T12:04:10.491 [DEBUG] [Thread-188749] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:04:10.550 [DEBUG] [Thread-188749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:04:10.551 [DEBUG] [Thread-188749] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:04:10.552 [DEBUG] [Thread-188749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:04:10.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:04:10.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:04:10.610 [DEBUG] [Thread-188749] [transport.py] [_log()] userauth is OK
2026-04-12T12:04:10.610 [DEBUG] [Thread-188749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:04:10.611 [DEBUG] [Thread-188749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:04:10.611 [DEBUG] [Thread-188749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:04:10.611 [DEBUG] [Thread-188749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:04:10.636 [INFO] [Thread-188749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:04:10.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:04:10.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:04:11.479 [DEBUG] [Thread-188749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:04:11.479 [DEBUG] [Thread-188749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:04:11.527 [DEBUG] [Thread-188749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:04:11.527 [DEBUG] [Thread-188749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:04:11.537 [DEBUG] [Thread-188749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:04:11.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:04:11.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:04:11.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:04:11.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:04:11.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:04:11.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:04:11.572 [DEBUG] [Thread-188749] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:04:13.758 [DEBUG] [Thread-188751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:04:28.815 [DEBUG] [Thread-188752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:04:32.862 [DEBUG] [Thread-188753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:04:41.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:04:41.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:04:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:04:42.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 4, 34), 0.58317, 96.1602, 0.0, 23.359, 12.3052, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:04:42.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:04:34
2026-04-12T12:04:43.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:04:43.422 [DEBUG] [Thread-188754] [transport.py] [_log()] starting thread (client mode): 0xb0f56920
2026-04-12T12:04:43.422 [DEBUG] [Thread-188754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:04:43.443 [DEBUG] [Thread-188754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:04:43.443 [INFO] [Thread-188754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:04:43.446 [DEBUG] [Thread-188754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:04:43.446 [DEBUG] [Thread-188754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:04:43.446 [DEBUG] [Thread-188754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:04:43.446 [DEBUG] [Thread-188754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] client lang: <none>
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] server lang: <none>
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] kex follows: False
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] Compression: none
2026-04-12T12:04:43.447 [DEBUG] [Thread-188754] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:04:43.464 [DEBUG] [Thread-188754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:04:43.464 [DEBUG] [Thread-188754] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:04:43.465 [DEBUG] [Thread-188754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:04:43.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:04:43.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:04:43.467 [DEBUG] [Thread-188754] [transport.py] [_log()] userauth is OK
2026-04-12T12:04:43.467 [DEBUG] [Thread-188754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:04:43.467 [DEBUG] [Thread-188754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:04:43.468 [DEBUG] [Thread-188754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:04:43.468 [DEBUG] [Thread-188754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:04:43.503 [INFO] [Thread-188754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:04:43.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:04:43.854 [DEBUG] [Thread-188756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:04:44.294 [DEBUG] [Thread-188754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:04:44.294 [DEBUG] [Thread-188754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:04:44.294 [DEBUG] [Thread-188754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:04:44.335 [DEBUG] [Thread-188754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:04:44.335 [DEBUG] [Thread-188754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:04:44.339 [DEBUG] [Thread-188754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:04:44.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:04:44.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:04:44.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:04:44.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:04:44.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:04:44.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:04:44.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:04:44.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:04:44.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:04:44.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.419553 -999.00  +11.60  24.52     91  +10.20 1 3 1 3 1   888    0 1.38 1.93 ----- 19.1 24.5 277.8 30.5 15.1 -4.5 14.7 -4.1 13.9 -4.6 14.7 -3.2
2026-04-12T12:04:44.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:04:44.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:04:44.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.419553
2026-04-12T12:04:44.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:04:44.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:04:44.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:04:44.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:04:44.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:04:44.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:04:34', tmtdew=0.58317, humidity=96.1602, cloud=0.0, wind=23.359, temperature=12.3052, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:04:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:04:44.366 [DEBUG] [Thread-188754] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:04:44.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:04:44.460 [DEBUG] [Thread-188758] [transport.py] [_log()] starting thread (client mode): 0xb0fb4790
2026-04-12T12:04:44.460 [DEBUG] [Thread-188758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:04:44.479 [DEBUG] [Thread-188758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:04:44.479 [INFO] [Thread-188758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:04:44.488 [DEBUG] [Thread-188758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:04:44.488 [DEBUG] [Thread-188758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:04:44.488 [DEBUG] [Thread-188758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:04:44.488 [DEBUG] [Thread-188758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] client lang: <none>
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] server lang: <none>
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] kex follows: False
2026-04-12T12:04:44.489 [DEBUG] [Thread-188758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:04:44.490 [DEBUG] [Thread-188758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:04:44.490 [DEBUG] [Thread-188758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:04:44.490 [DEBUG] [Thread-188758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:04:44.490 [DEBUG] [Thread-188758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:04:44.490 [DEBUG] [Thread-188758] [transport.py] [_log()] Compression: none
2026-04-12T12:04:44.490 [DEBUG] [Thread-188758] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:04:44.547 [DEBUG] [Thread-188758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:04:44.547 [DEBUG] [Thread-188758] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:04:44.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:04:44.549 [DEBUG] [Thread-188758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:04:44.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:04:44.611 [DEBUG] [Thread-188758] [transport.py] [_log()] userauth is OK
2026-04-12T12:04:44.611 [DEBUG] [Thread-188758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:04:44.611 [DEBUG] [Thread-188758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:04:44.611 [DEBUG] [Thread-188758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:04:44.611 [DEBUG] [Thread-188758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:04:44.633 [INFO] [Thread-188758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:04:44.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:04:44.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:04:45.468 [DEBUG] [Thread-188758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:04:45.469 [DEBUG] [Thread-188758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:04:45.517 [DEBUG] [Thread-188758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:04:45.517 [DEBUG] [Thread-188758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:04:45.527 [DEBUG] [Thread-188758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:04:45.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:04:45.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:04:45.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:04:45.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:04:45.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:04:45.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:04:45.562 [DEBUG] [Thread-188758] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:04:58.889 [DEBUG] [Thread-188760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:10.575 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:10.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:13.951 [DEBUG] [Thread-188761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:05:15.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:05:15.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:05:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 4, 34), 0.58317, 96.1602, 0.0, 23.359, 12.3052, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:05:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:04:34
2026-04-12T12:05:17.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:05:17.518 [DEBUG] [Thread-188762] [transport.py] [_log()] starting thread (client mode): 0xb0fb7ca0
2026-04-12T12:05:17.518 [DEBUG] [Thread-188762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:05:17.539 [DEBUG] [Thread-188762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:05:17.539 [INFO] [Thread-188762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:05:17.542 [DEBUG] [Thread-188762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] client lang: <none>
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] server lang: <none>
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] kex follows: False
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] Compression: none
2026-04-12T12:05:17.543 [DEBUG] [Thread-188762] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:05:17.560 [DEBUG] [Thread-188762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:05:17.561 [DEBUG] [Thread-188762] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:05:17.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:05:17.562 [DEBUG] [Thread-188762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:05:17.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:05:17.563 [DEBUG] [Thread-188762] [transport.py] [_log()] userauth is OK
2026-04-12T12:05:17.564 [DEBUG] [Thread-188762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:05:17.564 [DEBUG] [Thread-188762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:05:17.564 [DEBUG] [Thread-188762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:05:17.564 [DEBUG] [Thread-188762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:05:17.587 [INFO] [Thread-188762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:05:17.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:05:23.924 [DEBUG] [Thread-188762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:05:23.924 [DEBUG] [Thread-188762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:05:23.924 [DEBUG] [Thread-188762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:05:23.965 [DEBUG] [Thread-188762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:05:23.965 [DEBUG] [Thread-188762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:05:23.968 [DEBUG] [Thread-188762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:05:24.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:05:24.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:05:24.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:05:24.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:05:24.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:05:24.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:05:24.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:05:24.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:05:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:05:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.419900 -999.00  +11.60  20.83     91  +10.30 1 3 1 3 1   888    0 1.36 2.14 ----- 25.4 20.8 281.2 26.0 15.0 -4.9 14.8 -3.5 14.0 -3.4 14.7 -3.3
2026-04-12T12:05:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:05:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:05:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.419900
2026-04-12T12:05:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:05:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:05:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:05:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:05:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:05:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:04:34', tmtdew=0.58317, humidity=96.1602, cloud=0.0, wind=23.359, temperature=12.3052, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:04:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:05:24.051 [DEBUG] [Thread-188762] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:05:24.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:05:24.147 [DEBUG] [Thread-188765] [transport.py] [_log()] starting thread (client mode): 0xb0fb4520
2026-04-12T12:05:24.147 [DEBUG] [Thread-188765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:05:24.161 [DEBUG] [Thread-188765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:05:24.162 [INFO] [Thread-188765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:05:24.171 [DEBUG] [Thread-188765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:05:24.171 [DEBUG] [Thread-188765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:05:24.171 [DEBUG] [Thread-188765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:05:24.171 [DEBUG] [Thread-188765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:24.171 [DEBUG] [Thread-188765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:24.171 [DEBUG] [Thread-188765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:24.171 [DEBUG] [Thread-188765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] client lang: <none>
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] server lang: <none>
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] kex follows: False
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:05:24.172 [DEBUG] [Thread-188765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:05:24.173 [DEBUG] [Thread-188765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:05:24.173 [DEBUG] [Thread-188765] [transport.py] [_log()] Compression: none
2026-04-12T12:05:24.173 [DEBUG] [Thread-188765] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:05:24.229 [DEBUG] [Thread-188765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:05:24.230 [DEBUG] [Thread-188765] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:05:24.230 [DEBUG] [Thread-188765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:05:24.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:05:24.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:05:24.285 [DEBUG] [Thread-188765] [transport.py] [_log()] userauth is OK
2026-04-12T12:05:24.285 [DEBUG] [Thread-188765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:05:24.285 [DEBUG] [Thread-188765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:05:24.285 [DEBUG] [Thread-188765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:05:24.285 [DEBUG] [Thread-188765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:05:24.304 [INFO] [Thread-188765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:05:24.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:05:24.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:05:25.116 [DEBUG] [Thread-188765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:05:25.116 [DEBUG] [Thread-188765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:05:25.164 [DEBUG] [Thread-188765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:05:25.164 [DEBUG] [Thread-188765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:05:25.174 [DEBUG] [Thread-188765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:05:25.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:05:25.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:05:25.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:05:25.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:05:25.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:05:25.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:05:25.210 [DEBUG] [Thread-188765] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:05:28.987 [DEBUG] [Thread-188767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:32.893 [DEBUG] [Thread-188768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:44.041 [DEBUG] [Thread-188769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:55.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:05:55.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:05:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:05:56.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 5, 46), 0.59916, 96.061, 0.0, 23.5354, 12.4048, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:05:56.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:05:46
2026-04-12T12:05:56.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:05:57.093 [DEBUG] [Thread-188770] [transport.py] [_log()] starting thread (client mode): 0xb0f57280
2026-04-12T12:05:57.093 [DEBUG] [Thread-188770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:05:57.110 [DEBUG] [Thread-188770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:05:57.110 [INFO] [Thread-188770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:05:57.113 [DEBUG] [Thread-188770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] client lang: <none>
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] server lang: <none>
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] kex follows: False
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] Compression: none
2026-04-12T12:05:57.114 [DEBUG] [Thread-188770] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:05:57.122 [DEBUG] [Thread-188770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:05:57.123 [DEBUG] [Thread-188770] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:05:57.123 [DEBUG] [Thread-188770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:05:57.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:05:57.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:05:57.126 [DEBUG] [Thread-188770] [transport.py] [_log()] userauth is OK
2026-04-12T12:05:57.126 [DEBUG] [Thread-188770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:05:57.126 [DEBUG] [Thread-188770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:05:57.126 [DEBUG] [Thread-188770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:05:57.126 [DEBUG] [Thread-188770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:05:57.146 [INFO] [Thread-188770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:05:57.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:05:57.775 [DEBUG] [Thread-188770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:05:57.775 [DEBUG] [Thread-188770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:05:57.775 [DEBUG] [Thread-188770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:05:57.816 [DEBUG] [Thread-188770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:05:57.816 [DEBUG] [Thread-188770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:05:57.819 [DEBUG] [Thread-188770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:05:57.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:05:57.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:05:57.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:05:57.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:05:57.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:05:57.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:05:57.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:05:57.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:05:57.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:05:57.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.420595 -999.00  +11.70  13.67     92  +10.40 1 3 1 3 1   888    0 1.39 2.44 ----- 14.5 13.7 274.6 21.4 15.1 -4.0 14.7 -3.5 14.0 -2.5 14.7 -3.2
2026-04-12T12:05:57.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:05:57.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:05:57.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.420595
2026-04-12T12:05:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:05:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:05:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:05:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:05:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:05:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:05:46', tmtdew=0.59916, humidity=96.061, cloud=0.0, wind=23.5354, temperature=12.4048, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:05:39.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:05:57.843 [DEBUG] [Thread-188770] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:05:57.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:05:57.940 [DEBUG] [Thread-188773] [transport.py] [_log()] starting thread (client mode): 0xb0f55240
2026-04-12T12:05:57.940 [DEBUG] [Thread-188773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:05:57.956 [DEBUG] [Thread-188773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:05:57.956 [INFO] [Thread-188773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] client lang: <none>
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] server lang: <none>
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] kex follows: False
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:05:57.964 [DEBUG] [Thread-188773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:05:57.965 [DEBUG] [Thread-188773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:05:57.965 [DEBUG] [Thread-188773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:05:57.965 [DEBUG] [Thread-188773] [transport.py] [_log()] Compression: none
2026-04-12T12:05:57.965 [DEBUG] [Thread-188773] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:05:58.022 [DEBUG] [Thread-188773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:05:58.023 [DEBUG] [Thread-188773] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:05:58.023 [DEBUG] [Thread-188773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:05:58.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:05:58.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:05:58.081 [DEBUG] [Thread-188773] [transport.py] [_log()] userauth is OK
2026-04-12T12:05:58.081 [DEBUG] [Thread-188773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:05:58.082 [DEBUG] [Thread-188773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:05:58.082 [DEBUG] [Thread-188773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:05:58.082 [DEBUG] [Thread-188773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:05:58.106 [INFO] [Thread-188773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:05:58.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:05:58.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:05:58.982 [DEBUG] [Thread-188773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:05:58.982 [DEBUG] [Thread-188773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:05:59.030 [DEBUG] [Thread-188773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:05:59.030 [DEBUG] [Thread-188773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:05:59.039 [DEBUG] [Thread-188773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:05:59.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:05:59.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:05:59.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:05:59.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:05:59.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:05:59.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:05:59.076 [DEBUG] [Thread-188775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:05:59.077 [DEBUG] [Thread-188773] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:06:10.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:06:10.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:06:14.132 [DEBUG] [Thread-188776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:06:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:06:29.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:06:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:06:29.172 [DEBUG] [Thread-188777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:06:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 6, 21), 0.30977, 97.9643, 0.0, 20.4325, 11.7362, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:06:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:06:21
2026-04-12T12:06:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:06:30.959 [DEBUG] [Thread-188778] [transport.py] [_log()] starting thread (client mode): 0xb39c6230
2026-04-12T12:06:30.959 [DEBUG] [Thread-188778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:06:30.976 [DEBUG] [Thread-188778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:06:30.976 [INFO] [Thread-188778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:06:30.977 [DEBUG] [Thread-188778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] client lang: <none>
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] server lang: <none>
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] kex follows: False
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] Compression: none
2026-04-12T12:06:30.978 [DEBUG] [Thread-188778] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:06:30.991 [DEBUG] [Thread-188778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:06:30.991 [DEBUG] [Thread-188778] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:06:30.992 [DEBUG] [Thread-188778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:06:30.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:06:30.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:06:30.993 [DEBUG] [Thread-188778] [transport.py] [_log()] userauth is OK
2026-04-12T12:06:30.993 [DEBUG] [Thread-188778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:06:30.994 [DEBUG] [Thread-188778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:06:30.994 [DEBUG] [Thread-188778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:06:30.994 [DEBUG] [Thread-188778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:06:31.013 [INFO] [Thread-188778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:06:31.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:06:31.530 [DEBUG] [Thread-188778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:06:31.530 [DEBUG] [Thread-188778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:06:31.531 [DEBUG] [Thread-188778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:06:31.571 [DEBUG] [Thread-188778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:06:31.571 [DEBUG] [Thread-188778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:06:31.574 [DEBUG] [Thread-188778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:06:31.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:06:31.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:06:31.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:06:31.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:06:31.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:06:31.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:06:31.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:06:31.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:06:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:06:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.420942 -999.00  +11.70  20.36     91  +10.40 1 3 1 3 1   888    0 1.33 1.87 ----- 16.8 20.4 265.6 23.7 15.1 -4.4 14.7 -3.5 14.0 -3.9 14.6 -3.4
2026-04-12T12:06:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:06:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:06:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.420942
2026-04-12T12:06:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:06:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:06:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:06:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:06:31.595 [DEBUG] [Thread-188778] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:06:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:06:31.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:06:21', tmtdew=0.30977, humidity=97.9643, cloud=0.0, wind=20.4325, temperature=11.7362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:06:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:06:31.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:06:31.693 [DEBUG] [Thread-188781] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-12T12:06:31.693 [DEBUG] [Thread-188781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:06:31.708 [DEBUG] [Thread-188781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:06:31.709 [INFO] [Thread-188781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:06:31.716 [DEBUG] [Thread-188781] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:06:31.717 [DEBUG] [Thread-188781] [transport.py] [_log()] client lang: <none>
2026-04-12T12:06:31.718 [DEBUG] [Thread-188781] [transport.py] [_log()] server lang: <none>
2026-04-12T12:06:31.718 [DEBUG] [Thread-188781] [transport.py] [_log()] kex follows: False
2026-04-12T12:06:31.718 [DEBUG] [Thread-188781] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:06:31.718 [DEBUG] [Thread-188781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:06:31.718 [DEBUG] [Thread-188781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:06:31.718 [DEBUG] [Thread-188781] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:06:31.718 [DEBUG] [Thread-188781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:06:31.719 [DEBUG] [Thread-188781] [transport.py] [_log()] Compression: none
2026-04-12T12:06:31.719 [DEBUG] [Thread-188781] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:06:31.774 [DEBUG] [Thread-188781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:06:31.774 [DEBUG] [Thread-188781] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:06:31.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:06:31.775 [DEBUG] [Thread-188781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:06:31.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:06:31.830 [DEBUG] [Thread-188781] [transport.py] [_log()] userauth is OK
2026-04-12T12:06:31.831 [DEBUG] [Thread-188781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:06:31.831 [DEBUG] [Thread-188781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:06:31.831 [DEBUG] [Thread-188781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:06:31.831 [DEBUG] [Thread-188781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:06:31.851 [INFO] [Thread-188781] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:06:31.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:06:31.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:06:32.689 [DEBUG] [Thread-188781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:06:32.689 [DEBUG] [Thread-188781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:06:32.737 [DEBUG] [Thread-188781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:06:32.738 [DEBUG] [Thread-188781] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:06:32.747 [DEBUG] [Thread-188781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:06:32.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:06:32.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:06:32.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:06:32.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:06:32.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:06:32.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:06:32.784 [DEBUG] [Thread-188781] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:06:32.935 [DEBUG] [Thread-188783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:06:44.206 [DEBUG] [Thread-188784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:06:59.260 [DEBUG] [Thread-188785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:07:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:07:02.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:07:02.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:07:04.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 6, 56), 0.3444, 97.5638, 0.0, 23.1498, 11.8191, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:07:04.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:06:56
2026-04-12T12:07:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:07:04.619 [DEBUG] [Thread-188786] [transport.py] [_log()] starting thread (client mode): 0xa796aaa0
2026-04-12T12:07:04.619 [DEBUG] [Thread-188786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:07:04.632 [DEBUG] [Thread-188786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:07:04.632 [INFO] [Thread-188786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:07:04.633 [DEBUG] [Thread-188786] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] client lang: <none>
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] server lang: <none>
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] kex follows: False
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] Compression: none
2026-04-12T12:07:04.634 [DEBUG] [Thread-188786] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:07:04.652 [DEBUG] [Thread-188786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:07:04.652 [DEBUG] [Thread-188786] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:07:04.652 [DEBUG] [Thread-188786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:07:04.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:07:04.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:07:04.654 [DEBUG] [Thread-188786] [transport.py] [_log()] userauth is OK
2026-04-12T12:07:04.655 [DEBUG] [Thread-188786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:07:04.655 [DEBUG] [Thread-188786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:07:04.655 [DEBUG] [Thread-188786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:07:04.655 [DEBUG] [Thread-188786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:07:04.679 [INFO] [Thread-188786] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:07:04.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:07:05.277 [DEBUG] [Thread-188786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:07:05.277 [DEBUG] [Thread-188786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:07:05.277 [DEBUG] [Thread-188786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:07:05.319 [DEBUG] [Thread-188786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:07:05.319 [DEBUG] [Thread-188786] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:07:05.323 [DEBUG] [Thread-188786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:07:05.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:07:05.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:07:05.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:07:05.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:07:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:07:05.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:07:05.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:07:05.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:07:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:07:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.421289 -999.00  +11.70  23.83     91  +10.40 1 3 1 3 1   888    0 1.36 1.82 ----- 23.4 23.8 275.6 28.5 15.0 -4.8 14.7 -3.8 14.0 -4.0 14.6 -3.5
2026-04-12T12:07:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:07:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:07:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.421289
2026-04-12T12:07:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:07:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:07:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:07:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:07:05.346 [DEBUG] [Thread-188786] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:07:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:07:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:06:56', tmtdew=0.3444, humidity=97.5638, cloud=0.0, wind=23.1498, temperature=11.8191, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:06:39.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:07:05.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:07:05.431 [DEBUG] [Thread-188789] [transport.py] [_log()] starting thread (client mode): 0xb0f57ac0
2026-04-12T12:07:05.431 [DEBUG] [Thread-188789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:07:05.445 [DEBUG] [Thread-188789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:07:05.445 [INFO] [Thread-188789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] client lang: <none>
2026-04-12T12:07:05.453 [DEBUG] [Thread-188789] [transport.py] [_log()] server lang: <none>
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] kex follows: False
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] Compression: none
2026-04-12T12:07:05.454 [DEBUG] [Thread-188789] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:07:05.515 [DEBUG] [Thread-188789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:07:05.515 [DEBUG] [Thread-188789] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:07:05.516 [DEBUG] [Thread-188789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:07:05.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:07:05.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:07:05.574 [DEBUG] [Thread-188789] [transport.py] [_log()] userauth is OK
2026-04-12T12:07:05.575 [DEBUG] [Thread-188789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:07:05.575 [DEBUG] [Thread-188789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:07:05.575 [DEBUG] [Thread-188789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:07:05.575 [DEBUG] [Thread-188789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:07:05.596 [INFO] [Thread-188789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:07:05.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:07:05.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:07:06.424 [DEBUG] [Thread-188789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:07:06.424 [DEBUG] [Thread-188789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:07:06.472 [DEBUG] [Thread-188789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:07:06.472 [DEBUG] [Thread-188789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:07:06.482 [DEBUG] [Thread-188789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:07:06.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:07:06.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:07:06.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:07:06.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:07:06.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:07:06.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:07:06.521 [DEBUG] [Thread-188789] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:07:10.886 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:07:10.887 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:07:14.301 [DEBUG] [Thread-188791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:07:29.354 [DEBUG] [Thread-188792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:07:32.973 [DEBUG] [Thread-188793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:07:36.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:07:36.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:07:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:07:37.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 6, 56), 0.3444, 97.5638, 0.0, 23.1498, 11.8191, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:07:37.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:06:56
2026-04-12T12:07:38.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:07:38.513 [DEBUG] [Thread-188794] [transport.py] [_log()] starting thread (client mode): 0xb39c7400
2026-04-12T12:07:38.513 [DEBUG] [Thread-188794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:07:38.534 [DEBUG] [Thread-188794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:07:38.534 [INFO] [Thread-188794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] client lang: <none>
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] server lang: <none>
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] kex follows: False
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:07:38.536 [DEBUG] [Thread-188794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:07:38.537 [DEBUG] [Thread-188794] [transport.py] [_log()] Compression: none
2026-04-12T12:07:38.537 [DEBUG] [Thread-188794] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:07:38.556 [DEBUG] [Thread-188794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:07:38.556 [DEBUG] [Thread-188794] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:07:38.557 [DEBUG] [Thread-188794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:07:38.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:07:38.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:07:38.560 [DEBUG] [Thread-188794] [transport.py] [_log()] userauth is OK
2026-04-12T12:07:38.560 [DEBUG] [Thread-188794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:07:38.560 [DEBUG] [Thread-188794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:07:38.560 [DEBUG] [Thread-188794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:07:38.560 [DEBUG] [Thread-188794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:07:38.600 [INFO] [Thread-188794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:07:38.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:07:39.165 [DEBUG] [Thread-188794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:07:39.165 [DEBUG] [Thread-188794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:07:39.166 [DEBUG] [Thread-188794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:07:39.206 [DEBUG] [Thread-188794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:07:39.207 [DEBUG] [Thread-188794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:07:39.209 [DEBUG] [Thread-188794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:07:39.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:07:39.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:07:39.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:07:39.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:07:39.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:07:39.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:07:39.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:07:39.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:07:39.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:07:39.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.421636 -999.00  +11.60  19.86     91  +10.20 1 3 1 3 1   888    0 1.37 1.74 ----- 21.6 19.9 274.2 22.1 15.0 -4.4 14.7 -3.5 14.0 -2.5 14.6 -3.0
2026-04-12T12:07:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:07:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:07:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.421636
2026-04-12T12:07:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:07:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:07:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:07:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:07:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:07:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:06:56', tmtdew=0.3444, humidity=97.5638, cloud=0.0, wind=23.1498, temperature=11.8191, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:07:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:07:39.233 [DEBUG] [Thread-188794] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:07:39.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:07:39.326 [DEBUG] [Thread-188797] [transport.py] [_log()] starting thread (client mode): 0xb39c6bc0
2026-04-12T12:07:39.326 [DEBUG] [Thread-188797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:07:39.341 [DEBUG] [Thread-188797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:07:39.341 [INFO] [Thread-188797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:07:39.349 [DEBUG] [Thread-188797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:07:39.349 [DEBUG] [Thread-188797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:07:39.349 [DEBUG] [Thread-188797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:07:39.349 [DEBUG] [Thread-188797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:39.349 [DEBUG] [Thread-188797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:07:39.349 [DEBUG] [Thread-188797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:39.349 [DEBUG] [Thread-188797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] client lang: <none>
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] server lang: <none>
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] kex follows: False
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] Compression: none
2026-04-12T12:07:39.350 [DEBUG] [Thread-188797] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:07:39.409 [DEBUG] [Thread-188797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:07:39.410 [DEBUG] [Thread-188797] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:07:39.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:07:39.411 [DEBUG] [Thread-188797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:07:39.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:07:39.465 [DEBUG] [Thread-188797] [transport.py] [_log()] userauth is OK
2026-04-12T12:07:39.466 [DEBUG] [Thread-188797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:07:39.466 [DEBUG] [Thread-188797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:07:39.466 [DEBUG] [Thread-188797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:07:39.466 [DEBUG] [Thread-188797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:07:39.485 [INFO] [Thread-188797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:07:39.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:07:39.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:07:40.293 [DEBUG] [Thread-188797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:07:40.294 [DEBUG] [Thread-188797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:07:40.342 [DEBUG] [Thread-188797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:07:40.342 [DEBUG] [Thread-188797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:07:40.351 [DEBUG] [Thread-188797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:07:40.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:07:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:07:40.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:07:40.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:07:40.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:07:40.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:07:40.388 [DEBUG] [Thread-188797] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:07:44.387 [DEBUG] [Thread-188799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:07:59.441 [DEBUG] [Thread-188800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:08:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:08:10.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:08:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:08:11.038 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:08:11.039 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:08:11.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 7, 32), 0.35229, 97.5138, 0.0, 21.915, 11.8189, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:08:11.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:07:32
2026-04-12T12:08:12.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:08:12.182 [DEBUG] [Thread-188801] [transport.py] [_log()] starting thread (client mode): 0xae514520
2026-04-12T12:08:12.182 [DEBUG] [Thread-188801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:08:12.203 [DEBUG] [Thread-188801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:08:12.203 [INFO] [Thread-188801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:08:12.203 [DEBUG] [Thread-188801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] client lang: <none>
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] server lang: <none>
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] kex follows: False
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] Compression: none
2026-04-12T12:08:12.204 [DEBUG] [Thread-188801] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:08:12.212 [DEBUG] [Thread-188801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:08:12.212 [DEBUG] [Thread-188801] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:08:12.212 [DEBUG] [Thread-188801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:08:12.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:08:12.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:08:12.213 [DEBUG] [Thread-188801] [transport.py] [_log()] userauth is OK
2026-04-12T12:08:12.213 [DEBUG] [Thread-188801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:08:12.213 [DEBUG] [Thread-188801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:08:12.214 [DEBUG] [Thread-188801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:08:12.214 [DEBUG] [Thread-188801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:08:12.228 [INFO] [Thread-188801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:08:12.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:08:12.826 [DEBUG] [Thread-188801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:08:12.826 [DEBUG] [Thread-188801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:08:12.827 [DEBUG] [Thread-188801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:08:12.867 [DEBUG] [Thread-188801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:08:12.867 [DEBUG] [Thread-188801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:08:12.870 [DEBUG] [Thread-188801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:08:12.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:08:12.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:08:12.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:08:12.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:08:12.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:08:12.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:08:12.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:08:12.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:08:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:08:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.421983 -999.00  +11.60  19.14     91  +10.30 1 3 1 3 1   888    0 1.34 2.23 ----- 20.6 19.1 278.8 23.9 14.9 -4.3 14.7 -3.2 13.8 -3.4 14.6 -3.2
2026-04-12T12:08:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:08:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:08:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.421983
2026-04-12T12:08:12.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:08:12.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:08:12.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:08:12.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:08:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:08:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:07:32', tmtdew=0.35229, humidity=97.5138, cloud=0.0, wind=21.915, temperature=11.8189, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:07:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:08:12.896 [DEBUG] [Thread-188801] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:08:12.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:08:12.992 [DEBUG] [Thread-188804] [transport.py] [_log()] starting thread (client mode): 0xa7968f70
2026-04-12T12:08:12.992 [DEBUG] [Thread-188804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:08:13.007 [DEBUG] [Thread-188804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:08:13.008 [INFO] [Thread-188804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:08:13.015 [DEBUG] [Thread-188804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:08:13.015 [DEBUG] [Thread-188804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:08:13.015 [DEBUG] [Thread-188804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] client lang: <none>
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] server lang: <none>
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] kex follows: False
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] Compression: none
2026-04-12T12:08:13.016 [DEBUG] [Thread-188804] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:08:13.077 [DEBUG] [Thread-188804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:08:13.077 [DEBUG] [Thread-188804] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:08:13.078 [DEBUG] [Thread-188804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:08:13.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:08:13.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:08:13.133 [DEBUG] [Thread-188804] [transport.py] [_log()] userauth is OK
2026-04-12T12:08:13.133 [DEBUG] [Thread-188804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:08:13.134 [DEBUG] [Thread-188804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:08:13.134 [DEBUG] [Thread-188804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:08:13.134 [DEBUG] [Thread-188804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:08:13.154 [INFO] [Thread-188804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:08:13.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:08:13.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:08:14.030 [DEBUG] [Thread-188804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:08:14.030 [DEBUG] [Thread-188804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:08:14.078 [DEBUG] [Thread-188804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:08:14.078 [DEBUG] [Thread-188804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:08:14.087 [DEBUG] [Thread-188804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:08:14.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:08:14.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:08:14.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:08:14.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:08:14.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:08:14.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:08:14.124 [DEBUG] [Thread-188804] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:08:14.479 [DEBUG] [Thread-188806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:08:29.533 [DEBUG] [Thread-188807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:08:33.007 [DEBUG] [Thread-188808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:08:44.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:08:44.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:08:44.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:08:44.571 [DEBUG] [Thread-188809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:08:45.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 8, 8), 0.35484, 97.4972, 0.0, 20.3274, 11.8023, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:08:45.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:08:08
2026-04-12T12:08:45.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:08:46.041 [DEBUG] [Thread-188810] [transport.py] [_log()] starting thread (client mode): 0xae515b40
2026-04-12T12:08:46.041 [DEBUG] [Thread-188810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:08:46.060 [DEBUG] [Thread-188810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:08:46.061 [INFO] [Thread-188810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:08:46.063 [DEBUG] [Thread-188810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] client lang: <none>
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] server lang: <none>
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] kex follows: False
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] Compression: none
2026-04-12T12:08:46.064 [DEBUG] [Thread-188810] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:08:46.073 [DEBUG] [Thread-188810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:08:46.073 [DEBUG] [Thread-188810] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:08:46.073 [DEBUG] [Thread-188810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:08:46.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:08:46.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:08:46.075 [DEBUG] [Thread-188810] [transport.py] [_log()] userauth is OK
2026-04-12T12:08:46.075 [DEBUG] [Thread-188810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:08:46.075 [DEBUG] [Thread-188810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:08:46.075 [DEBUG] [Thread-188810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:08:46.076 [DEBUG] [Thread-188810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:08:46.094 [INFO] [Thread-188810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:08:46.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:08:46.677 [DEBUG] [Thread-188810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:08:46.677 [DEBUG] [Thread-188810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:08:46.677 [DEBUG] [Thread-188810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:08:46.718 [DEBUG] [Thread-188810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:08:46.719 [DEBUG] [Thread-188810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:08:46.722 [DEBUG] [Thread-188810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:08:46.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:08:46.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:08:46.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:08:46.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:08:46.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:08:46.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:08:46.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:08:46.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:08:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:08:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.422331 -999.00  +11.60  17.34     91  +10.20 1 3 1 3 1   888    0 1.43 2.75 ----- 16.2 17.3 283.2 23.9 15.0 -3.9 14.6 -3.5 13.8 -3.6 14.6 -2.7
2026-04-12T12:08:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:08:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:08:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.422331
2026-04-12T12:08:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:08:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:08:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:08:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:08:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:08:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:08:08', tmtdew=0.35484, humidity=97.4972, cloud=0.0, wind=20.3274, temperature=11.8023, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:08:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:08:46.746 [DEBUG] [Thread-188810] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:08:46.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:08:46.843 [DEBUG] [Thread-188813] [transport.py] [_log()] starting thread (client mode): 0xb0f55000
2026-04-12T12:08:46.844 [DEBUG] [Thread-188813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:08:46.858 [DEBUG] [Thread-188813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:08:46.858 [INFO] [Thread-188813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:08:46.865 [DEBUG] [Thread-188813] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] client lang: <none>
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] server lang: <none>
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] kex follows: False
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] Compression: none
2026-04-12T12:08:46.866 [DEBUG] [Thread-188813] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:08:46.928 [DEBUG] [Thread-188813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:08:46.928 [DEBUG] [Thread-188813] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:08:46.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:08:46.929 [DEBUG] [Thread-188813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:08:46.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:08:46.985 [DEBUG] [Thread-188813] [transport.py] [_log()] userauth is OK
2026-04-12T12:08:46.985 [DEBUG] [Thread-188813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:08:46.985 [DEBUG] [Thread-188813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:08:46.986 [DEBUG] [Thread-188813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:08:46.986 [DEBUG] [Thread-188813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:08:47.005 [INFO] [Thread-188813] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:08:47.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:08:47.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:08:47.868 [DEBUG] [Thread-188813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:08:47.869 [DEBUG] [Thread-188813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:08:47.917 [DEBUG] [Thread-188813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:08:47.918 [DEBUG] [Thread-188813] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:08:47.927 [DEBUG] [Thread-188813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:08:47.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:08:47.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:08:47.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:08:47.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:08:47.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:08:47.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:08:47.964 [DEBUG] [Thread-188813] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:08:59.609 [DEBUG] [Thread-188815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:09:11.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:09:11.194 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:09:14.661 [DEBUG] [Thread-188816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:09:17.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:09:17.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:09:17.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:09:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 8, 44), 0.61513, 95.9615, 0.0, 20.5718, 12.4712, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:09:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:08:44
2026-04-12T12:09:19.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:09:19.726 [DEBUG] [Thread-188817] [transport.py] [_log()] starting thread (client mode): 0xb39c6b00
2026-04-12T12:09:19.727 [DEBUG] [Thread-188817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:09:19.746 [DEBUG] [Thread-188817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:09:19.747 [INFO] [Thread-188817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:09:19.749 [DEBUG] [Thread-188817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] client lang: <none>
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] server lang: <none>
2026-04-12T12:09:19.750 [DEBUG] [Thread-188817] [transport.py] [_log()] kex follows: False
2026-04-12T12:09:19.751 [DEBUG] [Thread-188817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:09:19.751 [DEBUG] [Thread-188817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:09:19.751 [DEBUG] [Thread-188817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:09:19.751 [DEBUG] [Thread-188817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:09:19.751 [DEBUG] [Thread-188817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:09:19.751 [DEBUG] [Thread-188817] [transport.py] [_log()] Compression: none
2026-04-12T12:09:19.751 [DEBUG] [Thread-188817] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:09:19.769 [DEBUG] [Thread-188817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:09:19.770 [DEBUG] [Thread-188817] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:09:19.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:09:19.772 [DEBUG] [Thread-188817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:09:19.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:09:19.774 [DEBUG] [Thread-188817] [transport.py] [_log()] userauth is OK
2026-04-12T12:09:19.774 [DEBUG] [Thread-188817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:09:19.774 [DEBUG] [Thread-188817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:09:19.775 [DEBUG] [Thread-188817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:09:19.775 [DEBUG] [Thread-188817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:09:19.809 [INFO] [Thread-188817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:09:19.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:09:20.465 [DEBUG] [Thread-188817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:09:20.465 [DEBUG] [Thread-188817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:09:20.465 [DEBUG] [Thread-188817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:09:20.506 [DEBUG] [Thread-188817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:09:20.507 [DEBUG] [Thread-188817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:09:20.510 [DEBUG] [Thread-188817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:09:20.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:09:20.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:09:20.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:09:20.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:09:20.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:09:20.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:09:20.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:09:20.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:09:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:09:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.423025 -999.00  +11.70  21.59     91  +10.40 1 3 1 3 1   888    0 1.36 2.70 ----- 20.7 21.6 279.2 29.2 14.8 -4.4 14.6 -3.3 13.8 -4.1 14.5 -3.0
2026-04-12T12:09:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:09:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:09:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.423025
2026-04-12T12:09:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:09:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:09:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:09:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:09:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:09:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:08:44', tmtdew=0.61513, humidity=95.9615, cloud=0.0, wind=20.5718, temperature=12.4712, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:09:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:09:20.527 [DEBUG] [Thread-188817] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:09:20.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:09:20.625 [DEBUG] [Thread-188820] [transport.py] [_log()] starting thread (client mode): 0xb39c6020
2026-04-12T12:09:20.625 [DEBUG] [Thread-188820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:09:20.640 [DEBUG] [Thread-188820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:09:20.640 [INFO] [Thread-188820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:09:20.650 [DEBUG] [Thread-188820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:09:20.650 [DEBUG] [Thread-188820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:09:20.650 [DEBUG] [Thread-188820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:09:20.650 [DEBUG] [Thread-188820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] client lang: <none>
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] server lang: <none>
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] kex follows: False
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] Compression: none
2026-04-12T12:09:20.651 [DEBUG] [Thread-188820] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:09:20.706 [DEBUG] [Thread-188820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:09:20.707 [DEBUG] [Thread-188820] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:09:20.708 [DEBUG] [Thread-188820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:09:20.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:09:20.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:09:20.772 [DEBUG] [Thread-188820] [transport.py] [_log()] userauth is OK
2026-04-12T12:09:20.773 [DEBUG] [Thread-188820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:09:20.773 [DEBUG] [Thread-188820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:09:20.773 [DEBUG] [Thread-188820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:09:20.773 [DEBUG] [Thread-188820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:09:20.797 [INFO] [Thread-188820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:09:20.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:09:20.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:09:21.639 [DEBUG] [Thread-188820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:09:21.639 [DEBUG] [Thread-188820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:09:21.687 [DEBUG] [Thread-188820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:09:21.687 [DEBUG] [Thread-188820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:09:21.696 [DEBUG] [Thread-188820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:09:21.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:09:21.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:09:21.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:09:21.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:09:21.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:09:21.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:09:21.729 [DEBUG] [Thread-188820] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:09:29.701 [DEBUG] [Thread-188822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:09:33.056 [DEBUG] [Thread-188823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:09:44.756 [DEBUG] [Thread-188824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:09:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:09:51.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:09: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
2026-04-12T12:09:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 9, 19), 0.373155, 97.3813, 0.0, 23.1682, 11.8524, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:09:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:09:19
2026-04-12T12:09:53.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:09:53.743 [DEBUG] [Thread-188825] [transport.py] [_log()] starting thread (client mode): 0xe6a3b730
2026-04-12T12:09:53.743 [DEBUG] [Thread-188825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:09:53.763 [DEBUG] [Thread-188825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:09:53.763 [INFO] [Thread-188825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:09:53.766 [DEBUG] [Thread-188825] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] client lang: <none>
2026-04-12T12:09:53.767 [DEBUG] [Thread-188825] [transport.py] [_log()] server lang: <none>
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] kex follows: False
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] Compression: none
2026-04-12T12:09:53.768 [DEBUG] [Thread-188825] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:09:53.786 [DEBUG] [Thread-188825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:09:53.787 [DEBUG] [Thread-188825] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:09:53.788 [DEBUG] [Thread-188825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:09:53.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:09:53.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:09:53.829 [DEBUG] [Thread-188825] [transport.py] [_log()] userauth is OK
2026-04-12T12:09:53.829 [DEBUG] [Thread-188825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:09:53.830 [DEBUG] [Thread-188825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:09:53.830 [DEBUG] [Thread-188825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:09:53.830 [DEBUG] [Thread-188825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:09:53.867 [INFO] [Thread-188825] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:09:53.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:09:54.512 [DEBUG] [Thread-188825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:09:54.512 [DEBUG] [Thread-188825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:09:54.513 [DEBUG] [Thread-188825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:09:54.553 [DEBUG] [Thread-188825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:09:54.553 [DEBUG] [Thread-188825] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:09:54.557 [DEBUG] [Thread-188825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:09:54.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:09:54.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:09:54.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:09:54.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:09:54.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:09:54.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:09:54.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:09:54.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:09:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:09:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.423372 -999.00  +11.60  23.42     91  +10.20 1 3 1 3 1   888    0 1.40 2.85 ----- 24.8 23.4 282.0 28.8 14.8 -4.3 14.6 -3.6 13.8 -4.3 14.4 -3.1
2026-04-12T12:09:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:09:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:09:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.423372
2026-04-12T12:09:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:09:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:09:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:09:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:09:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:09:54.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:09:19', tmtdew=0.373155, humidity=97.3813, cloud=0.0, wind=23.1682, temperature=11.8524, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:09:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:09:54.584 [DEBUG] [Thread-188825] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:09:54.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:09:54.683 [DEBUG] [Thread-188828] [transport.py] [_log()] starting thread (client mode): 0xa7969e40
2026-04-12T12:09:54.683 [DEBUG] [Thread-188828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:09:54.701 [DEBUG] [Thread-188828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:09:54.702 [INFO] [Thread-188828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:09:54.714 [DEBUG] [Thread-188828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:09:54.715 [DEBUG] [Thread-188828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:09:54.715 [DEBUG] [Thread-188828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:09:54.715 [DEBUG] [Thread-188828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:54.715 [DEBUG] [Thread-188828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:09:54.715 [DEBUG] [Thread-188828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:54.715 [DEBUG] [Thread-188828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] client lang: <none>
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] server lang: <none>
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] kex follows: False
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] Compression: none
2026-04-12T12:09:54.716 [DEBUG] [Thread-188828] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:09:54.774 [DEBUG] [Thread-188828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:09:54.775 [DEBUG] [Thread-188828] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:09:54.775 [DEBUG] [Thread-188828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:09:54.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:09:54.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:09:54.833 [DEBUG] [Thread-188828] [transport.py] [_log()] userauth is OK
2026-04-12T12:09:54.834 [DEBUG] [Thread-188828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:09:54.834 [DEBUG] [Thread-188828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:09:54.834 [DEBUG] [Thread-188828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:09:54.834 [DEBUG] [Thread-188828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:09:54.856 [INFO] [Thread-188828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:09:54.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:09:54.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:09:55.734 [DEBUG] [Thread-188828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:09:55.735 [DEBUG] [Thread-188828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:09:55.782 [DEBUG] [Thread-188828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:09:55.782 [DEBUG] [Thread-188828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:09:55.792 [DEBUG] [Thread-188828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:09:55.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:09:55.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:09:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:09:55.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:09:55.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:09:55.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:09:55.831 [DEBUG] [Thread-188828] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:09:59.795 [DEBUG] [Thread-188830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:10:11.354 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:10:11.355 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:10:14.850 [DEBUG] [Thread-188831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:10:25.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:10:25.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:10:25.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:10:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 9, 54), 0.3915, 97.265, 0.0, 23.9436, 11.8357, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:10:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:09:54
2026-04-12T12:10:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:10:27.717 [DEBUG] [Thread-188832] [transport.py] [_log()] starting thread (client mode): 0xb0f57880
2026-04-12T12:10:27.717 [DEBUG] [Thread-188832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:10:27.738 [DEBUG] [Thread-188832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:10:27.738 [INFO] [Thread-188832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:10:27.741 [DEBUG] [Thread-188832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] client lang: <none>
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] server lang: <none>
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] kex follows: False
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] Compression: none
2026-04-12T12:10:27.742 [DEBUG] [Thread-188832] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:10:27.758 [DEBUG] [Thread-188832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:10:27.758 [DEBUG] [Thread-188832] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:10:27.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:10:27.759 [DEBUG] [Thread-188832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:10:27.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:10:27.760 [DEBUG] [Thread-188832] [transport.py] [_log()] userauth is OK
2026-04-12T12:10:27.760 [DEBUG] [Thread-188832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:10:27.760 [DEBUG] [Thread-188832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:10:27.760 [DEBUG] [Thread-188832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:10:27.760 [DEBUG] [Thread-188832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:10:27.771 [INFO] [Thread-188832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:10:27.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:10:28.379 [DEBUG] [Thread-188832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:10:28.379 [DEBUG] [Thread-188832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:10:28.380 [DEBUG] [Thread-188832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:10:28.421 [DEBUG] [Thread-188832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:10:28.421 [DEBUG] [Thread-188832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:10:28.424 [DEBUG] [Thread-188832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:10:28.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:10:28.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:10:28.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:10:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:10:28.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:10:28.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:10:28.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:10:28.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:10:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:10:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.423719 -999.00  +11.50  20.24     91  +10.10 1 3 1 3 1   888    0 1.41 3.70 ----- 13.9 20.2 293.2 26.9 14.8 -3.9 14.5 -3.4 13.7 -3.6 14.5 -2.7
2026-04-12T12:10:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:10:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:10:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.423719
2026-04-12T12:10:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:10:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:10:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:10:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:10:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:10:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:09:54', tmtdew=0.3915, humidity=97.265, cloud=0.0, wind=23.9436, temperature=11.8357, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:10:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:10:28.455 [DEBUG] [Thread-188832] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:10:28.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:10:28.556 [DEBUG] [Thread-188835] [transport.py] [_log()] starting thread (client mode): 0xa796b490
2026-04-12T12:10:28.556 [DEBUG] [Thread-188835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:10:28.572 [DEBUG] [Thread-188835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:10:28.572 [INFO] [Thread-188835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:10:28.580 [DEBUG] [Thread-188835] [transport.py] [_log()] client lang: <none>
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] server lang: <none>
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] kex follows: False
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] Compression: none
2026-04-12T12:10:28.581 [DEBUG] [Thread-188835] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:10:28.640 [DEBUG] [Thread-188835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:10:28.640 [DEBUG] [Thread-188835] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:10:28.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:10:28.641 [DEBUG] [Thread-188835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:10:28.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:10:28.697 [DEBUG] [Thread-188835] [transport.py] [_log()] userauth is OK
2026-04-12T12:10:28.697 [DEBUG] [Thread-188835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:10:28.697 [DEBUG] [Thread-188835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:10:28.697 [DEBUG] [Thread-188835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:10:28.697 [DEBUG] [Thread-188835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:10:28.716 [INFO] [Thread-188835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:10:28.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:10:28.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:10:29.584 [DEBUG] [Thread-188835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:10:29.584 [DEBUG] [Thread-188835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:10:29.632 [DEBUG] [Thread-188835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:10:29.632 [DEBUG] [Thread-188835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:10:29.641 [DEBUG] [Thread-188835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:10:29.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:10:29.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:10:29.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:10:29.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:10:29.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:10:29.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:10:29.679 [DEBUG] [Thread-188835] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:10:29.887 [DEBUG] [Thread-188837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:10:33.109 [DEBUG] [Thread-188838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:10:44.939 [DEBUG] [Thread-188839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:10:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:10:59.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:10:59.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:10:59.978 [DEBUG] [Thread-188840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:11:00.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 10, 30), 0.38348, 97.3147, 0.0, 23.238, 11.8025, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:11:00.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:10:30
2026-04-12T12:11:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:11:01.554 [DEBUG] [Thread-188841] [transport.py] [_log()] starting thread (client mode): 0xae5147c0
2026-04-12T12:11:01.554 [DEBUG] [Thread-188841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:11:01.573 [DEBUG] [Thread-188841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:11:01.573 [INFO] [Thread-188841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] client lang: <none>
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] server lang: <none>
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] kex follows: False
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:11:01.575 [DEBUG] [Thread-188841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:11:01.576 [DEBUG] [Thread-188841] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:11:01.576 [DEBUG] [Thread-188841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:11:01.576 [DEBUG] [Thread-188841] [transport.py] [_log()] Compression: none
2026-04-12T12:11:01.576 [DEBUG] [Thread-188841] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:11:01.595 [DEBUG] [Thread-188841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:11:01.595 [DEBUG] [Thread-188841] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:11:01.596 [DEBUG] [Thread-188841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:11:01.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:11:01.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:11:01.598 [DEBUG] [Thread-188841] [transport.py] [_log()] userauth is OK
2026-04-12T12:11:01.599 [DEBUG] [Thread-188841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:11:01.599 [DEBUG] [Thread-188841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:11:01.599 [DEBUG] [Thread-188841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:11:01.599 [DEBUG] [Thread-188841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:11:01.623 [INFO] [Thread-188841] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:11:01.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:11:02.217 [DEBUG] [Thread-188841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:11:02.217 [DEBUG] [Thread-188841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:11:02.218 [DEBUG] [Thread-188841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:11:02.258 [DEBUG] [Thread-188841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:11:02.258 [DEBUG] [Thread-188841] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:11:02.262 [DEBUG] [Thread-188841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:11:02.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:11:02.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:11:02.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:11:02.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:11:02.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:11:02.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:11:02.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:11:02.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:11:02.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:11:02.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.424067 -999.00  +11.60  24.68     91  +10.20 1 3 1 3 1   888    0 1.43 4.17 ----- 25.1 24.7 273.0 27.9 14.8 -4.3 14.5 -3.3 13.8 -2.5 14.4 -3.1
2026-04-12T12:11:02.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:11:02.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:11:02.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.424067
2026-04-12T12:11:02.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:11:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:11:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:11:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:11:02.291 [DEBUG] [Thread-188841] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:11:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:11:02.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:10:30', tmtdew=0.38348, humidity=97.3147, cloud=0.0, wind=23.238, temperature=11.8025, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:10:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:11:02.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:11:02.384 [DEBUG] [Thread-188844] [transport.py] [_log()] starting thread (client mode): 0xb0f54100
2026-04-12T12:11:02.384 [DEBUG] [Thread-188844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:11:02.399 [DEBUG] [Thread-188844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:11:02.399 [INFO] [Thread-188844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:11:02.407 [DEBUG] [Thread-188844] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:11:02.407 [DEBUG] [Thread-188844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] client lang: <none>
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] server lang: <none>
2026-04-12T12:11:02.408 [DEBUG] [Thread-188844] [transport.py] [_log()] kex follows: False
2026-04-12T12:11:02.409 [DEBUG] [Thread-188844] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:11:02.409 [DEBUG] [Thread-188844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:11:02.409 [DEBUG] [Thread-188844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:11:02.409 [DEBUG] [Thread-188844] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:11:02.409 [DEBUG] [Thread-188844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:11:02.409 [DEBUG] [Thread-188844] [transport.py] [_log()] Compression: none
2026-04-12T12:11:02.409 [DEBUG] [Thread-188844] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:11:02.466 [DEBUG] [Thread-188844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:11:02.466 [DEBUG] [Thread-188844] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:11:02.467 [DEBUG] [Thread-188844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:11:02.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:11:02.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:11:02.526 [DEBUG] [Thread-188844] [transport.py] [_log()] userauth is OK
2026-04-12T12:11:02.527 [DEBUG] [Thread-188844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:11:02.527 [DEBUG] [Thread-188844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:11:02.527 [DEBUG] [Thread-188844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:11:02.527 [DEBUG] [Thread-188844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:11:02.542 [INFO] [Thread-188844] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:11:02.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:11:02.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:11:03.376 [DEBUG] [Thread-188844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:11:03.377 [DEBUG] [Thread-188844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:11:03.425 [DEBUG] [Thread-188844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:11:03.425 [DEBUG] [Thread-188844] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:11:03.435 [DEBUG] [Thread-188844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:11:03.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:11: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')
2026-04-12T12:11:03.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:11:03.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:11:03.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:11:03.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:11:03.472 [DEBUG] [Thread-188844] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:11:11.499 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:11:11.500 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:11:15.018 [DEBUG] [Thread-188846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:11:30.071 [DEBUG] [Thread-188847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:11:33.136 [DEBUG] [Thread-188848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:11:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:11:33.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:11:33.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:11:35.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 11, 7), 0.404235, 97.1822, 0.0, 22.5853, 11.7529, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:11:35.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:11:07
2026-04-12T12:11:35.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:11:36.017 [DEBUG] [Thread-188849] [transport.py] [_log()] starting thread (client mode): 0xa796b5b0
2026-04-12T12:11:36.017 [DEBUG] [Thread-188849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:11:36.036 [DEBUG] [Thread-188849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:11:36.036 [INFO] [Thread-188849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] client lang: <none>
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] server lang: <none>
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] kex follows: False
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:11:36.039 [DEBUG] [Thread-188849] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:11:36.040 [DEBUG] [Thread-188849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:11:36.040 [DEBUG] [Thread-188849] [transport.py] [_log()] Compression: none
2026-04-12T12:11:36.040 [DEBUG] [Thread-188849] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:11:36.053 [DEBUG] [Thread-188849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:11:36.053 [DEBUG] [Thread-188849] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:11:36.054 [DEBUG] [Thread-188849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:11:36.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:11:36.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:11:36.056 [DEBUG] [Thread-188849] [transport.py] [_log()] userauth is OK
2026-04-12T12:11:36.056 [DEBUG] [Thread-188849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:11:36.056 [DEBUG] [Thread-188849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:11:36.056 [DEBUG] [Thread-188849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:11:36.056 [DEBUG] [Thread-188849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:11:36.075 [INFO] [Thread-188849] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:11:36.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:11:36.693 [DEBUG] [Thread-188849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:11:36.694 [DEBUG] [Thread-188849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:11:36.694 [DEBUG] [Thread-188849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:11:36.735 [DEBUG] [Thread-188849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:11:36.736 [DEBUG] [Thread-188849] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:11:36.739 [DEBUG] [Thread-188849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:11:36.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:11:36.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:11:36.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:11:36.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:11:36.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:11:36.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:11:36.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:11:36.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:11:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:11:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.424414 -999.00  +11.50  20.91     91  +10.20 1 3 1 3 1   888    0 1.43 4.80 ----- 22.2 20.9 270.0 24.8 14.8 -3.7 14.5 -3.2 13.7 -2.4 14.4 -3.0
2026-04-12T12:11:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:11:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:11:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.424414
2026-04-12T12:11:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:11:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:11:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:11:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:11:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:11:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:11:07', tmtdew=0.404235, humidity=97.1822, cloud=0.0, wind=22.5853, temperature=11.7529, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:11:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:11:36.768 [DEBUG] [Thread-188849] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:11:36.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:11:36.866 [DEBUG] [Thread-188852] [transport.py] [_log()] starting thread (client mode): 0xb39c7190
2026-04-12T12:11:36.867 [DEBUG] [Thread-188852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:11:36.884 [DEBUG] [Thread-188852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:11:36.884 [INFO] [Thread-188852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:11:36.895 [DEBUG] [Thread-188852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:11:36.895 [DEBUG] [Thread-188852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:11:36.895 [DEBUG] [Thread-188852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] client lang: <none>
2026-04-12T12:11:36.896 [DEBUG] [Thread-188852] [transport.py] [_log()] server lang: <none>
2026-04-12T12:11:36.897 [DEBUG] [Thread-188852] [transport.py] [_log()] kex follows: False
2026-04-12T12:11:36.897 [DEBUG] [Thread-188852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:11:36.897 [DEBUG] [Thread-188852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:11:36.897 [DEBUG] [Thread-188852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:11:36.897 [DEBUG] [Thread-188852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:11:36.897 [DEBUG] [Thread-188852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:11:36.898 [DEBUG] [Thread-188852] [transport.py] [_log()] Compression: none
2026-04-12T12:11:36.898 [DEBUG] [Thread-188852] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:11:36.957 [DEBUG] [Thread-188852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:11:36.957 [DEBUG] [Thread-188852] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:11:36.958 [DEBUG] [Thread-188852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:11:36.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:11:36.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:11:37.013 [DEBUG] [Thread-188852] [transport.py] [_log()] userauth is OK
2026-04-12T12:11:37.014 [DEBUG] [Thread-188852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:11:37.014 [DEBUG] [Thread-188852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:11:37.014 [DEBUG] [Thread-188852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:11:37.014 [DEBUG] [Thread-188852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:11:37.034 [INFO] [Thread-188852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:11:37.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:11:37.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:11:37.850 [DEBUG] [Thread-188852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:11:37.850 [DEBUG] [Thread-188852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:11:37.897 [DEBUG] [Thread-188852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:11:37.898 [DEBUG] [Thread-188852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:11:37.907 [DEBUG] [Thread-188852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:11:37.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:11:37.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:11:37.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:11:37.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:11:37.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:11:37.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:11:37.943 [DEBUG] [Thread-188852] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:11:45.106 [DEBUG] [Thread-188854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:00.155 [DEBUG] [Thread-188855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:12:07.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:12:07.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:12:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 11, 42), 0.69764, 95.4308, 0.0, 19.4076, 12.1395, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:12:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:11:42
2026-04-12T12:12:09.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:12:09.878 [DEBUG] [Thread-188856] [transport.py] [_log()] starting thread (client mode): 0xe6cd5d80
2026-04-12T12:12:09.878 [DEBUG] [Thread-188856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:12:09.902 [DEBUG] [Thread-188856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:12:09.902 [INFO] [Thread-188856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] client lang: <none>
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] server lang: <none>
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] kex follows: False
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:12:09.906 [DEBUG] [Thread-188856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:12:09.907 [DEBUG] [Thread-188856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:12:09.907 [DEBUG] [Thread-188856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:12:09.907 [DEBUG] [Thread-188856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:12:09.907 [DEBUG] [Thread-188856] [transport.py] [_log()] Compression: none
2026-04-12T12:12:09.907 [DEBUG] [Thread-188856] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:12:09.925 [DEBUG] [Thread-188856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:12:09.926 [DEBUG] [Thread-188856] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:12:09.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:12:09.927 [DEBUG] [Thread-188856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:12:09.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:12:09.929 [DEBUG] [Thread-188856] [transport.py] [_log()] userauth is OK
2026-04-12T12:12:09.929 [DEBUG] [Thread-188856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:12:09.929 [DEBUG] [Thread-188856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:12:09.929 [DEBUG] [Thread-188856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:12:09.929 [DEBUG] [Thread-188856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:12:09.953 [INFO] [Thread-188856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:12:09.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:12:10.602 [DEBUG] [Thread-188856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:12:10.603 [DEBUG] [Thread-188856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:12:10.603 [DEBUG] [Thread-188856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:12:10.644 [DEBUG] [Thread-188856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:12:10.644 [DEBUG] [Thread-188856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:12:10.648 [DEBUG] [Thread-188856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:12:10.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:12:10.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:12:10.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:12:10.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:12:10.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:12:10.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:12:10.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:12:10.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:12:10.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:12:10.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.424761 -999.00  +11.60  18.12     91  +10.20 1 3 1 3 1   888    0 1.51 5.45 ----- 18.1 18.1 285.2 28.6 14.8 -3.6 14.4 -3.1 13.7 -3.4 14.4 -2.6
2026-04-12T12:12:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:12:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:12:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.424761
2026-04-12T12:12:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:12:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:12:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:12:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:12:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:12:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:11:42', tmtdew=0.69764, humidity=95.4308, cloud=0.0, wind=19.4076, temperature=12.1395, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:11:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:12:10.671 [DEBUG] [Thread-188856] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:12:10.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:12:10.765 [DEBUG] [Thread-188859] [transport.py] [_log()] starting thread (client mode): 0xb0fce0e0
2026-04-12T12:12:10.765 [DEBUG] [Thread-188859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:12:10.779 [DEBUG] [Thread-188859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:12:10.780 [INFO] [Thread-188859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:12:10.787 [DEBUG] [Thread-188859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:12:10.788 [DEBUG] [Thread-188859] [transport.py] [_log()] client lang: <none>
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] server lang: <none>
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] kex follows: False
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:12:10.789 [DEBUG] [Thread-188859] [transport.py] [_log()] Compression: none
2026-04-12T12:12:10.790 [DEBUG] [Thread-188859] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:12:10.846 [DEBUG] [Thread-188859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:12:10.846 [DEBUG] [Thread-188859] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:12:10.848 [DEBUG] [Thread-188859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:12:10.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:12:10.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:12:10.905 [DEBUG] [Thread-188859] [transport.py] [_log()] userauth is OK
2026-04-12T12:12:10.905 [DEBUG] [Thread-188859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:12:10.906 [DEBUG] [Thread-188859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:12:10.906 [DEBUG] [Thread-188859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:12:10.906 [DEBUG] [Thread-188859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:12:10.926 [INFO] [Thread-188859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:12:10.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:12:10.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:12:11.658 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:11.659 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:11.746 [DEBUG] [Thread-188859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:12:11.746 [DEBUG] [Thread-188859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:12:11.794 [DEBUG] [Thread-188859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:12:11.794 [DEBUG] [Thread-188859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:12:11.804 [DEBUG] [Thread-188859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:12:11.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:12:11.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:12:11.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:12:11.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:12:11.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:12:11.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:12:11.842 [DEBUG] [Thread-188859] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:12:15.193 [DEBUG] [Thread-188861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:30.258 [DEBUG] [Thread-188862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:33.167 [DEBUG] [Thread-188863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:12:41.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:12:41.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:12:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 12, 19), 0.341375, 97.2653, 0.0, 22.8323, 11.7693, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:12:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:12:19
2026-04-12T12:12:43.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:12:43.748 [DEBUG] [Thread-188864] [transport.py] [_log()] starting thread (client mode): 0xe6cd5d80
2026-04-12T12:12:43.748 [DEBUG] [Thread-188864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:12:43.769 [DEBUG] [Thread-188864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:12:43.769 [INFO] [Thread-188864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:12:43.772 [DEBUG] [Thread-188864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] client lang: <none>
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] server lang: <none>
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] kex follows: False
2026-04-12T12:12:43.773 [DEBUG] [Thread-188864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:12:43.774 [DEBUG] [Thread-188864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:12:43.774 [DEBUG] [Thread-188864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:12:43.774 [DEBUG] [Thread-188864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:12:43.774 [DEBUG] [Thread-188864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:12:43.774 [DEBUG] [Thread-188864] [transport.py] [_log()] Compression: none
2026-04-12T12:12:43.774 [DEBUG] [Thread-188864] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:12:43.792 [DEBUG] [Thread-188864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:12:43.793 [DEBUG] [Thread-188864] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:12:43.794 [DEBUG] [Thread-188864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:12:43.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:12:43.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:12:43.795 [DEBUG] [Thread-188864] [transport.py] [_log()] userauth is OK
2026-04-12T12:12:43.796 [DEBUG] [Thread-188864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:12:43.796 [DEBUG] [Thread-188864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:12:43.796 [DEBUG] [Thread-188864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:12:43.796 [DEBUG] [Thread-188864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:12:43.818 [INFO] [Thread-188864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:12:43.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:12:44.425 [DEBUG] [Thread-188864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:12:44.426 [DEBUG] [Thread-188864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:12:44.427 [DEBUG] [Thread-188864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:12:44.467 [DEBUG] [Thread-188864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:12:44.467 [DEBUG] [Thread-188864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:12:44.471 [DEBUG] [Thread-188864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:12:44.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:12:44.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:12:44.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:12:44.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:12:44.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:12:44.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:12:44.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:12:44.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:12:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:12:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.425108 -999.00  +11.60  24.59     91  +10.30 1 3 1 3 1   888    0 1.46 5.10 ----- 21.7 24.6 271.8 27.2 14.8 -3.9 14.5 -3.2 13.8 -4.0 14.4 -3.2
2026-04-12T12:12:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:12:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:12:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.425108
2026-04-12T12:12:44.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:12:44.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:12:44.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:12:44.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:12:44.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:12:44.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:12:19', tmtdew=0.341375, humidity=97.2653, cloud=0.0, wind=22.8323, temperature=11.7693, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:12:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:12:44.496 [DEBUG] [Thread-188864] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:12:44.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:12:44.590 [DEBUG] [Thread-188867] [transport.py] [_log()] starting thread (client mode): 0xb39c7850
2026-04-12T12:12:44.590 [DEBUG] [Thread-188867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:12:44.605 [DEBUG] [Thread-188867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:12:44.605 [INFO] [Thread-188867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:12:44.613 [DEBUG] [Thread-188867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:12:44.613 [DEBUG] [Thread-188867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:12:44.613 [DEBUG] [Thread-188867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] client lang: <none>
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] server lang: <none>
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] kex follows: False
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] Compression: none
2026-04-12T12:12:44.614 [DEBUG] [Thread-188867] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:12:44.673 [DEBUG] [Thread-188867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:12:44.674 [DEBUG] [Thread-188867] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:12:44.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:12:44.675 [DEBUG] [Thread-188867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:12:44.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:12:44.733 [DEBUG] [Thread-188867] [transport.py] [_log()] userauth is OK
2026-04-12T12:12:44.734 [DEBUG] [Thread-188867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:12:44.734 [DEBUG] [Thread-188867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:12:44.734 [DEBUG] [Thread-188867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:12:44.735 [DEBUG] [Thread-188867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:12:44.754 [INFO] [Thread-188867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:12:44.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:12:44.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:12:45.298 [DEBUG] [Thread-188869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:12:45.557 [DEBUG] [Thread-188867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:12:45.557 [DEBUG] [Thread-188867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:12:45.606 [DEBUG] [Thread-188867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:12:45.606 [DEBUG] [Thread-188867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:12:45.616 [DEBUG] [Thread-188867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:12:45.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:12:45.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:12:45.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:12:45.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:12:45.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:12:45.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:12:45.659 [DEBUG] [Thread-188867] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:13:00.358 [DEBUG] [Thread-188870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:13:11.813 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:13:11.814 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:13:15.396 [DEBUG] [Thread-188871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:13:15.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:13:15.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:13:15.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:13:16.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 12, 55), 0.346615, 97.2322, 0.0, 21.6328, 11.6694, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:13:16.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:12:55
2026-04-12T12:13:17.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:13:17.542 [DEBUG] [Thread-188872] [transport.py] [_log()] starting thread (client mode): 0xb39c7eb0
2026-04-12T12:13:17.542 [DEBUG] [Thread-188872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:13:17.564 [DEBUG] [Thread-188872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:13:17.564 [INFO] [Thread-188872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:13:17.567 [DEBUG] [Thread-188872] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:13:17.567 [DEBUG] [Thread-188872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] client lang: <none>
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] server lang: <none>
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] kex follows: False
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:13:17.568 [DEBUG] [Thread-188872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:13:17.569 [DEBUG] [Thread-188872] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:13:17.569 [DEBUG] [Thread-188872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:13:17.569 [DEBUG] [Thread-188872] [transport.py] [_log()] Compression: none
2026-04-12T12:13:17.569 [DEBUG] [Thread-188872] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:13:17.587 [DEBUG] [Thread-188872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:13:17.587 [DEBUG] [Thread-188872] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:13:17.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:13:17.588 [DEBUG] [Thread-188872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:13:17.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:13:17.590 [DEBUG] [Thread-188872] [transport.py] [_log()] userauth is OK
2026-04-12T12:13:17.590 [DEBUG] [Thread-188872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:13:17.590 [DEBUG] [Thread-188872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:13:17.590 [DEBUG] [Thread-188872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:13:17.590 [DEBUG] [Thread-188872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:13:17.613 [INFO] [Thread-188872] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:13:17.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:13:18.244 [DEBUG] [Thread-188872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:13:18.244 [DEBUG] [Thread-188872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:13:18.245 [DEBUG] [Thread-188872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:13:18.285 [DEBUG] [Thread-188872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:13:18.285 [DEBUG] [Thread-188872] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:13:18.289 [DEBUG] [Thread-188872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:13:18.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:13:18.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:13:18.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:13:18.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:13:18.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:13:18.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:13:18.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:13:18.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:13:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:13:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.425456 -999.00  +11.60  17.37     91  +10.20 1 3 1 3 1   888    0 1.47 4.93 ----- 16.8 17.4 274.2 26.0 14.7 -3.6 14.5 -3.2 13.7 -4.5 14.4 -3.0
2026-04-12T12:13:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:13:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:13:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.425456
2026-04-12T12:13:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:13:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:13:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:13:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:13:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:13:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:12:55', tmtdew=0.346615, humidity=97.2322, cloud=0.0, wind=21.6328, temperature=11.6694, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:12:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:13:18.316 [DEBUG] [Thread-188872] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:13:18.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:13:18.410 [DEBUG] [Thread-188875] [transport.py] [_log()] starting thread (client mode): 0xb39c7d00
2026-04-12T12:13:18.410 [DEBUG] [Thread-188875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:13:18.425 [DEBUG] [Thread-188875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:13:18.425 [INFO] [Thread-188875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:13:18.432 [DEBUG] [Thread-188875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] client lang: <none>
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] server lang: <none>
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] kex follows: False
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] Compression: none
2026-04-12T12:13:18.433 [DEBUG] [Thread-188875] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:13:18.497 [DEBUG] [Thread-188875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:13:18.498 [DEBUG] [Thread-188875] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:13:18.498 [DEBUG] [Thread-188875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:13:18.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:13:18.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:13:18.553 [DEBUG] [Thread-188875] [transport.py] [_log()] userauth is OK
2026-04-12T12:13:18.553 [DEBUG] [Thread-188875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:13:18.554 [DEBUG] [Thread-188875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:13:18.554 [DEBUG] [Thread-188875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:13:18.554 [DEBUG] [Thread-188875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:13:18.579 [INFO] [Thread-188875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:13:18.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:13:18.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:13:19.422 [DEBUG] [Thread-188875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:13:19.422 [DEBUG] [Thread-188875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:13:19.470 [DEBUG] [Thread-188875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:13:19.470 [DEBUG] [Thread-188875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:13:19.479 [DEBUG] [Thread-188875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:13:19.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:13:19.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:13:19.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:13:19.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:13:19.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:13:19.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:13:19.516 [DEBUG] [Thread-188875] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:13:30.433 [DEBUG] [Thread-188877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:13:33.200 [DEBUG] [Thread-188878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:13:45.489 [DEBUG] [Thread-188879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:13:49.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:13:49.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:13:49.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:13:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 13, 31), 0.333695, 97.3151, 0.0, 21.1388, 11.7191, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:13:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:13:31
2026-04-12T12:13:51.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:13:51.381 [DEBUG] [Thread-188880] [transport.py] [_log()] starting thread (client mode): 0xb0fcc1f0
2026-04-12T12:13:51.382 [DEBUG] [Thread-188880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:13:51.402 [DEBUG] [Thread-188880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:13:51.402 [INFO] [Thread-188880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:13:51.405 [DEBUG] [Thread-188880] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:13:51.405 [DEBUG] [Thread-188880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:13:51.405 [DEBUG] [Thread-188880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:13:51.405 [DEBUG] [Thread-188880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:51.405 [DEBUG] [Thread-188880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:51.405 [DEBUG] [Thread-188880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] client lang: <none>
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] server lang: <none>
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] kex follows: False
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] Compression: none
2026-04-12T12:13:51.406 [DEBUG] [Thread-188880] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:13:51.414 [DEBUG] [Thread-188880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:13:51.414 [DEBUG] [Thread-188880] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:13:51.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:13:51.415 [DEBUG] [Thread-188880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:13:51.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:13:51.417 [DEBUG] [Thread-188880] [transport.py] [_log()] userauth is OK
2026-04-12T12:13:51.418 [DEBUG] [Thread-188880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:13:51.418 [DEBUG] [Thread-188880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:13:51.418 [DEBUG] [Thread-188880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:13:51.418 [DEBUG] [Thread-188880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:13:51.435 [INFO] [Thread-188880] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:13:51.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:13:52.088 [DEBUG] [Thread-188880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:13:52.088 [DEBUG] [Thread-188880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:13:52.089 [DEBUG] [Thread-188880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:13:52.129 [DEBUG] [Thread-188880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:13:52.129 [DEBUG] [Thread-188880] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:13:52.132 [DEBUG] [Thread-188880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:13:52.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:13:52.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:13:52.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:13:52.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:13:52.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:13:52.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:13:52.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:13:52.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:13:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:13:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.425803 -999.00  +11.70  17.44     91  +10.30 1 3 1 3 1   888    0 1.46 5.02 ----- 18.4 17.4 274.8 21.7 14.8 -3.5 14.5 -2.8 13.8 -3.5 14.4 -3.0
2026-04-12T12:13:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:13:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:13:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.425803
2026-04-12T12:13:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:13:31', tmtdew=0.333695, humidity=97.3151, cloud=0.0, wind=21.1388, temperature=11.7191, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:13:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:13:52.159 [DEBUG] [Thread-188880] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:13:52.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:13:52.260 [DEBUG] [Thread-188883] [transport.py] [_log()] starting thread (client mode): 0xb0fcc190
2026-04-12T12:13:52.260 [DEBUG] [Thread-188883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:13:52.276 [DEBUG] [Thread-188883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:13:52.276 [INFO] [Thread-188883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:13:52.283 [DEBUG] [Thread-188883] [transport.py] [_log()] client lang: <none>
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] server lang: <none>
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] kex follows: False
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] Compression: none
2026-04-12T12:13:52.284 [DEBUG] [Thread-188883] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:13:52.344 [DEBUG] [Thread-188883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:13:52.344 [DEBUG] [Thread-188883] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:13:52.345 [DEBUG] [Thread-188883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:13:52.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:13:52.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:13:52.401 [DEBUG] [Thread-188883] [transport.py] [_log()] userauth is OK
2026-04-12T12:13:52.401 [DEBUG] [Thread-188883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:13:52.401 [DEBUG] [Thread-188883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:13:52.401 [DEBUG] [Thread-188883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:13:52.401 [DEBUG] [Thread-188883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:13:52.425 [INFO] [Thread-188883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:13:52.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:13:52.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:13:53.265 [DEBUG] [Thread-188883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:13:53.265 [DEBUG] [Thread-188883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:13:53.313 [DEBUG] [Thread-188883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:13:53.313 [DEBUG] [Thread-188883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:13:53.325 [DEBUG] [Thread-188883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:13:53.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:13:53.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:13:53.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:13:53.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:13:53.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:13:53.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:13:53.366 [DEBUG] [Thread-188883] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:14:00.522 [DEBUG] [Thread-188885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:14:11.965 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:14:11.967 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:14:15.583 [DEBUG] [Thread-188886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:14:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:14:23.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:14:23.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:14:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 14, 6), 0.362525, 97.1325, 0.0, 21.8797, 11.6858, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:14:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:14:06
2026-04-12T12:14:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:14:25.330 [DEBUG] [Thread-188887] [transport.py] [_log()] starting thread (client mode): 0xb0fcc070
2026-04-12T12:14:25.330 [DEBUG] [Thread-188887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:14:25.351 [DEBUG] [Thread-188887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:14:25.352 [INFO] [Thread-188887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:14:25.353 [DEBUG] [Thread-188887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:14:25.353 [DEBUG] [Thread-188887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:14:25.353 [DEBUG] [Thread-188887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:14:25.353 [DEBUG] [Thread-188887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:14:25.353 [DEBUG] [Thread-188887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] client lang: <none>
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] server lang: <none>
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] kex follows: False
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:14:25.354 [DEBUG] [Thread-188887] [transport.py] [_log()] Compression: none
2026-04-12T12:14:25.355 [DEBUG] [Thread-188887] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:14:25.374 [DEBUG] [Thread-188887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:14:25.374 [DEBUG] [Thread-188887] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:14:25.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:14:25.375 [DEBUG] [Thread-188887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:14:25.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:14:25.378 [DEBUG] [Thread-188887] [transport.py] [_log()] userauth is OK
2026-04-12T12:14:25.378 [DEBUG] [Thread-188887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:14:25.378 [DEBUG] [Thread-188887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:14:25.378 [DEBUG] [Thread-188887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:14:25.378 [DEBUG] [Thread-188887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:14:25.401 [INFO] [Thread-188887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:14:25.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:14:26.043 [DEBUG] [Thread-188887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:14:26.043 [DEBUG] [Thread-188887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:14:26.044 [DEBUG] [Thread-188887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:14:26.084 [DEBUG] [Thread-188887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:14:26.085 [DEBUG] [Thread-188887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:14:26.087 [DEBUG] [Thread-188887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:14:26.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:14:26.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:14:26.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:14:26.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:14:26.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:14:26.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:14:26.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:14:26.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:14:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:14:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.426497 -999.00  +11.70  17.39     91  +10.30 1 3 1 3 1   888    0 1.47 5.50 ----- 17.6 17.4 273.2 23.7 14.9 -4.4 14.6 -3.8 13.9 -3.2 14.6 -3.4
2026-04-12T12:14:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:14:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:14:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.426497
2026-04-12T12:14:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:14:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:14:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:14:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:14:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:14:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:14:06', tmtdew=0.362525, humidity=97.1325, cloud=0.0, wind=21.8797, temperature=11.6858, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:14:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:14:26.117 [DEBUG] [Thread-188887] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:14:26.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:14:26.211 [DEBUG] [Thread-188890] [transport.py] [_log()] starting thread (client mode): 0xb0fcfbe0
2026-04-12T12:14:26.211 [DEBUG] [Thread-188890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:14:26.227 [DEBUG] [Thread-188890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:14:26.227 [INFO] [Thread-188890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] client lang: <none>
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] server lang: <none>
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] kex follows: False
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:14:26.235 [DEBUG] [Thread-188890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:14:26.236 [DEBUG] [Thread-188890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:14:26.236 [DEBUG] [Thread-188890] [transport.py] [_log()] Compression: none
2026-04-12T12:14:26.236 [DEBUG] [Thread-188890] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:14:26.294 [DEBUG] [Thread-188890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:14:26.294 [DEBUG] [Thread-188890] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:14:26.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:14:26.296 [DEBUG] [Thread-188890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:14:26.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:14:26.353 [DEBUG] [Thread-188890] [transport.py] [_log()] userauth is OK
2026-04-12T12:14:26.353 [DEBUG] [Thread-188890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:14:26.353 [DEBUG] [Thread-188890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:14:26.354 [DEBUG] [Thread-188890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:14:26.354 [DEBUG] [Thread-188890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:14:26.374 [INFO] [Thread-188890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:14:26.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:14:26.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:14:27.242 [DEBUG] [Thread-188890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:14:27.242 [DEBUG] [Thread-188890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:14:27.290 [DEBUG] [Thread-188890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:14:27.290 [DEBUG] [Thread-188890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:14:27.300 [DEBUG] [Thread-188890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:14:27.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:14: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')
2026-04-12T12:14:27.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:14:27.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:14:27.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:14:27.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:14:27.335 [DEBUG] [Thread-188890] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:14:30.626 [DEBUG] [Thread-188892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:14:33.243 [DEBUG] [Thread-188893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:14:45.690 [DEBUG] [Thread-188894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:14:57.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:14:57.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:14:57.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:14:58.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 14, 42), 0.7407, 95.1655, 0.0, 19.9015, 12.3384, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:14:58.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:14:42
2026-04-12T12:14:59.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:14:59.256 [DEBUG] [Thread-188895] [transport.py] [_log()] starting thread (client mode): 0xb39c6e30
2026-04-12T12:14:59.256 [DEBUG] [Thread-188895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:14:59.276 [DEBUG] [Thread-188895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:14:59.276 [INFO] [Thread-188895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] client lang: <none>
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] server lang: <none>
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] kex follows: False
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] Compression: none
2026-04-12T12:14:59.279 [DEBUG] [Thread-188895] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:14:59.297 [DEBUG] [Thread-188895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:14:59.298 [DEBUG] [Thread-188895] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:14:59.299 [DEBUG] [Thread-188895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:14:59.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:14:59.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:14:59.300 [DEBUG] [Thread-188895] [transport.py] [_log()] userauth is OK
2026-04-12T12:14:59.301 [DEBUG] [Thread-188895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:14:59.301 [DEBUG] [Thread-188895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:14:59.301 [DEBUG] [Thread-188895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:14:59.301 [DEBUG] [Thread-188895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:14:59.324 [INFO] [Thread-188895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:14:59.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:14:59.891 [DEBUG] [Thread-188895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:14:59.892 [DEBUG] [Thread-188895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:14:59.892 [DEBUG] [Thread-188895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:14:59.933 [DEBUG] [Thread-188895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:14:59.933 [DEBUG] [Thread-188895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:14:59.937 [DEBUG] [Thread-188895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:14:59.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:14:59.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:14:59.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:14:59.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:14:59.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:14:59.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:14:59.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:14:59.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:14:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:14:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.426844 -999.00  +11.80  18.64     91  +10.40 1 3 1 3 1   888    0 1.49 5.48 ----- 18.4 18.6 291.8 23.4 15.0 -5.0 14.6 -4.3 14.1 -4.5 14.7 -3.5
2026-04-12T12:14:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:14:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:14:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.426844
2026-04-12T12:14:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:14:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:14:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:14:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:14:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:14:59.959 [DEBUG] [Thread-188895] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:14:59.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:14:42', tmtdew=0.7407, humidity=95.1655, cloud=0.0, wind=19.9015, temperature=12.3384, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:14:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:15:00.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:15:00.054 [DEBUG] [Thread-188898] [transport.py] [_log()] starting thread (client mode): 0xb39c67a0
2026-04-12T12:15:00.054 [DEBUG] [Thread-188898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:15:00.069 [DEBUG] [Thread-188898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:15:00.069 [INFO] [Thread-188898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:15:00.077 [DEBUG] [Thread-188898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] client lang: <none>
2026-04-12T12:15:00.078 [DEBUG] [Thread-188898] [transport.py] [_log()] server lang: <none>
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] kex follows: False
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] Compression: none
2026-04-12T12:15:00.079 [DEBUG] [Thread-188898] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:15:00.137 [DEBUG] [Thread-188898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:15:00.137 [DEBUG] [Thread-188898] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:15:00.138 [DEBUG] [Thread-188898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:15:00.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:15:00.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:15:00.193 [DEBUG] [Thread-188898] [transport.py] [_log()] userauth is OK
2026-04-12T12:15:00.193 [DEBUG] [Thread-188898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:15:00.193 [DEBUG] [Thread-188898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:15:00.194 [DEBUG] [Thread-188898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:15:00.194 [DEBUG] [Thread-188898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:15:00.212 [INFO] [Thread-188898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:15:00.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:15:00.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:15:00.726 [DEBUG] [Thread-188900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:15:01.046 [DEBUG] [Thread-188898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:15:01.046 [DEBUG] [Thread-188898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:15:01.095 [DEBUG] [Thread-188898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:15:01.095 [DEBUG] [Thread-188898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:15:01.104 [DEBUG] [Thread-188898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:15:01.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:15:01.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:15:01.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:15:01.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:15:01.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:15:01.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:15:01.140 [DEBUG] [Thread-188898] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:15:12.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:15:12.111 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:15:15.782 [DEBUG] [Thread-188901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:15:30.819 [DEBUG] [Thread-188902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:15:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:15:31.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:15:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:15:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 15, 17), 0.3756, 97.0497, 0.0, 22.8852, 11.8193, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:15:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:15:17
2026-04-12T12:15:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:15:32.934 [DEBUG] [Thread-188903] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc40
2026-04-12T12:15:32.934 [DEBUG] [Thread-188903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:15:32.954 [DEBUG] [Thread-188903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:15:32.954 [INFO] [Thread-188903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] client lang: <none>
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] server lang: <none>
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] kex follows: False
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] Compression: none
2026-04-12T12:15:32.956 [DEBUG] [Thread-188903] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:15:32.965 [DEBUG] [Thread-188903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:15:32.966 [DEBUG] [Thread-188903] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:15:32.966 [DEBUG] [Thread-188903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:15:32.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:15:32.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:15:32.968 [DEBUG] [Thread-188903] [transport.py] [_log()] userauth is OK
2026-04-12T12:15:32.968 [DEBUG] [Thread-188903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:15:32.968 [DEBUG] [Thread-188903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:15:32.968 [DEBUG] [Thread-188903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:15:32.968 [DEBUG] [Thread-188903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:15:32.992 [INFO] [Thread-188903] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:15:32.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:15:33.275 [DEBUG] [Thread-188905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:15:33.554 [DEBUG] [Thread-188903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:15:33.554 [DEBUG] [Thread-188903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:15:33.554 [DEBUG] [Thread-188903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:15:33.595 [DEBUG] [Thread-188903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:15:33.595 [DEBUG] [Thread-188903] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:15:33.599 [DEBUG] [Thread-188903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:15:33.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:15:33.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:15:33.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:15:33.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:15:33.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:15:33.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:15:33.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:15:33.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:15:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:15:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.427191 -999.00  +11.90  16.33     91  +10.50 1 3 1 3 1   888    0 1.49 5.36 ----- 17.6 16.3 275.8 24.8 15.1 -5.4 14.7 -4.3 14.1 -4.4 14.8 -4.3
2026-04-12T12:15:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:15:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:15:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.427191
2026-04-12T12:15:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:15:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:15:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:15:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:15:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:15:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:15:17', tmtdew=0.3756, humidity=97.0497, cloud=0.0, wind=22.8852, temperature=11.8193, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:15:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:15:33.627 [DEBUG] [Thread-188903] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:15:33.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:15:33.728 [DEBUG] [Thread-188907] [transport.py] [_log()] starting thread (client mode): 0xb0fcd810
2026-04-12T12:15:33.728 [DEBUG] [Thread-188907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:15:33.746 [DEBUG] [Thread-188907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:15:33.746 [INFO] [Thread-188907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:15:33.753 [DEBUG] [Thread-188907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:15:33.754 [DEBUG] [Thread-188907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:15:33.755 [DEBUG] [Thread-188907] [transport.py] [_log()] client lang: <none>
2026-04-12T12:15:33.755 [DEBUG] [Thread-188907] [transport.py] [_log()] server lang: <none>
2026-04-12T12:15:33.755 [DEBUG] [Thread-188907] [transport.py] [_log()] kex follows: False
2026-04-12T12:15:33.755 [DEBUG] [Thread-188907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:15:33.755 [DEBUG] [Thread-188907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:15:33.755 [DEBUG] [Thread-188907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:15:33.756 [DEBUG] [Thread-188907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:15:33.756 [DEBUG] [Thread-188907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:15:33.756 [DEBUG] [Thread-188907] [transport.py] [_log()] Compression: none
2026-04-12T12:15:33.756 [DEBUG] [Thread-188907] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:15:33.813 [DEBUG] [Thread-188907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:15:33.814 [DEBUG] [Thread-188907] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:15:33.815 [DEBUG] [Thread-188907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:15:33.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:15:33.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:15:33.869 [DEBUG] [Thread-188907] [transport.py] [_log()] userauth is OK
2026-04-12T12:15:33.869 [DEBUG] [Thread-188907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:15:33.869 [DEBUG] [Thread-188907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:15:33.870 [DEBUG] [Thread-188907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:15:33.870 [DEBUG] [Thread-188907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:15:33.888 [INFO] [Thread-188907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:15:33.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:15:33.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:15:34.710 [DEBUG] [Thread-188907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:15:34.711 [DEBUG] [Thread-188907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:15:34.759 [DEBUG] [Thread-188907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:15:34.759 [DEBUG] [Thread-188907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:15:34.769 [DEBUG] [Thread-188907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:15:34.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:15:34.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:15:34.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:15:34.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:15:34.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:15:34.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:15:34.807 [DEBUG] [Thread-188907] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:15:45.857 [DEBUG] [Thread-188909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:16:00.909 [DEBUG] [Thread-188910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:16:04.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:16:04.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:16:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:16:06.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 15, 53), 0.7878, 94.8673, 0.0, 19.6546, 12.2722, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:16:06.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:15:53
2026-04-12T12:16:06.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:16:06.719 [DEBUG] [Thread-188911] [transport.py] [_log()] starting thread (client mode): 0xa7968130
2026-04-12T12:16:06.719 [DEBUG] [Thread-188911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:16:06.740 [DEBUG] [Thread-188911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:16:06.740 [INFO] [Thread-188911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:16:06.743 [DEBUG] [Thread-188911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] client lang: <none>
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] server lang: <none>
2026-04-12T12:16:06.744 [DEBUG] [Thread-188911] [transport.py] [_log()] kex follows: False
2026-04-12T12:16:06.745 [DEBUG] [Thread-188911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:16:06.745 [DEBUG] [Thread-188911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:16:06.745 [DEBUG] [Thread-188911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:16:06.745 [DEBUG] [Thread-188911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:16:06.745 [DEBUG] [Thread-188911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:16:06.745 [DEBUG] [Thread-188911] [transport.py] [_log()] Compression: none
2026-04-12T12:16:06.745 [DEBUG] [Thread-188911] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:16:06.763 [DEBUG] [Thread-188911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:16:06.763 [DEBUG] [Thread-188911] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:16:06.764 [DEBUG] [Thread-188911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:16:06.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:16:06.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:16:06.766 [DEBUG] [Thread-188911] [transport.py] [_log()] userauth is OK
2026-04-12T12:16:06.766 [DEBUG] [Thread-188911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:16:06.766 [DEBUG] [Thread-188911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:16:06.766 [DEBUG] [Thread-188911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:16:06.766 [DEBUG] [Thread-188911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:16:06.791 [INFO] [Thread-188911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:16:06.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:16:07.398 [DEBUG] [Thread-188911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:16:07.399 [DEBUG] [Thread-188911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:16:07.399 [DEBUG] [Thread-188911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:16:07.440 [DEBUG] [Thread-188911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:16:07.441 [DEBUG] [Thread-188911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:16:07.444 [DEBUG] [Thread-188911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:16:07.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:16:07.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:16:07.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:16:07.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:16:07.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:16:07.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:16:07.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:16:07.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:16:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:16:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.427539 -999.00  +12.00  21.49     91  +10.60 1 3 1 3 1   888    0 1.46 5.10 ----- 17.9 21.5 270.2 25.2 15.2 -5.1 14.8 -4.6 14.2 -3.8 14.8 -4.7
2026-04-12T12:16:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:16:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:16:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.427539
2026-04-12T12:16:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:16:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:16:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:16:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:16:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:16:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:15:53', tmtdew=0.7878, humidity=94.8673, cloud=0.0, wind=19.6546, temperature=12.2722, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:15:39.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:16:07.470 [DEBUG] [Thread-188911] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:16:07.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:16:07.563 [DEBUG] [Thread-188914] [transport.py] [_log()] starting thread (client mode): 0xa796ac80
2026-04-12T12:16:07.563 [DEBUG] [Thread-188914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:16:07.577 [DEBUG] [Thread-188914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:16:07.577 [INFO] [Thread-188914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] client lang: <none>
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] server lang: <none>
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] kex follows: False
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:16:07.585 [DEBUG] [Thread-188914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:16:07.586 [DEBUG] [Thread-188914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:16:07.586 [DEBUG] [Thread-188914] [transport.py] [_log()] Compression: none
2026-04-12T12:16:07.586 [DEBUG] [Thread-188914] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:16:07.650 [DEBUG] [Thread-188914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:16:07.651 [DEBUG] [Thread-188914] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:16:07.651 [DEBUG] [Thread-188914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:16:07.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:16:07.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:16:07.708 [DEBUG] [Thread-188914] [transport.py] [_log()] userauth is OK
2026-04-12T12:16:07.709 [DEBUG] [Thread-188914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:16:07.709 [DEBUG] [Thread-188914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:16:07.709 [DEBUG] [Thread-188914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:16:07.709 [DEBUG] [Thread-188914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:16:07.733 [INFO] [Thread-188914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:16:07.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:16:07.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:16:08.564 [DEBUG] [Thread-188914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:16:08.564 [DEBUG] [Thread-188914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:16:08.612 [DEBUG] [Thread-188914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:16:08.612 [DEBUG] [Thread-188914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:16:08.622 [DEBUG] [Thread-188914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:16:08.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:16:08.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:16:08.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:16:08.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:16:08.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:16:08.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:16:08.659 [DEBUG] [Thread-188914] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:16:12.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:16:12.269 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:16:15.947 [DEBUG] [Thread-188916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:16:31.004 [DEBUG] [Thread-188917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:16:33.319 [DEBUG] [Thread-188918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:16:38.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:16:38.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:16:38.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:16:39.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 16, 28), 0.44415, 96.9338, 0.0, 19.9033, 11.9359, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:16:39.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:16:28
2026-04-12T12:16:40.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:16:40.562 [DEBUG] [Thread-188919] [transport.py] [_log()] starting thread (client mode): 0xb0fcddb0
2026-04-12T12:16:40.563 [DEBUG] [Thread-188919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:16:40.582 [DEBUG] [Thread-188919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:16:40.582 [INFO] [Thread-188919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] client lang: <none>
2026-04-12T12:16:40.586 [DEBUG] [Thread-188919] [transport.py] [_log()] server lang: <none>
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] kex follows: False
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] Compression: none
2026-04-12T12:16:40.587 [DEBUG] [Thread-188919] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:16:40.606 [DEBUG] [Thread-188919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:16:40.606 [DEBUG] [Thread-188919] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:16:40.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:16:40.608 [DEBUG] [Thread-188919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:16:40.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:16:40.610 [DEBUG] [Thread-188919] [transport.py] [_log()] userauth is OK
2026-04-12T12:16:40.610 [DEBUG] [Thread-188919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:16:40.611 [DEBUG] [Thread-188919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:16:40.611 [DEBUG] [Thread-188919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:16:40.611 [DEBUG] [Thread-188919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:16:40.645 [INFO] [Thread-188919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:16:40.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:16:41.293 [DEBUG] [Thread-188919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:16:41.293 [DEBUG] [Thread-188919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:16:41.293 [DEBUG] [Thread-188919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:16:41.334 [DEBUG] [Thread-188919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:16:41.334 [DEBUG] [Thread-188919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:16:41.338 [DEBUG] [Thread-188919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:16:41.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:16:41.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:16:41.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:16:41.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:16:41.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:16:41.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:16:41.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:16:41.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:16:41.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:16:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.427886 -999.00  +12.10  13.93     91  +10.70 1 3 1 3 1   888    0 1.49 5.14 ----- 15.9 13.9 284.2 23.1 15.3 -5.5 14.9 -4.2 14.4 -4.0 15.0 -4.4
2026-04-12T12:16:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:16:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:16:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.427886
2026-04-12T12:16:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:16:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:16:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:16:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:16:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:16:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:16:28', tmtdew=0.44415, humidity=96.9338, cloud=0.0, wind=19.9033, temperature=11.9359, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:16:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:16:41.365 [DEBUG] [Thread-188919] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:16:41.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:16:41.461 [DEBUG] [Thread-188922] [transport.py] [_log()] starting thread (client mode): 0xb39c6e60
2026-04-12T12:16:41.461 [DEBUG] [Thread-188922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:16:41.476 [DEBUG] [Thread-188922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:16:41.476 [INFO] [Thread-188922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:16:41.484 [DEBUG] [Thread-188922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:16:41.484 [DEBUG] [Thread-188922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:16:41.484 [DEBUG] [Thread-188922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:16:41.484 [DEBUG] [Thread-188922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] client lang: <none>
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] server lang: <none>
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] kex follows: False
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] Compression: none
2026-04-12T12:16:41.485 [DEBUG] [Thread-188922] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:16:41.545 [DEBUG] [Thread-188922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:16:41.545 [DEBUG] [Thread-188922] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:16:41.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:16:41.547 [DEBUG] [Thread-188922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:16:41.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:16:41.601 [DEBUG] [Thread-188922] [transport.py] [_log()] userauth is OK
2026-04-12T12:16:41.601 [DEBUG] [Thread-188922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:16:41.601 [DEBUG] [Thread-188922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:16:41.602 [DEBUG] [Thread-188922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:16:41.602 [DEBUG] [Thread-188922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:16:41.627 [INFO] [Thread-188922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:16:41.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:16:41.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:16:42.456 [DEBUG] [Thread-188922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:16:42.456 [DEBUG] [Thread-188922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:16:42.504 [DEBUG] [Thread-188922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:16:42.504 [DEBUG] [Thread-188922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:16:42.513 [DEBUG] [Thread-188922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:16:42.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:16:42.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:16:42.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:16:42.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:16:42.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:16:42.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:16:42.549 [DEBUG] [Thread-188922] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:16:46.041 [DEBUG] [Thread-188924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:01.095 [DEBUG] [Thread-188925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:12.422 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:12.423 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:12.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:17:12.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:17:12.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:17:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 17, 4), 0.444325, 96.9338, 0.0, 19.8504, 11.9691, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:17:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:17:04
2026-04-12T12:17:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:17:14.417 [DEBUG] [Thread-188926] [transport.py] [_log()] starting thread (client mode): 0xa7969c60
2026-04-12T12:17:14.417 [DEBUG] [Thread-188926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:17:14.438 [DEBUG] [Thread-188926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:17:14.438 [INFO] [Thread-188926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] client lang: <none>
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] server lang: <none>
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] kex follows: False
2026-04-12T12:17:14.442 [DEBUG] [Thread-188926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:17:14.443 [DEBUG] [Thread-188926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:17:14.443 [DEBUG] [Thread-188926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:17:14.443 [DEBUG] [Thread-188926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:17:14.443 [DEBUG] [Thread-188926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:17:14.443 [DEBUG] [Thread-188926] [transport.py] [_log()] Compression: none
2026-04-12T12:17:14.443 [DEBUG] [Thread-188926] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:17:14.462 [DEBUG] [Thread-188926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:17:14.462 [DEBUG] [Thread-188926] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:17:14.463 [DEBUG] [Thread-188926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:17:14.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:17:14.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:17:14.465 [DEBUG] [Thread-188926] [transport.py] [_log()] userauth is OK
2026-04-12T12:17:14.465 [DEBUG] [Thread-188926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:17:14.465 [DEBUG] [Thread-188926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:17:14.465 [DEBUG] [Thread-188926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:17:14.465 [DEBUG] [Thread-188926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:17:14.490 [INFO] [Thread-188926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:17:14.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:17:15.089 [DEBUG] [Thread-188926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:17:15.090 [DEBUG] [Thread-188926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:17:15.091 [DEBUG] [Thread-188926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:17:15.131 [DEBUG] [Thread-188926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:17:15.131 [DEBUG] [Thread-188926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:17:15.134 [DEBUG] [Thread-188926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:17:15.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:17:15.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:17:15.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:17:15.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:17:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:17:15.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:17:15.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:17:15.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:17:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:17:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.428233 -999.00  +11.90  21.23     90  +10.40 1 3 1 3 1   888    0 1.49 5.01 ----- 20.0 21.2 277.2 24.1 15.3 -5.3 14.9 -4.2 14.2 -5.5 14.9 -4.2
2026-04-12T12:17:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:17:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:17:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.428233
2026-04-12T12:17:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:17:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:17:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:17:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:17:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:17:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:17:04', tmtdew=0.444325, humidity=96.9338, cloud=0.0, wind=19.8504, temperature=11.9691, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:16:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:17:15.159 [DEBUG] [Thread-188926] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:17:15.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:17:15.264 [DEBUG] [Thread-188929] [transport.py] [_log()] starting thread (client mode): 0xb0fce110
2026-04-12T12:17:15.264 [DEBUG] [Thread-188929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:17:15.279 [DEBUG] [Thread-188929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:17:15.279 [INFO] [Thread-188929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:17:15.287 [DEBUG] [Thread-188929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:17:15.287 [DEBUG] [Thread-188929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:17:15.287 [DEBUG] [Thread-188929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:17:15.287 [DEBUG] [Thread-188929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] client lang: <none>
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] server lang: <none>
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] kex follows: False
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:17:15.288 [DEBUG] [Thread-188929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:17:15.289 [DEBUG] [Thread-188929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:17:15.289 [DEBUG] [Thread-188929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:17:15.289 [DEBUG] [Thread-188929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:17:15.289 [DEBUG] [Thread-188929] [transport.py] [_log()] Compression: none
2026-04-12T12:17:15.289 [DEBUG] [Thread-188929] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:17:15.345 [DEBUG] [Thread-188929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:17:15.346 [DEBUG] [Thread-188929] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:17:15.346 [DEBUG] [Thread-188929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:17:15.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:17:15.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:17:15.401 [DEBUG] [Thread-188929] [transport.py] [_log()] userauth is OK
2026-04-12T12:17:15.401 [DEBUG] [Thread-188929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:17:15.401 [DEBUG] [Thread-188929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:17:15.402 [DEBUG] [Thread-188929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:17:15.402 [DEBUG] [Thread-188929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:17:15.419 [INFO] [Thread-188929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:17:15.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:17:15.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:17:16.132 [DEBUG] [Thread-188931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:16.243 [DEBUG] [Thread-188929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:17:16.244 [DEBUG] [Thread-188929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:17:16.295 [DEBUG] [Thread-188929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:17:16.295 [DEBUG] [Thread-188929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:17:16.307 [DEBUG] [Thread-188929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:17:16.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:17:16.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:17:16.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:17:16.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:17:16.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:17:16.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:17:16.352 [DEBUG] [Thread-188929] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:17:31.186 [DEBUG] [Thread-188932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:33.355 [DEBUG] [Thread-188933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:46.226 [DEBUG] [Thread-188934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:17:46.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:17:46.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:17:46.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:17:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 17, 40), 0.79993, 94.8015, 0.0, 19.9015, 12.571, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:17:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:17:40
2026-04-12T12:17:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:17:48.276 [DEBUG] [Thread-188935] [transport.py] [_log()] starting thread (client mode): 0xb0f56bf0
2026-04-12T12:17:48.277 [DEBUG] [Thread-188935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:17:48.297 [DEBUG] [Thread-188935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:17:48.298 [INFO] [Thread-188935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:17:48.301 [DEBUG] [Thread-188935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:17:48.301 [DEBUG] [Thread-188935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:17:48.301 [DEBUG] [Thread-188935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:17:48.301 [DEBUG] [Thread-188935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:48.301 [DEBUG] [Thread-188935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:48.301 [DEBUG] [Thread-188935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:48.301 [DEBUG] [Thread-188935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] client lang: <none>
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] server lang: <none>
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] kex follows: False
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:17:48.302 [DEBUG] [Thread-188935] [transport.py] [_log()] Compression: none
2026-04-12T12:17:48.303 [DEBUG] [Thread-188935] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:17:48.321 [DEBUG] [Thread-188935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:17:48.322 [DEBUG] [Thread-188935] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:17:48.323 [DEBUG] [Thread-188935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:17:48.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:17:48.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:17:48.325 [DEBUG] [Thread-188935] [transport.py] [_log()] userauth is OK
2026-04-12T12:17:48.325 [DEBUG] [Thread-188935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:17:48.325 [DEBUG] [Thread-188935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:17:48.325 [DEBUG] [Thread-188935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:17:48.325 [DEBUG] [Thread-188935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:17:48.350 [INFO] [Thread-188935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:17:48.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:17:48.969 [DEBUG] [Thread-188935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:17:48.969 [DEBUG] [Thread-188935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:17:48.969 [DEBUG] [Thread-188935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:17:49.010 [DEBUG] [Thread-188935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:17:49.010 [DEBUG] [Thread-188935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:17:49.012 [DEBUG] [Thread-188935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:17:49.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:17:49.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:17:49.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:17:49.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:17:49.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:17:49.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:17:49.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:17:49.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:17:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:17:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.428581 -999.00  +11.90  19.48     90  +10.30 1 3 1 3 1   888    0 1.50 5.29 ----- 18.9 19.5 274.2 24.8 15.3 -5.4 15.0 -3.7 14.3 -4.9 15.0 -4.1
2026-04-12T12:17:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:17:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:17:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.428581
2026-04-12T12:17:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:17:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:17:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:17:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:17:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:17:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:17:40', tmtdew=0.79993, humidity=94.8015, cloud=0.0, wind=19.9015, temperature=12.571, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:17:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:17:49.031 [DEBUG] [Thread-188935] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:17:49.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:17:49.127 [DEBUG] [Thread-188938] [transport.py] [_log()] starting thread (client mode): 0xb0f55510
2026-04-12T12:17:49.127 [DEBUG] [Thread-188938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:17:49.142 [DEBUG] [Thread-188938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:17:49.142 [INFO] [Thread-188938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:17:49.150 [DEBUG] [Thread-188938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:17:49.150 [DEBUG] [Thread-188938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:17:49.150 [DEBUG] [Thread-188938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] client lang: <none>
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] server lang: <none>
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] kex follows: False
2026-04-12T12:17:49.151 [DEBUG] [Thread-188938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:17:49.152 [DEBUG] [Thread-188938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:17:49.152 [DEBUG] [Thread-188938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:17:49.152 [DEBUG] [Thread-188938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:17:49.152 [DEBUG] [Thread-188938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:17:49.152 [DEBUG] [Thread-188938] [transport.py] [_log()] Compression: none
2026-04-12T12:17:49.152 [DEBUG] [Thread-188938] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:17:49.208 [DEBUG] [Thread-188938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:17:49.209 [DEBUG] [Thread-188938] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:17:49.210 [DEBUG] [Thread-188938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:17:49.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:17:49.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:17:49.264 [DEBUG] [Thread-188938] [transport.py] [_log()] userauth is OK
2026-04-12T12:17:49.265 [DEBUG] [Thread-188938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:17:49.265 [DEBUG] [Thread-188938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:17:49.265 [DEBUG] [Thread-188938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:17:49.266 [DEBUG] [Thread-188938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:17:49.288 [INFO] [Thread-188938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:17:49.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:17:49.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:17:50.091 [DEBUG] [Thread-188938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:17:50.092 [DEBUG] [Thread-188938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:17:50.140 [DEBUG] [Thread-188938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:17:50.140 [DEBUG] [Thread-188938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:17:50.150 [DEBUG] [Thread-188938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:17:50.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:17:50.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:17:50.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:17:50.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:17:50.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:17:50.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:17:50.187 [DEBUG] [Thread-188938] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:18:01.265 [DEBUG] [Thread-188940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:18:12.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:18:12.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:18:16.314 [DEBUG] [Thread-188941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:18:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:18:20.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:18:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:18:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 17, 40), 0.79993, 94.8015, 0.0, 19.9015, 12.571, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:18:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:17:40
2026-04-12T12:18:22.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:18:22.341 [DEBUG] [Thread-188942] [transport.py] [_log()] starting thread (client mode): 0xb0fce260
2026-04-12T12:18:22.341 [DEBUG] [Thread-188942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:18:22.362 [DEBUG] [Thread-188942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:18:22.362 [INFO] [Thread-188942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:18:22.364 [DEBUG] [Thread-188942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:18:22.364 [DEBUG] [Thread-188942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] client lang: <none>
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] server lang: <none>
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] kex follows: False
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:18:22.365 [DEBUG] [Thread-188942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:18:22.366 [DEBUG] [Thread-188942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:18:22.366 [DEBUG] [Thread-188942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:18:22.366 [DEBUG] [Thread-188942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:18:22.366 [DEBUG] [Thread-188942] [transport.py] [_log()] Compression: none
2026-04-12T12:18:22.366 [DEBUG] [Thread-188942] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:18:22.386 [DEBUG] [Thread-188942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:18:22.387 [DEBUG] [Thread-188942] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:18:22.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:18:22.388 [DEBUG] [Thread-188942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:18:22.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:18:22.390 [DEBUG] [Thread-188942] [transport.py] [_log()] userauth is OK
2026-04-12T12:18:22.390 [DEBUG] [Thread-188942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:18:22.390 [DEBUG] [Thread-188942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:18:22.390 [DEBUG] [Thread-188942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:18:22.391 [DEBUG] [Thread-188942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:18:22.414 [INFO] [Thread-188942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:18:22.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:18:23.036 [DEBUG] [Thread-188942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:18:23.037 [DEBUG] [Thread-188942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:18:23.037 [DEBUG] [Thread-188942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:18:23.077 [DEBUG] [Thread-188942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:18:23.077 [DEBUG] [Thread-188942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:18:23.080 [DEBUG] [Thread-188942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:18:23.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:18:23.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:18:23.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:18:23.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:18:23.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:18:23.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:18:23.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:18:23.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:18:23.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:18:23.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.429275 -999.00  +11.80  15.85     90  +10.30 1 3 1 3 1   888    0 1.53 5.70 ----- 16.9 15.8 276.8 23.2 15.4 -4.7 15.0 -3.7 14.3 -3.3 15.0 -3.2
2026-04-12T12:18:23.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:18:23.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:18:23.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.429275
2026-04-12T12:18:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:18:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:18:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:18:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:18:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:18:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:17:40', tmtdew=0.79993, humidity=94.8015, cloud=0.0, wind=19.9015, temperature=12.571, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:18:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:18:23.109 [DEBUG] [Thread-188942] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:18:23.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:18:23.200 [DEBUG] [Thread-188945] [transport.py] [_log()] starting thread (client mode): 0xa796b970
2026-04-12T12:18:23.200 [DEBUG] [Thread-188945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:18:23.215 [DEBUG] [Thread-188945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:18:23.215 [INFO] [Thread-188945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:18:23.223 [DEBUG] [Thread-188945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:18:23.223 [DEBUG] [Thread-188945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] client lang: <none>
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] server lang: <none>
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] kex follows: False
2026-04-12T12:18:23.224 [DEBUG] [Thread-188945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:18:23.225 [DEBUG] [Thread-188945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:18:23.225 [DEBUG] [Thread-188945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:18:23.225 [DEBUG] [Thread-188945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:18:23.225 [DEBUG] [Thread-188945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:18:23.225 [DEBUG] [Thread-188945] [transport.py] [_log()] Compression: none
2026-04-12T12:18:23.225 [DEBUG] [Thread-188945] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:18:23.281 [DEBUG] [Thread-188945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:18:23.282 [DEBUG] [Thread-188945] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:18:23.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:18:23.283 [DEBUG] [Thread-188945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:18:23.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:18:23.337 [DEBUG] [Thread-188945] [transport.py] [_log()] userauth is OK
2026-04-12T12:18:23.337 [DEBUG] [Thread-188945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:18:23.337 [DEBUG] [Thread-188945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:18:23.337 [DEBUG] [Thread-188945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:18:23.337 [DEBUG] [Thread-188945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:18:23.356 [INFO] [Thread-188945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:18:23.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:18:23.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:18:24.246 [DEBUG] [Thread-188945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:18:24.246 [DEBUG] [Thread-188945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:18:24.294 [DEBUG] [Thread-188945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:18:24.294 [DEBUG] [Thread-188945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:18:24.303 [DEBUG] [Thread-188945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:18:24.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:18:24.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:18:24.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:18:24.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:18:24.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:18:24.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:18:24.340 [DEBUG] [Thread-188945] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:18:31.352 [DEBUG] [Thread-188947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:18:33.392 [DEBUG] [Thread-188948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:18:46.408 [DEBUG] [Thread-188949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:18:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:18:54.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:18:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:18:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 18, 15), 0.460285, 96.8344, 0.0, 19.5152, 11.9857, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:18:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:18:15
2026-04-12T12:18:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:18:56.255 [DEBUG] [Thread-188950] [transport.py] [_log()] starting thread (client mode): 0xb0f55900
2026-04-12T12:18:56.255 [DEBUG] [Thread-188950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:18:56.275 [DEBUG] [Thread-188950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:18:56.275 [INFO] [Thread-188950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] client lang: <none>
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] server lang: <none>
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] kex follows: False
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:18:56.278 [DEBUG] [Thread-188950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:18:56.279 [DEBUG] [Thread-188950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:18:56.279 [DEBUG] [Thread-188950] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:18:56.279 [DEBUG] [Thread-188950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:18:56.279 [DEBUG] [Thread-188950] [transport.py] [_log()] Compression: none
2026-04-12T12:18:56.279 [DEBUG] [Thread-188950] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:18:56.297 [DEBUG] [Thread-188950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:18:56.297 [DEBUG] [Thread-188950] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:18:56.297 [DEBUG] [Thread-188950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:18:56.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:18:56.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:18:56.341 [DEBUG] [Thread-188950] [transport.py] [_log()] userauth is OK
2026-04-12T12:18:56.342 [DEBUG] [Thread-188950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:18:56.342 [DEBUG] [Thread-188950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:18:56.342 [DEBUG] [Thread-188950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:18:56.343 [DEBUG] [Thread-188950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:18:56.368 [INFO] [Thread-188950] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:18:56.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:18:56.982 [DEBUG] [Thread-188950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:18:56.982 [DEBUG] [Thread-188950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:18:56.983 [DEBUG] [Thread-188950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:18:57.023 [DEBUG] [Thread-188950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:18:57.023 [DEBUG] [Thread-188950] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:18:57.026 [DEBUG] [Thread-188950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:18:57.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:18:57.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:18:57.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:18:57.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:18:57.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:18:57.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:18:57.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:18:57.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:18:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:18:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.429622 -999.00  +11.80  22.55     91  +10.40 1 3 1 3 1   888    0 1.52 5.66 ----- 20.6 22.6 272.2 25.9 15.3 -4.6 15.0 -3.4 14.2 -3.8 15.0 -3.1
2026-04-12T12:18:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:18:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:18:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.429622
2026-04-12T12:18:57.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:18:57.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:18:57.054 [DEBUG] [Thread-188950] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:18:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:18:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:18:57.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:18:57.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:18:15', tmtdew=0.460285, humidity=96.8344, cloud=0.0, wind=19.5152, temperature=11.9857, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:18:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:18:57.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:18:57.149 [DEBUG] [Thread-188953] [transport.py] [_log()] starting thread (client mode): 0xb0f56410
2026-04-12T12:18:57.149 [DEBUG] [Thread-188953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:18:57.167 [DEBUG] [Thread-188953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:18:57.167 [INFO] [Thread-188953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:18:57.175 [DEBUG] [Thread-188953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:18:57.175 [DEBUG] [Thread-188953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:18:57.175 [DEBUG] [Thread-188953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:18:57.175 [DEBUG] [Thread-188953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:57.175 [DEBUG] [Thread-188953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:18:57.175 [DEBUG] [Thread-188953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:57.175 [DEBUG] [Thread-188953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] client lang: <none>
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] server lang: <none>
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] kex follows: False
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] Compression: none
2026-04-12T12:18:57.176 [DEBUG] [Thread-188953] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:18:57.234 [DEBUG] [Thread-188953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:18:57.235 [DEBUG] [Thread-188953] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:18:57.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:18:57.236 [DEBUG] [Thread-188953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:18:57.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:18:57.293 [DEBUG] [Thread-188953] [transport.py] [_log()] userauth is OK
2026-04-12T12:18:57.293 [DEBUG] [Thread-188953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:18:57.294 [DEBUG] [Thread-188953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:18:57.294 [DEBUG] [Thread-188953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:18:57.294 [DEBUG] [Thread-188953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:18:57.313 [INFO] [Thread-188953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:18:57.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:18:57.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:18:58.161 [DEBUG] [Thread-188953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:18:58.161 [DEBUG] [Thread-188953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:18:58.212 [DEBUG] [Thread-188953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:18:58.212 [DEBUG] [Thread-188953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:18:58.223 [DEBUG] [Thread-188953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:18:58.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:18:58.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:18:58.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:18:58.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:18:58.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:18:58.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:18:58.257 [DEBUG] [Thread-188953] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:19:01.444 [DEBUG] [Thread-188955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:19:12.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:19:12.734 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:19:16.498 [DEBUG] [Thread-188956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:19:28.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:19:28.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:19:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:19:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 18, 52), 0.84197, 94.5363, 0.0, 20.219, 12.5048, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:19:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:18:52
2026-04-12T12:19:30.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:19:30.352 [DEBUG] [Thread-188957] [transport.py] [_log()] starting thread (client mode): 0xb0fccee0
2026-04-12T12:19:30.352 [DEBUG] [Thread-188957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:19:30.372 [DEBUG] [Thread-188957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:19:30.372 [INFO] [Thread-188957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:19:30.375 [DEBUG] [Thread-188957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:19:30.375 [DEBUG] [Thread-188957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] client lang: <none>
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] server lang: <none>
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] kex follows: False
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:19:30.376 [DEBUG] [Thread-188957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:19:30.377 [DEBUG] [Thread-188957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:19:30.377 [DEBUG] [Thread-188957] [transport.py] [_log()] Compression: none
2026-04-12T12:19:30.377 [DEBUG] [Thread-188957] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:19:30.385 [DEBUG] [Thread-188957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:19:30.386 [DEBUG] [Thread-188957] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:19:30.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:19:30.387 [DEBUG] [Thread-188957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:19:30.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:19:30.389 [DEBUG] [Thread-188957] [transport.py] [_log()] userauth is OK
2026-04-12T12:19:30.389 [DEBUG] [Thread-188957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:19:30.390 [DEBUG] [Thread-188957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:19:30.390 [DEBUG] [Thread-188957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:19:30.390 [DEBUG] [Thread-188957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:19:30.409 [INFO] [Thread-188957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:19:30.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:19:31.090 [DEBUG] [Thread-188957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:19:31.091 [DEBUG] [Thread-188957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:19:31.091 [DEBUG] [Thread-188957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:19:31.132 [DEBUG] [Thread-188957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:19:31.132 [DEBUG] [Thread-188957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:19:31.136 [DEBUG] [Thread-188957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:19:31.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:19:31.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:19:31.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:19:31.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:19:31.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:19:31.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:19:31.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:19:31.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:19:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:19:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.429969 -999.00  +11.90  19.47     91  +10.40 1 3 1 3 1   888    0 1.53 6.05 ----- 20.6 19.5 278.5 25.2 15.3 -4.6 15.0 -3.1 14.3 -4.4 15.0 -3.4
2026-04-12T12:19:31.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:19:31.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:19:31.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.429969
2026-04-12T12:19:31.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:19:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:19:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:19:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:19:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:19:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:18:52', tmtdew=0.84197, humidity=94.5363, cloud=0.0, wind=20.219, temperature=12.5048, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:19:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:19:31.162 [DEBUG] [Thread-188957] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:19:31.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:19:31.256 [DEBUG] [Thread-188960] [transport.py] [_log()] starting thread (client mode): 0xb0fb41f0
2026-04-12T12:19:31.256 [DEBUG] [Thread-188960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:19:31.271 [DEBUG] [Thread-188960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:19:31.271 [INFO] [Thread-188960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:19:31.279 [DEBUG] [Thread-188960] [transport.py] [_log()] client lang: <none>
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] server lang: <none>
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] kex follows: False
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] Compression: none
2026-04-12T12:19:31.280 [DEBUG] [Thread-188960] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:19:31.337 [DEBUG] [Thread-188960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:19:31.338 [DEBUG] [Thread-188960] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:19:31.338 [DEBUG] [Thread-188960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:19:31.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:19:31.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:19:31.393 [DEBUG] [Thread-188960] [transport.py] [_log()] userauth is OK
2026-04-12T12:19:31.394 [DEBUG] [Thread-188960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:19:31.394 [DEBUG] [Thread-188960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:19:31.394 [DEBUG] [Thread-188960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:19:31.394 [DEBUG] [Thread-188960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:19:31.416 [INFO] [Thread-188960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:19:31.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:19:31.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:19:31.536 [DEBUG] [Thread-188962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:19:32.263 [DEBUG] [Thread-188960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:19:32.264 [DEBUG] [Thread-188960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:19:32.311 [DEBUG] [Thread-188960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:19:32.311 [DEBUG] [Thread-188960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:19:32.320 [DEBUG] [Thread-188960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:19:32.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:19:32.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:19:32.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:19:32.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:19:32.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:19:32.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:19:32.357 [DEBUG] [Thread-188960] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:19:33.458 [DEBUG] [Thread-188963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:19:46.599 [DEBUG] [Thread-188964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:01.638 [DEBUG] [Thread-188965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:20:02.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:20:02.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:20:03.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 19, 27), 0.49194, 96.6355, 0.0, 18.5972, 12.0526, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:20:03.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:19:27
2026-04-12T12:20:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:20:04.228 [DEBUG] [Thread-188966] [transport.py] [_log()] starting thread (client mode): 0xb0f56440
2026-04-12T12:20:04.229 [DEBUG] [Thread-188966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:20:04.249 [DEBUG] [Thread-188966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:20:04.249 [INFO] [Thread-188966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] client lang: <none>
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] server lang: <none>
2026-04-12T12:20:04.253 [DEBUG] [Thread-188966] [transport.py] [_log()] kex follows: False
2026-04-12T12:20:04.254 [DEBUG] [Thread-188966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:20:04.254 [DEBUG] [Thread-188966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:20:04.254 [DEBUG] [Thread-188966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:20:04.254 [DEBUG] [Thread-188966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:20:04.254 [DEBUG] [Thread-188966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:20:04.254 [DEBUG] [Thread-188966] [transport.py] [_log()] Compression: none
2026-04-12T12:20:04.254 [DEBUG] [Thread-188966] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:20:04.270 [DEBUG] [Thread-188966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:20:04.271 [DEBUG] [Thread-188966] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:20:04.272 [DEBUG] [Thread-188966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:20:04.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:20:04.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:20:04.274 [DEBUG] [Thread-188966] [transport.py] [_log()] userauth is OK
2026-04-12T12:20:04.274 [DEBUG] [Thread-188966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:20:04.274 [DEBUG] [Thread-188966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:20:04.274 [DEBUG] [Thread-188966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:20:04.274 [DEBUG] [Thread-188966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:20:04.292 [INFO] [Thread-188966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:20:04.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:20:11.565 [DEBUG] [Thread-188966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:20:11.565 [DEBUG] [Thread-188966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:20:11.565 [DEBUG] [Thread-188966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:20:11.606 [DEBUG] [Thread-188966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:20:11.606 [DEBUG] [Thread-188966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:20:11.610 [DEBUG] [Thread-188966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:20:11.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:20:11.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:20:11.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:20:11.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:20:11.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:20:11.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:20:11.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:20:11.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:20:11.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:20:11.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.430317 -999.00  +11.90  19.30     90  +10.40 1 3 1 3 1   888    0 1.54 6.09 ----- 19.5 19.3 277.4 26.7 15.4 -4.5 15.0 -3.4 14.2 -3.2 15.1 -3.3
2026-04-12T12:20:11.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:20:11.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:20:11.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.430317
2026-04-12T12:20:11.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:20:11.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:20:11.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:20:11.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:20:11.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:20:11.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:19:27', tmtdew=0.49194, humidity=96.6355, cloud=0.0, wind=18.5972, temperature=12.0526, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:19:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:20:11.695 [DEBUG] [Thread-188966] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:20:11.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:20:11.791 [DEBUG] [Thread-188969] [transport.py] [_log()] starting thread (client mode): 0xb0fce7a0
2026-04-12T12:20:11.791 [DEBUG] [Thread-188969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:20:11.808 [DEBUG] [Thread-188969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:20:11.808 [INFO] [Thread-188969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:20:11.816 [DEBUG] [Thread-188969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] client lang: <none>
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] server lang: <none>
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] kex follows: False
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:20:11.817 [DEBUG] [Thread-188969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:20:11.818 [DEBUG] [Thread-188969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:20:11.818 [DEBUG] [Thread-188969] [transport.py] [_log()] Compression: none
2026-04-12T12:20:11.818 [DEBUG] [Thread-188969] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:20:11.878 [DEBUG] [Thread-188969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:20:11.879 [DEBUG] [Thread-188969] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:20:11.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:20:11.880 [DEBUG] [Thread-188969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:20:11.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:20:11.938 [DEBUG] [Thread-188969] [transport.py] [_log()] userauth is OK
2026-04-12T12:20:11.938 [DEBUG] [Thread-188969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:20:11.938 [DEBUG] [Thread-188969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:20:11.939 [DEBUG] [Thread-188969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:20:11.939 [DEBUG] [Thread-188969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:20:11.957 [INFO] [Thread-188969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:20:11.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:20:11.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:20:12.817 [DEBUG] [Thread-188969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:20:12.817 [DEBUG] [Thread-188969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:20:12.865 [DEBUG] [Thread-188969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:20:12.865 [DEBUG] [Thread-188969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:20:12.874 [DEBUG] [Thread-188969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:20:12.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:20:12.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:20:12.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:20:12.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:12.894 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:12.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:20:12.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:20:12.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:20:12.907 [DEBUG] [Thread-188969] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:20:16.674 [DEBUG] [Thread-188971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:31.732 [DEBUG] [Thread-188972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:33.492 [DEBUG] [Thread-188973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:20:42.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:20:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:20:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 20, 3), 0.487115, 96.6688, 0.0, 17.8564, 12.1356, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:20:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:20:03
2026-04-12T12:20:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:20:44.779 [DEBUG] [Thread-188974] [transport.py] [_log()] starting thread (client mode): 0xb0f56440
2026-04-12T12:20:44.779 [DEBUG] [Thread-188974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:20:44.800 [DEBUG] [Thread-188974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:20:44.800 [INFO] [Thread-188974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:20:44.803 [DEBUG] [Thread-188974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:20:44.803 [DEBUG] [Thread-188974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:20:44.803 [DEBUG] [Thread-188974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:20:44.803 [DEBUG] [Thread-188974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] client lang: <none>
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] server lang: <none>
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] kex follows: False
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] Compression: none
2026-04-12T12:20:44.804 [DEBUG] [Thread-188974] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:20:44.821 [DEBUG] [Thread-188974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:20:44.822 [DEBUG] [Thread-188974] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:20:44.823 [DEBUG] [Thread-188974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:20:44.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:20:44.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:20:44.865 [DEBUG] [Thread-188974] [transport.py] [_log()] userauth is OK
2026-04-12T12:20:44.865 [DEBUG] [Thread-188974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:20:44.866 [DEBUG] [Thread-188974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:20:44.866 [DEBUG] [Thread-188974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:20:44.866 [DEBUG] [Thread-188974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:20:44.903 [INFO] [Thread-188974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:20:44.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:20:45.685 [DEBUG] [Thread-188974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:20:45.686 [DEBUG] [Thread-188974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:20:45.686 [DEBUG] [Thread-188974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:20:45.727 [DEBUG] [Thread-188974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:20:45.727 [DEBUG] [Thread-188974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:20:45.731 [DEBUG] [Thread-188974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:20:45.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:20:45.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:20:45.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:20:45.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:20:45.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:20:45.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:20:45.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:20:45.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:20:45.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:20:45.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.430664 -999.00  +12.00  21.72     91  +10.60 1 3 1 3 1   888    0 1.55 6.04 ----- 19.1 21.7 278.6 26.9 -999.0 -999.0 15.0 -3.2 14.4 -4.1 15.1 -3.2
2026-04-12T12:20:45.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:20:45.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:20:45.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.430664
2026-04-12T12:20:45.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:20:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:20:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:20:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:20:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:20:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:20:03', tmtdew=0.487115, humidity=96.6688, cloud=0.0, wind=17.8564, temperature=12.1356, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:20:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:20:45.754 [DEBUG] [Thread-188974] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:20:45.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:20:45.847 [DEBUG] [Thread-188977] [transport.py] [_log()] starting thread (client mode): 0xb0f55660
2026-04-12T12:20:45.847 [DEBUG] [Thread-188977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:20:45.863 [DEBUG] [Thread-188977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:20:45.863 [INFO] [Thread-188977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:20:45.871 [DEBUG] [Thread-188977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:20:45.871 [DEBUG] [Thread-188977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:20:45.871 [DEBUG] [Thread-188977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] client lang: <none>
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] server lang: <none>
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] kex follows: False
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] Compression: none
2026-04-12T12:20:45.872 [DEBUG] [Thread-188977] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:20:45.930 [DEBUG] [Thread-188977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:20:45.930 [DEBUG] [Thread-188977] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:20:45.931 [DEBUG] [Thread-188977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:20:45.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:20:45.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:20:45.988 [DEBUG] [Thread-188977] [transport.py] [_log()] userauth is OK
2026-04-12T12:20:45.989 [DEBUG] [Thread-188977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:20:45.989 [DEBUG] [Thread-188977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:20:45.989 [DEBUG] [Thread-188977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:20:45.989 [DEBUG] [Thread-188977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:20:46.012 [INFO] [Thread-188977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:20:46.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:20:46.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:20:46.771 [DEBUG] [Thread-188979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:20:46.839 [DEBUG] [Thread-188977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:20:46.839 [DEBUG] [Thread-188977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:20:46.888 [DEBUG] [Thread-188977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:20:46.888 [DEBUG] [Thread-188977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:20:46.898 [DEBUG] [Thread-188977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:20:46.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:20:46.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:20:46.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:20:46.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:20:46.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:20:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:20:46.937 [DEBUG] [Thread-188977] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:21:01.825 [DEBUG] [Thread-188980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:21:13.062 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:21:13.063 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:21:16.863 [DEBUG] [Thread-188981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:21:16.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:21:16.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:21:16.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:21:18.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 20, 39), 0.84308, 94.5365, 0.0, 18.6667, 12.7038, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:21:18.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:20:39
2026-04-12T12:21:18.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:21:18.809 [DEBUG] [Thread-188982] [transport.py] [_log()] starting thread (client mode): 0xb0fcf790
2026-04-12T12:21:18.809 [DEBUG] [Thread-188982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:21:18.829 [DEBUG] [Thread-188982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:21:18.830 [INFO] [Thread-188982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] client lang: <none>
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] server lang: <none>
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] kex follows: False
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] Compression: none
2026-04-12T12:21:18.833 [DEBUG] [Thread-188982] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:21:18.853 [DEBUG] [Thread-188982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:21:18.854 [DEBUG] [Thread-188982] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:21:18.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:21:18.855 [DEBUG] [Thread-188982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:21:18.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:21:18.857 [DEBUG] [Thread-188982] [transport.py] [_log()] userauth is OK
2026-04-12T12:21:18.857 [DEBUG] [Thread-188982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:21:18.857 [DEBUG] [Thread-188982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:21:18.857 [DEBUG] [Thread-188982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:21:18.857 [DEBUG] [Thread-188982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:21:18.891 [INFO] [Thread-188982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:21:18.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:21:19.702 [DEBUG] [Thread-188982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:21:19.702 [DEBUG] [Thread-188982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:21:19.703 [DEBUG] [Thread-188982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:21:19.743 [DEBUG] [Thread-188982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:21:19.743 [DEBUG] [Thread-188982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:21:19.747 [DEBUG] [Thread-188982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:21:19.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:21:19.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:21:19.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:21:19.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:21:19.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:21:19.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:21:19.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:21:19.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:21:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:21:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.431011 -999.00  +12.00  18.20     90  +10.50 1 3 1 3 1   888    0 1.58 6.73 ----- 16.4 18.2 278.0 28.7 15.6 -3.8 15.1 -3.8 14.4 -3.1 15.2 -3.8
2026-04-12T12:21:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:21:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:21:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.431011
2026-04-12T12:21:19.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:21:19.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:21:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:21:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:21:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:21:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:20:39', tmtdew=0.84308, humidity=94.5365, cloud=0.0, wind=18.6667, temperature=12.7038, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:20:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:21:19.773 [DEBUG] [Thread-188982] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:21:19.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:21:19.869 [DEBUG] [Thread-188985] [transport.py] [_log()] starting thread (client mode): 0xb0fb50f0
2026-04-12T12:21:19.869 [DEBUG] [Thread-188985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:21:19.883 [DEBUG] [Thread-188985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:21:19.883 [INFO] [Thread-188985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:21:19.891 [DEBUG] [Thread-188985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] client lang: <none>
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] server lang: <none>
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] kex follows: False
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] Compression: none
2026-04-12T12:21:19.892 [DEBUG] [Thread-188985] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:21:19.954 [DEBUG] [Thread-188985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:21:19.955 [DEBUG] [Thread-188985] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:21:19.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:21:19.956 [DEBUG] [Thread-188985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:21:19.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:21:20.010 [DEBUG] [Thread-188985] [transport.py] [_log()] userauth is OK
2026-04-12T12:21:20.010 [DEBUG] [Thread-188985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:21:20.011 [DEBUG] [Thread-188985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:21:20.011 [DEBUG] [Thread-188985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:21:20.011 [DEBUG] [Thread-188985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:21:20.029 [INFO] [Thread-188985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:21:20.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:21:20.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:21:20.858 [DEBUG] [Thread-188985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:21:20.858 [DEBUG] [Thread-188985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:21:20.906 [DEBUG] [Thread-188985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:21:20.906 [DEBUG] [Thread-188985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:21:20.915 [DEBUG] [Thread-188985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:21:20.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:21:20.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:21:20.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:21:20.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:21:20.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:21:20.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:21:20.950 [DEBUG] [Thread-188985] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:21:31.901 [DEBUG] [Thread-188987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:21:33.525 [DEBUG] [Thread-188988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:21:46.966 [DEBUG] [Thread-188989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:21:50.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:21:50.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:21:50.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:21:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 21, 14), 0.479905, 96.7186, 0.0, 18.4392, 12.3682, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:21:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:21:14
2026-04-12T12:21:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:21:52.897 [DEBUG] [Thread-188990] [transport.py] [_log()] starting thread (client mode): 0xb0fcd480
2026-04-12T12:21:52.897 [DEBUG] [Thread-188990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:21:52.915 [DEBUG] [Thread-188990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:21:52.915 [INFO] [Thread-188990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:52.918 [DEBUG] [Thread-188990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] client lang: <none>
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] server lang: <none>
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] kex follows: False
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] Compression: none
2026-04-12T12:21:52.919 [DEBUG] [Thread-188990] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:21:52.935 [DEBUG] [Thread-188990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:21:52.936 [DEBUG] [Thread-188990] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:21:52.936 [DEBUG] [Thread-188990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:21:52.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:21:52.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:21:52.939 [DEBUG] [Thread-188990] [transport.py] [_log()] userauth is OK
2026-04-12T12:21:52.939 [DEBUG] [Thread-188990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:21:52.939 [DEBUG] [Thread-188990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:21:52.939 [DEBUG] [Thread-188990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:21:52.939 [DEBUG] [Thread-188990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:21:52.972 [INFO] [Thread-188990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:21:52.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:21:53.732 [DEBUG] [Thread-188990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:21:53.733 [DEBUG] [Thread-188990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:21:53.733 [DEBUG] [Thread-188990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:21:53.774 [DEBUG] [Thread-188990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:21:53.775 [DEBUG] [Thread-188990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:21:53.778 [DEBUG] [Thread-188990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:21:53.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:21:53.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:21:53.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:21:53.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:21:53.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:21:53.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:21:53.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:21:53.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:21:53.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:21:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.431358 -999.00  +12.10  15.90     90  +10.60 1 3 1 3 1   888    0 1.61 7.13 ----- 14.6 15.9 277.4 28.0 15.5 -4.8 15.1 -4.0 14.6 -3.6 15.2 -3.7
2026-04-12T12:21:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:21:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:21:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.431358
2026-04-12T12:21:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:21:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:21:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:21:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:21:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:21:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:21:14', tmtdew=0.479905, humidity=96.7186, cloud=0.0, wind=18.4392, temperature=12.3682, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:21:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:21:53.806 [DEBUG] [Thread-188990] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:21:53.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:21:53.899 [DEBUG] [Thread-188993] [transport.py] [_log()] starting thread (client mode): 0xb0fcc190
2026-04-12T12:21:53.900 [DEBUG] [Thread-188993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:21:53.914 [DEBUG] [Thread-188993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:21:53.914 [INFO] [Thread-188993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:21:53.922 [DEBUG] [Thread-188993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:21:53.922 [DEBUG] [Thread-188993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:21:53.922 [DEBUG] [Thread-188993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:21:53.922 [DEBUG] [Thread-188993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:53.922 [DEBUG] [Thread-188993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:21:53.922 [DEBUG] [Thread-188993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:53.922 [DEBUG] [Thread-188993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] client lang: <none>
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] server lang: <none>
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] kex follows: False
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] Compression: none
2026-04-12T12:21:53.923 [DEBUG] [Thread-188993] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:21:53.982 [DEBUG] [Thread-188993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:21:53.982 [DEBUG] [Thread-188993] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:21:53.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:21:53.984 [DEBUG] [Thread-188993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:21:53.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:21:54.038 [DEBUG] [Thread-188993] [transport.py] [_log()] userauth is OK
2026-04-12T12:21:54.039 [DEBUG] [Thread-188993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:21:54.039 [DEBUG] [Thread-188993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:21:54.039 [DEBUG] [Thread-188993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:21:54.039 [DEBUG] [Thread-188993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:21:54.057 [INFO] [Thread-188993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:21:54.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:21:54.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:21:54.876 [DEBUG] [Thread-188993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:21:54.876 [DEBUG] [Thread-188993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:21:54.924 [DEBUG] [Thread-188993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:21:54.924 [DEBUG] [Thread-188993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:21:54.933 [DEBUG] [Thread-188993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:21:54.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:21:54.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:21:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:21:54.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:21:54.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:21:54.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:21:54.970 [DEBUG] [Thread-188993] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:22:02.004 [DEBUG] [Thread-188995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:22:13.216 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:22:13.217 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:22:17.067 [DEBUG] [Thread-188996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:22:24.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:22:24.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:22:24.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:22:26.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 21, 50), 0.89283, 94.2381, 0.0, 22.7592, 13.0023, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:22:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:21:50
2026-04-12T12:22:26.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:22:26.800 [DEBUG] [Thread-188997] [transport.py] [_log()] starting thread (client mode): 0xb0f56a40
2026-04-12T12:22:26.801 [DEBUG] [Thread-188997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:22:26.820 [DEBUG] [Thread-188997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:22:26.820 [INFO] [Thread-188997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] client lang: <none>
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] server lang: <none>
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] kex follows: False
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] Compression: none
2026-04-12T12:22:26.824 [DEBUG] [Thread-188997] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:22:26.841 [DEBUG] [Thread-188997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:22:26.842 [DEBUG] [Thread-188997] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:22:26.842 [DEBUG] [Thread-188997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:22:26.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:22:26.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:22:26.844 [DEBUG] [Thread-188997] [transport.py] [_log()] userauth is OK
2026-04-12T12:22:26.844 [DEBUG] [Thread-188997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:22:26.844 [DEBUG] [Thread-188997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:22:26.844 [DEBUG] [Thread-188997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:22:26.844 [DEBUG] [Thread-188997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:22:26.868 [INFO] [Thread-188997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:22:26.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:22:27.655 [DEBUG] [Thread-188997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:22:27.656 [DEBUG] [Thread-188997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:22:27.656 [DEBUG] [Thread-188997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:22:27.698 [DEBUG] [Thread-188997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:22:27.698 [DEBUG] [Thread-188997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:22:27.701 [DEBUG] [Thread-188997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:22:27.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:22:27.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:22:27.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:22:27.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:22:27.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:22:27.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:22:27.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:22:27.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:22:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:22:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.431706 -999.00  +12.30  13.20     90  +10.80 1 3 1 3 1   888    0 1.59 7.69 ----- 19.2 13.2 261.3 19.4 15.7 -4.3 15.2 -3.7 14.7 -2.9 15.3 -3.9
2026-04-12T12:22:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:22:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:22:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.431706
2026-04-12T12:22:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:22:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:22:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:22:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:22:27.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:22:27.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:21:50', tmtdew=0.89283, humidity=94.2381, cloud=0.0, wind=22.7592, temperature=13.0023, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:21:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:22:27.725 [DEBUG] [Thread-188997] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:22:27.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:22:27.820 [DEBUG] [Thread-189000] [transport.py] [_log()] starting thread (client mode): 0xae5173a0
2026-04-12T12:22:27.820 [DEBUG] [Thread-189000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:22:27.833 [DEBUG] [Thread-189000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:22:27.833 [INFO] [Thread-189000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:22:27.840 [DEBUG] [Thread-189000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:22:27.840 [DEBUG] [Thread-189000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:22:27.840 [DEBUG] [Thread-189000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:22:27.840 [DEBUG] [Thread-189000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] client lang: <none>
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] server lang: <none>
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] kex follows: False
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] Compression: none
2026-04-12T12:22:27.841 [DEBUG] [Thread-189000] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:22:27.904 [DEBUG] [Thread-189000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:22:27.904 [DEBUG] [Thread-189000] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:22:27.904 [DEBUG] [Thread-189000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:22:27.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:22:27.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:22:27.962 [DEBUG] [Thread-189000] [transport.py] [_log()] userauth is OK
2026-04-12T12:22:27.962 [DEBUG] [Thread-189000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:22:27.962 [DEBUG] [Thread-189000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:22:27.962 [DEBUG] [Thread-189000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:22:27.962 [DEBUG] [Thread-189000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:22:27.983 [INFO] [Thread-189000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:22:27.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:22:27.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:22:28.812 [DEBUG] [Thread-189000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:22:28.813 [DEBUG] [Thread-189000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:22:28.861 [DEBUG] [Thread-189000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:22:28.861 [DEBUG] [Thread-189000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:22:28.870 [DEBUG] [Thread-189000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:22:28.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:22:28.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:22:28.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:22:28.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:22:28.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:22:28.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:22:28.907 [DEBUG] [Thread-189000] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:22:32.098 [DEBUG] [Thread-189002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:22:33.557 [DEBUG] [Thread-189003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:22:47.152 [DEBUG] [Thread-189004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:22:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:22:58.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:22:58.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:23:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 22, 26), 0.546415, 96.8041, 0.0, 22.7441, 12.1685, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:23:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:22:26
2026-04-12T12:23:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:23:00.805 [DEBUG] [Thread-189005] [transport.py] [_log()] starting thread (client mode): 0xb0fb7730
2026-04-12T12:23:00.805 [DEBUG] [Thread-189005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:23:00.827 [DEBUG] [Thread-189005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:23:00.827 [INFO] [Thread-189005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:23:00.830 [DEBUG] [Thread-189005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] client lang: <none>
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] server lang: <none>
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] kex follows: False
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] Compression: none
2026-04-12T12:23:00.831 [DEBUG] [Thread-189005] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:23:00.849 [DEBUG] [Thread-189005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:23:00.850 [DEBUG] [Thread-189005] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:23:00.850 [DEBUG] [Thread-189005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:23:00.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:23:00.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:23:00.852 [DEBUG] [Thread-189005] [transport.py] [_log()] userauth is OK
2026-04-12T12:23:00.853 [DEBUG] [Thread-189005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:23:00.853 [DEBUG] [Thread-189005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:23:00.853 [DEBUG] [Thread-189005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:23:00.853 [DEBUG] [Thread-189005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:23:00.877 [INFO] [Thread-189005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:23:00.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:23:01.670 [DEBUG] [Thread-189005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:23:01.670 [DEBUG] [Thread-189005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:23:01.670 [DEBUG] [Thread-189005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:23:01.712 [DEBUG] [Thread-189005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:23:01.712 [DEBUG] [Thread-189005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:23:01.714 [DEBUG] [Thread-189005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:23:01.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:23:01.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:23:01.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:23:01.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:23:01.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:23:01.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:23:01.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.432053 -999.00  +12.20  13.42     90  +10.60 1 3 1 3 1   888    0 1.64 8.24 ----- 17.8 13.4 277.6 25.6 15.7 -4.6 15.2 -4.3 14.8 -3.3 15.4 -4.0
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.432053
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:23:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:22:26', tmtdew=0.546415, humidity=96.8041, cloud=0.0, wind=22.7441, temperature=12.1685, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:22:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:23:01.735 [DEBUG] [Thread-189005] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:23:01.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:23:01.817 [DEBUG] [Thread-189008] [transport.py] [_log()] starting thread (client mode): 0xae515a80
2026-04-12T12:23:01.817 [DEBUG] [Thread-189008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:23:01.831 [DEBUG] [Thread-189008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:23:01.831 [INFO] [Thread-189008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:23:01.838 [DEBUG] [Thread-189008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:23:01.838 [DEBUG] [Thread-189008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] client lang: <none>
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] server lang: <none>
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] kex follows: False
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] Compression: none
2026-04-12T12:23:01.839 [DEBUG] [Thread-189008] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:23:01.897 [DEBUG] [Thread-189008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:23:01.897 [DEBUG] [Thread-189008] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:23:01.897 [DEBUG] [Thread-189008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:23:01.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:23:01.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:23:01.954 [DEBUG] [Thread-189008] [transport.py] [_log()] userauth is OK
2026-04-12T12:23:01.954 [DEBUG] [Thread-189008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:23:01.954 [DEBUG] [Thread-189008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:23:01.955 [DEBUG] [Thread-189008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:23:01.955 [DEBUG] [Thread-189008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:23:01.968 [INFO] [Thread-189008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:23:01.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:23:01.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:23:02.193 [DEBUG] [Thread-189010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:23:02.815 [DEBUG] [Thread-189008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:23:02.816 [DEBUG] [Thread-189008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:23:02.863 [DEBUG] [Thread-189008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:23:02.863 [DEBUG] [Thread-189008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:23:02.872 [DEBUG] [Thread-189008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:23:02.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:23:02.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:23:02.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:23:02.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:23:02.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:23:02.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:23:02.915 [DEBUG] [Thread-189008] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:23:13.374 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:23:13.376 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:23:17.249 [DEBUG] [Thread-189011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:23:32.287 [DEBUG] [Thread-189012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:23:32.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:23:32.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:23:32.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:23:33.615 [DEBUG] [Thread-189013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:23:34.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 23, 1), 0.5463, 96.8041, 0.0, 23.3086, 12.1519, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:23:34.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:23:01
2026-04-12T12:23:34.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:23:34.945 [DEBUG] [Thread-189014] [transport.py] [_log()] starting thread (client mode): 0xb0fb7ca0
2026-04-12T12:23:34.945 [DEBUG] [Thread-189014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:23:34.965 [DEBUG] [Thread-189014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:23:34.965 [INFO] [Thread-189014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:23:34.968 [DEBUG] [Thread-189014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] client lang: <none>
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] server lang: <none>
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] kex follows: False
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] Compression: none
2026-04-12T12:23:34.969 [DEBUG] [Thread-189014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:23:34.987 [DEBUG] [Thread-189014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:23:34.987 [DEBUG] [Thread-189014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:23:34.988 [DEBUG] [Thread-189014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:23:34.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:23:34.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:23:34.989 [DEBUG] [Thread-189014] [transport.py] [_log()] userauth is OK
2026-04-12T12:23:34.990 [DEBUG] [Thread-189014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:23:34.990 [DEBUG] [Thread-189014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:23:34.990 [DEBUG] [Thread-189014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:23:34.990 [DEBUG] [Thread-189014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:23:35.013 [INFO] [Thread-189014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:23:35.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:23:35.791 [DEBUG] [Thread-189014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:23:35.791 [DEBUG] [Thread-189014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:23:35.791 [DEBUG] [Thread-189014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:23:35.832 [DEBUG] [Thread-189014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:23:35.832 [DEBUG] [Thread-189014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:23:35.836 [DEBUG] [Thread-189014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:23:35.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:23:35.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:23:35.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:23:35.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:23:35.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:23:35.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:23:35.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:23:35.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:23:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:23:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.432747 -999.00  +12.00  17.23     89  +10.40 1 3 1 3 1   888    0 1.72 12.02 ----- 22.5 17.2 284.6 26.8 15.7 -5.9 15.3 -4.9 14.6 -5.2 15.3 -5.0
2026-04-12T12:23:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:23:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:23:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.432747
2026-04-12T12:23:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:23:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:23:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:23:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:23:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:23:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:23:01', tmtdew=0.5463, humidity=96.8041, cloud=0.0, wind=23.3086, temperature=12.1519, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:23:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:23:35.857 [DEBUG] [Thread-189014] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:23:35.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:23:35.949 [DEBUG] [Thread-189017] [transport.py] [_log()] starting thread (client mode): 0xae516290
2026-04-12T12:23:35.949 [DEBUG] [Thread-189017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:23:35.964 [DEBUG] [Thread-189017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:23:35.964 [INFO] [Thread-189017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:23:35.971 [DEBUG] [Thread-189017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:23:35.971 [DEBUG] [Thread-189017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:23:35.971 [DEBUG] [Thread-189017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] client lang: <none>
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] server lang: <none>
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] kex follows: False
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] Compression: none
2026-04-12T12:23:35.972 [DEBUG] [Thread-189017] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:23:36.035 [DEBUG] [Thread-189017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:23:36.035 [DEBUG] [Thread-189017] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:23:36.036 [DEBUG] [Thread-189017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:23:36.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:23:36.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:23:36.091 [DEBUG] [Thread-189017] [transport.py] [_log()] userauth is OK
2026-04-12T12:23:36.091 [DEBUG] [Thread-189017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:23:36.091 [DEBUG] [Thread-189017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:23:36.091 [DEBUG] [Thread-189017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:23:36.092 [DEBUG] [Thread-189017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:23:36.112 [INFO] [Thread-189017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:23:36.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:23:36.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:23:36.928 [DEBUG] [Thread-189017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:23:36.929 [DEBUG] [Thread-189017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:23:36.976 [DEBUG] [Thread-189017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:23:36.976 [DEBUG] [Thread-189017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:23:36.985 [DEBUG] [Thread-189017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:23:36.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:23:36.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:23:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:23:37.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:23:37.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:23:37.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:23:37.023 [DEBUG] [Thread-189017] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:23:47.325 [DEBUG] [Thread-189019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:24:02.392 [DEBUG] [Thread-189020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:24:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:24:07.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:24:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:24:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 23, 36), 0.99795, 93.5751, 0.0, 22.5122, 12.7039, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:24:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:23:36
2026-04-12T12:24:08.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:24:08.800 [DEBUG] [Thread-189021] [transport.py] [_log()] starting thread (client mode): 0xb39c6080
2026-04-12T12:24:08.800 [DEBUG] [Thread-189021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:24:08.822 [DEBUG] [Thread-189021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:24:08.822 [INFO] [Thread-189021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:24:08.823 [DEBUG] [Thread-189021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:24:08.823 [DEBUG] [Thread-189021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:24:08.823 [DEBUG] [Thread-189021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] client lang: <none>
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] server lang: <none>
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] kex follows: False
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] Compression: none
2026-04-12T12:24:08.824 [DEBUG] [Thread-189021] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:24:08.838 [DEBUG] [Thread-189021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:24:08.839 [DEBUG] [Thread-189021] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:24:08.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:24:08.840 [DEBUG] [Thread-189021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:24:08.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:24:08.842 [DEBUG] [Thread-189021] [transport.py] [_log()] userauth is OK
2026-04-12T12:24:08.842 [DEBUG] [Thread-189021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:24:08.842 [DEBUG] [Thread-189021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:24:08.842 [DEBUG] [Thread-189021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:24:08.842 [DEBUG] [Thread-189021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:24:08.860 [INFO] [Thread-189021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:24:08.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:24:09.700 [DEBUG] [Thread-189021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:24:09.701 [DEBUG] [Thread-189021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:24:09.701 [DEBUG] [Thread-189021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:24:09.742 [DEBUG] [Thread-189021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:24:09.742 [DEBUG] [Thread-189021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:24:09.746 [DEBUG] [Thread-189021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:24:09.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:24:09.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:24:09.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:24:09.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:24:09.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:24:09.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:24:09.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:24:09.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:24:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:24:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.433094 -999.00  +11.90  19.20     89  +10.30 1 3 1 3 1   888    0 1.76 12.20 ----- 19.9 19.2 268.6 25.5 15.8 -5.4 15.4 -4.7 14.6 -4.5 15.3 -4.3
2026-04-12T12:24:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:24:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:24:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.433094
2026-04-12T12:24:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:24:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:24:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:24:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:24:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:24:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:23:36', tmtdew=0.99795, humidity=93.5751, cloud=0.0, wind=22.5122, temperature=12.7039, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:23:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:24:09.773 [DEBUG] [Thread-189021] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:24:09.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:24:09.865 [DEBUG] [Thread-189024] [transport.py] [_log()] starting thread (client mode): 0xb39c72e0
2026-04-12T12:24:09.865 [DEBUG] [Thread-189024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:24:09.880 [DEBUG] [Thread-189024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:24:09.880 [INFO] [Thread-189024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] client lang: <none>
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] server lang: <none>
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] kex follows: False
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:24:09.888 [DEBUG] [Thread-189024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:24:09.889 [DEBUG] [Thread-189024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:24:09.889 [DEBUG] [Thread-189024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:24:09.889 [DEBUG] [Thread-189024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:24:09.889 [DEBUG] [Thread-189024] [transport.py] [_log()] Compression: none
2026-04-12T12:24:09.889 [DEBUG] [Thread-189024] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:24:09.947 [DEBUG] [Thread-189024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:24:09.947 [DEBUG] [Thread-189024] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:24:09.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:24:09.949 [DEBUG] [Thread-189024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:24:09.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:24:10.003 [DEBUG] [Thread-189024] [transport.py] [_log()] userauth is OK
2026-04-12T12:24:10.003 [DEBUG] [Thread-189024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:24:10.003 [DEBUG] [Thread-189024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:24:10.004 [DEBUG] [Thread-189024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:24:10.004 [DEBUG] [Thread-189024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:24:10.022 [INFO] [Thread-189024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:24:10.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:24:10.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:24:10.867 [DEBUG] [Thread-189024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:24:10.867 [DEBUG] [Thread-189024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:24:10.915 [DEBUG] [Thread-189024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:24:10.915 [DEBUG] [Thread-189024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:24:10.924 [DEBUG] [Thread-189024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:24:10.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:24:10.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:24:10.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:24:10.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:24:10.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:24:10.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:24:10.960 [DEBUG] [Thread-189024] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:24:13.519 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:24:13.520 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:24:17.430 [DEBUG] [Thread-189026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:24:32.484 [DEBUG] [Thread-189027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:24:33.666 [DEBUG] [Thread-189028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:24:40.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:24:40.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:24:40.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:24:42.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 24, 12), 0.54675, 96.3042, 0.0, 17.5043, 12.2183, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:24:42.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:24:12
2026-04-12T12:24:42.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:24:42.909 [DEBUG] [Thread-189029] [transport.py] [_log()] starting thread (client mode): 0xb0fb73a0
2026-04-12T12:24:42.909 [DEBUG] [Thread-189029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:24:42.931 [DEBUG] [Thread-189029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:24:42.931 [INFO] [Thread-189029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:24:42.935 [DEBUG] [Thread-189029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:24:42.935 [DEBUG] [Thread-189029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:24:42.935 [DEBUG] [Thread-189029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:24:42.935 [DEBUG] [Thread-189029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:42.935 [DEBUG] [Thread-189029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:42.935 [DEBUG] [Thread-189029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] client lang: <none>
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] server lang: <none>
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] kex follows: False
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:24:42.936 [DEBUG] [Thread-189029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:24:42.937 [DEBUG] [Thread-189029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:24:42.937 [DEBUG] [Thread-189029] [transport.py] [_log()] Compression: none
2026-04-12T12:24:42.937 [DEBUG] [Thread-189029] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:24:42.957 [DEBUG] [Thread-189029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:24:42.958 [DEBUG] [Thread-189029] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:24:42.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:24:42.959 [DEBUG] [Thread-189029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:24:42.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:24:42.961 [DEBUG] [Thread-189029] [transport.py] [_log()] userauth is OK
2026-04-12T12:24:42.961 [DEBUG] [Thread-189029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:24:42.961 [DEBUG] [Thread-189029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:24:42.961 [DEBUG] [Thread-189029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:24:42.961 [DEBUG] [Thread-189029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:24:42.997 [INFO] [Thread-189029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:24:42.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:24:43.768 [DEBUG] [Thread-189029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:24:43.768 [DEBUG] [Thread-189029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:24:43.768 [DEBUG] [Thread-189029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:24:43.809 [DEBUG] [Thread-189029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:24:43.809 [DEBUG] [Thread-189029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:24:43.813 [DEBUG] [Thread-189029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:24:43.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:24:43.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:24:43.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:24:43.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:24:43.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:24:43.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:24:43.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:24:43.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:24:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:24:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.433442 -999.00  +12.00  17.22     90  +10.40 1 3 1 3 1   888    0 1.83 13.53 ----- 18.4 17.2 270.8 18.8 15.8 -5.4 15.3 -4.6 14.7 -4.5 15.4 -4.7
2026-04-12T12:24:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:24:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:24:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.433442
2026-04-12T12:24:43.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:24:43.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:24:43.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:24:43.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:24:43.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:24:43.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:24:12', tmtdew=0.54675, humidity=96.3042, cloud=0.0, wind=17.5043, temperature=12.2183, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:24:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:24:43.840 [DEBUG] [Thread-189029] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:24:43.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:24:43.934 [DEBUG] [Thread-189032] [transport.py] [_log()] starting thread (client mode): 0xae517670
2026-04-12T12:24:43.934 [DEBUG] [Thread-189032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:24:43.954 [DEBUG] [Thread-189032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:24:43.954 [INFO] [Thread-189032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:24:43.961 [DEBUG] [Thread-189032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:24:43.961 [DEBUG] [Thread-189032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] client lang: <none>
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] server lang: <none>
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] kex follows: False
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] Compression: none
2026-04-12T12:24:43.962 [DEBUG] [Thread-189032] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:24:44.019 [DEBUG] [Thread-189032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:24:44.020 [DEBUG] [Thread-189032] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:24:44.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:24:44.021 [DEBUG] [Thread-189032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:24:44.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:24:44.075 [DEBUG] [Thread-189032] [transport.py] [_log()] userauth is OK
2026-04-12T12:24:44.075 [DEBUG] [Thread-189032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:24:44.075 [DEBUG] [Thread-189032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:24:44.076 [DEBUG] [Thread-189032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:24:44.076 [DEBUG] [Thread-189032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:24:44.094 [INFO] [Thread-189032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:24:44.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:24:44.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:24:44.910 [DEBUG] [Thread-189032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:24:44.911 [DEBUG] [Thread-189032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:24:44.959 [DEBUG] [Thread-189032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:24:44.959 [DEBUG] [Thread-189032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:24:44.968 [DEBUG] [Thread-189032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:24:44.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:24:44.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:24:44.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:24:44.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:24:44.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:24:44.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:24:45.007 [DEBUG] [Thread-189032] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:24:47.520 [DEBUG] [Thread-189034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:25:02.577 [DEBUG] [Thread-189035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:25:13.676 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:25:13.678 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:25:15.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:25:15.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:25:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:25:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 24, 48), 0.98299, 93.6746, 0.0, 19.4076, 12.8698, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:25:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:24:48
2026-04-12T12:25:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:25:16.972 [DEBUG] [Thread-189036] [transport.py] [_log()] starting thread (client mode): 0xb39c6bc0
2026-04-12T12:25:16.972 [DEBUG] [Thread-189036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:25:16.993 [DEBUG] [Thread-189036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:25:16.993 [INFO] [Thread-189036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:25:16.996 [DEBUG] [Thread-189036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] client lang: <none>
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] server lang: <none>
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] kex follows: False
2026-04-12T12:25:16.997 [DEBUG] [Thread-189036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:25:16.998 [DEBUG] [Thread-189036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:25:16.998 [DEBUG] [Thread-189036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:25:16.998 [DEBUG] [Thread-189036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:25:16.998 [DEBUG] [Thread-189036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:25:16.998 [DEBUG] [Thread-189036] [transport.py] [_log()] Compression: none
2026-04-12T12:25:16.998 [DEBUG] [Thread-189036] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:25:17.017 [DEBUG] [Thread-189036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:25:17.018 [DEBUG] [Thread-189036] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:25:17.018 [DEBUG] [Thread-189036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:25:17.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:25:17.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:25:17.020 [DEBUG] [Thread-189036] [transport.py] [_log()] userauth is OK
2026-04-12T12:25:17.020 [DEBUG] [Thread-189036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:25:17.021 [DEBUG] [Thread-189036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:25:17.021 [DEBUG] [Thread-189036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:25:17.021 [DEBUG] [Thread-189036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:25:17.045 [INFO] [Thread-189036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:25:17.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:25:17.615 [DEBUG] [Thread-189038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:25:30.811 [DEBUG] [Thread-189036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:25:30.811 [DEBUG] [Thread-189036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:25:30.811 [DEBUG] [Thread-189036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:25:30.852 [DEBUG] [Thread-189036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:25:30.852 [DEBUG] [Thread-189036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:25:30.855 [DEBUG] [Thread-189036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:25:30.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:25:30.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:25:30.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:25:30.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:25:30.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:25:30.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:25:30.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:25:30.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:25:30.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:25:30.967 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T12:25:30.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:24:48', tmtdew=0.98299, humidity=93.6746, cloud=0.0, wind=19.4076, temperature=12.8698, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:25:30.969 [DEBUG] [Thread-189036] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:25:31.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:25:31.063 [DEBUG] [Thread-189040] [transport.py] [_log()] starting thread (client mode): 0xa796b1f0
2026-04-12T12:25:31.063 [DEBUG] [Thread-189040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:25:31.077 [DEBUG] [Thread-189040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:25:31.078 [INFO] [Thread-189040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:25:31.085 [DEBUG] [Thread-189040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:25:31.085 [DEBUG] [Thread-189040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:25:31.085 [DEBUG] [Thread-189040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:25:31.085 [DEBUG] [Thread-189040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:25:31.085 [DEBUG] [Thread-189040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] client lang: <none>
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] server lang: <none>
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] kex follows: False
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] Compression: none
2026-04-12T12:25:31.086 [DEBUG] [Thread-189040] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:25:31.150 [DEBUG] [Thread-189040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:25:31.150 [DEBUG] [Thread-189040] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:25:31.151 [DEBUG] [Thread-189040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:25:31.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:25:31.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:25:31.207 [DEBUG] [Thread-189040] [transport.py] [_log()] userauth is OK
2026-04-12T12:25:31.208 [DEBUG] [Thread-189040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:25:31.208 [DEBUG] [Thread-189040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:25:31.208 [DEBUG] [Thread-189040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:25:31.208 [DEBUG] [Thread-189040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:25:31.226 [INFO] [Thread-189040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:25:31.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:25:31.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:25:32.064 [DEBUG] [Thread-189040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:25:32.064 [DEBUG] [Thread-189040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:25:32.112 [DEBUG] [Thread-189040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:25:32.112 [DEBUG] [Thread-189040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:25:32.121 [DEBUG] [Thread-189040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:25:32.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:25:32.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:25:32.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:25:32.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:25:32.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:25:32.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:25:32.158 [DEBUG] [Thread-189040] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:25:32.652 [DEBUG] [Thread-189042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:25:33.699 [DEBUG] [Thread-189043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:25:47.706 [DEBUG] [Thread-189044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:26:02.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:26:02.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:26:02.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
2026-04-12T12:26:02.745 [DEBUG] [Thread-189045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:26:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 25, 24), 0.552475, 96.271, 0.0, 20.309, 12.318, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:26:03.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:25:24
2026-04-12T12:26:03.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:26:04.060 [DEBUG] [Thread-189046] [transport.py] [_log()] starting thread (client mode): 0xb39c7310
2026-04-12T12:26:04.061 [DEBUG] [Thread-189046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:26:04.081 [DEBUG] [Thread-189046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:26:04.081 [INFO] [Thread-189046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] client lang: <none>
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] server lang: <none>
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] kex follows: False
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:26:04.084 [DEBUG] [Thread-189046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:26:04.085 [DEBUG] [Thread-189046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:26:04.085 [DEBUG] [Thread-189046] [transport.py] [_log()] Compression: none
2026-04-12T12:26:04.085 [DEBUG] [Thread-189046] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:26:04.092 [DEBUG] [Thread-189046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:26:04.093 [DEBUG] [Thread-189046] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:26:04.093 [DEBUG] [Thread-189046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:26:04.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:26:04.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:26:04.094 [DEBUG] [Thread-189046] [transport.py] [_log()] userauth is OK
2026-04-12T12:26:04.095 [DEBUG] [Thread-189046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:26:04.095 [DEBUG] [Thread-189046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:26:04.095 [DEBUG] [Thread-189046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:26:04.095 [DEBUG] [Thread-189046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:26:04.113 [INFO] [Thread-189046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:26:04.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:26:04.697 [DEBUG] [Thread-189046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:26:04.698 [DEBUG] [Thread-189046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:26:04.698 [DEBUG] [Thread-189046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:26:04.739 [DEBUG] [Thread-189046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:26:04.739 [DEBUG] [Thread-189046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:26:04.743 [DEBUG] [Thread-189046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:26:04.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:26:04.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:26:04.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:26:04.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:26:04.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:26:04.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:26:04.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:26:04.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:26:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:26:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.434483 -999.00  +12.30  12.84     90  +10.70 1 3 1 3 1   888    0 1.85 13.86 ----- 7.9 12.8 266.8 23.3 16.0 -5.7 15.5 -4.5 15.0 -4.0 15.6 -4.3
2026-04-12T12:26:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:26:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:26:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.434483
2026-04-12T12:26:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:26:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:26:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:26:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:26:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:26:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:25:24', tmtdew=0.552475, humidity=96.271, cloud=0.0, wind=20.309, temperature=12.318, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:25:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:26:04.770 [DEBUG] [Thread-189046] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:26:04.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:26:04.863 [DEBUG] [Thread-189049] [transport.py] [_log()] starting thread (client mode): 0xa796a050
2026-04-12T12:26:04.863 [DEBUG] [Thread-189049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:26:04.878 [DEBUG] [Thread-189049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:26:04.879 [INFO] [Thread-189049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:26:04.890 [DEBUG] [Thread-189049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] client lang: <none>
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] server lang: <none>
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] kex follows: False
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] Compression: none
2026-04-12T12:26:04.891 [DEBUG] [Thread-189049] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:26:04.952 [DEBUG] [Thread-189049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:26:04.953 [DEBUG] [Thread-189049] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:26:04.954 [DEBUG] [Thread-189049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:26:04.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:26:04.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:26:05.011 [DEBUG] [Thread-189049] [transport.py] [_log()] userauth is OK
2026-04-12T12:26:05.011 [DEBUG] [Thread-189049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:26:05.012 [DEBUG] [Thread-189049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:26:05.012 [DEBUG] [Thread-189049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:26:05.012 [DEBUG] [Thread-189049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:26:05.030 [INFO] [Thread-189049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:26:05.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:26:05.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:26:05.849 [DEBUG] [Thread-189049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:26:05.849 [DEBUG] [Thread-189049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:26:05.897 [DEBUG] [Thread-189049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:26:05.897 [DEBUG] [Thread-189049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:26:05.906 [DEBUG] [Thread-189049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:26:05.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:26:05.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:26:05.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:26:05.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:26:05.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:26:05.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:26:05.943 [DEBUG] [Thread-189049] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:26:13.831 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:26:13.832 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:26:17.782 [DEBUG] [Thread-189051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:26:32.838 [DEBUG] [Thread-189052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:26:33.742 [DEBUG] [Thread-189053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:26:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:26:35.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:26:35.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:26:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 25, 24), 0.552475, 96.271, 0.0, 22.109, 12.218, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:26:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:25:24
2026-04-12T12:26:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:26:37.974 [DEBUG] [Thread-189054] [transport.py] [_log()] starting thread (client mode): 0xb39c6ef0
2026-04-12T12:26:37.974 [DEBUG] [Thread-189054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:26:37.993 [DEBUG] [Thread-189054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:26:37.994 [INFO] [Thread-189054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:26:37.995 [DEBUG] [Thread-189054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:26:37.995 [DEBUG] [Thread-189054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:26:37.995 [DEBUG] [Thread-189054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:26:37.995 [DEBUG] [Thread-189054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:37.995 [DEBUG] [Thread-189054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] client lang: <none>
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] server lang: <none>
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] kex follows: False
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] Compression: none
2026-04-12T12:26:37.996 [DEBUG] [Thread-189054] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:26:38.009 [DEBUG] [Thread-189054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:26:38.009 [DEBUG] [Thread-189054] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:26:38.010 [DEBUG] [Thread-189054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:26:38.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:26:38.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:26:38.012 [DEBUG] [Thread-189054] [transport.py] [_log()] userauth is OK
2026-04-12T12:26:38.012 [DEBUG] [Thread-189054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:26:38.013 [DEBUG] [Thread-189054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:26:38.013 [DEBUG] [Thread-189054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:26:38.013 [DEBUG] [Thread-189054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:26:38.036 [INFO] [Thread-189054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:26:38.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:26:38.613 [DEBUG] [Thread-189054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:26:38.613 [DEBUG] [Thread-189054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:26:38.613 [DEBUG] [Thread-189054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:26:38.654 [DEBUG] [Thread-189054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:26:38.654 [DEBUG] [Thread-189054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:26:38.657 [DEBUG] [Thread-189054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:26:38.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:26:38.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:26:38.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:26:38.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:26:38.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:26:38.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.434830 -999.00  +12.30  18.06     90  +10.70 1 3 1 3 1   888    0 1.85 14.22 ----- 20.3 18.1 276.2 24.5 16.0 -5.5 15.5 -4.9 14.9 -4.5 15.5 -4.7
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.434830
2026-04-12T12:26:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:26:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:26:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:26:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:26:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:26:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:25:24', tmtdew=0.552475, humidity=96.271, cloud=0.0, wind=22.109, temperature=12.218, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:26:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:26:38.674 [DEBUG] [Thread-189054] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:26:38.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:26:38.757 [DEBUG] [Thread-189057] [transport.py] [_log()] starting thread (client mode): 0xae517670
2026-04-12T12:26:38.757 [DEBUG] [Thread-189057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:26:38.771 [DEBUG] [Thread-189057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:26:38.771 [INFO] [Thread-189057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:26:38.779 [DEBUG] [Thread-189057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:26:38.779 [DEBUG] [Thread-189057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:26:38.779 [DEBUG] [Thread-189057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:26:38.779 [DEBUG] [Thread-189057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:38.779 [DEBUG] [Thread-189057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:26:38.779 [DEBUG] [Thread-189057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] client lang: <none>
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] server lang: <none>
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] kex follows: False
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:26:38.780 [DEBUG] [Thread-189057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:26:38.781 [DEBUG] [Thread-189057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:26:38.781 [DEBUG] [Thread-189057] [transport.py] [_log()] Compression: none
2026-04-12T12:26:38.781 [DEBUG] [Thread-189057] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:26:38.839 [DEBUG] [Thread-189057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:26:38.839 [DEBUG] [Thread-189057] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:26:38.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:26:38.840 [DEBUG] [Thread-189057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:26:38.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:26:38.896 [DEBUG] [Thread-189057] [transport.py] [_log()] userauth is OK
2026-04-12T12:26:38.896 [DEBUG] [Thread-189057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:26:38.896 [DEBUG] [Thread-189057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:26:38.896 [DEBUG] [Thread-189057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:26:38.896 [DEBUG] [Thread-189057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:26:38.913 [INFO] [Thread-189057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:26:38.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:26:38.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:26:39.705 [DEBUG] [Thread-189057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:26:39.705 [DEBUG] [Thread-189057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:26:39.753 [DEBUG] [Thread-189057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:26:39.753 [DEBUG] [Thread-189057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:26:39.762 [DEBUG] [Thread-189057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:26:39.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:26:39.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:26:39.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:26:39.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:26:39.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:26:39.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:26:39.796 [DEBUG] [Thread-189057] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:26:47.873 [DEBUG] [Thread-189059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:27:02.921 [DEBUG] [Thread-189060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:27:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:27:09.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:27:09.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:27:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 26, 35), 1.11111, 92.8781, 0.0, 17.2555, 12.7035, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:27:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:26:35
2026-04-12T12:27:11.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:27:11.646 [DEBUG] [Thread-189061] [transport.py] [_log()] starting thread (client mode): 0xa7968a30
2026-04-12T12:27:11.646 [DEBUG] [Thread-189061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:27:11.669 [DEBUG] [Thread-189061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:27:11.669 [INFO] [Thread-189061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:27:11.672 [DEBUG] [Thread-189061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:27:11.672 [DEBUG] [Thread-189061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:27:11.672 [DEBUG] [Thread-189061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:27:11.672 [DEBUG] [Thread-189061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] client lang: <none>
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] server lang: <none>
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] kex follows: False
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] Compression: none
2026-04-12T12:27:11.673 [DEBUG] [Thread-189061] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:27:11.692 [DEBUG] [Thread-189061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:27:11.692 [DEBUG] [Thread-189061] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:27:11.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:27:11.693 [DEBUG] [Thread-189061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:27:11.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:27:11.695 [DEBUG] [Thread-189061] [transport.py] [_log()] userauth is OK
2026-04-12T12:27:11.696 [DEBUG] [Thread-189061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:27:11.696 [DEBUG] [Thread-189061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:27:11.696 [DEBUG] [Thread-189061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:27:11.696 [DEBUG] [Thread-189061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:27:11.720 [INFO] [Thread-189061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:27:11.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:27:12.306 [DEBUG] [Thread-189061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:27:12.307 [DEBUG] [Thread-189061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:27:12.307 [DEBUG] [Thread-189061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:27:12.347 [DEBUG] [Thread-189061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:27:12.347 [DEBUG] [Thread-189061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:27:12.351 [DEBUG] [Thread-189061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:27:12.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:27:12.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:27:12.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:27:12.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:27:12.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:27:12.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:27:12.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:27:12.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:27:12.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:27:12.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.435178 -999.00  +12.40  12.62     89  +10.70 1 3 1 3 1   888    0 1.86 14.32 ----- 10.8 12.6 272.6 21.2 15.9 -6.0 15.5 -4.6 14.9 -4.2 15.6 -4.8
2026-04-12T12:27:12.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:27:12.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:27:12.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.435178
2026-04-12T12:27:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:27:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:27:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:27:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:27:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:27:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:26:35', tmtdew=1.11111, humidity=92.8781, cloud=0.0, wind=17.2555, temperature=12.7035, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:26:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:27:12.377 [DEBUG] [Thread-189061] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:27:12.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:27:12.470 [DEBUG] [Thread-189064] [transport.py] [_log()] starting thread (client mode): 0xe6cd73d0
2026-04-12T12:27:12.470 [DEBUG] [Thread-189064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:27:12.484 [DEBUG] [Thread-189064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:27:12.484 [INFO] [Thread-189064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:27:12.492 [DEBUG] [Thread-189064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:27:12.492 [DEBUG] [Thread-189064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] client lang: <none>
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] server lang: <none>
2026-04-12T12:27:12.493 [DEBUG] [Thread-189064] [transport.py] [_log()] kex follows: False
2026-04-12T12:27:12.494 [DEBUG] [Thread-189064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:27:12.494 [DEBUG] [Thread-189064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:27:12.494 [DEBUG] [Thread-189064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:27:12.494 [DEBUG] [Thread-189064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:27:12.494 [DEBUG] [Thread-189064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:27:12.494 [DEBUG] [Thread-189064] [transport.py] [_log()] Compression: none
2026-04-12T12:27:12.495 [DEBUG] [Thread-189064] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:27:12.551 [DEBUG] [Thread-189064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:27:12.552 [DEBUG] [Thread-189064] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:27:12.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:27:12.553 [DEBUG] [Thread-189064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:27:12.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:27:12.607 [DEBUG] [Thread-189064] [transport.py] [_log()] userauth is OK
2026-04-12T12:27:12.608 [DEBUG] [Thread-189064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:27:12.608 [DEBUG] [Thread-189064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:27:12.608 [DEBUG] [Thread-189064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:27:12.608 [DEBUG] [Thread-189064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:27:12.632 [INFO] [Thread-189064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:27:12.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:27:12.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:27:13.440 [DEBUG] [Thread-189064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:27:13.440 [DEBUG] [Thread-189064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:27:13.489 [DEBUG] [Thread-189064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:27:13.489 [DEBUG] [Thread-189064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:27:13.499 [DEBUG] [Thread-189064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:27:13.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:27:13.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:27:13.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:27:13.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:27:13.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:27:13.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:27:13.534 [DEBUG] [Thread-189064] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:27:13.985 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:27:13.987 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:27:17.958 [DEBUG] [Thread-189066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:27:33.007 [DEBUG] [Thread-189067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:27:33.785 [DEBUG] [Thread-189068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:27:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:27:43.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:27:43.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:27:44.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 27, 11), 0.52688, 96.1214, 0.0, 19.48, 12.2344, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:27:44.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:27:11
2026-04-12T12:27:45.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:27:45.431 [DEBUG] [Thread-189069] [transport.py] [_log()] starting thread (client mode): 0xa796a050
2026-04-12T12:27:45.432 [DEBUG] [Thread-189069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:27:45.448 [DEBUG] [Thread-189069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:27:45.448 [INFO] [Thread-189069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] client lang: <none>
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] server lang: <none>
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] kex follows: False
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] Compression: none
2026-04-12T12:27:45.451 [DEBUG] [Thread-189069] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:27:45.467 [DEBUG] [Thread-189069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:27:45.467 [DEBUG] [Thread-189069] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:27:45.468 [DEBUG] [Thread-189069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:27:45.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:27:45.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:27:45.469 [DEBUG] [Thread-189069] [transport.py] [_log()] userauth is OK
2026-04-12T12:27:45.470 [DEBUG] [Thread-189069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:27:45.470 [DEBUG] [Thread-189069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:27:45.470 [DEBUG] [Thread-189069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:27:45.470 [DEBUG] [Thread-189069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:27:45.488 [INFO] [Thread-189069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:27:45.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:27:46.074 [DEBUG] [Thread-189069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:27:46.075 [DEBUG] [Thread-189069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:27:46.075 [DEBUG] [Thread-189069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:27:46.116 [DEBUG] [Thread-189069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:27:46.116 [DEBUG] [Thread-189069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:27:46.119 [DEBUG] [Thread-189069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:27:46.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:27:46.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:27:46.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:27:46.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:27:46.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:27:46.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:27:46.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:27:46.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:27:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:27:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.435872 -999.00  +12.40  14.45     89  +10.70 1 3 1 3 1   888    0 1.93 15.97 ----- 15.0 14.4 267.8 17.2 16.1 -5.3 15.6 -4.3 15.1 -3.8 15.6 -3.8
2026-04-12T12:27:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:27:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:27:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.435872
2026-04-12T12:27:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:27:46.140 [DEBUG] [Thread-189069] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:27:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:27:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:27:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:27:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:27:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:27:11', tmtdew=0.52688, humidity=96.1214, cloud=0.0, wind=19.48, temperature=12.2344, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:27:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:27:46.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:27:46.235 [DEBUG] [Thread-189072] [transport.py] [_log()] starting thread (client mode): 0xb0f56e60
2026-04-12T12:27:46.235 [DEBUG] [Thread-189072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:27:46.250 [DEBUG] [Thread-189072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:27:46.250 [INFO] [Thread-189072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:27:46.257 [DEBUG] [Thread-189072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:27:46.257 [DEBUG] [Thread-189072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] client lang: <none>
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] server lang: <none>
2026-04-12T12:27:46.258 [DEBUG] [Thread-189072] [transport.py] [_log()] kex follows: False
2026-04-12T12:27:46.259 [DEBUG] [Thread-189072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:27:46.259 [DEBUG] [Thread-189072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:27:46.259 [DEBUG] [Thread-189072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:27:46.259 [DEBUG] [Thread-189072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:27:46.259 [DEBUG] [Thread-189072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:27:46.259 [DEBUG] [Thread-189072] [transport.py] [_log()] Compression: none
2026-04-12T12:27:46.259 [DEBUG] [Thread-189072] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:27:46.322 [DEBUG] [Thread-189072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:27:46.323 [DEBUG] [Thread-189072] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:27:46.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:27:46.324 [DEBUG] [Thread-189072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:27:46.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:27:46.379 [DEBUG] [Thread-189072] [transport.py] [_log()] userauth is OK
2026-04-12T12:27:46.380 [DEBUG] [Thread-189072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:27:46.380 [DEBUG] [Thread-189072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:27:46.380 [DEBUG] [Thread-189072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:27:46.380 [DEBUG] [Thread-189072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:27:46.398 [INFO] [Thread-189072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:27:46.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:27:46.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:27:47.232 [DEBUG] [Thread-189072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:27:47.232 [DEBUG] [Thread-189072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:27:47.280 [DEBUG] [Thread-189072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:27:47.280 [DEBUG] [Thread-189072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:27:47.289 [DEBUG] [Thread-189072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:27:47.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:27:47.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:27:47.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:27:47.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:27:47.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:27:47.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:27:47.323 [DEBUG] [Thread-189072] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:27:48.044 [DEBUG] [Thread-189074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:03.096 [DEBUG] [Thread-189075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:14.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:14.130 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:28:17.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:28:17.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:28:18.136 [DEBUG] [Thread-189076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 27, 46), 1.14974, 92.6462, 0.0, 24.9466, 12.8031, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:28:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:27:46
2026-04-12T12:28:19.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:28:19.237 [DEBUG] [Thread-189077] [transport.py] [_log()] starting thread (client mode): 0xb0f55180
2026-04-12T12:28:19.237 [DEBUG] [Thread-189077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:28:19.256 [DEBUG] [Thread-189077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:28:19.256 [INFO] [Thread-189077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:28:19.257 [DEBUG] [Thread-189077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:28:19.257 [DEBUG] [Thread-189077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] client lang: <none>
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] server lang: <none>
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] kex follows: False
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] Compression: none
2026-04-12T12:28:19.258 [DEBUG] [Thread-189077] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:28:19.267 [DEBUG] [Thread-189077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:28:19.267 [DEBUG] [Thread-189077] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:28:19.267 [DEBUG] [Thread-189077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:28:19.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:28:19.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:28:19.269 [DEBUG] [Thread-189077] [transport.py] [_log()] userauth is OK
2026-04-12T12:28:19.269 [DEBUG] [Thread-189077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:28:19.269 [DEBUG] [Thread-189077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:28:19.269 [DEBUG] [Thread-189077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:28:19.269 [DEBUG] [Thread-189077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:28:19.287 [INFO] [Thread-189077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:28:19.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:28:19.856 [DEBUG] [Thread-189077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:28:19.856 [DEBUG] [Thread-189077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:28:19.856 [DEBUG] [Thread-189077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:28:19.897 [DEBUG] [Thread-189077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:28:19.897 [DEBUG] [Thread-189077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:28:19.901 [DEBUG] [Thread-189077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:28:19.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:28:19.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:28:19.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:28:19.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:28:19.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:28:19.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:28:19.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:28:19.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:28:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:28:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.436219 -999.00  +12.30  17.08     89  +10.60 1 3 1 3 1   888    0 1.97 17.39 ----- 17.5 17.1 274.9 22.5 16.1 -5.7 15.6 -4.8 15.0 -4.7 15.6 -4.5
2026-04-12T12:28:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:28:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:28:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.436219
2026-04-12T12:28:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:28:19.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:28:19.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:28:19.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:28:19.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:28:19.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:27:46', tmtdew=1.14974, humidity=92.6462, cloud=0.0, wind=24.9466, temperature=12.8031, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:28:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:28:19.932 [DEBUG] [Thread-189077] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:28:20.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:28:20.024 [DEBUG] [Thread-189080] [transport.py] [_log()] starting thread (client mode): 0xae514d90
2026-04-12T12:28:20.025 [DEBUG] [Thread-189080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:28:20.039 [DEBUG] [Thread-189080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:28:20.039 [INFO] [Thread-189080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:28:20.046 [DEBUG] [Thread-189080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] client lang: <none>
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] server lang: <none>
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] kex follows: False
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:28:20.047 [DEBUG] [Thread-189080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:28:20.048 [DEBUG] [Thread-189080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:28:20.048 [DEBUG] [Thread-189080] [transport.py] [_log()] Compression: none
2026-04-12T12:28:20.048 [DEBUG] [Thread-189080] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:28:20.107 [DEBUG] [Thread-189080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:28:20.108 [DEBUG] [Thread-189080] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:28:20.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:28:20.109 [DEBUG] [Thread-189080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:28:20.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:28:20.163 [DEBUG] [Thread-189080] [transport.py] [_log()] userauth is OK
2026-04-12T12:28:20.163 [DEBUG] [Thread-189080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:28:20.164 [DEBUG] [Thread-189080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:28:20.164 [DEBUG] [Thread-189080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:28:20.164 [DEBUG] [Thread-189080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:28:20.182 [INFO] [Thread-189080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:28:20.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:28:20.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:28:20.991 [DEBUG] [Thread-189080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:28:20.991 [DEBUG] [Thread-189080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:28:21.040 [DEBUG] [Thread-189080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:28:21.040 [DEBUG] [Thread-189080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:28:21.050 [DEBUG] [Thread-189080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:28:21.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:28: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')
2026-04-12T12:28:21.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:28:21.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:28:21.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:28:21.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:28:21.087 [DEBUG] [Thread-189080] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:28:33.173 [DEBUG] [Thread-189082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:33.854 [DEBUG] [Thread-189083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:48.227 [DEBUG] [Thread-189084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:28:51.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:28:51.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:28:51.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:28:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 28, 22), 0.64329, 95.707, 0.0, 22.0561, 12.0852, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:28:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:28:22
2026-04-12T12:28:52.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:28:52.904 [DEBUG] [Thread-189085] [transport.py] [_log()] starting thread (client mode): 0xb39c72e0
2026-04-12T12:28:52.905 [DEBUG] [Thread-189085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:28:52.917 [DEBUG] [Thread-189085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:28:52.917 [INFO] [Thread-189085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:28:52.920 [DEBUG] [Thread-189085] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:28:52.920 [DEBUG] [Thread-189085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:28:52.920 [DEBUG] [Thread-189085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] client lang: <none>
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] server lang: <none>
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] kex follows: False
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] Compression: none
2026-04-12T12:28:52.921 [DEBUG] [Thread-189085] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:28:52.938 [DEBUG] [Thread-189085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:28:52.939 [DEBUG] [Thread-189085] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:28:52.939 [DEBUG] [Thread-189085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:28:52.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:28:52.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:28:52.941 [DEBUG] [Thread-189085] [transport.py] [_log()] userauth is OK
2026-04-12T12:28:52.942 [DEBUG] [Thread-189085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:28:52.942 [DEBUG] [Thread-189085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:28:52.942 [DEBUG] [Thread-189085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:28:52.942 [DEBUG] [Thread-189085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:28:52.956 [INFO] [Thread-189085] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:28:52.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:28:53.606 [DEBUG] [Thread-189085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:28:53.607 [DEBUG] [Thread-189085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:28:53.616 [DEBUG] [Thread-189085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:28:53.648 [DEBUG] [Thread-189085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:28:53.648 [DEBUG] [Thread-189085] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:28:53.652 [DEBUG] [Thread-189085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:28:53.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:28:53.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:28:53.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:28:53.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:28:53.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:28:53.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:28:53.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:28:53.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:28:53.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:28:53.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.436566 -999.00  +12.30  18.05     89  +10.60 1 3 1 3 1   888    0 2.00 17.94 ----- 19.6 18.1 275.2 25.3 16.1 -5.4 15.6 -5.0 15.0 -5.2 15.7 -4.7
2026-04-12T12:28:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:28:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:28:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.436566
2026-04-12T12:28:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:28:53.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:28:53.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:28:53.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:28:53.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:28:53.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:28:22', tmtdew=0.64329, humidity=95.707, cloud=0.0, wind=22.0561, temperature=12.0852, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:28:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:28:53.682 [DEBUG] [Thread-189085] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:28:53.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:28:53.774 [DEBUG] [Thread-189088] [transport.py] [_log()] starting thread (client mode): 0xae514100
2026-04-12T12:28:53.774 [DEBUG] [Thread-189088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:28:53.789 [DEBUG] [Thread-189088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:28:53.789 [INFO] [Thread-189088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:28:53.797 [DEBUG] [Thread-189088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:28:53.797 [DEBUG] [Thread-189088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] client lang: <none>
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] server lang: <none>
2026-04-12T12:28:53.798 [DEBUG] [Thread-189088] [transport.py] [_log()] kex follows: False
2026-04-12T12:28:53.799 [DEBUG] [Thread-189088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:28:53.799 [DEBUG] [Thread-189088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:28:53.799 [DEBUG] [Thread-189088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:28:53.799 [DEBUG] [Thread-189088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:28:53.799 [DEBUG] [Thread-189088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:28:53.799 [DEBUG] [Thread-189088] [transport.py] [_log()] Compression: none
2026-04-12T12:28:53.799 [DEBUG] [Thread-189088] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:28:53.855 [DEBUG] [Thread-189088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:28:53.856 [DEBUG] [Thread-189088] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:28:53.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:28:53.857 [DEBUG] [Thread-189088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:28:53.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:28:53.912 [DEBUG] [Thread-189088] [transport.py] [_log()] userauth is OK
2026-04-12T12:28:53.912 [DEBUG] [Thread-189088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:28:53.912 [DEBUG] [Thread-189088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:28:53.912 [DEBUG] [Thread-189088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:28:53.912 [DEBUG] [Thread-189088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:28:53.931 [INFO] [Thread-189088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:28:53.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:28:53.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:28:54.757 [DEBUG] [Thread-189088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:28:54.758 [DEBUG] [Thread-189088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:28:54.806 [DEBUG] [Thread-189088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:28:54.806 [DEBUG] [Thread-189088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:28:54.816 [DEBUG] [Thread-189088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:28:54.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:28:54.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:28:54.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:28:54.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:28:54.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:28:54.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:28:54.853 [DEBUG] [Thread-189088] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:29:03.261 [DEBUG] [Thread-189090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:29:14.269 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:29:14.271 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:29:18.324 [DEBUG] [Thread-189091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:29:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:29:24.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:29:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:29:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 28, 58), 0.646275, 96.1905, 0.0, 20.2914, 12.2184, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:29:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:28:58
2026-04-12T12:29:26.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:29:26.640 [DEBUG] [Thread-189092] [transport.py] [_log()] starting thread (client mode): 0xb0fcf070
2026-04-12T12:29:26.640 [DEBUG] [Thread-189092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:29:26.655 [DEBUG] [Thread-189092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:29:26.655 [INFO] [Thread-189092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:29:26.658 [DEBUG] [Thread-189092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:29:26.658 [DEBUG] [Thread-189092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:29:26.658 [DEBUG] [Thread-189092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:29:26.658 [DEBUG] [Thread-189092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] client lang: <none>
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] server lang: <none>
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] kex follows: False
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] Compression: none
2026-04-12T12:29:26.659 [DEBUG] [Thread-189092] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:29:26.678 [DEBUG] [Thread-189092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:29:26.679 [DEBUG] [Thread-189092] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:29:26.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:29:26.680 [DEBUG] [Thread-189092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:29:26.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:29:26.681 [DEBUG] [Thread-189092] [transport.py] [_log()] userauth is OK
2026-04-12T12:29:26.682 [DEBUG] [Thread-189092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:29:26.682 [DEBUG] [Thread-189092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:29:26.682 [DEBUG] [Thread-189092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:29:26.682 [DEBUG] [Thread-189092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:29:26.707 [INFO] [Thread-189092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:29:26.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:29:27.333 [DEBUG] [Thread-189092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:29:27.333 [DEBUG] [Thread-189092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:29:27.334 [DEBUG] [Thread-189092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:29:27.374 [DEBUG] [Thread-189092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:29:27.374 [DEBUG] [Thread-189092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:29:27.376 [DEBUG] [Thread-189092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:29:27.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:29:27.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:29:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:29:27.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:29:27.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:29:27.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:29:27.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:29:27.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:29:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:29:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.436914 -999.00  +12.20  18.03     89  +10.50 1 3 1 3 1   888    0 2.02 19.51 ----- 17.2 18.0 282.2 21.2 16.0 -5.5 15.6 -5.4 15.0 -5.0 15.7 -4.8
2026-04-12T12:29:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:29:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:29:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.436914
2026-04-12T12:29:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:29:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:29:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:29:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:29:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:29:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:28:58', tmtdew=0.646275, humidity=96.1905, cloud=0.0, wind=20.2914, temperature=12.2184, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:29:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:29:27.401 [DEBUG] [Thread-189092] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:29:27.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:29:27.497 [DEBUG] [Thread-189095] [transport.py] [_log()] starting thread (client mode): 0xb39c6b00
2026-04-12T12:29:27.497 [DEBUG] [Thread-189095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:29:27.511 [DEBUG] [Thread-189095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:29:27.511 [INFO] [Thread-189095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:29:27.519 [DEBUG] [Thread-189095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:29:27.519 [DEBUG] [Thread-189095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:29:27.519 [DEBUG] [Thread-189095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:29:27.519 [DEBUG] [Thread-189095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:29:27.519 [DEBUG] [Thread-189095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:29:27.519 [DEBUG] [Thread-189095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:29:27.519 [DEBUG] [Thread-189095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] client lang: <none>
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] server lang: <none>
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] kex follows: False
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:29:27.520 [DEBUG] [Thread-189095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:29:27.521 [DEBUG] [Thread-189095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:29:27.521 [DEBUG] [Thread-189095] [transport.py] [_log()] Compression: none
2026-04-12T12:29:27.521 [DEBUG] [Thread-189095] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:29:27.575 [DEBUG] [Thread-189095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:29:27.576 [DEBUG] [Thread-189095] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:29:27.576 [DEBUG] [Thread-189095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:29:27.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:29:27.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:29:27.631 [DEBUG] [Thread-189095] [transport.py] [_log()] userauth is OK
2026-04-12T12:29:27.631 [DEBUG] [Thread-189095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:29:27.631 [DEBUG] [Thread-189095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:29:27.631 [DEBUG] [Thread-189095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:29:27.632 [DEBUG] [Thread-189095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:29:27.651 [INFO] [Thread-189095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:29:27.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:29:27.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:29:28.453 [DEBUG] [Thread-189095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:29:28.454 [DEBUG] [Thread-189095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:29:28.501 [DEBUG] [Thread-189095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:29:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:29:28.510 [DEBUG] [Thread-189095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:29:28.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:29:28.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:29:28.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:29:28.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:29:28.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:29:28.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:29:28.544 [DEBUG] [Thread-189095] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:29:33.364 [DEBUG] [Thread-189097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:29:33.915 [DEBUG] [Thread-189098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:29:48.424 [DEBUG] [Thread-189099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:29:58.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:29:58.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:29:58.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:29:59.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 29, 33), 1.18114, 92.4474, 0.0, 17.3261, 12.6706, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:29:59.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:29:33
2026-04-12T12:30:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:30:00.418 [DEBUG] [Thread-189100] [transport.py] [_log()] starting thread (client mode): 0xb0fcc4c0
2026-04-12T12:30:00.418 [DEBUG] [Thread-189100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:30:00.438 [DEBUG] [Thread-189100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:30:00.438 [INFO] [Thread-189100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] client lang: <none>
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] server lang: <none>
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] kex follows: False
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] Compression: none
2026-04-12T12:30:00.442 [DEBUG] [Thread-189100] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:30:00.457 [DEBUG] [Thread-189100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:30:00.457 [DEBUG] [Thread-189100] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:30:00.457 [DEBUG] [Thread-189100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:30:00.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:30:00.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:30:00.458 [DEBUG] [Thread-189100] [transport.py] [_log()] userauth is OK
2026-04-12T12:30:00.458 [DEBUG] [Thread-189100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:30:00.458 [DEBUG] [Thread-189100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:30:00.458 [DEBUG] [Thread-189100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:30:00.458 [DEBUG] [Thread-189100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:30:00.467 [INFO] [Thread-189100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:30:00.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:30:01.081 [DEBUG] [Thread-189100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:30:01.081 [DEBUG] [Thread-189100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:30:01.081 [DEBUG] [Thread-189100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:30:01.122 [DEBUG] [Thread-189100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:30:01.122 [DEBUG] [Thread-189100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:30:01.124 [DEBUG] [Thread-189100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:30:01.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:30:01.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:30:01.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:30:01.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:30:01.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:30:01.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:30:01.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:30:01.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:30:01.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:30:01.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.437261 -999.00  +12.30  13.33     89  +10.70 1 3 1 3 1   888    0 2.09 19.76 ----- 16.6 13.3 271.0 20.7 16.1 -5.9 15.7 -4.9 15.1 -4.2 15.7 -4.7
2026-04-12T12:30:01.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:30:01.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:30:01.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.437261
2026-04-12T12:30:01.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:30:01.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:30:01.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:30:01.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:30:01.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:30:01.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:29:33', tmtdew=1.18114, humidity=92.4474, cloud=0.0, wind=17.3261, temperature=12.6706, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:29:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:30:01.149 [DEBUG] [Thread-189100] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:30:01.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:30:01.258 [DEBUG] [Thread-189103] [transport.py] [_log()] starting thread (client mode): 0xb0fcece0
2026-04-12T12:30:01.258 [DEBUG] [Thread-189103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:30:01.273 [DEBUG] [Thread-189103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:30:01.273 [INFO] [Thread-189103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] client lang: <none>
2026-04-12T12:30:01.281 [DEBUG] [Thread-189103] [transport.py] [_log()] server lang: <none>
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] kex follows: False
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] Compression: none
2026-04-12T12:30:01.282 [DEBUG] [Thread-189103] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:30:01.340 [DEBUG] [Thread-189103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:30:01.341 [DEBUG] [Thread-189103] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:30:01.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:30:01.342 [DEBUG] [Thread-189103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:30:01.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:30:01.400 [DEBUG] [Thread-189103] [transport.py] [_log()] userauth is OK
2026-04-12T12:30:01.400 [DEBUG] [Thread-189103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:30:01.400 [DEBUG] [Thread-189103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:30:01.400 [DEBUG] [Thread-189103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:30:01.400 [DEBUG] [Thread-189103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:30:01.420 [INFO] [Thread-189103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:30:01.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:30:01.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:30:02.251 [DEBUG] [Thread-189103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:30:02.251 [DEBUG] [Thread-189103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:30:02.298 [DEBUG] [Thread-189103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:30:02.298 [DEBUG] [Thread-189103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:30:02.307 [DEBUG] [Thread-189103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:30:02.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:30:02.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:30:02.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:30:02.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:30:02.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:30:02.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:30:02.339 [DEBUG] [Thread-189103] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:30:03.462 [DEBUG] [Thread-189105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:30:14.413 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:30:14.414 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:30:18.525 [DEBUG] [Thread-189106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:30:32.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:30:32.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:30:32.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:30:33.563 [DEBUG] [Thread-189107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:30:33.948 [DEBUG] [Thread-189108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:30:34.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 30, 8), 0.617325, 95.8726, 0.0, 17.7336, 12.3677, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:30:34.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:30:08
2026-04-12T12:30:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:30:34.678 [DEBUG] [Thread-189109] [transport.py] [_log()] starting thread (client mode): 0xb0fccfd0
2026-04-12T12:30:34.678 [DEBUG] [Thread-189109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:30:34.689 [DEBUG] [Thread-189109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:30:34.689 [INFO] [Thread-189109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] client lang: <none>
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] server lang: <none>
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] kex follows: False
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] Compression: none
2026-04-12T12:30:34.692 [DEBUG] [Thread-189109] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:30:34.711 [DEBUG] [Thread-189109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:30:34.711 [DEBUG] [Thread-189109] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:30:34.711 [DEBUG] [Thread-189109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:30:34.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:30:34.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:30:34.713 [DEBUG] [Thread-189109] [transport.py] [_log()] userauth is OK
2026-04-12T12:30:34.713 [DEBUG] [Thread-189109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:30:34.714 [DEBUG] [Thread-189109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:30:34.714 [DEBUG] [Thread-189109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:30:34.714 [DEBUG] [Thread-189109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:30:34.738 [INFO] [Thread-189109] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:30:34.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:30:37.395 [DEBUG] [Thread-189109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:30:37.395 [DEBUG] [Thread-189109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:30:37.396 [DEBUG] [Thread-189109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:30:37.436 [DEBUG] [Thread-189109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:30:37.436 [DEBUG] [Thread-189109] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:30:37.440 [DEBUG] [Thread-189109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:30:37.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:30:37.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:30:37.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:30:37.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:30:37.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:30:37.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:30:37.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:30:37.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:30:37.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:30:37.642 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T12:30:37.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:30:08', tmtdew=0.617325, humidity=95.8726, cloud=0.0, wind=17.7336, temperature=12.3677, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:30:37.643 [DEBUG] [Thread-189109] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:30:37.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:30:37.742 [DEBUG] [Thread-189112] [transport.py] [_log()] starting thread (client mode): 0xb0fccb50
2026-04-12T12:30:37.742 [DEBUG] [Thread-189112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:30:37.757 [DEBUG] [Thread-189112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:30:37.757 [INFO] [Thread-189112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:30:37.764 [DEBUG] [Thread-189112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] client lang: <none>
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] server lang: <none>
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] kex follows: False
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] Compression: none
2026-04-12T12:30:37.765 [DEBUG] [Thread-189112] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:30:37.830 [DEBUG] [Thread-189112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:30:37.830 [DEBUG] [Thread-189112] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:30:37.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:30:37.831 [DEBUG] [Thread-189112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:30:37.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:30:37.887 [DEBUG] [Thread-189112] [transport.py] [_log()] userauth is OK
2026-04-12T12:30:37.887 [DEBUG] [Thread-189112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:30:37.888 [DEBUG] [Thread-189112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:30:37.888 [DEBUG] [Thread-189112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:30:37.888 [DEBUG] [Thread-189112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:30:37.913 [INFO] [Thread-189112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:30:37.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:30:37.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:30:38.709 [DEBUG] [Thread-189112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:30:38.709 [DEBUG] [Thread-189112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:30:38.757 [DEBUG] [Thread-189112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:30:38.758 [DEBUG] [Thread-189112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:30:38.767 [DEBUG] [Thread-189112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:30:38.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:30:38.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:30:38.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:30:38.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:30:38.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:30:38.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:30:38.804 [DEBUG] [Thread-189112] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:30:48.600 [DEBUG] [Thread-189114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:31:03.655 [DEBUG] [Thread-189115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:31:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:31:08.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:31:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:31:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 30, 44), 1.18863, 92.4136, 0.0, 18.4903, 12.9022, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:31:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:30:44
2026-04-12T12:31:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:31:10.941 [DEBUG] [Thread-189116] [transport.py] [_log()] starting thread (client mode): 0xb0fcef20
2026-04-12T12:31:10.941 [DEBUG] [Thread-189116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:31:10.959 [DEBUG] [Thread-189116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:31:10.959 [INFO] [Thread-189116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:31:10.962 [DEBUG] [Thread-189116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:31:10.962 [DEBUG] [Thread-189116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:31:10.962 [DEBUG] [Thread-189116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:31:10.962 [DEBUG] [Thread-189116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:10.962 [DEBUG] [Thread-189116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:10.962 [DEBUG] [Thread-189116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] client lang: <none>
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] server lang: <none>
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] kex follows: False
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] Compression: none
2026-04-12T12:31:10.963 [DEBUG] [Thread-189116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:31:10.975 [DEBUG] [Thread-189116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:31:10.976 [DEBUG] [Thread-189116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:31:10.976 [DEBUG] [Thread-189116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:31:10.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:31:10.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:31:10.978 [DEBUG] [Thread-189116] [transport.py] [_log()] userauth is OK
2026-04-12T12:31:10.978 [DEBUG] [Thread-189116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:31:10.979 [DEBUG] [Thread-189116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:31:10.979 [DEBUG] [Thread-189116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:31:10.979 [DEBUG] [Thread-189116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:31:10.999 [INFO] [Thread-189116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:31:11.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:31:11.594 [DEBUG] [Thread-189116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:31:11.594 [DEBUG] [Thread-189116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:31:11.594 [DEBUG] [Thread-189116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:31:11.635 [DEBUG] [Thread-189116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:31:11.635 [DEBUG] [Thread-189116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:31:11.638 [DEBUG] [Thread-189116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:31:11.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:31:11.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:31:11.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:31:11.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:31:11.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:31:11.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:31:11.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:31:11.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:31:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:31:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.437956 -999.00  +12.40  11.19     90  +10.80 1 3 1 3 1   888    0 2.06 20.30 ----- 15.6 11.2 279.0 17.9 16.1 -5.8 15.7 -4.5 15.1 -3.5 15.7 -3.8
2026-04-12T12:31:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:31:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:31:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.437956
2026-04-12T12:31:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:31:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:31:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:31:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:31:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:31:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:30:44', tmtdew=1.18863, humidity=92.4136, cloud=0.0, wind=18.4903, temperature=12.9022, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:30:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:31:11.666 [DEBUG] [Thread-189116] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:31:11.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:31:11.759 [DEBUG] [Thread-189119] [transport.py] [_log()] starting thread (client mode): 0xae52fc10
2026-04-12T12:31:11.759 [DEBUG] [Thread-189119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:31:11.773 [DEBUG] [Thread-189119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:31:11.773 [INFO] [Thread-189119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] client lang: <none>
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] server lang: <none>
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] kex follows: False
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:31:11.781 [DEBUG] [Thread-189119] [transport.py] [_log()] Compression: none
2026-04-12T12:31:11.782 [DEBUG] [Thread-189119] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:31:11.839 [DEBUG] [Thread-189119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:31:11.840 [DEBUG] [Thread-189119] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:31:11.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:31:11.841 [DEBUG] [Thread-189119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:31:11.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:31:11.896 [DEBUG] [Thread-189119] [transport.py] [_log()] userauth is OK
2026-04-12T12:31:11.896 [DEBUG] [Thread-189119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:31:11.896 [DEBUG] [Thread-189119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:31:11.896 [DEBUG] [Thread-189119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:31:11.896 [DEBUG] [Thread-189119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:31:11.914 [INFO] [Thread-189119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:31:11.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:31:11.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:31:12.739 [DEBUG] [Thread-189119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:31:12.739 [DEBUG] [Thread-189119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:31:12.788 [DEBUG] [Thread-189119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:31:12.788 [DEBUG] [Thread-189119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:31:12.797 [DEBUG] [Thread-189119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:31:12.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:31:12.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:31:12.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:31:12.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:31:12.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:31:12.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:31:12.833 [DEBUG] [Thread-189119] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:31:14.569 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:31:14.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:31:18.692 [DEBUG] [Thread-189121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:31:33.747 [DEBUG] [Thread-189122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:31:33.997 [DEBUG] [Thread-189123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:31:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:31:42.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:31:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:31:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 31, 20), 0.65194, 95.6568, 0.0, 18.1922, 12.2346, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:31:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:31:20
2026-04-12T12:31:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:31:44.703 [DEBUG] [Thread-189124] [transport.py] [_log()] starting thread (client mode): 0xae52ebc0
2026-04-12T12:31:44.703 [DEBUG] [Thread-189124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:31:44.723 [DEBUG] [Thread-189124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:31:44.723 [INFO] [Thread-189124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:31:44.724 [DEBUG] [Thread-189124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] client lang: <none>
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] server lang: <none>
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] kex follows: False
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] Compression: none
2026-04-12T12:31:44.725 [DEBUG] [Thread-189124] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:31:44.735 [DEBUG] [Thread-189124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:31:44.736 [DEBUG] [Thread-189124] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:31:44.736 [DEBUG] [Thread-189124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:31:44.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:31:44.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:31:44.738 [DEBUG] [Thread-189124] [transport.py] [_log()] userauth is OK
2026-04-12T12:31:44.738 [DEBUG] [Thread-189124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:31:44.738 [DEBUG] [Thread-189124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:31:44.738 [DEBUG] [Thread-189124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:31:44.738 [DEBUG] [Thread-189124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:31:44.756 [INFO] [Thread-189124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:31:44.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:31:45.315 [DEBUG] [Thread-189124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:31:45.316 [DEBUG] [Thread-189124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:31:45.316 [DEBUG] [Thread-189124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:31:45.357 [DEBUG] [Thread-189124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:31:45.357 [DEBUG] [Thread-189124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:31:45.361 [DEBUG] [Thread-189124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:31:45.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:31:45.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:31:45.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:31:45.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:31:45.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:31:45.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:31:45.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:31:45.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:31:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:31:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.438650 -999.00  +12.30  16.96     89  +10.70 1 3 1 3 1   888    0 2.10 19.38 ----- 17.9 17.0 278.4 19.5 16.2 -4.9 15.7 -4.4 15.0 -4.9 15.7 -4.5
2026-04-12T12:31:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:31:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:31:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.438650
2026-04-12T12:31:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:31:45.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:31:45.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:31:45.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:31:45.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:31:45.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:31:20', tmtdew=0.65194, humidity=95.6568, cloud=0.0, wind=18.1922, temperature=12.2346, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:31:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:31:45.389 [DEBUG] [Thread-189124] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:31:45.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:31:45.482 [DEBUG] [Thread-189127] [transport.py] [_log()] starting thread (client mode): 0xae515270
2026-04-12T12:31:45.482 [DEBUG] [Thread-189127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:31:45.498 [DEBUG] [Thread-189127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:31:45.498 [INFO] [Thread-189127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] client lang: <none>
2026-04-12T12:31:45.508 [DEBUG] [Thread-189127] [transport.py] [_log()] server lang: <none>
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] kex follows: False
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] Compression: none
2026-04-12T12:31:45.509 [DEBUG] [Thread-189127] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:31:45.568 [DEBUG] [Thread-189127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:31:45.568 [DEBUG] [Thread-189127] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:31:45.569 [DEBUG] [Thread-189127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:31:45.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:31:45.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:31:45.636 [DEBUG] [Thread-189127] [transport.py] [_log()] userauth is OK
2026-04-12T12:31:45.637 [DEBUG] [Thread-189127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:31:45.637 [DEBUG] [Thread-189127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:31:45.637 [DEBUG] [Thread-189127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:31:45.637 [DEBUG] [Thread-189127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:31:45.656 [INFO] [Thread-189127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:31:45.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:31:45.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:31:46.491 [DEBUG] [Thread-189127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:31:46.492 [DEBUG] [Thread-189127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:31:46.543 [DEBUG] [Thread-189127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:31:46.543 [DEBUG] [Thread-189127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:31:46.552 [DEBUG] [Thread-189127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:31:46.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:31:46.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:31:46.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:31:46.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:31:46.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:31:46.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:31:46.598 [DEBUG] [Thread-189127] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:31:48.787 [DEBUG] [Thread-189129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:03.841 [DEBUG] [Thread-189130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:14.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:14.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:16.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:32:16.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:32:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:32:17.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 31, 56), 0.65509, 95.6402, 0.0, 18.0328, 12.2844, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:32:17.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:31:56
2026-04-12T12:32:18.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:32:18.489 [DEBUG] [Thread-189131] [transport.py] [_log()] starting thread (client mode): 0xb0f54640
2026-04-12T12:32:18.489 [DEBUG] [Thread-189131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:32:18.510 [DEBUG] [Thread-189131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:32:18.510 [INFO] [Thread-189131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:32:18.512 [DEBUG] [Thread-189131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] client lang: <none>
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] server lang: <none>
2026-04-12T12:32:18.513 [DEBUG] [Thread-189131] [transport.py] [_log()] kex follows: False
2026-04-12T12:32:18.514 [DEBUG] [Thread-189131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:32:18.514 [DEBUG] [Thread-189131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:32:18.514 [DEBUG] [Thread-189131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:32:18.514 [DEBUG] [Thread-189131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:32:18.514 [DEBUG] [Thread-189131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:32:18.514 [DEBUG] [Thread-189131] [transport.py] [_log()] Compression: none
2026-04-12T12:32:18.514 [DEBUG] [Thread-189131] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:32:18.533 [DEBUG] [Thread-189131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:32:18.534 [DEBUG] [Thread-189131] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:32:18.535 [DEBUG] [Thread-189131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:32:18.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:32:18.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:32:18.537 [DEBUG] [Thread-189131] [transport.py] [_log()] userauth is OK
2026-04-12T12:32:18.537 [DEBUG] [Thread-189131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:32:18.537 [DEBUG] [Thread-189131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:32:18.537 [DEBUG] [Thread-189131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:32:18.538 [DEBUG] [Thread-189131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:32:18.561 [INFO] [Thread-189131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:32:18.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:32:18.878 [DEBUG] [Thread-189133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:19.148 [DEBUG] [Thread-189131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:32:19.148 [DEBUG] [Thread-189131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:32:19.149 [DEBUG] [Thread-189131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:32:19.189 [DEBUG] [Thread-189131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:32:19.189 [DEBUG] [Thread-189131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:32:19.192 [DEBUG] [Thread-189131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:32:19.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:32:19.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:32:19.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:32:19.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:32:19.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:32:19.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:32:19.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:32:19.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:32:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:32:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.438997 -999.00  +12.20  19.53     89  +10.50 1 3 1 3 1   888    0 2.08 19.46 ----- 17.2 19.5 273.2 23.2 16.1 -5.3 15.7 -5.0 14.8 -6.2 15.6 -3.9
2026-04-12T12:32:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:32:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:32:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.438997
2026-04-12T12:32:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:32:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:32:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:32:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:32:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:32:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:31:56', tmtdew=0.65509, humidity=95.6402, cloud=0.0, wind=18.0328, temperature=12.2844, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:32:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:32:19.210 [DEBUG] [Thread-189131] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:32:19.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:32:19.314 [DEBUG] [Thread-189135] [transport.py] [_log()] starting thread (client mode): 0xb0f55cc0
2026-04-12T12:32:19.314 [DEBUG] [Thread-189135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:32:19.329 [DEBUG] [Thread-189135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:32:19.329 [INFO] [Thread-189135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:32:19.336 [DEBUG] [Thread-189135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:32:19.336 [DEBUG] [Thread-189135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] client lang: <none>
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] server lang: <none>
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] kex follows: False
2026-04-12T12:32:19.337 [DEBUG] [Thread-189135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:32:19.338 [DEBUG] [Thread-189135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:32:19.338 [DEBUG] [Thread-189135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:32:19.338 [DEBUG] [Thread-189135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:32:19.338 [DEBUG] [Thread-189135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:32:19.338 [DEBUG] [Thread-189135] [transport.py] [_log()] Compression: none
2026-04-12T12:32:19.338 [DEBUG] [Thread-189135] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:32:19.396 [DEBUG] [Thread-189135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:32:19.396 [DEBUG] [Thread-189135] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:32:19.397 [DEBUG] [Thread-189135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:32:19.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:32:19.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:32:19.452 [DEBUG] [Thread-189135] [transport.py] [_log()] userauth is OK
2026-04-12T12:32:19.452 [DEBUG] [Thread-189135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:32:19.452 [DEBUG] [Thread-189135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:32:19.452 [DEBUG] [Thread-189135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:32:19.452 [DEBUG] [Thread-189135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:32:19.476 [INFO] [Thread-189135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:32:19.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:32:19.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:32:20.283 [DEBUG] [Thread-189135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:32:20.283 [DEBUG] [Thread-189135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:32:20.331 [DEBUG] [Thread-189135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:32:20.331 [DEBUG] [Thread-189135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:32:20.340 [DEBUG] [Thread-189135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:32:20.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:32:20.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:32:20.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:32:20.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:32:20.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:32:20.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:32:20.381 [DEBUG] [Thread-189135] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:32:33.915 [DEBUG] [Thread-189137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:34.042 [DEBUG] [Thread-189138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:48.978 [DEBUG] [Thread-189139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:32:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:32:50.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:32:50.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:32:51.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 32, 31), 0.66829, 95.5571, 0.0, 16.6568, 12.2345, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:32:51.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:32:31
2026-04-12T12:32:52.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:32:52.278 [DEBUG] [Thread-189140] [transport.py] [_log()] starting thread (client mode): 0xae52de40
2026-04-12T12:32:52.278 [DEBUG] [Thread-189140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:32:52.297 [DEBUG] [Thread-189140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:32:52.297 [INFO] [Thread-189140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:32:52.299 [DEBUG] [Thread-189140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:32:52.299 [DEBUG] [Thread-189140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:32:52.299 [DEBUG] [Thread-189140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] client lang: <none>
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] server lang: <none>
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] kex follows: False
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] Compression: none
2026-04-12T12:32:52.300 [DEBUG] [Thread-189140] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:32:52.310 [DEBUG] [Thread-189140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:32:52.311 [DEBUG] [Thread-189140] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:32:52.311 [DEBUG] [Thread-189140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:32:52.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:32:52.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:32:52.313 [DEBUG] [Thread-189140] [transport.py] [_log()] userauth is OK
2026-04-12T12:32:52.313 [DEBUG] [Thread-189140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:32:52.313 [DEBUG] [Thread-189140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:32:52.313 [DEBUG] [Thread-189140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:32:52.314 [DEBUG] [Thread-189140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:32:52.337 [INFO] [Thread-189140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:32:52.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:32:52.933 [DEBUG] [Thread-189140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:32:52.933 [DEBUG] [Thread-189140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:32:52.933 [DEBUG] [Thread-189140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:32:52.975 [DEBUG] [Thread-189140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:32:52.975 [DEBUG] [Thread-189140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:32:52.977 [DEBUG] [Thread-189140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:32:52.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:32:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:32:52.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:32:52.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:32:52.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:32:52.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:32:52.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:32:52.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:32:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:32:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.439344 -999.00  +12.00  16.39     89  +10.30 1 3 1 3 1   888    0 2.10 19.65 ----- 13.9 16.4 271.6 21.5 16.0 -6.2 15.6 -4.7 14.7 -5.7 15.5 -4.8
2026-04-12T12:32:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:32:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:32:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.439344
2026-04-12T12:32:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:32:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:32:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:32:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:32:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:32:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:32:31', tmtdew=0.66829, humidity=95.5571, cloud=0.0, wind=16.6568, temperature=12.2345, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:32:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:32:52.996 [DEBUG] [Thread-189140] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:32:53.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:32:53.078 [DEBUG] [Thread-189143] [transport.py] [_log()] starting thread (client mode): 0xae52fac0
2026-04-12T12:32:53.078 [DEBUG] [Thread-189143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:32:53.093 [DEBUG] [Thread-189143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:32:53.093 [INFO] [Thread-189143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:32:53.101 [DEBUG] [Thread-189143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:32:53.101 [DEBUG] [Thread-189143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:32:53.101 [DEBUG] [Thread-189143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] client lang: <none>
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] server lang: <none>
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] kex follows: False
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] Compression: none
2026-04-12T12:32:53.102 [DEBUG] [Thread-189143] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:32:53.160 [DEBUG] [Thread-189143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:32:53.161 [DEBUG] [Thread-189143] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:32:53.161 [DEBUG] [Thread-189143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:32:53.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:32:53.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:32:53.220 [DEBUG] [Thread-189143] [transport.py] [_log()] userauth is OK
2026-04-12T12:32:53.221 [DEBUG] [Thread-189143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:32:53.221 [DEBUG] [Thread-189143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:32:53.221 [DEBUG] [Thread-189143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:32:53.221 [DEBUG] [Thread-189143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:32:53.246 [INFO] [Thread-189143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:32:53.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:32:53.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:32:54.048 [DEBUG] [Thread-189143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:32:54.048 [DEBUG] [Thread-189143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:32:54.098 [DEBUG] [Thread-189143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:32:54.099 [DEBUG] [Thread-189143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:32:54.109 [DEBUG] [Thread-189143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:32:54.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:32:54.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:32:54.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:32:54.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:32:54.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:32:54.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:32:54.148 [DEBUG] [Thread-189143] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:33:04.014 [DEBUG] [Thread-189145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:33:14.879 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:33:14.881 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:33:19.075 [DEBUG] [Thread-189146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:33:24.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:33:24.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:33:24.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:33:25.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 33, 7), 0.655265, 95.64, 0.0, 16.5157, 12.3008, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:33:25.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:33:07
2026-04-12T12:33:25.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:33:26.030 [DEBUG] [Thread-189147] [transport.py] [_log()] starting thread (client mode): 0xb0f56cb0
2026-04-12T12:33:26.030 [DEBUG] [Thread-189147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:33:26.050 [DEBUG] [Thread-189147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:33:26.050 [INFO] [Thread-189147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:33:26.053 [DEBUG] [Thread-189147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:33:26.053 [DEBUG] [Thread-189147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:33:26.053 [DEBUG] [Thread-189147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:33:26.053 [DEBUG] [Thread-189147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] client lang: <none>
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] server lang: <none>
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] kex follows: False
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:33:26.054 [DEBUG] [Thread-189147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:33:26.055 [DEBUG] [Thread-189147] [transport.py] [_log()] Compression: none
2026-04-12T12:33:26.055 [DEBUG] [Thread-189147] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:33:26.065 [DEBUG] [Thread-189147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:33:26.065 [DEBUG] [Thread-189147] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:33:26.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:33:26.067 [DEBUG] [Thread-189147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:33:26.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:33:26.069 [DEBUG] [Thread-189147] [transport.py] [_log()] userauth is OK
2026-04-12T12:33:26.070 [DEBUG] [Thread-189147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:33:26.070 [DEBUG] [Thread-189147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:33:26.070 [DEBUG] [Thread-189147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:33:26.070 [DEBUG] [Thread-189147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:33:26.096 [INFO] [Thread-189147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:33:26.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:33:26.724 [DEBUG] [Thread-189147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:33:26.725 [DEBUG] [Thread-189147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:33:26.725 [DEBUG] [Thread-189147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:33:26.766 [DEBUG] [Thread-189147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:33:26.766 [DEBUG] [Thread-189147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:33:26.770 [DEBUG] [Thread-189147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:33:26.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:33:26.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:33:26.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:33:26.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:33:26.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:33:26.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:33:26.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:33:26.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:33:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:33:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.439691 -999.00  +12.00  15.66     89  +10.30 1 3 1 3 1   888    0 2.07 18.76 ----- 12.6 15.7 279.8 22.5 15.9 -6.3 15.5 -4.8 14.7 -4.6 15.5 -4.0
2026-04-12T12:33:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:33:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:33:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.439691
2026-04-12T12:33:26.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:33:26.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:33:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:33:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:33:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:33:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:33:07', tmtdew=0.655265, humidity=95.64, cloud=0.0, wind=16.5157, temperature=12.3008, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:33:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:33:26.797 [DEBUG] [Thread-189147] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:33:26.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:33:34.088 [DEBUG] [Thread-189150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:33:34.112 [DEBUG] [Thread-189151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:33:49.166 [DEBUG] [Thread-189152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:34:04.207 [DEBUG] [Thread-189153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:34:15.033 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:34:15.034 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:34:19.244 [DEBUG] [Thread-189154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:34:34.146 [DEBUG] [Thread-189155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:34:34.281 [DEBUG] [Thread-189156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:34:49.317 [DEBUG] [Thread-189157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:35:04.357 [DEBUG] [Thread-189158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:35:15.177 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:35:15.178 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:35:19.396 [DEBUG] [Thread-189159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:35:34.200 [DEBUG] [Thread-189160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:35:34.431 [DEBUG] [Thread-189161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:35:40.543 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T12:35:49.463 [DEBUG] [Thread-189162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:36:04.504 [DEBUG] [Thread-189163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:36:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:36:10.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:36:10.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:36:11.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 36, 4), 0.631195, 95.974, 0.0, 17.7682, 12.1514, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:36:11.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:36:04
2026-04-12T12:36:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:36:12.428 [DEBUG] [Thread-189164] [transport.py] [_log()] starting thread (client mode): 0xb0f564a0
2026-04-12T12:36:12.428 [DEBUG] [Thread-189164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:36:12.448 [DEBUG] [Thread-189164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:36:12.448 [INFO] [Thread-189164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] client lang: <none>
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] server lang: <none>
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] kex follows: False
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] Compression: none
2026-04-12T12:36:12.451 [DEBUG] [Thread-189164] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:36:12.467 [DEBUG] [Thread-189164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:36:12.467 [DEBUG] [Thread-189164] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:36:12.468 [DEBUG] [Thread-189164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:36:12.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:36:12.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:36:12.470 [DEBUG] [Thread-189164] [transport.py] [_log()] userauth is OK
2026-04-12T12:36:12.470 [DEBUG] [Thread-189164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:36:12.470 [DEBUG] [Thread-189164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:36:12.470 [DEBUG] [Thread-189164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:36:12.470 [DEBUG] [Thread-189164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:36:12.487 [INFO] [Thread-189164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:36:12.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:36:13.257 [DEBUG] [Thread-189164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:36:13.257 [DEBUG] [Thread-189164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:36:13.258 [DEBUG] [Thread-189164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:36:13.298 [DEBUG] [Thread-189164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:36:13.298 [DEBUG] [Thread-189164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:36:13.302 [DEBUG] [Thread-189164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:36:13.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:36:13.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:36:13.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:36:13.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:36:13.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:36:13.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:36:13.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:36:13.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:36:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:36:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.441427 -999.00  +12.30  13.78     90  +10.70 1 3 1 3 1   888    0 2.04 17.07 ----- 11.5 13.8 277.2 20.7 15.8 -5.1 15.3 -4.2 14.8 -3.5 15.3 -3.9
2026-04-12T12:36:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:36:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:36:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.441427
2026-04-12T12:36:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:36:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:36:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:36:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:36:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:36:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:36:04', tmtdew=0.631195, humidity=95.974, cloud=0.0, wind=17.7682, temperature=12.1514, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:35:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:36:13.328 [DEBUG] [Thread-189164] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:36:13.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:36:13.426 [DEBUG] [Thread-189167] [transport.py] [_log()] starting thread (client mode): 0xae52e230
2026-04-12T12:36:13.426 [DEBUG] [Thread-189167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:36:13.440 [DEBUG] [Thread-189167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:36:13.441 [INFO] [Thread-189167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:36:13.448 [DEBUG] [Thread-189167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] client lang: <none>
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] server lang: <none>
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] kex follows: False
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:36:13.449 [DEBUG] [Thread-189167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:36:13.450 [DEBUG] [Thread-189167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:36:13.450 [DEBUG] [Thread-189167] [transport.py] [_log()] Compression: none
2026-04-12T12:36:13.450 [DEBUG] [Thread-189167] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:36:13.507 [DEBUG] [Thread-189167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:36:13.508 [DEBUG] [Thread-189167] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:36:13.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:36:13.509 [DEBUG] [Thread-189167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:36:13.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:36:13.564 [DEBUG] [Thread-189167] [transport.py] [_log()] userauth is OK
2026-04-12T12:36:13.564 [DEBUG] [Thread-189167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:36:13.564 [DEBUG] [Thread-189167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:36:13.564 [DEBUG] [Thread-189167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:36:13.564 [DEBUG] [Thread-189167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:36:13.583 [INFO] [Thread-189167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:36:13.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:36:13.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:36:14.378 [DEBUG] [Thread-189167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:36:14.378 [DEBUG] [Thread-189167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:36:14.426 [DEBUG] [Thread-189167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:36:14.426 [DEBUG] [Thread-189167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:36:14.436 [DEBUG] [Thread-189167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:36:14.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:36:14.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:36:14.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:36:14.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:36:14.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:36:14.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:36:14.474 [DEBUG] [Thread-189167] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:36:15.324 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:36:15.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:36:19.541 [DEBUG] [Thread-189169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:36:34.261 [DEBUG] [Thread-189170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:36:34.595 [DEBUG] [Thread-189171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:36:44.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:36:44.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:36:44.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:36:45.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 36, 4), 0.631195, 95.974, 0.0, 17.7682, 12.1514, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:36:45.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:36:04
2026-04-12T12:36:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:36:46.499 [DEBUG] [Thread-189172] [transport.py] [_log()] starting thread (client mode): 0xb0f57460
2026-04-12T12:36:46.500 [DEBUG] [Thread-189172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:36:46.520 [DEBUG] [Thread-189172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:36:46.521 [INFO] [Thread-189172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] client lang: <none>
2026-04-12T12:36:46.523 [DEBUG] [Thread-189172] [transport.py] [_log()] server lang: <none>
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] kex follows: False
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] Compression: none
2026-04-12T12:36:46.524 [DEBUG] [Thread-189172] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:36:46.538 [DEBUG] [Thread-189172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:36:46.539 [DEBUG] [Thread-189172] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:36:46.539 [DEBUG] [Thread-189172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:36:46.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:36:46.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:36:46.541 [DEBUG] [Thread-189172] [transport.py] [_log()] userauth is OK
2026-04-12T12:36:46.541 [DEBUG] [Thread-189172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:36:46.542 [DEBUG] [Thread-189172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:36:46.542 [DEBUG] [Thread-189172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:36:46.542 [DEBUG] [Thread-189172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:36:46.566 [INFO] [Thread-189172] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:36:46.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:36:47.373 [DEBUG] [Thread-189172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:36:47.373 [DEBUG] [Thread-189172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:36:47.373 [DEBUG] [Thread-189172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:36:47.414 [DEBUG] [Thread-189172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:36:47.414 [DEBUG] [Thread-189172] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:36:47.417 [DEBUG] [Thread-189172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:36:47.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:36:47.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:36:47.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:36:47.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:36:47.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:36:47.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:36:47.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:36:47.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:36:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:36:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.441775 -999.00  +12.30  18.25     90  +10.70 1 3 1 3 1   888    0 2.05 16.52 ----- 16.8 18.2 280.0 22.9 15.8 -5.0 15.4 -4.4 14.8 -5.5 15.3 -4.3
2026-04-12T12:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.441775
2026-04-12T12:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:36:04', tmtdew=0.631195, humidity=95.974, cloud=0.0, wind=17.7682, temperature=12.1514, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:36:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:36:47.444 [DEBUG] [Thread-189172] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:36:47.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:36:47.539 [DEBUG] [Thread-189175] [transport.py] [_log()] starting thread (client mode): 0xb39c7ca0
2026-04-12T12:36:47.539 [DEBUG] [Thread-189175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:36:47.553 [DEBUG] [Thread-189175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:36:47.553 [INFO] [Thread-189175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] client lang: <none>
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] server lang: <none>
2026-04-12T12:36:47.561 [DEBUG] [Thread-189175] [transport.py] [_log()] kex follows: False
2026-04-12T12:36:47.562 [DEBUG] [Thread-189175] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:36:47.562 [DEBUG] [Thread-189175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:36:47.562 [DEBUG] [Thread-189175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:36:47.562 [DEBUG] [Thread-189175] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:36:47.562 [DEBUG] [Thread-189175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:36:47.562 [DEBUG] [Thread-189175] [transport.py] [_log()] Compression: none
2026-04-12T12:36:47.562 [DEBUG] [Thread-189175] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:36:47.619 [DEBUG] [Thread-189175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:36:47.620 [DEBUG] [Thread-189175] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:36:47.621 [DEBUG] [Thread-189175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:36:47.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:36:47.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:36:47.675 [DEBUG] [Thread-189175] [transport.py] [_log()] userauth is OK
2026-04-12T12:36:47.676 [DEBUG] [Thread-189175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:36:47.676 [DEBUG] [Thread-189175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:36:47.676 [DEBUG] [Thread-189175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:36:47.676 [DEBUG] [Thread-189175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:36:47.702 [INFO] [Thread-189175] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:36:47.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:36:47.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:36:48.567 [DEBUG] [Thread-189175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:36:48.567 [DEBUG] [Thread-189175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:36:48.615 [DEBUG] [Thread-189175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:36:48.615 [DEBUG] [Thread-189175] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:36:48.625 [DEBUG] [Thread-189175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:36:48.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:36: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')
2026-04-12T12:36:48.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:36:48.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:36:48.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:36:48.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:36:48.662 [DEBUG] [Thread-189175] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:36:49.633 [DEBUG] [Thread-189177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:04.688 [DEBUG] [Thread-189178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:15.473 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:15.474 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:37:18.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:37:18.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:37:19.723 [DEBUG] [Thread-189179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:19.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 36, 39), 1.20917, 92.2795, 0.0, 21.6655, 12.7355, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:37:19.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:36:39
2026-04-12T12:37:20.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:37:20.593 [DEBUG] [Thread-189180] [transport.py] [_log()] starting thread (client mode): 0xb0f550c0
2026-04-12T12:37:20.593 [DEBUG] [Thread-189180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:37:20.615 [DEBUG] [Thread-189180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:37:20.615 [INFO] [Thread-189180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:37:20.618 [DEBUG] [Thread-189180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] client lang: <none>
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] server lang: <none>
2026-04-12T12:37:20.619 [DEBUG] [Thread-189180] [transport.py] [_log()] kex follows: False
2026-04-12T12:37:20.620 [DEBUG] [Thread-189180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:37:20.620 [DEBUG] [Thread-189180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:37:20.620 [DEBUG] [Thread-189180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:37:20.620 [DEBUG] [Thread-189180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:37:20.620 [DEBUG] [Thread-189180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:37:20.620 [DEBUG] [Thread-189180] [transport.py] [_log()] Compression: none
2026-04-12T12:37:20.620 [DEBUG] [Thread-189180] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:37:20.629 [DEBUG] [Thread-189180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:37:20.629 [DEBUG] [Thread-189180] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:37:20.629 [DEBUG] [Thread-189180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:37:20.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:37:20.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:37:20.631 [DEBUG] [Thread-189180] [transport.py] [_log()] userauth is OK
2026-04-12T12:37:20.631 [DEBUG] [Thread-189180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:37:20.631 [DEBUG] [Thread-189180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:37:20.632 [DEBUG] [Thread-189180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:37:20.632 [DEBUG] [Thread-189180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:37:20.668 [INFO] [Thread-189180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:37:20.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:37:21.454 [DEBUG] [Thread-189180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:37:21.455 [DEBUG] [Thread-189180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:37:21.455 [DEBUG] [Thread-189180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:37:21.496 [DEBUG] [Thread-189180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:37:21.496 [DEBUG] [Thread-189180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:37:21.499 [DEBUG] [Thread-189180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:37:21.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:37:21.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:37:21.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:37:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:37:21.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:37:21.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:37:21.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:37:21.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:37:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:37:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.442122 -999.00  +12.30  18.03     89  +10.60 1 3 1 3 1   888    0 2.07 16.99 ----- 17.4 18.0 269.8 24.9 15.8 -5.3 15.4 -4.5 14.8 -3.7 15.3 -4.2
2026-04-12T12:37:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:37:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:37:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.442122
2026-04-12T12:37:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:37:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:37:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:37:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:37:21.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:37:21.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:36:39', tmtdew=1.20917, humidity=92.2795, cloud=0.0, wind=21.6655, temperature=12.7355, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:36:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:37:21.522 [DEBUG] [Thread-189180] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:37:21.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:37:21.614 [DEBUG] [Thread-189183] [transport.py] [_log()] starting thread (client mode): 0xb0f544c0
2026-04-12T12:37:21.614 [DEBUG] [Thread-189183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:37:21.629 [DEBUG] [Thread-189183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:37:21.629 [INFO] [Thread-189183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:37:21.636 [DEBUG] [Thread-189183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] client lang: <none>
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] server lang: <none>
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] kex follows: False
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] Compression: none
2026-04-12T12:37:21.637 [DEBUG] [Thread-189183] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:37:21.694 [DEBUG] [Thread-189183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:37:21.695 [DEBUG] [Thread-189183] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:37:21.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:37:21.695 [DEBUG] [Thread-189183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:37:21.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:37:21.751 [DEBUG] [Thread-189183] [transport.py] [_log()] userauth is OK
2026-04-12T12:37:21.751 [DEBUG] [Thread-189183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:37:21.751 [DEBUG] [Thread-189183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:37:21.751 [DEBUG] [Thread-189183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:37:21.751 [DEBUG] [Thread-189183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:37:21.773 [INFO] [Thread-189183] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:37:21.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:37:21.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:37:22.578 [DEBUG] [Thread-189183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:37:22.579 [DEBUG] [Thread-189183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:37:22.627 [DEBUG] [Thread-189183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:37:22.627 [DEBUG] [Thread-189183] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:37:22.636 [DEBUG] [Thread-189183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:37:22.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:37:22.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:37:22.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:37:22.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:37:22.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:37:22.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:37:22.671 [DEBUG] [Thread-189183] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:37:34.320 [DEBUG] [Thread-189185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:34.759 [DEBUG] [Thread-189186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:49.825 [DEBUG] [Thread-189187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:37:52.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:37:52.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:37:52.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:37:53.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 37, 16), 0.620565, 95.5405, 0.0, 19.0926, 12.0348, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:37:53.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:37:16
2026-04-12T12:37:54.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:37:54.603 [DEBUG] [Thread-189188] [transport.py] [_log()] starting thread (client mode): 0xae52e680
2026-04-12T12:37:54.603 [DEBUG] [Thread-189188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:37:54.625 [DEBUG] [Thread-189188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:37:54.625 [INFO] [Thread-189188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] client lang: <none>
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] server lang: <none>
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] kex follows: False
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:37:54.628 [DEBUG] [Thread-189188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:37:54.629 [DEBUG] [Thread-189188] [transport.py] [_log()] Compression: none
2026-04-12T12:37:54.629 [DEBUG] [Thread-189188] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:37:54.646 [DEBUG] [Thread-189188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:37:54.646 [DEBUG] [Thread-189188] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:37:54.647 [DEBUG] [Thread-189188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:37:54.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:37:54.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:37:54.649 [DEBUG] [Thread-189188] [transport.py] [_log()] userauth is OK
2026-04-12T12:37:54.649 [DEBUG] [Thread-189188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:37:54.649 [DEBUG] [Thread-189188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:37:54.649 [DEBUG] [Thread-189188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:37:54.649 [DEBUG] [Thread-189188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:37:54.668 [INFO] [Thread-189188] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:37:54.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:37:55.418 [DEBUG] [Thread-189188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:37:55.419 [DEBUG] [Thread-189188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:37:55.419 [DEBUG] [Thread-189188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:37:55.460 [DEBUG] [Thread-189188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:37:55.460 [DEBUG] [Thread-189188] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:37:55.464 [DEBUG] [Thread-189188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:37:55.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:37:55.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:37:55.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:37:55.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:37:55.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:37:55.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:37:55.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:37:55.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:37:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:37:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.442469 -999.00  +12.20  14.40     89  +10.40 1 3 1 3 1   888    0 2.10 19.00 ----- 15.0 14.4 249.2 18.3 15.7 -4.9 15.3 -4.0 14.8 -3.3 15.2 -4.0
2026-04-12T12:37:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:37:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:37:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.442469
2026-04-12T12:37:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:37:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:37:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:37:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:37:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:37:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:37:16', tmtdew=0.620565, humidity=95.5405, cloud=0.0, wind=19.0926, temperature=12.0348, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:37:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:37:55.493 [DEBUG] [Thread-189188] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:37:55.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:37:55.587 [DEBUG] [Thread-189191] [transport.py] [_log()] starting thread (client mode): 0xae52db70
2026-04-12T12:37:55.587 [DEBUG] [Thread-189191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:37:55.601 [DEBUG] [Thread-189191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:37:55.602 [INFO] [Thread-189191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:37:55.609 [DEBUG] [Thread-189191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:37:55.610 [DEBUG] [Thread-189191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:37:55.610 [DEBUG] [Thread-189191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:37:55.610 [DEBUG] [Thread-189191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:55.610 [DEBUG] [Thread-189191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:37:55.610 [DEBUG] [Thread-189191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:55.610 [DEBUG] [Thread-189191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:37:55.610 [DEBUG] [Thread-189191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] client lang: <none>
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] server lang: <none>
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] kex follows: False
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] Compression: none
2026-04-12T12:37:55.611 [DEBUG] [Thread-189191] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:37:55.667 [DEBUG] [Thread-189191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:37:55.668 [DEBUG] [Thread-189191] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:37:55.669 [DEBUG] [Thread-189191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:37:55.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:37:55.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:37:55.723 [DEBUG] [Thread-189191] [transport.py] [_log()] userauth is OK
2026-04-12T12:37:55.723 [DEBUG] [Thread-189191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:37:55.723 [DEBUG] [Thread-189191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:37:55.724 [DEBUG] [Thread-189191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:37:55.724 [DEBUG] [Thread-189191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:37:55.747 [INFO] [Thread-189191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:37:55.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:37:55.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:37:56.544 [DEBUG] [Thread-189191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:37:56.545 [DEBUG] [Thread-189191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:37:56.593 [DEBUG] [Thread-189191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:37:56.594 [DEBUG] [Thread-189191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:37:56.604 [DEBUG] [Thread-189191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:37:56.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:37:56.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:37: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') -> 00000000
2026-04-12T12:37:56.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:37:56.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:37:56.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:37:56.649 [DEBUG] [Thread-189191] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:38:04.865 [DEBUG] [Thread-189193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:38:15.627 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:38:15.628 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:38:19.916 [DEBUG] [Thread-189194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:38:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:38:26.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:38:26.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
2026-04-12T12:38:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 37, 52), 1.22175, 92.2134, 0.0, 16.5146, 12.9346, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:38:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:37:52
2026-04-12T12:38:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:38:28.761 [DEBUG] [Thread-189195] [transport.py] [_log()] starting thread (client mode): 0xb0fb44f0
2026-04-12T12:38:28.762 [DEBUG] [Thread-189195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:38:28.782 [DEBUG] [Thread-189195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:38:28.783 [INFO] [Thread-189195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:38:28.786 [DEBUG] [Thread-189195] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:38:28.786 [DEBUG] [Thread-189195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:38:28.786 [DEBUG] [Thread-189195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:38:28.786 [DEBUG] [Thread-189195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:38:28.786 [DEBUG] [Thread-189195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:38:28.786 [DEBUG] [Thread-189195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:38:28.786 [DEBUG] [Thread-189195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] client lang: <none>
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] server lang: <none>
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] kex follows: False
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] Compression: none
2026-04-12T12:38:28.787 [DEBUG] [Thread-189195] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:38:28.804 [DEBUG] [Thread-189195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:38:28.804 [DEBUG] [Thread-189195] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:38:28.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:38:28.805 [DEBUG] [Thread-189195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:38:28.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:38:28.807 [DEBUG] [Thread-189195] [transport.py] [_log()] userauth is OK
2026-04-12T12:38:28.808 [DEBUG] [Thread-189195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:38:28.808 [DEBUG] [Thread-189195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:38:28.808 [DEBUG] [Thread-189195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:38:28.808 [DEBUG] [Thread-189195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:38:28.832 [INFO] [Thread-189195] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:38:28.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:38:29.594 [DEBUG] [Thread-189195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:38:29.594 [DEBUG] [Thread-189195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:38:29.595 [DEBUG] [Thread-189195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:38:29.635 [DEBUG] [Thread-189195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:38:29.636 [DEBUG] [Thread-189195] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:38:29.647 [DEBUG] [Thread-189195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:38:29.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:38:29.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:38:29.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:38:29.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:38:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:38:29.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:38:29.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:38:29.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:38:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:38:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.442816 -999.00  +12.20  11.22     89  +10.50 1 3 1 3 1   888    0 2.17 20.30 ----- 14.3 11.2 277.1 19.6 15.7 -5.1 15.4 -4.2 14.8 -4.1 15.3 -3.7
2026-04-12T12:38:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:38:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:38:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.442816
2026-04-12T12:38:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:38:29.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:38:29.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:38:29.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:38:29.669 [DEBUG] [Thread-189195] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:38:29.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:38:29.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:37:52', tmtdew=1.22175, humidity=92.2134, cloud=0.0, wind=16.5146, temperature=12.9346, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:37:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:38:29.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:38:29.770 [DEBUG] [Thread-189198] [transport.py] [_log()] starting thread (client mode): 0xae52c790
2026-04-12T12:38:29.770 [DEBUG] [Thread-189198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:38:29.784 [DEBUG] [Thread-189198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:38:29.785 [INFO] [Thread-189198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:38:29.792 [DEBUG] [Thread-189198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:38:29.792 [DEBUG] [Thread-189198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:38:29.792 [DEBUG] [Thread-189198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:38:29.792 [DEBUG] [Thread-189198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:38:29.792 [DEBUG] [Thread-189198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:38:29.792 [DEBUG] [Thread-189198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:38:29.792 [DEBUG] [Thread-189198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] client lang: <none>
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] server lang: <none>
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] kex follows: False
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] Compression: none
2026-04-12T12:38:29.793 [DEBUG] [Thread-189198] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:38:29.850 [DEBUG] [Thread-189198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:38:29.850 [DEBUG] [Thread-189198] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:38:29.850 [DEBUG] [Thread-189198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:38:29.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:38:29.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:38:29.907 [DEBUG] [Thread-189198] [transport.py] [_log()] userauth is OK
2026-04-12T12:38:29.908 [DEBUG] [Thread-189198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:38:29.908 [DEBUG] [Thread-189198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:38:29.908 [DEBUG] [Thread-189198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:38:29.908 [DEBUG] [Thread-189198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:38:29.931 [INFO] [Thread-189198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:38:29.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:38:29.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:38:30.734 [DEBUG] [Thread-189198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:38:30.735 [DEBUG] [Thread-189198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:38:30.783 [DEBUG] [Thread-189198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:38:30.783 [DEBUG] [Thread-189198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:38:30.792 [DEBUG] [Thread-189198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:38:30.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:38:30.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:38:30.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:38:30.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:38:30.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:38:30.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:38:30.827 [DEBUG] [Thread-189198] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:38:34.371 [DEBUG] [Thread-189200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:38:34.953 [DEBUG] [Thread-189201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:38:50.011 [DEBUG] [Thread-189202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:39:00.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:39:00.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:39:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:39:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 38, 27), 0.68799, 95.4409, 0.0, 17.8218, 12.2007, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:39:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:38:27
2026-04-12T12:39:02.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:39:02.769 [DEBUG] [Thread-189203] [transport.py] [_log()] starting thread (client mode): 0xb0f554b0
2026-04-12T12:39:02.769 [DEBUG] [Thread-189203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:39:02.788 [DEBUG] [Thread-189203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:39:02.788 [INFO] [Thread-189203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] client lang: <none>
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] server lang: <none>
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] kex follows: False
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:39:02.792 [DEBUG] [Thread-189203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:39:02.793 [DEBUG] [Thread-189203] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:39:02.793 [DEBUG] [Thread-189203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:39:02.793 [DEBUG] [Thread-189203] [transport.py] [_log()] Compression: none
2026-04-12T12:39:02.793 [DEBUG] [Thread-189203] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:39:02.810 [DEBUG] [Thread-189203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:39:02.811 [DEBUG] [Thread-189203] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:39:02.811 [DEBUG] [Thread-189203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:39:02.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:39:02.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:39:02.813 [DEBUG] [Thread-189203] [transport.py] [_log()] userauth is OK
2026-04-12T12:39:02.813 [DEBUG] [Thread-189203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:39:02.813 [DEBUG] [Thread-189203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:39:02.813 [DEBUG] [Thread-189203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:39:02.814 [DEBUG] [Thread-189203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:39:02.832 [INFO] [Thread-189203] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:39:02.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:39:03.606 [DEBUG] [Thread-189203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:39:03.606 [DEBUG] [Thread-189203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:39:03.607 [DEBUG] [Thread-189203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:39:03.647 [DEBUG] [Thread-189203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:39:03.647 [DEBUG] [Thread-189203] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:39:03.650 [DEBUG] [Thread-189203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:39:03.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:39:03.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:39:03.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:39:03.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:39:03.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:39:03.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:39:03.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:39:03.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:39:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:39:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.443164 -999.00  +12.30  18.09     89  +10.60 1 3 1 3 1   888    0 2.17 21.16 ----- 18.5 18.1 269.2 22.1 15.8 -4.5 15.4 -4.0 14.9 -3.4 15.3 -4.3
2026-04-12T12:39:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:39:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:39:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.443164
2026-04-12T12:39:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:39:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:39:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:39:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:39:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:39:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:38:27', tmtdew=0.68799, humidity=95.4409, cloud=0.0, wind=17.8218, temperature=12.2007, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:38:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:39:03.675 [DEBUG] [Thread-189203] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:39:03.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:39:03.772 [DEBUG] [Thread-189206] [transport.py] [_log()] starting thread (client mode): 0xae52d270
2026-04-12T12:39:03.772 [DEBUG] [Thread-189206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:39:03.788 [DEBUG] [Thread-189206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:39:03.788 [INFO] [Thread-189206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:39:03.795 [DEBUG] [Thread-189206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] client lang: <none>
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] server lang: <none>
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] kex follows: False
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:39:03.796 [DEBUG] [Thread-189206] [transport.py] [_log()] Compression: none
2026-04-12T12:39:03.797 [DEBUG] [Thread-189206] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:39:03.856 [DEBUG] [Thread-189206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:39:03.856 [DEBUG] [Thread-189206] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:39:03.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:39:03.858 [DEBUG] [Thread-189206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:39:03.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:39:03.917 [DEBUG] [Thread-189206] [transport.py] [_log()] userauth is OK
2026-04-12T12:39:03.917 [DEBUG] [Thread-189206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:39:03.917 [DEBUG] [Thread-189206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:39:03.917 [DEBUG] [Thread-189206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:39:03.917 [DEBUG] [Thread-189206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:39:03.936 [INFO] [Thread-189206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:39:03.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:39:03.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:39:04.762 [DEBUG] [Thread-189206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:39:04.762 [DEBUG] [Thread-189206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:39:04.810 [DEBUG] [Thread-189206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:39:04.811 [DEBUG] [Thread-189206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:39:04.820 [DEBUG] [Thread-189206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:39:04.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:39:04.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:39:04.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:39:04.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:39:04.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:39:04.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:39:04.857 [DEBUG] [Thread-189206] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:39:05.048 [DEBUG] [Thread-189208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:39:15.773 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:39:15.775 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:39:20.097 [DEBUG] [Thread-189209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:39:34.422 [DEBUG] [Thread-189210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:39:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:39:34.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:39:34.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:39:35.134 [DEBUG] [Thread-189211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:39:36.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 39, 3), 0.711965, 95.2917, 0.0, 19.4976, 12.1344, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:39:36.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:39:03
2026-04-12T12:39:36.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:39:36.840 [DEBUG] [Thread-189212] [transport.py] [_log()] starting thread (client mode): 0xb39c67a0
2026-04-12T12:39:36.841 [DEBUG] [Thread-189212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:39:36.857 [DEBUG] [Thread-189212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:39:36.858 [INFO] [Thread-189212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:39:36.860 [DEBUG] [Thread-189212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] client lang: <none>
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] server lang: <none>
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] kex follows: False
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] Compression: none
2026-04-12T12:39:36.861 [DEBUG] [Thread-189212] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:39:36.878 [DEBUG] [Thread-189212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:39:36.878 [DEBUG] [Thread-189212] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:39:36.879 [DEBUG] [Thread-189212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:39:36.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:39:36.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:39:36.880 [DEBUG] [Thread-189212] [transport.py] [_log()] userauth is OK
2026-04-12T12:39:36.881 [DEBUG] [Thread-189212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:39:36.881 [DEBUG] [Thread-189212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:39:36.881 [DEBUG] [Thread-189212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:39:36.881 [DEBUG] [Thread-189212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:39:36.905 [INFO] [Thread-189212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:39:36.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:39:37.467 [DEBUG] [Thread-189212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:39:37.467 [DEBUG] [Thread-189212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:39:37.468 [DEBUG] [Thread-189212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:39:37.508 [DEBUG] [Thread-189212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:39:37.508 [DEBUG] [Thread-189212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:39:37.511 [DEBUG] [Thread-189212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:39:37.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:39:37.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:39:37.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:39:37.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:39:37.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:39:37.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:39:37.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:39:37.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:39:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:39:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.443858 -999.00  +12.20  10.66     89  +10.50 1 3 1 3 1   888    0 2.24 22.54 ----- 11.9 10.7 290.2 25.6 15.7 -4.9 15.4 -4.3 14.8 -4.3 15.3 -3.7
2026-04-12T12:39:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:39:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:39:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.443858
2026-04-12T12:39:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:39:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:39:37.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:39:37.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:39:37.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:39:37.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:39:03', tmtdew=0.711965, humidity=95.2917, cloud=0.0, wind=19.4976, temperature=12.1344, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:39:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:39:37.537 [DEBUG] [Thread-189212] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:39:37.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:39:37.631 [DEBUG] [Thread-189215] [transport.py] [_log()] starting thread (client mode): 0xb0fb6860
2026-04-12T12:39:37.631 [DEBUG] [Thread-189215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:39:37.645 [DEBUG] [Thread-189215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:39:37.645 [INFO] [Thread-189215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:39:37.652 [DEBUG] [Thread-189215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] client lang: <none>
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] server lang: <none>
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] kex follows: False
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:39:37.653 [DEBUG] [Thread-189215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:39:37.654 [DEBUG] [Thread-189215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:39:37.654 [DEBUG] [Thread-189215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:39:37.654 [DEBUG] [Thread-189215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:39:37.654 [DEBUG] [Thread-189215] [transport.py] [_log()] Compression: none
2026-04-12T12:39:37.654 [DEBUG] [Thread-189215] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:39:37.710 [DEBUG] [Thread-189215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:39:37.711 [DEBUG] [Thread-189215] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:39:37.711 [DEBUG] [Thread-189215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:39:37.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:39:37.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:39:37.767 [DEBUG] [Thread-189215] [transport.py] [_log()] userauth is OK
2026-04-12T12:39:37.767 [DEBUG] [Thread-189215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:39:37.767 [DEBUG] [Thread-189215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:39:37.767 [DEBUG] [Thread-189215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:39:37.767 [DEBUG] [Thread-189215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:39:37.789 [INFO] [Thread-189215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:39:37.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:39:37.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:39:38.604 [DEBUG] [Thread-189215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:39:38.604 [DEBUG] [Thread-189215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:39:38.654 [DEBUG] [Thread-189215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:39:38.654 [DEBUG] [Thread-189215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:39:38.663 [DEBUG] [Thread-189215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:39:38.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:39:38.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')
2026-04-12T12:39:38.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:39:38.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:39:38.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:39:38.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:39:38.701 [DEBUG] [Thread-189215] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:39:50.173 [DEBUG] [Thread-189217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:05.230 [DEBUG] [Thread-189218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:40:08.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:40:08.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:40:09.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 39, 39), 1.37308, 91.2839, 0.0, 22.0183, 12.7349, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:40:09.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:39:39
2026-04-12T12:40:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:40:10.530 [DEBUG] [Thread-189219] [transport.py] [_log()] starting thread (client mode): 0xae52cd00
2026-04-12T12:40:10.530 [DEBUG] [Thread-189219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:40:10.546 [DEBUG] [Thread-189219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:40:10.546 [INFO] [Thread-189219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:40:10.549 [DEBUG] [Thread-189219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] client lang: <none>
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] server lang: <none>
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] kex follows: False
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] Compression: none
2026-04-12T12:40:10.550 [DEBUG] [Thread-189219] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:40:10.565 [DEBUG] [Thread-189219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:40:10.565 [DEBUG] [Thread-189219] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:40:10.566 [DEBUG] [Thread-189219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:40:10.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:40:10.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:40:10.568 [DEBUG] [Thread-189219] [transport.py] [_log()] userauth is OK
2026-04-12T12:40:10.568 [DEBUG] [Thread-189219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:40:10.568 [DEBUG] [Thread-189219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:40:10.568 [DEBUG] [Thread-189219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:40:10.568 [DEBUG] [Thread-189219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:40:10.588 [INFO] [Thread-189219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:40:10.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:40:15.917 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:15.919 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:20.190 [DEBUG] [Thread-189219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:40:20.191 [DEBUG] [Thread-189219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:40:20.191 [DEBUG] [Thread-189219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:40:20.231 [DEBUG] [Thread-189219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:40:20.231 [DEBUG] [Thread-189219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:40:20.234 [DEBUG] [Thread-189219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:40:20.267 [DEBUG] [Thread-189221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:20.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:40:20.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:40:20.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:40:20.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:40:20.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:40:20.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:40:20.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:40:20.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:40:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:40:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.443858 -999.00  +12.20  10.66     89  +10.50 1 3 1 3 1   888    0 2.24 22.54 ----- 11.9 10.7 290.2 25.6 15.7 -4.9 15.4 -4.3 14.8 -4.3 15.3 -3.7
2026-04-12T12:40:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:40:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:40:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.443858
2026-04-12T12:40:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:40:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:40:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:40:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:40:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:40:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:39:39', tmtdew=1.37308, humidity=91.2839, cloud=0.0, wind=22.0183, temperature=12.7349, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:39:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:40:20.338 [DEBUG] [Thread-189219] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:40:20.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:40:20.438 [DEBUG] [Thread-189223] [transport.py] [_log()] starting thread (client mode): 0xb0f548b0
2026-04-12T12:40:20.438 [DEBUG] [Thread-189223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:40:20.456 [DEBUG] [Thread-189223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:40:20.456 [INFO] [Thread-189223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:40:20.467 [DEBUG] [Thread-189223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:40:20.467 [DEBUG] [Thread-189223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:40:20.467 [DEBUG] [Thread-189223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:40:20.467 [DEBUG] [Thread-189223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] client lang: <none>
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] server lang: <none>
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] kex follows: False
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] Compression: none
2026-04-12T12:40:20.468 [DEBUG] [Thread-189223] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:40:20.523 [DEBUG] [Thread-189223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:40:20.524 [DEBUG] [Thread-189223] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:40:20.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:40:20.525 [DEBUG] [Thread-189223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:40:20.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:40:20.580 [DEBUG] [Thread-189223] [transport.py] [_log()] userauth is OK
2026-04-12T12:40:20.580 [DEBUG] [Thread-189223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:40:20.580 [DEBUG] [Thread-189223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:40:20.580 [DEBUG] [Thread-189223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:40:20.580 [DEBUG] [Thread-189223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:40:20.599 [INFO] [Thread-189223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:40:20.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:40:20.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:40:21.494 [DEBUG] [Thread-189223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:40:21.494 [DEBUG] [Thread-189223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:40:21.542 [DEBUG] [Thread-189223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:40:21.542 [DEBUG] [Thread-189223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:40:21.551 [DEBUG] [Thread-189223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:40:21.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:40:21.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:40:21.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:40:21.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:40:21.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:40:21.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:40:21.588 [DEBUG] [Thread-189223] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:40:34.489 [DEBUG] [Thread-189225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:35.307 [DEBUG] [Thread-189226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:50.358 [DEBUG] [Thread-189227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:40:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:40:51.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:40:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:40:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 40, 15), 0.74993, 95.059, 0.0, 20.7324, 12.1343, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:40:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:40:15
2026-04-12T12:40:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:40:53.534 [DEBUG] [Thread-189228] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-12T12:40:53.534 [DEBUG] [Thread-189228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:40:53.553 [DEBUG] [Thread-189228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:40:53.553 [INFO] [Thread-189228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:40:53.554 [DEBUG] [Thread-189228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:40:53.554 [DEBUG] [Thread-189228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] client lang: <none>
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] server lang: <none>
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] kex follows: False
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:40:53.555 [DEBUG] [Thread-189228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:40:53.556 [DEBUG] [Thread-189228] [transport.py] [_log()] Compression: none
2026-04-12T12:40:53.556 [DEBUG] [Thread-189228] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:40:53.567 [DEBUG] [Thread-189228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:40:53.568 [DEBUG] [Thread-189228] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:40:53.568 [DEBUG] [Thread-189228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:40:53.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:40:53.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:40:53.571 [DEBUG] [Thread-189228] [transport.py] [_log()] userauth is OK
2026-04-12T12:40:53.571 [DEBUG] [Thread-189228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:40:53.571 [DEBUG] [Thread-189228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:40:53.572 [DEBUG] [Thread-189228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:40:53.572 [DEBUG] [Thread-189228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:40:53.596 [INFO] [Thread-189228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:40:53.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:40:54.193 [DEBUG] [Thread-189228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:40:54.193 [DEBUG] [Thread-189228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:40:54.194 [DEBUG] [Thread-189228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:40:54.234 [DEBUG] [Thread-189228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:40:54.234 [DEBUG] [Thread-189228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:40:54.238 [DEBUG] [Thread-189228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:40:54.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:40:54.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:40:54.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:40:54.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:40:54.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:40:54.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:40:54.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:40:54.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:40:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:40:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.444900 -999.00  +12.20  16.23     89  +10.40 1 3 1 3 1   888    0 2.16 19.11 ----- 16.3 16.2 277.6 25.2 15.6 -5.5 15.2 -3.9 14.6 -4.7 15.2 -4.4
2026-04-12T12:40:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:40:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:40:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.444900
2026-04-12T12:40:54.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:40:54.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:40:54.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:40:54.263 [DEBUG] [Thread-189228] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:40:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:40:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:40:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:40:15', tmtdew=0.74993, humidity=95.059, cloud=0.0, wind=20.7324, temperature=12.1343, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:40:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:40:54.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:40:54.357 [DEBUG] [Thread-189231] [transport.py] [_log()] starting thread (client mode): 0xae52df90
2026-04-12T12:40:54.357 [DEBUG] [Thread-189231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:40:54.374 [DEBUG] [Thread-189231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:40:54.374 [INFO] [Thread-189231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:40:54.381 [DEBUG] [Thread-189231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] client lang: <none>
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] server lang: <none>
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] kex follows: False
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:40:54.382 [DEBUG] [Thread-189231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:40:54.383 [DEBUG] [Thread-189231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:40:54.383 [DEBUG] [Thread-189231] [transport.py] [_log()] Compression: none
2026-04-12T12:40:54.383 [DEBUG] [Thread-189231] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:40:54.439 [DEBUG] [Thread-189231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:40:54.439 [DEBUG] [Thread-189231] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:40:54.440 [DEBUG] [Thread-189231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:40:54.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:40:54.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:40:54.495 [DEBUG] [Thread-189231] [transport.py] [_log()] userauth is OK
2026-04-12T12:40:54.495 [DEBUG] [Thread-189231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:40:54.496 [DEBUG] [Thread-189231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:40:54.496 [DEBUG] [Thread-189231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:40:54.496 [DEBUG] [Thread-189231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:40:54.519 [INFO] [Thread-189231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:40:54.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:40:54.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:40:55.357 [DEBUG] [Thread-189231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:40:55.357 [DEBUG] [Thread-189231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:40:55.405 [DEBUG] [Thread-189231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:40:55.405 [DEBUG] [Thread-189231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:40:55.416 [DEBUG] [Thread-189231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:40:55.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:40:55.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:40:55.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:40:55.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:40:55.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:40:55.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:40:55.453 [DEBUG] [Thread-189231] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:41:05.392 [DEBUG] [Thread-189233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:41:16.087 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:41:16.088 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:41:20.444 [DEBUG] [Thread-189234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:41:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:41:25.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:41:25.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:41:26.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 40, 50), 1.4012, 91.1181, 0.0, 27.5573, 12.8012, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:41:26.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:40:50
2026-04-12T12:41:27.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:41:27.296 [DEBUG] [Thread-189235] [transport.py] [_log()] starting thread (client mode): 0xae52cfd0
2026-04-12T12:41:27.296 [DEBUG] [Thread-189235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:41:27.313 [DEBUG] [Thread-189235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:41:27.313 [INFO] [Thread-189235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] client lang: <none>
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] server lang: <none>
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] kex follows: False
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] Compression: none
2026-04-12T12:41:27.315 [DEBUG] [Thread-189235] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:41:27.329 [DEBUG] [Thread-189235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:41:27.329 [DEBUG] [Thread-189235] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:41:27.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:41:27.331 [DEBUG] [Thread-189235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:41:27.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:41:27.332 [DEBUG] [Thread-189235] [transport.py] [_log()] userauth is OK
2026-04-12T12:41:27.333 [DEBUG] [Thread-189235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:41:27.333 [DEBUG] [Thread-189235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:41:27.333 [DEBUG] [Thread-189235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:41:27.333 [DEBUG] [Thread-189235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:41:27.351 [INFO] [Thread-189235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:41:27.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:41:27.957 [DEBUG] [Thread-189235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:41:27.957 [DEBUG] [Thread-189235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:41:27.958 [DEBUG] [Thread-189235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:41:27.999 [DEBUG] [Thread-189235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:41:27.999 [DEBUG] [Thread-189235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:41:28.002 [DEBUG] [Thread-189235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:41:28.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:41:28.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:41:28.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:41:28.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:41:28.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:41:28.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:41:28.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:41:28.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:41:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:41:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.445247 -999.00  +12.20  13.14     89  +10.50 1 3 1 3 1   888    0 2.16 18.64 ----- 18.3 13.1 294.0 17.1 15.7 -4.8 15.3 -4.0 14.7 -4.2 15.3 -3.9
2026-04-12T12:41:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:41:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:41:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.445247
2026-04-12T12:41:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:41:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:41:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:41:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:41:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:41:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:40:50', tmtdew=1.4012, humidity=91.1181, cloud=0.0, wind=27.5573, temperature=12.8012, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:41:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:41:28.018 [DEBUG] [Thread-189235] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:41:28.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:41:28.116 [DEBUG] [Thread-189238] [transport.py] [_log()] starting thread (client mode): 0xa796af20
2026-04-12T12:41:28.116 [DEBUG] [Thread-189238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:41:28.130 [DEBUG] [Thread-189238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:41:28.130 [INFO] [Thread-189238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] client lang: <none>
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] server lang: <none>
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] kex follows: False
2026-04-12T12:41:28.138 [DEBUG] [Thread-189238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:41:28.139 [DEBUG] [Thread-189238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:41:28.139 [DEBUG] [Thread-189238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:41:28.139 [DEBUG] [Thread-189238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:41:28.139 [DEBUG] [Thread-189238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:41:28.139 [DEBUG] [Thread-189238] [transport.py] [_log()] Compression: none
2026-04-12T12:41:28.139 [DEBUG] [Thread-189238] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:41:28.195 [DEBUG] [Thread-189238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:41:28.196 [DEBUG] [Thread-189238] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:41:28.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:41:28.197 [DEBUG] [Thread-189238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:41:28.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:41:28.252 [DEBUG] [Thread-189238] [transport.py] [_log()] userauth is OK
2026-04-12T12:41:28.252 [DEBUG] [Thread-189238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:41:28.253 [DEBUG] [Thread-189238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:41:28.253 [DEBUG] [Thread-189238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:41:28.253 [DEBUG] [Thread-189238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:41:28.272 [INFO] [Thread-189238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:41:28.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:41:28.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:41:29.101 [DEBUG] [Thread-189238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:41:29.102 [DEBUG] [Thread-189238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:41:29.149 [DEBUG] [Thread-189238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:41:29.149 [DEBUG] [Thread-189238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:41:29.159 [DEBUG] [Thread-189238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:41:29.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:41:29.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:41:29.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:41:29.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:41:29.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:41:29.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:41:29.196 [DEBUG] [Thread-189238] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:41:34.551 [DEBUG] [Thread-189240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:41:35.479 [DEBUG] [Thread-189241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:41:50.534 [DEBUG] [Thread-189242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:41:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:41:59.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:41:59.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:42:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 41, 26), 0.810185, 94.6943, 0.0, 19.8504, 12.1511, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:42:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:41:26
2026-04-12T12:42:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:42:01.132 [DEBUG] [Thread-189243] [transport.py] [_log()] starting thread (client mode): 0xae52f790
2026-04-12T12:42:01.132 [DEBUG] [Thread-189243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:42:01.150 [DEBUG] [Thread-189243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:42:01.151 [INFO] [Thread-189243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:42:01.153 [DEBUG] [Thread-189243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:42:01.153 [DEBUG] [Thread-189243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:42:01.153 [DEBUG] [Thread-189243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:42:01.153 [DEBUG] [Thread-189243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:01.153 [DEBUG] [Thread-189243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] client lang: <none>
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] server lang: <none>
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] kex follows: False
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] Compression: none
2026-04-12T12:42:01.154 [DEBUG] [Thread-189243] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:42:01.162 [DEBUG] [Thread-189243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:42:01.162 [DEBUG] [Thread-189243] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:42:01.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:42:01.162 [DEBUG] [Thread-189243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:42:01.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:42:01.163 [DEBUG] [Thread-189243] [transport.py] [_log()] userauth is OK
2026-04-12T12:42:01.163 [DEBUG] [Thread-189243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:42:01.163 [DEBUG] [Thread-189243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:42:01.163 [DEBUG] [Thread-189243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:42:01.163 [DEBUG] [Thread-189243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:42:01.172 [INFO] [Thread-189243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:42:01.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:42:01.744 [DEBUG] [Thread-189243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:42:01.744 [DEBUG] [Thread-189243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:42:01.745 [DEBUG] [Thread-189243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:42:01.785 [DEBUG] [Thread-189243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:42:01.785 [DEBUG] [Thread-189243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:42:01.788 [DEBUG] [Thread-189243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:42:01.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:42:01.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:42:01.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:42:01.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:42:01.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:42:01.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:42:01.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:42:01.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.445594 -999.00  +12.20  21.14     89  +10.50 1 3 1 3 1   888    0 2.13 17.81 ----- 20.6 21.1 290.8 23.6 15.6 -5.2 15.2 -4.2 14.6 -3.3 15.3 -3.7
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.445594
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:42:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:41:26', tmtdew=0.810185, humidity=94.6943, cloud=0.0, wind=19.8504, temperature=12.1511, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:41:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:42:01.804 [DEBUG] [Thread-189243] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:42:01.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:42:01.889 [DEBUG] [Thread-189246] [transport.py] [_log()] starting thread (client mode): 0xb0fcfb80
2026-04-12T12:42:01.889 [DEBUG] [Thread-189246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:42:01.904 [DEBUG] [Thread-189246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:42:01.905 [INFO] [Thread-189246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:42:01.912 [DEBUG] [Thread-189246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:42:01.912 [DEBUG] [Thread-189246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:42:01.912 [DEBUG] [Thread-189246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:42:01.912 [DEBUG] [Thread-189246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:01.912 [DEBUG] [Thread-189246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] client lang: <none>
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] server lang: <none>
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] kex follows: False
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] Compression: none
2026-04-12T12:42:01.913 [DEBUG] [Thread-189246] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:42:01.972 [DEBUG] [Thread-189246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:42:01.972 [DEBUG] [Thread-189246] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:42:01.973 [DEBUG] [Thread-189246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:42:01.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:42:01.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:42:02.027 [DEBUG] [Thread-189246] [transport.py] [_log()] userauth is OK
2026-04-12T12:42:02.028 [DEBUG] [Thread-189246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:42:02.028 [DEBUG] [Thread-189246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:42:02.028 [DEBUG] [Thread-189246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:42:02.028 [DEBUG] [Thread-189246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:42:02.047 [INFO] [Thread-189246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:42:02.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:42:02.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:42:02.924 [DEBUG] [Thread-189246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:42:02.924 [DEBUG] [Thread-189246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:42:02.976 [DEBUG] [Thread-189246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:42:02.977 [DEBUG] [Thread-189246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:42:02.986 [DEBUG] [Thread-189246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:42:02.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:42:02.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:42:03.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:42:03.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:42:03.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:42:03.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:42:03.021 [DEBUG] [Thread-189246] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:42:05.573 [DEBUG] [Thread-189248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:42:16.243 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:42:16.244 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:42:20.630 [DEBUG] [Thread-189249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:42:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:42:33.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:42:33.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:42:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 42, 2), 0.800045, 94.7606, 0.0, 18.6509, 12.234, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:42:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:42:02
2026-04-12T12:42:34.596 [DEBUG] [Thread-189250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:42:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:42:34.828 [DEBUG] [Thread-189251] [transport.py] [_log()] starting thread (client mode): 0xb0fb66b0
2026-04-12T12:42:34.828 [DEBUG] [Thread-189251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:42:34.846 [DEBUG] [Thread-189251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:42:34.846 [INFO] [Thread-189251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:42:34.849 [DEBUG] [Thread-189251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:42:34.849 [DEBUG] [Thread-189251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:42:34.849 [DEBUG] [Thread-189251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:42:34.849 [DEBUG] [Thread-189251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:34.849 [DEBUG] [Thread-189251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:34.849 [DEBUG] [Thread-189251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] client lang: <none>
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] server lang: <none>
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] kex follows: False
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] Compression: none
2026-04-12T12:42:34.850 [DEBUG] [Thread-189251] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:42:34.869 [DEBUG] [Thread-189251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:42:34.869 [DEBUG] [Thread-189251] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:42:34.870 [DEBUG] [Thread-189251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:42:34.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:42:34.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:42:34.872 [DEBUG] [Thread-189251] [transport.py] [_log()] userauth is OK
2026-04-12T12:42:34.872 [DEBUG] [Thread-189251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:42:34.872 [DEBUG] [Thread-189251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:42:34.872 [DEBUG] [Thread-189251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:42:34.872 [DEBUG] [Thread-189251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:42:34.896 [INFO] [Thread-189251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:42:34.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:42:35.523 [DEBUG] [Thread-189251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:42:35.523 [DEBUG] [Thread-189251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:42:35.524 [DEBUG] [Thread-189251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:42:35.564 [DEBUG] [Thread-189251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:42:35.564 [DEBUG] [Thread-189251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:42:35.568 [DEBUG] [Thread-189251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:42:35.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:42:35.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:42:35.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:42:35.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:42:35.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:42:35.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:42:35.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:42:35.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:42:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:42:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.445941 -999.00  +12.20  16.80     89  +10.50 1 3 1 3 1   888    0 2.16 17.89 ----- 15.6 16.8 274.6 27.6 15.6 -5.2 15.2 -4.2 14.7 -3.7 15.3 -3.7
2026-04-12T12:42:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:42:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:42:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.445941
2026-04-12T12:42:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:42:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:42:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:42:35.598 [DEBUG] [Thread-189251] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:42:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:42:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:42:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:42:02', tmtdew=0.800045, humidity=94.7606, cloud=0.0, wind=18.6509, temperature=12.234, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:42:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:42:35.665 [DEBUG] [Thread-189254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:42:35.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:42:35.693 [DEBUG] [Thread-189255] [transport.py] [_log()] starting thread (client mode): 0xae52ed70
2026-04-12T12:42:35.693 [DEBUG] [Thread-189255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:42:35.709 [DEBUG] [Thread-189255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:42:35.709 [INFO] [Thread-189255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] client lang: <none>
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] server lang: <none>
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] kex follows: False
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:42:35.717 [DEBUG] [Thread-189255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:42:35.718 [DEBUG] [Thread-189255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:42:35.718 [DEBUG] [Thread-189255] [transport.py] [_log()] Compression: none
2026-04-12T12:42:35.718 [DEBUG] [Thread-189255] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:42:35.775 [DEBUG] [Thread-189255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:42:35.776 [DEBUG] [Thread-189255] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:42:35.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:42:35.777 [DEBUG] [Thread-189255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:42:35.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:42:35.835 [DEBUG] [Thread-189255] [transport.py] [_log()] userauth is OK
2026-04-12T12:42:35.835 [DEBUG] [Thread-189255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:42:35.835 [DEBUG] [Thread-189255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:42:35.835 [DEBUG] [Thread-189255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:42:35.835 [DEBUG] [Thread-189255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:42:35.858 [INFO] [Thread-189255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:42:35.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:42:35.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:42:36.651 [DEBUG] [Thread-189255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:42:36.652 [DEBUG] [Thread-189255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:42:36.700 [DEBUG] [Thread-189255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:42:36.701 [DEBUG] [Thread-189255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:42:36.710 [DEBUG] [Thread-189255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:42:36.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:42:36.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:42:36.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:42:36.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:42:36.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:42:36.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:42:36.752 [DEBUG] [Thread-189255] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:42:50.708 [DEBUG] [Thread-189257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:43:05.744 [DEBUG] [Thread-189258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:43:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:43:06.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:43:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:43:08.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 42, 38), 1.49409, 90.5551, 0.0, 21.8066, 12.7353, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:43:08.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:42:38
2026-04-12T12:43:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:43:08.583 [DEBUG] [Thread-189259] [transport.py] [_log()] starting thread (client mode): 0xb0fcd840
2026-04-12T12:43:08.583 [DEBUG] [Thread-189259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:43:08.596 [DEBUG] [Thread-189259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:43:08.596 [INFO] [Thread-189259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:43:08.598 [DEBUG] [Thread-189259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:43:08.598 [DEBUG] [Thread-189259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:43:08.598 [DEBUG] [Thread-189259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:43:08.598 [DEBUG] [Thread-189259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] client lang: <none>
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] server lang: <none>
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] kex follows: False
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] Compression: none
2026-04-12T12:43:08.599 [DEBUG] [Thread-189259] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:43:08.607 [DEBUG] [Thread-189259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:43:08.608 [DEBUG] [Thread-189259] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:43:08.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:43:08.608 [DEBUG] [Thread-189259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:43:08.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:43:08.609 [DEBUG] [Thread-189259] [transport.py] [_log()] userauth is OK
2026-04-12T12:43:08.609 [DEBUG] [Thread-189259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:43:08.609 [DEBUG] [Thread-189259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:43:08.609 [DEBUG] [Thread-189259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:43:08.610 [DEBUG] [Thread-189259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:43:08.622 [INFO] [Thread-189259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:43:08.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:43:09.212 [DEBUG] [Thread-189259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:43:09.212 [DEBUG] [Thread-189259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:43:09.213 [DEBUG] [Thread-189259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:43:09.253 [DEBUG] [Thread-189259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:43:09.253 [DEBUG] [Thread-189259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:43:09.256 [DEBUG] [Thread-189259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:43:09.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:43:09.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:43:09.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:43:09.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:43:09.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:43:09.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:43:09.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:43:09.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:43:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:43:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.446288 -999.00  +12.20  17.45     89  +10.50 1 3 1 3 1   888    0 2.08 16.48 ----- 13.2 17.4 273.6 21.2 15.7 -5.0 15.2 -4.2 14.8 -3.7 15.2 -4.0
2026-04-12T12:43:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:43:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:43:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.446288
2026-04-12T12:43:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:43:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:43:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:43:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:43:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:43:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:42:38', tmtdew=1.49409, humidity=90.5551, cloud=0.0, wind=21.8066, temperature=12.7353, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:42:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:43:09.282 [DEBUG] [Thread-189259] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:43:09.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:43:09.375 [DEBUG] [Thread-189262] [transport.py] [_log()] starting thread (client mode): 0xa796ac20
2026-04-12T12:43:09.376 [DEBUG] [Thread-189262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:43:09.391 [DEBUG] [Thread-189262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:43:09.391 [INFO] [Thread-189262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:43:09.398 [DEBUG] [Thread-189262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] client lang: <none>
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] server lang: <none>
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] kex follows: False
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] Compression: none
2026-04-12T12:43:09.399 [DEBUG] [Thread-189262] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:43:09.455 [DEBUG] [Thread-189262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:43:09.456 [DEBUG] [Thread-189262] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:43:09.465 [DEBUG] [Thread-189262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:43:09.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:43:09.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:43:09.511 [DEBUG] [Thread-189262] [transport.py] [_log()] userauth is OK
2026-04-12T12:43:09.512 [DEBUG] [Thread-189262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:43:09.512 [DEBUG] [Thread-189262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:43:09.512 [DEBUG] [Thread-189262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:43:09.512 [DEBUG] [Thread-189262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:43:09.531 [INFO] [Thread-189262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:43:09.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:43:09.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:43:10.351 [DEBUG] [Thread-189262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:43:10.351 [DEBUG] [Thread-189262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:43:10.399 [DEBUG] [Thread-189262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:43:10.399 [DEBUG] [Thread-189262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:43:10.408 [DEBUG] [Thread-189262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:43:10.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:43:10.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:43:10.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:43:10.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:43:10.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:43:10.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:43:10.445 [DEBUG] [Thread-189262] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:43:16.386 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:43:16.388 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:43:20.780 [DEBUG] [Thread-189264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:43:34.654 [DEBUG] [Thread-189265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:43:35.833 [DEBUG] [Thread-189266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:43:40.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:43:40.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:43:40.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:43:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 43, 14), 0.821375, 94.6283, 0.0, 18.7398, 12.1179, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:43:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:43:14
2026-04-12T12:43:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:43:42.317 [DEBUG] [Thread-189267] [transport.py] [_log()] starting thread (client mode): 0xae515360
2026-04-12T12:43:42.317 [DEBUG] [Thread-189267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:43:42.335 [DEBUG] [Thread-189267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:43:42.335 [INFO] [Thread-189267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:43:42.338 [DEBUG] [Thread-189267] [transport.py] [_log()] client lang: <none>
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] server lang: <none>
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] kex follows: False
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] Compression: none
2026-04-12T12:43:42.339 [DEBUG] [Thread-189267] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:43:42.356 [DEBUG] [Thread-189267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:43:42.356 [DEBUG] [Thread-189267] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:43:42.357 [DEBUG] [Thread-189267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:43:42.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:43:42.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:43:42.359 [DEBUG] [Thread-189267] [transport.py] [_log()] userauth is OK
2026-04-12T12:43:42.359 [DEBUG] [Thread-189267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:43:42.359 [DEBUG] [Thread-189267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:43:42.359 [DEBUG] [Thread-189267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:43:42.359 [DEBUG] [Thread-189267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:43:42.377 [INFO] [Thread-189267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:43:42.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:43:42.999 [DEBUG] [Thread-189267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:43:42.999 [DEBUG] [Thread-189267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:43:42.999 [DEBUG] [Thread-189267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:43:43.040 [DEBUG] [Thread-189267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:43:43.040 [DEBUG] [Thread-189267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:43:43.042 [DEBUG] [Thread-189267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:43:43.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:43:43.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:43:43.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:43:43.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:43:43.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:43:43.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:43:43.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:43:43.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:43:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:43:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.446636 -999.00  +12.30  15.06     89  +10.60 1 3 1 3 1   888    0 2.10 16.20 ----- 14.0 15.1 273.2 20.1 15.7 -4.7 15.3 -4.1 14.8 -4.1 15.3 -4.3
2026-04-12T12:43:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:43:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:43:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.446636
2026-04-12T12:43:43.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:43:43.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:43:43.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:43:43.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:43:43.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:43:43.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:43:14', tmtdew=0.821375, humidity=94.6283, cloud=0.0, wind=18.7398, temperature=12.1179, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:43:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:43:43.066 [DEBUG] [Thread-189267] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:43:43.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:43:43.157 [DEBUG] [Thread-189270] [transport.py] [_log()] starting thread (client mode): 0xae52c520
2026-04-12T12:43:43.157 [DEBUG] [Thread-189270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:43:43.171 [DEBUG] [Thread-189270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:43:43.172 [INFO] [Thread-189270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:43:43.179 [DEBUG] [Thread-189270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:43:43.179 [DEBUG] [Thread-189270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:43:43.179 [DEBUG] [Thread-189270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:43:43.179 [DEBUG] [Thread-189270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:43.179 [DEBUG] [Thread-189270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:43:43.179 [DEBUG] [Thread-189270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] client lang: <none>
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] server lang: <none>
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] kex follows: False
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:43:43.180 [DEBUG] [Thread-189270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:43:43.181 [DEBUG] [Thread-189270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:43:43.181 [DEBUG] [Thread-189270] [transport.py] [_log()] Compression: none
2026-04-12T12:43:43.181 [DEBUG] [Thread-189270] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:43:43.238 [DEBUG] [Thread-189270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:43:43.239 [DEBUG] [Thread-189270] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:43:43.239 [DEBUG] [Thread-189270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:43:43.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:43:43.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:43:43.295 [DEBUG] [Thread-189270] [transport.py] [_log()] userauth is OK
2026-04-12T12:43:43.295 [DEBUG] [Thread-189270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:43:43.295 [DEBUG] [Thread-189270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:43:43.295 [DEBUG] [Thread-189270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:43:43.295 [DEBUG] [Thread-189270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:43:43.317 [INFO] [Thread-189270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:43:43.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:43:43.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:43:44.124 [DEBUG] [Thread-189270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:43:44.124 [DEBUG] [Thread-189270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:43:44.173 [DEBUG] [Thread-189270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:43:44.173 [DEBUG] [Thread-189270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:43:44.181 [DEBUG] [Thread-189270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:43:44.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:43:44.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:43:44.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:43:44.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:43:44.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:43:44.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:43:44.215 [DEBUG] [Thread-189270] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:43:50.876 [DEBUG] [Thread-189272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:05.933 [DEBUG] [Thread-189273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:44:14.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:44:14.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:44:15.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 43, 50), 1.45794, 90.787, 0.0, 20.5718, 12.9673, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:44:15.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:43:50
2026-04-12T12:44:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:44:16.241 [DEBUG] [Thread-189274] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-12T12:44:16.241 [DEBUG] [Thread-189274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:44:16.260 [DEBUG] [Thread-189274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:44:16.261 [INFO] [Thread-189274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] client lang: <none>
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] server lang: <none>
2026-04-12T12:44:16.262 [DEBUG] [Thread-189274] [transport.py] [_log()] kex follows: False
2026-04-12T12:44:16.263 [DEBUG] [Thread-189274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:44:16.263 [DEBUG] [Thread-189274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:44:16.263 [DEBUG] [Thread-189274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:44:16.263 [DEBUG] [Thread-189274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:44:16.263 [DEBUG] [Thread-189274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:44:16.263 [DEBUG] [Thread-189274] [transport.py] [_log()] Compression: none
2026-04-12T12:44:16.263 [DEBUG] [Thread-189274] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:44:16.272 [DEBUG] [Thread-189274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:44:16.273 [DEBUG] [Thread-189274] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:44:16.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:44:16.274 [DEBUG] [Thread-189274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:44:16.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:44:16.276 [DEBUG] [Thread-189274] [transport.py] [_log()] userauth is OK
2026-04-12T12:44:16.276 [DEBUG] [Thread-189274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:44:16.277 [DEBUG] [Thread-189274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:44:16.277 [DEBUG] [Thread-189274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:44:16.277 [DEBUG] [Thread-189274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:44:16.302 [INFO] [Thread-189274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:44:16.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:44:16.536 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:16.537 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:16.917 [DEBUG] [Thread-189274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:44:16.917 [DEBUG] [Thread-189274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:44:16.918 [DEBUG] [Thread-189274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:44:16.958 [DEBUG] [Thread-189274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:44:16.958 [DEBUG] [Thread-189274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:44:16.962 [DEBUG] [Thread-189274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:44:16.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:44:16.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:44:16.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:44:16.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:44:16.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:44:16.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:44:16.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:44:16.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:44:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:44:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.446983 -999.00  +12.30  13.30     89  +10.60 1 3 1 3 1   888    0 2.12 16.27 ----- 18.2 13.3 264.4 23.0 15.7 -5.2 15.3 -4.1 14.8 -3.5 15.2 -4.4
2026-04-12T12:44:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:44:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:44:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.446983
2026-04-12T12:44:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:44:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:44:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:44:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:44:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:44:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:43:50', tmtdew=1.45794, humidity=90.787, cloud=0.0, wind=20.5718, temperature=12.9673, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:43:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:44:16.989 [DEBUG] [Thread-189274] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:44:17.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:44:17.075 [DEBUG] [Thread-189277] [transport.py] [_log()] starting thread (client mode): 0xae52fd00
2026-04-12T12:44:17.075 [DEBUG] [Thread-189277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:44:17.090 [DEBUG] [Thread-189277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:44:17.090 [INFO] [Thread-189277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:44:17.098 [DEBUG] [Thread-189277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:44:17.098 [DEBUG] [Thread-189277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:44:17.098 [DEBUG] [Thread-189277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] client lang: <none>
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] server lang: <none>
2026-04-12T12:44:17.099 [DEBUG] [Thread-189277] [transport.py] [_log()] kex follows: False
2026-04-12T12:44:17.100 [DEBUG] [Thread-189277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:44:17.100 [DEBUG] [Thread-189277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:44:17.100 [DEBUG] [Thread-189277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:44:17.100 [DEBUG] [Thread-189277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:44:17.100 [DEBUG] [Thread-189277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:44:17.100 [DEBUG] [Thread-189277] [transport.py] [_log()] Compression: none
2026-04-12T12:44:17.100 [DEBUG] [Thread-189277] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:44:17.156 [DEBUG] [Thread-189277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:44:17.156 [DEBUG] [Thread-189277] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:44:17.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:44:17.158 [DEBUG] [Thread-189277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:44:17.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:44:17.211 [DEBUG] [Thread-189277] [transport.py] [_log()] userauth is OK
2026-04-12T12:44:17.212 [DEBUG] [Thread-189277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:44:17.212 [DEBUG] [Thread-189277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:44:17.212 [DEBUG] [Thread-189277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:44:17.212 [DEBUG] [Thread-189277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:44:17.231 [INFO] [Thread-189277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:44:17.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:44:17.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:44:18.113 [DEBUG] [Thread-189277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:44:18.113 [DEBUG] [Thread-189277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:44:18.161 [DEBUG] [Thread-189277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:44:18.161 [DEBUG] [Thread-189277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:44:18.170 [DEBUG] [Thread-189277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:44:18.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:44:18.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:44:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:44:18.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:44:18.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:44:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:44:18.207 [DEBUG] [Thread-189277] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:44:20.971 [DEBUG] [Thread-189279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:34.705 [DEBUG] [Thread-189280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:36.034 [DEBUG] [Thread-189281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:44:48.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:44:48.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:44:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 44, 25), 0.75681, 94.7277, 0.0, 24.0494, 12.2502, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:44:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:44:25
2026-04-12T12:44:49.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:44:50.138 [DEBUG] [Thread-189282] [transport.py] [_log()] starting thread (client mode): 0xae52d6f0
2026-04-12T12:44:50.138 [DEBUG] [Thread-189282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:44:50.159 [DEBUG] [Thread-189282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:44:50.159 [INFO] [Thread-189282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:44:50.162 [DEBUG] [Thread-189282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:44:50.162 [DEBUG] [Thread-189282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:44:50.162 [DEBUG] [Thread-189282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:44:50.162 [DEBUG] [Thread-189282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:50.162 [DEBUG] [Thread-189282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] client lang: <none>
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] server lang: <none>
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] kex follows: False
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:44:50.163 [DEBUG] [Thread-189282] [transport.py] [_log()] Compression: none
2026-04-12T12:44:50.164 [DEBUG] [Thread-189282] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:44:50.181 [DEBUG] [Thread-189282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:44:50.181 [DEBUG] [Thread-189282] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:44:50.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:44:50.182 [DEBUG] [Thread-189282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:44:50.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:44:50.184 [DEBUG] [Thread-189282] [transport.py] [_log()] userauth is OK
2026-04-12T12:44:50.184 [DEBUG] [Thread-189282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:44:50.184 [DEBUG] [Thread-189282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:44:50.185 [DEBUG] [Thread-189282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:44:50.185 [DEBUG] [Thread-189282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:44:50.209 [INFO] [Thread-189282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:44:50.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:44:50.834 [DEBUG] [Thread-189282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:44:50.835 [DEBUG] [Thread-189282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:44:50.835 [DEBUG] [Thread-189282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:44:50.876 [DEBUG] [Thread-189282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:44:50.877 [DEBUG] [Thread-189282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:44:50.880 [DEBUG] [Thread-189282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:44:50.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:44:50.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:44:50.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:44:50.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:44:50.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:44:50.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:44:50.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:44:50.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:44:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:44:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.447677 -999.00  +12.30  19.62     88  +10.50 1 3 1 3 1   888    0 2.14 15.52 ----- 15.8 19.6 280.0 26.7 15.8 -5.3 15.4 -4.4 14.9 -3.5 15.3 -3.8
2026-04-12T12:44:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:44:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:44:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.447677
2026-04-12T12:44:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:44:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:44:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:44:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:44:50.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:44:50.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:44:25', tmtdew=0.75681, humidity=94.7277, cloud=0.0, wind=24.0494, temperature=12.2502, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:44:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:44:50.908 [DEBUG] [Thread-189282] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:44:50.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:44:51.002 [DEBUG] [Thread-189285] [transport.py] [_log()] starting thread (client mode): 0xb39c72e0
2026-04-12T12:44:51.002 [DEBUG] [Thread-189285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:44:51.017 [DEBUG] [Thread-189285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:44:51.017 [INFO] [Thread-189285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:44:51.024 [DEBUG] [Thread-189285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:44:51.024 [DEBUG] [Thread-189285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] client lang: <none>
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] server lang: <none>
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] kex follows: False
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:44:51.025 [DEBUG] [Thread-189285] [transport.py] [_log()] Compression: none
2026-04-12T12:44:51.026 [DEBUG] [Thread-189285] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:44:51.074 [DEBUG] [Thread-189287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:44:51.082 [DEBUG] [Thread-189285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:44:51.082 [DEBUG] [Thread-189285] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:44:51.082 [DEBUG] [Thread-189285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:44:51.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:44:51.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:44:51.140 [DEBUG] [Thread-189285] [transport.py] [_log()] userauth is OK
2026-04-12T12:44:51.140 [DEBUG] [Thread-189285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:44:51.140 [DEBUG] [Thread-189285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:44:51.140 [DEBUG] [Thread-189285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:44:51.140 [DEBUG] [Thread-189285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:44:51.160 [INFO] [Thread-189285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:44:51.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:44:51.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:44:51.987 [DEBUG] [Thread-189285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:44:51.988 [DEBUG] [Thread-189285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:44:52.040 [DEBUG] [Thread-189285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:44:52.040 [DEBUG] [Thread-189285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:44:52.053 [DEBUG] [Thread-189285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:44:52.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:44:52.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:44:52.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:44:52.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:44:52.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:44:52.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:44:52.091 [DEBUG] [Thread-189285] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:45:06.129 [DEBUG] [Thread-189288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:45:16.680 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:45:16.682 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:45:21.167 [DEBUG] [Thread-189289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:45:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:45:22.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:45:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:45:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 45, 1), 0.76828, 94.6613, 0.0, 21.1212, 12.2833, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:45:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:45:01
2026-04-12T12:45:23.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:45:23.951 [DEBUG] [Thread-189290] [transport.py] [_log()] starting thread (client mode): 0xae5163b0
2026-04-12T12:45:23.952 [DEBUG] [Thread-189290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:45:23.971 [DEBUG] [Thread-189290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:45:23.971 [INFO] [Thread-189290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:45:23.974 [DEBUG] [Thread-189290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:45:23.974 [DEBUG] [Thread-189290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] client lang: <none>
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] server lang: <none>
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] kex follows: False
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:45:23.975 [DEBUG] [Thread-189290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:45:23.976 [DEBUG] [Thread-189290] [transport.py] [_log()] Compression: none
2026-04-12T12:45:23.976 [DEBUG] [Thread-189290] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:45:23.991 [DEBUG] [Thread-189290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:45:23.992 [DEBUG] [Thread-189290] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:45:23.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:45:23.993 [DEBUG] [Thread-189290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:45:23.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:45:23.995 [DEBUG] [Thread-189290] [transport.py] [_log()] userauth is OK
2026-04-12T12:45:23.995 [DEBUG] [Thread-189290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:45:23.995 [DEBUG] [Thread-189290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:45:23.995 [DEBUG] [Thread-189290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:45:23.996 [DEBUG] [Thread-189290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:45:24.020 [INFO] [Thread-189290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:45:24.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:45:27.859 [DEBUG] [Thread-189290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:45:27.859 [DEBUG] [Thread-189290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:45:27.860 [DEBUG] [Thread-189290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:45:27.902 [DEBUG] [Thread-189290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:45:27.902 [DEBUG] [Thread-189290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:45:27.905 [DEBUG] [Thread-189290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:45:27.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:45:27.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:45:27.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:45:27.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:45:27.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:45:27.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:45:27.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:45:27.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:45:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:45:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.447677 -999.00  +12.30  19.62     88  +10.50 1 3 1 3 1   888    0 2.14 15.52 ----- 15.8 19.6 280.0 26.7 15.8 -5.3 15.4 -4.4 14.9 -3.5 15.3 -3.8
2026-04-12T12:45:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:45:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:45:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.447677
2026-04-12T12:45:27.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:45:27.927 [DEBUG] [Thread-189290] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:45:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:45:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:45:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:45:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:45:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:45:01', tmtdew=0.76828, humidity=94.6613, cloud=0.0, wind=21.1212, temperature=12.2833, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:44:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:45:28.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:45:28.028 [DEBUG] [Thread-189293] [transport.py] [_log()] starting thread (client mode): 0xae52c760
2026-04-12T12:45:28.028 [DEBUG] [Thread-189293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:45:28.042 [DEBUG] [Thread-189293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:45:28.042 [INFO] [Thread-189293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:45:28.050 [DEBUG] [Thread-189293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] client lang: <none>
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] server lang: <none>
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] kex follows: False
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:45:28.051 [DEBUG] [Thread-189293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:45:28.052 [DEBUG] [Thread-189293] [transport.py] [_log()] Compression: none
2026-04-12T12:45:28.052 [DEBUG] [Thread-189293] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:45:28.107 [DEBUG] [Thread-189293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:45:28.108 [DEBUG] [Thread-189293] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:45:28.108 [DEBUG] [Thread-189293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:45:28.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:45:28.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:45:28.163 [DEBUG] [Thread-189293] [transport.py] [_log()] userauth is OK
2026-04-12T12:45:28.163 [DEBUG] [Thread-189293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:45:28.164 [DEBUG] [Thread-189293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:45:28.164 [DEBUG] [Thread-189293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:45:28.164 [DEBUG] [Thread-189293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:45:28.182 [INFO] [Thread-189293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:45:28.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:45:28.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:45:29.015 [DEBUG] [Thread-189293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:45:29.016 [DEBUG] [Thread-189293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:45:29.064 [DEBUG] [Thread-189293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:45:29.064 [DEBUG] [Thread-189293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:45:29.074 [DEBUG] [Thread-189293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:45:29.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:45:29.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:45:29.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:45:29.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:45:29.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:45:29.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:45:29.110 [DEBUG] [Thread-189293] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:45:34.758 [DEBUG] [Thread-189295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:45:36.206 [DEBUG] [Thread-189296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:45:51.258 [DEBUG] [Thread-189297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:45:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:45:59.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:45:59.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:46:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 45, 37), 1.57066, 90.1237, 0.0, 19.584, 13.133, 1, 2, 0, 2, 0, 0),)
2026-04-12T12:46:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:45:37
2026-04-12T12:46:00.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:46:00.952 [DEBUG] [Thread-189298] [transport.py] [_log()] starting thread (client mode): 0xb0fcd420
2026-04-12T12:46:00.952 [DEBUG] [Thread-189298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:46:00.972 [DEBUG] [Thread-189298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:46:00.972 [INFO] [Thread-189298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:46:00.976 [DEBUG] [Thread-189298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:46:00.976 [DEBUG] [Thread-189298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:46:00.976 [DEBUG] [Thread-189298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:46:00.976 [DEBUG] [Thread-189298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:00.976 [DEBUG] [Thread-189298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:00.976 [DEBUG] [Thread-189298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:00.976 [DEBUG] [Thread-189298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] client lang: <none>
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] server lang: <none>
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] kex follows: False
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] Compression: none
2026-04-12T12:46:00.977 [DEBUG] [Thread-189298] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:46:00.996 [DEBUG] [Thread-189298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:46:00.996 [DEBUG] [Thread-189298] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:46:00.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:46:00.998 [DEBUG] [Thread-189298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:46:00.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:46:01.000 [DEBUG] [Thread-189298] [transport.py] [_log()] userauth is OK
2026-04-12T12:46:01.000 [DEBUG] [Thread-189298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:46:01.000 [DEBUG] [Thread-189298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:46:01.000 [DEBUG] [Thread-189298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:46:01.000 [DEBUG] [Thread-189298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:46:01.023 [INFO] [Thread-189298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:46:01.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:46:01.737 [DEBUG] [Thread-189298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:46:01.737 [DEBUG] [Thread-189298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:46:01.737 [DEBUG] [Thread-189298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:46:01.778 [DEBUG] [Thread-189298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:46:01.778 [DEBUG] [Thread-189298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:46:01.781 [DEBUG] [Thread-189298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:46:01.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:46:01.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:46:01.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:46:01.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:46:01.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:46:01.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:46:01.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:46:01.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:46:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:46:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.448024 -999.00  +12.30  18.50     89  +10.50 1 3 1 3 1   888    0 2.11 15.68 ----- 21.2 18.5 265.8 21.2 15.8 -5.2 15.4 -4.3 14.8 -5.9 15.3 -3.8
2026-04-12T12:46:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:46:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:46:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.448024
2026-04-12T12:46:01.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:46:01.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:46:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:46:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:46:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:46:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:45:37', tmtdew=1.57066, humidity=90.1237, cloud=0.0, wind=19.584, temperature=13.133, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:45:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:46:01.805 [DEBUG] [Thread-189298] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:46:01.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:46:01.895 [DEBUG] [Thread-189301] [transport.py] [_log()] starting thread (client mode): 0xb0fcf190
2026-04-12T12:46:01.895 [DEBUG] [Thread-189301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:46:01.909 [DEBUG] [Thread-189301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:46:01.910 [INFO] [Thread-189301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:46:01.918 [DEBUG] [Thread-189301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] client lang: <none>
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] server lang: <none>
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] kex follows: False
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] Compression: none
2026-04-12T12:46:01.919 [DEBUG] [Thread-189301] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:46:01.975 [DEBUG] [Thread-189301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:46:01.975 [DEBUG] [Thread-189301] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:46:01.976 [DEBUG] [Thread-189301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:46:01.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:46:01.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:46:02.031 [DEBUG] [Thread-189301] [transport.py] [_log()] userauth is OK
2026-04-12T12:46:02.031 [DEBUG] [Thread-189301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:46:02.031 [DEBUG] [Thread-189301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:46:02.031 [DEBUG] [Thread-189301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:46:02.031 [DEBUG] [Thread-189301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:46:02.044 [INFO] [Thread-189301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:46:02.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:46:02.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:46:02.865 [DEBUG] [Thread-189301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:46:02.865 [DEBUG] [Thread-189301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:46:02.913 [DEBUG] [Thread-189301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:46:02.913 [DEBUG] [Thread-189301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:46:02.923 [DEBUG] [Thread-189301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:46:02.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:46:02.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:46:02.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:46:02.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:46:02.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:46:02.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:46:02.959 [DEBUG] [Thread-189301] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:46:06.296 [DEBUG] [Thread-189303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:46:16.836 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:46:16.837 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:46:21.401 [DEBUG] [Thread-189304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:46:32.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:46:32.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:46:32.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:46:34.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 46, 12), 0.84926, 94.4789, 0.0, 23.8907, 12.4164, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:46:34.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:46:12
2026-04-12T12:46:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:46:34.786 [DEBUG] [Thread-189305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:46:34.899 [DEBUG] [Thread-189306] [transport.py] [_log()] starting thread (client mode): 0xae515570
2026-04-12T12:46:34.900 [DEBUG] [Thread-189306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:46:34.918 [DEBUG] [Thread-189306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:46:34.919 [INFO] [Thread-189306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] client lang: <none>
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] server lang: <none>
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] kex follows: False
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:46:34.922 [DEBUG] [Thread-189306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:46:34.923 [DEBUG] [Thread-189306] [transport.py] [_log()] Compression: none
2026-04-12T12:46:34.923 [DEBUG] [Thread-189306] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:46:34.939 [DEBUG] [Thread-189306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:46:34.939 [DEBUG] [Thread-189306] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:46:34.940 [DEBUG] [Thread-189306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:46:34.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:46:34.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:46:34.942 [DEBUG] [Thread-189306] [transport.py] [_log()] userauth is OK
2026-04-12T12:46:34.942 [DEBUG] [Thread-189306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:46:34.942 [DEBUG] [Thread-189306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:46:34.943 [DEBUG] [Thread-189306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:46:34.943 [DEBUG] [Thread-189306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:46:34.967 [INFO] [Thread-189306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:46:34.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:46:35.571 [DEBUG] [Thread-189306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:46:35.571 [DEBUG] [Thread-189306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:46:35.572 [DEBUG] [Thread-189306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:46:35.612 [DEBUG] [Thread-189306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:46:35.612 [DEBUG] [Thread-189306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:46:35.614 [DEBUG] [Thread-189306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:46:35.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:46:35.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:46:35.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:46:35.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:46:35.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:46:35.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:46:35.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.448719 -999.00  +12.40  12.64     89  +10.60 1 3 1 3 1   888    0 2.07 13.33 ----- 14.6 12.6 284.8 18.6 15.8 -5.6 15.4 -4.3 14.9 -3.8 15.3 -4.5
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.448719
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:46:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:46:12', tmtdew=0.84926, humidity=94.4789, cloud=0.0, wind=23.8907, temperature=12.4164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:46:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:46:35.633 [DEBUG] [Thread-189306] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:46:35.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:46:35.716 [DEBUG] [Thread-189309] [transport.py] [_log()] starting thread (client mode): 0xae52c610
2026-04-12T12:46:35.716 [DEBUG] [Thread-189309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:46:35.731 [DEBUG] [Thread-189309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:46:35.731 [INFO] [Thread-189309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:46:35.739 [DEBUG] [Thread-189309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:46:35.739 [DEBUG] [Thread-189309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:46:35.739 [DEBUG] [Thread-189309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:46:35.739 [DEBUG] [Thread-189309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:35.739 [DEBUG] [Thread-189309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:46:35.739 [DEBUG] [Thread-189309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] client lang: <none>
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] server lang: <none>
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] kex follows: False
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:46:35.740 [DEBUG] [Thread-189309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:46:35.741 [DEBUG] [Thread-189309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:46:35.741 [DEBUG] [Thread-189309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:46:35.741 [DEBUG] [Thread-189309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:46:35.741 [DEBUG] [Thread-189309] [transport.py] [_log()] Compression: none
2026-04-12T12:46:35.741 [DEBUG] [Thread-189309] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:46:35.800 [DEBUG] [Thread-189309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:46:35.800 [DEBUG] [Thread-189309] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:46:35.801 [DEBUG] [Thread-189309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:46:35.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:46:35.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:46:35.860 [DEBUG] [Thread-189309] [transport.py] [_log()] userauth is OK
2026-04-12T12:46:35.860 [DEBUG] [Thread-189309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:46:35.860 [DEBUG] [Thread-189309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:46:35.860 [DEBUG] [Thread-189309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:46:35.860 [DEBUG] [Thread-189309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:46:35.879 [INFO] [Thread-189309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:46:35.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:46:35.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:46:36.439 [DEBUG] [Thread-189311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:46:36.697 [DEBUG] [Thread-189309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:46:36.697 [DEBUG] [Thread-189309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:46:36.745 [DEBUG] [Thread-189309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:46:36.745 [DEBUG] [Thread-189309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:46:36.755 [DEBUG] [Thread-189309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:46:36.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:46:36.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:46:36.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:46:36.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:46:36.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:46:36.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:46:36.792 [DEBUG] [Thread-189309] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:46:51.490 [DEBUG] [Thread-189312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:47:06.531 [DEBUG] [Thread-189313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:47:06.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:47:06.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:47:06.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:47:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 46, 48), 1.66475, 89.5598, 0.0, 21.8772, 13.0665, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:47:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:46:48
2026-04-12T12:47:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:47:08.607 [DEBUG] [Thread-189314] [transport.py] [_log()] starting thread (client mode): 0xb0f43790
2026-04-12T12:47:08.607 [DEBUG] [Thread-189314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:47:08.629 [DEBUG] [Thread-189314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:47:08.629 [INFO] [Thread-189314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:47:08.632 [DEBUG] [Thread-189314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:47:08.632 [DEBUG] [Thread-189314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] client lang: <none>
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] server lang: <none>
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] kex follows: False
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] Compression: none
2026-04-12T12:47:08.633 [DEBUG] [Thread-189314] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:47:08.651 [DEBUG] [Thread-189314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:47:08.651 [DEBUG] [Thread-189314] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:47:08.652 [DEBUG] [Thread-189314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:47:08.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:47:08.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:47:08.654 [DEBUG] [Thread-189314] [transport.py] [_log()] userauth is OK
2026-04-12T12:47:08.654 [DEBUG] [Thread-189314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:47:08.654 [DEBUG] [Thread-189314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:47:08.654 [DEBUG] [Thread-189314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:47:08.654 [DEBUG] [Thread-189314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:47:08.673 [INFO] [Thread-189314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:47:08.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:47:09.259 [DEBUG] [Thread-189314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:47:09.260 [DEBUG] [Thread-189314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:47:09.260 [DEBUG] [Thread-189314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:47:09.301 [DEBUG] [Thread-189314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:47:09.301 [DEBUG] [Thread-189314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:47:09.304 [DEBUG] [Thread-189314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:47:09.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:47:09.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:47:09.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:47:09.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:47:09.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:47:09.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:47:09.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:47:09.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:47:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:47:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.449066 -999.00  +12.30  15.88     89  +10.60 1 3 1 3 1   888    0 2.10 14.55 ----- 13.3 15.9 269.7 23.9 15.7 -5.3 15.4 -4.1 15.0 -3.4 15.3 -4.3
2026-04-12T12:47:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:47:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:47:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.449066
2026-04-12T12:47:09.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:47:09.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:47:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:47:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:47:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:47:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:46:48', tmtdew=1.66475, humidity=89.5598, cloud=0.0, wind=21.8772, temperature=13.0665, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:46:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:47:09.332 [DEBUG] [Thread-189314] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:47:09.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:47:09.427 [DEBUG] [Thread-189317] [transport.py] [_log()] starting thread (client mode): 0xb0f43a00
2026-04-12T12:47:09.427 [DEBUG] [Thread-189317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:47:09.442 [DEBUG] [Thread-189317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:47:09.443 [INFO] [Thread-189317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:47:09.450 [DEBUG] [Thread-189317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] client lang: <none>
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] server lang: <none>
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] kex follows: False
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:47:09.451 [DEBUG] [Thread-189317] [transport.py] [_log()] Compression: none
2026-04-12T12:47:09.452 [DEBUG] [Thread-189317] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:47:09.507 [DEBUG] [Thread-189317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:47:09.508 [DEBUG] [Thread-189317] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:47:09.508 [DEBUG] [Thread-189317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:47:09.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:47:09.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:47:09.563 [DEBUG] [Thread-189317] [transport.py] [_log()] userauth is OK
2026-04-12T12:47:09.564 [DEBUG] [Thread-189317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:47:09.564 [DEBUG] [Thread-189317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:47:09.564 [DEBUG] [Thread-189317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:47:09.564 [DEBUG] [Thread-189317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:47:09.583 [INFO] [Thread-189317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:47:09.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:47:09.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:47:10.393 [DEBUG] [Thread-189317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:47:10.393 [DEBUG] [Thread-189317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:47:10.441 [DEBUG] [Thread-189317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:47:10.441 [DEBUG] [Thread-189317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:47:10.451 [DEBUG] [Thread-189317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:47:10.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:47:10.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:47:10.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:47:10.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:47:10.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:47:10.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:47:10.488 [DEBUG] [Thread-189317] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:47:16.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:47:16.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:47:21.567 [DEBUG] [Thread-189319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:47:34.821 [DEBUG] [Thread-189320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:47:36.660 [DEBUG] [Thread-189321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:47:40.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:47:40.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:47:40.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:47:41.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 47, 24), 0.898545, 94.1804, 0.0, 23.0792, 12.2335, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:47:41.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:47:24
2026-04-12T12:47:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:47:42.402 [DEBUG] [Thread-189322] [transport.py] [_log()] starting thread (client mode): 0xb0f41480
2026-04-12T12:47:42.402 [DEBUG] [Thread-189322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:47:42.412 [DEBUG] [Thread-189322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:47:42.412 [INFO] [Thread-189322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:47:42.413 [DEBUG] [Thread-189322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] client lang: <none>
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] server lang: <none>
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] kex follows: False
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] Compression: none
2026-04-12T12:47:42.414 [DEBUG] [Thread-189322] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:47:42.424 [DEBUG] [Thread-189322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:47:42.425 [DEBUG] [Thread-189322] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:47:42.425 [DEBUG] [Thread-189322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:47:42.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:47:42.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:47:42.426 [DEBUG] [Thread-189322] [transport.py] [_log()] userauth is OK
2026-04-12T12:47:42.426 [DEBUG] [Thread-189322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:47:42.426 [DEBUG] [Thread-189322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:47:42.426 [DEBUG] [Thread-189322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:47:42.426 [DEBUG] [Thread-189322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:47:42.438 [INFO] [Thread-189322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:47:42.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:47:43.011 [DEBUG] [Thread-189322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:47:43.011 [DEBUG] [Thread-189322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:47:43.011 [DEBUG] [Thread-189322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:47:43.051 [DEBUG] [Thread-189322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:47:43.052 [DEBUG] [Thread-189322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:47:43.053 [DEBUG] [Thread-189322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:47:43.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:47:43.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:47:43.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:47:43.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:47:43.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:47:43.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:47:43.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:47:43.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:47:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:47:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.449413 -999.00  +12.30  21.44     88  +10.50 1 3 1 3 1   888    0 2.10 14.16 ----- 20.7 21.4 275.4 24.5 15.8 -5.6 15.4 -4.4 14.7 -4.0 15.4 -4.4
2026-04-12T12:47:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:47:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:47:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.449413
2026-04-12T12:47:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:47:43.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:47:43.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:47:43.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:47:43.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:47:43.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:47:24', tmtdew=0.898545, humidity=94.1804, cloud=0.0, wind=23.0792, temperature=12.2335, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:47:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:47:43.077 [DEBUG] [Thread-189322] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:47:43.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:47:43.172 [DEBUG] [Thread-189325] [transport.py] [_log()] starting thread (client mode): 0xae516710
2026-04-12T12:47:43.172 [DEBUG] [Thread-189325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:47:43.186 [DEBUG] [Thread-189325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:47:43.186 [INFO] [Thread-189325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] client lang: <none>
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] server lang: <none>
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] kex follows: False
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:47:43.194 [DEBUG] [Thread-189325] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:47:43.195 [DEBUG] [Thread-189325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:47:43.195 [DEBUG] [Thread-189325] [transport.py] [_log()] Compression: none
2026-04-12T12:47:43.195 [DEBUG] [Thread-189325] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:47:43.251 [DEBUG] [Thread-189325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:47:43.251 [DEBUG] [Thread-189325] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:47:43.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:47:43.253 [DEBUG] [Thread-189325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:47:43.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:47:43.307 [DEBUG] [Thread-189325] [transport.py] [_log()] userauth is OK
2026-04-12T12:47:43.308 [DEBUG] [Thread-189325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:47:43.308 [DEBUG] [Thread-189325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:47:43.308 [DEBUG] [Thread-189325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:47:43.308 [DEBUG] [Thread-189325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:47:43.327 [INFO] [Thread-189325] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:47:43.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:47:43.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:47:44.155 [DEBUG] [Thread-189325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:47:44.155 [DEBUG] [Thread-189325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:47:44.203 [DEBUG] [Thread-189325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:47:44.203 [DEBUG] [Thread-189325] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:47:44.212 [DEBUG] [Thread-189325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:47:44.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:47:44.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:47:44.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:47:44.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:47:44.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:47:44.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:47:44.249 [DEBUG] [Thread-189325] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:47:51.700 [DEBUG] [Thread-189327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:06.758 [DEBUG] [Thread-189328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:48:14.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:48:14.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:48:15.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 47, 24), 0.898545, 94.1804, 0.0, 21.2792, 12.2835, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:48:15.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:47:24
2026-04-12T12:48:16.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:48:16.233 [DEBUG] [Thread-189329] [transport.py] [_log()] starting thread (client mode): 0xb0f43a30
2026-04-12T12:48:16.233 [DEBUG] [Thread-189329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:48:16.253 [DEBUG] [Thread-189329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:48:16.254 [INFO] [Thread-189329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:48:16.256 [DEBUG] [Thread-189329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:48:16.257 [DEBUG] [Thread-189329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] client lang: <none>
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] server lang: <none>
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] kex follows: False
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:48:16.258 [DEBUG] [Thread-189329] [transport.py] [_log()] Compression: none
2026-04-12T12:48:16.259 [DEBUG] [Thread-189329] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:48:16.278 [DEBUG] [Thread-189329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:48:16.278 [DEBUG] [Thread-189329] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:48:16.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:48:16.279 [DEBUG] [Thread-189329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:48:16.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:48:16.281 [DEBUG] [Thread-189329] [transport.py] [_log()] userauth is OK
2026-04-12T12:48:16.282 [DEBUG] [Thread-189329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:48:16.282 [DEBUG] [Thread-189329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:48:16.282 [DEBUG] [Thread-189329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:48:16.282 [DEBUG] [Thread-189329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:48:16.299 [INFO] [Thread-189329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:48:16.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:48:16.883 [DEBUG] [Thread-189329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:48:16.883 [DEBUG] [Thread-189329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:48:16.884 [DEBUG] [Thread-189329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:48:16.924 [DEBUG] [Thread-189329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:48:16.924 [DEBUG] [Thread-189329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:48:16.928 [DEBUG] [Thread-189329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:48:16.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:48:16.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:48:16.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:48:16.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:48:16.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:48:16.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:48:16.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:48:16.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:48:16.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:48:16.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.450108 -999.00  +12.00  21.87     88  +10.30 1 3 1 3 1   888    0 2.12 14.34 ----- 22.1 21.9 276.8 27.8 15.7 -5.7 15.4 -4.8 14.6 -6.0 15.3 -4.4
2026-04-12T12:48:16.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:48:16.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:48:16.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.450108
2026-04-12T12:48:16.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:48:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:48:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:48:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:48:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:48:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:47:24', tmtdew=0.898545, humidity=94.1804, cloud=0.0, wind=21.2792, temperature=12.2835, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:48:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:48:16.957 [DEBUG] [Thread-189329] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:48:17.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:48:17.051 [DEBUG] [Thread-189332] [transport.py] [_log()] starting thread (client mode): 0xb0f41de0
2026-04-12T12:48:17.051 [DEBUG] [Thread-189332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:48:17.066 [DEBUG] [Thread-189332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:48:17.066 [INFO] [Thread-189332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:48:17.074 [DEBUG] [Thread-189332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:48:17.074 [DEBUG] [Thread-189332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:48:17.074 [DEBUG] [Thread-189332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:48:17.074 [DEBUG] [Thread-189332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:17.074 [DEBUG] [Thread-189332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:17.074 [DEBUG] [Thread-189332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:17.074 [DEBUG] [Thread-189332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] client lang: <none>
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] server lang: <none>
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] kex follows: False
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:48:17.075 [DEBUG] [Thread-189332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:48:17.076 [DEBUG] [Thread-189332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:48:17.076 [DEBUG] [Thread-189332] [transport.py] [_log()] Compression: none
2026-04-12T12:48:17.076 [DEBUG] [Thread-189332] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:48:17.132 [DEBUG] [Thread-189332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:48:17.132 [DEBUG] [Thread-189332] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:48:17.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:48:17.133 [DEBUG] [Thread-189332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:48:17.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:48:17.135 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:17.137 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:17.188 [DEBUG] [Thread-189332] [transport.py] [_log()] userauth is OK
2026-04-12T12:48:17.188 [DEBUG] [Thread-189332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:48:17.188 [DEBUG] [Thread-189332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:48:17.189 [DEBUG] [Thread-189332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:48:17.189 [DEBUG] [Thread-189332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:48:17.214 [INFO] [Thread-189332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:48:17.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:48:17.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:48:18.043 [DEBUG] [Thread-189332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:48:18.043 [DEBUG] [Thread-189332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:48:18.091 [DEBUG] [Thread-189332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:48:18.091 [DEBUG] [Thread-189332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:48:18.100 [DEBUG] [Thread-189332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:48:18.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:48:18.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:48:18.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:48:18.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:48:18.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:48:18.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:48:18.136 [DEBUG] [Thread-189332] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:48:21.795 [DEBUG] [Thread-189334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:34.864 [DEBUG] [Thread-189335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:36.856 [DEBUG] [Thread-189336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:48.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:48:48.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:48:48.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:48:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 48, 35), 1.75635, 88.9953, 0.0, 22.1242, 12.7675, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:48:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:48:35
2026-04-12T12:48:49.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:48:50.017 [DEBUG] [Thread-189337] [transport.py] [_log()] starting thread (client mode): 0xb0f423e0
2026-04-12T12:48:50.017 [DEBUG] [Thread-189337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:48:50.039 [DEBUG] [Thread-189337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:48:50.039 [INFO] [Thread-189337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:48:50.040 [DEBUG] [Thread-189337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] client lang: <none>
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] server lang: <none>
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] kex follows: False
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] Compression: none
2026-04-12T12:48:50.041 [DEBUG] [Thread-189337] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:48:50.053 [DEBUG] [Thread-189337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:48:50.054 [DEBUG] [Thread-189337] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:48:50.054 [DEBUG] [Thread-189337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:48:50.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:48:50.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:48:50.056 [DEBUG] [Thread-189337] [transport.py] [_log()] userauth is OK
2026-04-12T12:48:50.056 [DEBUG] [Thread-189337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:48:50.056 [DEBUG] [Thread-189337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:48:50.056 [DEBUG] [Thread-189337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:48:50.056 [DEBUG] [Thread-189337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:48:50.075 [INFO] [Thread-189337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:48:50.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:48:50.741 [DEBUG] [Thread-189337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:48:50.742 [DEBUG] [Thread-189337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:48:50.742 [DEBUG] [Thread-189337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:48:50.783 [DEBUG] [Thread-189337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:48:50.783 [DEBUG] [Thread-189337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:48:50.786 [DEBUG] [Thread-189337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:48:50.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:48:50.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:48:50.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:48:50.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:48:50.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:48:50.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:48:50.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:48:50.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:48:50.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:48:50.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.450455 -999.00  +12.00  28.34     89  +10.30 1 3 1 3 1   888    0 2.06 12.45 ----- 24.4 28.3 278.2 32.4 15.6 -5.7 15.2 -5.0 14.6 -5.1 15.3 -4.8
2026-04-12T12:48:50.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:48:50.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:48:50.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.450455
2026-04-12T12:48:50.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:48:50.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:48:50.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:48:50.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:48:50.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:48:50.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:48:35', tmtdew=1.75635, humidity=88.9953, cloud=0.0, wind=22.1242, temperature=12.7675, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:48:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:48:50.810 [DEBUG] [Thread-189337] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:48:50.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:48:50.904 [DEBUG] [Thread-189340] [transport.py] [_log()] starting thread (client mode): 0xb0fcd960
2026-04-12T12:48:50.904 [DEBUG] [Thread-189340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:48:50.919 [DEBUG] [Thread-189340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:48:50.919 [INFO] [Thread-189340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:48:50.927 [DEBUG] [Thread-189340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:48:50.927 [DEBUG] [Thread-189340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:48:50.927 [DEBUG] [Thread-189340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:48:50.927 [DEBUG] [Thread-189340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] client lang: <none>
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] server lang: <none>
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] kex follows: False
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] Compression: none
2026-04-12T12:48:50.928 [DEBUG] [Thread-189340] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:48:50.991 [DEBUG] [Thread-189340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:48:50.992 [DEBUG] [Thread-189340] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:48:50.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:48:50.993 [DEBUG] [Thread-189340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:48:50.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:48:51.047 [DEBUG] [Thread-189340] [transport.py] [_log()] userauth is OK
2026-04-12T12:48:51.047 [DEBUG] [Thread-189340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:48:51.048 [DEBUG] [Thread-189340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:48:51.048 [DEBUG] [Thread-189340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:48:51.048 [DEBUG] [Thread-189340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:48:51.067 [INFO] [Thread-189340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:48:51.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:48:51.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:48:51.866 [DEBUG] [Thread-189340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:48:51.867 [DEBUG] [Thread-189340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:48:51.892 [DEBUG] [Thread-189342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:48:51.915 [DEBUG] [Thread-189340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:48:51.915 [DEBUG] [Thread-189340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:48:51.924 [DEBUG] [Thread-189340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:48:51.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:48:51.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:48:51.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:48:51.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:48:51.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:48:51.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:48:51.960 [DEBUG] [Thread-189340] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:49:06.949 [DEBUG] [Thread-189343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:49:17.289 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:49:17.290 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:49:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:49:21.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:49:21.984 [DEBUG] [Thread-189344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:49:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:49:23.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 49, 11), 0.93211, 93.9807, 0.0, 27.8964, 12.2664, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:49:23.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:49:11
2026-04-12T12:49:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:49:23.783 [DEBUG] [Thread-189345] [transport.py] [_log()] starting thread (client mode): 0xb0fcf760
2026-04-12T12:49:23.783 [DEBUG] [Thread-189345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:49:23.800 [DEBUG] [Thread-189345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:49:23.800 [INFO] [Thread-189345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] client lang: <none>
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] server lang: <none>
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] kex follows: False
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] Compression: none
2026-04-12T12:49:23.804 [DEBUG] [Thread-189345] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:49:23.821 [DEBUG] [Thread-189345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:49:23.821 [DEBUG] [Thread-189345] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:49:23.821 [DEBUG] [Thread-189345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:49:23.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:49:23.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:49:23.822 [DEBUG] [Thread-189345] [transport.py] [_log()] userauth is OK
2026-04-12T12:49:23.822 [DEBUG] [Thread-189345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:49:23.822 [DEBUG] [Thread-189345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:49:23.822 [DEBUG] [Thread-189345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:49:23.822 [DEBUG] [Thread-189345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:49:23.837 [INFO] [Thread-189345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:49:23.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:49:24.474 [DEBUG] [Thread-189345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:49:24.474 [DEBUG] [Thread-189345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:49:24.475 [DEBUG] [Thread-189345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:49:24.515 [DEBUG] [Thread-189345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:49:24.515 [DEBUG] [Thread-189345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:49:24.519 [DEBUG] [Thread-189345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:49:24.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:49:24.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:49:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:49:24.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:49:24.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:49:24.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:49:24.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:49:24.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:49:24.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:49:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.450802 -999.00  +12.00  20.12     89  +10.30 1 3 1 3 1   888    0 2.03 11.21 ----- 18.7 20.1 276.6 33.2 15.6 -6.3 15.2 -5.2 14.6 -4.2 15.2 -4.6
2026-04-12T12:49:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:49:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:49:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.450802
2026-04-12T12:49:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:49:24.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:49:24.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:49:24.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:49:24.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:49:24.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:49:11', tmtdew=0.93211, humidity=93.9807, cloud=0.0, wind=27.8964, temperature=12.2664, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:49:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:49:24.551 [DEBUG] [Thread-189345] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:49:24.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:49:24.645 [DEBUG] [Thread-189348] [transport.py] [_log()] starting thread (client mode): 0xb0f411e0
2026-04-12T12:49:24.645 [DEBUG] [Thread-189348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:49:24.660 [DEBUG] [Thread-189348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:49:24.661 [INFO] [Thread-189348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:49:24.668 [DEBUG] [Thread-189348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] client lang: <none>
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] server lang: <none>
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] kex follows: False
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] Compression: none
2026-04-12T12:49:24.669 [DEBUG] [Thread-189348] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:49:24.727 [DEBUG] [Thread-189348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:49:24.728 [DEBUG] [Thread-189348] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:49:24.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:49:24.729 [DEBUG] [Thread-189348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:49:24.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:49:24.783 [DEBUG] [Thread-189348] [transport.py] [_log()] userauth is OK
2026-04-12T12:49:24.784 [DEBUG] [Thread-189348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:49:24.784 [DEBUG] [Thread-189348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:49:24.784 [DEBUG] [Thread-189348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:49:24.784 [DEBUG] [Thread-189348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:49:24.802 [INFO] [Thread-189348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:49:24.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:49:24.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:49:25.663 [DEBUG] [Thread-189348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:49:25.663 [DEBUG] [Thread-189348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:49:25.711 [DEBUG] [Thread-189348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:49:25.711 [DEBUG] [Thread-189348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:49:25.721 [DEBUG] [Thread-189348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:49:25.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:49:25.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:49:25.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:49:25.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:49:25.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:49:25.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:49:25.758 [DEBUG] [Thread-189348] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:49:34.898 [DEBUG] [Thread-189350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:49:37.024 [DEBUG] [Thread-189351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:49:52.080 [DEBUG] [Thread-189352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:49:55.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:49:55.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:49:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:49:57.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 49, 46), 1.79147, 88.7957, 0.0, 24.6996, 12.8665, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:49:57.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:49:46
2026-04-12T12:49:57.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:49:57.582 [DEBUG] [Thread-189353] [transport.py] [_log()] starting thread (client mode): 0xae5147f0
2026-04-12T12:49:57.582 [DEBUG] [Thread-189353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:49:57.599 [DEBUG] [Thread-189353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:49:57.599 [INFO] [Thread-189353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] client lang: <none>
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] server lang: <none>
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] kex follows: False
2026-04-12T12:49:57.602 [DEBUG] [Thread-189353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:49:57.603 [DEBUG] [Thread-189353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:49:57.603 [DEBUG] [Thread-189353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:49:57.603 [DEBUG] [Thread-189353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:49:57.603 [DEBUG] [Thread-189353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:49:57.603 [DEBUG] [Thread-189353] [transport.py] [_log()] Compression: none
2026-04-12T12:49:57.603 [DEBUG] [Thread-189353] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:49:57.623 [DEBUG] [Thread-189353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:49:57.624 [DEBUG] [Thread-189353] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:49:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:49:57.626 [DEBUG] [Thread-189353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:49:57.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:49:57.628 [DEBUG] [Thread-189353] [transport.py] [_log()] userauth is OK
2026-04-12T12:49:57.628 [DEBUG] [Thread-189353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:49:57.628 [DEBUG] [Thread-189353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:49:57.628 [DEBUG] [Thread-189353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:49:57.629 [DEBUG] [Thread-189353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:49:57.652 [INFO] [Thread-189353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:49:57.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:49:58.281 [DEBUG] [Thread-189353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:49:58.282 [DEBUG] [Thread-189353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:49:58.282 [DEBUG] [Thread-189353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:49:58.322 [DEBUG] [Thread-189353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:49:58.322 [DEBUG] [Thread-189353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:49:58.326 [DEBUG] [Thread-189353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:49:58.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:49:58.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:49:58.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:49:58.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:49:58.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:49:58.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:49:58.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:49:58.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:49:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:49:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.451149 -999.00  +12.20  14.44     90  +10.70 1 3 1 3 1   888    0 1.95 9.03 ----- 18.4 14.4 269.0 23.1 15.7 -5.9 15.3 -5.2 14.8 -4.5 15.2 -4.9
2026-04-12T12:49:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:49:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:49:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.451149
2026-04-12T12:49:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:49:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:49:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:49:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:49:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:49:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:49:46', tmtdew=1.79147, humidity=88.7957, cloud=0.0, wind=24.6996, temperature=12.8665, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:49:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:49:58.350 [DEBUG] [Thread-189353] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:49:58.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:49:58.443 [DEBUG] [Thread-189356] [transport.py] [_log()] starting thread (client mode): 0xae515930
2026-04-12T12:49:58.443 [DEBUG] [Thread-189356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:49:58.458 [DEBUG] [Thread-189356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:49:58.458 [INFO] [Thread-189356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:49:58.466 [DEBUG] [Thread-189356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:49:58.466 [DEBUG] [Thread-189356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:49:58.467 [DEBUG] [Thread-189356] [transport.py] [_log()] client lang: <none>
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] server lang: <none>
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] kex follows: False
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] Compression: none
2026-04-12T12:49:58.468 [DEBUG] [Thread-189356] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:49:58.523 [DEBUG] [Thread-189356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:49:58.523 [DEBUG] [Thread-189356] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:49:58.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:49:58.525 [DEBUG] [Thread-189356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:49:58.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:49:58.579 [DEBUG] [Thread-189356] [transport.py] [_log()] userauth is OK
2026-04-12T12:49:58.579 [DEBUG] [Thread-189356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:49:58.579 [DEBUG] [Thread-189356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:49:58.579 [DEBUG] [Thread-189356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:49:58.579 [DEBUG] [Thread-189356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:49:58.597 [INFO] [Thread-189356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:49:58.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:49:58.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:49:59.417 [DEBUG] [Thread-189356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:49:59.418 [DEBUG] [Thread-189356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:49:59.465 [DEBUG] [Thread-189356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:49:59.465 [DEBUG] [Thread-189356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:49:59.475 [DEBUG] [Thread-189356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:49:59.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:49:59.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:49:59.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:49:59.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:49:59.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:49:59.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:49:59.512 [DEBUG] [Thread-189356] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:50:07.118 [DEBUG] [Thread-189358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:50:17.431 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:50:17.432 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:50:22.177 [DEBUG] [Thread-189359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:50:29.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:50:29.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:50:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:50:30.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 50, 22), 0.926495, 94.0139, 0.0, 21.2094, 12.2664, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:50:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:50:22
2026-04-12T12:50:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:50:31.521 [DEBUG] [Thread-189360] [transport.py] [_log()] starting thread (client mode): 0xb0f43640
2026-04-12T12:50:31.521 [DEBUG] [Thread-189360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:50:31.540 [DEBUG] [Thread-189360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:50:31.540 [INFO] [Thread-189360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:50:31.543 [DEBUG] [Thread-189360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] client lang: <none>
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] server lang: <none>
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] kex follows: False
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] Compression: none
2026-04-12T12:50:31.544 [DEBUG] [Thread-189360] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:50:31.563 [DEBUG] [Thread-189360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:50:31.564 [DEBUG] [Thread-189360] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:50:31.564 [DEBUG] [Thread-189360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:50:31.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:50:31.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:50:31.570 [DEBUG] [Thread-189360] [transport.py] [_log()] userauth is OK
2026-04-12T12:50:31.570 [DEBUG] [Thread-189360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:50:31.571 [DEBUG] [Thread-189360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:50:31.571 [DEBUG] [Thread-189360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:50:31.571 [DEBUG] [Thread-189360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:50:31.589 [INFO] [Thread-189360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:50:31.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:50:32.203 [DEBUG] [Thread-189360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:50:32.203 [DEBUG] [Thread-189360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:50:32.204 [DEBUG] [Thread-189360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:50:32.244 [DEBUG] [Thread-189360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:50:32.244 [DEBUG] [Thread-189360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:50:32.247 [DEBUG] [Thread-189360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:50:32.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:50:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:50:32.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:50:32.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:50:32.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:50:32.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:50:32.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:50:32.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:50:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:50:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.451496 -999.00  +12.20  19.76     89  +10.50 1 3 1 3 1   888    0 1.93 8.20 ----- 14.5 19.8 267.4 26.5 15.7 -6.2 15.4 -5.8 14.8 -4.5 15.3 -5.3
2026-04-12T12:50:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:50:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:50:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.451496
2026-04-12T12:50:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:50:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:50:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:50:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:50:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:50:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:50:22', tmtdew=0.926495, humidity=94.0139, cloud=0.0, wind=21.2094, temperature=12.2664, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:50:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:50:32.279 [DEBUG] [Thread-189360] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:50:32.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:50:32.370 [DEBUG] [Thread-189363] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-12T12:50:32.371 [DEBUG] [Thread-189363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:50:32.385 [DEBUG] [Thread-189363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:50:32.385 [INFO] [Thread-189363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] client lang: <none>
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] server lang: <none>
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] kex follows: False
2026-04-12T12:50:32.393 [DEBUG] [Thread-189363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:50:32.394 [DEBUG] [Thread-189363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:50:32.394 [DEBUG] [Thread-189363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:50:32.394 [DEBUG] [Thread-189363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:50:32.394 [DEBUG] [Thread-189363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:50:32.394 [DEBUG] [Thread-189363] [transport.py] [_log()] Compression: none
2026-04-12T12:50:32.394 [DEBUG] [Thread-189363] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:50:32.452 [DEBUG] [Thread-189363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:50:32.453 [DEBUG] [Thread-189363] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:50:32.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:50:32.454 [DEBUG] [Thread-189363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:50:32.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:50:32.511 [DEBUG] [Thread-189363] [transport.py] [_log()] userauth is OK
2026-04-12T12:50:32.511 [DEBUG] [Thread-189363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:50:32.512 [DEBUG] [Thread-189363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:50:32.512 [DEBUG] [Thread-189363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:50:32.512 [DEBUG] [Thread-189363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:50:32.530 [INFO] [Thread-189363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:50:32.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:50:32.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:50:33.335 [DEBUG] [Thread-189363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:50:33.335 [DEBUG] [Thread-189363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:50:33.383 [DEBUG] [Thread-189363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:50:33.383 [DEBUG] [Thread-189363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:50:33.392 [DEBUG] [Thread-189363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:50:33.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:50:33.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:50:33.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:50:33.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:50:33.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:50:33.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:50:33.429 [DEBUG] [Thread-189363] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:50:34.932 [DEBUG] [Thread-189365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:50:37.212 [DEBUG] [Thread-189366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:50:52.264 [DEBUG] [Thread-189367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:51:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:51:03.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:51:03.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:51:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 50, 22), 0.926495, 94.0139, 0.0, 21.2094, 12.2664, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:51:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:50:22
2026-04-12T12:51:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:51:05.358 [DEBUG] [Thread-189368] [transport.py] [_log()] starting thread (client mode): 0xae516e30
2026-04-12T12:51:05.358 [DEBUG] [Thread-189368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:51:05.377 [DEBUG] [Thread-189368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:51:05.378 [INFO] [Thread-189368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:51:05.380 [DEBUG] [Thread-189368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] client lang: <none>
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] server lang: <none>
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] kex follows: False
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] Compression: none
2026-04-12T12:51:05.381 [DEBUG] [Thread-189368] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:51:05.403 [DEBUG] [Thread-189368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:51:05.404 [DEBUG] [Thread-189368] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:51:05.404 [DEBUG] [Thread-189368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:51:05.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:51:05.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:51:05.407 [DEBUG] [Thread-189368] [transport.py] [_log()] userauth is OK
2026-04-12T12:51:05.407 [DEBUG] [Thread-189368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:51:05.407 [DEBUG] [Thread-189368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:51:05.407 [DEBUG] [Thread-189368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:51:05.407 [DEBUG] [Thread-189368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:51:05.423 [INFO] [Thread-189368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:51:05.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:51:06.000 [DEBUG] [Thread-189368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:51:06.000 [DEBUG] [Thread-189368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:51:06.000 [DEBUG] [Thread-189368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:51:06.041 [DEBUG] [Thread-189368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:51:06.041 [DEBUG] [Thread-189368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:51:06.045 [DEBUG] [Thread-189368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:51:06.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:51:06.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:51:06.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:51:06.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:51:06.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:51:06.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:51:06.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:51:06.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:51:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:51:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.451844 -999.00  +12.30  23.58     89  +10.70 1 3 1 3 1   888    0 1.83 6.63 ----- 20.6 23.6 266.4 26.4 15.8 -6.3 15.4 -5.7 14.9 -5.7 15.3 -5.3
2026-04-12T12:51:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:51:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:51:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.451844
2026-04-12T12:51:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:51:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:51:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:51:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:51:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:51:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:50:22', tmtdew=0.926495, humidity=94.0139, cloud=0.0, wind=21.2094, temperature=12.2664, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:50:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:51:06.073 [DEBUG] [Thread-189368] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:51:06.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:51:06.167 [DEBUG] [Thread-189371] [transport.py] [_log()] starting thread (client mode): 0xae5173a0
2026-04-12T12:51:06.167 [DEBUG] [Thread-189371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:51:06.182 [DEBUG] [Thread-189371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:51:06.183 [INFO] [Thread-189371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:51:06.190 [DEBUG] [Thread-189371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:51:06.190 [DEBUG] [Thread-189371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:51:06.190 [DEBUG] [Thread-189371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:51:06.190 [DEBUG] [Thread-189371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] client lang: <none>
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] server lang: <none>
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] kex follows: False
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:51:06.191 [DEBUG] [Thread-189371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:51:06.192 [DEBUG] [Thread-189371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:51:06.192 [DEBUG] [Thread-189371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:51:06.192 [DEBUG] [Thread-189371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:51:06.192 [DEBUG] [Thread-189371] [transport.py] [_log()] Compression: none
2026-04-12T12:51:06.192 [DEBUG] [Thread-189371] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:51:06.252 [DEBUG] [Thread-189371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:51:06.253 [DEBUG] [Thread-189371] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:51:06.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:51:06.254 [DEBUG] [Thread-189371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:51:06.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:51:06.311 [DEBUG] [Thread-189371] [transport.py] [_log()] userauth is OK
2026-04-12T12:51:06.311 [DEBUG] [Thread-189371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:51:06.312 [DEBUG] [Thread-189371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:51:06.312 [DEBUG] [Thread-189371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:51:06.312 [DEBUG] [Thread-189371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:51:06.331 [INFO] [Thread-189371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:51:06.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:51:06.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:51:07.240 [DEBUG] [Thread-189371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:51:07.241 [DEBUG] [Thread-189371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:51:07.289 [DEBUG] [Thread-189371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:51:07.289 [DEBUG] [Thread-189371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:51:07.299 [DEBUG] [Thread-189371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:51:07.306 [DEBUG] [Thread-189373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:51:07.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:51:07.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:51:07.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:51:07.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:51:07.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:51:07.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:51:07.334 [DEBUG] [Thread-189371] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:51:17.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:51:17.577 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:51:22.360 [DEBUG] [Thread-189374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:51:34.974 [DEBUG] [Thread-189375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:51:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:51:37.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:51:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:51:37.397 [DEBUG] [Thread-189376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:51:38.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 50, 58), 0.89312, 93.9145, 0.0, 23.2027, 12.1999, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:51:38.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:50:58
2026-04-12T12:51:39.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:51:39.258 [DEBUG] [Thread-189377] [transport.py] [_log()] starting thread (client mode): 0xb0fccdf0
2026-04-12T12:51:39.258 [DEBUG] [Thread-189377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:51:39.282 [DEBUG] [Thread-189377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:51:39.282 [INFO] [Thread-189377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:51:39.283 [DEBUG] [Thread-189377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:51:39.283 [DEBUG] [Thread-189377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:51:39.283 [DEBUG] [Thread-189377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:51:39.283 [DEBUG] [Thread-189377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:39.283 [DEBUG] [Thread-189377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:39.283 [DEBUG] [Thread-189377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] client lang: <none>
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] server lang: <none>
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] kex follows: False
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] Compression: none
2026-04-12T12:51:39.284 [DEBUG] [Thread-189377] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:51:39.294 [DEBUG] [Thread-189377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:51:39.294 [DEBUG] [Thread-189377] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:51:39.295 [DEBUG] [Thread-189377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:51:39.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:51:39.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:51:39.297 [DEBUG] [Thread-189377] [transport.py] [_log()] userauth is OK
2026-04-12T12:51:39.297 [DEBUG] [Thread-189377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:51:39.297 [DEBUG] [Thread-189377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:51:39.297 [DEBUG] [Thread-189377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:51:39.297 [DEBUG] [Thread-189377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:51:39.315 [INFO] [Thread-189377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:51:39.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:51:39.854 [DEBUG] [Thread-189377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:51:39.855 [DEBUG] [Thread-189377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:51:39.855 [DEBUG] [Thread-189377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:51:39.896 [DEBUG] [Thread-189377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:51:39.896 [DEBUG] [Thread-189377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:51:39.899 [DEBUG] [Thread-189377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:51:39.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:51:39.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:51:39.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:51:39.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:51:39.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:51:39.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:51:39.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:51:39.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:51:39.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:51:39.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.452191 -999.00  +12.20  19.20     89  +10.50 1 3 1 3 1   888    0 1.86 5.92 ----- 17.8 19.2 274.8 26.7 15.8 -7.1 15.5 -6.2 14.9 -5.0 15.3 -6.0
2026-04-12T12:51:39.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:51:39.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:51:39.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.452191
2026-04-12T12:51:39.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:51:39.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:51:39.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:51:39.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:51:39.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:51:39.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:50:58', tmtdew=0.89312, humidity=93.9145, cloud=0.0, wind=23.2027, temperature=12.1999, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:51:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:51:39.921 [DEBUG] [Thread-189377] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:51:40.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:51:40.014 [DEBUG] [Thread-189380] [transport.py] [_log()] starting thread (client mode): 0xa796ae60
2026-04-12T12:51:40.014 [DEBUG] [Thread-189380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:51:40.029 [DEBUG] [Thread-189380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:51:40.029 [INFO] [Thread-189380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:51:40.036 [DEBUG] [Thread-189380] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:51:40.036 [DEBUG] [Thread-189380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:51:40.036 [DEBUG] [Thread-189380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] client lang: <none>
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] server lang: <none>
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] kex follows: False
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] Compression: none
2026-04-12T12:51:40.037 [DEBUG] [Thread-189380] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:51:40.094 [DEBUG] [Thread-189380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:51:40.094 [DEBUG] [Thread-189380] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:51:40.095 [DEBUG] [Thread-189380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:51:40.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:51:40.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:51:40.151 [DEBUG] [Thread-189380] [transport.py] [_log()] userauth is OK
2026-04-12T12:51:40.152 [DEBUG] [Thread-189380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:51:40.152 [DEBUG] [Thread-189380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:51:40.152 [DEBUG] [Thread-189380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:51:40.152 [DEBUG] [Thread-189380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:51:40.171 [INFO] [Thread-189380] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:51:40.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:51:40.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:51:40.998 [DEBUG] [Thread-189380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:51:40.998 [DEBUG] [Thread-189380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:51:41.046 [DEBUG] [Thread-189380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:51:41.046 [DEBUG] [Thread-189380] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:51:41.056 [DEBUG] [Thread-189380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:51:41.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:51: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')
2026-04-12T12:51:41.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:51:41.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:51:41.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:51:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:51:41.093 [DEBUG] [Thread-189380] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:51:52.435 [DEBUG] [Thread-189382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:52:07.488 [DEBUG] [Thread-189383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:52:11.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:52:11.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:52:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:52:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 51, 34), 1.84743, 88.4638, 0.0, 23.6412, 12.8331, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:52:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:51:34
2026-04-12T12:52:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:52:13.008 [DEBUG] [Thread-189384] [transport.py] [_log()] starting thread (client mode): 0xa79687f0
2026-04-12T12:52:13.008 [DEBUG] [Thread-189384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:52:13.028 [DEBUG] [Thread-189384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:52:13.028 [INFO] [Thread-189384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] client lang: <none>
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] server lang: <none>
2026-04-12T12:52:13.031 [DEBUG] [Thread-189384] [transport.py] [_log()] kex follows: False
2026-04-12T12:52:13.032 [DEBUG] [Thread-189384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:52:13.032 [DEBUG] [Thread-189384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:52:13.032 [DEBUG] [Thread-189384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:52:13.032 [DEBUG] [Thread-189384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:52:13.032 [DEBUG] [Thread-189384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:52:13.032 [DEBUG] [Thread-189384] [transport.py] [_log()] Compression: none
2026-04-12T12:52:13.032 [DEBUG] [Thread-189384] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:52:13.045 [DEBUG] [Thread-189384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:52:13.045 [DEBUG] [Thread-189384] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:52:13.045 [DEBUG] [Thread-189384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:52:13.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:52:13.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:52:13.046 [DEBUG] [Thread-189384] [transport.py] [_log()] userauth is OK
2026-04-12T12:52:13.046 [DEBUG] [Thread-189384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:52:13.046 [DEBUG] [Thread-189384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:52:13.046 [DEBUG] [Thread-189384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:52:13.046 [DEBUG] [Thread-189384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:52:13.064 [INFO] [Thread-189384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:52:13.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:52:13.627 [DEBUG] [Thread-189384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:52:13.627 [DEBUG] [Thread-189384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:52:13.627 [DEBUG] [Thread-189384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:52:13.668 [DEBUG] [Thread-189384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:52:13.668 [DEBUG] [Thread-189384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:52:13.671 [DEBUG] [Thread-189384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:52:13.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:52:13.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:52:13.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:52:13.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:52:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:52:13.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:52:13.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:52:13.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:52:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:52:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.452538 -999.00  +12.30  10.71     90  +10.70 1 3 1 3 1   888    0 1.85 4.61 ----- 16.5 10.7 284.6 23.3 15.9 -7.1 15.6 -6.2 15.0 -5.3 15.3 -5.8
2026-04-12T12:52:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:52:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:52:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.452538
2026-04-12T12:52:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:52:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:52:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:52:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:52:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:52:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:51:34', tmtdew=1.84743, humidity=88.4638, cloud=0.0, wind=23.6412, temperature=12.8331, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:51:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:52:13.696 [DEBUG] [Thread-189384] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:52:13.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:52:13.799 [DEBUG] [Thread-189387] [transport.py] [_log()] starting thread (client mode): 0xb0f43040
2026-04-12T12:52:13.799 [DEBUG] [Thread-189387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:52:13.813 [DEBUG] [Thread-189387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:52:13.814 [INFO] [Thread-189387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:13.821 [DEBUG] [Thread-189387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] client lang: <none>
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] server lang: <none>
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] kex follows: False
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] Compression: none
2026-04-12T12:52:13.822 [DEBUG] [Thread-189387] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:52:13.878 [DEBUG] [Thread-189387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:52:13.879 [DEBUG] [Thread-189387] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:52:13.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:52:13.879 [DEBUG] [Thread-189387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:52:13.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:52:13.934 [DEBUG] [Thread-189387] [transport.py] [_log()] userauth is OK
2026-04-12T12:52:13.935 [DEBUG] [Thread-189387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:52:13.935 [DEBUG] [Thread-189387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:52:13.935 [DEBUG] [Thread-189387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:52:13.935 [DEBUG] [Thread-189387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:52:13.953 [INFO] [Thread-189387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:52:13.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:52:13.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:52:14.788 [DEBUG] [Thread-189387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:52:14.788 [DEBUG] [Thread-189387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:52:14.835 [DEBUG] [Thread-189387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:52:14.836 [DEBUG] [Thread-189387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:52:14.844 [DEBUG] [Thread-189387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:52:14.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:52:14.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:52:14.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:52:14.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:52:14.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:52:14.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:52:14.876 [DEBUG] [Thread-189387] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:52:17.719 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:52:17.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:52:22.523 [DEBUG] [Thread-189389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:52:35.007 [DEBUG] [Thread-189390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:52:37.578 [DEBUG] [Thread-189391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:52:44.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:52:44.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:52:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:52:46.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 52, 9), 0.973715, 93.7319, 0.0, 25.1255, 12.2166, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:52:46.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:52:09
2026-04-12T12:52:46.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:52:46.830 [DEBUG] [Thread-189392] [transport.py] [_log()] starting thread (client mode): 0xb0f54580
2026-04-12T12:52:46.830 [DEBUG] [Thread-189392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:52:46.854 [DEBUG] [Thread-189392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:52:46.854 [INFO] [Thread-189392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:52:46.856 [DEBUG] [Thread-189392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:52:46.856 [DEBUG] [Thread-189392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:52:46.856 [DEBUG] [Thread-189392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:52:46.856 [DEBUG] [Thread-189392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:46.856 [DEBUG] [Thread-189392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] client lang: <none>
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] server lang: <none>
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] kex follows: False
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:52:46.857 [DEBUG] [Thread-189392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:52:46.858 [DEBUG] [Thread-189392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:52:46.858 [DEBUG] [Thread-189392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:52:46.858 [DEBUG] [Thread-189392] [transport.py] [_log()] Compression: none
2026-04-12T12:52:46.858 [DEBUG] [Thread-189392] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:52:46.881 [DEBUG] [Thread-189392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:52:46.881 [DEBUG] [Thread-189392] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:52:46.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:52:46.882 [DEBUG] [Thread-189392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:52:46.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:52:46.885 [DEBUG] [Thread-189392] [transport.py] [_log()] userauth is OK
2026-04-12T12:52:46.885 [DEBUG] [Thread-189392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:52:46.885 [DEBUG] [Thread-189392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:52:46.885 [DEBUG] [Thread-189392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:52:46.885 [DEBUG] [Thread-189392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:52:46.921 [INFO] [Thread-189392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:52:46.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:52:47.508 [DEBUG] [Thread-189392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:52:47.509 [DEBUG] [Thread-189392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:52:47.509 [DEBUG] [Thread-189392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:52:47.550 [DEBUG] [Thread-189392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:52:47.550 [DEBUG] [Thread-189392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:52:47.554 [DEBUG] [Thread-189392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:52:47.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:52:47.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:52:47.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:52:47.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:52:47.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:52:47.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:52:47.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:52:47.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:52:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:52:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.453233 -999.00  +12.30  19.69     89  +10.60 1 3 1 3 1   888    0 1.79 3.97 ----- 18.3 19.7 281.6 26.0 16.0 -7.1 15.7 -6.2 15.1 -5.1 15.5 -6.0
2026-04-12T12:52:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:52:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:52:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.453233
2026-04-12T12:52:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:52:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:52:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:52:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:52:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:52:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:52:09', tmtdew=0.973715, humidity=93.7319, cloud=0.0, wind=25.1255, temperature=12.2166, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:52:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:52:47.583 [DEBUG] [Thread-189392] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:52:47.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:52:47.676 [DEBUG] [Thread-189395] [transport.py] [_log()] starting thread (client mode): 0xb0f54ac0
2026-04-12T12:52:47.676 [DEBUG] [Thread-189395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:52:47.690 [DEBUG] [Thread-189395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:52:47.690 [INFO] [Thread-189395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:52:47.698 [DEBUG] [Thread-189395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:52:47.698 [DEBUG] [Thread-189395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] client lang: <none>
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] server lang: <none>
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] kex follows: False
2026-04-12T12:52:47.699 [DEBUG] [Thread-189395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:52:47.700 [DEBUG] [Thread-189395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:52:47.700 [DEBUG] [Thread-189395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:52:47.700 [DEBUG] [Thread-189395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:52:47.700 [DEBUG] [Thread-189395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:52:47.700 [DEBUG] [Thread-189395] [transport.py] [_log()] Compression: none
2026-04-12T12:52:47.700 [DEBUG] [Thread-189395] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:52:47.756 [DEBUG] [Thread-189395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:52:47.756 [DEBUG] [Thread-189395] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:52:47.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:52:47.758 [DEBUG] [Thread-189395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:52:47.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:52:47.815 [DEBUG] [Thread-189395] [transport.py] [_log()] userauth is OK
2026-04-12T12:52:47.815 [DEBUG] [Thread-189395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:52:47.815 [DEBUG] [Thread-189395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:52:47.816 [DEBUG] [Thread-189395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:52:47.816 [DEBUG] [Thread-189395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:52:47.844 [INFO] [Thread-189395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:52:47.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:52:47.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:52:48.691 [DEBUG] [Thread-189395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:52:48.691 [DEBUG] [Thread-189395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:52:48.739 [DEBUG] [Thread-189395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:52:48.739 [DEBUG] [Thread-189395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:52:48.748 [DEBUG] [Thread-189395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:52:48.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:52:48.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:52:48.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:52:48.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:52:48.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:52:48.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:52:48.785 [DEBUG] [Thread-189395] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:52:52.615 [DEBUG] [Thread-189397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:07.678 [DEBUG] [Thread-189398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:17.876 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:17.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:18.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:53:18.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:53:18.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:53:20.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 52, 45), 1.87527, 88.2975, 0.0, 26.887, 12.7997, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:53:20.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:52:45
2026-04-12T12:53:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:53:20.634 [DEBUG] [Thread-189399] [transport.py] [_log()] starting thread (client mode): 0xb0fccfd0
2026-04-12T12:53:20.634 [DEBUG] [Thread-189399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:53:20.653 [DEBUG] [Thread-189399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:53:20.653 [INFO] [Thread-189399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] client lang: <none>
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] server lang: <none>
2026-04-12T12:53:20.656 [DEBUG] [Thread-189399] [transport.py] [_log()] kex follows: False
2026-04-12T12:53:20.657 [DEBUG] [Thread-189399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:53:20.657 [DEBUG] [Thread-189399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:53:20.657 [DEBUG] [Thread-189399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:53:20.657 [DEBUG] [Thread-189399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:53:20.657 [DEBUG] [Thread-189399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:53:20.657 [DEBUG] [Thread-189399] [transport.py] [_log()] Compression: none
2026-04-12T12:53:20.657 [DEBUG] [Thread-189399] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:53:20.676 [DEBUG] [Thread-189399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:53:20.676 [DEBUG] [Thread-189399] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:53:20.677 [DEBUG] [Thread-189399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:53:20.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:53:20.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:53:20.679 [DEBUG] [Thread-189399] [transport.py] [_log()] userauth is OK
2026-04-12T12:53:20.679 [DEBUG] [Thread-189399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:53:20.680 [DEBUG] [Thread-189399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:53:20.680 [DEBUG] [Thread-189399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:53:20.680 [DEBUG] [Thread-189399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:53:20.703 [INFO] [Thread-189399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:53:20.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:53:21.331 [DEBUG] [Thread-189399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:53:21.332 [DEBUG] [Thread-189399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:53:21.332 [DEBUG] [Thread-189399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:53:21.373 [DEBUG] [Thread-189399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:53:21.373 [DEBUG] [Thread-189399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:53:21.376 [DEBUG] [Thread-189399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:53:21.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:53:21.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:53:21.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:53:21.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:53:21.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:53:21.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:53:21.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:53:21.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:53:21.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:53:21.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.453580 -999.00  +12.30  14.23     89  +10.60 1 3 1 3 1   888    0 1.81 4.15 ----- 11.8 14.2 275.6 26.0 16.2 -7.0 15.8 -5.9 15.3 -5.2 15.7 -5.7
2026-04-12T12:53:21.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:53:21.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:53:21.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.453580
2026-04-12T12:53:21.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:53:21.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:53:21.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:53:21.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:53:21.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:53:21.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:52:45', tmtdew=1.87527, humidity=88.2975, cloud=0.0, wind=26.887, temperature=12.7997, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:53:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:53:21.404 [DEBUG] [Thread-189399] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:53:21.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:53:21.497 [DEBUG] [Thread-189402] [transport.py] [_log()] starting thread (client mode): 0xae515240
2026-04-12T12:53:21.497 [DEBUG] [Thread-189402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:53:21.511 [DEBUG] [Thread-189402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:53:21.511 [INFO] [Thread-189402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:53:21.519 [DEBUG] [Thread-189402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:53:21.519 [DEBUG] [Thread-189402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] client lang: <none>
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] server lang: <none>
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] kex follows: False
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:53:21.520 [DEBUG] [Thread-189402] [transport.py] [_log()] Compression: none
2026-04-12T12:53:21.521 [DEBUG] [Thread-189402] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:53:21.579 [DEBUG] [Thread-189402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:53:21.580 [DEBUG] [Thread-189402] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:53:21.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:53:21.581 [DEBUG] [Thread-189402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:53:21.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:53:21.639 [DEBUG] [Thread-189402] [transport.py] [_log()] userauth is OK
2026-04-12T12:53:21.639 [DEBUG] [Thread-189402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:53:21.639 [DEBUG] [Thread-189402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:53:21.639 [DEBUG] [Thread-189402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:53:21.639 [DEBUG] [Thread-189402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:53:21.657 [INFO] [Thread-189402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:53:21.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:53:21.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:53:22.476 [DEBUG] [Thread-189402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:53:22.476 [DEBUG] [Thread-189402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:53:22.524 [DEBUG] [Thread-189402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:53:22.524 [DEBUG] [Thread-189402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:53:22.533 [DEBUG] [Thread-189402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:53:22.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:53:22.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:53:22.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:53:22.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:53:22.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:53:22.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:53:22.570 [DEBUG] [Thread-189402] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:53:22.715 [DEBUG] [Thread-189404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:35.039 [DEBUG] [Thread-189405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:37.781 [DEBUG] [Thread-189406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:52.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:53:52.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:53:52.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:53:52.822 [DEBUG] [Thread-189407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:53:53.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 53, 21), 0.9707, 93.7482, 0.0, 22.8852, 12.2498, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:53:53.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:53:21
2026-04-12T12:53:54.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:53:54.492 [DEBUG] [Thread-189408] [transport.py] [_log()] starting thread (client mode): 0xb0f544c0
2026-04-12T12:53:54.492 [DEBUG] [Thread-189408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:53:54.514 [DEBUG] [Thread-189408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:53:54.514 [INFO] [Thread-189408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:53:54.517 [DEBUG] [Thread-189408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] client lang: <none>
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] server lang: <none>
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] kex follows: False
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:53:54.518 [DEBUG] [Thread-189408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:53:54.519 [DEBUG] [Thread-189408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:53:54.519 [DEBUG] [Thread-189408] [transport.py] [_log()] Compression: none
2026-04-12T12:53:54.519 [DEBUG] [Thread-189408] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:53:54.536 [DEBUG] [Thread-189408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:53:54.536 [DEBUG] [Thread-189408] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:53:54.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:53:54.537 [DEBUG] [Thread-189408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:53:54.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:53:54.539 [DEBUG] [Thread-189408] [transport.py] [_log()] userauth is OK
2026-04-12T12:53:54.539 [DEBUG] [Thread-189408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:53:54.540 [DEBUG] [Thread-189408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:53:54.540 [DEBUG] [Thread-189408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:53:54.540 [DEBUG] [Thread-189408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:53:54.564 [INFO] [Thread-189408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:53:54.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:53:55.197 [DEBUG] [Thread-189408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:53:55.197 [DEBUG] [Thread-189408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:53:55.198 [DEBUG] [Thread-189408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:53:55.238 [DEBUG] [Thread-189408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:53:55.238 [DEBUG] [Thread-189408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:53:55.242 [DEBUG] [Thread-189408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:53:55.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:53:55.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:53:55.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:53:55.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:53:55.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:53:55.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:53:55.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:53:55.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:53:55.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:53:55.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.453927 -999.00  +12.40  16.96     89  +10.70 1 3 1 3 1   888    0 1.78 3.65 ----- 18.1 17.0 267.6 23.4 16.2 -7.0 15.8 -6.0 15.3 -5.1 15.8 -6.0
2026-04-12T12:53:55.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:53:55.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:53:55.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.453927
2026-04-12T12:53:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:53:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:53:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:53:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:53:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:53:55.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:53:21', tmtdew=0.9707, humidity=93.7482, cloud=0.0, wind=22.8852, temperature=12.2498, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:53:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:53:55.269 [DEBUG] [Thread-189408] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:53:55.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:53:55.362 [DEBUG] [Thread-189411] [transport.py] [_log()] starting thread (client mode): 0xae517970
2026-04-12T12:53:55.363 [DEBUG] [Thread-189411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:53:55.377 [DEBUG] [Thread-189411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:53:55.377 [INFO] [Thread-189411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] client lang: <none>
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] server lang: <none>
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] kex follows: False
2026-04-12T12:53:55.385 [DEBUG] [Thread-189411] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:53:55.386 [DEBUG] [Thread-189411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:53:55.386 [DEBUG] [Thread-189411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:53:55.386 [DEBUG] [Thread-189411] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:53:55.386 [DEBUG] [Thread-189411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:53:55.386 [DEBUG] [Thread-189411] [transport.py] [_log()] Compression: none
2026-04-12T12:53:55.386 [DEBUG] [Thread-189411] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:53:55.444 [DEBUG] [Thread-189411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:53:55.444 [DEBUG] [Thread-189411] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:53:55.445 [DEBUG] [Thread-189411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:53:55.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:53:55.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:53:55.500 [DEBUG] [Thread-189411] [transport.py] [_log()] userauth is OK
2026-04-12T12:53:55.500 [DEBUG] [Thread-189411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:53:55.500 [DEBUG] [Thread-189411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:53:55.500 [DEBUG] [Thread-189411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:53:55.500 [DEBUG] [Thread-189411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:53:55.518 [INFO] [Thread-189411] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:53:55.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:53:55.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:53:56.338 [DEBUG] [Thread-189411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:53:56.338 [DEBUG] [Thread-189411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:53:56.386 [DEBUG] [Thread-189411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:53:56.386 [DEBUG] [Thread-189411] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:53:56.396 [DEBUG] [Thread-189411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:53:56.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:53:56.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')
2026-04-12T12:53:56.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:53:56.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:53:56.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:53:56.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:53:56.432 [DEBUG] [Thread-189411] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:54:07.857 [DEBUG] [Thread-189413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:54:18.025 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:54:18.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:54:22.905 [DEBUG] [Thread-189414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:54:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:54:26.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:54:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:54:27.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 53, 56), 0.979365, 93.6987, 0.0, 23.9789, 12.3165, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:54:27.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:53:56
2026-04-12T12:54:28.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:54:28.268 [DEBUG] [Thread-189415] [transport.py] [_log()] starting thread (client mode): 0xb0fce530
2026-04-12T12:54:28.268 [DEBUG] [Thread-189415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:54:28.288 [DEBUG] [Thread-189415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:54:28.288 [INFO] [Thread-189415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] client lang: <none>
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] server lang: <none>
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] kex follows: False
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] Compression: none
2026-04-12T12:54:28.291 [DEBUG] [Thread-189415] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:54:28.309 [DEBUG] [Thread-189415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:54:28.310 [DEBUG] [Thread-189415] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:54:28.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:54:28.311 [DEBUG] [Thread-189415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:54:28.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:54:28.313 [DEBUG] [Thread-189415] [transport.py] [_log()] userauth is OK
2026-04-12T12:54:28.314 [DEBUG] [Thread-189415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:54:28.314 [DEBUG] [Thread-189415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:54:28.314 [DEBUG] [Thread-189415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:54:28.314 [DEBUG] [Thread-189415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:54:28.333 [INFO] [Thread-189415] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:54:28.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:54:28.928 [DEBUG] [Thread-189415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:54:28.928 [DEBUG] [Thread-189415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:54:28.929 [DEBUG] [Thread-189415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:54:28.969 [DEBUG] [Thread-189415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:54:28.969 [DEBUG] [Thread-189415] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:54:28.973 [DEBUG] [Thread-189415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:54:28.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:54:28.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:54:28.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:54:28.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:54:28.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:54:28.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:54:28.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:54:28.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:54:28.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:54:28.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454274 -999.00  +12.30  21.32     89  +10.50 1 3 1 3 1   888    0 1.77 3.30 ----- 18.0 21.3 265.2 29.2 16.2 -7.4 15.8 -6.1 15.4 -4.6 15.8 -5.8
2026-04-12T12:54:28.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:54:28.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:54:28.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454274
2026-04-12T12:54:28.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:54:28.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:54:28.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:54:28.998 [DEBUG] [Thread-189415] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:54:28.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:54:28.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:54:28.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:53:56', tmtdew=0.979365, humidity=93.6987, cloud=0.0, wind=23.9789, temperature=12.3165, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:54:29.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:54:29.090 [DEBUG] [Thread-189418] [transport.py] [_log()] starting thread (client mode): 0xb0fb68f0
2026-04-12T12:54:29.091 [DEBUG] [Thread-189418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:54:29.105 [DEBUG] [Thread-189418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:54:29.105 [INFO] [Thread-189418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:54:29.113 [DEBUG] [Thread-189418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:54:29.113 [DEBUG] [Thread-189418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:54:29.113 [DEBUG] [Thread-189418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:54:29.113 [DEBUG] [Thread-189418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] client lang: <none>
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] server lang: <none>
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] kex follows: False
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:54:29.114 [DEBUG] [Thread-189418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:54:29.115 [DEBUG] [Thread-189418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:54:29.115 [DEBUG] [Thread-189418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:54:29.115 [DEBUG] [Thread-189418] [transport.py] [_log()] Compression: none
2026-04-12T12:54:29.115 [DEBUG] [Thread-189418] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:54:29.173 [DEBUG] [Thread-189418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:54:29.173 [DEBUG] [Thread-189418] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:54:29.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:54:29.175 [DEBUG] [Thread-189418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:54:29.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:54:29.232 [DEBUG] [Thread-189418] [transport.py] [_log()] userauth is OK
2026-04-12T12:54:29.232 [DEBUG] [Thread-189418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:54:29.233 [DEBUG] [Thread-189418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:54:29.233 [DEBUG] [Thread-189418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:54:29.233 [DEBUG] [Thread-189418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:54:29.252 [INFO] [Thread-189418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:54:29.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:54:29.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:54:30.085 [DEBUG] [Thread-189418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:54:30.085 [DEBUG] [Thread-189418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:54:30.133 [DEBUG] [Thread-189418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:54:30.133 [DEBUG] [Thread-189418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:54:30.142 [DEBUG] [Thread-189418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:54:30.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:54:30.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:54: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
2026-04-12T12:54:30.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:54:30.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:54:30.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:54:30.180 [DEBUG] [Thread-189418] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:54:35.075 [DEBUG] [Thread-189420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:54:37.943 [DEBUG] [Thread-189421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:54:53.001 [DEBUG] [Thread-189422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:55:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:55:00.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:55:00.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:55:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 54, 32), 0.99748, 93.5992, 0.0, 22.7088, 12.3994, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:55:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:54:32
2026-04-12T12:55:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:55:02.138 [DEBUG] [Thread-189423] [transport.py] [_log()] starting thread (client mode): 0xa79690c0
2026-04-12T12:55:02.138 [DEBUG] [Thread-189423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:55:02.158 [DEBUG] [Thread-189423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:55:02.158 [INFO] [Thread-189423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:55:02.161 [DEBUG] [Thread-189423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:55:02.161 [DEBUG] [Thread-189423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:55:02.161 [DEBUG] [Thread-189423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:55:02.161 [DEBUG] [Thread-189423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] client lang: <none>
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] server lang: <none>
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] kex follows: False
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] Compression: none
2026-04-12T12:55:02.162 [DEBUG] [Thread-189423] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:55:02.171 [DEBUG] [Thread-189423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:55:02.171 [DEBUG] [Thread-189423] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:55:02.171 [DEBUG] [Thread-189423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:55:02.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:55:02.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:55:02.173 [DEBUG] [Thread-189423] [transport.py] [_log()] userauth is OK
2026-04-12T12:55:02.173 [DEBUG] [Thread-189423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:55:02.173 [DEBUG] [Thread-189423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:55:02.174 [DEBUG] [Thread-189423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:55:02.174 [DEBUG] [Thread-189423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:55:02.198 [INFO] [Thread-189423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:55:02.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:55:04.597 [DEBUG] [Thread-189423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:55:04.598 [DEBUG] [Thread-189423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:55:04.598 [DEBUG] [Thread-189423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:55:04.638 [DEBUG] [Thread-189423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:55:04.638 [DEBUG] [Thread-189423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:55:04.642 [DEBUG] [Thread-189423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:55:04.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:55:04.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:55:04.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:55:04.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:55:04.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:55:04.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:55:04.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:55:04.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:55:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:55:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:55:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:55:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:55:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:55:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:55:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:55:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:55:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:55:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:55:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:54:32', tmtdew=0.99748, humidity=93.5992, cloud=0.0, wind=22.7088, temperature=12.3994, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:55:04.671 [DEBUG] [Thread-189423] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:55:04.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:55:04.767 [DEBUG] [Thread-189426] [transport.py] [_log()] starting thread (client mode): 0xb0f570a0
2026-04-12T12:55:04.768 [DEBUG] [Thread-189426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:55:04.784 [DEBUG] [Thread-189426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:55:04.784 [INFO] [Thread-189426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:55:04.792 [DEBUG] [Thread-189426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:55:04.792 [DEBUG] [Thread-189426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:55:04.792 [DEBUG] [Thread-189426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] client lang: <none>
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] server lang: <none>
2026-04-12T12:55:04.793 [DEBUG] [Thread-189426] [transport.py] [_log()] kex follows: False
2026-04-12T12:55:04.794 [DEBUG] [Thread-189426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:55:04.794 [DEBUG] [Thread-189426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:55:04.794 [DEBUG] [Thread-189426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:55:04.794 [DEBUG] [Thread-189426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:55:04.794 [DEBUG] [Thread-189426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:55:04.794 [DEBUG] [Thread-189426] [transport.py] [_log()] Compression: none
2026-04-12T12:55:04.794 [DEBUG] [Thread-189426] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:55:04.852 [DEBUG] [Thread-189426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:55:04.853 [DEBUG] [Thread-189426] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:55:04.854 [DEBUG] [Thread-189426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:55:04.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:55:04.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:55:04.912 [DEBUG] [Thread-189426] [transport.py] [_log()] userauth is OK
2026-04-12T12:55:04.912 [DEBUG] [Thread-189426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:55:04.912 [DEBUG] [Thread-189426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:55:04.912 [DEBUG] [Thread-189426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:55:04.913 [DEBUG] [Thread-189426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:55:04.931 [INFO] [Thread-189426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:55:04.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:55:04.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:55:05.779 [DEBUG] [Thread-189426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:55:05.779 [DEBUG] [Thread-189426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:55:05.827 [DEBUG] [Thread-189426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:55:05.827 [DEBUG] [Thread-189426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:55:05.836 [DEBUG] [Thread-189426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:55:05.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:55:05.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:55:05.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:55:05.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:55:05.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:55:05.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:55:05.873 [DEBUG] [Thread-189426] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:55:08.039 [DEBUG] [Thread-189428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:55:18.171 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:55:18.172 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:55:23.087 [DEBUG] [Thread-189429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:55:35.107 [DEBUG] [Thread-189430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:55:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:55:35.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:55:35.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:55:37.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 55, 7), 1.00926, 93.533, 0.0, 23.0792, 12.4327, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:55:37.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:55:07
2026-04-12T12:55:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:55:37.799 [DEBUG] [Thread-189431] [transport.py] [_log()] starting thread (client mode): 0xb39c5cf0
2026-04-12T12:55:37.799 [DEBUG] [Thread-189431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:55:37.817 [DEBUG] [Thread-189431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:55:37.817 [INFO] [Thread-189431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] client lang: <none>
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] server lang: <none>
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] kex follows: False
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] Compression: none
2026-04-12T12:55:37.820 [DEBUG] [Thread-189431] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:55:37.837 [DEBUG] [Thread-189431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:55:37.838 [DEBUG] [Thread-189431] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:55:37.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:55:37.839 [DEBUG] [Thread-189431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:55:37.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:55:37.840 [DEBUG] [Thread-189431] [transport.py] [_log()] userauth is OK
2026-04-12T12:55:37.840 [DEBUG] [Thread-189431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:55:37.840 [DEBUG] [Thread-189431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:55:37.840 [DEBUG] [Thread-189431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:55:37.840 [DEBUG] [Thread-189431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:55:37.864 [INFO] [Thread-189431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:55:37.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:55:38.125 [DEBUG] [Thread-189433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:55:45.058 [DEBUG] [Thread-189431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:55:45.058 [DEBUG] [Thread-189431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:55:45.058 [DEBUG] [Thread-189431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:55:45.099 [DEBUG] [Thread-189431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:55:45.099 [DEBUG] [Thread-189431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:55:45.102 [DEBUG] [Thread-189431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:55:45.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:55:45.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:55:45.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:55:45.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:55:45.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:55:45.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:55:45.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:55:45.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:55:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:55:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:55:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:55:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:55:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:55:45.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:55:45.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:55:45.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:55:45.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:55:45.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:55:45.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:55:07', tmtdew=1.00926, humidity=93.533, cloud=0.0, wind=23.0792, temperature=12.4327, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:55:45.125 [DEBUG] [Thread-189431] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:55:45.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:55:45.216 [DEBUG] [Thread-189435] [transport.py] [_log()] starting thread (client mode): 0xae52eb00
2026-04-12T12:55:45.216 [DEBUG] [Thread-189435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:55:45.230 [DEBUG] [Thread-189435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:55:45.230 [INFO] [Thread-189435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] client lang: <none>
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] server lang: <none>
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] kex follows: False
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:55:45.238 [DEBUG] [Thread-189435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:55:45.239 [DEBUG] [Thread-189435] [transport.py] [_log()] Compression: none
2026-04-12T12:55:45.239 [DEBUG] [Thread-189435] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:55:45.301 [DEBUG] [Thread-189435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:55:45.302 [DEBUG] [Thread-189435] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:55:45.302 [DEBUG] [Thread-189435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:55:45.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:55:45.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:55:45.367 [DEBUG] [Thread-189435] [transport.py] [_log()] userauth is OK
2026-04-12T12:55:45.367 [DEBUG] [Thread-189435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:55:45.367 [DEBUG] [Thread-189435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:55:45.368 [DEBUG] [Thread-189435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:55:45.368 [DEBUG] [Thread-189435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:55:45.390 [INFO] [Thread-189435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:55:45.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:55:45.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:55:46.213 [DEBUG] [Thread-189435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:55:46.214 [DEBUG] [Thread-189435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:55:46.262 [DEBUG] [Thread-189435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:55:46.262 [DEBUG] [Thread-189435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:55:46.272 [DEBUG] [Thread-189435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:55:46.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:55:46.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:55:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:55:46.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:55:46.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:55:46.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:55:46.308 [DEBUG] [Thread-189435] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:55:53.167 [DEBUG] [Thread-189437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:08.218 [DEBUG] [Thread-189438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:56:16.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:56:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:56:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 55, 43), 2.02943, 87.4029, 0.0, 27.4162, 12.8665, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:56:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:55:43
2026-04-12T12:56:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:56:18.148 [DEBUG] [Thread-189439] [transport.py] [_log()] starting thread (client mode): 0xa7968280
2026-04-12T12:56:18.148 [DEBUG] [Thread-189439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:56:18.169 [DEBUG] [Thread-189439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:56:18.170 [INFO] [Thread-189439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:56:18.174 [DEBUG] [Thread-189439] [transport.py] [_log()] client lang: <none>
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] server lang: <none>
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] kex follows: False
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] Compression: none
2026-04-12T12:56:18.175 [DEBUG] [Thread-189439] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:56:18.193 [DEBUG] [Thread-189439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:56:18.194 [DEBUG] [Thread-189439] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:56:18.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:56:18.195 [DEBUG] [Thread-189439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:56:18.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:56:18.197 [DEBUG] [Thread-189439] [transport.py] [_log()] userauth is OK
2026-04-12T12:56:18.198 [DEBUG] [Thread-189439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:56:18.198 [DEBUG] [Thread-189439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:56:18.198 [DEBUG] [Thread-189439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:56:18.198 [DEBUG] [Thread-189439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:56:18.220 [INFO] [Thread-189439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:56:18.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:56:18.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:18.326 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:18.974 [DEBUG] [Thread-189439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:56:18.974 [DEBUG] [Thread-189439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:56:18.975 [DEBUG] [Thread-189439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:56:19.015 [DEBUG] [Thread-189439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:56:19.015 [DEBUG] [Thread-189439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:56:19.019 [DEBUG] [Thread-189439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:56:19.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:56:19.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:56:19.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:56:19.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:56:19.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:56:19.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:56:19.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:56:19.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:56:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:56:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:56:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:56:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:56:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:56:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:56:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:56:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:56:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:56:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:56:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:55:43', tmtdew=2.02943, humidity=87.4029, cloud=0.0, wind=27.4162, temperature=12.8665, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:56:19.047 [DEBUG] [Thread-189439] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:56:19.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:56:19.138 [DEBUG] [Thread-189442] [transport.py] [_log()] starting thread (client mode): 0xb0f42290
2026-04-12T12:56:19.138 [DEBUG] [Thread-189442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:56:19.153 [DEBUG] [Thread-189442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:56:19.153 [INFO] [Thread-189442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:56:19.161 [DEBUG] [Thread-189442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:56:19.161 [DEBUG] [Thread-189442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] client lang: <none>
2026-04-12T12:56:19.162 [DEBUG] [Thread-189442] [transport.py] [_log()] server lang: <none>
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] kex follows: False
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] Compression: none
2026-04-12T12:56:19.163 [DEBUG] [Thread-189442] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:56:19.220 [DEBUG] [Thread-189442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:56:19.221 [DEBUG] [Thread-189442] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:56:19.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:56:19.222 [DEBUG] [Thread-189442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:56:19.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:56:19.279 [DEBUG] [Thread-189442] [transport.py] [_log()] userauth is OK
2026-04-12T12:56:19.280 [DEBUG] [Thread-189442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:56:19.280 [DEBUG] [Thread-189442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:56:19.280 [DEBUG] [Thread-189442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:56:19.280 [DEBUG] [Thread-189442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:56:19.294 [INFO] [Thread-189442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:56:19.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:56:19.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:56:20.118 [DEBUG] [Thread-189442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:56:20.118 [DEBUG] [Thread-189442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:56:20.166 [DEBUG] [Thread-189442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:56:20.166 [DEBUG] [Thread-189442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:56:20.176 [DEBUG] [Thread-189442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:56:20.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:56:20.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:56:20.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:56:20.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:56:20.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:56:20.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:56:20.213 [DEBUG] [Thread-189442] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:56:23.257 [DEBUG] [Thread-189444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:35.140 [DEBUG] [Thread-189445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:38.311 [DEBUG] [Thread-189446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:56:50.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:56:50.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:56:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 56, 19), 1.05905, 93.2344, 0.0, 19.48, 12.2831, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:56:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:56:19
2026-04-12T12:56:51.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:56:52.035 [DEBUG] [Thread-189447] [transport.py] [_log()] starting thread (client mode): 0xb0f43e50
2026-04-12T12:56:52.035 [DEBUG] [Thread-189447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:56:52.056 [DEBUG] [Thread-189447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:56:52.056 [INFO] [Thread-189447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:56:52.059 [DEBUG] [Thread-189447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:56:52.059 [DEBUG] [Thread-189447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:56:52.059 [DEBUG] [Thread-189447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:56:52.059 [DEBUG] [Thread-189447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:52.059 [DEBUG] [Thread-189447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:52.059 [DEBUG] [Thread-189447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:52.059 [DEBUG] [Thread-189447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] client lang: <none>
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] server lang: <none>
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] kex follows: False
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] Compression: none
2026-04-12T12:56:52.060 [DEBUG] [Thread-189447] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:56:52.077 [DEBUG] [Thread-189447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:56:52.078 [DEBUG] [Thread-189447] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:56:52.079 [DEBUG] [Thread-189447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:56:52.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:56:52.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:56:52.081 [DEBUG] [Thread-189447] [transport.py] [_log()] userauth is OK
2026-04-12T12:56:52.081 [DEBUG] [Thread-189447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:56:52.081 [DEBUG] [Thread-189447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:56:52.081 [DEBUG] [Thread-189447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:56:52.081 [DEBUG] [Thread-189447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:56:52.102 [INFO] [Thread-189447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:56:52.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:56:52.891 [DEBUG] [Thread-189447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:56:52.891 [DEBUG] [Thread-189447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:56:52.891 [DEBUG] [Thread-189447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:56:52.932 [DEBUG] [Thread-189447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:56:52.932 [DEBUG] [Thread-189447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:56:52.935 [DEBUG] [Thread-189447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:56:52.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:56:52.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:56:52.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:56:52.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:56:52.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:56:52.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:56:52.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:56:52.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:56:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:56:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:56:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:56:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:56:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:56:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:56:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:56:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:56:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:56:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:56:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:56:19', tmtdew=1.05905, humidity=93.2344, cloud=0.0, wind=19.48, temperature=12.2831, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:56:52.962 [DEBUG] [Thread-189447] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:56:53.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:56:53.063 [DEBUG] [Thread-189450] [transport.py] [_log()] starting thread (client mode): 0xae52eb00
2026-04-12T12:56:53.063 [DEBUG] [Thread-189450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:56:53.077 [DEBUG] [Thread-189450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:56:53.078 [INFO] [Thread-189450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:56:53.085 [DEBUG] [Thread-189450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:56:53.085 [DEBUG] [Thread-189450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:56:53.085 [DEBUG] [Thread-189450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] client lang: <none>
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] server lang: <none>
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] kex follows: False
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] Compression: none
2026-04-12T12:56:53.086 [DEBUG] [Thread-189450] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:56:53.144 [DEBUG] [Thread-189450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:56:53.145 [DEBUG] [Thread-189450] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:56:53.145 [DEBUG] [Thread-189450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:56:53.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:56:53.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:56:53.200 [DEBUG] [Thread-189450] [transport.py] [_log()] userauth is OK
2026-04-12T12:56:53.200 [DEBUG] [Thread-189450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:56:53.201 [DEBUG] [Thread-189450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:56:53.201 [DEBUG] [Thread-189450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:56:53.201 [DEBUG] [Thread-189450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:56:53.220 [INFO] [Thread-189450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:56:53.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:56:53.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:56:53.351 [DEBUG] [Thread-189452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:56:54.034 [DEBUG] [Thread-189450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:56:54.034 [DEBUG] [Thread-189450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:56:54.082 [DEBUG] [Thread-189450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:56:54.082 [DEBUG] [Thread-189450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:56:54.092 [DEBUG] [Thread-189450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:56:54.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:56:54.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:56:54.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
2026-04-12T12:56:54.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:56:54.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:56:54.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:56:54.128 [DEBUG] [Thread-189450] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:57:08.405 [DEBUG] [Thread-189453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:57:18.471 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:57:18.472 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:57:23.441 [DEBUG] [Thread-189454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:57:24.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:57:24.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:57:24.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:57:25.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 56, 54), 2.01537, 87.5019, 0.0, 24.5938, 13.0651, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:57:25.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:56:54
2026-04-12T12:57:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:57:25.965 [DEBUG] [Thread-189455] [transport.py] [_log()] starting thread (client mode): 0xae52f8b0
2026-04-12T12:57:25.965 [DEBUG] [Thread-189455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:57:25.985 [DEBUG] [Thread-189455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:57:25.985 [INFO] [Thread-189455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:57:25.988 [DEBUG] [Thread-189455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:57:25.988 [DEBUG] [Thread-189455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:57:25.988 [DEBUG] [Thread-189455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:57:25.988 [DEBUG] [Thread-189455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:57:25.988 [DEBUG] [Thread-189455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:57:25.988 [DEBUG] [Thread-189455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] client lang: <none>
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] server lang: <none>
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] kex follows: False
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:57:25.989 [DEBUG] [Thread-189455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:57:25.990 [DEBUG] [Thread-189455] [transport.py] [_log()] Compression: none
2026-04-12T12:57:25.990 [DEBUG] [Thread-189455] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:57:26.011 [DEBUG] [Thread-189455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:57:26.012 [DEBUG] [Thread-189455] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:57:26.012 [DEBUG] [Thread-189455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:57:26.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:57:26.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:57:26.014 [DEBUG] [Thread-189455] [transport.py] [_log()] userauth is OK
2026-04-12T12:57:26.014 [DEBUG] [Thread-189455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:57:26.014 [DEBUG] [Thread-189455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:57:26.015 [DEBUG] [Thread-189455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:57:26.015 [DEBUG] [Thread-189455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:57:26.034 [INFO] [Thread-189455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:57:26.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:57:26.842 [DEBUG] [Thread-189455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:57:26.842 [DEBUG] [Thread-189455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:57:26.843 [DEBUG] [Thread-189455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:57:26.883 [DEBUG] [Thread-189455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:57:26.883 [DEBUG] [Thread-189455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:57:26.885 [DEBUG] [Thread-189455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:57:26.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:57:26.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:57:26.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:57:26.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:57:26.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:57:26.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:57:26.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:57:26.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:57:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:57:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:57:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:57:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:57:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:57:26.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:57:26.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:57:26.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:57:26.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:57:26.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:57:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:56:54', tmtdew=2.01537, humidity=87.5019, cloud=0.0, wind=24.5938, temperature=13.0651, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:57:26.911 [DEBUG] [Thread-189455] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:57:26.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:57:27.003 [DEBUG] [Thread-189458] [transport.py] [_log()] starting thread (client mode): 0xb0f42410
2026-04-12T12:57:27.003 [DEBUG] [Thread-189458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:57:27.019 [DEBUG] [Thread-189458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:57:27.019 [INFO] [Thread-189458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:57:27.026 [DEBUG] [Thread-189458] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:57:27.027 [DEBUG] [Thread-189458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:57:27.028 [DEBUG] [Thread-189458] [transport.py] [_log()] client lang: <none>
2026-04-12T12:57:27.028 [DEBUG] [Thread-189458] [transport.py] [_log()] server lang: <none>
2026-04-12T12:57:27.028 [DEBUG] [Thread-189458] [transport.py] [_log()] kex follows: False
2026-04-12T12:57:27.028 [DEBUG] [Thread-189458] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:57:27.028 [DEBUG] [Thread-189458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:57:27.028 [DEBUG] [Thread-189458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:57:27.029 [DEBUG] [Thread-189458] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:57:27.029 [DEBUG] [Thread-189458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:57:27.029 [DEBUG] [Thread-189458] [transport.py] [_log()] Compression: none
2026-04-12T12:57:27.029 [DEBUG] [Thread-189458] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:57:27.085 [DEBUG] [Thread-189458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:57:27.085 [DEBUG] [Thread-189458] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:57:27.086 [DEBUG] [Thread-189458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:57:27.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:57:27.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:57:27.140 [DEBUG] [Thread-189458] [transport.py] [_log()] userauth is OK
2026-04-12T12:57:27.141 [DEBUG] [Thread-189458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:57:27.141 [DEBUG] [Thread-189458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:57:27.141 [DEBUG] [Thread-189458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:57:27.141 [DEBUG] [Thread-189458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:57:27.159 [INFO] [Thread-189458] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:57:27.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:57:27.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:57:27.983 [DEBUG] [Thread-189458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:57:27.983 [DEBUG] [Thread-189458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:57:28.031 [DEBUG] [Thread-189458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:57:28.031 [DEBUG] [Thread-189458] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:57:28.039 [DEBUG] [Thread-189458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:57:28.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:57:28.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:57:28.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:57:28.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:57:28.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:57:28.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:57:28.073 [DEBUG] [Thread-189458] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:57:35.186 [DEBUG] [Thread-189460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:57:38.479 [DEBUG] [Thread-189461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:57:53.532 [DEBUG] [Thread-189462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:57:58.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:57:58.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:57:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:57:59.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 57, 29), 1.01914, 93.1845, 0.0, 19.3212, 12.4324, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:57:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:57:29
2026-04-12T12:57:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:57:59.871 [DEBUG] [Thread-189463] [transport.py] [_log()] starting thread (client mode): 0xb0fb73d0
2026-04-12T12:57:59.871 [DEBUG] [Thread-189463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:57:59.891 [DEBUG] [Thread-189463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:57:59.891 [INFO] [Thread-189463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] client lang: <none>
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] server lang: <none>
2026-04-12T12:57:59.895 [DEBUG] [Thread-189463] [transport.py] [_log()] kex follows: False
2026-04-12T12:57:59.896 [DEBUG] [Thread-189463] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:57:59.896 [DEBUG] [Thread-189463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:57:59.896 [DEBUG] [Thread-189463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:57:59.896 [DEBUG] [Thread-189463] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:57:59.896 [DEBUG] [Thread-189463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:57:59.896 [DEBUG] [Thread-189463] [transport.py] [_log()] Compression: none
2026-04-12T12:57:59.896 [DEBUG] [Thread-189463] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:57:59.915 [DEBUG] [Thread-189463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:57:59.916 [DEBUG] [Thread-189463] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:57:59.916 [DEBUG] [Thread-189463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:57:59.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:57:59.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:57:59.957 [DEBUG] [Thread-189463] [transport.py] [_log()] userauth is OK
2026-04-12T12:57:59.957 [DEBUG] [Thread-189463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:57:59.957 [DEBUG] [Thread-189463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:57:59.957 [DEBUG] [Thread-189463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:57:59.957 [DEBUG] [Thread-189463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:57:59.983 [INFO] [Thread-189463] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:57:59.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:58:00.736 [DEBUG] [Thread-189463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:58:00.736 [DEBUG] [Thread-189463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:58:00.736 [DEBUG] [Thread-189463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:58:00.777 [DEBUG] [Thread-189463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:58:00.777 [DEBUG] [Thread-189463] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:58:00.779 [DEBUG] [Thread-189463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:58:00.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:58:00.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:58:00.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:58:00.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:58:00.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:58:00.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:58:00.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:58:00.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:58:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:58:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:58:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:58:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:58:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:58:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:58:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:58:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:58:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:58:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:58:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:57:29', tmtdew=1.01914, humidity=93.1845, cloud=0.0, wind=19.3212, temperature=12.4324, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:58:00.805 [DEBUG] [Thread-189463] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:58:00.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:58:00.902 [DEBUG] [Thread-189466] [transport.py] [_log()] starting thread (client mode): 0xb0fb6ec0
2026-04-12T12:58:00.902 [DEBUG] [Thread-189466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:58:00.916 [DEBUG] [Thread-189466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:58:00.916 [INFO] [Thread-189466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:58:00.924 [DEBUG] [Thread-189466] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:58:00.925 [DEBUG] [Thread-189466] [transport.py] [_log()] client lang: <none>
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] server lang: <none>
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] kex follows: False
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] Compression: none
2026-04-12T12:58:00.926 [DEBUG] [Thread-189466] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:58:00.985 [DEBUG] [Thread-189466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:58:00.985 [DEBUG] [Thread-189466] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:58:00.986 [DEBUG] [Thread-189466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:58:00.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:58:00.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:58:01.040 [DEBUG] [Thread-189466] [transport.py] [_log()] userauth is OK
2026-04-12T12:58:01.041 [DEBUG] [Thread-189466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:58:01.041 [DEBUG] [Thread-189466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:58:01.041 [DEBUG] [Thread-189466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:58:01.041 [DEBUG] [Thread-189466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:58:01.055 [INFO] [Thread-189466] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:58:01.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:58:01.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:58:01.912 [DEBUG] [Thread-189466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:58:01.912 [DEBUG] [Thread-189466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:58:01.960 [DEBUG] [Thread-189466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:58:01.960 [DEBUG] [Thread-189466] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:58:01.969 [DEBUG] [Thread-189466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:58:01.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:58:01.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:58:01.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T12:58:01.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:58:01.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:58:01.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:58:02.006 [DEBUG] [Thread-189466] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:58:08.569 [DEBUG] [Thread-189468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:58:18.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:58:18.619 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:58:23.628 [DEBUG] [Thread-189469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:58:32.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:58:32.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:58:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:58:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 58, 5), 1.03319, 93.1016, 0.0, 21.4909, 12.4158, 2, 2, 0, 2, 0, 0),)
2026-04-12T12:58:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:58:05
2026-04-12T12:58:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:58:33.887 [DEBUG] [Thread-189470] [transport.py] [_log()] starting thread (client mode): 0xb0fb73d0
2026-04-12T12:58:33.887 [DEBUG] [Thread-189470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:58:33.913 [DEBUG] [Thread-189470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:58:33.913 [INFO] [Thread-189470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:58:33.917 [DEBUG] [Thread-189470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] client lang: <none>
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] server lang: <none>
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] kex follows: False
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:58:33.918 [DEBUG] [Thread-189470] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:58:33.919 [DEBUG] [Thread-189470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:58:33.919 [DEBUG] [Thread-189470] [transport.py] [_log()] Compression: none
2026-04-12T12:58:33.919 [DEBUG] [Thread-189470] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:58:33.938 [DEBUG] [Thread-189470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:58:33.938 [DEBUG] [Thread-189470] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:58:33.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:58:33.939 [DEBUG] [Thread-189470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:58:33.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:58:33.940 [DEBUG] [Thread-189470] [transport.py] [_log()] userauth is OK
2026-04-12T12:58:33.941 [DEBUG] [Thread-189470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:58:33.941 [DEBUG] [Thread-189470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:58:33.941 [DEBUG] [Thread-189470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:58:33.941 [DEBUG] [Thread-189470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:58:33.957 [INFO] [Thread-189470] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:58:33.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:58:34.746 [DEBUG] [Thread-189470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:58:34.746 [DEBUG] [Thread-189470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:58:34.746 [DEBUG] [Thread-189470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:58:34.786 [DEBUG] [Thread-189470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:58:34.787 [DEBUG] [Thread-189470] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:58:34.789 [DEBUG] [Thread-189470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:58:34.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:58:34.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:58:34.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:58:34.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:58:34.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:58:34.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:58:34.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:58:34.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:58:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:58:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:58:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:58:34.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:58:34.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:58:34.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:58:34.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:58:34.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:58:34.811 [DEBUG] [Thread-189470] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:58:34.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:58:34.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:58:34.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:58:05', tmtdew=1.03319, humidity=93.1016, cloud=0.0, wind=21.4909, temperature=12.4158, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:58:34.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:58:34.903 [DEBUG] [Thread-189473] [transport.py] [_log()] starting thread (client mode): 0xae5b4e50
2026-04-12T12:58:34.903 [DEBUG] [Thread-189473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:58:34.918 [DEBUG] [Thread-189473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T12:58:34.918 [INFO] [Thread-189473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T12:58:34.925 [DEBUG] [Thread-189473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:58:34.925 [DEBUG] [Thread-189473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T12:58:34.925 [DEBUG] [Thread-189473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:58:34.925 [DEBUG] [Thread-189473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:58:34.925 [DEBUG] [Thread-189473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] client lang: <none>
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] server lang: <none>
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] kex follows: False
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:58:34.926 [DEBUG] [Thread-189473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:58:34.927 [DEBUG] [Thread-189473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:58:34.927 [DEBUG] [Thread-189473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:58:34.927 [DEBUG] [Thread-189473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:58:34.927 [DEBUG] [Thread-189473] [transport.py] [_log()] Compression: none
2026-04-12T12:58:34.927 [DEBUG] [Thread-189473] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:58:34.983 [DEBUG] [Thread-189473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:58:34.984 [DEBUG] [Thread-189473] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:58:34.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T12:58:34.985 [DEBUG] [Thread-189473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T12:58:34.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:58:35.040 [DEBUG] [Thread-189473] [transport.py] [_log()] userauth is OK
2026-04-12T12:58:35.040 [DEBUG] [Thread-189473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:58:35.040 [DEBUG] [Thread-189473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:58:35.040 [DEBUG] [Thread-189473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T12:58:35.041 [DEBUG] [Thread-189473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:58:35.058 [INFO] [Thread-189473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:58:35.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T12:58:35.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:58:35.219 [DEBUG] [Thread-189475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:58:35.883 [DEBUG] [Thread-189473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:58:35.884 [DEBUG] [Thread-189473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:58:35.932 [DEBUG] [Thread-189473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:58:35.932 [DEBUG] [Thread-189473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:58:35.941 [DEBUG] [Thread-189473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:58:35.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:58:35.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T12:58: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') -> 00000000
2026-04-12T12:58:35.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:58:35.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:58:35.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:58:35.975 [DEBUG] [Thread-189473] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:58:38.667 [DEBUG] [Thread-189476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:58:53.719 [DEBUG] [Thread-189477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:59:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T12:59:05.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T12:59:06.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T12:59:07.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 12, 58, 40), 2.16762, 86.606, 0.0, 22.1947, 12.8988, 1, 1, 0, 2, 0, 0),)
2026-04-12T12:59:07.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 12:58:40
2026-04-12T12:59:07.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T12:59:07.855 [DEBUG] [Thread-189478] [transport.py] [_log()] starting thread (client mode): 0xae5b4fd0
2026-04-12T12:59:07.855 [DEBUG] [Thread-189478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T12:59:07.875 [DEBUG] [Thread-189478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T12:59:07.875 [INFO] [Thread-189478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] client lang: <none>
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] server lang: <none>
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] kex follows: False
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T12:59:07.878 [DEBUG] [Thread-189478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T12:59:07.879 [DEBUG] [Thread-189478] [transport.py] [_log()] Compression: none
2026-04-12T12:59:07.879 [DEBUG] [Thread-189478] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T12:59:07.894 [DEBUG] [Thread-189478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T12:59:07.895 [DEBUG] [Thread-189478] [transport.py] [_log()] Switch to new keys ...
2026-04-12T12:59:07.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T12:59:07.896 [DEBUG] [Thread-189478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T12:59:07.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T12:59:07.898 [DEBUG] [Thread-189478] [transport.py] [_log()] userauth is OK
2026-04-12T12:59:07.898 [DEBUG] [Thread-189478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T12:59:07.898 [DEBUG] [Thread-189478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T12:59:07.898 [DEBUG] [Thread-189478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T12:59:07.898 [DEBUG] [Thread-189478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T12:59:07.924 [INFO] [Thread-189478] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T12:59:07.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T12:59:08.738 [DEBUG] [Thread-189478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T12:59:08.738 [DEBUG] [Thread-189478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T12:59:08.738 [DEBUG] [Thread-189478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T12:59:08.757 [DEBUG] [Thread-189480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:59:08.779 [DEBUG] [Thread-189478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T12:59:08.779 [DEBUG] [Thread-189478] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T12:59:08.783 [DEBUG] [Thread-189478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T12:59:08.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T12:59:08.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T12:59:08.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T12:59:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T12:59:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T12:59:08.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T12:59:08.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T12:59:08.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T12:59:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T12:59:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.454622 -999.00  +12.30  21.09     89  +10.60 1 3 1 3 1   888    0 1.79 3.19 ----- 16.9 21.1 272.2 26.9 16.3 -7.0 15.8 -5.5 15.4 -4.2 15.8 -5.9
2026-04-12T12:59:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T12:59:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T12:59:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.454622
2026-04-12T12:59:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T12:59:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T12:59:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T12:59:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T12:59:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T12:59:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T12:58:40', tmtdew=2.16762, humidity=86.606, cloud=0.0, wind=22.1947, temperature=12.8988, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T10:54:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T12:59:08.809 [DEBUG] [Thread-189478] [transport.py] [_log()] EOF in transport thread
2026-04-12T12:59:08.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T12:59:18.773 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:59:18.775 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:59:23.795 [DEBUG] [Thread-189482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:59:35.268 [DEBUG] [Thread-189483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:59:38.848 [DEBUG] [Thread-189484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T12:59:53.887 [DEBUG] [Thread-189485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:00:08.923 [DEBUG] [Thread-189486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:00:18.925 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:00:18.927 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:00:23.964 [DEBUG] [Thread-189487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:00:35.303 [DEBUG] [Thread-189488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:00:39.000 [DEBUG] [Thread-189489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:00:54.035 [DEBUG] [Thread-189490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:09.071 [DEBUG] [Thread-189491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:19.078 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:19.079 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:20.639 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T13:01:24.108 [DEBUG] [Thread-189492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:35.345 [DEBUG] [Thread-189493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:39.143 [DEBUG] [Thread-189494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:01:50.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:01:50.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:01:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 1, 38), 2.09609, 87.0371, 0.0, 15.2446, 13.0978, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:01:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:01:38
2026-04-12T13:01:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:01:52.433 [DEBUG] [Thread-189495] [transport.py] [_log()] starting thread (client mode): 0xae5b7d60
2026-04-12T13:01:52.433 [DEBUG] [Thread-189495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:01:52.453 [DEBUG] [Thread-189495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:01:52.453 [INFO] [Thread-189495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] client lang: <none>
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] server lang: <none>
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] kex follows: False
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:01:52.456 [DEBUG] [Thread-189495] [transport.py] [_log()] Compression: none
2026-04-12T13:01:52.457 [DEBUG] [Thread-189495] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:01:52.473 [DEBUG] [Thread-189495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:01:52.474 [DEBUG] [Thread-189495] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:01:52.475 [DEBUG] [Thread-189495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:01:52.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:01:52.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:01:52.477 [DEBUG] [Thread-189495] [transport.py] [_log()] userauth is OK
2026-04-12T13:01:52.477 [DEBUG] [Thread-189495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:01:52.477 [DEBUG] [Thread-189495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:01:52.477 [DEBUG] [Thread-189495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:01:52.477 [DEBUG] [Thread-189495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:01:52.495 [INFO] [Thread-189495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:01:52.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:01:53.140 [DEBUG] [Thread-189495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:01:53.140 [DEBUG] [Thread-189495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:01:53.140 [DEBUG] [Thread-189495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:01:53.181 [DEBUG] [Thread-189495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:01:53.181 [DEBUG] [Thread-189495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:01:53.184 [DEBUG] [Thread-189495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:01:53.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:01:53.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:01:53.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:01:53.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:01:53.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:01:53.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:01:53.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:01:53.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:01:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:01:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.459483 -999.00  +12.30  13.50     88  +10.40 1 3 1 3 1   888    0 1.94 7.41 ----- 10.6 13.5 277.4 21.4 16.2 -6.6 15.7 -6.0 15.2 -4.9 15.8 -5.3
2026-04-12T13:01:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:01:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:01:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.459483
2026-04-12T13:01:53.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:01:53.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:01:53.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:01:53.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:01:53.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:01:53.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:01:38', tmtdew=2.09609, humidity=87.0371, cloud=0.0, wind=15.2446, temperature=13.0978, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:01:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:01:53.210 [DEBUG] [Thread-189495] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:01:53.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:01:53.307 [DEBUG] [Thread-189498] [transport.py] [_log()] starting thread (client mode): 0xae5b5c00
2026-04-12T13:01:53.307 [DEBUG] [Thread-189498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:01:53.322 [DEBUG] [Thread-189498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:01:53.322 [INFO] [Thread-189498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:01:53.330 [DEBUG] [Thread-189498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:01:53.330 [DEBUG] [Thread-189498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] client lang: <none>
2026-04-12T13:01:53.331 [DEBUG] [Thread-189498] [transport.py] [_log()] server lang: <none>
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] kex follows: False
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] Compression: none
2026-04-12T13:01:53.332 [DEBUG] [Thread-189498] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:01:53.390 [DEBUG] [Thread-189498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:01:53.390 [DEBUG] [Thread-189498] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:01:53.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:01:53.392 [DEBUG] [Thread-189498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:01:53.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:01:53.449 [DEBUG] [Thread-189498] [transport.py] [_log()] userauth is OK
2026-04-12T13:01:53.450 [DEBUG] [Thread-189498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:01:53.450 [DEBUG] [Thread-189498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:01:53.450 [DEBUG] [Thread-189498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:01:53.450 [DEBUG] [Thread-189498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:01:53.475 [INFO] [Thread-189498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:01:53.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:01:53.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:01:54.179 [DEBUG] [Thread-189500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:01:54.310 [DEBUG] [Thread-189498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:01:54.310 [DEBUG] [Thread-189498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:01:54.358 [DEBUG] [Thread-189498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:01:54.358 [DEBUG] [Thread-189498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:01:54.367 [DEBUG] [Thread-189498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:01:54.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:01:54.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:01:54.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:01:54.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:01:54.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:01:54.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:01:54.404 [DEBUG] [Thread-189498] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:02:09.235 [DEBUG] [Thread-189501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:02:19.232 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:02:19.233 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:02:24.273 [DEBUG] [Thread-189502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:02:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:02:24.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:02:24.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:02:25.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 2, 14), 1.07118, 93.1842, 0.0, 22.0208, 12.5148, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:02:25.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:02:14
2026-04-12T13:02:26.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:02:26.290 [DEBUG] [Thread-189503] [transport.py] [_log()] starting thread (client mode): 0xae5b4430
2026-04-12T13:02:26.290 [DEBUG] [Thread-189503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:02:26.310 [DEBUG] [Thread-189503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:02:26.310 [INFO] [Thread-189503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:02:26.314 [DEBUG] [Thread-189503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] client lang: <none>
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] server lang: <none>
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] kex follows: False
2026-04-12T13:02:26.315 [DEBUG] [Thread-189503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:02:26.316 [DEBUG] [Thread-189503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:02:26.316 [DEBUG] [Thread-189503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:02:26.316 [DEBUG] [Thread-189503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:02:26.316 [DEBUG] [Thread-189503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:02:26.316 [DEBUG] [Thread-189503] [transport.py] [_log()] Compression: none
2026-04-12T13:02:26.316 [DEBUG] [Thread-189503] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:02:26.331 [DEBUG] [Thread-189503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:02:26.332 [DEBUG] [Thread-189503] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:02:26.332 [DEBUG] [Thread-189503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:02:26.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:02:26.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:02:26.335 [DEBUG] [Thread-189503] [transport.py] [_log()] userauth is OK
2026-04-12T13:02:26.335 [DEBUG] [Thread-189503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:02:26.335 [DEBUG] [Thread-189503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:02:26.335 [DEBUG] [Thread-189503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:02:26.335 [DEBUG] [Thread-189503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:02:26.358 [INFO] [Thread-189503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:02:26.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:02:26.992 [DEBUG] [Thread-189503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:02:26.992 [DEBUG] [Thread-189503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:02:26.992 [DEBUG] [Thread-189503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:02:27.033 [DEBUG] [Thread-189503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:02:27.033 [DEBUG] [Thread-189503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:02:27.036 [DEBUG] [Thread-189503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:02:27.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:02:27.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:02:27.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:02:27.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:02:27.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:02:27.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:02:27.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:02:27.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:02:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:02:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.459830 -999.00  +12.30  21.76     88  +10.40 1 3 1 3 1   888    0 1.99 7.98 ----- 20.7 21.8 277.2 25.0 16.2 -6.7 15.8 -6.1 15.2 -6.1 15.8 -5.3
2026-04-12T13:02:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:02:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:02:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.459830
2026-04-12T13:02:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:02:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:02:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:02:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:02:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:02:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:02:14', tmtdew=1.07118, humidity=93.1842, cloud=0.0, wind=22.0208, temperature=12.5148, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:02:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:02:27.062 [DEBUG] [Thread-189503] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:02:27.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:02:27.157 [DEBUG] [Thread-189506] [transport.py] [_log()] starting thread (client mode): 0xae5b5e40
2026-04-12T13:02:27.157 [DEBUG] [Thread-189506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:02:27.173 [DEBUG] [Thread-189506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:02:27.173 [INFO] [Thread-189506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:02:27.180 [DEBUG] [Thread-189506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] client lang: <none>
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] server lang: <none>
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] kex follows: False
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:02:27.181 [DEBUG] [Thread-189506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:02:27.182 [DEBUG] [Thread-189506] [transport.py] [_log()] Compression: none
2026-04-12T13:02:27.182 [DEBUG] [Thread-189506] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:02:27.242 [DEBUG] [Thread-189506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:02:27.242 [DEBUG] [Thread-189506] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:02:27.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:02:27.244 [DEBUG] [Thread-189506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:02:27.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:02:27.301 [DEBUG] [Thread-189506] [transport.py] [_log()] userauth is OK
2026-04-12T13:02:27.301 [DEBUG] [Thread-189506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:02:27.301 [DEBUG] [Thread-189506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:02:27.301 [DEBUG] [Thread-189506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:02:27.301 [DEBUG] [Thread-189506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:02:27.320 [INFO] [Thread-189506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:02:27.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:02:27.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:02:28.217 [DEBUG] [Thread-189506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:02:28.217 [DEBUG] [Thread-189506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:02:28.265 [DEBUG] [Thread-189506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:02:28.265 [DEBUG] [Thread-189506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:02:28.274 [DEBUG] [Thread-189506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:02:28.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:02:28.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:02:28.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:02:28.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:02:28.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:02:28.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:02:28.307 [DEBUG] [Thread-189506] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:02:35.378 [DEBUG] [Thread-189508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:02:39.312 [DEBUG] [Thread-189509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:02:54.367 [DEBUG] [Thread-189510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:02:58.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:02:58.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:02:58.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:02:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 2, 49), 2.16876, 86.6395, 0.0, 20.9952, 13.3301, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:02:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:02:49
2026-04-12T13:02:59.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:03:00.111 [DEBUG] [Thread-189511] [transport.py] [_log()] starting thread (client mode): 0xb0f565c0
2026-04-12T13:03:00.111 [DEBUG] [Thread-189511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:03:00.131 [DEBUG] [Thread-189511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:03:00.132 [INFO] [Thread-189511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] client lang: <none>
2026-04-12T13:03:00.135 [DEBUG] [Thread-189511] [transport.py] [_log()] server lang: <none>
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] kex follows: False
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] Compression: none
2026-04-12T13:03:00.136 [DEBUG] [Thread-189511] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:03:00.154 [DEBUG] [Thread-189511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:03:00.155 [DEBUG] [Thread-189511] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:03:00.156 [DEBUG] [Thread-189511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:03:00.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:03:00.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:03:00.197 [DEBUG] [Thread-189511] [transport.py] [_log()] userauth is OK
2026-04-12T13:03:00.197 [DEBUG] [Thread-189511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:03:00.197 [DEBUG] [Thread-189511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:03:00.197 [DEBUG] [Thread-189511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:03:00.197 [DEBUG] [Thread-189511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:03:00.230 [INFO] [Thread-189511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:03:00.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:03:00.888 [DEBUG] [Thread-189511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:03:00.888 [DEBUG] [Thread-189511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:03:00.889 [DEBUG] [Thread-189511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:03:00.929 [DEBUG] [Thread-189511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:03:00.929 [DEBUG] [Thread-189511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:03:00.932 [DEBUG] [Thread-189511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:03:00.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:03:00.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:03:00.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:03:00.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:03:00.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:03:00.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:03:00.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:03:00.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:03:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:03:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.460177 -999.00  +12.30  24.52     88  +10.40 1 3 1 3 1   888    0 2.06 9.82 ----- 20.4 24.5 273.8 30.4 16.2 -7.0 15.8 -6.8 15.2 -8.5 15.8 -5.9
2026-04-12T13:03:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:03:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:03:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.460177
2026-04-12T13:03:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:03:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:03:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:03:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:03:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:03:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:02:49', tmtdew=2.16876, humidity=86.6395, cloud=0.0, wind=20.9952, temperature=13.3301, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:02:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:03:00.956 [DEBUG] [Thread-189511] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:03:01.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:03:01.051 [DEBUG] [Thread-189514] [transport.py] [_log()] starting thread (client mode): 0xb0f54730
2026-04-12T13:03:01.051 [DEBUG] [Thread-189514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:03:01.068 [DEBUG] [Thread-189514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:03:01.068 [INFO] [Thread-189514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:03:01.079 [DEBUG] [Thread-189514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:03:01.079 [DEBUG] [Thread-189514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] client lang: <none>
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] server lang: <none>
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] kex follows: False
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:03:01.080 [DEBUG] [Thread-189514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:03:01.081 [DEBUG] [Thread-189514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:03:01.081 [DEBUG] [Thread-189514] [transport.py] [_log()] Compression: none
2026-04-12T13:03:01.081 [DEBUG] [Thread-189514] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:03:01.133 [DEBUG] [Thread-189514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:03:01.133 [DEBUG] [Thread-189514] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:03:01.133 [DEBUG] [Thread-189514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:03:01.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:03:01.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:03:01.189 [DEBUG] [Thread-189514] [transport.py] [_log()] userauth is OK
2026-04-12T13:03:01.189 [DEBUG] [Thread-189514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:03:01.190 [DEBUG] [Thread-189514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:03:01.190 [DEBUG] [Thread-189514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:03:01.190 [DEBUG] [Thread-189514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:03:01.206 [INFO] [Thread-189514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:03:01.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:03:01.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:03:02.121 [DEBUG] [Thread-189514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:03:02.121 [DEBUG] [Thread-189514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:03:02.169 [DEBUG] [Thread-189514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:03:02.169 [DEBUG] [Thread-189514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:03:02.178 [DEBUG] [Thread-189514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:03:02.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:03:02.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:03:02.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:03:02.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:03:02.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:03:02.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:03:02.215 [DEBUG] [Thread-189514] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:03:09.403 [DEBUG] [Thread-189516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:03:19.387 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:03:19.388 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:03:24.458 [DEBUG] [Thread-189517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:03:32.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:03:32.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:03:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:03:33.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 3, 25), 1.15509, 92.4053, 0.0, 22.9381, 12.4656, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:03:33.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:03:25
2026-04-12T13:03:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:03:34.094 [DEBUG] [Thread-189518] [transport.py] [_log()] starting thread (client mode): 0xae5b59f0
2026-04-12T13:03:34.094 [DEBUG] [Thread-189518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:03:34.116 [DEBUG] [Thread-189518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:03:34.116 [INFO] [Thread-189518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:03:34.119 [DEBUG] [Thread-189518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] client lang: <none>
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] server lang: <none>
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] kex follows: False
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] Compression: none
2026-04-12T13:03:34.120 [DEBUG] [Thread-189518] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:03:34.137 [DEBUG] [Thread-189518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:03:34.138 [DEBUG] [Thread-189518] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:03:34.139 [DEBUG] [Thread-189518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:03:34.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:03:34.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:03:34.141 [DEBUG] [Thread-189518] [transport.py] [_log()] userauth is OK
2026-04-12T13:03:34.141 [DEBUG] [Thread-189518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:03:34.141 [DEBUG] [Thread-189518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:03:34.141 [DEBUG] [Thread-189518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:03:34.141 [DEBUG] [Thread-189518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:03:34.164 [INFO] [Thread-189518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:03:34.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:03:34.780 [DEBUG] [Thread-189518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:03:34.781 [DEBUG] [Thread-189518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:03:34.781 [DEBUG] [Thread-189518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:03:34.822 [DEBUG] [Thread-189518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:03:34.822 [DEBUG] [Thread-189518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:03:34.824 [DEBUG] [Thread-189518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:03:34.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:03:34.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:03:34.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:03:34.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:03:34.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:03:34.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:03:34.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.460524 -999.00  +12.30  16.09     88  +10.50 1 3 1 3 1   888    0 2.04 10.61 ----- 18.8 16.1 271.8 21.5 16.2 -7.6 15.8 -6.8 15.2 -6.3 15.8 -6.5
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.460524
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:03:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:03:34.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:03:25', tmtdew=1.15509, humidity=92.4053, cloud=0.0, wind=22.9381, temperature=12.4656, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:03:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:03:34.845 [DEBUG] [Thread-189518] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:03:34.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:03:34.930 [DEBUG] [Thread-189521] [transport.py] [_log()] starting thread (client mode): 0xae52eb30
2026-04-12T13:03:34.930 [DEBUG] [Thread-189521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:03:34.946 [DEBUG] [Thread-189521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:03:34.946 [INFO] [Thread-189521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:03:34.953 [DEBUG] [Thread-189521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:03:34.954 [DEBUG] [Thread-189521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:03:34.954 [DEBUG] [Thread-189521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:03:34.954 [DEBUG] [Thread-189521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:34.954 [DEBUG] [Thread-189521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:03:34.954 [DEBUG] [Thread-189521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:34.954 [DEBUG] [Thread-189521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:03:34.954 [DEBUG] [Thread-189521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] client lang: <none>
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] server lang: <none>
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] kex follows: False
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] Compression: none
2026-04-12T13:03:34.955 [DEBUG] [Thread-189521] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:03:35.017 [DEBUG] [Thread-189521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:03:35.018 [DEBUG] [Thread-189521] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:03:35.018 [DEBUG] [Thread-189521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:03:35.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:03:35.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:03:35.073 [DEBUG] [Thread-189521] [transport.py] [_log()] userauth is OK
2026-04-12T13:03:35.074 [DEBUG] [Thread-189521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:03:35.074 [DEBUG] [Thread-189521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:03:35.074 [DEBUG] [Thread-189521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:03:35.074 [DEBUG] [Thread-189521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:03:35.093 [INFO] [Thread-189521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:03:35.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:03:35.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:03:35.410 [DEBUG] [Thread-189523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:03:35.919 [DEBUG] [Thread-189521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:03:35.920 [DEBUG] [Thread-189521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:03:35.967 [DEBUG] [Thread-189521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:03:35.967 [DEBUG] [Thread-189521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:03:35.976 [DEBUG] [Thread-189521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:03:35.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:03:35.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:03:35.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:03:36.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:03:36.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:03:36.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:03:36.014 [DEBUG] [Thread-189521] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:03:39.495 [DEBUG] [Thread-189524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:03:54.552 [DEBUG] [Thread-189525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:04:06.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:04:06.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:04:06.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:04:07.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 3, 25), 1.15509, 92.4053, 0.0, 22.9381, 12.4656, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:04:07.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:03:25
2026-04-12T13:04:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:04:08.005 [DEBUG] [Thread-189526] [transport.py] [_log()] starting thread (client mode): 0xae52c7f0
2026-04-12T13:04:08.006 [DEBUG] [Thread-189526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:04:08.026 [DEBUG] [Thread-189526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:04:08.026 [INFO] [Thread-189526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:04:08.029 [DEBUG] [Thread-189526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:04:08.029 [DEBUG] [Thread-189526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:04:08.029 [DEBUG] [Thread-189526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] client lang: <none>
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] server lang: <none>
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] kex follows: False
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:04:08.030 [DEBUG] [Thread-189526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:04:08.031 [DEBUG] [Thread-189526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:04:08.031 [DEBUG] [Thread-189526] [transport.py] [_log()] Compression: none
2026-04-12T13:04:08.031 [DEBUG] [Thread-189526] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:04:08.049 [DEBUG] [Thread-189526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:04:08.049 [DEBUG] [Thread-189526] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:04:08.050 [DEBUG] [Thread-189526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:04:08.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:04:08.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:04:08.053 [DEBUG] [Thread-189526] [transport.py] [_log()] userauth is OK
2026-04-12T13:04:08.053 [DEBUG] [Thread-189526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:04:08.053 [DEBUG] [Thread-189526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:04:08.053 [DEBUG] [Thread-189526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:04:08.053 [DEBUG] [Thread-189526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:04:08.078 [INFO] [Thread-189526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:04:08.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:04:08.697 [DEBUG] [Thread-189526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:04:08.697 [DEBUG] [Thread-189526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:04:08.697 [DEBUG] [Thread-189526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:04:08.738 [DEBUG] [Thread-189526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:04:08.738 [DEBUG] [Thread-189526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:04:08.741 [DEBUG] [Thread-189526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:04:08.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:04:08.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:04:08.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:04:08.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:04:08.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:04:08.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:04:08.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:04:08.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:04:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:04:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.460872 -999.00  +12.30  14.23     88  +10.40 1 3 1 3 1   888    0 2.08 11.07 ----- 16.2 14.2 271.6 25.5 16.1 -7.9 15.8 -6.7 15.2 -5.8 15.7 -7.5
2026-04-12T13:04:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:04:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:04:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.460872
2026-04-12T13:04:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:04:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:04:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:04:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:04:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:04:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:03:25', tmtdew=1.15509, humidity=92.4053, cloud=0.0, wind=22.9381, temperature=12.4656, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:03:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:04:08.765 [DEBUG] [Thread-189526] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:04:08.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:04:09.590 [DEBUG] [Thread-189529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:04:19.543 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:04:19.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:04:24.642 [DEBUG] [Thread-189530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:04:35.443 [DEBUG] [Thread-189531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:04:39.680 [DEBUG] [Thread-189532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:04:54.720 [DEBUG] [Thread-189533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:05:09.754 [DEBUG] [Thread-189534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:05:19.697 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:05:19.698 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:05:24.794 [DEBUG] [Thread-189535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:05:35.478 [DEBUG] [Thread-189536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:05:39.830 [DEBUG] [Thread-189537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:05:54.871 [DEBUG] [Thread-189538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:09.908 [DEBUG] [Thread-189539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:19.856 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:19.858 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:23.743 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T13:06:24.947 [DEBUG] [Thread-189540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:35.523 [DEBUG] [Thread-189541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:39.985 [DEBUG] [Thread-189542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:53.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:06:53.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:06:53.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:06:55.026 [DEBUG] [Thread-189543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:06:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 6, 23), 1.2327, 92.2396, 0.0, 20.5384, 12.4328, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:06:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:06:23
2026-04-12T13:06:55.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:06:55.775 [DEBUG] [Thread-189544] [transport.py] [_log()] starting thread (client mode): 0xae52f910
2026-04-12T13:06:55.775 [DEBUG] [Thread-189544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:06:55.796 [DEBUG] [Thread-189544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:06:55.796 [INFO] [Thread-189544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:06:55.799 [DEBUG] [Thread-189544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:06:55.799 [DEBUG] [Thread-189544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] client lang: <none>
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] server lang: <none>
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] kex follows: False
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] Compression: none
2026-04-12T13:06:55.800 [DEBUG] [Thread-189544] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:06:55.818 [DEBUG] [Thread-189544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:06:55.818 [DEBUG] [Thread-189544] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:06:55.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:06:55.819 [DEBUG] [Thread-189544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:06:55.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:06:55.821 [DEBUG] [Thread-189544] [transport.py] [_log()] userauth is OK
2026-04-12T13:06:55.821 [DEBUG] [Thread-189544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:06:55.821 [DEBUG] [Thread-189544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:06:55.821 [DEBUG] [Thread-189544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:06:55.821 [DEBUG] [Thread-189544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:06:55.836 [INFO] [Thread-189544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:06:55.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:06:56.605 [DEBUG] [Thread-189544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:06:56.605 [DEBUG] [Thread-189544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:06:56.606 [DEBUG] [Thread-189544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:06:56.646 [DEBUG] [Thread-189544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:06:56.646 [DEBUG] [Thread-189544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:06:56.650 [DEBUG] [Thread-189544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:06:56.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:06:56.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:06:56.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:06:56.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:06:56.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:06:56.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:06:56.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:06:56.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:06:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:06:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.462608 -999.00  +12.40  12.25     88  +10.50 1 3 1 3 1   888    0 2.00 8.45 ----- 12.2 12.2 260.7 22.2 16.2 -7.8 15.8 -7.1 15.3 -6.0 15.7 -6.9
2026-04-12T13:06:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:06:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:06:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.462608
2026-04-12T13:06:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:06:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:06:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:06:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:06:56.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:06:56.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:06:23', tmtdew=1.2327, humidity=92.2396, cloud=0.0, wind=20.5384, temperature=12.4328, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:06:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:06:56.676 [DEBUG] [Thread-189544] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:06:56.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:06:56.766 [DEBUG] [Thread-189547] [transport.py] [_log()] starting thread (client mode): 0xb39c7f70
2026-04-12T13:06:56.766 [DEBUG] [Thread-189547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:06:56.780 [DEBUG] [Thread-189547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:06:56.781 [INFO] [Thread-189547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:06:56.788 [DEBUG] [Thread-189547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:06:56.788 [DEBUG] [Thread-189547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] client lang: <none>
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] server lang: <none>
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] kex follows: False
2026-04-12T13:06:56.789 [DEBUG] [Thread-189547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:06:56.790 [DEBUG] [Thread-189547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:06:56.790 [DEBUG] [Thread-189547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:06:56.790 [DEBUG] [Thread-189547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:06:56.790 [DEBUG] [Thread-189547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:06:56.790 [DEBUG] [Thread-189547] [transport.py] [_log()] Compression: none
2026-04-12T13:06:56.790 [DEBUG] [Thread-189547] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:06:56.847 [DEBUG] [Thread-189547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:06:56.848 [DEBUG] [Thread-189547] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:06:56.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:06:56.848 [DEBUG] [Thread-189547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:06:56.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:06:56.909 [DEBUG] [Thread-189547] [transport.py] [_log()] userauth is OK
2026-04-12T13:06:56.909 [DEBUG] [Thread-189547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:06:56.909 [DEBUG] [Thread-189547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:06:56.909 [DEBUG] [Thread-189547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:06:56.909 [DEBUG] [Thread-189547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:06:56.931 [INFO] [Thread-189547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:06:56.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:06:56.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:06:57.725 [DEBUG] [Thread-189547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:06:57.725 [DEBUG] [Thread-189547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:06:57.775 [DEBUG] [Thread-189547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:06:57.775 [DEBUG] [Thread-189547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:06:57.786 [DEBUG] [Thread-189547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:06:57.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:06:57.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:06:57.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:06:57.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:06:57.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:06:57.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:06:57.831 [DEBUG] [Thread-189547] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:07:10.061 [DEBUG] [Thread-189549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:07:19.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:07:19.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:07:25.108 [DEBUG] [Thread-189550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:07:27.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:07:27.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:07:27.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:07:29.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 6, 58), 1.2327, 92.2396, 0.0, 19.0742, 12.3828, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:07:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:06:58
2026-04-12T13:07:29.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:07:29.831 [DEBUG] [Thread-189551] [transport.py] [_log()] starting thread (client mode): 0xae5b6dd0
2026-04-12T13:07:29.831 [DEBUG] [Thread-189551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:07:29.852 [DEBUG] [Thread-189551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:07:29.852 [INFO] [Thread-189551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] client lang: <none>
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] server lang: <none>
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] kex follows: False
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:07:29.855 [DEBUG] [Thread-189551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:07:29.856 [DEBUG] [Thread-189551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:07:29.856 [DEBUG] [Thread-189551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:07:29.856 [DEBUG] [Thread-189551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:07:29.856 [DEBUG] [Thread-189551] [transport.py] [_log()] Compression: none
2026-04-12T13:07:29.856 [DEBUG] [Thread-189551] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:07:29.873 [DEBUG] [Thread-189551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:07:29.874 [DEBUG] [Thread-189551] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:07:29.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:07:29.875 [DEBUG] [Thread-189551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:07:29.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:07:29.877 [DEBUG] [Thread-189551] [transport.py] [_log()] userauth is OK
2026-04-12T13:07:29.877 [DEBUG] [Thread-189551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:07:29.877 [DEBUG] [Thread-189551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:07:29.878 [DEBUG] [Thread-189551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:07:29.878 [DEBUG] [Thread-189551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:07:29.914 [INFO] [Thread-189551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:07:29.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:07:30.701 [DEBUG] [Thread-189551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:07:30.701 [DEBUG] [Thread-189551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:07:30.701 [DEBUG] [Thread-189551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:07:30.742 [DEBUG] [Thread-189551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:07:30.742 [DEBUG] [Thread-189551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:07:30.746 [DEBUG] [Thread-189551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:07:30.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:07:30.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:07:30.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:07:30.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:07:30.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:07:30.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:07:30.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:07:30.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:07:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:07:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.462955 -999.00  +12.40  15.06     88  +10.50 1 3 1 3 1   888    0 2.04 8.82 ----- 18.0 15.1 275.8 20.2 16.2 -8.4 15.8 -7.1 15.3 -5.8 15.7 -6.9
2026-04-12T13:07:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:07:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:07:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.462955
2026-04-12T13:07:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:07:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:07:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:07:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:07:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:07:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:06:58', tmtdew=1.2327, humidity=92.2396, cloud=0.0, wind=19.0742, temperature=12.3828, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:06:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:07:30.773 [DEBUG] [Thread-189551] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:07:30.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:07:30.866 [DEBUG] [Thread-189554] [transport.py] [_log()] starting thread (client mode): 0xae5b6fb0
2026-04-12T13:07:30.866 [DEBUG] [Thread-189554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:07:30.881 [DEBUG] [Thread-189554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:07:30.881 [INFO] [Thread-189554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:07:30.889 [DEBUG] [Thread-189554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] client lang: <none>
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] server lang: <none>
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] kex follows: False
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:07:30.890 [DEBUG] [Thread-189554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:07:30.891 [DEBUG] [Thread-189554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:07:30.891 [DEBUG] [Thread-189554] [transport.py] [_log()] Compression: none
2026-04-12T13:07:30.891 [DEBUG] [Thread-189554] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:07:30.946 [DEBUG] [Thread-189554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:07:30.946 [DEBUG] [Thread-189554] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:07:30.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:07:30.948 [DEBUG] [Thread-189554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:07:30.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:07:31.002 [DEBUG] [Thread-189554] [transport.py] [_log()] userauth is OK
2026-04-12T13:07:31.002 [DEBUG] [Thread-189554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:07:31.002 [DEBUG] [Thread-189554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:07:31.002 [DEBUG] [Thread-189554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:07:31.002 [DEBUG] [Thread-189554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:07:31.021 [INFO] [Thread-189554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:07:31.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:07:31.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:07:31.843 [DEBUG] [Thread-189554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:07:31.843 [DEBUG] [Thread-189554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:07:31.896 [DEBUG] [Thread-189554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:07:31.896 [DEBUG] [Thread-189554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:07:31.906 [DEBUG] [Thread-189554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:07:31.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:07:31.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:07:31.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:07:31.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:07:31.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:07:31.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:07:31.952 [DEBUG] [Thread-189554] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:07:35.557 [DEBUG] [Thread-189556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:07:40.144 [DEBUG] [Thread-189557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:07:55.199 [DEBUG] [Thread-189558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:08:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:08:01.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:08:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:08:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 7, 34), 2.33696, 85.6447, 0.0, 23.112, 12.9984, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:08:03.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:07:34
2026-04-12T13:08:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:08:03.914 [DEBUG] [Thread-189559] [transport.py] [_log()] starting thread (client mode): 0xb0f40ca0
2026-04-12T13:08:03.914 [DEBUG] [Thread-189559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:08:03.934 [DEBUG] [Thread-189559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:08:03.935 [INFO] [Thread-189559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:08:03.937 [DEBUG] [Thread-189559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] client lang: <none>
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] server lang: <none>
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] kex follows: False
2026-04-12T13:08:03.938 [DEBUG] [Thread-189559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:08:03.939 [DEBUG] [Thread-189559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:08:03.939 [DEBUG] [Thread-189559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:08:03.939 [DEBUG] [Thread-189559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:08:03.939 [DEBUG] [Thread-189559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:08:03.939 [DEBUG] [Thread-189559] [transport.py] [_log()] Compression: none
2026-04-12T13:08:03.939 [DEBUG] [Thread-189559] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:08:03.957 [DEBUG] [Thread-189559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:08:03.958 [DEBUG] [Thread-189559] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:08:03.959 [DEBUG] [Thread-189559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:08:03.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:08:03.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:08:03.962 [DEBUG] [Thread-189559] [transport.py] [_log()] userauth is OK
2026-04-12T13:08:03.962 [DEBUG] [Thread-189559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:08:03.962 [DEBUG] [Thread-189559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:08:03.962 [DEBUG] [Thread-189559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:08:03.962 [DEBUG] [Thread-189559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:08:03.990 [INFO] [Thread-189559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:08:03.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:08:04.722 [DEBUG] [Thread-189559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:08:04.723 [DEBUG] [Thread-189559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:08:04.723 [DEBUG] [Thread-189559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:08:04.764 [DEBUG] [Thread-189559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:08:04.764 [DEBUG] [Thread-189559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:08:04.768 [DEBUG] [Thread-189559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:08:04.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:08:04.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:08:04.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:08:04.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:08:04.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:08:04.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:08:04.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:08:04.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:08:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:08:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.463302 -999.00  +12.50  13.38     89  +10.80 1 3 1 3 1   888    0 2.04 8.74 ----- 13.4 13.4 277.2 20.6 16.2 -7.6 15.9 -6.7 15.3 -8.0 15.8 -6.6
2026-04-12T13:08:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:08:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:08:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.463302
2026-04-12T13:08:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:08:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:08:04.787 [DEBUG] [Thread-189559] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:08:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:08:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:08:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:08:04.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:07:34', tmtdew=2.33696, humidity=85.6447, cloud=0.0, wind=23.112, temperature=12.9984, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:07:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:08:04.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:08:04.876 [DEBUG] [Thread-189562] [transport.py] [_log()] starting thread (client mode): 0xb0f41b40
2026-04-12T13:08:04.876 [DEBUG] [Thread-189562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:08:04.891 [DEBUG] [Thread-189562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:08:04.891 [INFO] [Thread-189562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:08:04.899 [DEBUG] [Thread-189562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:08:04.899 [DEBUG] [Thread-189562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] client lang: <none>
2026-04-12T13:08:04.900 [DEBUG] [Thread-189562] [transport.py] [_log()] server lang: <none>
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] kex follows: False
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] Compression: none
2026-04-12T13:08:04.901 [DEBUG] [Thread-189562] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:08:04.958 [DEBUG] [Thread-189562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:08:04.959 [DEBUG] [Thread-189562] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:08:04.960 [DEBUG] [Thread-189562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:08:04.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:08:04.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:08:05.018 [DEBUG] [Thread-189562] [transport.py] [_log()] userauth is OK
2026-04-12T13:08:05.019 [DEBUG] [Thread-189562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:08:05.019 [DEBUG] [Thread-189562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:08:05.019 [DEBUG] [Thread-189562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:08:05.019 [DEBUG] [Thread-189562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:08:05.039 [INFO] [Thread-189562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:08:05.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:08:05.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:08:05.898 [DEBUG] [Thread-189562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:08:05.899 [DEBUG] [Thread-189562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:08:05.946 [DEBUG] [Thread-189562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:08:05.946 [DEBUG] [Thread-189562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:08:05.955 [DEBUG] [Thread-189562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:08:05.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13: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')
2026-04-12T13: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
2026-04-12T13:08:05.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:08:05.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:08:05.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:08:05.997 [DEBUG] [Thread-189562] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:08:10.237 [DEBUG] [Thread-189564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:08:20.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:08:20.149 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:08:25.289 [DEBUG] [Thread-189565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:08:35.603 [DEBUG] [Thread-189566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:08:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:08:36.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:08:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:08:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 8, 9), 1.14293, 92.4715, 0.0, 19.9386, 12.5324, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:08:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:08:09
2026-04-12T13:08:37.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:08:37.948 [DEBUG] [Thread-189567] [transport.py] [_log()] starting thread (client mode): 0xae5b67d0
2026-04-12T13:08:37.948 [DEBUG] [Thread-189567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:08:37.966 [DEBUG] [Thread-189567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:08:37.966 [INFO] [Thread-189567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] client lang: <none>
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] server lang: <none>
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] kex follows: False
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] Compression: none
2026-04-12T13:08:37.969 [DEBUG] [Thread-189567] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:08:37.984 [DEBUG] [Thread-189567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:08:37.985 [DEBUG] [Thread-189567] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:08:37.985 [DEBUG] [Thread-189567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:08:37.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:08:37.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:08:37.987 [DEBUG] [Thread-189567] [transport.py] [_log()] userauth is OK
2026-04-12T13:08:37.987 [DEBUG] [Thread-189567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:08:37.987 [DEBUG] [Thread-189567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:08:37.987 [DEBUG] [Thread-189567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:08:37.987 [DEBUG] [Thread-189567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:08:38.011 [INFO] [Thread-189567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:08:38.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:08:38.571 [DEBUG] [Thread-189567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:08:38.571 [DEBUG] [Thread-189567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:08:38.572 [DEBUG] [Thread-189567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:08:38.612 [DEBUG] [Thread-189567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:08:38.612 [DEBUG] [Thread-189567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:08:38.615 [DEBUG] [Thread-189567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:08:38.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:08:38.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:08:38.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:08:38.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:08:38.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:08:38.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:08:38.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:08:38.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:08:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:08:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.463996 -999.00  +12.40  12.65     88  +10.60 1 3 1 3 1   888    0 2.08 9.75 ----- 11.5 12.7 286.4 24.1 16.2 -7.7 15.9 -7.0 15.4 -5.7 15.7 -7.0
2026-04-12T13:08:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:08:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:08:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.463996
2026-04-12T13:08:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:08:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:08:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:08:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:08:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:08:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:08:09', tmtdew=1.14293, humidity=92.4715, cloud=0.0, wind=19.9386, temperature=12.5324, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:08:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:08:38.634 [DEBUG] [Thread-189567] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:08:38.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:08:38.728 [DEBUG] [Thread-189570] [transport.py] [_log()] starting thread (client mode): 0xae5b5cf0
2026-04-12T13:08:38.728 [DEBUG] [Thread-189570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:08:38.744 [DEBUG] [Thread-189570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:08:38.744 [INFO] [Thread-189570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:08:38.753 [DEBUG] [Thread-189570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:08:38.753 [DEBUG] [Thread-189570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:08:38.753 [DEBUG] [Thread-189570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:08:38.753 [DEBUG] [Thread-189570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:38.753 [DEBUG] [Thread-189570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:08:38.753 [DEBUG] [Thread-189570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] client lang: <none>
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] server lang: <none>
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] kex follows: False
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] Compression: none
2026-04-12T13:08:38.754 [DEBUG] [Thread-189570] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:08:38.810 [DEBUG] [Thread-189570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:08:38.811 [DEBUG] [Thread-189570] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:08:38.812 [DEBUG] [Thread-189570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:08:38.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:08:38.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:08:38.877 [DEBUG] [Thread-189570] [transport.py] [_log()] userauth is OK
2026-04-12T13:08:38.877 [DEBUG] [Thread-189570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:08:38.877 [DEBUG] [Thread-189570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:08:38.877 [DEBUG] [Thread-189570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:08:38.878 [DEBUG] [Thread-189570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:08:38.900 [INFO] [Thread-189570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:08:38.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:08:38.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:08:39.727 [DEBUG] [Thread-189570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:08:39.728 [DEBUG] [Thread-189570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:08:39.775 [DEBUG] [Thread-189570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:08:39.775 [DEBUG] [Thread-189570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:08:39.785 [DEBUG] [Thread-189570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:08:39.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:08:39.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:08:39.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:08:39.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:08:39.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:08:39.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:08:39.822 [DEBUG] [Thread-189570] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:08:40.326 [DEBUG] [Thread-189572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:08:55.387 [DEBUG] [Thread-189573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:09:09.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:09:09.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:09:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:09:10.427 [DEBUG] [Thread-189574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:09:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 8, 45), 2.32584, 85.7114, 0.0, 23.8882, 13.0319, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:09:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:08:45
2026-04-12T13:09:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:09:11.672 [DEBUG] [Thread-189575] [transport.py] [_log()] starting thread (client mode): 0xb0fb7fa0
2026-04-12T13:09:11.672 [DEBUG] [Thread-189575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:09:11.685 [DEBUG] [Thread-189575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:09:11.685 [INFO] [Thread-189575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:09:11.688 [DEBUG] [Thread-189575] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:09:11.688 [DEBUG] [Thread-189575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] client lang: <none>
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] server lang: <none>
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] kex follows: False
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] Compression: none
2026-04-12T13:09:11.689 [DEBUG] [Thread-189575] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:09:11.704 [DEBUG] [Thread-189575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:09:11.705 [DEBUG] [Thread-189575] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:09:11.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:09:11.705 [DEBUG] [Thread-189575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:09:11.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:09:11.707 [DEBUG] [Thread-189575] [transport.py] [_log()] userauth is OK
2026-04-12T13:09:11.707 [DEBUG] [Thread-189575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:09:11.707 [DEBUG] [Thread-189575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:09:11.707 [DEBUG] [Thread-189575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:09:11.707 [DEBUG] [Thread-189575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:09:11.742 [INFO] [Thread-189575] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:09:11.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:09:12.343 [DEBUG] [Thread-189575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:09:12.343 [DEBUG] [Thread-189575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:09:12.344 [DEBUG] [Thread-189575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:09:12.384 [DEBUG] [Thread-189575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:09:12.384 [DEBUG] [Thread-189575] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:09:12.387 [DEBUG] [Thread-189575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:09:12.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:09:12.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:09:12.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:09:12.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:09:12.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:09:12.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:09:12.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:09:12.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:09:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:09:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.464344 -999.00  +12.40  20.68     88  +10.60 1 3 1 3 1   888    0 2.10 9.80 ----- 16.6 20.7 275.4 24.7 16.3 -7.7 15.9 -6.8 15.4 -5.7 15.7 -7.2
2026-04-12T13:09:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:09:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:09:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.464344
2026-04-12T13:09:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:09:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:09:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:09:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:09:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:09:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:08:45', tmtdew=2.32584, humidity=85.7114, cloud=0.0, wind=23.8882, temperature=13.0319, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:08:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:09:12.405 [DEBUG] [Thread-189575] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:09:12.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:09:12.501 [DEBUG] [Thread-189578] [transport.py] [_log()] starting thread (client mode): 0xae5b5510
2026-04-12T13:09:12.501 [DEBUG] [Thread-189578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:09:12.515 [DEBUG] [Thread-189578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:09:12.515 [INFO] [Thread-189578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:09:12.523 [DEBUG] [Thread-189578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] client lang: <none>
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] server lang: <none>
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] kex follows: False
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:09:12.524 [DEBUG] [Thread-189578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:09:12.525 [DEBUG] [Thread-189578] [transport.py] [_log()] Compression: none
2026-04-12T13:09:12.525 [DEBUG] [Thread-189578] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:09:12.582 [DEBUG] [Thread-189578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:09:12.582 [DEBUG] [Thread-189578] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:09:12.583 [DEBUG] [Thread-189578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:09:12.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:09:12.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:09:12.637 [DEBUG] [Thread-189578] [transport.py] [_log()] userauth is OK
2026-04-12T13:09:12.637 [DEBUG] [Thread-189578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:09:12.637 [DEBUG] [Thread-189578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:09:12.638 [DEBUG] [Thread-189578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:09:12.638 [DEBUG] [Thread-189578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:09:12.656 [INFO] [Thread-189578] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:09:12.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:09:12.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:09:13.471 [DEBUG] [Thread-189578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:09:13.472 [DEBUG] [Thread-189578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:09:13.519 [DEBUG] [Thread-189578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:09:13.520 [DEBUG] [Thread-189578] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:09:13.528 [DEBUG] [Thread-189578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:09:13.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:09:13.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:09:13.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:09:13.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:09:13.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:09:13.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:09:13.562 [DEBUG] [Thread-189578] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:09:20.291 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:09:20.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:09:25.465 [DEBUG] [Thread-189580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:09:35.644 [DEBUG] [Thread-189581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:09:40.518 [DEBUG] [Thread-189582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:09:43.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:09:43.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:09:43.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:09:44.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 9, 21), 1.23038, 92.2562, 0.0, 17.6278, 12.4159, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:09:44.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:09:21
2026-04-12T13:09:45.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:09:45.451 [DEBUG] [Thread-189583] [transport.py] [_log()] starting thread (client mode): 0xae514e50
2026-04-12T13:09:45.451 [DEBUG] [Thread-189583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:09:45.471 [DEBUG] [Thread-189583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:09:45.471 [INFO] [Thread-189583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:09:45.474 [DEBUG] [Thread-189583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] client lang: <none>
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] server lang: <none>
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] kex follows: False
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] Compression: none
2026-04-12T13:09:45.475 [DEBUG] [Thread-189583] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:09:45.491 [DEBUG] [Thread-189583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:09:45.491 [DEBUG] [Thread-189583] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:09:45.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:09:45.492 [DEBUG] [Thread-189583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:09:45.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:09:45.533 [DEBUG] [Thread-189583] [transport.py] [_log()] userauth is OK
2026-04-12T13:09:45.533 [DEBUG] [Thread-189583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:09:45.533 [DEBUG] [Thread-189583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:09:45.533 [DEBUG] [Thread-189583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:09:45.533 [DEBUG] [Thread-189583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:09:45.560 [INFO] [Thread-189583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:09:45.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:09:46.150 [DEBUG] [Thread-189583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:09:46.150 [DEBUG] [Thread-189583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:09:46.151 [DEBUG] [Thread-189583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:09:46.191 [DEBUG] [Thread-189583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:09:46.191 [DEBUG] [Thread-189583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:09:46.195 [DEBUG] [Thread-189583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:09:46.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:09:46.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:09:46.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:09:46.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:09:46.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:09:46.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:09:46.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:09:46.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:09:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:09:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.465038 -999.00  +12.30  20.62     87  +10.40 1 3 1 2 1   888    0 2.12 10.91 ----- 22.5 20.6 270.4 25.2 16.3 -8.0 15.9 -6.9 15.4 -7.3 15.9 -7.1
2026-04-12T13:09:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:09:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:09:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.465038
2026-04-12T13:09:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:09:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:09:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:09:46.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:09:46.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:09:46.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:09:21', tmtdew=1.23038, humidity=92.2562, cloud=0.0, wind=17.6278, temperature=12.4159, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:09:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:09:46.223 [DEBUG] [Thread-189583] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:09:46.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:09:46.316 [DEBUG] [Thread-189586] [transport.py] [_log()] starting thread (client mode): 0xa79684f0
2026-04-12T13:09:46.316 [DEBUG] [Thread-189586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:09:46.330 [DEBUG] [Thread-189586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:09:46.330 [INFO] [Thread-189586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] client lang: <none>
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] server lang: <none>
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] kex follows: False
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:09:46.338 [DEBUG] [Thread-189586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:09:46.339 [DEBUG] [Thread-189586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:09:46.339 [DEBUG] [Thread-189586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:09:46.339 [DEBUG] [Thread-189586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:09:46.339 [DEBUG] [Thread-189586] [transport.py] [_log()] Compression: none
2026-04-12T13:09:46.339 [DEBUG] [Thread-189586] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:09:46.398 [DEBUG] [Thread-189586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:09:46.399 [DEBUG] [Thread-189586] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:09:46.400 [DEBUG] [Thread-189586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:09:46.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:09:46.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:09:46.458 [DEBUG] [Thread-189586] [transport.py] [_log()] userauth is OK
2026-04-12T13:09:46.459 [DEBUG] [Thread-189586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:09:46.459 [DEBUG] [Thread-189586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:09:46.459 [DEBUG] [Thread-189586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:09:46.459 [DEBUG] [Thread-189586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:09:46.484 [INFO] [Thread-189586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:09:46.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:09:46.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:09:47.345 [DEBUG] [Thread-189586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:09:47.345 [DEBUG] [Thread-189586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:09:47.393 [DEBUG] [Thread-189586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:09:47.394 [DEBUG] [Thread-189586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:09:47.407 [DEBUG] [Thread-189586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:09:47.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:09:47.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:09: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
2026-04-12T13:09:47.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:09:47.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:09:47.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:09:47.445 [DEBUG] [Thread-189586] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:09:55.556 [DEBUG] [Thread-189588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:10.609 [DEBUG] [Thread-189589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:10:17.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:10:17.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:10:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 9, 57), 1.19081, 92.4885, 0.0, 21.1028, 12.5824, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:10:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:09:57
2026-04-12T13:10:19.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:10:19.339 [DEBUG] [Thread-189590] [transport.py] [_log()] starting thread (client mode): 0xb0fb4700
2026-04-12T13:10:19.339 [DEBUG] [Thread-189590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:10:19.359 [DEBUG] [Thread-189590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:10:19.360 [INFO] [Thread-189590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] client lang: <none>
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] server lang: <none>
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] kex follows: False
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] Compression: none
2026-04-12T13:10:19.362 [DEBUG] [Thread-189590] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:10:19.382 [DEBUG] [Thread-189590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:10:19.382 [DEBUG] [Thread-189590] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:10:19.383 [DEBUG] [Thread-189590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:10:19.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:10:19.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:10:19.425 [DEBUG] [Thread-189590] [transport.py] [_log()] userauth is OK
2026-04-12T13:10:19.426 [DEBUG] [Thread-189590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:10:19.426 [DEBUG] [Thread-189590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:10:19.426 [DEBUG] [Thread-189590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:10:19.426 [DEBUG] [Thread-189590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:10:19.458 [INFO] [Thread-189590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:10:19.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:10:20.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:20.450 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:25.649 [DEBUG] [Thread-189592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:27.694 [DEBUG] [Thread-189590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:10:27.694 [DEBUG] [Thread-189590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:10:27.694 [DEBUG] [Thread-189590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:10:27.735 [DEBUG] [Thread-189590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:10:27.735 [DEBUG] [Thread-189590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:10:27.738 [DEBUG] [Thread-189590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:10:27.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:10:27.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:10:27.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:10:27.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:10:27.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:10:27.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:10:27.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:10:27.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:10:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:10:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.465038 -999.00  +12.30  20.62     87  +10.40 1 3 1 2 1   888    0 2.12 10.91 ----- 22.5 20.6 270.4 25.2 16.3 -8.0 15.9 -6.9 15.4 -7.3 15.9 -7.1
2026-04-12T13:10:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:10:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:10:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.465038
2026-04-12T13:10:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:10:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:10:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:10:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:10:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:10:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:09:57', tmtdew=1.19081, humidity=92.4885, cloud=0.0, wind=21.1028, temperature=12.5824, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:09:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:10:27.857 [DEBUG] [Thread-189590] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:10:27.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:10:27.958 [DEBUG] [Thread-189594] [transport.py] [_log()] starting thread (client mode): 0xb0f43640
2026-04-12T13:10:27.958 [DEBUG] [Thread-189594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:10:27.973 [DEBUG] [Thread-189594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:10:27.973 [INFO] [Thread-189594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:10:27.981 [DEBUG] [Thread-189594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:10:27.981 [DEBUG] [Thread-189594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:10:27.981 [DEBUG] [Thread-189594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:10:27.981 [DEBUG] [Thread-189594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] client lang: <none>
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] server lang: <none>
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] kex follows: False
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] Compression: none
2026-04-12T13:10:27.982 [DEBUG] [Thread-189594] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:10:28.042 [DEBUG] [Thread-189594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:10:28.043 [DEBUG] [Thread-189594] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:10:28.043 [DEBUG] [Thread-189594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:10:28.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:10:28.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:10:28.102 [DEBUG] [Thread-189594] [transport.py] [_log()] userauth is OK
2026-04-12T13:10:28.103 [DEBUG] [Thread-189594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:10:28.103 [DEBUG] [Thread-189594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:10:28.103 [DEBUG] [Thread-189594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:10:28.103 [DEBUG] [Thread-189594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:10:28.122 [INFO] [Thread-189594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:10:28.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:10:28.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:10:28.939 [DEBUG] [Thread-189594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:10:28.940 [DEBUG] [Thread-189594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:10:28.988 [DEBUG] [Thread-189594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:10:28.988 [DEBUG] [Thread-189594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:10:28.997 [DEBUG] [Thread-189594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:10:29.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:10:29.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:10:29.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:10:29.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:10:29.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:10:29.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:10:29.033 [DEBUG] [Thread-189594] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:10:35.678 [DEBUG] [Thread-189596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:40.683 [DEBUG] [Thread-189597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:55.747 [DEBUG] [Thread-189598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:10:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:10:59.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:10:59.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:11:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 10, 32), 1.25164, 92.1403, 0.0, 19.9386, 12.5658, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:11:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:10:32
2026-04-12T13:11:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:11:00.811 [DEBUG] [Thread-189599] [transport.py] [_log()] starting thread (client mode): 0xb0fcca90
2026-04-12T13:11:00.811 [DEBUG] [Thread-189599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:11:00.831 [DEBUG] [Thread-189599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:11:00.831 [INFO] [Thread-189599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:11:00.834 [DEBUG] [Thread-189599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] client lang: <none>
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] server lang: <none>
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] kex follows: False
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] Compression: none
2026-04-12T13:11:00.835 [DEBUG] [Thread-189599] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:11:00.851 [DEBUG] [Thread-189599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:11:00.851 [DEBUG] [Thread-189599] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:11:00.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:11:00.852 [DEBUG] [Thread-189599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:11:00.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:11:00.892 [DEBUG] [Thread-189599] [transport.py] [_log()] userauth is OK
2026-04-12T13:11:00.893 [DEBUG] [Thread-189599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:11:00.893 [DEBUG] [Thread-189599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:11:00.893 [DEBUG] [Thread-189599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:11:00.893 [DEBUG] [Thread-189599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:11:00.910 [INFO] [Thread-189599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:11:00.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:11:01.569 [DEBUG] [Thread-189599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:11:01.569 [DEBUG] [Thread-189599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:11:01.570 [DEBUG] [Thread-189599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:11:01.611 [DEBUG] [Thread-189599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:11:01.611 [DEBUG] [Thread-189599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:11:01.615 [DEBUG] [Thread-189599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:11:01.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:11:01.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:11:01.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:11:01.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:11:01.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:11:01.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:11:01.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:11:01.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:11:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:11:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.465733 -999.00  +12.40  14.52     87  +10.30 1 3 1 2 1   888    0 2.19 13.16 ----- 15.2 14.5 272.2 19.4 16.4 -8.2 16.0 -7.0 15.4 -6.6 16.0 -6.2
2026-04-12T13:11:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:11:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:11:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.465733
2026-04-12T13:11:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:11:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:11:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:11:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:11:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:11:01.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:10:32', tmtdew=1.25164, humidity=92.1403, cloud=0.0, wind=19.9386, temperature=12.5658, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:10:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:11:01.649 [DEBUG] [Thread-189599] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:11:01.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:11:01.742 [DEBUG] [Thread-189602] [transport.py] [_log()] starting thread (client mode): 0xb0fcf580
2026-04-12T13:11:01.742 [DEBUG] [Thread-189602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:11:01.757 [DEBUG] [Thread-189602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:11:01.758 [INFO] [Thread-189602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:11:01.765 [DEBUG] [Thread-189602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:11:01.765 [DEBUG] [Thread-189602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:11:01.765 [DEBUG] [Thread-189602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:11:01.765 [DEBUG] [Thread-189602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] client lang: <none>
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] server lang: <none>
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] kex follows: False
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] Compression: none
2026-04-12T13:11:01.766 [DEBUG] [Thread-189602] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:11:01.827 [DEBUG] [Thread-189602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:11:01.828 [DEBUG] [Thread-189602] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:11:01.828 [DEBUG] [Thread-189602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:11:01.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:11:01.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:11:01.890 [DEBUG] [Thread-189602] [transport.py] [_log()] userauth is OK
2026-04-12T13:11:01.890 [DEBUG] [Thread-189602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:11:01.890 [DEBUG] [Thread-189602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:11:01.891 [DEBUG] [Thread-189602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:11:01.891 [DEBUG] [Thread-189602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:11:01.910 [INFO] [Thread-189602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:11:01.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:11:01.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:11:02.768 [DEBUG] [Thread-189602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:11:02.768 [DEBUG] [Thread-189602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:11:02.822 [DEBUG] [Thread-189602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:11:02.822 [DEBUG] [Thread-189602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:11:02.831 [DEBUG] [Thread-189602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:11:02.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:11:02.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:11:02.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:11:02.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:11:02.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:11:02.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:11:02.868 [DEBUG] [Thread-189602] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:11:10.784 [DEBUG] [Thread-189604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:11:20.604 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:11:20.605 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:11:25.834 [DEBUG] [Thread-189605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:11:32.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:11:32.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:11:32.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:11:34.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 11, 7), 1.29725, 91.8752, 0.0, 18.4039, 12.4996, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:11:34.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:11:07
2026-04-12T13:11:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:11:34.766 [DEBUG] [Thread-189606] [transport.py] [_log()] starting thread (client mode): 0xb0f40cd0
2026-04-12T13:11:34.766 [DEBUG] [Thread-189606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:11:34.788 [DEBUG] [Thread-189606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:11:34.788 [INFO] [Thread-189606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:11:34.790 [DEBUG] [Thread-189606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:11:34.790 [DEBUG] [Thread-189606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] client lang: <none>
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] server lang: <none>
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] kex follows: False
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] Compression: none
2026-04-12T13:11:34.791 [DEBUG] [Thread-189606] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:11:34.810 [DEBUG] [Thread-189606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:11:34.810 [DEBUG] [Thread-189606] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:11:34.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:11:34.812 [DEBUG] [Thread-189606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:11:34.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:11:34.814 [DEBUG] [Thread-189606] [transport.py] [_log()] userauth is OK
2026-04-12T13:11:34.814 [DEBUG] [Thread-189606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:11:34.814 [DEBUG] [Thread-189606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:11:34.814 [DEBUG] [Thread-189606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:11:34.814 [DEBUG] [Thread-189606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:11:34.840 [INFO] [Thread-189606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:11:34.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:11:35.455 [DEBUG] [Thread-189606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:11:35.456 [DEBUG] [Thread-189606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:11:35.457 [DEBUG] [Thread-189606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:11:35.497 [DEBUG] [Thread-189606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:11:35.498 [DEBUG] [Thread-189606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:11:35.501 [DEBUG] [Thread-189606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:11:35.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:11:35.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:11:35.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:11:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:11:35.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:11:35.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:11:35.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:11:35.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:11:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:11:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.466080 -999.00  +12.50  10.04     87  +10.50 1 3 1 2 1   888    0 2.21 14.54 ----- 15.9 10.0 282.6 18.3 16.5 -7.1 16.1 -6.8 15.3 -8.2 16.0 -6.4
2026-04-12T13:11:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:11:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:11:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.466080
2026-04-12T13:11:35.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:11:35.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:11:35.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:11:35.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:11:35.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:11:35.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:11:07', tmtdew=1.29725, humidity=91.8752, cloud=0.0, wind=18.4039, temperature=12.4996, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:11:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:11:35.525 [DEBUG] [Thread-189606] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:11:35.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:11:35.618 [DEBUG] [Thread-189609] [transport.py] [_log()] starting thread (client mode): 0xb39c5cf0
2026-04-12T13:11:35.618 [DEBUG] [Thread-189609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:11:35.632 [DEBUG] [Thread-189609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:11:35.632 [INFO] [Thread-189609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:11:35.640 [DEBUG] [Thread-189609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:11:35.641 [DEBUG] [Thread-189609] [transport.py] [_log()] client lang: <none>
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] server lang: <none>
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] kex follows: False
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] Compression: none
2026-04-12T13:11:35.642 [DEBUG] [Thread-189609] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:11:35.699 [DEBUG] [Thread-189609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:11:35.699 [DEBUG] [Thread-189609] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:11:35.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:11:35.700 [DEBUG] [Thread-189609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:11:35.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:11:35.733 [DEBUG] [Thread-189611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:11:35.758 [DEBUG] [Thread-189609] [transport.py] [_log()] userauth is OK
2026-04-12T13:11:35.758 [DEBUG] [Thread-189609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:11:35.758 [DEBUG] [Thread-189609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:11:35.758 [DEBUG] [Thread-189609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:11:35.758 [DEBUG] [Thread-189609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:11:35.777 [INFO] [Thread-189609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:11:35.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:11:35.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:11:36.590 [DEBUG] [Thread-189609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:11:36.590 [DEBUG] [Thread-189609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:11:36.638 [DEBUG] [Thread-189609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:11:36.638 [DEBUG] [Thread-189609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:11:36.647 [DEBUG] [Thread-189609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:11:36.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:11:36.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:11:36.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:11:36.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:11:36.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:11:36.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:11:36.683 [DEBUG] [Thread-189609] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:11:40.870 [DEBUG] [Thread-189612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:11:55.924 [DEBUG] [Thread-189613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:12:06.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:12:06.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:12:06.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:12:07.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 11, 43), 2.50036, 84.7173, 0.0, 17.9964, 12.9992, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:12:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:11:43
2026-04-12T13:12:08.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:12:08.540 [DEBUG] [Thread-189614] [transport.py] [_log()] starting thread (client mode): 0xb0fb5f30
2026-04-12T13:12:08.540 [DEBUG] [Thread-189614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:12:08.560 [DEBUG] [Thread-189614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:12:08.560 [INFO] [Thread-189614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:12:08.563 [DEBUG] [Thread-189614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:12:08.563 [DEBUG] [Thread-189614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] client lang: <none>
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] server lang: <none>
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] kex follows: False
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:12:08.564 [DEBUG] [Thread-189614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:12:08.565 [DEBUG] [Thread-189614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:12:08.565 [DEBUG] [Thread-189614] [transport.py] [_log()] Compression: none
2026-04-12T13:12:08.565 [DEBUG] [Thread-189614] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:12:08.583 [DEBUG] [Thread-189614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:12:08.584 [DEBUG] [Thread-189614] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:12:08.585 [DEBUG] [Thread-189614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:12:08.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:12:08.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:12:08.587 [DEBUG] [Thread-189614] [transport.py] [_log()] userauth is OK
2026-04-12T13:12:08.587 [DEBUG] [Thread-189614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:12:08.587 [DEBUG] [Thread-189614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:12:08.588 [DEBUG] [Thread-189614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:12:08.588 [DEBUG] [Thread-189614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:12:08.617 [INFO] [Thread-189614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:12:08.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:12:09.246 [DEBUG] [Thread-189614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:12:09.247 [DEBUG] [Thread-189614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:12:09.247 [DEBUG] [Thread-189614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:12:09.287 [DEBUG] [Thread-189614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:12:09.287 [DEBUG] [Thread-189614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:12:09.291 [DEBUG] [Thread-189614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:12:09.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:12:09.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:12:09.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:12:09.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:12:09.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:12:09.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:12:09.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:12:09.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:12:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:12:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.466427 -999.00  +12.50  12.04     87  +10.40 1 3 1 2 1   888    0 2.27 15.73 ----- 12.9 12.0 290.1 17.0 16.6 -7.2 16.1 -6.7 15.4 -8.0 16.1 -6.3
2026-04-12T13:12:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:12:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:12:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.466427
2026-04-12T13:12:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:12:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:12:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:12:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:12:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:12:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:11:43', tmtdew=2.50036, humidity=84.7173, cloud=0.0, wind=17.9964, temperature=12.9992, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:11:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:12:09.318 [DEBUG] [Thread-189614] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:12:09.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:12:09.417 [DEBUG] [Thread-189617] [transport.py] [_log()] starting thread (client mode): 0xb0fcda20
2026-04-12T13:12:09.417 [DEBUG] [Thread-189617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:12:09.436 [DEBUG] [Thread-189617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:12:09.437 [INFO] [Thread-189617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:12:09.448 [DEBUG] [Thread-189617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:12:09.448 [DEBUG] [Thread-189617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] client lang: <none>
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] server lang: <none>
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] kex follows: False
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:12:09.449 [DEBUG] [Thread-189617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:12:09.450 [DEBUG] [Thread-189617] [transport.py] [_log()] Compression: none
2026-04-12T13:12:09.450 [DEBUG] [Thread-189617] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:12:09.504 [DEBUG] [Thread-189617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:12:09.505 [DEBUG] [Thread-189617] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:12:09.505 [DEBUG] [Thread-189617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:12:09.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:12:09.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:12:09.568 [DEBUG] [Thread-189617] [transport.py] [_log()] userauth is OK
2026-04-12T13:12:09.568 [DEBUG] [Thread-189617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:12:09.569 [DEBUG] [Thread-189617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:12:09.569 [DEBUG] [Thread-189617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:12:09.569 [DEBUG] [Thread-189617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:12:09.592 [INFO] [Thread-189617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:12:09.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:12:09.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:12:10.423 [DEBUG] [Thread-189617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:12:10.423 [DEBUG] [Thread-189617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:12:10.471 [DEBUG] [Thread-189617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:12:10.471 [DEBUG] [Thread-189617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:12:10.481 [DEBUG] [Thread-189617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:12:10.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:12:10.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:12:10.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:12:10.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:12:10.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:12:10.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:12:10.518 [DEBUG] [Thread-189617] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:12:10.965 [DEBUG] [Thread-189619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:12:20.757 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:12:20.759 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:12:26.033 [DEBUG] [Thread-189620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:12:35.782 [DEBUG] [Thread-189621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:12:40.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:12:40.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:12:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:12:41.071 [DEBUG] [Thread-189622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:12:41.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 12, 19), 1.29853, 91.875, 0.0, 14.8752, 12.4657, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:12:41.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:12:19
2026-04-12T13:12:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:12:42.428 [DEBUG] [Thread-189623] [transport.py] [_log()] starting thread (client mode): 0xae52d120
2026-04-12T13:12:42.428 [DEBUG] [Thread-189623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:12:42.447 [DEBUG] [Thread-189623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:12:42.448 [INFO] [Thread-189623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:12:42.449 [DEBUG] [Thread-189623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:12:42.449 [DEBUG] [Thread-189623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:12:42.449 [DEBUG] [Thread-189623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:12:42.449 [DEBUG] [Thread-189623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:42.449 [DEBUG] [Thread-189623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:42.449 [DEBUG] [Thread-189623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] client lang: <none>
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] server lang: <none>
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] kex follows: False
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] Compression: none
2026-04-12T13:12:42.450 [DEBUG] [Thread-189623] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:12:42.461 [DEBUG] [Thread-189623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:12:42.462 [DEBUG] [Thread-189623] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:12:42.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:12:42.463 [DEBUG] [Thread-189623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:12:42.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:12:42.465 [DEBUG] [Thread-189623] [transport.py] [_log()] userauth is OK
2026-04-12T13:12:42.465 [DEBUG] [Thread-189623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:12:42.465 [DEBUG] [Thread-189623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:12:42.466 [DEBUG] [Thread-189623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:12:42.466 [DEBUG] [Thread-189623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:12:42.480 [INFO] [Thread-189623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:12:42.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:12:43.097 [DEBUG] [Thread-189623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:12:43.097 [DEBUG] [Thread-189623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:12:43.097 [DEBUG] [Thread-189623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:12:43.139 [DEBUG] [Thread-189623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:12:43.139 [DEBUG] [Thread-189623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:12:43.142 [DEBUG] [Thread-189623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:12:43.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:12:43.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:12:43.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:12:43.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:12:43.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:12:43.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:12:43.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:12:43.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:12:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:12:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.466774 -999.00  +12.50  12.37     85  +10.10 1 3 1 2 1   888    0 2.33 17.57 ----- 12.1 12.4 275.8 22.8 16.6 -7.6 16.2 -6.9 15.5 -7.0 16.2 -6.2
2026-04-12T13:12:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:12:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:12:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.466774
2026-04-12T13:12:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:12:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:12:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:12:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:12:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:12:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:12:19', tmtdew=1.29853, humidity=91.875, cloud=0.0, wind=14.8752, temperature=12.4657, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:12:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:12:43.162 [DEBUG] [Thread-189623] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:12:43.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:12:43.252 [DEBUG] [Thread-189626] [transport.py] [_log()] starting thread (client mode): 0xa796a410
2026-04-12T13:12:43.252 [DEBUG] [Thread-189626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:12:43.266 [DEBUG] [Thread-189626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:12:43.266 [INFO] [Thread-189626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:12:43.274 [DEBUG] [Thread-189626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] client lang: <none>
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] server lang: <none>
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] kex follows: False
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] Compression: none
2026-04-12T13:12:43.275 [DEBUG] [Thread-189626] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:12:43.334 [DEBUG] [Thread-189626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:12:43.335 [DEBUG] [Thread-189626] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:12:43.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:12:43.336 [DEBUG] [Thread-189626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:12:43.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:12:43.390 [DEBUG] [Thread-189626] [transport.py] [_log()] userauth is OK
2026-04-12T13:12:43.391 [DEBUG] [Thread-189626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:12:43.391 [DEBUG] [Thread-189626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:12:43.391 [DEBUG] [Thread-189626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:12:43.391 [DEBUG] [Thread-189626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:12:43.410 [INFO] [Thread-189626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:12:43.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:12:43.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:12:44.209 [DEBUG] [Thread-189626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:12:44.209 [DEBUG] [Thread-189626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:12:44.258 [DEBUG] [Thread-189626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:12:44.258 [DEBUG] [Thread-189626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:12:44.267 [DEBUG] [Thread-189626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:12:44.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:12:44.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:12:44.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:12:44.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:12:44.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:12:44.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:12:44.307 [DEBUG] [Thread-189626] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:12:56.111 [DEBUG] [Thread-189628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:13:11.166 [DEBUG] [Thread-189629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:13:14.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:13:14.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:13:14.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:13:15.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 12, 54), 2.64454, 83.921, 0.0, 14.4684, 13.1314, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:13:15.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:12:54
2026-04-12T13:13:15.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:13:16.160 [DEBUG] [Thread-189630] [transport.py] [_log()] starting thread (client mode): 0xae5b6fb0
2026-04-12T13:13:16.160 [DEBUG] [Thread-189630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:13:16.180 [DEBUG] [Thread-189630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:13:16.180 [INFO] [Thread-189630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] client lang: <none>
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] server lang: <none>
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] kex follows: False
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] Compression: none
2026-04-12T13:13:16.183 [DEBUG] [Thread-189630] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:13:16.202 [DEBUG] [Thread-189630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:13:16.202 [DEBUG] [Thread-189630] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:13:16.203 [DEBUG] [Thread-189630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:13:16.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:13:16.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:13:16.205 [DEBUG] [Thread-189630] [transport.py] [_log()] userauth is OK
2026-04-12T13:13:16.205 [DEBUG] [Thread-189630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:13:16.206 [DEBUG] [Thread-189630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:13:16.206 [DEBUG] [Thread-189630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:13:16.206 [DEBUG] [Thread-189630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:13:16.224 [INFO] [Thread-189630] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:13:16.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:13:16.801 [DEBUG] [Thread-189630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:13:16.802 [DEBUG] [Thread-189630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:13:16.803 [DEBUG] [Thread-189630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:13:16.843 [DEBUG] [Thread-189630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:13:16.843 [DEBUG] [Thread-189630] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:13:16.845 [DEBUG] [Thread-189630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:13:16.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:13:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:13:16.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:13:16.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:13:16.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:13:16.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:13:16.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:13:16.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:13:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.467469 -999.00  +12.50  14.70     86  +10.30 1 3 1 2 1   888    0 2.45 20.56 ----- 11.9 14.7 274.0 19.0 16.8 -7.5 16.3 -6.9 15.7 -5.9 16.2 -6.4
2026-04-12T13:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.467469
2026-04-12T13:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:13:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:13:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:13:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:13:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:13:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:12:54', tmtdew=2.64454, humidity=83.921, cloud=0.0, wind=14.4684, temperature=13.1314, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:13:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:13:16.868 [DEBUG] [Thread-189630] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:13:16.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:13:16.959 [DEBUG] [Thread-189633] [transport.py] [_log()] starting thread (client mode): 0xb0fcde70
2026-04-12T13:13:16.959 [DEBUG] [Thread-189633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:13:16.974 [DEBUG] [Thread-189633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:13:16.974 [INFO] [Thread-189633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] client lang: <none>
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] server lang: <none>
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] kex follows: False
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:13:16.982 [DEBUG] [Thread-189633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:13:16.983 [DEBUG] [Thread-189633] [transport.py] [_log()] Compression: none
2026-04-12T13:13:16.983 [DEBUG] [Thread-189633] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:13:17.042 [DEBUG] [Thread-189633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:13:17.042 [DEBUG] [Thread-189633] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:13:17.043 [DEBUG] [Thread-189633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:13:17.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:13:17.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:13:17.098 [DEBUG] [Thread-189633] [transport.py] [_log()] userauth is OK
2026-04-12T13:13:17.098 [DEBUG] [Thread-189633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:13:17.098 [DEBUG] [Thread-189633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:13:17.098 [DEBUG] [Thread-189633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:13:17.098 [DEBUG] [Thread-189633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:13:17.122 [INFO] [Thread-189633] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:13:17.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:13:17.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:13:17.996 [DEBUG] [Thread-189633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:13:17.996 [DEBUG] [Thread-189633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:13:18.047 [DEBUG] [Thread-189633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:13:18.047 [DEBUG] [Thread-189633] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:13:18.060 [DEBUG] [Thread-189633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:13:18.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:13:18.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:13:18.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:13:18.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:13:18.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:13:18.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:13:18.096 [DEBUG] [Thread-189633] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:13:20.913 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:13:20.914 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:13:26.207 [DEBUG] [Thread-189635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:13:35.830 [DEBUG] [Thread-189636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:13:41.260 [DEBUG] [Thread-189637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:13:48.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:13:48.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:13:48.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:13:49.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 13, 30), 1.38746, 91.3774, 0.0, 15.6161, 12.6321, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:13:49.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:13:30
2026-04-12T13:13:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:13:49.936 [DEBUG] [Thread-189638] [transport.py] [_log()] starting thread (client mode): 0xa796ada0
2026-04-12T13:13:49.936 [DEBUG] [Thread-189638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:13:49.952 [DEBUG] [Thread-189638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:13:49.952 [INFO] [Thread-189638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:13:49.954 [DEBUG] [Thread-189638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:13:49.954 [DEBUG] [Thread-189638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:13:49.954 [DEBUG] [Thread-189638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] client lang: <none>
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] server lang: <none>
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] kex follows: False
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] Compression: none
2026-04-12T13:13:49.955 [DEBUG] [Thread-189638] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:13:49.965 [DEBUG] [Thread-189638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:13:49.966 [DEBUG] [Thread-189638] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:13:49.966 [DEBUG] [Thread-189638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:13:49.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:13:49.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:13:49.967 [DEBUG] [Thread-189638] [transport.py] [_log()] userauth is OK
2026-04-12T13:13:49.968 [DEBUG] [Thread-189638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:13:49.968 [DEBUG] [Thread-189638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:13:49.968 [DEBUG] [Thread-189638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:13:49.968 [DEBUG] [Thread-189638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:13:49.983 [INFO] [Thread-189638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:13:49.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:13:50.584 [DEBUG] [Thread-189638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:13:50.585 [DEBUG] [Thread-189638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:13:50.585 [DEBUG] [Thread-189638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:13:50.627 [DEBUG] [Thread-189638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:13:50.627 [DEBUG] [Thread-189638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:13:50.631 [DEBUG] [Thread-189638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:13:50.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:13:50.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:13:50.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:13:50.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:13:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:13:50.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:13:50.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:13:50.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:13:50.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:13:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.467816 -999.00  +12.60  12.03     87  +10.50 1 3 1 2 1   888    0 2.54 22.25 ----- 13.1 12.0 265.3 17.1 16.9 -7.3 16.4 -6.6 15.8 -6.2 16.4 -6.0
2026-04-12T13:13:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:13:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:13:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.467816
2026-04-12T13:13:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:13:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:13:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:13:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:13:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:13:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:13:30', tmtdew=1.38746, humidity=91.3774, cloud=0.0, wind=15.6161, temperature=12.6321, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:13:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:13:50.662 [DEBUG] [Thread-189638] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:13:50.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:13:50.756 [DEBUG] [Thread-189641] [transport.py] [_log()] starting thread (client mode): 0xb0fcfe80
2026-04-12T13:13:50.756 [DEBUG] [Thread-189641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:13:50.770 [DEBUG] [Thread-189641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:13:50.771 [INFO] [Thread-189641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:13:50.778 [DEBUG] [Thread-189641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:13:50.778 [DEBUG] [Thread-189641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:13:50.778 [DEBUG] [Thread-189641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:13:50.778 [DEBUG] [Thread-189641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:50.778 [DEBUG] [Thread-189641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] client lang: <none>
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] server lang: <none>
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] kex follows: False
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] Compression: none
2026-04-12T13:13:50.779 [DEBUG] [Thread-189641] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:13:50.837 [DEBUG] [Thread-189641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:13:50.838 [DEBUG] [Thread-189641] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:13:50.838 [DEBUG] [Thread-189641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:13:50.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:13:50.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:13:50.901 [DEBUG] [Thread-189641] [transport.py] [_log()] userauth is OK
2026-04-12T13:13:50.901 [DEBUG] [Thread-189641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:13:50.901 [DEBUG] [Thread-189641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:13:50.901 [DEBUG] [Thread-189641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:13:50.902 [DEBUG] [Thread-189641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:13:50.921 [INFO] [Thread-189641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:13:50.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:13:50.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:13:51.783 [DEBUG] [Thread-189641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:13:51.783 [DEBUG] [Thread-189641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:13:51.831 [DEBUG] [Thread-189641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:13:51.831 [DEBUG] [Thread-189641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:13:51.840 [DEBUG] [Thread-189641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:13:51.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:13:51.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')
2026-04-12T13:13:51.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:13:51.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:13:51.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:13:51.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:13:51.879 [DEBUG] [Thread-189641] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:13:56.300 [DEBUG] [Thread-189643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:11.356 [DEBUG] [Thread-189644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:21.071 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:21.073 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:14:21.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:14:21.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:14:23.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 14, 5), 1.43844, 91.0954, 0.0, 15.5984, 12.6486, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:14:23.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:14:05
2026-04-12T13:14:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:14:23.684 [DEBUG] [Thread-189645] [transport.py] [_log()] starting thread (client mode): 0xa796a3e0
2026-04-12T13:14:23.684 [DEBUG] [Thread-189645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:14:23.700 [DEBUG] [Thread-189645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:14:23.701 [INFO] [Thread-189645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] client lang: <none>
2026-04-12T13:14:23.702 [DEBUG] [Thread-189645] [transport.py] [_log()] server lang: <none>
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] kex follows: False
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] Compression: none
2026-04-12T13:14:23.703 [DEBUG] [Thread-189645] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:14:23.723 [DEBUG] [Thread-189645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:14:23.723 [DEBUG] [Thread-189645] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:14:23.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:14:23.724 [DEBUG] [Thread-189645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:14:23.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:14:23.730 [DEBUG] [Thread-189645] [transport.py] [_log()] userauth is OK
2026-04-12T13:14:23.731 [DEBUG] [Thread-189645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:14:23.731 [DEBUG] [Thread-189645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:14:23.731 [DEBUG] [Thread-189645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:14:23.731 [DEBUG] [Thread-189645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:14:23.757 [INFO] [Thread-189645] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:14:23.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:14:24.401 [DEBUG] [Thread-189645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:14:24.401 [DEBUG] [Thread-189645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:14:24.401 [DEBUG] [Thread-189645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:14:24.442 [DEBUG] [Thread-189645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:14:24.443 [DEBUG] [Thread-189645] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:14:24.446 [DEBUG] [Thread-189645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:14:24.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:14:24.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:14:24.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:14:24.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:14:24.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:14:24.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:14:24.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:14:24.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:14:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:14:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.468163 -999.00  +12.70  14.11     86  +10.50 1 3 1 2 1   888    0 2.48 20.76 ----- 12.5 14.1 266.2 18.6 17.0 -7.3 16.5 -6.6 15.8 -5.5 16.5 -6.8
2026-04-12T13:14:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:14:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:14:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.468163
2026-04-12T13:14:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:14:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:14:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:14:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:14:24.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:14:24.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:14:05', tmtdew=1.43844, humidity=91.0954, cloud=0.0, wind=15.5984, temperature=12.6486, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:14:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:14:24.473 [DEBUG] [Thread-189645] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:14:24.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:14:24.569 [DEBUG] [Thread-189648] [transport.py] [_log()] starting thread (client mode): 0xae5b57e0
2026-04-12T13:14:24.570 [DEBUG] [Thread-189648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:14:24.584 [DEBUG] [Thread-189648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:14:24.585 [INFO] [Thread-189648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:14:24.593 [DEBUG] [Thread-189648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:14:24.593 [DEBUG] [Thread-189648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:14:24.593 [DEBUG] [Thread-189648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:14:24.593 [DEBUG] [Thread-189648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:24.593 [DEBUG] [Thread-189648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:24.593 [DEBUG] [Thread-189648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:24.593 [DEBUG] [Thread-189648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] client lang: <none>
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] server lang: <none>
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] kex follows: False
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] Compression: none
2026-04-12T13:14:24.594 [DEBUG] [Thread-189648] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:14:24.652 [DEBUG] [Thread-189648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:14:24.653 [DEBUG] [Thread-189648] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:14:24.654 [DEBUG] [Thread-189648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:14:24.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:14:24.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:14:24.710 [DEBUG] [Thread-189648] [transport.py] [_log()] userauth is OK
2026-04-12T13:14:24.710 [DEBUG] [Thread-189648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:14:24.711 [DEBUG] [Thread-189648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:14:24.711 [DEBUG] [Thread-189648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:14:24.711 [DEBUG] [Thread-189648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:14:24.729 [INFO] [Thread-189648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:14:24.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:14:24.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:14:25.565 [DEBUG] [Thread-189648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:14:25.565 [DEBUG] [Thread-189648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:14:25.613 [DEBUG] [Thread-189648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:14:25.613 [DEBUG] [Thread-189648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:14:25.622 [DEBUG] [Thread-189648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:14:25.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:14:25.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:14:25.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:14:25.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:14:25.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:14:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:14:25.659 [DEBUG] [Thread-189648] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:14:26.393 [DEBUG] [Thread-189650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:35.863 [DEBUG] [Thread-189651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:41.459 [DEBUG] [Thread-189652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:14:55.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:14:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:14:56.493 [DEBUG] [Thread-189653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:14:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 14, 41), 2.78814, 83.1246, 0.0, 13.5864, 13.1641, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:14:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:14:41
2026-04-12T13:14:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:14:57.682 [DEBUG] [Thread-189654] [transport.py] [_log()] starting thread (client mode): 0xb0fce7a0
2026-04-12T13:14:57.682 [DEBUG] [Thread-189654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:14:57.703 [DEBUG] [Thread-189654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:14:57.703 [INFO] [Thread-189654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:14:57.706 [DEBUG] [Thread-189654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:14:57.706 [DEBUG] [Thread-189654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:14:57.706 [DEBUG] [Thread-189654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:14:57.706 [DEBUG] [Thread-189654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:57.706 [DEBUG] [Thread-189654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] client lang: <none>
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] server lang: <none>
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] kex follows: False
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] Compression: none
2026-04-12T13:14:57.707 [DEBUG] [Thread-189654] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:14:57.722 [DEBUG] [Thread-189654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:14:57.723 [DEBUG] [Thread-189654] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:14:57.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:14:57.723 [DEBUG] [Thread-189654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:14:57.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:14:57.724 [DEBUG] [Thread-189654] [transport.py] [_log()] userauth is OK
2026-04-12T13:14:57.724 [DEBUG] [Thread-189654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:14:57.725 [DEBUG] [Thread-189654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:14:57.725 [DEBUG] [Thread-189654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:14:57.725 [DEBUG] [Thread-189654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:14:57.738 [INFO] [Thread-189654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:14:57.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:14:58.325 [DEBUG] [Thread-189654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:14:58.326 [DEBUG] [Thread-189654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:14:58.326 [DEBUG] [Thread-189654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:14:58.367 [DEBUG] [Thread-189654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:14:58.367 [DEBUG] [Thread-189654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:14:58.370 [DEBUG] [Thread-189654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:14:58.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:14:58.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:14:58.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:14:58.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:14:58.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:14:58.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:14:58.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:14:58.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:14:58.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:14:58.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.468510 -999.00  +12.80  12.76     87  +10.70 1 3 1 2 1   888    0 2.48 20.85 ----- 11.3 12.8 277.6 19.2 17.1 -7.2 16.6 -6.1 15.9 -7.7 16.6 -6.5
2026-04-12T13:14:58.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:14:58.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:14:58.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.468510
2026-04-12T13:14:58.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:14:58.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:14:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:14:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:14:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:14:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:14:41', tmtdew=2.78814, humidity=83.1246, cloud=0.0, wind=13.5864, temperature=13.1641, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:14:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:14:58.393 [DEBUG] [Thread-189654] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:14:58.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:14:58.488 [DEBUG] [Thread-189657] [transport.py] [_log()] starting thread (client mode): 0xa796ad70
2026-04-12T13:14:58.488 [DEBUG] [Thread-189657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:14:58.503 [DEBUG] [Thread-189657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:14:58.503 [INFO] [Thread-189657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:14:58.511 [DEBUG] [Thread-189657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:14:58.512 [DEBUG] [Thread-189657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] client lang: <none>
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] server lang: <none>
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] kex follows: False
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:14:58.513 [DEBUG] [Thread-189657] [transport.py] [_log()] Compression: none
2026-04-12T13:14:58.514 [DEBUG] [Thread-189657] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:14:58.571 [DEBUG] [Thread-189657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:14:58.571 [DEBUG] [Thread-189657] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:14:58.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:14:58.572 [DEBUG] [Thread-189657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:14:58.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:14:58.630 [DEBUG] [Thread-189657] [transport.py] [_log()] userauth is OK
2026-04-12T13:14:58.630 [DEBUG] [Thread-189657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:14:58.631 [DEBUG] [Thread-189657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:14:58.631 [DEBUG] [Thread-189657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:14:58.631 [DEBUG] [Thread-189657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:14:58.651 [INFO] [Thread-189657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:14:58.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:14:58.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:14:59.479 [DEBUG] [Thread-189657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:14:59.480 [DEBUG] [Thread-189657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:14:59.528 [DEBUG] [Thread-189657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:14:59.528 [DEBUG] [Thread-189657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:14:59.537 [DEBUG] [Thread-189657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:14:59.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:14:59.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:14:59.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:14:59.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:14:59.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:14:59.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:14:59.574 [DEBUG] [Thread-189657] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:15:11.530 [DEBUG] [Thread-189659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:15:21.218 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:15:21.219 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:15:26.584 [DEBUG] [Thread-189660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:15:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:15:29.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:15:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:15:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 15, 16), 1.3577, 91.2777, 0.0, 11.7522, 12.748, 2, 2, 0, 2, 0, 0),)
2026-04-12T13:15:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:15:16
2026-04-12T13:15:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:15:31.407 [DEBUG] [Thread-189661] [transport.py] [_log()] starting thread (client mode): 0xb0fea440
2026-04-12T13:15:31.407 [DEBUG] [Thread-189661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:15:31.429 [DEBUG] [Thread-189661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:15:31.429 [INFO] [Thread-189661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] client lang: <none>
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] server lang: <none>
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] kex follows: False
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] Compression: none
2026-04-12T13:15:31.433 [DEBUG] [Thread-189661] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:15:31.450 [DEBUG] [Thread-189661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:15:31.451 [DEBUG] [Thread-189661] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:15:31.452 [DEBUG] [Thread-189661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:15:31.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:15:31.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:15:31.453 [DEBUG] [Thread-189661] [transport.py] [_log()] userauth is OK
2026-04-12T13:15:31.454 [DEBUG] [Thread-189661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:15:31.454 [DEBUG] [Thread-189661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:15:31.454 [DEBUG] [Thread-189661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:15:31.454 [DEBUG] [Thread-189661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:15:31.478 [INFO] [Thread-189661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:15:31.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:15:35.821 [DEBUG] [Thread-189661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:15:35.821 [DEBUG] [Thread-189661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:15:35.821 [DEBUG] [Thread-189661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:15:35.862 [DEBUG] [Thread-189661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:15:35.862 [DEBUG] [Thread-189661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:15:35.865 [DEBUG] [Thread-189661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:15:35.918 [DEBUG] [Thread-189663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:15:35.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:15:35.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:15:35.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:15:35.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:15:35.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:15:35.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:15:35.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:15:35.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:15:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:15:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.468510 -999.00  +12.80  12.76     87  +10.70 1 3 1 2 1   888    0 2.48 20.85 ----- 11.3 12.8 277.6 19.2 17.1 -7.2 16.6 -6.1 15.9 -7.7 16.6 -6.5
2026-04-12T13:15:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:15:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:15:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.468510
2026-04-12T13:15:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:15:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:15:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:15:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:15:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:15:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:15:16', tmtdew=1.3577, humidity=91.2777, cloud=0.0, wind=11.7522, temperature=12.748, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:14:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:15:35.948 [DEBUG] [Thread-189661] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:15:36.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:15:36.044 [DEBUG] [Thread-189665] [transport.py] [_log()] starting thread (client mode): 0xb0fb6b60
2026-04-12T13:15:36.044 [DEBUG] [Thread-189665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:15:36.060 [DEBUG] [Thread-189665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:15:36.060 [INFO] [Thread-189665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:15:36.071 [DEBUG] [Thread-189665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] client lang: <none>
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] server lang: <none>
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] kex follows: False
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] Compression: none
2026-04-12T13:15:36.072 [DEBUG] [Thread-189665] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:15:36.131 [DEBUG] [Thread-189665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:15:36.131 [DEBUG] [Thread-189665] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:15:36.132 [DEBUG] [Thread-189665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:15:36.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:15:36.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:15:36.190 [DEBUG] [Thread-189665] [transport.py] [_log()] userauth is OK
2026-04-12T13:15:36.190 [DEBUG] [Thread-189665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:15:36.190 [DEBUG] [Thread-189665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:15:36.190 [DEBUG] [Thread-189665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:15:36.190 [DEBUG] [Thread-189665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:15:36.214 [INFO] [Thread-189665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:15:36.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:15:36.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:15:37.086 [DEBUG] [Thread-189665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:15:37.086 [DEBUG] [Thread-189665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:15:37.134 [DEBUG] [Thread-189665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:15:37.134 [DEBUG] [Thread-189665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:15:37.143 [DEBUG] [Thread-189665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:15:37.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:15:37.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:15:37.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:15:37.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:15:37.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:15:37.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:15:37.177 [DEBUG] [Thread-189665] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:15:41.614 [DEBUG] [Thread-189667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:15:56.665 [DEBUG] [Thread-189668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:16:07.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:16:07.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:16:07.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:16:08.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 15, 52), 2.82054, 82.9917, 0.0, 19.9721, 13.5618, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:16:08.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:15:52
2026-04-12T13:16:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:16:08.986 [DEBUG] [Thread-189669] [transport.py] [_log()] starting thread (client mode): 0xb0fe89d0
2026-04-12T13:16:08.987 [DEBUG] [Thread-189669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:16:09.006 [DEBUG] [Thread-189669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:16:09.007 [INFO] [Thread-189669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] client lang: <none>
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] server lang: <none>
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] kex follows: False
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:16:09.009 [DEBUG] [Thread-189669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:16:09.010 [DEBUG] [Thread-189669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:16:09.010 [DEBUG] [Thread-189669] [transport.py] [_log()] Compression: none
2026-04-12T13:16:09.010 [DEBUG] [Thread-189669] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:16:09.027 [DEBUG] [Thread-189669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:16:09.028 [DEBUG] [Thread-189669] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:16:09.028 [DEBUG] [Thread-189669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:16:09.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:16:09.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:16:09.030 [DEBUG] [Thread-189669] [transport.py] [_log()] userauth is OK
2026-04-12T13:16:09.030 [DEBUG] [Thread-189669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:16:09.031 [DEBUG] [Thread-189669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:16:09.031 [DEBUG] [Thread-189669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:16:09.031 [DEBUG] [Thread-189669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:16:09.054 [INFO] [Thread-189669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:16:09.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:16:09.804 [DEBUG] [Thread-189669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:16:09.804 [DEBUG] [Thread-189669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:16:09.805 [DEBUG] [Thread-189669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:16:09.845 [DEBUG] [Thread-189669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:16:09.845 [DEBUG] [Thread-189669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:16:09.848 [DEBUG] [Thread-189669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:16:09.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:16:09.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:16:09.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:16:09.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:16:09.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:16:09.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:16:09.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:16:09.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:16:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:16:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.468857 -999.00  +12.90  11.11     86  +10.70 1 3 1 2 1   888    0 2.50 21.34 ----- 11.6 11.1 272.8 14.4 17.3 -7.1 16.7 -6.6 16.1 -5.1 16.8 -5.9
2026-04-12T13:16:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:16:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:16:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.468857
2026-04-12T13:16:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:16:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:16:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:16:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:16:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:16:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:15:52', tmtdew=2.82054, humidity=82.9917, cloud=0.0, wind=19.9721, temperature=13.5618, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:15:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:16:09.871 [DEBUG] [Thread-189669] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:16:09.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:16:09.969 [DEBUG] [Thread-189672] [transport.py] [_log()] starting thread (client mode): 0xb0fe9570
2026-04-12T13:16:09.970 [DEBUG] [Thread-189672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:16:09.984 [DEBUG] [Thread-189672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:16:09.984 [INFO] [Thread-189672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] client lang: <none>
2026-04-12T13:16:09.992 [DEBUG] [Thread-189672] [transport.py] [_log()] server lang: <none>
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] kex follows: False
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] Compression: none
2026-04-12T13:16:09.993 [DEBUG] [Thread-189672] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:16:10.051 [DEBUG] [Thread-189672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:16:10.052 [DEBUG] [Thread-189672] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:16:10.052 [DEBUG] [Thread-189672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:16:10.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:16:10.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:16:10.109 [DEBUG] [Thread-189672] [transport.py] [_log()] userauth is OK
2026-04-12T13:16:10.110 [DEBUG] [Thread-189672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:16:10.110 [DEBUG] [Thread-189672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:16:10.110 [DEBUG] [Thread-189672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:16:10.110 [DEBUG] [Thread-189672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:16:10.134 [INFO] [Thread-189672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:16:10.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:16:10.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:16:10.972 [DEBUG] [Thread-189672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:16:10.972 [DEBUG] [Thread-189672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:16:11.020 [DEBUG] [Thread-189672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:16:11.020 [DEBUG] [Thread-189672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:16:11.030 [DEBUG] [Thread-189672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:16:11.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:16:11.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:16:11.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:16:11.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:16:11.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:16:11.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:16:11.067 [DEBUG] [Thread-189672] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:16:11.700 [DEBUG] [Thread-189674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:16:21.362 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:16:21.363 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:16:26.755 [DEBUG] [Thread-189675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:16:35.977 [DEBUG] [Thread-189676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:16:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:16:41.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:16:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:16:41.799 [DEBUG] [Thread-189677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:16:42.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 16, 27), 1.55272, 90.4818, 0.0, 17.5748, 12.8311, 1, 2, 0, 2, 0, 0),)
2026-04-12T13:16:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:16:27
2026-04-12T13:16:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:16:42.883 [DEBUG] [Thread-189678] [transport.py] [_log()] starting thread (client mode): 0xb0feabf0
2026-04-12T13:16:42.883 [DEBUG] [Thread-189678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:16:42.895 [DEBUG] [Thread-189678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:16:42.895 [INFO] [Thread-189678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] client lang: <none>
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] server lang: <none>
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] kex follows: False
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] Compression: none
2026-04-12T13:16:42.898 [DEBUG] [Thread-189678] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:16:42.906 [DEBUG] [Thread-189678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:16:42.907 [DEBUG] [Thread-189678] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:16:42.907 [DEBUG] [Thread-189678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:16:42.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:16:42.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:16:42.908 [DEBUG] [Thread-189678] [transport.py] [_log()] userauth is OK
2026-04-12T13:16:42.908 [DEBUG] [Thread-189678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:16:42.908 [DEBUG] [Thread-189678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:16:42.908 [DEBUG] [Thread-189678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:16:42.908 [DEBUG] [Thread-189678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:16:42.920 [INFO] [Thread-189678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:16:42.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:16:43.528 [DEBUG] [Thread-189678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:16:43.528 [DEBUG] [Thread-189678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:16:43.528 [DEBUG] [Thread-189678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:16:43.569 [DEBUG] [Thread-189678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:16:43.569 [DEBUG] [Thread-189678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:16:43.572 [DEBUG] [Thread-189678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:16:43.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:16:43.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:16:43.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:16:43.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:16:43.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:16:43.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:16:43.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:16:43.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:16:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:16:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.469552 -999.00  +13.00  12.25     84  +10.40 1 3 1 2 1   888    0 2.62 24.27 ----- 13.0 12.2 265.8 20.2 17.5 -7.6 16.9 -6.9 16.4 -5.8 16.9 -7.3
2026-04-12T13:16:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:16:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:16:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.469552
2026-04-12T13:16:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:16:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:16:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:16:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:16:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:16:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:16:27', tmtdew=1.55272, humidity=90.4818, cloud=0.0, wind=17.5748, temperature=12.8311, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:16:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:16:43.600 [DEBUG] [Thread-189678] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:16:43.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:16:43.697 [DEBUG] [Thread-189681] [transport.py] [_log()] starting thread (client mode): 0xb0feb370
2026-04-12T13:16:43.697 [DEBUG] [Thread-189681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:16:43.714 [DEBUG] [Thread-189681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:16:43.714 [INFO] [Thread-189681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:16:43.721 [DEBUG] [Thread-189681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:16:43.721 [DEBUG] [Thread-189681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:16:43.721 [DEBUG] [Thread-189681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:16:43.721 [DEBUG] [Thread-189681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] client lang: <none>
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] server lang: <none>
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] kex follows: False
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] Compression: none
2026-04-12T13:16:43.722 [DEBUG] [Thread-189681] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:16:43.784 [DEBUG] [Thread-189681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:16:43.784 [DEBUG] [Thread-189681] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:16:43.785 [DEBUG] [Thread-189681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:16:43.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:16:43.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:16:43.846 [DEBUG] [Thread-189681] [transport.py] [_log()] userauth is OK
2026-04-12T13:16:43.847 [DEBUG] [Thread-189681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:16:43.847 [DEBUG] [Thread-189681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:16:43.847 [DEBUG] [Thread-189681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:16:43.847 [DEBUG] [Thread-189681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:16:43.868 [INFO] [Thread-189681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:16:43.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:16:43.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:16:44.689 [DEBUG] [Thread-189681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:16:44.689 [DEBUG] [Thread-189681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:16:44.739 [DEBUG] [Thread-189681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:16:44.739 [DEBUG] [Thread-189681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:16:44.749 [DEBUG] [Thread-189681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:16:44.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:16:44.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:16:44.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:16:44.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:16:44.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:16:44.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:16:44.801 [DEBUG] [Thread-189681] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:16:56.841 [DEBUG] [Thread-189683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:17:11.915 [DEBUG] [Thread-189684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:17:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:17:14.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:17:14.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:17:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 17, 3), 1.59833, 90.2331, 0.0, 18.351, 12.8311, 1, 2, 0, 2, 0, 0),)
2026-04-12T13:17:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:17:03
2026-04-12T13:17:16.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:17:16.655 [DEBUG] [Thread-189685] [transport.py] [_log()] starting thread (client mode): 0xb0fea140
2026-04-12T13:17:16.655 [DEBUG] [Thread-189685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:17:16.674 [DEBUG] [Thread-189685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:17:16.674 [INFO] [Thread-189685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:17:16.677 [DEBUG] [Thread-189685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:17:16.677 [DEBUG] [Thread-189685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:17:16.677 [DEBUG] [Thread-189685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:17:16.677 [DEBUG] [Thread-189685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:16.677 [DEBUG] [Thread-189685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:16.677 [DEBUG] [Thread-189685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:16.677 [DEBUG] [Thread-189685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] client lang: <none>
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] server lang: <none>
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] kex follows: False
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] Compression: none
2026-04-12T13:17:16.678 [DEBUG] [Thread-189685] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:17:16.694 [DEBUG] [Thread-189685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:17:16.694 [DEBUG] [Thread-189685] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:17:16.695 [DEBUG] [Thread-189685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:17:16.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:17:16.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:17:16.697 [DEBUG] [Thread-189685] [transport.py] [_log()] userauth is OK
2026-04-12T13:17:16.697 [DEBUG] [Thread-189685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:17:16.697 [DEBUG] [Thread-189685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:17:16.697 [DEBUG] [Thread-189685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:17:16.697 [DEBUG] [Thread-189685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:17:16.715 [INFO] [Thread-189685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:17:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:17:17.352 [DEBUG] [Thread-189685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:17:17.352 [DEBUG] [Thread-189685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:17:17.353 [DEBUG] [Thread-189685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:17:17.393 [DEBUG] [Thread-189685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:17:17.393 [DEBUG] [Thread-189685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:17:17.397 [DEBUG] [Thread-189685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:17:17.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:17:17.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:17:17.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:17:17.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:17:17.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:17:17.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:17:17.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:17:17.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:17:17.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:17:17.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.470246 -999.00  +13.10  11.08     84  +10.50 1 3 1 2 1   888    0 2.76 27.83 ----- 12.8 11.1 290.9 15.9 17.5 -8.1 17.0 -7.3 16.4 -8.2 17.1 -7.3
2026-04-12T13:17:17.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:17:17.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:17:17.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.470246
2026-04-12T13:17:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:17:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:17:03', tmtdew=1.59833, humidity=90.2331, cloud=0.0, wind=18.351, temperature=12.8311, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:17:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:17:17.420 [DEBUG] [Thread-189685] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:17:17.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:17:17.513 [DEBUG] [Thread-189688] [transport.py] [_log()] starting thread (client mode): 0xb0fb75b0
2026-04-12T13:17:17.513 [DEBUG] [Thread-189688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:17:17.527 [DEBUG] [Thread-189688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:17:17.528 [INFO] [Thread-189688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:17:17.536 [DEBUG] [Thread-189688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:17:17.536 [DEBUG] [Thread-189688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:17:17.536 [DEBUG] [Thread-189688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:17:17.536 [DEBUG] [Thread-189688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:17.536 [DEBUG] [Thread-189688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] client lang: <none>
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] server lang: <none>
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] kex follows: False
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:17:17.537 [DEBUG] [Thread-189688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:17:17.538 [DEBUG] [Thread-189688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:17:17.538 [DEBUG] [Thread-189688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:17:17.538 [DEBUG] [Thread-189688] [transport.py] [_log()] Compression: none
2026-04-12T13:17:17.539 [DEBUG] [Thread-189688] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:17:17.594 [DEBUG] [Thread-189688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:17:17.595 [DEBUG] [Thread-189688] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:17:17.596 [DEBUG] [Thread-189688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:17:17.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:17:17.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:17:17.652 [DEBUG] [Thread-189688] [transport.py] [_log()] userauth is OK
2026-04-12T13:17:17.653 [DEBUG] [Thread-189688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:17:17.653 [DEBUG] [Thread-189688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:17:17.653 [DEBUG] [Thread-189688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:17:17.653 [DEBUG] [Thread-189688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:17:17.673 [INFO] [Thread-189688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:17:17.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:17:17.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:17:18.487 [DEBUG] [Thread-189688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:17:18.487 [DEBUG] [Thread-189688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:17:18.536 [DEBUG] [Thread-189688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:17:18.536 [DEBUG] [Thread-189688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:17:18.549 [DEBUG] [Thread-189688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:17:18.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:17:18.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:17:18.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:17:18.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:17:18.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:17:18.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:17:18.591 [DEBUG] [Thread-189688] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:17:21.514 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:17:21.516 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:17:26.952 [DEBUG] [Thread-189690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:17:36.028 [DEBUG] [Thread-189691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:17:42.017 [DEBUG] [Thread-189692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:17:48.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:17:48.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:17:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:17:49.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 17, 38), 3.1142, 81.3667, 0.0, 18.2786, 13.4289, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:17:49.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:17:38
2026-04-12T13:17:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:17:50.403 [DEBUG] [Thread-189693] [transport.py] [_log()] starting thread (client mode): 0xb0fe8070
2026-04-12T13:17:50.403 [DEBUG] [Thread-189693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:17:50.424 [DEBUG] [Thread-189693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:17:50.424 [INFO] [Thread-189693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:17:50.427 [DEBUG] [Thread-189693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] client lang: <none>
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] server lang: <none>
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] kex follows: False
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] Compression: none
2026-04-12T13:17:50.428 [DEBUG] [Thread-189693] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:17:50.444 [DEBUG] [Thread-189693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:17:50.445 [DEBUG] [Thread-189693] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:17:50.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:17:50.445 [DEBUG] [Thread-189693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:17:50.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:17:50.488 [DEBUG] [Thread-189693] [transport.py] [_log()] userauth is OK
2026-04-12T13:17:50.489 [DEBUG] [Thread-189693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:17:50.489 [DEBUG] [Thread-189693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:17:50.489 [DEBUG] [Thread-189693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:17:50.489 [DEBUG] [Thread-189693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:17:50.510 [INFO] [Thread-189693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:17:50.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:17:51.054 [DEBUG] [Thread-189693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:17:51.055 [DEBUG] [Thread-189693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:17:51.055 [DEBUG] [Thread-189693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:17:51.096 [DEBUG] [Thread-189693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:17:51.097 [DEBUG] [Thread-189693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:17:51.101 [DEBUG] [Thread-189693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:17:51.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:17:51.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:17:51.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:17:51.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:17:51.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:17:51.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:17:51.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:17:51.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:17:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:17:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.470594 -999.00  +12.90  11.85     82  +10.10 1 3 1 2 1   888    0 2.93 33.25 ----- 12.4 11.8 263.8 18.3 17.7 -8.3 17.1 -7.4 16.5 -7.1 17.2 -7.5
2026-04-12T13:17:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:17:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:17:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.470594
2026-04-12T13:17:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:17:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:17:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:17:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:17:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:17:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:17:38', tmtdew=3.1142, humidity=81.3667, cloud=0.0, wind=18.2786, temperature=13.4289, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:17:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:17:51.127 [DEBUG] [Thread-189693] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:17:51.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:17:51.220 [DEBUG] [Thread-189696] [transport.py] [_log()] starting thread (client mode): 0xb0fea4d0
2026-04-12T13:17:51.220 [DEBUG] [Thread-189696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:17:51.234 [DEBUG] [Thread-189696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:17:51.235 [INFO] [Thread-189696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:17:51.243 [DEBUG] [Thread-189696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:17:51.243 [DEBUG] [Thread-189696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:17:51.243 [DEBUG] [Thread-189696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:17:51.243 [DEBUG] [Thread-189696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:51.243 [DEBUG] [Thread-189696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] client lang: <none>
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] server lang: <none>
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] kex follows: False
2026-04-12T13:17:51.244 [DEBUG] [Thread-189696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:17:51.245 [DEBUG] [Thread-189696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:17:51.245 [DEBUG] [Thread-189696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:17:51.245 [DEBUG] [Thread-189696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:17:51.245 [DEBUG] [Thread-189696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:17:51.245 [DEBUG] [Thread-189696] [transport.py] [_log()] Compression: none
2026-04-12T13:17:51.245 [DEBUG] [Thread-189696] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:17:51.303 [DEBUG] [Thread-189696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:17:51.303 [DEBUG] [Thread-189696] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:17:51.304 [DEBUG] [Thread-189696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:17:51.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:17:51.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:17:51.362 [DEBUG] [Thread-189696] [transport.py] [_log()] userauth is OK
2026-04-12T13:17:51.363 [DEBUG] [Thread-189696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:17:51.363 [DEBUG] [Thread-189696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:17:51.363 [DEBUG] [Thread-189696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:17:51.363 [DEBUG] [Thread-189696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:17:51.382 [INFO] [Thread-189696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:17:51.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:17:51.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:17:52.214 [DEBUG] [Thread-189696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:17:52.215 [DEBUG] [Thread-189696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:17:52.263 [DEBUG] [Thread-189696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:17:52.263 [DEBUG] [Thread-189696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:17:52.273 [DEBUG] [Thread-189696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:17:52.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:17:52.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:17:52.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:17:52.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:17:52.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:17:52.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:17:52.312 [DEBUG] [Thread-189696] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:17:57.049 [DEBUG] [Thread-189698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:12.139 [DEBUG] [Thread-189699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:21.675 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:21.677 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:22.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:18:22.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:18:22.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:18:23.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 18, 13), 1.59341, 90.2662, 0.0, 14.6635, 12.8807, 1, 2, 0, 2, 0, 0),)
2026-04-12T13:18:23.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:18:13
2026-04-12T13:18:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:18:24.133 [DEBUG] [Thread-189700] [transport.py] [_log()] starting thread (client mode): 0xb0fe9180
2026-04-12T13:18:24.133 [DEBUG] [Thread-189700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:18:24.146 [DEBUG] [Thread-189700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:18:24.146 [INFO] [Thread-189700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] client lang: <none>
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] server lang: <none>
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] kex follows: False
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] Compression: none
2026-04-12T13:18:24.147 [DEBUG] [Thread-189700] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:18:24.155 [DEBUG] [Thread-189700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:18:24.155 [DEBUG] [Thread-189700] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:18:24.155 [DEBUG] [Thread-189700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:18:24.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:18:24.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:18:24.156 [DEBUG] [Thread-189700] [transport.py] [_log()] userauth is OK
2026-04-12T13:18:24.156 [DEBUG] [Thread-189700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:18:24.156 [DEBUG] [Thread-189700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:18:24.156 [DEBUG] [Thread-189700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:18:24.156 [DEBUG] [Thread-189700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:18:24.170 [INFO] [Thread-189700] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:18:24.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:18:24.745 [DEBUG] [Thread-189700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:18:24.746 [DEBUG] [Thread-189700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:18:24.746 [DEBUG] [Thread-189700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:18:24.787 [DEBUG] [Thread-189700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:18:24.787 [DEBUG] [Thread-189700] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:18:24.791 [DEBUG] [Thread-189700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:18:24.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:18:24.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:18:24.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:18:24.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:18:24.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:18:24.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:18:24.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:18:24.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:18:24.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:18:24.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.470941 -999.00  +12.90  13.66     85  +10.50 1 3 1 2 1   888    0 3.01 34.65 ----- 11.6 13.7 277.8 15.7 17.7 -8.8 17.1 -7.4 16.6 -9.0 17.2 -7.1
2026-04-12T13:18:24.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:18:24.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:18:24.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.470941
2026-04-12T13:18:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:18:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:18:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:18:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:18:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:18:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:18:13', tmtdew=1.59341, humidity=90.2662, cloud=0.0, wind=14.6635, temperature=12.8807, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:18:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:18:24.812 [DEBUG] [Thread-189700] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:18:24.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:18:24.906 [DEBUG] [Thread-189703] [transport.py] [_log()] starting thread (client mode): 0xb0fcf6a0
2026-04-12T13:18:24.907 [DEBUG] [Thread-189703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:18:24.923 [DEBUG] [Thread-189703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:18:24.923 [INFO] [Thread-189703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:18:24.931 [DEBUG] [Thread-189703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:18:24.932 [DEBUG] [Thread-189703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:18:24.932 [DEBUG] [Thread-189703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:18:24.932 [DEBUG] [Thread-189703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:24.932 [DEBUG] [Thread-189703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:24.932 [DEBUG] [Thread-189703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:24.932 [DEBUG] [Thread-189703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:24.932 [DEBUG] [Thread-189703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:18:24.933 [DEBUG] [Thread-189703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:18:24.933 [DEBUG] [Thread-189703] [transport.py] [_log()] client lang: <none>
2026-04-12T13:18:24.933 [DEBUG] [Thread-189703] [transport.py] [_log()] server lang: <none>
2026-04-12T13:18:24.933 [DEBUG] [Thread-189703] [transport.py] [_log()] kex follows: False
2026-04-12T13:18:24.933 [DEBUG] [Thread-189703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:18:24.933 [DEBUG] [Thread-189703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:18:24.933 [DEBUG] [Thread-189703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:18:24.934 [DEBUG] [Thread-189703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:18:24.934 [DEBUG] [Thread-189703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:18:24.934 [DEBUG] [Thread-189703] [transport.py] [_log()] Compression: none
2026-04-12T13:18:24.934 [DEBUG] [Thread-189703] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:18:25.000 [DEBUG] [Thread-189703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:18:25.000 [DEBUG] [Thread-189703] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:18:25.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:18:25.002 [DEBUG] [Thread-189703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:18:25.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:18:25.058 [DEBUG] [Thread-189703] [transport.py] [_log()] userauth is OK
2026-04-12T13:18:25.058 [DEBUG] [Thread-189703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:18:25.058 [DEBUG] [Thread-189703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:18:25.058 [DEBUG] [Thread-189703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:18:25.059 [DEBUG] [Thread-189703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:18:25.077 [INFO] [Thread-189703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:18:25.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:18:25.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:18:25.915 [DEBUG] [Thread-189703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:18:25.915 [DEBUG] [Thread-189703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:18:25.963 [DEBUG] [Thread-189703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:18:25.963 [DEBUG] [Thread-189703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:18:25.973 [DEBUG] [Thread-189703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:18:25.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:18:25.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:18:25.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:18:26.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:18:26.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:18:26.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:18:26.010 [DEBUG] [Thread-189703] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:18:27.179 [DEBUG] [Thread-189705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:36.087 [DEBUG] [Thread-189706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:42.234 [DEBUG] [Thread-189707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:18:56.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:18:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:18:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 18, 49), 3.21537, 80.836, 0.0, 16.1266, 13.5614, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:18:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:18:49
2026-04-12T13:18:57.275 [DEBUG] [Thread-189708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:18:57.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:18:57.750 [DEBUG] [Thread-189709] [transport.py] [_log()] starting thread (client mode): 0xb0fce260
2026-04-12T13:18:57.750 [DEBUG] [Thread-189709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:18:57.762 [DEBUG] [Thread-189709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:18:57.762 [INFO] [Thread-189709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] client lang: <none>
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] server lang: <none>
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] kex follows: False
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] Compression: none
2026-04-12T13:18:57.764 [DEBUG] [Thread-189709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:18:57.771 [DEBUG] [Thread-189709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:18:57.772 [DEBUG] [Thread-189709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:18:57.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:18:57.772 [DEBUG] [Thread-189709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:18:57.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:18:57.773 [DEBUG] [Thread-189709] [transport.py] [_log()] userauth is OK
2026-04-12T13:18:57.773 [DEBUG] [Thread-189709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:18:57.773 [DEBUG] [Thread-189709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:18:57.773 [DEBUG] [Thread-189709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:18:57.773 [DEBUG] [Thread-189709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:18:57.784 [INFO] [Thread-189709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:18:57.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:18:58.416 [DEBUG] [Thread-189709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:18:58.416 [DEBUG] [Thread-189709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:18:58.416 [DEBUG] [Thread-189709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:18:58.457 [DEBUG] [Thread-189709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:18:58.457 [DEBUG] [Thread-189709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:18:58.461 [DEBUG] [Thread-189709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:18:58.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:18:58.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:18:58.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:18:58.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:18:58.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:18:58.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:18:58.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:18:58.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:18:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:18:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.471288 -999.00  +12.90  11.61     84  +10.50 1 3 1 2 1   888    0 3.02 35.19 ----- 9.8 11.6 253.0 17.4 17.7 -8.5 17.1 -7.6 16.5 -7.9 17.2 -7.8
2026-04-12T13:18:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:18:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:18:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.471288
2026-04-12T13:18:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:18:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:18:58.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:18:58.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:18:58.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:18:58.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:18:49', tmtdew=3.21537, humidity=80.836, cloud=0.0, wind=16.1266, temperature=13.5614, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:18:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:18:58.490 [DEBUG] [Thread-189709] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:18:58.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:18:58.585 [DEBUG] [Thread-189712] [transport.py] [_log()] starting thread (client mode): 0xb0feb4f0
2026-04-12T13:18:58.585 [DEBUG] [Thread-189712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:18:58.601 [DEBUG] [Thread-189712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:18:58.601 [INFO] [Thread-189712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:18:58.612 [DEBUG] [Thread-189712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:18:58.612 [DEBUG] [Thread-189712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:18:58.612 [DEBUG] [Thread-189712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:18:58.612 [DEBUG] [Thread-189712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] client lang: <none>
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] server lang: <none>
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] kex follows: False
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] Compression: none
2026-04-12T13:18:58.613 [DEBUG] [Thread-189712] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:18:58.671 [DEBUG] [Thread-189712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:18:58.671 [DEBUG] [Thread-189712] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:18:58.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:18:58.672 [DEBUG] [Thread-189712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:18:58.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:18:58.727 [DEBUG] [Thread-189712] [transport.py] [_log()] userauth is OK
2026-04-12T13:18:58.727 [DEBUG] [Thread-189712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:18:58.727 [DEBUG] [Thread-189712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:18:58.728 [DEBUG] [Thread-189712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:18:58.728 [DEBUG] [Thread-189712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:18:58.747 [INFO] [Thread-189712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:18:58.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:18:58.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:18:59.558 [DEBUG] [Thread-189712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:18:59.559 [DEBUG] [Thread-189712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:18:59.606 [DEBUG] [Thread-189712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:18:59.606 [DEBUG] [Thread-189712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:18:59.616 [DEBUG] [Thread-189712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:18:59.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:18:59.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:18:59.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:18:59.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:18:59.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:18:59.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:18:59.653 [DEBUG] [Thread-189712] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:19:12.310 [DEBUG] [Thread-189714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:19:21.823 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:19:21.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:19:27.371 [DEBUG] [Thread-189715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:19:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:19:29.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:19: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
2026-04-12T13:19:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 18, 49), 3.21537, 80.836, 0.0, 16.1266, 13.5614, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:19:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:18:49
2026-04-12T13:19:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:19:31.543 [DEBUG] [Thread-189716] [transport.py] [_log()] starting thread (client mode): 0xb0fb7220
2026-04-12T13:19:31.543 [DEBUG] [Thread-189716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:19:31.569 [DEBUG] [Thread-189716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:19:31.569 [INFO] [Thread-189716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:19:31.573 [DEBUG] [Thread-189716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:19:31.573 [DEBUG] [Thread-189716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:19:31.573 [DEBUG] [Thread-189716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:19:31.573 [DEBUG] [Thread-189716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] client lang: <none>
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] server lang: <none>
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] kex follows: False
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] Compression: none
2026-04-12T13:19:31.574 [DEBUG] [Thread-189716] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:19:31.592 [DEBUG] [Thread-189716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:19:31.593 [DEBUG] [Thread-189716] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:19:31.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:19:31.594 [DEBUG] [Thread-189716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:19:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:19:31.596 [DEBUG] [Thread-189716] [transport.py] [_log()] userauth is OK
2026-04-12T13:19:31.596 [DEBUG] [Thread-189716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:19:31.596 [DEBUG] [Thread-189716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:19:31.596 [DEBUG] [Thread-189716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:19:31.596 [DEBUG] [Thread-189716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:19:31.621 [INFO] [Thread-189716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:19:31.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:19:32.239 [DEBUG] [Thread-189716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:19:32.240 [DEBUG] [Thread-189716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:19:32.240 [DEBUG] [Thread-189716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:19:32.280 [DEBUG] [Thread-189716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:19:32.280 [DEBUG] [Thread-189716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:19:32.283 [DEBUG] [Thread-189716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:19:32.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:19:32.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:19:32.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:19:32.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:19:32.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:19:32.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:19:32.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:19:32.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:19:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:19:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.471635 -999.00  +13.00   6.89     85  +10.60 1 3 1 2 1   888    0 3.09 35.90 ----- 8.2 6.9 252.4 11.1 17.9 -8.3 17.2 -8.2 16.6 -6.1 17.3 -7.1
2026-04-12T13:19:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:19:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:19:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.471635
2026-04-12T13:19:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:19:32.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:19:32.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:19:32.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:19:32.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:19:32.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:18:49', tmtdew=3.21537, humidity=80.836, cloud=0.0, wind=16.1266, temperature=13.5614, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:19:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:19:32.311 [DEBUG] [Thread-189716] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:19:32.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:19:32.404 [DEBUG] [Thread-189719] [transport.py] [_log()] starting thread (client mode): 0xb0fb5bd0
2026-04-12T13:19:32.404 [DEBUG] [Thread-189719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:19:32.425 [DEBUG] [Thread-189719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:19:32.425 [INFO] [Thread-189719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] client lang: <none>
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] server lang: <none>
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] kex follows: False
2026-04-12T13:19:32.436 [DEBUG] [Thread-189719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:19:32.437 [DEBUG] [Thread-189719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:19:32.437 [DEBUG] [Thread-189719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:19:32.437 [DEBUG] [Thread-189719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:19:32.437 [DEBUG] [Thread-189719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:19:32.437 [DEBUG] [Thread-189719] [transport.py] [_log()] Compression: none
2026-04-12T13:19:32.437 [DEBUG] [Thread-189719] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:19:32.494 [DEBUG] [Thread-189719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:19:32.495 [DEBUG] [Thread-189719] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:19:32.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:19:32.496 [DEBUG] [Thread-189719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:19:32.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:19:32.549 [DEBUG] [Thread-189719] [transport.py] [_log()] userauth is OK
2026-04-12T13:19:32.550 [DEBUG] [Thread-189719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:19:32.550 [DEBUG] [Thread-189719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:19:32.550 [DEBUG] [Thread-189719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:19:32.550 [DEBUG] [Thread-189719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:19:32.567 [INFO] [Thread-189719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:19:32.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:19:32.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:19:33.373 [DEBUG] [Thread-189719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:19:33.373 [DEBUG] [Thread-189719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:19:33.421 [DEBUG] [Thread-189719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:19:33.421 [DEBUG] [Thread-189719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:19:33.430 [DEBUG] [Thread-189719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:19:33.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:19:33.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:19:33.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:19:33.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:19:33.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:19:33.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:19:33.465 [DEBUG] [Thread-189719] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:19:36.140 [DEBUG] [Thread-189721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:19:42.407 [DEBUG] [Thread-189722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:19:57.469 [DEBUG] [Thread-189723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:20:03.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:20:03.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:20:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:20:04.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 19, 24), 1.67491, 89.8185, 0.0, 14.2571, 12.931, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:20:04.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:19:24
2026-04-12T13:20:05.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:20:05.333 [DEBUG] [Thread-189724] [transport.py] [_log()] starting thread (client mode): 0xb0fea980
2026-04-12T13:20:05.334 [DEBUG] [Thread-189724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:20:05.353 [DEBUG] [Thread-189724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:20:05.353 [INFO] [Thread-189724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] client lang: <none>
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] server lang: <none>
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] kex follows: False
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] Compression: none
2026-04-12T13:20:05.357 [DEBUG] [Thread-189724] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:20:05.375 [DEBUG] [Thread-189724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:20:05.376 [DEBUG] [Thread-189724] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:20:05.376 [DEBUG] [Thread-189724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:20:05.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:20:05.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:20:05.378 [DEBUG] [Thread-189724] [transport.py] [_log()] userauth is OK
2026-04-12T13:20:05.378 [DEBUG] [Thread-189724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:20:05.378 [DEBUG] [Thread-189724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:20:05.378 [DEBUG] [Thread-189724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:20:05.379 [DEBUG] [Thread-189724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:20:05.396 [INFO] [Thread-189724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:20:05.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:20:11.746 [DEBUG] [Thread-189724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:20:11.746 [DEBUG] [Thread-189724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:20:11.747 [DEBUG] [Thread-189724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:20:11.787 [DEBUG] [Thread-189724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:20:11.787 [DEBUG] [Thread-189724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:20:11.790 [DEBUG] [Thread-189724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:20:11.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:20:11.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:20:11.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:20:11.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:20:11.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:20:11.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:20:11.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:20:11.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:20:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:20:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.471982 -999.00  +13.00  14.68     85  +10.70 1 3 1 2 1   888    0 3.09 35.27 ----- 12.4 14.7 268.8 20.5 17.8 -8.4 17.2 -7.6 16.8 -8.1 17.4 -8.0
2026-04-12T13:20:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:20:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:20:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.471982
2026-04-12T13:20:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:20:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:20:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:20:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:20:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:20:11.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:19:24', tmtdew=1.67491, humidity=89.8185, cloud=0.0, wind=14.2571, temperature=12.931, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:19:39.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:20:11.874 [DEBUG] [Thread-189724] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:20:11.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:20:11.971 [DEBUG] [Thread-189727] [transport.py] [_log()] starting thread (client mode): 0xb0fce110
2026-04-12T13:20:11.971 [DEBUG] [Thread-189727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:20:11.986 [DEBUG] [Thread-189727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:20:11.986 [INFO] [Thread-189727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:20:11.993 [DEBUG] [Thread-189727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] client lang: <none>
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] server lang: <none>
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] kex follows: False
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:20:11.994 [DEBUG] [Thread-189727] [transport.py] [_log()] Compression: none
2026-04-12T13:20:11.995 [DEBUG] [Thread-189727] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:20:12.055 [DEBUG] [Thread-189727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:20:12.055 [DEBUG] [Thread-189727] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:20:12.056 [DEBUG] [Thread-189727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:20:12.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:20:12.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:20:12.115 [DEBUG] [Thread-189727] [transport.py] [_log()] userauth is OK
2026-04-12T13:20:12.115 [DEBUG] [Thread-189727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:20:12.115 [DEBUG] [Thread-189727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:20:12.115 [DEBUG] [Thread-189727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:20:12.115 [DEBUG] [Thread-189727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:20:12.134 [INFO] [Thread-189727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:20:12.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:20:12.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:20:12.506 [DEBUG] [Thread-189729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:20:12.950 [DEBUG] [Thread-189727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:20:12.950 [DEBUG] [Thread-189727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:20:12.998 [DEBUG] [Thread-189727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:20:12.999 [DEBUG] [Thread-189727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:20:13.008 [DEBUG] [Thread-189727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:20:13.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:20:13.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:20:13.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:20:13.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:20:13.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:20:13.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:20:13.047 [DEBUG] [Thread-189727] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:20:21.978 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:20:21.979 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:20:27.561 [DEBUG] [Thread-189730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:20:36.176 [DEBUG] [Thread-189731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:20:42.595 [DEBUG] [Thread-189732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:20:43.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:20:43.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:20:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:20:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 20, 35), 2.96445, 82.2285, 0.0, 11.646, 13.7934, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:20:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:20:35
2026-04-12T13:20:44.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:20:44.923 [DEBUG] [Thread-189733] [transport.py] [_log()] starting thread (client mode): 0xa796a6e0
2026-04-12T13:20:44.923 [DEBUG] [Thread-189733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:20:44.942 [DEBUG] [Thread-189733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:20:44.942 [INFO] [Thread-189733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] client lang: <none>
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] server lang: <none>
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] kex follows: False
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] Compression: none
2026-04-12T13:20:44.944 [DEBUG] [Thread-189733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:20:44.963 [DEBUG] [Thread-189733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:20:44.963 [DEBUG] [Thread-189733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:20:44.964 [DEBUG] [Thread-189733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:20:44.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:20:44.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:20:44.966 [DEBUG] [Thread-189733] [transport.py] [_log()] userauth is OK
2026-04-12T13:20:44.966 [DEBUG] [Thread-189733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:20:44.966 [DEBUG] [Thread-189733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:20:44.966 [DEBUG] [Thread-189733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:20:44.966 [DEBUG] [Thread-189733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:20:44.990 [INFO] [Thread-189733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:20:44.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:20:45.546 [DEBUG] [Thread-189733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:20:45.546 [DEBUG] [Thread-189733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:20:45.546 [DEBUG] [Thread-189733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:20:45.587 [DEBUG] [Thread-189733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:20:45.587 [DEBUG] [Thread-189733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:20:45.591 [DEBUG] [Thread-189733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:20:45.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:20:45.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:20:45.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:20:45.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:20:45.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:20:45.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:20:45.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:20:45.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:20:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:20:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.472329 -999.00  +13.00  14.58     85  +10.60 1 3 1 2 1   888    0 3.07 34.90 ----- 15.8 14.6 257.6 17.5 17.8 -8.3 17.2 -7.5 16.8 -6.4 17.4 -8.0
2026-04-12T13:20:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:20:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:20:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.472329
2026-04-12T13:20:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:20:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:20:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:20:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:20:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:20:45.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:20:35', tmtdew=2.96445, humidity=82.2285, cloud=0.0, wind=11.646, temperature=13.7934, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:20:09.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:20:45.617 [DEBUG] [Thread-189733] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:20:45.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:20:45.726 [DEBUG] [Thread-189736] [transport.py] [_log()] starting thread (client mode): 0xa79690f0
2026-04-12T13:20:45.726 [DEBUG] [Thread-189736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:20:45.741 [DEBUG] [Thread-189736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:20:45.742 [INFO] [Thread-189736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:20:45.750 [DEBUG] [Thread-189736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] client lang: <none>
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] server lang: <none>
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] kex follows: False
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:20:45.751 [DEBUG] [Thread-189736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:20:45.752 [DEBUG] [Thread-189736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:20:45.752 [DEBUG] [Thread-189736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:20:45.752 [DEBUG] [Thread-189736] [transport.py] [_log()] Compression: none
2026-04-12T13:20:45.752 [DEBUG] [Thread-189736] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:20:45.810 [DEBUG] [Thread-189736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:20:45.811 [DEBUG] [Thread-189736] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:20:45.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:20:45.812 [DEBUG] [Thread-189736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:20:45.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:20:45.867 [DEBUG] [Thread-189736] [transport.py] [_log()] userauth is OK
2026-04-12T13:20:45.867 [DEBUG] [Thread-189736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:20:45.867 [DEBUG] [Thread-189736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:20:45.867 [DEBUG] [Thread-189736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:20:45.867 [DEBUG] [Thread-189736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:20:45.881 [INFO] [Thread-189736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:20:45.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:20:45.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:20:46.706 [DEBUG] [Thread-189736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:20:46.706 [DEBUG] [Thread-189736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:20:46.755 [DEBUG] [Thread-189736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:20:46.755 [DEBUG] [Thread-189736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:20:46.764 [DEBUG] [Thread-189736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:20:46.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:20:46.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:20: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
2026-04-12T13:20:46.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:20:46.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:20:46.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:20:46.801 [DEBUG] [Thread-189736] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:20:57.633 [DEBUG] [Thread-189738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:21:12.687 [DEBUG] [Thread-189739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:21:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:21:16.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:21:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:21:18.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 21, 11), 1.55802, 90.4816, 0.0, 14.4695, 13.163, 1, 2, 0, 2, 0, 0),)
2026-04-12T13:21:18.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:21:11
2026-04-12T13:21:18.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:21:18.742 [DEBUG] [Thread-189740] [transport.py] [_log()] starting thread (client mode): 0xb0fea020
2026-04-12T13:21:18.742 [DEBUG] [Thread-189740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:21:18.756 [DEBUG] [Thread-189740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:21:18.757 [INFO] [Thread-189740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:21:18.759 [DEBUG] [Thread-189740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:21:18.759 [DEBUG] [Thread-189740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:21:18.759 [DEBUG] [Thread-189740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] client lang: <none>
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] server lang: <none>
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] kex follows: False
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] Compression: none
2026-04-12T13:21:18.760 [DEBUG] [Thread-189740] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:21:18.772 [DEBUG] [Thread-189740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:21:18.772 [DEBUG] [Thread-189740] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:21:18.772 [DEBUG] [Thread-189740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:21:18.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:21:18.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:21:18.774 [DEBUG] [Thread-189740] [transport.py] [_log()] userauth is OK
2026-04-12T13:21:18.774 [DEBUG] [Thread-189740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:21:18.774 [DEBUG] [Thread-189740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:21:18.774 [DEBUG] [Thread-189740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:21:18.774 [DEBUG] [Thread-189740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:21:18.795 [INFO] [Thread-189740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:21:18.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:21:19.373 [DEBUG] [Thread-189740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:21:19.374 [DEBUG] [Thread-189740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:21:19.374 [DEBUG] [Thread-189740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:21:19.415 [DEBUG] [Thread-189740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:21:19.415 [DEBUG] [Thread-189740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:21:19.419 [DEBUG] [Thread-189740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:21:19.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:21:19.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:21:19.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:21:19.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:21:19.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:21:19.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:21:19.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:21:19.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:21:19.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.473024 -999.00  +13.10  13.45     83  +10.40 1 3 1 2 1   888    0 3.12 36.05 ----- 11.2 13.4 263.2 16.9 17.9 -9.3 17.3 -7.4 16.8 -6.5 17.4 -7.6
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.473024
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:21:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:21:11', tmtdew=1.55802, humidity=90.4816, cloud=0.0, wind=14.4695, temperature=13.163, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:21:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:21:19.441 [DEBUG] [Thread-189740] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:21:19.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:21:19.523 [DEBUG] [Thread-189743] [transport.py] [_log()] starting thread (client mode): 0xb0f55570
2026-04-12T13:21:19.524 [DEBUG] [Thread-189743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:21:19.539 [DEBUG] [Thread-189743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:21:19.539 [INFO] [Thread-189743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:21:19.546 [DEBUG] [Thread-189743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:21:19.546 [DEBUG] [Thread-189743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:21:19.546 [DEBUG] [Thread-189743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:21:19.546 [DEBUG] [Thread-189743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:19.546 [DEBUG] [Thread-189743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:19.546 [DEBUG] [Thread-189743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] client lang: <none>
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] server lang: <none>
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] kex follows: False
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] Compression: none
2026-04-12T13:21:19.547 [DEBUG] [Thread-189743] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:21:19.606 [DEBUG] [Thread-189743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:21:19.607 [DEBUG] [Thread-189743] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:21:19.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:21:19.608 [DEBUG] [Thread-189743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:21:19.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:21:19.662 [DEBUG] [Thread-189743] [transport.py] [_log()] userauth is OK
2026-04-12T13:21:19.663 [DEBUG] [Thread-189743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:21:19.663 [DEBUG] [Thread-189743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:21:19.663 [DEBUG] [Thread-189743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:21:19.663 [DEBUG] [Thread-189743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:21:19.682 [INFO] [Thread-189743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:21:19.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:21:19.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:21:20.572 [DEBUG] [Thread-189743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:21:20.572 [DEBUG] [Thread-189743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:21:20.620 [DEBUG] [Thread-189743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:21:20.621 [DEBUG] [Thread-189743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:21:20.630 [DEBUG] [Thread-189743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:21:20.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:21:20.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:21:20.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:21:20.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:21:20.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:21:20.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:21:20.672 [DEBUG] [Thread-189743] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:21:22.128 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:21:22.130 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:21:27.724 [DEBUG] [Thread-189745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:21:36.233 [DEBUG] [Thread-189746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:21:42.782 [DEBUG] [Thread-189747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:21:50.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:21:50.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:21:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:21:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 21, 11), 1.55802, 90.4816, 0.0, 14.4695, 13.163, 1, 2, 0, 2, 0, 0),)
2026-04-12T13:21:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:21:11
2026-04-12T13:21:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:21:52.562 [DEBUG] [Thread-189748] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6a0
2026-04-12T13:21:52.562 [DEBUG] [Thread-189748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:21:52.574 [DEBUG] [Thread-189748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:21:52.574 [INFO] [Thread-189748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:21:52.575 [DEBUG] [Thread-189748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:21:52.575 [DEBUG] [Thread-189748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] client lang: <none>
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] server lang: <none>
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] kex follows: False
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] Compression: none
2026-04-12T13:21:52.576 [DEBUG] [Thread-189748] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:21:52.587 [DEBUG] [Thread-189748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:21:52.587 [DEBUG] [Thread-189748] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:21:52.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:21:52.588 [DEBUG] [Thread-189748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:21:52.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:21:52.589 [DEBUG] [Thread-189748] [transport.py] [_log()] userauth is OK
2026-04-12T13:21:52.589 [DEBUG] [Thread-189748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:21:52.589 [DEBUG] [Thread-189748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:21:52.589 [DEBUG] [Thread-189748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:21:52.589 [DEBUG] [Thread-189748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:21:52.604 [INFO] [Thread-189748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:21:52.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:21:53.209 [DEBUG] [Thread-189748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:21:53.209 [DEBUG] [Thread-189748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:21:53.209 [DEBUG] [Thread-189748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:21:53.250 [DEBUG] [Thread-189748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:21:53.250 [DEBUG] [Thread-189748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:21:53.253 [DEBUG] [Thread-189748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:21:53.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:21:53.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:21:53.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:21:53.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:21:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:21:53.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:21:53.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:21:53.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.473371 -999.00  +13.10  10.64     83  +10.30 1 3 1 2 1   888    0 3.27 40.70 ----- 10.7 10.6 277.0 18.2 18.0 -8.6 17.4 -7.6 16.9 -6.6 17.4 -7.8
2026-04-12T13:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:21:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:21:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.473371
2026-04-12T13:21:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:21:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:21:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:21:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:21:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:21:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:21:11', tmtdew=1.55802, humidity=90.4816, cloud=0.0, wind=14.4695, temperature=13.163, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:21:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:21:53.280 [DEBUG] [Thread-189748] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:21:53.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:21:53.373 [DEBUG] [Thread-189751] [transport.py] [_log()] starting thread (client mode): 0xae5b7850
2026-04-12T13:21:53.373 [DEBUG] [Thread-189751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:21:53.388 [DEBUG] [Thread-189751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:21:53.388 [INFO] [Thread-189751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] client lang: <none>
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] server lang: <none>
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] kex follows: False
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:21:53.396 [DEBUG] [Thread-189751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:21:53.397 [DEBUG] [Thread-189751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:21:53.397 [DEBUG] [Thread-189751] [transport.py] [_log()] Compression: none
2026-04-12T13:21:53.397 [DEBUG] [Thread-189751] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:21:53.454 [DEBUG] [Thread-189751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:21:53.455 [DEBUG] [Thread-189751] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:21:53.456 [DEBUG] [Thread-189751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:21:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:21:53.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:21:53.510 [DEBUG] [Thread-189751] [transport.py] [_log()] userauth is OK
2026-04-12T13:21:53.511 [DEBUG] [Thread-189751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:21:53.511 [DEBUG] [Thread-189751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:21:53.511 [DEBUG] [Thread-189751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:21:53.511 [DEBUG] [Thread-189751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:21:53.529 [INFO] [Thread-189751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:21:53.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:21:53.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:21:54.349 [DEBUG] [Thread-189751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:21:54.350 [DEBUG] [Thread-189751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:21:54.398 [DEBUG] [Thread-189751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:21:54.398 [DEBUG] [Thread-189751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:21:54.408 [DEBUG] [Thread-189751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:21:54.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:21:54.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:21:54.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:21:54.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:21:54.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:21:54.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:21:54.445 [DEBUG] [Thread-189751] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:21:57.818 [DEBUG] [Thread-189753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:12.867 [DEBUG] [Thread-189754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:22.285 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:22.286 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:22:24.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:22:24.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:22:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 21, 46), 3.01222, 81.9963, 0.0, 17.9611, 14.0254, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:22:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:21:46
2026-04-12T13:22:26.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:22:26.285 [DEBUG] [Thread-189755] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6a0
2026-04-12T13:22:26.285 [DEBUG] [Thread-189755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:22:26.304 [DEBUG] [Thread-189755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:22:26.304 [INFO] [Thread-189755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:22:26.306 [DEBUG] [Thread-189755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:22:26.306 [DEBUG] [Thread-189755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] client lang: <none>
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] server lang: <none>
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] kex follows: False
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:22:26.307 [DEBUG] [Thread-189755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:22:26.308 [DEBUG] [Thread-189755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:22:26.308 [DEBUG] [Thread-189755] [transport.py] [_log()] Compression: none
2026-04-12T13:22:26.308 [DEBUG] [Thread-189755] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:22:26.318 [DEBUG] [Thread-189755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:22:26.319 [DEBUG] [Thread-189755] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:22:26.320 [DEBUG] [Thread-189755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:22:26.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:22:26.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:22:26.322 [DEBUG] [Thread-189755] [transport.py] [_log()] userauth is OK
2026-04-12T13:22:26.323 [DEBUG] [Thread-189755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:22:26.323 [DEBUG] [Thread-189755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:22:26.323 [DEBUG] [Thread-189755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:22:26.323 [DEBUG] [Thread-189755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:22:26.343 [INFO] [Thread-189755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:22:26.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:22:26.992 [DEBUG] [Thread-189755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:22:26.993 [DEBUG] [Thread-189755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:22:26.993 [DEBUG] [Thread-189755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:22:27.034 [DEBUG] [Thread-189755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:22:27.034 [DEBUG] [Thread-189755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:22:27.038 [DEBUG] [Thread-189755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:22:27.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:22:27.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:22:27.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:22:27.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:22:27.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:22:27.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:22:27.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:22:27.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:22:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:22:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.473719 -999.00  +13.20   8.01     83  +10.40 1 3 1 2 1   888    0 3.42 44.52 ----- 9.4 8.0 261.2 13.6 18.1 -8.6 17.4 -7.5 17.0 -6.5 17.6 -7.6
2026-04-12T13:22:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:22:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:22:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.473719
2026-04-12T13:22:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:22:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:22:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:22:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:22:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:22:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:21:46', tmtdew=3.01222, humidity=81.9963, cloud=0.0, wind=17.9611, temperature=14.0254, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:22:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:22:27.063 [DEBUG] [Thread-189755] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:22:27.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:22:27.156 [DEBUG] [Thread-189758] [transport.py] [_log()] starting thread (client mode): 0xae514460
2026-04-12T13:22:27.156 [DEBUG] [Thread-189758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:22:27.170 [DEBUG] [Thread-189758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:22:27.170 [INFO] [Thread-189758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] client lang: <none>
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] server lang: <none>
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] kex follows: False
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:22:27.178 [DEBUG] [Thread-189758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:22:27.179 [DEBUG] [Thread-189758] [transport.py] [_log()] Compression: none
2026-04-12T13:22:27.179 [DEBUG] [Thread-189758] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:22:27.235 [DEBUG] [Thread-189758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:22:27.236 [DEBUG] [Thread-189758] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:22:27.236 [DEBUG] [Thread-189758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:22:27.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:22:27.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:22:27.298 [DEBUG] [Thread-189758] [transport.py] [_log()] userauth is OK
2026-04-12T13:22:27.298 [DEBUG] [Thread-189758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:22:27.299 [DEBUG] [Thread-189758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:22:27.299 [DEBUG] [Thread-189758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:22:27.299 [DEBUG] [Thread-189758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:22:27.317 [INFO] [Thread-189758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:22:27.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:22:27.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:22:27.903 [DEBUG] [Thread-189760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:28.166 [DEBUG] [Thread-189758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:22:28.166 [DEBUG] [Thread-189758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:22:28.214 [DEBUG] [Thread-189758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:22:28.214 [DEBUG] [Thread-189758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:22:28.223 [DEBUG] [Thread-189758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:22:28.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:22:28.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:22:28.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:22:28.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:22:28.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:22:28.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:22:28.260 [DEBUG] [Thread-189758] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:22:36.299 [DEBUG] [Thread-189761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:42.949 [DEBUG] [Thread-189762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:57.986 [DEBUG] [Thread-189763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:22:58.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:22:58.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:22:58.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:22:59.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 22, 22), 1.5454, 90.2826, 0.0, 14.7164, 13.0961, 1, 2, 0, 2, 0, 0),)
2026-04-12T13:22:59.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:22:22
2026-04-12T13:22:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:23:00.146 [DEBUG] [Thread-189764] [transport.py] [_log()] starting thread (client mode): 0xb0fe8f40
2026-04-12T13:23:00.146 [DEBUG] [Thread-189764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:23:00.164 [DEBUG] [Thread-189764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:23:00.165 [INFO] [Thread-189764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:23:00.166 [DEBUG] [Thread-189764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:23:00.166 [DEBUG] [Thread-189764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:23:00.166 [DEBUG] [Thread-189764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:23:00.166 [DEBUG] [Thread-189764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] client lang: <none>
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] server lang: <none>
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] kex follows: False
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] Compression: none
2026-04-12T13:23:00.167 [DEBUG] [Thread-189764] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:23:00.177 [DEBUG] [Thread-189764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:23:00.178 [DEBUG] [Thread-189764] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:23:00.178 [DEBUG] [Thread-189764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:23:00.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:23:00.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:23:00.180 [DEBUG] [Thread-189764] [transport.py] [_log()] userauth is OK
2026-04-12T13:23:00.180 [DEBUG] [Thread-189764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:23:00.180 [DEBUG] [Thread-189764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:23:00.180 [DEBUG] [Thread-189764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:23:00.180 [DEBUG] [Thread-189764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:23:00.197 [INFO] [Thread-189764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:23:00.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:23:00.763 [DEBUG] [Thread-189764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:23:00.764 [DEBUG] [Thread-189764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:23:00.764 [DEBUG] [Thread-189764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:23:00.804 [DEBUG] [Thread-189764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:23:00.805 [DEBUG] [Thread-189764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:23:00.808 [DEBUG] [Thread-189764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:23:00.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:23:00.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:23:00.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:23:00.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:23:00.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:23:00.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:23:00.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:23:00.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:23:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:23:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.474066 -999.00  +13.10   9.08     83  +10.20 1 3 1 2 1   888    0 3.50 46.02 ----- 10.8 9.1 263.0 15.2 18.1 -8.8 17.5 -7.7 17.0 -7.0 17.6 -8.1
2026-04-12T13:23:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:23:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:23:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.474066
2026-04-12T13:23:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:23:00.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:23:00.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:23:00.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:23:00.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:23:00.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:22:22', tmtdew=1.5454, humidity=90.2826, cloud=0.0, wind=14.7164, temperature=13.0961, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:22:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:23:00.833 [DEBUG] [Thread-189764] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:23:00.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:23:00.926 [DEBUG] [Thread-189767] [transport.py] [_log()] starting thread (client mode): 0xae5b7850
2026-04-12T13:23:00.926 [DEBUG] [Thread-189767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:23:00.941 [DEBUG] [Thread-189767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:23:00.942 [INFO] [Thread-189767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] client lang: <none>
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] server lang: <none>
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] kex follows: False
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:23:00.949 [DEBUG] [Thread-189767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:23:00.950 [DEBUG] [Thread-189767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:23:00.950 [DEBUG] [Thread-189767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:23:00.950 [DEBUG] [Thread-189767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:23:00.950 [DEBUG] [Thread-189767] [transport.py] [_log()] Compression: none
2026-04-12T13:23:00.950 [DEBUG] [Thread-189767] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:23:01.005 [DEBUG] [Thread-189767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:23:01.006 [DEBUG] [Thread-189767] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:23:01.006 [DEBUG] [Thread-189767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:23:01.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:23:01.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:23:01.062 [DEBUG] [Thread-189767] [transport.py] [_log()] userauth is OK
2026-04-12T13:23:01.062 [DEBUG] [Thread-189767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:23:01.062 [DEBUG] [Thread-189767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:23:01.062 [DEBUG] [Thread-189767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:23:01.062 [DEBUG] [Thread-189767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:23:01.076 [INFO] [Thread-189767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:23:01.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:23:01.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:23:01.933 [DEBUG] [Thread-189767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:23:01.934 [DEBUG] [Thread-189767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:23:01.981 [DEBUG] [Thread-189767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:23:01.982 [DEBUG] [Thread-189767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:23:01.991 [DEBUG] [Thread-189767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:23:01.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:23:02.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:23:02.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:23:02.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:23:02.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:23:02.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:23:02.027 [DEBUG] [Thread-189767] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:23:13.025 [DEBUG] [Thread-189769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:23:22.442 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:23:22.444 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:23:28.078 [DEBUG] [Thread-189770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:23:32.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:23:32.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:23:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:23:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 22, 57), 1.70723, 89.6692, 0.0, 11.6464, 13.0132, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:23:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:22:57
2026-04-12T13:23:33.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:23:33.856 [DEBUG] [Thread-189771] [transport.py] [_log()] starting thread (client mode): 0xae5163b0
2026-04-12T13:23:33.856 [DEBUG] [Thread-189771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:23:33.876 [DEBUG] [Thread-189771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:23:33.876 [INFO] [Thread-189771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] client lang: <none>
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] server lang: <none>
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] kex follows: False
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:23:33.879 [DEBUG] [Thread-189771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:23:33.880 [DEBUG] [Thread-189771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:23:33.880 [DEBUG] [Thread-189771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:23:33.880 [DEBUG] [Thread-189771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:23:33.880 [DEBUG] [Thread-189771] [transport.py] [_log()] Compression: none
2026-04-12T13:23:33.880 [DEBUG] [Thread-189771] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:23:33.898 [DEBUG] [Thread-189771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:23:33.898 [DEBUG] [Thread-189771] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:23:33.898 [DEBUG] [Thread-189771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:23:33.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:23:33.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:23:33.898 [DEBUG] [Thread-189771] [transport.py] [_log()] userauth is OK
2026-04-12T13:23:33.899 [DEBUG] [Thread-189771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:23:33.899 [DEBUG] [Thread-189771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:23:33.899 [DEBUG] [Thread-189771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:23:33.899 [DEBUG] [Thread-189771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:23:33.908 [INFO] [Thread-189771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:23:33.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:23:34.531 [DEBUG] [Thread-189771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:23:34.532 [DEBUG] [Thread-189771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:23:34.532 [DEBUG] [Thread-189771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:23:34.572 [DEBUG] [Thread-189771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:23:34.572 [DEBUG] [Thread-189771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:23:34.576 [DEBUG] [Thread-189771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:23:34.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:23:34.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:23:34.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:23:34.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:23:34.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:23:34.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:23:34.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:23:34.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:23:34.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:23:34.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.474413 -999.00  +12.90   9.48     82  +10.00 1 3 1 2 1   888    0 3.69 50.82 ----- 6.9 9.5 250.4 14.7 18.1 -9.3 17.6 -7.7 17.1 -6.7 17.6 -8.2
2026-04-12T13:23:34.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:23:34.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:23:34.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.474413
2026-04-12T13:23:34.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:23:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:23:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:23:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:23:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:23:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:22:57', tmtdew=1.70723, humidity=89.6692, cloud=0.0, wind=11.6464, temperature=13.0132, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:23:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:23:34.605 [DEBUG] [Thread-189771] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:23:34.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:23:34.702 [DEBUG] [Thread-189774] [transport.py] [_log()] starting thread (client mode): 0xae5b5270
2026-04-12T13:23:34.702 [DEBUG] [Thread-189774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:23:34.716 [DEBUG] [Thread-189774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:23:34.716 [INFO] [Thread-189774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:23:34.725 [DEBUG] [Thread-189774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:23:34.725 [DEBUG] [Thread-189774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:23:34.725 [DEBUG] [Thread-189774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:23:34.725 [DEBUG] [Thread-189774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] client lang: <none>
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] server lang: <none>
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] kex follows: False
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:23:34.726 [DEBUG] [Thread-189774] [transport.py] [_log()] Compression: none
2026-04-12T13:23:34.727 [DEBUG] [Thread-189774] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:23:34.782 [DEBUG] [Thread-189774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:23:34.782 [DEBUG] [Thread-189774] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:23:34.783 [DEBUG] [Thread-189774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:23:34.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:23:34.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:23:34.839 [DEBUG] [Thread-189774] [transport.py] [_log()] userauth is OK
2026-04-12T13:23:34.839 [DEBUG] [Thread-189774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:23:34.839 [DEBUG] [Thread-189774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:23:34.839 [DEBUG] [Thread-189774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:23:34.839 [DEBUG] [Thread-189774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:23:34.858 [INFO] [Thread-189774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:23:34.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:23:34.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:23:35.681 [DEBUG] [Thread-189774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:23:35.681 [DEBUG] [Thread-189774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:23:35.731 [DEBUG] [Thread-189774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:23:35.732 [DEBUG] [Thread-189774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:23:35.744 [DEBUG] [Thread-189774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:23:35.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:23:35.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:23: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') -> 00000000
2026-04-12T13:23:35.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:23:35.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:23:35.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:23:35.785 [DEBUG] [Thread-189774] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:23:36.335 [DEBUG] [Thread-189776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:23:43.113 [DEBUG] [Thread-189777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:23:58.159 [DEBUG] [Thread-189778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:24:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:24:05.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:24:05.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:24:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 23, 33), 3.47617, 79.4763, 0.0, 15.9502, 13.8264, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:24:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:23:33
2026-04-12T13:24:07.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:24:07.659 [DEBUG] [Thread-189779] [transport.py] [_log()] starting thread (client mode): 0xae5b4b80
2026-04-12T13:24:07.659 [DEBUG] [Thread-189779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:24:07.670 [DEBUG] [Thread-189779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:24:07.670 [INFO] [Thread-189779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:24:07.673 [DEBUG] [Thread-189779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:24:07.673 [DEBUG] [Thread-189779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:24:07.673 [DEBUG] [Thread-189779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:24:07.673 [DEBUG] [Thread-189779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:07.673 [DEBUG] [Thread-189779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:07.673 [DEBUG] [Thread-189779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:07.673 [DEBUG] [Thread-189779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] client lang: <none>
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] server lang: <none>
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] kex follows: False
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] Compression: none
2026-04-12T13:24:07.674 [DEBUG] [Thread-189779] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:24:07.682 [DEBUG] [Thread-189779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:24:07.682 [DEBUG] [Thread-189779] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:24:07.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:24:07.683 [DEBUG] [Thread-189779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:24:07.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:24:07.683 [DEBUG] [Thread-189779] [transport.py] [_log()] userauth is OK
2026-04-12T13:24:07.683 [DEBUG] [Thread-189779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:24:07.683 [DEBUG] [Thread-189779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:24:07.683 [DEBUG] [Thread-189779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:24:07.683 [DEBUG] [Thread-189779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:24:07.695 [INFO] [Thread-189779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:24:07.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:24:08.337 [DEBUG] [Thread-189779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:24:08.338 [DEBUG] [Thread-189779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:24:08.338 [DEBUG] [Thread-189779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:24:08.379 [DEBUG] [Thread-189779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:24:08.379 [DEBUG] [Thread-189779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:24:08.382 [DEBUG] [Thread-189779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:24:08.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:24:08.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:24:08.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:24:08.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:24:08.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:24:08.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:24:08.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:24:08.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:24:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:24:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.474760 -999.00  +12.90  14.64     83  +10.10 1 3 1 2 1   888    0 3.80 54.00 ----- 16.1 14.6 255.8 17.6 18.2 -8.8 17.6 -7.7 17.1 -6.9 17.6 -8.1
2026-04-12T13:24:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:24:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:24:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.474760
2026-04-12T13:24:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:24:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:24:08.402 [DEBUG] [Thread-189779] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:24:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:24:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:24:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:24:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:23:33', tmtdew=3.47617, humidity=79.4763, cloud=0.0, wind=15.9502, temperature=13.8264, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:23:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:24:08.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:24:08.495 [DEBUG] [Thread-189782] [transport.py] [_log()] starting thread (client mode): 0xa79687f0
2026-04-12T13:24:08.495 [DEBUG] [Thread-189782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:24:08.510 [DEBUG] [Thread-189782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:24:08.510 [INFO] [Thread-189782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:24:08.523 [DEBUG] [Thread-189782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:24:08.523 [DEBUG] [Thread-189782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:24:08.523 [DEBUG] [Thread-189782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:24:08.523 [DEBUG] [Thread-189782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] client lang: <none>
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] server lang: <none>
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] kex follows: False
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:24:08.524 [DEBUG] [Thread-189782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:24:08.525 [DEBUG] [Thread-189782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:24:08.525 [DEBUG] [Thread-189782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:24:08.525 [DEBUG] [Thread-189782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:24:08.525 [DEBUG] [Thread-189782] [transport.py] [_log()] Compression: none
2026-04-12T13:24:08.525 [DEBUG] [Thread-189782] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:24:08.578 [DEBUG] [Thread-189782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:24:08.578 [DEBUG] [Thread-189782] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:24:08.579 [DEBUG] [Thread-189782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:24:08.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:24:08.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:24:08.641 [DEBUG] [Thread-189782] [transport.py] [_log()] userauth is OK
2026-04-12T13:24:08.641 [DEBUG] [Thread-189782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:24:08.641 [DEBUG] [Thread-189782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:24:08.641 [DEBUG] [Thread-189782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:24:08.641 [DEBUG] [Thread-189782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:24:08.659 [INFO] [Thread-189782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:24:08.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:24:08.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:24:09.496 [DEBUG] [Thread-189782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:24:09.496 [DEBUG] [Thread-189782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:24:09.548 [DEBUG] [Thread-189782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:24:09.548 [DEBUG] [Thread-189782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:24:09.564 [DEBUG] [Thread-189782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:24:09.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:24:09.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:24:09.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:24:09.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:24:09.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:24:09.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:24:09.612 [DEBUG] [Thread-189782] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:24:13.195 [DEBUG] [Thread-189784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:24:22.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:24:22.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:24:28.246 [DEBUG] [Thread-189785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:24:36.383 [DEBUG] [Thread-189786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:24:39.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:24:39.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:24:39.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:24:40.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 24, 8), 1.82702, 89.0226, 0.0, 11.9815, 12.9969, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:24:40.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:24:08
2026-04-12T13:24:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:24:41.445 [DEBUG] [Thread-189787] [transport.py] [_log()] starting thread (client mode): 0xae514460
2026-04-12T13:24:41.446 [DEBUG] [Thread-189787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:24:41.465 [DEBUG] [Thread-189787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:24:41.465 [INFO] [Thread-189787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] client lang: <none>
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] server lang: <none>
2026-04-12T13:24:41.467 [DEBUG] [Thread-189787] [transport.py] [_log()] kex follows: False
2026-04-12T13:24:41.468 [DEBUG] [Thread-189787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:24:41.468 [DEBUG] [Thread-189787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:24:41.468 [DEBUG] [Thread-189787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:24:41.468 [DEBUG] [Thread-189787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:24:41.468 [DEBUG] [Thread-189787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:24:41.468 [DEBUG] [Thread-189787] [transport.py] [_log()] Compression: none
2026-04-12T13:24:41.468 [DEBUG] [Thread-189787] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:24:41.485 [DEBUG] [Thread-189787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:24:41.486 [DEBUG] [Thread-189787] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:24:41.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:24:41.487 [DEBUG] [Thread-189787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:24:41.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:24:41.489 [DEBUG] [Thread-189787] [transport.py] [_log()] userauth is OK
2026-04-12T13:24:41.490 [DEBUG] [Thread-189787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:24:41.490 [DEBUG] [Thread-189787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:24:41.490 [DEBUG] [Thread-189787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:24:41.490 [DEBUG] [Thread-189787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:24:41.511 [INFO] [Thread-189787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:24:41.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:24:42.148 [DEBUG] [Thread-189787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:24:42.149 [DEBUG] [Thread-189787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:24:42.149 [DEBUG] [Thread-189787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:24:42.189 [DEBUG] [Thread-189787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:24:42.189 [DEBUG] [Thread-189787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:24:42.193 [DEBUG] [Thread-189787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:24:42.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:24:42.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:24:42.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:24:42.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:24:42.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:24:42.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:24:42.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:24:42.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:24:42.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:24:42.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.475107 -999.00  +12.90   9.37     84  +10.40 1 3 1 2 1   888    0 3.91 57.69 ----- 9.9 9.4 253.6 12.8 18.2 -9.0 17.6 -7.9 17.1 -7.1 17.7 -7.6
2026-04-12T13:24:42.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:24:42.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:24:42.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.475107
2026-04-12T13:24:42.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:24:42.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:24:42.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:24:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:24:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:24:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:24:08', tmtdew=1.82702, humidity=89.0226, cloud=0.0, wind=11.9815, temperature=12.9969, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:24:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:24:42.222 [DEBUG] [Thread-189787] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:24:42.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:24:42.323 [DEBUG] [Thread-189790] [transport.py] [_log()] starting thread (client mode): 0xb39c7880
2026-04-12T13:24:42.323 [DEBUG] [Thread-189790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:24:42.346 [DEBUG] [Thread-189790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:24:42.346 [INFO] [Thread-189790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:24:42.354 [DEBUG] [Thread-189790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:24:42.354 [DEBUG] [Thread-189790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] client lang: <none>
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] server lang: <none>
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] kex follows: False
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:24:42.355 [DEBUG] [Thread-189790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:24:42.356 [DEBUG] [Thread-189790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:24:42.356 [DEBUG] [Thread-189790] [transport.py] [_log()] Compression: none
2026-04-12T13:24:42.356 [DEBUG] [Thread-189790] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:24:42.419 [DEBUG] [Thread-189790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:24:42.420 [DEBUG] [Thread-189790] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:24:42.420 [DEBUG] [Thread-189790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:24:42.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:24:42.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:24:42.478 [DEBUG] [Thread-189790] [transport.py] [_log()] userauth is OK
2026-04-12T13:24:42.479 [DEBUG] [Thread-189790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:24:42.479 [DEBUG] [Thread-189790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:24:42.479 [DEBUG] [Thread-189790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:24:42.479 [DEBUG] [Thread-189790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:24:42.500 [INFO] [Thread-189790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:24:42.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:24:42.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:24:43.284 [DEBUG] [Thread-189792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:24:43.324 [DEBUG] [Thread-189790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:24:43.324 [DEBUG] [Thread-189790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:24:43.372 [DEBUG] [Thread-189790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:24:43.372 [DEBUG] [Thread-189790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:24:43.381 [DEBUG] [Thread-189790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:24:43.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:24:43.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:24:43.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:24:43.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:24:43.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:24:43.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:24:43.419 [DEBUG] [Thread-189790] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:24:58.339 [DEBUG] [Thread-189793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:25:13.382 [DEBUG] [Thread-189794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:25:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:25:13.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:25:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:25:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 24, 43), 3.5236, 79.211, 0.0, 16.4441, 13.7269, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:25:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:24:43
2026-04-12T13:25:15.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:25:15.255 [DEBUG] [Thread-189795] [transport.py] [_log()] starting thread (client mode): 0xb0fb7790
2026-04-12T13:25:15.255 [DEBUG] [Thread-189795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:25:15.275 [DEBUG] [Thread-189795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:25:15.275 [INFO] [Thread-189795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:25:15.278 [DEBUG] [Thread-189795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] client lang: <none>
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] server lang: <none>
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] kex follows: False
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:25:15.279 [DEBUG] [Thread-189795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:25:15.280 [DEBUG] [Thread-189795] [transport.py] [_log()] Compression: none
2026-04-12T13:25:15.280 [DEBUG] [Thread-189795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:25:15.298 [DEBUG] [Thread-189795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:25:15.299 [DEBUG] [Thread-189795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:25:15.300 [DEBUG] [Thread-189795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:25:15.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:25:15.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:25:15.302 [DEBUG] [Thread-189795] [transport.py] [_log()] userauth is OK
2026-04-12T13:25:15.302 [DEBUG] [Thread-189795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:25:15.302 [DEBUG] [Thread-189795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:25:15.302 [DEBUG] [Thread-189795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:25:15.302 [DEBUG] [Thread-189795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:25:15.337 [INFO] [Thread-189795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:25:15.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:25:21.065 [DEBUG] [Thread-189795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:25:21.065 [DEBUG] [Thread-189795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:25:21.066 [DEBUG] [Thread-189795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:25:21.106 [DEBUG] [Thread-189795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:25:21.106 [DEBUG] [Thread-189795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:25:21.109 [DEBUG] [Thread-189795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:25:21.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:25:21.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:25:21.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:25:21.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:25:21.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:25:21.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:25:21.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:25:21.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:25:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:25:21.284 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T13:25:21.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:24:43', tmtdew=3.5236, humidity=79.211, cloud=0.0, wind=16.4441, temperature=13.7269, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:25:21.286 [DEBUG] [Thread-189795] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:25:21.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:25:21.382 [DEBUG] [Thread-189798] [transport.py] [_log()] starting thread (client mode): 0xb0feb190
2026-04-12T13:25:21.382 [DEBUG] [Thread-189798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:25:21.398 [DEBUG] [Thread-189798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:25:21.398 [INFO] [Thread-189798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:25:21.406 [DEBUG] [Thread-189798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:25:21.406 [DEBUG] [Thread-189798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:25:21.406 [DEBUG] [Thread-189798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:25:21.406 [DEBUG] [Thread-189798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:21.406 [DEBUG] [Thread-189798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:21.406 [DEBUG] [Thread-189798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:21.407 [DEBUG] [Thread-189798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:21.407 [DEBUG] [Thread-189798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:25:21.407 [DEBUG] [Thread-189798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:25:21.407 [DEBUG] [Thread-189798] [transport.py] [_log()] client lang: <none>
2026-04-12T13:25:21.407 [DEBUG] [Thread-189798] [transport.py] [_log()] server lang: <none>
2026-04-12T13:25:21.407 [DEBUG] [Thread-189798] [transport.py] [_log()] kex follows: False
2026-04-12T13:25:21.407 [DEBUG] [Thread-189798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:25:21.408 [DEBUG] [Thread-189798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:25:21.408 [DEBUG] [Thread-189798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:25:21.408 [DEBUG] [Thread-189798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:25:21.408 [DEBUG] [Thread-189798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:25:21.408 [DEBUG] [Thread-189798] [transport.py] [_log()] Compression: none
2026-04-12T13:25:21.408 [DEBUG] [Thread-189798] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:25:21.467 [DEBUG] [Thread-189798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:25:21.467 [DEBUG] [Thread-189798] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:25:21.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:25:21.468 [DEBUG] [Thread-189798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:25:21.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:25:21.522 [DEBUG] [Thread-189798] [transport.py] [_log()] userauth is OK
2026-04-12T13:25:21.522 [DEBUG] [Thread-189798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:25:21.523 [DEBUG] [Thread-189798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:25:21.523 [DEBUG] [Thread-189798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:25:21.523 [DEBUG] [Thread-189798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:25:21.542 [INFO] [Thread-189798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:25:21.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:25:21.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:25:22.360 [DEBUG] [Thread-189798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:25:22.360 [DEBUG] [Thread-189798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:25:22.409 [DEBUG] [Thread-189798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:25:22.409 [DEBUG] [Thread-189798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:25:22.419 [DEBUG] [Thread-189798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:25:22.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:25:22.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:25:22.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:25:22.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:25:22.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:25:22.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:25:22.458 [DEBUG] [Thread-189798] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:25:22.749 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:25:22.750 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:25:28.421 [DEBUG] [Thread-189800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:25:36.447 [DEBUG] [Thread-189801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:25:43.484 [DEBUG] [Thread-189802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:25:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:25:52.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:25:52.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:25:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 25, 19), 1.80554, 89.1387, 0.0, 12.74, 13.0635, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:25:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:25:19
2026-04-12T13:25:54.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:25:54.280 [DEBUG] [Thread-189803] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T13:25:54.280 [DEBUG] [Thread-189803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:25:54.298 [DEBUG] [Thread-189803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:25:54.298 [INFO] [Thread-189803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] client lang: <none>
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] server lang: <none>
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] kex follows: False
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] Compression: none
2026-04-12T13:25:54.301 [DEBUG] [Thread-189803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:25:54.319 [DEBUG] [Thread-189803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:25:54.320 [DEBUG] [Thread-189803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:25:54.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:25:54.320 [DEBUG] [Thread-189803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:25:54.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:25:54.323 [DEBUG] [Thread-189803] [transport.py] [_log()] userauth is OK
2026-04-12T13:25:54.323 [DEBUG] [Thread-189803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:25:54.324 [DEBUG] [Thread-189803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:25:54.324 [DEBUG] [Thread-189803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:25:54.324 [DEBUG] [Thread-189803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:25:54.348 [INFO] [Thread-189803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:25:54.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:25:54.957 [DEBUG] [Thread-189803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:25:54.957 [DEBUG] [Thread-189803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:25:54.958 [DEBUG] [Thread-189803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:25:54.998 [DEBUG] [Thread-189803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:25:54.998 [DEBUG] [Thread-189803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:25:55.001 [DEBUG] [Thread-189803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:25:55.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:25:55.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:25:55.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:25:55.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:25:55.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:25:55.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:25:55.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:25:55.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:25:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:25:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.476149 -999.00  +13.10  18.58     84  +10.50 1 3 1 2 1   888    0 3.85 54.54 ----- 16.4 18.6 259.2 21.6 18.3 -8.9 17.7 -8.4 17.2 -7.4 17.7 -8.5
2026-04-12T13:25:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:25:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:25:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.476149
2026-04-12T13:25:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:25:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:25:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:25:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:25:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:25:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:25:19', tmtdew=1.80554, humidity=89.1387, cloud=0.0, wind=12.74, temperature=13.0635, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:25:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:25:55.026 [DEBUG] [Thread-189803] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:25:55.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:25:55.120 [DEBUG] [Thread-189806] [transport.py] [_log()] starting thread (client mode): 0xb0f416c0
2026-04-12T13:25:55.120 [DEBUG] [Thread-189806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:25:55.134 [DEBUG] [Thread-189806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:25:55.134 [INFO] [Thread-189806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] client lang: <none>
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] server lang: <none>
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] kex follows: False
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:25:55.142 [DEBUG] [Thread-189806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:25:55.143 [DEBUG] [Thread-189806] [transport.py] [_log()] Compression: none
2026-04-12T13:25:55.143 [DEBUG] [Thread-189806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:25:55.198 [DEBUG] [Thread-189806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:25:55.199 [DEBUG] [Thread-189806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:25:55.200 [DEBUG] [Thread-189806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:25:55.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:25:55.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:25:55.258 [DEBUG] [Thread-189806] [transport.py] [_log()] userauth is OK
2026-04-12T13:25:55.259 [DEBUG] [Thread-189806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:25:55.259 [DEBUG] [Thread-189806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:25:55.259 [DEBUG] [Thread-189806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:25:55.259 [DEBUG] [Thread-189806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:25:55.287 [INFO] [Thread-189806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:25:55.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:25:55.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:25:56.118 [DEBUG] [Thread-189806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:25:56.118 [DEBUG] [Thread-189806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:25:56.166 [DEBUG] [Thread-189806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:25:56.166 [DEBUG] [Thread-189806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:25:56.175 [DEBUG] [Thread-189806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:25:56.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:25:56.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:25:56.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:25:56.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:25:56.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:25:56.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:25:56.222 [DEBUG] [Thread-189806] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:25:58.523 [DEBUG] [Thread-189808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:26:13.580 [DEBUG] [Thread-189809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:26:22.892 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:26:22.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:26:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:26:26.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:26:26.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
2026-04-12T13:26:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 25, 54), 3.43614, 79.6752, 0.0, 10.0584, 13.7269, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:26:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:25:54
2026-04-12T13:26:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:26:28.107 [DEBUG] [Thread-189810] [transport.py] [_log()] starting thread (client mode): 0xae52d240
2026-04-12T13:26:28.107 [DEBUG] [Thread-189810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:26:28.129 [DEBUG] [Thread-189810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:26:28.129 [INFO] [Thread-189810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:26:28.131 [DEBUG] [Thread-189810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:26:28.131 [DEBUG] [Thread-189810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:26:28.131 [DEBUG] [Thread-189810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:26:28.131 [DEBUG] [Thread-189810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:26:28.131 [DEBUG] [Thread-189810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:26:28.131 [DEBUG] [Thread-189810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:26:28.131 [DEBUG] [Thread-189810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] client lang: <none>
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] server lang: <none>
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] kex follows: False
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] Compression: none
2026-04-12T13:26:28.132 [DEBUG] [Thread-189810] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:26:28.140 [DEBUG] [Thread-189810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:26:28.140 [DEBUG] [Thread-189810] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:26:28.141 [DEBUG] [Thread-189810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:26:28.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:26:28.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:26:28.142 [DEBUG] [Thread-189810] [transport.py] [_log()] userauth is OK
2026-04-12T13:26:28.142 [DEBUG] [Thread-189810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:26:28.142 [DEBUG] [Thread-189810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:26:28.142 [DEBUG] [Thread-189810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:26:28.142 [DEBUG] [Thread-189810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:26:28.162 [INFO] [Thread-189810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:26:28.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:26:28.614 [DEBUG] [Thread-189812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:26:28.775 [DEBUG] [Thread-189810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:26:28.775 [DEBUG] [Thread-189810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:26:28.776 [DEBUG] [Thread-189810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:26:28.816 [DEBUG] [Thread-189810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:26:28.816 [DEBUG] [Thread-189810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:26:28.820 [DEBUG] [Thread-189810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:26:28.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:26:28.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:26:28.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:26:28.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:26:28.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:26:28.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:26:28.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:26:28.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:26:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:26:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.476496 -999.00  +13.10  13.80     85  +10.70 1 3 1 2 1   888    0 3.82 52.99 ----- 12.3 13.8 274.8 21.2 18.3 -9.1 17.7 -8.2 17.2 -7.3 17.7 -8.2
2026-04-12T13:26:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:26:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:26:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.476496
2026-04-12T13:26:28.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:26:28.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:26:28.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:26:28.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:26:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:26:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:25:54', tmtdew=3.43614, humidity=79.6752, cloud=0.0, wind=10.0584, temperature=13.7269, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:26:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:26:28.847 [DEBUG] [Thread-189810] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:26:28.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:26:28.938 [DEBUG] [Thread-189814] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T13:26:28.938 [DEBUG] [Thread-189814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:26:28.953 [DEBUG] [Thread-189814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:26:28.953 [INFO] [Thread-189814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:26:28.961 [DEBUG] [Thread-189814] [transport.py] [_log()] client lang: <none>
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] server lang: <none>
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] kex follows: False
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] Compression: none
2026-04-12T13:26:28.962 [DEBUG] [Thread-189814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:26:29.018 [DEBUG] [Thread-189814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:26:29.019 [DEBUG] [Thread-189814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:26:29.019 [DEBUG] [Thread-189814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:26:29.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:26:29.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:26:29.075 [DEBUG] [Thread-189814] [transport.py] [_log()] userauth is OK
2026-04-12T13:26:29.075 [DEBUG] [Thread-189814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:26:29.075 [DEBUG] [Thread-189814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:26:29.075 [DEBUG] [Thread-189814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:26:29.076 [DEBUG] [Thread-189814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:26:29.098 [INFO] [Thread-189814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:26:29.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:26:29.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:26:29.912 [DEBUG] [Thread-189814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:26:29.912 [DEBUG] [Thread-189814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:26:29.960 [DEBUG] [Thread-189814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:26:29.960 [DEBUG] [Thread-189814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:26:29.969 [DEBUG] [Thread-189814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:26:29.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:26: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')
2026-04-12T13:26:29.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:26:29.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:26:29.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:26:29.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:26:30.006 [DEBUG] [Thread-189814] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:26:36.492 [DEBUG] [Thread-189816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:26:43.651 [DEBUG] [Thread-189817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:26:58.721 [DEBUG] [Thread-189818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:27:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:27:00.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:27:00.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:27:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 26, 30), 1.63724, 89.7852, 0.0, 15.8638, 13.3295, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:27:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:26:30
2026-04-12T13:27:01.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:27:01.846 [DEBUG] [Thread-189819] [transport.py] [_log()] starting thread (client mode): 0xb39c6560
2026-04-12T13:27:01.846 [DEBUG] [Thread-189819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:27:01.868 [DEBUG] [Thread-189819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:27:01.868 [INFO] [Thread-189819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] client lang: <none>
2026-04-12T13:27:01.871 [DEBUG] [Thread-189819] [transport.py] [_log()] server lang: <none>
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] kex follows: False
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] Compression: none
2026-04-12T13:27:01.872 [DEBUG] [Thread-189819] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:27:01.888 [DEBUG] [Thread-189819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:27:01.889 [DEBUG] [Thread-189819] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:27:01.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:27:01.890 [DEBUG] [Thread-189819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:27:01.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:27:01.892 [DEBUG] [Thread-189819] [transport.py] [_log()] userauth is OK
2026-04-12T13:27:01.892 [DEBUG] [Thread-189819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:27:01.892 [DEBUG] [Thread-189819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:27:01.892 [DEBUG] [Thread-189819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:27:01.892 [DEBUG] [Thread-189819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:27:01.909 [INFO] [Thread-189819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:27:01.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:27:02.524 [DEBUG] [Thread-189819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:27:02.525 [DEBUG] [Thread-189819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:27:02.525 [DEBUG] [Thread-189819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:27:02.566 [DEBUG] [Thread-189819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:27:02.566 [DEBUG] [Thread-189819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:27:02.569 [DEBUG] [Thread-189819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:27:02.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:27:02.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:27:02.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:27:02.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:27:02.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:27:02.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:27:02.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:27:02.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:27:02.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:27:02.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.476843 -999.00  +13.00  18.22     83  +10.30 1 3 1 2 1   888    0 3.85 51.86 ----- 13.8 18.2 266.6 22.4 18.3 -9.6 17.7 -8.3 17.2 -7.6 17.7 -8.9
2026-04-12T13:27:02.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:27:02.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:27:02.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.476843
2026-04-12T13:27:02.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:27:02.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:27:02.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:27:02.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:27:02.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:27:02.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:26:30', tmtdew=1.63724, humidity=89.7852, cloud=0.0, wind=15.8638, temperature=13.3295, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:26:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:27:02.590 [DEBUG] [Thread-189819] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:27:02.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:27:02.683 [DEBUG] [Thread-189822] [transport.py] [_log()] starting thread (client mode): 0xae516b30
2026-04-12T13:27:02.683 [DEBUG] [Thread-189822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:27:02.697 [DEBUG] [Thread-189822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:27:02.698 [INFO] [Thread-189822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:27:02.705 [DEBUG] [Thread-189822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:27:02.705 [DEBUG] [Thread-189822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:27:02.705 [DEBUG] [Thread-189822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:27:02.705 [DEBUG] [Thread-189822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:02.705 [DEBUG] [Thread-189822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:02.705 [DEBUG] [Thread-189822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:02.705 [DEBUG] [Thread-189822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] client lang: <none>
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] server lang: <none>
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] kex follows: False
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] Compression: none
2026-04-12T13:27:02.706 [DEBUG] [Thread-189822] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:27:02.771 [DEBUG] [Thread-189822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:27:02.772 [DEBUG] [Thread-189822] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:27:02.772 [DEBUG] [Thread-189822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:27:02.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:27:02.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:27:02.831 [DEBUG] [Thread-189822] [transport.py] [_log()] userauth is OK
2026-04-12T13:27:02.831 [DEBUG] [Thread-189822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:27:02.831 [DEBUG] [Thread-189822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:27:02.831 [DEBUG] [Thread-189822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:27:02.832 [DEBUG] [Thread-189822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:27:02.850 [INFO] [Thread-189822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:27:02.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:27:02.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:27:03.682 [DEBUG] [Thread-189822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:27:03.683 [DEBUG] [Thread-189822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:27:03.731 [DEBUG] [Thread-189822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:27:03.731 [DEBUG] [Thread-189822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:27:03.740 [DEBUG] [Thread-189822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:27:03.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:27:03.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:27:03.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:27:03.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:27:03.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:27:03.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:27:03.775 [DEBUG] [Thread-189822] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:27:13.760 [DEBUG] [Thread-189824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:27:23.048 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:27:23.049 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:27:28.813 [DEBUG] [Thread-189825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:27:33.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:27:33.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:27:33.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:27:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 27, 5), 1.60839, 89.951, 0.0, 19.7093, 13.4124, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:27:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:27:05
2026-04-12T13:27:35.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:27:35.631 [DEBUG] [Thread-189826] [transport.py] [_log()] starting thread (client mode): 0xae52c100
2026-04-12T13:27:35.631 [DEBUG] [Thread-189826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:27:35.643 [DEBUG] [Thread-189826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:27:35.643 [INFO] [Thread-189826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] client lang: <none>
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] server lang: <none>
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] kex follows: False
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:27:35.646 [DEBUG] [Thread-189826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:27:35.647 [DEBUG] [Thread-189826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:27:35.647 [DEBUG] [Thread-189826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:27:35.647 [DEBUG] [Thread-189826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:27:35.647 [DEBUG] [Thread-189826] [transport.py] [_log()] Compression: none
2026-04-12T13:27:35.647 [DEBUG] [Thread-189826] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:27:35.660 [DEBUG] [Thread-189826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:27:35.660 [DEBUG] [Thread-189826] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:27:35.660 [DEBUG] [Thread-189826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:27:35.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:27:35.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:27:35.662 [DEBUG] [Thread-189826] [transport.py] [_log()] userauth is OK
2026-04-12T13:27:35.662 [DEBUG] [Thread-189826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:27:35.662 [DEBUG] [Thread-189826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:27:35.662 [DEBUG] [Thread-189826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:27:35.662 [DEBUG] [Thread-189826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:27:35.685 [INFO] [Thread-189826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:27:35.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:27:36.277 [DEBUG] [Thread-189826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:27:36.277 [DEBUG] [Thread-189826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:27:36.277 [DEBUG] [Thread-189826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:27:36.318 [DEBUG] [Thread-189826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:27:36.318 [DEBUG] [Thread-189826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:27:36.321 [DEBUG] [Thread-189826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:27:36.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:27:36.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:27:36.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:27:36.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:27:36.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:27:36.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:27:36.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:27:36.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:27:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:27:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.477191 -999.00  +13.10  10.50     85  +10.70 1 3 1 2 1   888    0 4.02 57.97 ----- 12.1 10.5 280.9 15.0 18.6 -7.6 17.9 -7.4 17.3 -6.4 17.9 -7.1
2026-04-12T13:27:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:27:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:27:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.477191
2026-04-12T13:27:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:27:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:27:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:27:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:27:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:27:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:27:05', tmtdew=1.60839, humidity=89.951, cloud=0.0, wind=19.7093, temperature=13.4124, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:27:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:27:36.348 [DEBUG] [Thread-189826] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:27:36.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:27:36.441 [DEBUG] [Thread-189829] [transport.py] [_log()] starting thread (client mode): 0xae52c070
2026-04-12T13:27:36.441 [DEBUG] [Thread-189829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:27:36.455 [DEBUG] [Thread-189829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:27:36.455 [INFO] [Thread-189829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:27:36.463 [DEBUG] [Thread-189829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:27:36.463 [DEBUG] [Thread-189829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:27:36.463 [DEBUG] [Thread-189829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:27:36.463 [DEBUG] [Thread-189829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:36.463 [DEBUG] [Thread-189829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:27:36.463 [DEBUG] [Thread-189829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:36.463 [DEBUG] [Thread-189829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] client lang: <none>
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] server lang: <none>
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] kex follows: False
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:27:36.464 [DEBUG] [Thread-189829] [transport.py] [_log()] Compression: none
2026-04-12T13:27:36.465 [DEBUG] [Thread-189829] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:27:36.522 [DEBUG] [Thread-189829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:27:36.523 [DEBUG] [Thread-189829] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:27:36.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:27:36.523 [DEBUG] [Thread-189829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:27:36.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:27:36.554 [DEBUG] [Thread-189831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:27:36.578 [DEBUG] [Thread-189829] [transport.py] [_log()] userauth is OK
2026-04-12T13:27:36.579 [DEBUG] [Thread-189829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:27:36.579 [DEBUG] [Thread-189829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:27:36.579 [DEBUG] [Thread-189829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:27:36.579 [DEBUG] [Thread-189829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:27:36.597 [INFO] [Thread-189829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:27:36.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:27:36.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:27:37.430 [DEBUG] [Thread-189829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:27:37.430 [DEBUG] [Thread-189829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:27:37.478 [DEBUG] [Thread-189829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:27:37.478 [DEBUG] [Thread-189829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:27:37.487 [DEBUG] [Thread-189829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:27:37.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:27:37.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:27:37.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:27:37.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:27:37.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:27:37.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:27:37.525 [DEBUG] [Thread-189829] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:27:43.853 [DEBUG] [Thread-189832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:27:58.905 [DEBUG] [Thread-189833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:28:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:28:07.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:28:07.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:28:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 27, 40), 3.20687, 80.9682, 0.0, 16.7969, 14.2242, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:28:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:27:40
2026-04-12T13:28:09.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:28:09.376 [DEBUG] [Thread-189834] [transport.py] [_log()] starting thread (client mode): 0xae52fd90
2026-04-12T13:28:09.376 [DEBUG] [Thread-189834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:28:09.397 [DEBUG] [Thread-189834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:28:09.397 [INFO] [Thread-189834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] client lang: <none>
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] server lang: <none>
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] kex follows: False
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] Compression: none
2026-04-12T13:28:09.398 [DEBUG] [Thread-189834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:28:09.411 [DEBUG] [Thread-189834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:28:09.411 [DEBUG] [Thread-189834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:28:09.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:28:09.412 [DEBUG] [Thread-189834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:28:09.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:28:09.413 [DEBUG] [Thread-189834] [transport.py] [_log()] userauth is OK
2026-04-12T13:28:09.413 [DEBUG] [Thread-189834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:28:09.413 [DEBUG] [Thread-189834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:28:09.413 [DEBUG] [Thread-189834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:28:09.413 [DEBUG] [Thread-189834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:28:09.426 [INFO] [Thread-189834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:28:09.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:28:10.068 [DEBUG] [Thread-189834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:28:10.068 [DEBUG] [Thread-189834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:28:10.068 [DEBUG] [Thread-189834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:28:10.109 [DEBUG] [Thread-189834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:28:10.109 [DEBUG] [Thread-189834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:28:10.113 [DEBUG] [Thread-189834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:28:10.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:28:10.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:28:10.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:28:10.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:28:10.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:28:10.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:28:10.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:28:10.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:28:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:28:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.477538 -999.00  +13.20  11.89     84  +10.60 1 3 1 2 1   888    0 3.93 54.34 ----- 12.9 11.9 282.0 17.2 18.7 -8.6 17.9 -7.7 17.5 -7.4 18.2 -7.1
2026-04-12T13:28:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:28:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:28:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.477538
2026-04-12T13:28:10.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:28:10.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:28:10.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:28:10.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:28:10.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:28:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:27:40', tmtdew=3.20687, humidity=80.9682, cloud=0.0, wind=16.7969, temperature=14.2242, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:27:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:28:10.139 [DEBUG] [Thread-189834] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:28:10.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:28:10.232 [DEBUG] [Thread-189837] [transport.py] [_log()] starting thread (client mode): 0xb39c7d30
2026-04-12T13:28:10.233 [DEBUG] [Thread-189837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:28:10.248 [DEBUG] [Thread-189837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:28:10.248 [INFO] [Thread-189837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] client lang: <none>
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] server lang: <none>
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] kex follows: False
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:28:10.256 [DEBUG] [Thread-189837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:28:10.257 [DEBUG] [Thread-189837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:28:10.257 [DEBUG] [Thread-189837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:28:10.257 [DEBUG] [Thread-189837] [transport.py] [_log()] Compression: none
2026-04-12T13:28:10.257 [DEBUG] [Thread-189837] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:28:10.316 [DEBUG] [Thread-189837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:28:10.316 [DEBUG] [Thread-189837] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:28:10.317 [DEBUG] [Thread-189837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:28:10.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:28:10.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:28:10.374 [DEBUG] [Thread-189837] [transport.py] [_log()] userauth is OK
2026-04-12T13:28:10.375 [DEBUG] [Thread-189837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:28:10.375 [DEBUG] [Thread-189837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:28:10.375 [DEBUG] [Thread-189837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:28:10.375 [DEBUG] [Thread-189837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:28:10.393 [INFO] [Thread-189837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:28:10.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:28:10.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:28:11.219 [DEBUG] [Thread-189837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:28:11.219 [DEBUG] [Thread-189837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:28:11.267 [DEBUG] [Thread-189837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:28:11.267 [DEBUG] [Thread-189837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:28:11.276 [DEBUG] [Thread-189837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:28:11.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:28: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')
2026-04-12T13:28:11.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:28:11.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:28:11.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:28:11.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:28:11.314 [DEBUG] [Thread-189837] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:28:13.945 [DEBUG] [Thread-189839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:28:23.204 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:28:23.205 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:28:28.996 [DEBUG] [Thread-189840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:28:36.607 [DEBUG] [Thread-189841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:28:41.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:28:41.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:28:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:28:42.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 28, 16), 1.75978, 89.4205, 0.0, 16.4452, 13.3953, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:28:42.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:28:16
2026-04-12T13:28:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:28:43.186 [DEBUG] [Thread-189842] [transport.py] [_log()] starting thread (client mode): 0xb0f41cc0
2026-04-12T13:28:43.186 [DEBUG] [Thread-189842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:28:43.207 [DEBUG] [Thread-189842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:28:43.207 [INFO] [Thread-189842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:28:43.210 [DEBUG] [Thread-189842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:28:43.210 [DEBUG] [Thread-189842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] client lang: <none>
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] server lang: <none>
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] kex follows: False
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:28:43.211 [DEBUG] [Thread-189842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:28:43.212 [DEBUG] [Thread-189842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:28:43.212 [DEBUG] [Thread-189842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:28:43.212 [DEBUG] [Thread-189842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:28:43.212 [DEBUG] [Thread-189842] [transport.py] [_log()] Compression: none
2026-04-12T13:28:43.212 [DEBUG] [Thread-189842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:28:43.231 [DEBUG] [Thread-189842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:28:43.232 [DEBUG] [Thread-189842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:28:43.233 [DEBUG] [Thread-189842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:28:43.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:28:43.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:28:43.235 [DEBUG] [Thread-189842] [transport.py] [_log()] userauth is OK
2026-04-12T13:28:43.235 [DEBUG] [Thread-189842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:28:43.235 [DEBUG] [Thread-189842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:28:43.235 [DEBUG] [Thread-189842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:28:43.235 [DEBUG] [Thread-189842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:28:43.259 [INFO] [Thread-189842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:28:43.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:28:43.877 [DEBUG] [Thread-189842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:28:43.877 [DEBUG] [Thread-189842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:28:43.877 [DEBUG] [Thread-189842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:28:43.918 [DEBUG] [Thread-189842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:28:43.918 [DEBUG] [Thread-189842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:28:43.922 [DEBUG] [Thread-189842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:28:43.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:28:43.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:28:43.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:28:43.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:28:43.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:28:43.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:28:43.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:28:43.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:28:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:28:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.477885 -999.00  +13.10  14.70     83  +10.30 1 3 1 2 1   888    0 3.96 54.96 ----- 14.1 14.7 281.8 19.5 18.8 -8.8 18.1 -8.3 17.4 -9.9 18.4 -7.1
2026-04-12T13:28:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:28:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:28:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.477885
2026-04-12T13:28:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:28:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:28:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:28:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:28:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:28:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:28:16', tmtdew=1.75978, humidity=89.4205, cloud=0.0, wind=16.4452, temperature=13.3953, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:28:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:28:43.951 [DEBUG] [Thread-189842] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:28:44.033 [DEBUG] [Thread-189845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:28:44.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:28:44.043 [DEBUG] [Thread-189846] [transport.py] [_log()] starting thread (client mode): 0xb0f56ce0
2026-04-12T13:28:44.044 [DEBUG] [Thread-189846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:28:44.058 [DEBUG] [Thread-189846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:28:44.058 [INFO] [Thread-189846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:28:44.065 [DEBUG] [Thread-189846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:28:44.065 [DEBUG] [Thread-189846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:28:44.065 [DEBUG] [Thread-189846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:28:44.065 [DEBUG] [Thread-189846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] client lang: <none>
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] server lang: <none>
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] kex follows: False
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] Compression: none
2026-04-12T13:28:44.066 [DEBUG] [Thread-189846] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:28:44.126 [DEBUG] [Thread-189846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:28:44.127 [DEBUG] [Thread-189846] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:28:44.127 [DEBUG] [Thread-189846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:28:44.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:28:44.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:28:44.181 [DEBUG] [Thread-189846] [transport.py] [_log()] userauth is OK
2026-04-12T13:28:44.182 [DEBUG] [Thread-189846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:28:44.182 [DEBUG] [Thread-189846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:28:44.182 [DEBUG] [Thread-189846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:28:44.182 [DEBUG] [Thread-189846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:28:44.200 [INFO] [Thread-189846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:28:44.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:28:44.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:28:45.035 [DEBUG] [Thread-189846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:28:45.035 [DEBUG] [Thread-189846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:28:45.083 [DEBUG] [Thread-189846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:28:45.084 [DEBUG] [Thread-189846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:28:45.093 [DEBUG] [Thread-189846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:28:45.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:28:45.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:28: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') -> 00000000
2026-04-12T13:28:45.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:28:45.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:28:45.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:28:45.131 [DEBUG] [Thread-189846] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:28:59.077 [DEBUG] [Thread-189848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:29:14.120 [DEBUG] [Thread-189849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:29:15.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:29:15.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:29: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
2026-04-12T13:29:16.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 28, 51), 3.53697, 79.1778, 0.0, 16.6205, 13.9921, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:29:16.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:28:51
2026-04-12T13:29:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:29:16.969 [DEBUG] [Thread-189850] [transport.py] [_log()] starting thread (client mode): 0xae5171f0
2026-04-12T13:29:16.970 [DEBUG] [Thread-189850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:29:16.989 [DEBUG] [Thread-189850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:29:16.989 [INFO] [Thread-189850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] client lang: <none>
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] server lang: <none>
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] kex follows: False
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] Compression: none
2026-04-12T13:29:16.992 [DEBUG] [Thread-189850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:29:17.009 [DEBUG] [Thread-189850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:29:17.010 [DEBUG] [Thread-189850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:29:17.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:29:17.011 [DEBUG] [Thread-189850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:29:17.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:29:17.013 [DEBUG] [Thread-189850] [transport.py] [_log()] userauth is OK
2026-04-12T13:29:17.013 [DEBUG] [Thread-189850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:29:17.013 [DEBUG] [Thread-189850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:29:17.013 [DEBUG] [Thread-189850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:29:17.013 [DEBUG] [Thread-189850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:29:17.049 [INFO] [Thread-189850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:29:17.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:29:17.692 [DEBUG] [Thread-189850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:29:17.692 [DEBUG] [Thread-189850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:29:17.692 [DEBUG] [Thread-189850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:29:17.735 [DEBUG] [Thread-189850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:29:17.735 [DEBUG] [Thread-189850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:29:17.737 [DEBUG] [Thread-189850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:29:17.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:29:17.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:29:17.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:29:17.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:29:17.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:29:17.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:29:17.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:29:17.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.478580 -999.00  +13.20  12.69     84  +10.70 1 3 1 2 1   888    0 3.88 52.10 ----- 11.6 12.7 267.2 19.5 18.9 -9.7 18.1 -9.0 17.7 -7.5 18.5 -9.1
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.478580
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:29:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:28:51', tmtdew=3.53697, humidity=79.1778, cloud=0.0, wind=16.6205, temperature=13.9921, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:29:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:29:17.758 [DEBUG] [Thread-189850] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:29:17.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:29:17.852 [DEBUG] [Thread-189853] [transport.py] [_log()] starting thread (client mode): 0xb0f40760
2026-04-12T13:29:17.852 [DEBUG] [Thread-189853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:29:17.868 [DEBUG] [Thread-189853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:29:17.868 [INFO] [Thread-189853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:29:17.877 [DEBUG] [Thread-189853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:29:17.877 [DEBUG] [Thread-189853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:29:17.877 [DEBUG] [Thread-189853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:29:17.877 [DEBUG] [Thread-189853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:17.877 [DEBUG] [Thread-189853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:17.877 [DEBUG] [Thread-189853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:17.877 [DEBUG] [Thread-189853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] client lang: <none>
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] server lang: <none>
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] kex follows: False
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:29:17.878 [DEBUG] [Thread-189853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:29:17.879 [DEBUG] [Thread-189853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:29:17.879 [DEBUG] [Thread-189853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:29:17.879 [DEBUG] [Thread-189853] [transport.py] [_log()] Compression: none
2026-04-12T13:29:17.879 [DEBUG] [Thread-189853] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:29:17.933 [DEBUG] [Thread-189853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:29:17.933 [DEBUG] [Thread-189853] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:29:17.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:29:17.934 [DEBUG] [Thread-189853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:29:17.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:29:17.989 [DEBUG] [Thread-189853] [transport.py] [_log()] userauth is OK
2026-04-12T13:29:17.990 [DEBUG] [Thread-189853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:29:17.990 [DEBUG] [Thread-189853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:29:17.990 [DEBUG] [Thread-189853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:29:17.990 [DEBUG] [Thread-189853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:29:18.009 [INFO] [Thread-189853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:29:18.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:29:18.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:29:18.815 [DEBUG] [Thread-189853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:29:18.815 [DEBUG] [Thread-189853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:29:18.863 [DEBUG] [Thread-189853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:29:18.863 [DEBUG] [Thread-189853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:29:18.872 [DEBUG] [Thread-189853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:29:18.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:29:18.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:29:18.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:29:18.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:29:18.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:29:18.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:29:18.908 [DEBUG] [Thread-189853] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:29:23.357 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:29:23.359 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:29:29.157 [DEBUG] [Thread-189855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:29:36.657 [DEBUG] [Thread-189856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:29:44.212 [DEBUG] [Thread-189857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:29:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:29:48.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:29:48.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:29:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 29, 26), 1.73895, 89.5199, 0.0, 13.1112, 13.4123, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:29:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:29:26
2026-04-12T13:29:50.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:29:50.810 [DEBUG] [Thread-189858] [transport.py] [_log()] starting thread (client mode): 0xa796a3e0
2026-04-12T13:29:50.810 [DEBUG] [Thread-189858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:29:50.829 [DEBUG] [Thread-189858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:29:50.829 [INFO] [Thread-189858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:29:50.832 [DEBUG] [Thread-189858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:29:50.832 [DEBUG] [Thread-189858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:29:50.832 [DEBUG] [Thread-189858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:29:50.832 [DEBUG] [Thread-189858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:50.832 [DEBUG] [Thread-189858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:50.832 [DEBUG] [Thread-189858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] client lang: <none>
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] server lang: <none>
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] kex follows: False
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] Compression: none
2026-04-12T13:29:50.833 [DEBUG] [Thread-189858] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:29:50.852 [DEBUG] [Thread-189858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:29:50.852 [DEBUG] [Thread-189858] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:29:50.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:29:50.853 [DEBUG] [Thread-189858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:29:50.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:29:50.854 [DEBUG] [Thread-189858] [transport.py] [_log()] userauth is OK
2026-04-12T13:29:50.854 [DEBUG] [Thread-189858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:29:50.855 [DEBUG] [Thread-189858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:29:50.855 [DEBUG] [Thread-189858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:29:50.855 [DEBUG] [Thread-189858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:29:50.877 [INFO] [Thread-189858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:29:50.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:29:51.502 [DEBUG] [Thread-189858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:29:51.503 [DEBUG] [Thread-189858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:29:51.503 [DEBUG] [Thread-189858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:29:51.543 [DEBUG] [Thread-189858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:29:51.543 [DEBUG] [Thread-189858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:29:51.547 [DEBUG] [Thread-189858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:29:51.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:29:51.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:29:51.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:29:51.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:29:51.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:29:51.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:29:51.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:29:51.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:29:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:29:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.478927 -999.00  +13.30  16.59     83  +10.60 1 3 1 2 1   888    0 3.90 51.51 ----- 14.5 16.6 266.6 20.2 19.0 -10.7 18.2 -9.5 17.8 -7.8 18.6 -10.2
2026-04-12T13:29:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:29:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:29:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.478927
2026-04-12T13:29:51.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:29:51.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:29:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:29:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:29:51.575 [DEBUG] [Thread-189858] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:29:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:29:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:29:26', tmtdew=1.73895, humidity=89.5199, cloud=0.0, wind=13.1112, temperature=13.4123, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:29:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:29:51.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:29:51.666 [DEBUG] [Thread-189861] [transport.py] [_log()] starting thread (client mode): 0xa7969c60
2026-04-12T13:29:51.666 [DEBUG] [Thread-189861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:29:51.680 [DEBUG] [Thread-189861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:29:51.680 [INFO] [Thread-189861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] client lang: <none>
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] server lang: <none>
2026-04-12T13:29:51.688 [DEBUG] [Thread-189861] [transport.py] [_log()] kex follows: False
2026-04-12T13:29:51.689 [DEBUG] [Thread-189861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:29:51.689 [DEBUG] [Thread-189861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:29:51.689 [DEBUG] [Thread-189861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:29:51.689 [DEBUG] [Thread-189861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:29:51.689 [DEBUG] [Thread-189861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:29:51.689 [DEBUG] [Thread-189861] [transport.py] [_log()] Compression: none
2026-04-12T13:29:51.689 [DEBUG] [Thread-189861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:29:51.746 [DEBUG] [Thread-189861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:29:51.747 [DEBUG] [Thread-189861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:29:51.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:29:51.748 [DEBUG] [Thread-189861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:29:51.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:29:51.802 [DEBUG] [Thread-189861] [transport.py] [_log()] userauth is OK
2026-04-12T13:29:51.802 [DEBUG] [Thread-189861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:29:51.802 [DEBUG] [Thread-189861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:29:51.802 [DEBUG] [Thread-189861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:29:51.802 [DEBUG] [Thread-189861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:29:51.821 [INFO] [Thread-189861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:29:51.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:29:51.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:29:52.650 [DEBUG] [Thread-189861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:29:52.651 [DEBUG] [Thread-189861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:29:52.697 [DEBUG] [Thread-189861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:29:52.698 [DEBUG] [Thread-189861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:29:52.707 [DEBUG] [Thread-189861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:29:52.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:29:52.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:29:52.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:29:52.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:29:52.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:29:52.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:29:52.743 [DEBUG] [Thread-189861] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:29:59.252 [DEBUG] [Thread-189863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:30:14.305 [DEBUG] [Thread-189864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:30:22.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:30:22.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:30:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:30:23.516 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:30:23.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:30:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 30, 2), 1.77325, 89.3376, 0.0, 13.711, 13.4123, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:30:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:30:02
2026-04-12T13:30:24.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:30:24.601 [DEBUG] [Thread-189865] [transport.py] [_log()] starting thread (client mode): 0xae5b5630
2026-04-12T13:30:24.601 [DEBUG] [Thread-189865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:30:24.622 [DEBUG] [Thread-189865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:30:24.623 [INFO] [Thread-189865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] client lang: <none>
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] server lang: <none>
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] kex follows: False
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] Compression: none
2026-04-12T13:30:24.626 [DEBUG] [Thread-189865] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:30:24.653 [DEBUG] [Thread-189865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:30:24.653 [DEBUG] [Thread-189865] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:30:24.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:30:24.655 [DEBUG] [Thread-189865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:30:24.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:30:24.657 [DEBUG] [Thread-189865] [transport.py] [_log()] userauth is OK
2026-04-12T13:30:24.657 [DEBUG] [Thread-189865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:30:24.657 [DEBUG] [Thread-189865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:30:24.657 [DEBUG] [Thread-189865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:30:24.657 [DEBUG] [Thread-189865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:30:24.682 [INFO] [Thread-189865] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:30:24.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:30:29.342 [DEBUG] [Thread-189867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:30:30.510 [DEBUG] [Thread-189865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:30:30.511 [DEBUG] [Thread-189865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:30:30.511 [DEBUG] [Thread-189865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:30:30.552 [DEBUG] [Thread-189865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:30:30.552 [DEBUG] [Thread-189865] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:30:30.556 [DEBUG] [Thread-189865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:30:30.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:30:30.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:30:30.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:30:30.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:30:30.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:30:30.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:30:30.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:30:30.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:30:30.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:30:30.633 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T13:30:30.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:30:02', tmtdew=1.77325, humidity=89.3376, cloud=0.0, wind=13.711, temperature=13.4123, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:30:30.637 [DEBUG] [Thread-189865] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:30:30.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:30:30.718 [DEBUG] [Thread-189869] [transport.py] [_log()] starting thread (client mode): 0xb0fcd4b0
2026-04-12T13:30:30.718 [DEBUG] [Thread-189869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:30:30.733 [DEBUG] [Thread-189869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:30:30.734 [INFO] [Thread-189869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:30:30.741 [DEBUG] [Thread-189869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:30:30.742 [DEBUG] [Thread-189869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] client lang: <none>
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] server lang: <none>
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] kex follows: False
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:30:30.743 [DEBUG] [Thread-189869] [transport.py] [_log()] Compression: none
2026-04-12T13:30:30.744 [DEBUG] [Thread-189869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:30:30.804 [DEBUG] [Thread-189869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:30:30.804 [DEBUG] [Thread-189869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:30:30.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:30:30.806 [DEBUG] [Thread-189869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:30:30.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:30:30.862 [DEBUG] [Thread-189869] [transport.py] [_log()] userauth is OK
2026-04-12T13:30:30.863 [DEBUG] [Thread-189869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:30:30.863 [DEBUG] [Thread-189869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:30:30.863 [DEBUG] [Thread-189869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:30:30.863 [DEBUG] [Thread-189869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:30:30.882 [INFO] [Thread-189869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:30:30.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:30:30.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:30:31.721 [DEBUG] [Thread-189869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:30:31.721 [DEBUG] [Thread-189869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:30:31.769 [DEBUG] [Thread-189869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:30:31.769 [DEBUG] [Thread-189869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:30:31.778 [DEBUG] [Thread-189869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:30:31.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:30:31.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:30:31.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:30:31.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:30:31.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:30:31.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:30:31.812 [DEBUG] [Thread-189869] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:30:36.714 [DEBUG] [Thread-189871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:30:44.377 [DEBUG] [Thread-189872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:30:59.432 [DEBUG] [Thread-189873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:31:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:31:01.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:31:01.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:31:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 30, 39), 3.30045, 80.4709, 0.0, 14.8565, 14.2573, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:31:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:30:39
2026-04-12T13:31:03.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:31:03.640 [DEBUG] [Thread-189874] [transport.py] [_log()] starting thread (client mode): 0xb0f402e0
2026-04-12T13:31:03.640 [DEBUG] [Thread-189874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:31:03.660 [DEBUG] [Thread-189874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:31:03.660 [INFO] [Thread-189874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] client lang: <none>
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] server lang: <none>
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] kex follows: False
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:31:03.663 [DEBUG] [Thread-189874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:31:03.664 [DEBUG] [Thread-189874] [transport.py] [_log()] Compression: none
2026-04-12T13:31:03.664 [DEBUG] [Thread-189874] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:31:03.681 [DEBUG] [Thread-189874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:31:03.681 [DEBUG] [Thread-189874] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:31:03.682 [DEBUG] [Thread-189874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:31:03.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:31:03.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:31:03.684 [DEBUG] [Thread-189874] [transport.py] [_log()] userauth is OK
2026-04-12T13:31:03.684 [DEBUG] [Thread-189874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:31:03.684 [DEBUG] [Thread-189874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:31:03.684 [DEBUG] [Thread-189874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:31:03.684 [DEBUG] [Thread-189874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:31:03.703 [INFO] [Thread-189874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:31:03.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:31:04.343 [DEBUG] [Thread-189874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:31:04.343 [DEBUG] [Thread-189874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:31:04.344 [DEBUG] [Thread-189874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:31:04.384 [DEBUG] [Thread-189874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:31:04.384 [DEBUG] [Thread-189874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:31:04.387 [DEBUG] [Thread-189874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:31:04.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:31:04.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:31:04.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:31:04.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:31:04.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:31:04.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:31:04.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:31:04.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:31:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:31:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.479621 -999.00  +13.40  10.23     83  +10.70 1 3 1 2 1   888    0 3.82 49.46 ----- 11.4 10.2 255.8 18.6 19.0 -10.7 18.2 -9.7 17.8 -8.8 18.5 -10.3
2026-04-12T13:31:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:31:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:31:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.479621
2026-04-12T13:31:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:31:04.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:31:04.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:31:04.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:31:04.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:31:04.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:30:39', tmtdew=3.30045, humidity=80.4709, cloud=0.0, wind=14.8565, temperature=14.2573, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:30:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:31:04.413 [DEBUG] [Thread-189874] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:31:04.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:31:04.502 [DEBUG] [Thread-189877] [transport.py] [_log()] starting thread (client mode): 0xae5b7e50
2026-04-12T13:31:04.502 [DEBUG] [Thread-189877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:31:04.516 [DEBUG] [Thread-189877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:31:04.516 [INFO] [Thread-189877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] client lang: <none>
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] server lang: <none>
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] kex follows: False
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] Compression: none
2026-04-12T13:31:04.524 [DEBUG] [Thread-189877] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:31:04.582 [DEBUG] [Thread-189877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:31:04.583 [DEBUG] [Thread-189877] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:31:04.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:31:04.584 [DEBUG] [Thread-189877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:31:04.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:31:04.642 [DEBUG] [Thread-189877] [transport.py] [_log()] userauth is OK
2026-04-12T13:31:04.642 [DEBUG] [Thread-189877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:31:04.642 [DEBUG] [Thread-189877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:31:04.642 [DEBUG] [Thread-189877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:31:04.643 [DEBUG] [Thread-189877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:31:04.667 [INFO] [Thread-189877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:31:04.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:31:04.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:31:05.476 [DEBUG] [Thread-189877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:31:05.477 [DEBUG] [Thread-189877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:31:05.525 [DEBUG] [Thread-189877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:31:05.525 [DEBUG] [Thread-189877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:31:05.534 [DEBUG] [Thread-189877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:31:05.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:31: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')
2026-04-12T13:31:05.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:31:05.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:31:05.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:31:05.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:31:05.572 [DEBUG] [Thread-189877] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:31:14.468 [DEBUG] [Thread-189879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:31:23.671 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:31:23.672 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:31:29.531 [DEBUG] [Thread-189880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:31:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:31:35.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:31:35.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:31:36.771 [DEBUG] [Thread-189881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:31:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 31, 15), 1.84594, 88.9559, 0.0, 16.0218, 13.3787, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:31:36.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:31:15
2026-04-12T13:31:37.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:31:37.388 [DEBUG] [Thread-189882] [transport.py] [_log()] starting thread (client mode): 0xae5b79a0
2026-04-12T13:31:37.389 [DEBUG] [Thread-189882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:31:37.408 [DEBUG] [Thread-189882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:31:37.409 [INFO] [Thread-189882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] client lang: <none>
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] server lang: <none>
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] kex follows: False
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:31:37.412 [DEBUG] [Thread-189882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:31:37.413 [DEBUG] [Thread-189882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:31:37.413 [DEBUG] [Thread-189882] [transport.py] [_log()] Compression: none
2026-04-12T13:31:37.413 [DEBUG] [Thread-189882] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:31:37.429 [DEBUG] [Thread-189882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:31:37.430 [DEBUG] [Thread-189882] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:31:37.430 [DEBUG] [Thread-189882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:31:37.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:31:37.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:31:37.433 [DEBUG] [Thread-189882] [transport.py] [_log()] userauth is OK
2026-04-12T13:31:37.433 [DEBUG] [Thread-189882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:31:37.433 [DEBUG] [Thread-189882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:31:37.433 [DEBUG] [Thread-189882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:31:37.433 [DEBUG] [Thread-189882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:31:37.452 [INFO] [Thread-189882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:31:37.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:31:38.044 [DEBUG] [Thread-189882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:31:38.044 [DEBUG] [Thread-189882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:31:38.045 [DEBUG] [Thread-189882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:31:38.086 [DEBUG] [Thread-189882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:31:38.086 [DEBUG] [Thread-189882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:31:38.089 [DEBUG] [Thread-189882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:31:38.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:31:38.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:31:38.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:31:38.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:31:38.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:31:38.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:31:38.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:31:38.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:31:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:31:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.479968 -999.00  +13.30  12.38     83  +10.40 1 3 1 2 1   888    0 3.89 49.86 ----- 11.5 12.4 249.0 16.4 18.9 -11.6 18.2 -9.6 17.9 -8.6 18.5 -10.5
2026-04-12T13:31:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:31:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:31:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.479968
2026-04-12T13:31:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:31:38.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:31:38.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:31:38.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:31:38.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:31:38.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:31:15', tmtdew=1.84594, humidity=88.9559, cloud=0.0, wind=16.0218, temperature=13.3787, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:31:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:31:38.111 [DEBUG] [Thread-189882] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:31:38.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:31:38.202 [DEBUG] [Thread-189885] [transport.py] [_log()] starting thread (client mode): 0xae5147c0
2026-04-12T13:31:38.202 [DEBUG] [Thread-189885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:31:38.217 [DEBUG] [Thread-189885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:31:38.217 [INFO] [Thread-189885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] client lang: <none>
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] server lang: <none>
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] kex follows: False
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:31:38.225 [DEBUG] [Thread-189885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:31:38.226 [DEBUG] [Thread-189885] [transport.py] [_log()] Compression: none
2026-04-12T13:31:38.226 [DEBUG] [Thread-189885] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:31:38.282 [DEBUG] [Thread-189885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:31:38.282 [DEBUG] [Thread-189885] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:31:38.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:31:38.283 [DEBUG] [Thread-189885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:31:38.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:31:38.338 [DEBUG] [Thread-189885] [transport.py] [_log()] userauth is OK
2026-04-12T13:31:38.338 [DEBUG] [Thread-189885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:31:38.339 [DEBUG] [Thread-189885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:31:38.339 [DEBUG] [Thread-189885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:31:38.339 [DEBUG] [Thread-189885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:31:38.357 [INFO] [Thread-189885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:31:38.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:31:38.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:31:39.154 [DEBUG] [Thread-189885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:31:39.154 [DEBUG] [Thread-189885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:31:39.202 [DEBUG] [Thread-189885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:31:39.202 [DEBUG] [Thread-189885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:31:39.212 [DEBUG] [Thread-189885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:31:39.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:31:39.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:31:39.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:31:39.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:31:39.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:31:39.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:31:39.251 [DEBUG] [Thread-189885] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:31:44.569 [DEBUG] [Thread-189887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:31:59.618 [DEBUG] [Thread-189888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:32:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:32:09.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:32:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:32:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 31, 50), 3.51375, 79.3097, 0.0, 17.185, 14.0578, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:32:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:31:50
2026-04-12T13:32:10.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:32:11.057 [DEBUG] [Thread-189889] [transport.py] [_log()] starting thread (client mode): 0xae515240
2026-04-12T13:32:11.057 [DEBUG] [Thread-189889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:32:11.081 [DEBUG] [Thread-189889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:32:11.081 [INFO] [Thread-189889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] client lang: <none>
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] server lang: <none>
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] kex follows: False
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] Compression: none
2026-04-12T13:32:11.082 [DEBUG] [Thread-189889] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:32:11.093 [DEBUG] [Thread-189889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:32:11.094 [DEBUG] [Thread-189889] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:32:11.094 [DEBUG] [Thread-189889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:32:11.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:32:11.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:32:11.096 [DEBUG] [Thread-189889] [transport.py] [_log()] userauth is OK
2026-04-12T13:32:11.097 [DEBUG] [Thread-189889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:32:11.097 [DEBUG] [Thread-189889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:32:11.097 [DEBUG] [Thread-189889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:32:11.097 [DEBUG] [Thread-189889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:32:11.122 [INFO] [Thread-189889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:32:11.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:32:11.719 [DEBUG] [Thread-189889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:32:11.719 [DEBUG] [Thread-189889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:32:11.720 [DEBUG] [Thread-189889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:32:11.760 [DEBUG] [Thread-189889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:32:11.760 [DEBUG] [Thread-189889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:32:11.762 [DEBUG] [Thread-189889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:32:11.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:32:11.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:32:11.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:32:11.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:32:11.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:32:11.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:32:11.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:32:11.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:32:11.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:32:11.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.480316 -999.00  +13.30  15.04     84  +10.70 1 3 1 2 1   888    0 3.81 48.29 ----- 13.5 15.0 264.8 18.6 19.0 -10.7 18.2 -10.1 17.9 -8.6 18.6 -11.3
2026-04-12T13:32:11.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:32:11.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:32:11.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.480316
2026-04-12T13:32:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:32:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:32:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:32:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:32:11.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:32:11.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:31:50', tmtdew=3.51375, humidity=79.3097, cloud=0.0, wind=17.185, temperature=14.0578, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:31:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:32:11.783 [DEBUG] [Thread-189889] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:32:11.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:32:11.876 [DEBUG] [Thread-189892] [transport.py] [_log()] starting thread (client mode): 0xb0fccee0
2026-04-12T13:32:11.876 [DEBUG] [Thread-189892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:32:11.891 [DEBUG] [Thread-189892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:32:11.891 [INFO] [Thread-189892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:32:11.898 [DEBUG] [Thread-189892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] client lang: <none>
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] server lang: <none>
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] kex follows: False
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] Compression: none
2026-04-12T13:32:11.899 [DEBUG] [Thread-189892] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:32:11.958 [DEBUG] [Thread-189892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:32:11.959 [DEBUG] [Thread-189892] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:32:11.959 [DEBUG] [Thread-189892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:32:11.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:32:11.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:32:12.014 [DEBUG] [Thread-189892] [transport.py] [_log()] userauth is OK
2026-04-12T13:32:12.014 [DEBUG] [Thread-189892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:32:12.015 [DEBUG] [Thread-189892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:32:12.015 [DEBUG] [Thread-189892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:32:12.015 [DEBUG] [Thread-189892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:32:12.034 [INFO] [Thread-189892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:32:12.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:32:12.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:32:12.857 [DEBUG] [Thread-189892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:32:12.857 [DEBUG] [Thread-189892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:32:12.905 [DEBUG] [Thread-189892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:32:12.905 [DEBUG] [Thread-189892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:32:12.915 [DEBUG] [Thread-189892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:32:12.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:32:12.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:32: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') -> 00000000
2026-04-12T13:32:12.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:32:12.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:32:12.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:32:12.952 [DEBUG] [Thread-189892] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:32:14.659 [DEBUG] [Thread-189894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:32:23.826 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:32:23.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:32:29.708 [DEBUG] [Thread-189895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:32:36.804 [DEBUG] [Thread-189896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:32:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:32:42.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:32:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:32:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 32, 25), 1.71394, 89.6688, 0.0, 14.981, 13.5282, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:32:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:32:25
2026-04-12T13:32:44.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:32:44.737 [DEBUG] [Thread-189897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:32:44.755 [DEBUG] [Thread-189898] [transport.py] [_log()] starting thread (client mode): 0xb39c7eb0
2026-04-12T13:32:44.755 [DEBUG] [Thread-189898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:32:44.770 [DEBUG] [Thread-189898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:32:44.770 [INFO] [Thread-189898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] client lang: <none>
2026-04-12T13:32:44.771 [DEBUG] [Thread-189898] [transport.py] [_log()] server lang: <none>
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] kex follows: False
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] Compression: none
2026-04-12T13:32:44.772 [DEBUG] [Thread-189898] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:32:44.780 [DEBUG] [Thread-189898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:32:44.781 [DEBUG] [Thread-189898] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:32:44.781 [DEBUG] [Thread-189898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:32:44.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:32:44.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:32:44.783 [DEBUG] [Thread-189898] [transport.py] [_log()] userauth is OK
2026-04-12T13:32:44.783 [DEBUG] [Thread-189898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:32:44.783 [DEBUG] [Thread-189898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:32:44.783 [DEBUG] [Thread-189898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:32:44.783 [DEBUG] [Thread-189898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:32:44.802 [INFO] [Thread-189898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:32:44.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:32:45.406 [DEBUG] [Thread-189898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:32:45.406 [DEBUG] [Thread-189898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:32:45.406 [DEBUG] [Thread-189898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:32:45.447 [DEBUG] [Thread-189898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:32:45.447 [DEBUG] [Thread-189898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:32:45.449 [DEBUG] [Thread-189898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:32:45.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:32:45.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:32:45.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:32:45.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:32:45.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:32:45.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:32:45.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:32:45.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:32:45.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:32:45.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.481010 -999.00  +13.40  17.07     83  +10.50 1 3 1 2 1   888    0 3.86 48.88 ----- 17.1 17.1 254.4 19.6 19.2 -11.3 18.4 -9.8 18.0 -8.3 18.7 -10.3
2026-04-12T13:32:45.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:32:45.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:32:45.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.481010
2026-04-12T13:32:45.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:32:45.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:32:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:32:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:32:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:32:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:32:25', tmtdew=1.71394, humidity=89.6688, cloud=0.0, wind=14.981, temperature=13.5282, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:32:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:32:45.474 [DEBUG] [Thread-189898] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:32:45.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:32:45.567 [DEBUG] [Thread-189901] [transport.py] [_log()] starting thread (client mode): 0xb0f41c30
2026-04-12T13:32:45.568 [DEBUG] [Thread-189901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:32:45.582 [DEBUG] [Thread-189901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:32:45.582 [INFO] [Thread-189901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:32:45.589 [DEBUG] [Thread-189901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:32:45.589 [DEBUG] [Thread-189901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:32:45.589 [DEBUG] [Thread-189901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:32:45.589 [DEBUG] [Thread-189901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:45.589 [DEBUG] [Thread-189901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] client lang: <none>
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] server lang: <none>
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] kex follows: False
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] Compression: none
2026-04-12T13:32:45.590 [DEBUG] [Thread-189901] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:32:45.648 [DEBUG] [Thread-189901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:32:45.649 [DEBUG] [Thread-189901] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:32:45.649 [DEBUG] [Thread-189901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:32:45.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:32:45.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:32:45.709 [DEBUG] [Thread-189901] [transport.py] [_log()] userauth is OK
2026-04-12T13:32:45.709 [DEBUG] [Thread-189901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:32:45.709 [DEBUG] [Thread-189901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:32:45.709 [DEBUG] [Thread-189901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:32:45.709 [DEBUG] [Thread-189901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:32:45.732 [INFO] [Thread-189901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:32:45.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:32:45.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:32:46.555 [DEBUG] [Thread-189901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:32:46.556 [DEBUG] [Thread-189901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:32:46.604 [DEBUG] [Thread-189901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:32:46.604 [DEBUG] [Thread-189901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:32:46.613 [DEBUG] [Thread-189901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:32:46.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:32:46.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:32:46.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:32:46.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:32:46.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:32:46.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:32:46.651 [DEBUG] [Thread-189901] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:32:59.773 [DEBUG] [Thread-189903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:33:14.832 [DEBUG] [Thread-189904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:33:16.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:33:16.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:33:16.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:33:17.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 33, 1), 1.69426, 89.7849, 0.0, 15.4397, 13.6111, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:33:17.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:33:01
2026-04-12T13:33:18.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:33:18.520 [DEBUG] [Thread-189905] [transport.py] [_log()] starting thread (client mode): 0xae5b7e20
2026-04-12T13:33:18.520 [DEBUG] [Thread-189905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:33:18.540 [DEBUG] [Thread-189905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:33:18.540 [INFO] [Thread-189905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] client lang: <none>
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] server lang: <none>
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] kex follows: False
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] Compression: none
2026-04-12T13:33:18.543 [DEBUG] [Thread-189905] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:33:18.552 [DEBUG] [Thread-189905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:33:18.552 [DEBUG] [Thread-189905] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:33:18.552 [DEBUG] [Thread-189905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:33:18.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:33:18.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:33:18.554 [DEBUG] [Thread-189905] [transport.py] [_log()] userauth is OK
2026-04-12T13:33:18.554 [DEBUG] [Thread-189905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:33:18.554 [DEBUG] [Thread-189905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:33:18.555 [DEBUG] [Thread-189905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:33:18.555 [DEBUG] [Thread-189905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:33:18.572 [INFO] [Thread-189905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:33:18.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:33:19.168 [DEBUG] [Thread-189905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:33:19.168 [DEBUG] [Thread-189905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:33:19.169 [DEBUG] [Thread-189905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:33:19.209 [DEBUG] [Thread-189905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:33:19.210 [DEBUG] [Thread-189905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:33:19.214 [DEBUG] [Thread-189905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:33:19.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:33:19.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:33:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:33:19.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:33:19.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:33:19.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:33:19.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:33:19.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:33:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:33:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.481357 -999.00  +13.30  11.56     84  +10.80 1 3 1 2 1   888    0 3.81 47.93 ----- 13.6 11.6 276.6 16.7 19.3 -10.7 18.5 -9.2 18.2 -7.5 18.9 -8.8
2026-04-12T13:33:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:33:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:33:19.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.481357
2026-04-12T13:33:19.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:33:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:33:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:33:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:33:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:33:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:33:01', tmtdew=1.69426, humidity=89.7849, cloud=0.0, wind=15.4397, temperature=13.6111, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:33:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:33:19.241 [DEBUG] [Thread-189905] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:33:19.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:33:19.336 [DEBUG] [Thread-189908] [transport.py] [_log()] starting thread (client mode): 0xae515e10
2026-04-12T13:33:19.336 [DEBUG] [Thread-189908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:33:19.355 [DEBUG] [Thread-189908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:33:19.356 [INFO] [Thread-189908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:33:19.363 [DEBUG] [Thread-189908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:33:19.364 [DEBUG] [Thread-189908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:33:19.364 [DEBUG] [Thread-189908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:33:19.364 [DEBUG] [Thread-189908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:19.364 [DEBUG] [Thread-189908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:19.364 [DEBUG] [Thread-189908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:19.364 [DEBUG] [Thread-189908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] client lang: <none>
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] server lang: <none>
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] kex follows: False
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] Compression: none
2026-04-12T13:33:19.365 [DEBUG] [Thread-189908] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:33:19.422 [DEBUG] [Thread-189908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:33:19.422 [DEBUG] [Thread-189908] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:33:19.423 [DEBUG] [Thread-189908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:33:19.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:33:19.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:33:19.478 [DEBUG] [Thread-189908] [transport.py] [_log()] userauth is OK
2026-04-12T13:33:19.478 [DEBUG] [Thread-189908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:33:19.478 [DEBUG] [Thread-189908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:33:19.478 [DEBUG] [Thread-189908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:33:19.479 [DEBUG] [Thread-189908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:33:19.497 [INFO] [Thread-189908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:33:19.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:33:19.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:33:20.337 [DEBUG] [Thread-189908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:33:20.337 [DEBUG] [Thread-189908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:33:20.385 [DEBUG] [Thread-189908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:33:20.385 [DEBUG] [Thread-189908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:33:20.394 [DEBUG] [Thread-189908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:33:20.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:33:20.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:33:20.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:33:20.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:33:20.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:33:20.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:33:20.432 [DEBUG] [Thread-189908] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:33:23.968 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:33:23.969 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:33:29.868 [DEBUG] [Thread-189910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:33:36.846 [DEBUG] [Thread-189911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:33:44.922 [DEBUG] [Thread-189912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:33:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:33:50.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:33:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:33:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 33, 36), 3.59464, 78.9445, 0.0, 18.9842, 14.4885, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:33:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:33:36
2026-04-12T13:33:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:33:52.220 [DEBUG] [Thread-189913] [transport.py] [_log()] starting thread (client mode): 0xa7968ee0
2026-04-12T13:33:52.221 [DEBUG] [Thread-189913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:33:52.240 [DEBUG] [Thread-189913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:33:52.240 [INFO] [Thread-189913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:33:52.243 [DEBUG] [Thread-189913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:33:52.243 [DEBUG] [Thread-189913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] client lang: <none>
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] server lang: <none>
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] kex follows: False
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] Compression: none
2026-04-12T13:33:52.244 [DEBUG] [Thread-189913] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:33:52.262 [DEBUG] [Thread-189913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:33:52.262 [DEBUG] [Thread-189913] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:33:52.263 [DEBUG] [Thread-189913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:33:52.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:33:52.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:33:52.264 [DEBUG] [Thread-189913] [transport.py] [_log()] userauth is OK
2026-04-12T13:33:52.265 [DEBUG] [Thread-189913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:33:52.265 [DEBUG] [Thread-189913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:33:52.265 [DEBUG] [Thread-189913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:33:52.265 [DEBUG] [Thread-189913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:33:52.288 [INFO] [Thread-189913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:33:52.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:33:52.904 [DEBUG] [Thread-189913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:33:52.904 [DEBUG] [Thread-189913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:33:52.904 [DEBUG] [Thread-189913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:33:52.945 [DEBUG] [Thread-189913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:33:52.945 [DEBUG] [Thread-189913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:33:52.949 [DEBUG] [Thread-189913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:33:52.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:33:52.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:33:52.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:33:52.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:33:52.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:33:52.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:33:52.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:33:52.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:33:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:33:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.481704 -999.00  +13.60  13.72     85  +11.10 1 3 1 2 1   888    0 3.79 45.78 ----- 12.3 13.7 278.4 17.1 19.4 -9.6 18.6 -9.1 18.1 -9.7 19.1 -8.6
2026-04-12T13:33:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:33:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:33:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.481704
2026-04-12T13:33:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:33:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:33:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:33:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:33:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:33:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:33:36', tmtdew=3.59464, humidity=78.9445, cloud=0.0, wind=18.9842, temperature=14.4885, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:33:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:33:52.977 [DEBUG] [Thread-189913] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:33:53.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:33:53.081 [DEBUG] [Thread-189916] [transport.py] [_log()] starting thread (client mode): 0xb0f42b90
2026-04-12T13:33:53.081 [DEBUG] [Thread-189916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:33:53.095 [DEBUG] [Thread-189916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:33:53.095 [INFO] [Thread-189916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:33:53.103 [DEBUG] [Thread-189916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] client lang: <none>
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] server lang: <none>
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] kex follows: False
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] Compression: none
2026-04-12T13:33:53.104 [DEBUG] [Thread-189916] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:33:53.161 [DEBUG] [Thread-189916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:33:53.162 [DEBUG] [Thread-189916] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:33:53.162 [DEBUG] [Thread-189916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:33:53.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:33:53.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:33:53.217 [DEBUG] [Thread-189916] [transport.py] [_log()] userauth is OK
2026-04-12T13:33:53.218 [DEBUG] [Thread-189916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:33:53.218 [DEBUG] [Thread-189916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:33:53.218 [DEBUG] [Thread-189916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:33:53.218 [DEBUG] [Thread-189916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:33:53.236 [INFO] [Thread-189916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:33:53.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:33:53.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:33:54.069 [DEBUG] [Thread-189916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:33:54.069 [DEBUG] [Thread-189916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:33:54.117 [DEBUG] [Thread-189916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:33:54.117 [DEBUG] [Thread-189916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:33:54.127 [DEBUG] [Thread-189916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:33:54.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:33:54.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:33:54.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:33:54.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:33:54.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:33:54.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:33:54.164 [DEBUG] [Thread-189916] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:33:59.961 [DEBUG] [Thread-189918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:34:15.023 [DEBUG] [Thread-189919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:34:24.120 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:34:24.122 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:34:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:34:24.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:34:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:34:25.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 34, 12), 1.7916, 89.2541, 0.0, 15.9152, 13.5614, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:34:25.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:34:12
2026-04-12T13:34:25.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:34:25.950 [DEBUG] [Thread-189920] [transport.py] [_log()] starting thread (client mode): 0xb0f40cd0
2026-04-12T13:34:25.951 [DEBUG] [Thread-189920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:34:25.966 [DEBUG] [Thread-189920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:34:25.966 [INFO] [Thread-189920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:34:25.969 [DEBUG] [Thread-189920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] client lang: <none>
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] server lang: <none>
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] kex follows: False
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] Compression: none
2026-04-12T13:34:25.970 [DEBUG] [Thread-189920] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:34:25.992 [DEBUG] [Thread-189920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:34:25.993 [DEBUG] [Thread-189920] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:34:25.994 [DEBUG] [Thread-189920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:34:25.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:34:25.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:34:25.997 [DEBUG] [Thread-189920] [transport.py] [_log()] userauth is OK
2026-04-12T13:34:25.997 [DEBUG] [Thread-189920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:34:25.997 [DEBUG] [Thread-189920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:34:25.997 [DEBUG] [Thread-189920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:34:25.998 [DEBUG] [Thread-189920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:34:26.033 [INFO] [Thread-189920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:34:26.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:34:26.668 [DEBUG] [Thread-189920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:34:26.668 [DEBUG] [Thread-189920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:34:26.669 [DEBUG] [Thread-189920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:34:26.709 [DEBUG] [Thread-189920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:34:26.709 [DEBUG] [Thread-189920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:34:26.713 [DEBUG] [Thread-189920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:34:26.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:34:26.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:34:26.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:34:26.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:34:26.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:34:26.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:34:26.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:34:26.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:34:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:34:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.482052 -999.00  +13.80  14.44     84  +11.30 1 3 1 2 1   888    0 3.74 43.88 ----- 15.2 14.4 271.4 16.7 19.5 -10.5 18.7 -9.8 18.2 -9.4 19.2 -9.2
2026-04-12T13:34:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:34:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:34:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.482052
2026-04-12T13:34:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:34:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:34:26.739 [DEBUG] [Thread-189920] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:34:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:34:26.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:34:26.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:34:26.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:34:12', tmtdew=1.7916, humidity=89.2541, cloud=0.0, wind=15.9152, temperature=13.5614, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:34:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:34:26.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:34:26.830 [DEBUG] [Thread-189923] [transport.py] [_log()] starting thread (client mode): 0xb0fb6860
2026-04-12T13:34:26.830 [DEBUG] [Thread-189923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:34:26.852 [DEBUG] [Thread-189923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:34:26.852 [INFO] [Thread-189923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:34:26.865 [DEBUG] [Thread-189923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:34:26.866 [DEBUG] [Thread-189923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:34:26.866 [DEBUG] [Thread-189923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:34:26.866 [DEBUG] [Thread-189923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:34:26.866 [DEBUG] [Thread-189923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:34:26.866 [DEBUG] [Thread-189923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:34:26.866 [DEBUG] [Thread-189923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] client lang: <none>
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] server lang: <none>
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] kex follows: False
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] Compression: none
2026-04-12T13:34:26.867 [DEBUG] [Thread-189923] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:34:26.924 [DEBUG] [Thread-189923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:34:26.925 [DEBUG] [Thread-189923] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:34:26.925 [DEBUG] [Thread-189923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:34:26.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:34:26.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:34:26.986 [DEBUG] [Thread-189923] [transport.py] [_log()] userauth is OK
2026-04-12T13:34:26.986 [DEBUG] [Thread-189923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:34:26.986 [DEBUG] [Thread-189923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:34:26.986 [DEBUG] [Thread-189923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:34:26.986 [DEBUG] [Thread-189923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:34:27.008 [INFO] [Thread-189923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:34:27.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:34:27.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:34:27.847 [DEBUG] [Thread-189923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:34:27.847 [DEBUG] [Thread-189923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:34:27.900 [DEBUG] [Thread-189923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:34:27.900 [DEBUG] [Thread-189923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:34:27.914 [DEBUG] [Thread-189923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:34:27.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:34:27.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:34:27.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:34:27.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:34:27.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:34:27.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:34:27.961 [DEBUG] [Thread-189923] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:34:30.062 [DEBUG] [Thread-189925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:34:36.880 [DEBUG] [Thread-189926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:34:45.118 [DEBUG] [Thread-189927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:34:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:34:57.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:34:57.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:34:59.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 34, 47), 3.48769, 79.4753, 0.0, 19.7957, 14.2566, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:34:59.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:34:47
2026-04-12T13:34:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:34:59.764 [DEBUG] [Thread-189928] [transport.py] [_log()] starting thread (client mode): 0xb0fcc070
2026-04-12T13:34:59.764 [DEBUG] [Thread-189928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:34:59.788 [DEBUG] [Thread-189928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:34:59.788 [INFO] [Thread-189928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:34:59.792 [DEBUG] [Thread-189928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:34:59.792 [DEBUG] [Thread-189928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:34:59.792 [DEBUG] [Thread-189928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] client lang: <none>
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] server lang: <none>
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] kex follows: False
2026-04-12T13:34:59.793 [DEBUG] [Thread-189928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:34:59.794 [DEBUG] [Thread-189928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:34:59.794 [DEBUG] [Thread-189928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:34:59.794 [DEBUG] [Thread-189928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:34:59.794 [DEBUG] [Thread-189928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:34:59.794 [DEBUG] [Thread-189928] [transport.py] [_log()] Compression: none
2026-04-12T13:34:59.794 [DEBUG] [Thread-189928] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:34:59.814 [DEBUG] [Thread-189928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:34:59.815 [DEBUG] [Thread-189928] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:34:59.815 [DEBUG] [Thread-189928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:34:59.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:34:59.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:34:59.817 [DEBUG] [Thread-189928] [transport.py] [_log()] userauth is OK
2026-04-12T13:34:59.817 [DEBUG] [Thread-189928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:34:59.817 [DEBUG] [Thread-189928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:34:59.818 [DEBUG] [Thread-189928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:34:59.818 [DEBUG] [Thread-189928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:34:59.841 [INFO] [Thread-189928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:34:59.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:35:00.154 [DEBUG] [Thread-189930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:35:00.455 [DEBUG] [Thread-189928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:35:00.456 [DEBUG] [Thread-189928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:35:00.456 [DEBUG] [Thread-189928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:35:00.497 [DEBUG] [Thread-189928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:35:00.497 [DEBUG] [Thread-189928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:35:00.499 [DEBUG] [Thread-189928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:35:00.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:35:00.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:35:00.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:35:00.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:35:00.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:35:00.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:35:00.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:35:00.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:35:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:35:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.482399 -999.00  +13.90  16.50     84  +11.30 1 3 1 2 1   888    0 3.59 39.34 ----- 19.2 16.5 286.6 21.5 19.6 -10.9 18.7 -9.8 18.3 -9.6 19.2 -10.2
2026-04-12T13:35:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:35:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:35:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.482399
2026-04-12T13:35:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:35:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:35:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:35:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:35:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:35:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:34:47', tmtdew=3.48769, humidity=79.4753, cloud=0.0, wind=19.7957, temperature=14.2566, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:34:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:35:00.521 [DEBUG] [Thread-189928] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:35:00.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:35:15.191 [DEBUG] [Thread-189932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:35:24.278 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:35:24.280 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:35:30.250 [DEBUG] [Thread-189933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:35:36.914 [DEBUG] [Thread-189934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:35:45.291 [DEBUG] [Thread-189935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:36:00.328 [DEBUG] [Thread-189936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:36:15.365 [DEBUG] [Thread-189937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:36:24.440 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:36:24.442 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:36:30.401 [DEBUG] [Thread-189938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:36:36.947 [DEBUG] [Thread-189939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:36:45.439 [DEBUG] [Thread-189940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:00.472 [DEBUG] [Thread-189941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:15.135 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T13:37:15.507 [DEBUG] [Thread-189942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:24.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:24.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:30.546 [DEBUG] [Thread-189943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:36.981 [DEBUG] [Thread-189944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:37:45.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:37:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:37:45.582 [DEBUG] [Thread-189945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:37:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 37, 9), 1.81678, 89.1211, 0.0, 14.3813, 13.6611, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:37:46.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:37:09
2026-04-12T13:37:46.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:37:47.032 [DEBUG] [Thread-189946] [transport.py] [_log()] starting thread (client mode): 0xae5b5630
2026-04-12T13:37:47.032 [DEBUG] [Thread-189946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:37:47.052 [DEBUG] [Thread-189946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:37:47.052 [INFO] [Thread-189946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:37:47.055 [DEBUG] [Thread-189946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:37:47.055 [DEBUG] [Thread-189946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] client lang: <none>
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] server lang: <none>
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] kex follows: False
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] Compression: none
2026-04-12T13:37:47.056 [DEBUG] [Thread-189946] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:37:47.074 [DEBUG] [Thread-189946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:37:47.074 [DEBUG] [Thread-189946] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:37:47.075 [DEBUG] [Thread-189946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:37:47.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:37:47.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:37:47.077 [DEBUG] [Thread-189946] [transport.py] [_log()] userauth is OK
2026-04-12T13:37:47.077 [DEBUG] [Thread-189946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:37:47.077 [DEBUG] [Thread-189946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:37:47.077 [DEBUG] [Thread-189946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:37:47.077 [DEBUG] [Thread-189946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:37:47.095 [INFO] [Thread-189946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:37:47.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:37:47.878 [DEBUG] [Thread-189946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:37:47.878 [DEBUG] [Thread-189946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:37:47.878 [DEBUG] [Thread-189946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:37:47.920 [DEBUG] [Thread-189946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:37:47.920 [DEBUG] [Thread-189946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:37:47.922 [DEBUG] [Thread-189946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:37:47.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:37:47.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:37:47.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:37:47.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:37:47.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:37:47.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:37:47.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:37:47.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:37:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:37:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.484135 -999.00  +13.70  11.25     82  +10.80 1 2 1 2 1   888    0 3.76 41.80 ----- 14.8 11.2 268.4 18.4 19.9 -13.1 18.9 -10.7 18.5 -12.3 19.8 -11.0
2026-04-12T13:37:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:37:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:37:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.484135
2026-04-12T13:37:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:37:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:37:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:37:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:37:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:37:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:37:09', tmtdew=1.81678, humidity=89.1211, cloud=0.0, wind=14.3813, temperature=13.6611, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:37:09.264', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:37:47.947 [DEBUG] [Thread-189946] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:37:48.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:37:48.045 [DEBUG] [Thread-189949] [transport.py] [_log()] starting thread (client mode): 0xb0fcf280
2026-04-12T13:37:48.045 [DEBUG] [Thread-189949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:37:48.061 [DEBUG] [Thread-189949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:37:48.062 [INFO] [Thread-189949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:37:48.069 [DEBUG] [Thread-189949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:37:48.069 [DEBUG] [Thread-189949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:37:48.069 [DEBUG] [Thread-189949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:37:48.069 [DEBUG] [Thread-189949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:37:48.069 [DEBUG] [Thread-189949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] client lang: <none>
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] server lang: <none>
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] kex follows: False
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:37:48.070 [DEBUG] [Thread-189949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:37:48.071 [DEBUG] [Thread-189949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:37:48.071 [DEBUG] [Thread-189949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:37:48.071 [DEBUG] [Thread-189949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:37:48.071 [DEBUG] [Thread-189949] [transport.py] [_log()] Compression: none
2026-04-12T13:37:48.071 [DEBUG] [Thread-189949] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:37:48.133 [DEBUG] [Thread-189949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:37:48.134 [DEBUG] [Thread-189949] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:37:48.134 [DEBUG] [Thread-189949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:37:48.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:37:48.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:37:48.190 [DEBUG] [Thread-189949] [transport.py] [_log()] userauth is OK
2026-04-12T13:37:48.191 [DEBUG] [Thread-189949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:37:48.191 [DEBUG] [Thread-189949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:37:48.191 [DEBUG] [Thread-189949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:37:48.191 [DEBUG] [Thread-189949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:37:48.214 [INFO] [Thread-189949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:37:48.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:37:48.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:37:49.085 [DEBUG] [Thread-189949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:37:49.085 [DEBUG] [Thread-189949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:37:49.133 [DEBUG] [Thread-189949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:37:49.133 [DEBUG] [Thread-189949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:37:49.143 [DEBUG] [Thread-189949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:37:49.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:37:49.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:37:49.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:37:49.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:37:49.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:37:49.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:37:49.181 [DEBUG] [Thread-189949] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:38:00.616 [DEBUG] [Thread-189951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:38:15.659 [DEBUG] [Thread-189952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:38:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:38:19.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:38:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:38:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 37, 45), 3.47058, 79.607, 0.0, 12.0694, 14.5543, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:38:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:37:45
2026-04-12T13:38:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:38:21.028 [DEBUG] [Thread-189953] [transport.py] [_log()] starting thread (client mode): 0xb0fb7220
2026-04-12T13:38:21.028 [DEBUG] [Thread-189953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:38:21.049 [DEBUG] [Thread-189953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:38:21.049 [INFO] [Thread-189953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:38:21.052 [DEBUG] [Thread-189953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] client lang: <none>
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] server lang: <none>
2026-04-12T13:38:21.053 [DEBUG] [Thread-189953] [transport.py] [_log()] kex follows: False
2026-04-12T13:38:21.054 [DEBUG] [Thread-189953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:38:21.054 [DEBUG] [Thread-189953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:38:21.054 [DEBUG] [Thread-189953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:38:21.054 [DEBUG] [Thread-189953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:38:21.054 [DEBUG] [Thread-189953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:38:21.054 [DEBUG] [Thread-189953] [transport.py] [_log()] Compression: none
2026-04-12T13:38:21.054 [DEBUG] [Thread-189953] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:38:21.072 [DEBUG] [Thread-189953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:38:21.073 [DEBUG] [Thread-189953] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:38:21.073 [DEBUG] [Thread-189953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:38:21.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:38:21.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:38:21.076 [DEBUG] [Thread-189953] [transport.py] [_log()] userauth is OK
2026-04-12T13:38:21.076 [DEBUG] [Thread-189953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:38:21.076 [DEBUG] [Thread-189953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:38:21.076 [DEBUG] [Thread-189953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:38:21.077 [DEBUG] [Thread-189953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:38:21.098 [INFO] [Thread-189953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:38:21.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:38:21.888 [DEBUG] [Thread-189953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:38:21.888 [DEBUG] [Thread-189953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:38:21.889 [DEBUG] [Thread-189953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:38:21.929 [DEBUG] [Thread-189953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:38:21.929 [DEBUG] [Thread-189953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:38:21.933 [DEBUG] [Thread-189953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:38:21.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:38:21.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:38:21.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:38:21.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:38:21.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:38:21.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:38:21.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:38:21.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:38:21.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:38:21.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.484482 -999.00  +13.70  14.58     84  +11.10 1 2 1 2 1   888    0 3.79 41.97 ----- 11.7 14.6 282.4 16.6 20.0 -11.7 19.0 -10.6 18.6 -11.5 19.9 -10.3
2026-04-12T13:38:21.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:38:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:38:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.484482
2026-04-12T13:38:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:38:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:38:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:38:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:38:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:38:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:37:45', tmtdew=3.47058, humidity=79.607, cloud=0.0, wind=12.0694, temperature=14.5543, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:37:39.245', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:38:21.959 [DEBUG] [Thread-189953] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:38:22.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:38:22.043 [DEBUG] [Thread-189956] [transport.py] [_log()] starting thread (client mode): 0xb0fb73a0
2026-04-12T13:38:22.043 [DEBUG] [Thread-189956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:38:22.058 [DEBUG] [Thread-189956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:38:22.058 [INFO] [Thread-189956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:38:22.066 [DEBUG] [Thread-189956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] client lang: <none>
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] server lang: <none>
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] kex follows: False
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] Compression: none
2026-04-12T13:38:22.067 [DEBUG] [Thread-189956] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:38:22.125 [DEBUG] [Thread-189956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:38:22.126 [DEBUG] [Thread-189956] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:38:22.127 [DEBUG] [Thread-189956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:38:22.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:38:22.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:38:22.182 [DEBUG] [Thread-189956] [transport.py] [_log()] userauth is OK
2026-04-12T13:38:22.182 [DEBUG] [Thread-189956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:38:22.182 [DEBUG] [Thread-189956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:38:22.182 [DEBUG] [Thread-189956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:38:22.182 [DEBUG] [Thread-189956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:38:22.201 [INFO] [Thread-189956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:38:22.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:38:22.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:38:23.013 [DEBUG] [Thread-189956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:38:23.013 [DEBUG] [Thread-189956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:38:23.061 [DEBUG] [Thread-189956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:38:23.061 [DEBUG] [Thread-189956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:38:23.071 [DEBUG] [Thread-189956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:38:23.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:38:23.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:38:23.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:38:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:38:23.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:38:23.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:38:23.108 [DEBUG] [Thread-189956] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:38:24.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:38:24.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:38:30.698 [DEBUG] [Thread-189958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:38:37.027 [DEBUG] [Thread-189959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:38:45.758 [DEBUG] [Thread-189960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:38:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:38:53.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:38:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:38:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 38, 20), 1.99221, 88.7397, 0.0, 14.5224, 13.7104, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:38:54.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:38:20
2026-04-12T13:38:54.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:38:54.902 [DEBUG] [Thread-189961] [transport.py] [_log()] starting thread (client mode): 0xae52c730
2026-04-12T13:38:54.902 [DEBUG] [Thread-189961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:38:54.923 [DEBUG] [Thread-189961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:38:54.923 [INFO] [Thread-189961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] client lang: <none>
2026-04-12T13:38:54.926 [DEBUG] [Thread-189961] [transport.py] [_log()] server lang: <none>
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] kex follows: False
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] Compression: none
2026-04-12T13:38:54.927 [DEBUG] [Thread-189961] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:38:54.943 [DEBUG] [Thread-189961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:38:54.944 [DEBUG] [Thread-189961] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:38:54.944 [DEBUG] [Thread-189961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:38:54.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:38:54.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:38:54.947 [DEBUG] [Thread-189961] [transport.py] [_log()] userauth is OK
2026-04-12T13:38:54.947 [DEBUG] [Thread-189961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:38:54.947 [DEBUG] [Thread-189961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:38:54.947 [DEBUG] [Thread-189961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:38:54.947 [DEBUG] [Thread-189961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:38:54.970 [INFO] [Thread-189961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:38:54.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:38:55.763 [DEBUG] [Thread-189961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:38:55.763 [DEBUG] [Thread-189961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:38:55.763 [DEBUG] [Thread-189961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:38:55.804 [DEBUG] [Thread-189961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:38:55.804 [DEBUG] [Thread-189961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:38:55.808 [DEBUG] [Thread-189961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:38:55.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:38:55.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:38:55.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:38:55.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:38:55.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:38:55.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:38:55.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:38:55.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:38:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:38:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.484829 -999.00  +13.90  10.05     84  +11.40 1 2 1 2 1   888    0 3.65 38.03 ----- 19.5 10.1 238.0 28.6 20.2 -12.2 19.1 -11.0 18.6 -9.3 20.1 -9.0
2026-04-12T13:38:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:38:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:38:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.484829
2026-04-12T13:38:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:38:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:38:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:38:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:38:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:38:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:38:20', tmtdew=1.99221, humidity=88.7397, cloud=0.0, wind=14.5224, temperature=13.7104, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:38:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:38:55.838 [DEBUG] [Thread-189961] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:38:55.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:39:00.796 [DEBUG] [Thread-189964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:39:15.847 [DEBUG] [Thread-189965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:39:24.887 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:39:24.889 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:39:30.884 [DEBUG] [Thread-189966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:39:37.063 [DEBUG] [Thread-189967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:39:45.922 [DEBUG] [Thread-189968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:40:00.959 [DEBUG] [Thread-189969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:40:15.993 [DEBUG] [Thread-189970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:40:25.044 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:40:25.045 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:40:31.029 [DEBUG] [Thread-189971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:40:37.097 [DEBUG] [Thread-189972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:40:46.066 [DEBUG] [Thread-189973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:41:01.104 [DEBUG] [Thread-189974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:41:08.607 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T13:41:16.140 [DEBUG] [Thread-189975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:41:25.196 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:41:25.197 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:41:31.175 [DEBUG] [Thread-189976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:41:37.143 [DEBUG] [Thread-189977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:41:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:41:38.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:41:38.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:41:39.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 41, 19), 2.22288, 86.6066, 0.0, 10.6578, 13.9424, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:41:39.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:41:19
2026-04-12T13:41:40.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:41:40.527 [DEBUG] [Thread-189978] [transport.py] [_log()] starting thread (client mode): 0xb39c79a0
2026-04-12T13:41:40.527 [DEBUG] [Thread-189978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:41:40.547 [DEBUG] [Thread-189978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:41:40.547 [INFO] [Thread-189978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:41:40.550 [DEBUG] [Thread-189978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:41:40.550 [DEBUG] [Thread-189978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:41:40.550 [DEBUG] [Thread-189978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:41:40.550 [DEBUG] [Thread-189978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] client lang: <none>
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] server lang: <none>
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] kex follows: False
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:41:40.551 [DEBUG] [Thread-189978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:41:40.552 [DEBUG] [Thread-189978] [transport.py] [_log()] Compression: none
2026-04-12T13:41:40.552 [DEBUG] [Thread-189978] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:41:40.567 [DEBUG] [Thread-189978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:41:40.568 [DEBUG] [Thread-189978] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:41:40.569 [DEBUG] [Thread-189978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:41:40.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:41:40.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:41:40.613 [DEBUG] [Thread-189978] [transport.py] [_log()] userauth is OK
2026-04-12T13:41:40.614 [DEBUG] [Thread-189978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:41:40.614 [DEBUG] [Thread-189978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:41:40.614 [DEBUG] [Thread-189978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:41:40.614 [DEBUG] [Thread-189978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:41:40.640 [INFO] [Thread-189978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:41:40.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:41:41.439 [DEBUG] [Thread-189978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:41:41.439 [DEBUG] [Thread-189978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:41:41.440 [DEBUG] [Thread-189978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:41:41.480 [DEBUG] [Thread-189978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:41:41.480 [DEBUG] [Thread-189978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:41:41.483 [DEBUG] [Thread-189978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:41:41.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:41:41.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:41:41.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:41:41.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:41:41.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:41:41.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:41:41.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:41:41.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:41:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:41:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.486913 -999.00  +13.80  16.14     82  +10.80 1 2 1 2 1   888    0 3.45 26.69 ----- 14.8 16.1 270.6 17.6 20.7 -13.4 19.7 -12.1 19.5 -10.3 20.6 -13.1
2026-04-12T13:41:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:41:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:41:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.486913
2026-04-12T13:41:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:41:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:41:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:41:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:41:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:41:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:41:19', tmtdew=2.22288, humidity=86.6066, cloud=0.0, wind=10.6578, temperature=13.9424, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:41:09.283', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:41:41.511 [DEBUG] [Thread-189978] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:41:41.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:41:41.612 [DEBUG] [Thread-189981] [transport.py] [_log()] starting thread (client mode): 0xb0feaa70
2026-04-12T13:41:41.612 [DEBUG] [Thread-189981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:41:41.627 [DEBUG] [Thread-189981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:41:41.627 [INFO] [Thread-189981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:41:41.635 [DEBUG] [Thread-189981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:41:41.635 [DEBUG] [Thread-189981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] client lang: <none>
2026-04-12T13:41:41.636 [DEBUG] [Thread-189981] [transport.py] [_log()] server lang: <none>
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] kex follows: False
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] Compression: none
2026-04-12T13:41:41.637 [DEBUG] [Thread-189981] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:41:41.694 [DEBUG] [Thread-189981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:41:41.694 [DEBUG] [Thread-189981] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:41:41.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:41:41.695 [DEBUG] [Thread-189981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:41:41.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:41:41.754 [DEBUG] [Thread-189981] [transport.py] [_log()] userauth is OK
2026-04-12T13:41:41.754 [DEBUG] [Thread-189981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:41:41.754 [DEBUG] [Thread-189981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:41:41.754 [DEBUG] [Thread-189981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:41:41.755 [DEBUG] [Thread-189981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:41:41.774 [INFO] [Thread-189981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:41:41.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:41:41.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:41:42.588 [DEBUG] [Thread-189981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:41:42.589 [DEBUG] [Thread-189981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:41:42.637 [DEBUG] [Thread-189981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:41:42.638 [DEBUG] [Thread-189981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:41:42.648 [DEBUG] [Thread-189981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:41:42.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:41:42.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:41:42.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:41:42.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:41:42.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:41:42.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:41:42.685 [DEBUG] [Thread-189981] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:41:46.213 [DEBUG] [Thread-189983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:01.268 [DEBUG] [Thread-189984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:12.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:42:12.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:42:12.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:42:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 41, 54), 3.88705, 77.4831, 0.0, 9.74088, 14.8842, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:42:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:41:54
2026-04-12T13:42:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:42:14.590 [DEBUG] [Thread-189985] [transport.py] [_log()] starting thread (client mode): 0xb0feae90
2026-04-12T13:42:14.590 [DEBUG] [Thread-189985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:42:14.611 [DEBUG] [Thread-189985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:42:14.611 [INFO] [Thread-189985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:42:14.612 [DEBUG] [Thread-189985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:42:14.612 [DEBUG] [Thread-189985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:42:14.612 [DEBUG] [Thread-189985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:42:14.612 [DEBUG] [Thread-189985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:14.612 [DEBUG] [Thread-189985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:14.612 [DEBUG] [Thread-189985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:14.612 [DEBUG] [Thread-189985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] client lang: <none>
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] server lang: <none>
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] kex follows: False
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] Compression: none
2026-04-12T13:42:14.613 [DEBUG] [Thread-189985] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:42:14.623 [DEBUG] [Thread-189985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:42:14.624 [DEBUG] [Thread-189985] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:42:14.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:42:14.626 [DEBUG] [Thread-189985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:42:14.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:42:14.628 [DEBUG] [Thread-189985] [transport.py] [_log()] userauth is OK
2026-04-12T13:42:14.628 [DEBUG] [Thread-189985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:42:14.628 [DEBUG] [Thread-189985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:42:14.628 [DEBUG] [Thread-189985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:42:14.628 [DEBUG] [Thread-189985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:42:14.655 [INFO] [Thread-189985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:42:14.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:42:15.445 [DEBUG] [Thread-189985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:42:15.445 [DEBUG] [Thread-189985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:42:15.445 [DEBUG] [Thread-189985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:42:15.486 [DEBUG] [Thread-189985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:42:15.486 [DEBUG] [Thread-189985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:42:15.490 [DEBUG] [Thread-189985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:42:15.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:42:15.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:42:15.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:42:15.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:42:15.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:42:15.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:42:15.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:42:15.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:42:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:42:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.487260 -999.00  +13.90  14.28     83  +11.10 1 2 1 2 1   888    0 3.36 24.70 ----- 10.6 14.3 274.6 17.5 20.8 -12.9 19.6 -12.0 19.4 -10.5 20.6 -12.5
2026-04-12T13:42:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:42:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:42:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.487260
2026-04-12T13:42:15.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:42:15.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:42:15.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:42:15.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:42:15.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:42:15.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:41:54', tmtdew=3.88705, humidity=77.4831, cloud=0.0, wind=9.74088, temperature=14.8842, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:41:39.264', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:42:15.516 [DEBUG] [Thread-189985] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:42:15.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:42:15.610 [DEBUG] [Thread-189988] [transport.py] [_log()] starting thread (client mode): 0xb0f41900
2026-04-12T13:42:15.610 [DEBUG] [Thread-189988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:42:15.625 [DEBUG] [Thread-189988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:42:15.625 [INFO] [Thread-189988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:42:15.633 [DEBUG] [Thread-189988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:42:15.633 [DEBUG] [Thread-189988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] client lang: <none>
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] server lang: <none>
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] kex follows: False
2026-04-12T13:42:15.634 [DEBUG] [Thread-189988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:42:15.635 [DEBUG] [Thread-189988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:42:15.635 [DEBUG] [Thread-189988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:42:15.635 [DEBUG] [Thread-189988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:42:15.635 [DEBUG] [Thread-189988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:42:15.635 [DEBUG] [Thread-189988] [transport.py] [_log()] Compression: none
2026-04-12T13:42:15.635 [DEBUG] [Thread-189988] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:42:15.693 [DEBUG] [Thread-189988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:42:15.694 [DEBUG] [Thread-189988] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:42:15.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:42:15.695 [DEBUG] [Thread-189988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:42:15.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:42:15.749 [DEBUG] [Thread-189988] [transport.py] [_log()] userauth is OK
2026-04-12T13:42:15.749 [DEBUG] [Thread-189988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:42:15.749 [DEBUG] [Thread-189988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:42:15.749 [DEBUG] [Thread-189988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:42:15.749 [DEBUG] [Thread-189988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:42:15.762 [INFO] [Thread-189988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:42:15.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:42:15.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:42:16.311 [DEBUG] [Thread-189990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:16.635 [DEBUG] [Thread-189988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:42:16.636 [DEBUG] [Thread-189988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:42:16.684 [DEBUG] [Thread-189988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:42:16.685 [DEBUG] [Thread-189988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:42:16.694 [DEBUG] [Thread-189988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:42:16.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:42:16.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:42:16.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:42:16.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:42:16.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:42:16.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:42:16.731 [DEBUG] [Thread-189988] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:42:25.353 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:25.354 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:31.365 [DEBUG] [Thread-189991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:37.187 [DEBUG] [Thread-189992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:46.402 [DEBUG] [Thread-189993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:42:46.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:42:46.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:42:46.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:42:48.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 42, 29), 2.40373, 85.6915, 0.0, 15.3162, 14.0584, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:42:48.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:42:29
2026-04-12T13:42:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:42:48.592 [DEBUG] [Thread-189994] [transport.py] [_log()] starting thread (client mode): 0xb0fe9a50
2026-04-12T13:42:48.592 [DEBUG] [Thread-189994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:42:48.613 [DEBUG] [Thread-189994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:42:48.613 [INFO] [Thread-189994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:42:48.616 [DEBUG] [Thread-189994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] client lang: <none>
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] server lang: <none>
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] kex follows: False
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] Compression: none
2026-04-12T13:42:48.617 [DEBUG] [Thread-189994] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:42:48.635 [DEBUG] [Thread-189994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:42:48.636 [DEBUG] [Thread-189994] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:42:48.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:42:48.637 [DEBUG] [Thread-189994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:42:48.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:42:48.639 [DEBUG] [Thread-189994] [transport.py] [_log()] userauth is OK
2026-04-12T13:42:48.639 [DEBUG] [Thread-189994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:42:48.640 [DEBUG] [Thread-189994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:42:48.640 [DEBUG] [Thread-189994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:42:48.640 [DEBUG] [Thread-189994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:42:48.658 [INFO] [Thread-189994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:42:48.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:42:49.423 [DEBUG] [Thread-189994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:42:49.424 [DEBUG] [Thread-189994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:42:49.424 [DEBUG] [Thread-189994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:42:49.465 [DEBUG] [Thread-189994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:42:49.465 [DEBUG] [Thread-189994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:42:49.469 [DEBUG] [Thread-189994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:42:49.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:42:49.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:42:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:42:49.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:42:49.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:42:49.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:42:49.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:42:49.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:42:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:42:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.487607 -999.00  +14.20  15.85     83  +11.40 1 2 1 2 1   888    0 3.29 24.12 ----- 13.1 15.8 264.4 18.9 20.9 -13.5 19.8 -11.9 19.5 -10.4 20.7 -12.7
2026-04-12T13:42:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:42:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:42:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.487607
2026-04-12T13:42:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:42:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:42:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:42:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:42:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:42:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:42:29', tmtdew=2.40373, humidity=85.6915, cloud=0.0, wind=15.3162, temperature=14.0584, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:42:09.245', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:42:49.499 [DEBUG] [Thread-189994] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:42:49.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:42:49.592 [DEBUG] [Thread-189997] [transport.py] [_log()] starting thread (client mode): 0xb0fe9630
2026-04-12T13:42:49.592 [DEBUG] [Thread-189997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:42:49.607 [DEBUG] [Thread-189997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:42:49.607 [INFO] [Thread-189997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] client lang: <none>
2026-04-12T13:42:49.615 [DEBUG] [Thread-189997] [transport.py] [_log()] server lang: <none>
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] kex follows: False
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] Compression: none
2026-04-12T13:42:49.616 [DEBUG] [Thread-189997] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:42:49.673 [DEBUG] [Thread-189997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:42:49.674 [DEBUG] [Thread-189997] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:42:49.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:42:49.675 [DEBUG] [Thread-189997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:42:49.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:42:49.729 [DEBUG] [Thread-189997] [transport.py] [_log()] userauth is OK
2026-04-12T13:42:49.729 [DEBUG] [Thread-189997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:42:49.729 [DEBUG] [Thread-189997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:42:49.729 [DEBUG] [Thread-189997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:42:49.729 [DEBUG] [Thread-189997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:42:49.749 [INFO] [Thread-189997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:42:49.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:42:49.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:42:50.554 [DEBUG] [Thread-189997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:42:50.554 [DEBUG] [Thread-189997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:42:50.603 [DEBUG] [Thread-189997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:42:50.603 [DEBUG] [Thread-189997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:42:50.612 [DEBUG] [Thread-189997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:42:50.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:42:50.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:42:50.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:42:50.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:42:50.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:42:50.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:42:50.649 [DEBUG] [Thread-189997] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:43:01.440 [DEBUG] [Thread-189999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:43:16.495 [DEBUG] [Thread-190000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:43:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:43:20.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:43:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:43:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 43, 5), 2.33993, 86.0231, 0.0, 15.6514, 14.075, 1, 1, 0, 2, 0, 0),)
2026-04-12T13:43:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:43:05
2026-04-12T13:43:22.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:43:22.518 [DEBUG] [Thread-190001] [transport.py] [_log()] starting thread (client mode): 0xb0fb6050
2026-04-12T13:43:22.518 [DEBUG] [Thread-190001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:43:22.537 [DEBUG] [Thread-190001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:43:22.538 [INFO] [Thread-190001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] client lang: <none>
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] server lang: <none>
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] kex follows: False
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] Compression: none
2026-04-12T13:43:22.541 [DEBUG] [Thread-190001] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:43:22.558 [DEBUG] [Thread-190001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:43:22.558 [DEBUG] [Thread-190001] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:43:22.559 [DEBUG] [Thread-190001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:43:22.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:43:22.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:43:22.561 [DEBUG] [Thread-190001] [transport.py] [_log()] userauth is OK
2026-04-12T13:43:22.561 [DEBUG] [Thread-190001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:43:22.561 [DEBUG] [Thread-190001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:43:22.561 [DEBUG] [Thread-190001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:43:22.561 [DEBUG] [Thread-190001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:43:22.576 [INFO] [Thread-190001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:43:22.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:43:23.359 [DEBUG] [Thread-190001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:43:23.359 [DEBUG] [Thread-190001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:43:23.359 [DEBUG] [Thread-190001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:43:23.400 [DEBUG] [Thread-190001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:43:23.400 [DEBUG] [Thread-190001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:43:23.403 [DEBUG] [Thread-190001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:43:23.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:43:23.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:43:23.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:43:23.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:43:23.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:43:23.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:43:23.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:43:23.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:43:23.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:43:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.487954 -999.00  +14.00  20.97     79  +10.60 1 2 1 1 1   888    0 3.30 25.12 ----- 17.8 21.0 272.0 25.9 20.5 -15.8 19.7 -13.9 19.5 -11.6 20.6 -13.4
2026-04-12T13:43:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:43:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:43:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.487954
2026-04-12T13:43:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:43:23.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:43:23.419 [DEBUG] [Thread-190001] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:43:23.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:43:23.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:43:23.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:43:23.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:43:05', tmtdew=2.33993, humidity=86.0231, cloud=0.0, wind=15.6514, temperature=14.075, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:42:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:43:23.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:43:23.515 [DEBUG] [Thread-190004] [transport.py] [_log()] starting thread (client mode): 0xb0fb7f10
2026-04-12T13:43:23.515 [DEBUG] [Thread-190004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:43:23.530 [DEBUG] [Thread-190004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:43:23.530 [INFO] [Thread-190004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:43:23.537 [DEBUG] [Thread-190004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] client lang: <none>
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] server lang: <none>
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] kex follows: False
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] Compression: none
2026-04-12T13:43:23.538 [DEBUG] [Thread-190004] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:43:23.601 [DEBUG] [Thread-190004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:43:23.601 [DEBUG] [Thread-190004] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:43:23.602 [DEBUG] [Thread-190004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:43:23.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:43:23.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:43:23.656 [DEBUG] [Thread-190004] [transport.py] [_log()] userauth is OK
2026-04-12T13:43:23.657 [DEBUG] [Thread-190004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:43:23.657 [DEBUG] [Thread-190004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:43:23.657 [DEBUG] [Thread-190004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:43:23.657 [DEBUG] [Thread-190004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:43:23.680 [INFO] [Thread-190004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:43:23.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:43:23.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:43:24.502 [DEBUG] [Thread-190004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:43:24.502 [DEBUG] [Thread-190004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:43:24.550 [DEBUG] [Thread-190004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:43:24.550 [DEBUG] [Thread-190004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:43:24.559 [DEBUG] [Thread-190004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:43:24.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:43:24.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:43:24.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:43:24.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:43:24.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:43:24.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:43:24.594 [DEBUG] [Thread-190004] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:43:25.495 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:43:25.496 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:43:31.530 [DEBUG] [Thread-190006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:43:37.252 [DEBUG] [Thread-190007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:43:46.582 [DEBUG] [Thread-190008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:43:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:43:54.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:43:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:43:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 43, 40), 3.91596, 77.3494, 0.0, 20.9599, 14.9828, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:43:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:43:40
2026-04-12T13:43:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:43:56.441 [DEBUG] [Thread-190009] [transport.py] [_log()] starting thread (client mode): 0xb39c7310
2026-04-12T13:43:56.441 [DEBUG] [Thread-190009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:43:56.462 [DEBUG] [Thread-190009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:43:56.462 [INFO] [Thread-190009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] client lang: <none>
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] server lang: <none>
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] kex follows: False
2026-04-12T13:43:56.466 [DEBUG] [Thread-190009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:43:56.467 [DEBUG] [Thread-190009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:43:56.467 [DEBUG] [Thread-190009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:43:56.467 [DEBUG] [Thread-190009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:43:56.467 [DEBUG] [Thread-190009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:43:56.467 [DEBUG] [Thread-190009] [transport.py] [_log()] Compression: none
2026-04-12T13:43:56.467 [DEBUG] [Thread-190009] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:43:56.483 [DEBUG] [Thread-190009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:43:56.484 [DEBUG] [Thread-190009] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:43:56.484 [DEBUG] [Thread-190009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:43:56.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:43:56.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:43:56.486 [DEBUG] [Thread-190009] [transport.py] [_log()] userauth is OK
2026-04-12T13:43:56.487 [DEBUG] [Thread-190009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:43:56.487 [DEBUG] [Thread-190009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:43:56.487 [DEBUG] [Thread-190009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:43:56.487 [DEBUG] [Thread-190009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:43:56.510 [INFO] [Thread-190009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:43:56.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:43:57.305 [DEBUG] [Thread-190009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:43:57.305 [DEBUG] [Thread-190009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:43:57.305 [DEBUG] [Thread-190009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:43:57.346 [DEBUG] [Thread-190009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:43:57.346 [DEBUG] [Thread-190009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:43:57.350 [DEBUG] [Thread-190009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:43:57.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:43:57.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:43:57.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:43:57.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:43:57.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:43:57.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:43:57.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:43:57.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:43:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:43:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.488302 -999.00  +13.80  16.08     81  +10.70 1 2 1 2 1   888    0 3.43 25.69 ----- 15.9 16.1 275.0 21.6 20.6 -14.2 19.6 -12.6 19.1 -12.1 20.5 -12.6
2026-04-12T13:43:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:43:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:43:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.488302
2026-04-12T13:43:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:43:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:43:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:43:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:43:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:43:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:43:40', tmtdew=3.91596, humidity=77.3494, cloud=0.0, wind=20.9599, temperature=14.9828, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:43:09.293', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:43:57.379 [DEBUG] [Thread-190009] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:43:57.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:43:57.473 [DEBUG] [Thread-190012] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-12T13:43:57.473 [DEBUG] [Thread-190012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:43:57.488 [DEBUG] [Thread-190012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:43:57.488 [INFO] [Thread-190012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:43:57.495 [DEBUG] [Thread-190012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:43:57.495 [DEBUG] [Thread-190012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] client lang: <none>
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] server lang: <none>
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] kex follows: False
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] Compression: none
2026-04-12T13:43:57.496 [DEBUG] [Thread-190012] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:43:57.557 [DEBUG] [Thread-190012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:43:57.558 [DEBUG] [Thread-190012] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:43:57.559 [DEBUG] [Thread-190012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:43:57.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:43:57.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:43:57.613 [DEBUG] [Thread-190012] [transport.py] [_log()] userauth is OK
2026-04-12T13:43:57.613 [DEBUG] [Thread-190012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:43:57.614 [DEBUG] [Thread-190012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:43:57.614 [DEBUG] [Thread-190012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:43:57.614 [DEBUG] [Thread-190012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:43:57.633 [INFO] [Thread-190012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:43:57.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:43:57.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:43:58.451 [DEBUG] [Thread-190012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:43:58.451 [DEBUG] [Thread-190012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:43:58.499 [DEBUG] [Thread-190012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:43:58.500 [DEBUG] [Thread-190012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:43:58.509 [DEBUG] [Thread-190012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:43:58.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:43:58.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:43: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') -> 00000000
2026-04-12T13:43:58.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:43:58.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:43:58.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:43:58.546 [DEBUG] [Thread-190012] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:44:01.614 [DEBUG] [Thread-190014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:44:16.659 [DEBUG] [Thread-190015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:44:25.637 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:44:25.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:44:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:44:28.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:44:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:44:29.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 44, 16), 2.65918, 84.1608, 0.0, 15.2802, 14.258, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:44:29.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:44:16
2026-04-12T13:44:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:44:30.379 [DEBUG] [Thread-190016] [transport.py] [_log()] starting thread (client mode): 0xb0fb5bd0
2026-04-12T13:44:30.379 [DEBUG] [Thread-190016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:44:30.400 [DEBUG] [Thread-190016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:44:30.400 [INFO] [Thread-190016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] client lang: <none>
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] server lang: <none>
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] kex follows: False
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] Compression: none
2026-04-12T13:44:30.401 [DEBUG] [Thread-190016] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:44:30.421 [DEBUG] [Thread-190016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:44:30.421 [DEBUG] [Thread-190016] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:44:30.422 [DEBUG] [Thread-190016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:44:30.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:44:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:44:30.424 [DEBUG] [Thread-190016] [transport.py] [_log()] userauth is OK
2026-04-12T13:44:30.425 [DEBUG] [Thread-190016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:44:30.425 [DEBUG] [Thread-190016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:44:30.425 [DEBUG] [Thread-190016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:44:30.425 [DEBUG] [Thread-190016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:44:30.450 [INFO] [Thread-190016] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:44:30.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:44:31.248 [DEBUG] [Thread-190016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:44:31.248 [DEBUG] [Thread-190016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:44:31.249 [DEBUG] [Thread-190016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:44:31.289 [DEBUG] [Thread-190016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:44:31.289 [DEBUG] [Thread-190016] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:44:31.293 [DEBUG] [Thread-190016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:44:31.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:44:31.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:44:31.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:44:31.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:44:31.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:44:31.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:44:31.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:44:31.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:44:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:44:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.488649 -999.00  +14.00  15.18     82  +10.90 1 2 1 2 1   888    0 3.43 24.44 ----- 16.8 15.2 274.4 16.8 20.6 -14.6 19.7 -12.7 19.2 -12.5 20.5 -13.6
2026-04-12T13:44:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:44:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:44:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.488649
2026-04-12T13:44:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:44:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:44:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:44:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:44:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:44:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:44:16', tmtdew=2.65918, humidity=84.1608, cloud=0.0, wind=15.2802, temperature=14.258, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:43:39.274', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:44:31.320 [DEBUG] [Thread-190016] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:44:31.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:44:31.414 [DEBUG] [Thread-190019] [transport.py] [_log()] starting thread (client mode): 0xb0fb5840
2026-04-12T13:44:31.415 [DEBUG] [Thread-190019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:44:31.429 [DEBUG] [Thread-190019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:44:31.429 [INFO] [Thread-190019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:44:31.437 [DEBUG] [Thread-190019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] client lang: <none>
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] server lang: <none>
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] kex follows: False
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] Compression: none
2026-04-12T13:44:31.438 [DEBUG] [Thread-190019] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:44:31.497 [DEBUG] [Thread-190019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:44:31.497 [DEBUG] [Thread-190019] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:44:31.498 [DEBUG] [Thread-190019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:44:31.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:44:31.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:44:31.553 [DEBUG] [Thread-190019] [transport.py] [_log()] userauth is OK
2026-04-12T13:44:31.553 [DEBUG] [Thread-190019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:44:31.553 [DEBUG] [Thread-190019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:44:31.554 [DEBUG] [Thread-190019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:44:31.554 [DEBUG] [Thread-190019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:44:31.573 [INFO] [Thread-190019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:44:31.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:44:31.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:44:31.697 [DEBUG] [Thread-190021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:44:32.454 [DEBUG] [Thread-190019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:44:32.455 [DEBUG] [Thread-190019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:44:32.503 [DEBUG] [Thread-190019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:44:32.503 [DEBUG] [Thread-190019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:44:32.512 [DEBUG] [Thread-190019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:44:32.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:44:32.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:44:32.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:44:32.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:44:32.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:44:32.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:44:32.550 [DEBUG] [Thread-190019] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:44:37.298 [DEBUG] [Thread-190022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:44:46.751 [DEBUG] [Thread-190023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:01.786 [DEBUG] [Thread-190024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:45:02.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:45:02.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:45:03.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 44, 51), 4.33881, 75.1941, 0.0, 18.9137, 14.9162, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:45:03.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:44:51
2026-04-12T13:45:04.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:45:04.384 [DEBUG] [Thread-190025] [transport.py] [_log()] starting thread (client mode): 0xae5b50c0
2026-04-12T13:45:04.384 [DEBUG] [Thread-190025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:45:04.404 [DEBUG] [Thread-190025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:45:04.404 [INFO] [Thread-190025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] client lang: <none>
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] server lang: <none>
2026-04-12T13:45:04.405 [DEBUG] [Thread-190025] [transport.py] [_log()] kex follows: False
2026-04-12T13:45:04.406 [DEBUG] [Thread-190025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:45:04.406 [DEBUG] [Thread-190025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:45:04.406 [DEBUG] [Thread-190025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:45:04.406 [DEBUG] [Thread-190025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:45:04.406 [DEBUG] [Thread-190025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:45:04.406 [DEBUG] [Thread-190025] [transport.py] [_log()] Compression: none
2026-04-12T13:45:04.406 [DEBUG] [Thread-190025] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:45:04.414 [DEBUG] [Thread-190025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:45:04.415 [DEBUG] [Thread-190025] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:45:04.415 [DEBUG] [Thread-190025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:45:04.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:45:04.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:45:04.417 [DEBUG] [Thread-190025] [transport.py] [_log()] userauth is OK
2026-04-12T13:45:04.417 [DEBUG] [Thread-190025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:45:04.417 [DEBUG] [Thread-190025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:45:04.417 [DEBUG] [Thread-190025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:45:04.417 [DEBUG] [Thread-190025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:45:04.442 [INFO] [Thread-190025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:45:04.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:45:15.223 [DEBUG] [Thread-190025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:45:15.224 [DEBUG] [Thread-190025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:45:15.224 [DEBUG] [Thread-190025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:45:15.264 [DEBUG] [Thread-190025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:45:15.265 [DEBUG] [Thread-190025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:45:15.269 [DEBUG] [Thread-190025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:45:15.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:45:15.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:45:15.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:45:15.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:45:15.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:45:15.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:45:15.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:45:15.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:45:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:45:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.488996 -999.00  +14.00  16.76     82  +11.10 1 2 1 2 1   888    0 3.40 23.75 ----- 13.3 16.8 278.2 22.6 20.7 -12.1 19.6 -12.1 19.0 -12.5 20.5 -12.1
2026-04-12T13:45:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:45:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:45:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.488996
2026-04-12T13:45:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:45:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:45:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:45:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:45:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:45:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:44:51', tmtdew=4.33881, humidity=75.1941, cloud=0.0, wind=18.9137, temperature=14.9162, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:44:09.254', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:45:15.366 [DEBUG] [Thread-190025] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:45:15.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:45:15.462 [DEBUG] [Thread-190028] [transport.py] [_log()] starting thread (client mode): 0xb0f573a0
2026-04-12T13:45:15.462 [DEBUG] [Thread-190028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:45:15.477 [DEBUG] [Thread-190028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:45:15.477 [INFO] [Thread-190028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:45:15.485 [DEBUG] [Thread-190028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] client lang: <none>
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] server lang: <none>
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] kex follows: False
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] Compression: none
2026-04-12T13:45:15.486 [DEBUG] [Thread-190028] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:45:15.549 [DEBUG] [Thread-190028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:45:15.549 [DEBUG] [Thread-190028] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:45:15.550 [DEBUG] [Thread-190028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:45:15.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:45:15.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:45:15.605 [DEBUG] [Thread-190028] [transport.py] [_log()] userauth is OK
2026-04-12T13:45:15.605 [DEBUG] [Thread-190028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:45:15.605 [DEBUG] [Thread-190028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:45:15.606 [DEBUG] [Thread-190028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:45:15.606 [DEBUG] [Thread-190028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:45:15.624 [INFO] [Thread-190028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:45:15.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:45:15.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:45:16.434 [DEBUG] [Thread-190028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:45:16.434 [DEBUG] [Thread-190028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:45:16.482 [DEBUG] [Thread-190028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:45:16.482 [DEBUG] [Thread-190028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:45:16.492 [DEBUG] [Thread-190028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:45:16.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:45:16.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:45:16.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:45:16.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:45:16.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:45:16.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:45:16.529 [DEBUG] [Thread-190028] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:45:16.820 [DEBUG] [Thread-190030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:25.776 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:25.778 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:31.870 [DEBUG] [Thread-190031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:37.343 [DEBUG] [Thread-190032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:46.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:45:46.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:45:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:45:46.910 [DEBUG] [Thread-190033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:45:47.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 45, 26), 2.86561, 83.097, 0.0, 14.6452, 14.4421, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:45:47.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:45:26
2026-04-12T13:45:48.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:45:48.359 [DEBUG] [Thread-190034] [transport.py] [_log()] starting thread (client mode): 0xae5b73d0
2026-04-12T13:45:48.359 [DEBUG] [Thread-190034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:45:48.379 [DEBUG] [Thread-190034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:45:48.379 [INFO] [Thread-190034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:45:48.380 [DEBUG] [Thread-190034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:45:48.380 [DEBUG] [Thread-190034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:45:48.380 [DEBUG] [Thread-190034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] client lang: <none>
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] server lang: <none>
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] kex follows: False
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:45:48.381 [DEBUG] [Thread-190034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:45:48.382 [DEBUG] [Thread-190034] [transport.py] [_log()] Compression: none
2026-04-12T13:45:48.382 [DEBUG] [Thread-190034] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:45:48.391 [DEBUG] [Thread-190034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:45:48.392 [DEBUG] [Thread-190034] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:45:48.392 [DEBUG] [Thread-190034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:45:48.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:45:48.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:45:48.394 [DEBUG] [Thread-190034] [transport.py] [_log()] userauth is OK
2026-04-12T13:45:48.394 [DEBUG] [Thread-190034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:45:48.395 [DEBUG] [Thread-190034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:45:48.395 [DEBUG] [Thread-190034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:45:48.395 [DEBUG] [Thread-190034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:45:48.413 [INFO] [Thread-190034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:45:48.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:45:48.994 [DEBUG] [Thread-190034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:45:48.994 [DEBUG] [Thread-190034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:45:48.994 [DEBUG] [Thread-190034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:45:49.035 [DEBUG] [Thread-190034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:45:49.035 [DEBUG] [Thread-190034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:45:49.041 [DEBUG] [Thread-190034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:45:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:45:49.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:45:49.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:45:49.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:45:49.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:45:49.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:45:49.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:45:49.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:45:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:45:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.490038 -999.00  +14.90  15.35     79  +11.30 1 2 1 1 1   888    0 3.43 23.77 ----- 12.3 15.3 264.2 20.2 20.9 -13.9 20.0 -12.3 19.8 -11.1 20.8 -13.5
2026-04-12T13:45:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:45:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:45:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.490038
2026-04-12T13:45:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:45:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:45:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:45:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:45:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:45:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:45:26', tmtdew=2.86561, humidity=83.097, cloud=0.0, wind=14.6452, temperature=14.4421, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:45:39.283', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:45:49.063 [DEBUG] [Thread-190034] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:45:49.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:45:49.148 [DEBUG] [Thread-190037] [transport.py] [_log()] starting thread (client mode): 0xb0fb68f0
2026-04-12T13:45:49.148 [DEBUG] [Thread-190037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:45:49.167 [DEBUG] [Thread-190037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:45:49.167 [INFO] [Thread-190037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:45:49.174 [DEBUG] [Thread-190037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:45:49.175 [DEBUG] [Thread-190037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] client lang: <none>
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] server lang: <none>
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] kex follows: False
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:45:49.176 [DEBUG] [Thread-190037] [transport.py] [_log()] Compression: none
2026-04-12T13:45:49.177 [DEBUG] [Thread-190037] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:45:49.234 [DEBUG] [Thread-190037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:45:49.234 [DEBUG] [Thread-190037] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:45:49.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:45:49.235 [DEBUG] [Thread-190037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:45:49.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:45:49.293 [DEBUG] [Thread-190037] [transport.py] [_log()] userauth is OK
2026-04-12T13:45:49.294 [DEBUG] [Thread-190037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:45:49.294 [DEBUG] [Thread-190037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:45:49.294 [DEBUG] [Thread-190037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:45:49.294 [DEBUG] [Thread-190037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:45:49.313 [INFO] [Thread-190037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:45:49.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:45:49.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:45:50.159 [DEBUG] [Thread-190037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:45:50.159 [DEBUG] [Thread-190037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:45:50.209 [DEBUG] [Thread-190037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:45:50.210 [DEBUG] [Thread-190037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:45:50.222 [DEBUG] [Thread-190037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:45:50.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:45:50.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:45:50.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:45:50.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:45:50.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:45:50.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:45:50.266 [DEBUG] [Thread-190037] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:46:01.944 [DEBUG] [Thread-190039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:46:16.991 [DEBUG] [Thread-190040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:46:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:46:20.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:46:20.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:46:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 46, 2), 2.79, 83.4782, 0.0, 14.5922, 14.4419, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:46:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:46:02
2026-04-12T13:46:21.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:46:22.109 [DEBUG] [Thread-190041] [transport.py] [_log()] starting thread (client mode): 0xb0f548b0
2026-04-12T13:46:22.109 [DEBUG] [Thread-190041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:46:22.125 [DEBUG] [Thread-190041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:46:22.125 [INFO] [Thread-190041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] client lang: <none>
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] server lang: <none>
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] kex follows: False
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] Compression: none
2026-04-12T13:46:22.126 [DEBUG] [Thread-190041] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:46:22.135 [DEBUG] [Thread-190041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:46:22.135 [DEBUG] [Thread-190041] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:46:22.136 [DEBUG] [Thread-190041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:46:22.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:46:22.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:46:22.137 [DEBUG] [Thread-190041] [transport.py] [_log()] userauth is OK
2026-04-12T13:46:22.137 [DEBUG] [Thread-190041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:46:22.137 [DEBUG] [Thread-190041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:46:22.137 [DEBUG] [Thread-190041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:46:22.137 [DEBUG] [Thread-190041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:46:22.163 [INFO] [Thread-190041] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:46:22.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:46:22.773 [DEBUG] [Thread-190041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:46:22.773 [DEBUG] [Thread-190041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:46:22.774 [DEBUG] [Thread-190041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:46:22.814 [DEBUG] [Thread-190041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:46:22.814 [DEBUG] [Thread-190041] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:46:22.816 [DEBUG] [Thread-190041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:46:22.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:46:22.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:46:22.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:46:22.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:46:22.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:46:22.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:46:22.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:46:22.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:46:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:46:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.490385 -999.00  +14.70  14.75     78  +11.10 1 2 1 1 1   888    0 3.62 28.97 ----- 19.0 14.8 263.0 20.7 20.9 -14.4 20.0 -12.3 19.7 -13.9 20.8 -14.2
2026-04-12T13:46:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:46:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:46:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.490385
2026-04-12T13:46:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:46:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:46:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:46:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:46:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:46:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:46:02', tmtdew=2.79, humidity=83.4782, cloud=0.0, wind=14.5922, temperature=14.4419, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:46:09.264', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:46:22.835 [DEBUG] [Thread-190041] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:46:22.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:46:22.925 [DEBUG] [Thread-190044] [transport.py] [_log()] starting thread (client mode): 0xb0f56f80
2026-04-12T13:46:22.926 [DEBUG] [Thread-190044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:46:22.940 [DEBUG] [Thread-190044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:46:22.940 [INFO] [Thread-190044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:46:22.948 [DEBUG] [Thread-190044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] client lang: <none>
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] server lang: <none>
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] kex follows: False
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] Compression: none
2026-04-12T13:46:22.949 [DEBUG] [Thread-190044] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:46:23.005 [DEBUG] [Thread-190044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:46:23.006 [DEBUG] [Thread-190044] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:46:23.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:46:23.007 [DEBUG] [Thread-190044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:46:23.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:46:23.061 [DEBUG] [Thread-190044] [transport.py] [_log()] userauth is OK
2026-04-12T13:46:23.061 [DEBUG] [Thread-190044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:46:23.062 [DEBUG] [Thread-190044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:46:23.062 [DEBUG] [Thread-190044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:46:23.062 [DEBUG] [Thread-190044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:46:23.080 [INFO] [Thread-190044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:46:23.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:46:23.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:46:23.881 [DEBUG] [Thread-190044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:46:23.881 [DEBUG] [Thread-190044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:46:23.929 [DEBUG] [Thread-190044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:46:23.929 [DEBUG] [Thread-190044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:46:23.939 [DEBUG] [Thread-190044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:46:23.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:46:23.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:46:23.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:46:23.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:46:23.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:46:23.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:46:23.976 [DEBUG] [Thread-190044] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:46:25.921 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:46:25.922 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:46:32.029 [DEBUG] [Thread-190046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:46:37.388 [DEBUG] [Thread-190047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:46:47.080 [DEBUG] [Thread-190048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:46:53.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:46:54.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:46:54.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:46:55.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 46, 37), 4.00918, 76.8515, 0.0, 17.4672, 14.8497, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:46:55.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:46:37
2026-04-12T13:46:55.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:46:55.888 [DEBUG] [Thread-190049] [transport.py] [_log()] starting thread (client mode): 0xae5168f0
2026-04-12T13:46:55.888 [DEBUG] [Thread-190049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:46:55.907 [DEBUG] [Thread-190049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:46:55.908 [INFO] [Thread-190049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:46:55.910 [DEBUG] [Thread-190049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] client lang: <none>
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] server lang: <none>
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] kex follows: False
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:46:55.911 [DEBUG] [Thread-190049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:46:55.912 [DEBUG] [Thread-190049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:46:55.912 [DEBUG] [Thread-190049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:46:55.912 [DEBUG] [Thread-190049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:46:55.912 [DEBUG] [Thread-190049] [transport.py] [_log()] Compression: none
2026-04-12T13:46:55.912 [DEBUG] [Thread-190049] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:46:55.930 [DEBUG] [Thread-190049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:46:55.931 [DEBUG] [Thread-190049] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:46:55.931 [DEBUG] [Thread-190049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:46:55.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:46:55.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:46:55.934 [DEBUG] [Thread-190049] [transport.py] [_log()] userauth is OK
2026-04-12T13:46:55.934 [DEBUG] [Thread-190049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:46:55.934 [DEBUG] [Thread-190049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:46:55.935 [DEBUG] [Thread-190049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:46:55.935 [DEBUG] [Thread-190049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:46:55.959 [INFO] [Thread-190049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:46:55.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:46:56.561 [DEBUG] [Thread-190049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:46:56.561 [DEBUG] [Thread-190049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:46:56.562 [DEBUG] [Thread-190049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:46:56.603 [DEBUG] [Thread-190049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:46:56.604 [DEBUG] [Thread-190049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:46:56.606 [DEBUG] [Thread-190049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:46:56.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:46:56.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:46:56.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:46:56.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:46:56.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:46:56.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:46:56.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:46:56.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:46:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:46:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.490732 -999.00  +14.20   9.88     78  +10.50 1 2 1 1 1   888    0 3.87 35.35 ----- 9.7 9.9 266.6 19.9 20.9 -13.7 19.9 -11.9 19.6 -10.8 20.6 -13.3
2026-04-12T13:46:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:46:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:46:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.490732
2026-04-12T13:46:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:46:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:46:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:46:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:46:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:46:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:46:37', tmtdew=4.00918, humidity=76.8515, cloud=0.0, wind=17.4672, temperature=14.8497, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:46:39.245', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:46:56.627 [DEBUG] [Thread-190049] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:46:56.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:46:56.722 [DEBUG] [Thread-190052] [transport.py] [_log()] starting thread (client mode): 0xb39c7ca0
2026-04-12T13:46:56.722 [DEBUG] [Thread-190052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:46:56.736 [DEBUG] [Thread-190052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:46:56.736 [INFO] [Thread-190052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:46:56.745 [DEBUG] [Thread-190052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:46:56.745 [DEBUG] [Thread-190052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:46:56.745 [DEBUG] [Thread-190052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:46:56.745 [DEBUG] [Thread-190052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:56.745 [DEBUG] [Thread-190052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:46:56.745 [DEBUG] [Thread-190052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] client lang: <none>
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] server lang: <none>
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] kex follows: False
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] Compression: none
2026-04-12T13:46:56.746 [DEBUG] [Thread-190052] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:46:56.805 [DEBUG] [Thread-190052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:46:56.806 [DEBUG] [Thread-190052] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:46:56.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:46:56.807 [DEBUG] [Thread-190052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:46:56.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:46:56.865 [DEBUG] [Thread-190052] [transport.py] [_log()] userauth is OK
2026-04-12T13:46:56.866 [DEBUG] [Thread-190052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:46:56.866 [DEBUG] [Thread-190052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:46:56.866 [DEBUG] [Thread-190052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:46:56.866 [DEBUG] [Thread-190052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:46:56.884 [INFO] [Thread-190052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:46:56.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:46:56.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:46:57.697 [DEBUG] [Thread-190052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:46:57.697 [DEBUG] [Thread-190052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:46:57.745 [DEBUG] [Thread-190052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:46:57.745 [DEBUG] [Thread-190052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:46:57.754 [DEBUG] [Thread-190052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:46:57.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:46:57.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:46:57.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:46:57.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:46:57.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:46:57.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:46:57.789 [DEBUG] [Thread-190052] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:47:02.114 [DEBUG] [Thread-190054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:47:17.167 [DEBUG] [Thread-190055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:47:26.075 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:47:26.077 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:47:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:47:27.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:47:27.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:47:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 47, 12), 3.2634, 80.8786, 0.0, 14.8921, 14.0579, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:47:29.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:47:12
2026-04-12T13:47:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:47:29.628 [DEBUG] [Thread-190056] [transport.py] [_log()] starting thread (client mode): 0xae5b7b20
2026-04-12T13:47:29.628 [DEBUG] [Thread-190056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:47:29.649 [DEBUG] [Thread-190056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:47:29.649 [INFO] [Thread-190056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:47:29.652 [DEBUG] [Thread-190056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] client lang: <none>
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] server lang: <none>
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] kex follows: False
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] Compression: none
2026-04-12T13:47:29.653 [DEBUG] [Thread-190056] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:47:29.663 [DEBUG] [Thread-190056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:47:29.663 [DEBUG] [Thread-190056] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:47:29.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:47:29.664 [DEBUG] [Thread-190056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:47:29.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:47:29.666 [DEBUG] [Thread-190056] [transport.py] [_log()] userauth is OK
2026-04-12T13:47:29.667 [DEBUG] [Thread-190056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:47:29.667 [DEBUG] [Thread-190056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:47:29.667 [DEBUG] [Thread-190056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:47:29.667 [DEBUG] [Thread-190056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:47:29.689 [INFO] [Thread-190056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:47:29.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:47:30.256 [DEBUG] [Thread-190056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:47:30.256 [DEBUG] [Thread-190056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:47:30.256 [DEBUG] [Thread-190056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:47:30.297 [DEBUG] [Thread-190056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:47:30.297 [DEBUG] [Thread-190056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:47:30.300 [DEBUG] [Thread-190056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:47:30.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:47:30.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:47:30.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:47:30.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:47:30.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:47:30.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:47:30.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:47:30.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:47:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:47:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.491079 -999.00  +14.10  14.31     79  +10.70 1 2 1 1 1   888    0 3.95 37.95 ----- 13.3 14.3 266.6 16.3 20.8 -14.0 20.0 -11.8 19.7 -10.9 20.6 -13.3
2026-04-12T13:47:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:47:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:47:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.491079
2026-04-12T13:47:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:47:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:47:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:47:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:47:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:47:30.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:47:12', tmtdew=3.2634, humidity=80.8786, cloud=0.0, wind=14.8921, temperature=14.0579, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:47:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:47:30.328 [DEBUG] [Thread-190056] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:47:30.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:47:30.421 [DEBUG] [Thread-190059] [transport.py] [_log()] starting thread (client mode): 0xae5b6920
2026-04-12T13:47:30.421 [DEBUG] [Thread-190059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:47:30.438 [DEBUG] [Thread-190059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:47:30.438 [INFO] [Thread-190059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:47:30.445 [DEBUG] [Thread-190059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:47:30.446 [DEBUG] [Thread-190059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:47:30.446 [DEBUG] [Thread-190059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:47:30.446 [DEBUG] [Thread-190059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:47:30.446 [DEBUG] [Thread-190059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:47:30.446 [DEBUG] [Thread-190059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:47:30.446 [DEBUG] [Thread-190059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:47:30.446 [DEBUG] [Thread-190059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] client lang: <none>
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] server lang: <none>
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] kex follows: False
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:47:30.447 [DEBUG] [Thread-190059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:47:30.448 [DEBUG] [Thread-190059] [transport.py] [_log()] Compression: none
2026-04-12T13:47:30.448 [DEBUG] [Thread-190059] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:47:30.506 [DEBUG] [Thread-190059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:47:30.506 [DEBUG] [Thread-190059] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:47:30.507 [DEBUG] [Thread-190059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:47:30.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:47:30.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:47:30.565 [DEBUG] [Thread-190059] [transport.py] [_log()] userauth is OK
2026-04-12T13:47:30.565 [DEBUG] [Thread-190059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:47:30.566 [DEBUG] [Thread-190059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:47:30.566 [DEBUG] [Thread-190059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:47:30.566 [DEBUG] [Thread-190059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:47:30.587 [INFO] [Thread-190059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:47:30.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:47:30.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:47:31.463 [DEBUG] [Thread-190059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:47:31.463 [DEBUG] [Thread-190059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:47:31.511 [DEBUG] [Thread-190059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:47:31.511 [DEBUG] [Thread-190059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:47:31.521 [DEBUG] [Thread-190059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:47:31.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:47:31.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:47:31.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:47:31.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:47:31.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:47:31.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:47:31.558 [DEBUG] [Thread-190059] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:47:32.202 [DEBUG] [Thread-190061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:47:37.425 [DEBUG] [Thread-190062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:47:47.253 [DEBUG] [Thread-190063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:48:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:48:01.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:48:01.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:48:02.291 [DEBUG] [Thread-190064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:48:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 47, 48), 4.29925, 75.3925, 0.0, 12.2458, 14.9158, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:48:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:47:48
2026-04-12T13:48:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:48:03.405 [DEBUG] [Thread-190065] [transport.py] [_log()] starting thread (client mode): 0xae5b7f10
2026-04-12T13:48:03.405 [DEBUG] [Thread-190065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:48:03.423 [DEBUG] [Thread-190065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:48:03.423 [INFO] [Thread-190065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:48:03.426 [DEBUG] [Thread-190065] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:48:03.426 [DEBUG] [Thread-190065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:48:03.426 [DEBUG] [Thread-190065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] client lang: <none>
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] server lang: <none>
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] kex follows: False
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] Compression: none
2026-04-12T13:48:03.427 [DEBUG] [Thread-190065] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:48:03.445 [DEBUG] [Thread-190065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:48:03.445 [DEBUG] [Thread-190065] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:48:03.446 [DEBUG] [Thread-190065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:48:03.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:48:03.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:48:03.448 [DEBUG] [Thread-190065] [transport.py] [_log()] userauth is OK
2026-04-12T13:48:03.449 [DEBUG] [Thread-190065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:48:03.449 [DEBUG] [Thread-190065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:48:03.449 [DEBUG] [Thread-190065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:48:03.449 [DEBUG] [Thread-190065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:48:03.467 [INFO] [Thread-190065] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:48:03.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:48:04.076 [DEBUG] [Thread-190065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:48:04.076 [DEBUG] [Thread-190065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:48:04.076 [DEBUG] [Thread-190065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:48:04.117 [DEBUG] [Thread-190065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:48:04.117 [DEBUG] [Thread-190065] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:48:04.120 [DEBUG] [Thread-190065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:48:04.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:48:04.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:48:04.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:48:04.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:48:04.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:48:04.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:48:04.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:48:04.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:48:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:48:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.491426 -999.00  +14.30   8.21     80  +11.10 1 2 1 2 1   888    0 4.02 41.10 ----- 7.8 8.2 207.6 16.9 20.9 -12.4 19.9 -12.1 19.6 -10.7 20.6 -12.2
2026-04-12T13:48:04.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:48:04.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:48:04.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.491426
2026-04-12T13:48:04.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:48:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:48:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:48:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:48:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:48:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:47:48', tmtdew=4.29925, humidity=75.3925, cloud=0.0, wind=12.2458, temperature=14.9158, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:47:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:48:04.145 [DEBUG] [Thread-190065] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:48:04.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:48:04.238 [DEBUG] [Thread-190068] [transport.py] [_log()] starting thread (client mode): 0xae52e350
2026-04-12T13:48:04.238 [DEBUG] [Thread-190068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:48:04.253 [DEBUG] [Thread-190068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:48:04.253 [INFO] [Thread-190068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:48:04.261 [DEBUG] [Thread-190068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:48:04.261 [DEBUG] [Thread-190068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:48:04.261 [DEBUG] [Thread-190068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] client lang: <none>
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] server lang: <none>
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] kex follows: False
2026-04-12T13:48:04.262 [DEBUG] [Thread-190068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:48:04.263 [DEBUG] [Thread-190068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:48:04.263 [DEBUG] [Thread-190068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:48:04.263 [DEBUG] [Thread-190068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:48:04.263 [DEBUG] [Thread-190068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:48:04.263 [DEBUG] [Thread-190068] [transport.py] [_log()] Compression: none
2026-04-12T13:48:04.263 [DEBUG] [Thread-190068] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:48:04.326 [DEBUG] [Thread-190068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:48:04.326 [DEBUG] [Thread-190068] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:48:04.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:48:04.328 [DEBUG] [Thread-190068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:48:04.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:48:04.389 [DEBUG] [Thread-190068] [transport.py] [_log()] userauth is OK
2026-04-12T13:48:04.389 [DEBUG] [Thread-190068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:48:04.390 [DEBUG] [Thread-190068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:48:04.390 [DEBUG] [Thread-190068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:48:04.390 [DEBUG] [Thread-190068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:48:04.417 [INFO] [Thread-190068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:48:04.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:48:04.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:48:05.258 [DEBUG] [Thread-190068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:48:05.259 [DEBUG] [Thread-190068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:48:05.310 [DEBUG] [Thread-190068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:48:05.310 [DEBUG] [Thread-190068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:48:05.323 [DEBUG] [Thread-190068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:48:05.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:48:05.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:48:05.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:48:05.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:48:05.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:48:05.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:48:05.368 [DEBUG] [Thread-190068] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:48:17.329 [DEBUG] [Thread-190070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:48:26.231 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:48:26.232 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:48:32.382 [DEBUG] [Thread-190071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:48:35.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:48:35.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:48:35.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:48:36.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 48, 23), 3.20649, 81.3978, 0.0, 13.905, 14.0249, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:48:36.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:48:23
2026-04-12T13:48:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:48:37.183 [DEBUG] [Thread-190072] [transport.py] [_log()] starting thread (client mode): 0xb0feb3a0
2026-04-12T13:48:37.183 [DEBUG] [Thread-190072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:48:37.203 [DEBUG] [Thread-190072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:48:37.203 [INFO] [Thread-190072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:48:37.204 [DEBUG] [Thread-190072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:48:37.204 [DEBUG] [Thread-190072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] client lang: <none>
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] server lang: <none>
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] kex follows: False
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:48:37.205 [DEBUG] [Thread-190072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:48:37.206 [DEBUG] [Thread-190072] [transport.py] [_log()] Compression: none
2026-04-12T13:48:37.206 [DEBUG] [Thread-190072] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:48:37.215 [DEBUG] [Thread-190072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:48:37.215 [DEBUG] [Thread-190072] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:48:37.216 [DEBUG] [Thread-190072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:48:37.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:48:37.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:48:37.217 [DEBUG] [Thread-190072] [transport.py] [_log()] userauth is OK
2026-04-12T13:48:37.217 [DEBUG] [Thread-190072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:48:37.218 [DEBUG] [Thread-190072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:48:37.218 [DEBUG] [Thread-190072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:48:37.218 [DEBUG] [Thread-190072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:48:37.235 [INFO] [Thread-190072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:48:37.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:48:37.458 [DEBUG] [Thread-190074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:48:37.840 [DEBUG] [Thread-190072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:48:37.840 [DEBUG] [Thread-190072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:48:37.840 [DEBUG] [Thread-190072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:48:37.881 [DEBUG] [Thread-190072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:48:37.881 [DEBUG] [Thread-190072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:48:37.883 [DEBUG] [Thread-190072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:48:37.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:48:37.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:48:37.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:48:37.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:48:37.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:48:37.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:48:37.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:48:37.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:48:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:48:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.491774 -999.00  +14.40  15.79     80  +11.10 1 2 1 2 1   888    0 4.00 39.65 ----- 16.0 15.8 257.0 16.2 20.9 -13.6 19.9 -11.4 19.8 -10.5 20.6 -12.6
2026-04-12T13:48:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:48:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:48:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.491774
2026-04-12T13:48:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:48:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:48:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:48:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:48:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:48:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:48:23', tmtdew=3.20649, humidity=81.3978, cloud=0.0, wind=13.905, temperature=14.0249, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:48:09.274', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:48:37.905 [DEBUG] [Thread-190072] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:48:37.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:48:38.001 [DEBUG] [Thread-190076] [transport.py] [_log()] starting thread (client mode): 0xb0f43910
2026-04-12T13:48:38.001 [DEBUG] [Thread-190076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:48:38.015 [DEBUG] [Thread-190076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:48:38.015 [INFO] [Thread-190076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] client lang: <none>
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] server lang: <none>
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] kex follows: False
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] Compression: none
2026-04-12T13:48:38.023 [DEBUG] [Thread-190076] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:48:38.082 [DEBUG] [Thread-190076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:48:38.082 [DEBUG] [Thread-190076] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:48:38.083 [DEBUG] [Thread-190076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:48:38.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:48:38.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:48:38.141 [DEBUG] [Thread-190076] [transport.py] [_log()] userauth is OK
2026-04-12T13:48:38.141 [DEBUG] [Thread-190076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:48:38.141 [DEBUG] [Thread-190076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:48:38.141 [DEBUG] [Thread-190076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:48:38.142 [DEBUG] [Thread-190076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:48:38.159 [INFO] [Thread-190076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:48:38.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:48:38.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:48:38.981 [DEBUG] [Thread-190076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:48:38.981 [DEBUG] [Thread-190076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:48:39.029 [DEBUG] [Thread-190076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:48:39.029 [DEBUG] [Thread-190076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:48:39.038 [DEBUG] [Thread-190076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:48:39.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:48:39.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:48:39.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:48:39.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:48:39.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:48:39.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:48:39.075 [DEBUG] [Thread-190076] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:48:47.418 [DEBUG] [Thread-190078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:49:02.469 [DEBUG] [Thread-190079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:49:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:49:09.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:49:09.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:49:10.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 48, 59), 3.14365, 81.7127, 0.0, 12.8995, 13.9749, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:49:10.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:48:59
2026-04-12T13:49:10.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:49:10.929 [DEBUG] [Thread-190080] [transport.py] [_log()] starting thread (client mode): 0xae5b5ba0
2026-04-12T13:49:10.930 [DEBUG] [Thread-190080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:49:10.954 [DEBUG] [Thread-190080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:49:10.954 [INFO] [Thread-190080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] client lang: <none>
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] server lang: <none>
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] kex follows: False
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:49:10.958 [DEBUG] [Thread-190080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:49:10.959 [DEBUG] [Thread-190080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:49:10.959 [DEBUG] [Thread-190080] [transport.py] [_log()] Compression: none
2026-04-12T13:49:10.959 [DEBUG] [Thread-190080] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:49:10.979 [DEBUG] [Thread-190080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:49:10.979 [DEBUG] [Thread-190080] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:49:10.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:49:10.980 [DEBUG] [Thread-190080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:49:10.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:49:10.982 [DEBUG] [Thread-190080] [transport.py] [_log()] userauth is OK
2026-04-12T13:49:10.982 [DEBUG] [Thread-190080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:49:10.983 [DEBUG] [Thread-190080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:49:10.983 [DEBUG] [Thread-190080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:49:10.983 [DEBUG] [Thread-190080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:49:11.008 [INFO] [Thread-190080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:49:11.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:49:11.678 [DEBUG] [Thread-190080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:49:11.678 [DEBUG] [Thread-190080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:49:11.679 [DEBUG] [Thread-190080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:49:11.720 [DEBUG] [Thread-190080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:49:11.720 [DEBUG] [Thread-190080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:49:11.724 [DEBUG] [Thread-190080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:49:11.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:49:11.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:49:11.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:49:11.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:49:11.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:49:11.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:49:11.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:49:11.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:49:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:49:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.492121 -999.00  +14.20   4.71     80  +10.80 1 2 1 2 1   888    0 4.13 43.48 ----- 4.7 4.7 283.0 14.9 20.9 -12.6 20.0 -11.1 19.7 -10.2 20.6 -11.5
2026-04-12T13:49:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:49:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:49:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.492121
2026-04-12T13:49:11.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:49:11.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:49:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:49:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:49:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:49:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:48:59', tmtdew=3.14365, humidity=81.7127, cloud=0.0, wind=12.8995, temperature=13.9749, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:48:39.254', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:49:11.752 [DEBUG] [Thread-190080] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:49:11.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:49:11.844 [DEBUG] [Thread-190083] [transport.py] [_log()] starting thread (client mode): 0xae5b5480
2026-04-12T13:49:11.845 [DEBUG] [Thread-190083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:49:11.859 [DEBUG] [Thread-190083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:49:11.859 [INFO] [Thread-190083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:49:11.867 [DEBUG] [Thread-190083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:49:11.867 [DEBUG] [Thread-190083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:49:11.867 [DEBUG] [Thread-190083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:49:11.867 [DEBUG] [Thread-190083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:11.867 [DEBUG] [Thread-190083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:11.867 [DEBUG] [Thread-190083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:11.867 [DEBUG] [Thread-190083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] client lang: <none>
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] server lang: <none>
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] kex follows: False
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] Compression: none
2026-04-12T13:49:11.868 [DEBUG] [Thread-190083] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:49:11.925 [DEBUG] [Thread-190083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:49:11.926 [DEBUG] [Thread-190083] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:49:11.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:49:11.927 [DEBUG] [Thread-190083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:49:11.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:49:11.985 [DEBUG] [Thread-190083] [transport.py] [_log()] userauth is OK
2026-04-12T13:49:11.986 [DEBUG] [Thread-190083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:49:11.986 [DEBUG] [Thread-190083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:49:11.986 [DEBUG] [Thread-190083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:49:11.986 [DEBUG] [Thread-190083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:49:12.004 [INFO] [Thread-190083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:49:12.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:49:12.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:49:12.810 [DEBUG] [Thread-190083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:49:12.810 [DEBUG] [Thread-190083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:49:12.858 [DEBUG] [Thread-190083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:49:12.858 [DEBUG] [Thread-190083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:49:12.868 [DEBUG] [Thread-190083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:49:12.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:49:12.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:49:12.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:49:12.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:49:12.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:49:12.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:49:12.905 [DEBUG] [Thread-190083] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:49:17.508 [DEBUG] [Thread-190085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:49:26.387 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:49:26.389 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:49:32.564 [DEBUG] [Thread-190086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:49:37.504 [DEBUG] [Thread-190087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:49:42.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:49:42.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:49:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:49:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 49, 34), 3.98634, 76.9836, 0.0, 17.9611, 14.9487, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:49:44.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:49:34
2026-04-12T13:49:44.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:49:44.765 [DEBUG] [Thread-190088] [transport.py] [_log()] starting thread (client mode): 0xb39c6e60
2026-04-12T13:49:44.765 [DEBUG] [Thread-190088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:49:44.785 [DEBUG] [Thread-190088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:49:44.785 [INFO] [Thread-190088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:49:44.789 [DEBUG] [Thread-190088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:49:44.789 [DEBUG] [Thread-190088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:49:44.789 [DEBUG] [Thread-190088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:49:44.789 [DEBUG] [Thread-190088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:44.789 [DEBUG] [Thread-190088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:44.789 [DEBUG] [Thread-190088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] client lang: <none>
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] server lang: <none>
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] kex follows: False
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:49:44.790 [DEBUG] [Thread-190088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:49:44.791 [DEBUG] [Thread-190088] [transport.py] [_log()] Compression: none
2026-04-12T13:49:44.791 [DEBUG] [Thread-190088] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:49:44.808 [DEBUG] [Thread-190088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:49:44.809 [DEBUG] [Thread-190088] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:49:44.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:49:44.810 [DEBUG] [Thread-190088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:49:44.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:49:44.813 [DEBUG] [Thread-190088] [transport.py] [_log()] userauth is OK
2026-04-12T13:49:44.813 [DEBUG] [Thread-190088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:49:44.813 [DEBUG] [Thread-190088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:49:44.813 [DEBUG] [Thread-190088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:49:44.813 [DEBUG] [Thread-190088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:49:44.841 [INFO] [Thread-190088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:49:44.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:49:45.502 [DEBUG] [Thread-190088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:49:45.502 [DEBUG] [Thread-190088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:49:45.503 [DEBUG] [Thread-190088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:49:45.543 [DEBUG] [Thread-190088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:49:45.543 [DEBUG] [Thread-190088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:49:45.546 [DEBUG] [Thread-190088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:49:45.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:49:45.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:49:45.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:49:45.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:49:45.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:49:45.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:49:45.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:49:45.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:49:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:49:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.492468 -999.00  +14.20  12.78     79  +10.60 1 2 1 1 1   888    0 4.18 44.93 ----- 11.1 12.8 259.5 15.4 20.9 -12.8 20.0 -11.3 19.8 -10.4 20.6 -12.1
2026-04-12T13:49:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:49:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:49:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.492468
2026-04-12T13:49:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:49:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:49:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:49:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:49:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:49:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:49:34', tmtdew=3.98634, humidity=76.9836, cloud=0.0, wind=17.9611, temperature=14.9487, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:49:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:49:45.571 [DEBUG] [Thread-190088] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:49:45.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:49:45.662 [DEBUG] [Thread-190091] [transport.py] [_log()] starting thread (client mode): 0xb39c7970
2026-04-12T13:49:45.662 [DEBUG] [Thread-190091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:49:45.677 [DEBUG] [Thread-190091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:49:45.677 [INFO] [Thread-190091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:49:45.685 [DEBUG] [Thread-190091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:49:45.685 [DEBUG] [Thread-190091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:49:45.685 [DEBUG] [Thread-190091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:49:45.685 [DEBUG] [Thread-190091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:45.685 [DEBUG] [Thread-190091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] client lang: <none>
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] server lang: <none>
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] kex follows: False
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:49:45.686 [DEBUG] [Thread-190091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:49:45.687 [DEBUG] [Thread-190091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:49:45.687 [DEBUG] [Thread-190091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:49:45.687 [DEBUG] [Thread-190091] [transport.py] [_log()] Compression: none
2026-04-12T13:49:45.687 [DEBUG] [Thread-190091] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:49:45.745 [DEBUG] [Thread-190091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:49:45.745 [DEBUG] [Thread-190091] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:49:45.746 [DEBUG] [Thread-190091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:49:45.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:49:45.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:49:45.801 [DEBUG] [Thread-190091] [transport.py] [_log()] userauth is OK
2026-04-12T13:49:45.801 [DEBUG] [Thread-190091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:49:45.801 [DEBUG] [Thread-190091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:49:45.801 [DEBUG] [Thread-190091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:49:45.801 [DEBUG] [Thread-190091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:49:45.820 [INFO] [Thread-190091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:49:45.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:49:45.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:49:46.675 [DEBUG] [Thread-190091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:49:46.675 [DEBUG] [Thread-190091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:49:46.723 [DEBUG] [Thread-190091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:49:46.723 [DEBUG] [Thread-190091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:49:46.732 [DEBUG] [Thread-190091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:49:46.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:49:46.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:49:46.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:49:46.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:49:46.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:49:46.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:49:46.765 [DEBUG] [Thread-190091] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:49:47.602 [DEBUG] [Thread-190093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:50:02.663 [DEBUG] [Thread-190094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:50:16.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:50:16.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:50:16.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:50:17.699 [DEBUG] [Thread-190095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:50:18.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 50, 9), 3.18431, 81.2624, 0.0, 16.587, 13.9914, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:50:18.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:50:09
2026-04-12T13:50:18.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:50:18.542 [DEBUG] [Thread-190096] [transport.py] [_log()] starting thread (client mode): 0xb0fe8760
2026-04-12T13:50:18.542 [DEBUG] [Thread-190096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:50:18.553 [DEBUG] [Thread-190096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:50:18.553 [INFO] [Thread-190096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:50:18.554 [DEBUG] [Thread-190096] [transport.py] [_log()] client lang: <none>
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] server lang: <none>
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] kex follows: False
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] Compression: none
2026-04-12T13:50:18.555 [DEBUG] [Thread-190096] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:50:18.563 [DEBUG] [Thread-190096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:50:18.563 [DEBUG] [Thread-190096] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:50:18.563 [DEBUG] [Thread-190096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:50:18.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:50:18.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:50:18.564 [DEBUG] [Thread-190096] [transport.py] [_log()] userauth is OK
2026-04-12T13:50:18.564 [DEBUG] [Thread-190096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:50:18.564 [DEBUG] [Thread-190096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:50:18.564 [DEBUG] [Thread-190096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:50:18.564 [DEBUG] [Thread-190096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:50:18.577 [INFO] [Thread-190096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:50:18.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:50:25.613 [DEBUG] [Thread-190096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:50:25.613 [DEBUG] [Thread-190096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:50:25.614 [DEBUG] [Thread-190096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:50:25.654 [DEBUG] [Thread-190096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:50:25.654 [DEBUG] [Thread-190096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:50:25.658 [DEBUG] [Thread-190096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:50:25.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:50:25.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:50:25.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:50:25.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:50:25.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:50:25.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:50:25.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:50:25.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:50:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:50:25.783 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T13:50:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:50:09', tmtdew=3.18431, humidity=81.2624, cloud=0.0, wind=16.587, temperature=13.9914, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:50:25.785 [DEBUG] [Thread-190096] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:50:25.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:50:26.548 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:50:26.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:50:32.735 [DEBUG] [Thread-190099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:50:37.547 [DEBUG] [Thread-190100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:50:47.788 [DEBUG] [Thread-190101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:51:02.825 [DEBUG] [Thread-190102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:51:17.862 [DEBUG] [Thread-190103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:51:26.697 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:51:26.699 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:51:32.900 [DEBUG] [Thread-190104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:51:37.575 [DEBUG] [Thread-190105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:51:47.936 [DEBUG] [Thread-190106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:52:02.968 [DEBUG] [Thread-190107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:52:18.003 [DEBUG] [Thread-190108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:52:26.838 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:52:26.839 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:52:33.040 [DEBUG] [Thread-190109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:52:37.611 [DEBUG] [Thread-190110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:52:40.831 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T13:52:48.076 [DEBUG] [Thread-190111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:03.113 [DEBUG] [Thread-190112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:53:10.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:53:10.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:53:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 52, 31), 3.33373, 80.2948, 0.0, 16.4099, 14.2232, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:53:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:52:31
2026-04-12T13:53:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:53:12.740 [DEBUG] [Thread-190113] [transport.py] [_log()] starting thread (client mode): 0xae50b2b0
2026-04-12T13:53:12.740 [DEBUG] [Thread-190113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:53:12.760 [DEBUG] [Thread-190113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:53:12.760 [INFO] [Thread-190113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] client lang: <none>
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] server lang: <none>
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] kex follows: False
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:53:12.762 [DEBUG] [Thread-190113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:53:12.763 [DEBUG] [Thread-190113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:53:12.763 [DEBUG] [Thread-190113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:53:12.763 [DEBUG] [Thread-190113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:53:12.763 [DEBUG] [Thread-190113] [transport.py] [_log()] Compression: none
2026-04-12T13:53:12.763 [DEBUG] [Thread-190113] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:53:12.778 [DEBUG] [Thread-190113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:53:12.778 [DEBUG] [Thread-190113] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:53:12.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:53:12.779 [DEBUG] [Thread-190113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:53:12.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:53:12.781 [DEBUG] [Thread-190113] [transport.py] [_log()] userauth is OK
2026-04-12T13:53:12.781 [DEBUG] [Thread-190113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:53:12.781 [DEBUG] [Thread-190113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:53:12.781 [DEBUG] [Thread-190113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:53:12.781 [DEBUG] [Thread-190113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:53:12.798 [INFO] [Thread-190113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:53:12.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:53:13.373 [DEBUG] [Thread-190113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:53:13.373 [DEBUG] [Thread-190113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:53:13.373 [DEBUG] [Thread-190113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:53:13.414 [DEBUG] [Thread-190113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:53:13.414 [DEBUG] [Thread-190113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:53:13.417 [DEBUG] [Thread-190113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:53:13.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:53:13.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:53:13.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:53:13.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:53:13.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:53:13.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:53:13.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:53:13.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:53:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:53:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.494899 -999.00  +14.30   8.87     82  +11.40 1 3 1 2 1   888    0 4.32 46.06 ----- 10.9 8.9 274.2 16.4 20.9 -11.1 20.0 -10.1 19.6 -9.1 20.5 -10.6
2026-04-12T13:53:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:53:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:53:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.494899
2026-04-12T13:53:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:53:13.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:53:13.443 [DEBUG] [Thread-190113] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:53:13.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:53:13.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:53:13.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:53:13.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:52:31', tmtdew=3.33373, humidity=80.2948, cloud=0.0, wind=16.4099, temperature=14.2232, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:52:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:53:13.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:53:13.537 [DEBUG] [Thread-190116] [transport.py] [_log()] starting thread (client mode): 0xb0f42440
2026-04-12T13:53:13.538 [DEBUG] [Thread-190116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:53:13.554 [DEBUG] [Thread-190116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:53:13.554 [INFO] [Thread-190116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:53:13.561 [DEBUG] [Thread-190116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:53:13.562 [DEBUG] [Thread-190116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:53:13.562 [DEBUG] [Thread-190116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:53:13.562 [DEBUG] [Thread-190116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:13.562 [DEBUG] [Thread-190116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] client lang: <none>
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] server lang: <none>
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] kex follows: False
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] Compression: none
2026-04-12T13:53:13.563 [DEBUG] [Thread-190116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:53:13.621 [DEBUG] [Thread-190116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:53:13.622 [DEBUG] [Thread-190116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:53:13.622 [DEBUG] [Thread-190116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:53:13.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:53:13.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:53:13.677 [DEBUG] [Thread-190116] [transport.py] [_log()] userauth is OK
2026-04-12T13:53:13.678 [DEBUG] [Thread-190116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:53:13.678 [DEBUG] [Thread-190116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:53:13.678 [DEBUG] [Thread-190116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:53:13.678 [DEBUG] [Thread-190116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:53:13.697 [INFO] [Thread-190116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:53:13.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:53:13.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:53:14.520 [DEBUG] [Thread-190116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:53:14.520 [DEBUG] [Thread-190116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:53:14.568 [DEBUG] [Thread-190116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:53:14.568 [DEBUG] [Thread-190116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:53:14.578 [DEBUG] [Thread-190116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:53:14.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:53:14.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:53:14.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:53:14.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:53:14.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:53:14.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:53:14.614 [DEBUG] [Thread-190116] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:53:18.150 [DEBUG] [Thread-190118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:26.992 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:26.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:33.197 [DEBUG] [Thread-190119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:37.646 [DEBUG] [Thread-190120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:53:44.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:53:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:53:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 53, 6), 3.34265, 80.2446, 0.0, 16.2864, 14.1896, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:53:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:53:06
2026-04-12T13:53:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:53:46.552 [DEBUG] [Thread-190121] [transport.py] [_log()] starting thread (client mode): 0xae535900
2026-04-12T13:53:46.552 [DEBUG] [Thread-190121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:53:46.566 [DEBUG] [Thread-190121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:53:46.567 [INFO] [Thread-190121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] client lang: <none>
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] server lang: <none>
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] kex follows: False
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] Compression: none
2026-04-12T13:53:46.568 [DEBUG] [Thread-190121] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:53:46.585 [DEBUG] [Thread-190121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:53:46.586 [DEBUG] [Thread-190121] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:53:46.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:53:46.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:53:46.587 [DEBUG] [Thread-190121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:53:46.588 [DEBUG] [Thread-190121] [transport.py] [_log()] userauth is OK
2026-04-12T13:53:46.588 [DEBUG] [Thread-190121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:53:46.588 [DEBUG] [Thread-190121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:53:46.588 [DEBUG] [Thread-190121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:53:46.588 [DEBUG] [Thread-190121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:53:46.616 [INFO] [Thread-190121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:53:46.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:53:47.180 [DEBUG] [Thread-190121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:53:47.180 [DEBUG] [Thread-190121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:53:47.181 [DEBUG] [Thread-190121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:53:47.222 [DEBUG] [Thread-190121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:53:47.222 [DEBUG] [Thread-190121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:53:47.226 [DEBUG] [Thread-190121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:53:47.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:53:47.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:53:47.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:53:47.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:53:47.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:53:47.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:53:47.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:53:47.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:53:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:53:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.495593 -999.00  +14.70   7.86     81  +11.60 1 3 1 2 1   888    0 4.32 45.13 ----- 12.3 7.9 236.7 13.8 21.0 -11.5 20.1 -10.1 19.9 -9.3 20.7 -10.4
2026-04-12T13:53:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:53:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:53:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.495593
2026-04-12T13:53:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:53:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:53:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:53:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:53:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:53:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:53:06', tmtdew=3.34265, humidity=80.2446, cloud=0.0, wind=16.2864, temperature=14.1896, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:53:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:53:47.256 [DEBUG] [Thread-190121] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:53:47.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:53:47.357 [DEBUG] [Thread-190124] [transport.py] [_log()] starting thread (client mode): 0xae536740
2026-04-12T13:53:47.357 [DEBUG] [Thread-190124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:53:47.372 [DEBUG] [Thread-190124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:53:47.372 [INFO] [Thread-190124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:53:47.380 [DEBUG] [Thread-190124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] client lang: <none>
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] server lang: <none>
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] kex follows: False
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:53:47.381 [DEBUG] [Thread-190124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:53:47.382 [DEBUG] [Thread-190124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:53:47.382 [DEBUG] [Thread-190124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:53:47.382 [DEBUG] [Thread-190124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:53:47.382 [DEBUG] [Thread-190124] [transport.py] [_log()] Compression: none
2026-04-12T13:53:47.382 [DEBUG] [Thread-190124] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:53:47.438 [DEBUG] [Thread-190124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:53:47.438 [DEBUG] [Thread-190124] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:53:47.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:53:47.439 [DEBUG] [Thread-190124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:53:47.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:53:47.497 [DEBUG] [Thread-190124] [transport.py] [_log()] userauth is OK
2026-04-12T13:53:47.498 [DEBUG] [Thread-190124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:53:47.498 [DEBUG] [Thread-190124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:53:47.498 [DEBUG] [Thread-190124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:53:47.498 [DEBUG] [Thread-190124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:53:47.518 [INFO] [Thread-190124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:53:47.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:53:47.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:53:48.234 [DEBUG] [Thread-190126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:53:48.377 [DEBUG] [Thread-190124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:53:48.377 [DEBUG] [Thread-190124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:53:48.425 [DEBUG] [Thread-190124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:53:48.425 [DEBUG] [Thread-190124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:53:48.434 [DEBUG] [Thread-190124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:53:48.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:53:48.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:53:48.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:53:48.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:53:48.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:53:48.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:53:48.474 [DEBUG] [Thread-190124] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:54:03.285 [DEBUG] [Thread-190127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:54:18.320 [DEBUG] [Thread-190128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:54:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:54:18.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:54:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:54:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 53, 42), 4.38577, 74.9587, 0.0, 16.4441, 14.9133, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:54:19.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:53:42
2026-04-12T13:54:20.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:54:20.361 [DEBUG] [Thread-190129] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-12T13:54:20.361 [DEBUG] [Thread-190129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:54:20.378 [DEBUG] [Thread-190129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:54:20.378 [INFO] [Thread-190129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:54:20.380 [DEBUG] [Thread-190129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] client lang: <none>
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] server lang: <none>
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] kex follows: False
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] Compression: none
2026-04-12T13:54:20.381 [DEBUG] [Thread-190129] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:54:20.389 [DEBUG] [Thread-190129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:54:20.389 [DEBUG] [Thread-190129] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:54:20.389 [DEBUG] [Thread-190129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:54:20.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:54:20.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:54:20.390 [DEBUG] [Thread-190129] [transport.py] [_log()] userauth is OK
2026-04-12T13:54:20.390 [DEBUG] [Thread-190129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:54:20.390 [DEBUG] [Thread-190129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:54:20.390 [DEBUG] [Thread-190129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:54:20.390 [DEBUG] [Thread-190129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:54:20.402 [INFO] [Thread-190129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:54:20.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:54:21.038 [DEBUG] [Thread-190129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:54:21.038 [DEBUG] [Thread-190129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:54:21.039 [DEBUG] [Thread-190129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:54:21.079 [DEBUG] [Thread-190129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:54:21.079 [DEBUG] [Thread-190129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:54:21.083 [DEBUG] [Thread-190129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:54:21.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:54:21.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:54:21.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:54:21.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:54:21.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:54:21.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:54:21.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:54:21.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:54:21.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:54:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.495940 -999.00  +14.70   8.42     78  +10.90 1 3 1 1 1   888    0 4.35 44.97 ----- 6.9 8.4 222.9 19.0 20.9 -11.5 20.1 -9.9 19.9 -9.8 20.7 -11.2
2026-04-12T13:54:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:54:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:54:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.495940
2026-04-12T13:54:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:54:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:54:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:54:21.104 [DEBUG] [Thread-190129] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:54:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:54:21.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:54:21.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:53:42', tmtdew=4.38577, humidity=74.9587, cloud=0.0, wind=16.4441, temperature=14.9133, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:54:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:54:21.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:54:21.199 [DEBUG] [Thread-190132] [transport.py] [_log()] starting thread (client mode): 0xb39c79a0
2026-04-12T13:54:21.199 [DEBUG] [Thread-190132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:54:21.214 [DEBUG] [Thread-190132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:54:21.215 [INFO] [Thread-190132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:54:21.222 [DEBUG] [Thread-190132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:54:21.222 [DEBUG] [Thread-190132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:54:21.222 [DEBUG] [Thread-190132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] client lang: <none>
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] server lang: <none>
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] kex follows: False
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:54:21.223 [DEBUG] [Thread-190132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:54:21.224 [DEBUG] [Thread-190132] [transport.py] [_log()] Compression: none
2026-04-12T13:54:21.224 [DEBUG] [Thread-190132] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:54:21.282 [DEBUG] [Thread-190132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:54:21.282 [DEBUG] [Thread-190132] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:54:21.283 [DEBUG] [Thread-190132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:54:21.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:54:21.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:54:21.341 [DEBUG] [Thread-190132] [transport.py] [_log()] userauth is OK
2026-04-12T13:54:21.342 [DEBUG] [Thread-190132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:54:21.342 [DEBUG] [Thread-190132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:54:21.342 [DEBUG] [Thread-190132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:54:21.342 [DEBUG] [Thread-190132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:54:21.367 [INFO] [Thread-190132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:54:21.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:54:21.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:54:22.179 [DEBUG] [Thread-190132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:54:22.179 [DEBUG] [Thread-190132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:54:22.227 [DEBUG] [Thread-190132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:54:22.227 [DEBUG] [Thread-190132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:54:22.237 [DEBUG] [Thread-190132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:54:22.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:54:22.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:54:22.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:54:22.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:54:22.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:54:22.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:54:22.274 [DEBUG] [Thread-190132] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:54:27.135 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:54:27.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:54:33.362 [DEBUG] [Thread-190134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:54:37.690 [DEBUG] [Thread-190135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:54:48.419 [DEBUG] [Thread-190136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:54:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:54:52.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:54:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:54:53.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 54, 18), 3.19455, 80.9762, 0.0, 14.8752, 14.5229, 0, 1, 0, 2, 0, 0),)
2026-04-12T13:54:53.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:54:18
2026-04-12T13:54:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:54:54.130 [DEBUG] [Thread-190137] [transport.py] [_log()] starting thread (client mode): 0xae537cd0
2026-04-12T13:54:54.130 [DEBUG] [Thread-190137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:54:54.150 [DEBUG] [Thread-190137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:54:54.150 [INFO] [Thread-190137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] client lang: <none>
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] server lang: <none>
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] kex follows: False
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:54:54.154 [DEBUG] [Thread-190137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:54:54.155 [DEBUG] [Thread-190137] [transport.py] [_log()] Compression: none
2026-04-12T13:54:54.155 [DEBUG] [Thread-190137] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:54:54.164 [DEBUG] [Thread-190137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:54:54.165 [DEBUG] [Thread-190137] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:54:54.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:54:54.166 [DEBUG] [Thread-190137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:54:54.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:54:54.168 [DEBUG] [Thread-190137] [transport.py] [_log()] userauth is OK
2026-04-12T13:54:54.168 [DEBUG] [Thread-190137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:54:54.168 [DEBUG] [Thread-190137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:54:54.168 [DEBUG] [Thread-190137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:54:54.168 [DEBUG] [Thread-190137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:54:54.191 [INFO] [Thread-190137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:54:54.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:54:54.851 [DEBUG] [Thread-190137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:54:54.852 [DEBUG] [Thread-190137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:54:54.852 [DEBUG] [Thread-190137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:54:54.893 [DEBUG] [Thread-190137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:54:54.893 [DEBUG] [Thread-190137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:54:54.897 [DEBUG] [Thread-190137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:54:54.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:54:54.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:54:54.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:54:54.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:54:54.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:54:54.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:54:54.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:54:54.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.496287 -999.00  +14.60   7.22     78  +10.90 1 3 1 1 1   888    0 4.39 47.71 ----- 9.1 7.2 262.0 11.3 21.0 -11.7 20.1 -10.0 20.0 -9.1 20.9 -10.7
2026-04-12T13:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.496287
2026-04-12T13:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:54:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:54:18', tmtdew=3.19455, humidity=80.9762, cloud=0.0, wind=14.8752, temperature=14.5229, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:54:39.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:54:54.925 [DEBUG] [Thread-190137] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:54:55.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:54:55.018 [DEBUG] [Thread-190140] [transport.py] [_log()] starting thread (client mode): 0xb0f422c0
2026-04-12T13:54:55.018 [DEBUG] [Thread-190140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:54:55.033 [DEBUG] [Thread-190140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:54:55.033 [INFO] [Thread-190140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:54:55.040 [DEBUG] [Thread-190140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] client lang: <none>
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] server lang: <none>
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] kex follows: False
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] Compression: none
2026-04-12T13:54:55.041 [DEBUG] [Thread-190140] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:54:55.102 [DEBUG] [Thread-190140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:54:55.102 [DEBUG] [Thread-190140] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:54:55.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:54:55.104 [DEBUG] [Thread-190140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:54:55.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:54:55.161 [DEBUG] [Thread-190140] [transport.py] [_log()] userauth is OK
2026-04-12T13:54:55.161 [DEBUG] [Thread-190140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:54:55.162 [DEBUG] [Thread-190140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:54:55.162 [DEBUG] [Thread-190140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:54:55.162 [DEBUG] [Thread-190140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:54:55.181 [INFO] [Thread-190140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:54:55.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:54:55.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:54:55.997 [DEBUG] [Thread-190140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:54:55.997 [DEBUG] [Thread-190140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:54:56.044 [DEBUG] [Thread-190140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:54:56.044 [DEBUG] [Thread-190140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:54:56.053 [DEBUG] [Thread-190140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:54:56.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:54:56.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:54:56.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:54:56.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:54:56.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:54:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:54:56.088 [DEBUG] [Thread-190140] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:55:03.455 [DEBUG] [Thread-190142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:55:18.506 [DEBUG] [Thread-190143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:55:26.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:55:26.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:55:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:55:27.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:55:27.297 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:55:27.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 54, 53), 4.29663, 75.4213, 0.0, 15.7032, 15.0115, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:55:27.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:54:53
2026-04-12T13:55:27.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:55:27.938 [DEBUG] [Thread-190144] [transport.py] [_log()] starting thread (client mode): 0xae5b4190
2026-04-12T13:55:27.938 [DEBUG] [Thread-190144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:55:27.960 [DEBUG] [Thread-190144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:55:27.960 [INFO] [Thread-190144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] client lang: <none>
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] server lang: <none>
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] kex follows: False
2026-04-12T13:55:27.963 [DEBUG] [Thread-190144] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:55:27.964 [DEBUG] [Thread-190144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:55:27.964 [DEBUG] [Thread-190144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:55:27.964 [DEBUG] [Thread-190144] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:55:27.964 [DEBUG] [Thread-190144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:55:27.964 [DEBUG] [Thread-190144] [transport.py] [_log()] Compression: none
2026-04-12T13:55:27.964 [DEBUG] [Thread-190144] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:55:27.981 [DEBUG] [Thread-190144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:55:27.981 [DEBUG] [Thread-190144] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:55:27.982 [DEBUG] [Thread-190144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:55:27.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:55:27.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:55:27.983 [DEBUG] [Thread-190144] [transport.py] [_log()] userauth is OK
2026-04-12T13:55:27.984 [DEBUG] [Thread-190144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:55:27.984 [DEBUG] [Thread-190144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:55:27.984 [DEBUG] [Thread-190144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:55:27.984 [DEBUG] [Thread-190144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:55:28.008 [INFO] [Thread-190144] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:55:28.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:55:33.546 [DEBUG] [Thread-190146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:55:33.835 [DEBUG] [Thread-190144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:55:33.836 [DEBUG] [Thread-190144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:55:33.836 [DEBUG] [Thread-190144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:55:33.876 [DEBUG] [Thread-190144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:55:33.876 [DEBUG] [Thread-190144] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:55:33.880 [DEBUG] [Thread-190144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:55:33.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:55:33.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:55:33.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:55:33.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:55:33.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:55:33.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:55:33.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:55:33.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:55:33.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:55:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.496287 -999.00  +14.60   7.22     78  +10.90 1 3 1 1 1   888    0 4.39 47.71 ----- 9.1 7.2 262.0 11.3 21.0 -11.7 20.1 -10.0 20.0 -9.1 20.9 -10.7
2026-04-12T13:55:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:55:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:55:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.496287
2026-04-12T13:55:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:55:33.914 [DEBUG] [Thread-190144] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:55:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:55:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:55:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:55:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:55:33.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:54:53', tmtdew=4.29663, humidity=75.4213, cloud=0.0, wind=15.7032, temperature=15.0115, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:54:39.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:55:34.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:55:34.009 [DEBUG] [Thread-190148] [transport.py] [_log()] starting thread (client mode): 0xae536b60
2026-04-12T13:55:34.010 [DEBUG] [Thread-190148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:55:34.024 [DEBUG] [Thread-190148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:55:34.024 [INFO] [Thread-190148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:55:34.032 [DEBUG] [Thread-190148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] client lang: <none>
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] server lang: <none>
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] kex follows: False
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] Compression: none
2026-04-12T13:55:34.033 [DEBUG] [Thread-190148] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:55:34.088 [DEBUG] [Thread-190148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:55:34.088 [DEBUG] [Thread-190148] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:55:34.088 [DEBUG] [Thread-190148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:55:34.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:55:34.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:55:34.146 [DEBUG] [Thread-190148] [transport.py] [_log()] userauth is OK
2026-04-12T13:55:34.146 [DEBUG] [Thread-190148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:55:34.146 [DEBUG] [Thread-190148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:55:34.146 [DEBUG] [Thread-190148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:55:34.146 [DEBUG] [Thread-190148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:55:34.160 [INFO] [Thread-190148] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:55:34.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:55:34.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:55:34.977 [DEBUG] [Thread-190148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:55:34.978 [DEBUG] [Thread-190148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:55:35.025 [DEBUG] [Thread-190148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:55:35.026 [DEBUG] [Thread-190148] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:55:35.035 [DEBUG] [Thread-190148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:55:35.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:55:35.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:55:35.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:55:35.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:55:35.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:55:35.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:55:35.074 [DEBUG] [Thread-190148] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:55:37.757 [DEBUG] [Thread-190150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:55:48.582 [DEBUG] [Thread-190151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:56:03.640 [DEBUG] [Thread-190152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:56:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:56:05.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:56:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:56:06.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 55, 28), 3.47146, 79.5946, 0.0, 11.1517, 14.4557, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:56:06.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:55:28
2026-04-12T13:56:06.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:56:07.049 [DEBUG] [Thread-190153] [transport.py] [_log()] starting thread (client mode): 0xb39c7970
2026-04-12T13:56:07.049 [DEBUG] [Thread-190153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:56:07.069 [DEBUG] [Thread-190153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:56:07.070 [INFO] [Thread-190153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] client lang: <none>
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] server lang: <none>
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] kex follows: False
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] Compression: none
2026-04-12T13:56:07.073 [DEBUG] [Thread-190153] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:56:07.089 [DEBUG] [Thread-190153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:56:07.090 [DEBUG] [Thread-190153] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:56:07.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:56:07.091 [DEBUG] [Thread-190153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:56:07.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:56:07.093 [DEBUG] [Thread-190153] [transport.py] [_log()] userauth is OK
2026-04-12T13:56:07.093 [DEBUG] [Thread-190153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:56:07.093 [DEBUG] [Thread-190153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:56:07.093 [DEBUG] [Thread-190153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:56:07.093 [DEBUG] [Thread-190153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:56:07.110 [INFO] [Thread-190153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:56:07.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:56:07.894 [DEBUG] [Thread-190153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:56:07.894 [DEBUG] [Thread-190153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:56:07.895 [DEBUG] [Thread-190153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:56:07.935 [DEBUG] [Thread-190153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:56:07.935 [DEBUG] [Thread-190153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:56:07.938 [DEBUG] [Thread-190153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:56:07.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:56:07.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:56:07.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:56:07.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:56:07.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:56:07.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:56:07.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:56:07.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:56:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:56:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.496982 -999.00  +14.70  12.79     80  +11.40 1 3 1 2 1   888    0 4.41 46.16 ----- 11.7 12.8 227.8 15.4 21.0 -11.2 20.2 -10.2 20.1 -9.0 20.9 -11.0
2026-04-12T13:56:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:56:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:56:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.496982
2026-04-12T13:56:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:56:07.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:56:07.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:56:07.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:56:07.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:56:07.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:55:28', tmtdew=3.47146, humidity=79.5946, cloud=0.0, wind=11.1517, temperature=14.4557, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:55:39.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:56:07.960 [DEBUG] [Thread-190153] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:56:08.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:56:08.057 [DEBUG] [Thread-190156] [transport.py] [_log()] starting thread (client mode): 0xae508130
2026-04-12T13:56:08.057 [DEBUG] [Thread-190156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:56:08.072 [DEBUG] [Thread-190156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:56:08.072 [INFO] [Thread-190156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:56:08.079 [DEBUG] [Thread-190156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:56:08.079 [DEBUG] [Thread-190156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:56:08.079 [DEBUG] [Thread-190156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:56:08.079 [DEBUG] [Thread-190156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] client lang: <none>
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] server lang: <none>
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] kex follows: False
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:56:08.080 [DEBUG] [Thread-190156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:56:08.081 [DEBUG] [Thread-190156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:56:08.081 [DEBUG] [Thread-190156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:56:08.081 [DEBUG] [Thread-190156] [transport.py] [_log()] Compression: none
2026-04-12T13:56:08.081 [DEBUG] [Thread-190156] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:56:08.137 [DEBUG] [Thread-190156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:56:08.137 [DEBUG] [Thread-190156] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:56:08.137 [DEBUG] [Thread-190156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:56:08.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:56:08.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:56:08.192 [DEBUG] [Thread-190156] [transport.py] [_log()] userauth is OK
2026-04-12T13:56:08.193 [DEBUG] [Thread-190156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:56:08.193 [DEBUG] [Thread-190156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:56:08.193 [DEBUG] [Thread-190156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:56:08.193 [DEBUG] [Thread-190156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:56:08.213 [INFO] [Thread-190156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:56:08.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:56:08.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:56:09.014 [DEBUG] [Thread-190156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:56:09.014 [DEBUG] [Thread-190156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:56:09.062 [DEBUG] [Thread-190156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:56:09.062 [DEBUG] [Thread-190156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:56:09.071 [DEBUG] [Thread-190156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:56:09.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:56:09.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:56:09.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
2026-04-12T13:56:09.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:56:09.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:56:09.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:56:09.105 [DEBUG] [Thread-190156] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:56:18.677 [DEBUG] [Thread-190158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:56:27.445 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:56:27.446 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:56:33.728 [DEBUG] [Thread-190159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:56:37.806 [DEBUG] [Thread-190160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:56:39.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:56:39.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:56:39.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:56:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 56, 4), 3.53236, 79.2796, 0.0, 10.7107, 14.3894, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:56:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:56:04
2026-04-12T13:56:40.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:56:41.029 [DEBUG] [Thread-190161] [transport.py] [_log()] starting thread (client mode): 0xae50afe0
2026-04-12T13:56:41.029 [DEBUG] [Thread-190161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:56:41.040 [DEBUG] [Thread-190161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:56:41.040 [INFO] [Thread-190161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:56:41.042 [DEBUG] [Thread-190161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:56:41.042 [DEBUG] [Thread-190161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:56:41.042 [DEBUG] [Thread-190161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:56:41.042 [DEBUG] [Thread-190161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] client lang: <none>
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] server lang: <none>
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] kex follows: False
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] Compression: none
2026-04-12T13:56:41.043 [DEBUG] [Thread-190161] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:56:41.054 [DEBUG] [Thread-190161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:56:41.054 [DEBUG] [Thread-190161] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:56:41.055 [DEBUG] [Thread-190161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:56:41.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:56:41.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:56:41.057 [DEBUG] [Thread-190161] [transport.py] [_log()] userauth is OK
2026-04-12T13:56:41.057 [DEBUG] [Thread-190161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:56:41.057 [DEBUG] [Thread-190161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:56:41.057 [DEBUG] [Thread-190161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:56:41.057 [DEBUG] [Thread-190161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:56:41.076 [INFO] [Thread-190161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:56:41.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:56:41.609 [DEBUG] [Thread-190161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:56:41.610 [DEBUG] [Thread-190161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:56:41.610 [DEBUG] [Thread-190161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:56:41.651 [DEBUG] [Thread-190161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:56:41.651 [DEBUG] [Thread-190161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:56:41.653 [DEBUG] [Thread-190161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:56:41.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:56:41.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:56:41.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:56:41.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:56:41.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:56:41.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:56:41.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:56:41.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:56:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:56:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.497329 -999.00  +14.70  13.28     80  +11.40 1 2 1 2 1   888    0 4.49 47.38 ----- 14.9 13.3 260.6 17.7 20.9 -11.7 20.2 -10.8 20.1 -9.2 20.9 -11.0
2026-04-12T13:56:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:56:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:56:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.497329
2026-04-12T13:56:41.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:56:41.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:56:41.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:56:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:56:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:56:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:56:04', tmtdew=3.53236, humidity=79.2796, cloud=0.0, wind=10.7107, temperature=14.3894, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:56:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:56:41.672 [DEBUG] [Thread-190161] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:56:41.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:56:41.766 [DEBUG] [Thread-190164] [transport.py] [_log()] starting thread (client mode): 0xae50ae00
2026-04-12T13:56:41.766 [DEBUG] [Thread-190164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:56:41.781 [DEBUG] [Thread-190164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:56:41.781 [INFO] [Thread-190164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:56:41.789 [DEBUG] [Thread-190164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:56:41.789 [DEBUG] [Thread-190164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:56:41.789 [DEBUG] [Thread-190164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:56:41.789 [DEBUG] [Thread-190164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:41.789 [DEBUG] [Thread-190164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:56:41.789 [DEBUG] [Thread-190164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:41.789 [DEBUG] [Thread-190164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] client lang: <none>
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] server lang: <none>
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] kex follows: False
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] Compression: none
2026-04-12T13:56:41.790 [DEBUG] [Thread-190164] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:56:41.849 [DEBUG] [Thread-190164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:56:41.850 [DEBUG] [Thread-190164] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:56:41.850 [DEBUG] [Thread-190164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:56:41.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:56:41.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:56:41.907 [DEBUG] [Thread-190164] [transport.py] [_log()] userauth is OK
2026-04-12T13:56:41.907 [DEBUG] [Thread-190164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:56:41.908 [DEBUG] [Thread-190164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:56:41.908 [DEBUG] [Thread-190164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:56:41.908 [DEBUG] [Thread-190164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:56:41.927 [INFO] [Thread-190164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:56:41.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:56:41.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:56:42.745 [DEBUG] [Thread-190164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:56:42.745 [DEBUG] [Thread-190164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:56:42.793 [DEBUG] [Thread-190164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:56:42.793 [DEBUG] [Thread-190164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:56:42.802 [DEBUG] [Thread-190164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:56:42.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:56:42.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:56:42.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:56:42.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:56:42.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:56:42.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:56:42.839 [DEBUG] [Thread-190164] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:56:48.761 [DEBUG] [Thread-190166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:03.823 [DEBUG] [Thread-190167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:57:12.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:57:12.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:57:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 56, 39), 4.42484, 74.7245, 0.0, 14.2567, 14.6795, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:57:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:56:39
2026-04-12T13:57:14.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:57:14.676 [DEBUG] [Thread-190168] [transport.py] [_log()] starting thread (client mode): 0xb0f56f20
2026-04-12T13:57:14.677 [DEBUG] [Thread-190168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:57:14.695 [DEBUG] [Thread-190168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:57:14.695 [INFO] [Thread-190168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] client lang: <none>
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] server lang: <none>
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] kex follows: False
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:57:14.698 [DEBUG] [Thread-190168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:57:14.699 [DEBUG] [Thread-190168] [transport.py] [_log()] Compression: none
2026-04-12T13:57:14.699 [DEBUG] [Thread-190168] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:57:14.706 [DEBUG] [Thread-190168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:57:14.707 [DEBUG] [Thread-190168] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:57:14.707 [DEBUG] [Thread-190168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:57:14.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:57:14.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:57:14.709 [DEBUG] [Thread-190168] [transport.py] [_log()] userauth is OK
2026-04-12T13:57:14.709 [DEBUG] [Thread-190168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:57:14.709 [DEBUG] [Thread-190168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:57:14.709 [DEBUG] [Thread-190168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:57:14.709 [DEBUG] [Thread-190168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:57:14.727 [INFO] [Thread-190168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:57:14.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:57:15.321 [DEBUG] [Thread-190168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:57:15.321 [DEBUG] [Thread-190168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:57:15.322 [DEBUG] [Thread-190168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:57:15.362 [DEBUG] [Thread-190168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:57:15.362 [DEBUG] [Thread-190168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:57:15.365 [DEBUG] [Thread-190168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:57:15.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:57:15.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:57:15.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:57:15.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:57:15.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:57:15.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:57:15.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:57:15.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:57:15.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:57:15.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.498023 -999.00  +14.40  12.59     80  +11.10 1 2 1 2 1   888    0 4.59 50.21 ----- 12.4 12.6 256.4 17.6 20.9 -11.8 20.2 -10.9 20.0 -9.8 20.8 -10.9
2026-04-12T13:57:15.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:57:15.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:57:15.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.498023
2026-04-12T13:57:15.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:57:15.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:57:15.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:57:15.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:57:15.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:57:15.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:56:39', tmtdew=4.42484, humidity=74.7245, cloud=0.0, wind=14.2567, temperature=14.6795, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:57:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:57:15.404 [DEBUG] [Thread-190168] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:57:15.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:57:15.497 [DEBUG] [Thread-190171] [transport.py] [_log()] starting thread (client mode): 0xae52e710
2026-04-12T13:57:15.497 [DEBUG] [Thread-190171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:57:15.512 [DEBUG] [Thread-190171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:57:15.512 [INFO] [Thread-190171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:57:15.519 [DEBUG] [Thread-190171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:57:15.519 [DEBUG] [Thread-190171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] client lang: <none>
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] server lang: <none>
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] kex follows: False
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] Compression: none
2026-04-12T13:57:15.520 [DEBUG] [Thread-190171] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:57:15.577 [DEBUG] [Thread-190171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:57:15.577 [DEBUG] [Thread-190171] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:57:15.578 [DEBUG] [Thread-190171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:57:15.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:57:15.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:57:15.633 [DEBUG] [Thread-190171] [transport.py] [_log()] userauth is OK
2026-04-12T13:57:15.633 [DEBUG] [Thread-190171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:57:15.633 [DEBUG] [Thread-190171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:57:15.633 [DEBUG] [Thread-190171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:57:15.633 [DEBUG] [Thread-190171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:57:15.655 [INFO] [Thread-190171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:57:15.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:57:15.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:57:16.464 [DEBUG] [Thread-190171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:57:16.464 [DEBUG] [Thread-190171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:57:16.512 [DEBUG] [Thread-190171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:57:16.512 [DEBUG] [Thread-190171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:57:16.520 [DEBUG] [Thread-190171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:57:16.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:57:16.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:57:16.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:57:16.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:57:16.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:57:16.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:57:16.552 [DEBUG] [Thread-190171] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:57:18.860 [DEBUG] [Thread-190173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:27.590 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:27.592 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:33.927 [DEBUG] [Thread-190174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:37.875 [DEBUG] [Thread-190175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:46.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:57:46.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:57:46.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:57:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 57, 15), 3.45061, 79.6908, 0.0, 17.9446, 14.4224, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:57:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:57:15
2026-04-12T13:57:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:57:48.388 [DEBUG] [Thread-190176] [transport.py] [_log()] starting thread (client mode): 0xae52c070
2026-04-12T13:57:48.388 [DEBUG] [Thread-190176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:57:48.408 [DEBUG] [Thread-190176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:57:48.408 [INFO] [Thread-190176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] client lang: <none>
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] server lang: <none>
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] kex follows: False
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:57:48.410 [DEBUG] [Thread-190176] [transport.py] [_log()] Compression: none
2026-04-12T13:57:48.411 [DEBUG] [Thread-190176] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:57:48.423 [DEBUG] [Thread-190176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:57:48.423 [DEBUG] [Thread-190176] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:57:48.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:57:48.424 [DEBUG] [Thread-190176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:57:48.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:57:48.426 [DEBUG] [Thread-190176] [transport.py] [_log()] userauth is OK
2026-04-12T13:57:48.427 [DEBUG] [Thread-190176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:57:48.427 [DEBUG] [Thread-190176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:57:48.427 [DEBUG] [Thread-190176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:57:48.427 [DEBUG] [Thread-190176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:57:48.443 [INFO] [Thread-190176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:57:48.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:57:48.968 [DEBUG] [Thread-190178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:57:49.042 [DEBUG] [Thread-190176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:57:49.042 [DEBUG] [Thread-190176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:57:49.043 [DEBUG] [Thread-190176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:57:49.083 [DEBUG] [Thread-190176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:57:49.084 [DEBUG] [Thread-190176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:57:49.086 [DEBUG] [Thread-190176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:57:49.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:57:49.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:57:49.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:57:49.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:57:49.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:57:49.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:57:49.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:57:49.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:57:49.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:57:49.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.498371 -999.00  +14.60  10.04     81  +11.40 1 3 1 2 1   888    0 4.39 45.03 ----- 9.6 10.0 281.4 12.8 21.1 -11.7 20.3 -10.3 20.0 -9.6 20.9 -10.2
2026-04-12T13:57:49.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:57:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:57:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.498371
2026-04-12T13:57:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:57:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:57:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:57:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:57:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:57:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:57:15', tmtdew=3.45061, humidity=79.6908, cloud=0.0, wind=17.9446, temperature=14.4224, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:57:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:57:49.109 [DEBUG] [Thread-190176] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:57:49.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:57:49.207 [DEBUG] [Thread-190180] [transport.py] [_log()] starting thread (client mode): 0xb0f54970
2026-04-12T13:57:49.207 [DEBUG] [Thread-190180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:57:49.222 [DEBUG] [Thread-190180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:57:49.222 [INFO] [Thread-190180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] client lang: <none>
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] server lang: <none>
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] kex follows: False
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:57:49.230 [DEBUG] [Thread-190180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:57:49.231 [DEBUG] [Thread-190180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:57:49.231 [DEBUG] [Thread-190180] [transport.py] [_log()] Compression: none
2026-04-12T13:57:49.231 [DEBUG] [Thread-190180] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:57:49.289 [DEBUG] [Thread-190180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:57:49.290 [DEBUG] [Thread-190180] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:57:49.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:57:49.291 [DEBUG] [Thread-190180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:57:49.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:57:49.349 [DEBUG] [Thread-190180] [transport.py] [_log()] userauth is OK
2026-04-12T13:57:49.349 [DEBUG] [Thread-190180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:57:49.350 [DEBUG] [Thread-190180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:57:49.350 [DEBUG] [Thread-190180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:57:49.350 [DEBUG] [Thread-190180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:57:49.369 [INFO] [Thread-190180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:57:49.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:57:49.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:57:50.188 [DEBUG] [Thread-190180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:57:50.188 [DEBUG] [Thread-190180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:57:50.236 [DEBUG] [Thread-190180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:57:50.236 [DEBUG] [Thread-190180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:57:50.246 [DEBUG] [Thread-190180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:57:50.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:57:50.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:57:50.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:57:50.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:57:50.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:57:50.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:57:50.283 [DEBUG] [Thread-190180] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:58:04.006 [DEBUG] [Thread-190182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:58:19.058 [DEBUG] [Thread-190183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:58:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:58:20.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:58:20.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:58:21.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 57, 50), 4.03423, 76.7795, 0.0, 20.0426, 15.2095, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:58:21.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:57:50
2026-04-12T13:58:21.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:58:22.156 [DEBUG] [Thread-190184] [transport.py] [_log()] starting thread (client mode): 0xb0f57160
2026-04-12T13:58:22.157 [DEBUG] [Thread-190184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:58:22.176 [DEBUG] [Thread-190184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:58:22.176 [INFO] [Thread-190184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:58:22.177 [DEBUG] [Thread-190184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] client lang: <none>
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] server lang: <none>
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] kex follows: False
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:58:22.178 [DEBUG] [Thread-190184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:58:22.179 [DEBUG] [Thread-190184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:58:22.179 [DEBUG] [Thread-190184] [transport.py] [_log()] Compression: none
2026-04-12T13:58:22.179 [DEBUG] [Thread-190184] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:58:22.192 [DEBUG] [Thread-190184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:58:22.193 [DEBUG] [Thread-190184] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:58:22.194 [DEBUG] [Thread-190184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:58:22.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:58:22.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:58:22.196 [DEBUG] [Thread-190184] [transport.py] [_log()] userauth is OK
2026-04-12T13:58:22.197 [DEBUG] [Thread-190184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:58:22.197 [DEBUG] [Thread-190184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:58:22.197 [DEBUG] [Thread-190184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:58:22.197 [DEBUG] [Thread-190184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:58:22.221 [INFO] [Thread-190184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:58:22.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:58:22.817 [DEBUG] [Thread-190184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:58:22.817 [DEBUG] [Thread-190184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:58:22.818 [DEBUG] [Thread-190184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:58:22.858 [DEBUG] [Thread-190184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:58:22.858 [DEBUG] [Thread-190184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:58:22.861 [DEBUG] [Thread-190184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:58:22.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:58:22.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:58:22.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:58:22.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:58:22.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:58:22.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:58:22.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:58:22.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.498718 -999.00  +14.60   8.52     78  +11.00 1 2 1 1 1   888    0 4.59 48.53 ----- 8.7 8.5 270.2 17.9 21.2 -10.7 20.3 -10.8 19.9 -10.5 21.0 -10.2
2026-04-12T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.498718
2026-04-12T13:58:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:58:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:58:22.882 [DEBUG] [Thread-190184] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:58:22.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:58:22.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:58:22.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T13:58:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:57:50', tmtdew=4.03423, humidity=76.7795, cloud=0.0, wind=20.0426, temperature=15.2095, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:58:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:58:22.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:58:22.975 [DEBUG] [Thread-190187] [transport.py] [_log()] starting thread (client mode): 0xb0f55e10
2026-04-12T13:58:22.976 [DEBUG] [Thread-190187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:58:22.990 [DEBUG] [Thread-190187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T13:58:22.991 [INFO] [Thread-190187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T13:58:22.998 [DEBUG] [Thread-190187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:58:22.998 [DEBUG] [Thread-190187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T13:58:22.998 [DEBUG] [Thread-190187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:58:22.998 [DEBUG] [Thread-190187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] client lang: <none>
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] server lang: <none>
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] kex follows: False
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] Compression: none
2026-04-12T13:58:22.999 [DEBUG] [Thread-190187] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:58:23.057 [DEBUG] [Thread-190187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:58:23.058 [DEBUG] [Thread-190187] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:58:23.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T13:58:23.059 [DEBUG] [Thread-190187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T13:58:23.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:58:23.113 [DEBUG] [Thread-190187] [transport.py] [_log()] userauth is OK
2026-04-12T13:58:23.113 [DEBUG] [Thread-190187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:58:23.113 [DEBUG] [Thread-190187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:58:23.113 [DEBUG] [Thread-190187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T13:58:23.113 [DEBUG] [Thread-190187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:58:23.137 [INFO] [Thread-190187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:58:23.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T13:58:23.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:58:23.974 [DEBUG] [Thread-190187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:58:23.975 [DEBUG] [Thread-190187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:58:24.023 [DEBUG] [Thread-190187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:58:24.023 [DEBUG] [Thread-190187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:58:24.032 [DEBUG] [Thread-190187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:58:24.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:58:24.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T13:58:24.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T13:58:24.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:58:24.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:58:24.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:58:24.070 [DEBUG] [Thread-190187] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:58:27.747 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:58:27.748 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:58:34.096 [DEBUG] [Thread-190189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:58:37.935 [DEBUG] [Thread-190190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:58:49.139 [DEBUG] [Thread-190191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:58:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T13:58:54.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T13:58:54.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T13:58:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 13, 58, 25), 3.44564, 79.7267, 0.0, 14.2394, 14.6219, 0, 0, 0, 2, 0, 0),)
2026-04-12T13:58:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 13:58:25
2026-04-12T13:58:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T13:58:55.948 [DEBUG] [Thread-190192] [transport.py] [_log()] starting thread (client mode): 0xa796af50
2026-04-12T13:58:55.948 [DEBUG] [Thread-190192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T13:58:55.965 [DEBUG] [Thread-190192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T13:58:55.965 [INFO] [Thread-190192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] client lang: <none>
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] server lang: <none>
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] kex follows: False
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] Compression: none
2026-04-12T13:58:55.969 [DEBUG] [Thread-190192] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T13:58:55.987 [DEBUG] [Thread-190192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T13:58:55.987 [DEBUG] [Thread-190192] [transport.py] [_log()] Switch to new keys ...
2026-04-12T13:58:55.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T13:58:55.988 [DEBUG] [Thread-190192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T13:58:55.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T13:58:55.990 [DEBUG] [Thread-190192] [transport.py] [_log()] userauth is OK
2026-04-12T13:58:55.991 [DEBUG] [Thread-190192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T13:58:55.991 [DEBUG] [Thread-190192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T13:58:55.991 [DEBUG] [Thread-190192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T13:58:55.991 [DEBUG] [Thread-190192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T13:58:56.015 [INFO] [Thread-190192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T13:58:56.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T13:58:56.645 [DEBUG] [Thread-190192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T13:58:56.645 [DEBUG] [Thread-190192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T13:58:56.646 [DEBUG] [Thread-190192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T13:58:56.686 [DEBUG] [Thread-190192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T13:58:56.686 [DEBUG] [Thread-190192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T13:58:56.690 [DEBUG] [Thread-190192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T13:58:56.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T13:58:56.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T13:58:56.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T13:58:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T13:58:56.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T13:58:56.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T13:58:56.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T13:58:56.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T13:58:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T13:58:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.499065 -999.00  +14.70  12.64     80  +11.30 1 3 1 2 1   888    0 4.59 48.81 ----- 11.5 12.6 273.4 14.2 21.2 -11.7 20.4 -10.9 20.2 -9.0 21.1 -9.9
2026-04-12T13:58:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T13:58:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T13:58:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.499065
2026-04-12T13:58:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T13:58:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T13:58:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T13:58:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T13:58:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T13:58:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T13:58:25', tmtdew=3.44564, humidity=79.7267, cloud=0.0, wind=14.2394, temperature=14.6219, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T11:58:39.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T13:58:56.718 [DEBUG] [Thread-190192] [transport.py] [_log()] EOF in transport thread
2026-04-12T13:58:56.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T13:59:04.175 [DEBUG] [Thread-190195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:59:19.237 [DEBUG] [Thread-190196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:59:27.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:59:27.897 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:59:34.276 [DEBUG] [Thread-190197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:59:37.986 [DEBUG] [Thread-190198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T13:59:49.313 [DEBUG] [Thread-190199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:00:04.350 [DEBUG] [Thread-190200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:00:19.388 [DEBUG] [Thread-190201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:00:28.047 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:00:28.048 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:00:34.420 [DEBUG] [Thread-190202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:00:38.045 [DEBUG] [Thread-190203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:00:49.457 [DEBUG] [Thread-190204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:01:04.495 [DEBUG] [Thread-190205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:01:08.735 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T14:01:19.533 [DEBUG] [Thread-190206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:01:28.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:01:28.193 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:01:34.568 [DEBUG] [Thread-190207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:01:38.108 [DEBUG] [Thread-190208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:01:38.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:01:38.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:01:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:01:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 1, 23), 3.50927, 79.1572, 0.0, 15.5984, 14.2884, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:01:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:01:23
2026-04-12T14:01:40.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:01:40.617 [DEBUG] [Thread-190209] [transport.py] [_log()] starting thread (client mode): 0xa796a890
2026-04-12T14:01:40.617 [DEBUG] [Thread-190209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:01:40.637 [DEBUG] [Thread-190209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:01:40.638 [INFO] [Thread-190209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:01:40.641 [DEBUG] [Thread-190209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:01:40.641 [DEBUG] [Thread-190209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:01:40.641 [DEBUG] [Thread-190209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:01:40.641 [DEBUG] [Thread-190209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:01:40.641 [DEBUG] [Thread-190209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:01:40.641 [DEBUG] [Thread-190209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:01:40.641 [DEBUG] [Thread-190209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] client lang: <none>
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] server lang: <none>
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] kex follows: False
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] Compression: none
2026-04-12T14:01:40.642 [DEBUG] [Thread-190209] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:01:40.659 [DEBUG] [Thread-190209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:01:40.660 [DEBUG] [Thread-190209] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:01:40.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:01:40.660 [DEBUG] [Thread-190209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:01:40.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:01:40.662 [DEBUG] [Thread-190209] [transport.py] [_log()] userauth is OK
2026-04-12T14:01:40.663 [DEBUG] [Thread-190209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:01:40.663 [DEBUG] [Thread-190209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:01:40.663 [DEBUG] [Thread-190209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:01:40.663 [DEBUG] [Thread-190209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:01:40.681 [INFO] [Thread-190209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:01:40.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:01:41.469 [DEBUG] [Thread-190209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:01:41.469 [DEBUG] [Thread-190209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:01:41.469 [DEBUG] [Thread-190209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:01:41.510 [DEBUG] [Thread-190209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:01:41.510 [DEBUG] [Thread-190209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:01:41.514 [DEBUG] [Thread-190209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:01:41.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:01:41.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:01:41.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:01:41.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:01:41.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:01:41.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:01:41.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:01:41.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:01:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:01:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.500801 -999.00  +14.60   8.30     80  +11.30 1 3 1 2 1   888    0 4.79 52.73 ----- 13.4 8.3 245.8 14.4 21.1 -10.9 20.5 -9.5 20.1 -7.4 20.9 -10.7
2026-04-12T14:01:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:01:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:01:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.500801
2026-04-12T14:01:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:01:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:01:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:01:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:01:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:01:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:01:23', tmtdew=3.50927, humidity=79.1572, cloud=0.0, wind=15.5984, temperature=14.2884, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:01:09.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:01:41.541 [DEBUG] [Thread-190209] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:01:41.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:01:41.635 [DEBUG] [Thread-190212] [transport.py] [_log()] starting thread (client mode): 0xa796a470
2026-04-12T14:01:41.636 [DEBUG] [Thread-190212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:01:41.650 [DEBUG] [Thread-190212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:01:41.651 [INFO] [Thread-190212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:01:41.658 [DEBUG] [Thread-190212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:01:41.658 [DEBUG] [Thread-190212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:01:41.658 [DEBUG] [Thread-190212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] client lang: <none>
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] server lang: <none>
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] kex follows: False
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:01:41.659 [DEBUG] [Thread-190212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:01:41.660 [DEBUG] [Thread-190212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:01:41.660 [DEBUG] [Thread-190212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:01:41.660 [DEBUG] [Thread-190212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:01:41.660 [DEBUG] [Thread-190212] [transport.py] [_log()] Compression: none
2026-04-12T14:01:41.660 [DEBUG] [Thread-190212] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:01:41.719 [DEBUG] [Thread-190212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:01:41.719 [DEBUG] [Thread-190212] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:01:41.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:01:41.721 [DEBUG] [Thread-190212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:01:41.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:01:41.777 [DEBUG] [Thread-190212] [transport.py] [_log()] userauth is OK
2026-04-12T14:01:41.777 [DEBUG] [Thread-190212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:01:41.778 [DEBUG] [Thread-190212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:01:41.778 [DEBUG] [Thread-190212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:01:41.778 [DEBUG] [Thread-190212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:01:41.797 [INFO] [Thread-190212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:01:41.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:01:41.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:01:42.597 [DEBUG] [Thread-190212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:01:42.598 [DEBUG] [Thread-190212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:01:42.647 [DEBUG] [Thread-190212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:01:42.647 [DEBUG] [Thread-190212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:01:42.655 [DEBUG] [Thread-190212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:01:42.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:01:42.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:01:42.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:01:42.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:01:42.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:01:42.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:01:42.691 [DEBUG] [Thread-190212] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:01:49.606 [DEBUG] [Thread-190214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:04.661 [DEBUG] [Thread-190215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:02:12.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:02:12.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:02:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 1, 59), 3.70093, 78.4444, 0.0, 9.56484, 14.1883, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:02:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:01:59
2026-04-12T14:02:14.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:02:14.633 [DEBUG] [Thread-190216] [transport.py] [_log()] starting thread (client mode): 0xae509660
2026-04-12T14:02:14.633 [DEBUG] [Thread-190216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:02:14.648 [DEBUG] [Thread-190216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:02:14.649 [INFO] [Thread-190216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] client lang: <none>
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] server lang: <none>
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] kex follows: False
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:02:14.650 [DEBUG] [Thread-190216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:02:14.651 [DEBUG] [Thread-190216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:02:14.651 [DEBUG] [Thread-190216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:02:14.651 [DEBUG] [Thread-190216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:02:14.651 [DEBUG] [Thread-190216] [transport.py] [_log()] Compression: none
2026-04-12T14:02:14.651 [DEBUG] [Thread-190216] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:02:14.669 [DEBUG] [Thread-190216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:02:14.670 [DEBUG] [Thread-190216] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:02:14.671 [DEBUG] [Thread-190216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:02:14.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:02:14.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:02:14.673 [DEBUG] [Thread-190216] [transport.py] [_log()] userauth is OK
2026-04-12T14:02:14.673 [DEBUG] [Thread-190216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:02:14.673 [DEBUG] [Thread-190216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:02:14.673 [DEBUG] [Thread-190216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:02:14.673 [DEBUG] [Thread-190216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:02:14.699 [INFO] [Thread-190216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:02:14.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:02:15.460 [DEBUG] [Thread-190216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:02:15.461 [DEBUG] [Thread-190216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:02:15.461 [DEBUG] [Thread-190216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:02:15.501 [DEBUG] [Thread-190216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:02:15.501 [DEBUG] [Thread-190216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:02:15.505 [DEBUG] [Thread-190216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:02:15.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:02:15.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:02:15.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:02:15.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:02:15.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:02:15.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:02:15.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:02:15.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:02:15.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:02:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.501149 -999.00  +14.50  13.98     80  +11.10 1 3 1 2 1   888    0 4.78 52.16 ----- 15.3 14.0 263.2 16.6 21.1 -10.8 20.4 -9.2 20.1 -7.9 20.8 -10.6
2026-04-12T14:02:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:02:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:02:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.501149
2026-04-12T14:02:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:02:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:02:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:02:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:02:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:02:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:01:59', tmtdew=3.70093, humidity=78.4444, cloud=0.0, wind=9.56484, temperature=14.1883, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:01:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:02:15.532 [DEBUG] [Thread-190216] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:02:15.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:02:15.631 [DEBUG] [Thread-190219] [transport.py] [_log()] starting thread (client mode): 0xb0f55e40
2026-04-12T14:02:15.631 [DEBUG] [Thread-190219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:02:15.647 [DEBUG] [Thread-190219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:02:15.647 [INFO] [Thread-190219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:02:15.654 [DEBUG] [Thread-190219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:02:15.655 [DEBUG] [Thread-190219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:02:15.655 [DEBUG] [Thread-190219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:02:15.655 [DEBUG] [Thread-190219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:15.655 [DEBUG] [Thread-190219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:15.655 [DEBUG] [Thread-190219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:15.655 [DEBUG] [Thread-190219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:15.655 [DEBUG] [Thread-190219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] client lang: <none>
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] server lang: <none>
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] kex follows: False
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] Compression: none
2026-04-12T14:02:15.656 [DEBUG] [Thread-190219] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:02:15.713 [DEBUG] [Thread-190219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:02:15.714 [DEBUG] [Thread-190219] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:02:15.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:02:15.715 [DEBUG] [Thread-190219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:02:15.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:02:15.769 [DEBUG] [Thread-190219] [transport.py] [_log()] userauth is OK
2026-04-12T14:02:15.769 [DEBUG] [Thread-190219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:02:15.770 [DEBUG] [Thread-190219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:02:15.770 [DEBUG] [Thread-190219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:02:15.770 [DEBUG] [Thread-190219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:02:15.789 [INFO] [Thread-190219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:02:15.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:02:15.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:02:16.629 [DEBUG] [Thread-190219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:02:16.629 [DEBUG] [Thread-190219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:02:16.677 [DEBUG] [Thread-190219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:02:16.677 [DEBUG] [Thread-190219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:02:16.687 [DEBUG] [Thread-190219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:02:16.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:02:16.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:02:16.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:02:16.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:02:16.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:02:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:02:16.724 [DEBUG] [Thread-190219] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:02:19.699 [DEBUG] [Thread-190221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:28.353 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:28.354 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:34.752 [DEBUG] [Thread-190222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:38.158 [DEBUG] [Thread-190223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:02:46.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:02:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:02:48.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 2, 34), 4.28378, 75.4855, 0.0, 7.48296, 15.0097, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:02:48.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:02:34
2026-04-12T14:02:48.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:02:48.570 [DEBUG] [Thread-190224] [transport.py] [_log()] starting thread (client mode): 0xa796aef0
2026-04-12T14:02:48.570 [DEBUG] [Thread-190224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:02:48.590 [DEBUG] [Thread-190224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:02:48.591 [INFO] [Thread-190224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] client lang: <none>
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] server lang: <none>
2026-04-12T14:02:48.593 [DEBUG] [Thread-190224] [transport.py] [_log()] kex follows: False
2026-04-12T14:02:48.594 [DEBUG] [Thread-190224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:02:48.594 [DEBUG] [Thread-190224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:02:48.594 [DEBUG] [Thread-190224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:02:48.594 [DEBUG] [Thread-190224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:02:48.594 [DEBUG] [Thread-190224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:02:48.594 [DEBUG] [Thread-190224] [transport.py] [_log()] Compression: none
2026-04-12T14:02:48.594 [DEBUG] [Thread-190224] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:02:48.609 [DEBUG] [Thread-190224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:02:48.609 [DEBUG] [Thread-190224] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:02:48.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:02:48.610 [DEBUG] [Thread-190224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:02:48.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:02:48.613 [DEBUG] [Thread-190224] [transport.py] [_log()] userauth is OK
2026-04-12T14:02:48.613 [DEBUG] [Thread-190224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:02:48.613 [DEBUG] [Thread-190224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:02:48.613 [DEBUG] [Thread-190224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:02:48.613 [DEBUG] [Thread-190224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:02:48.637 [INFO] [Thread-190224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:02:48.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:02:49.440 [DEBUG] [Thread-190224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:02:49.441 [DEBUG] [Thread-190224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:02:49.441 [DEBUG] [Thread-190224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:02:49.482 [DEBUG] [Thread-190224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:02:49.482 [DEBUG] [Thread-190224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:02:49.486 [DEBUG] [Thread-190224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:02:49.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:02:49.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:02:49.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:02:49.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:02:49.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:02:49.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:02:49.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:02:49.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:02:49.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:02:49.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.501496 -999.00  +14.20   8.32     79  +10.70 1 3 1 1 1   888    0 4.74 48.77 ----- 7.9 8.3 265.2 16.4 20.9 -11.1 20.4 -9.0 20.0 -7.5 20.7 -9.1
2026-04-12T14:02:49.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:02:49.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:02:49.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.501496
2026-04-12T14:02:49.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:02:49.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:02:49.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:02:49.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:02:49.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:02:49.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:02:34', tmtdew=4.28378, humidity=75.4855, cloud=0.0, wind=7.48296, temperature=15.0097, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:02:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:02:49.514 [DEBUG] [Thread-190224] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:02:49.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:02:49.608 [DEBUG] [Thread-190227] [transport.py] [_log()] starting thread (client mode): 0xa796b2b0
2026-04-12T14:02:49.608 [DEBUG] [Thread-190227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:02:49.623 [DEBUG] [Thread-190227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:02:49.623 [INFO] [Thread-190227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:02:49.630 [DEBUG] [Thread-190227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:02:49.630 [DEBUG] [Thread-190227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] client lang: <none>
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] server lang: <none>
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] kex follows: False
2026-04-12T14:02:49.631 [DEBUG] [Thread-190227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:02:49.632 [DEBUG] [Thread-190227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:02:49.632 [DEBUG] [Thread-190227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:02:49.632 [DEBUG] [Thread-190227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:02:49.632 [DEBUG] [Thread-190227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:02:49.632 [DEBUG] [Thread-190227] [transport.py] [_log()] Compression: none
2026-04-12T14:02:49.632 [DEBUG] [Thread-190227] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:02:49.688 [DEBUG] [Thread-190227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:02:49.689 [DEBUG] [Thread-190227] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:02:49.689 [DEBUG] [Thread-190227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:02:49.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:02:49.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:02:49.747 [DEBUG] [Thread-190227] [transport.py] [_log()] userauth is OK
2026-04-12T14:02:49.747 [DEBUG] [Thread-190227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:02:49.747 [DEBUG] [Thread-190227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:02:49.747 [DEBUG] [Thread-190227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:02:49.747 [DEBUG] [Thread-190227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:02:49.769 [INFO] [Thread-190227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:02:49.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:02:49.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:02:49.792 [DEBUG] [Thread-190229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:02:50.646 [DEBUG] [Thread-190227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:02:50.646 [DEBUG] [Thread-190227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:02:50.695 [DEBUG] [Thread-190227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:02:50.695 [DEBUG] [Thread-190227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:02:50.705 [DEBUG] [Thread-190227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:02:50.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:02:50.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:02:50.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:02:50.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:02:50.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:02:50.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:02:50.744 [DEBUG] [Thread-190227] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:03:04.854 [DEBUG] [Thread-190230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:03:19.890 [DEBUG] [Thread-190231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:03:20.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:03:20.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:03:20.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:03:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 3, 9), 3.51778, 79.3587, 0.0, 7.71264, 14.2717, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:03:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:03:09
2026-04-12T14:03:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:03:22.601 [DEBUG] [Thread-190232] [transport.py] [_log()] starting thread (client mode): 0xa7968c40
2026-04-12T14:03:22.602 [DEBUG] [Thread-190232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:03:22.622 [DEBUG] [Thread-190232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:03:22.622 [INFO] [Thread-190232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:03:22.625 [DEBUG] [Thread-190232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:03:22.625 [DEBUG] [Thread-190232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] client lang: <none>
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] server lang: <none>
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] kex follows: False
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:03:22.626 [DEBUG] [Thread-190232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:03:22.627 [DEBUG] [Thread-190232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:03:22.627 [DEBUG] [Thread-190232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:03:22.627 [DEBUG] [Thread-190232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:03:22.627 [DEBUG] [Thread-190232] [transport.py] [_log()] Compression: none
2026-04-12T14:03:22.627 [DEBUG] [Thread-190232] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:03:22.647 [DEBUG] [Thread-190232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:03:22.648 [DEBUG] [Thread-190232] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:03:22.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:03:22.649 [DEBUG] [Thread-190232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:03:22.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:03:22.651 [DEBUG] [Thread-190232] [transport.py] [_log()] userauth is OK
2026-04-12T14:03:22.652 [DEBUG] [Thread-190232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:03:22.652 [DEBUG] [Thread-190232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:03:22.652 [DEBUG] [Thread-190232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:03:22.652 [DEBUG] [Thread-190232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:03:22.675 [INFO] [Thread-190232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:03:22.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:03:23.481 [DEBUG] [Thread-190232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:03:23.481 [DEBUG] [Thread-190232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:03:23.482 [DEBUG] [Thread-190232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:03:23.522 [DEBUG] [Thread-190232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:03:23.522 [DEBUG] [Thread-190232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:03:23.525 [DEBUG] [Thread-190232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:03:23.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:03:23.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:03:23.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:03:23.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:03:23.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:03:23.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:03:23.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:03:23.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:03:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:03:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.501843 -999.00  +14.40   7.27     81  +11.30 1 3 1 2 1   888    0 4.56 46.79 ----- 7.4 7.3 255.6 11.3 21.1 -10.1 20.4 -8.8 20.0 -7.8 20.7 -9.5
2026-04-12T14:03:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:03:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:03:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.501843
2026-04-12T14:03:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:03:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:03:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:03:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:03:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:03:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:03:09', tmtdew=3.51778, humidity=79.3587, cloud=0.0, wind=7.71264, temperature=14.2717, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:02:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:03:23.551 [DEBUG] [Thread-190232] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:03:23.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:03:23.649 [DEBUG] [Thread-190235] [transport.py] [_log()] starting thread (client mode): 0xae5b6950
2026-04-12T14:03:23.649 [DEBUG] [Thread-190235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:03:23.664 [DEBUG] [Thread-190235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:03:23.664 [INFO] [Thread-190235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:03:23.672 [DEBUG] [Thread-190235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] client lang: <none>
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] server lang: <none>
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] kex follows: False
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] Compression: none
2026-04-12T14:03:23.673 [DEBUG] [Thread-190235] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:03:23.729 [DEBUG] [Thread-190235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:03:23.729 [DEBUG] [Thread-190235] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:03:23.730 [DEBUG] [Thread-190235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:03:23.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:03:23.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:03:23.785 [DEBUG] [Thread-190235] [transport.py] [_log()] userauth is OK
2026-04-12T14:03:23.785 [DEBUG] [Thread-190235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:03:23.785 [DEBUG] [Thread-190235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:03:23.786 [DEBUG] [Thread-190235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:03:23.786 [DEBUG] [Thread-190235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:03:23.804 [INFO] [Thread-190235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:03:23.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:03:23.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:03:24.627 [DEBUG] [Thread-190235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:03:24.627 [DEBUG] [Thread-190235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:03:24.675 [DEBUG] [Thread-190235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:03:24.675 [DEBUG] [Thread-190235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:03:24.685 [DEBUG] [Thread-190235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:03:24.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:03:24.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:03:24.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:03:24.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:03:24.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:03:24.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:03:24.721 [DEBUG] [Thread-190235] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:03:28.510 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:03:28.512 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:03:34.928 [DEBUG] [Thread-190237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:03:38.222 [DEBUG] [Thread-190238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:03:49.981 [DEBUG] [Thread-190239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:03:54.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:03:54.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:03:54.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:03:56.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 3, 46), 4.04442, 76.712, 0.0, 10.6934, 15.109, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:03:56.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:03:46
2026-04-12T14:03:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:03:56.592 [DEBUG] [Thread-190240] [transport.py] [_log()] starting thread (client mode): 0xb0fe8c40
2026-04-12T14:03:56.592 [DEBUG] [Thread-190240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:03:56.615 [DEBUG] [Thread-190240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:03:56.615 [INFO] [Thread-190240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:03:56.616 [DEBUG] [Thread-190240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:03:56.616 [DEBUG] [Thread-190240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:03:56.616 [DEBUG] [Thread-190240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:03:56.616 [DEBUG] [Thread-190240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] client lang: <none>
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] server lang: <none>
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] kex follows: False
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:03:56.617 [DEBUG] [Thread-190240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:03:56.618 [DEBUG] [Thread-190240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:03:56.618 [DEBUG] [Thread-190240] [transport.py] [_log()] Compression: none
2026-04-12T14:03:56.618 [DEBUG] [Thread-190240] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:03:56.641 [DEBUG] [Thread-190240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:03:56.641 [DEBUG] [Thread-190240] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:03:56.642 [DEBUG] [Thread-190240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:03:56.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:03:56.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:03:56.644 [DEBUG] [Thread-190240] [transport.py] [_log()] userauth is OK
2026-04-12T14:03:56.644 [DEBUG] [Thread-190240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:03:56.644 [DEBUG] [Thread-190240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:03:56.644 [DEBUG] [Thread-190240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:03:56.644 [DEBUG] [Thread-190240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:03:56.679 [INFO] [Thread-190240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:03:56.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:03:57.468 [DEBUG] [Thread-190240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:03:57.469 [DEBUG] [Thread-190240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:03:57.469 [DEBUG] [Thread-190240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:03:57.510 [DEBUG] [Thread-190240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:03:57.510 [DEBUG] [Thread-190240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:03:57.514 [DEBUG] [Thread-190240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:03:57.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:03:57.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:03:57.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:03:57.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:03:57.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:03:57.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:03:57.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:03:57.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:03:57.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:03:57.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.502190 -999.00  +14.60   5.10     81  +11.40 1 3 1 2 1   888    0 4.66 46.95 ----- 5.0 5.1 252.0 9.8 21.0 -10.1 20.4 -9.0 20.1 -7.7 20.8 -9.3
2026-04-12T14:03:57.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:03:57.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:03:57.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.502190
2026-04-12T14:03:57.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:03:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:03:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:03:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:03:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:03:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:03:46', tmtdew=4.04442, humidity=76.712, cloud=0.0, wind=10.6934, temperature=15.109, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:03:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:03:57.541 [DEBUG] [Thread-190240] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:03:57.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:03:57.634 [DEBUG] [Thread-190243] [transport.py] [_log()] starting thread (client mode): 0xb0feb070
2026-04-12T14:03:57.634 [DEBUG] [Thread-190243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:03:57.650 [DEBUG] [Thread-190243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:03:57.650 [INFO] [Thread-190243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:03:57.657 [DEBUG] [Thread-190243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] client lang: <none>
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] server lang: <none>
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] kex follows: False
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] Compression: none
2026-04-12T14:03:57.658 [DEBUG] [Thread-190243] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:03:57.715 [DEBUG] [Thread-190243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:03:57.716 [DEBUG] [Thread-190243] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:03:57.716 [DEBUG] [Thread-190243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:03:57.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:03:57.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:03:57.772 [DEBUG] [Thread-190243] [transport.py] [_log()] userauth is OK
2026-04-12T14:03:57.773 [DEBUG] [Thread-190243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:03:57.773 [DEBUG] [Thread-190243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:03:57.773 [DEBUG] [Thread-190243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:03:57.773 [DEBUG] [Thread-190243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:03:57.795 [INFO] [Thread-190243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:03:57.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:03:57.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:03:58.608 [DEBUG] [Thread-190243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:03:58.609 [DEBUG] [Thread-190243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:03:58.656 [DEBUG] [Thread-190243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:03:58.656 [DEBUG] [Thread-190243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:03:58.666 [DEBUG] [Thread-190243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:03:58.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:03:58.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:03:58.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:03:58.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:03:58.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:03:58.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:03:58.703 [DEBUG] [Thread-190243] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:04:05.019 [DEBUG] [Thread-190245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:04:20.073 [DEBUG] [Thread-190246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:04:28.668 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:04:28.670 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:04:28.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:04:28.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:04:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:04:30.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 4, 21), 3.48108, 79.5573, 0.0, 12.0521, 14.4042, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:04:30.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:04:21
2026-04-12T14:04:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:04:30.595 [DEBUG] [Thread-190247] [transport.py] [_log()] starting thread (client mode): 0xb0f54c40
2026-04-12T14:04:30.595 [DEBUG] [Thread-190247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:04:30.615 [DEBUG] [Thread-190247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:04:30.616 [INFO] [Thread-190247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:04:30.618 [DEBUG] [Thread-190247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:04:30.618 [DEBUG] [Thread-190247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] client lang: <none>
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] server lang: <none>
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] kex follows: False
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] Compression: none
2026-04-12T14:04:30.619 [DEBUG] [Thread-190247] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:04:30.638 [DEBUG] [Thread-190247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:04:30.638 [DEBUG] [Thread-190247] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:04:30.639 [DEBUG] [Thread-190247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:04:30.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:04:30.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:04:30.682 [DEBUG] [Thread-190247] [transport.py] [_log()] userauth is OK
2026-04-12T14:04:30.682 [DEBUG] [Thread-190247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:04:30.682 [DEBUG] [Thread-190247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:04:30.682 [DEBUG] [Thread-190247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:04:30.682 [DEBUG] [Thread-190247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:04:30.707 [INFO] [Thread-190247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:04:30.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:04:31.494 [DEBUG] [Thread-190247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:04:31.494 [DEBUG] [Thread-190247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:04:31.495 [DEBUG] [Thread-190247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:04:31.535 [DEBUG] [Thread-190247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:04:31.535 [DEBUG] [Thread-190247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:04:31.539 [DEBUG] [Thread-190247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:04:31.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:04:31.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:04:31.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:04:31.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:04:31.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:04:31.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:04:31.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:04:31.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:04:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:04:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.502537 -999.00  +14.70   7.55     80  +11.40 1 3 1 2 1   888    0 4.36 38.76 ----- 11.4 7.5 235.7 11.6 21.1 -10.2 20.4 -9.4 20.2 -8.3 20.8 -10.2
2026-04-12T14:04:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:04:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:04:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.502537
2026-04-12T14:04:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:04:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:04:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:04:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:04:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:04:31.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:04:21', tmtdew=3.48108, humidity=79.5573, cloud=0.0, wind=12.0521, temperature=14.4042, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:03:39.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:04:31.569 [DEBUG] [Thread-190247] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:04:31.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:04:31.666 [DEBUG] [Thread-190250] [transport.py] [_log()] starting thread (client mode): 0xb0fe84f0
2026-04-12T14:04:31.666 [DEBUG] [Thread-190250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:04:31.681 [DEBUG] [Thread-190250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:04:31.681 [INFO] [Thread-190250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] client lang: <none>
2026-04-12T14:04:31.689 [DEBUG] [Thread-190250] [transport.py] [_log()] server lang: <none>
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] kex follows: False
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] Compression: none
2026-04-12T14:04:31.690 [DEBUG] [Thread-190250] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:04:31.746 [DEBUG] [Thread-190250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:04:31.747 [DEBUG] [Thread-190250] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:04:31.747 [DEBUG] [Thread-190250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:04:31.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:04:31.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:04:31.805 [DEBUG] [Thread-190250] [transport.py] [_log()] userauth is OK
2026-04-12T14:04:31.805 [DEBUG] [Thread-190250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:04:31.805 [DEBUG] [Thread-190250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:04:31.806 [DEBUG] [Thread-190250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:04:31.806 [DEBUG] [Thread-190250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:04:31.825 [INFO] [Thread-190250] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:04:31.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:04:31.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:04:32.639 [DEBUG] [Thread-190250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:04:32.639 [DEBUG] [Thread-190250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:04:32.687 [DEBUG] [Thread-190250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:04:32.688 [DEBUG] [Thread-190250] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:04:32.697 [DEBUG] [Thread-190250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:04:32.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:04:32.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:04:32.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:04:32.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:04:32.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:04:32.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:04:32.734 [DEBUG] [Thread-190250] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:04:35.112 [DEBUG] [Thread-190252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:04:38.266 [DEBUG] [Thread-190253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:04:50.167 [DEBUG] [Thread-190254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:05:02.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:05:02.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:05:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:05:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 4, 21), 3.48108, 79.5573, 0.0, 12.0521, 14.4042, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:05:04.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:04:21
2026-04-12T14:05:04.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:05:04.538 [DEBUG] [Thread-190255] [transport.py] [_log()] starting thread (client mode): 0xae5b44c0
2026-04-12T14:05:04.538 [DEBUG] [Thread-190255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:05:04.559 [DEBUG] [Thread-190255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:05:04.559 [INFO] [Thread-190255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:05:04.562 [DEBUG] [Thread-190255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] client lang: <none>
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] server lang: <none>
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] kex follows: False
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] Compression: none
2026-04-12T14:05:04.563 [DEBUG] [Thread-190255] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:05:04.582 [DEBUG] [Thread-190255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:05:04.582 [DEBUG] [Thread-190255] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:05:04.583 [DEBUG] [Thread-190255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:05:04.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:05:04.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:05:04.585 [DEBUG] [Thread-190255] [transport.py] [_log()] userauth is OK
2026-04-12T14:05:04.586 [DEBUG] [Thread-190255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:05:04.586 [DEBUG] [Thread-190255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:05:04.586 [DEBUG] [Thread-190255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:05:04.586 [DEBUG] [Thread-190255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:05:04.604 [INFO] [Thread-190255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:05:04.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:05:05.209 [DEBUG] [Thread-190257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:05:06.437 [DEBUG] [Thread-190255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:05:06.437 [DEBUG] [Thread-190255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:05:06.438 [DEBUG] [Thread-190255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:05:06.478 [DEBUG] [Thread-190255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:05:06.478 [DEBUG] [Thread-190255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:05:06.482 [DEBUG] [Thread-190255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:05:06.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:05:06.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:05:06.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:05:06.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:05:06.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:05:06.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:05:06.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:05:06.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:05:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:05:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.502885 -999.00  +14.90  15.39     81  +11.70 1 3 1 2 1   888    0 4.27 34.64 ----- 18.1 15.4 269.6 16.8 20.9 -11.2 20.4 -9.9 20.2 -8.3 20.8 -9.4
2026-04-12T14:05:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:05:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:05:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.502885
2026-04-12T14:05:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:05:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:05:06.512 [DEBUG] [Thread-190255] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:05:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:05:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:05:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:05:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:04:21', tmtdew=3.48108, humidity=79.5573, cloud=0.0, wind=12.0521, temperature=14.4042, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:04:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:05:06.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:05:06.609 [DEBUG] [Thread-190259] [transport.py] [_log()] starting thread (client mode): 0xae52e770
2026-04-12T14:05:06.609 [DEBUG] [Thread-190259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:05:06.624 [DEBUG] [Thread-190259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:05:06.624 [INFO] [Thread-190259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:05:06.632 [DEBUG] [Thread-190259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:05:06.632 [DEBUG] [Thread-190259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:05:06.632 [DEBUG] [Thread-190259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:05:06.632 [DEBUG] [Thread-190259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:06.632 [DEBUG] [Thread-190259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:06.632 [DEBUG] [Thread-190259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:06.632 [DEBUG] [Thread-190259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] client lang: <none>
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] server lang: <none>
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] kex follows: False
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] Compression: none
2026-04-12T14:05:06.633 [DEBUG] [Thread-190259] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:05:06.689 [DEBUG] [Thread-190259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:05:06.689 [DEBUG] [Thread-190259] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:05:06.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:05:06.690 [DEBUG] [Thread-190259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:05:06.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:05:06.745 [DEBUG] [Thread-190259] [transport.py] [_log()] userauth is OK
2026-04-12T14:05:06.745 [DEBUG] [Thread-190259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:05:06.745 [DEBUG] [Thread-190259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:05:06.745 [DEBUG] [Thread-190259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:05:06.746 [DEBUG] [Thread-190259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:05:06.764 [INFO] [Thread-190259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:05:06.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:05:06.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:05:07.610 [DEBUG] [Thread-190259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:05:07.610 [DEBUG] [Thread-190259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:05:07.658 [DEBUG] [Thread-190259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:05:07.658 [DEBUG] [Thread-190259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:05:07.668 [DEBUG] [Thread-190259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:05:07.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:05:07.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:05:07.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:05:07.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:05:07.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:05:07.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:05:07.702 [DEBUG] [Thread-190259] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:05:20.248 [DEBUG] [Thread-190261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:05:28.822 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:05:28.823 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:05:35.310 [DEBUG] [Thread-190262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:05:37.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:05:37.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:05:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:05:38.319 [DEBUG] [Thread-190263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:05:38.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 4, 57), 3.53509, 79.3059, 0.0, 14.4518, 14.5037, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:05:38.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:04:57
2026-04-12T14:05:39.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:05:39.527 [DEBUG] [Thread-190264] [transport.py] [_log()] starting thread (client mode): 0xb0fcf0d0
2026-04-12T14:05:39.528 [DEBUG] [Thread-190264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:05:39.549 [DEBUG] [Thread-190264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:05:39.549 [INFO] [Thread-190264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] client lang: <none>
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] server lang: <none>
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] kex follows: False
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:05:39.552 [DEBUG] [Thread-190264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:05:39.553 [DEBUG] [Thread-190264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:05:39.553 [DEBUG] [Thread-190264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:05:39.553 [DEBUG] [Thread-190264] [transport.py] [_log()] Compression: none
2026-04-12T14:05:39.553 [DEBUG] [Thread-190264] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:05:39.570 [DEBUG] [Thread-190264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:05:39.571 [DEBUG] [Thread-190264] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:05:39.571 [DEBUG] [Thread-190264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:05:39.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:05:39.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:05:39.573 [DEBUG] [Thread-190264] [transport.py] [_log()] userauth is OK
2026-04-12T14:05:39.573 [DEBUG] [Thread-190264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:05:39.573 [DEBUG] [Thread-190264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:05:39.573 [DEBUG] [Thread-190264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:05:39.574 [DEBUG] [Thread-190264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:05:39.588 [INFO] [Thread-190264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:05:39.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:05:40.379 [DEBUG] [Thread-190264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:05:40.380 [DEBUG] [Thread-190264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:05:40.380 [DEBUG] [Thread-190264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:05:40.421 [DEBUG] [Thread-190264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:05:40.421 [DEBUG] [Thread-190264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:05:40.424 [DEBUG] [Thread-190264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:05:40.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:05:40.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:05:40.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:05:40.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:05:40.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:05:40.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:05:40.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:05:40.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:05:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:05:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.503232 -999.00  +14.80  15.80     78  +11.10 1 2 1 1 1   888    0 4.22 32.77 ----- 11.8 15.8 271.8 19.6 20.9 -11.3 20.3 -10.1 19.8 -12.1 20.7 -11.7
2026-04-12T14:05:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:05:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:05:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.503232
2026-04-12T14:05:40.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:05:40.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:05:40.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:05:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:05:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:05:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:04:57', tmtdew=3.53509, humidity=79.3059, cloud=0.0, wind=14.4518, temperature=14.5037, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:04:39.245', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:05:40.452 [DEBUG] [Thread-190264] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:05:40.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:05:40.542 [DEBUG] [Thread-190267] [transport.py] [_log()] starting thread (client mode): 0xae5b6fe0
2026-04-12T14:05:40.543 [DEBUG] [Thread-190267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:05:40.557 [DEBUG] [Thread-190267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:05:40.558 [INFO] [Thread-190267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:05:40.565 [DEBUG] [Thread-190267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] client lang: <none>
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] server lang: <none>
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] kex follows: False
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] Compression: none
2026-04-12T14:05:40.566 [DEBUG] [Thread-190267] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:05:40.625 [DEBUG] [Thread-190267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:05:40.626 [DEBUG] [Thread-190267] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:05:40.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:05:40.627 [DEBUG] [Thread-190267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:05:40.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:05:40.686 [DEBUG] [Thread-190267] [transport.py] [_log()] userauth is OK
2026-04-12T14:05:40.686 [DEBUG] [Thread-190267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:05:40.686 [DEBUG] [Thread-190267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:05:40.686 [DEBUG] [Thread-190267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:05:40.686 [DEBUG] [Thread-190267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:05:40.705 [INFO] [Thread-190267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:05:40.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:05:40.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:05:41.519 [DEBUG] [Thread-190267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:05:41.519 [DEBUG] [Thread-190267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:05:41.567 [DEBUG] [Thread-190267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:05:41.567 [DEBUG] [Thread-190267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:05:41.576 [DEBUG] [Thread-190267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:05:41.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:05:41.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:05:41.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:05:41.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:05:41.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:05:41.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:05:41.613 [DEBUG] [Thread-190267] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:05:50.349 [DEBUG] [Thread-190269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:06:05.402 [DEBUG] [Thread-190270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:06:11.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:06:11.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:06:11.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:06:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 5, 32), 3.59844, 78.9907, 0.0, 16.8156, 14.5365, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:06:12.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:05:32
2026-04-12T14:06:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:06:13.511 [DEBUG] [Thread-190271] [transport.py] [_log()] starting thread (client mode): 0xae5367a0
2026-04-12T14:06:13.511 [DEBUG] [Thread-190271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:06:13.531 [DEBUG] [Thread-190271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:06:13.531 [INFO] [Thread-190271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:06:13.534 [DEBUG] [Thread-190271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:06:13.534 [DEBUG] [Thread-190271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] client lang: <none>
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] server lang: <none>
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] kex follows: False
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] Compression: none
2026-04-12T14:06:13.535 [DEBUG] [Thread-190271] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:06:13.548 [DEBUG] [Thread-190271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:06:13.548 [DEBUG] [Thread-190271] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:06:13.549 [DEBUG] [Thread-190271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:06:13.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:06:13.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:06:13.593 [DEBUG] [Thread-190271] [transport.py] [_log()] userauth is OK
2026-04-12T14:06:13.593 [DEBUG] [Thread-190271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:06:13.593 [DEBUG] [Thread-190271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:06:13.593 [DEBUG] [Thread-190271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:06:13.593 [DEBUG] [Thread-190271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:06:13.614 [INFO] [Thread-190271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:06:13.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:06:14.337 [DEBUG] [Thread-190271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:06:14.337 [DEBUG] [Thread-190271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:06:14.337 [DEBUG] [Thread-190271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:06:14.377 [DEBUG] [Thread-190271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:06:14.378 [DEBUG] [Thread-190271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:06:14.381 [DEBUG] [Thread-190271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:06:14.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:06:14.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:06:14.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:06:14.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:06:14.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:06:14.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:06:14.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:06:14.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:06:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:06:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.503579 -999.00  +14.70  13.47     79  +11.10 1 2 1 1 1   888    0 4.26 32.07 ----- 15.1 13.5 280.6 15.3 20.8 -11.4 20.3 -10.3 19.9 -10.1 20.7 -10.6
2026-04-12T14:06:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:06:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:06:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.503579
2026-04-12T14:06:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:06:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:06:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:06:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:06:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:06:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:05:32', tmtdew=3.59844, humidity=78.9907, cloud=0.0, wind=16.8156, temperature=14.5365, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:05:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:06:14.394 [DEBUG] [Thread-190271] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:06:14.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:06:14.479 [DEBUG] [Thread-190274] [transport.py] [_log()] starting thread (client mode): 0xb0fe84c0
2026-04-12T14:06:14.479 [DEBUG] [Thread-190274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:06:14.493 [DEBUG] [Thread-190274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:06:14.493 [INFO] [Thread-190274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] client lang: <none>
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] server lang: <none>
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] kex follows: False
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] Compression: none
2026-04-12T14:06:14.501 [DEBUG] [Thread-190274] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:06:14.559 [DEBUG] [Thread-190274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:06:14.559 [DEBUG] [Thread-190274] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:06:14.559 [DEBUG] [Thread-190274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:06:14.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:06:14.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:06:14.616 [DEBUG] [Thread-190274] [transport.py] [_log()] userauth is OK
2026-04-12T14:06:14.616 [DEBUG] [Thread-190274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:06:14.616 [DEBUG] [Thread-190274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:06:14.616 [DEBUG] [Thread-190274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:06:14.616 [DEBUG] [Thread-190274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:06:14.633 [INFO] [Thread-190274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:06:14.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:06:14.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:06:15.430 [DEBUG] [Thread-190274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:06:15.430 [DEBUG] [Thread-190274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:06:15.478 [DEBUG] [Thread-190274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:06:15.478 [DEBUG] [Thread-190274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:06:15.488 [DEBUG] [Thread-190274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:06:15.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:06:15.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:06:15.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:06:15.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:06:15.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:06:15.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:06:15.525 [DEBUG] [Thread-190274] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:06:20.439 [DEBUG] [Thread-190276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:06:28.975 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:06:28.976 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:06:35.495 [DEBUG] [Thread-190277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:06:38.375 [DEBUG] [Thread-190278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:06:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:06:45.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:06:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:06:46.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 6, 7), 3.72717, 78.3274, 0.0, 15.422, 14.4203, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:06:46.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:06:07
2026-04-12T14:06:47.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:06:47.371 [DEBUG] [Thread-190279] [transport.py] [_log()] starting thread (client mode): 0xb0f56f80
2026-04-12T14:06:47.371 [DEBUG] [Thread-190279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:06:47.394 [DEBUG] [Thread-190279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:06:47.394 [INFO] [Thread-190279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:06:47.397 [DEBUG] [Thread-190279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:06:47.397 [DEBUG] [Thread-190279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] client lang: <none>
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] server lang: <none>
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] kex follows: False
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] Compression: none
2026-04-12T14:06:47.398 [DEBUG] [Thread-190279] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:06:47.415 [DEBUG] [Thread-190279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:06:47.415 [DEBUG] [Thread-190279] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:06:47.416 [DEBUG] [Thread-190279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:06:47.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:06:47.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:06:47.418 [DEBUG] [Thread-190279] [transport.py] [_log()] userauth is OK
2026-04-12T14:06:47.418 [DEBUG] [Thread-190279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:06:47.418 [DEBUG] [Thread-190279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:06:47.418 [DEBUG] [Thread-190279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:06:47.418 [DEBUG] [Thread-190279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:06:47.453 [INFO] [Thread-190279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:06:47.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:06:48.242 [DEBUG] [Thread-190279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:06:48.242 [DEBUG] [Thread-190279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:06:48.243 [DEBUG] [Thread-190279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:06:48.283 [DEBUG] [Thread-190279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:06:48.283 [DEBUG] [Thread-190279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:06:48.286 [DEBUG] [Thread-190279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:06:48.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:06:48.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:06:48.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:06:48.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:06:48.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:06:48.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:06:48.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:06:48.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:06:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:06:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.504274 -999.00  +14.60  11.00     80  +11.40 1 3 1 2 1   888    0 4.16 30.93 ----- 12.2 11.0 271.7 16.0 20.9 -10.6 20.3 -9.6 20.0 -8.7 20.6 -10.3
2026-04-12T14:06:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:06:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:06:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.504274
2026-04-12T14:06:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:06:48.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:06:48.304 [DEBUG] [Thread-190279] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:06:48.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:06:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:06:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:06:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:06:07', tmtdew=3.72717, humidity=78.3274, cloud=0.0, wind=15.422, temperature=14.4203, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:06:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:06:48.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:06:48.396 [DEBUG] [Thread-190282] [transport.py] [_log()] starting thread (client mode): 0xb0f54970
2026-04-12T14:06:48.396 [DEBUG] [Thread-190282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:06:48.411 [DEBUG] [Thread-190282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:06:48.411 [INFO] [Thread-190282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:06:48.419 [DEBUG] [Thread-190282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:06:48.419 [DEBUG] [Thread-190282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:06:48.419 [DEBUG] [Thread-190282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:06:48.419 [DEBUG] [Thread-190282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:48.419 [DEBUG] [Thread-190282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] client lang: <none>
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] server lang: <none>
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] kex follows: False
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:06:48.420 [DEBUG] [Thread-190282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:06:48.421 [DEBUG] [Thread-190282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:06:48.421 [DEBUG] [Thread-190282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:06:48.421 [DEBUG] [Thread-190282] [transport.py] [_log()] Compression: none
2026-04-12T14:06:48.421 [DEBUG] [Thread-190282] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:06:48.477 [DEBUG] [Thread-190282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:06:48.477 [DEBUG] [Thread-190282] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:06:48.478 [DEBUG] [Thread-190282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:06:48.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:06:48.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:06:48.534 [DEBUG] [Thread-190282] [transport.py] [_log()] userauth is OK
2026-04-12T14:06:48.534 [DEBUG] [Thread-190282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:06:48.534 [DEBUG] [Thread-190282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:06:48.534 [DEBUG] [Thread-190282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:06:48.534 [DEBUG] [Thread-190282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:06:48.552 [INFO] [Thread-190282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:06:48.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:06:48.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:06:49.368 [DEBUG] [Thread-190282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:06:49.368 [DEBUG] [Thread-190282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:06:49.417 [DEBUG] [Thread-190282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:06:49.417 [DEBUG] [Thread-190282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:06:49.426 [DEBUG] [Thread-190282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:06:49.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:06:49.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:06:49.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:06:49.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:06:49.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:06:49.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:06:49.461 [DEBUG] [Thread-190282] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:06:50.532 [DEBUG] [Thread-190284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:05.585 [DEBUG] [Thread-190285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:07:19.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:07:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:07:20.623 [DEBUG] [Thread-190286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:20.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 6, 43), 4.46432, 74.5885, 0.0, 17.8906, 15.0412, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:07:20.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:06:43
2026-04-12T14:07:21.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:07:21.341 [DEBUG] [Thread-190287] [transport.py] [_log()] starting thread (client mode): 0xb0feb400
2026-04-12T14:07:21.341 [DEBUG] [Thread-190287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:07:21.361 [DEBUG] [Thread-190287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:07:21.361 [INFO] [Thread-190287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:07:21.364 [DEBUG] [Thread-190287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] client lang: <none>
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] server lang: <none>
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] kex follows: False
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:07:21.365 [DEBUG] [Thread-190287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:07:21.366 [DEBUG] [Thread-190287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:07:21.366 [DEBUG] [Thread-190287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:07:21.366 [DEBUG] [Thread-190287] [transport.py] [_log()] Compression: none
2026-04-12T14:07:21.366 [DEBUG] [Thread-190287] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:07:21.383 [DEBUG] [Thread-190287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:07:21.383 [DEBUG] [Thread-190287] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:07:21.384 [DEBUG] [Thread-190287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:07:21.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:07:21.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:07:21.386 [DEBUG] [Thread-190287] [transport.py] [_log()] userauth is OK
2026-04-12T14:07:21.386 [DEBUG] [Thread-190287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:07:21.386 [DEBUG] [Thread-190287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:07:21.386 [DEBUG] [Thread-190287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:07:21.386 [DEBUG] [Thread-190287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:07:21.421 [INFO] [Thread-190287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:07:21.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:07:22.109 [DEBUG] [Thread-190287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:07:22.109 [DEBUG] [Thread-190287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:07:22.109 [DEBUG] [Thread-190287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:07:22.150 [DEBUG] [Thread-190287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:07:22.150 [DEBUG] [Thread-190287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:07:22.154 [DEBUG] [Thread-190287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:07:22.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:07:22.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:07:22.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:07:22.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:07:22.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:07:22.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:07:22.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:07:22.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:07:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:07:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.504968 -999.00  +14.50  13.33     79  +11.00 1 3 1 1 1   888    0 4.18 29.07 ----- 15.0 13.3 264.2 18.2 20.8 -11.0 20.4 -9.0 19.9 -8.3 20.6 -10.6
2026-04-12T14:07:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:07:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:07:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.504968
2026-04-12T14:07:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:07:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:07:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:07:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:07:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:07:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:06:43', tmtdew=4.46432, humidity=74.5885, cloud=0.0, wind=17.8906, temperature=15.0412, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:07:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:07:22.184 [DEBUG] [Thread-190287] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:07:22.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:07:22.289 [DEBUG] [Thread-190290] [transport.py] [_log()] starting thread (client mode): 0xb0fea230
2026-04-12T14:07:22.289 [DEBUG] [Thread-190290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:07:22.303 [DEBUG] [Thread-190290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:07:22.303 [INFO] [Thread-190290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] client lang: <none>
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] server lang: <none>
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] kex follows: False
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:07:22.311 [DEBUG] [Thread-190290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:07:22.312 [DEBUG] [Thread-190290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:07:22.312 [DEBUG] [Thread-190290] [transport.py] [_log()] Compression: none
2026-04-12T14:07:22.312 [DEBUG] [Thread-190290] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:07:22.368 [DEBUG] [Thread-190290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:07:22.369 [DEBUG] [Thread-190290] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:07:22.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:07:22.370 [DEBUG] [Thread-190290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:07:22.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:07:22.425 [DEBUG] [Thread-190290] [transport.py] [_log()] userauth is OK
2026-04-12T14:07:22.426 [DEBUG] [Thread-190290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:07:22.426 [DEBUG] [Thread-190290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:07:22.426 [DEBUG] [Thread-190290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:07:22.426 [DEBUG] [Thread-190290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:07:22.444 [INFO] [Thread-190290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:07:22.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:07:22.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:07:23.254 [DEBUG] [Thread-190290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:07:23.255 [DEBUG] [Thread-190290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:07:23.303 [DEBUG] [Thread-190290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:07:23.303 [DEBUG] [Thread-190290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:07:23.312 [DEBUG] [Thread-190290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:07:23.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:07:23.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:07:23.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:07:23.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:07:23.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:07:23.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:07:23.349 [DEBUG] [Thread-190290] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:07:29.124 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:29.125 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:35.663 [DEBUG] [Thread-190292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:38.408 [DEBUG] [Thread-190293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:50.715 [DEBUG] [Thread-190294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:07:53.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:07:53.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:07:53.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:07:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 7, 18), 3.76347, 78.391, 0.0, 15.7403, 14.4872, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:07:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:07:18
2026-04-12T14:07:55.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:07:55.196 [DEBUG] [Thread-190295] [transport.py] [_log()] starting thread (client mode): 0xb0f41510
2026-04-12T14:07:55.197 [DEBUG] [Thread-190295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:07:55.216 [DEBUG] [Thread-190295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:07:55.216 [INFO] [Thread-190295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:07:55.217 [DEBUG] [Thread-190295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:07:55.217 [DEBUG] [Thread-190295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:07:55.217 [DEBUG] [Thread-190295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:07:55.217 [DEBUG] [Thread-190295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:55.217 [DEBUG] [Thread-190295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] client lang: <none>
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] server lang: <none>
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] kex follows: False
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] Compression: none
2026-04-12T14:07:55.218 [DEBUG] [Thread-190295] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:07:55.229 [DEBUG] [Thread-190295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:07:55.229 [DEBUG] [Thread-190295] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:07:55.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:07:55.231 [DEBUG] [Thread-190295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:07:55.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:07:55.232 [DEBUG] [Thread-190295] [transport.py] [_log()] userauth is OK
2026-04-12T14:07:55.233 [DEBUG] [Thread-190295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:07:55.233 [DEBUG] [Thread-190295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:07:55.233 [DEBUG] [Thread-190295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:07:55.233 [DEBUG] [Thread-190295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:07:55.249 [INFO] [Thread-190295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:07:55.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:07:55.809 [DEBUG] [Thread-190295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:07:55.809 [DEBUG] [Thread-190295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:07:55.810 [DEBUG] [Thread-190295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:07:55.851 [DEBUG] [Thread-190295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:07:55.851 [DEBUG] [Thread-190295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:07:55.853 [DEBUG] [Thread-190295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:07:55.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:07:55.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:07:55.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:07:55.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:07:55.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:07:55.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:07:55.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:07:55.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:07:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:07:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.505315 -999.00  +14.50  14.21     80  +11.10 1 3 1 2 1   888    0 4.16 29.55 ----- 14.1 14.2 272.2 22.9 20.8 -10.8 20.4 -9.2 19.8 -10.0 20.5 -10.1
2026-04-12T14:07:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:07:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:07:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.505315
2026-04-12T14:07:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:07:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:07:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:07:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:07:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:07:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:07:18', tmtdew=3.76347, humidity=78.391, cloud=0.0, wind=15.7403, temperature=14.4872, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:07:39.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:07:55.883 [DEBUG] [Thread-190295] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:07:55.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:07:55.977 [DEBUG] [Thread-190298] [transport.py] [_log()] starting thread (client mode): 0xb0f41b70
2026-04-12T14:07:55.977 [DEBUG] [Thread-190298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:07:55.992 [DEBUG] [Thread-190298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:07:55.992 [INFO] [Thread-190298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] client lang: <none>
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] server lang: <none>
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] kex follows: False
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:07:56.000 [DEBUG] [Thread-190298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:07:56.001 [DEBUG] [Thread-190298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:07:56.001 [DEBUG] [Thread-190298] [transport.py] [_log()] Compression: none
2026-04-12T14:07:56.001 [DEBUG] [Thread-190298] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:07:56.062 [DEBUG] [Thread-190298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:07:56.062 [DEBUG] [Thread-190298] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:07:56.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:07:56.063 [DEBUG] [Thread-190298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:07:56.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:07:56.121 [DEBUG] [Thread-190298] [transport.py] [_log()] userauth is OK
2026-04-12T14:07:56.121 [DEBUG] [Thread-190298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:07:56.121 [DEBUG] [Thread-190298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:07:56.121 [DEBUG] [Thread-190298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:07:56.121 [DEBUG] [Thread-190298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:07:56.140 [INFO] [Thread-190298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:07:56.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:07:56.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:07:56.962 [DEBUG] [Thread-190298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:07:56.962 [DEBUG] [Thread-190298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:07:57.011 [DEBUG] [Thread-190298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:07:57.011 [DEBUG] [Thread-190298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:07:57.021 [DEBUG] [Thread-190298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:07:57.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:07:57.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:07:57.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:07:57.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:07:57.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:07:57.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:07:57.059 [DEBUG] [Thread-190298] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:08:05.755 [DEBUG] [Thread-190300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:08:20.809 [DEBUG] [Thread-190301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:08:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:08:27.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:08:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:08:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 7, 54), 4.06291, 76.6435, 0.0, 16.7616, 15.2729, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:08:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:07:54
2026-04-12T14:08:28.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:08:28.892 [DEBUG] [Thread-190302] [transport.py] [_log()] starting thread (client mode): 0xae535690
2026-04-12T14:08:28.892 [DEBUG] [Thread-190302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:08:28.911 [DEBUG] [Thread-190302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:08:28.911 [INFO] [Thread-190302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:08:28.913 [DEBUG] [Thread-190302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:08:28.913 [DEBUG] [Thread-190302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] client lang: <none>
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] server lang: <none>
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] kex follows: False
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] Compression: none
2026-04-12T14:08:28.914 [DEBUG] [Thread-190302] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:08:28.929 [DEBUG] [Thread-190302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:08:28.929 [DEBUG] [Thread-190302] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:08:28.930 [DEBUG] [Thread-190302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:08:28.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:08:28.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:08:28.931 [DEBUG] [Thread-190302] [transport.py] [_log()] userauth is OK
2026-04-12T14:08:28.931 [DEBUG] [Thread-190302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:08:28.931 [DEBUG] [Thread-190302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:08:28.931 [DEBUG] [Thread-190302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:08:28.932 [DEBUG] [Thread-190302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:08:28.950 [INFO] [Thread-190302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:08:28.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:08:29.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:08:29.282 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:08:29.520 [DEBUG] [Thread-190302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:08:29.520 [DEBUG] [Thread-190302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:08:29.521 [DEBUG] [Thread-190302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:08:29.561 [DEBUG] [Thread-190302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:08:29.561 [DEBUG] [Thread-190302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:08:29.565 [DEBUG] [Thread-190302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:08:29.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:08:29.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:08:29.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:08:29.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:08:29.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:08:29.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:08:29.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:08:29.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:08:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:08:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.505662 -999.00  +14.40  13.99     78  +10.70 1 3 1 1 1   888    0 4.22 29.38 ----- 13.0 14.0 261.3 18.5 20.8 -10.0 20.3 -9.2 19.9 -8.0 20.5 -9.8
2026-04-12T14:08:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:08:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:08:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.505662
2026-04-12T14:08:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:08:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:08:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:08:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:08:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:08:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:07:54', tmtdew=4.06291, humidity=76.6435, cloud=0.0, wind=16.7616, temperature=15.2729, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:08:09.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:08:29.593 [DEBUG] [Thread-190302] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:08:29.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:08:29.689 [DEBUG] [Thread-190305] [transport.py] [_log()] starting thread (client mode): 0xb0f42770
2026-04-12T14:08:29.689 [DEBUG] [Thread-190305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:08:29.704 [DEBUG] [Thread-190305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:08:29.704 [INFO] [Thread-190305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:08:29.712 [DEBUG] [Thread-190305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:08:29.712 [DEBUG] [Thread-190305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:08:29.713 [DEBUG] [Thread-190305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:08:29.713 [DEBUG] [Thread-190305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:08:29.713 [DEBUG] [Thread-190305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:08:29.713 [DEBUG] [Thread-190305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:08:29.713 [DEBUG] [Thread-190305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:08:29.713 [DEBUG] [Thread-190305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:08:29.713 [DEBUG] [Thread-190305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] client lang: <none>
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] server lang: <none>
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] kex follows: False
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] Compression: none
2026-04-12T14:08:29.714 [DEBUG] [Thread-190305] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:08:29.778 [DEBUG] [Thread-190305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:08:29.778 [DEBUG] [Thread-190305] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:08:29.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:08:29.779 [DEBUG] [Thread-190305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:08:29.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:08:29.837 [DEBUG] [Thread-190305] [transport.py] [_log()] userauth is OK
2026-04-12T14:08:29.837 [DEBUG] [Thread-190305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:08:29.837 [DEBUG] [Thread-190305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:08:29.837 [DEBUG] [Thread-190305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:08:29.838 [DEBUG] [Thread-190305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:08:29.856 [INFO] [Thread-190305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:08:29.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:08:29.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:08:30.664 [DEBUG] [Thread-190305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:08:30.664 [DEBUG] [Thread-190305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:08:30.712 [DEBUG] [Thread-190305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:08:30.712 [DEBUG] [Thread-190305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:08:30.722 [DEBUG] [Thread-190305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:08:30.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:08:30.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:08:30.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
2026-04-12T14:08:30.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:08:30.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:08:30.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:08:30.759 [DEBUG] [Thread-190305] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:08:35.846 [DEBUG] [Thread-190307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:08:38.458 [DEBUG] [Thread-190308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:08:50.900 [DEBUG] [Thread-190309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:09:00.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:09:00.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:09:00.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:09:02.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 8, 29), 3.70136, 78.4732, 0.0, 14.1696, 14.5192, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:09:02.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:08:29
2026-04-12T14:09:02.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:09:02.609 [DEBUG] [Thread-190310] [transport.py] [_log()] starting thread (client mode): 0xae535ae0
2026-04-12T14:09:02.609 [DEBUG] [Thread-190310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:09:02.622 [DEBUG] [Thread-190310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:09:02.622 [INFO] [Thread-190310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:09:02.625 [DEBUG] [Thread-190310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] client lang: <none>
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] server lang: <none>
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] kex follows: False
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] Compression: none
2026-04-12T14:09:02.626 [DEBUG] [Thread-190310] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:09:02.634 [DEBUG] [Thread-190310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:09:02.634 [DEBUG] [Thread-190310] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:09:02.635 [DEBUG] [Thread-190310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:09:02.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:09:02.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:09:02.636 [DEBUG] [Thread-190310] [transport.py] [_log()] userauth is OK
2026-04-12T14:09:02.636 [DEBUG] [Thread-190310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:09:02.636 [DEBUG] [Thread-190310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:09:02.636 [DEBUG] [Thread-190310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:09:02.636 [DEBUG] [Thread-190310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:09:02.651 [INFO] [Thread-190310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:09:02.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:09:03.229 [DEBUG] [Thread-190310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:09:03.229 [DEBUG] [Thread-190310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:09:03.229 [DEBUG] [Thread-190310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:09:03.270 [DEBUG] [Thread-190310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:09:03.270 [DEBUG] [Thread-190310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:09:03.273 [DEBUG] [Thread-190310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:09:03.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:09:03.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:09:03.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:09:03.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:09:03.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:09:03.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:09:03.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:09:03.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:09:03.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:09:03.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.506010 -999.00  +14.30  13.33     79  +10.80 1 3 1 1 1   888    0 4.21 28.25 ----- 10.0 13.3 259.1 18.5 20.9 -10.2 20.4 -9.1 20.0 -8.3 20.6 -9.6
2026-04-12T14:09:03.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:09:03.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:09:03.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.506010
2026-04-12T14:09:03.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:09:03.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:09:03.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:09:03.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:09:03.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:09:03.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:08:29', tmtdew=3.70136, humidity=78.4732, cloud=0.0, wind=14.1696, temperature=14.5192, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:08:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:09:03.297 [DEBUG] [Thread-190310] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:09:03.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:09:03.390 [DEBUG] [Thread-190313] [transport.py] [_log()] starting thread (client mode): 0xb0f54ee0
2026-04-12T14:09:03.390 [DEBUG] [Thread-190313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:09:03.405 [DEBUG] [Thread-190313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:09:03.406 [INFO] [Thread-190313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:09:03.413 [DEBUG] [Thread-190313] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:09:03.413 [DEBUG] [Thread-190313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] client lang: <none>
2026-04-12T14:09:03.414 [DEBUG] [Thread-190313] [transport.py] [_log()] server lang: <none>
2026-04-12T14:09:03.415 [DEBUG] [Thread-190313] [transport.py] [_log()] kex follows: False
2026-04-12T14:09:03.415 [DEBUG] [Thread-190313] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:09:03.415 [DEBUG] [Thread-190313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:09:03.415 [DEBUG] [Thread-190313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:09:03.415 [DEBUG] [Thread-190313] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:09:03.415 [DEBUG] [Thread-190313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:09:03.415 [DEBUG] [Thread-190313] [transport.py] [_log()] Compression: none
2026-04-12T14:09:03.416 [DEBUG] [Thread-190313] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:09:03.479 [DEBUG] [Thread-190313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:09:03.480 [DEBUG] [Thread-190313] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:09:03.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:09:03.481 [DEBUG] [Thread-190313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:09:03.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:09:03.537 [DEBUG] [Thread-190313] [transport.py] [_log()] userauth is OK
2026-04-12T14:09:03.537 [DEBUG] [Thread-190313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:09:03.538 [DEBUG] [Thread-190313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:09:03.538 [DEBUG] [Thread-190313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:09:03.538 [DEBUG] [Thread-190313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:09:03.558 [INFO] [Thread-190313] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:09:03.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:09:03.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:09:04.378 [DEBUG] [Thread-190313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:09:04.379 [DEBUG] [Thread-190313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:09:04.427 [DEBUG] [Thread-190313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:09:04.427 [DEBUG] [Thread-190313] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:09:04.437 [DEBUG] [Thread-190313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:09:04.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:09:04.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:09:04.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:09:04.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:09:04.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:09:04.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:09:04.484 [DEBUG] [Thread-190313] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:09:05.935 [DEBUG] [Thread-190315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:09:20.985 [DEBUG] [Thread-190316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:09:29.431 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:09:29.433 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:09:34.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:09:34.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:09:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:09:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 9, 5), 3.7597, 78.1748, 0.0, 14.3107, 14.486, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:09:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:09:05
2026-04-12T14:09:36.027 [DEBUG] [Thread-190317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:09:36.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:09:36.275 [DEBUG] [Thread-190318] [transport.py] [_log()] starting thread (client mode): 0xb0feb100
2026-04-12T14:09:36.275 [DEBUG] [Thread-190318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:09:36.291 [DEBUG] [Thread-190318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:09:36.291 [INFO] [Thread-190318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:36.293 [DEBUG] [Thread-190318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] client lang: <none>
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] server lang: <none>
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] kex follows: False
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] Compression: none
2026-04-12T14:09:36.294 [DEBUG] [Thread-190318] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:09:36.302 [DEBUG] [Thread-190318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:09:36.302 [DEBUG] [Thread-190318] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:09:36.303 [DEBUG] [Thread-190318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:09:36.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:09:36.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:09:36.304 [DEBUG] [Thread-190318] [transport.py] [_log()] userauth is OK
2026-04-12T14:09:36.304 [DEBUG] [Thread-190318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:09:36.305 [DEBUG] [Thread-190318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:09:36.305 [DEBUG] [Thread-190318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:09:36.305 [DEBUG] [Thread-190318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:09:36.318 [INFO] [Thread-190318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:09:36.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:09:36.918 [DEBUG] [Thread-190318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:09:36.919 [DEBUG] [Thread-190318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:09:36.919 [DEBUG] [Thread-190318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:09:36.960 [DEBUG] [Thread-190318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:09:36.960 [DEBUG] [Thread-190318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:09:36.962 [DEBUG] [Thread-190318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:09:36.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:09:36.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:09:36.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:09:36.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:09:36.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:09:36.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:09:36.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:09:36.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:09:36.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:09:36.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.506357 -999.00  +14.60  11.42     81  +11.50 1 3 1 2 1   888    0 4.08 25.27 ----- 13.9 11.4 278.8 15.8 20.9 -9.9 20.4 -9.3 20.0 -8.8 20.7 -9.0
2026-04-12T14:09:36.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:09:36.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:09:36.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.506357
2026-04-12T14:09:36.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:09:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:09:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:09:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:09:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:09:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:09:05', tmtdew=3.7597, humidity=78.1748, cloud=0.0, wind=14.3107, temperature=14.486, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:09:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:09:36.989 [DEBUG] [Thread-190318] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:09:37.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:09:37.082 [DEBUG] [Thread-190321] [transport.py] [_log()] starting thread (client mode): 0xb0f41c90
2026-04-12T14:09:37.082 [DEBUG] [Thread-190321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:09:37.097 [DEBUG] [Thread-190321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:09:37.098 [INFO] [Thread-190321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:09:37.105 [DEBUG] [Thread-190321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] client lang: <none>
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] server lang: <none>
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] kex follows: False
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] Compression: none
2026-04-12T14:09:37.106 [DEBUG] [Thread-190321] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:09:37.165 [DEBUG] [Thread-190321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:09:37.166 [DEBUG] [Thread-190321] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:09:37.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:09:37.167 [DEBUG] [Thread-190321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:09:37.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:09:37.221 [DEBUG] [Thread-190321] [transport.py] [_log()] userauth is OK
2026-04-12T14:09:37.221 [DEBUG] [Thread-190321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:09:37.221 [DEBUG] [Thread-190321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:09:37.221 [DEBUG] [Thread-190321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:09:37.222 [DEBUG] [Thread-190321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:09:37.241 [INFO] [Thread-190321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:09:37.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:09:37.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:09:38.104 [DEBUG] [Thread-190321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:09:38.105 [DEBUG] [Thread-190321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:09:38.154 [DEBUG] [Thread-190321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:09:38.154 [DEBUG] [Thread-190321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:09:38.163 [DEBUG] [Thread-190321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:09:38.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:09:38.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:09:38.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:09:38.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:09:38.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:09:38.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:09:38.197 [DEBUG] [Thread-190321] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:09:38.510 [DEBUG] [Thread-190323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:09:51.069 [DEBUG] [Thread-190324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:10:06.131 [DEBUG] [Thread-190325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:10:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:10:08.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:10:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:10:09.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 9, 40), 4.39014, 75.0182, 0.0, 12.1399, 15.4047, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:10:09.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:09:40
2026-04-12T14:10:09.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:10:10.026 [DEBUG] [Thread-190326] [transport.py] [_log()] starting thread (client mode): 0xb0f43820
2026-04-12T14:10:10.026 [DEBUG] [Thread-190326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:10:10.043 [DEBUG] [Thread-190326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:10:10.043 [INFO] [Thread-190326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:10.044 [DEBUG] [Thread-190326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] client lang: <none>
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] server lang: <none>
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] kex follows: False
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] Compression: none
2026-04-12T14:10:10.045 [DEBUG] [Thread-190326] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:10:10.055 [DEBUG] [Thread-190326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:10:10.056 [DEBUG] [Thread-190326] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:10:10.056 [DEBUG] [Thread-190326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:10:10.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:10:10.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:10:10.057 [DEBUG] [Thread-190326] [transport.py] [_log()] userauth is OK
2026-04-12T14:10:10.057 [DEBUG] [Thread-190326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:10:10.057 [DEBUG] [Thread-190326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:10:10.057 [DEBUG] [Thread-190326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:10:10.057 [DEBUG] [Thread-190326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:10:10.070 [INFO] [Thread-190326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:10:10.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:10:10.685 [DEBUG] [Thread-190326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:10:10.685 [DEBUG] [Thread-190326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:10:10.685 [DEBUG] [Thread-190326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:10:10.726 [DEBUG] [Thread-190326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:10:10.727 [DEBUG] [Thread-190326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:10:10.729 [DEBUG] [Thread-190326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:10:10.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:10:10.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:10:10.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:10:10.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:10:10.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:10:10.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:10:10.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:10:10.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:10:10.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:10:10.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.506704 -999.00  +14.50  11.00     78  +10.80 1 2 1 1 1   888    0 4.08 24.98 ----- 9.6 11.0 273.0 20.6 20.9 -12.1 20.4 -9.6 19.6 -10.7 20.6 -9.6
2026-04-12T14:10:10.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:10:10.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:10:10.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.506704
2026-04-12T14:10:10.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:10:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:10:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:10:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:10:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:10:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:09:40', tmtdew=4.39014, humidity=75.0182, cloud=0.0, wind=12.1399, temperature=15.4047, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:09:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:10:10.750 [DEBUG] [Thread-190326] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:10:10.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:10:10.854 [DEBUG] [Thread-190329] [transport.py] [_log()] starting thread (client mode): 0xae50a6e0
2026-04-12T14:10:10.854 [DEBUG] [Thread-190329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:10:10.869 [DEBUG] [Thread-190329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:10:10.870 [INFO] [Thread-190329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:10:10.877 [DEBUG] [Thread-190329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:10:10.877 [DEBUG] [Thread-190329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] client lang: <none>
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] server lang: <none>
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] kex follows: False
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] Compression: none
2026-04-12T14:10:10.878 [DEBUG] [Thread-190329] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:10:10.936 [DEBUG] [Thread-190329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:10:10.937 [DEBUG] [Thread-190329] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:10:10.938 [DEBUG] [Thread-190329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:10:10.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:10:10.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:10:10.992 [DEBUG] [Thread-190329] [transport.py] [_log()] userauth is OK
2026-04-12T14:10:10.993 [DEBUG] [Thread-190329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:10:10.993 [DEBUG] [Thread-190329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:10:10.993 [DEBUG] [Thread-190329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:10:10.993 [DEBUG] [Thread-190329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:10:11.011 [INFO] [Thread-190329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:10:11.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:10:11.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:10:11.826 [DEBUG] [Thread-190329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:10:11.826 [DEBUG] [Thread-190329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:10:11.877 [DEBUG] [Thread-190329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:10:11.877 [DEBUG] [Thread-190329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:10:11.890 [DEBUG] [Thread-190329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:10:11.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:10:11.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:10:11.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:10:11.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:10:11.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:10:11.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:10:11.937 [DEBUG] [Thread-190329] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:10:21.169 [DEBUG] [Thread-190331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:10:29.588 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:10:29.590 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:10:36.227 [DEBUG] [Thread-190332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:10:38.574 [DEBUG] [Thread-190333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:10:41.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:10:41.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:10:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:10:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 10, 15), 3.72446, 78.122, 0.0, 14.6981, 14.5518, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:10:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:10:15
2026-04-12T14:10:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:10:43.795 [DEBUG] [Thread-190334] [transport.py] [_log()] starting thread (client mode): 0xae5092d0
2026-04-12T14:10:43.796 [DEBUG] [Thread-190334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:10:43.809 [DEBUG] [Thread-190334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:10:43.809 [INFO] [Thread-190334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:10:43.811 [DEBUG] [Thread-190334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] client lang: <none>
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] server lang: <none>
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] kex follows: False
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] Compression: none
2026-04-12T14:10:43.812 [DEBUG] [Thread-190334] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:10:43.828 [DEBUG] [Thread-190334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:10:43.828 [DEBUG] [Thread-190334] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:10:43.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:10:43.829 [DEBUG] [Thread-190334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:10:43.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:10:43.832 [DEBUG] [Thread-190334] [transport.py] [_log()] userauth is OK
2026-04-12T14:10:43.832 [DEBUG] [Thread-190334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:10:43.832 [DEBUG] [Thread-190334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:10:43.832 [DEBUG] [Thread-190334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:10:43.832 [DEBUG] [Thread-190334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:10:43.856 [INFO] [Thread-190334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:10:43.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:10:44.482 [DEBUG] [Thread-190334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:10:44.482 [DEBUG] [Thread-190334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:10:44.483 [DEBUG] [Thread-190334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:10:44.523 [DEBUG] [Thread-190334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:10:44.523 [DEBUG] [Thread-190334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:10:44.526 [DEBUG] [Thread-190334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:10:44.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:10:44.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:10:44.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:10:44.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:10:44.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:10:44.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:10:44.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:10:44.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:10:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:10:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.507051 -999.00  +14.50  19.34     79  +11.00 1 3 1 1 1   888    0 4.07 23.50 ----- 15.5 19.3 270.6 21.0 20.9 -9.6 20.4 -9.8 19.9 -7.3 20.6 -9.8
2026-04-12T14:10:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:10:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:10:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.507051
2026-04-12T14:10:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:10:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:10:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:10:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:10:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:10:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:10:15', tmtdew=3.72446, humidity=78.122, cloud=0.0, wind=14.6981, temperature=14.5518, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:10:09.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:10:44.553 [DEBUG] [Thread-190334] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:10:44.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:10:44.646 [DEBUG] [Thread-190337] [transport.py] [_log()] starting thread (client mode): 0xb0fb7e50
2026-04-12T14:10:44.646 [DEBUG] [Thread-190337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:10:44.661 [DEBUG] [Thread-190337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:10:44.661 [INFO] [Thread-190337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] client lang: <none>
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] server lang: <none>
2026-04-12T14:10:44.669 [DEBUG] [Thread-190337] [transport.py] [_log()] kex follows: False
2026-04-12T14:10:44.670 [DEBUG] [Thread-190337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:10:44.670 [DEBUG] [Thread-190337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:10:44.670 [DEBUG] [Thread-190337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:10:44.670 [DEBUG] [Thread-190337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:10:44.670 [DEBUG] [Thread-190337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:10:44.670 [DEBUG] [Thread-190337] [transport.py] [_log()] Compression: none
2026-04-12T14:10:44.670 [DEBUG] [Thread-190337] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:10:44.729 [DEBUG] [Thread-190337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:10:44.730 [DEBUG] [Thread-190337] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:10:44.731 [DEBUG] [Thread-190337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:10:44.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:10:44.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:10:44.789 [DEBUG] [Thread-190337] [transport.py] [_log()] userauth is OK
2026-04-12T14:10:44.790 [DEBUG] [Thread-190337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:10:44.790 [DEBUG] [Thread-190337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:10:44.790 [DEBUG] [Thread-190337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:10:44.790 [DEBUG] [Thread-190337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:10:44.808 [INFO] [Thread-190337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:10:44.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:10:44.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:10:45.616 [DEBUG] [Thread-190337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:10:45.617 [DEBUG] [Thread-190337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:10:45.664 [DEBUG] [Thread-190337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:10:45.664 [DEBUG] [Thread-190337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:10:45.673 [DEBUG] [Thread-190337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:10:45.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:10:45.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:10:45.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:10:45.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:10:45.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:10:45.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:10:45.711 [DEBUG] [Thread-190337] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:10:51.267 [DEBUG] [Thread-190339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:06.327 [DEBUG] [Thread-190340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:11:15.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:11:15.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:11:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 10, 52), 4.64187, 73.7903, 0.0, 15.6326, 15.503, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:11:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:10:52
2026-04-12T14:11:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:11:17.555 [DEBUG] [Thread-190341] [transport.py] [_log()] starting thread (client mode): 0xa79685e0
2026-04-12T14:11:17.555 [DEBUG] [Thread-190341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:11:17.575 [DEBUG] [Thread-190341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:11:17.575 [INFO] [Thread-190341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:11:17.578 [DEBUG] [Thread-190341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:11:17.578 [DEBUG] [Thread-190341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:11:17.578 [DEBUG] [Thread-190341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] client lang: <none>
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] server lang: <none>
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] kex follows: False
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] Compression: none
2026-04-12T14:11:17.579 [DEBUG] [Thread-190341] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:11:17.595 [DEBUG] [Thread-190341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:11:17.596 [DEBUG] [Thread-190341] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:11:17.596 [DEBUG] [Thread-190341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:11:17.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:11:17.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:11:17.641 [DEBUG] [Thread-190341] [transport.py] [_log()] userauth is OK
2026-04-12T14:11:17.641 [DEBUG] [Thread-190341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:11:17.641 [DEBUG] [Thread-190341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:11:17.641 [DEBUG] [Thread-190341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:11:17.641 [DEBUG] [Thread-190341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:11:17.666 [INFO] [Thread-190341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:11:17.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:11:18.262 [DEBUG] [Thread-190341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:11:18.262 [DEBUG] [Thread-190341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:11:18.262 [DEBUG] [Thread-190341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:11:18.303 [DEBUG] [Thread-190341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:11:18.304 [DEBUG] [Thread-190341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:11:18.321 [DEBUG] [Thread-190341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:11:18.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:11:18.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:11:18.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:11:18.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:11:18.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:11:18.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:11:18.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:11:18.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:11:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:11:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.507746 -999.00  +14.20  15.25     79  +10.70 1 3 1 1 1   888    0 4.18 25.70 ----- 17.6 15.2 278.9 20.8 20.8 -10.1 20.3 -8.5 19.5 -7.5 20.6 -8.5
2026-04-12T14:11:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:11:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:11:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.507746
2026-04-12T14:11:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:11:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:11:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:11:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:11:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:11:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:10:52', tmtdew=4.64187, humidity=73.7903, cloud=0.0, wind=15.6326, temperature=15.503, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:11:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:11:18.350 [DEBUG] [Thread-190341] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:11:18.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:11:18.445 [DEBUG] [Thread-190344] [transport.py] [_log()] starting thread (client mode): 0xb0f6d690
2026-04-12T14:11:18.445 [DEBUG] [Thread-190344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:11:18.461 [DEBUG] [Thread-190344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:11:18.461 [INFO] [Thread-190344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] client lang: <none>
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] server lang: <none>
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] kex follows: False
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:11:18.471 [DEBUG] [Thread-190344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:11:18.472 [DEBUG] [Thread-190344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:11:18.472 [DEBUG] [Thread-190344] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:11:18.472 [DEBUG] [Thread-190344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:11:18.472 [DEBUG] [Thread-190344] [transport.py] [_log()] Compression: none
2026-04-12T14:11:18.472 [DEBUG] [Thread-190344] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:11:18.530 [DEBUG] [Thread-190344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:11:18.531 [DEBUG] [Thread-190344] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:11:18.532 [DEBUG] [Thread-190344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:11:18.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:11:18.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:11:18.589 [DEBUG] [Thread-190344] [transport.py] [_log()] userauth is OK
2026-04-12T14:11:18.589 [DEBUG] [Thread-190344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:11:18.589 [DEBUG] [Thread-190344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:11:18.589 [DEBUG] [Thread-190344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:11:18.590 [DEBUG] [Thread-190344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:11:18.608 [INFO] [Thread-190344] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:11:18.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:11:18.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:11:19.438 [DEBUG] [Thread-190344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:11:19.438 [DEBUG] [Thread-190344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:11:19.488 [DEBUG] [Thread-190344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:11:19.489 [DEBUG] [Thread-190344] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:11:19.499 [DEBUG] [Thread-190344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:11:19.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:11:19.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:11:19.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:11:19.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:11:19.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:11:19.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:11:19.540 [DEBUG] [Thread-190344] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:11:21.363 [DEBUG] [Thread-190346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:29.742 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:29.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:36.414 [DEBUG] [Thread-190347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:38.623 [DEBUG] [Thread-190348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:49.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:11:49.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:11:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:11:50.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 11, 27), 4.23978, 75.5471, 0.0, 13.869, 14.5352, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:11:50.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:11:27
2026-04-12T14:11:51.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:11:51.364 [DEBUG] [Thread-190349] [transport.py] [_log()] starting thread (client mode): 0xb0f6ee90
2026-04-12T14:11:51.364 [DEBUG] [Thread-190349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:11:51.384 [DEBUG] [Thread-190349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:11:51.384 [INFO] [Thread-190349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:11:51.387 [DEBUG] [Thread-190349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:11:51.387 [DEBUG] [Thread-190349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:11:51.387 [DEBUG] [Thread-190349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:11:51.387 [DEBUG] [Thread-190349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:51.387 [DEBUG] [Thread-190349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] client lang: <none>
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] server lang: <none>
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] kex follows: False
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] Compression: none
2026-04-12T14:11:51.388 [DEBUG] [Thread-190349] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:11:51.405 [DEBUG] [Thread-190349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:11:51.406 [DEBUG] [Thread-190349] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:11:51.406 [DEBUG] [Thread-190349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:11:51.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:11:51.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:11:51.409 [DEBUG] [Thread-190349] [transport.py] [_log()] userauth is OK
2026-04-12T14:11:51.409 [DEBUG] [Thread-190349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:11:51.409 [DEBUG] [Thread-190349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:11:51.409 [DEBUG] [Thread-190349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:11:51.409 [DEBUG] [Thread-190349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:11:51.433 [INFO] [Thread-190349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:11:51.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:11:51.452 [DEBUG] [Thread-190351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:11:52.075 [DEBUG] [Thread-190349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:11:52.075 [DEBUG] [Thread-190349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:11:52.076 [DEBUG] [Thread-190349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:11:52.116 [DEBUG] [Thread-190349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:11:52.116 [DEBUG] [Thread-190349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:11:52.120 [DEBUG] [Thread-190349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:11:52.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:11:52.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:11:52.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:11:52.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:11:52.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:11:52.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:11:52.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:11:52.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:11:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:11:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.508093 -999.00  +14.30  15.14     80  +11.00 1 3 1 2 1   888    0 4.06 23.29 ----- 17.8 15.1 284.6 21.1 20.7 -9.6 20.2 -8.0 19.4 -7.7 20.6 -7.5
2026-04-12T14:11:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:11:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:11:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.508093
2026-04-12T14:11:52.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:11:52.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:11:52.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:11:52.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:11:52.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:11:52.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:11:27', tmtdew=4.23978, humidity=75.5471, cloud=0.0, wind=13.869, temperature=14.5352, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:11:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:11:52.148 [DEBUG] [Thread-190349] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:11:52.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:11:52.254 [DEBUG] [Thread-190353] [transport.py] [_log()] starting thread (client mode): 0xb0f6c430
2026-04-12T14:11:52.254 [DEBUG] [Thread-190353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:11:52.271 [DEBUG] [Thread-190353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:11:52.272 [INFO] [Thread-190353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:11:52.279 [DEBUG] [Thread-190353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:11:52.280 [DEBUG] [Thread-190353] [transport.py] [_log()] client lang: <none>
2026-04-12T14:11:52.281 [DEBUG] [Thread-190353] [transport.py] [_log()] server lang: <none>
2026-04-12T14:11:52.281 [DEBUG] [Thread-190353] [transport.py] [_log()] kex follows: False
2026-04-12T14:11:52.281 [DEBUG] [Thread-190353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:11:52.281 [DEBUG] [Thread-190353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:11:52.281 [DEBUG] [Thread-190353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:11:52.281 [DEBUG] [Thread-190353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:11:52.281 [DEBUG] [Thread-190353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:11:52.282 [DEBUG] [Thread-190353] [transport.py] [_log()] Compression: none
2026-04-12T14:11:52.282 [DEBUG] [Thread-190353] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:11:52.341 [DEBUG] [Thread-190353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:11:52.341 [DEBUG] [Thread-190353] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:11:52.341 [DEBUG] [Thread-190353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:11:52.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:11:52.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:11:52.402 [DEBUG] [Thread-190353] [transport.py] [_log()] userauth is OK
2026-04-12T14:11:52.403 [DEBUG] [Thread-190353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:11:52.403 [DEBUG] [Thread-190353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:11:52.403 [DEBUG] [Thread-190353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:11:52.403 [DEBUG] [Thread-190353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:11:52.419 [INFO] [Thread-190353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:11:52.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:11:52.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:11:53.243 [DEBUG] [Thread-190353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:11:53.243 [DEBUG] [Thread-190353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:11:53.291 [DEBUG] [Thread-190353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:11:53.291 [DEBUG] [Thread-190353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:11:53.301 [DEBUG] [Thread-190353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:11:53.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:11:53.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:11:53.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:11:53.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:11:53.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:11:53.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:11:53.344 [DEBUG] [Thread-190353] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:12:06.489 [DEBUG] [Thread-190355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:12:21.548 [DEBUG] [Thread-190356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:12:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:12:23.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:12:23.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:12:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 12, 2), 4.20011, 75.7292, 0.0, 11.417, 14.4687, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:12:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:12:02
2026-04-12T14:12:25.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:12:25.159 [DEBUG] [Thread-190357] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1c0
2026-04-12T14:12:25.159 [DEBUG] [Thread-190357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:12:25.180 [DEBUG] [Thread-190357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:12:25.180 [INFO] [Thread-190357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:12:25.184 [DEBUG] [Thread-190357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:12:25.184 [DEBUG] [Thread-190357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:12:25.184 [DEBUG] [Thread-190357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:12:25.184 [DEBUG] [Thread-190357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:25.184 [DEBUG] [Thread-190357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:25.184 [DEBUG] [Thread-190357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] client lang: <none>
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] server lang: <none>
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] kex follows: False
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:12:25.185 [DEBUG] [Thread-190357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:12:25.186 [DEBUG] [Thread-190357] [transport.py] [_log()] Compression: none
2026-04-12T14:12:25.186 [DEBUG] [Thread-190357] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:12:25.204 [DEBUG] [Thread-190357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:12:25.205 [DEBUG] [Thread-190357] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:12:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:12:25.206 [DEBUG] [Thread-190357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:12:25.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:12:25.208 [DEBUG] [Thread-190357] [transport.py] [_log()] userauth is OK
2026-04-12T14:12:25.208 [DEBUG] [Thread-190357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:12:25.208 [DEBUG] [Thread-190357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:12:25.208 [DEBUG] [Thread-190357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:12:25.208 [DEBUG] [Thread-190357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:12:25.231 [INFO] [Thread-190357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:12:25.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:12:25.856 [DEBUG] [Thread-190357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:12:25.856 [DEBUG] [Thread-190357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:12:25.857 [DEBUG] [Thread-190357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:12:25.897 [DEBUG] [Thread-190357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:12:25.897 [DEBUG] [Thread-190357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:12:25.901 [DEBUG] [Thread-190357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:12:25.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:12:25.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:12:25.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:12:25.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:12:25.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:12:25.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:12:25.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:12:25.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:12:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:12:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.508440 -999.00  +14.50  15.94     79  +11.00 1 3 1 1 1   888    0 4.00 18.99 ----- 17.1 15.9 270.6 24.4 20.6 -9.9 20.1 -8.8 19.4 -6.3 20.4 -8.2
2026-04-12T14:12:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:12:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:12:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.508440
2026-04-12T14:12:25.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:12:25.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:12:25.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:12:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:12:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:12:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:12:02', tmtdew=4.20011, humidity=75.7292, cloud=0.0, wind=11.417, temperature=14.4687, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:12:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:12:25.929 [DEBUG] [Thread-190357] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:12:26.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:12:26.022 [DEBUG] [Thread-190360] [transport.py] [_log()] starting thread (client mode): 0xb0f6ce80
2026-04-12T14:12:26.022 [DEBUG] [Thread-190360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:12:26.037 [DEBUG] [Thread-190360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:12:26.038 [INFO] [Thread-190360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:12:26.045 [DEBUG] [Thread-190360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:12:26.046 [DEBUG] [Thread-190360] [transport.py] [_log()] client lang: <none>
2026-04-12T14:12:26.047 [DEBUG] [Thread-190360] [transport.py] [_log()] server lang: <none>
2026-04-12T14:12:26.047 [DEBUG] [Thread-190360] [transport.py] [_log()] kex follows: False
2026-04-12T14:12:26.047 [DEBUG] [Thread-190360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:12:26.047 [DEBUG] [Thread-190360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:12:26.047 [DEBUG] [Thread-190360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:12:26.047 [DEBUG] [Thread-190360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:12:26.047 [DEBUG] [Thread-190360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:12:26.048 [DEBUG] [Thread-190360] [transport.py] [_log()] Compression: none
2026-04-12T14:12:26.048 [DEBUG] [Thread-190360] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:12:26.106 [DEBUG] [Thread-190360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:12:26.107 [DEBUG] [Thread-190360] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:12:26.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:12:26.108 [DEBUG] [Thread-190360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:12:26.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:12:26.168 [DEBUG] [Thread-190360] [transport.py] [_log()] userauth is OK
2026-04-12T14:12:26.168 [DEBUG] [Thread-190360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:12:26.169 [DEBUG] [Thread-190360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:12:26.169 [DEBUG] [Thread-190360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:12:26.169 [DEBUG] [Thread-190360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:12:26.191 [INFO] [Thread-190360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:12:26.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:12:26.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:12:27.018 [DEBUG] [Thread-190360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:12:27.019 [DEBUG] [Thread-190360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:12:27.067 [DEBUG] [Thread-190360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:12:27.067 [DEBUG] [Thread-190360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:12:27.076 [DEBUG] [Thread-190360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:12:27.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:12:27.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:12:27.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:12:27.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:12:27.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:12:27.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:12:27.113 [DEBUG] [Thread-190360] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:12:29.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:12:29.896 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:12:36.587 [DEBUG] [Thread-190362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:12:38.676 [DEBUG] [Thread-190363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:12:51.646 [DEBUG] [Thread-190364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:12:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:12:57.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:12:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:12:58.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 12, 38), 4.35394, 75.1821, 0.0, 14.9623, 15.3037, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:12:58.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:12:38
2026-04-12T14:12:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:12:58.950 [DEBUG] [Thread-190365] [transport.py] [_log()] starting thread (client mode): 0xb39c7970
2026-04-12T14:12:58.950 [DEBUG] [Thread-190365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:12:58.969 [DEBUG] [Thread-190365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:12:58.969 [INFO] [Thread-190365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:12:58.972 [DEBUG] [Thread-190365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:12:58.972 [DEBUG] [Thread-190365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] client lang: <none>
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] server lang: <none>
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] kex follows: False
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] Compression: none
2026-04-12T14:12:58.973 [DEBUG] [Thread-190365] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:12:58.991 [DEBUG] [Thread-190365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:12:58.992 [DEBUG] [Thread-190365] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:12:58.993 [DEBUG] [Thread-190365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:12:58.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:12:58.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:12:58.995 [DEBUG] [Thread-190365] [transport.py] [_log()] userauth is OK
2026-04-12T14:12:58.995 [DEBUG] [Thread-190365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:12:58.995 [DEBUG] [Thread-190365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:12:58.995 [DEBUG] [Thread-190365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:12:58.995 [DEBUG] [Thread-190365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:12:59.031 [INFO] [Thread-190365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:12:59.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:12:59.661 [DEBUG] [Thread-190365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:12:59.662 [DEBUG] [Thread-190365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:12:59.662 [DEBUG] [Thread-190365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:12:59.703 [DEBUG] [Thread-190365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:12:59.703 [DEBUG] [Thread-190365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:12:59.707 [DEBUG] [Thread-190365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:12:59.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:12:59.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:12:59.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:12:59.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:12:59.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:12:59.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:12:59.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:12:59.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:12:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:12:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.508787 -999.00  +14.60  16.93     78  +10.90 1 3 1 1 1   888    0 3.98 19.31 ----- 18.4 16.9 291.4 21.8 20.5 -8.6 20.0 -7.7 19.4 -6.3 20.3 -7.8
2026-04-12T14:12:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:12:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:12:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.508787
2026-04-12T14:12:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:12:59.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:12:59.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:12:59.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:12:59.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:12:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:12:38', tmtdew=4.35394, humidity=75.1821, cloud=0.0, wind=14.9623, temperature=15.3037, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:12:39.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:12:59.734 [DEBUG] [Thread-190365] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:12:59.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:12:59.824 [DEBUG] [Thread-190368] [transport.py] [_log()] starting thread (client mode): 0xa796ab00
2026-04-12T14:12:59.824 [DEBUG] [Thread-190368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:12:59.841 [DEBUG] [Thread-190368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:12:59.842 [INFO] [Thread-190368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] client lang: <none>
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] server lang: <none>
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] kex follows: False
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:12:59.851 [DEBUG] [Thread-190368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:12:59.852 [DEBUG] [Thread-190368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:12:59.852 [DEBUG] [Thread-190368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:12:59.852 [DEBUG] [Thread-190368] [transport.py] [_log()] Compression: none
2026-04-12T14:12:59.852 [DEBUG] [Thread-190368] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:12:59.909 [DEBUG] [Thread-190368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:12:59.910 [DEBUG] [Thread-190368] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:12:59.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:12:59.911 [DEBUG] [Thread-190368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:12:59.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:12:59.972 [DEBUG] [Thread-190368] [transport.py] [_log()] userauth is OK
2026-04-12T14:12:59.972 [DEBUG] [Thread-190368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:12:59.972 [DEBUG] [Thread-190368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:12:59.972 [DEBUG] [Thread-190368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:12:59.972 [DEBUG] [Thread-190368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:12:59.991 [INFO] [Thread-190368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:12:59.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:12:59.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:13:00.838 [DEBUG] [Thread-190368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:13:00.838 [DEBUG] [Thread-190368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:13:00.886 [DEBUG] [Thread-190368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:13:00.886 [DEBUG] [Thread-190368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:13:00.894 [DEBUG] [Thread-190368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:13:00.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:13:00.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:13: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') -> 00000000
2026-04-12T14:13:00.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:13:00.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:13:00.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:13:00.935 [DEBUG] [Thread-190368] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:13:06.684 [DEBUG] [Thread-190370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:13:21.741 [DEBUG] [Thread-190371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:13:30.051 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:13:30.053 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:13:30.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:13:30.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:13:30.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:13:32.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 13, 13), 4.10299, 76.4914, 0.0, 21.033, 14.834, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:13:32.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:13:13
2026-04-12T14:13:32.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:13:32.811 [DEBUG] [Thread-190372] [transport.py] [_log()] starting thread (client mode): 0xb0f57b20
2026-04-12T14:13:32.811 [DEBUG] [Thread-190372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:13:32.823 [DEBUG] [Thread-190372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:13:32.823 [INFO] [Thread-190372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:13:32.826 [DEBUG] [Thread-190372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] client lang: <none>
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] server lang: <none>
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] kex follows: False
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] Compression: none
2026-04-12T14:13:32.827 [DEBUG] [Thread-190372] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:13:32.848 [DEBUG] [Thread-190372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:13:32.849 [DEBUG] [Thread-190372] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:13:32.850 [DEBUG] [Thread-190372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:13:32.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:13:32.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:13:32.853 [DEBUG] [Thread-190372] [transport.py] [_log()] userauth is OK
2026-04-12T14:13:32.853 [DEBUG] [Thread-190372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:13:32.854 [DEBUG] [Thread-190372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:13:32.854 [DEBUG] [Thread-190372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:13:32.854 [DEBUG] [Thread-190372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:13:32.890 [INFO] [Thread-190372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:13:32.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:13:33.521 [DEBUG] [Thread-190372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:13:33.521 [DEBUG] [Thread-190372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:13:33.521 [DEBUG] [Thread-190372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:13:33.562 [DEBUG] [Thread-190372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:13:33.562 [DEBUG] [Thread-190372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:13:33.565 [DEBUG] [Thread-190372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:13:33.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:13:33.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:13:33.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:13:33.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:13:33.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:13:33.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:13:33.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:13:33.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:13:33.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:13:33.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.509134 -999.00  +14.50  16.88     77  +10.70 1 3 1 1 1   888    0 4.12 22.21 ----- 16.5 16.9 276.6 25.5 20.5 -9.9 19.9 -8.1 19.1 -9.8 20.1 -8.0
2026-04-12T14:13:33.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:13:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:13:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.509134
2026-04-12T14:13:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:13:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:13:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:13:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:13:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:13:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:13:13', tmtdew=4.10299, humidity=76.4914, cloud=0.0, wind=21.033, temperature=14.834, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:13:09.178', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:13:33.590 [DEBUG] [Thread-190372] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:13:33.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:13:33.685 [DEBUG] [Thread-190375] [transport.py] [_log()] starting thread (client mode): 0xae5b5c00
2026-04-12T14:13:33.685 [DEBUG] [Thread-190375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:13:33.700 [DEBUG] [Thread-190375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:13:33.700 [INFO] [Thread-190375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] client lang: <none>
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] server lang: <none>
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] kex follows: False
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] Compression: none
2026-04-12T14:13:33.707 [DEBUG] [Thread-190375] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:13:33.764 [DEBUG] [Thread-190375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:13:33.764 [DEBUG] [Thread-190375] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:13:33.764 [DEBUG] [Thread-190375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:13:33.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:13:33.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:13:33.821 [DEBUG] [Thread-190375] [transport.py] [_log()] userauth is OK
2026-04-12T14:13:33.821 [DEBUG] [Thread-190375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:13:33.822 [DEBUG] [Thread-190375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:13:33.822 [DEBUG] [Thread-190375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:13:33.822 [DEBUG] [Thread-190375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:13:33.846 [INFO] [Thread-190375] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:13:33.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:13:33.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:13:34.698 [DEBUG] [Thread-190375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:13:34.699 [DEBUG] [Thread-190375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:13:34.750 [DEBUG] [Thread-190375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:13:34.750 [DEBUG] [Thread-190375] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:13:34.760 [DEBUG] [Thread-190375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:13:34.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:13:34.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:13:34.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:13:34.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:13:34.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:13:34.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:13:34.797 [DEBUG] [Thread-190375] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:13:36.781 [DEBUG] [Thread-190377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:13:38.728 [DEBUG] [Thread-190378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:13:51.832 [DEBUG] [Thread-190379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:14:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:14:04.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:14:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:14:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 13, 49), 4.83788, 72.8282, 0.0, 21.2774, 15.4691, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:14:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:13:49
2026-04-12T14:14:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:14:06.673 [DEBUG] [Thread-190380] [transport.py] [_log()] starting thread (client mode): 0xb0fb4280
2026-04-12T14:14:06.673 [DEBUG] [Thread-190380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:14:06.693 [DEBUG] [Thread-190380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:14:06.694 [INFO] [Thread-190380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:14:06.697 [DEBUG] [Thread-190380] [transport.py] [_log()] client lang: <none>
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] server lang: <none>
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] kex follows: False
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] Compression: none
2026-04-12T14:14:06.698 [DEBUG] [Thread-190380] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:14:06.708 [DEBUG] [Thread-190380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:14:06.709 [DEBUG] [Thread-190380] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:14:06.710 [DEBUG] [Thread-190380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:14:06.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:14:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:14:06.713 [DEBUG] [Thread-190380] [transport.py] [_log()] userauth is OK
2026-04-12T14:14:06.713 [DEBUG] [Thread-190380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:14:06.713 [DEBUG] [Thread-190380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:14:06.713 [DEBUG] [Thread-190380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:14:06.713 [DEBUG] [Thread-190380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:14:06.744 [INFO] [Thread-190380] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:14:06.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:14:06.874 [DEBUG] [Thread-190382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:14:07.374 [DEBUG] [Thread-190380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:14:07.374 [DEBUG] [Thread-190380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:14:07.375 [DEBUG] [Thread-190380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:14:07.415 [DEBUG] [Thread-190380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:14:07.415 [DEBUG] [Thread-190380] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:14:07.419 [DEBUG] [Thread-190380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:14:07.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:14:07.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:14:07.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:14:07.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:14:07.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:14:07.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:14:07.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:14:07.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:14:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:14:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.509482 -999.00  +14.30  14.62     78  +10.60 1 3 1 1 1   888    0 4.15 21.18 ----- 16.7 14.6 267.8 18.9 20.2 -9.5 19.8 -7.7 19.0 -6.3 19.9 -7.6
2026-04-12T14:14:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:14:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:14:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.509482
2026-04-12T14:14:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:14:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:14:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:14:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:14:07.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:14:07.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:13:49', tmtdew=4.83788, humidity=72.8282, cloud=0.0, wind=21.2774, temperature=15.4691, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:13:39.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:14:07.448 [DEBUG] [Thread-190380] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:14:07.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:14:07.543 [DEBUG] [Thread-190384] [transport.py] [_log()] starting thread (client mode): 0xa796b0a0
2026-04-12T14:14:07.543 [DEBUG] [Thread-190384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:14:07.557 [DEBUG] [Thread-190384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:14:07.558 [INFO] [Thread-190384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] client lang: <none>
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] server lang: <none>
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] kex follows: False
2026-04-12T14:14:07.565 [DEBUG] [Thread-190384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:14:07.566 [DEBUG] [Thread-190384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:14:07.566 [DEBUG] [Thread-190384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:14:07.566 [DEBUG] [Thread-190384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:14:07.566 [DEBUG] [Thread-190384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:14:07.566 [DEBUG] [Thread-190384] [transport.py] [_log()] Compression: none
2026-04-12T14:14:07.566 [DEBUG] [Thread-190384] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:14:07.625 [DEBUG] [Thread-190384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:14:07.625 [DEBUG] [Thread-190384] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:14:07.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:14:07.627 [DEBUG] [Thread-190384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:14:07.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:14:07.680 [DEBUG] [Thread-190384] [transport.py] [_log()] userauth is OK
2026-04-12T14:14:07.681 [DEBUG] [Thread-190384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:14:07.681 [DEBUG] [Thread-190384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:14:07.681 [DEBUG] [Thread-190384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:14:07.681 [DEBUG] [Thread-190384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:14:07.703 [INFO] [Thread-190384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:14:07.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:14:07.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:14:08.556 [DEBUG] [Thread-190384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:14:08.556 [DEBUG] [Thread-190384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:14:08.604 [DEBUG] [Thread-190384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:14:08.604 [DEBUG] [Thread-190384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:14:08.614 [DEBUG] [Thread-190384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:14:08.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:14:08.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:14:08.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:14:08.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:14:08.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:14:08.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:14:08.653 [DEBUG] [Thread-190384] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:14:21.912 [DEBUG] [Thread-190386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:14:30.210 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:14:30.211 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:14:36.973 [DEBUG] [Thread-190387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:14:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:14:38.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:14:38.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:14:38.783 [DEBUG] [Thread-190388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:14:39.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 14, 24), 4.43852, 74.5659, 0.0, 15.9682, 14.7681, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:14:39.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:14:24
2026-04-12T14:14:40.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:14:40.434 [DEBUG] [Thread-190389] [transport.py] [_log()] starting thread (client mode): 0xb0f43100
2026-04-12T14:14:40.435 [DEBUG] [Thread-190389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:14:40.455 [DEBUG] [Thread-190389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:14:40.455 [INFO] [Thread-190389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] client lang: <none>
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] server lang: <none>
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] kex follows: False
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] Compression: none
2026-04-12T14:14:40.458 [DEBUG] [Thread-190389] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:14:40.475 [DEBUG] [Thread-190389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:14:40.476 [DEBUG] [Thread-190389] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:14:40.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:14:40.477 [DEBUG] [Thread-190389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:14:40.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:14:40.479 [DEBUG] [Thread-190389] [transport.py] [_log()] userauth is OK
2026-04-12T14:14:40.479 [DEBUG] [Thread-190389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:14:40.480 [DEBUG] [Thread-190389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:14:40.480 [DEBUG] [Thread-190389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:14:40.480 [DEBUG] [Thread-190389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:14:40.504 [INFO] [Thread-190389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:14:40.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:14:41.128 [DEBUG] [Thread-190389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:14:41.128 [DEBUG] [Thread-190389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:14:41.128 [DEBUG] [Thread-190389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:14:41.169 [DEBUG] [Thread-190389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:14:41.169 [DEBUG] [Thread-190389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:14:41.173 [DEBUG] [Thread-190389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:14:41.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:14:41.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:14:41.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:14:41.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:14:41.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:14:41.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:14:41.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:14:41.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:14:41.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:14:41.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.509829 -999.00  +14.40  12.73     78  +10.80 1 3 1 1 1   888    0 4.10 19.35 ----- 15.7 12.7 276.0 17.9 20.1 -9.2 19.8 -7.6 18.9 -7.9 19.9 -7.5
2026-04-12T14:14:41.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:14:41.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:14:41.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.509829
2026-04-12T14:14:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:14:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:14:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:14:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:14:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:14:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:14:24', tmtdew=4.43852, humidity=74.5659, cloud=0.0, wind=15.9682, temperature=14.7681, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:14:09.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:14:41.201 [DEBUG] [Thread-190389] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:14:41.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:14:41.298 [DEBUG] [Thread-190392] [transport.py] [_log()] starting thread (client mode): 0xb0f41720
2026-04-12T14:14:41.298 [DEBUG] [Thread-190392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:14:41.311 [DEBUG] [Thread-190392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:14:41.312 [INFO] [Thread-190392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:14:41.319 [DEBUG] [Thread-190392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:14:41.320 [DEBUG] [Thread-190392] [transport.py] [_log()] client lang: <none>
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] server lang: <none>
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] kex follows: False
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:14:41.321 [DEBUG] [Thread-190392] [transport.py] [_log()] Compression: none
2026-04-12T14:14:41.322 [DEBUG] [Thread-190392] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:14:41.377 [DEBUG] [Thread-190392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:14:41.378 [DEBUG] [Thread-190392] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:14:41.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:14:41.378 [DEBUG] [Thread-190392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:14:41.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:14:41.433 [DEBUG] [Thread-190392] [transport.py] [_log()] userauth is OK
2026-04-12T14:14:41.433 [DEBUG] [Thread-190392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:14:41.433 [DEBUG] [Thread-190392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:14:41.434 [DEBUG] [Thread-190392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:14:41.434 [DEBUG] [Thread-190392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:14:41.453 [INFO] [Thread-190392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:14:41.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:14:41.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:14:42.299 [DEBUG] [Thread-190392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:14:42.299 [DEBUG] [Thread-190392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:14:42.347 [DEBUG] [Thread-190392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:14:42.348 [DEBUG] [Thread-190392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:14:42.363 [DEBUG] [Thread-190392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:14:42.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:14:42.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:14:42.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:14:42.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:14:42.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:14:42.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:14:42.400 [DEBUG] [Thread-190392] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:14:52.014 [DEBUG] [Thread-190394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:15:07.079 [DEBUG] [Thread-190395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:15:12.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:15:12.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:15:12.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:15:13.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 14, 59), 4.34015, 74.7951, 0.0, 18.6685, 14.7678, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:15:13.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:14:59
2026-04-12T14:15:14.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:15:14.330 [DEBUG] [Thread-190396] [transport.py] [_log()] starting thread (client mode): 0xb0f6eb60
2026-04-12T14:15:14.330 [DEBUG] [Thread-190396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:15:14.349 [DEBUG] [Thread-190396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:15:14.349 [INFO] [Thread-190396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] client lang: <none>
2026-04-12T14:15:14.351 [DEBUG] [Thread-190396] [transport.py] [_log()] server lang: <none>
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] kex follows: False
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] Compression: none
2026-04-12T14:15:14.352 [DEBUG] [Thread-190396] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:15:14.363 [DEBUG] [Thread-190396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:15:14.363 [DEBUG] [Thread-190396] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:15:14.364 [DEBUG] [Thread-190396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:15:14.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:15:14.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:15:14.366 [DEBUG] [Thread-190396] [transport.py] [_log()] userauth is OK
2026-04-12T14:15:14.366 [DEBUG] [Thread-190396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:15:14.366 [DEBUG] [Thread-190396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:15:14.366 [DEBUG] [Thread-190396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:15:14.366 [DEBUG] [Thread-190396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:15:14.384 [INFO] [Thread-190396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:15:14.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:15:15.032 [DEBUG] [Thread-190396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:15:15.032 [DEBUG] [Thread-190396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:15:15.033 [DEBUG] [Thread-190396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:15:15.073 [DEBUG] [Thread-190396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:15:15.073 [DEBUG] [Thread-190396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:15:15.076 [DEBUG] [Thread-190396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:15:15.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:15:15.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:15:15.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:15:15.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:15:15.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:15:15.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:15:15.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:15:15.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:15:15.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:15:15.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.510176 -999.00  +14.40  15.87     77  +10.50 1 3 1 1 1   888    0 3.96 17.01 ----- 15.1 15.9 273.6 20.9 20.1 -9.7 19.6 -8.3 18.9 -9.2 19.8 -8.5
2026-04-12T14:15:15.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:15:15.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:15:15.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.510176
2026-04-12T14:15:15.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:15:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:15:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:15:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:15:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:15:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:14:59', tmtdew=4.34015, humidity=74.7951, cloud=0.0, wind=18.6685, temperature=14.7678, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:14:39.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:15:15.102 [DEBUG] [Thread-190396] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:15:15.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:15:15.197 [DEBUG] [Thread-190399] [transport.py] [_log()] starting thread (client mode): 0xb39c6ce0
2026-04-12T14:15:15.197 [DEBUG] [Thread-190399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:15:15.212 [DEBUG] [Thread-190399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:15:15.212 [INFO] [Thread-190399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:15:15.219 [DEBUG] [Thread-190399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:15:15.220 [DEBUG] [Thread-190399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] client lang: <none>
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] server lang: <none>
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] kex follows: False
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] Compression: none
2026-04-12T14:15:15.221 [DEBUG] [Thread-190399] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:15:15.276 [DEBUG] [Thread-190399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:15:15.277 [DEBUG] [Thread-190399] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:15:15.277 [DEBUG] [Thread-190399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:15:15.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:15:15.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:15:15.332 [DEBUG] [Thread-190399] [transport.py] [_log()] userauth is OK
2026-04-12T14:15:15.332 [DEBUG] [Thread-190399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:15:15.332 [DEBUG] [Thread-190399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:15:15.332 [DEBUG] [Thread-190399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:15:15.332 [DEBUG] [Thread-190399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:15:15.347 [INFO] [Thread-190399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:15:15.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:15:15.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:15:16.174 [DEBUG] [Thread-190399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:15:16.174 [DEBUG] [Thread-190399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:15:16.222 [DEBUG] [Thread-190399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:15:16.222 [DEBUG] [Thread-190399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:15:16.231 [DEBUG] [Thread-190399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:15:16.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:15: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')
2026-04-12T14:15: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
2026-04-12T14:15:16.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:15:16.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:15:16.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:15:16.265 [DEBUG] [Thread-190399] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:15:22.113 [DEBUG] [Thread-190401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:15:30.361 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:15:30.362 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:15:37.165 [DEBUG] [Thread-190402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:15:38.839 [DEBUG] [Thread-190403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:15:46.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:15:46.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:15:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:15:47.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 15, 35), 4.82068, 72.8939, 0.0, 20.2896, 15.3692, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:15:47.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:15:35
2026-04-12T14:15:47.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:15:48.085 [DEBUG] [Thread-190404] [transport.py] [_log()] starting thread (client mode): 0xae5b5750
2026-04-12T14:15:48.085 [DEBUG] [Thread-190404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:15:48.104 [DEBUG] [Thread-190404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:15:48.105 [INFO] [Thread-190404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] client lang: <none>
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] server lang: <none>
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] kex follows: False
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] Compression: none
2026-04-12T14:15:48.108 [DEBUG] [Thread-190404] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:15:48.125 [DEBUG] [Thread-190404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:15:48.125 [DEBUG] [Thread-190404] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:15:48.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:15:48.126 [DEBUG] [Thread-190404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:15:48.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:15:48.128 [DEBUG] [Thread-190404] [transport.py] [_log()] userauth is OK
2026-04-12T14:15:48.128 [DEBUG] [Thread-190404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:15:48.128 [DEBUG] [Thread-190404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:15:48.128 [DEBUG] [Thread-190404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:15:48.128 [DEBUG] [Thread-190404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:15:48.148 [INFO] [Thread-190404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:15:48.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:15:48.775 [DEBUG] [Thread-190404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:15:48.775 [DEBUG] [Thread-190404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:15:48.775 [DEBUG] [Thread-190404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:15:48.816 [DEBUG] [Thread-190404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:15:48.816 [DEBUG] [Thread-190404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:15:48.819 [DEBUG] [Thread-190404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:15:48.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:15:48.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:15:48.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:15:48.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:15:48.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:15:48.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:15:48.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:15:48.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:15:48.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:15:48.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.510523 -999.00  +14.30  20.60     77  +10.30 1 3 1 1 1   888    0 3.97 15.48 ----- 17.7 20.6 275.6 24.3 20.0 -9.7 19.5 -9.3 18.8 -9.8 19.6 -8.8
2026-04-12T14:15:48.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:15:48.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:15:48.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.510523
2026-04-12T14:15:48.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:15:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:15:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:15:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:15:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:15:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:15:35', tmtdew=4.82068, humidity=72.8939, cloud=0.0, wind=20.2896, temperature=15.3692, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:15:09.187', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:15:48.848 [DEBUG] [Thread-190404] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:15:48.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:15:48.938 [DEBUG] [Thread-190407] [transport.py] [_log()] starting thread (client mode): 0xa7968430
2026-04-12T14:15:48.938 [DEBUG] [Thread-190407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:15:48.952 [DEBUG] [Thread-190407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:15:48.953 [INFO] [Thread-190407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:15:48.960 [DEBUG] [Thread-190407] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:15:48.961 [DEBUG] [Thread-190407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:15:48.961 [DEBUG] [Thread-190407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:15:48.961 [DEBUG] [Thread-190407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:48.961 [DEBUG] [Thread-190407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:15:48.961 [DEBUG] [Thread-190407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:48.961 [DEBUG] [Thread-190407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] client lang: <none>
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] server lang: <none>
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] kex follows: False
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] Compression: none
2026-04-12T14:15:48.962 [DEBUG] [Thread-190407] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:15:49.021 [DEBUG] [Thread-190407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:15:49.021 [DEBUG] [Thread-190407] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:15:49.022 [DEBUG] [Thread-190407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:15:49.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:15:49.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:15:49.081 [DEBUG] [Thread-190407] [transport.py] [_log()] userauth is OK
2026-04-12T14:15:49.082 [DEBUG] [Thread-190407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:15:49.082 [DEBUG] [Thread-190407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:15:49.082 [DEBUG] [Thread-190407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:15:49.082 [DEBUG] [Thread-190407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:15:49.101 [INFO] [Thread-190407] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:15:49.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:15:49.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:15:49.907 [DEBUG] [Thread-190407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:15:49.907 [DEBUG] [Thread-190407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:15:49.956 [DEBUG] [Thread-190407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:15:49.956 [DEBUG] [Thread-190407] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:15:49.966 [DEBUG] [Thread-190407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:15:49.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:15:49.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:15:49.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:15:49.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:15:49.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:15:49.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:15:50.004 [DEBUG] [Thread-190407] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:15:52.203 [DEBUG] [Thread-190409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:07.255 [DEBUG] [Thread-190410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:16:20.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:16:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:16:21.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 16, 10), 4.43523, 74.3144, 0.0, 19.2146, 14.7183, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:16:21.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:16:10
2026-04-12T14:16:21.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:16:21.847 [DEBUG] [Thread-190411] [transport.py] [_log()] starting thread (client mode): 0xb0f6e290
2026-04-12T14:16:21.847 [DEBUG] [Thread-190411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:16:21.874 [DEBUG] [Thread-190411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:16:21.874 [INFO] [Thread-190411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:16:21.877 [DEBUG] [Thread-190411] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:16:21.877 [DEBUG] [Thread-190411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:16:21.878 [DEBUG] [Thread-190411] [transport.py] [_log()] client lang: <none>
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] server lang: <none>
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] kex follows: False
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:16:21.879 [DEBUG] [Thread-190411] [transport.py] [_log()] Compression: none
2026-04-12T14:16:21.880 [DEBUG] [Thread-190411] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:16:21.891 [DEBUG] [Thread-190411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:16:21.892 [DEBUG] [Thread-190411] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:16:21.892 [DEBUG] [Thread-190411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:16:21.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:16:21.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:16:21.895 [DEBUG] [Thread-190411] [transport.py] [_log()] userauth is OK
2026-04-12T14:16:21.896 [DEBUG] [Thread-190411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:16:21.896 [DEBUG] [Thread-190411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:16:21.896 [DEBUG] [Thread-190411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:16:21.896 [DEBUG] [Thread-190411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:16:21.912 [INFO] [Thread-190411] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:16:21.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:16:22.292 [DEBUG] [Thread-190413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:22.534 [DEBUG] [Thread-190411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:16:22.534 [DEBUG] [Thread-190411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:16:22.535 [DEBUG] [Thread-190411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:16:22.576 [DEBUG] [Thread-190411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:16:22.576 [DEBUG] [Thread-190411] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:16:22.579 [DEBUG] [Thread-190411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:16:22.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:16:22.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:16:22.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:16:22.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:16:22.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:16:22.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:16:22.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:16:22.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:16:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:16:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.511218 -999.00  +14.30  14.00     78  +10.60 1 3 1 1 1   888    0 4.06 18.45 ----- 14.2 14.0 282.0 20.8 19.7 -9.7 19.4 -9.1 18.7 -9.1 19.4 -9.1
2026-04-12T14:16:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:16:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:16:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.511218
2026-04-12T14:16:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:16:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:16:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:16:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:16:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:16:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:16:10', tmtdew=4.43523, humidity=74.3144, cloud=0.0, wind=19.2146, temperature=14.7183, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:16:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:16:22.602 [DEBUG] [Thread-190411] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:16:22.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:16:22.695 [DEBUG] [Thread-190415] [transport.py] [_log()] starting thread (client mode): 0xb39c79a0
2026-04-12T14:16:22.695 [DEBUG] [Thread-190415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:16:22.710 [DEBUG] [Thread-190415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:16:22.710 [INFO] [Thread-190415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:16:22.718 [DEBUG] [Thread-190415] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:16:22.718 [DEBUG] [Thread-190415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:16:22.718 [DEBUG] [Thread-190415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] client lang: <none>
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] server lang: <none>
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] kex follows: False
2026-04-12T14:16:22.719 [DEBUG] [Thread-190415] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:16:22.720 [DEBUG] [Thread-190415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:16:22.720 [DEBUG] [Thread-190415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:16:22.720 [DEBUG] [Thread-190415] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:16:22.720 [DEBUG] [Thread-190415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:16:22.720 [DEBUG] [Thread-190415] [transport.py] [_log()] Compression: none
2026-04-12T14:16:22.720 [DEBUG] [Thread-190415] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:16:22.777 [DEBUG] [Thread-190415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:16:22.778 [DEBUG] [Thread-190415] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:16:22.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:16:22.780 [DEBUG] [Thread-190415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:16:22.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:16:22.842 [DEBUG] [Thread-190415] [transport.py] [_log()] userauth is OK
2026-04-12T14:16:22.842 [DEBUG] [Thread-190415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:16:22.843 [DEBUG] [Thread-190415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:16:22.843 [DEBUG] [Thread-190415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:16:22.843 [DEBUG] [Thread-190415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:16:22.865 [INFO] [Thread-190415] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:16:22.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:16:22.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:16:23.691 [DEBUG] [Thread-190415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:16:23.691 [DEBUG] [Thread-190415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:16:23.739 [DEBUG] [Thread-190415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:16:23.739 [DEBUG] [Thread-190415] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:16:23.749 [DEBUG] [Thread-190415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:16:23.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:16:23.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:16: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
2026-04-12T14:16:23.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:16:23.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:16:23.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:16:23.785 [DEBUG] [Thread-190415] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:16:30.505 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:30.506 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:37.331 [DEBUG] [Thread-190417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:38.888 [DEBUG] [Thread-190418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:52.384 [DEBUG] [Thread-190419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:16:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:16:53.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:16: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
2026-04-12T14:16:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 16, 46), 4.83876, 72.7943, 0.0, 21.4538, 15.3027, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:16:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:16:46
2026-04-12T14:16:55.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:16:55.606 [DEBUG] [Thread-190420] [transport.py] [_log()] starting thread (client mode): 0xae5b7d30
2026-04-12T14:16:55.606 [DEBUG] [Thread-190420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:16:55.629 [DEBUG] [Thread-190420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:16:55.629 [INFO] [Thread-190420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:16:55.632 [DEBUG] [Thread-190420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] client lang: <none>
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] server lang: <none>
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] kex follows: False
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:16:55.633 [DEBUG] [Thread-190420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:16:55.634 [DEBUG] [Thread-190420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:16:55.634 [DEBUG] [Thread-190420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:16:55.634 [DEBUG] [Thread-190420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:16:55.634 [DEBUG] [Thread-190420] [transport.py] [_log()] Compression: none
2026-04-12T14:16:55.634 [DEBUG] [Thread-190420] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:16:55.652 [DEBUG] [Thread-190420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:16:55.653 [DEBUG] [Thread-190420] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:16:55.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:16:55.654 [DEBUG] [Thread-190420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:16:55.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:16:55.655 [DEBUG] [Thread-190420] [transport.py] [_log()] userauth is OK
2026-04-12T14:16:55.656 [DEBUG] [Thread-190420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:16:55.656 [DEBUG] [Thread-190420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:16:55.656 [DEBUG] [Thread-190420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:16:55.656 [DEBUG] [Thread-190420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:16:55.671 [INFO] [Thread-190420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:16:55.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:16:56.308 [DEBUG] [Thread-190420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:16:56.309 [DEBUG] [Thread-190420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:16:56.309 [DEBUG] [Thread-190420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:16:56.349 [DEBUG] [Thread-190420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:16:56.349 [DEBUG] [Thread-190420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:16:56.352 [DEBUG] [Thread-190420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:16:56.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:16:56.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:16:56.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:16:56.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:16:56.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:16:56.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:16:56.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:16:56.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:16:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:16:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.511565 -999.00  +14.30  15.47     78  +10.60 1 3 1 1 1   888    0 4.16 21.41 ----- 16.5 15.5 283.4 23.2 19.6 -10.4 19.4 -9.5 18.6 -9.6 19.4 -8.9
2026-04-12T14:16:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:16:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:16:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.511565
2026-04-12T14:16:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:16:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:16:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:16:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:16:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:16:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:16:46', tmtdew=4.83876, humidity=72.7943, cloud=0.0, wind=21.4538, temperature=15.3027, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:16:39.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:16:56.377 [DEBUG] [Thread-190420] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:16:56.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:16:56.467 [DEBUG] [Thread-190423] [transport.py] [_log()] starting thread (client mode): 0xa796ac50
2026-04-12T14:16:56.468 [DEBUG] [Thread-190423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:16:56.483 [DEBUG] [Thread-190423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:16:56.484 [INFO] [Thread-190423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:16:56.491 [DEBUG] [Thread-190423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] client lang: <none>
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] server lang: <none>
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] kex follows: False
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] Compression: none
2026-04-12T14:16:56.492 [DEBUG] [Thread-190423] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:16:56.549 [DEBUG] [Thread-190423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:16:56.549 [DEBUG] [Thread-190423] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:16:56.550 [DEBUG] [Thread-190423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:16:56.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:16:56.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:16:56.605 [DEBUG] [Thread-190423] [transport.py] [_log()] userauth is OK
2026-04-12T14:16:56.605 [DEBUG] [Thread-190423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:16:56.605 [DEBUG] [Thread-190423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:16:56.605 [DEBUG] [Thread-190423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:16:56.605 [DEBUG] [Thread-190423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:16:56.624 [INFO] [Thread-190423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:16:56.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:16:56.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:16:57.454 [DEBUG] [Thread-190423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:16:57.454 [DEBUG] [Thread-190423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:16:57.502 [DEBUG] [Thread-190423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:16:57.502 [DEBUG] [Thread-190423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:16:57.511 [DEBUG] [Thread-190423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:16:57.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:16:57.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:16:57.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:16:57.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:16:57.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:16:57.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:16:57.548 [DEBUG] [Thread-190423] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:17:07.421 [DEBUG] [Thread-190425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:17:22.477 [DEBUG] [Thread-190426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:17:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:17:27.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:17:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:17:28.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 17, 21), 4.60236, 73.7314, 0.0, 19.5682, 14.5182, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:17:28.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:17:21
2026-04-12T14:17:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:17:29.414 [DEBUG] [Thread-190427] [transport.py] [_log()] starting thread (client mode): 0xae52e380
2026-04-12T14:17:29.414 [DEBUG] [Thread-190427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:17:29.434 [DEBUG] [Thread-190427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:17:29.434 [INFO] [Thread-190427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:17:29.435 [DEBUG] [Thread-190427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] client lang: <none>
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] server lang: <none>
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] kex follows: False
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:17:29.436 [DEBUG] [Thread-190427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:17:29.437 [DEBUG] [Thread-190427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:17:29.437 [DEBUG] [Thread-190427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:17:29.437 [DEBUG] [Thread-190427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:17:29.437 [DEBUG] [Thread-190427] [transport.py] [_log()] Compression: none
2026-04-12T14:17:29.437 [DEBUG] [Thread-190427] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:17:29.456 [DEBUG] [Thread-190427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:17:29.457 [DEBUG] [Thread-190427] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:17:29.457 [DEBUG] [Thread-190427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:17:29.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:17:29.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:17:29.459 [DEBUG] [Thread-190427] [transport.py] [_log()] userauth is OK
2026-04-12T14:17:29.459 [DEBUG] [Thread-190427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:17:29.459 [DEBUG] [Thread-190427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:17:29.459 [DEBUG] [Thread-190427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:17:29.459 [DEBUG] [Thread-190427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:17:29.483 [INFO] [Thread-190427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:17:29.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:17:30.120 [DEBUG] [Thread-190427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:17:30.120 [DEBUG] [Thread-190427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:17:30.120 [DEBUG] [Thread-190427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:17:30.161 [DEBUG] [Thread-190427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:17:30.161 [DEBUG] [Thread-190427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:17:30.163 [DEBUG] [Thread-190427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:17:30.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:17:30.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:17:30.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:17:30.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:17:30.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:17:30.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:17:30.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:17:30.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:17:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:17:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.511912 -999.00  +14.20  15.00     77  +10.40 1 3 1 1 1   888    0 4.22 23.61 ----- 13.3 15.0 266.0 20.7 19.7 -9.3 19.3 -9.0 18.6 -10.8 19.4 -8.8
2026-04-12T14:17:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:17:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:17:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.511912
2026-04-12T14:17:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:17:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:17:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:17:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:17:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:17:30.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:17:21', tmtdew=4.60236, humidity=73.7314, cloud=0.0, wind=19.5682, temperature=14.5182, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:17:09.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:17:30.186 [DEBUG] [Thread-190427] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:17:30.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:17:30.281 [DEBUG] [Thread-190430] [transport.py] [_log()] starting thread (client mode): 0xa7968220
2026-04-12T14:17:30.281 [DEBUG] [Thread-190430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:17:30.296 [DEBUG] [Thread-190430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:17:30.296 [INFO] [Thread-190430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:17:30.304 [DEBUG] [Thread-190430] [transport.py] [_log()] client lang: <none>
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] server lang: <none>
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] kex follows: False
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] Compression: none
2026-04-12T14:17:30.305 [DEBUG] [Thread-190430] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:17:30.360 [DEBUG] [Thread-190430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:17:30.360 [DEBUG] [Thread-190430] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:17:30.360 [DEBUG] [Thread-190430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:17:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:17:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:17:30.416 [DEBUG] [Thread-190430] [transport.py] [_log()] userauth is OK
2026-04-12T14:17:30.417 [DEBUG] [Thread-190430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:17:30.417 [DEBUG] [Thread-190430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:17:30.417 [DEBUG] [Thread-190430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:17:30.417 [DEBUG] [Thread-190430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:17:30.440 [INFO] [Thread-190430] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:17:30.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:17:30.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:17:30.656 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:17:30.657 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:17:31.271 [DEBUG] [Thread-190430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:17:31.271 [DEBUG] [Thread-190430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:17:31.318 [DEBUG] [Thread-190430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:17:31.318 [DEBUG] [Thread-190430] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:17:31.326 [DEBUG] [Thread-190430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:17:31.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:17:31.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:17:31.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:17:31.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:17:31.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:17:31.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:17:31.358 [DEBUG] [Thread-190430] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:17:37.514 [DEBUG] [Thread-190432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:17:38.923 [DEBUG] [Thread-190433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:17:52.569 [DEBUG] [Thread-190434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:18:01.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:18:01.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:18:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:18:02.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 17, 21), 4.60236, 73.7314, 0.0, 19.5682, 14.5182, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:18:02.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:17:21
2026-04-12T14:18:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:18:03.204 [DEBUG] [Thread-190435] [transport.py] [_log()] starting thread (client mode): 0xb0f42860
2026-04-12T14:18:03.204 [DEBUG] [Thread-190435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:18:03.224 [DEBUG] [Thread-190435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:18:03.224 [INFO] [Thread-190435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:18:03.226 [DEBUG] [Thread-190435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:18:03.226 [DEBUG] [Thread-190435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] client lang: <none>
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] server lang: <none>
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] kex follows: False
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] Compression: none
2026-04-12T14:18:03.227 [DEBUG] [Thread-190435] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:18:03.245 [DEBUG] [Thread-190435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:18:03.245 [DEBUG] [Thread-190435] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:18:03.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:18:03.246 [DEBUG] [Thread-190435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:18:03.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:18:03.248 [DEBUG] [Thread-190435] [transport.py] [_log()] userauth is OK
2026-04-12T14:18:03.248 [DEBUG] [Thread-190435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:18:03.248 [DEBUG] [Thread-190435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:18:03.249 [DEBUG] [Thread-190435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:18:03.249 [DEBUG] [Thread-190435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:18:03.272 [INFO] [Thread-190435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:18:03.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:18:03.867 [DEBUG] [Thread-190435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:18:03.867 [DEBUG] [Thread-190435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:18:03.868 [DEBUG] [Thread-190435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:18:03.908 [DEBUG] [Thread-190435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:18:03.908 [DEBUG] [Thread-190435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:18:03.912 [DEBUG] [Thread-190435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:18:03.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:18:03.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:18:03.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:18:03.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:18:03.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:18:03.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:18:03.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:18:03.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:18:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:18:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.512259 -999.00  +14.20  13.95     76  +10.10 1 3 1 1 1   888    0 4.31 25.55 ----- 12.5 13.9 271.4 16.9 19.6 -10.2 19.3 -9.8 18.6 -9.5 19.3 -8.8
2026-04-12T14:18:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:18:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:18:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.512259
2026-04-12T14:18:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:18:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:18:03.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:18:03.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:18:03.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:18:03.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:17:21', tmtdew=4.60236, humidity=73.7314, cloud=0.0, wind=19.5682, temperature=14.5182, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:17:39.178', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:18:03.939 [DEBUG] [Thread-190435] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:18:04.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:18:04.036 [DEBUG] [Thread-190438] [transport.py] [_log()] starting thread (client mode): 0xb0f6d000
2026-04-12T14:18:04.036 [DEBUG] [Thread-190438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:18:04.053 [DEBUG] [Thread-190438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:18:04.053 [INFO] [Thread-190438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:18:04.060 [DEBUG] [Thread-190438] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:18:04.061 [DEBUG] [Thread-190438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:18:04.061 [DEBUG] [Thread-190438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:18:04.061 [DEBUG] [Thread-190438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:04.061 [DEBUG] [Thread-190438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:04.061 [DEBUG] [Thread-190438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:04.061 [DEBUG] [Thread-190438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:04.061 [DEBUG] [Thread-190438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:18:04.062 [DEBUG] [Thread-190438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:18:04.062 [DEBUG] [Thread-190438] [transport.py] [_log()] client lang: <none>
2026-04-12T14:18:04.062 [DEBUG] [Thread-190438] [transport.py] [_log()] server lang: <none>
2026-04-12T14:18:04.062 [DEBUG] [Thread-190438] [transport.py] [_log()] kex follows: False
2026-04-12T14:18:04.062 [DEBUG] [Thread-190438] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:18:04.062 [DEBUG] [Thread-190438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:18:04.063 [DEBUG] [Thread-190438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:18:04.063 [DEBUG] [Thread-190438] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:18:04.063 [DEBUG] [Thread-190438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:18:04.063 [DEBUG] [Thread-190438] [transport.py] [_log()] Compression: none
2026-04-12T14:18:04.063 [DEBUG] [Thread-190438] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:18:04.129 [DEBUG] [Thread-190438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:18:04.130 [DEBUG] [Thread-190438] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:18:04.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:18:04.131 [DEBUG] [Thread-190438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:18:04.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:18:04.189 [DEBUG] [Thread-190438] [transport.py] [_log()] userauth is OK
2026-04-12T14:18:04.189 [DEBUG] [Thread-190438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:18:04.190 [DEBUG] [Thread-190438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:18:04.190 [DEBUG] [Thread-190438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:18:04.190 [DEBUG] [Thread-190438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:18:04.210 [INFO] [Thread-190438] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:18:04.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:18:04.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:18:05.063 [DEBUG] [Thread-190438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:18:05.063 [DEBUG] [Thread-190438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:18:05.111 [DEBUG] [Thread-190438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:18:05.111 [DEBUG] [Thread-190438] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:18:05.121 [DEBUG] [Thread-190438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:18:05.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:18:05.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:18:05.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:18:05.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:18:05.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:18:05.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:18:05.160 [DEBUG] [Thread-190438] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:18:07.605 [DEBUG] [Thread-190440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:18:22.664 [DEBUG] [Thread-190441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:18:30.811 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:18:30.812 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:18:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:18:35.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:18:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:18:36.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 17, 56), 4.56476, 73.9136, 0.0, 15.9336, 14.4181, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:18:36.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:17:56
2026-04-12T14:18:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:18:37.000 [DEBUG] [Thread-190442] [transport.py] [_log()] starting thread (client mode): 0xae52f4f0
2026-04-12T14:18:37.000 [DEBUG] [Thread-190442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:18:37.020 [DEBUG] [Thread-190442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:18:37.021 [INFO] [Thread-190442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:18:37.024 [DEBUG] [Thread-190442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:18:37.024 [DEBUG] [Thread-190442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:18:37.024 [DEBUG] [Thread-190442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:18:37.024 [DEBUG] [Thread-190442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:37.024 [DEBUG] [Thread-190442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:37.024 [DEBUG] [Thread-190442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:37.024 [DEBUG] [Thread-190442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] client lang: <none>
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] server lang: <none>
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] kex follows: False
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:18:37.025 [DEBUG] [Thread-190442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:18:37.026 [DEBUG] [Thread-190442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:18:37.026 [DEBUG] [Thread-190442] [transport.py] [_log()] Compression: none
2026-04-12T14:18:37.026 [DEBUG] [Thread-190442] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:18:37.041 [DEBUG] [Thread-190442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:18:37.042 [DEBUG] [Thread-190442] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:18:37.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:18:37.043 [DEBUG] [Thread-190442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:18:37.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:18:37.045 [DEBUG] [Thread-190442] [transport.py] [_log()] userauth is OK
2026-04-12T14:18:37.045 [DEBUG] [Thread-190442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:18:37.045 [DEBUG] [Thread-190442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:18:37.046 [DEBUG] [Thread-190442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:18:37.046 [DEBUG] [Thread-190442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:18:37.068 [INFO] [Thread-190442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:18:37.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:18:37.685 [DEBUG] [Thread-190442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:18:37.685 [DEBUG] [Thread-190442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:18:37.686 [DEBUG] [Thread-190442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:18:37.701 [DEBUG] [Thread-190444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:18:37.726 [DEBUG] [Thread-190442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:18:37.727 [DEBUG] [Thread-190442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:18:37.729 [DEBUG] [Thread-190442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:18:37.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:18:37.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:18:37.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:18:37.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:18:37.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:18:37.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:18:37.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:18:37.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:18:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:18:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.512607 -999.00  +14.20  17.65     77  +10.30 1 2 1 1 1   888    0 4.28 26.73 ----- 16.2 17.6 268.2 22.6 19.6 -9.8 19.2 -10.0 18.4 -10.4 19.2 -8.7
2026-04-12T14:18:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:18:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:18:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.512607
2026-04-12T14:18:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:18:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:18:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:18:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:18:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:18:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:17:56', tmtdew=4.56476, humidity=73.9136, cloud=0.0, wind=15.9336, temperature=14.4181, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:18:09.245', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:18:37.746 [DEBUG] [Thread-190442] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:18:37.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:18:37.841 [DEBUG] [Thread-190446] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-12T14:18:37.841 [DEBUG] [Thread-190446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:18:37.855 [DEBUG] [Thread-190446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:18:37.855 [INFO] [Thread-190446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] client lang: <none>
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] server lang: <none>
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] kex follows: False
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] Compression: none
2026-04-12T14:18:37.863 [DEBUG] [Thread-190446] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:18:37.919 [DEBUG] [Thread-190446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:18:37.920 [DEBUG] [Thread-190446] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:18:37.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:18:37.921 [DEBUG] [Thread-190446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:18:37.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:18:37.976 [DEBUG] [Thread-190446] [transport.py] [_log()] userauth is OK
2026-04-12T14:18:37.976 [DEBUG] [Thread-190446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:18:37.977 [DEBUG] [Thread-190446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:18:37.977 [DEBUG] [Thread-190446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:18:37.977 [DEBUG] [Thread-190446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:18:38.000 [INFO] [Thread-190446] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:18:38.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:18:38.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:18:38.823 [DEBUG] [Thread-190446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:18:38.824 [DEBUG] [Thread-190446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:18:38.872 [DEBUG] [Thread-190446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:18:38.872 [DEBUG] [Thread-190446] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:18:38.882 [DEBUG] [Thread-190446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:18:38.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:18:38.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:18:38.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:18:38.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:18:38.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:18:38.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:18:38.922 [DEBUG] [Thread-190446] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:18:38.957 [DEBUG] [Thread-190448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:18:52.736 [DEBUG] [Thread-190449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:19:07.791 [DEBUG] [Thread-190450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:19:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:19:08.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:19:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:19:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 18, 32), 4.66926, 73.3998, 0.0, 16.1806, 14.3684, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:19:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:18:32
2026-04-12T14:19:10.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:19:10.834 [DEBUG] [Thread-190451] [transport.py] [_log()] starting thread (client mode): 0xb0feb2e0
2026-04-12T14:19:10.834 [DEBUG] [Thread-190451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:19:10.855 [DEBUG] [Thread-190451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:19:10.855 [INFO] [Thread-190451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] client lang: <none>
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] server lang: <none>
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] kex follows: False
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] Compression: none
2026-04-12T14:19:10.859 [DEBUG] [Thread-190451] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:19:10.875 [DEBUG] [Thread-190451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:19:10.875 [DEBUG] [Thread-190451] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:19:10.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:19:10.876 [DEBUG] [Thread-190451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:19:10.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:19:10.879 [DEBUG] [Thread-190451] [transport.py] [_log()] userauth is OK
2026-04-12T14:19:10.879 [DEBUG] [Thread-190451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:19:10.879 [DEBUG] [Thread-190451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:19:10.879 [DEBUG] [Thread-190451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:19:10.879 [DEBUG] [Thread-190451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:19:10.897 [INFO] [Thread-190451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:19:10.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:19:11.493 [DEBUG] [Thread-190451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:19:11.493 [DEBUG] [Thread-190451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:19:11.494 [DEBUG] [Thread-190451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:19:11.534 [DEBUG] [Thread-190451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:19:11.534 [DEBUG] [Thread-190451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:19:11.538 [DEBUG] [Thread-190451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:19:11.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:19:11.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:19:11.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:19:11.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:19:11.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:19:11.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:19:11.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:19:11.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:19:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:19:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.512954 -999.00  +14.30  12.61     78  +10.50 1 3 1 1 1   888    0 4.28 26.41 ----- 11.6 12.6 284.4 17.0 19.6 -10.2 19.3 -9.1 18.5 -8.7 19.4 -8.5
2026-04-12T14:19:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:19:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:19:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.512954
2026-04-12T14:19:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:19:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:19:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:19:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:19:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:19:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:18:32', tmtdew=4.66926, humidity=73.3998, cloud=0.0, wind=16.1806, temperature=14.3684, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:18:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:19:11.567 [DEBUG] [Thread-190451] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:19:11.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:19:11.662 [DEBUG] [Thread-190454] [transport.py] [_log()] starting thread (client mode): 0xb0fea290
2026-04-12T14:19:11.662 [DEBUG] [Thread-190454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:19:11.678 [DEBUG] [Thread-190454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:19:11.678 [INFO] [Thread-190454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:19:11.685 [DEBUG] [Thread-190454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:19:11.685 [DEBUG] [Thread-190454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:19:11.685 [DEBUG] [Thread-190454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] client lang: <none>
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] server lang: <none>
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] kex follows: False
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] Compression: none
2026-04-12T14:19:11.686 [DEBUG] [Thread-190454] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:19:11.744 [DEBUG] [Thread-190454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:19:11.744 [DEBUG] [Thread-190454] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:19:11.744 [DEBUG] [Thread-190454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:19:11.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:19:11.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:19:11.801 [DEBUG] [Thread-190454] [transport.py] [_log()] userauth is OK
2026-04-12T14:19:11.801 [DEBUG] [Thread-190454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:19:11.801 [DEBUG] [Thread-190454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:19:11.801 [DEBUG] [Thread-190454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:19:11.801 [DEBUG] [Thread-190454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:19:11.823 [INFO] [Thread-190454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:19:11.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:19:11.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:19:12.624 [DEBUG] [Thread-190454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:19:12.624 [DEBUG] [Thread-190454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:19:12.672 [DEBUG] [Thread-190454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:19:12.672 [DEBUG] [Thread-190454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:19:12.681 [DEBUG] [Thread-190454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:19:12.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:19:12.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:19:12.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:19:12.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:19:12.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:19:12.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:19:12.718 [DEBUG] [Thread-190454] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:19:22.828 [DEBUG] [Thread-190456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:19:30.962 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:19:30.964 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:19:37.870 [DEBUG] [Thread-190457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:19:39.002 [DEBUG] [Thread-190458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:19:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:19:42.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:19:42.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:19:44.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 19, 7), 4.56357, 73.9136, 0.0, 16.798, 14.3849, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:19:44.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:19:07
2026-04-12T14:19:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:19:44.606 [DEBUG] [Thread-190459] [transport.py] [_log()] starting thread (client mode): 0xae52dc30
2026-04-12T14:19:44.606 [DEBUG] [Thread-190459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:19:44.628 [DEBUG] [Thread-190459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:19:44.628 [INFO] [Thread-190459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] client lang: <none>
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] server lang: <none>
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] kex follows: False
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:19:44.632 [DEBUG] [Thread-190459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:19:44.633 [DEBUG] [Thread-190459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:19:44.633 [DEBUG] [Thread-190459] [transport.py] [_log()] Compression: none
2026-04-12T14:19:44.633 [DEBUG] [Thread-190459] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:19:44.650 [DEBUG] [Thread-190459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:19:44.651 [DEBUG] [Thread-190459] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:19:44.651 [DEBUG] [Thread-190459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:19:44.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:19:44.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:19:44.653 [DEBUG] [Thread-190459] [transport.py] [_log()] userauth is OK
2026-04-12T14:19:44.653 [DEBUG] [Thread-190459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:19:44.654 [DEBUG] [Thread-190459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:19:44.654 [DEBUG] [Thread-190459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:19:44.654 [DEBUG] [Thread-190459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:19:44.679 [INFO] [Thread-190459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:19:44.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:19:45.332 [DEBUG] [Thread-190459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:19:45.332 [DEBUG] [Thread-190459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:19:45.333 [DEBUG] [Thread-190459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:19:45.373 [DEBUG] [Thread-190459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:19:45.373 [DEBUG] [Thread-190459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:19:45.377 [DEBUG] [Thread-190459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:19:45.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:19:45.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:19:45.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:19:45.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:19:45.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:19:45.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:19:45.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:19:45.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:19:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:19:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.513301 -999.00  +14.50   9.23     78  +10.90 1 3 1 1 1   888    0 4.31 25.79 ----- 9.6 9.2 282.2 14.5 19.6 -10.0 19.3 -9.0 18.6 -8.5 19.4 -7.9
2026-04-12T14:19:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:19:45.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:19:45.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.513301
2026-04-12T14:19:45.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:19:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:19:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:19:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:19:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:19:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:19:07', tmtdew=4.56357, humidity=73.9136, cloud=0.0, wind=16.798, temperature=14.3849, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:19:09.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:19:45.405 [DEBUG] [Thread-190459] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:19:45.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:19:45.498 [DEBUG] [Thread-190462] [transport.py] [_log()] starting thread (client mode): 0xb0f6f760
2026-04-12T14:19:45.498 [DEBUG] [Thread-190462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:19:45.517 [DEBUG] [Thread-190462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:19:45.517 [INFO] [Thread-190462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] client lang: <none>
2026-04-12T14:19:45.525 [DEBUG] [Thread-190462] [transport.py] [_log()] server lang: <none>
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] kex follows: False
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] Compression: none
2026-04-12T14:19:45.526 [DEBUG] [Thread-190462] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:19:45.584 [DEBUG] [Thread-190462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:19:45.585 [DEBUG] [Thread-190462] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:19:45.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:19:45.586 [DEBUG] [Thread-190462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:19:45.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:19:45.641 [DEBUG] [Thread-190462] [transport.py] [_log()] userauth is OK
2026-04-12T14:19:45.641 [DEBUG] [Thread-190462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:19:45.641 [DEBUG] [Thread-190462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:19:45.641 [DEBUG] [Thread-190462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:19:45.641 [DEBUG] [Thread-190462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:19:45.660 [INFO] [Thread-190462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:19:45.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:19:45.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:19:46.449 [DEBUG] [Thread-190462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:19:46.450 [DEBUG] [Thread-190462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:19:46.498 [DEBUG] [Thread-190462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:19:46.498 [DEBUG] [Thread-190462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:19:46.507 [DEBUG] [Thread-190462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:19:46.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:19:46.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:19:46.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:19:46.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:19:46.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:19:46.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:19:46.545 [DEBUG] [Thread-190462] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:19:52.906 [DEBUG] [Thread-190464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:20:07.968 [DEBUG] [Thread-190465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:20:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:20:16.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:20:16.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:20:17.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 19, 43), 4.91847, 72.3962, 0.0, 17.185, 15.2362, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:20:17.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:19:43
2026-04-12T14:20:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:20:18.368 [DEBUG] [Thread-190466] [transport.py] [_log()] starting thread (client mode): 0xb0f6c5b0
2026-04-12T14:20:18.368 [DEBUG] [Thread-190466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:20:18.388 [DEBUG] [Thread-190466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:20:18.388 [INFO] [Thread-190466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] client lang: <none>
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] server lang: <none>
2026-04-12T14:20:18.392 [DEBUG] [Thread-190466] [transport.py] [_log()] kex follows: False
2026-04-12T14:20:18.393 [DEBUG] [Thread-190466] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:20:18.393 [DEBUG] [Thread-190466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:20:18.393 [DEBUG] [Thread-190466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:20:18.393 [DEBUG] [Thread-190466] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:20:18.393 [DEBUG] [Thread-190466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:20:18.393 [DEBUG] [Thread-190466] [transport.py] [_log()] Compression: none
2026-04-12T14:20:18.393 [DEBUG] [Thread-190466] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:20:18.411 [DEBUG] [Thread-190466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:20:18.412 [DEBUG] [Thread-190466] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:20:18.412 [DEBUG] [Thread-190466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:20:18.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:20:18.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:20:18.414 [DEBUG] [Thread-190466] [transport.py] [_log()] userauth is OK
2026-04-12T14:20:18.414 [DEBUG] [Thread-190466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:20:18.414 [DEBUG] [Thread-190466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:20:18.414 [DEBUG] [Thread-190466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:20:18.415 [DEBUG] [Thread-190466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:20:18.438 [INFO] [Thread-190466] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:20:18.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:20:19.082 [DEBUG] [Thread-190466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:20:19.082 [DEBUG] [Thread-190466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:20:19.082 [DEBUG] [Thread-190466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:20:19.123 [DEBUG] [Thread-190466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:20:19.123 [DEBUG] [Thread-190466] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:20:19.126 [DEBUG] [Thread-190466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:20:19.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:20:19.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:20:19.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:20:19.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:20:19.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:20:19.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:20:19.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:20:19.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:20:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:20:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.513648 -999.00  +14.60  15.08     77  +10.60 1 2 1 1 1   888    0 4.36 28.19 ----- 17.8 15.1 278.2 18.2 19.8 -9.7 19.3 -9.2 18.5 -10.9 19.3 -9.6
2026-04-12T14:20:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:20:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:20:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.513648
2026-04-12T14:20:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:20:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:20:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:20:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:20:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:20:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:19:43', tmtdew=4.91847, humidity=72.3962, cloud=0.0, wind=17.185, temperature=15.2362, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:19:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:20:19.153 [DEBUG] [Thread-190466] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:20:19.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:20:19.239 [DEBUG] [Thread-190469] [transport.py] [_log()] starting thread (client mode): 0xb0fb5090
2026-04-12T14:20:19.239 [DEBUG] [Thread-190469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:20:19.255 [DEBUG] [Thread-190469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:20:19.255 [INFO] [Thread-190469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:20:19.262 [DEBUG] [Thread-190469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:20:19.262 [DEBUG] [Thread-190469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] client lang: <none>
2026-04-12T14:20:19.263 [DEBUG] [Thread-190469] [transport.py] [_log()] server lang: <none>
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] kex follows: False
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] Compression: none
2026-04-12T14:20:19.264 [DEBUG] [Thread-190469] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:20:19.321 [DEBUG] [Thread-190469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:20:19.321 [DEBUG] [Thread-190469] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:20:19.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:20:19.323 [DEBUG] [Thread-190469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:20:19.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:20:19.377 [DEBUG] [Thread-190469] [transport.py] [_log()] userauth is OK
2026-04-12T14:20:19.377 [DEBUG] [Thread-190469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:20:19.377 [DEBUG] [Thread-190469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:20:19.377 [DEBUG] [Thread-190469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:20:19.377 [DEBUG] [Thread-190469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:20:19.397 [INFO] [Thread-190469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:20:19.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:20:19.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:20:20.210 [DEBUG] [Thread-190469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:20:20.210 [DEBUG] [Thread-190469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:20:20.258 [DEBUG] [Thread-190469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:20:20.259 [DEBUG] [Thread-190469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:20:20.268 [DEBUG] [Thread-190469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:20:20.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:20:20.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:20:20.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:20:20.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:20:20.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:20:20.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:20:20.302 [DEBUG] [Thread-190469] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:20:23.004 [DEBUG] [Thread-190471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:20:31.104 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:20:31.106 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:20:38.045 [DEBUG] [Thread-190472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:20:39.037 [DEBUG] [Thread-190473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:20:50.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:20:50.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:20:50.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:20:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 20, 18), 4.6387, 73.7975, 0.0, 19.391, 14.568, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:20:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:20:18
2026-04-12T14:20:51.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:20:52.091 [DEBUG] [Thread-190474] [transport.py] [_log()] starting thread (client mode): 0xb0feb670
2026-04-12T14:20:52.091 [DEBUG] [Thread-190474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:20:52.106 [DEBUG] [Thread-190474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:20:52.106 [INFO] [Thread-190474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] client lang: <none>
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] server lang: <none>
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] kex follows: False
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] Compression: none
2026-04-12T14:20:52.109 [DEBUG] [Thread-190474] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:20:52.126 [DEBUG] [Thread-190474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:20:52.127 [DEBUG] [Thread-190474] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:20:52.127 [DEBUG] [Thread-190474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:20:52.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:20:52.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:20:52.129 [DEBUG] [Thread-190474] [transport.py] [_log()] userauth is OK
2026-04-12T14:20:52.129 [DEBUG] [Thread-190474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:20:52.129 [DEBUG] [Thread-190474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:20:52.129 [DEBUG] [Thread-190474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:20:52.130 [DEBUG] [Thread-190474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:20:52.153 [INFO] [Thread-190474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:20:52.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:20:52.766 [DEBUG] [Thread-190474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:20:52.766 [DEBUG] [Thread-190474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:20:52.767 [DEBUG] [Thread-190474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:20:52.807 [DEBUG] [Thread-190474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:20:52.807 [DEBUG] [Thread-190474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:20:52.811 [DEBUG] [Thread-190474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:20:52.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:20:52.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:20:52.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:20:52.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:20:52.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:20:52.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:20:52.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:20:52.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:20:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:20:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.513995 -999.00  +14.40  14.62     76  +10.40 1 3 1 1 1   888    0 4.43 28.66 ----- 12.0 14.6 288.0 19.8 19.5 -10.1 19.2 -9.0 18.4 -8.8 19.4 -8.1
2026-04-12T14:20:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:20:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:20:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.513995
2026-04-12T14:20:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:20:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:20:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:20:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:20:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:20:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:20:18', tmtdew=4.6387, humidity=73.7975, cloud=0.0, wind=19.391, temperature=14.568, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:20:09.168', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:20:52.838 [DEBUG] [Thread-190474] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:20:52.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:20:53.085 [DEBUG] [Thread-190477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:21:08.142 [DEBUG] [Thread-190478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:21:23.180 [DEBUG] [Thread-190479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:21:31.247 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:21:31.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:21:38.218 [DEBUG] [Thread-190480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:21:39.071 [DEBUG] [Thread-190481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:21:53.251 [DEBUG] [Thread-190482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:22:08.288 [DEBUG] [Thread-190483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:22:23.327 [DEBUG] [Thread-190484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:22:31.397 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:22:31.398 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:22:38.366 [DEBUG] [Thread-190485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:22:39.105 [DEBUG] [Thread-190486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:22:53.406 [DEBUG] [Thread-190487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:23:07.647 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T14:23:08.443 [DEBUG] [Thread-190488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:23:23.481 [DEBUG] [Thread-190489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:23:31.552 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:23:31.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:23:37.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:23:37.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:23:37.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:23:38.519 [DEBUG] [Thread-190490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:23:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 23, 15), 4.69331, 73.2997, 0.0, 16.3224, 14.8507, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:23:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:23:15
2026-04-12T14:23:39.139 [DEBUG] [Thread-190491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:23:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:23:39.470 [DEBUG] [Thread-190492] [transport.py] [_log()] starting thread (client mode): 0xae5b6f20
2026-04-12T14:23:39.471 [DEBUG] [Thread-190492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:23:39.490 [DEBUG] [Thread-190492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:23:39.490 [INFO] [Thread-190492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:23:39.493 [DEBUG] [Thread-190492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] client lang: <none>
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] server lang: <none>
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] kex follows: False
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:23:39.494 [DEBUG] [Thread-190492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:23:39.495 [DEBUG] [Thread-190492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:23:39.495 [DEBUG] [Thread-190492] [transport.py] [_log()] Compression: none
2026-04-12T14:23:39.495 [DEBUG] [Thread-190492] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:23:39.513 [DEBUG] [Thread-190492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:23:39.514 [DEBUG] [Thread-190492] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:23:39.514 [DEBUG] [Thread-190492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:23:39.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:23:39.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:23:39.516 [DEBUG] [Thread-190492] [transport.py] [_log()] userauth is OK
2026-04-12T14:23:39.516 [DEBUG] [Thread-190492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:23:39.517 [DEBUG] [Thread-190492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:23:39.517 [DEBUG] [Thread-190492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:23:39.517 [DEBUG] [Thread-190492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:23:39.552 [INFO] [Thread-190492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:23:39.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:23:40.165 [DEBUG] [Thread-190492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:23:40.166 [DEBUG] [Thread-190492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:23:40.166 [DEBUG] [Thread-190492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:23:40.207 [DEBUG] [Thread-190492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:23:40.207 [DEBUG] [Thread-190492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:23:40.210 [DEBUG] [Thread-190492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:23:40.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:23:40.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:23:40.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:23:40.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:23:40.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:23:40.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:23:40.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:23:40.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:23:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:23:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.516079 -999.00  +14.70  14.07     76  +10.60 1 3 1 1 1   888    0 4.70 34.04 ----- 17.4 14.1 266.4 19.5 19.4 -10.5 19.1 -9.4 18.6 -7.5 19.1 -8.7
2026-04-12T14:23:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:23:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:23:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.516079
2026-04-12T14:23:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:23:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:23:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:23:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:23:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:23:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:23:15', tmtdew=4.69331, humidity=73.2997, cloud=0.0, wind=16.3224, temperature=14.8507, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:23:09.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:23:40.236 [DEBUG] [Thread-190492] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:23:40.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:23:40.332 [DEBUG] [Thread-190495] [transport.py] [_log()] starting thread (client mode): 0xae5b4a30
2026-04-12T14:23:40.332 [DEBUG] [Thread-190495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:23:40.346 [DEBUG] [Thread-190495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:23:40.347 [INFO] [Thread-190495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:23:40.354 [DEBUG] [Thread-190495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:23:40.354 [DEBUG] [Thread-190495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] client lang: <none>
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] server lang: <none>
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] kex follows: False
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] Compression: none
2026-04-12T14:23:40.355 [DEBUG] [Thread-190495] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:23:40.412 [DEBUG] [Thread-190495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:23:40.413 [DEBUG] [Thread-190495] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:23:40.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:23:40.414 [DEBUG] [Thread-190495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:23:40.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:23:40.469 [DEBUG] [Thread-190495] [transport.py] [_log()] userauth is OK
2026-04-12T14:23:40.469 [DEBUG] [Thread-190495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:23:40.469 [DEBUG] [Thread-190495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:23:40.469 [DEBUG] [Thread-190495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:23:40.469 [DEBUG] [Thread-190495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:23:40.488 [INFO] [Thread-190495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:23:40.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:23:40.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:23:41.296 [DEBUG] [Thread-190495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:23:41.296 [DEBUG] [Thread-190495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:23:41.344 [DEBUG] [Thread-190495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:23:41.344 [DEBUG] [Thread-190495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:23:41.353 [DEBUG] [Thread-190495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:23:41.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:23:41.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:23: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') -> 00000000
2026-04-12T14:23:41.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:23:41.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:23:41.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:23:41.391 [DEBUG] [Thread-190495] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:23:53.553 [DEBUG] [Thread-190497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:24:08.614 [DEBUG] [Thread-190498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:24:11.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:24:11.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:24:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:24:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 23, 51), 4.9324, 72.3287, 0.0, 16.5146, 15.235, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:24:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:23:51
2026-04-12T14:24:13.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:24:13.195 [DEBUG] [Thread-190499] [transport.py] [_log()] starting thread (client mode): 0xae536200
2026-04-12T14:24:13.195 [DEBUG] [Thread-190499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:24:13.216 [DEBUG] [Thread-190499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:24:13.216 [INFO] [Thread-190499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] client lang: <none>
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] server lang: <none>
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] kex follows: False
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] Compression: none
2026-04-12T14:24:13.219 [DEBUG] [Thread-190499] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:24:13.236 [DEBUG] [Thread-190499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:24:13.237 [DEBUG] [Thread-190499] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:24:13.237 [DEBUG] [Thread-190499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:24:13.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:24:13.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:24:13.239 [DEBUG] [Thread-190499] [transport.py] [_log()] userauth is OK
2026-04-12T14:24:13.239 [DEBUG] [Thread-190499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:24:13.240 [DEBUG] [Thread-190499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:24:13.240 [DEBUG] [Thread-190499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:24:13.240 [DEBUG] [Thread-190499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:24:13.263 [INFO] [Thread-190499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:24:13.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:24:13.860 [DEBUG] [Thread-190499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:24:13.861 [DEBUG] [Thread-190499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:24:13.861 [DEBUG] [Thread-190499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:24:13.902 [DEBUG] [Thread-190499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:24:13.902 [DEBUG] [Thread-190499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:24:13.906 [DEBUG] [Thread-190499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:24:13.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:24:13.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:24:13.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:24:13.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:24:13.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:24:13.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:24:13.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:24:13.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:24:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:24:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.516426 -999.00  +14.70  10.68     76  +10.60 1 3 1 1 1   888    0 4.70 33.07 ----- 9.4 10.7 263.0 16.0 19.4 -9.8 19.1 -9.3 18.6 -9.2 19.1 -8.9
2026-04-12T14:24:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:24:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:24:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.516426
2026-04-12T14:24:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:23:51', tmtdew=4.9324, humidity=72.3287, cloud=0.0, wind=16.5146, temperature=15.235, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:23:39.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:24:13.933 [DEBUG] [Thread-190499] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:24:14.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:24:14.028 [DEBUG] [Thread-190502] [transport.py] [_log()] starting thread (client mode): 0xae52f910
2026-04-12T14:24:14.028 [DEBUG] [Thread-190502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:24:14.047 [DEBUG] [Thread-190502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:24:14.047 [INFO] [Thread-190502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:24:14.055 [DEBUG] [Thread-190502] [transport.py] [_log()] client lang: <none>
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] server lang: <none>
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] kex follows: False
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] Compression: none
2026-04-12T14:24:14.056 [DEBUG] [Thread-190502] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:24:14.112 [DEBUG] [Thread-190502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:24:14.113 [DEBUG] [Thread-190502] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:24:14.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:24:14.114 [DEBUG] [Thread-190502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:24:14.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:24:14.170 [DEBUG] [Thread-190502] [transport.py] [_log()] userauth is OK
2026-04-12T14:24:14.171 [DEBUG] [Thread-190502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:24:14.171 [DEBUG] [Thread-190502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:24:14.171 [DEBUG] [Thread-190502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:24:14.171 [DEBUG] [Thread-190502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:24:14.191 [INFO] [Thread-190502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:24:14.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:24:14.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:24:15.009 [DEBUG] [Thread-190502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:24:15.010 [DEBUG] [Thread-190502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:24:15.059 [DEBUG] [Thread-190502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:24:15.059 [DEBUG] [Thread-190502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:24:15.069 [DEBUG] [Thread-190502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:24:15.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:24:15.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:24: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') -> 00000000
2026-04-12T14:24:15.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:24:15.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:24:15.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:24:15.106 [DEBUG] [Thread-190502] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:24:23.652 [DEBUG] [Thread-190504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:24:31.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:24:31.713 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:24:38.703 [DEBUG] [Thread-190505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:24:39.184 [DEBUG] [Thread-190506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:24:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:24:45.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:24:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:24:46.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 24, 26), 4.79092, 73.0481, 0.0, 14.7341, 14.5839, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:24:46.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:24:26
2026-04-12T14:24:46.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:24:46.940 [DEBUG] [Thread-190507] [transport.py] [_log()] starting thread (client mode): 0xb0fb7640
2026-04-12T14:24:46.940 [DEBUG] [Thread-190507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:24:46.962 [DEBUG] [Thread-190507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:24:46.962 [INFO] [Thread-190507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] client lang: <none>
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] server lang: <none>
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] kex follows: False
2026-04-12T14:24:46.965 [DEBUG] [Thread-190507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:24:46.966 [DEBUG] [Thread-190507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:24:46.966 [DEBUG] [Thread-190507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:24:46.966 [DEBUG] [Thread-190507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:24:46.966 [DEBUG] [Thread-190507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:24:46.966 [DEBUG] [Thread-190507] [transport.py] [_log()] Compression: none
2026-04-12T14:24:46.966 [DEBUG] [Thread-190507] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:24:46.984 [DEBUG] [Thread-190507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:24:46.985 [DEBUG] [Thread-190507] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:24:46.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:24:46.986 [DEBUG] [Thread-190507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:24:46.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:24:46.988 [DEBUG] [Thread-190507] [transport.py] [_log()] userauth is OK
2026-04-12T14:24:46.988 [DEBUG] [Thread-190507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:24:46.988 [DEBUG] [Thread-190507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:24:46.989 [DEBUG] [Thread-190507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:24:46.989 [DEBUG] [Thread-190507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:24:47.013 [INFO] [Thread-190507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:24:47.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:24:47.670 [DEBUG] [Thread-190507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:24:47.670 [DEBUG] [Thread-190507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:24:47.670 [DEBUG] [Thread-190507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:24:47.712 [DEBUG] [Thread-190507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:24:47.712 [DEBUG] [Thread-190507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:24:47.715 [DEBUG] [Thread-190507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:24:47.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:24:47.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:24:47.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:24:47.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:24:47.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:24:47.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:24:47.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:24:47.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:24:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:24:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.516773 -999.00  +14.70   6.18     76  +10.60 1 3 1 1 1   888    0 4.61 32.06 ----- 10.3 6.2 253.6 16.2 19.4 -9.8 19.1 -9.0 18.6 -7.3 19.2 -7.9
2026-04-12T14:24:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:24:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:24:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.516773
2026-04-12T14:24:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:24:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:24:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:24:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:24:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:24:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:24:26', tmtdew=4.79092, humidity=73.0481, cloud=0.0, wind=14.7341, temperature=14.5839, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:24:09.187', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:24:47.738 [DEBUG] [Thread-190507] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:24:47.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:24:47.834 [DEBUG] [Thread-190510] [transport.py] [_log()] starting thread (client mode): 0xae509ab0
2026-04-12T14:24:47.834 [DEBUG] [Thread-190510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:24:47.848 [DEBUG] [Thread-190510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:24:47.848 [INFO] [Thread-190510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] client lang: <none>
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] server lang: <none>
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] kex follows: False
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:24:47.855 [DEBUG] [Thread-190510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:24:47.856 [DEBUG] [Thread-190510] [transport.py] [_log()] Compression: none
2026-04-12T14:24:47.856 [DEBUG] [Thread-190510] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:24:47.916 [DEBUG] [Thread-190510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:24:47.917 [DEBUG] [Thread-190510] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:24:47.917 [DEBUG] [Thread-190510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:24:47.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:24:47.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:24:47.972 [DEBUG] [Thread-190510] [transport.py] [_log()] userauth is OK
2026-04-12T14:24:47.972 [DEBUG] [Thread-190510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:24:47.972 [DEBUG] [Thread-190510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:24:47.972 [DEBUG] [Thread-190510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:24:47.973 [DEBUG] [Thread-190510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:24:47.991 [INFO] [Thread-190510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:24:47.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:24:47.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:24:48.801 [DEBUG] [Thread-190510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:24:48.801 [DEBUG] [Thread-190510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:24:48.849 [DEBUG] [Thread-190510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:24:48.850 [DEBUG] [Thread-190510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:24:48.859 [DEBUG] [Thread-190510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:24:48.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:24:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:24:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:24:48.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:24:48.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:24:48.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:24:48.897 [DEBUG] [Thread-190510] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:24:53.741 [DEBUG] [Thread-190512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:08.797 [DEBUG] [Thread-190513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:18.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:25:18.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:25:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:25:20.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 25, 1), 4.76967, 73.1475, 0.0, 15.3868, 14.5673, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:25:20.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:25:01
2026-04-12T14:25:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:25:20.712 [DEBUG] [Thread-190514] [transport.py] [_log()] starting thread (client mode): 0xae50b550
2026-04-12T14:25:20.713 [DEBUG] [Thread-190514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:25:20.733 [DEBUG] [Thread-190514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:25:20.734 [INFO] [Thread-190514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] client lang: <none>
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] server lang: <none>
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] kex follows: False
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] Compression: none
2026-04-12T14:25:20.737 [DEBUG] [Thread-190514] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:25:20.758 [DEBUG] [Thread-190514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:25:20.759 [DEBUG] [Thread-190514] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:25:20.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:25:20.760 [DEBUG] [Thread-190514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:25:20.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:25:20.762 [DEBUG] [Thread-190514] [transport.py] [_log()] userauth is OK
2026-04-12T14:25:20.762 [DEBUG] [Thread-190514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:25:20.762 [DEBUG] [Thread-190514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:25:20.762 [DEBUG] [Thread-190514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:25:20.763 [DEBUG] [Thread-190514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:25:20.785 [INFO] [Thread-190514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:25:20.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:25:21.397 [DEBUG] [Thread-190514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:25:21.397 [DEBUG] [Thread-190514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:25:21.397 [DEBUG] [Thread-190514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:25:21.438 [DEBUG] [Thread-190514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:25:21.438 [DEBUG] [Thread-190514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:25:21.442 [DEBUG] [Thread-190514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:25:21.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:25:21.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:25:21.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:25:21.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:25:21.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:25:21.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:25:21.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:25:21.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:25:21.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:25:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.517121 -999.00  +14.70  14.34     76  +10.70 1 3 1 1 1   888    0 4.71 36.13 ----- 14.4 14.3 275.6 16.7 19.5 -9.9 19.1 -9.4 18.6 -8.5 19.2 -8.1
2026-04-12T14:25:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:25:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:25:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.517121
2026-04-12T14:25:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:25:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:25:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:25:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:25:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:25:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:25:01', tmtdew=4.76967, humidity=73.1475, cloud=0.0, wind=15.3868, temperature=14.5673, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:24:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:25:21.471 [DEBUG] [Thread-190514] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:25:21.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:25:21.563 [DEBUG] [Thread-190517] [transport.py] [_log()] starting thread (client mode): 0xae50b3d0
2026-04-12T14:25:21.563 [DEBUG] [Thread-190517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:25:21.578 [DEBUG] [Thread-190517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:25:21.579 [INFO] [Thread-190517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:25:21.586 [DEBUG] [Thread-190517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:25:21.586 [DEBUG] [Thread-190517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:25:21.586 [DEBUG] [Thread-190517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] client lang: <none>
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] server lang: <none>
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] kex follows: False
2026-04-12T14:25:21.587 [DEBUG] [Thread-190517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:25:21.588 [DEBUG] [Thread-190517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:25:21.588 [DEBUG] [Thread-190517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:25:21.588 [DEBUG] [Thread-190517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:25:21.588 [DEBUG] [Thread-190517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:25:21.588 [DEBUG] [Thread-190517] [transport.py] [_log()] Compression: none
2026-04-12T14:25:21.588 [DEBUG] [Thread-190517] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:25:21.644 [DEBUG] [Thread-190517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:25:21.645 [DEBUG] [Thread-190517] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:25:21.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:25:21.646 [DEBUG] [Thread-190517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:25:21.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:25:21.701 [DEBUG] [Thread-190517] [transport.py] [_log()] userauth is OK
2026-04-12T14:25:21.701 [DEBUG] [Thread-190517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:25:21.701 [DEBUG] [Thread-190517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:25:21.702 [DEBUG] [Thread-190517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:25:21.702 [DEBUG] [Thread-190517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:25:21.720 [INFO] [Thread-190517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:25:21.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:25:21.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:25:22.529 [DEBUG] [Thread-190517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:25:22.529 [DEBUG] [Thread-190517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:25:22.577 [DEBUG] [Thread-190517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:25:22.577 [DEBUG] [Thread-190517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:25:22.586 [DEBUG] [Thread-190517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:25:22.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:25:22.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:25:22.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:25:22.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:25:22.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:25:22.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:25:22.622 [DEBUG] [Thread-190517] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:25:23.834 [DEBUG] [Thread-190519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:31.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:31.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:38.887 [DEBUG] [Thread-190520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:39.256 [DEBUG] [Thread-190521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:25:52.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:25:52.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:25:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 25, 37), 4.98691, 72.0958, 0.0, 20.7482, 15.4001, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:25:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:25:37
2026-04-12T14:25:53.926 [DEBUG] [Thread-190522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:25:54.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:25:54.449 [DEBUG] [Thread-190523] [transport.py] [_log()] starting thread (client mode): 0xb0fb7ca0
2026-04-12T14:25:54.449 [DEBUG] [Thread-190523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:25:54.463 [DEBUG] [Thread-190523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:25:54.463 [INFO] [Thread-190523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] client lang: <none>
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] server lang: <none>
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] kex follows: False
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] Compression: none
2026-04-12T14:25:54.466 [DEBUG] [Thread-190523] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:25:54.477 [DEBUG] [Thread-190523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:25:54.477 [DEBUG] [Thread-190523] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:25:54.478 [DEBUG] [Thread-190523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:25:54.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:25:54.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:25:54.479 [DEBUG] [Thread-190523] [transport.py] [_log()] userauth is OK
2026-04-12T14:25:54.480 [DEBUG] [Thread-190523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:25:54.480 [DEBUG] [Thread-190523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:25:54.480 [DEBUG] [Thread-190523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:25:54.480 [DEBUG] [Thread-190523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:25:54.502 [INFO] [Thread-190523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:25:54.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:25:55.279 [DEBUG] [Thread-190523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:25:55.279 [DEBUG] [Thread-190523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:25:55.280 [DEBUG] [Thread-190523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:25:55.320 [DEBUG] [Thread-190523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:25:55.320 [DEBUG] [Thread-190523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:25:55.324 [DEBUG] [Thread-190523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:25:55.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:25:55.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:25:55.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:25:55.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:25:55.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:25:55.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:25:55.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:25:55.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.517467 -999.00  +14.60  12.07     75  +10.40 1 3 1 1 1   888    0 4.74 35.66 ----- 9.5 12.1 254.4 15.0 19.4 -10.2 19.1 -9.3 18.6 -7.7 19.1 -8.7
2026-04-12T14:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.517467
2026-04-12T14:25:55.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:25:55.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:25:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:25:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:25:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:25:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:25:37', tmtdew=4.98691, humidity=72.0958, cloud=0.0, wind=20.7482, temperature=15.4001, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:25:09.149', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:25:55.352 [DEBUG] [Thread-190523] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:25:55.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:25:55.446 [DEBUG] [Thread-190526] [transport.py] [_log()] starting thread (client mode): 0xb0fb4940
2026-04-12T14:25:55.446 [DEBUG] [Thread-190526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:25:55.460 [DEBUG] [Thread-190526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:25:55.460 [INFO] [Thread-190526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:25:55.468 [DEBUG] [Thread-190526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:25:55.468 [DEBUG] [Thread-190526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:25:55.468 [DEBUG] [Thread-190526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:25:55.468 [DEBUG] [Thread-190526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:55.468 [DEBUG] [Thread-190526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:25:55.468 [DEBUG] [Thread-190526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:55.468 [DEBUG] [Thread-190526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] client lang: <none>
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] server lang: <none>
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] kex follows: False
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] Compression: none
2026-04-12T14:25:55.469 [DEBUG] [Thread-190526] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:25:55.529 [DEBUG] [Thread-190526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:25:55.530 [DEBUG] [Thread-190526] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:25:55.530 [DEBUG] [Thread-190526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:25:55.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:25:55.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:25:55.589 [DEBUG] [Thread-190526] [transport.py] [_log()] userauth is OK
2026-04-12T14:25:55.589 [DEBUG] [Thread-190526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:25:55.589 [DEBUG] [Thread-190526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:25:55.589 [DEBUG] [Thread-190526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:25:55.589 [DEBUG] [Thread-190526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:25:55.608 [INFO] [Thread-190526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:25:55.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:25:55.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:25:56.406 [DEBUG] [Thread-190526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:25:56.406 [DEBUG] [Thread-190526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:25:56.454 [DEBUG] [Thread-190526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:25:56.455 [DEBUG] [Thread-190526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:25:56.463 [DEBUG] [Thread-190526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:25:56.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:25: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')
2026-04-12T14:25: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
2026-04-12T14:25:56.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:25:56.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:25:56.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:25:56.501 [DEBUG] [Thread-190526] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:26:08.961 [DEBUG] [Thread-190528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:26:24.014 [DEBUG] [Thread-190529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:26:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:26:26.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:26:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:26:27.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 26, 13), 4.775, 73.1308, 0.0, 11.1524, 14.5169, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:26:27.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:26:13
2026-04-12T14:26:28.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:26:28.389 [DEBUG] [Thread-190530] [transport.py] [_log()] starting thread (client mode): 0xae52e1d0
2026-04-12T14:26:28.389 [DEBUG] [Thread-190530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:26:28.410 [DEBUG] [Thread-190530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:26:28.410 [INFO] [Thread-190530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:26:28.414 [DEBUG] [Thread-190530] [transport.py] [_log()] client lang: <none>
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] server lang: <none>
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] kex follows: False
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] Compression: none
2026-04-12T14:26:28.415 [DEBUG] [Thread-190530] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:26:28.431 [DEBUG] [Thread-190530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:26:28.431 [DEBUG] [Thread-190530] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:26:28.432 [DEBUG] [Thread-190530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:26:28.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:26:28.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:26:28.432 [DEBUG] [Thread-190530] [transport.py] [_log()] userauth is OK
2026-04-12T14:26:28.432 [DEBUG] [Thread-190530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:26:28.432 [DEBUG] [Thread-190530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:26:28.432 [DEBUG] [Thread-190530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:26:28.432 [DEBUG] [Thread-190530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:26:28.443 [INFO] [Thread-190530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:26:28.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:26:29.199 [DEBUG] [Thread-190530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:26:29.199 [DEBUG] [Thread-190530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:26:29.200 [DEBUG] [Thread-190530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:26:29.240 [DEBUG] [Thread-190530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:26:29.241 [DEBUG] [Thread-190530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:26:29.243 [DEBUG] [Thread-190530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:26:29.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:26:29.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:26:29.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:26:29.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:26:29.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:26:29.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:26:29.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:26:29.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:26:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:26:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.518162 -999.00  +14.40  11.33     76  +10.40 1 2 1 1 1   888    0 4.90 40.93 ----- 10.4 11.3 274.2 15.1 19.5 -11.0 19.1 -10.0 18.6 -11.5 19.1 -9.2
2026-04-12T14:26:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:26:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:26:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.518162
2026-04-12T14:26:29.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:26:29.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:26:29.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:26:29.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:26:29.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:26:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:26:13', tmtdew=4.775, humidity=73.1308, cloud=0.0, wind=11.1524, temperature=14.5169, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:26:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:26:29.271 [DEBUG] [Thread-190530] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:26:29.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:26:29.374 [DEBUG] [Thread-190533] [transport.py] [_log()] starting thread (client mode): 0xae52d210
2026-04-12T14:26:29.374 [DEBUG] [Thread-190533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:26:29.390 [DEBUG] [Thread-190533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:26:29.390 [INFO] [Thread-190533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:26:29.402 [DEBUG] [Thread-190533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:26:29.402 [DEBUG] [Thread-190533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:26:29.403 [DEBUG] [Thread-190533] [transport.py] [_log()] client lang: <none>
2026-04-12T14:26:29.404 [DEBUG] [Thread-190533] [transport.py] [_log()] server lang: <none>
2026-04-12T14:26:29.404 [DEBUG] [Thread-190533] [transport.py] [_log()] kex follows: False
2026-04-12T14:26:29.404 [DEBUG] [Thread-190533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:26:29.404 [DEBUG] [Thread-190533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:26:29.404 [DEBUG] [Thread-190533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:26:29.404 [DEBUG] [Thread-190533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:26:29.404 [DEBUG] [Thread-190533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:26:29.405 [DEBUG] [Thread-190533] [transport.py] [_log()] Compression: none
2026-04-12T14:26:29.405 [DEBUG] [Thread-190533] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:26:29.462 [DEBUG] [Thread-190533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:26:29.463 [DEBUG] [Thread-190533] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:26:29.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:26:29.464 [DEBUG] [Thread-190533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:26:29.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:26:29.522 [DEBUG] [Thread-190533] [transport.py] [_log()] userauth is OK
2026-04-12T14:26:29.523 [DEBUG] [Thread-190533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:26:29.523 [DEBUG] [Thread-190533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:26:29.523 [DEBUG] [Thread-190533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:26:29.523 [DEBUG] [Thread-190533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:26:29.542 [INFO] [Thread-190533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:26:29.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:26:29.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:26:30.423 [DEBUG] [Thread-190533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:26:30.423 [DEBUG] [Thread-190533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:26:30.472 [DEBUG] [Thread-190533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:26:30.472 [DEBUG] [Thread-190533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:26:30.482 [DEBUG] [Thread-190533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:26:30.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:26:30.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:26:30.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:26:30.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:26:30.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:26:30.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:26:30.520 [DEBUG] [Thread-190533] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:26:32.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:26:32.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:26:39.051 [DEBUG] [Thread-190535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:26:39.283 [DEBUG] [Thread-190536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:26:54.107 [DEBUG] [Thread-190537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:27:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:27:00.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:27:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:27:01.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 26, 48), 5.02019, 71.9298, 0.0, 14.5742, 15.3666, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:27:01.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:26:48
2026-04-12T14:27:02.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:27:02.379 [DEBUG] [Thread-190538] [transport.py] [_log()] starting thread (client mode): 0xae50a620
2026-04-12T14:27:02.379 [DEBUG] [Thread-190538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:27:02.400 [DEBUG] [Thread-190538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:27:02.400 [INFO] [Thread-190538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] client lang: <none>
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] server lang: <none>
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] kex follows: False
2026-04-12T14:27:02.403 [DEBUG] [Thread-190538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:27:02.404 [DEBUG] [Thread-190538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:27:02.404 [DEBUG] [Thread-190538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:27:02.404 [DEBUG] [Thread-190538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:27:02.404 [DEBUG] [Thread-190538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:27:02.404 [DEBUG] [Thread-190538] [transport.py] [_log()] Compression: none
2026-04-12T14:27:02.404 [DEBUG] [Thread-190538] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:27:02.421 [DEBUG] [Thread-190538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:27:02.421 [DEBUG] [Thread-190538] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:27:02.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:27:02.422 [DEBUG] [Thread-190538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:27:02.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:27:02.464 [DEBUG] [Thread-190538] [transport.py] [_log()] userauth is OK
2026-04-12T14:27:02.464 [DEBUG] [Thread-190538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:27:02.464 [DEBUG] [Thread-190538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:27:02.464 [DEBUG] [Thread-190538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:27:02.464 [DEBUG] [Thread-190538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:27:02.479 [INFO] [Thread-190538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:27:02.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:27:03.202 [DEBUG] [Thread-190538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:27:03.202 [DEBUG] [Thread-190538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:27:03.202 [DEBUG] [Thread-190538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:27:03.243 [DEBUG] [Thread-190538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:27:03.243 [DEBUG] [Thread-190538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:27:03.246 [DEBUG] [Thread-190538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:27:03.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:27:03.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:27:03.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:27:03.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:27:03.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:27:03.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:27:03.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:27:03.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:27:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:27:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.518509 -999.00  +14.60  11.57     77  +10.70 1 2 1 1 1   888    0 4.97 41.91 ----- 13.9 11.6 275.4 13.3 19.4 -10.3 19.1 -9.9 18.6 -10.9 19.1 -9.4
2026-04-12T14:27:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:27:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:27:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.518509
2026-04-12T14:27:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:27:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:27:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:27:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:27:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:27:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:26:48', tmtdew=5.02019, humidity=71.9298, cloud=0.0, wind=14.5742, temperature=15.3666, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:26:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:27:03.274 [DEBUG] [Thread-190538] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:27:03.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:27:03.366 [DEBUG] [Thread-190541] [transport.py] [_log()] starting thread (client mode): 0xae508640
2026-04-12T14:27:03.366 [DEBUG] [Thread-190541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:27:03.381 [DEBUG] [Thread-190541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:27:03.381 [INFO] [Thread-190541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:27:03.389 [DEBUG] [Thread-190541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:27:03.390 [DEBUG] [Thread-190541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:27:03.390 [DEBUG] [Thread-190541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:27:03.390 [DEBUG] [Thread-190541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:03.390 [DEBUG] [Thread-190541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:03.390 [DEBUG] [Thread-190541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] client lang: <none>
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] server lang: <none>
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] kex follows: False
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] Compression: none
2026-04-12T14:27:03.391 [DEBUG] [Thread-190541] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:27:03.449 [DEBUG] [Thread-190541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:27:03.449 [DEBUG] [Thread-190541] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:27:03.450 [DEBUG] [Thread-190541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:27:03.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:27:03.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:27:03.505 [DEBUG] [Thread-190541] [transport.py] [_log()] userauth is OK
2026-04-12T14:27:03.505 [DEBUG] [Thread-190541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:27:03.505 [DEBUG] [Thread-190541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:27:03.506 [DEBUG] [Thread-190541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:27:03.506 [DEBUG] [Thread-190541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:27:03.530 [INFO] [Thread-190541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:27:03.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:27:03.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:27:04.351 [DEBUG] [Thread-190541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:27:04.351 [DEBUG] [Thread-190541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:27:04.399 [DEBUG] [Thread-190541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:27:04.399 [DEBUG] [Thread-190541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:27:04.408 [DEBUG] [Thread-190541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:27:04.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:27:04.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:27:04.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:27:04.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:27:04.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:27:04.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:27:04.445 [DEBUG] [Thread-190541] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:27:09.146 [DEBUG] [Thread-190543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:27:24.208 [DEBUG] [Thread-190544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:27:32.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:27:32.169 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:27:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:27:34.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:27:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:27:35.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 27, 23), 4.6975, 73.2826, 0.0, 16.2335, 14.6667, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:27:35.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:27:23
2026-04-12T14:27:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:27:36.299 [DEBUG] [Thread-190545] [transport.py] [_log()] starting thread (client mode): 0xb0fcdb40
2026-04-12T14:27:36.299 [DEBUG] [Thread-190545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:27:36.320 [DEBUG] [Thread-190545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:27:36.320 [INFO] [Thread-190545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:27:36.323 [DEBUG] [Thread-190545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] client lang: <none>
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] server lang: <none>
2026-04-12T14:27:36.324 [DEBUG] [Thread-190545] [transport.py] [_log()] kex follows: False
2026-04-12T14:27:36.325 [DEBUG] [Thread-190545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:27:36.325 [DEBUG] [Thread-190545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:27:36.325 [DEBUG] [Thread-190545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:27:36.325 [DEBUG] [Thread-190545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:27:36.325 [DEBUG] [Thread-190545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:27:36.325 [DEBUG] [Thread-190545] [transport.py] [_log()] Compression: none
2026-04-12T14:27:36.325 [DEBUG] [Thread-190545] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:27:36.343 [DEBUG] [Thread-190545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:27:36.343 [DEBUG] [Thread-190545] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:27:36.344 [DEBUG] [Thread-190545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:27:36.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:27:36.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:27:36.346 [DEBUG] [Thread-190545] [transport.py] [_log()] userauth is OK
2026-04-12T14:27:36.346 [DEBUG] [Thread-190545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:27:36.346 [DEBUG] [Thread-190545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:27:36.346 [DEBUG] [Thread-190545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:27:36.347 [DEBUG] [Thread-190545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:27:36.368 [INFO] [Thread-190545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:27:36.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:27:37.122 [DEBUG] [Thread-190545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:27:37.122 [DEBUG] [Thread-190545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:27:37.123 [DEBUG] [Thread-190545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:27:37.163 [DEBUG] [Thread-190545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:27:37.163 [DEBUG] [Thread-190545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:27:37.167 [DEBUG] [Thread-190545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:27:37.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:27:37.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:27:37.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:27:37.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:27:37.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:27:37.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:27:37.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:27:37.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:27:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:27:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.518857 -999.00  +14.50  14.34     77  +10.60 1 3 1 1 1   888    0 5.12 46.89 ----- 13.7 14.3 272.5 23.5 19.3 -11.7 19.1 -10.2 18.4 -9.6 19.1 -9.7
2026-04-12T14:27:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:27:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:27:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.518857
2026-04-12T14:27:37.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:27:37.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:27:37.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:27:37.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:27:37.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:27:37.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:27:23', tmtdew=4.6975, humidity=73.2826, cloud=0.0, wind=16.2335, temperature=14.6667, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:27:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:27:37.195 [DEBUG] [Thread-190545] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:27:37.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:27:37.289 [DEBUG] [Thread-190548] [transport.py] [_log()] starting thread (client mode): 0xb0fcdf90
2026-04-12T14:27:37.289 [DEBUG] [Thread-190548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:27:37.304 [DEBUG] [Thread-190548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:27:37.304 [INFO] [Thread-190548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:27:37.311 [DEBUG] [Thread-190548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:27:37.312 [DEBUG] [Thread-190548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:27:37.312 [DEBUG] [Thread-190548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:27:37.312 [DEBUG] [Thread-190548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:37.312 [DEBUG] [Thread-190548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:27:37.312 [DEBUG] [Thread-190548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:37.312 [DEBUG] [Thread-190548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:27:37.312 [DEBUG] [Thread-190548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] client lang: <none>
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] server lang: <none>
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] kex follows: False
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:27:37.313 [DEBUG] [Thread-190548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:27:37.314 [DEBUG] [Thread-190548] [transport.py] [_log()] Compression: none
2026-04-12T14:27:37.314 [DEBUG] [Thread-190548] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:27:37.369 [DEBUG] [Thread-190548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:27:37.370 [DEBUG] [Thread-190548] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:27:37.370 [DEBUG] [Thread-190548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:27:37.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:27:37.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:27:37.429 [DEBUG] [Thread-190548] [transport.py] [_log()] userauth is OK
2026-04-12T14:27:37.429 [DEBUG] [Thread-190548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:27:37.430 [DEBUG] [Thread-190548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:27:37.430 [DEBUG] [Thread-190548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:27:37.430 [DEBUG] [Thread-190548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:27:37.448 [INFO] [Thread-190548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:27:37.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:27:37.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:27:38.225 [DEBUG] [Thread-190548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:27:38.225 [DEBUG] [Thread-190548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:27:38.275 [DEBUG] [Thread-190548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:27:38.275 [DEBUG] [Thread-190548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:27:38.284 [DEBUG] [Thread-190548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:27:38.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:27:38.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:27:38.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:27:38.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:27:38.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:27:38.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:27:38.324 [DEBUG] [Thread-190548] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:27:39.246 [DEBUG] [Thread-190550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:27:39.317 [DEBUG] [Thread-190551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:27:54.299 [DEBUG] [Thread-190552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:28:08.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:28:08.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:28:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:28:09.335 [DEBUG] [Thread-190553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:28:09.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 27, 59), 4.66512, 73.4316, 0.0, 14.6452, 14.7335, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:28:09.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:27:59
2026-04-12T14:28:09.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:28:10.155 [DEBUG] [Thread-190554] [transport.py] [_log()] starting thread (client mode): 0xb0fcea10
2026-04-12T14:28:10.155 [DEBUG] [Thread-190554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:28:10.175 [DEBUG] [Thread-190554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:28:10.175 [INFO] [Thread-190554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] client lang: <none>
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] server lang: <none>
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] kex follows: False
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] Compression: none
2026-04-12T14:28:10.178 [DEBUG] [Thread-190554] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:28:10.194 [DEBUG] [Thread-190554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:28:10.194 [DEBUG] [Thread-190554] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:28:10.194 [DEBUG] [Thread-190554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:28:10.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:28:10.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:28:10.236 [DEBUG] [Thread-190554] [transport.py] [_log()] userauth is OK
2026-04-12T14:28:10.237 [DEBUG] [Thread-190554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:28:10.237 [DEBUG] [Thread-190554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:28:10.237 [DEBUG] [Thread-190554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:28:10.237 [DEBUG] [Thread-190554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:28:10.260 [INFO] [Thread-190554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:28:10.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:28:11.129 [DEBUG] [Thread-190554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:28:11.130 [DEBUG] [Thread-190554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:28:11.130 [DEBUG] [Thread-190554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:28:11.170 [DEBUG] [Thread-190554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:28:11.170 [DEBUG] [Thread-190554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:28:11.172 [DEBUG] [Thread-190554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:28:11.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:28:11.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:28:11.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:28:11.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:28:11.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:28:11.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:28:11.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:28:11.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.519204 -999.00  +14.60  11.49     76  +10.50 1 2 1 1 1   888    0 5.03 42.80 ----- 9.1 11.5 275.2 18.7 19.4 -10.7 19.1 -10.4 18.5 -10.8 19.1 -9.5
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.519204
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:28:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:27:59', tmtdew=4.66512, humidity=73.4316, cloud=0.0, wind=14.6452, temperature=14.7335, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:27:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:28:11.191 [DEBUG] [Thread-190554] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:28:11.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:28:11.273 [DEBUG] [Thread-190557] [transport.py] [_log()] starting thread (client mode): 0xae509c90
2026-04-12T14:28:11.273 [DEBUG] [Thread-190557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:28:11.288 [DEBUG] [Thread-190557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:28:11.288 [INFO] [Thread-190557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] client lang: <none>
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] server lang: <none>
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] kex follows: False
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] Compression: none
2026-04-12T14:28:11.296 [DEBUG] [Thread-190557] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:28:11.352 [DEBUG] [Thread-190557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:28:11.352 [DEBUG] [Thread-190557] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:28:11.352 [DEBUG] [Thread-190557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:28:11.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:28:11.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:28:11.409 [DEBUG] [Thread-190557] [transport.py] [_log()] userauth is OK
2026-04-12T14:28:11.409 [DEBUG] [Thread-190557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:28:11.409 [DEBUG] [Thread-190557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:28:11.409 [DEBUG] [Thread-190557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:28:11.409 [DEBUG] [Thread-190557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:28:11.424 [INFO] [Thread-190557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:28:11.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:28:11.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:28:12.238 [DEBUG] [Thread-190557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:28:12.238 [DEBUG] [Thread-190557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:28:12.285 [DEBUG] [Thread-190557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:28:12.286 [DEBUG] [Thread-190557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:28:12.295 [DEBUG] [Thread-190557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:28:12.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:28:12.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:28:12.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:28:12.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:28:12.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:28:12.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:28:12.330 [DEBUG] [Thread-190557] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:28:24.374 [DEBUG] [Thread-190559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:28:32.324 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:28:32.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:28:39.351 [DEBUG] [Thread-190560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:28:39.429 [DEBUG] [Thread-190561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:28:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:28:42.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:28:42.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:28:43.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 28, 35), 4.95323, 72.2279, 0.0, 18.8078, 15.2338, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:28:43.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:28:35
2026-04-12T14:28:44.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:28:44.186 [DEBUG] [Thread-190562] [transport.py] [_log()] starting thread (client mode): 0xb0fea0b0
2026-04-12T14:28:44.186 [DEBUG] [Thread-190562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:28:44.207 [DEBUG] [Thread-190562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:28:44.207 [INFO] [Thread-190562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] client lang: <none>
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] server lang: <none>
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] kex follows: False
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] Compression: none
2026-04-12T14:28:44.209 [DEBUG] [Thread-190562] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:28:44.223 [DEBUG] [Thread-190562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:28:44.223 [DEBUG] [Thread-190562] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:28:44.224 [DEBUG] [Thread-190562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:28:44.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:28:44.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:28:44.226 [DEBUG] [Thread-190562] [transport.py] [_log()] userauth is OK
2026-04-12T14:28:44.226 [DEBUG] [Thread-190562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:28:44.226 [DEBUG] [Thread-190562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:28:44.226 [DEBUG] [Thread-190562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:28:44.226 [DEBUG] [Thread-190562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:28:44.251 [INFO] [Thread-190562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:28:44.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:28:45.020 [DEBUG] [Thread-190562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:28:45.021 [DEBUG] [Thread-190562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:28:45.021 [DEBUG] [Thread-190562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:28:45.061 [DEBUG] [Thread-190562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:28:45.061 [DEBUG] [Thread-190562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:28:45.065 [DEBUG] [Thread-190562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:28:45.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:28:45.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:28:45.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:28:45.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:28:45.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:28:45.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:28:45.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:28:45.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:28:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:28:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.519551 -999.00  +14.70  14.07     77  +10.80 1 2 1 1 1   888    0 5.07 42.41 ----- 11.8 14.1 278.4 19.7 19.3 -11.4 19.1 -11.0 18.4 -11.8 19.1 -10.4
2026-04-12T14:28:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:28:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:28:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.519551
2026-04-12T14:28:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:28:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:28:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:28:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:28:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:28:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:28:35', tmtdew=4.95323, humidity=72.2279, cloud=0.0, wind=18.8078, temperature=15.2338, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:28:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:28:45.084 [DEBUG] [Thread-190562] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:28:45.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:28:45.166 [DEBUG] [Thread-190565] [transport.py] [_log()] starting thread (client mode): 0xb39c7250
2026-04-12T14:28:45.166 [DEBUG] [Thread-190565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:28:45.185 [DEBUG] [Thread-190565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:28:45.185 [INFO] [Thread-190565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] client lang: <none>
2026-04-12T14:28:45.193 [DEBUG] [Thread-190565] [transport.py] [_log()] server lang: <none>
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] kex follows: False
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] Compression: none
2026-04-12T14:28:45.194 [DEBUG] [Thread-190565] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:28:45.253 [DEBUG] [Thread-190565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:28:45.253 [DEBUG] [Thread-190565] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:28:45.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:28:45.254 [DEBUG] [Thread-190565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:28:45.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:28:45.309 [DEBUG] [Thread-190565] [transport.py] [_log()] userauth is OK
2026-04-12T14:28:45.309 [DEBUG] [Thread-190565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:28:45.309 [DEBUG] [Thread-190565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:28:45.309 [DEBUG] [Thread-190565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:28:45.310 [DEBUG] [Thread-190565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:28:45.329 [INFO] [Thread-190565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:28:45.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:28:45.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:28:46.148 [DEBUG] [Thread-190565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:28:46.149 [DEBUG] [Thread-190565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:28:46.200 [DEBUG] [Thread-190565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:28:46.200 [DEBUG] [Thread-190565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:28:46.213 [DEBUG] [Thread-190565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:28:46.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:28:46.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:28:46.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:28:46.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:28:46.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:28:46.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:28:46.264 [DEBUG] [Thread-190565] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:28:54.467 [DEBUG] [Thread-190567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:29:09.521 [DEBUG] [Thread-190568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:29:16.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:29:16.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:29:16.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:29:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 28, 35), 4.95323, 72.2279, 0.0, 18.8078, 15.2338, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:29:17.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:28:35
2026-04-12T14:29:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:29:18.075 [DEBUG] [Thread-190569] [transport.py] [_log()] starting thread (client mode): 0xa7968130
2026-04-12T14:29:18.076 [DEBUG] [Thread-190569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:29:18.095 [DEBUG] [Thread-190569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:29:18.095 [INFO] [Thread-190569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:29:18.098 [DEBUG] [Thread-190569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] client lang: <none>
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] server lang: <none>
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] kex follows: False
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] Compression: none
2026-04-12T14:29:18.099 [DEBUG] [Thread-190569] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:29:18.117 [DEBUG] [Thread-190569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:29:18.118 [DEBUG] [Thread-190569] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:29:18.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:29:18.120 [DEBUG] [Thread-190569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:29:18.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:29:18.122 [DEBUG] [Thread-190569] [transport.py] [_log()] userauth is OK
2026-04-12T14:29:18.122 [DEBUG] [Thread-190569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:29:18.122 [DEBUG] [Thread-190569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:29:18.122 [DEBUG] [Thread-190569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:29:18.123 [DEBUG] [Thread-190569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:29:18.146 [INFO] [Thread-190569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:29:18.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:29:18.923 [DEBUG] [Thread-190569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:29:18.923 [DEBUG] [Thread-190569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:29:18.924 [DEBUG] [Thread-190569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:29:18.964 [DEBUG] [Thread-190569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:29:18.964 [DEBUG] [Thread-190569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:29:18.968 [DEBUG] [Thread-190569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:29:18.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:29:18.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:29:18.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:29:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:29:18.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:29:18.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:29:18.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:29:18.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:29:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:29:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.519898 -999.00  +14.70  18.22     76  +10.60 1 2 1 1 1   888    0 4.94 39.79 ----- 16.8 18.2 281.8 23.9 19.4 -11.8 19.1 -11.5 18.4 -10.5 19.1 -10.9
2026-04-12T14:29:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:29:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:29:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.519898
2026-04-12T14:29:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:29:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:29:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:29:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:29:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:29:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:28:35', tmtdew=4.95323, humidity=72.2279, cloud=0.0, wind=18.8078, temperature=15.2338, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:28:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:29:18.995 [DEBUG] [Thread-190569] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:29:19.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:29:19.086 [DEBUG] [Thread-190572] [transport.py] [_log()] starting thread (client mode): 0xa796b190
2026-04-12T14:29:19.087 [DEBUG] [Thread-190572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:29:19.101 [DEBUG] [Thread-190572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:29:19.101 [INFO] [Thread-190572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:29:19.109 [DEBUG] [Thread-190572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:29:19.109 [DEBUG] [Thread-190572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:29:19.109 [DEBUG] [Thread-190572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:29:19.109 [DEBUG] [Thread-190572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:19.109 [DEBUG] [Thread-190572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:19.109 [DEBUG] [Thread-190572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] client lang: <none>
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] server lang: <none>
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] kex follows: False
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:29:19.110 [DEBUG] [Thread-190572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:29:19.111 [DEBUG] [Thread-190572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:29:19.111 [DEBUG] [Thread-190572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:29:19.111 [DEBUG] [Thread-190572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:29:19.111 [DEBUG] [Thread-190572] [transport.py] [_log()] Compression: none
2026-04-12T14:29:19.111 [DEBUG] [Thread-190572] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:29:19.169 [DEBUG] [Thread-190572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:29:19.170 [DEBUG] [Thread-190572] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:29:19.170 [DEBUG] [Thread-190572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:29:19.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:29:19.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:29:19.229 [DEBUG] [Thread-190572] [transport.py] [_log()] userauth is OK
2026-04-12T14:29:19.229 [DEBUG] [Thread-190572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:29:19.229 [DEBUG] [Thread-190572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:29:19.230 [DEBUG] [Thread-190572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:29:19.230 [DEBUG] [Thread-190572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:29:19.248 [INFO] [Thread-190572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:29:19.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:29:19.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:29:20.087 [DEBUG] [Thread-190572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:29:20.087 [DEBUG] [Thread-190572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:29:20.135 [DEBUG] [Thread-190572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:29:20.135 [DEBUG] [Thread-190572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:29:20.146 [DEBUG] [Thread-190572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:29:20.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:29: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')
2026-04-12T14:29: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') -> 00000000
2026-04-12T14:29:20.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:29:20.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:29:20.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:29:20.188 [DEBUG] [Thread-190572] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:29:24.555 [DEBUG] [Thread-190574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:29:32.471 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:29:32.472 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:29:39.386 [DEBUG] [Thread-190575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:29:39.606 [DEBUG] [Thread-190576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:29:50.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:29:50.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:29: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
2026-04-12T14:29:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 29, 10), 4.79101, 73.0476, 0.0, 19.4454, 14.6834, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:29:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:29:10
2026-04-12T14:29:51.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:29:52.083 [DEBUG] [Thread-190577] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc40
2026-04-12T14:29:52.083 [DEBUG] [Thread-190577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:29:52.104 [DEBUG] [Thread-190577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:29:52.105 [INFO] [Thread-190577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] client lang: <none>
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] server lang: <none>
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] kex follows: False
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] Compression: none
2026-04-12T14:29:52.108 [DEBUG] [Thread-190577] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:29:52.126 [DEBUG] [Thread-190577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:29:52.127 [DEBUG] [Thread-190577] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:29:52.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:29:52.128 [DEBUG] [Thread-190577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:29:52.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:29:52.130 [DEBUG] [Thread-190577] [transport.py] [_log()] userauth is OK
2026-04-12T14:29:52.130 [DEBUG] [Thread-190577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:29:52.130 [DEBUG] [Thread-190577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:29:52.131 [DEBUG] [Thread-190577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:29:52.131 [DEBUG] [Thread-190577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:29:52.147 [INFO] [Thread-190577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:29:52.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:29:52.930 [DEBUG] [Thread-190577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:29:52.931 [DEBUG] [Thread-190577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:29:52.931 [DEBUG] [Thread-190577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:29:52.972 [DEBUG] [Thread-190577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:29:52.972 [DEBUG] [Thread-190577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:29:52.976 [DEBUG] [Thread-190577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:29:52.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:29:52.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:29:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:29:52.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:29:52.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:29:52.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:29:52.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:29:52.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:29:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:29:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.520245 -999.00  +14.60  10.24     76  +10.40 1 2 1 1 1   888    0 4.97 38.42 ----- 15.9 10.2 296.2 18.4 19.4 -12.3 19.1 -11.4 18.4 -11.4 19.1 -11.4
2026-04-12T14:29:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:29:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:29:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.520245
2026-04-12T14:29:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:29:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:29:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:29:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:29:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:29:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:29:10', tmtdew=4.79101, humidity=73.0476, cloud=0.0, wind=19.4454, temperature=14.6834, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:29:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:29:53.000 [DEBUG] [Thread-190577] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:29:53.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:29:53.096 [DEBUG] [Thread-190580] [transport.py] [_log()] starting thread (client mode): 0xb0fe8af0
2026-04-12T14:29:53.096 [DEBUG] [Thread-190580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:29:53.110 [DEBUG] [Thread-190580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:29:53.110 [INFO] [Thread-190580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:29:53.117 [DEBUG] [Thread-190580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] client lang: <none>
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] server lang: <none>
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] kex follows: False
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] Compression: none
2026-04-12T14:29:53.118 [DEBUG] [Thread-190580] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:29:53.177 [DEBUG] [Thread-190580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:29:53.177 [DEBUG] [Thread-190580] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:29:53.178 [DEBUG] [Thread-190580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:29:53.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:29:53.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:29:53.233 [DEBUG] [Thread-190580] [transport.py] [_log()] userauth is OK
2026-04-12T14:29:53.233 [DEBUG] [Thread-190580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:29:53.233 [DEBUG] [Thread-190580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:29:53.233 [DEBUG] [Thread-190580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:29:53.233 [DEBUG] [Thread-190580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:29:53.251 [INFO] [Thread-190580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:29:53.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:29:53.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:29:54.062 [DEBUG] [Thread-190580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:29:54.062 [DEBUG] [Thread-190580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:29:54.110 [DEBUG] [Thread-190580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:29:54.111 [DEBUG] [Thread-190580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:29:54.120 [DEBUG] [Thread-190580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:29:54.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:29:54.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:29:54.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:29:54.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:29:54.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:29:54.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:29:54.165 [DEBUG] [Thread-190580] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:29:54.644 [DEBUG] [Thread-190582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:09.697 [DEBUG] [Thread-190583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:30:24.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:30:24.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:30:24.730 [DEBUG] [Thread-190584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:25.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 29, 46), 5.01899, 71.9294, 0.0, 14.3273, 15.3331, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:30:25.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:29:46
2026-04-12T14:30:25.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:30:26.050 [DEBUG] [Thread-190585] [transport.py] [_log()] starting thread (client mode): 0xae52ee00
2026-04-12T14:30:26.050 [DEBUG] [Thread-190585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:30:26.071 [DEBUG] [Thread-190585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:30:26.072 [INFO] [Thread-190585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:30:26.075 [DEBUG] [Thread-190585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:30:26.075 [DEBUG] [Thread-190585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:30:26.075 [DEBUG] [Thread-190585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:30:26.075 [DEBUG] [Thread-190585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:30:26.075 [DEBUG] [Thread-190585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:30:26.075 [DEBUG] [Thread-190585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:30:26.075 [DEBUG] [Thread-190585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] client lang: <none>
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] server lang: <none>
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] kex follows: False
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] Compression: none
2026-04-12T14:30:26.076 [DEBUG] [Thread-190585] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:30:26.096 [DEBUG] [Thread-190585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:30:26.096 [DEBUG] [Thread-190585] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:30:26.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:30:26.097 [DEBUG] [Thread-190585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:30:26.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:30:26.100 [DEBUG] [Thread-190585] [transport.py] [_log()] userauth is OK
2026-04-12T14:30:26.100 [DEBUG] [Thread-190585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:30:26.100 [DEBUG] [Thread-190585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:30:26.100 [DEBUG] [Thread-190585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:30:26.100 [DEBUG] [Thread-190585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:30:26.125 [INFO] [Thread-190585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:30:26.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:30:26.919 [DEBUG] [Thread-190585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:30:26.919 [DEBUG] [Thread-190585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:30:26.919 [DEBUG] [Thread-190585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:30:26.960 [DEBUG] [Thread-190585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:30:26.961 [DEBUG] [Thread-190585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:30:26.964 [DEBUG] [Thread-190585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:30:26.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:30:26.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:30:26.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:30:26.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:30:26.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:30:26.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:30:26.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:30:26.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:30:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:30:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.520593 -999.00  +14.40  15.21     75  +10.20 1 2 1 1 1   888    0 5.03 41.00 ----- 12.9 15.2 271.8 16.8 19.4 -13.1 19.0 -12.4 18.3 -14.5 19.2 -12.6
2026-04-12T14:30:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:30:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:30:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.520593
2026-04-12T14:30:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:30:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:30:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:30:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:30:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:30:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:29:46', tmtdew=5.01899, humidity=71.9294, cloud=0.0, wind=14.3273, temperature=15.3331, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:29:39.235', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:30:26.985 [DEBUG] [Thread-190585] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:30:27.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:30:27.087 [DEBUG] [Thread-190588] [transport.py] [_log()] starting thread (client mode): 0xb0fcc190
2026-04-12T14:30:27.087 [DEBUG] [Thread-190588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:30:27.103 [DEBUG] [Thread-190588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:30:27.103 [INFO] [Thread-190588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:30:27.111 [DEBUG] [Thread-190588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:30:27.111 [DEBUG] [Thread-190588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:30:27.111 [DEBUG] [Thread-190588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:30:27.111 [DEBUG] [Thread-190588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:30:27.111 [DEBUG] [Thread-190588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] client lang: <none>
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] server lang: <none>
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] kex follows: False
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] Compression: none
2026-04-12T14:30:27.112 [DEBUG] [Thread-190588] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:30:27.169 [DEBUG] [Thread-190588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:30:27.170 [DEBUG] [Thread-190588] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:30:27.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:30:27.171 [DEBUG] [Thread-190588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:30:27.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:30:27.225 [DEBUG] [Thread-190588] [transport.py] [_log()] userauth is OK
2026-04-12T14:30:27.225 [DEBUG] [Thread-190588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:30:27.226 [DEBUG] [Thread-190588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:30:27.226 [DEBUG] [Thread-190588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:30:27.226 [DEBUG] [Thread-190588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:30:27.245 [INFO] [Thread-190588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:30:27.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:30:27.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:30:28.078 [DEBUG] [Thread-190588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:30:28.078 [DEBUG] [Thread-190588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:30:28.126 [DEBUG] [Thread-190588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:30:28.126 [DEBUG] [Thread-190588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:30:28.134 [DEBUG] [Thread-190588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:30:28.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:30:28.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:30:28.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:30:28.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:30:28.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:30:28.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:30:28.166 [DEBUG] [Thread-190588] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:30:32.615 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:32.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:39.420 [DEBUG] [Thread-190590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:39.766 [DEBUG] [Thread-190591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:54.820 [DEBUG] [Thread-190592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:30:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:30:58.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:30:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:30:59.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 30, 21), 4.90261, 72.7489, 0.0, 13.9403, 14.5165, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:30:59.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:30:21
2026-04-12T14:30:59.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:31:00.119 [DEBUG] [Thread-190593] [transport.py] [_log()] starting thread (client mode): 0xae508760
2026-04-12T14:31:00.119 [DEBUG] [Thread-190593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:31:00.138 [DEBUG] [Thread-190593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:31:00.138 [INFO] [Thread-190593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] client lang: <none>
2026-04-12T14:31:00.142 [DEBUG] [Thread-190593] [transport.py] [_log()] server lang: <none>
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] kex follows: False
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] Compression: none
2026-04-12T14:31:00.143 [DEBUG] [Thread-190593] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:31:00.161 [DEBUG] [Thread-190593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:31:00.161 [DEBUG] [Thread-190593] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:31:00.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:31:00.163 [DEBUG] [Thread-190593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:31:00.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:31:00.165 [DEBUG] [Thread-190593] [transport.py] [_log()] userauth is OK
2026-04-12T14:31:00.165 [DEBUG] [Thread-190593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:31:00.165 [DEBUG] [Thread-190593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:31:00.165 [DEBUG] [Thread-190593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:31:00.165 [DEBUG] [Thread-190593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:31:00.190 [INFO] [Thread-190593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:31:00.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:31:01.018 [DEBUG] [Thread-190593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:31:01.018 [DEBUG] [Thread-190593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:31:01.019 [DEBUG] [Thread-190593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:31:01.059 [DEBUG] [Thread-190593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:31:01.059 [DEBUG] [Thread-190593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:31:01.061 [DEBUG] [Thread-190593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:31:01.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:31:01.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:31:01.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:31:01.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:31:01.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:31:01.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:31:01.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.520940 -999.00  +14.40  14.53     76  +10.40 1 2 1 1 1   888    0 5.06 41.95 ----- 14.4 14.5 283.2 17.5 19.3 -12.9 19.0 -11.9 18.4 -13.1 19.1 -11.7
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.520940
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:30:21', tmtdew=4.90261, humidity=72.7489, cloud=0.0, wind=13.9403, temperature=14.5165, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:30:09.216', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:31:01.079 [DEBUG] [Thread-190593] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:31:01.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:31:01.165 [DEBUG] [Thread-190596] [transport.py] [_log()] starting thread (client mode): 0xae5085e0
2026-04-12T14:31:01.165 [DEBUG] [Thread-190596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:31:01.180 [DEBUG] [Thread-190596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:31:01.180 [INFO] [Thread-190596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] client lang: <none>
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] server lang: <none>
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] kex follows: False
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] Compression: none
2026-04-12T14:31:01.187 [DEBUG] [Thread-190596] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:31:01.249 [DEBUG] [Thread-190596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:31:01.249 [DEBUG] [Thread-190596] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:31:01.249 [DEBUG] [Thread-190596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:31:01.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:31:01.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:31:01.304 [DEBUG] [Thread-190596] [transport.py] [_log()] userauth is OK
2026-04-12T14:31:01.304 [DEBUG] [Thread-190596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:31:01.304 [DEBUG] [Thread-190596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:31:01.304 [DEBUG] [Thread-190596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:31:01.305 [DEBUG] [Thread-190596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:31:01.326 [INFO] [Thread-190596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:31:01.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:31:01.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:31:02.158 [DEBUG] [Thread-190596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:31:02.158 [DEBUG] [Thread-190596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:31:02.206 [DEBUG] [Thread-190596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:31:02.206 [DEBUG] [Thread-190596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:31:02.216 [DEBUG] [Thread-190596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:31:02.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:31:02.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:31:02.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:31:02.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:31:02.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:31:02.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:31:02.254 [DEBUG] [Thread-190596] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:31:09.860 [DEBUG] [Thread-190598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:31:24.913 [DEBUG] [Thread-190599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:31:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:31:32.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:31:32.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:31:32.769 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:31:32.771 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:31:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 30, 57), 4.61235, 73.6798, 0.0, 18.2621, 14.5999, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:31:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:30:57
2026-04-12T14:31:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:31:34.140 [DEBUG] [Thread-190600] [transport.py] [_log()] starting thread (client mode): 0xb0f41930
2026-04-12T14:31:34.140 [DEBUG] [Thread-190600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:31:34.160 [DEBUG] [Thread-190600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:31:34.160 [INFO] [Thread-190600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] client lang: <none>
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] server lang: <none>
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] kex follows: False
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] Compression: none
2026-04-12T14:31:34.163 [DEBUG] [Thread-190600] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:31:34.180 [DEBUG] [Thread-190600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:31:34.181 [DEBUG] [Thread-190600] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:31:34.181 [DEBUG] [Thread-190600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:31:34.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:31:34.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:31:34.182 [DEBUG] [Thread-190600] [transport.py] [_log()] userauth is OK
2026-04-12T14:31:34.182 [DEBUG] [Thread-190600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:31:34.182 [DEBUG] [Thread-190600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:31:34.182 [DEBUG] [Thread-190600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:31:34.182 [DEBUG] [Thread-190600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:31:34.192 [INFO] [Thread-190600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:31:34.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:31:35.003 [DEBUG] [Thread-190600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:31:35.004 [DEBUG] [Thread-190600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:31:35.004 [DEBUG] [Thread-190600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:31:35.045 [DEBUG] [Thread-190600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:31:35.045 [DEBUG] [Thread-190600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:31:35.048 [DEBUG] [Thread-190600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:31:35.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:31:35.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:31:35.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:31:35.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:31:35.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:31:35.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:31:35.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:31:35.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:31:35.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:31:35.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.521634 -999.00  +14.70  14.15     77  +10.80 1 2 1 1 1   888    0 5.03 41.40 ----- 12.3 14.2 271.8 21.6 19.3 -13.2 19.0 -11.6 18.5 -10.5 19.1 -11.7
2026-04-12T14:31:35.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:31:35.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:31:35.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.521634
2026-04-12T14:31:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:31:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:31:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:31:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:31:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:31:35.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:30:57', tmtdew=4.61235, humidity=73.6798, cloud=0.0, wind=18.2621, temperature=14.5999, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:31:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:31:35.083 [DEBUG] [Thread-190600] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:31:35.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:31:35.178 [DEBUG] [Thread-190603] [transport.py] [_log()] starting thread (client mode): 0xb0fcf3a0
2026-04-12T14:31:35.178 [DEBUG] [Thread-190603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:31:35.194 [DEBUG] [Thread-190603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:31:35.194 [INFO] [Thread-190603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] client lang: <none>
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] server lang: <none>
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] kex follows: False
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:31:35.202 [DEBUG] [Thread-190603] [transport.py] [_log()] Compression: none
2026-04-12T14:31:35.203 [DEBUG] [Thread-190603] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:31:35.261 [DEBUG] [Thread-190603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:31:35.261 [DEBUG] [Thread-190603] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:31:35.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:31:35.262 [DEBUG] [Thread-190603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:31:35.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:31:35.317 [DEBUG] [Thread-190603] [transport.py] [_log()] userauth is OK
2026-04-12T14:31:35.317 [DEBUG] [Thread-190603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:31:35.317 [DEBUG] [Thread-190603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:31:35.317 [DEBUG] [Thread-190603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:31:35.317 [DEBUG] [Thread-190603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:31:35.337 [INFO] [Thread-190603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:31:35.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:31:35.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:31:36.173 [DEBUG] [Thread-190603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:31:36.173 [DEBUG] [Thread-190603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:31:36.221 [DEBUG] [Thread-190603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:31:36.221 [DEBUG] [Thread-190603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:31:36.230 [DEBUG] [Thread-190603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:31:36.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:31:36.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:31: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
2026-04-12T14:31:36.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:31:36.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:31:36.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:31:36.266 [DEBUG] [Thread-190603] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:31:39.454 [DEBUG] [Thread-190605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:31:39.949 [DEBUG] [Thread-190606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:31:55.015 [DEBUG] [Thread-190607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:32:06.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:32:06.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:32:06.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:32:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 31, 32), 5.06623, 71.6967, 0.0, 23.0062, 15.2993, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:32:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:31:32
2026-04-12T14:32:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:32:08.033 [DEBUG] [Thread-190608] [transport.py] [_log()] starting thread (client mode): 0xb0fcef50
2026-04-12T14:32:08.033 [DEBUG] [Thread-190608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:32:08.053 [DEBUG] [Thread-190608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:32:08.053 [INFO] [Thread-190608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:32:08.056 [DEBUG] [Thread-190608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] client lang: <none>
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] server lang: <none>
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] kex follows: False
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] Compression: none
2026-04-12T14:32:08.057 [DEBUG] [Thread-190608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:32:08.073 [DEBUG] [Thread-190608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:32:08.073 [DEBUG] [Thread-190608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:32:08.074 [DEBUG] [Thread-190608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:32:08.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:32:08.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:32:08.076 [DEBUG] [Thread-190608] [transport.py] [_log()] userauth is OK
2026-04-12T14:32:08.076 [DEBUG] [Thread-190608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:32:08.076 [DEBUG] [Thread-190608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:32:08.076 [DEBUG] [Thread-190608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:32:08.077 [DEBUG] [Thread-190608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:32:08.112 [INFO] [Thread-190608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:32:08.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:32:08.945 [DEBUG] [Thread-190608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:32:08.945 [DEBUG] [Thread-190608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:32:08.946 [DEBUG] [Thread-190608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:32:08.986 [DEBUG] [Thread-190608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:32:08.986 [DEBUG] [Thread-190608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:32:08.989 [DEBUG] [Thread-190608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:32:09.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:32:09.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:32:09.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:32:09.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:32:09.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:32:09.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:32:09.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:32:09.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:32:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:32:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.521981 -999.00  +14.70  16.08     76  +10.60 1 2 1 1 1   888    0 5.20 44.53 ----- 21.7 16.1 266.8 23.5 19.4 -13.0 19.0 -12.8 18.6 -12.2 19.1 -12.6
2026-04-12T14:32:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:32:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:32:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.521981
2026-04-12T14:32:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:32:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:32:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:32:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:32:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:32:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:31:32', tmtdew=5.06623, humidity=71.6967, cloud=0.0, wind=23.0062, temperature=15.2993, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:31:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:32:09.016 [DEBUG] [Thread-190608] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:32:09.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:32:09.109 [DEBUG] [Thread-190611] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6a0
2026-04-12T14:32:09.109 [DEBUG] [Thread-190611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:32:09.124 [DEBUG] [Thread-190611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:32:09.124 [INFO] [Thread-190611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] client lang: <none>
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] server lang: <none>
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] kex follows: False
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:32:09.132 [DEBUG] [Thread-190611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:32:09.133 [DEBUG] [Thread-190611] [transport.py] [_log()] Compression: none
2026-04-12T14:32:09.133 [DEBUG] [Thread-190611] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:32:09.193 [DEBUG] [Thread-190611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:32:09.194 [DEBUG] [Thread-190611] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:32:09.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:32:09.195 [DEBUG] [Thread-190611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:32:09.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:32:09.253 [DEBUG] [Thread-190611] [transport.py] [_log()] userauth is OK
2026-04-12T14:32:09.253 [DEBUG] [Thread-190611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:32:09.253 [DEBUG] [Thread-190611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:32:09.253 [DEBUG] [Thread-190611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:32:09.254 [DEBUG] [Thread-190611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:32:09.273 [INFO] [Thread-190611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:32:09.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:32:09.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:32:10.052 [DEBUG] [Thread-190613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:32:10.089 [DEBUG] [Thread-190611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:32:10.089 [DEBUG] [Thread-190611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:32:10.139 [DEBUG] [Thread-190611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:32:10.139 [DEBUG] [Thread-190611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:32:10.149 [DEBUG] [Thread-190611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:32:10.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:32:10.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:32:10.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:32:10.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:32:10.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:32:10.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:32:10.186 [DEBUG] [Thread-190611] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:32:25.104 [DEBUG] [Thread-190614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:32:32.928 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:32:32.929 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:32:39.523 [DEBUG] [Thread-190615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:32:40.144 [DEBUG] [Thread-190616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:32:40.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:32:40.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:32:40.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:32:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 32, 8), 4.73838, 72.7958, 0.0, 18.4039, 14.6499, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:32:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:32:08
2026-04-12T14:32:41.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:32:42.095 [DEBUG] [Thread-190617] [transport.py] [_log()] starting thread (client mode): 0xae534460
2026-04-12T14:32:42.095 [DEBUG] [Thread-190617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:32:42.122 [DEBUG] [Thread-190617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:32:42.123 [INFO] [Thread-190617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:32:42.126 [DEBUG] [Thread-190617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:32:42.126 [DEBUG] [Thread-190617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:32:42.126 [DEBUG] [Thread-190617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:32:42.126 [DEBUG] [Thread-190617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:42.126 [DEBUG] [Thread-190617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] client lang: <none>
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] server lang: <none>
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] kex follows: False
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] Compression: none
2026-04-12T14:32:42.127 [DEBUG] [Thread-190617] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:32:42.145 [DEBUG] [Thread-190617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:32:42.146 [DEBUG] [Thread-190617] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:32:42.146 [DEBUG] [Thread-190617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:32:42.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:32:42.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:32:42.188 [DEBUG] [Thread-190617] [transport.py] [_log()] userauth is OK
2026-04-12T14:32:42.188 [DEBUG] [Thread-190617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:32:42.189 [DEBUG] [Thread-190617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:32:42.189 [DEBUG] [Thread-190617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:32:42.189 [DEBUG] [Thread-190617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:32:42.208 [INFO] [Thread-190617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:32:42.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:32:42.984 [DEBUG] [Thread-190617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:32:42.984 [DEBUG] [Thread-190617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:32:42.984 [DEBUG] [Thread-190617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:32:43.029 [DEBUG] [Thread-190617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:32:43.030 [DEBUG] [Thread-190617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:32:43.034 [DEBUG] [Thread-190617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:32:43.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:32:43.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:32:43.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:32:43.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:32:43.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:32:43.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:32:43.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:32:43.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:32:43.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:32:43.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.522328 -999.00  +14.60  23.16     75  +10.20 1 2 1 1 1   888    0 5.02 43.15 ----- 26.1 23.2 273.2 25.1 19.3 -13.5 18.9 -12.3 18.3 -14.3 19.0 -12.2
2026-04-12T14:32:43.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:32:43.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:32:43.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.522328
2026-04-12T14:32:43.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:32:43.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:32:43.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:32:43.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:32:43.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:32:43.060 [DEBUG] [Thread-190617] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:32:43.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:32:08', tmtdew=4.73838, humidity=72.7958, cloud=0.0, wind=18.4039, temperature=14.6499, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:32:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:32:43.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:32:43.149 [DEBUG] [Thread-190620] [transport.py] [_log()] starting thread (client mode): 0xb0f42e00
2026-04-12T14:32:43.149 [DEBUG] [Thread-190620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:32:43.163 [DEBUG] [Thread-190620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:32:43.163 [INFO] [Thread-190620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:32:43.171 [DEBUG] [Thread-190620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] client lang: <none>
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] server lang: <none>
2026-04-12T14:32:43.172 [DEBUG] [Thread-190620] [transport.py] [_log()] kex follows: False
2026-04-12T14:32:43.173 [DEBUG] [Thread-190620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:32:43.173 [DEBUG] [Thread-190620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:32:43.173 [DEBUG] [Thread-190620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:32:43.173 [DEBUG] [Thread-190620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:32:43.173 [DEBUG] [Thread-190620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:32:43.173 [DEBUG] [Thread-190620] [transport.py] [_log()] Compression: none
2026-04-12T14:32:43.173 [DEBUG] [Thread-190620] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:32:43.228 [DEBUG] [Thread-190620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:32:43.229 [DEBUG] [Thread-190620] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:32:43.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:32:43.230 [DEBUG] [Thread-190620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:32:43.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:32:43.285 [DEBUG] [Thread-190620] [transport.py] [_log()] userauth is OK
2026-04-12T14:32:43.285 [DEBUG] [Thread-190620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:32:43.285 [DEBUG] [Thread-190620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:32:43.285 [DEBUG] [Thread-190620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:32:43.285 [DEBUG] [Thread-190620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:32:43.304 [INFO] [Thread-190620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:32:43.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:32:43.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:32:44.108 [DEBUG] [Thread-190620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:32:44.108 [DEBUG] [Thread-190620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:32:44.156 [DEBUG] [Thread-190620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:32:44.156 [DEBUG] [Thread-190620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:32:44.166 [DEBUG] [Thread-190620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:32:44.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:32:44.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:32:44.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:32:44.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:32:44.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:32:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:32:44.203 [DEBUG] [Thread-190620] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:32:55.184 [DEBUG] [Thread-190622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:33:10.239 [DEBUG] [Thread-190623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:33:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:33:14.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:33:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:33:15.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 32, 43), 5.1336, 71.3315, 0.0, 13.3042, 15.0668, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:33:15.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:32:43
2026-04-12T14:33:15.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:33:16.027 [DEBUG] [Thread-190624] [transport.py] [_log()] starting thread (client mode): 0xb0f43c70
2026-04-12T14:33:16.027 [DEBUG] [Thread-190624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:33:16.040 [DEBUG] [Thread-190624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:33:16.040 [INFO] [Thread-190624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:16.043 [DEBUG] [Thread-190624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] client lang: <none>
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] server lang: <none>
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] kex follows: False
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] Compression: none
2026-04-12T14:33:16.044 [DEBUG] [Thread-190624] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:33:16.062 [DEBUG] [Thread-190624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:33:16.062 [DEBUG] [Thread-190624] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:33:16.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:33:16.063 [DEBUG] [Thread-190624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:33:16.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:33:16.066 [DEBUG] [Thread-190624] [transport.py] [_log()] userauth is OK
2026-04-12T14:33:16.066 [DEBUG] [Thread-190624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:33:16.066 [DEBUG] [Thread-190624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:33:16.066 [DEBUG] [Thread-190624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:33:16.066 [DEBUG] [Thread-190624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:33:16.104 [INFO] [Thread-190624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:33:16.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:33:16.861 [DEBUG] [Thread-190624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:33:16.862 [DEBUG] [Thread-190624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:33:16.862 [DEBUG] [Thread-190624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:33:16.903 [DEBUG] [Thread-190624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:33:16.903 [DEBUG] [Thread-190624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:33:16.907 [DEBUG] [Thread-190624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:33:16.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:33:16.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:33:16.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:33:16.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:33:16.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:33:16.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:33:16.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:33:16.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:33:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:33:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.522676 -999.00  +14.30  17.79     75  +10.00 1 2 1 1 1   888    0 5.29 47.41 ----- 16.9 17.8 270.0 25.3 19.1 -13.9 18.9 -11.9 18.1 -13.3 18.9 -12.2
2026-04-12T14:33:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:33:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:33:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.522676
2026-04-12T14:33:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:33:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:33:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:33:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:33:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:33:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:32:43', tmtdew=5.1336, humidity=71.3315, cloud=0.0, wind=13.3042, temperature=15.0668, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:32:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:33:16.935 [DEBUG] [Thread-190624] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:33:17.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:33:17.024 [DEBUG] [Thread-190627] [transport.py] [_log()] starting thread (client mode): 0xb0f42080
2026-04-12T14:33:17.024 [DEBUG] [Thread-190627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:33:17.039 [DEBUG] [Thread-190627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:33:17.039 [INFO] [Thread-190627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:33:17.046 [DEBUG] [Thread-190627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] client lang: <none>
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] server lang: <none>
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] kex follows: False
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:33:17.047 [DEBUG] [Thread-190627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:33:17.048 [DEBUG] [Thread-190627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:33:17.048 [DEBUG] [Thread-190627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:33:17.048 [DEBUG] [Thread-190627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:33:17.048 [DEBUG] [Thread-190627] [transport.py] [_log()] Compression: none
2026-04-12T14:33:17.048 [DEBUG] [Thread-190627] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:33:17.105 [DEBUG] [Thread-190627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:33:17.106 [DEBUG] [Thread-190627] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:33:17.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:33:17.107 [DEBUG] [Thread-190627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:33:17.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:33:17.161 [DEBUG] [Thread-190627] [transport.py] [_log()] userauth is OK
2026-04-12T14:33:17.161 [DEBUG] [Thread-190627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:33:17.161 [DEBUG] [Thread-190627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:33:17.162 [DEBUG] [Thread-190627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:33:17.162 [DEBUG] [Thread-190627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:33:17.187 [INFO] [Thread-190627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:33:17.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:33:17.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:33:17.993 [DEBUG] [Thread-190627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:33:17.993 [DEBUG] [Thread-190627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:33:18.040 [DEBUG] [Thread-190627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:33:18.041 [DEBUG] [Thread-190627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:33:18.050 [DEBUG] [Thread-190627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:33:18.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:33:18.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:33:18.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:33:18.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:33:18.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:33:18.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:33:18.085 [DEBUG] [Thread-190627] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:33:25.279 [DEBUG] [Thread-190629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:33:33.070 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:33:33.072 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:33:39.572 [DEBUG] [Thread-190630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:33:40.331 [DEBUG] [Thread-190631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:33:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:33:48.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:33:48.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:33:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 33, 18), 4.86733, 72.395, 0.0, 19.4983, 14.5331, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:33:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:33:18
2026-04-12T14:33:49.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:33:49.922 [DEBUG] [Thread-190632] [transport.py] [_log()] starting thread (client mode): 0xae535690
2026-04-12T14:33:49.922 [DEBUG] [Thread-190632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:33:49.943 [DEBUG] [Thread-190632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:33:49.943 [INFO] [Thread-190632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:33:49.946 [DEBUG] [Thread-190632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:33:49.946 [DEBUG] [Thread-190632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] client lang: <none>
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] server lang: <none>
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] kex follows: False
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:33:49.947 [DEBUG] [Thread-190632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:33:49.948 [DEBUG] [Thread-190632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:33:49.948 [DEBUG] [Thread-190632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:33:49.948 [DEBUG] [Thread-190632] [transport.py] [_log()] Compression: none
2026-04-12T14:33:49.948 [DEBUG] [Thread-190632] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:33:49.967 [DEBUG] [Thread-190632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:33:49.968 [DEBUG] [Thread-190632] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:33:49.968 [DEBUG] [Thread-190632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:33:49.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:33:49.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:33:49.970 [DEBUG] [Thread-190632] [transport.py] [_log()] userauth is OK
2026-04-12T14:33:49.971 [DEBUG] [Thread-190632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:33:49.971 [DEBUG] [Thread-190632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:33:49.971 [DEBUG] [Thread-190632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:33:49.971 [DEBUG] [Thread-190632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:33:49.995 [INFO] [Thread-190632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:33:49.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:33:50.789 [DEBUG] [Thread-190632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:33:50.789 [DEBUG] [Thread-190632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:33:50.789 [DEBUG] [Thread-190632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:33:50.830 [DEBUG] [Thread-190632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:33:50.830 [DEBUG] [Thread-190632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:33:50.833 [DEBUG] [Thread-190632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:33:50.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:33:50.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:33:50.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:33:50.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:33:50.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:33:50.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:33:50.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:33:50.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:33:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:33:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.523023 -999.00  +14.40  17.76     76  +10.30 1 2 1 1 1   888    0 5.09 41.27 ----- 21.3 17.8 278.0 21.2 19.2 -12.8 18.9 -11.8 18.2 -10.7 18.9 -11.7
2026-04-12T14:33:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:33:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:33:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.523023
2026-04-12T14:33:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:33:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:33:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:33:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:33:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:33:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:33:18', tmtdew=4.86733, humidity=72.395, cloud=0.0, wind=19.4983, temperature=14.5331, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:33:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:33:50.858 [DEBUG] [Thread-190632] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:33:50.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:33:50.951 [DEBUG] [Thread-190635] [transport.py] [_log()] starting thread (client mode): 0xae5b5ed0
2026-04-12T14:33:50.951 [DEBUG] [Thread-190635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:33:50.966 [DEBUG] [Thread-190635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:33:50.966 [INFO] [Thread-190635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] client lang: <none>
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] server lang: <none>
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] kex follows: False
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:33:50.974 [DEBUG] [Thread-190635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:33:50.975 [DEBUG] [Thread-190635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:33:50.975 [DEBUG] [Thread-190635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:33:50.975 [DEBUG] [Thread-190635] [transport.py] [_log()] Compression: none
2026-04-12T14:33:50.975 [DEBUG] [Thread-190635] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:33:51.033 [DEBUG] [Thread-190635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:33:51.033 [DEBUG] [Thread-190635] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:33:51.034 [DEBUG] [Thread-190635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:33:51.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:33:51.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:33:51.089 [DEBUG] [Thread-190635] [transport.py] [_log()] userauth is OK
2026-04-12T14:33:51.089 [DEBUG] [Thread-190635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:33:51.090 [DEBUG] [Thread-190635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:33:51.090 [DEBUG] [Thread-190635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:33:51.090 [DEBUG] [Thread-190635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:33:51.108 [INFO] [Thread-190635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:33:51.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:33:51.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:33:51.877 [DEBUG] [Thread-190635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:33:51.878 [DEBUG] [Thread-190635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:33:51.925 [DEBUG] [Thread-190635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:33:51.925 [DEBUG] [Thread-190635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:33:51.935 [DEBUG] [Thread-190635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:33:51.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:33:51.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:33:51.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:33:51.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:33:51.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:33:51.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:33:51.972 [DEBUG] [Thread-190635] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:33:55.369 [DEBUG] [Thread-190637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:10.430 [DEBUG] [Thread-190638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:21.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:34:21.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:34:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:34:23.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 33, 54), 4.8011, 72.9883, 0.0, 15.6326, 15.3646, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:34:23.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:33:54
2026-04-12T14:34:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:34:23.803 [DEBUG] [Thread-190639] [transport.py] [_log()] starting thread (client mode): 0xae5b5ba0
2026-04-12T14:34:23.804 [DEBUG] [Thread-190639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:34:23.823 [DEBUG] [Thread-190639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:34:23.823 [INFO] [Thread-190639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:23.826 [DEBUG] [Thread-190639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] client lang: <none>
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] server lang: <none>
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] kex follows: False
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] Compression: none
2026-04-12T14:34:23.827 [DEBUG] [Thread-190639] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:34:23.842 [DEBUG] [Thread-190639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:34:23.842 [DEBUG] [Thread-190639] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:34:23.843 [DEBUG] [Thread-190639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:34:23.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:34:23.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:34:23.845 [DEBUG] [Thread-190639] [transport.py] [_log()] userauth is OK
2026-04-12T14:34:23.845 [DEBUG] [Thread-190639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:34:23.845 [DEBUG] [Thread-190639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:34:23.845 [DEBUG] [Thread-190639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:34:23.845 [DEBUG] [Thread-190639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:34:23.870 [INFO] [Thread-190639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:34:23.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:34:24.632 [DEBUG] [Thread-190639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:34:24.633 [DEBUG] [Thread-190639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:34:24.633 [DEBUG] [Thread-190639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:34:24.673 [DEBUG] [Thread-190639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:34:24.673 [DEBUG] [Thread-190639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:34:24.676 [DEBUG] [Thread-190639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:34:24.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:34:24.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:34:24.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:34:24.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:34:24.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:34:24.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:34:24.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:34:24.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:34:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:34:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.523370 -999.00  +14.40  22.81     76  +10.40 1 2 1 1 1   888    0 5.06 38.37 ----- 19.3 22.8 279.4 26.9 19.1 -12.3 18.8 -11.9 18.3 -11.5 18.9 -11.9
2026-04-12T14:34:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:34:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:34:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.523370
2026-04-12T14:34:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:34:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:34:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:34:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:34:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:34:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:33:54', tmtdew=4.8011, humidity=72.9883, cloud=0.0, wind=15.6326, temperature=15.3646, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:33:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:34:24.703 [DEBUG] [Thread-190639] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:34:24.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:34:24.795 [DEBUG] [Thread-190642] [transport.py] [_log()] starting thread (client mode): 0xb0fccfd0
2026-04-12T14:34:24.795 [DEBUG] [Thread-190642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:34:24.810 [DEBUG] [Thread-190642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:34:24.810 [INFO] [Thread-190642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:34:24.817 [DEBUG] [Thread-190642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] client lang: <none>
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] server lang: <none>
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] kex follows: False
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] Compression: none
2026-04-12T14:34:24.818 [DEBUG] [Thread-190642] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:34:24.877 [DEBUG] [Thread-190642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:34:24.878 [DEBUG] [Thread-190642] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:34:24.878 [DEBUG] [Thread-190642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:34:24.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:34:24.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:34:24.933 [DEBUG] [Thread-190642] [transport.py] [_log()] userauth is OK
2026-04-12T14:34:24.934 [DEBUG] [Thread-190642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:34:24.934 [DEBUG] [Thread-190642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:34:24.934 [DEBUG] [Thread-190642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:34:24.934 [DEBUG] [Thread-190642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:34:24.953 [INFO] [Thread-190642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:34:24.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:34:24.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:34:25.469 [DEBUG] [Thread-190644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:25.750 [DEBUG] [Thread-190642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:34:25.751 [DEBUG] [Thread-190642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:34:25.799 [DEBUG] [Thread-190642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:34:25.800 [DEBUG] [Thread-190642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:34:25.808 [DEBUG] [Thread-190642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:34:25.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:34:25.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:34:25.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:34:25.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:34:25.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:34:25.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:34:25.845 [DEBUG] [Thread-190642] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:34:33.228 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:33.229 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:39.627 [DEBUG] [Thread-190645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:40.519 [DEBUG] [Thread-190646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:55.557 [DEBUG] [Thread-190647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:34:55.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:34:55.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:34:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:34:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 34, 29), 4.89683, 72.5465, 0.0, 22.392, 14.7316, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:34:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:34:29
2026-04-12T14:34:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:34:57.728 [DEBUG] [Thread-190648] [transport.py] [_log()] starting thread (client mode): 0xae5b4bb0
2026-04-12T14:34:57.728 [DEBUG] [Thread-190648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:34:57.748 [DEBUG] [Thread-190648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:34:57.748 [INFO] [Thread-190648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] client lang: <none>
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] server lang: <none>
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] kex follows: False
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] Compression: none
2026-04-12T14:34:57.752 [DEBUG] [Thread-190648] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:34:57.771 [DEBUG] [Thread-190648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:34:57.771 [DEBUG] [Thread-190648] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:34:57.771 [DEBUG] [Thread-190648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:34:57.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:34:57.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:34:57.772 [DEBUG] [Thread-190648] [transport.py] [_log()] userauth is OK
2026-04-12T14:34:57.773 [DEBUG] [Thread-190648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:34:57.773 [DEBUG] [Thread-190648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:34:57.773 [DEBUG] [Thread-190648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:34:57.773 [DEBUG] [Thread-190648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:34:57.784 [INFO] [Thread-190648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:34:57.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:34:58.564 [DEBUG] [Thread-190648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:34:58.564 [DEBUG] [Thread-190648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:34:58.565 [DEBUG] [Thread-190648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:34:58.605 [DEBUG] [Thread-190648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:34:58.605 [DEBUG] [Thread-190648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:34:58.609 [DEBUG] [Thread-190648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:34:58.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:34:58.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:34:58.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:34:58.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:34:58.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:34:58.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:34:58.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:34:58.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:34:58.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:34:58.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.523718 -999.00  +14.40  16.60     76  +10.30 1 2 1 1 1   888    0 4.93 35.49 ----- 15.8 16.6 275.0 25.5 19.1 -13.5 18.7 -12.1 18.2 -10.9 18.8 -12.3
2026-04-12T14:34:58.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:34:58.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:34:58.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.523718
2026-04-12T14:34:58.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:34:58.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:34:58.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:34:58.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:34:58.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:34:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:34:29', tmtdew=4.89683, humidity=72.5465, cloud=0.0, wind=22.392, temperature=14.7316, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:34:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:34:58.635 [DEBUG] [Thread-190648] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:34:58.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:34:58.730 [DEBUG] [Thread-190651] [transport.py] [_log()] starting thread (client mode): 0xb0f40be0
2026-04-12T14:34:58.730 [DEBUG] [Thread-190651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:34:58.744 [DEBUG] [Thread-190651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:34:58.744 [INFO] [Thread-190651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:34:58.752 [DEBUG] [Thread-190651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:34:58.753 [DEBUG] [Thread-190651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:34:58.753 [DEBUG] [Thread-190651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:34:58.753 [DEBUG] [Thread-190651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:58.753 [DEBUG] [Thread-190651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:34:58.753 [DEBUG] [Thread-190651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:58.753 [DEBUG] [Thread-190651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:34:58.753 [DEBUG] [Thread-190651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] client lang: <none>
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] server lang: <none>
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] kex follows: False
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:34:58.754 [DEBUG] [Thread-190651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:34:58.755 [DEBUG] [Thread-190651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:34:58.755 [DEBUG] [Thread-190651] [transport.py] [_log()] Compression: none
2026-04-12T14:34:58.755 [DEBUG] [Thread-190651] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:34:58.809 [DEBUG] [Thread-190651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:34:58.810 [DEBUG] [Thread-190651] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:34:58.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:34:58.811 [DEBUG] [Thread-190651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:34:58.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:34:58.865 [DEBUG] [Thread-190651] [transport.py] [_log()] userauth is OK
2026-04-12T14:34:58.865 [DEBUG] [Thread-190651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:34:58.865 [DEBUG] [Thread-190651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:34:58.865 [DEBUG] [Thread-190651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:34:58.866 [DEBUG] [Thread-190651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:34:58.885 [INFO] [Thread-190651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:34:58.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:34:58.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:34:59.714 [DEBUG] [Thread-190651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:34:59.714 [DEBUG] [Thread-190651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:34:59.762 [DEBUG] [Thread-190651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:34:59.763 [DEBUG] [Thread-190651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:34:59.772 [DEBUG] [Thread-190651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:34:59.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:34:59.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:34:59.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:34:59.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:34:59.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:34:59.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:34:59.810 [DEBUG] [Thread-190651] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:35:10.594 [DEBUG] [Thread-190653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:35:25.647 [DEBUG] [Thread-190654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:35:29.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:35:29.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:35:29.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:35:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 35, 5), 5.01712, 71.9664, 0.0, 24.844, 14.6984, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:35:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:35:05
2026-04-12T14:35:31.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:35:31.626 [DEBUG] [Thread-190655] [transport.py] [_log()] starting thread (client mode): 0xb0f41cf0
2026-04-12T14:35:31.626 [DEBUG] [Thread-190655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:35:31.645 [DEBUG] [Thread-190655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:35:31.645 [INFO] [Thread-190655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] client lang: <none>
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] server lang: <none>
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] kex follows: False
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] Compression: none
2026-04-12T14:35:31.647 [DEBUG] [Thread-190655] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:35:31.656 [DEBUG] [Thread-190655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:35:31.656 [DEBUG] [Thread-190655] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:35:31.657 [DEBUG] [Thread-190655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:35:31.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:35:31.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:35:31.658 [DEBUG] [Thread-190655] [transport.py] [_log()] userauth is OK
2026-04-12T14:35:31.658 [DEBUG] [Thread-190655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:35:31.658 [DEBUG] [Thread-190655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:35:31.658 [DEBUG] [Thread-190655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:35:31.658 [DEBUG] [Thread-190655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:35:31.675 [INFO] [Thread-190655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:35:31.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:35:32.858 [DEBUG] [Thread-190655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:35:32.859 [DEBUG] [Thread-190655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:35:32.859 [DEBUG] [Thread-190655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:35:32.899 [DEBUG] [Thread-190655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:35:32.900 [DEBUG] [Thread-190655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:35:32.903 [DEBUG] [Thread-190655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:35:32.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:35:32.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:35:32.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:35:32.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:35:32.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:35:32.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:35:32.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:35:32.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:35:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:35:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.524065 -999.00  +14.50  16.44     76  +10.40 1 2 1 1 1   888    0 4.91 34.09 ----- 20.5 16.4 269.2 19.8 19.1 -12.7 18.8 -12.4 18.3 -11.0 18.8 -11.4
2026-04-12T14:35:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:35:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:35:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.524065
2026-04-12T14:35:32.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:35:32.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:35:32.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:35:32.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:35:32.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:35:32.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:35:05', tmtdew=5.01712, humidity=71.9664, cloud=0.0, wind=24.844, temperature=14.6984, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:34:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:35:32.929 [DEBUG] [Thread-190655] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:35:33.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:35:33.024 [DEBUG] [Thread-190658] [transport.py] [_log()] starting thread (client mode): 0xb0f6d270
2026-04-12T14:35:33.024 [DEBUG] [Thread-190658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:35:33.038 [DEBUG] [Thread-190658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:35:33.038 [INFO] [Thread-190658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:35:33.046 [DEBUG] [Thread-190658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] client lang: <none>
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] server lang: <none>
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] kex follows: False
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] Compression: none
2026-04-12T14:35:33.047 [DEBUG] [Thread-190658] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:35:33.102 [DEBUG] [Thread-190658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:35:33.103 [DEBUG] [Thread-190658] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:35:33.103 [DEBUG] [Thread-190658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:35:33.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:35:33.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:35:33.159 [DEBUG] [Thread-190658] [transport.py] [_log()] userauth is OK
2026-04-12T14:35:33.159 [DEBUG] [Thread-190658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:35:33.159 [DEBUG] [Thread-190658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:35:33.160 [DEBUG] [Thread-190658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:35:33.160 [DEBUG] [Thread-190658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:35:33.182 [INFO] [Thread-190658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:35:33.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:35:33.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:35:33.369 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:35:33.371 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:35:33.978 [DEBUG] [Thread-190658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:35:33.978 [DEBUG] [Thread-190658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:35:34.026 [DEBUG] [Thread-190658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:35:34.027 [DEBUG] [Thread-190658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:35:34.036 [DEBUG] [Thread-190658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:35:34.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:35:34.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:35:34.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:35:34.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:35:34.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:35:34.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:35:34.072 [DEBUG] [Thread-190658] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:35:39.684 [DEBUG] [Thread-190660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:35:40.684 [DEBUG] [Thread-190661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:35:55.739 [DEBUG] [Thread-190662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:36:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:36:04.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:36:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:36:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 35, 40), 5.37336, 70.2699, 0.0, 21.348, 15.4637, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:36:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:35:40
2026-04-12T14:36:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:36:05.898 [DEBUG] [Thread-190663] [transport.py] [_log()] starting thread (client mode): 0xb0fb4550
2026-04-12T14:36:05.898 [DEBUG] [Thread-190663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:36:05.918 [DEBUG] [Thread-190663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:36:05.919 [INFO] [Thread-190663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] client lang: <none>
2026-04-12T14:36:05.922 [DEBUG] [Thread-190663] [transport.py] [_log()] server lang: <none>
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] kex follows: False
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] Compression: none
2026-04-12T14:36:05.923 [DEBUG] [Thread-190663] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:36:05.940 [DEBUG] [Thread-190663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:36:05.941 [DEBUG] [Thread-190663] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:36:05.941 [DEBUG] [Thread-190663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:36:05.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:36:05.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:36:05.943 [DEBUG] [Thread-190663] [transport.py] [_log()] userauth is OK
2026-04-12T14:36:05.944 [DEBUG] [Thread-190663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:36:05.944 [DEBUG] [Thread-190663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:36:05.944 [DEBUG] [Thread-190663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:36:05.944 [DEBUG] [Thread-190663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:36:05.964 [INFO] [Thread-190663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:36:05.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:36:06.744 [DEBUG] [Thread-190663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:36:06.745 [DEBUG] [Thread-190663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:36:06.745 [DEBUG] [Thread-190663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:36:06.786 [DEBUG] [Thread-190663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:36:06.787 [DEBUG] [Thread-190663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:36:06.790 [DEBUG] [Thread-190663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:36:06.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:36:06.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:36:06.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:36:06.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:36:06.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:36:06.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:36:06.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:36:06.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:36:06.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:36:06.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.524412 -999.00  +14.40  18.55     75  +10.10 1 2 1 1 1   888    0 4.90 32.88 ----- 16.8 18.6 266.4 20.3 19.1 -13.4 18.8 -12.7 18.2 -11.9 18.7 -12.3
2026-04-12T14:36:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:36:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:36:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.524412
2026-04-12T14:36:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:36:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:36:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:36:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:36:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:36:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:35:40', tmtdew=5.37336, humidity=70.2699, cloud=0.0, wind=21.348, temperature=15.4637, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:35:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:36:06.818 [DEBUG] [Thread-190663] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:36:06.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:36:06.912 [DEBUG] [Thread-190666] [transport.py] [_log()] starting thread (client mode): 0xb0f6ebc0
2026-04-12T14:36:06.912 [DEBUG] [Thread-190666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:36:06.926 [DEBUG] [Thread-190666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:36:06.927 [INFO] [Thread-190666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:36:06.934 [DEBUG] [Thread-190666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:36:06.934 [DEBUG] [Thread-190666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:36:06.934 [DEBUG] [Thread-190666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:36:06.934 [DEBUG] [Thread-190666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] client lang: <none>
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] server lang: <none>
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] kex follows: False
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:36:06.935 [DEBUG] [Thread-190666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:36:06.936 [DEBUG] [Thread-190666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:36:06.936 [DEBUG] [Thread-190666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:36:06.936 [DEBUG] [Thread-190666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:36:06.936 [DEBUG] [Thread-190666] [transport.py] [_log()] Compression: none
2026-04-12T14:36:06.936 [DEBUG] [Thread-190666] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:36:06.993 [DEBUG] [Thread-190666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:36:06.993 [DEBUG] [Thread-190666] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:36:06.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:36:06.995 [DEBUG] [Thread-190666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:36:06.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:36:07.049 [DEBUG] [Thread-190666] [transport.py] [_log()] userauth is OK
2026-04-12T14:36:07.049 [DEBUG] [Thread-190666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:36:07.049 [DEBUG] [Thread-190666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:36:07.049 [DEBUG] [Thread-190666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:36:07.050 [DEBUG] [Thread-190666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:36:07.068 [INFO] [Thread-190666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:36:07.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:36:07.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:36:07.888 [DEBUG] [Thread-190666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:36:07.888 [DEBUG] [Thread-190666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:36:07.936 [DEBUG] [Thread-190666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:36:07.936 [DEBUG] [Thread-190666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:36:07.948 [DEBUG] [Thread-190666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:36:07.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:36:07.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:36:07.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:36:07.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:36:07.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:36:07.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:36:07.989 [DEBUG] [Thread-190666] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:36:10.774 [DEBUG] [Thread-190668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:36:25.826 [DEBUG] [Thread-190669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:36:33.521 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:36:33.523 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:36:38.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:36:38.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:36:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:36:39.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 36, 16), 4.97763, 72.168, 0.0, 20.9617, 14.732, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:36:39.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:36:16
2026-04-12T14:36:39.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:36:39.730 [DEBUG] [Thread-190670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:36:39.797 [DEBUG] [Thread-190671] [transport.py] [_log()] starting thread (client mode): 0xb0f57970
2026-04-12T14:36:39.797 [DEBUG] [Thread-190671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:36:39.817 [DEBUG] [Thread-190671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:36:39.817 [INFO] [Thread-190671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] client lang: <none>
2026-04-12T14:36:39.821 [DEBUG] [Thread-190671] [transport.py] [_log()] server lang: <none>
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] kex follows: False
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] Compression: none
2026-04-12T14:36:39.822 [DEBUG] [Thread-190671] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:36:39.842 [DEBUG] [Thread-190671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:36:39.843 [DEBUG] [Thread-190671] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:36:39.843 [DEBUG] [Thread-190671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:36:39.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:36:39.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:36:39.845 [DEBUG] [Thread-190671] [transport.py] [_log()] userauth is OK
2026-04-12T14:36:39.845 [DEBUG] [Thread-190671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:36:39.845 [DEBUG] [Thread-190671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:36:39.845 [DEBUG] [Thread-190671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:36:39.845 [DEBUG] [Thread-190671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:36:39.862 [INFO] [Thread-190671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:36:39.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:36:40.644 [DEBUG] [Thread-190671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:36:40.645 [DEBUG] [Thread-190671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:36:40.645 [DEBUG] [Thread-190671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:36:40.686 [DEBUG] [Thread-190671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:36:40.686 [DEBUG] [Thread-190671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:36:40.688 [DEBUG] [Thread-190671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:36:40.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:36:40.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:36:40.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:36:40.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:36:40.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:36:40.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:36:40.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:36:40.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:36:40.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:36:40.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.525106 -999.00  +14.50  18.45     75  +10.30 1 2 1 1 1   888    0 5.10 37.55 ----- 16.2 18.4 293.2 27.2 19.0 -13.3 18.8 -12.6 18.1 -12.9 18.8 -12.4
2026-04-12T14:36:40.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:36:40.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:36:40.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.525106
2026-04-12T14:36:40.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:36:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:36:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:36:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:36:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:36:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:36:16', tmtdew=4.97763, humidity=72.168, cloud=0.0, wind=20.9617, temperature=14.732, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:36:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:36:40.711 [DEBUG] [Thread-190671] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:36:40.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:36:40.807 [DEBUG] [Thread-190674] [transport.py] [_log()] starting thread (client mode): 0xb0f6d2a0
2026-04-12T14:36:40.807 [DEBUG] [Thread-190674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:36:40.821 [DEBUG] [Thread-190674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:36:40.822 [INFO] [Thread-190674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:36:40.829 [DEBUG] [Thread-190674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:36:40.829 [DEBUG] [Thread-190674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:36:40.829 [DEBUG] [Thread-190674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:36:40.829 [DEBUG] [Thread-190674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:40.829 [DEBUG] [Thread-190674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:36:40.829 [DEBUG] [Thread-190674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] client lang: <none>
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] server lang: <none>
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] kex follows: False
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:36:40.830 [DEBUG] [Thread-190674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:36:40.831 [DEBUG] [Thread-190674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:36:40.831 [DEBUG] [Thread-190674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:36:40.831 [DEBUG] [Thread-190674] [transport.py] [_log()] Compression: none
2026-04-12T14:36:40.831 [DEBUG] [Thread-190674] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:36:40.862 [DEBUG] [Thread-190676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:36:40.886 [DEBUG] [Thread-190674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:36:40.887 [DEBUG] [Thread-190674] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:36:40.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:36:40.888 [DEBUG] [Thread-190674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:36:40.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:36:40.943 [DEBUG] [Thread-190674] [transport.py] [_log()] userauth is OK
2026-04-12T14:36:40.943 [DEBUG] [Thread-190674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:36:40.944 [DEBUG] [Thread-190674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:36:40.944 [DEBUG] [Thread-190674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:36:40.944 [DEBUG] [Thread-190674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:36:40.966 [INFO] [Thread-190674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:36:40.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:36:40.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:36:41.755 [DEBUG] [Thread-190674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:36:41.755 [DEBUG] [Thread-190674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:36:41.805 [DEBUG] [Thread-190674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:36:41.805 [DEBUG] [Thread-190674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:36:41.814 [DEBUG] [Thread-190674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:36:41.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:36:41.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:36:41.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:36:41.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:36:41.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:36:41.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:36:41.850 [DEBUG] [Thread-190674] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:36:55.915 [DEBUG] [Thread-190677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:37:10.953 [DEBUG] [Thread-190678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:37:11.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:37:11.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:37:11.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:37:13.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 36, 51), 5.3245, 70.4683, 0.0, 24.0646, 15.2975, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:37:13.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:36:51
2026-04-12T14:37:13.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:37:13.784 [DEBUG] [Thread-190679] [transport.py] [_log()] starting thread (client mode): 0xb0f6ead0
2026-04-12T14:37:13.784 [DEBUG] [Thread-190679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:37:13.804 [DEBUG] [Thread-190679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:37:13.804 [INFO] [Thread-190679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] client lang: <none>
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] server lang: <none>
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] kex follows: False
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] Compression: none
2026-04-12T14:37:13.807 [DEBUG] [Thread-190679] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:37:13.825 [DEBUG] [Thread-190679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:37:13.825 [DEBUG] [Thread-190679] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:37:13.826 [DEBUG] [Thread-190679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:37:13.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:37:13.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:37:13.828 [DEBUG] [Thread-190679] [transport.py] [_log()] userauth is OK
2026-04-12T14:37:13.828 [DEBUG] [Thread-190679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:37:13.828 [DEBUG] [Thread-190679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:37:13.828 [DEBUG] [Thread-190679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:37:13.828 [DEBUG] [Thread-190679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:37:13.852 [INFO] [Thread-190679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:37:13.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:37:14.635 [DEBUG] [Thread-190679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:37:14.635 [DEBUG] [Thread-190679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:37:14.636 [DEBUG] [Thread-190679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:37:14.676 [DEBUG] [Thread-190679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:37:14.676 [DEBUG] [Thread-190679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:37:14.679 [DEBUG] [Thread-190679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:37:14.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:37:14.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:37:14.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:37:14.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:37:14.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:37:14.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:37:14.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:37:14.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:37:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:37:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.525454 -999.00  +14.60  20.31     74  +10.00 1 2 1 1 1   888    0 5.05 37.97 ----- 16.5 20.3 299.2 22.5 19.1 -13.3 18.7 -12.7 18.2 -11.1 18.8 -12.0
2026-04-12T14:37:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:37:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:37:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.525454
2026-04-12T14:37:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:37:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:37:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:37:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:37:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:37:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:36:51', tmtdew=5.3245, humidity=70.4683, cloud=0.0, wind=24.0646, temperature=15.2975, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:36:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:37:14.709 [DEBUG] [Thread-190679] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:37:14.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:37:14.801 [DEBUG] [Thread-190682] [transport.py] [_log()] starting thread (client mode): 0xb0fb7ca0
2026-04-12T14:37:14.801 [DEBUG] [Thread-190682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:37:14.816 [DEBUG] [Thread-190682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:37:14.816 [INFO] [Thread-190682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:37:14.824 [DEBUG] [Thread-190682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:37:14.824 [DEBUG] [Thread-190682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:37:14.824 [DEBUG] [Thread-190682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] client lang: <none>
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] server lang: <none>
2026-04-12T14:37:14.825 [DEBUG] [Thread-190682] [transport.py] [_log()] kex follows: False
2026-04-12T14:37:14.826 [DEBUG] [Thread-190682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:37:14.826 [DEBUG] [Thread-190682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:37:14.826 [DEBUG] [Thread-190682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:37:14.826 [DEBUG] [Thread-190682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:37:14.826 [DEBUG] [Thread-190682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:37:14.826 [DEBUG] [Thread-190682] [transport.py] [_log()] Compression: none
2026-04-12T14:37:14.826 [DEBUG] [Thread-190682] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:37:14.881 [DEBUG] [Thread-190682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:37:14.882 [DEBUG] [Thread-190682] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:37:14.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:37:14.883 [DEBUG] [Thread-190682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:37:14.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:37:14.937 [DEBUG] [Thread-190682] [transport.py] [_log()] userauth is OK
2026-04-12T14:37:14.937 [DEBUG] [Thread-190682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:37:14.938 [DEBUG] [Thread-190682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:37:14.938 [DEBUG] [Thread-190682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:37:14.938 [DEBUG] [Thread-190682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:37:14.956 [INFO] [Thread-190682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:37:14.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:37:14.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:37:15.783 [DEBUG] [Thread-190682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:37:15.783 [DEBUG] [Thread-190682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:37:15.831 [DEBUG] [Thread-190682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:37:15.831 [DEBUG] [Thread-190682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:37:15.840 [DEBUG] [Thread-190682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:37:15.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:37:15.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')
2026-04-12T14:37:15.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:37:15.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:37:15.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:37:15.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:37:15.878 [DEBUG] [Thread-190682] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:37:25.993 [DEBUG] [Thread-190684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:37:33.678 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:37:33.679 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:37:39.787 [DEBUG] [Thread-190685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:37:41.056 [DEBUG] [Thread-190686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:37:45.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:37:45.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:37:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:37:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 37, 26), 5.26545, 70.7535, 0.0, 20.0275, 14.6653, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:37:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:37:26
2026-04-12T14:37:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:37:47.715 [DEBUG] [Thread-190687] [transport.py] [_log()] starting thread (client mode): 0xae5b76a0
2026-04-12T14:37:47.715 [DEBUG] [Thread-190687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:37:47.734 [DEBUG] [Thread-190687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:37:47.734 [INFO] [Thread-190687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:37:47.737 [DEBUG] [Thread-190687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:37:47.737 [DEBUG] [Thread-190687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] client lang: <none>
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] server lang: <none>
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] kex follows: False
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:37:47.738 [DEBUG] [Thread-190687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:37:47.739 [DEBUG] [Thread-190687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:37:47.739 [DEBUG] [Thread-190687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:37:47.739 [DEBUG] [Thread-190687] [transport.py] [_log()] Compression: none
2026-04-12T14:37:47.739 [DEBUG] [Thread-190687] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:37:47.748 [DEBUG] [Thread-190687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:37:47.748 [DEBUG] [Thread-190687] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:37:47.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:37:47.749 [DEBUG] [Thread-190687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:37:47.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:37:47.750 [DEBUG] [Thread-190687] [transport.py] [_log()] userauth is OK
2026-04-12T14:37:47.750 [DEBUG] [Thread-190687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:37:47.750 [DEBUG] [Thread-190687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:37:47.751 [DEBUG] [Thread-190687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:37:47.751 [DEBUG] [Thread-190687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:37:47.767 [INFO] [Thread-190687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:37:47.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:37:48.564 [DEBUG] [Thread-190687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:37:48.564 [DEBUG] [Thread-190687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:37:48.565 [DEBUG] [Thread-190687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:37:48.605 [DEBUG] [Thread-190687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:37:48.606 [DEBUG] [Thread-190687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:37:48.609 [DEBUG] [Thread-190687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:37:48.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:37:48.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:37:48.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:37:48.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:37:48.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:37:48.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:37:48.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:37:48.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:37:48.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:37:48.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.525801 -999.00  +14.50  16.83     73   +9.90 1 2 1 1 1   888    0 5.22 41.02 ----- 15.1 16.8 288.0 22.2 19.2 -13.0 18.7 -12.0 18.4 -11.1 18.9 -11.8
2026-04-12T14:37:48.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:37:48.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:37:48.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.525801
2026-04-12T14:37:48.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:37:48.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:37:48.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:37:48.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:37:48.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:37:48.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:37:26', tmtdew=5.26545, humidity=70.7535, cloud=0.0, wind=20.0275, temperature=14.6653, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:37:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:37:48.638 [DEBUG] [Thread-190687] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:37:48.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:37:48.732 [DEBUG] [Thread-190690] [transport.py] [_log()] starting thread (client mode): 0xae52f970
2026-04-12T14:37:48.732 [DEBUG] [Thread-190690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:37:48.752 [DEBUG] [Thread-190690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:37:48.752 [INFO] [Thread-190690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:37:48.759 [DEBUG] [Thread-190690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] client lang: <none>
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] server lang: <none>
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] kex follows: False
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:37:48.760 [DEBUG] [Thread-190690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:37:48.761 [DEBUG] [Thread-190690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:37:48.761 [DEBUG] [Thread-190690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:37:48.761 [DEBUG] [Thread-190690] [transport.py] [_log()] Compression: none
2026-04-12T14:37:48.761 [DEBUG] [Thread-190690] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:37:48.818 [DEBUG] [Thread-190690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:37:48.818 [DEBUG] [Thread-190690] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:37:48.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:37:48.819 [DEBUG] [Thread-190690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:37:48.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:37:48.874 [DEBUG] [Thread-190690] [transport.py] [_log()] userauth is OK
2026-04-12T14:37:48.875 [DEBUG] [Thread-190690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:37:48.875 [DEBUG] [Thread-190690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:37:48.875 [DEBUG] [Thread-190690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:37:48.875 [DEBUG] [Thread-190690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:37:48.896 [INFO] [Thread-190690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:37:48.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:37:48.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:37:49.748 [DEBUG] [Thread-190690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:37:49.748 [DEBUG] [Thread-190690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:37:49.796 [DEBUG] [Thread-190690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:37:49.796 [DEBUG] [Thread-190690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:37:49.806 [DEBUG] [Thread-190690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:37:49.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:37:49.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:37:49.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:37:49.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:37:49.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:37:49.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:37:49.842 [DEBUG] [Thread-190690] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:37:56.095 [DEBUG] [Thread-190692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:11.155 [DEBUG] [Thread-190693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:19.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:38:19.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:38:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:38:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 38, 2), 5.2527, 70.8032, 0.0, 19.6571, 14.6156, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:38:21.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:38:02
2026-04-12T14:38:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:38:21.729 [DEBUG] [Thread-190694] [transport.py] [_log()] starting thread (client mode): 0xae52c820
2026-04-12T14:38:21.729 [DEBUG] [Thread-190694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:38:21.752 [DEBUG] [Thread-190694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:38:21.753 [INFO] [Thread-190694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:38:21.756 [DEBUG] [Thread-190694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:38:21.756 [DEBUG] [Thread-190694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:38:21.756 [DEBUG] [Thread-190694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:38:21.756 [DEBUG] [Thread-190694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:21.756 [DEBUG] [Thread-190694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:21.756 [DEBUG] [Thread-190694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] client lang: <none>
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] server lang: <none>
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] kex follows: False
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:38:21.757 [DEBUG] [Thread-190694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:38:21.758 [DEBUG] [Thread-190694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:38:21.758 [DEBUG] [Thread-190694] [transport.py] [_log()] Compression: none
2026-04-12T14:38:21.758 [DEBUG] [Thread-190694] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:38:21.777 [DEBUG] [Thread-190694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:38:21.777 [DEBUG] [Thread-190694] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:38:21.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:38:21.778 [DEBUG] [Thread-190694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:38:21.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:38:21.781 [DEBUG] [Thread-190694] [transport.py] [_log()] userauth is OK
2026-04-12T14:38:21.781 [DEBUG] [Thread-190694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:38:21.781 [DEBUG] [Thread-190694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:38:21.781 [DEBUG] [Thread-190694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:38:21.781 [DEBUG] [Thread-190694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:38:21.804 [INFO] [Thread-190694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:38:21.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:38:22.601 [DEBUG] [Thread-190694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:38:22.601 [DEBUG] [Thread-190694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:38:22.601 [DEBUG] [Thread-190694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:38:22.642 [DEBUG] [Thread-190694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:38:22.642 [DEBUG] [Thread-190694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:38:22.645 [DEBUG] [Thread-190694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:38:22.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:38:22.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:38:22.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:38:22.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:38:22.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:38:22.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:38:22.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:38:22.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:38:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:38:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.526148 -999.00  +14.70  13.13     75  +10.40 1 2 1 1 1   888    0 5.03 37.21 ----- 12.5 13.1 290.8 16.3 19.2 -13.0 18.8 -11.6 18.4 -11.4 19.0 -11.5
2026-04-12T14:38:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:38:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:38:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.526148
2026-04-12T14:38:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:38:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:38:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:38:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:38:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:38:22.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:38:02', tmtdew=5.2527, humidity=70.8032, cloud=0.0, wind=19.6571, temperature=14.6156, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:37:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:38:22.670 [DEBUG] [Thread-190694] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:38:22.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:38:22.771 [DEBUG] [Thread-190697] [transport.py] [_log()] starting thread (client mode): 0xb0f6ce50
2026-04-12T14:38:22.771 [DEBUG] [Thread-190697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:38:22.785 [DEBUG] [Thread-190697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:38:22.785 [INFO] [Thread-190697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:38:22.793 [DEBUG] [Thread-190697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:38:22.793 [DEBUG] [Thread-190697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] client lang: <none>
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] server lang: <none>
2026-04-12T14:38:22.794 [DEBUG] [Thread-190697] [transport.py] [_log()] kex follows: False
2026-04-12T14:38:22.795 [DEBUG] [Thread-190697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:38:22.795 [DEBUG] [Thread-190697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:38:22.795 [DEBUG] [Thread-190697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:38:22.795 [DEBUG] [Thread-190697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:38:22.795 [DEBUG] [Thread-190697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:38:22.795 [DEBUG] [Thread-190697] [transport.py] [_log()] Compression: none
2026-04-12T14:38:22.795 [DEBUG] [Thread-190697] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:38:22.852 [DEBUG] [Thread-190697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:38:22.853 [DEBUG] [Thread-190697] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:38:22.853 [DEBUG] [Thread-190697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:38:22.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:38:22.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:38:22.915 [DEBUG] [Thread-190697] [transport.py] [_log()] userauth is OK
2026-04-12T14:38:22.915 [DEBUG] [Thread-190697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:38:22.915 [DEBUG] [Thread-190697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:38:22.915 [DEBUG] [Thread-190697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:38:22.915 [DEBUG] [Thread-190697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:38:22.935 [INFO] [Thread-190697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:38:22.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:38:22.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:38:23.717 [DEBUG] [Thread-190697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:38:23.718 [DEBUG] [Thread-190697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:38:23.766 [DEBUG] [Thread-190697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:38:23.766 [DEBUG] [Thread-190697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:38:23.775 [DEBUG] [Thread-190697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:38:23.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:38:23.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:38:23.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:38:23.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:38:23.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:38:23.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:38:23.813 [DEBUG] [Thread-190697] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:38:26.195 [DEBUG] [Thread-190699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:33.826 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:33.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:39.826 [DEBUG] [Thread-190700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:41.247 [DEBUG] [Thread-190701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:38:53.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:38:53.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:38:55.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 38, 37), 5.67522, 68.8108, 0.0, 14.3273, 15.1979, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:38:55.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:38:37
2026-04-12T14:38:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:38:55.673 [DEBUG] [Thread-190702] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T14:38:55.673 [DEBUG] [Thread-190702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:38:55.693 [DEBUG] [Thread-190702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:38:55.694 [INFO] [Thread-190702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:38:55.696 [DEBUG] [Thread-190702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] client lang: <none>
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] server lang: <none>
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] kex follows: False
2026-04-12T14:38:55.697 [DEBUG] [Thread-190702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:38:55.698 [DEBUG] [Thread-190702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:38:55.698 [DEBUG] [Thread-190702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:38:55.698 [DEBUG] [Thread-190702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:38:55.698 [DEBUG] [Thread-190702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:38:55.698 [DEBUG] [Thread-190702] [transport.py] [_log()] Compression: none
2026-04-12T14:38:55.698 [DEBUG] [Thread-190702] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:38:55.719 [DEBUG] [Thread-190702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:38:55.719 [DEBUG] [Thread-190702] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:38:55.720 [DEBUG] [Thread-190702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:38:55.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:38:55.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:38:55.723 [DEBUG] [Thread-190702] [transport.py] [_log()] userauth is OK
2026-04-12T14:38:55.723 [DEBUG] [Thread-190702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:38:55.723 [DEBUG] [Thread-190702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:38:55.723 [DEBUG] [Thread-190702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:38:55.723 [DEBUG] [Thread-190702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:38:55.747 [INFO] [Thread-190702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:38:55.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:38:56.283 [DEBUG] [Thread-190704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:38:56.573 [DEBUG] [Thread-190702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:38:56.573 [DEBUG] [Thread-190702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:38:56.573 [DEBUG] [Thread-190702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:38:56.614 [DEBUG] [Thread-190702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:38:56.614 [DEBUG] [Thread-190702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:38:56.618 [DEBUG] [Thread-190702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:38:56.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:38:56.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:38:56.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:38:56.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:38:56.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:38:56.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:38:56.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:38:56.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:38:56.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:38:56.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.526495 -999.00  +14.70  10.76     74  +10.20 1 2 1 1 1   888    0 5.07 36.94 ----- 14.0 10.8 281.0 21.4 19.3 -12.9 18.9 -11.4 18.6 -9.9 19.1 -10.9
2026-04-12T14:38:56.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:38:56.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:38:56.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.526495
2026-04-12T14:38:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:38:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:38:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:38:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:38:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:38:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:38:37', tmtdew=5.67522, humidity=68.8108, cloud=0.0, wind=14.3273, temperature=15.1979, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:38:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:38:56.647 [DEBUG] [Thread-190702] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:38:56.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:38:56.740 [DEBUG] [Thread-190706] [transport.py] [_log()] starting thread (client mode): 0xb0f40f40
2026-04-12T14:38:56.741 [DEBUG] [Thread-190706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:38:56.755 [DEBUG] [Thread-190706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:38:56.755 [INFO] [Thread-190706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:38:56.768 [DEBUG] [Thread-190706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:38:56.768 [DEBUG] [Thread-190706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:38:56.768 [DEBUG] [Thread-190706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:38:56.768 [DEBUG] [Thread-190706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:56.768 [DEBUG] [Thread-190706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:38:56.768 [DEBUG] [Thread-190706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:56.768 [DEBUG] [Thread-190706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] client lang: <none>
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] server lang: <none>
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] kex follows: False
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] Compression: none
2026-04-12T14:38:56.769 [DEBUG] [Thread-190706] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:38:56.826 [DEBUG] [Thread-190706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:38:56.827 [DEBUG] [Thread-190706] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:38:56.827 [DEBUG] [Thread-190706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:38:56.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:38:56.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:38:56.886 [DEBUG] [Thread-190706] [transport.py] [_log()] userauth is OK
2026-04-12T14:38:56.886 [DEBUG] [Thread-190706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:38:56.886 [DEBUG] [Thread-190706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:38:56.887 [DEBUG] [Thread-190706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:38:56.887 [DEBUG] [Thread-190706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:38:56.911 [INFO] [Thread-190706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:38:56.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:38:56.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:38:57.737 [DEBUG] [Thread-190706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:38:57.738 [DEBUG] [Thread-190706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:38:57.786 [DEBUG] [Thread-190706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:38:57.786 [DEBUG] [Thread-190706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:38:57.796 [DEBUG] [Thread-190706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:38:57.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:38:57.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:38:57.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:38:57.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:38:57.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:38:57.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:38:57.835 [DEBUG] [Thread-190706] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:39:11.323 [DEBUG] [Thread-190708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:39:26.375 [DEBUG] [Thread-190709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:39:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:39:27.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:39:27.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:39:29.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 39, 13), 5.2849, 70.9025, 0.0, 16.0924, 14.8983, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:39:29.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:39:13
2026-04-12T14:39:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:39:29.731 [DEBUG] [Thread-190710] [transport.py] [_log()] starting thread (client mode): 0xb0f6cb80
2026-04-12T14:39:29.731 [DEBUG] [Thread-190710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:39:29.752 [DEBUG] [Thread-190710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:39:29.752 [INFO] [Thread-190710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:39:29.755 [DEBUG] [Thread-190710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:39:29.755 [DEBUG] [Thread-190710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:39:29.755 [DEBUG] [Thread-190710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:39:29.755 [DEBUG] [Thread-190710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:39:29.755 [DEBUG] [Thread-190710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:39:29.755 [DEBUG] [Thread-190710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:39:29.755 [DEBUG] [Thread-190710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] client lang: <none>
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] server lang: <none>
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] kex follows: False
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] Compression: none
2026-04-12T14:39:29.756 [DEBUG] [Thread-190710] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:39:29.772 [DEBUG] [Thread-190710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:39:29.772 [DEBUG] [Thread-190710] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:39:29.772 [DEBUG] [Thread-190710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:39:29.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:39:29.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:39:29.773 [DEBUG] [Thread-190710] [transport.py] [_log()] userauth is OK
2026-04-12T14:39:29.773 [DEBUG] [Thread-190710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:39:29.773 [DEBUG] [Thread-190710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:39:29.773 [DEBUG] [Thread-190710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:39:29.773 [DEBUG] [Thread-190710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:39:29.781 [INFO] [Thread-190710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:39:29.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:39:30.533 [DEBUG] [Thread-190710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:39:30.534 [DEBUG] [Thread-190710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:39:30.534 [DEBUG] [Thread-190710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:39:30.575 [DEBUG] [Thread-190710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:39:30.575 [DEBUG] [Thread-190710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:39:30.579 [DEBUG] [Thread-190710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:39:30.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:39:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:39:30.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:39:30.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:39:30.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:39:30.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:39:30.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:39:30.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:39:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:39:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.526843 -999.00  +14.70  12.38     74  +10.10 1 2 1 1 1   888    0 5.23 38.44 ----- 13.4 12.4 278.2 20.4 19.3 -12.7 18.9 -11.1 18.5 -10.6 19.2 -10.8
2026-04-12T14:39:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:39:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:39:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.526843
2026-04-12T14:39:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:39:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:39:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:39:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:39:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:39:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:39:13', tmtdew=5.2849, humidity=70.9025, cloud=0.0, wind=16.0924, temperature=14.8983, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:38:39.235', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:39:30.600 [DEBUG] [Thread-190710] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:39:30.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:39:30.683 [DEBUG] [Thread-190713] [transport.py] [_log()] starting thread (client mode): 0xae5b5300
2026-04-12T14:39:30.684 [DEBUG] [Thread-190713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:39:30.698 [DEBUG] [Thread-190713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:39:30.699 [INFO] [Thread-190713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:39:30.706 [DEBUG] [Thread-190713] [transport.py] [_log()] client lang: <none>
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] server lang: <none>
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] kex follows: False
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] Compression: none
2026-04-12T14:39:30.707 [DEBUG] [Thread-190713] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:39:30.762 [DEBUG] [Thread-190713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:39:30.762 [DEBUG] [Thread-190713] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:39:30.762 [DEBUG] [Thread-190713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:39:30.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:39:30.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:39:30.819 [DEBUG] [Thread-190713] [transport.py] [_log()] userauth is OK
2026-04-12T14:39:30.819 [DEBUG] [Thread-190713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:39:30.819 [DEBUG] [Thread-190713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:39:30.819 [DEBUG] [Thread-190713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:39:30.819 [DEBUG] [Thread-190713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:39:30.835 [INFO] [Thread-190713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:39:30.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:39:30.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:39:31.636 [DEBUG] [Thread-190713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:39:31.636 [DEBUG] [Thread-190713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:39:31.683 [DEBUG] [Thread-190713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:39:31.683 [DEBUG] [Thread-190713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:39:31.692 [DEBUG] [Thread-190713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:39:31.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:39:31.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:39:31.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:39:31.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:39:31.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:39:31.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:39:31.727 [DEBUG] [Thread-190713] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:39:33.966 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:39:33.968 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:39:39.863 [DEBUG] [Thread-190715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:39:41.415 [DEBUG] [Thread-190716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:39:56.478 [DEBUG] [Thread-190717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:40:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:40:01.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:40:01.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:40:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 39, 49), 5.46272, 69.8382, 0.0, 17.5378, 15.3966, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:40:03.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:39:49
2026-04-12T14:40:03.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:40:03.589 [DEBUG] [Thread-190718] [transport.py] [_log()] starting thread (client mode): 0xae5b4a30
2026-04-12T14:40:03.589 [DEBUG] [Thread-190718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:40:03.610 [DEBUG] [Thread-190718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:40:03.610 [INFO] [Thread-190718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] client lang: <none>
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] server lang: <none>
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] kex follows: False
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:40:03.613 [DEBUG] [Thread-190718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:40:03.614 [DEBUG] [Thread-190718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:40:03.614 [DEBUG] [Thread-190718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:40:03.614 [DEBUG] [Thread-190718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:40:03.614 [DEBUG] [Thread-190718] [transport.py] [_log()] Compression: none
2026-04-12T14:40:03.614 [DEBUG] [Thread-190718] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:40:03.629 [DEBUG] [Thread-190718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:40:03.630 [DEBUG] [Thread-190718] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:40:03.630 [DEBUG] [Thread-190718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:40:03.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:40:03.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:40:03.632 [DEBUG] [Thread-190718] [transport.py] [_log()] userauth is OK
2026-04-12T14:40:03.632 [DEBUG] [Thread-190718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:40:03.632 [DEBUG] [Thread-190718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:40:03.633 [DEBUG] [Thread-190718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:40:03.633 [DEBUG] [Thread-190718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:40:03.650 [INFO] [Thread-190718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:40:03.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:40:04.676 [DEBUG] [Thread-190718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:40:04.676 [DEBUG] [Thread-190718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:40:04.676 [DEBUG] [Thread-190718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:40:04.717 [DEBUG] [Thread-190718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:40:04.718 [DEBUG] [Thread-190718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:40:04.721 [DEBUG] [Thread-190718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:40:04.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:40:04.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:40:04.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:40:04.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:40:04.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:40:04.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:40:04.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:40:04.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:40:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:40:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.527537 -999.00  +14.80  14.79     75  +10.40 1 2 1 1 1   888    0 5.17 35.85 ----- 16.9 14.8 279.8 26.8 19.2 -13.2 18.9 -10.7 18.5 -9.5 19.3 -11.1
2026-04-12T14:40:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:40:04.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:40:04.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.527537
2026-04-12T14:40:04.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:40:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:40:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:40:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:40:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:40:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:39:49', tmtdew=5.46272, humidity=69.8382, cloud=0.0, wind=17.5378, temperature=15.3966, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:39:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:40:04.751 [DEBUG] [Thread-190718] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:40:04.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:40:04.843 [DEBUG] [Thread-190721] [transport.py] [_log()] starting thread (client mode): 0xae5b4bb0
2026-04-12T14:40:04.844 [DEBUG] [Thread-190721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:40:04.858 [DEBUG] [Thread-190721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:40:04.858 [INFO] [Thread-190721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] client lang: <none>
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] server lang: <none>
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] kex follows: False
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:40:04.866 [DEBUG] [Thread-190721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:40:04.867 [DEBUG] [Thread-190721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:40:04.867 [DEBUG] [Thread-190721] [transport.py] [_log()] Compression: none
2026-04-12T14:40:04.867 [DEBUG] [Thread-190721] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:40:04.925 [DEBUG] [Thread-190721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:40:04.926 [DEBUG] [Thread-190721] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:40:04.926 [DEBUG] [Thread-190721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:40:04.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:40:04.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:40:04.984 [DEBUG] [Thread-190721] [transport.py] [_log()] userauth is OK
2026-04-12T14:40:04.985 [DEBUG] [Thread-190721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:40:04.985 [DEBUG] [Thread-190721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:40:04.985 [DEBUG] [Thread-190721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:40:04.985 [DEBUG] [Thread-190721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:40:05.010 [INFO] [Thread-190721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:40:05.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:40:05.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:40:05.827 [DEBUG] [Thread-190721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:40:05.828 [DEBUG] [Thread-190721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:40:05.876 [DEBUG] [Thread-190721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:40:05.876 [DEBUG] [Thread-190721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:40:05.886 [DEBUG] [Thread-190721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:40:05.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:40:05.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:40:05.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:40:05.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:40:05.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:40:05.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:40:05.923 [DEBUG] [Thread-190721] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:40:11.516 [DEBUG] [Thread-190723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:40:26.572 [DEBUG] [Thread-190724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:40:34.111 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:40:34.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:40:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:40:35.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:40:35.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:40:37.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 40, 24), 5.23136, 70.9191, 0.0, 17.7689, 15.0983, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:40:37.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:40:24
2026-04-12T14:40:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:40:37.783 [DEBUG] [Thread-190725] [transport.py] [_log()] starting thread (client mode): 0xae5b5ba0
2026-04-12T14:40:37.783 [DEBUG] [Thread-190725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:40:37.798 [DEBUG] [Thread-190725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:40:37.798 [INFO] [Thread-190725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:40:37.800 [DEBUG] [Thread-190725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:40:37.800 [DEBUG] [Thread-190725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:40:37.800 [DEBUG] [Thread-190725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:40:37.800 [DEBUG] [Thread-190725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:37.800 [DEBUG] [Thread-190725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:37.800 [DEBUG] [Thread-190725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] client lang: <none>
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] server lang: <none>
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] kex follows: False
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] Compression: none
2026-04-12T14:40:37.801 [DEBUG] [Thread-190725] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:40:37.808 [DEBUG] [Thread-190725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:40:37.809 [DEBUG] [Thread-190725] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:40:37.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:40:37.809 [DEBUG] [Thread-190725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:40:37.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:40:37.810 [DEBUG] [Thread-190725] [transport.py] [_log()] userauth is OK
2026-04-12T14:40:37.810 [DEBUG] [Thread-190725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:40:37.810 [DEBUG] [Thread-190725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:40:37.810 [DEBUG] [Thread-190725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:40:37.810 [DEBUG] [Thread-190725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:40:37.820 [INFO] [Thread-190725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:40:37.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:40:38.686 [DEBUG] [Thread-190725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:40:38.687 [DEBUG] [Thread-190725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:40:38.687 [DEBUG] [Thread-190725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:40:38.727 [DEBUG] [Thread-190725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:40:38.727 [DEBUG] [Thread-190725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:40:38.730 [DEBUG] [Thread-190725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:40:38.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:40:38.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:40:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:40:38.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:40:38.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:40:38.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:40:38.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:40:38.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:40:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:40:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.527884 -999.00  +14.90  17.05     75  +10.50 1 2 1 1 1   888    0 5.18 39.06 ----- 20.3 17.1 285.6 21.4 19.3 -12.0 19.0 -11.2 18.5 -10.6 19.2 -11.2
2026-04-12T14:40:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:40:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:40:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.527884
2026-04-12T14:40:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:40:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:40:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:40:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:40:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:40:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:40:24', tmtdew=5.23136, humidity=70.9191, cloud=0.0, wind=17.7689, temperature=15.0983, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:40:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:40:38.760 [DEBUG] [Thread-190725] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:40:38.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:40:38.854 [DEBUG] [Thread-190727] [transport.py] [_log()] starting thread (client mode): 0xb0fcf190
2026-04-12T14:40:38.854 [DEBUG] [Thread-190727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:40:38.869 [DEBUG] [Thread-190727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:40:38.869 [INFO] [Thread-190727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] client lang: <none>
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] server lang: <none>
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] kex follows: False
2026-04-12T14:40:38.877 [DEBUG] [Thread-190727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:40:38.878 [DEBUG] [Thread-190727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:40:38.878 [DEBUG] [Thread-190727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:40:38.878 [DEBUG] [Thread-190727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:40:38.878 [DEBUG] [Thread-190727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:40:38.878 [DEBUG] [Thread-190727] [transport.py] [_log()] Compression: none
2026-04-12T14:40:38.878 [DEBUG] [Thread-190727] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:40:38.934 [DEBUG] [Thread-190727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:40:38.935 [DEBUG] [Thread-190727] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:40:38.935 [DEBUG] [Thread-190727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:40:38.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:40:38.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:40:38.991 [DEBUG] [Thread-190727] [transport.py] [_log()] userauth is OK
2026-04-12T14:40:38.991 [DEBUG] [Thread-190727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:40:38.991 [DEBUG] [Thread-190727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:40:38.992 [DEBUG] [Thread-190727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:40:38.992 [DEBUG] [Thread-190727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:40:39.011 [INFO] [Thread-190727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:40:39.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:40:39.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:40:39.818 [DEBUG] [Thread-190727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:40:39.818 [DEBUG] [Thread-190727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:40:39.866 [DEBUG] [Thread-190727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:40:39.866 [DEBUG] [Thread-190727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:40:39.876 [DEBUG] [Thread-190727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:40:39.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:40:39.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:40:39.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:40:39.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:40:39.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:40:39.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:40:39.910 [DEBUG] [Thread-190727] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:40:39.914 [DEBUG] [Thread-190729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:40:41.609 [DEBUG] [Thread-190730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:40:56.662 [DEBUG] [Thread-190731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:41:09.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:41:09.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:41:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:41:11.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 41), 5.39706, 70.1179, 0.0, 20.9264, 15.2471, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:41:11.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:41:00
2026-04-12T14:41:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:41:11.694 [DEBUG] [Thread-190732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:41:11.775 [DEBUG] [Thread-190733] [transport.py] [_log()] starting thread (client mode): 0xb0fce920
2026-04-12T14:41:11.775 [DEBUG] [Thread-190733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:41:11.795 [DEBUG] [Thread-190733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:41:11.795 [INFO] [Thread-190733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] client lang: <none>
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] server lang: <none>
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] kex follows: False
2026-04-12T14:41:11.798 [DEBUG] [Thread-190733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:41:11.799 [DEBUG] [Thread-190733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:41:11.799 [DEBUG] [Thread-190733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:41:11.799 [DEBUG] [Thread-190733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:41:11.799 [DEBUG] [Thread-190733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:41:11.799 [DEBUG] [Thread-190733] [transport.py] [_log()] Compression: none
2026-04-12T14:41:11.799 [DEBUG] [Thread-190733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:41:11.816 [DEBUG] [Thread-190733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:41:11.817 [DEBUG] [Thread-190733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:41:11.817 [DEBUG] [Thread-190733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:41:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:41:11.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:41:11.819 [DEBUG] [Thread-190733] [transport.py] [_log()] userauth is OK
2026-04-12T14:41:11.819 [DEBUG] [Thread-190733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:41:11.819 [DEBUG] [Thread-190733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:41:11.820 [DEBUG] [Thread-190733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:41:11.820 [DEBUG] [Thread-190733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:41:11.844 [INFO] [Thread-190733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:41:11.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:41:12.428 [DEBUG] [Thread-190733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:41:12.428 [DEBUG] [Thread-190733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:41:12.429 [DEBUG] [Thread-190733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:41:12.469 [DEBUG] [Thread-190733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:41:12.469 [DEBUG] [Thread-190733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:41:12.473 [DEBUG] [Thread-190733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:41:12.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:41:12.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:41:12.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:41:12.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:41:12.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:41:12.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:41:12.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:41:12.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:41:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:41:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.528231 -999.00  +14.90  18.59     74  +10.30 1 2 1 1 1   888    0 5.41 43.91 ----- 17.2 18.6 276.4 24.4 19.4 -12.4 18.9 -11.4 18.4 -12.3 19.2 -11.9
2026-04-12T14:41:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:41:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:41:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.528231
2026-04-12T14:41:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:41:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:41:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:41:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:41:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:41:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:41:00', tmtdew=5.39706, humidity=70.1179, cloud=0.0, wind=20.9264, temperature=15.2471, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:40:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:41:12.500 [DEBUG] [Thread-190733] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:41:12.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:41:12.594 [DEBUG] [Thread-190736] [transport.py] [_log()] starting thread (client mode): 0xae536200
2026-04-12T14:41:12.594 [DEBUG] [Thread-190736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:41:12.609 [DEBUG] [Thread-190736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:41:12.609 [INFO] [Thread-190736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:12.617 [DEBUG] [Thread-190736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] client lang: <none>
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] server lang: <none>
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] kex follows: False
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] Compression: none
2026-04-12T14:41:12.618 [DEBUG] [Thread-190736] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:41:12.675 [DEBUG] [Thread-190736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:41:12.676 [DEBUG] [Thread-190736] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:41:12.676 [DEBUG] [Thread-190736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:41:12.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:41:12.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:41:12.731 [DEBUG] [Thread-190736] [transport.py] [_log()] userauth is OK
2026-04-12T14:41:12.731 [DEBUG] [Thread-190736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:41:12.732 [DEBUG] [Thread-190736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:41:12.732 [DEBUG] [Thread-190736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:41:12.732 [DEBUG] [Thread-190736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:41:12.751 [INFO] [Thread-190736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:41:12.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:41:12.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:41:13.552 [DEBUG] [Thread-190736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:41:13.552 [DEBUG] [Thread-190736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:41:13.600 [DEBUG] [Thread-190736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:41:13.600 [DEBUG] [Thread-190736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:41:13.609 [DEBUG] [Thread-190736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:41:13.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:41:13.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:41:13.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:41:13.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:41:13.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:41:13.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:41:13.648 [DEBUG] [Thread-190736] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:41:26.729 [DEBUG] [Thread-190738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:41:34.265 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:41:34.266 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:41:39.960 [DEBUG] [Thread-190739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:41:41.781 [DEBUG] [Thread-190740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:41:43.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:41:43.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:41:43.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:41:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 41, 36), 5.665, 68.9762, 0.0, 23.3237, 15.7942, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:41:44.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:41:36
2026-04-12T14:41:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:41:45.518 [DEBUG] [Thread-190741] [transport.py] [_log()] starting thread (client mode): 0xb0f6f790
2026-04-12T14:41:45.518 [DEBUG] [Thread-190741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:41:45.534 [DEBUG] [Thread-190741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:41:45.534 [INFO] [Thread-190741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] client lang: <none>
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] server lang: <none>
2026-04-12T14:41:45.535 [DEBUG] [Thread-190741] [transport.py] [_log()] kex follows: False
2026-04-12T14:41:45.536 [DEBUG] [Thread-190741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:41:45.536 [DEBUG] [Thread-190741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:41:45.536 [DEBUG] [Thread-190741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:41:45.536 [DEBUG] [Thread-190741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:41:45.536 [DEBUG] [Thread-190741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:41:45.536 [DEBUG] [Thread-190741] [transport.py] [_log()] Compression: none
2026-04-12T14:41:45.536 [DEBUG] [Thread-190741] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:41:45.543 [DEBUG] [Thread-190741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:41:45.544 [DEBUG] [Thread-190741] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:41:45.544 [DEBUG] [Thread-190741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:41:45.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:41:45.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:41:45.546 [DEBUG] [Thread-190741] [transport.py] [_log()] userauth is OK
2026-04-12T14:41:45.547 [DEBUG] [Thread-190741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:41:45.547 [DEBUG] [Thread-190741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:41:45.547 [DEBUG] [Thread-190741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:41:45.547 [DEBUG] [Thread-190741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:41:45.564 [INFO] [Thread-190741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:41:45.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:41:46.120 [DEBUG] [Thread-190741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:41:46.121 [DEBUG] [Thread-190741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:41:46.121 [DEBUG] [Thread-190741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:41:46.161 [DEBUG] [Thread-190741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:41:46.161 [DEBUG] [Thread-190741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:41:46.164 [DEBUG] [Thread-190741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:41:46.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:41:46.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:41:46.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:41:46.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:41:46.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:41:46.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:41:46.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:41:46.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:41:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:41:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.528926 -999.00  +14.90  18.51     73  +10.10 1 2 1 1 1   888    0 5.63 47.76 ----- 14.7 18.5 275.0 22.3 19.4 -14.1 19.1 -12.4 18.5 -12.0 19.2 -13.2
2026-04-12T14:41:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:41:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:41:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.528926
2026-04-12T14:41:46.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:41:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:41:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:41:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:41:46.190 [DEBUG] [Thread-190741] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:41:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:41:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:41:36', tmtdew=5.665, humidity=68.9762, cloud=0.0, wind=23.3237, temperature=15.7942, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:41:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:41:46.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:41:46.280 [DEBUG] [Thread-190744] [transport.py] [_log()] starting thread (client mode): 0xb39c7880
2026-04-12T14:41:46.280 [DEBUG] [Thread-190744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:41:46.294 [DEBUG] [Thread-190744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:41:46.295 [INFO] [Thread-190744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:41:46.302 [DEBUG] [Thread-190744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:41:46.302 [DEBUG] [Thread-190744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:41:46.302 [DEBUG] [Thread-190744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] client lang: <none>
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] server lang: <none>
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] kex follows: False
2026-04-12T14:41:46.303 [DEBUG] [Thread-190744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:41:46.304 [DEBUG] [Thread-190744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:41:46.304 [DEBUG] [Thread-190744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:41:46.304 [DEBUG] [Thread-190744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:41:46.304 [DEBUG] [Thread-190744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:41:46.304 [DEBUG] [Thread-190744] [transport.py] [_log()] Compression: none
2026-04-12T14:41:46.304 [DEBUG] [Thread-190744] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:41:46.361 [DEBUG] [Thread-190744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:41:46.361 [DEBUG] [Thread-190744] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:41:46.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:41:46.363 [DEBUG] [Thread-190744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:41:46.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:41:46.420 [DEBUG] [Thread-190744] [transport.py] [_log()] userauth is OK
2026-04-12T14:41:46.420 [DEBUG] [Thread-190744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:41:46.420 [DEBUG] [Thread-190744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:41:46.420 [DEBUG] [Thread-190744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:41:46.420 [DEBUG] [Thread-190744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:41:46.439 [INFO] [Thread-190744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:41:46.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:41:46.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:41:47.282 [DEBUG] [Thread-190744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:41:47.282 [DEBUG] [Thread-190744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:41:47.331 [DEBUG] [Thread-190744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:41:47.331 [DEBUG] [Thread-190744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:41:47.340 [DEBUG] [Thread-190744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:41:47.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:41:47.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:41:47.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:41:47.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:41:47.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:41:47.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:41:47.378 [DEBUG] [Thread-190744] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:41:56.819 [DEBUG] [Thread-190746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:42:11.880 [DEBUG] [Thread-190747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:42:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:42:17.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:42:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:42:18.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 41, 36), 5.665, 68.9762, 0.0, 23.3237, 15.7942, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:42:18.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:41:36
2026-04-12T14:42:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:42:19.234 [DEBUG] [Thread-190748] [transport.py] [_log()] starting thread (client mode): 0xb0f6e830
2026-04-12T14:42:19.234 [DEBUG] [Thread-190748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:42:19.255 [DEBUG] [Thread-190748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:42:19.255 [INFO] [Thread-190748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:42:19.258 [DEBUG] [Thread-190748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:42:19.258 [DEBUG] [Thread-190748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:42:19.258 [DEBUG] [Thread-190748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:42:19.258 [DEBUG] [Thread-190748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:19.258 [DEBUG] [Thread-190748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:19.258 [DEBUG] [Thread-190748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] client lang: <none>
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] server lang: <none>
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] kex follows: False
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] Compression: none
2026-04-12T14:42:19.259 [DEBUG] [Thread-190748] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:42:19.271 [DEBUG] [Thread-190748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:42:19.272 [DEBUG] [Thread-190748] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:42:19.272 [DEBUG] [Thread-190748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:42:19.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:42:19.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:42:19.274 [DEBUG] [Thread-190748] [transport.py] [_log()] userauth is OK
2026-04-12T14:42:19.274 [DEBUG] [Thread-190748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:42:19.274 [DEBUG] [Thread-190748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:42:19.274 [DEBUG] [Thread-190748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:42:19.274 [DEBUG] [Thread-190748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:42:19.299 [INFO] [Thread-190748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:42:19.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:42:19.904 [DEBUG] [Thread-190748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:42:19.904 [DEBUG] [Thread-190748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:42:19.904 [DEBUG] [Thread-190748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:42:19.945 [DEBUG] [Thread-190748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:42:19.945 [DEBUG] [Thread-190748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:42:19.949 [DEBUG] [Thread-190748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:42:19.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:42:19.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:42:19.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:42:19.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:42:19.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:42:19.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:42:19.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:42:19.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:42:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:42:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.529273 -999.00  +14.70  19.81     72   +9.90 1 2 1 1 1   888    0 5.55 49.32 ----- 21.6 19.8 267.8 28.9 19.3 -15.2 19.0 -12.6 18.5 -12.0 19.2 -14.1
2026-04-12T14:42:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:42:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:42:19.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.529273
2026-04-12T14:42:19.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:42:19.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:42:19.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:42:19.967 [DEBUG] [Thread-190748] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:42:19.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:42:19.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:42:19.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:41:36', tmtdew=5.665, humidity=68.9762, cloud=0.0, wind=23.3237, temperature=15.7942, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:42:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:42:20.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:42:20.056 [DEBUG] [Thread-190751] [transport.py] [_log()] starting thread (client mode): 0xb0f6d8d0
2026-04-12T14:42:20.056 [DEBUG] [Thread-190751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:42:20.071 [DEBUG] [Thread-190751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:42:20.071 [INFO] [Thread-190751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] client lang: <none>
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] server lang: <none>
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] kex follows: False
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:42:20.081 [DEBUG] [Thread-190751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:42:20.082 [DEBUG] [Thread-190751] [transport.py] [_log()] Compression: none
2026-04-12T14:42:20.082 [DEBUG] [Thread-190751] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:42:20.137 [DEBUG] [Thread-190751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:42:20.137 [DEBUG] [Thread-190751] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:42:20.138 [DEBUG] [Thread-190751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:42:20.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:42:20.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:42:20.193 [DEBUG] [Thread-190751] [transport.py] [_log()] userauth is OK
2026-04-12T14:42:20.194 [DEBUG] [Thread-190751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:42:20.194 [DEBUG] [Thread-190751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:42:20.194 [DEBUG] [Thread-190751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:42:20.194 [DEBUG] [Thread-190751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:42:20.212 [INFO] [Thread-190751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:42:20.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:42:20.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:42:21.057 [DEBUG] [Thread-190751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:42:21.057 [DEBUG] [Thread-190751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:42:21.105 [DEBUG] [Thread-190751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:42:21.105 [DEBUG] [Thread-190751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:42:21.115 [DEBUG] [Thread-190751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:42:21.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:42:21.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:42:21.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:42:21.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:42:21.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:42:21.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:42:21.152 [DEBUG] [Thread-190751] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:42:26.922 [DEBUG] [Thread-190753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:42:34.414 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:42:34.416 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:42:39.993 [DEBUG] [Thread-190754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:42:41.969 [DEBUG] [Thread-190755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:42:51.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:42:51.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:42:51.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:42:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 42, 11), 5.73008, 68.7561, 0.0, 18.6509, 15.0308, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:42:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:42:11
2026-04-12T14:42:52.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:42:53.029 [DEBUG] [Thread-190756] [transport.py] [_log()] starting thread (client mode): 0xae5b5b40
2026-04-12T14:42:53.029 [DEBUG] [Thread-190756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:42:53.049 [DEBUG] [Thread-190756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:42:53.049 [INFO] [Thread-190756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:42:53.052 [DEBUG] [Thread-190756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] client lang: <none>
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] server lang: <none>
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] kex follows: False
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] Compression: none
2026-04-12T14:42:53.053 [DEBUG] [Thread-190756] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:42:53.066 [DEBUG] [Thread-190756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:42:53.067 [DEBUG] [Thread-190756] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:42:53.067 [DEBUG] [Thread-190756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:42:53.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:42:53.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:42:53.069 [DEBUG] [Thread-190756] [transport.py] [_log()] userauth is OK
2026-04-12T14:42:53.069 [DEBUG] [Thread-190756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:42:53.069 [DEBUG] [Thread-190756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:42:53.069 [DEBUG] [Thread-190756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:42:53.070 [DEBUG] [Thread-190756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:42:53.087 [INFO] [Thread-190756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:42:53.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:42:53.671 [DEBUG] [Thread-190756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:42:53.671 [DEBUG] [Thread-190756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:42:53.672 [DEBUG] [Thread-190756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:42:53.712 [DEBUG] [Thread-190756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:42:53.712 [DEBUG] [Thread-190756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:42:53.716 [DEBUG] [Thread-190756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:42:53.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:42:53.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:42:53.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:42:53.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:42:53.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:42:53.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:42:53.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:42:53.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:42:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:42:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.529620 -999.00  +14.50  21.12     72   +9.70 1 2 1 1 1   888    0 5.52 44.71 ----- 17.6 21.1 264.4 28.0 19.4 -13.3 19.1 -12.2 18.7 -11.7 19.1 -13.2
2026-04-12T14:42:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:42:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:42:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.529620
2026-04-12T14:42:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:42:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:42:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:42:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:42:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:42:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:42:11', tmtdew=5.73008, humidity=68.7561, cloud=0.0, wind=18.6509, temperature=15.0308, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:42:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:42:53.739 [DEBUG] [Thread-190756] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:42:53.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:42:53.832 [DEBUG] [Thread-190759] [transport.py] [_log()] starting thread (client mode): 0xb0fcc970
2026-04-12T14:42:53.832 [DEBUG] [Thread-190759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:42:53.846 [DEBUG] [Thread-190759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:42:53.847 [INFO] [Thread-190759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:42:53.854 [DEBUG] [Thread-190759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:42:53.854 [DEBUG] [Thread-190759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:42:53.854 [DEBUG] [Thread-190759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] client lang: <none>
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] server lang: <none>
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] kex follows: False
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:42:53.855 [DEBUG] [Thread-190759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:42:53.856 [DEBUG] [Thread-190759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:42:53.856 [DEBUG] [Thread-190759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:42:53.856 [DEBUG] [Thread-190759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:42:53.856 [DEBUG] [Thread-190759] [transport.py] [_log()] Compression: none
2026-04-12T14:42:53.856 [DEBUG] [Thread-190759] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:42:53.917 [DEBUG] [Thread-190759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:42:53.917 [DEBUG] [Thread-190759] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:42:53.918 [DEBUG] [Thread-190759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:42:53.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:42:53.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:42:53.975 [DEBUG] [Thread-190759] [transport.py] [_log()] userauth is OK
2026-04-12T14:42:53.976 [DEBUG] [Thread-190759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:42:53.976 [DEBUG] [Thread-190759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:42:53.976 [DEBUG] [Thread-190759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:42:53.976 [DEBUG] [Thread-190759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:42:53.996 [INFO] [Thread-190759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:42:53.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:42:53.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:42:54.795 [DEBUG] [Thread-190759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:42:54.796 [DEBUG] [Thread-190759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:42:54.844 [DEBUG] [Thread-190759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:42:54.844 [DEBUG] [Thread-190759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:42:54.853 [DEBUG] [Thread-190759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:42:54.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:42:54.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:42:54.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:42:54.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:42:54.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:42:54.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:42:54.892 [DEBUG] [Thread-190759] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:42:57.007 [DEBUG] [Thread-190761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:12.056 [DEBUG] [Thread-190762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:24.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:43:24.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:43:24.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:43:26.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 42, 47), 5.6464, 69.0424, 0.0, 21.7361, 15.6947, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:43:26.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:42:47
2026-04-12T14:43:26.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:43:26.804 [DEBUG] [Thread-190763] [transport.py] [_log()] starting thread (client mode): 0xb0fcf190
2026-04-12T14:43:26.804 [DEBUG] [Thread-190763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:43:26.819 [DEBUG] [Thread-190763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:43:26.819 [INFO] [Thread-190763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:43:26.822 [DEBUG] [Thread-190763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:43:26.822 [DEBUG] [Thread-190763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:43:26.822 [DEBUG] [Thread-190763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:43:26.822 [DEBUG] [Thread-190763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:43:26.822 [DEBUG] [Thread-190763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:43:26.822 [DEBUG] [Thread-190763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] client lang: <none>
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] server lang: <none>
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] kex follows: False
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] Compression: none
2026-04-12T14:43:26.823 [DEBUG] [Thread-190763] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:43:26.840 [DEBUG] [Thread-190763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:43:26.840 [DEBUG] [Thread-190763] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:43:26.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:43:26.842 [DEBUG] [Thread-190763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:43:26.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:43:26.844 [DEBUG] [Thread-190763] [transport.py] [_log()] userauth is OK
2026-04-12T14:43:26.844 [DEBUG] [Thread-190763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:43:26.844 [DEBUG] [Thread-190763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:43:26.844 [DEBUG] [Thread-190763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:43:26.844 [DEBUG] [Thread-190763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:43:26.862 [INFO] [Thread-190763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:43:26.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:43:27.096 [DEBUG] [Thread-190765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:27.510 [DEBUG] [Thread-190763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:43:27.510 [DEBUG] [Thread-190763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:43:27.511 [DEBUG] [Thread-190763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:43:27.551 [DEBUG] [Thread-190763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:43:27.551 [DEBUG] [Thread-190763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:43:27.554 [DEBUG] [Thread-190763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:43:27.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:43:27.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:43:27.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:43:27.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:43:27.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:43:27.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:43:27.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:43:27.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:43:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:43:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.529967 -999.00  +14.50  12.18     73   +9.90 1 2 1 1 1   888    0 5.45 43.05 ----- 10.5 12.2 262.6 19.1 19.4 -13.3 19.1 -11.8 18.6 -11.1 19.2 -14.3
2026-04-12T14:43:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:43:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:43:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.529967
2026-04-12T14:43:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:43:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:43:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:43:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:43:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:43:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:42:47', tmtdew=5.6464, humidity=69.0424, cloud=0.0, wind=21.7361, temperature=15.6947, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:43:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:43:27.575 [DEBUG] [Thread-190763] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:43:27.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:43:27.667 [DEBUG] [Thread-190767] [transport.py] [_log()] starting thread (client mode): 0xb0febd90
2026-04-12T14:43:27.667 [DEBUG] [Thread-190767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:43:27.682 [DEBUG] [Thread-190767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:43:27.682 [INFO] [Thread-190767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:43:27.690 [DEBUG] [Thread-190767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:43:27.690 [DEBUG] [Thread-190767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:43:27.690 [DEBUG] [Thread-190767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:43:27.690 [DEBUG] [Thread-190767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:43:27.690 [DEBUG] [Thread-190767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] client lang: <none>
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] server lang: <none>
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] kex follows: False
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:43:27.691 [DEBUG] [Thread-190767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:43:27.692 [DEBUG] [Thread-190767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:43:27.692 [DEBUG] [Thread-190767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:43:27.692 [DEBUG] [Thread-190767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:43:27.692 [DEBUG] [Thread-190767] [transport.py] [_log()] Compression: none
2026-04-12T14:43:27.692 [DEBUG] [Thread-190767] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:43:27.747 [DEBUG] [Thread-190767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:43:27.747 [DEBUG] [Thread-190767] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:43:27.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:43:27.749 [DEBUG] [Thread-190767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:43:27.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:43:27.809 [DEBUG] [Thread-190767] [transport.py] [_log()] userauth is OK
2026-04-12T14:43:27.809 [DEBUG] [Thread-190767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:43:27.809 [DEBUG] [Thread-190767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:43:27.809 [DEBUG] [Thread-190767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:43:27.809 [DEBUG] [Thread-190767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:43:27.829 [INFO] [Thread-190767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:43:27.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:43:27.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:43:28.646 [DEBUG] [Thread-190767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:43:28.646 [DEBUG] [Thread-190767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:43:28.697 [DEBUG] [Thread-190767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:43:28.697 [DEBUG] [Thread-190767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:43:28.707 [DEBUG] [Thread-190767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:43:28.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:43:28.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:43:28.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:43:28.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:43:28.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:43:28.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:43:28.756 [DEBUG] [Thread-190767] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:43:34.557 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:34.558 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:40.029 [DEBUG] [Thread-190769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:42.136 [DEBUG] [Thread-190770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:57.200 [DEBUG] [Thread-190771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:43:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:43:58.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:43:58.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:44:00.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 43, 22), 5.60701, 69.0681, 0.0, 18.8802, 14.8805, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:44:00.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:43:22
2026-04-12T14:44:00.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:44:00.619 [DEBUG] [Thread-190772] [transport.py] [_log()] starting thread (client mode): 0xb0feb190
2026-04-12T14:44:00.619 [DEBUG] [Thread-190772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:44:00.640 [DEBUG] [Thread-190772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:44:00.640 [INFO] [Thread-190772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] client lang: <none>
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] server lang: <none>
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] kex follows: False
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] Compression: none
2026-04-12T14:44:00.644 [DEBUG] [Thread-190772] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:44:00.661 [DEBUG] [Thread-190772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:44:00.661 [DEBUG] [Thread-190772] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:44:00.662 [DEBUG] [Thread-190772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:44:00.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:44:00.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:44:00.664 [DEBUG] [Thread-190772] [transport.py] [_log()] userauth is OK
2026-04-12T14:44:00.664 [DEBUG] [Thread-190772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:44:00.664 [DEBUG] [Thread-190772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:44:00.664 [DEBUG] [Thread-190772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:44:00.665 [DEBUG] [Thread-190772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:44:00.689 [INFO] [Thread-190772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:44:00.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:44:01.301 [DEBUG] [Thread-190772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:44:01.301 [DEBUG] [Thread-190772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:44:01.301 [DEBUG] [Thread-190772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:44:01.342 [DEBUG] [Thread-190772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:44:01.342 [DEBUG] [Thread-190772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:44:01.344 [DEBUG] [Thread-190772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:44:01.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:44:01.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:44:01.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:44:01.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:44:01.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:44:01.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:44:01.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:44:01.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:44:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:44:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.530315 -999.00  +14.90  13.63     75  +10.50 1 3 1 1 1   888    0 5.61 45.23 ----- 13.9 13.6 264.4 17.8 19.6 -11.4 19.3 -10.0 19.1 -8.5 19.3 -12.9
2026-04-12T14:44:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:44:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:44:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.530315
2026-04-12T14:44:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:44:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:44:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:44:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:44:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:44:01.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:43:22', tmtdew=5.60701, humidity=69.0681, cloud=0.0, wind=18.8802, temperature=14.8805, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:43:39.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:44:01.368 [DEBUG] [Thread-190772] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:44:01.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:44:01.456 [DEBUG] [Thread-190775] [transport.py] [_log()] starting thread (client mode): 0xa796bc40
2026-04-12T14:44:01.456 [DEBUG] [Thread-190775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:44:01.471 [DEBUG] [Thread-190775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:44:01.471 [INFO] [Thread-190775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:44:01.479 [DEBUG] [Thread-190775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] client lang: <none>
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] server lang: <none>
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] kex follows: False
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] Compression: none
2026-04-12T14:44:01.480 [DEBUG] [Thread-190775] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:44:01.536 [DEBUG] [Thread-190775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:44:01.537 [DEBUG] [Thread-190775] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:44:01.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:44:01.538 [DEBUG] [Thread-190775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:44:01.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:44:01.592 [DEBUG] [Thread-190775] [transport.py] [_log()] userauth is OK
2026-04-12T14:44:01.592 [DEBUG] [Thread-190775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:44:01.592 [DEBUG] [Thread-190775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:44:01.592 [DEBUG] [Thread-190775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:44:01.592 [DEBUG] [Thread-190775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:44:01.606 [INFO] [Thread-190775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:44:01.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:44:01.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:44:02.433 [DEBUG] [Thread-190775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:44:02.433 [DEBUG] [Thread-190775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:44:02.481 [DEBUG] [Thread-190775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:44:02.481 [DEBUG] [Thread-190775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:44:02.492 [DEBUG] [Thread-190775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:44:02.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:44:02.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:44:02.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:44:02.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:44:02.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:44:02.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:44:02.532 [DEBUG] [Thread-190775] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:44:12.239 [DEBUG] [Thread-190777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:44:27.296 [DEBUG] [Thread-190778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:44:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:44:32.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:44:32.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:44:33.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 43, 58), 5.62746, 69.0212, 0.0, 18.6332, 14.9467, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:44:33.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:43:58
2026-04-12T14:44:34.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:44:34.328 [DEBUG] [Thread-190779] [transport.py] [_log()] starting thread (client mode): 0xb39c5ba0
2026-04-12T14:44:34.328 [DEBUG] [Thread-190779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:44:34.347 [DEBUG] [Thread-190779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:44:34.348 [INFO] [Thread-190779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:44:34.351 [DEBUG] [Thread-190779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:44:34.351 [DEBUG] [Thread-190779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:44:34.351 [DEBUG] [Thread-190779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:44:34.351 [DEBUG] [Thread-190779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] client lang: <none>
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] server lang: <none>
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] kex follows: False
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:44:34.352 [DEBUG] [Thread-190779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:44:34.353 [DEBUG] [Thread-190779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:44:34.353 [DEBUG] [Thread-190779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:44:34.353 [DEBUG] [Thread-190779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:44:34.353 [DEBUG] [Thread-190779] [transport.py] [_log()] Compression: none
2026-04-12T14:44:34.353 [DEBUG] [Thread-190779] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:44:34.371 [DEBUG] [Thread-190779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:44:34.371 [DEBUG] [Thread-190779] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:44:34.372 [DEBUG] [Thread-190779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:44:34.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:44:34.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:44:34.374 [DEBUG] [Thread-190779] [transport.py] [_log()] userauth is OK
2026-04-12T14:44:34.374 [DEBUG] [Thread-190779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:44:34.374 [DEBUG] [Thread-190779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:44:34.374 [DEBUG] [Thread-190779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:44:34.374 [DEBUG] [Thread-190779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:44:34.392 [INFO] [Thread-190779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:44:34.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:44:34.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:44:34.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:44:35.037 [DEBUG] [Thread-190779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:44:35.037 [DEBUG] [Thread-190779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:44:35.038 [DEBUG] [Thread-190779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:44:35.078 [DEBUG] [Thread-190779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:44:35.078 [DEBUG] [Thread-190779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:44:35.082 [DEBUG] [Thread-190779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:44:35.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:44:35.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:44:35.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:44:35.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:44:35.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:44:35.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:44:35.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:44:35.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:44:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:44:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.530662 -999.00  +15.10  15.41     72  +10.30 1 2 1 1 1   888    0 5.50 42.07 ----- 15.1 15.4 271.8 19.0 20.0 -11.5 19.5 -11.2 19.2 -10.9 19.9 -11.4
2026-04-12T14:44:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:44:35.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:44:35.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.530662
2026-04-12T14:44:35.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:44:35.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:44:35.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:44:35.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:44:35.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:44:35.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:43:58', tmtdew=5.62746, humidity=69.0212, cloud=0.0, wind=18.6332, temperature=14.9467, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:44:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:44:35.108 [DEBUG] [Thread-190779] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:44:35.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:44:35.212 [DEBUG] [Thread-190782] [transport.py] [_log()] starting thread (client mode): 0xa796b370
2026-04-12T14:44:35.212 [DEBUG] [Thread-190782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:44:35.229 [DEBUG] [Thread-190782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:44:35.229 [INFO] [Thread-190782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:44:35.236 [DEBUG] [Thread-190782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:44:35.237 [DEBUG] [Thread-190782] [transport.py] [_log()] client lang: <none>
2026-04-12T14:44:35.238 [DEBUG] [Thread-190782] [transport.py] [_log()] server lang: <none>
2026-04-12T14:44:35.238 [DEBUG] [Thread-190782] [transport.py] [_log()] kex follows: False
2026-04-12T14:44:35.238 [DEBUG] [Thread-190782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:44:35.238 [DEBUG] [Thread-190782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:44:35.238 [DEBUG] [Thread-190782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:44:35.238 [DEBUG] [Thread-190782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:44:35.238 [DEBUG] [Thread-190782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:44:35.239 [DEBUG] [Thread-190782] [transport.py] [_log()] Compression: none
2026-04-12T14:44:35.239 [DEBUG] [Thread-190782] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:44:35.296 [DEBUG] [Thread-190782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:44:35.296 [DEBUG] [Thread-190782] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:44:35.296 [DEBUG] [Thread-190782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:44:35.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:44:35.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:44:35.353 [DEBUG] [Thread-190782] [transport.py] [_log()] userauth is OK
2026-04-12T14:44:35.353 [DEBUG] [Thread-190782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:44:35.353 [DEBUG] [Thread-190782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:44:35.354 [DEBUG] [Thread-190782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:44:35.354 [DEBUG] [Thread-190782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:44:35.377 [INFO] [Thread-190782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:44:35.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:44:35.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:44:36.246 [DEBUG] [Thread-190782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:44:36.247 [DEBUG] [Thread-190782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:44:36.295 [DEBUG] [Thread-190782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:44:36.295 [DEBUG] [Thread-190782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:44:36.304 [DEBUG] [Thread-190782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:44:36.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:44:36.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:44:36.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:44:36.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:44:36.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:44:36.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:44:36.341 [DEBUG] [Thread-190782] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:44:40.074 [DEBUG] [Thread-190784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:44:42.334 [DEBUG] [Thread-190785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:44:57.392 [DEBUG] [Thread-190786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:45:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:45:06.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14: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
2026-04-12T14:45:07.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 44, 34), 5.79346, 68.4457, 0.0, 15.9149, 16.0924, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:45:07.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:44:34
2026-04-12T14:45:08.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:45:08.203 [DEBUG] [Thread-190787] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-12T14:45:08.203 [DEBUG] [Thread-190787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:45:08.223 [DEBUG] [Thread-190787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:45:08.224 [INFO] [Thread-190787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] client lang: <none>
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] server lang: <none>
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] kex follows: False
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:45:08.226 [DEBUG] [Thread-190787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:45:08.227 [DEBUG] [Thread-190787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:45:08.227 [DEBUG] [Thread-190787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:45:08.227 [DEBUG] [Thread-190787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:45:08.227 [DEBUG] [Thread-190787] [transport.py] [_log()] Compression: none
2026-04-12T14:45:08.227 [DEBUG] [Thread-190787] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:45:08.246 [DEBUG] [Thread-190787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:45:08.247 [DEBUG] [Thread-190787] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:45:08.247 [DEBUG] [Thread-190787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:45:08.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:45:08.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:45:08.249 [DEBUG] [Thread-190787] [transport.py] [_log()] userauth is OK
2026-04-12T14:45:08.249 [DEBUG] [Thread-190787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:45:08.249 [DEBUG] [Thread-190787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:45:08.249 [DEBUG] [Thread-190787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:45:08.250 [DEBUG] [Thread-190787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:45:08.272 [INFO] [Thread-190787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:45:08.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:45:08.993 [DEBUG] [Thread-190787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:45:08.993 [DEBUG] [Thread-190787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:45:08.994 [DEBUG] [Thread-190787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:45:09.035 [DEBUG] [Thread-190787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:45:09.035 [DEBUG] [Thread-190787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:45:09.038 [DEBUG] [Thread-190787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:45:09.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:45:09.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:45:09.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:45:09.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:45:09.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:45:09.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:45:09.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:45:09.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:45:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:45:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.531009 -999.00  +15.10  12.40     71  +10.00 1 2 1 1 1   888    0 5.65 47.04 ----- 15.6 12.4 274.8 18.5 20.2 -11.2 19.7 -10.4 19.6 -11.0 20.2 -10.9
2026-04-12T14:45:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:45:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:45:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.531009
2026-04-12T14:45:09.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:45:09.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:45:09.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:45:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:45:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:45:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:44:34', tmtdew=5.79346, humidity=68.4457, cloud=0.0, wind=15.9149, temperature=16.0924, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:44:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:45:09.061 [DEBUG] [Thread-190787] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:45:09.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:45:09.154 [DEBUG] [Thread-190790] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-12T14:45:09.154 [DEBUG] [Thread-190790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:45:09.168 [DEBUG] [Thread-190790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:45:09.168 [INFO] [Thread-190790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] client lang: <none>
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] server lang: <none>
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] kex follows: False
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:45:09.176 [DEBUG] [Thread-190790] [transport.py] [_log()] Compression: none
2026-04-12T14:45:09.177 [DEBUG] [Thread-190790] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:45:09.233 [DEBUG] [Thread-190790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:45:09.234 [DEBUG] [Thread-190790] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:45:09.234 [DEBUG] [Thread-190790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:45:09.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:45:09.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:45:09.289 [DEBUG] [Thread-190790] [transport.py] [_log()] userauth is OK
2026-04-12T14:45:09.290 [DEBUG] [Thread-190790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:45:09.290 [DEBUG] [Thread-190790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:45:09.290 [DEBUG] [Thread-190790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:45:09.290 [DEBUG] [Thread-190790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:45:09.308 [INFO] [Thread-190790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:45:09.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:45:09.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:45:10.095 [DEBUG] [Thread-190790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:45:10.095 [DEBUG] [Thread-190790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:45:10.143 [DEBUG] [Thread-190790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:45:10.143 [DEBUG] [Thread-190790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:45:10.152 [DEBUG] [Thread-190790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:45:10.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:45:10.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:45:10.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:45:10.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:45:10.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:45:10.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:45:10.187 [DEBUG] [Thread-190790] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:45:12.425 [DEBUG] [Thread-190792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:45:27.474 [DEBUG] [Thread-190793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:45:34.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:45:34.867 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:45:40.106 [DEBUG] [Thread-190794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:45:40.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:45:40.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:45:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:45:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 45, 9), 5.93066, 67.6428, 0.0, 16.5157, 15.1787, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:45:41.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:45:09
2026-04-12T14:45:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:45:42.102 [DEBUG] [Thread-190795] [transport.py] [_log()] starting thread (client mode): 0xa796b940
2026-04-12T14:45:42.102 [DEBUG] [Thread-190795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:45:42.122 [DEBUG] [Thread-190795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:45:42.122 [INFO] [Thread-190795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:45:42.125 [DEBUG] [Thread-190795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] client lang: <none>
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] server lang: <none>
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] kex follows: False
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] Compression: none
2026-04-12T14:45:42.126 [DEBUG] [Thread-190795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:45:42.144 [DEBUG] [Thread-190795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:45:42.144 [DEBUG] [Thread-190795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:45:42.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:45:42.146 [DEBUG] [Thread-190795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:45:42.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:45:42.148 [DEBUG] [Thread-190795] [transport.py] [_log()] userauth is OK
2026-04-12T14:45:42.148 [DEBUG] [Thread-190795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:45:42.148 [DEBUG] [Thread-190795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:45:42.148 [DEBUG] [Thread-190795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:45:42.148 [DEBUG] [Thread-190795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:45:42.173 [INFO] [Thread-190795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:45:42.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:45:42.510 [DEBUG] [Thread-190797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:45:42.810 [DEBUG] [Thread-190795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:45:42.810 [DEBUG] [Thread-190795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:45:42.811 [DEBUG] [Thread-190795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:45:42.851 [DEBUG] [Thread-190795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:45:42.852 [DEBUG] [Thread-190795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:45:42.855 [DEBUG] [Thread-190795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:45:42.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:45:42.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:45:42.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:45:42.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:45:42.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:45:42.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:45:42.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:45:42.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:45:42.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:45:42.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.531356 -999.00  +14.70  14.45     71   +9.50 1 2 1 1 1   888    0 6.04 57.71 ----- 16.3 14.4 269.8 20.2 20.4 -12.5 19.8 -10.6 19.6 -11.2 20.6 -10.1
2026-04-12T14:45:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:45:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:45:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.531356
2026-04-12T14:45:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:45:42.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:45:42.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:45:42.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:45:42.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:45:42.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:45:09', tmtdew=5.93066, humidity=67.6428, cloud=0.0, wind=16.5157, temperature=15.1787, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:45:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:45:42.883 [DEBUG] [Thread-190795] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:45:42.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:45:42.977 [DEBUG] [Thread-190799] [transport.py] [_log()] starting thread (client mode): 0xb0f43ee0
2026-04-12T14:45:42.978 [DEBUG] [Thread-190799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:45:42.991 [DEBUG] [Thread-190799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:45:42.991 [INFO] [Thread-190799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:45:42.999 [DEBUG] [Thread-190799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:45:42.999 [DEBUG] [Thread-190799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:45:42.999 [DEBUG] [Thread-190799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:45:42.999 [DEBUG] [Thread-190799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:42.999 [DEBUG] [Thread-190799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:45:42.999 [DEBUG] [Thread-190799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] client lang: <none>
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] server lang: <none>
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] kex follows: False
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:45:43.000 [DEBUG] [Thread-190799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:45:43.001 [DEBUG] [Thread-190799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:45:43.001 [DEBUG] [Thread-190799] [transport.py] [_log()] Compression: none
2026-04-12T14:45:43.001 [DEBUG] [Thread-190799] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:45:43.060 [DEBUG] [Thread-190799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:45:43.060 [DEBUG] [Thread-190799] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:45:43.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:45:43.062 [DEBUG] [Thread-190799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:45:43.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:45:43.119 [DEBUG] [Thread-190799] [transport.py] [_log()] userauth is OK
2026-04-12T14:45:43.119 [DEBUG] [Thread-190799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:45:43.120 [DEBUG] [Thread-190799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:45:43.120 [DEBUG] [Thread-190799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:45:43.120 [DEBUG] [Thread-190799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:45:43.138 [INFO] [Thread-190799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:45:43.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:45:43.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:45:43.954 [DEBUG] [Thread-190799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:45:43.954 [DEBUG] [Thread-190799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:45:44.002 [DEBUG] [Thread-190799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:45:44.003 [DEBUG] [Thread-190799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:45:44.012 [DEBUG] [Thread-190799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:45:44.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:45: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')
2026-04-12T14:45:44.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:45:44.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:45:44.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:45:44.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:45:44.050 [DEBUG] [Thread-190799] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:45:57.545 [DEBUG] [Thread-190801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:46:12.603 [DEBUG] [Thread-190802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:46:14.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:46:14.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:46:14.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:46:15.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 45, 45), 6.56113, 65.0653, 0.0, 19.0195, 16.3248, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:46:15.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:45:45
2026-04-12T14:46:15.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:46:16.023 [DEBUG] [Thread-190803] [transport.py] [_log()] starting thread (client mode): 0xb0f6ddb0
2026-04-12T14:46:16.024 [DEBUG] [Thread-190803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:46:16.044 [DEBUG] [Thread-190803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:46:16.045 [INFO] [Thread-190803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:46:16.047 [DEBUG] [Thread-190803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:46:16.047 [DEBUG] [Thread-190803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:46:16.047 [DEBUG] [Thread-190803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:46:16.047 [DEBUG] [Thread-190803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:16.047 [DEBUG] [Thread-190803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] client lang: <none>
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] server lang: <none>
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] kex follows: False
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:46:16.048 [DEBUG] [Thread-190803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:46:16.049 [DEBUG] [Thread-190803] [transport.py] [_log()] Compression: none
2026-04-12T14:46:16.049 [DEBUG] [Thread-190803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:46:16.067 [DEBUG] [Thread-190803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:46:16.067 [DEBUG] [Thread-190803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:46:16.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:46:16.069 [DEBUG] [Thread-190803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:46:16.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:46:16.071 [DEBUG] [Thread-190803] [transport.py] [_log()] userauth is OK
2026-04-12T14:46:16.071 [DEBUG] [Thread-190803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:46:16.071 [DEBUG] [Thread-190803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:46:16.072 [DEBUG] [Thread-190803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:46:16.072 [DEBUG] [Thread-190803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:46:16.109 [INFO] [Thread-190803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:46:16.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:46:16.792 [DEBUG] [Thread-190803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:46:16.792 [DEBUG] [Thread-190803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:46:16.793 [DEBUG] [Thread-190803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:46:16.833 [DEBUG] [Thread-190803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:46:16.834 [DEBUG] [Thread-190803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:46:16.837 [DEBUG] [Thread-190803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:46:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:46:16.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:46:16.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:46:16.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:46:16.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:46:16.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:46:16.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:46:16.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:46:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:46:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.531704 -999.00  +15.10  15.49     74  +10.50 1 3 1 1 1   888    0 5.91 52.60 ----- 14.0 15.5 272.4 21.0 20.7 -11.2 20.0 -10.2 20.0 -9.1 20.9 -10.7
2026-04-12T14:46:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:46:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:46:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.531704
2026-04-12T14:46:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:46:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:46:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:46:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:46:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:46:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:45:45', tmtdew=6.56113, humidity=65.0653, cloud=0.0, wind=19.0195, temperature=16.3248, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:45:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:46:16.858 [DEBUG] [Thread-190803] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:46:16.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:46:16.958 [DEBUG] [Thread-190806] [transport.py] [_log()] starting thread (client mode): 0xb0fce920
2026-04-12T14:46:16.958 [DEBUG] [Thread-190806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:46:16.973 [DEBUG] [Thread-190806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:46:16.973 [INFO] [Thread-190806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] client lang: <none>
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] server lang: <none>
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] kex follows: False
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:46:16.982 [DEBUG] [Thread-190806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:46:16.983 [DEBUG] [Thread-190806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:46:16.983 [DEBUG] [Thread-190806] [transport.py] [_log()] Compression: none
2026-04-12T14:46:16.983 [DEBUG] [Thread-190806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:46:17.040 [DEBUG] [Thread-190806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:46:17.040 [DEBUG] [Thread-190806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:46:17.041 [DEBUG] [Thread-190806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:46:17.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:46:17.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:46:17.099 [DEBUG] [Thread-190806] [transport.py] [_log()] userauth is OK
2026-04-12T14:46:17.100 [DEBUG] [Thread-190806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:46:17.100 [DEBUG] [Thread-190806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:46:17.100 [DEBUG] [Thread-190806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:46:17.100 [DEBUG] [Thread-190806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:46:17.119 [INFO] [Thread-190806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:46:17.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:46:17.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:46:17.936 [DEBUG] [Thread-190806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:46:17.937 [DEBUG] [Thread-190806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:46:17.986 [DEBUG] [Thread-190806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:46:17.987 [DEBUG] [Thread-190806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:46:17.995 [DEBUG] [Thread-190806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:46:18.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:46: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')
2026-04-12T14:46: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
2026-04-12T14:46:18.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:46:18.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:46:18.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:46:18.033 [DEBUG] [Thread-190806] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:46:27.640 [DEBUG] [Thread-190808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:46:35.023 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:46:35.024 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:46:40.153 [DEBUG] [Thread-190809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:46:42.696 [DEBUG] [Thread-190810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:46:48.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:46:48.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:46:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:46:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 46, 20), 5.93271, 67.5161, 0.0, 15.2456, 15.5793, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:46:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:46:20
2026-04-12T14:46:49.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:46:49.861 [DEBUG] [Thread-190811] [transport.py] [_log()] starting thread (client mode): 0xae50a140
2026-04-12T14:46:49.861 [DEBUG] [Thread-190811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:46:49.882 [DEBUG] [Thread-190811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:46:49.882 [INFO] [Thread-190811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:46:49.885 [DEBUG] [Thread-190811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] client lang: <none>
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] server lang: <none>
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] kex follows: False
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] Compression: none
2026-04-12T14:46:49.886 [DEBUG] [Thread-190811] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:46:49.904 [DEBUG] [Thread-190811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:46:49.904 [DEBUG] [Thread-190811] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:46:49.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:46:49.905 [DEBUG] [Thread-190811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:46:49.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:46:49.908 [DEBUG] [Thread-190811] [transport.py] [_log()] userauth is OK
2026-04-12T14:46:49.908 [DEBUG] [Thread-190811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:46:49.908 [DEBUG] [Thread-190811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:46:49.908 [DEBUG] [Thread-190811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:46:49.908 [DEBUG] [Thread-190811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:46:49.932 [INFO] [Thread-190811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:46:49.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:46:50.578 [DEBUG] [Thread-190811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:46:50.578 [DEBUG] [Thread-190811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:46:50.579 [DEBUG] [Thread-190811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:46:50.619 [DEBUG] [Thread-190811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:46:50.619 [DEBUG] [Thread-190811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:46:50.623 [DEBUG] [Thread-190811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:46:50.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:46:50.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:46:50.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:46:50.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:46:50.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:46:50.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:46:50.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:46:50.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:46:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:46:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.532398 -999.00  +15.30  16.86     70   +9.90 1 2 1 1 1   888    0 5.91 55.92 ----- 22.3 16.9 264.4 21.5 20.9 -12.6 20.1 -11.6 20.0 -16.1 21.2 -14.3
2026-04-12T14:46:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:46:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:46:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.532398
2026-04-12T14:46:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:46:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:46:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:46:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:46:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:46:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:46:20', tmtdew=5.93271, humidity=67.5161, cloud=0.0, wind=15.2456, temperature=15.5793, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:46:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:46:50.652 [DEBUG] [Thread-190811] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:46:50.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:46:50.746 [DEBUG] [Thread-190814] [transport.py] [_log()] starting thread (client mode): 0xae50af50
2026-04-12T14:46:50.746 [DEBUG] [Thread-190814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:46:50.761 [DEBUG] [Thread-190814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:46:50.761 [INFO] [Thread-190814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:46:50.769 [DEBUG] [Thread-190814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:46:50.770 [DEBUG] [Thread-190814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:46:50.770 [DEBUG] [Thread-190814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:46:50.770 [DEBUG] [Thread-190814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:50.770 [DEBUG] [Thread-190814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:46:50.770 [DEBUG] [Thread-190814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:50.770 [DEBUG] [Thread-190814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:46:50.770 [DEBUG] [Thread-190814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] client lang: <none>
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] server lang: <none>
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] kex follows: False
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:46:50.771 [DEBUG] [Thread-190814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:46:50.772 [DEBUG] [Thread-190814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:46:50.772 [DEBUG] [Thread-190814] [transport.py] [_log()] Compression: none
2026-04-12T14:46:50.772 [DEBUG] [Thread-190814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:46:50.828 [DEBUG] [Thread-190814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:46:50.829 [DEBUG] [Thread-190814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:46:50.830 [DEBUG] [Thread-190814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:46:50.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:46:50.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:46:50.895 [DEBUG] [Thread-190814] [transport.py] [_log()] userauth is OK
2026-04-12T14:46:50.896 [DEBUG] [Thread-190814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:46:50.896 [DEBUG] [Thread-190814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:46:50.896 [DEBUG] [Thread-190814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:46:50.896 [DEBUG] [Thread-190814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:46:50.918 [INFO] [Thread-190814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:46:50.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:46:50.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:46:51.744 [DEBUG] [Thread-190814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:46:51.744 [DEBUG] [Thread-190814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:46:51.792 [DEBUG] [Thread-190814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:46:51.792 [DEBUG] [Thread-190814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:46:51.801 [DEBUG] [Thread-190814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:46:51.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:46:51.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:46:51.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:46:51.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:46:51.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:46:51.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:46:51.846 [DEBUG] [Thread-190814] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:46:57.733 [DEBUG] [Thread-190816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:12.783 [DEBUG] [Thread-190817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:21.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:47:21.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:47:21.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:47:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 46, 56), 6.14787, 66.6127, 0.0, 19.0559, 15.4958, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:47:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:46:56
2026-04-12T14:47:23.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:47:23.688 [DEBUG] [Thread-190818] [transport.py] [_log()] starting thread (client mode): 0xae517e20
2026-04-12T14:47:23.688 [DEBUG] [Thread-190818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:47:23.710 [DEBUG] [Thread-190818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:47:23.710 [INFO] [Thread-190818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:47:23.714 [DEBUG] [Thread-190818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] client lang: <none>
2026-04-12T14:47:23.715 [DEBUG] [Thread-190818] [transport.py] [_log()] server lang: <none>
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] kex follows: False
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] Compression: none
2026-04-12T14:47:23.716 [DEBUG] [Thread-190818] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:47:23.733 [DEBUG] [Thread-190818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:47:23.733 [DEBUG] [Thread-190818] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:47:23.734 [DEBUG] [Thread-190818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:47:23.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:47:23.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:47:23.736 [DEBUG] [Thread-190818] [transport.py] [_log()] userauth is OK
2026-04-12T14:47:23.737 [DEBUG] [Thread-190818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:47:23.737 [DEBUG] [Thread-190818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:47:23.737 [DEBUG] [Thread-190818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:47:23.737 [DEBUG] [Thread-190818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:47:23.761 [INFO] [Thread-190818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:47:23.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:47:24.440 [DEBUG] [Thread-190818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:47:24.440 [DEBUG] [Thread-190818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:47:24.440 [DEBUG] [Thread-190818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:47:24.481 [DEBUG] [Thread-190818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:47:24.481 [DEBUG] [Thread-190818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:47:24.485 [DEBUG] [Thread-190818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:47:24.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:47:24.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:47:24.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:47:24.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:47:24.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:47:24.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:47:24.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:47:24.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:47:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:47:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.532745 -999.00  +15.10  17.21     69   +9.60 1 2 1 1 1   888    0 6.08 58.08 ----- 17.5 17.2 277.5 24.3 20.7 -14.2 20.0 -11.8 19.8 -11.7 21.1 -15.6
2026-04-12T14:47:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:47:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:47:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.532745
2026-04-12T14:47:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:47:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:47:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:47:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:47:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:47:24.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:46:56', tmtdew=6.14787, humidity=66.6127, cloud=0.0, wind=19.0559, temperature=15.4958, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:47:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:47:24.513 [DEBUG] [Thread-190818] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:47:24.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:47:24.609 [DEBUG] [Thread-190821] [transport.py] [_log()] starting thread (client mode): 0xa7968cd0
2026-04-12T14:47:24.609 [DEBUG] [Thread-190821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:47:24.624 [DEBUG] [Thread-190821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:47:24.624 [INFO] [Thread-190821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:47:24.632 [DEBUG] [Thread-190821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:47:24.632 [DEBUG] [Thread-190821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:47:24.633 [DEBUG] [Thread-190821] [transport.py] [_log()] client lang: <none>
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] server lang: <none>
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] kex follows: False
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] Compression: none
2026-04-12T14:47:24.634 [DEBUG] [Thread-190821] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:47:24.689 [DEBUG] [Thread-190821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:47:24.690 [DEBUG] [Thread-190821] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:47:24.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:47:24.691 [DEBUG] [Thread-190821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:47:24.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:47:24.745 [DEBUG] [Thread-190821] [transport.py] [_log()] userauth is OK
2026-04-12T14:47:24.746 [DEBUG] [Thread-190821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:47:24.746 [DEBUG] [Thread-190821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:47:24.746 [DEBUG] [Thread-190821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:47:24.746 [DEBUG] [Thread-190821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:47:24.768 [INFO] [Thread-190821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:47:24.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:47:24.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:47:25.599 [DEBUG] [Thread-190821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:47:25.600 [DEBUG] [Thread-190821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:47:25.648 [DEBUG] [Thread-190821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:47:25.648 [DEBUG] [Thread-190821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:47:25.657 [DEBUG] [Thread-190821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:47:25.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:47:25.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:47:25.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:47:25.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:47:25.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:47:25.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:47:25.694 [DEBUG] [Thread-190821] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:47:27.818 [DEBUG] [Thread-190823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:35.172 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:35.174 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:40.210 [DEBUG] [Thread-190824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:42.881 [DEBUG] [Thread-190825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:47:55.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:47:55.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:47:57.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 47, 31), 6.26075, 66.1157, 0.0, 17.9269, 15.4961, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:47:57.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:47:31
2026-04-12T14:47:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:47:57.609 [DEBUG] [Thread-190826] [transport.py] [_log()] starting thread (client mode): 0xae50a200
2026-04-12T14:47:57.609 [DEBUG] [Thread-190826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:47:57.629 [DEBUG] [Thread-190826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:47:57.630 [INFO] [Thread-190826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] client lang: <none>
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] server lang: <none>
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] kex follows: False
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:47:57.633 [DEBUG] [Thread-190826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:47:57.634 [DEBUG] [Thread-190826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:47:57.634 [DEBUG] [Thread-190826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:47:57.634 [DEBUG] [Thread-190826] [transport.py] [_log()] Compression: none
2026-04-12T14:47:57.634 [DEBUG] [Thread-190826] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:47:57.652 [DEBUG] [Thread-190826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:47:57.653 [DEBUG] [Thread-190826] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:47:57.653 [DEBUG] [Thread-190826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:47:57.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:47:57.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:47:57.654 [DEBUG] [Thread-190826] [transport.py] [_log()] userauth is OK
2026-04-12T14:47:57.654 [DEBUG] [Thread-190826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:47:57.654 [DEBUG] [Thread-190826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:47:57.654 [DEBUG] [Thread-190826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:47:57.654 [DEBUG] [Thread-190826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:47:57.681 [INFO] [Thread-190826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:47:57.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:47:57.917 [DEBUG] [Thread-190828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:47:58.279 [DEBUG] [Thread-190826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:47:58.279 [DEBUG] [Thread-190826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:47:58.280 [DEBUG] [Thread-190826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:47:58.320 [DEBUG] [Thread-190826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:47:58.320 [DEBUG] [Thread-190826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:47:58.324 [DEBUG] [Thread-190826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:47:58.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:47:58.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:47:58.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:47:58.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:47:58.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:47:58.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:47:58.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:47:58.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:47:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:47:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.533092 -999.00  +14.70  18.37     69   +9.30 1 2 1 1 1   888    0 6.29 62.68 ----- 17.9 18.4 275.8 22.5 20.7 -13.5 20.0 -11.9 19.8 -11.7 21.0 -13.5
2026-04-12T14:47:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:47:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:47:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.533092
2026-04-12T14:47:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:47:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:47:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:47:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:47:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:47:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:47:31', tmtdew=6.26075, humidity=66.1157, cloud=0.0, wind=17.9269, temperature=15.4961, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:47:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:47:58.351 [DEBUG] [Thread-190826] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:47:58.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:47:58.447 [DEBUG] [Thread-190830] [transport.py] [_log()] starting thread (client mode): 0xae509b40
2026-04-12T14:47:58.447 [DEBUG] [Thread-190830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:47:58.462 [DEBUG] [Thread-190830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:47:58.462 [INFO] [Thread-190830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:47:58.470 [DEBUG] [Thread-190830] [transport.py] [_log()] client lang: <none>
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] server lang: <none>
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] kex follows: False
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] Compression: none
2026-04-12T14:47:58.471 [DEBUG] [Thread-190830] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:47:58.531 [DEBUG] [Thread-190830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:47:58.532 [DEBUG] [Thread-190830] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:47:58.532 [DEBUG] [Thread-190830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:47:58.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:47:58.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:47:58.590 [DEBUG] [Thread-190830] [transport.py] [_log()] userauth is OK
2026-04-12T14:47:58.590 [DEBUG] [Thread-190830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:47:58.591 [DEBUG] [Thread-190830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:47:58.591 [DEBUG] [Thread-190830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:47:58.591 [DEBUG] [Thread-190830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:47:58.609 [INFO] [Thread-190830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:47:58.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:47:58.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:47:59.418 [DEBUG] [Thread-190830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:47:59.418 [DEBUG] [Thread-190830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:47:59.466 [DEBUG] [Thread-190830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:47:59.466 [DEBUG] [Thread-190830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:47:59.476 [DEBUG] [Thread-190830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:47:59.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:47:59.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:47:59.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:47:59.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:47:59.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:47:59.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:47:59.513 [DEBUG] [Thread-190830] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:48:12.955 [DEBUG] [Thread-190832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:48:28.006 [DEBUG] [Thread-190833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:48:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:48:29.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:48:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:48:30.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 48, 7), 6.27675, 66.0493, 0.0, 16.4099, 15.5125, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:48:30.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:48:07
2026-04-12T14:48:31.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:48:31.376 [DEBUG] [Thread-190834] [transport.py] [_log()] starting thread (client mode): 0xb0f550c0
2026-04-12T14:48:31.377 [DEBUG] [Thread-190834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:48:31.396 [DEBUG] [Thread-190834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:48:31.396 [INFO] [Thread-190834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:48:31.399 [DEBUG] [Thread-190834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:48:31.399 [DEBUG] [Thread-190834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:48:31.399 [DEBUG] [Thread-190834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:48:31.399 [DEBUG] [Thread-190834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] client lang: <none>
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] server lang: <none>
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] kex follows: False
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] Compression: none
2026-04-12T14:48:31.400 [DEBUG] [Thread-190834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:48:31.409 [DEBUG] [Thread-190834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:48:31.410 [DEBUG] [Thread-190834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:48:31.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:48:31.411 [DEBUG] [Thread-190834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:48:31.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:48:31.412 [DEBUG] [Thread-190834] [transport.py] [_log()] userauth is OK
2026-04-12T14:48:31.412 [DEBUG] [Thread-190834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:48:31.412 [DEBUG] [Thread-190834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:48:31.412 [DEBUG] [Thread-190834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:48:31.412 [DEBUG] [Thread-190834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:48:31.423 [INFO] [Thread-190834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:48:31.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:48:32.060 [DEBUG] [Thread-190834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:48:32.060 [DEBUG] [Thread-190834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:48:32.061 [DEBUG] [Thread-190834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:48:32.101 [DEBUG] [Thread-190834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:48:32.102 [DEBUG] [Thread-190834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:48:32.105 [DEBUG] [Thread-190834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:48:32.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:48:32.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:48:32.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:48:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:48:32.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:48:32.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:48:32.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:48:32.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:48:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:48:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.533440 -999.00  +14.70  11.87     72   +9.70 1 2 1 1 1   888    0 6.28 62.92 ----- 10.1 11.9 296.6 18.0 20.8 -12.5 20.1 -11.0 20.0 -10.5 21.0 -12.7
2026-04-12T14:48:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:48:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:48:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.533440
2026-04-12T14:48:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:48:32.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:48:32.130 [DEBUG] [Thread-190834] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:48:32.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:48:32.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:48:32.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:48:32.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:48:07', tmtdew=6.27675, humidity=66.0493, cloud=0.0, wind=16.4099, temperature=15.5125, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:48:09.216', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:48:32.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:48:32.223 [DEBUG] [Thread-190837] [transport.py] [_log()] starting thread (client mode): 0xb39c7250
2026-04-12T14:48:32.223 [DEBUG] [Thread-190837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:48:32.238 [DEBUG] [Thread-190837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:48:32.238 [INFO] [Thread-190837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] client lang: <none>
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] server lang: <none>
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] kex follows: False
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:48:32.246 [DEBUG] [Thread-190837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:48:32.247 [DEBUG] [Thread-190837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:48:32.247 [DEBUG] [Thread-190837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:48:32.247 [DEBUG] [Thread-190837] [transport.py] [_log()] Compression: none
2026-04-12T14:48:32.247 [DEBUG] [Thread-190837] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:48:32.307 [DEBUG] [Thread-190837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:48:32.308 [DEBUG] [Thread-190837] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:48:32.308 [DEBUG] [Thread-190837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:48:32.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:48:32.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:48:32.366 [DEBUG] [Thread-190837] [transport.py] [_log()] userauth is OK
2026-04-12T14:48:32.367 [DEBUG] [Thread-190837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:48:32.367 [DEBUG] [Thread-190837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:48:32.367 [DEBUG] [Thread-190837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:48:32.367 [DEBUG] [Thread-190837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:48:32.386 [INFO] [Thread-190837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:48:32.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:48:32.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:48:33.201 [DEBUG] [Thread-190837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:48:33.202 [DEBUG] [Thread-190837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:48:33.250 [DEBUG] [Thread-190837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:48:33.250 [DEBUG] [Thread-190837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:48:33.259 [DEBUG] [Thread-190837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:48:33.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:48:33.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:48:33.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:48:33.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:48:33.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:48:33.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:48:33.296 [DEBUG] [Thread-190837] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:48:35.315 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:48:35.316 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:48:40.257 [DEBUG] [Thread-190839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:48:43.042 [DEBUG] [Thread-190840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:48:58.085 [DEBUG] [Thread-190841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:49:03.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:49:03.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:49:03.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:49:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 48, 42), 6.68139, 64.5351, 29.3, 18.6667, 16.2919, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:49:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:48:42
2026-04-12T14:49:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:49:05.122 [DEBUG] [Thread-190842] [transport.py] [_log()] starting thread (client mode): 0xae5088b0
2026-04-12T14:49:05.122 [DEBUG] [Thread-190842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:49:05.145 [DEBUG] [Thread-190842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:49:05.146 [INFO] [Thread-190842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:49:05.148 [DEBUG] [Thread-190842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] client lang: <none>
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] server lang: <none>
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] kex follows: False
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] Compression: none
2026-04-12T14:49:05.149 [DEBUG] [Thread-190842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:49:05.166 [DEBUG] [Thread-190842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:49:05.167 [DEBUG] [Thread-190842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:49:05.167 [DEBUG] [Thread-190842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:49:05.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:49:05.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:49:05.170 [DEBUG] [Thread-190842] [transport.py] [_log()] userauth is OK
2026-04-12T14:49:05.170 [DEBUG] [Thread-190842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:49:05.170 [DEBUG] [Thread-190842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:49:05.170 [DEBUG] [Thread-190842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:49:05.170 [DEBUG] [Thread-190842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:49:05.194 [INFO] [Thread-190842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:49:05.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:49:05.838 [DEBUG] [Thread-190842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:49:05.838 [DEBUG] [Thread-190842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:49:05.839 [DEBUG] [Thread-190842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:49:05.879 [DEBUG] [Thread-190842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:49:05.879 [DEBUG] [Thread-190842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:49:05.882 [DEBUG] [Thread-190842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:49:05.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:49:05.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:49:05.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:49:05.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:49:05.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:49:05.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:49:05.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:49:05.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:49:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:49:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.533787 -999.00  +14.90  16.43     71   +9.70 1 2 1 1 1   888    0 6.49 67.73 ----- 15.4 16.4 276.4 24.8 20.7 -13.6 20.0 -12.1 19.9 -10.6 21.1 -13.6
2026-04-12T14:49:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:49:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:49:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.533787
2026-04-12T14:49:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:49:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:49:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:49:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:49:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:49:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:48:42', tmtdew=6.68139, humidity=64.5351, cloud=29.3, wind=18.6667, temperature=16.2919, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:48:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:49:05.912 [DEBUG] [Thread-190842] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:49:05.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:49:06.005 [DEBUG] [Thread-190845] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-12T14:49:06.005 [DEBUG] [Thread-190845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:49:06.020 [DEBUG] [Thread-190845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:49:06.020 [INFO] [Thread-190845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] client lang: <none>
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] server lang: <none>
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] kex follows: False
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:49:06.028 [DEBUG] [Thread-190845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:49:06.029 [DEBUG] [Thread-190845] [transport.py] [_log()] Compression: none
2026-04-12T14:49:06.029 [DEBUG] [Thread-190845] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:49:06.089 [DEBUG] [Thread-190845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:49:06.090 [DEBUG] [Thread-190845] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:49:06.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:49:06.091 [DEBUG] [Thread-190845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:49:06.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:49:06.148 [DEBUG] [Thread-190845] [transport.py] [_log()] userauth is OK
2026-04-12T14:49:06.148 [DEBUG] [Thread-190845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:49:06.148 [DEBUG] [Thread-190845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:49:06.148 [DEBUG] [Thread-190845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:49:06.148 [DEBUG] [Thread-190845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:49:06.167 [INFO] [Thread-190845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:49:06.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:49:06.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:49:06.958 [DEBUG] [Thread-190845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:49:06.959 [DEBUG] [Thread-190845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:49:07.006 [DEBUG] [Thread-190845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:49:07.006 [DEBUG] [Thread-190845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:49:07.016 [DEBUG] [Thread-190845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:49:07.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:49:07.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:49:07.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:49:07.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:49:07.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:49:07.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:49:07.053 [DEBUG] [Thread-190845] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:49:13.121 [DEBUG] [Thread-190847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:49:28.209 [DEBUG] [Thread-190848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:49:35.461 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:49:35.462 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:49:37.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:49:37.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:49:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:49:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 49, 17), 6.43383, 65.3367, 29.3, 17.2228, 15.3634, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:49:38.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:49:17
2026-04-12T14:49:38.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:49:38.873 [DEBUG] [Thread-190849] [transport.py] [_log()] starting thread (client mode): 0xb0feb0d0
2026-04-12T14:49:38.874 [DEBUG] [Thread-190849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:49:38.894 [DEBUG] [Thread-190849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:49:38.894 [INFO] [Thread-190849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:49:38.897 [DEBUG] [Thread-190849] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:49:38.897 [DEBUG] [Thread-190849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] client lang: <none>
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] server lang: <none>
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] kex follows: False
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:49:38.898 [DEBUG] [Thread-190849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:49:38.899 [DEBUG] [Thread-190849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:49:38.899 [DEBUG] [Thread-190849] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:49:38.899 [DEBUG] [Thread-190849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:49:38.899 [DEBUG] [Thread-190849] [transport.py] [_log()] Compression: none
2026-04-12T14:49:38.899 [DEBUG] [Thread-190849] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:49:38.908 [DEBUG] [Thread-190849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:49:38.909 [DEBUG] [Thread-190849] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:49:38.909 [DEBUG] [Thread-190849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:49:38.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:49:38.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:49:38.911 [DEBUG] [Thread-190849] [transport.py] [_log()] userauth is OK
2026-04-12T14:49:38.912 [DEBUG] [Thread-190849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:49:38.912 [DEBUG] [Thread-190849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:49:38.912 [DEBUG] [Thread-190849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:49:38.912 [DEBUG] [Thread-190849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:49:38.947 [INFO] [Thread-190849] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:49:38.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:49:39.603 [DEBUG] [Thread-190849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:49:39.603 [DEBUG] [Thread-190849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:49:39.603 [DEBUG] [Thread-190849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:49:39.644 [DEBUG] [Thread-190849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:49:39.644 [DEBUG] [Thread-190849] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:49:39.648 [DEBUG] [Thread-190849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:49:39.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:49:39.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:49:39.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:49:39.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:49:39.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:49:39.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:49:39.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:49:39.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:49:39.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:49:39.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.534134 -999.00  +14.80  14.29     70   +9.50 1 2 1 1 1   888    0 6.34 65.06 ----- 14.1 14.3 263.2 17.8 20.8 -13.1 20.1 -11.5 20.1 -11.5 20.9 -13.3
2026-04-12T14:49:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:49:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:49:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.534134
2026-04-12T14:49:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:49:39.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:49:39.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:49:39.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:49:39.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:49:39.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:49:17', tmtdew=6.43383, humidity=65.3367, cloud=29.3, wind=17.2228, temperature=15.3634, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:49:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:49:39.678 [DEBUG] [Thread-190849] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:49:39.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:49:39.783 [DEBUG] [Thread-190852] [transport.py] [_log()] starting thread (client mode): 0xb0feb8e0
2026-04-12T14:49:39.783 [DEBUG] [Thread-190852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:49:39.798 [DEBUG] [Thread-190852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:49:39.798 [INFO] [Thread-190852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] client lang: <none>
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] server lang: <none>
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] kex follows: False
2026-04-12T14:49:39.806 [DEBUG] [Thread-190852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:49:39.807 [DEBUG] [Thread-190852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:49:39.807 [DEBUG] [Thread-190852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:49:39.807 [DEBUG] [Thread-190852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:49:39.807 [DEBUG] [Thread-190852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:49:39.807 [DEBUG] [Thread-190852] [transport.py] [_log()] Compression: none
2026-04-12T14:49:39.807 [DEBUG] [Thread-190852] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:49:39.868 [DEBUG] [Thread-190852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:49:39.869 [DEBUG] [Thread-190852] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:49:39.869 [DEBUG] [Thread-190852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:49:39.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:49:39.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:49:39.931 [DEBUG] [Thread-190852] [transport.py] [_log()] userauth is OK
2026-04-12T14:49:39.931 [DEBUG] [Thread-190852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:49:39.931 [DEBUG] [Thread-190852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:49:39.931 [DEBUG] [Thread-190852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:49:39.932 [DEBUG] [Thread-190852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:49:39.952 [INFO] [Thread-190852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:49:39.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:49:39.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:49:40.308 [DEBUG] [Thread-190854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:49:40.748 [DEBUG] [Thread-190852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:49:40.748 [DEBUG] [Thread-190852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:49:40.796 [DEBUG] [Thread-190852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:49:40.796 [DEBUG] [Thread-190852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:49:40.805 [DEBUG] [Thread-190852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:49:40.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:49:40.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:49:40.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:49:40.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:49:40.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:49:40.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:49:40.840 [DEBUG] [Thread-190852] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:49:43.245 [DEBUG] [Thread-190855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:49:58.309 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:50:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:50:10.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:50:10.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:50:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 49, 53), 6.24781, 66.4243, 29.3, 17.7494, 16.2254, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:50:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:49:53
2026-04-12T14:50:12.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:50:12.708 [DEBUG] [Thread-190857] [transport.py] [_log()] starting thread (client mode): 0xb0fce380
2026-04-12T14:50:12.708 [DEBUG] [Thread-190857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:50:12.728 [DEBUG] [Thread-190857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:50:12.728 [INFO] [Thread-190857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:12.732 [DEBUG] [Thread-190857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] client lang: <none>
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] server lang: <none>
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] kex follows: False
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] Compression: none
2026-04-12T14:50:12.733 [DEBUG] [Thread-190857] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:50:12.752 [DEBUG] [Thread-190857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:50:12.753 [DEBUG] [Thread-190857] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:50:12.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:50:12.754 [DEBUG] [Thread-190857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:50:12.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:50:12.756 [DEBUG] [Thread-190857] [transport.py] [_log()] userauth is OK
2026-04-12T14:50:12.756 [DEBUG] [Thread-190857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:50:12.756 [DEBUG] [Thread-190857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:50:12.756 [DEBUG] [Thread-190857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:50:12.757 [DEBUG] [Thread-190857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:50:12.780 [INFO] [Thread-190857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:50:12.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:50:13.347 [DEBUG] [Thread-190859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:50:13.563 [DEBUG] [Thread-190857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:50:13.563 [DEBUG] [Thread-190857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:50:13.563 [DEBUG] [Thread-190857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:50:13.604 [DEBUG] [Thread-190857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:50:13.604 [DEBUG] [Thread-190857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:50:13.608 [DEBUG] [Thread-190857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:50:13.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:50:13.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:50:13.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:50:13.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:50:13.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:50:13.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:50:13.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:50:13.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:50:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:50:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.534481 -999.00  +14.80  14.31     69   +9.30 1 2 1 1 1   888    0 6.49 66.71 ----- 10.9 14.3 276.4 19.8 20.7 -14.2 20.1 -12.3 19.7 -10.8 20.9 -13.3
2026-04-12T14:50:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:50:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:50:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.534481
2026-04-12T14:50:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:50:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:50:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:50:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:50:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:50:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:49:53', tmtdew=6.24781, humidity=66.4243, cloud=29.3, wind=17.7494, temperature=16.2254, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:49:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:50:13.667 [DEBUG] [Thread-190857] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:50:13.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:50:13.762 [DEBUG] [Thread-190861] [transport.py] [_log()] starting thread (client mode): 0xb0fcf850
2026-04-12T14:50:13.763 [DEBUG] [Thread-190861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:50:13.777 [DEBUG] [Thread-190861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:50:13.777 [INFO] [Thread-190861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:50:13.785 [DEBUG] [Thread-190861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:50:13.785 [DEBUG] [Thread-190861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:50:13.785 [DEBUG] [Thread-190861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:50:13.785 [DEBUG] [Thread-190861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:13.785 [DEBUG] [Thread-190861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:13.785 [DEBUG] [Thread-190861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:13.785 [DEBUG] [Thread-190861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] client lang: <none>
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] server lang: <none>
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] kex follows: False
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] Compression: none
2026-04-12T14:50:13.786 [DEBUG] [Thread-190861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:50:13.846 [DEBUG] [Thread-190861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:50:13.847 [DEBUG] [Thread-190861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:50:13.847 [DEBUG] [Thread-190861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:50:13.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:50:13.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:50:13.905 [DEBUG] [Thread-190861] [transport.py] [_log()] userauth is OK
2026-04-12T14:50:13.906 [DEBUG] [Thread-190861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:50:13.906 [DEBUG] [Thread-190861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:50:13.906 [DEBUG] [Thread-190861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:50:13.906 [DEBUG] [Thread-190861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:50:13.929 [INFO] [Thread-190861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:50:13.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:50:13.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:50:14.725 [DEBUG] [Thread-190861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:50:14.725 [DEBUG] [Thread-190861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:50:14.773 [DEBUG] [Thread-190861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:50:14.773 [DEBUG] [Thread-190861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:50:14.783 [DEBUG] [Thread-190861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:50:14.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:50:14.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:50:14.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:50:14.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:50:14.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:50:14.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:50:14.820 [DEBUG] [Thread-190861] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:50:28.384 [DEBUG] [Thread-190863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:50:35.602 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:50:35.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:50:40.342 [DEBUG] [Thread-190864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:50:43.439 [DEBUG] [Thread-190865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:50:44.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:50:44.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:50:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:50:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 50, 28), 6.3319, 66.016, 29.3, 17.2397, 15.2126, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:50:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:50:28
2026-04-12T14:50:46.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:50:46.711 [DEBUG] [Thread-190866] [transport.py] [_log()] starting thread (client mode): 0xae50bdc0
2026-04-12T14:50:46.711 [DEBUG] [Thread-190866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:50:46.731 [DEBUG] [Thread-190866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:50:46.732 [INFO] [Thread-190866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:50:46.734 [DEBUG] [Thread-190866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] client lang: <none>
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] server lang: <none>
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] kex follows: False
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:50:46.735 [DEBUG] [Thread-190866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:50:46.736 [DEBUG] [Thread-190866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:50:46.736 [DEBUG] [Thread-190866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:50:46.736 [DEBUG] [Thread-190866] [transport.py] [_log()] Compression: none
2026-04-12T14:50:46.736 [DEBUG] [Thread-190866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:50:46.754 [DEBUG] [Thread-190866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:50:46.754 [DEBUG] [Thread-190866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:50:46.755 [DEBUG] [Thread-190866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:50:46.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:50:46.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:50:46.797 [DEBUG] [Thread-190866] [transport.py] [_log()] userauth is OK
2026-04-12T14:50:46.797 [DEBUG] [Thread-190866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:50:46.798 [DEBUG] [Thread-190866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:50:46.798 [DEBUG] [Thread-190866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:50:46.798 [DEBUG] [Thread-190866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:50:46.818 [INFO] [Thread-190866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:50:46.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:50:47.451 [DEBUG] [Thread-190866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:50:47.452 [DEBUG] [Thread-190866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:50:47.452 [DEBUG] [Thread-190866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:50:47.493 [DEBUG] [Thread-190866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:50:47.494 [DEBUG] [Thread-190866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:50:47.497 [DEBUG] [Thread-190866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:50:47.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:50:47.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:50:47.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:50:47.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:50:47.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:50:47.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:50:47.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:50:47.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:50:47.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:50:47.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.534828 -999.00  +14.80   8.94     71   +9.70 1 2 1 1 1   888    0 6.61 71.32 ----- 11.1 8.9 270.1 14.3 20.7 -13.6 20.1 -12.2 19.9 -10.7 20.9 -11.6
2026-04-12T14:50:47.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:50:47.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:50:47.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.534828
2026-04-12T14:50:47.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:50:47.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:50:47.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:50:47.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:50:47.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:50:47.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:50:28', tmtdew=6.3319, humidity=66.016, cloud=29.3, wind=17.2397, temperature=15.2126, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:50:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:50:47.524 [DEBUG] [Thread-190866] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:50:47.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:50:47.621 [DEBUG] [Thread-190869] [transport.py] [_log()] starting thread (client mode): 0xae508040
2026-04-12T14:50:47.621 [DEBUG] [Thread-190869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:50:47.635 [DEBUG] [Thread-190869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:50:47.635 [INFO] [Thread-190869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:50:47.643 [DEBUG] [Thread-190869] [transport.py] [_log()] client lang: <none>
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] server lang: <none>
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] kex follows: False
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] Compression: none
2026-04-12T14:50:47.644 [DEBUG] [Thread-190869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:50:47.706 [DEBUG] [Thread-190869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:50:47.707 [DEBUG] [Thread-190869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:50:47.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:50:47.708 [DEBUG] [Thread-190869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:50:47.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:50:47.769 [DEBUG] [Thread-190869] [transport.py] [_log()] userauth is OK
2026-04-12T14:50:47.769 [DEBUG] [Thread-190869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:50:47.769 [DEBUG] [Thread-190869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:50:47.769 [DEBUG] [Thread-190869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:50:47.769 [DEBUG] [Thread-190869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:50:47.789 [INFO] [Thread-190869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:50:47.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:50:47.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:50:48.618 [DEBUG] [Thread-190869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:50:48.618 [DEBUG] [Thread-190869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:50:48.666 [DEBUG] [Thread-190869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:50:48.666 [DEBUG] [Thread-190869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:50:48.676 [DEBUG] [Thread-190869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:50:48.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:50:48.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:50:48.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:50:48.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:50:48.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:50:48.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:50:48.718 [DEBUG] [Thread-190869] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:50:58.477 [DEBUG] [Thread-190871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:51:13.650 [DEBUG] [Thread-190872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:51:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:51:18.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:51:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:51:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 51, 4), 6.43933, 65.5354, 29.3, 16.5694, 15.1463, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:51:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:51:04
2026-04-12T14:51:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:51:20.564 [DEBUG] [Thread-190873] [transport.py] [_log()] starting thread (client mode): 0xb0fe9f30
2026-04-12T14:51:20.564 [DEBUG] [Thread-190873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:51:20.584 [DEBUG] [Thread-190873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:51:20.584 [INFO] [Thread-190873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] client lang: <none>
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] server lang: <none>
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] kex follows: False
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] Compression: none
2026-04-12T14:51:20.587 [DEBUG] [Thread-190873] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:51:20.595 [DEBUG] [Thread-190873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:51:20.596 [DEBUG] [Thread-190873] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:51:20.596 [DEBUG] [Thread-190873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:51:20.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:51:20.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:51:20.598 [DEBUG] [Thread-190873] [transport.py] [_log()] userauth is OK
2026-04-12T14:51:20.598 [DEBUG] [Thread-190873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:51:20.598 [DEBUG] [Thread-190873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:51:20.598 [DEBUG] [Thread-190873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:51:20.598 [DEBUG] [Thread-190873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:51:20.622 [INFO] [Thread-190873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:51:20.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:51:21.276 [DEBUG] [Thread-190873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:51:21.277 [DEBUG] [Thread-190873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:51:21.277 [DEBUG] [Thread-190873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:51:21.317 [DEBUG] [Thread-190873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:51:21.317 [DEBUG] [Thread-190873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:51:21.321 [DEBUG] [Thread-190873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:51:21.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:51:21.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:51:21.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:51:21.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:51:21.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:51:21.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:51:21.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:51:21.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:51:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:51:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.535176 -999.00  +14.90  17.37     71   +9.60 1 2 1 1 1   888    0 7.05 83.32 ----- 13.8 17.4 271.0 18.9 20.6 -14.1 20.0 -12.5 19.6 -10.9 20.8 -12.8
2026-04-12T14:51:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:51:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:51:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.535176
2026-04-12T14:51:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:51:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:51:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:51:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:51:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:51:21.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:51:04', tmtdew=6.43933, humidity=65.5354, cloud=29.3, wind=16.5694, temperature=15.1463, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:50:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:51:21.345 [DEBUG] [Thread-190873] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:51:21.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:51:21.438 [DEBUG] [Thread-190876] [transport.py] [_log()] starting thread (client mode): 0xb0feb880
2026-04-12T14:51:21.438 [DEBUG] [Thread-190876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:51:21.453 [DEBUG] [Thread-190876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:51:21.453 [INFO] [Thread-190876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:51:21.461 [DEBUG] [Thread-190876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:51:21.461 [DEBUG] [Thread-190876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] client lang: <none>
2026-04-12T14:51:21.462 [DEBUG] [Thread-190876] [transport.py] [_log()] server lang: <none>
2026-04-12T14:51:21.463 [DEBUG] [Thread-190876] [transport.py] [_log()] kex follows: False
2026-04-12T14:51:21.463 [DEBUG] [Thread-190876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:51:21.463 [DEBUG] [Thread-190876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:51:21.463 [DEBUG] [Thread-190876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:51:21.463 [DEBUG] [Thread-190876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:51:21.463 [DEBUG] [Thread-190876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:51:21.463 [DEBUG] [Thread-190876] [transport.py] [_log()] Compression: none
2026-04-12T14:51:21.464 [DEBUG] [Thread-190876] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:51:21.522 [DEBUG] [Thread-190876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:51:21.522 [DEBUG] [Thread-190876] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:51:21.523 [DEBUG] [Thread-190876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:51:21.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:51:21.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:51:21.581 [DEBUG] [Thread-190876] [transport.py] [_log()] userauth is OK
2026-04-12T14:51:21.581 [DEBUG] [Thread-190876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:51:21.581 [DEBUG] [Thread-190876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:51:21.581 [DEBUG] [Thread-190876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:51:21.581 [DEBUG] [Thread-190876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:51:21.605 [INFO] [Thread-190876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:51:21.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:51:21.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:51:22.427 [DEBUG] [Thread-190876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:51:22.427 [DEBUG] [Thread-190876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:51:22.474 [DEBUG] [Thread-190876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:51:22.474 [DEBUG] [Thread-190876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:51:22.483 [DEBUG] [Thread-190876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:51:22.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:51:22.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:51:22.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:51:22.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:51:22.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:51:22.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:51:22.520 [DEBUG] [Thread-190876] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:51:28.686 [DEBUG] [Thread-190878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:51:35.757 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:51:35.759 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:51:40.376 [DEBUG] [Thread-190879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:51:43.737 [DEBUG] [Thread-190880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:51:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:51:52.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:51:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:51:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 51, 39), 6.87883, 63.5735, 29.3, 13.3747, 15.7943, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:51:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:51:39
2026-04-12T14:51:54.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:51:54.388 [DEBUG] [Thread-190881] [transport.py] [_log()] starting thread (client mode): 0xae5b7d30
2026-04-12T14:51:54.388 [DEBUG] [Thread-190881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:51:54.408 [DEBUG] [Thread-190881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:51:54.408 [INFO] [Thread-190881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] client lang: <none>
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] server lang: <none>
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] kex follows: False
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] Compression: none
2026-04-12T14:51:54.411 [DEBUG] [Thread-190881] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:51:54.430 [DEBUG] [Thread-190881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:51:54.431 [DEBUG] [Thread-190881] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:51:54.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:51:54.432 [DEBUG] [Thread-190881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:51:54.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:51:54.434 [DEBUG] [Thread-190881] [transport.py] [_log()] userauth is OK
2026-04-12T14:51:54.434 [DEBUG] [Thread-190881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:51:54.434 [DEBUG] [Thread-190881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:51:54.434 [DEBUG] [Thread-190881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:51:54.434 [DEBUG] [Thread-190881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:51:54.459 [INFO] [Thread-190881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:51:54.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:51:55.094 [DEBUG] [Thread-190881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:51:55.094 [DEBUG] [Thread-190881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:51:55.095 [DEBUG] [Thread-190881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:51:55.135 [DEBUG] [Thread-190881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:51:55.135 [DEBUG] [Thread-190881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:51:55.138 [DEBUG] [Thread-190881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:51:55.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:51:55.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:51:55.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:51:55.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:51:55.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:51:55.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:51:55.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:51:55.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:51:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:51:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.535870 -999.00  +15.10  13.76     73  +10.50 1 2 1 1 1   888    0 6.75 74.64 ----- 20.8 13.8 261.4 25.6 20.6 -13.6 20.1 -12.1 19.8 -10.2 20.6 -12.1
2026-04-12T14:51:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:51:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:51:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.535870
2026-04-12T14:51:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:51:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:51:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:51:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:51:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:51:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:51:39', tmtdew=6.87883, humidity=63.5735, cloud=29.3, wind=13.3747, temperature=15.7943, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:51:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:51:55.164 [DEBUG] [Thread-190881] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:51:55.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:51:55.260 [DEBUG] [Thread-190884] [transport.py] [_log()] starting thread (client mode): 0xb39c6740
2026-04-12T14:51:55.260 [DEBUG] [Thread-190884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:51:55.280 [DEBUG] [Thread-190884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:51:55.280 [INFO] [Thread-190884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:51:55.291 [DEBUG] [Thread-190884] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:51:55.291 [DEBUG] [Thread-190884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:51:55.291 [DEBUG] [Thread-190884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:51:55.291 [DEBUG] [Thread-190884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:55.291 [DEBUG] [Thread-190884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] client lang: <none>
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] server lang: <none>
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] kex follows: False
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] Compression: none
2026-04-12T14:51:55.292 [DEBUG] [Thread-190884] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:51:55.349 [DEBUG] [Thread-190884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:51:55.349 [DEBUG] [Thread-190884] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:51:55.350 [DEBUG] [Thread-190884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:51:55.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:51:55.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:51:55.406 [DEBUG] [Thread-190884] [transport.py] [_log()] userauth is OK
2026-04-12T14:51:55.407 [DEBUG] [Thread-190884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:51:55.407 [DEBUG] [Thread-190884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:51:55.407 [DEBUG] [Thread-190884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:51:55.407 [DEBUG] [Thread-190884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:51:55.425 [INFO] [Thread-190884] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:51:55.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:51:55.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:51:56.241 [DEBUG] [Thread-190884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:51:56.241 [DEBUG] [Thread-190884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:51:56.289 [DEBUG] [Thread-190884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:51:56.289 [DEBUG] [Thread-190884] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:51:56.299 [DEBUG] [Thread-190884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:51:56.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:51:56.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:51:56.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:51:56.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:51:56.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:51:56.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:51:56.338 [DEBUG] [Thread-190884] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:51:58.775 [DEBUG] [Thread-190886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:52:13.828 [DEBUG] [Thread-190887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:52:26.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:52:26.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:52:26.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:52:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 52, 14), 5.97476, 67.4303, 29.3, 21.5806, 15.3474, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:52:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:52:14
2026-04-12T14:52:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:52:28.178 [DEBUG] [Thread-190888] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-12T14:52:28.178 [DEBUG] [Thread-190888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:52:28.200 [DEBUG] [Thread-190888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:52:28.200 [INFO] [Thread-190888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] client lang: <none>
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] server lang: <none>
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] kex follows: False
2026-04-12T14:52:28.204 [DEBUG] [Thread-190888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:52:28.205 [DEBUG] [Thread-190888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:52:28.205 [DEBUG] [Thread-190888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:52:28.205 [DEBUG] [Thread-190888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:52:28.205 [DEBUG] [Thread-190888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:52:28.205 [DEBUG] [Thread-190888] [transport.py] [_log()] Compression: none
2026-04-12T14:52:28.205 [DEBUG] [Thread-190888] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:52:28.223 [DEBUG] [Thread-190888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:52:28.223 [DEBUG] [Thread-190888] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:52:28.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:52:28.224 [DEBUG] [Thread-190888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:52:28.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:52:28.226 [DEBUG] [Thread-190888] [transport.py] [_log()] userauth is OK
2026-04-12T14:52:28.226 [DEBUG] [Thread-190888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:52:28.226 [DEBUG] [Thread-190888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:52:28.226 [DEBUG] [Thread-190888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:52:28.226 [DEBUG] [Thread-190888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:52:28.240 [INFO] [Thread-190888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:52:28.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:52:28.867 [DEBUG] [Thread-190890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:52:28.887 [DEBUG] [Thread-190888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:52:28.887 [DEBUG] [Thread-190888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:52:28.888 [DEBUG] [Thread-190888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:52:28.928 [DEBUG] [Thread-190888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:52:28.928 [DEBUG] [Thread-190888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:52:28.932 [DEBUG] [Thread-190888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:52:28.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:52:28.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:52:28.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:52:28.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:52:28.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:52:28.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:52:28.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:52:28.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:52:28.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:52:28.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.536217 -999.00  +15.10  25.96     72  +10.10 1 2 1 1 1   888    0 6.76 74.48 ----- 22.1 26.0 271.0 28.9 20.5 -13.4 20.0 -12.5 19.6 -10.3 20.7 -11.3
2026-04-12T14:52:28.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:52:28.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:52:28.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.536217
2026-04-12T14:52:28.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:52:28.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:52:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:52:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:52:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:52:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:52:14', tmtdew=5.97476, humidity=67.4303, cloud=29.3, wind=21.5806, temperature=15.3474, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:52:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:52:28.959 [DEBUG] [Thread-190888] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:52:29.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:52:29.052 [DEBUG] [Thread-190892] [transport.py] [_log()] starting thread (client mode): 0xb0f55e40
2026-04-12T14:52:29.052 [DEBUG] [Thread-190892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:52:29.068 [DEBUG] [Thread-190892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:52:29.068 [INFO] [Thread-190892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] client lang: <none>
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] server lang: <none>
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] kex follows: False
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:52:29.075 [DEBUG] [Thread-190892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:52:29.076 [DEBUG] [Thread-190892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:52:29.076 [DEBUG] [Thread-190892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:52:29.076 [DEBUG] [Thread-190892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:52:29.076 [DEBUG] [Thread-190892] [transport.py] [_log()] Compression: none
2026-04-12T14:52:29.076 [DEBUG] [Thread-190892] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:52:29.135 [DEBUG] [Thread-190892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:52:29.135 [DEBUG] [Thread-190892] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:52:29.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:52:29.137 [DEBUG] [Thread-190892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:52:29.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:52:29.191 [DEBUG] [Thread-190892] [transport.py] [_log()] userauth is OK
2026-04-12T14:52:29.191 [DEBUG] [Thread-190892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:52:29.191 [DEBUG] [Thread-190892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:52:29.192 [DEBUG] [Thread-190892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:52:29.192 [DEBUG] [Thread-190892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:52:29.223 [INFO] [Thread-190892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:52:29.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:52:29.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:52:30.061 [DEBUG] [Thread-190892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:52:30.061 [DEBUG] [Thread-190892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:52:30.109 [DEBUG] [Thread-190892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:52:30.110 [DEBUG] [Thread-190892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:52:30.119 [DEBUG] [Thread-190892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:52:30.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:52:30.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:52:30.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:52:30.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:52:30.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:52:30.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:52:30.158 [DEBUG] [Thread-190892] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:52:35.901 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:52:35.902 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:52:40.414 [DEBUG] [Thread-190894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:52:43.907 [DEBUG] [Thread-190895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:52:58.960 [DEBUG] [Thread-190896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:53:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:53:00.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:53:00.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:53:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 52, 50), 5.7978, 68.4458, 29.3, 22.7592, 16.1919, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:53:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:52:50
2026-04-12T14:53:01.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:53:02.025 [DEBUG] [Thread-190897] [transport.py] [_log()] starting thread (client mode): 0xae536ef0
2026-04-12T14:53:02.025 [DEBUG] [Thread-190897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:53:02.043 [DEBUG] [Thread-190897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:53:02.043 [INFO] [Thread-190897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:53:02.046 [DEBUG] [Thread-190897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] client lang: <none>
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] server lang: <none>
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] kex follows: False
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] Compression: none
2026-04-12T14:53:02.047 [DEBUG] [Thread-190897] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:53:02.063 [DEBUG] [Thread-190897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:53:02.064 [DEBUG] [Thread-190897] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:53:02.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:53:02.065 [DEBUG] [Thread-190897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:53:02.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:53:02.067 [DEBUG] [Thread-190897] [transport.py] [_log()] userauth is OK
2026-04-12T14:53:02.067 [DEBUG] [Thread-190897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:53:02.067 [DEBUG] [Thread-190897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:53:02.067 [DEBUG] [Thread-190897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:53:02.067 [DEBUG] [Thread-190897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:53:02.091 [INFO] [Thread-190897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:53:02.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:53:02.695 [DEBUG] [Thread-190897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:53:02.695 [DEBUG] [Thread-190897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:53:02.696 [DEBUG] [Thread-190897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:53:02.737 [DEBUG] [Thread-190897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:53:02.738 [DEBUG] [Thread-190897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:53:02.741 [DEBUG] [Thread-190897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:53:02.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:53:02.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:53:02.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:53:02.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:53:02.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:53:02.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:53:02.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:53:02.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:53:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:53:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.536565 -999.00  +14.90  14.23     73  +10.10 1 2 1 1 1   888    0 6.71 68.37 ----- 20.2 14.2 272.2 21.9 20.6 -12.3 20.2 -11.4 20.0 -9.2 20.6 -11.9
2026-04-12T14:53:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:53:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:53:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.536565
2026-04-12T14:53:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:53:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:53:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:53:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:53:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:53:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:52:50', tmtdew=5.7978, humidity=68.4458, cloud=29.3, wind=22.7592, temperature=16.1919, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:52:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:53:02.761 [DEBUG] [Thread-190897] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:53:02.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:53:02.851 [DEBUG] [Thread-190900] [transport.py] [_log()] starting thread (client mode): 0xae5371c0
2026-04-12T14:53:02.851 [DEBUG] [Thread-190900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:53:02.867 [DEBUG] [Thread-190900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:53:02.868 [INFO] [Thread-190900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:53:02.877 [DEBUG] [Thread-190900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:53:02.877 [DEBUG] [Thread-190900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:53:02.877 [DEBUG] [Thread-190900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:53:02.877 [DEBUG] [Thread-190900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] client lang: <none>
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] server lang: <none>
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] kex follows: False
2026-04-12T14:53:02.878 [DEBUG] [Thread-190900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:53:02.879 [DEBUG] [Thread-190900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:53:02.879 [DEBUG] [Thread-190900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:53:02.879 [DEBUG] [Thread-190900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:53:02.879 [DEBUG] [Thread-190900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:53:02.879 [DEBUG] [Thread-190900] [transport.py] [_log()] Compression: none
2026-04-12T14:53:02.879 [DEBUG] [Thread-190900] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:53:02.938 [DEBUG] [Thread-190900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:53:02.938 [DEBUG] [Thread-190900] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:53:02.939 [DEBUG] [Thread-190900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:53:02.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:53:02.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:53:02.995 [DEBUG] [Thread-190900] [transport.py] [_log()] userauth is OK
2026-04-12T14:53:02.996 [DEBUG] [Thread-190900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:53:02.996 [DEBUG] [Thread-190900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:53:02.996 [DEBUG] [Thread-190900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:53:02.996 [DEBUG] [Thread-190900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:53:03.015 [INFO] [Thread-190900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:53:03.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:53:03.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:53:03.852 [DEBUG] [Thread-190900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:53:03.852 [DEBUG] [Thread-190900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:53:03.900 [DEBUG] [Thread-190900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:53:03.900 [DEBUG] [Thread-190900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:53:03.910 [DEBUG] [Thread-190900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:53:03.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:53:03.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:53:03.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:53:03.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:53:03.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:53:03.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:53:03.948 [DEBUG] [Thread-190900] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:53:14.000 [DEBUG] [Thread-190902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:53:29.054 [DEBUG] [Thread-190903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:53:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:53:33.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:53:33.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:53:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 53, 26), 5.96789, 67.2285, 29.3, 16.6745, 15.5128, 0, 0, 0, 0, 0, 0),)
2026-04-12T14:53:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:53:26
2026-04-12T14:53:35.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:53:35.731 [DEBUG] [Thread-190904] [transport.py] [_log()] starting thread (client mode): 0xae50a5f0
2026-04-12T14:53:35.731 [DEBUG] [Thread-190904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:53:35.753 [DEBUG] [Thread-190904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:53:35.753 [INFO] [Thread-190904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] client lang: <none>
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] server lang: <none>
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] kex follows: False
2026-04-12T14:53:35.755 [DEBUG] [Thread-190904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:53:35.756 [DEBUG] [Thread-190904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:53:35.756 [DEBUG] [Thread-190904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:53:35.756 [DEBUG] [Thread-190904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:53:35.756 [DEBUG] [Thread-190904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:53:35.756 [DEBUG] [Thread-190904] [transport.py] [_log()] Compression: none
2026-04-12T14:53:35.756 [DEBUG] [Thread-190904] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:53:35.768 [DEBUG] [Thread-190904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:53:35.768 [DEBUG] [Thread-190904] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:53:35.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:53:35.770 [DEBUG] [Thread-190904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:53:35.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:53:35.772 [DEBUG] [Thread-190904] [transport.py] [_log()] userauth is OK
2026-04-12T14:53:35.772 [DEBUG] [Thread-190904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:53:35.772 [DEBUG] [Thread-190904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:53:35.773 [DEBUG] [Thread-190904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:53:35.773 [DEBUG] [Thread-190904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:53:35.807 [INFO] [Thread-190904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:53:35.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:53:36.044 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:53:36.045 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:53:36.446 [DEBUG] [Thread-190904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:53:36.446 [DEBUG] [Thread-190904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:53:36.446 [DEBUG] [Thread-190904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:53:36.487 [DEBUG] [Thread-190904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:53:36.487 [DEBUG] [Thread-190904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:53:36.491 [DEBUG] [Thread-190904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:53:36.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:53:36.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:53:36.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:53:36.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:53:36.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:53:36.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:53:36.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:53:36.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:53:36.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:53:36.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.536912 -999.00  +14.70  16.89     72   +9.90 1 2 1 1 1   888    0 6.50 64.30 ----- 17.3 16.9 265.8 20.1 20.8 -12.2 20.2 -12.1 20.0 -9.4 20.8 -11.5
2026-04-12T14:53:36.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:53:36.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:53:36.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.536912
2026-04-12T14:53:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:53:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:53:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:53:36.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:53:36.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:53:36.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:53:26', tmtdew=5.96789, humidity=67.2285, cloud=29.3, wind=16.6745, temperature=15.5128, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:53:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:53:36.518 [DEBUG] [Thread-190904] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:53:36.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:53:36.611 [DEBUG] [Thread-190907] [transport.py] [_log()] starting thread (client mode): 0xb0febfd0
2026-04-12T14:53:36.611 [DEBUG] [Thread-190907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:53:36.627 [DEBUG] [Thread-190907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:53:36.628 [INFO] [Thread-190907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:53:36.635 [DEBUG] [Thread-190907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:53:36.636 [DEBUG] [Thread-190907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:53:36.636 [DEBUG] [Thread-190907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:53:36.636 [DEBUG] [Thread-190907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:36.636 [DEBUG] [Thread-190907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:53:36.636 [DEBUG] [Thread-190907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:36.636 [DEBUG] [Thread-190907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:53:36.636 [DEBUG] [Thread-190907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] client lang: <none>
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] server lang: <none>
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] kex follows: False
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:53:36.637 [DEBUG] [Thread-190907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:53:36.638 [DEBUG] [Thread-190907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:53:36.638 [DEBUG] [Thread-190907] [transport.py] [_log()] Compression: none
2026-04-12T14:53:36.638 [DEBUG] [Thread-190907] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:53:36.696 [DEBUG] [Thread-190907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:53:36.696 [DEBUG] [Thread-190907] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:53:36.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:53:36.698 [DEBUG] [Thread-190907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:53:36.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:53:36.752 [DEBUG] [Thread-190907] [transport.py] [_log()] userauth is OK
2026-04-12T14:53:36.753 [DEBUG] [Thread-190907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:53:36.753 [DEBUG] [Thread-190907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:53:36.753 [DEBUG] [Thread-190907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:53:36.753 [DEBUG] [Thread-190907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:53:36.772 [INFO] [Thread-190907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:53:36.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:53:36.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:53:37.583 [DEBUG] [Thread-190907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:53:37.583 [DEBUG] [Thread-190907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:53:37.632 [DEBUG] [Thread-190907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:53:37.632 [DEBUG] [Thread-190907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:53:37.641 [DEBUG] [Thread-190907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:53:37.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:53:37.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:53:37.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:53:37.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:53:37.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:53:37.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:53:37.677 [DEBUG] [Thread-190907] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:53:40.461 [DEBUG] [Thread-190909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:53:44.090 [DEBUG] [Thread-190910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:53:59.147 [DEBUG] [Thread-190911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:54:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:54:07.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:54:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:54:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 54, 1), 5.96944, 67.2285, 0.0, 15.4573, 15.5459, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:54:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:54:01
2026-04-12T14:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:54:09.503 [DEBUG] [Thread-190912] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa30
2026-04-12T14:54:09.503 [DEBUG] [Thread-190912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:54:09.524 [DEBUG] [Thread-190912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:54:09.524 [INFO] [Thread-190912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:54:09.527 [DEBUG] [Thread-190912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:54:09.527 [DEBUG] [Thread-190912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:54:09.527 [DEBUG] [Thread-190912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:54:09.527 [DEBUG] [Thread-190912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:09.527 [DEBUG] [Thread-190912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] client lang: <none>
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] server lang: <none>
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] kex follows: False
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:54:09.528 [DEBUG] [Thread-190912] [transport.py] [_log()] Compression: none
2026-04-12T14:54:09.529 [DEBUG] [Thread-190912] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:54:09.549 [DEBUG] [Thread-190912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:54:09.550 [DEBUG] [Thread-190912] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:54:09.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:54:09.551 [DEBUG] [Thread-190912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:54:09.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:54:09.592 [DEBUG] [Thread-190912] [transport.py] [_log()] userauth is OK
2026-04-12T14:54:09.593 [DEBUG] [Thread-190912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:54:09.593 [DEBUG] [Thread-190912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:54:09.593 [DEBUG] [Thread-190912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:54:09.593 [DEBUG] [Thread-190912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:54:09.619 [INFO] [Thread-190912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:54:09.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:54:10.220 [DEBUG] [Thread-190912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:54:10.221 [DEBUG] [Thread-190912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:54:10.221 [DEBUG] [Thread-190912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:54:10.262 [DEBUG] [Thread-190912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:54:10.262 [DEBUG] [Thread-190912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:54:10.265 [DEBUG] [Thread-190912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:54:10.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:54:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:54:10.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:54:10.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:54:10.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:54:10.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:54:10.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:54:10.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:54:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:54:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.537259 -999.00  +15.00  17.81     74  +10.50 1 2 1 1 1   888    0 6.50 64.99 ----- 14.7 17.8 254.8 22.2 20.9 -12.8 20.2 -11.7 20.1 -9.4 20.9 -10.7
2026-04-12T14:54:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:54:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:54:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.537259
2026-04-12T14:54:10.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:54:10.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:54:10.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:54:10.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:54:10.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:54:10.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:54:01', tmtdew=5.96944, humidity=67.2285, cloud=0.0, wind=15.4573, temperature=15.5459, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:53:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:54:10.293 [DEBUG] [Thread-190912] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:54:10.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:54:10.383 [DEBUG] [Thread-190915] [transport.py] [_log()] starting thread (client mode): 0xb39c7ee0
2026-04-12T14:54:10.383 [DEBUG] [Thread-190915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:54:10.398 [DEBUG] [Thread-190915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:54:10.398 [INFO] [Thread-190915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:54:10.408 [DEBUG] [Thread-190915] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:54:10.409 [DEBUG] [Thread-190915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:54:10.409 [DEBUG] [Thread-190915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:54:10.409 [DEBUG] [Thread-190915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:10.409 [DEBUG] [Thread-190915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] client lang: <none>
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] server lang: <none>
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] kex follows: False
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] Compression: none
2026-04-12T14:54:10.410 [DEBUG] [Thread-190915] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:54:10.466 [DEBUG] [Thread-190915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:54:10.467 [DEBUG] [Thread-190915] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:54:10.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:54:10.468 [DEBUG] [Thread-190915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:54:10.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:54:10.523 [DEBUG] [Thread-190915] [transport.py] [_log()] userauth is OK
2026-04-12T14:54:10.524 [DEBUG] [Thread-190915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:54:10.524 [DEBUG] [Thread-190915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:54:10.524 [DEBUG] [Thread-190915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:54:10.524 [DEBUG] [Thread-190915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:54:10.543 [INFO] [Thread-190915] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:54:10.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:54:10.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:54:11.367 [DEBUG] [Thread-190915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:54:11.367 [DEBUG] [Thread-190915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:54:11.415 [DEBUG] [Thread-190915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:54:11.415 [DEBUG] [Thread-190915] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:54:11.425 [DEBUG] [Thread-190915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:54:11.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:54:11.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:54:11.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:54:11.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:54:11.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:54:11.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:54:11.466 [DEBUG] [Thread-190915] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:54:14.187 [DEBUG] [Thread-190917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:54:29.252 [DEBUG] [Thread-190918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:54:36.186 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:54:36.188 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:54:40.503 [DEBUG] [Thread-190919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:54:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:54:41.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:54:41.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:54:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 54, 1), 5.96944, 67.2285, 0.0, 15.4573, 15.5459, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:54:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:54:01
2026-04-12T14:54:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:54:43.417 [DEBUG] [Thread-190920] [transport.py] [_log()] starting thread (client mode): 0xb0f40e80
2026-04-12T14:54:43.417 [DEBUG] [Thread-190920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:54:43.437 [DEBUG] [Thread-190920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:54:43.437 [INFO] [Thread-190920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] client lang: <none>
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] server lang: <none>
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] kex follows: False
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:54:43.441 [DEBUG] [Thread-190920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:54:43.442 [DEBUG] [Thread-190920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:54:43.442 [DEBUG] [Thread-190920] [transport.py] [_log()] Compression: none
2026-04-12T14:54:43.442 [DEBUG] [Thread-190920] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:54:43.458 [DEBUG] [Thread-190920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:54:43.459 [DEBUG] [Thread-190920] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:54:43.459 [DEBUG] [Thread-190920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:54:43.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:54:43.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:54:43.461 [DEBUG] [Thread-190920] [transport.py] [_log()] userauth is OK
2026-04-12T14:54:43.461 [DEBUG] [Thread-190920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:54:43.461 [DEBUG] [Thread-190920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:54:43.461 [DEBUG] [Thread-190920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:54:43.462 [DEBUG] [Thread-190920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:54:43.499 [INFO] [Thread-190920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:54:43.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:54:44.114 [DEBUG] [Thread-190920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:54:44.114 [DEBUG] [Thread-190920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:54:44.115 [DEBUG] [Thread-190920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:54:44.155 [DEBUG] [Thread-190920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:54:44.155 [DEBUG] [Thread-190920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:54:44.158 [DEBUG] [Thread-190920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:54:44.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:54:44.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:54:44.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:54:44.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:54:44.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:54:44.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:54:44.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:54:44.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:54:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:54:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.537606 -999.00  +15.00  19.15     72  +10.10 1 2 1 1 1   888    0 6.59 64.02 ----- 18.4 19.1 258.2 24.2 21.0 -11.3 20.3 -11.6 20.4 -9.5 20.9 -11.7
2026-04-12T14:54:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:54:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:54:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.537606
2026-04-12T14:54:44.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:54:44.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:54:44.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:54:44.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:54:44.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:54:44.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:54:01', tmtdew=5.96944, humidity=67.2285, cloud=0.0, wind=15.4573, temperature=15.5459, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:54:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:54:44.184 [DEBUG] [Thread-190920] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:54:44.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:54:44.280 [DEBUG] [Thread-190923] [transport.py] [_log()] starting thread (client mode): 0xae52d270
2026-04-12T14:54:44.280 [DEBUG] [Thread-190923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:54:44.286 [DEBUG] [Thread-190924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:54:44.297 [DEBUG] [Thread-190923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:54:44.297 [INFO] [Thread-190923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:54:44.305 [DEBUG] [Thread-190923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:54:44.305 [DEBUG] [Thread-190923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:54:44.305 [DEBUG] [Thread-190923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:54:44.305 [DEBUG] [Thread-190923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] client lang: <none>
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] server lang: <none>
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] kex follows: False
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:54:44.306 [DEBUG] [Thread-190923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:54:44.307 [DEBUG] [Thread-190923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:54:44.307 [DEBUG] [Thread-190923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:54:44.307 [DEBUG] [Thread-190923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:54:44.307 [DEBUG] [Thread-190923] [transport.py] [_log()] Compression: none
2026-04-12T14:54:44.307 [DEBUG] [Thread-190923] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:54:44.365 [DEBUG] [Thread-190923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:54:44.366 [DEBUG] [Thread-190923] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:54:44.367 [DEBUG] [Thread-190923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:54:44.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:54:44.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:54:44.424 [DEBUG] [Thread-190923] [transport.py] [_log()] userauth is OK
2026-04-12T14:54:44.425 [DEBUG] [Thread-190923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:54:44.425 [DEBUG] [Thread-190923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:54:44.425 [DEBUG] [Thread-190923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:54:44.425 [DEBUG] [Thread-190923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:54:44.444 [INFO] [Thread-190923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:54:44.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:54:44.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:54:45.290 [DEBUG] [Thread-190923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:54:45.291 [DEBUG] [Thread-190923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:54:45.339 [DEBUG] [Thread-190923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:54:45.339 [DEBUG] [Thread-190923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:54:45.348 [DEBUG] [Thread-190923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:54:45.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:54:45.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:54:45.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:54:45.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:54:45.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:54:45.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:54:45.385 [DEBUG] [Thread-190923] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:54:59.328 [DEBUG] [Thread-190926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:55:14.366 [DEBUG] [Thread-190927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:55:15.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:55:15.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:55:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:55:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 54, 36), 6.17662, 66.7553, 0.0, 19.9368, 16.2913, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:55:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:54:36
2026-04-12T14:55:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:55:17.250 [DEBUG] [Thread-190928] [transport.py] [_log()] starting thread (client mode): 0xb0f42410
2026-04-12T14:55:17.250 [DEBUG] [Thread-190928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:55:17.272 [DEBUG] [Thread-190928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:55:17.272 [INFO] [Thread-190928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:55:17.275 [DEBUG] [Thread-190928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] client lang: <none>
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] server lang: <none>
2026-04-12T14:55:17.276 [DEBUG] [Thread-190928] [transport.py] [_log()] kex follows: False
2026-04-12T14:55:17.277 [DEBUG] [Thread-190928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:55:17.277 [DEBUG] [Thread-190928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:55:17.277 [DEBUG] [Thread-190928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:55:17.277 [DEBUG] [Thread-190928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:55:17.277 [DEBUG] [Thread-190928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:55:17.277 [DEBUG] [Thread-190928] [transport.py] [_log()] Compression: none
2026-04-12T14:55:17.277 [DEBUG] [Thread-190928] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:55:17.296 [DEBUG] [Thread-190928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:55:17.297 [DEBUG] [Thread-190928] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:55:17.298 [DEBUG] [Thread-190928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:55:17.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:55:17.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:55:17.300 [DEBUG] [Thread-190928] [transport.py] [_log()] userauth is OK
2026-04-12T14:55:17.300 [DEBUG] [Thread-190928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:55:17.300 [DEBUG] [Thread-190928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:55:17.300 [DEBUG] [Thread-190928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:55:17.300 [DEBUG] [Thread-190928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:55:17.323 [INFO] [Thread-190928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:55:17.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:55:18.205 [DEBUG] [Thread-190928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:55:18.205 [DEBUG] [Thread-190928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:55:18.205 [DEBUG] [Thread-190928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:55:18.246 [DEBUG] [Thread-190928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:55:18.246 [DEBUG] [Thread-190928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:55:18.249 [DEBUG] [Thread-190928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:55:18.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:55:18.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:55:18.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:55:18.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:55:18.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:55:18.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:55:18.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:55:18.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:55:18.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:55:18.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.537953 -999.00  +15.10  14.01     73  +10.40 1 2 1 1 1   888    0 6.46 63.72 ----- 12.9 14.0 257.0 20.9 21.0 -12.4 20.2 -11.9 20.4 -10.3 21.1 -12.5
2026-04-12T14:55:18.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:55:18.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:55:18.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.537953
2026-04-12T14:55:18.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:55:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:55:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:55:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:55:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:55:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:54:36', tmtdew=6.17662, humidity=66.7553, cloud=0.0, wind=19.9368, temperature=16.2913, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:54:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:55:18.268 [DEBUG] [Thread-190928] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:55:18.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:55:18.361 [DEBUG] [Thread-190931] [transport.py] [_log()] starting thread (client mode): 0xb39c7970
2026-04-12T14:55:18.361 [DEBUG] [Thread-190931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:55:18.376 [DEBUG] [Thread-190931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:55:18.376 [INFO] [Thread-190931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] client lang: <none>
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] server lang: <none>
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] kex follows: False
2026-04-12T14:55:18.383 [DEBUG] [Thread-190931] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:55:18.384 [DEBUG] [Thread-190931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:55:18.384 [DEBUG] [Thread-190931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:55:18.384 [DEBUG] [Thread-190931] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:55:18.384 [DEBUG] [Thread-190931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:55:18.384 [DEBUG] [Thread-190931] [transport.py] [_log()] Compression: none
2026-04-12T14:55:18.384 [DEBUG] [Thread-190931] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:55:18.439 [DEBUG] [Thread-190931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:55:18.439 [DEBUG] [Thread-190931] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:55:18.439 [DEBUG] [Thread-190931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:55:18.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:55:18.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:55:18.497 [DEBUG] [Thread-190931] [transport.py] [_log()] userauth is OK
2026-04-12T14:55:18.497 [DEBUG] [Thread-190931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:55:18.497 [DEBUG] [Thread-190931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:55:18.497 [DEBUG] [Thread-190931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:55:18.497 [DEBUG] [Thread-190931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:55:18.513 [INFO] [Thread-190931] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:55:18.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:55:18.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:55:19.320 [DEBUG] [Thread-190931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:55:19.322 [DEBUG] [Thread-190931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:55:19.370 [DEBUG] [Thread-190931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:55:19.371 [DEBUG] [Thread-190931] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:55:19.381 [DEBUG] [Thread-190931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:55:19.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:55:19.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:55:19.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:55:19.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:55:19.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:55:19.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:55:19.416 [DEBUG] [Thread-190931] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:55:29.402 [DEBUG] [Thread-190933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:55:36.328 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:55:36.329 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:55:40.537 [DEBUG] [Thread-190934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:55:44.457 [DEBUG] [Thread-190935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:55:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:55:49.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:55:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:55:50.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 55, 11), 5.75259, 68.2557, 0.0, 17.5043, 15.7442, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:55:50.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:55:11
2026-04-12T14:55:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:55:51.318 [DEBUG] [Thread-190936] [transport.py] [_log()] starting thread (client mode): 0xae52e350
2026-04-12T14:55:51.318 [DEBUG] [Thread-190936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:55:51.340 [DEBUG] [Thread-190936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:55:51.340 [INFO] [Thread-190936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:55:51.344 [DEBUG] [Thread-190936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:55:51.344 [DEBUG] [Thread-190936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:55:51.344 [DEBUG] [Thread-190936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:55:51.344 [DEBUG] [Thread-190936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:51.344 [DEBUG] [Thread-190936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:51.344 [DEBUG] [Thread-190936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] client lang: <none>
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] server lang: <none>
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] kex follows: False
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:55:51.345 [DEBUG] [Thread-190936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:55:51.346 [DEBUG] [Thread-190936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:55:51.346 [DEBUG] [Thread-190936] [transport.py] [_log()] Compression: none
2026-04-12T14:55:51.346 [DEBUG] [Thread-190936] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:55:51.366 [DEBUG] [Thread-190936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:55:51.367 [DEBUG] [Thread-190936] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:55:51.367 [DEBUG] [Thread-190936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:55:51.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:55:51.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:55:51.369 [DEBUG] [Thread-190936] [transport.py] [_log()] userauth is OK
2026-04-12T14:55:51.369 [DEBUG] [Thread-190936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:55:51.370 [DEBUG] [Thread-190936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:55:51.370 [DEBUG] [Thread-190936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:55:51.370 [DEBUG] [Thread-190936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:55:51.405 [INFO] [Thread-190936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:55:51.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:55:52.053 [DEBUG] [Thread-190936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:55:52.053 [DEBUG] [Thread-190936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:55:52.053 [DEBUG] [Thread-190936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:55:52.094 [DEBUG] [Thread-190936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:55:52.094 [DEBUG] [Thread-190936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:55:52.097 [DEBUG] [Thread-190936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:55:52.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:55:52.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:55:52.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:55:52.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:55:52.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:55:52.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:55:52.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:55:52.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:55:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:55:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.538300 -999.00  +15.30  11.21     73  +10.60 1 2 1 1 1   888    0 6.41 59.85 ----- 11.2 11.2 256.4 16.1 21.0 -13.0 20.3 -11.8 20.4 -9.7 21.1 -12.7
2026-04-12T14:55:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:55:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:55:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.538300
2026-04-12T14:55:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:55:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:55:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:55:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:55:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:55:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:55:11', tmtdew=5.75259, humidity=68.2557, cloud=0.0, wind=17.5043, temperature=15.7442, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:55:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:55:52.121 [DEBUG] [Thread-190936] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:55:52.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:55:52.217 [DEBUG] [Thread-190939] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-12T14:55:52.217 [DEBUG] [Thread-190939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:55:52.232 [DEBUG] [Thread-190939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:55:52.232 [INFO] [Thread-190939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:55:52.240 [DEBUG] [Thread-190939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] client lang: <none>
2026-04-12T14:55:52.241 [DEBUG] [Thread-190939] [transport.py] [_log()] server lang: <none>
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] kex follows: False
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] Compression: none
2026-04-12T14:55:52.242 [DEBUG] [Thread-190939] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:55:52.297 [DEBUG] [Thread-190939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:55:52.297 [DEBUG] [Thread-190939] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:55:52.297 [DEBUG] [Thread-190939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:55:52.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:55:52.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:55:52.353 [DEBUG] [Thread-190939] [transport.py] [_log()] userauth is OK
2026-04-12T14:55:52.353 [DEBUG] [Thread-190939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:55:52.353 [DEBUG] [Thread-190939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:55:52.353 [DEBUG] [Thread-190939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:55:52.353 [DEBUG] [Thread-190939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:55:52.375 [INFO] [Thread-190939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:55:52.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:55:52.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:55:53.175 [DEBUG] [Thread-190939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:55:53.175 [DEBUG] [Thread-190939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:55:53.223 [DEBUG] [Thread-190939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:55:53.223 [DEBUG] [Thread-190939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:55:53.233 [DEBUG] [Thread-190939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:55:53.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:55:53.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:55:53.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:55:53.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:55:53.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:55:53.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:55:53.268 [DEBUG] [Thread-190939] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:55:59.498 [DEBUG] [Thread-190941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:56:14.551 [DEBUG] [Thread-190942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:56:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:56:23.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:56:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:56:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 55, 47), 6.05648, 67.4839, 0.0, 21.7714, 17.2188, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:56:24.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:55:47
2026-04-12T14:56:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:56:25.264 [DEBUG] [Thread-190943] [transport.py] [_log()] starting thread (client mode): 0xb0f40f40
2026-04-12T14:56:25.264 [DEBUG] [Thread-190943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:56:25.284 [DEBUG] [Thread-190943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:56:25.284 [INFO] [Thread-190943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:56:25.287 [DEBUG] [Thread-190943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] client lang: <none>
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] server lang: <none>
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] kex follows: False
2026-04-12T14:56:25.288 [DEBUG] [Thread-190943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:56:25.289 [DEBUG] [Thread-190943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:56:25.289 [DEBUG] [Thread-190943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:56:25.289 [DEBUG] [Thread-190943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:56:25.289 [DEBUG] [Thread-190943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:56:25.289 [DEBUG] [Thread-190943] [transport.py] [_log()] Compression: none
2026-04-12T14:56:25.289 [DEBUG] [Thread-190943] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:56:25.306 [DEBUG] [Thread-190943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:56:25.307 [DEBUG] [Thread-190943] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:56:25.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:56:25.308 [DEBUG] [Thread-190943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:56:25.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:56:25.310 [DEBUG] [Thread-190943] [transport.py] [_log()] userauth is OK
2026-04-12T14:56:25.311 [DEBUG] [Thread-190943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:56:25.311 [DEBUG] [Thread-190943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:56:25.311 [DEBUG] [Thread-190943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:56:25.311 [DEBUG] [Thread-190943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:56:25.335 [INFO] [Thread-190943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:56:25.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:56:26.121 [DEBUG] [Thread-190943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:56:26.122 [DEBUG] [Thread-190943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:56:26.122 [DEBUG] [Thread-190943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:56:26.163 [DEBUG] [Thread-190943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:56:26.163 [DEBUG] [Thread-190943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:56:26.166 [DEBUG] [Thread-190943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:56:26.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:56:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:56:26.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:56:26.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:56:26.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:56:26.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:56:26.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:56:26.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:56:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:56:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.538648 -999.00  +15.50  11.87     74  +10.90 1 2 1 1 1   888    0 6.65 64.04 ----- 17.3 11.9 277.4 14.0 21.1 -12.5 20.4 -11.4 20.5 -9.4 21.3 -12.5
2026-04-12T14:56:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:56:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:56:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.538648
2026-04-12T14:56:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:56:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:56:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:56:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:56:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:56:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:55:47', tmtdew=6.05648, humidity=67.4839, cloud=0.0, wind=21.7714, temperature=17.2188, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:55:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:56:26.193 [DEBUG] [Thread-190943] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:56:26.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:56:26.297 [DEBUG] [Thread-190946] [transport.py] [_log()] starting thread (client mode): 0xae534670
2026-04-12T14:56:26.297 [DEBUG] [Thread-190946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:56:26.312 [DEBUG] [Thread-190946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:56:26.312 [INFO] [Thread-190946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:56:26.319 [DEBUG] [Thread-190946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:56:26.320 [DEBUG] [Thread-190946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] client lang: <none>
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] server lang: <none>
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] kex follows: False
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:56:26.321 [DEBUG] [Thread-190946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:56:26.322 [DEBUG] [Thread-190946] [transport.py] [_log()] Compression: none
2026-04-12T14:56:26.322 [DEBUG] [Thread-190946] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:56:26.382 [DEBUG] [Thread-190946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:56:26.383 [DEBUG] [Thread-190946] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:56:26.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:56:26.384 [DEBUG] [Thread-190946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:56:26.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:56:26.441 [DEBUG] [Thread-190946] [transport.py] [_log()] userauth is OK
2026-04-12T14:56:26.442 [DEBUG] [Thread-190946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:56:26.442 [DEBUG] [Thread-190946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:56:26.442 [DEBUG] [Thread-190946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:56:26.442 [DEBUG] [Thread-190946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:56:26.459 [INFO] [Thread-190946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:56:26.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:56:26.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:56:27.303 [DEBUG] [Thread-190946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:56:27.304 [DEBUG] [Thread-190946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:56:27.351 [DEBUG] [Thread-190946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:56:27.351 [DEBUG] [Thread-190946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:56:27.359 [DEBUG] [Thread-190946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:56:27.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:56:27.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:56:27.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:56:27.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:56:27.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:56:27.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:56:27.392 [DEBUG] [Thread-190946] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:56:29.593 [DEBUG] [Thread-190948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:56:36.471 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:56:36.472 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:56:40.592 [DEBUG] [Thread-190949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:56:44.646 [DEBUG] [Thread-190950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:56:57.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:56:57.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:56:57.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:56:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 56, 22), 5.97583, 67.8111, 0.0, 22.2487, 16.026, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:56:58.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:56:22
2026-04-12T14:56:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:56:59.193 [DEBUG] [Thread-190951] [transport.py] [_log()] starting thread (client mode): 0xae537040
2026-04-12T14:56:59.193 [DEBUG] [Thread-190951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:56:59.214 [DEBUG] [Thread-190951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:56:59.214 [INFO] [Thread-190951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] client lang: <none>
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] server lang: <none>
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] kex follows: False
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] Compression: none
2026-04-12T14:56:59.217 [DEBUG] [Thread-190951] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:56:59.235 [DEBUG] [Thread-190951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:56:59.236 [DEBUG] [Thread-190951] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:56:59.237 [DEBUG] [Thread-190951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:56:59.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:56:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:56:59.239 [DEBUG] [Thread-190951] [transport.py] [_log()] userauth is OK
2026-04-12T14:56:59.239 [DEBUG] [Thread-190951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:56:59.239 [DEBUG] [Thread-190951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:56:59.239 [DEBUG] [Thread-190951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:56:59.240 [DEBUG] [Thread-190951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:56:59.263 [INFO] [Thread-190951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:56:59.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:56:59.684 [DEBUG] [Thread-190953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:57:00.052 [DEBUG] [Thread-190951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:57:00.052 [DEBUG] [Thread-190951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:57:00.053 [DEBUG] [Thread-190951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:57:00.094 [DEBUG] [Thread-190951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:57:00.094 [DEBUG] [Thread-190951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:57:00.098 [DEBUG] [Thread-190951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:57:00.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:57:00.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:57:00.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:57:00.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:57:00.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:57:00.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:57:00.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:57:00.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:57:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:57:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.539342 -999.00  +15.70  12.63     73  +10.90 1 3 1 1 1   888    0 6.35 55.24 ----- 18.4 12.6 266.8 19.9 21.3 -11.5 20.6 -11.0 20.6 -8.6 21.5 -9.6
2026-04-12T14:57:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:57:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:57:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.539342
2026-04-12T14:57:00.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:57:00.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:57:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:57:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:57:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:57:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:56:22', tmtdew=5.97583, humidity=67.8111, cloud=0.0, wind=22.2487, temperature=16.026, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:56:39.149', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:57:00.125 [DEBUG] [Thread-190951] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:57:00.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:57:00.220 [DEBUG] [Thread-190955] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-12T14:57:00.220 [DEBUG] [Thread-190955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:57:00.235 [DEBUG] [Thread-190955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:57:00.235 [INFO] [Thread-190955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] client lang: <none>
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] server lang: <none>
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] kex follows: False
2026-04-12T14:57:00.243 [DEBUG] [Thread-190955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:57:00.244 [DEBUG] [Thread-190955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:57:00.244 [DEBUG] [Thread-190955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:57:00.244 [DEBUG] [Thread-190955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:57:00.244 [DEBUG] [Thread-190955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:57:00.244 [DEBUG] [Thread-190955] [transport.py] [_log()] Compression: none
2026-04-12T14:57:00.244 [DEBUG] [Thread-190955] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:57:00.302 [DEBUG] [Thread-190955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:57:00.302 [DEBUG] [Thread-190955] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:57:00.303 [DEBUG] [Thread-190955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:57:00.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:57:00.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:57:00.358 [DEBUG] [Thread-190955] [transport.py] [_log()] userauth is OK
2026-04-12T14:57:00.358 [DEBUG] [Thread-190955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:57:00.358 [DEBUG] [Thread-190955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:57:00.358 [DEBUG] [Thread-190955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:57:00.359 [DEBUG] [Thread-190955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:57:00.380 [INFO] [Thread-190955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:57:00.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:57:00.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:57:01.189 [DEBUG] [Thread-190955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:57:01.189 [DEBUG] [Thread-190955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:57:01.238 [DEBUG] [Thread-190955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:57:01.238 [DEBUG] [Thread-190955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:57:01.246 [DEBUG] [Thread-190955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:57:01.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:57:01.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:57:01.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:57:01.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:57:01.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:57:01.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:57:01.278 [DEBUG] [Thread-190955] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:57:14.720 [DEBUG] [Thread-190957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:57:29.784 [DEBUG] [Thread-190958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:57:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:57:31.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:57:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:57:32.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 56, 58), 6.16797, 66.5184, 0.0, 17.9629, 16.2265, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:57:32.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:56:58
2026-04-12T14:57:33.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:57:33.164 [DEBUG] [Thread-190959] [transport.py] [_log()] starting thread (client mode): 0xae534100
2026-04-12T14:57:33.164 [DEBUG] [Thread-190959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:57:33.185 [DEBUG] [Thread-190959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:57:33.185 [INFO] [Thread-190959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] client lang: <none>
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] server lang: <none>
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] kex follows: False
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:57:33.189 [DEBUG] [Thread-190959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:57:33.190 [DEBUG] [Thread-190959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:57:33.190 [DEBUG] [Thread-190959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:57:33.190 [DEBUG] [Thread-190959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:57:33.190 [DEBUG] [Thread-190959] [transport.py] [_log()] Compression: none
2026-04-12T14:57:33.190 [DEBUG] [Thread-190959] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:57:33.208 [DEBUG] [Thread-190959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:57:33.208 [DEBUG] [Thread-190959] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:57:33.209 [DEBUG] [Thread-190959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:57:33.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:57:33.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:57:33.211 [DEBUG] [Thread-190959] [transport.py] [_log()] userauth is OK
2026-04-12T14:57:33.211 [DEBUG] [Thread-190959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:57:33.211 [DEBUG] [Thread-190959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:57:33.211 [DEBUG] [Thread-190959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:57:33.211 [DEBUG] [Thread-190959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:57:33.226 [INFO] [Thread-190959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:57:33.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:57:34.038 [DEBUG] [Thread-190959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:57:34.039 [DEBUG] [Thread-190959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:57:34.039 [DEBUG] [Thread-190959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:57:34.080 [DEBUG] [Thread-190959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:57:34.080 [DEBUG] [Thread-190959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:57:34.082 [DEBUG] [Thread-190959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:57:34.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:57:34.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:57:34.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:57:34.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:57:34.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:57:34.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:57:34.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.539690 -999.00  +15.20  14.39     72  +10.30 1 3 1 1 1   888    0 6.24 52.04 ----- 14.6 14.4 259.2 21.3 21.4 -11.2 20.6 -9.2 20.7 -7.1 21.5 -10.2
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.539690
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:57:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:56:58', tmtdew=6.16797, humidity=66.5184, cloud=0.0, wind=17.9629, temperature=16.2265, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:57:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:57:34.101 [DEBUG] [Thread-190959] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:57:34.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:57:34.183 [DEBUG] [Thread-190962] [transport.py] [_log()] starting thread (client mode): 0xb0fe84f0
2026-04-12T14:57:34.184 [DEBUG] [Thread-190962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:57:34.198 [DEBUG] [Thread-190962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:57:34.198 [INFO] [Thread-190962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:57:34.206 [DEBUG] [Thread-190962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:57:34.206 [DEBUG] [Thread-190962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:57:34.206 [DEBUG] [Thread-190962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] client lang: <none>
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] server lang: <none>
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] kex follows: False
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] Compression: none
2026-04-12T14:57:34.207 [DEBUG] [Thread-190962] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:57:34.265 [DEBUG] [Thread-190962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:57:34.266 [DEBUG] [Thread-190962] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:57:34.266 [DEBUG] [Thread-190962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:57:34.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:57:34.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:57:34.322 [DEBUG] [Thread-190962] [transport.py] [_log()] userauth is OK
2026-04-12T14:57:34.322 [DEBUG] [Thread-190962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:57:34.322 [DEBUG] [Thread-190962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:57:34.322 [DEBUG] [Thread-190962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:57:34.322 [DEBUG] [Thread-190962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:57:34.341 [INFO] [Thread-190962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:57:34.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:57:34.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:57:35.124 [DEBUG] [Thread-190962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:57:35.124 [DEBUG] [Thread-190962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:57:35.172 [DEBUG] [Thread-190962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:57:35.172 [DEBUG] [Thread-190962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:57:35.182 [DEBUG] [Thread-190962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:57:35.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:57:35.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:57: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
2026-04-12T14:57:35.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:57:35.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:57:35.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:57:35.219 [DEBUG] [Thread-190962] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:57:36.611 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:57:36.612 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:57:40.636 [DEBUG] [Thread-190964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:57:44.826 [DEBUG] [Thread-190965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:57:59.877 [DEBUG] [Thread-190966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:58:05.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:58:05.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:58:05.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
2026-04-12T14:58:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 57, 33), 6.58318, 64.9976, 0.0, 18.6314, 16.456, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:58:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:57:33
2026-04-12T14:58:06.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:58:07.015 [DEBUG] [Thread-190967] [transport.py] [_log()] starting thread (client mode): 0xb0f6dc90
2026-04-12T14:58:07.016 [DEBUG] [Thread-190967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:58:07.036 [DEBUG] [Thread-190967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:58:07.037 [INFO] [Thread-190967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:58:07.040 [DEBUG] [Thread-190967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:58:07.040 [DEBUG] [Thread-190967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:58:07.040 [DEBUG] [Thread-190967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:58:07.040 [DEBUG] [Thread-190967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:07.040 [DEBUG] [Thread-190967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:07.040 [DEBUG] [Thread-190967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:07.040 [DEBUG] [Thread-190967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] client lang: <none>
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] server lang: <none>
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] kex follows: False
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] Compression: none
2026-04-12T14:58:07.041 [DEBUG] [Thread-190967] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:58:07.060 [DEBUG] [Thread-190967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:58:07.061 [DEBUG] [Thread-190967] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:58:07.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:58:07.062 [DEBUG] [Thread-190967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:58:07.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:58:07.064 [DEBUG] [Thread-190967] [transport.py] [_log()] userauth is OK
2026-04-12T14:58:07.064 [DEBUG] [Thread-190967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:58:07.064 [DEBUG] [Thread-190967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:58:07.064 [DEBUG] [Thread-190967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:58:07.065 [DEBUG] [Thread-190967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:58:07.099 [INFO] [Thread-190967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:58:07.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:58:07.920 [DEBUG] [Thread-190967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:58:07.920 [DEBUG] [Thread-190967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:58:07.920 [DEBUG] [Thread-190967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:58:07.961 [DEBUG] [Thread-190967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:58:07.961 [DEBUG] [Thread-190967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:58:07.964 [DEBUG] [Thread-190967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:58:07.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:58:07.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:58:07.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:58:07.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:58:07.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:58:07.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:58:07.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:58:07.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:58:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:58:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.540037 -999.00  +15.50  10.96     75  +11.20 1 3 1 1 1   888    0 6.15 47.13 ----- 11.2 11.0 267.6 16.2 21.5 -8.7 20.8 -8.1 20.9 -6.5 21.6 -8.3
2026-04-12T14:58:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:58:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:58:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.540037
2026-04-12T14:58:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:58:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:58:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:58:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:58:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:58:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:57:33', tmtdew=6.58318, humidity=64.9976, cloud=0.0, wind=18.6314, temperature=16.456, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:57:39.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:58:07.986 [DEBUG] [Thread-190967] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:58:08.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:58:08.080 [DEBUG] [Thread-190970] [transport.py] [_log()] starting thread (client mode): 0xb0f6f610
2026-04-12T14:58:08.080 [DEBUG] [Thread-190970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:58:08.095 [DEBUG] [Thread-190970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:58:08.095 [INFO] [Thread-190970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:58:08.102 [DEBUG] [Thread-190970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] client lang: <none>
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] server lang: <none>
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] kex follows: False
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] Compression: none
2026-04-12T14:58:08.103 [DEBUG] [Thread-190970] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:58:08.164 [DEBUG] [Thread-190970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:58:08.164 [DEBUG] [Thread-190970] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:58:08.165 [DEBUG] [Thread-190970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:58:08.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:58:08.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:58:08.222 [DEBUG] [Thread-190970] [transport.py] [_log()] userauth is OK
2026-04-12T14:58:08.222 [DEBUG] [Thread-190970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:58:08.222 [DEBUG] [Thread-190970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:58:08.222 [DEBUG] [Thread-190970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:58:08.222 [DEBUG] [Thread-190970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:58:08.236 [INFO] [Thread-190970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:58:08.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:58:08.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:58:09.070 [DEBUG] [Thread-190970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:58:09.070 [DEBUG] [Thread-190970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:58:09.118 [DEBUG] [Thread-190970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:58:09.118 [DEBUG] [Thread-190970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:58:09.129 [DEBUG] [Thread-190970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:58:09.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:58:09.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:58:09.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:58:09.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:58:09.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:58:09.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:58:09.169 [DEBUG] [Thread-190970] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:58:14.915 [DEBUG] [Thread-190972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:58:29.970 [DEBUG] [Thread-190973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:58:36.753 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:58:36.754 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:58:39.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:58:39.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:58:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:58:40.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 58, 9), 5.9173, 68.0125, 0.0, 16.357, 15.6788, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:58:40.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:58:09
2026-04-12T14:58:40.667 [DEBUG] [Thread-190974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:58:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:58:40.986 [DEBUG] [Thread-190975] [transport.py] [_log()] starting thread (client mode): 0xb0f42cb0
2026-04-12T14:58:40.986 [DEBUG] [Thread-190975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:58:41.007 [DEBUG] [Thread-190975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:58:41.008 [INFO] [Thread-190975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:58:41.011 [DEBUG] [Thread-190975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:58:41.011 [DEBUG] [Thread-190975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] client lang: <none>
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] server lang: <none>
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] kex follows: False
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:58:41.012 [DEBUG] [Thread-190975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:58:41.013 [DEBUG] [Thread-190975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:58:41.013 [DEBUG] [Thread-190975] [transport.py] [_log()] Compression: none
2026-04-12T14:58:41.013 [DEBUG] [Thread-190975] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:58:41.032 [DEBUG] [Thread-190975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:58:41.033 [DEBUG] [Thread-190975] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:58:41.033 [DEBUG] [Thread-190975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:58:41.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:58:41.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:58:41.035 [DEBUG] [Thread-190975] [transport.py] [_log()] userauth is OK
2026-04-12T14:58:41.035 [DEBUG] [Thread-190975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:58:41.036 [DEBUG] [Thread-190975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:58:41.036 [DEBUG] [Thread-190975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:58:41.036 [DEBUG] [Thread-190975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:58:41.059 [INFO] [Thread-190975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:58:41.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:58:41.868 [DEBUG] [Thread-190975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:58:41.868 [DEBUG] [Thread-190975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:58:41.868 [DEBUG] [Thread-190975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:58:41.909 [DEBUG] [Thread-190975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:58:41.909 [DEBUG] [Thread-190975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:58:41.912 [DEBUG] [Thread-190975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:58:41.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:58:41.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:58:41.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:58:41.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:58:41.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:58:41.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:58:41.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:58:41.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:58:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:58:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.540384 -999.00  +15.60  15.70     73  +10.90 1 2 1 1 1   888    0 6.13 47.07 ----- 16.0 15.7 255.8 20.6 21.4 -11.4 20.6 -11.0 20.7 -9.2 21.8 -10.9
2026-04-12T14:58:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:58:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:58:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.540384
2026-04-12T14:58:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:58:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:58:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:58:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:58:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T14:58:41.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:58:09', tmtdew=5.9173, humidity=68.0125, cloud=0.0, wind=16.357, temperature=15.6788, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:58:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:58:41.941 [DEBUG] [Thread-190975] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:58:42.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:58:42.043 [DEBUG] [Thread-190978] [transport.py] [_log()] starting thread (client mode): 0xa796b940
2026-04-12T14:58:42.043 [DEBUG] [Thread-190978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:58:42.057 [DEBUG] [Thread-190978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:58:42.057 [INFO] [Thread-190978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] client lang: <none>
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] server lang: <none>
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] kex follows: False
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:58:42.065 [DEBUG] [Thread-190978] [transport.py] [_log()] Compression: none
2026-04-12T14:58:42.066 [DEBUG] [Thread-190978] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:58:42.123 [DEBUG] [Thread-190978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:58:42.123 [DEBUG] [Thread-190978] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:58:42.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:58:42.125 [DEBUG] [Thread-190978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:58:42.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:58:42.179 [DEBUG] [Thread-190978] [transport.py] [_log()] userauth is OK
2026-04-12T14:58:42.180 [DEBUG] [Thread-190978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:58:42.180 [DEBUG] [Thread-190978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:58:42.180 [DEBUG] [Thread-190978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:58:42.180 [DEBUG] [Thread-190978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:58:42.200 [INFO] [Thread-190978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:58:42.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:58:42.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:58:42.983 [DEBUG] [Thread-190978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:58:42.983 [DEBUG] [Thread-190978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:58:43.031 [DEBUG] [Thread-190978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:58:43.031 [DEBUG] [Thread-190978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:58:43.041 [DEBUG] [Thread-190978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:58:43.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:58:43.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')
2026-04-12T14:58:43.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:58:43.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:58:43.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:58:43.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:58:43.086 [DEBUG] [Thread-190978] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:58:45.010 [DEBUG] [Thread-190980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:00.065 [DEBUG] [Thread-190981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:13.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:59:13.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:59:13.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:59:14.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 58, 45), 5.97463, 67.6488, 0.0, 23.2178, 16.2236, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:59:14.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:58:45
2026-04-12T14:59:14.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:59:14.975 [DEBUG] [Thread-190982] [transport.py] [_log()] starting thread (client mode): 0xb0f6fd90
2026-04-12T14:59:14.975 [DEBUG] [Thread-190982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:59:14.995 [DEBUG] [Thread-190982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:59:14.995 [INFO] [Thread-190982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:59:14.998 [DEBUG] [Thread-190982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:59:14.998 [DEBUG] [Thread-190982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:59:14.998 [DEBUG] [Thread-190982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] client lang: <none>
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] server lang: <none>
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] kex follows: False
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:59:14.999 [DEBUG] [Thread-190982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:59:15.000 [DEBUG] [Thread-190982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:59:15.000 [DEBUG] [Thread-190982] [transport.py] [_log()] Compression: none
2026-04-12T14:59:15.000 [DEBUG] [Thread-190982] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:59:15.018 [DEBUG] [Thread-190982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:59:15.019 [DEBUG] [Thread-190982] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:59:15.019 [DEBUG] [Thread-190982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:59:15.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:59:15.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:59:15.021 [DEBUG] [Thread-190982] [transport.py] [_log()] userauth is OK
2026-04-12T14:59:15.021 [DEBUG] [Thread-190982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:59:15.022 [DEBUG] [Thread-190982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:59:15.022 [DEBUG] [Thread-190982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:59:15.022 [DEBUG] [Thread-190982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:59:15.041 [INFO] [Thread-190982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:59:15.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:59:15.101 [DEBUG] [Thread-190984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:15.787 [DEBUG] [Thread-190982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:59:15.787 [DEBUG] [Thread-190982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:59:15.788 [DEBUG] [Thread-190982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:59:15.828 [DEBUG] [Thread-190982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:59:15.828 [DEBUG] [Thread-190982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:59:15.831 [DEBUG] [Thread-190982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:59:15.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:59:15.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:59:15.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:59:15.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:59:15.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:59:15.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:59:15.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:59:15.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:59:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:59:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.540731 -999.00  +15.60  18.22     72  +10.70 1 3 1 1 1   888    0 6.04 45.44 ----- 15.6 18.2 275.0 23.8 21.2 -11.3 20.5 -9.4 20.5 -8.7 21.5 -11.0
2026-04-12T14:59:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:59:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:59:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.540731
2026-04-12T14:59:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:59:15.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:59:15.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:59:15.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:59:15.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:59:15.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:58:45', tmtdew=5.97463, humidity=67.6488, cloud=0.0, wind=23.2178, temperature=16.2236, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:58:39.158', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:59:15.859 [DEBUG] [Thread-190982] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:59:15.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:59:15.954 [DEBUG] [Thread-190986] [transport.py] [_log()] starting thread (client mode): 0xb0f6f400
2026-04-12T14:59:15.954 [DEBUG] [Thread-190986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:59:15.970 [DEBUG] [Thread-190986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:59:15.970 [INFO] [Thread-190986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:59:15.977 [DEBUG] [Thread-190986] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] client lang: <none>
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] server lang: <none>
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] kex follows: False
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] Compression: none
2026-04-12T14:59:15.978 [DEBUG] [Thread-190986] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:59:16.035 [DEBUG] [Thread-190986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:59:16.036 [DEBUG] [Thread-190986] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:59:16.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:59:16.037 [DEBUG] [Thread-190986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:59:16.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:59:16.091 [DEBUG] [Thread-190986] [transport.py] [_log()] userauth is OK
2026-04-12T14:59:16.092 [DEBUG] [Thread-190986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:59:16.092 [DEBUG] [Thread-190986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:59:16.092 [DEBUG] [Thread-190986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:59:16.092 [DEBUG] [Thread-190986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:59:16.112 [INFO] [Thread-190986] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:59:16.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:59:16.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:59:16.936 [DEBUG] [Thread-190986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:59:16.936 [DEBUG] [Thread-190986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:59:16.984 [DEBUG] [Thread-190986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:59:16.985 [DEBUG] [Thread-190986] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:59:16.994 [DEBUG] [Thread-190986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:59:17.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:59:17.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:59:17.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:59:17.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:59:17.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:59:17.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:59:17.031 [DEBUG] [Thread-190986] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:59:30.140 [DEBUG] [Thread-190988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:36.894 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:36.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:40.701 [DEBUG] [Thread-190989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:45.201 [DEBUG] [Thread-190990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T14:59:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T14:59:47.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T14:59:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T14:59:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 59, 20), 5.98956, 67.5924, 0.0, 20.839, 15.5784, 0, 0, 0, 2, 0, 0),)
2026-04-12T14:59:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:59:20
2026-04-12T14:59:48.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T14:59:48.849 [DEBUG] [Thread-190991] [transport.py] [_log()] starting thread (client mode): 0xb0f6d7e0
2026-04-12T14:59:48.849 [DEBUG] [Thread-190991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:59:48.873 [DEBUG] [Thread-190991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T14:59:48.873 [INFO] [Thread-190991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T14:59:48.876 [DEBUG] [Thread-190991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:59:48.876 [DEBUG] [Thread-190991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T14:59:48.876 [DEBUG] [Thread-190991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:59:48.876 [DEBUG] [Thread-190991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] client lang: <none>
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] server lang: <none>
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] kex follows: False
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:59:48.877 [DEBUG] [Thread-190991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:59:48.878 [DEBUG] [Thread-190991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:59:48.878 [DEBUG] [Thread-190991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:59:48.878 [DEBUG] [Thread-190991] [transport.py] [_log()] Compression: none
2026-04-12T14:59:48.878 [DEBUG] [Thread-190991] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:59:48.898 [DEBUG] [Thread-190991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:59:48.898 [DEBUG] [Thread-190991] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:59:48.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T14:59:48.900 [DEBUG] [Thread-190991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T14:59:48.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:59:48.902 [DEBUG] [Thread-190991] [transport.py] [_log()] userauth is OK
2026-04-12T14:59:48.902 [DEBUG] [Thread-190991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:59:48.902 [DEBUG] [Thread-190991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:59:48.902 [DEBUG] [Thread-190991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T14:59:48.902 [DEBUG] [Thread-190991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:59:48.939 [INFO] [Thread-190991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:59:48.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:59:49.714 [DEBUG] [Thread-190991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:59:49.714 [DEBUG] [Thread-190991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:59:49.715 [DEBUG] [Thread-190991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T14:59:49.755 [DEBUG] [Thread-190991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:59:49.755 [DEBUG] [Thread-190991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:59:49.759 [DEBUG] [Thread-190991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:59:49.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:59:49.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T14:59:49.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T14:59:49.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T14:59:49.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:59:49.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T14:59:49.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:59:49.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:59:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T14:59:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.541078 -999.00  +15.30  15.55     71  +10.30 1 3 1 1 1   888    0 6.11 49.03 ----- 15.7 15.6 258.0 21.4 21.1 -11.5 20.5 -10.2 20.3 -8.7 21.4 -9.7
2026-04-12T14:59:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T14:59:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T14:59:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.541078
2026-04-12T14:59:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T14:59:49.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T14:59:49.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T14:59:49.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T14:59:49.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T14:59:49.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:59:20', tmtdew=5.98956, humidity=67.5924, cloud=0.0, wind=20.839, temperature=15.5784, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:59:09.139', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T14:59:49.787 [DEBUG] [Thread-190991] [transport.py] [_log()] EOF in transport thread
2026-04-12T14:59:49.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T14:59:49.880 [DEBUG] [Thread-190994] [transport.py] [_log()] starting thread (client mode): 0xb0f6d690
2026-04-12T14:59:49.880 [DEBUG] [Thread-190994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T14:59:49.894 [DEBUG] [Thread-190994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T14:59:49.894 [INFO] [Thread-190994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] client lang: <none>
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] server lang: <none>
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] kex follows: False
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] Compression: none
2026-04-12T14:59:49.902 [DEBUG] [Thread-190994] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T14:59:49.963 [DEBUG] [Thread-190994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T14:59:49.964 [DEBUG] [Thread-190994] [transport.py] [_log()] Switch to new keys ...
2026-04-12T14:59:49.965 [DEBUG] [Thread-190994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T14:59:49.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T14:59:49.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T14:59:50.020 [DEBUG] [Thread-190994] [transport.py] [_log()] userauth is OK
2026-04-12T14:59:50.020 [DEBUG] [Thread-190994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T14:59:50.020 [DEBUG] [Thread-190994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T14:59:50.020 [DEBUG] [Thread-190994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T14:59:50.020 [DEBUG] [Thread-190994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T14:59:50.040 [INFO] [Thread-190994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T14:59:50.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T14:59:50.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T14:59:50.825 [DEBUG] [Thread-190994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T14:59:50.825 [DEBUG] [Thread-190994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T14:59:50.873 [DEBUG] [Thread-190994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T14:59:50.873 [DEBUG] [Thread-190994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T14:59:50.883 [DEBUG] [Thread-190994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T14:59:50.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T14:59:50.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T14:59:50.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T14:59:50.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T14:59:50.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T14:59:50.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T14:59:50.920 [DEBUG] [Thread-190994] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:00:00.239 [DEBUG] [Thread-190996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:00:15.291 [DEBUG] [Thread-190997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:00:20.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:00:20.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:00:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:00:22.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 14, 59, 55), 5.8873, 68.0922, 0.0, 19.4976, 15.6785, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:00:22.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 14:59:55
2026-04-12T15:00:22.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:00:22.714 [DEBUG] [Thread-190998] [transport.py] [_log()] starting thread (client mode): 0xb0f6fdc0
2026-04-12T15:00:22.714 [DEBUG] [Thread-190998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:00:22.735 [DEBUG] [Thread-190998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:00:22.735 [INFO] [Thread-190998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:00:22.736 [DEBUG] [Thread-190998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] client lang: <none>
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] server lang: <none>
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] kex follows: False
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] Compression: none
2026-04-12T15:00:22.737 [DEBUG] [Thread-190998] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:00:22.750 [DEBUG] [Thread-190998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:00:22.751 [DEBUG] [Thread-190998] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:00:22.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:00:22.752 [DEBUG] [Thread-190998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:00:22.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:00:22.754 [DEBUG] [Thread-190998] [transport.py] [_log()] userauth is OK
2026-04-12T15:00:22.754 [DEBUG] [Thread-190998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:00:22.754 [DEBUG] [Thread-190998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:00:22.754 [DEBUG] [Thread-190998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:00:22.754 [DEBUG] [Thread-190998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:00:22.772 [INFO] [Thread-190998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:00:22.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:00:23.736 [DEBUG] [Thread-190998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:00:23.736 [DEBUG] [Thread-190998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:00:23.737 [DEBUG] [Thread-190998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:00:23.777 [DEBUG] [Thread-190998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:00:23.777 [DEBUG] [Thread-190998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:00:23.781 [DEBUG] [Thread-190998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:00:23.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:00:23.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:00:23.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:00:23.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:00:23.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:00:23.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:00:23.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:00:23.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:00:23.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:00:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.541426 -999.00  +15.40  18.76     73  +10.70 1 2 1 1 1   888    0 6.01 46.88 ----- 23.9 18.8 279.2 23.3 20.9 -11.0 20.4 -10.6 20.1 -9.7 21.2 -9.4
2026-04-12T15:00:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:00:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:00:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.541426
2026-04-12T15:00:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:00:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:00:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:00:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:00:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:00:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T14:59:55', tmtdew=5.8873, humidity=68.0922, cloud=0.0, wind=19.4976, temperature=15.6785, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T12:59:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:00:23.810 [DEBUG] [Thread-190998] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:00:23.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:00:23.903 [DEBUG] [Thread-191001] [transport.py] [_log()] starting thread (client mode): 0xb0fcf280
2026-04-12T15:00:23.903 [DEBUG] [Thread-191001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:00:23.919 [DEBUG] [Thread-191001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:00:23.919 [INFO] [Thread-191001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] client lang: <none>
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] server lang: <none>
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] kex follows: False
2026-04-12T15:00:23.927 [DEBUG] [Thread-191001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:00:23.928 [DEBUG] [Thread-191001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:00:23.928 [DEBUG] [Thread-191001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:00:23.928 [DEBUG] [Thread-191001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:00:23.928 [DEBUG] [Thread-191001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:00:23.928 [DEBUG] [Thread-191001] [transport.py] [_log()] Compression: none
2026-04-12T15:00:23.928 [DEBUG] [Thread-191001] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:00:23.984 [DEBUG] [Thread-191001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:00:23.984 [DEBUG] [Thread-191001] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:00:23.985 [DEBUG] [Thread-191001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:00:23.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:00:23.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:00:24.040 [DEBUG] [Thread-191001] [transport.py] [_log()] userauth is OK
2026-04-12T15:00:24.041 [DEBUG] [Thread-191001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:00:24.041 [DEBUG] [Thread-191001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:00:24.041 [DEBUG] [Thread-191001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:00:24.041 [DEBUG] [Thread-191001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:00:24.060 [INFO] [Thread-191001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:00:24.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:00:24.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:00:24.863 [DEBUG] [Thread-191001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:00:24.863 [DEBUG] [Thread-191001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:00:24.911 [DEBUG] [Thread-191001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:00:24.911 [DEBUG] [Thread-191001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:00:24.920 [DEBUG] [Thread-191001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:00:24.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:00:24.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:00:24.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:00:24.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:00:24.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:00:24.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:00:24.957 [DEBUG] [Thread-191001] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:00:30.327 [DEBUG] [Thread-191003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:00:37.035 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:00:37.036 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:00:40.754 [DEBUG] [Thread-191004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:00:45.379 [DEBUG] [Thread-191005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:00:54.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:00:54.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:00: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
2026-04-12T15:00:56.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 0, 31), 5.93089, 67.8934, 0.0, 22.0201, 15.6619, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:00:56.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:00:31
2026-04-12T15:00:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:00:56.783 [DEBUG] [Thread-191006] [transport.py] [_log()] starting thread (client mode): 0xae52c100
2026-04-12T15:00:56.784 [DEBUG] [Thread-191006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:00:56.807 [DEBUG] [Thread-191006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:00:56.807 [INFO] [Thread-191006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:00:56.811 [DEBUG] [Thread-191006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:00:56.811 [DEBUG] [Thread-191006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:00:56.811 [DEBUG] [Thread-191006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:00:56.811 [DEBUG] [Thread-191006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:56.811 [DEBUG] [Thread-191006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] client lang: <none>
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] server lang: <none>
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] kex follows: False
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:00:56.812 [DEBUG] [Thread-191006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:00:56.813 [DEBUG] [Thread-191006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:00:56.813 [DEBUG] [Thread-191006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:00:56.813 [DEBUG] [Thread-191006] [transport.py] [_log()] Compression: none
2026-04-12T15:00:56.813 [DEBUG] [Thread-191006] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:00:56.833 [DEBUG] [Thread-191006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:00:56.833 [DEBUG] [Thread-191006] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:00:56.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:00:56.834 [DEBUG] [Thread-191006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:00:56.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:00:56.836 [DEBUG] [Thread-191006] [transport.py] [_log()] userauth is OK
2026-04-12T15:00:56.836 [DEBUG] [Thread-191006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:00:56.836 [DEBUG] [Thread-191006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:00:56.836 [DEBUG] [Thread-191006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:00:56.837 [DEBUG] [Thread-191006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:00:56.861 [INFO] [Thread-191006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:00:56.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:00:57.636 [DEBUG] [Thread-191006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:00:57.636 [DEBUG] [Thread-191006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:00:57.636 [DEBUG] [Thread-191006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:00:57.677 [DEBUG] [Thread-191006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:00:57.677 [DEBUG] [Thread-191006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:00:57.680 [DEBUG] [Thread-191006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:00:57.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:00:57.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:00:57.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:00:57.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:00:57.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:00:57.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:00:57.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:00:57.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:00:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:00:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.541773 -999.00  +15.40  24.08     73  +10.60 1 2 1 1 1   888    0 6.25 48.09 ----- 19.3 24.1 278.6 26.9 20.8 -11.7 20.3 -10.9 19.8 -13.1 20.9 -10.8
2026-04-12T15:00:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:00:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:00:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.541773
2026-04-12T15:00:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:00:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:00:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:00:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:00:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:00:57.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:00:31', tmtdew=5.93089, humidity=67.8934, cloud=0.0, wind=22.0201, temperature=15.6619, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:00:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:00:57.703 [DEBUG] [Thread-191006] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:00:57.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:00:57.797 [DEBUG] [Thread-191009] [transport.py] [_log()] starting thread (client mode): 0xa796aad0
2026-04-12T15:00:57.797 [DEBUG] [Thread-191009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:00:57.812 [DEBUG] [Thread-191009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:00:57.812 [INFO] [Thread-191009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:00:57.819 [DEBUG] [Thread-191009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:00:57.819 [DEBUG] [Thread-191009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:00:57.819 [DEBUG] [Thread-191009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] client lang: <none>
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] server lang: <none>
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] kex follows: False
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] Compression: none
2026-04-12T15:00:57.820 [DEBUG] [Thread-191009] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:00:57.875 [DEBUG] [Thread-191009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:00:57.876 [DEBUG] [Thread-191009] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:00:57.876 [DEBUG] [Thread-191009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:00:57.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:00:57.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:00:57.932 [DEBUG] [Thread-191009] [transport.py] [_log()] userauth is OK
2026-04-12T15:00:57.932 [DEBUG] [Thread-191009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:00:57.932 [DEBUG] [Thread-191009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:00:57.932 [DEBUG] [Thread-191009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:00:57.932 [DEBUG] [Thread-191009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:00:57.954 [INFO] [Thread-191009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:00:57.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:00:57.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:00:58.745 [DEBUG] [Thread-191009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:00:58.746 [DEBUG] [Thread-191009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:00:58.794 [DEBUG] [Thread-191009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:00:58.794 [DEBUG] [Thread-191009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:00:58.804 [DEBUG] [Thread-191009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:00:58.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:00:58.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:00:58.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:00:58.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:00:58.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:00:58.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:00:58.843 [DEBUG] [Thread-191009] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:01:00.421 [DEBUG] [Thread-191011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:01:15.475 [DEBUG] [Thread-191012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:01:28.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:01:28.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:01:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:01:30.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 1, 6), 5.82338, 68.3738, 0.0, 23.1844, 15.6452, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:01:30.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:01:06
2026-04-12T15:01:30.514 [DEBUG] [Thread-191013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:01:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:01:30.745 [DEBUG] [Thread-191014] [transport.py] [_log()] starting thread (client mode): 0xa796b490
2026-04-12T15:01:30.745 [DEBUG] [Thread-191014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:01:30.764 [DEBUG] [Thread-191014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:01:30.764 [INFO] [Thread-191014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:01:30.766 [DEBUG] [Thread-191014] [transport.py] [_log()] client lang: <none>
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] server lang: <none>
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] kex follows: False
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] Compression: none
2026-04-12T15:01:30.767 [DEBUG] [Thread-191014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:01:30.785 [DEBUG] [Thread-191014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:01:30.786 [DEBUG] [Thread-191014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:01:30.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:01:30.787 [DEBUG] [Thread-191014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:01:30.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:01:30.789 [DEBUG] [Thread-191014] [transport.py] [_log()] userauth is OK
2026-04-12T15:01:30.789 [DEBUG] [Thread-191014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:01:30.789 [DEBUG] [Thread-191014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:01:30.789 [DEBUG] [Thread-191014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:01:30.789 [DEBUG] [Thread-191014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:01:30.812 [INFO] [Thread-191014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:01:30.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:01:31.608 [DEBUG] [Thread-191014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:01:31.608 [DEBUG] [Thread-191014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:01:31.609 [DEBUG] [Thread-191014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:01:31.648 [DEBUG] [Thread-191014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:01:31.648 [DEBUG] [Thread-191014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:01:31.651 [DEBUG] [Thread-191014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:01:31.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:01:31.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:01:31.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:01:31.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:01:31.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:01:31.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:01:31.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:01:31.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:01:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:01:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.542120 -999.00  +15.10  16.58     71   +9.90 1 2 1 1 1   888    0 6.25 46.53 ----- 18.8 16.6 272.8 24.3 20.5 -12.8 20.1 -12.2 19.5 -11.5 20.7 -11.1
2026-04-12T15:01:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:01:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:01:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.542120
2026-04-12T15:01:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:01:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:01:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:01:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:01:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:01:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:01:06', tmtdew=5.82338, humidity=68.3738, cloud=0.0, wind=23.1844, temperature=15.6452, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:00:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:01:31.676 [DEBUG] [Thread-191014] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:01:31.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:01:31.769 [DEBUG] [Thread-191017] [transport.py] [_log()] starting thread (client mode): 0xb0f6e830
2026-04-12T15:01:31.769 [DEBUG] [Thread-191017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:01:31.784 [DEBUG] [Thread-191017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:01:31.784 [INFO] [Thread-191017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:01:31.791 [DEBUG] [Thread-191017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] client lang: <none>
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] server lang: <none>
2026-04-12T15:01:31.792 [DEBUG] [Thread-191017] [transport.py] [_log()] kex follows: False
2026-04-12T15:01:31.793 [DEBUG] [Thread-191017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:01:31.793 [DEBUG] [Thread-191017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:01:31.793 [DEBUG] [Thread-191017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:01:31.793 [DEBUG] [Thread-191017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:01:31.793 [DEBUG] [Thread-191017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:01:31.793 [DEBUG] [Thread-191017] [transport.py] [_log()] Compression: none
2026-04-12T15:01:31.793 [DEBUG] [Thread-191017] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:01:31.849 [DEBUG] [Thread-191017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:01:31.849 [DEBUG] [Thread-191017] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:01:31.850 [DEBUG] [Thread-191017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:01:31.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:01:31.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:01:31.909 [DEBUG] [Thread-191017] [transport.py] [_log()] userauth is OK
2026-04-12T15:01:31.909 [DEBUG] [Thread-191017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:01:31.909 [DEBUG] [Thread-191017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:01:31.909 [DEBUG] [Thread-191017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:01:31.909 [DEBUG] [Thread-191017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:01:31.928 [INFO] [Thread-191017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:01:31.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:01:31.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:01:32.726 [DEBUG] [Thread-191017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:01:32.727 [DEBUG] [Thread-191017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:01:32.775 [DEBUG] [Thread-191017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:01:32.776 [DEBUG] [Thread-191017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:01:32.785 [DEBUG] [Thread-191017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:01:32.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:01:32.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:01:32.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:01:32.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:01:32.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:01:32.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:01:32.822 [DEBUG] [Thread-191017] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:01:37.178 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:01:37.179 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:01:40.820 [DEBUG] [Thread-191019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:01:45.550 [DEBUG] [Thread-191020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:02:00.609 [DEBUG] [Thread-191021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:02:02.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:02:02.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:02:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:02:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 1, 42), 5.98489, 67.5819, 0.0, 22.6886, 16.1236, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:02:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:01:42
2026-04-12T15:02:04.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:02:04.693 [DEBUG] [Thread-191022] [transport.py] [_log()] starting thread (client mode): 0xae52c730
2026-04-12T15:02:04.693 [DEBUG] [Thread-191022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:02:04.714 [DEBUG] [Thread-191022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:02:04.714 [INFO] [Thread-191022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:02:04.717 [DEBUG] [Thread-191022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] client lang: <none>
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] server lang: <none>
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] kex follows: False
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] Compression: none
2026-04-12T15:02:04.718 [DEBUG] [Thread-191022] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:02:04.736 [DEBUG] [Thread-191022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:02:04.736 [DEBUG] [Thread-191022] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:02:04.737 [DEBUG] [Thread-191022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:02:04.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:02:04.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:02:04.739 [DEBUG] [Thread-191022] [transport.py] [_log()] userauth is OK
2026-04-12T15:02:04.739 [DEBUG] [Thread-191022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:02:04.740 [DEBUG] [Thread-191022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:02:04.740 [DEBUG] [Thread-191022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:02:04.740 [DEBUG] [Thread-191022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:02:04.761 [INFO] [Thread-191022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:02:04.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:02:05.562 [DEBUG] [Thread-191022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:02:05.562 [DEBUG] [Thread-191022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:02:05.563 [DEBUG] [Thread-191022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:02:05.603 [DEBUG] [Thread-191022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:02:05.603 [DEBUG] [Thread-191022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:02:05.607 [DEBUG] [Thread-191022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:02:05.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:02:05.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:02:05.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:02:05.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:02:05.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:02:05.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:02:05.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:02:05.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:02:05.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:02:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.542814 -999.00  +15.10  15.21     73  +10.30 1 2 1 1 1   888    0 5.89 37.60 ----- 13.9 15.2 280.7 26.8 20.3 -14.2 20.0 -13.6 19.5 -14.0 20.4 -13.8
2026-04-12T15:02:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:02:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:02:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.542814
2026-04-12T15:02:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:02:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:02:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:02:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:02:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:02:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:01:42', tmtdew=5.98489, humidity=67.5819, cloud=0.0, wind=22.6886, temperature=16.1236, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:01:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:02:05.636 [DEBUG] [Thread-191022] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:02:05.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:02:05.730 [DEBUG] [Thread-191025] [transport.py] [_log()] starting thread (client mode): 0xb0f6c3a0
2026-04-12T15:02:05.730 [DEBUG] [Thread-191025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:02:05.745 [DEBUG] [Thread-191025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:02:05.745 [INFO] [Thread-191025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:02:05.752 [DEBUG] [Thread-191025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:02:05.752 [DEBUG] [Thread-191025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] client lang: <none>
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] server lang: <none>
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] kex follows: False
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] Compression: none
2026-04-12T15:02:05.753 [DEBUG] [Thread-191025] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:02:05.814 [DEBUG] [Thread-191025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:02:05.815 [DEBUG] [Thread-191025] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:02:05.816 [DEBUG] [Thread-191025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:02:05.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:02:05.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:02:05.874 [DEBUG] [Thread-191025] [transport.py] [_log()] userauth is OK
2026-04-12T15:02:05.874 [DEBUG] [Thread-191025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:02:05.874 [DEBUG] [Thread-191025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:02:05.874 [DEBUG] [Thread-191025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:02:05.874 [DEBUG] [Thread-191025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:02:05.894 [INFO] [Thread-191025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:02:05.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:02:05.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:02:06.722 [DEBUG] [Thread-191025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:02:06.722 [DEBUG] [Thread-191025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:02:06.770 [DEBUG] [Thread-191025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:02:06.770 [DEBUG] [Thread-191025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:02:06.779 [DEBUG] [Thread-191025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:02:06.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:02:06.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:02:06.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:02:06.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:02:06.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:02:06.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:02:06.816 [DEBUG] [Thread-191025] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:02:15.640 [DEBUG] [Thread-191027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:02:30.698 [DEBUG] [Thread-191028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:02:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:02:36.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:02:36.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:02:37.319 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:02:37.320 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:02:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 2, 17), 5.8381, 68.3071, 0.0, 18.2268, 15.5448, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:02:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:02:17
2026-04-12T15:02:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:02:38.732 [DEBUG] [Thread-191029] [transport.py] [_log()] starting thread (client mode): 0xb0fcd3f0
2026-04-12T15:02:38.732 [DEBUG] [Thread-191029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:02:38.752 [DEBUG] [Thread-191029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:02:38.752 [INFO] [Thread-191029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:38.755 [DEBUG] [Thread-191029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] client lang: <none>
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] server lang: <none>
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] kex follows: False
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:02:38.756 [DEBUG] [Thread-191029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:02:38.757 [DEBUG] [Thread-191029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:02:38.757 [DEBUG] [Thread-191029] [transport.py] [_log()] Compression: none
2026-04-12T15:02:38.757 [DEBUG] [Thread-191029] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:02:38.776 [DEBUG] [Thread-191029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:02:38.777 [DEBUG] [Thread-191029] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:02:38.778 [DEBUG] [Thread-191029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:02:38.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:02:38.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:02:38.780 [DEBUG] [Thread-191029] [transport.py] [_log()] userauth is OK
2026-04-12T15:02:38.780 [DEBUG] [Thread-191029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:02:38.780 [DEBUG] [Thread-191029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:02:38.781 [DEBUG] [Thread-191029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:02:38.781 [DEBUG] [Thread-191029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:02:38.816 [INFO] [Thread-191029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:02:38.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:02:39.623 [DEBUG] [Thread-191029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:02:39.623 [DEBUG] [Thread-191029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:02:39.624 [DEBUG] [Thread-191029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:02:39.664 [DEBUG] [Thread-191029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:02:39.664 [DEBUG] [Thread-191029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:02:39.667 [DEBUG] [Thread-191029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:02:39.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:02:39.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:02:39.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:02:39.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:02:39.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:02:39.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:02:39.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:02:39.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:02:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:02:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.543162 -999.00  +15.10  16.55     73  +10.40 1 2 1 1 1   888    0 5.73 36.34 ----- 12.1 16.6 264.4 20.0 20.3 -15.3 19.9 -14.6 19.5 -13.6 20.3 -14.3
2026-04-12T15:02:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:02:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:02:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.543162
2026-04-12T15:02:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:02:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:02:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:02:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:02:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:02:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:02:17', tmtdew=5.8381, humidity=68.3071, cloud=0.0, wind=18.2268, temperature=15.5448, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:02:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:02:39.696 [DEBUG] [Thread-191029] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:02:39.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:02:39.790 [DEBUG] [Thread-191032] [transport.py] [_log()] starting thread (client mode): 0xae52c820
2026-04-12T15:02:39.790 [DEBUG] [Thread-191032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:02:39.805 [DEBUG] [Thread-191032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:02:39.805 [INFO] [Thread-191032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:02:39.813 [DEBUG] [Thread-191032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:02:39.813 [DEBUG] [Thread-191032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:02:39.813 [DEBUG] [Thread-191032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:02:39.813 [DEBUG] [Thread-191032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:39.813 [DEBUG] [Thread-191032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:02:39.813 [DEBUG] [Thread-191032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] client lang: <none>
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] server lang: <none>
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] kex follows: False
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:02:39.814 [DEBUG] [Thread-191032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:02:39.815 [DEBUG] [Thread-191032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:02:39.815 [DEBUG] [Thread-191032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:02:39.815 [DEBUG] [Thread-191032] [transport.py] [_log()] Compression: none
2026-04-12T15:02:39.815 [DEBUG] [Thread-191032] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:02:39.876 [DEBUG] [Thread-191032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:02:39.877 [DEBUG] [Thread-191032] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:02:39.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:02:39.879 [DEBUG] [Thread-191032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:02:39.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:02:39.934 [DEBUG] [Thread-191032] [transport.py] [_log()] userauth is OK
2026-04-12T15:02:39.934 [DEBUG] [Thread-191032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:02:39.934 [DEBUG] [Thread-191032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:02:39.935 [DEBUG] [Thread-191032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:02:39.935 [DEBUG] [Thread-191032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:02:39.954 [INFO] [Thread-191032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:02:39.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:02:39.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:02:40.756 [DEBUG] [Thread-191032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:02:40.756 [DEBUG] [Thread-191032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:02:40.804 [DEBUG] [Thread-191032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:02:40.805 [DEBUG] [Thread-191032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:02:40.818 [DEBUG] [Thread-191032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:02:40.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:02:40.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:02:40.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:02:40.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:02:40.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:02:40.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:02:40.860 [DEBUG] [Thread-191032] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:02:40.873 [DEBUG] [Thread-191034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:02:45.737 [DEBUG] [Thread-191035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:00.798 [DEBUG] [Thread-191036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:10.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:03:10.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:03:10.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:03:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 2, 53), 6.20031, 66.5868, 0.0, 18.702, 15.9902, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:03:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:02:53
2026-04-12T15:03:12.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:03:12.688 [DEBUG] [Thread-191037] [transport.py] [_log()] starting thread (client mode): 0xae537b50
2026-04-12T15:03:12.688 [DEBUG] [Thread-191037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:03:12.709 [DEBUG] [Thread-191037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:03:12.709 [INFO] [Thread-191037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:03:12.712 [DEBUG] [Thread-191037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:03:12.712 [DEBUG] [Thread-191037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] client lang: <none>
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] server lang: <none>
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] kex follows: False
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] Compression: none
2026-04-12T15:03:12.713 [DEBUG] [Thread-191037] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:03:12.730 [DEBUG] [Thread-191037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:03:12.730 [DEBUG] [Thread-191037] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:03:12.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:03:12.732 [DEBUG] [Thread-191037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:03:12.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:03:12.734 [DEBUG] [Thread-191037] [transport.py] [_log()] userauth is OK
2026-04-12T15:03:12.734 [DEBUG] [Thread-191037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:03:12.734 [DEBUG] [Thread-191037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:03:12.734 [DEBUG] [Thread-191037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:03:12.734 [DEBUG] [Thread-191037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:03:12.752 [INFO] [Thread-191037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:03:12.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:03:13.648 [DEBUG] [Thread-191037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:03:13.649 [DEBUG] [Thread-191037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:03:13.649 [DEBUG] [Thread-191037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:03:13.690 [DEBUG] [Thread-191037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:03:13.690 [DEBUG] [Thread-191037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:03:13.694 [DEBUG] [Thread-191037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:03:13.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:03:13.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:03:13.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:03:13.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:03:13.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:03:13.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:03:13.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:03:13.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:03:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:03:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.543509 -999.00  +15.20   8.80     73  +10.50 1 2 1 1 1   888    0 5.71 34.48 ----- 10.6 8.8 279.0 15.6 20.4 -15.5 19.9 -15.1 19.5 -14.3 20.2 -14.4
2026-04-12T15:03:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:03:13.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:03:13.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.543509
2026-04-12T15:03:13.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:03:13.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:03:13.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:03:13.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:03:13.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:03:13.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:02:53', tmtdew=6.20031, humidity=66.5868, cloud=0.0, wind=18.702, temperature=15.9902, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:02:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:03:13.715 [DEBUG] [Thread-191037] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:03:13.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:03:13.809 [DEBUG] [Thread-191040] [transport.py] [_log()] starting thread (client mode): 0xae52c730
2026-04-12T15:03:13.809 [DEBUG] [Thread-191040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:03:13.823 [DEBUG] [Thread-191040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:03:13.823 [INFO] [Thread-191040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:03:13.831 [DEBUG] [Thread-191040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] client lang: <none>
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] server lang: <none>
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] kex follows: False
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:03:13.832 [DEBUG] [Thread-191040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:03:13.833 [DEBUG] [Thread-191040] [transport.py] [_log()] Compression: none
2026-04-12T15:03:13.833 [DEBUG] [Thread-191040] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:03:13.892 [DEBUG] [Thread-191040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:03:13.892 [DEBUG] [Thread-191040] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:03:13.892 [DEBUG] [Thread-191040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:03:13.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:03:13.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:03:13.953 [DEBUG] [Thread-191040] [transport.py] [_log()] userauth is OK
2026-04-12T15:03:13.953 [DEBUG] [Thread-191040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:03:13.953 [DEBUG] [Thread-191040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:03:13.953 [DEBUG] [Thread-191040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:03:13.953 [DEBUG] [Thread-191040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:03:13.972 [INFO] [Thread-191040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:03:13.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:03:13.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:03:14.844 [DEBUG] [Thread-191040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:03:14.845 [DEBUG] [Thread-191040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:03:14.893 [DEBUG] [Thread-191040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:03:14.893 [DEBUG] [Thread-191040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:03:14.903 [DEBUG] [Thread-191040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:03:14.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:03:14.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:03:14.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
2026-04-12T15:03:14.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:03:14.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:03:14.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:03:14.940 [DEBUG] [Thread-191040] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:03:15.834 [DEBUG] [Thread-191042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:30.888 [DEBUG] [Thread-191043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:37.461 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:37.462 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:40.923 [DEBUG] [Thread-191044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:44.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:03:44.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:03:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:03:45.927 [DEBUG] [Thread-191045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:03:46.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 3, 28), 5.90884, 67.4397, 0.0, 19.3381, 15.3448, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:03:46.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:03:28
2026-04-12T15:03:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:03:46.765 [DEBUG] [Thread-191046] [transport.py] [_log()] starting thread (client mode): 0xb0fcd450
2026-04-12T15:03:46.765 [DEBUG] [Thread-191046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:03:46.784 [DEBUG] [Thread-191046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:03:46.784 [INFO] [Thread-191046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:03:46.787 [DEBUG] [Thread-191046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] client lang: <none>
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] server lang: <none>
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] kex follows: False
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:03:46.788 [DEBUG] [Thread-191046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:03:46.789 [DEBUG] [Thread-191046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:03:46.789 [DEBUG] [Thread-191046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:03:46.789 [DEBUG] [Thread-191046] [transport.py] [_log()] Compression: none
2026-04-12T15:03:46.789 [DEBUG] [Thread-191046] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:03:46.808 [DEBUG] [Thread-191046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:03:46.808 [DEBUG] [Thread-191046] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:03:46.809 [DEBUG] [Thread-191046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:03:46.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:03:46.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:03:46.811 [DEBUG] [Thread-191046] [transport.py] [_log()] userauth is OK
2026-04-12T15:03:46.812 [DEBUG] [Thread-191046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:03:46.812 [DEBUG] [Thread-191046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:03:46.812 [DEBUG] [Thread-191046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:03:46.812 [DEBUG] [Thread-191046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:03:46.835 [INFO] [Thread-191046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:03:46.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:03:47.593 [DEBUG] [Thread-191046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:03:47.593 [DEBUG] [Thread-191046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:03:47.593 [DEBUG] [Thread-191046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:03:47.634 [DEBUG] [Thread-191046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:03:47.634 [DEBUG] [Thread-191046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:03:47.637 [DEBUG] [Thread-191046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:03:47.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:03:47.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:03:47.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:03:47.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:03:47.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:03:47.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:03:47.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:03:47.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:03:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:03:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.543856 -999.00  +15.20  18.91     72  +10.20 1 2 1 1 1   888    0 5.81 32.72 ----- 16.4 18.9 275.6 20.8 20.3 -16.5 20.0 -15.2 19.7 -14.4 20.4 -14.4
2026-04-12T15:03:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:03:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:03:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.543856
2026-04-12T15:03:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:03:47.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:03:47.664 [DEBUG] [Thread-191046] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:03:47.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:03:47.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:03:47.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:03:47.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:03:28', tmtdew=5.90884, humidity=67.4397, cloud=0.0, wind=19.3381, temperature=15.3448, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:03:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:03:47.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:03:47.753 [DEBUG] [Thread-191049] [transport.py] [_log()] starting thread (client mode): 0xb0fcd4b0
2026-04-12T15:03:47.754 [DEBUG] [Thread-191049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:03:47.769 [DEBUG] [Thread-191049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:03:47.769 [INFO] [Thread-191049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:03:47.776 [DEBUG] [Thread-191049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] client lang: <none>
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] server lang: <none>
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] kex follows: False
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] Compression: none
2026-04-12T15:03:47.777 [DEBUG] [Thread-191049] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:03:47.832 [DEBUG] [Thread-191049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:03:47.832 [DEBUG] [Thread-191049] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:03:47.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:03:47.833 [DEBUG] [Thread-191049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:03:47.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:03:47.890 [DEBUG] [Thread-191049] [transport.py] [_log()] userauth is OK
2026-04-12T15:03:47.890 [DEBUG] [Thread-191049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:03:47.890 [DEBUG] [Thread-191049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:03:47.890 [DEBUG] [Thread-191049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:03:47.890 [DEBUG] [Thread-191049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:03:47.909 [INFO] [Thread-191049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:03:47.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:03:47.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:03:48.716 [DEBUG] [Thread-191049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:03:48.717 [DEBUG] [Thread-191049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:03:48.765 [DEBUG] [Thread-191049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:03:48.765 [DEBUG] [Thread-191049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:03:48.775 [DEBUG] [Thread-191049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:03:48.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:03:48.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:03:48.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:03:48.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:03:48.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:03:48.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:03:48.810 [DEBUG] [Thread-191049] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:04:00.962 [DEBUG] [Thread-191051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:04:16.014 [DEBUG] [Thread-191052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:04:18.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:04:18.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:04:18.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:04:20.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 4, 4), 5.91533, 67.39, 0.0, 18.5267, 15.2454, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:04:20.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:04:04
2026-04-12T15:04:20.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:04:20.627 [DEBUG] [Thread-191053] [transport.py] [_log()] starting thread (client mode): 0xb0fcc190
2026-04-12T15:04:20.627 [DEBUG] [Thread-191053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:04:20.648 [DEBUG] [Thread-191053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:04:20.649 [INFO] [Thread-191053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:04:20.651 [DEBUG] [Thread-191053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:04:20.651 [DEBUG] [Thread-191053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:04:20.651 [DEBUG] [Thread-191053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:04:20.651 [DEBUG] [Thread-191053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:20.651 [DEBUG] [Thread-191053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] client lang: <none>
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] server lang: <none>
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] kex follows: False
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] Compression: none
2026-04-12T15:04:20.652 [DEBUG] [Thread-191053] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:04:20.671 [DEBUG] [Thread-191053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:04:20.671 [DEBUG] [Thread-191053] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:04:20.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:04:20.672 [DEBUG] [Thread-191053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:04:20.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:04:20.673 [DEBUG] [Thread-191053] [transport.py] [_log()] userauth is OK
2026-04-12T15:04:20.674 [DEBUG] [Thread-191053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:04:20.674 [DEBUG] [Thread-191053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:04:20.674 [DEBUG] [Thread-191053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:04:20.674 [DEBUG] [Thread-191053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:04:20.697 [INFO] [Thread-191053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:04:20.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:04:21.480 [DEBUG] [Thread-191053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:04:21.480 [DEBUG] [Thread-191053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:04:21.480 [DEBUG] [Thread-191053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:04:21.520 [DEBUG] [Thread-191053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:04:21.521 [DEBUG] [Thread-191053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:04:21.523 [DEBUG] [Thread-191053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:04:21.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:04:21.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:04:21.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:04:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:04:21.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:04:21.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:04:21.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:04:21.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:04:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:04:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.544203 -999.00  +15.10  20.28     71   +9.90 1 2 1 1 1   888    0 5.66 29.68 ----- 15.4 20.3 268.2 24.1 20.3 -17.9 19.9 -16.0 19.4 -15.6 20.4 -15.0
2026-04-12T15:04:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:04:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:04:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.544203
2026-04-12T15:04:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:04:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:04:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:04:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:04:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:04:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:04:04', tmtdew=5.91533, humidity=67.39, cloud=0.0, wind=18.5267, temperature=15.2454, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:03:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:04:21.549 [DEBUG] [Thread-191053] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:04:21.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:04:21.645 [DEBUG] [Thread-191056] [transport.py] [_log()] starting thread (client mode): 0xb0fe9900
2026-04-12T15:04:21.645 [DEBUG] [Thread-191056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:04:21.663 [DEBUG] [Thread-191056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:04:21.663 [INFO] [Thread-191056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:04:21.670 [DEBUG] [Thread-191056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:04:21.670 [DEBUG] [Thread-191056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] client lang: <none>
2026-04-12T15:04:21.671 [DEBUG] [Thread-191056] [transport.py] [_log()] server lang: <none>
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] kex follows: False
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] Compression: none
2026-04-12T15:04:21.672 [DEBUG] [Thread-191056] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:04:21.731 [DEBUG] [Thread-191056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:04:21.731 [DEBUG] [Thread-191056] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:04:21.732 [DEBUG] [Thread-191056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:04:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:04:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:04:21.791 [DEBUG] [Thread-191056] [transport.py] [_log()] userauth is OK
2026-04-12T15:04:21.791 [DEBUG] [Thread-191056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:04:21.791 [DEBUG] [Thread-191056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:04:21.791 [DEBUG] [Thread-191056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:04:21.791 [DEBUG] [Thread-191056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:04:21.817 [INFO] [Thread-191056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:04:21.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:04:21.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:04:22.619 [DEBUG] [Thread-191056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:04:22.620 [DEBUG] [Thread-191056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:04:22.668 [DEBUG] [Thread-191056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:04:22.668 [DEBUG] [Thread-191056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:04:22.677 [DEBUG] [Thread-191056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:04:22.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:04:22.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:04:22.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:04:22.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:04:22.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:04:22.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:04:22.711 [DEBUG] [Thread-191056] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:04:31.045 [DEBUG] [Thread-191058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:04:37.602 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:04:37.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:04:40.983 [DEBUG] [Thread-191059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:04:46.099 [DEBUG] [Thread-191060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:04:52.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:04:52.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:04:52.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:04:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 4, 39), 6.40301, 65.6587, 0.0, 23.8176, 15.8575, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:04:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:04:39
2026-04-12T15:04:54.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:04:54.529 [DEBUG] [Thread-191061] [transport.py] [_log()] starting thread (client mode): 0xb0f6dae0
2026-04-12T15:04:54.529 [DEBUG] [Thread-191061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:04:54.550 [DEBUG] [Thread-191061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:04:54.550 [INFO] [Thread-191061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:04:54.554 [DEBUG] [Thread-191061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:04:54.554 [DEBUG] [Thread-191061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:04:54.554 [DEBUG] [Thread-191061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:04:54.554 [DEBUG] [Thread-191061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:54.554 [DEBUG] [Thread-191061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:54.554 [DEBUG] [Thread-191061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:54.554 [DEBUG] [Thread-191061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] client lang: <none>
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] server lang: <none>
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] kex follows: False
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:04:54.555 [DEBUG] [Thread-191061] [transport.py] [_log()] Compression: none
2026-04-12T15:04:54.556 [DEBUG] [Thread-191061] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:04:54.575 [DEBUG] [Thread-191061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:04:54.576 [DEBUG] [Thread-191061] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:04:54.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:04:54.577 [DEBUG] [Thread-191061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:04:54.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:04:54.579 [DEBUG] [Thread-191061] [transport.py] [_log()] userauth is OK
2026-04-12T15:04:54.579 [DEBUG] [Thread-191061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:04:54.579 [DEBUG] [Thread-191061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:04:54.579 [DEBUG] [Thread-191061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:04:54.579 [DEBUG] [Thread-191061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:04:54.596 [INFO] [Thread-191061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:04:54.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:04:55.365 [DEBUG] [Thread-191061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:04:55.366 [DEBUG] [Thread-191061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:04:55.366 [DEBUG] [Thread-191061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:04:55.407 [DEBUG] [Thread-191061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:04:55.407 [DEBUG] [Thread-191061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:04:55.411 [DEBUG] [Thread-191061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:04:55.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:04:55.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:04:55.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:04:55.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:04:55.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:04:55.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:04:55.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:04:55.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:04:55.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:04:55.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.544551 -999.00  +14.90  17.89     71   +9.80 1 2 1 1 1   888    0 5.78 29.47 ----- 13.2 17.9 275.0 23.3 20.2 -17.9 19.8 -16.8 19.2 -18.9 20.3 -16.4
2026-04-12T15:04:55.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:04:55.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:04:55.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.544551
2026-04-12T15:04:55.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:04:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:04:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:04:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:04:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:04:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:04:39', tmtdew=6.40301, humidity=65.6587, cloud=0.0, wind=23.8176, temperature=15.8575, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:04:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:04:55.435 [DEBUG] [Thread-191061] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:04:55.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:04:55.526 [DEBUG] [Thread-191064] [transport.py] [_log()] starting thread (client mode): 0xb0f6c970
2026-04-12T15:04:55.527 [DEBUG] [Thread-191064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:04:55.540 [DEBUG] [Thread-191064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:04:55.540 [INFO] [Thread-191064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] client lang: <none>
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] server lang: <none>
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] kex follows: False
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] Compression: none
2026-04-12T15:04:55.548 [DEBUG] [Thread-191064] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:04:55.611 [DEBUG] [Thread-191064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:04:55.611 [DEBUG] [Thread-191064] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:04:55.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:04:55.612 [DEBUG] [Thread-191064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:04:55.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:04:55.666 [DEBUG] [Thread-191064] [transport.py] [_log()] userauth is OK
2026-04-12T15:04:55.666 [DEBUG] [Thread-191064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:04:55.666 [DEBUG] [Thread-191064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:04:55.667 [DEBUG] [Thread-191064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:04:55.667 [DEBUG] [Thread-191064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:04:55.685 [INFO] [Thread-191064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:04:55.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:04:55.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:04:56.504 [DEBUG] [Thread-191064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:04:56.504 [DEBUG] [Thread-191064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:04:56.552 [DEBUG] [Thread-191064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:04:56.552 [DEBUG] [Thread-191064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:04:56.562 [DEBUG] [Thread-191064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:04:56.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:04:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:04:56.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:04:56.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:04:56.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:04:56.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:04:56.599 [DEBUG] [Thread-191064] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:05:01.140 [DEBUG] [Thread-191066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:05:16.190 [DEBUG] [Thread-191067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:05:26.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:05:26.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:05:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:05:27.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 5, 14), 5.85114, 67.9922, 0.0, 18.509, 15.2956, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:05:27.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:05:14
2026-04-12T15:05:28.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:05:28.450 [DEBUG] [Thread-191068] [transport.py] [_log()] starting thread (client mode): 0xb0f6de40
2026-04-12T15:05:28.450 [DEBUG] [Thread-191068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:05:28.469 [DEBUG] [Thread-191068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:05:28.470 [INFO] [Thread-191068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] client lang: <none>
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] server lang: <none>
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] kex follows: False
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:05:28.471 [DEBUG] [Thread-191068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:05:28.472 [DEBUG] [Thread-191068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:05:28.472 [DEBUG] [Thread-191068] [transport.py] [_log()] Compression: none
2026-04-12T15:05:28.472 [DEBUG] [Thread-191068] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:05:28.480 [DEBUG] [Thread-191068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:05:28.480 [DEBUG] [Thread-191068] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:05:28.481 [DEBUG] [Thread-191068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:05:28.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:05:28.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:05:28.483 [DEBUG] [Thread-191068] [transport.py] [_log()] userauth is OK
2026-04-12T15:05:28.483 [DEBUG] [Thread-191068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:05:28.483 [DEBUG] [Thread-191068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:05:28.483 [DEBUG] [Thread-191068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:05:28.483 [DEBUG] [Thread-191068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:05:28.508 [INFO] [Thread-191068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:05:28.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:05:29.538 [DEBUG] [Thread-191068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:05:29.538 [DEBUG] [Thread-191068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:05:29.539 [DEBUG] [Thread-191068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:05:29.579 [DEBUG] [Thread-191068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:05:29.579 [DEBUG] [Thread-191068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:05:29.583 [DEBUG] [Thread-191068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:05:29.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:05:29.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:05:29.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:05:29.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:05:29.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:05:29.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:05:29.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:05:29.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:05:29.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:05:29.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.544898 -999.00  +14.90  17.92     71   +9.80 1 2 1 1 1   888    0 5.66 29.53 ----- 14.2 17.9 277.0 22.3 20.2 -17.9 19.8 -16.5 19.3 -14.3 20.2 -15.4
2026-04-12T15:05:29.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:05:29.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:05:29.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.544898
2026-04-12T15:05:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:05:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:05:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:05:29.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:05:29.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:05:29.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:05:14', tmtdew=5.85114, humidity=67.9922, cloud=0.0, wind=18.509, temperature=15.2956, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:04:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:05:29.611 [DEBUG] [Thread-191068] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:05:29.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:05:29.704 [DEBUG] [Thread-191071] [transport.py] [_log()] starting thread (client mode): 0xb0f6db40
2026-04-12T15:05:29.704 [DEBUG] [Thread-191071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:05:29.721 [DEBUG] [Thread-191071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:05:29.721 [INFO] [Thread-191071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:05:29.728 [DEBUG] [Thread-191071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] client lang: <none>
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] server lang: <none>
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] kex follows: False
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] Compression: none
2026-04-12T15:05:29.729 [DEBUG] [Thread-191071] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:05:29.787 [DEBUG] [Thread-191071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:05:29.788 [DEBUG] [Thread-191071] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:05:29.788 [DEBUG] [Thread-191071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:05:29.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:05:29.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:05:29.847 [DEBUG] [Thread-191071] [transport.py] [_log()] userauth is OK
2026-04-12T15:05:29.848 [DEBUG] [Thread-191071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:05:29.848 [DEBUG] [Thread-191071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:05:29.848 [DEBUG] [Thread-191071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:05:29.848 [DEBUG] [Thread-191071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:05:29.873 [INFO] [Thread-191071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:05:29.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:05:29.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:05:30.672 [DEBUG] [Thread-191071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:05:30.673 [DEBUG] [Thread-191071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:05:30.722 [DEBUG] [Thread-191071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:05:30.722 [DEBUG] [Thread-191071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:05:30.732 [DEBUG] [Thread-191071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:05:30.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:05:30.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:05:30.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:05:30.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:05:30.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:05:30.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:05:30.771 [DEBUG] [Thread-191071] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:05:31.230 [DEBUG] [Thread-191073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:05:37.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:05:37.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:05:41.036 [DEBUG] [Thread-191074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:05:46.293 [DEBUG] [Thread-191075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:06:00.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:06:00.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:06:00.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:06:01.331 [DEBUG] [Thread-191076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:06:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 5, 50), 6.25312, 66.2884, 0.0, 21.101, 15.6918, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:06:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:05:50
2026-04-12T15:06:02.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:06:02.707 [DEBUG] [Thread-191077] [transport.py] [_log()] starting thread (client mode): 0xb0fe8130
2026-04-12T15:06:02.707 [DEBUG] [Thread-191077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:06:02.728 [DEBUG] [Thread-191077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:06:02.728 [INFO] [Thread-191077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:06:02.731 [DEBUG] [Thread-191077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] client lang: <none>
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] server lang: <none>
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] kex follows: False
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:06:02.732 [DEBUG] [Thread-191077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:06:02.733 [DEBUG] [Thread-191077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:06:02.733 [DEBUG] [Thread-191077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:06:02.733 [DEBUG] [Thread-191077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:06:02.733 [DEBUG] [Thread-191077] [transport.py] [_log()] Compression: none
2026-04-12T15:06:02.733 [DEBUG] [Thread-191077] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:06:02.752 [DEBUG] [Thread-191077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:06:02.753 [DEBUG] [Thread-191077] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:06:02.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:06:02.754 [DEBUG] [Thread-191077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:06:02.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:06:02.756 [DEBUG] [Thread-191077] [transport.py] [_log()] userauth is OK
2026-04-12T15:06:02.757 [DEBUG] [Thread-191077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:06:02.757 [DEBUG] [Thread-191077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:06:02.757 [DEBUG] [Thread-191077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:06:02.757 [DEBUG] [Thread-191077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:06:02.781 [INFO] [Thread-191077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:06:02.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:06:03.601 [DEBUG] [Thread-191077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:06:03.601 [DEBUG] [Thread-191077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:06:03.602 [DEBUG] [Thread-191077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:06:03.642 [DEBUG] [Thread-191077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:06:03.642 [DEBUG] [Thread-191077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:06:03.646 [DEBUG] [Thread-191077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:06:03.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:06:03.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:06:03.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:06:03.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:06:03.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:06:03.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:06:03.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:06:03.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:06:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:06:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.545245 -999.00  +15.00  18.63     72  +10.10 1 2 1 1 1   888    0 5.56 24.08 ----- 16.6 18.6 278.4 23.7 20.2 -17.4 19.8 -16.9 19.5 -14.5 20.2 -16.6
2026-04-12T15:06:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:06:03.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:06:03.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.545245
2026-04-12T15:06:03.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:06:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:06:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:06:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:06:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:06:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:05:50', tmtdew=6.25312, humidity=66.2884, cloud=0.0, wind=21.101, temperature=15.6918, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:05:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:06:03.671 [DEBUG] [Thread-191077] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:06:03.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:06:03.764 [DEBUG] [Thread-191080] [transport.py] [_log()] starting thread (client mode): 0xb0fcd690
2026-04-12T15:06:03.764 [DEBUG] [Thread-191080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:06:03.779 [DEBUG] [Thread-191080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:06:03.780 [INFO] [Thread-191080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:06:03.788 [DEBUG] [Thread-191080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:06:03.788 [DEBUG] [Thread-191080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:06:03.788 [DEBUG] [Thread-191080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:06:03.788 [DEBUG] [Thread-191080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] client lang: <none>
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] server lang: <none>
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] kex follows: False
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:06:03.789 [DEBUG] [Thread-191080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:06:03.790 [DEBUG] [Thread-191080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:06:03.790 [DEBUG] [Thread-191080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:06:03.790 [DEBUG] [Thread-191080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:06:03.790 [DEBUG] [Thread-191080] [transport.py] [_log()] Compression: none
2026-04-12T15:06:03.790 [DEBUG] [Thread-191080] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:06:03.848 [DEBUG] [Thread-191080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:06:03.849 [DEBUG] [Thread-191080] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:06:03.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:06:03.851 [DEBUG] [Thread-191080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:06:03.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:06:03.909 [DEBUG] [Thread-191080] [transport.py] [_log()] userauth is OK
2026-04-12T15:06:03.909 [DEBUG] [Thread-191080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:06:03.910 [DEBUG] [Thread-191080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:06:03.910 [DEBUG] [Thread-191080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:06:03.919 [DEBUG] [Thread-191080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:06:03.939 [INFO] [Thread-191080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:06:03.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:06:03.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:06:04.741 [DEBUG] [Thread-191080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:06:04.742 [DEBUG] [Thread-191080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:06:04.791 [DEBUG] [Thread-191080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:06:04.791 [DEBUG] [Thread-191080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:06:04.800 [DEBUG] [Thread-191080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:06:04.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:06:04.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:06:04.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:06:04.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:06:04.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:06:04.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:06:04.839 [DEBUG] [Thread-191080] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:06:16.365 [DEBUG] [Thread-191082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:06:31.417 [DEBUG] [Thread-191083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:06:34.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:06:34.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:06:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:06:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 6, 25), 5.90761, 67.6576, 0.0, 25.8318, 14.9462, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:06:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:06:25
2026-04-12T15:06:36.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:06:36.672 [DEBUG] [Thread-191084] [transport.py] [_log()] starting thread (client mode): 0xb0fead70
2026-04-12T15:06:36.672 [DEBUG] [Thread-191084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:06:36.692 [DEBUG] [Thread-191084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:06:36.692 [INFO] [Thread-191084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] client lang: <none>
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] server lang: <none>
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] kex follows: False
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:06:36.695 [DEBUG] [Thread-191084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:06:36.696 [DEBUG] [Thread-191084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:06:36.696 [DEBUG] [Thread-191084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:06:36.696 [DEBUG] [Thread-191084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:06:36.696 [DEBUG] [Thread-191084] [transport.py] [_log()] Compression: none
2026-04-12T15:06:36.696 [DEBUG] [Thread-191084] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:06:36.713 [DEBUG] [Thread-191084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:06:36.713 [DEBUG] [Thread-191084] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:06:36.714 [DEBUG] [Thread-191084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:06:36.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:06:36.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:06:36.716 [DEBUG] [Thread-191084] [transport.py] [_log()] userauth is OK
2026-04-12T15:06:36.716 [DEBUG] [Thread-191084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:06:36.716 [DEBUG] [Thread-191084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:06:36.717 [DEBUG] [Thread-191084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:06:36.717 [DEBUG] [Thread-191084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:06:36.735 [INFO] [Thread-191084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:06:36.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:06:37.559 [DEBUG] [Thread-191084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:06:37.560 [DEBUG] [Thread-191084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:06:37.560 [DEBUG] [Thread-191084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:06:37.601 [DEBUG] [Thread-191084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:06:37.601 [DEBUG] [Thread-191084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:06:37.605 [DEBUG] [Thread-191084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:06:37.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:06:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:06:37.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:06:37.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:06:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:06:37.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:06:37.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:06:37.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:06:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:06:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.545592 -999.00  +15.00  19.86     72  +10.20 1 2 1 1 1   888    0 5.49 19.69 ----- 14.8 19.9 273.0 24.0 20.2 -17.5 19.8 -16.5 19.6 -14.8 20.4 -14.9
2026-04-12T15:06:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:06:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:06:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.545592
2026-04-12T15:06:37.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:06:37.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:06:37.632 [DEBUG] [Thread-191084] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:06:37.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:06:37.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:06:37.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:06:37.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:06:25', tmtdew=5.90761, humidity=67.6576, cloud=0.0, wind=25.8318, temperature=14.9462, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:05:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:06:37.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:06:37.731 [DEBUG] [Thread-191087] [transport.py] [_log()] starting thread (client mode): 0xae5379a0
2026-04-12T15:06:37.732 [DEBUG] [Thread-191087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:06:37.746 [DEBUG] [Thread-191087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:06:37.746 [INFO] [Thread-191087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] client lang: <none>
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] server lang: <none>
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] kex follows: False
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] Compression: none
2026-04-12T15:06:37.754 [DEBUG] [Thread-191087] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:06:37.811 [DEBUG] [Thread-191087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:06:37.812 [DEBUG] [Thread-191087] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:06:37.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:06:37.813 [DEBUG] [Thread-191087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:06:37.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:06:37.867 [DEBUG] [Thread-191087] [transport.py] [_log()] userauth is OK
2026-04-12T15:06:37.867 [DEBUG] [Thread-191087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:06:37.867 [DEBUG] [Thread-191087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:06:37.867 [DEBUG] [Thread-191087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:06:37.867 [DEBUG] [Thread-191087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:06:37.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:06:37.886 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:06:37.889 [INFO] [Thread-191087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:06:37.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:06:37.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:06:38.684 [DEBUG] [Thread-191087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:06:38.685 [DEBUG] [Thread-191087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:06:38.733 [DEBUG] [Thread-191087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:06:38.734 [DEBUG] [Thread-191087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:06:38.743 [DEBUG] [Thread-191087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:06:38.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:06:38.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:06:38.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:06:38.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:06:38.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:06:38.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:06:38.781 [DEBUG] [Thread-191087] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:06:41.090 [DEBUG] [Thread-191089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:06:46.457 [DEBUG] [Thread-191090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:01.513 [DEBUG] [Thread-191091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:08.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:07:08.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:07:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:07:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 7, 3), 5.81003, 68.1051, 0.0, 26.1846, 14.9628, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:07:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:07:03
2026-04-12T15:07:10.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:07:10.647 [DEBUG] [Thread-191092] [transport.py] [_log()] starting thread (client mode): 0xb0feaa70
2026-04-12T15:07:10.648 [DEBUG] [Thread-191092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:07:10.661 [DEBUG] [Thread-191092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:07:10.661 [INFO] [Thread-191092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:07:10.665 [DEBUG] [Thread-191092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] client lang: <none>
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] server lang: <none>
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] kex follows: False
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] Compression: none
2026-04-12T15:07:10.666 [DEBUG] [Thread-191092] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:07:10.683 [DEBUG] [Thread-191092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:07:10.684 [DEBUG] [Thread-191092] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:07:10.684 [DEBUG] [Thread-191092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:07:10.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:07:10.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:07:10.686 [DEBUG] [Thread-191092] [transport.py] [_log()] userauth is OK
2026-04-12T15:07:10.686 [DEBUG] [Thread-191092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:07:10.687 [DEBUG] [Thread-191092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:07:10.687 [DEBUG] [Thread-191092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:07:10.687 [DEBUG] [Thread-191092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:07:10.723 [INFO] [Thread-191092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:07:10.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:07:11.521 [DEBUG] [Thread-191092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:07:11.522 [DEBUG] [Thread-191092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:07:11.522 [DEBUG] [Thread-191092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:07:11.563 [DEBUG] [Thread-191092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:07:11.563 [DEBUG] [Thread-191092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:07:11.566 [DEBUG] [Thread-191092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:07:11.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:07:11.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:07:11.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:07:11.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:07:11.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:07:11.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:07:11.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:07:11.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:07:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:07:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.546287 -999.00  +14.70  18.66     72   +9.80 1 2 1 1 1   888    0 5.26 14.45 ----- 18.4 18.7 274.6 29.2 20.0 -19.2 19.6 -17.4 19.1 -17.1 20.3 -15.5
2026-04-12T15:07:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:07:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:07:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.546287
2026-04-12T15:07:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:07:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:07:11.592 [DEBUG] [Thread-191092] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:07:11.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:07:11.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:07:11.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:07:11.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:07:03', tmtdew=5.81003, humidity=68.1051, cloud=0.0, wind=26.1846, temperature=14.9628, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:06:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:07:11.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:07:11.687 [DEBUG] [Thread-191095] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-12T15:07:11.687 [DEBUG] [Thread-191095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:07:11.702 [DEBUG] [Thread-191095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:07:11.702 [INFO] [Thread-191095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:07:11.710 [DEBUG] [Thread-191095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:07:11.710 [DEBUG] [Thread-191095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] client lang: <none>
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] server lang: <none>
2026-04-12T15:07:11.711 [DEBUG] [Thread-191095] [transport.py] [_log()] kex follows: False
2026-04-12T15:07:11.712 [DEBUG] [Thread-191095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:07:11.712 [DEBUG] [Thread-191095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:07:11.712 [DEBUG] [Thread-191095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:07:11.712 [DEBUG] [Thread-191095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:07:11.712 [DEBUG] [Thread-191095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:07:11.712 [DEBUG] [Thread-191095] [transport.py] [_log()] Compression: none
2026-04-12T15:07:11.712 [DEBUG] [Thread-191095] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:07:11.768 [DEBUG] [Thread-191095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:07:11.769 [DEBUG] [Thread-191095] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:07:11.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:07:11.770 [DEBUG] [Thread-191095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:07:11.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:07:11.828 [DEBUG] [Thread-191095] [transport.py] [_log()] userauth is OK
2026-04-12T15:07:11.828 [DEBUG] [Thread-191095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:07:11.829 [DEBUG] [Thread-191095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:07:11.829 [DEBUG] [Thread-191095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:07:11.829 [DEBUG] [Thread-191095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:07:11.848 [INFO] [Thread-191095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:07:11.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:07:11.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:07:12.661 [DEBUG] [Thread-191095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:07:12.661 [DEBUG] [Thread-191095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:07:12.709 [DEBUG] [Thread-191095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:07:12.709 [DEBUG] [Thread-191095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:07:12.719 [DEBUG] [Thread-191095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:07:12.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:07:12.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:07:12.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:07:12.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:07:12.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:07:12.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:07:12.758 [DEBUG] [Thread-191095] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:07:16.552 [DEBUG] [Thread-191097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:31.602 [DEBUG] [Thread-191098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:38.025 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:38.027 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:41.147 [DEBUG] [Thread-191099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:42.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:07:42.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:07:42.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:07:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 7, 3), 5.81003, 68.1051, 0.0, 26.1846, 14.9628, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:07:44.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:07:03
2026-04-12T15:07:44.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:07:44.629 [DEBUG] [Thread-191100] [transport.py] [_log()] starting thread (client mode): 0xb0fcdf90
2026-04-12T15:07:44.630 [DEBUG] [Thread-191100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:07:44.649 [DEBUG] [Thread-191100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:07:44.649 [INFO] [Thread-191100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] client lang: <none>
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] server lang: <none>
2026-04-12T15:07:44.652 [DEBUG] [Thread-191100] [transport.py] [_log()] kex follows: False
2026-04-12T15:07:44.653 [DEBUG] [Thread-191100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:07:44.653 [DEBUG] [Thread-191100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:07:44.653 [DEBUG] [Thread-191100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:07:44.653 [DEBUG] [Thread-191100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:07:44.653 [DEBUG] [Thread-191100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:07:44.653 [DEBUG] [Thread-191100] [transport.py] [_log()] Compression: none
2026-04-12T15:07:44.653 [DEBUG] [Thread-191100] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:07:44.671 [DEBUG] [Thread-191100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:07:44.672 [DEBUG] [Thread-191100] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:07:44.672 [DEBUG] [Thread-191100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:07:44.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:07:44.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:07:44.674 [DEBUG] [Thread-191100] [transport.py] [_log()] userauth is OK
2026-04-12T15:07:44.674 [DEBUG] [Thread-191100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:07:44.675 [DEBUG] [Thread-191100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:07:44.675 [DEBUG] [Thread-191100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:07:44.675 [DEBUG] [Thread-191100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:07:44.692 [INFO] [Thread-191100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:07:44.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:07:45.488 [DEBUG] [Thread-191100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:07:45.489 [DEBUG] [Thread-191100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:07:45.489 [DEBUG] [Thread-191100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:07:45.529 [DEBUG] [Thread-191100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:07:45.529 [DEBUG] [Thread-191100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:07:45.532 [DEBUG] [Thread-191100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:07:45.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:07:45.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:07:45.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:07:45.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:07:45.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:07:45.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:07:45.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:07:45.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:07:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:07:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.546634 -999.00  +14.80  21.51     73  +10.10 1 2 1 1 1   888    0 5.18 11.35 ----- 16.6 21.5 276.0 25.8 20.2 -18.6 19.6 -17.6 19.2 -16.4 20.4 -15.3
2026-04-12T15:07:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:07:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:07:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.546634
2026-04-12T15:07:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:07:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:07:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:07:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:07:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:07:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:07:03', tmtdew=5.81003, humidity=68.1051, cloud=0.0, wind=26.1846, temperature=14.9628, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:07:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:07:45.561 [DEBUG] [Thread-191100] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:07:45.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:07:45.657 [DEBUG] [Thread-191103] [transport.py] [_log()] starting thread (client mode): 0xb0fea230
2026-04-12T15:07:45.657 [DEBUG] [Thread-191103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:07:45.674 [DEBUG] [Thread-191103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:07:45.674 [INFO] [Thread-191103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:07:45.685 [DEBUG] [Thread-191103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] client lang: <none>
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] server lang: <none>
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] kex follows: False
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:07:45.686 [DEBUG] [Thread-191103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:07:45.687 [DEBUG] [Thread-191103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:07:45.687 [DEBUG] [Thread-191103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:07:45.687 [DEBUG] [Thread-191103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:07:45.687 [DEBUG] [Thread-191103] [transport.py] [_log()] Compression: none
2026-04-12T15:07:45.687 [DEBUG] [Thread-191103] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:07:45.744 [DEBUG] [Thread-191103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:07:45.744 [DEBUG] [Thread-191103] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:07:45.744 [DEBUG] [Thread-191103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:07:45.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:07:45.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:07:45.804 [DEBUG] [Thread-191103] [transport.py] [_log()] userauth is OK
2026-04-12T15:07:45.804 [DEBUG] [Thread-191103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:07:45.804 [DEBUG] [Thread-191103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:07:45.804 [DEBUG] [Thread-191103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:07:45.805 [DEBUG] [Thread-191103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:07:45.823 [INFO] [Thread-191103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:07:45.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:07:45.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:07:46.639 [DEBUG] [Thread-191105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:07:46.645 [DEBUG] [Thread-191103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:07:46.645 [DEBUG] [Thread-191103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:07:46.694 [DEBUG] [Thread-191103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:07:46.694 [DEBUG] [Thread-191103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:07:46.703 [DEBUG] [Thread-191103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:07:46.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:07:46.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:07:46.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:07:46.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:07:46.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:07:46.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:07:46.740 [DEBUG] [Thread-191103] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:08:01.696 [DEBUG] [Thread-191106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:08:16.737 [DEBUG] [Thread-191107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:08:16.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:08:16.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:08:16.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:08:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 7, 38), 5.70757, 68.7068, 0.0, 22.0889, 15.4256, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:08:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:07:38
2026-04-12T15:08:18.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:08:18.689 [DEBUG] [Thread-191108] [transport.py] [_log()] starting thread (client mode): 0xae50ad10
2026-04-12T15:08:18.689 [DEBUG] [Thread-191108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:08:18.710 [DEBUG] [Thread-191108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:08:18.710 [INFO] [Thread-191108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:08:18.712 [DEBUG] [Thread-191108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] client lang: <none>
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] server lang: <none>
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] kex follows: False
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] Compression: none
2026-04-12T15:08:18.713 [DEBUG] [Thread-191108] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:08:18.731 [DEBUG] [Thread-191108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:08:18.732 [DEBUG] [Thread-191108] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:08:18.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:08:18.733 [DEBUG] [Thread-191108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:08:18.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:08:18.735 [DEBUG] [Thread-191108] [transport.py] [_log()] userauth is OK
2026-04-12T15:08:18.736 [DEBUG] [Thread-191108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:08:18.736 [DEBUG] [Thread-191108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:08:18.736 [DEBUG] [Thread-191108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:08:18.736 [DEBUG] [Thread-191108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:08:18.759 [INFO] [Thread-191108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:08:18.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:08:19.509 [DEBUG] [Thread-191108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:08:19.509 [DEBUG] [Thread-191108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:08:19.510 [DEBUG] [Thread-191108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:08:19.550 [DEBUG] [Thread-191108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:08:19.550 [DEBUG] [Thread-191108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:08:19.554 [DEBUG] [Thread-191108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:08:19.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:08:19.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:08:19.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:08:19.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:08:19.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:08:19.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:08:19.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:08:19.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:08:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:08:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.546981 -999.00  +14.80  14.34     73  +10.00 1 2 1 1 1   888    0 5.07 8.62 ----- 15.2 14.3 273.4 22.7 20.2 -18.9 19.6 -18.1 19.4 -17.5 20.4 -15.8
2026-04-12T15:08:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:08:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:08:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.546981
2026-04-12T15:08:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:08:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:08:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:08:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:08:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:08:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:07:38', tmtdew=5.70757, humidity=68.7068, cloud=0.0, wind=22.0889, temperature=15.4256, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:07:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:08:19.584 [DEBUG] [Thread-191108] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:08:19.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:08:19.676 [DEBUG] [Thread-191111] [transport.py] [_log()] starting thread (client mode): 0xae508460
2026-04-12T15:08:19.676 [DEBUG] [Thread-191111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:08:19.691 [DEBUG] [Thread-191111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:08:19.691 [INFO] [Thread-191111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] client lang: <none>
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] server lang: <none>
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] kex follows: False
2026-04-12T15:08:19.699 [DEBUG] [Thread-191111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:08:19.700 [DEBUG] [Thread-191111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:08:19.700 [DEBUG] [Thread-191111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:08:19.700 [DEBUG] [Thread-191111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:08:19.700 [DEBUG] [Thread-191111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:08:19.700 [DEBUG] [Thread-191111] [transport.py] [_log()] Compression: none
2026-04-12T15:08:19.700 [DEBUG] [Thread-191111] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:08:19.756 [DEBUG] [Thread-191111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:08:19.757 [DEBUG] [Thread-191111] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:08:19.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:08:19.758 [DEBUG] [Thread-191111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:08:19.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:08:19.813 [DEBUG] [Thread-191111] [transport.py] [_log()] userauth is OK
2026-04-12T15:08:19.813 [DEBUG] [Thread-191111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:08:19.813 [DEBUG] [Thread-191111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:08:19.813 [DEBUG] [Thread-191111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:08:19.813 [DEBUG] [Thread-191111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:08:19.839 [INFO] [Thread-191111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:08:19.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:08:19.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:08:20.689 [DEBUG] [Thread-191111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:08:20.689 [DEBUG] [Thread-191111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:08:20.737 [DEBUG] [Thread-191111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:08:20.737 [DEBUG] [Thread-191111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:08:20.746 [DEBUG] [Thread-191111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:08:20.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:08: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')
2026-04-12T15:08:20.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:08:20.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:08:20.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:08:20.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:08:20.785 [DEBUG] [Thread-191111] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:08:31.777 [DEBUG] [Thread-191113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:08:38.169 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:08:38.170 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:08:41.199 [DEBUG] [Thread-191114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:08:46.827 [DEBUG] [Thread-191115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:08:50.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:08:50.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:08:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:08:52.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 8, 13), 5.67647, 68.718, 0.0, 18.545, 14.7959, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:08:52.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:08:13
2026-04-12T15:08:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:08:52.731 [DEBUG] [Thread-191116] [transport.py] [_log()] starting thread (client mode): 0xae5098a0
2026-04-12T15:08:52.731 [DEBUG] [Thread-191116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:08:52.754 [DEBUG] [Thread-191116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:08:52.754 [INFO] [Thread-191116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] client lang: <none>
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] server lang: <none>
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] kex follows: False
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:08:52.757 [DEBUG] [Thread-191116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:08:52.758 [DEBUG] [Thread-191116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:08:52.758 [DEBUG] [Thread-191116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:08:52.758 [DEBUG] [Thread-191116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:08:52.758 [DEBUG] [Thread-191116] [transport.py] [_log()] Compression: none
2026-04-12T15:08:52.758 [DEBUG] [Thread-191116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:08:52.778 [DEBUG] [Thread-191116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:08:52.779 [DEBUG] [Thread-191116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:08:52.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:08:52.780 [DEBUG] [Thread-191116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:08:52.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:08:52.782 [DEBUG] [Thread-191116] [transport.py] [_log()] userauth is OK
2026-04-12T15:08:52.782 [DEBUG] [Thread-191116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:08:52.782 [DEBUG] [Thread-191116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:08:52.782 [DEBUG] [Thread-191116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:08:52.782 [DEBUG] [Thread-191116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:08:52.806 [INFO] [Thread-191116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:08:52.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:08:53.587 [DEBUG] [Thread-191116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:08:53.588 [DEBUG] [Thread-191116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:08:53.588 [DEBUG] [Thread-191116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:08:53.629 [DEBUG] [Thread-191116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:08:53.629 [DEBUG] [Thread-191116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:08:53.633 [DEBUG] [Thread-191116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:08:53.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:08:53.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:08:53.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:08:53.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:08:53.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:08:53.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:08:53.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:08:53.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:08:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:08:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.547328 -999.00  +14.80  15.67     73  +10.10 1 2 1 1 1   888    0 5.01 6.69 ----- 20.3 15.7 274.6 20.2 20.1 -19.6 19.6 -18.5 19.2 -18.7 20.4 -16.4
2026-04-12T15:08:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:08:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:08:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.547328
2026-04-12T15:08:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:08:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:08:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:08:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:08:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:08:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:08:13', tmtdew=5.67647, humidity=68.718, cloud=0.0, wind=18.545, temperature=14.7959, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:08:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:08:53.660 [DEBUG] [Thread-191116] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:08:53.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:08:53.753 [DEBUG] [Thread-191119] [transport.py] [_log()] starting thread (client mode): 0xb0f6f520
2026-04-12T15:08:53.753 [DEBUG] [Thread-191119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:08:53.768 [DEBUG] [Thread-191119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:08:53.769 [INFO] [Thread-191119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:08:53.776 [DEBUG] [Thread-191119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:08:53.776 [DEBUG] [Thread-191119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:08:53.776 [DEBUG] [Thread-191119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] client lang: <none>
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] server lang: <none>
2026-04-12T15:08:53.777 [DEBUG] [Thread-191119] [transport.py] [_log()] kex follows: False
2026-04-12T15:08:53.778 [DEBUG] [Thread-191119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:08:53.778 [DEBUG] [Thread-191119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:08:53.778 [DEBUG] [Thread-191119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:08:53.778 [DEBUG] [Thread-191119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:08:53.778 [DEBUG] [Thread-191119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:08:53.778 [DEBUG] [Thread-191119] [transport.py] [_log()] Compression: none
2026-04-12T15:08:53.778 [DEBUG] [Thread-191119] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:08:53.837 [DEBUG] [Thread-191119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:08:53.838 [DEBUG] [Thread-191119] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:08:53.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:08:53.840 [DEBUG] [Thread-191119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:08:53.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:08:53.897 [DEBUG] [Thread-191119] [transport.py] [_log()] userauth is OK
2026-04-12T15:08:53.897 [DEBUG] [Thread-191119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:08:53.898 [DEBUG] [Thread-191119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:08:53.898 [DEBUG] [Thread-191119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:08:53.898 [DEBUG] [Thread-191119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:08:53.917 [INFO] [Thread-191119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:08:53.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:08:53.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:08:54.739 [DEBUG] [Thread-191119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:08:54.740 [DEBUG] [Thread-191119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:08:54.791 [DEBUG] [Thread-191119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:08:54.792 [DEBUG] [Thread-191119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:08:54.804 [DEBUG] [Thread-191119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:08:54.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:08:54.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:08:54.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:08:54.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:08:54.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:08:54.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:08:54.854 [DEBUG] [Thread-191119] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:09:01.864 [DEBUG] [Thread-191121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:09:16.915 [DEBUG] [Thread-191122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:09:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:09:24.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:09:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:09:26.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 8, 49), 5.78114, 68.375, 0.0, 17.5378, 15.4584, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:09:26.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:08:49
2026-04-12T15:09:26.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:09:26.707 [DEBUG] [Thread-191123] [transport.py] [_log()] starting thread (client mode): 0xb0fea380
2026-04-12T15:09:26.707 [DEBUG] [Thread-191123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:09:26.728 [DEBUG] [Thread-191123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:09:26.728 [INFO] [Thread-191123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:09:26.730 [DEBUG] [Thread-191123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] client lang: <none>
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] server lang: <none>
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] kex follows: False
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] Compression: none
2026-04-12T15:09:26.731 [DEBUG] [Thread-191123] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:09:26.749 [DEBUG] [Thread-191123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:09:26.750 [DEBUG] [Thread-191123] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:09:26.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:09:26.751 [DEBUG] [Thread-191123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:09:26.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:09:26.793 [DEBUG] [Thread-191123] [transport.py] [_log()] userauth is OK
2026-04-12T15:09:26.793 [DEBUG] [Thread-191123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:09:26.794 [DEBUG] [Thread-191123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:09:26.794 [DEBUG] [Thread-191123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:09:26.794 [DEBUG] [Thread-191123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:09:26.836 [INFO] [Thread-191123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:09:26.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:09:27.640 [DEBUG] [Thread-191123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:09:27.640 [DEBUG] [Thread-191123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:09:27.641 [DEBUG] [Thread-191123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:09:27.681 [DEBUG] [Thread-191123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:09:27.681 [DEBUG] [Thread-191123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:09:27.684 [DEBUG] [Thread-191123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:09:27.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:09:27.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:09:27.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:09:27.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:09:27.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:09:27.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:09:27.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:09:27.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:09:27.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:09:27.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.547676 -999.00  +15.00  14.77     74  +10.40 1 2 1 1 1   888    0 5.05 4.24 ----- 18.6 14.8 267.6 19.6 19.9 -19.6 19.5 -19.1 19.1 -18.3 20.3 -18.8
2026-04-12T15:09:27.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:09:27.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:09:27.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.547676
2026-04-12T15:09:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:09:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:09:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:09:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:09:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:09:27.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:08:49', tmtdew=5.78114, humidity=68.375, cloud=0.0, wind=17.5378, temperature=15.4584, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:08:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:09:27.707 [DEBUG] [Thread-191123] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:09:27.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:09:27.801 [DEBUG] [Thread-191126] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-12T15:09:27.801 [DEBUG] [Thread-191126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:09:27.815 [DEBUG] [Thread-191126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:09:27.815 [INFO] [Thread-191126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] client lang: <none>
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] server lang: <none>
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] kex follows: False
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] Compression: none
2026-04-12T15:09:27.823 [DEBUG] [Thread-191126] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:09:27.879 [DEBUG] [Thread-191126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:09:27.880 [DEBUG] [Thread-191126] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:09:27.880 [DEBUG] [Thread-191126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:09:27.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:09:27.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:09:27.937 [DEBUG] [Thread-191126] [transport.py] [_log()] userauth is OK
2026-04-12T15:09:27.937 [DEBUG] [Thread-191126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:09:27.937 [DEBUG] [Thread-191126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:09:27.937 [DEBUG] [Thread-191126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:09:27.937 [DEBUG] [Thread-191126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:09:27.955 [INFO] [Thread-191126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:09:27.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:09:27.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:09:28.787 [DEBUG] [Thread-191126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:09:28.787 [DEBUG] [Thread-191126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:09:28.835 [DEBUG] [Thread-191126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:09:28.835 [DEBUG] [Thread-191126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:09:28.845 [DEBUG] [Thread-191126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:09:28.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:09:28.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:09:28.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:09:28.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:09:28.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:09:28.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:09:28.882 [DEBUG] [Thread-191126] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:09:31.953 [DEBUG] [Thread-191128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:09:38.309 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:09:38.310 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:09:41.261 [DEBUG] [Thread-191129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:09:47.019 [DEBUG] [Thread-191130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:09:58.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:09:58.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:09:58.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:10:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 9, 25), 5.80213, 68.1378, 0.0, 23.0087, 14.9458, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:10:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:09:25
2026-04-12T15:10:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:10:00.609 [DEBUG] [Thread-191131] [transport.py] [_log()] starting thread (client mode): 0xb0f6d390
2026-04-12T15:10:00.609 [DEBUG] [Thread-191131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:10:00.630 [DEBUG] [Thread-191131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:10:00.630 [INFO] [Thread-191131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:00.633 [DEBUG] [Thread-191131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] client lang: <none>
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] server lang: <none>
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] kex follows: False
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] Compression: none
2026-04-12T15:10:00.634 [DEBUG] [Thread-191131] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:10:00.652 [DEBUG] [Thread-191131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:10:00.653 [DEBUG] [Thread-191131] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:10:00.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:10:00.654 [DEBUG] [Thread-191131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:10:00.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:10:00.656 [DEBUG] [Thread-191131] [transport.py] [_log()] userauth is OK
2026-04-12T15:10:00.656 [DEBUG] [Thread-191131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:10:00.656 [DEBUG] [Thread-191131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:10:00.656 [DEBUG] [Thread-191131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:10:00.656 [DEBUG] [Thread-191131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:10:00.672 [INFO] [Thread-191131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:10:00.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:10:01.490 [DEBUG] [Thread-191131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:10:01.490 [DEBUG] [Thread-191131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:10:01.490 [DEBUG] [Thread-191131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:10:01.531 [DEBUG] [Thread-191131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:10:01.531 [DEBUG] [Thread-191131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:10:01.533 [DEBUG] [Thread-191131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:10:01.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:10:01.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:10:01.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:10:01.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:10:01.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:10:01.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:10:01.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:10:01.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.548023 -999.00  +14.80  19.08     71   +9.80 1 2 1 1 1   888    0 4.83 2.29 ----- 15.8 19.1 282.6 29.5 19.9 -19.8 19.4 -19.1 19.0 -17.9 20.1 -18.3
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.548023
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:10:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:09:25', tmtdew=5.80213, humidity=68.1378, cloud=0.0, wind=23.0087, temperature=14.9458, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:09:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:10:01.552 [DEBUG] [Thread-191131] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:10:01.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:10:01.637 [DEBUG] [Thread-191134] [transport.py] [_log()] starting thread (client mode): 0xb0febe80
2026-04-12T15:10:01.637 [DEBUG] [Thread-191134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:10:01.651 [DEBUG] [Thread-191134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:10:01.651 [INFO] [Thread-191134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:10:01.658 [DEBUG] [Thread-191134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] client lang: <none>
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] server lang: <none>
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] kex follows: False
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] Compression: none
2026-04-12T15:10:01.659 [DEBUG] [Thread-191134] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:10:01.716 [DEBUG] [Thread-191134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:10:01.717 [DEBUG] [Thread-191134] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:10:01.717 [DEBUG] [Thread-191134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:10:01.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:10:01.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:10:01.773 [DEBUG] [Thread-191134] [transport.py] [_log()] userauth is OK
2026-04-12T15:10:01.773 [DEBUG] [Thread-191134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:10:01.773 [DEBUG] [Thread-191134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:10:01.773 [DEBUG] [Thread-191134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:10:01.773 [DEBUG] [Thread-191134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:10:01.792 [INFO] [Thread-191134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:10:01.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:10:01.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:10:02.058 [DEBUG] [Thread-191136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:10:02.631 [DEBUG] [Thread-191134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:10:02.631 [DEBUG] [Thread-191134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:10:02.680 [DEBUG] [Thread-191134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:10:02.680 [DEBUG] [Thread-191134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:10:02.690 [DEBUG] [Thread-191134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:10:02.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:10:02.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:10:02.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:10:02.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:10:02.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:10:02.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:10:02.727 [DEBUG] [Thread-191134] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:10:17.123 [DEBUG] [Thread-191137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:10:32.161 [DEBUG] [Thread-191138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:10:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:10:32.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:10:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:10:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 9, 25), 5.90213, 67.6378, 0.0, 19.4087, 14.6958, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:10:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:09:25
2026-04-12T15:10:34.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:10:34.595 [DEBUG] [Thread-191139] [transport.py] [_log()] starting thread (client mode): 0xae5a6ce0
2026-04-12T15:10:34.595 [DEBUG] [Thread-191139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:10:34.609 [DEBUG] [Thread-191139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:10:34.609 [INFO] [Thread-191139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] client lang: <none>
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] server lang: <none>
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] kex follows: False
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] Compression: none
2026-04-12T15:10:34.611 [DEBUG] [Thread-191139] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:10:34.620 [DEBUG] [Thread-191139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:10:34.620 [DEBUG] [Thread-191139] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:10:34.620 [DEBUG] [Thread-191139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:10:34.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:10:34.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:10:34.621 [DEBUG] [Thread-191139] [transport.py] [_log()] userauth is OK
2026-04-12T15:10:34.621 [DEBUG] [Thread-191139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:10:34.621 [DEBUG] [Thread-191139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:10:34.621 [DEBUG] [Thread-191139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:10:34.621 [DEBUG] [Thread-191139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:10:34.640 [INFO] [Thread-191139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:10:34.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:10:35.872 [DEBUG] [Thread-191139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:10:35.872 [DEBUG] [Thread-191139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:10:35.873 [DEBUG] [Thread-191139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:10:35.913 [DEBUG] [Thread-191139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:10:35.913 [DEBUG] [Thread-191139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:10:35.917 [DEBUG] [Thread-191139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:10:35.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:10:35.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:10:35.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:10:35.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:10:35.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:10:35.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:10:35.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:10:35.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:10:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:10:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.548370 -999.00  +14.60  12.17     71   +9.50 1 2 1 1 1   888    0 4.83 1.37 ----- 12.5 12.2 279.4 21.0 19.8 -19.8 19.4 -18.8 19.0 -19.9 20.1 -18.2
2026-04-12T15:10:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:10:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:10:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.548370
2026-04-12T15:10:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:10:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:10:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:10:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:10:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:10:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:09:25', tmtdew=5.90213, humidity=67.6378, cloud=0.0, wind=19.4087, temperature=14.6958, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:09:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:10:35.947 [DEBUG] [Thread-191139] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:10:36.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:10:36.041 [DEBUG] [Thread-191142] [transport.py] [_log()] starting thread (client mode): 0xae5a4700
2026-04-12T15:10:36.041 [DEBUG] [Thread-191142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:10:36.055 [DEBUG] [Thread-191142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:10:36.056 [INFO] [Thread-191142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] client lang: <none>
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] server lang: <none>
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] kex follows: False
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:10:36.063 [DEBUG] [Thread-191142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:10:36.064 [DEBUG] [Thread-191142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:10:36.064 [DEBUG] [Thread-191142] [transport.py] [_log()] Compression: none
2026-04-12T15:10:36.064 [DEBUG] [Thread-191142] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:10:36.121 [DEBUG] [Thread-191142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:10:36.121 [DEBUG] [Thread-191142] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:10:36.122 [DEBUG] [Thread-191142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:10:36.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:10:36.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:10:36.177 [DEBUG] [Thread-191142] [transport.py] [_log()] userauth is OK
2026-04-12T15:10:36.178 [DEBUG] [Thread-191142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:10:36.178 [DEBUG] [Thread-191142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:10:36.178 [DEBUG] [Thread-191142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:10:36.178 [DEBUG] [Thread-191142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:10:36.197 [INFO] [Thread-191142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:10:36.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:10:36.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:10:37.016 [DEBUG] [Thread-191142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:10:37.016 [DEBUG] [Thread-191142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:10:37.064 [DEBUG] [Thread-191142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:10:37.064 [DEBUG] [Thread-191142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:10:37.074 [DEBUG] [Thread-191142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:10:37.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:10:37.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:10:37.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:10:37.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:10:37.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:10:37.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:10:37.111 [DEBUG] [Thread-191142] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:10:38.452 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:10:38.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:10:41.310 [DEBUG] [Thread-191144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:10:47.194 [DEBUG] [Thread-191145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:11:02.247 [DEBUG] [Thread-191146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:11:07.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:11:07.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:11:07.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:11:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 10, 35), 5.69473, 68.8381, 0.0, 20.3602, 15.789, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:11:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:10:35
2026-04-12T15:11:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:11:08.915 [DEBUG] [Thread-191147] [transport.py] [_log()] starting thread (client mode): 0xae5a6470
2026-04-12T15:11:08.915 [DEBUG] [Thread-191147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:11:08.935 [DEBUG] [Thread-191147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:11:08.935 [INFO] [Thread-191147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:11:08.937 [DEBUG] [Thread-191147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:11:08.937 [DEBUG] [Thread-191147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:11:08.937 [DEBUG] [Thread-191147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:11:08.937 [DEBUG] [Thread-191147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:08.937 [DEBUG] [Thread-191147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:08.937 [DEBUG] [Thread-191147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:08.937 [DEBUG] [Thread-191147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] client lang: <none>
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] server lang: <none>
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] kex follows: False
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] Compression: none
2026-04-12T15:11:08.938 [DEBUG] [Thread-191147] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:11:08.956 [DEBUG] [Thread-191147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:11:08.957 [DEBUG] [Thread-191147] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:11:08.958 [DEBUG] [Thread-191147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:11:08.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:11:08.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:11:09.000 [DEBUG] [Thread-191147] [transport.py] [_log()] userauth is OK
2026-04-12T15:11:09.001 [DEBUG] [Thread-191147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:11:09.001 [DEBUG] [Thread-191147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:11:09.001 [DEBUG] [Thread-191147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:11:09.001 [DEBUG] [Thread-191147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:11:09.021 [INFO] [Thread-191147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:11:09.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:11:09.802 [DEBUG] [Thread-191147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:11:09.802 [DEBUG] [Thread-191147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:11:09.803 [DEBUG] [Thread-191147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:11:09.844 [DEBUG] [Thread-191147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:11:09.844 [DEBUG] [Thread-191147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:11:09.846 [DEBUG] [Thread-191147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:11:09.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:11:09.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:11:09.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:11:09.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:11:09.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:11:09.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:11:09.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:11:09.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:11:09.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:11:09.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.548717 -999.00  +14.60  16.39     73   +9.80 1 2 1 1 1   888    0 4.74 -0.83 ----- 13.4 16.4 278.4 21.9 19.9 -19.5 19.4 -18.8 19.2 -15.5 20.1 -17.5
2026-04-12T15:11:09.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:11:09.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:11:09.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.548717
2026-04-12T15:11:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:11:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:11:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:11:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:11:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:11:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:10:35', tmtdew=5.69473, humidity=68.8381, cloud=0.0, wind=20.3602, temperature=15.789, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:10:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:11:09.867 [DEBUG] [Thread-191147] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:11:09.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:11:09.960 [DEBUG] [Thread-191150] [transport.py] [_log()] starting thread (client mode): 0xae5a4670
2026-04-12T15:11:09.960 [DEBUG] [Thread-191150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:11:09.977 [DEBUG] [Thread-191150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:11:09.977 [INFO] [Thread-191150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:11:09.987 [DEBUG] [Thread-191150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:11:09.987 [DEBUG] [Thread-191150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:11:09.987 [DEBUG] [Thread-191150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] client lang: <none>
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] server lang: <none>
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] kex follows: False
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] Compression: none
2026-04-12T15:11:09.988 [DEBUG] [Thread-191150] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:11:10.046 [DEBUG] [Thread-191150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:11:10.047 [DEBUG] [Thread-191150] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:11:10.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:11:10.048 [DEBUG] [Thread-191150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:11:10.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:11:10.108 [DEBUG] [Thread-191150] [transport.py] [_log()] userauth is OK
2026-04-12T15:11:10.108 [DEBUG] [Thread-191150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:11:10.109 [DEBUG] [Thread-191150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:11:10.109 [DEBUG] [Thread-191150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:11:10.109 [DEBUG] [Thread-191150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:11:10.129 [INFO] [Thread-191150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:11:10.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:11:10.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:11:10.930 [DEBUG] [Thread-191150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:11:10.930 [DEBUG] [Thread-191150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:11:10.978 [DEBUG] [Thread-191150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:11:10.978 [DEBUG] [Thread-191150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:11:10.990 [DEBUG] [Thread-191150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:11:11.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:11:11.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:11:11.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:11:11.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:11:11.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:11:11.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:11:11.028 [DEBUG] [Thread-191150] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:11:17.285 [DEBUG] [Thread-191152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:11:32.345 [DEBUG] [Thread-191153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:11:38.594 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:11:38.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:11:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:11:41.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:11:41.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:11:41.364 [DEBUG] [Thread-191154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:11:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 11, 11), 5.80318, 68.455, 0.0, 15.0692, 15.3439, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:11:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:11:11
2026-04-12T15:11:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:11:42.849 [DEBUG] [Thread-191155] [transport.py] [_log()] starting thread (client mode): 0xae5a4dc0
2026-04-12T15:11:42.849 [DEBUG] [Thread-191155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:11:42.869 [DEBUG] [Thread-191155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:11:42.869 [INFO] [Thread-191155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:11:42.870 [DEBUG] [Thread-191155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:11:42.870 [DEBUG] [Thread-191155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:11:42.870 [DEBUG] [Thread-191155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:11:42.870 [DEBUG] [Thread-191155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] client lang: <none>
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] server lang: <none>
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] kex follows: False
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] Compression: none
2026-04-12T15:11:42.871 [DEBUG] [Thread-191155] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:11:42.882 [DEBUG] [Thread-191155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:11:42.883 [DEBUG] [Thread-191155] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:11:42.883 [DEBUG] [Thread-191155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:11:42.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:11:42.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:11:42.886 [DEBUG] [Thread-191155] [transport.py] [_log()] userauth is OK
2026-04-12T15:11:42.886 [DEBUG] [Thread-191155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:11:42.886 [DEBUG] [Thread-191155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:11:42.886 [DEBUG] [Thread-191155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:11:42.887 [DEBUG] [Thread-191155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:11:42.906 [INFO] [Thread-191155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:11:42.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:11:43.478 [DEBUG] [Thread-191155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:11:43.478 [DEBUG] [Thread-191155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:11:43.479 [DEBUG] [Thread-191155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:11:43.519 [DEBUG] [Thread-191155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:11:43.519 [DEBUG] [Thread-191155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:11:43.522 [DEBUG] [Thread-191155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:11:43.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:11:43.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:11:43.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:11:43.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:11:43.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:11:43.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:11:43.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:11:43.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:11:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:11:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.549759 -999.00  +15.00  14.20     71   +9.90 1 2 1 1 1   888    0 4.79 -5.53 ----- 12.5 14.2 268.8 18.9 20.2 -20.3 19.6 -18.9 19.7 -15.6 20.6 -17.4
2026-04-12T15:11:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:11:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:11:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.549759
2026-04-12T15:11:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:11:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:11:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:11:43.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:11:43.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:11:43.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:11:11', tmtdew=5.80318, humidity=68.455, cloud=0.0, wind=15.0692, temperature=15.3439, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:11:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:11:43.544 [DEBUG] [Thread-191155] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:11:43.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:11:43.637 [DEBUG] [Thread-191158] [transport.py] [_log()] starting thread (client mode): 0xb0fea500
2026-04-12T15:11:43.637 [DEBUG] [Thread-191158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:11:43.653 [DEBUG] [Thread-191158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:11:43.654 [INFO] [Thread-191158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:11:43.661 [DEBUG] [Thread-191158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] client lang: <none>
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] server lang: <none>
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] kex follows: False
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:11:43.662 [DEBUG] [Thread-191158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:11:43.663 [DEBUG] [Thread-191158] [transport.py] [_log()] Compression: none
2026-04-12T15:11:43.663 [DEBUG] [Thread-191158] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:11:43.728 [DEBUG] [Thread-191158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:11:43.728 [DEBUG] [Thread-191158] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:11:43.729 [DEBUG] [Thread-191158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:11:43.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:11:43.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:11:43.792 [DEBUG] [Thread-191158] [transport.py] [_log()] userauth is OK
2026-04-12T15:11:43.792 [DEBUG] [Thread-191158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:11:43.792 [DEBUG] [Thread-191158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:11:43.792 [DEBUG] [Thread-191158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:11:43.792 [DEBUG] [Thread-191158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:11:43.820 [INFO] [Thread-191158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:11:43.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:11:43.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:11:44.645 [DEBUG] [Thread-191158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:11:44.646 [DEBUG] [Thread-191158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:11:44.693 [DEBUG] [Thread-191158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:11:44.693 [DEBUG] [Thread-191158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:11:44.703 [DEBUG] [Thread-191158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:11:44.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:11:44.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:11:44.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:11:44.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:11:44.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:11:44.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:11:44.739 [DEBUG] [Thread-191158] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:11:47.383 [DEBUG] [Thread-191160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:02.430 [DEBUG] [Thread-191161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:14.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:12:14.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:12:14.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:12:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 11, 46), 6.14887, 66.8163, 0.0, 17.0086, 15.9877, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:12:16.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:11:46
2026-04-12T15:12:16.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:12:16.720 [DEBUG] [Thread-191162] [transport.py] [_log()] starting thread (client mode): 0xae5a4130
2026-04-12T15:12:16.720 [DEBUG] [Thread-191162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:12:16.736 [DEBUG] [Thread-191162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:12:16.736 [INFO] [Thread-191162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:12:16.739 [DEBUG] [Thread-191162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] client lang: <none>
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] server lang: <none>
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] kex follows: False
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] Compression: none
2026-04-12T15:12:16.740 [DEBUG] [Thread-191162] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:12:16.749 [DEBUG] [Thread-191162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:12:16.750 [DEBUG] [Thread-191162] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:12:16.750 [DEBUG] [Thread-191162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:12:16.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:12:16.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:12:16.752 [DEBUG] [Thread-191162] [transport.py] [_log()] userauth is OK
2026-04-12T15:12:16.752 [DEBUG] [Thread-191162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:12:16.752 [DEBUG] [Thread-191162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:12:16.752 [DEBUG] [Thread-191162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:12:16.752 [DEBUG] [Thread-191162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:12:16.770 [INFO] [Thread-191162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:12:16.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:12:17.366 [DEBUG] [Thread-191162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:12:17.366 [DEBUG] [Thread-191162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:12:17.367 [DEBUG] [Thread-191162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:12:17.408 [DEBUG] [Thread-191162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:12:17.408 [DEBUG] [Thread-191162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:12:17.410 [DEBUG] [Thread-191162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:12:17.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:12:17.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:12:17.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:12:17.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:12:17.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:12:17.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:12:17.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:12:17.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.550106 -999.00  +14.90  10.76     72   +9.90 1 2 1 1 1   888    0 4.72 -4.26 ----- 8.8 10.8 262.8 14.4 20.3 -19.7 19.6 -18.7 19.8 -16.4 20.6 -18.9
2026-04-12T15:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.550106
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:12:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:11:46', tmtdew=6.14887, humidity=66.8163, cloud=0.0, wind=17.0086, temperature=15.9877, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:12:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:12:17.431 [DEBUG] [Thread-191162] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:12:17.462 [DEBUG] [Thread-191165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:17.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:12:17.514 [DEBUG] [Thread-191166] [transport.py] [_log()] starting thread (client mode): 0xae5a4c10
2026-04-12T15:12:17.514 [DEBUG] [Thread-191166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:12:17.528 [DEBUG] [Thread-191166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:12:17.528 [INFO] [Thread-191166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] client lang: <none>
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] server lang: <none>
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] kex follows: False
2026-04-12T15:12:17.536 [DEBUG] [Thread-191166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:12:17.537 [DEBUG] [Thread-191166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:12:17.537 [DEBUG] [Thread-191166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:12:17.537 [DEBUG] [Thread-191166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:12:17.537 [DEBUG] [Thread-191166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:12:17.537 [DEBUG] [Thread-191166] [transport.py] [_log()] Compression: none
2026-04-12T15:12:17.537 [DEBUG] [Thread-191166] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:12:17.592 [DEBUG] [Thread-191166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:12:17.595 [DEBUG] [Thread-191166] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:12:17.595 [DEBUG] [Thread-191166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:12:17.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:12:17.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:12:17.649 [DEBUG] [Thread-191166] [transport.py] [_log()] userauth is OK
2026-04-12T15:12:17.650 [DEBUG] [Thread-191166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:12:17.650 [DEBUG] [Thread-191166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:12:17.650 [DEBUG] [Thread-191166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:12:17.650 [DEBUG] [Thread-191166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:12:17.667 [INFO] [Thread-191166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:12:17.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:12:17.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:12:18.480 [DEBUG] [Thread-191166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:12:18.480 [DEBUG] [Thread-191166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:12:18.528 [DEBUG] [Thread-191166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:12:18.528 [DEBUG] [Thread-191166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:12:18.538 [DEBUG] [Thread-191166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:12:18.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:12:18.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:12:18.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:12:18.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:12:18.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:12:18.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:12:18.575 [DEBUG] [Thread-191166] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:12:32.506 [DEBUG] [Thread-191168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:38.736 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:38.738 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:41.431 [DEBUG] [Thread-191169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:47.542 [DEBUG] [Thread-191170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:12:48.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:12:48.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:12:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:12:49.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 12, 22), 6.17213, 66.9081, 0.0, 14.3276, 15.2441, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:12:49.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:12:22
2026-04-12T15:12:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:12:50.458 [DEBUG] [Thread-191171] [transport.py] [_log()] starting thread (client mode): 0xae5a7310
2026-04-12T15:12:50.458 [DEBUG] [Thread-191171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:12:50.478 [DEBUG] [Thread-191171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:12:50.478 [INFO] [Thread-191171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:12:50.481 [DEBUG] [Thread-191171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] client lang: <none>
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] server lang: <none>
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] kex follows: False
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:12:50.482 [DEBUG] [Thread-191171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:12:50.483 [DEBUG] [Thread-191171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:12:50.483 [DEBUG] [Thread-191171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:12:50.483 [DEBUG] [Thread-191171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:12:50.483 [DEBUG] [Thread-191171] [transport.py] [_log()] Compression: none
2026-04-12T15:12:50.483 [DEBUG] [Thread-191171] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:12:50.501 [DEBUG] [Thread-191171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:12:50.501 [DEBUG] [Thread-191171] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:12:50.502 [DEBUG] [Thread-191171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:12:50.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:12:50.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:12:50.508 [DEBUG] [Thread-191171] [transport.py] [_log()] userauth is OK
2026-04-12T15:12:50.508 [DEBUG] [Thread-191171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:12:50.508 [DEBUG] [Thread-191171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:12:50.509 [DEBUG] [Thread-191171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:12:50.509 [DEBUG] [Thread-191171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:12:50.534 [INFO] [Thread-191171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:12:50.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:12:51.126 [DEBUG] [Thread-191171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:12:51.126 [DEBUG] [Thread-191171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:12:51.127 [DEBUG] [Thread-191171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:12:51.167 [DEBUG] [Thread-191171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:12:51.167 [DEBUG] [Thread-191171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:12:51.170 [DEBUG] [Thread-191171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:12:51.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:12:51.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:12:51.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:12:51.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:12:51.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:12:51.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:12:51.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:12:51.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:12:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:12:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.550453 -999.00  +15.10  10.63     73  +10.30 1 2 1 1 1   888    0 4.80 -5.05 ----- 11.8 10.6 274.4 12.1 20.5 -19.8 19.7 -19.0 19.9 -16.8 20.9 -18.2
2026-04-12T15:12:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:12:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:12:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.550453
2026-04-12T15:12:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:12:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:12:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:12:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:12:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:12:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:12:22', tmtdew=6.17213, humidity=66.9081, cloud=0.0, wind=14.3276, temperature=15.2441, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:12:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:12:51.198 [DEBUG] [Thread-191171] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:12:51.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:12:51.283 [DEBUG] [Thread-191174] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-12T15:12:51.283 [DEBUG] [Thread-191174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:12:51.297 [DEBUG] [Thread-191174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:12:51.297 [INFO] [Thread-191174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] client lang: <none>
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] server lang: <none>
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] kex follows: False
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] Compression: none
2026-04-12T15:12:51.305 [DEBUG] [Thread-191174] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:12:51.361 [DEBUG] [Thread-191174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:12:51.362 [DEBUG] [Thread-191174] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:12:51.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:12:51.362 [DEBUG] [Thread-191174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:12:51.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:12:51.418 [DEBUG] [Thread-191174] [transport.py] [_log()] userauth is OK
2026-04-12T15:12:51.419 [DEBUG] [Thread-191174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:12:51.419 [DEBUG] [Thread-191174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:12:51.419 [DEBUG] [Thread-191174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:12:51.419 [DEBUG] [Thread-191174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:12:51.441 [INFO] [Thread-191174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:12:51.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:12:51.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:12:52.258 [DEBUG] [Thread-191174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:12:52.259 [DEBUG] [Thread-191174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:12:52.306 [DEBUG] [Thread-191174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:12:52.307 [DEBUG] [Thread-191174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:12:52.317 [DEBUG] [Thread-191174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:12:52.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:12:52.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:12:52.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:12:52.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:12:52.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:12:52.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:12:52.351 [DEBUG] [Thread-191174] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:13:02.578 [DEBUG] [Thread-191176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:13:17.630 [DEBUG] [Thread-191177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:13:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:13:22.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:13:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:13:23.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 12, 57), 6.01272, 67.4218, 0.0, 16.9214, 15.2935, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:13:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:12:57
2026-04-12T15:13:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:13:24.165 [DEBUG] [Thread-191178] [transport.py] [_log()] starting thread (client mode): 0xae5099c0
2026-04-12T15:13:24.165 [DEBUG] [Thread-191178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:13:24.186 [DEBUG] [Thread-191178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:13:24.186 [INFO] [Thread-191178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:13:24.189 [DEBUG] [Thread-191178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:13:24.189 [DEBUG] [Thread-191178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:13:24.189 [DEBUG] [Thread-191178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:13:24.189 [DEBUG] [Thread-191178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:24.189 [DEBUG] [Thread-191178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:24.189 [DEBUG] [Thread-191178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] client lang: <none>
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] server lang: <none>
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] kex follows: False
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] Compression: none
2026-04-12T15:13:24.190 [DEBUG] [Thread-191178] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:13:24.201 [DEBUG] [Thread-191178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:13:24.202 [DEBUG] [Thread-191178] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:13:24.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:13:24.203 [DEBUG] [Thread-191178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:13:24.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:13:24.205 [DEBUG] [Thread-191178] [transport.py] [_log()] userauth is OK
2026-04-12T15:13:24.205 [DEBUG] [Thread-191178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:13:24.205 [DEBUG] [Thread-191178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:13:24.205 [DEBUG] [Thread-191178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:13:24.205 [DEBUG] [Thread-191178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:13:24.229 [INFO] [Thread-191178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:13:24.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:13:24.838 [DEBUG] [Thread-191178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:13:24.838 [DEBUG] [Thread-191178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:13:24.838 [DEBUG] [Thread-191178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:13:24.879 [DEBUG] [Thread-191178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:13:24.879 [DEBUG] [Thread-191178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:13:24.881 [DEBUG] [Thread-191178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:13:24.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:13:24.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:13:24.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:13:24.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:13:24.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:13:24.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:13:24.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:13:24.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:13:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:13:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.550800 -999.00  +15.20  17.38     71  +10.00 1 2 1 1 1   888    0 4.73 -4.59 ----- 14.0 17.4 286.2 22.6 20.4 -20.8 19.8 -19.3 20.1 -17.7 20.9 -19.5
2026-04-12T15:13:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:13:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:13:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.550800
2026-04-12T15:13:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:13:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:13:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:13:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:13:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:13:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:12:57', tmtdew=6.01272, humidity=67.4218, cloud=0.0, wind=16.9214, temperature=15.2935, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:13:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:13:24.892 [DEBUG] [Thread-191178] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:13:24.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:13:24.980 [DEBUG] [Thread-191181] [transport.py] [_log()] starting thread (client mode): 0xae5a4940
2026-04-12T15:13:24.980 [DEBUG] [Thread-191181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:13:24.995 [DEBUG] [Thread-191181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:13:24.995 [INFO] [Thread-191181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:13:25.002 [DEBUG] [Thread-191181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:13:25.002 [DEBUG] [Thread-191181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] client lang: <none>
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] server lang: <none>
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] kex follows: False
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] Compression: none
2026-04-12T15:13:25.003 [DEBUG] [Thread-191181] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:13:25.067 [DEBUG] [Thread-191181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:13:25.067 [DEBUG] [Thread-191181] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:13:25.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:13:25.069 [DEBUG] [Thread-191181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:13:25.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:13:25.123 [DEBUG] [Thread-191181] [transport.py] [_log()] userauth is OK
2026-04-12T15:13:25.123 [DEBUG] [Thread-191181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:13:25.123 [DEBUG] [Thread-191181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:13:25.123 [DEBUG] [Thread-191181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:13:25.123 [DEBUG] [Thread-191181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:13:25.148 [INFO] [Thread-191181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:13:25.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:13:25.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:13:25.988 [DEBUG] [Thread-191181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:13:25.989 [DEBUG] [Thread-191181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:13:26.037 [DEBUG] [Thread-191181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:13:26.037 [DEBUG] [Thread-191181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:13:26.047 [DEBUG] [Thread-191181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:13:26.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:13:26.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:13:26.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:13:26.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:13:26.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:13:26.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:13:26.084 [DEBUG] [Thread-191181] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:13:32.670 [DEBUG] [Thread-191183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:13:38.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:13:38.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:13:41.487 [DEBUG] [Thread-191184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:13:47.721 [DEBUG] [Thread-191185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:13:56.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:13:56.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:13:56.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:13:57.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 13, 33), 6.34989, 65.9212, 0.0, 14.2567, 15.9875, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:13:57.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:13:33
2026-04-12T15:13:57.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:13:57.867 [DEBUG] [Thread-191186] [transport.py] [_log()] starting thread (client mode): 0xb0fe9870
2026-04-12T15:13:57.867 [DEBUG] [Thread-191186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:13:57.887 [DEBUG] [Thread-191186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:13:57.887 [INFO] [Thread-191186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] client lang: <none>
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] server lang: <none>
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] kex follows: False
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] Compression: none
2026-04-12T15:13:57.890 [DEBUG] [Thread-191186] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:13:57.898 [DEBUG] [Thread-191186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:13:57.899 [DEBUG] [Thread-191186] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:13:57.899 [DEBUG] [Thread-191186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:13:57.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:13:57.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:13:57.941 [DEBUG] [Thread-191186] [transport.py] [_log()] userauth is OK
2026-04-12T15:13:57.941 [DEBUG] [Thread-191186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:13:57.941 [DEBUG] [Thread-191186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:13:57.941 [DEBUG] [Thread-191186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:13:57.941 [DEBUG] [Thread-191186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:13:57.955 [INFO] [Thread-191186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:13:57.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:13:58.629 [DEBUG] [Thread-191186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:13:58.629 [DEBUG] [Thread-191186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:13:58.630 [DEBUG] [Thread-191186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:13:58.670 [DEBUG] [Thread-191186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:13:58.670 [DEBUG] [Thread-191186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:13:58.674 [DEBUG] [Thread-191186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:13:58.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:13:58.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:13:58.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:13:58.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:13:58.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:13:58.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:13:58.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:13:58.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:13:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:13:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.551148 -999.00  +15.30  22.36     70   +9.80 1 2 1 1 1   888    0 4.89 -4.26 ----- 22.1 22.4 270.6 25.4 20.4 -22.7 19.8 -20.4 20.0 -19.7 21.0 -19.3
2026-04-12T15:13:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:13:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:13:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.551148
2026-04-12T15:13:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:13:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:13:58.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:13:58.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:13:58.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:13:58.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:13:33', tmtdew=6.34989, humidity=65.9212, cloud=0.0, wind=14.2567, temperature=15.9875, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:13:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:13:58.701 [DEBUG] [Thread-191186] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:13:58.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:13:58.795 [DEBUG] [Thread-191189] [transport.py] [_log()] starting thread (client mode): 0xae5a6d70
2026-04-12T15:13:58.795 [DEBUG] [Thread-191189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:13:58.809 [DEBUG] [Thread-191189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:13:58.810 [INFO] [Thread-191189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:13:58.817 [DEBUG] [Thread-191189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] client lang: <none>
2026-04-12T15:13:58.818 [DEBUG] [Thread-191189] [transport.py] [_log()] server lang: <none>
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] kex follows: False
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] Compression: none
2026-04-12T15:13:58.819 [DEBUG] [Thread-191189] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:13:58.878 [DEBUG] [Thread-191189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:13:58.879 [DEBUG] [Thread-191189] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:13:58.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:13:58.880 [DEBUG] [Thread-191189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:13:58.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:13:58.939 [DEBUG] [Thread-191189] [transport.py] [_log()] userauth is OK
2026-04-12T15:13:58.939 [DEBUG] [Thread-191189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:13:58.939 [DEBUG] [Thread-191189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:13:58.940 [DEBUG] [Thread-191189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:13:58.940 [DEBUG] [Thread-191189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:13:58.958 [INFO] [Thread-191189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:13:58.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:13:58.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:13:59.770 [DEBUG] [Thread-191189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:13:59.770 [DEBUG] [Thread-191189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:13:59.819 [DEBUG] [Thread-191189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:13:59.819 [DEBUG] [Thread-191189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:13:59.829 [DEBUG] [Thread-191189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:13:59.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:13:59.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:13:59.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:13:59.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:13:59.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:13:59.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:13:59.869 [DEBUG] [Thread-191189] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:14:02.758 [DEBUG] [Thread-191191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:14:17.812 [DEBUG] [Thread-191192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:14:29.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:14:29.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:14:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:14:31.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 14, 8), 6.29238, 65.8417, 0.0, 22.0914, 15.31, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:14:31.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:14:08
2026-04-12T15:14:31.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:14:31.767 [DEBUG] [Thread-191193] [transport.py] [_log()] starting thread (client mode): 0xae5a72b0
2026-04-12T15:14:31.767 [DEBUG] [Thread-191193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:14:31.789 [DEBUG] [Thread-191193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:14:31.789 [INFO] [Thread-191193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] client lang: <none>
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] server lang: <none>
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] kex follows: False
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:14:31.792 [DEBUG] [Thread-191193] [transport.py] [_log()] Compression: none
2026-04-12T15:14:31.793 [DEBUG] [Thread-191193] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:14:31.810 [DEBUG] [Thread-191193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:14:31.811 [DEBUG] [Thread-191193] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:14:31.811 [DEBUG] [Thread-191193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:14:31.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:14:31.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:14:31.814 [DEBUG] [Thread-191193] [transport.py] [_log()] userauth is OK
2026-04-12T15:14:31.814 [DEBUG] [Thread-191193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:14:31.814 [DEBUG] [Thread-191193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:14:31.814 [DEBUG] [Thread-191193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:14:31.814 [DEBUG] [Thread-191193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:14:31.838 [INFO] [Thread-191193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:14:31.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:14:32.492 [DEBUG] [Thread-191193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:14:32.492 [DEBUG] [Thread-191193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:14:32.493 [DEBUG] [Thread-191193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:14:32.533 [DEBUG] [Thread-191193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:14:32.533 [DEBUG] [Thread-191193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:14:32.537 [DEBUG] [Thread-191193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:14:32.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:14:32.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:14:32.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:14:32.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:14:32.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:14:32.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:14:32.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:14:32.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:14:32.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:14:32.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.551495 -999.00  +15.00  23.10     68   +9.10 1 2 1 1 1   888    0 4.87 -2.21 ----- 20.8 23.1 273.4 24.7 20.2 -22.6 19.7 -20.5 19.7 -21.2 20.9 -19.3
2026-04-12T15:14:32.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:14:32.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:14:32.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.551495
2026-04-12T15:14:32.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:14:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:14:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:14:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:14:32.564 [DEBUG] [Thread-191193] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:14:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:14:32.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:14:08', tmtdew=6.29238, humidity=65.8417, cloud=0.0, wind=22.0914, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:14:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:14:32.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:14:32.659 [DEBUG] [Thread-191196] [transport.py] [_log()] starting thread (client mode): 0xae5b57b0
2026-04-12T15:14:32.660 [DEBUG] [Thread-191196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:14:32.678 [DEBUG] [Thread-191196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:14:32.679 [INFO] [Thread-191196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:14:32.686 [DEBUG] [Thread-191196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:14:32.687 [DEBUG] [Thread-191196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:14:32.687 [DEBUG] [Thread-191196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:14:32.687 [DEBUG] [Thread-191196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:14:32.687 [DEBUG] [Thread-191196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:14:32.687 [DEBUG] [Thread-191196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:14:32.687 [DEBUG] [Thread-191196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] client lang: <none>
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] server lang: <none>
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] kex follows: False
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:14:32.688 [DEBUG] [Thread-191196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:14:32.689 [DEBUG] [Thread-191196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:14:32.689 [DEBUG] [Thread-191196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:14:32.689 [DEBUG] [Thread-191196] [transport.py] [_log()] Compression: none
2026-04-12T15:14:32.689 [DEBUG] [Thread-191196] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:14:32.752 [DEBUG] [Thread-191196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:14:32.753 [DEBUG] [Thread-191196] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:14:32.754 [DEBUG] [Thread-191196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:14:32.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:14:32.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:14:32.815 [DEBUG] [Thread-191196] [transport.py] [_log()] userauth is OK
2026-04-12T15:14:32.816 [DEBUG] [Thread-191196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:14:32.816 [DEBUG] [Thread-191196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:14:32.816 [DEBUG] [Thread-191196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:14:32.816 [DEBUG] [Thread-191196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:14:32.835 [INFO] [Thread-191196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:14:32.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:14:32.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:14:32.848 [DEBUG] [Thread-191198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:14:33.640 [DEBUG] [Thread-191196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:14:33.640 [DEBUG] [Thread-191196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:14:33.688 [DEBUG] [Thread-191196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:14:33.688 [DEBUG] [Thread-191196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:14:33.696 [DEBUG] [Thread-191196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:14:33.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:14:33.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:14:33.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:14:33.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:14:33.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:14:33.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:14:33.732 [DEBUG] [Thread-191196] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:14:39.017 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:14:39.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:14:41.555 [DEBUG] [Thread-191199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:14:47.903 [DEBUG] [Thread-191200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:15:02.937 [DEBUG] [Thread-191201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:15:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:15:03.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:15:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:15:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 14, 44), 6.44217, 65.5566, 0.0, 22.6886, 16.1863, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:15:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:14:44
2026-04-12T15:15:05.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:15:05.589 [DEBUG] [Thread-191202] [transport.py] [_log()] starting thread (client mode): 0xb0feb5b0
2026-04-12T15:15:05.589 [DEBUG] [Thread-191202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:15:05.609 [DEBUG] [Thread-191202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:15:05.609 [INFO] [Thread-191202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] client lang: <none>
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] server lang: <none>
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] kex follows: False
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] Compression: none
2026-04-12T15:15:05.613 [DEBUG] [Thread-191202] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:15:05.630 [DEBUG] [Thread-191202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:15:05.631 [DEBUG] [Thread-191202] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:15:05.631 [DEBUG] [Thread-191202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:15:05.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:15:05.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:15:05.633 [DEBUG] [Thread-191202] [transport.py] [_log()] userauth is OK
2026-04-12T15:15:05.633 [DEBUG] [Thread-191202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:15:05.633 [DEBUG] [Thread-191202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:15:05.633 [DEBUG] [Thread-191202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:15:05.633 [DEBUG] [Thread-191202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:15:05.644 [INFO] [Thread-191202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:15:05.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:15:06.563 [DEBUG] [Thread-191202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:15:06.563 [DEBUG] [Thread-191202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:15:06.563 [DEBUG] [Thread-191202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:15:06.604 [DEBUG] [Thread-191202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:15:06.604 [DEBUG] [Thread-191202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:15:06.608 [DEBUG] [Thread-191202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:15:06.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:15:06.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:15:06.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:15:06.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:15:06.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:15:06.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:15:06.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:15:06.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:15:06.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:15:06.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.551842 -999.00  +14.80  11.88     70   +9.50 1 2 1 1 1   888    0 5.06 1.07 ----- 9.3 11.9 277.4 19.9 20.4 -20.3 19.8 -19.6 19.6 -22.6 20.9 -19.3
2026-04-12T15:15:06.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:15:06.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:15:06.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.551842
2026-04-12T15:15:06.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:15:06.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:15:06.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:15:06.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:15:06.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:15:06.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:14:44', tmtdew=6.44217, humidity=65.5566, cloud=0.0, wind=22.6886, temperature=16.1863, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:14:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:15:06.641 [DEBUG] [Thread-191202] [transport.py] [_log()] EOF in transport thread
2026-04-12T15: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
2026-04-12T15:15:06.731 [DEBUG] [Thread-191205] [transport.py] [_log()] starting thread (client mode): 0xae50bd90
2026-04-12T15:15:06.731 [DEBUG] [Thread-191205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:15:06.746 [DEBUG] [Thread-191205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:15:06.746 [INFO] [Thread-191205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:15:06.753 [DEBUG] [Thread-191205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] client lang: <none>
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] server lang: <none>
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] kex follows: False
2026-04-12T15:15:06.754 [DEBUG] [Thread-191205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:15:06.755 [DEBUG] [Thread-191205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:15:06.755 [DEBUG] [Thread-191205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:15:06.755 [DEBUG] [Thread-191205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:15:06.755 [DEBUG] [Thread-191205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:15:06.755 [DEBUG] [Thread-191205] [transport.py] [_log()] Compression: none
2026-04-12T15:15:06.755 [DEBUG] [Thread-191205] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:15:06.810 [DEBUG] [Thread-191205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:15:06.811 [DEBUG] [Thread-191205] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:15:06.811 [DEBUG] [Thread-191205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:15:06.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:15:06.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:15:06.867 [DEBUG] [Thread-191205] [transport.py] [_log()] userauth is OK
2026-04-12T15:15:06.868 [DEBUG] [Thread-191205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:15:06.868 [DEBUG] [Thread-191205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:15:06.868 [DEBUG] [Thread-191205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:15:06.868 [DEBUG] [Thread-191205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:15:06.887 [INFO] [Thread-191205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:15:06.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:15:06.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:15:07.691 [DEBUG] [Thread-191205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:15:07.692 [DEBUG] [Thread-191205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:15:07.740 [DEBUG] [Thread-191205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:15:07.741 [DEBUG] [Thread-191205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:15:07.749 [DEBUG] [Thread-191205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:15:07.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:15:07.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:15:07.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:15:07.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:15:07.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:15:07.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:15:07.783 [DEBUG] [Thread-191205] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:15:17.975 [DEBUG] [Thread-191207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:15:33.021 [DEBUG] [Thread-191208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:15:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:15:37.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:15:37.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:15:39.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 15, 19), 6.5118, 65.0434, 0.0, 18.157, 15.3597, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:15:39.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:15:19
2026-04-12T15:15:39.157 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:15:39.158 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:15:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:15:39.603 [DEBUG] [Thread-191209] [transport.py] [_log()] starting thread (client mode): 0xae50b460
2026-04-12T15:15:39.603 [DEBUG] [Thread-191209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:15:39.616 [DEBUG] [Thread-191209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:15:39.616 [INFO] [Thread-191209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:15:39.618 [DEBUG] [Thread-191209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] client lang: <none>
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] server lang: <none>
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] kex follows: False
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] Compression: none
2026-04-12T15:15:39.619 [DEBUG] [Thread-191209] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:15:39.640 [DEBUG] [Thread-191209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:15:39.641 [DEBUG] [Thread-191209] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:15:39.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:15:39.642 [DEBUG] [Thread-191209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:15:39.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:15:39.645 [DEBUG] [Thread-191209] [transport.py] [_log()] userauth is OK
2026-04-12T15:15:39.645 [DEBUG] [Thread-191209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:15:39.646 [DEBUG] [Thread-191209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:15:39.646 [DEBUG] [Thread-191209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:15:39.646 [DEBUG] [Thread-191209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:15:39.664 [INFO] [Thread-191209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:15:39.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:15:40.302 [DEBUG] [Thread-191209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:15:40.302 [DEBUG] [Thread-191209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:15:40.303 [DEBUG] [Thread-191209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:15:40.343 [DEBUG] [Thread-191209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:15:40.343 [DEBUG] [Thread-191209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:15:40.346 [DEBUG] [Thread-191209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:15:40.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:15:40.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:15:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:15:40.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:15:40.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:15:40.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:15:40.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:15:40.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:15:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:15:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.552189 -999.00  +15.00  12.51     70   +9.60 1 2 1 1 1   888    0 5.08 4.56 ----- 14.9 12.5 272.0 19.1 20.4 -21.5 19.8 -19.6 19.9 -17.6 21.0 -20.8
2026-04-12T15:15:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:15:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:15:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.552189
2026-04-12T15:15:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:15:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:15:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:15:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:15:40.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:15:40.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:15:19', tmtdew=6.5118, humidity=65.0434, cloud=0.0, wind=18.157, temperature=15.3597, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:15:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:15:40.370 [DEBUG] [Thread-191209] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:15:40.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:15:40.454 [DEBUG] [Thread-191212] [transport.py] [_log()] starting thread (client mode): 0xae5a47f0
2026-04-12T15:15:40.454 [DEBUG] [Thread-191212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:15:40.468 [DEBUG] [Thread-191212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:15:40.468 [INFO] [Thread-191212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:15:40.477 [DEBUG] [Thread-191212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:15:40.477 [DEBUG] [Thread-191212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:15:40.477 [DEBUG] [Thread-191212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:15:40.477 [DEBUG] [Thread-191212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:40.477 [DEBUG] [Thread-191212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] client lang: <none>
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] server lang: <none>
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] kex follows: False
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] Compression: none
2026-04-12T15:15:40.478 [DEBUG] [Thread-191212] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:15:40.536 [DEBUG] [Thread-191212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:15:40.536 [DEBUG] [Thread-191212] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:15:40.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:15:40.537 [DEBUG] [Thread-191212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:15:40.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:15:40.592 [DEBUG] [Thread-191212] [transport.py] [_log()] userauth is OK
2026-04-12T15:15:40.592 [DEBUG] [Thread-191212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:15:40.593 [DEBUG] [Thread-191212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:15:40.593 [DEBUG] [Thread-191212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:15:40.593 [DEBUG] [Thread-191212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:15:40.611 [INFO] [Thread-191212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:15:40.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:15:40.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:15:41.427 [DEBUG] [Thread-191212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:15:41.427 [DEBUG] [Thread-191212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:15:41.477 [DEBUG] [Thread-191212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:15:41.477 [DEBUG] [Thread-191212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:15:41.487 [DEBUG] [Thread-191212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:15:41.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:15:41.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:15:41.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:15:41.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:15:41.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:15:41.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:15:41.524 [DEBUG] [Thread-191212] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:15:41.616 [DEBUG] [Thread-191214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:15:48.051 [DEBUG] [Thread-191215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:03.110 [DEBUG] [Thread-191216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:11.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:16:11.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:16:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:16:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 15, 54), 6.56202, 64.8806, 0.0, 15.8983, 15.4431, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:16:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:15:54
2026-04-12T15:16:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:16:13.387 [DEBUG] [Thread-191217] [transport.py] [_log()] starting thread (client mode): 0xb0febe80
2026-04-12T15:16:13.388 [DEBUG] [Thread-191217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:16:13.410 [DEBUG] [Thread-191217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:16:13.410 [INFO] [Thread-191217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:16:13.412 [DEBUG] [Thread-191217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:16:13.412 [DEBUG] [Thread-191217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:16:13.412 [DEBUG] [Thread-191217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:16:13.412 [DEBUG] [Thread-191217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] client lang: <none>
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] server lang: <none>
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] kex follows: False
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:16:13.413 [DEBUG] [Thread-191217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:16:13.414 [DEBUG] [Thread-191217] [transport.py] [_log()] Compression: none
2026-04-12T15:16:13.414 [DEBUG] [Thread-191217] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:16:13.426 [DEBUG] [Thread-191217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:16:13.426 [DEBUG] [Thread-191217] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:16:13.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:16:13.427 [DEBUG] [Thread-191217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:16:13.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:16:13.429 [DEBUG] [Thread-191217] [transport.py] [_log()] userauth is OK
2026-04-12T15:16:13.429 [DEBUG] [Thread-191217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:16:13.429 [DEBUG] [Thread-191217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:16:13.430 [DEBUG] [Thread-191217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:16:13.430 [DEBUG] [Thread-191217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:16:13.448 [INFO] [Thread-191217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:16:13.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:16:14.071 [DEBUG] [Thread-191217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:16:14.072 [DEBUG] [Thread-191217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:16:14.072 [DEBUG] [Thread-191217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:16:14.113 [DEBUG] [Thread-191217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:16:14.113 [DEBUG] [Thread-191217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:16:14.117 [DEBUG] [Thread-191217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:16:14.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:16:14.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:16:14.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:16:14.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:16:14.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:16:14.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:16:14.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:16:14.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:16:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:16:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.552537 -999.00  +14.90  13.85     69   +9.20 1 2 1 1 1   888    0 5.16 7.02 ----- 7.8 13.8 277.8 17.9 20.5 -21.2 19.8 -19.4 19.8 -21.3 21.0 -19.6
2026-04-12T15:16:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:16:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:16:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.552537
2026-04-12T15:16:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:16:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:16:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:16:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:16:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:16:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:15:54', tmtdew=6.56202, humidity=64.8806, cloud=0.0, wind=15.8983, temperature=15.4431, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:15:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:16:14.143 [DEBUG] [Thread-191217] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:16:14.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:16:14.240 [DEBUG] [Thread-191220] [transport.py] [_log()] starting thread (client mode): 0xae5093f0
2026-04-12T15:16:14.240 [DEBUG] [Thread-191220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:16:14.255 [DEBUG] [Thread-191220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:16:14.255 [INFO] [Thread-191220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:16:14.262 [DEBUG] [Thread-191220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] client lang: <none>
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] server lang: <none>
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] kex follows: False
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:16:14.263 [DEBUG] [Thread-191220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:16:14.264 [DEBUG] [Thread-191220] [transport.py] [_log()] Compression: none
2026-04-12T15:16:14.264 [DEBUG] [Thread-191220] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:16:14.321 [DEBUG] [Thread-191220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:16:14.321 [DEBUG] [Thread-191220] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:16:14.322 [DEBUG] [Thread-191220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:16:14.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:16:14.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:16:14.380 [DEBUG] [Thread-191220] [transport.py] [_log()] userauth is OK
2026-04-12T15:16:14.380 [DEBUG] [Thread-191220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:16:14.381 [DEBUG] [Thread-191220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:16:14.381 [DEBUG] [Thread-191220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:16:14.381 [DEBUG] [Thread-191220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:16:14.400 [INFO] [Thread-191220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:16:14.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:16:14.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:16:15.244 [DEBUG] [Thread-191220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:16:15.245 [DEBUG] [Thread-191220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:16:15.293 [DEBUG] [Thread-191220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:16:15.293 [DEBUG] [Thread-191220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:16:15.303 [DEBUG] [Thread-191220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:16:15.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:16:15.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:16:15.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:16:15.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:16:15.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:16:15.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:16:15.340 [DEBUG] [Thread-191220] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:16:18.148 [DEBUG] [Thread-191222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:33.200 [DEBUG] [Thread-191223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:39.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:39.299 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:41.666 [DEBUG] [Thread-191224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:16:45.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:16:45.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:16:46.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 16, 30), 6.54729, 64.9303, 0.0, 16.6745, 15.3768, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:16:46.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:16:30
2026-04-12T15:16:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:16:47.399 [DEBUG] [Thread-191225] [transport.py] [_log()] starting thread (client mode): 0xae536470
2026-04-12T15:16:47.400 [DEBUG] [Thread-191225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:16:47.418 [DEBUG] [Thread-191225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:16:47.419 [INFO] [Thread-191225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] client lang: <none>
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] server lang: <none>
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] kex follows: False
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:16:47.422 [DEBUG] [Thread-191225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:16:47.423 [DEBUG] [Thread-191225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:16:47.423 [DEBUG] [Thread-191225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:16:47.423 [DEBUG] [Thread-191225] [transport.py] [_log()] Compression: none
2026-04-12T15:16:47.423 [DEBUG] [Thread-191225] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:16:47.440 [DEBUG] [Thread-191225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:16:47.441 [DEBUG] [Thread-191225] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:16:47.441 [DEBUG] [Thread-191225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:16:47.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:16:47.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:16:47.444 [DEBUG] [Thread-191225] [transport.py] [_log()] userauth is OK
2026-04-12T15:16:47.444 [DEBUG] [Thread-191225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:16:47.444 [DEBUG] [Thread-191225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:16:47.444 [DEBUG] [Thread-191225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:16:47.444 [DEBUG] [Thread-191225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:16:47.462 [INFO] [Thread-191225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:16:47.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:16:48.127 [DEBUG] [Thread-191225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:16:48.127 [DEBUG] [Thread-191225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:16:48.128 [DEBUG] [Thread-191225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:16:48.169 [DEBUG] [Thread-191225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:16:48.169 [DEBUG] [Thread-191225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:16:48.172 [DEBUG] [Thread-191225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:16:48.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:16:48.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:16:48.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:16:48.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:16:48.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:16:48.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:16:48.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:16:48.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:16:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:16:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.553231 -999.00  +15.10  11.12     69   +9.60 1 2 1 1 1   888    0 5.33 10.26 ----- 9.9 11.1 290.4 15.6 20.8 -20.5 20.0 -19.3 20.2 -18.0 21.4 -19.2
2026-04-12T15:16:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:16:48.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:16:48.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.553231
2026-04-12T15:16:48.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:16:48.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:16:48.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:16:48.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:16:48.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:16:48.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:16:30', tmtdew=6.54729, humidity=64.9303, cloud=0.0, wind=16.6745, temperature=15.3768, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:16:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:16:48.199 [DEBUG] [Thread-191225] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:16:48.234 [DEBUG] [Thread-191228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:16:48.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:16:48.294 [DEBUG] [Thread-191229] [transport.py] [_log()] starting thread (client mode): 0xae5b5300
2026-04-12T15:16:48.295 [DEBUG] [Thread-191229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:16:48.310 [DEBUG] [Thread-191229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:16:48.310 [INFO] [Thread-191229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:16:48.319 [DEBUG] [Thread-191229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:16:48.319 [DEBUG] [Thread-191229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:16:48.319 [DEBUG] [Thread-191229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:16:48.319 [DEBUG] [Thread-191229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:48.319 [DEBUG] [Thread-191229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:16:48.319 [DEBUG] [Thread-191229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:48.319 [DEBUG] [Thread-191229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] client lang: <none>
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] server lang: <none>
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] kex follows: False
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] Compression: none
2026-04-12T15:16:48.320 [DEBUG] [Thread-191229] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:16:48.377 [DEBUG] [Thread-191229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:16:48.377 [DEBUG] [Thread-191229] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:16:48.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:16:48.378 [DEBUG] [Thread-191229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:16:48.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:16:48.436 [DEBUG] [Thread-191229] [transport.py] [_log()] userauth is OK
2026-04-12T15:16:48.436 [DEBUG] [Thread-191229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:16:48.436 [DEBUG] [Thread-191229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:16:48.436 [DEBUG] [Thread-191229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:16:48.436 [DEBUG] [Thread-191229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:16:48.454 [INFO] [Thread-191229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:16:48.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:16:48.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:16:49.260 [DEBUG] [Thread-191229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:16:49.260 [DEBUG] [Thread-191229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:16:49.308 [DEBUG] [Thread-191229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:16:49.309 [DEBUG] [Thread-191229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:16:49.318 [DEBUG] [Thread-191229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:16:49.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:16:49.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:16:49.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:16:49.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:16:49.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:16:49.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:16:49.355 [DEBUG] [Thread-191229] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:17:03.277 [DEBUG] [Thread-191231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:17:18.312 [DEBUG] [Thread-191232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:17:19.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:17:19.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:17:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:17:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 17, 6), 6.65908, 64.4165, 0.0, 14.4695, 15.2443, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:17:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:17:06
2026-04-12T15:17:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:17:21.218 [DEBUG] [Thread-191233] [transport.py] [_log()] starting thread (client mode): 0xae5b7f40
2026-04-12T15:17:21.219 [DEBUG] [Thread-191233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:17:21.239 [DEBUG] [Thread-191233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:17:21.239 [INFO] [Thread-191233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:17:21.242 [DEBUG] [Thread-191233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:17:21.242 [DEBUG] [Thread-191233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:17:21.242 [DEBUG] [Thread-191233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:17:21.242 [DEBUG] [Thread-191233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:21.242 [DEBUG] [Thread-191233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:21.242 [DEBUG] [Thread-191233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] client lang: <none>
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] server lang: <none>
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] kex follows: False
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] Compression: none
2026-04-12T15:17:21.243 [DEBUG] [Thread-191233] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:17:21.261 [DEBUG] [Thread-191233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:17:21.262 [DEBUG] [Thread-191233] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:17:21.262 [DEBUG] [Thread-191233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:17:21.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:17:21.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:17:21.264 [DEBUG] [Thread-191233] [transport.py] [_log()] userauth is OK
2026-04-12T15:17:21.265 [DEBUG] [Thread-191233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:17:21.265 [DEBUG] [Thread-191233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:17:21.265 [DEBUG] [Thread-191233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:17:21.265 [DEBUG] [Thread-191233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:17:21.287 [INFO] [Thread-191233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:17:21.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:17:21.904 [DEBUG] [Thread-191233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:17:21.904 [DEBUG] [Thread-191233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:17:21.905 [DEBUG] [Thread-191233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:17:21.946 [DEBUG] [Thread-191233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:17:21.946 [DEBUG] [Thread-191233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:17:21.948 [DEBUG] [Thread-191233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:17:21.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:17:21.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:17:21.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:17:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:17:21.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:17:21.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:17:21.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:17:21.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:17:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:17:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.553578 -999.00  +15.10  13.53     69   +9.60 1 2 1 1 1   888    0 5.38 14.84 ----- 11.7 13.5 304.0 17.8 20.8 -21.3 20.0 -20.0 20.4 -18.2 21.5 -20.4
2026-04-12T15:17:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:17:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:17:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.553578
2026-04-12T15:17:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:17:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:17:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:17:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:17:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:17:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:17:06', tmtdew=6.65908, humidity=64.4165, cloud=0.0, wind=14.4695, temperature=15.2443, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:17:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:17:21.977 [DEBUG] [Thread-191233] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:17:22.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:17:22.077 [DEBUG] [Thread-191236] [transport.py] [_log()] starting thread (client mode): 0xb0f43640
2026-04-12T15:17:22.077 [DEBUG] [Thread-191236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:17:22.091 [DEBUG] [Thread-191236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:17:22.092 [INFO] [Thread-191236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:17:22.102 [DEBUG] [Thread-191236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:17:22.102 [DEBUG] [Thread-191236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:17:22.102 [DEBUG] [Thread-191236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:17:22.102 [DEBUG] [Thread-191236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:22.102 [DEBUG] [Thread-191236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] client lang: <none>
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] server lang: <none>
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] kex follows: False
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] Compression: none
2026-04-12T15:17:22.103 [DEBUG] [Thread-191236] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:17:22.162 [DEBUG] [Thread-191236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:17:22.163 [DEBUG] [Thread-191236] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:17:22.163 [DEBUG] [Thread-191236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:17:22.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:17:22.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:17:22.225 [DEBUG] [Thread-191236] [transport.py] [_log()] userauth is OK
2026-04-12T15:17:22.225 [DEBUG] [Thread-191236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:17:22.225 [DEBUG] [Thread-191236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:17:22.225 [DEBUG] [Thread-191236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:17:22.225 [DEBUG] [Thread-191236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:17:22.248 [INFO] [Thread-191236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:17:22.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:17:22.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:17:23.050 [DEBUG] [Thread-191236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:17:23.050 [DEBUG] [Thread-191236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:17:23.098 [DEBUG] [Thread-191236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:17:23.098 [DEBUG] [Thread-191236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:17:23.108 [DEBUG] [Thread-191236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:17:23.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:17:23.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:17:23.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:17:23.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:17:23.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:17:23.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:17:23.157 [DEBUG] [Thread-191236] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:17:33.352 [DEBUG] [Thread-191238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:17:39.440 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:17:39.441 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:17:41.719 [DEBUG] [Thread-191239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:17:48.412 [DEBUG] [Thread-191240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:17:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:17:53.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:17:53.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:17:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 17, 41), 6.6481, 64.5622, 0.0, 17.3614, 15.7554, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:17:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:17:41
2026-04-12T15:17:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:17:55.038 [DEBUG] [Thread-191241] [transport.py] [_log()] starting thread (client mode): 0xae5353f0
2026-04-12T15:17:55.038 [DEBUG] [Thread-191241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:17:55.058 [DEBUG] [Thread-191241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:17:55.058 [INFO] [Thread-191241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:17:55.060 [DEBUG] [Thread-191241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:17:55.060 [DEBUG] [Thread-191241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:17:55.060 [DEBUG] [Thread-191241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] client lang: <none>
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] server lang: <none>
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] kex follows: False
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] Compression: none
2026-04-12T15:17:55.061 [DEBUG] [Thread-191241] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:17:55.074 [DEBUG] [Thread-191241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:17:55.075 [DEBUG] [Thread-191241] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:17:55.076 [DEBUG] [Thread-191241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:17:55.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:17:55.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:17:55.078 [DEBUG] [Thread-191241] [transport.py] [_log()] userauth is OK
2026-04-12T15:17:55.078 [DEBUG] [Thread-191241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:17:55.079 [DEBUG] [Thread-191241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:17:55.079 [DEBUG] [Thread-191241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:17:55.079 [DEBUG] [Thread-191241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:17:55.092 [INFO] [Thread-191241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:17:55.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:17:55.715 [DEBUG] [Thread-191241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:17:55.716 [DEBUG] [Thread-191241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:17:55.716 [DEBUG] [Thread-191241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:17:55.757 [DEBUG] [Thread-191241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:17:55.757 [DEBUG] [Thread-191241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:17:55.761 [DEBUG] [Thread-191241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:17:55.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:17:55.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:17:55.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:17:55.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:17:55.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:17:55.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:17:55.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:17:55.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:17:55.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:17:55.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.553925 -999.00  +15.10   9.96     69   +9.50 1 2 1 1 1   888    0 5.61 18.87 ----- 8.7 10.0 300.0 15.3 20.9 -21.1 20.1 -19.9 20.4 -19.0 21.5 -20.2
2026-04-12T15:17:55.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:17:55.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:17:55.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.553925
2026-04-12T15:17:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:17:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:17:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:17:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:17:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:17:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:17:41', tmtdew=6.6481, humidity=64.5622, cloud=0.0, wind=17.3614, temperature=15.7554, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:17:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:17:55.788 [DEBUG] [Thread-191241] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:17:55.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:17:55.882 [DEBUG] [Thread-191244] [transport.py] [_log()] starting thread (client mode): 0xae5b7070
2026-04-12T15:17:55.882 [DEBUG] [Thread-191244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:17:55.899 [DEBUG] [Thread-191244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:17:55.899 [INFO] [Thread-191244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:17:55.908 [DEBUG] [Thread-191244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:17:55.908 [DEBUG] [Thread-191244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] client lang: <none>
2026-04-12T15:17:55.909 [DEBUG] [Thread-191244] [transport.py] [_log()] server lang: <none>
2026-04-12T15:17:55.910 [DEBUG] [Thread-191244] [transport.py] [_log()] kex follows: False
2026-04-12T15:17:55.910 [DEBUG] [Thread-191244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:17:55.910 [DEBUG] [Thread-191244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:17:55.910 [DEBUG] [Thread-191244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:17:55.910 [DEBUG] [Thread-191244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:17:55.910 [DEBUG] [Thread-191244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:17:55.910 [DEBUG] [Thread-191244] [transport.py] [_log()] Compression: none
2026-04-12T15:17:55.911 [DEBUG] [Thread-191244] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:17:55.971 [DEBUG] [Thread-191244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:17:55.972 [DEBUG] [Thread-191244] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:17:55.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:17:55.973 [DEBUG] [Thread-191244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:17:55.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:17:56.030 [DEBUG] [Thread-191244] [transport.py] [_log()] userauth is OK
2026-04-12T15:17:56.031 [DEBUG] [Thread-191244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:17:56.031 [DEBUG] [Thread-191244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:17:56.031 [DEBUG] [Thread-191244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:17:56.031 [DEBUG] [Thread-191244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:17:56.052 [INFO] [Thread-191244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:17:56.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:17:56.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:17:56.845 [DEBUG] [Thread-191244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:17:56.845 [DEBUG] [Thread-191244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:17:56.894 [DEBUG] [Thread-191244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:17:56.895 [DEBUG] [Thread-191244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:17:56.904 [DEBUG] [Thread-191244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:17:56.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:17:56.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:17: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
2026-04-12T15:17:56.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:17:56.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:17:56.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:17:56.941 [DEBUG] [Thread-191244] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:18:03.451 [DEBUG] [Thread-191246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:18:18.505 [DEBUG] [Thread-191247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:18:26.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:18:26.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:18:26.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:18:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 18, 17), 6.84578, 63.5188, 0.0, 10.976, 15.0782, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:18:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:18:17
2026-04-12T15:18:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:18:28.796 [DEBUG] [Thread-191248] [transport.py] [_log()] starting thread (client mode): 0xae537130
2026-04-12T15:18:28.796 [DEBUG] [Thread-191248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:18:28.817 [DEBUG] [Thread-191248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:18:28.817 [INFO] [Thread-191248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:18:28.821 [DEBUG] [Thread-191248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:18:28.821 [DEBUG] [Thread-191248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:18:28.821 [DEBUG] [Thread-191248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:18:28.821 [DEBUG] [Thread-191248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:18:28.821 [DEBUG] [Thread-191248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:18:28.821 [DEBUG] [Thread-191248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] client lang: <none>
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] server lang: <none>
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] kex follows: False
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] Compression: none
2026-04-12T15:18:28.822 [DEBUG] [Thread-191248] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:18:28.842 [DEBUG] [Thread-191248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:18:28.842 [DEBUG] [Thread-191248] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:18:28.843 [DEBUG] [Thread-191248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:18:28.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:18:28.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:18:28.845 [DEBUG] [Thread-191248] [transport.py] [_log()] userauth is OK
2026-04-12T15:18:28.846 [DEBUG] [Thread-191248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:18:28.846 [DEBUG] [Thread-191248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:18:28.846 [DEBUG] [Thread-191248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:18:28.846 [DEBUG] [Thread-191248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:18:28.870 [INFO] [Thread-191248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:18:28.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:18:29.504 [DEBUG] [Thread-191248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:18:29.504 [DEBUG] [Thread-191248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:18:29.504 [DEBUG] [Thread-191248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:18:29.545 [DEBUG] [Thread-191248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:18:29.545 [DEBUG] [Thread-191248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:18:29.548 [DEBUG] [Thread-191248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:18:29.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:18:29.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:18:29.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:18:29.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:18:29.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:18:29.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:18:29.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:18:29.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:18:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:18:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.554273 -999.00  +15.30  16.60     69   +9.70 1 2 1 1 1   888    0 5.78 21.68 ----- 16.1 16.6 273.2 22.2 20.8 -22.9 20.1 -20.6 20.5 -19.3 21.6 -20.8
2026-04-12T15:18:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:18:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:18:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.554273
2026-04-12T15:18:29.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:18:29.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:18:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:18:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:18:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:18:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:18:17', tmtdew=6.84578, humidity=63.5188, cloud=0.0, wind=10.976, temperature=15.0782, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:18:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:18:29.574 [DEBUG] [Thread-191248] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:18:29.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:18:29.667 [DEBUG] [Thread-191251] [transport.py] [_log()] starting thread (client mode): 0xae535720
2026-04-12T15:18:29.667 [DEBUG] [Thread-191251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:18:29.682 [DEBUG] [Thread-191251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:18:29.682 [INFO] [Thread-191251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:18:29.690 [DEBUG] [Thread-191251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:18:29.690 [DEBUG] [Thread-191251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:18:29.690 [DEBUG] [Thread-191251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:18:29.690 [DEBUG] [Thread-191251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] client lang: <none>
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] server lang: <none>
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] kex follows: False
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:18:29.691 [DEBUG] [Thread-191251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:18:29.692 [DEBUG] [Thread-191251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:18:29.692 [DEBUG] [Thread-191251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:18:29.692 [DEBUG] [Thread-191251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:18:29.692 [DEBUG] [Thread-191251] [transport.py] [_log()] Compression: none
2026-04-12T15:18:29.692 [DEBUG] [Thread-191251] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:18:29.750 [DEBUG] [Thread-191251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:18:29.750 [DEBUG] [Thread-191251] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:18:29.751 [DEBUG] [Thread-191251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:18:29.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:18:29.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:18:29.809 [DEBUG] [Thread-191251] [transport.py] [_log()] userauth is OK
2026-04-12T15:18:29.809 [DEBUG] [Thread-191251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:18:29.810 [DEBUG] [Thread-191251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:18:29.810 [DEBUG] [Thread-191251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:18:29.810 [DEBUG] [Thread-191251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:18:29.828 [INFO] [Thread-191251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:18:29.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:18:29.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:18:30.606 [DEBUG] [Thread-191251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:18:30.606 [DEBUG] [Thread-191251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:18:30.654 [DEBUG] [Thread-191251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:18:30.654 [DEBUG] [Thread-191251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:18:30.664 [DEBUG] [Thread-191251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:18:30.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:18:30.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:18:30.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:18:30.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:18:30.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:18:30.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:18:30.705 [DEBUG] [Thread-191251] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:18:33.542 [DEBUG] [Thread-191253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:18:39.583 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:18:39.584 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:18:41.775 [DEBUG] [Thread-191254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:18:48.595 [DEBUG] [Thread-191255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:19:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:19:00.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:19:00.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:19:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 18, 52), 6.3944, 65.689, 0.0, 11.2226, 15.8216, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:19:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:18:52
2026-04-12T15:19:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:19:02.545 [DEBUG] [Thread-191256] [transport.py] [_log()] starting thread (client mode): 0xae5a7bb0
2026-04-12T15:19:02.545 [DEBUG] [Thread-191256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:19:02.570 [DEBUG] [Thread-191256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:19:02.570 [INFO] [Thread-191256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] client lang: <none>
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] server lang: <none>
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] kex follows: False
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] Compression: none
2026-04-12T15:19:02.573 [DEBUG] [Thread-191256] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:19:02.591 [DEBUG] [Thread-191256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:19:02.592 [DEBUG] [Thread-191256] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:19:02.592 [DEBUG] [Thread-191256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:19:02.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:19:02.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:19:02.594 [DEBUG] [Thread-191256] [transport.py] [_log()] userauth is OK
2026-04-12T15:19:02.594 [DEBUG] [Thread-191256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:19:02.594 [DEBUG] [Thread-191256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:19:02.595 [DEBUG] [Thread-191256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:19:02.595 [DEBUG] [Thread-191256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:19:02.612 [INFO] [Thread-191256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:19:02.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:19:03.260 [DEBUG] [Thread-191256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:19:03.261 [DEBUG] [Thread-191256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:19:03.261 [DEBUG] [Thread-191256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:19:03.301 [DEBUG] [Thread-191256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:19:03.301 [DEBUG] [Thread-191256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:19:03.305 [DEBUG] [Thread-191256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:19:03.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:19:03.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:19:03.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:19:03.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:19:03.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:19:03.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:19:03.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:19:03.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:19:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:19:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.554620 -999.00  +15.40  14.44     68   +9.70 1 2 1 1 1   888    0 5.75 25.81 ----- 20.1 14.4 285.8 21.5 20.8 -22.2 20.1 -21.1 20.4 -20.5 21.4 -21.8
2026-04-12T15:19:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:19:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:19:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.554620
2026-04-12T15:19:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:19:03.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:19:03.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:19:03.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:19:03.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:19:03.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:18:52', tmtdew=6.3944, humidity=65.689, cloud=0.0, wind=11.2226, temperature=15.8216, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:18:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:19:03.335 [DEBUG] [Thread-191256] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:19:03.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:19:03.447 [DEBUG] [Thread-191259] [transport.py] [_log()] starting thread (client mode): 0xae509fc0
2026-04-12T15:19:03.447 [DEBUG] [Thread-191259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:19:03.462 [DEBUG] [Thread-191259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:19:03.462 [INFO] [Thread-191259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:19:03.470 [DEBUG] [Thread-191259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:19:03.470 [DEBUG] [Thread-191259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:19:03.470 [DEBUG] [Thread-191259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:19:03.470 [DEBUG] [Thread-191259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:03.470 [DEBUG] [Thread-191259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:03.470 [DEBUG] [Thread-191259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:03.470 [DEBUG] [Thread-191259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] client lang: <none>
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] server lang: <none>
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] kex follows: False
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] Compression: none
2026-04-12T15:19:03.471 [DEBUG] [Thread-191259] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:19:03.530 [DEBUG] [Thread-191259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:19:03.531 [DEBUG] [Thread-191259] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:19:03.532 [DEBUG] [Thread-191259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:19:03.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:19:03.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:19:03.589 [DEBUG] [Thread-191259] [transport.py] [_log()] userauth is OK
2026-04-12T15:19:03.590 [DEBUG] [Thread-191259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:19:03.590 [DEBUG] [Thread-191259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:19:03.590 [DEBUG] [Thread-191259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:19:03.590 [DEBUG] [Thread-191259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:19:03.611 [INFO] [Thread-191259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:19:03.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:19:03.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:19:03.632 [DEBUG] [Thread-191261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:19:04.452 [DEBUG] [Thread-191259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:19:04.452 [DEBUG] [Thread-191259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:19:04.500 [DEBUG] [Thread-191259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:19:04.500 [DEBUG] [Thread-191259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:19:04.510 [DEBUG] [Thread-191259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:19:04.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:19:04.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:19:04.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:19:04.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:19:04.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:19:04.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:19:04.548 [DEBUG] [Thread-191259] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:19:18.683 [DEBUG] [Thread-191262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:19:33.721 [DEBUG] [Thread-191263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:19:34.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:19:34.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:19:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:19:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 19, 28), 6.77836, 63.7285, 0.0, 21.8444, 15.3602, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:19:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:19:28
2026-04-12T15:19:36.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:19:36.463 [DEBUG] [Thread-191264] [transport.py] [_log()] starting thread (client mode): 0xb0f402e0
2026-04-12T15:19:36.463 [DEBUG] [Thread-191264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:19:36.483 [DEBUG] [Thread-191264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:19:36.483 [INFO] [Thread-191264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:19:36.486 [DEBUG] [Thread-191264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] client lang: <none>
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] server lang: <none>
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] kex follows: False
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:19:36.487 [DEBUG] [Thread-191264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:19:36.488 [DEBUG] [Thread-191264] [transport.py] [_log()] Compression: none
2026-04-12T15:19:36.488 [DEBUG] [Thread-191264] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:19:36.505 [DEBUG] [Thread-191264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:19:36.506 [DEBUG] [Thread-191264] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:19:36.506 [DEBUG] [Thread-191264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:19:36.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:19:36.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:19:36.549 [DEBUG] [Thread-191264] [transport.py] [_log()] userauth is OK
2026-04-12T15:19:36.549 [DEBUG] [Thread-191264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:19:36.549 [DEBUG] [Thread-191264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:19:36.549 [DEBUG] [Thread-191264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:19:36.549 [DEBUG] [Thread-191264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:19:36.583 [INFO] [Thread-191264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:19:36.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:19:37.211 [DEBUG] [Thread-191264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:19:37.211 [DEBUG] [Thread-191264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:19:37.211 [DEBUG] [Thread-191264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:19:37.252 [DEBUG] [Thread-191264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:19:37.252 [DEBUG] [Thread-191264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:19:37.255 [DEBUG] [Thread-191264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:19:37.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:19:37.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:19:37.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:19:37.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:19:37.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:19:37.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:19:37.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:19:37.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:19:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:19:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.554967 -999.00  +15.40  14.42     67   +9.50 1 2 1 1 1   888    0 6.08 32.01 ----- 16.1 14.4 274.4 25.4 20.7 -23.1 20.1 -20.6 20.2 -24.2 21.4 -20.9
2026-04-12T15:19:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:19:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:19:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.554967
2026-04-12T15:19:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:19:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:19:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:19:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:19:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:19:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:19:28', tmtdew=6.77836, humidity=63.7285, cloud=0.0, wind=21.8444, temperature=15.3602, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:19:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:19:37.281 [DEBUG] [Thread-191264] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:19:37.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:19:37.374 [DEBUG] [Thread-191267] [transport.py] [_log()] starting thread (client mode): 0xae50bf10
2026-04-12T15:19:37.374 [DEBUG] [Thread-191267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:19:37.389 [DEBUG] [Thread-191267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:19:37.389 [INFO] [Thread-191267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:19:37.401 [DEBUG] [Thread-191267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:19:37.401 [DEBUG] [Thread-191267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:19:37.401 [DEBUG] [Thread-191267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:19:37.401 [DEBUG] [Thread-191267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:37.401 [DEBUG] [Thread-191267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:19:37.401 [DEBUG] [Thread-191267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] client lang: <none>
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] server lang: <none>
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] kex follows: False
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] Compression: none
2026-04-12T15:19:37.402 [DEBUG] [Thread-191267] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:19:37.458 [DEBUG] [Thread-191267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:19:37.458 [DEBUG] [Thread-191267] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:19:37.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:19:37.459 [DEBUG] [Thread-191267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:19:37.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:19:37.514 [DEBUG] [Thread-191267] [transport.py] [_log()] userauth is OK
2026-04-12T15:19:37.514 [DEBUG] [Thread-191267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:19:37.514 [DEBUG] [Thread-191267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:19:37.514 [DEBUG] [Thread-191267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:19:37.514 [DEBUG] [Thread-191267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:19:37.533 [INFO] [Thread-191267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:19:37.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:19:37.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:19:38.334 [DEBUG] [Thread-191267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:19:38.334 [DEBUG] [Thread-191267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:19:38.385 [DEBUG] [Thread-191267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:19:38.385 [DEBUG] [Thread-191267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:19:38.397 [DEBUG] [Thread-191267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:19:38.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:19:38.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:19:38.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:19:38.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:19:38.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:19:38.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:19:38.445 [DEBUG] [Thread-191267] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:19:39.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:19:39.724 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:19:41.812 [DEBUG] [Thread-191269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:19:48.759 [DEBUG] [Thread-191270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:20:03.813 [DEBUG] [Thread-191271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:20:08.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:20:08.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:20:08.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:20:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 19, 28), 6.77836, 63.7285, 0.0, 21.8444, 15.3602, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:20:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:19:28
2026-04-12T15:20:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:20:10.388 [DEBUG] [Thread-191272] [transport.py] [_log()] starting thread (client mode): 0xb0feb5b0
2026-04-12T15:20:10.388 [DEBUG] [Thread-191272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:20:10.409 [DEBUG] [Thread-191272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:20:10.409 [INFO] [Thread-191272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:20:10.413 [DEBUG] [Thread-191272] [transport.py] [_log()] client lang: <none>
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] server lang: <none>
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] kex follows: False
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] Compression: none
2026-04-12T15:20:10.414 [DEBUG] [Thread-191272] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:20:10.434 [DEBUG] [Thread-191272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:20:10.434 [DEBUG] [Thread-191272] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:20:10.435 [DEBUG] [Thread-191272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:20:10.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:20:10.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:20:10.437 [DEBUG] [Thread-191272] [transport.py] [_log()] userauth is OK
2026-04-12T15:20:10.437 [DEBUG] [Thread-191272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:20:10.437 [DEBUG] [Thread-191272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:20:10.437 [DEBUG] [Thread-191272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:20:10.437 [DEBUG] [Thread-191272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:20:10.454 [INFO] [Thread-191272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:20:10.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:20:11.656 [DEBUG] [Thread-191272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:20:11.657 [DEBUG] [Thread-191272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:20:11.657 [DEBUG] [Thread-191272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:20:11.698 [DEBUG] [Thread-191272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:20:11.698 [DEBUG] [Thread-191272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:20:11.701 [DEBUG] [Thread-191272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:20:11.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:20:11.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:20:11.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:20:11.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:20:11.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:20:11.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:20:11.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:20:11.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:20:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:20:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.555314 -999.00  +15.30  20.71     65   +9.00 1 2 1 1 1   888    0 6.15 37.22 ----- 16.5 20.7 272.2 24.9 20.5 -22.7 20.0 -20.9 20.2 -22.0 21.2 -22.2
2026-04-12T15:20:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:20:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:20:11.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.555314
2026-04-12T15:20:11.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:20:11.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:20:11.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:20:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:20:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:20:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:19:28', tmtdew=6.77836, humidity=63.7285, cloud=0.0, wind=21.8444, temperature=15.3602, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:19:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:20:11.751 [DEBUG] [Thread-191272] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:20:11.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:20:11.845 [DEBUG] [Thread-191275] [transport.py] [_log()] starting thread (client mode): 0xae5b4580
2026-04-12T15:20:11.845 [DEBUG] [Thread-191275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:20:11.860 [DEBUG] [Thread-191275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:20:11.860 [INFO] [Thread-191275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:20:11.868 [DEBUG] [Thread-191275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:20:11.868 [DEBUG] [Thread-191275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:20:11.868 [DEBUG] [Thread-191275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:20:11.868 [DEBUG] [Thread-191275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:11.868 [DEBUG] [Thread-191275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:11.868 [DEBUG] [Thread-191275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] client lang: <none>
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] server lang: <none>
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] kex follows: False
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:20:11.869 [DEBUG] [Thread-191275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:20:11.870 [DEBUG] [Thread-191275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:20:11.870 [DEBUG] [Thread-191275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:20:11.870 [DEBUG] [Thread-191275] [transport.py] [_log()] Compression: none
2026-04-12T15:20:11.870 [DEBUG] [Thread-191275] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:20:11.926 [DEBUG] [Thread-191275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:20:11.926 [DEBUG] [Thread-191275] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:20:11.928 [DEBUG] [Thread-191275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:20:11.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:20:11.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:20:11.982 [DEBUG] [Thread-191275] [transport.py] [_log()] userauth is OK
2026-04-12T15:20:11.982 [DEBUG] [Thread-191275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:20:11.982 [DEBUG] [Thread-191275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:20:11.982 [DEBUG] [Thread-191275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:20:11.982 [DEBUG] [Thread-191275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:20:12.001 [INFO] [Thread-191275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:20:12.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:20:12.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:20:12.822 [DEBUG] [Thread-191275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:20:12.822 [DEBUG] [Thread-191275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:20:12.870 [DEBUG] [Thread-191275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:20:12.870 [DEBUG] [Thread-191275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:20:12.880 [DEBUG] [Thread-191275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:20:12.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:20:12.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:20:12.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:20:12.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:20:12.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:20:12.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:20:12.917 [DEBUG] [Thread-191275] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:20:18.852 [DEBUG] [Thread-191277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:20:33.905 [DEBUG] [Thread-191278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:20:39.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:20:39.867 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:20:41.848 [DEBUG] [Thread-191279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:20:42.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:20:42.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:20:42.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:20:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 20, 3), 6.9352, 63.0488, 0.0, 21.4387, 15.3765, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:20:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:20:03
2026-04-12T15:20:44.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:20:44.805 [DEBUG] [Thread-191280] [transport.py] [_log()] starting thread (client mode): 0xb0f6f010
2026-04-12T15:20:44.805 [DEBUG] [Thread-191280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:20:44.822 [DEBUG] [Thread-191280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:20:44.822 [INFO] [Thread-191280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:20:44.825 [DEBUG] [Thread-191280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:20:44.825 [DEBUG] [Thread-191280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] client lang: <none>
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] server lang: <none>
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] kex follows: False
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] Compression: none
2026-04-12T15:20:44.826 [DEBUG] [Thread-191280] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:20:44.841 [DEBUG] [Thread-191280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:20:44.841 [DEBUG] [Thread-191280] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:20:44.841 [DEBUG] [Thread-191280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:20:44.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:20:44.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:20:44.842 [DEBUG] [Thread-191280] [transport.py] [_log()] userauth is OK
2026-04-12T15:20:44.842 [DEBUG] [Thread-191280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:20:44.842 [DEBUG] [Thread-191280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:20:44.842 [DEBUG] [Thread-191280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:20:44.842 [DEBUG] [Thread-191280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:20:44.853 [INFO] [Thread-191280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:20:44.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:20:45.480 [DEBUG] [Thread-191280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:20:45.480 [DEBUG] [Thread-191280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:20:45.481 [DEBUG] [Thread-191280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:20:45.521 [DEBUG] [Thread-191280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:20:45.522 [DEBUG] [Thread-191280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:20:45.525 [DEBUG] [Thread-191280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:20:45.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:20:45.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:20:45.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:20:45.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:20:45.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:20:45.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:20:45.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:20:45.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:20:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:20:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.555661 -999.00  +15.10  17.16     66   +8.80 1 2 1 1 1   888    0 6.28 40.78 ----- 16.3 17.2 277.0 24.1 20.6 -21.6 20.0 -19.1 20.0 -18.6 21.2 -20.7
2026-04-12T15:20:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:20:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:20:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.555661
2026-04-12T15:20:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:20:45.560 [DEBUG] [Thread-191280] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:20:45.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:20:45.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:20:45.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:20:45.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:20:45.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:20:03', tmtdew=6.9352, humidity=63.0488, cloud=0.0, wind=21.4387, temperature=15.3765, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:20:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:20:45.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:20:45.657 [DEBUG] [Thread-191283] [transport.py] [_log()] starting thread (client mode): 0xb0f6de40
2026-04-12T15:20:45.657 [DEBUG] [Thread-191283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:20:45.672 [DEBUG] [Thread-191283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:20:45.672 [INFO] [Thread-191283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:20:45.690 [DEBUG] [Thread-191283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:20:45.690 [DEBUG] [Thread-191283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:20:45.690 [DEBUG] [Thread-191283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:20:45.690 [DEBUG] [Thread-191283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:45.690 [DEBUG] [Thread-191283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:20:45.690 [DEBUG] [Thread-191283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] client lang: <none>
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] server lang: <none>
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] kex follows: False
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:20:45.691 [DEBUG] [Thread-191283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:20:45.692 [DEBUG] [Thread-191283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:20:45.692 [DEBUG] [Thread-191283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:20:45.692 [DEBUG] [Thread-191283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:20:45.692 [DEBUG] [Thread-191283] [transport.py] [_log()] Compression: none
2026-04-12T15:20:45.692 [DEBUG] [Thread-191283] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:20:45.739 [DEBUG] [Thread-191283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:20:45.739 [DEBUG] [Thread-191283] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:20:45.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:20:45.741 [DEBUG] [Thread-191283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:20:45.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:20:45.798 [DEBUG] [Thread-191283] [transport.py] [_log()] userauth is OK
2026-04-12T15:20:45.798 [DEBUG] [Thread-191283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:20:45.799 [DEBUG] [Thread-191283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:20:45.799 [DEBUG] [Thread-191283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:20:45.799 [DEBUG] [Thread-191283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:20:45.817 [INFO] [Thread-191283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:20:45.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:20:45.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:20:46.672 [DEBUG] [Thread-191283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:20:46.672 [DEBUG] [Thread-191283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:20:46.720 [DEBUG] [Thread-191283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:20:46.721 [DEBUG] [Thread-191283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:20:46.729 [DEBUG] [Thread-191283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:20:46.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:20:46.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:20:46.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:20:46.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:20:46.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:20:46.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:20:46.764 [DEBUG] [Thread-191283] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:20:48.941 [DEBUG] [Thread-191285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:03.995 [DEBUG] [Thread-191286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:16.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:21:16.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:21:16.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:21:18.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 20, 39), 6.90576, 63.5011, 0.0, 22.1947, 15.9867, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:21:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:20:39
2026-04-12T15:21:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:21:18.840 [DEBUG] [Thread-191287] [transport.py] [_log()] starting thread (client mode): 0xb0fcf280
2026-04-12T15:21:18.840 [DEBUG] [Thread-191287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:21:18.860 [DEBUG] [Thread-191287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:21:18.860 [INFO] [Thread-191287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:21:18.863 [DEBUG] [Thread-191287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:21:18.863 [DEBUG] [Thread-191287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:21:18.863 [DEBUG] [Thread-191287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] client lang: <none>
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] server lang: <none>
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] kex follows: False
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:21:18.864 [DEBUG] [Thread-191287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:21:18.865 [DEBUG] [Thread-191287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:21:18.865 [DEBUG] [Thread-191287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:21:18.865 [DEBUG] [Thread-191287] [transport.py] [_log()] Compression: none
2026-04-12T15:21:18.865 [DEBUG] [Thread-191287] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:21:18.883 [DEBUG] [Thread-191287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:21:18.884 [DEBUG] [Thread-191287] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:21:18.885 [DEBUG] [Thread-191287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:21:18.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:21:18.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:21:18.887 [DEBUG] [Thread-191287] [transport.py] [_log()] userauth is OK
2026-04-12T15:21:18.888 [DEBUG] [Thread-191287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:21:18.888 [DEBUG] [Thread-191287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:21:18.888 [DEBUG] [Thread-191287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:21:18.888 [DEBUG] [Thread-191287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:21:18.907 [INFO] [Thread-191287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:21:18.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:21:19.032 [DEBUG] [Thread-191289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:19.548 [DEBUG] [Thread-191287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:21:19.548 [DEBUG] [Thread-191287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:21:19.549 [DEBUG] [Thread-191287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:21:19.589 [DEBUG] [Thread-191287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:21:19.589 [DEBUG] [Thread-191287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:21:19.592 [DEBUG] [Thread-191287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:21:19.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:21:19.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:21:19.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:21:19.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:21:19.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:21:19.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:21:19.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:21:19.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:21:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:21:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.556009 -999.00  +15.20  16.32     68   +9.30 1 2 1 1 1   888    0 6.52 47.62 ----- 15.8 16.3 276.8 23.0 20.6 -22.3 20.0 -19.8 20.0 -20.3 21.3 -20.4
2026-04-12T15:21:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:21:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:21:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.556009
2026-04-12T15:21:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:21:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:21:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:21:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:21:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:21:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:20:39', tmtdew=6.90576, humidity=63.5011, cloud=0.0, wind=22.1947, temperature=15.9867, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:20:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:21:19.617 [DEBUG] [Thread-191287] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:21:19.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:21:19.712 [DEBUG] [Thread-191291] [transport.py] [_log()] starting thread (client mode): 0xb0f6e2f0
2026-04-12T15:21:19.712 [DEBUG] [Thread-191291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:21:19.727 [DEBUG] [Thread-191291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:21:19.727 [INFO] [Thread-191291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] client lang: <none>
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] server lang: <none>
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] kex follows: False
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:21:19.736 [DEBUG] [Thread-191291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:21:19.737 [DEBUG] [Thread-191291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:21:19.737 [DEBUG] [Thread-191291] [transport.py] [_log()] Compression: none
2026-04-12T15:21:19.737 [DEBUG] [Thread-191291] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:21:19.794 [DEBUG] [Thread-191291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:21:19.795 [DEBUG] [Thread-191291] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:21:19.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:21:19.796 [DEBUG] [Thread-191291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:21:19.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:21:19.850 [DEBUG] [Thread-191291] [transport.py] [_log()] userauth is OK
2026-04-12T15:21:19.850 [DEBUG] [Thread-191291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:21:19.850 [DEBUG] [Thread-191291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:21:19.850 [DEBUG] [Thread-191291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:21:19.851 [DEBUG] [Thread-191291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:21:19.869 [INFO] [Thread-191291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:21:19.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:21:19.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:21:20.712 [DEBUG] [Thread-191291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:21:20.712 [DEBUG] [Thread-191291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:21:20.760 [DEBUG] [Thread-191291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:21:20.760 [DEBUG] [Thread-191291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:21:20.771 [DEBUG] [Thread-191291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:21:20.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:21:20.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:21:20.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:21:20.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:21:20.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:21:20.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:21:20.807 [DEBUG] [Thread-191291] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:21:34.065 [DEBUG] [Thread-191293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:40.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:40.010 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:41.882 [DEBUG] [Thread-191294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:49.130 [DEBUG] [Thread-191295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:21:50.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:21:50.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:21:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:21:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 21, 15), 7.40503, 61.3723, 0.0, 17.6807, 15.144, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:21:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:21:15
2026-04-12T15:21:52.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:21:52.829 [DEBUG] [Thread-191296] [transport.py] [_log()] starting thread (client mode): 0xb0f6d330
2026-04-12T15:21:52.829 [DEBUG] [Thread-191296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:21:52.849 [DEBUG] [Thread-191296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:21:52.849 [INFO] [Thread-191296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:21:52.852 [DEBUG] [Thread-191296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] client lang: <none>
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] server lang: <none>
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] kex follows: False
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] Compression: none
2026-04-12T15:21:52.853 [DEBUG] [Thread-191296] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:21:52.870 [DEBUG] [Thread-191296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:21:52.871 [DEBUG] [Thread-191296] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:21:52.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:21:52.872 [DEBUG] [Thread-191296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:21:52.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:21:52.874 [DEBUG] [Thread-191296] [transport.py] [_log()] userauth is OK
2026-04-12T15:21:52.874 [DEBUG] [Thread-191296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:21:52.874 [DEBUG] [Thread-191296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:21:52.874 [DEBUG] [Thread-191296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:21:52.874 [DEBUG] [Thread-191296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:21:52.899 [INFO] [Thread-191296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:21:52.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:21:53.509 [DEBUG] [Thread-191296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:21:53.509 [DEBUG] [Thread-191296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:21:53.510 [DEBUG] [Thread-191296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:21:53.550 [DEBUG] [Thread-191296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:21:53.550 [DEBUG] [Thread-191296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:21:53.554 [DEBUG] [Thread-191296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:21:53.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:21:53.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:21:53.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:21:53.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:21:53.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:21:53.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:21:53.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:21:53.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:21:53.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:21:53.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.556703 -999.00  +14.80  15.91     67   +8.80 1 2 1 1 1   888    0 6.77 54.15 ----- 14.3 15.9 281.2 24.1 20.2 -22.2 19.7 -20.0 19.6 -19.4 20.7 -22.4
2026-04-12T15:21:53.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:21:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:21:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.556703
2026-04-12T15:21:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:21:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:21:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:21:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:21:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:21:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:21:15', tmtdew=7.40503, humidity=61.3723, cloud=0.0, wind=17.6807, temperature=15.144, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:21:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:21:53.579 [DEBUG] [Thread-191296] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:21:53.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:21:53.672 [DEBUG] [Thread-191299] [transport.py] [_log()] starting thread (client mode): 0xb0f6ccd0
2026-04-12T15:21:53.672 [DEBUG] [Thread-191299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:21:53.690 [DEBUG] [Thread-191299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:21:53.691 [INFO] [Thread-191299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] client lang: <none>
2026-04-12T15:21:53.701 [DEBUG] [Thread-191299] [transport.py] [_log()] server lang: <none>
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] kex follows: False
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] Compression: none
2026-04-12T15:21:53.702 [DEBUG] [Thread-191299] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:21:53.759 [DEBUG] [Thread-191299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:21:53.760 [DEBUG] [Thread-191299] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:21:53.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:21:53.761 [DEBUG] [Thread-191299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:21:53.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:21:53.819 [DEBUG] [Thread-191299] [transport.py] [_log()] userauth is OK
2026-04-12T15:21:53.819 [DEBUG] [Thread-191299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:21:53.819 [DEBUG] [Thread-191299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:21:53.820 [DEBUG] [Thread-191299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:21:53.820 [DEBUG] [Thread-191299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:21:53.841 [INFO] [Thread-191299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:21:53.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:21:53.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:21:54.713 [DEBUG] [Thread-191299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:21:54.713 [DEBUG] [Thread-191299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:21:54.764 [DEBUG] [Thread-191299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:21:54.764 [DEBUG] [Thread-191299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:21:54.775 [DEBUG] [Thread-191299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:21:54.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:21:54.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:21:54.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:21:54.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:21:54.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:21:54.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:21:54.813 [DEBUG] [Thread-191299] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:22:04.166 [DEBUG] [Thread-191301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:22:19.219 [DEBUG] [Thread-191302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:22:24.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:22:24.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:22:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:22:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 21, 51), 7.16447, 62.3412, 0.0, 14.1862, 15.7217, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:22:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:21:51
2026-04-12T15:22:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:22:26.664 [DEBUG] [Thread-191303] [transport.py] [_log()] starting thread (client mode): 0xb0fcc400
2026-04-12T15:22:26.664 [DEBUG] [Thread-191303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:22:26.683 [DEBUG] [Thread-191303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:22:26.684 [INFO] [Thread-191303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] client lang: <none>
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] server lang: <none>
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] kex follows: False
2026-04-12T15:22:26.687 [DEBUG] [Thread-191303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:22:26.688 [DEBUG] [Thread-191303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:22:26.688 [DEBUG] [Thread-191303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:22:26.688 [DEBUG] [Thread-191303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:22:26.688 [DEBUG] [Thread-191303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:22:26.688 [DEBUG] [Thread-191303] [transport.py] [_log()] Compression: none
2026-04-12T15:22:26.688 [DEBUG] [Thread-191303] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:22:26.697 [DEBUG] [Thread-191303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:22:26.697 [DEBUG] [Thread-191303] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:22:26.698 [DEBUG] [Thread-191303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:22:26.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:22:26.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:22:26.701 [DEBUG] [Thread-191303] [transport.py] [_log()] userauth is OK
2026-04-12T15:22:26.701 [DEBUG] [Thread-191303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:22:26.701 [DEBUG] [Thread-191303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:22:26.701 [DEBUG] [Thread-191303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:22:26.701 [DEBUG] [Thread-191303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:22:26.726 [INFO] [Thread-191303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:22:26.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:22:27.336 [DEBUG] [Thread-191303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:22:27.337 [DEBUG] [Thread-191303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:22:27.337 [DEBUG] [Thread-191303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:22:27.377 [DEBUG] [Thread-191303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:22:27.377 [DEBUG] [Thread-191303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:22:27.381 [DEBUG] [Thread-191303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:22:27.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:22:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:22:27.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:22:27.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:22:27.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:22:27.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:22:27.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:22:27.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:22:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:22:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.557051 -999.00  +14.70  20.29     67   +8.80 1 2 1 1 1   888    0 7.00 59.06 ----- 18.4 20.3 272.6 26.3 19.9 -22.6 19.6 -19.6 19.4 -21.0 20.5 -20.8
2026-04-12T15:22:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:22:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:22:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.557051
2026-04-12T15:22:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:22:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:22:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:22:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:22:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:22:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:21:51', tmtdew=7.16447, humidity=62.3412, cloud=0.0, wind=14.1862, temperature=15.7217, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:22:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:22:27.407 [DEBUG] [Thread-191303] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:22:27.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:22:27.501 [DEBUG] [Thread-191306] [transport.py] [_log()] starting thread (client mode): 0xb0feb2e0
2026-04-12T15:22:27.501 [DEBUG] [Thread-191306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:22:27.516 [DEBUG] [Thread-191306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:22:27.516 [INFO] [Thread-191306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:22:27.524 [DEBUG] [Thread-191306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] client lang: <none>
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] server lang: <none>
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] kex follows: False
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] Compression: none
2026-04-12T15:22:27.525 [DEBUG] [Thread-191306] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:22:27.582 [DEBUG] [Thread-191306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:22:27.583 [DEBUG] [Thread-191306] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:22:27.583 [DEBUG] [Thread-191306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:22:27.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:22:27.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:22:27.638 [DEBUG] [Thread-191306] [transport.py] [_log()] userauth is OK
2026-04-12T15:22:27.639 [DEBUG] [Thread-191306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:22:27.639 [DEBUG] [Thread-191306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:22:27.639 [DEBUG] [Thread-191306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:22:27.639 [DEBUG] [Thread-191306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:22:27.662 [INFO] [Thread-191306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:22:27.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:22:27.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:22:28.521 [DEBUG] [Thread-191306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:22:28.522 [DEBUG] [Thread-191306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:22:28.569 [DEBUG] [Thread-191306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:22:28.569 [DEBUG] [Thread-191306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:22:28.579 [DEBUG] [Thread-191306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:22:28.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:22:28.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:22:28.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:22:28.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:22:28.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:22:28.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:22:28.616 [DEBUG] [Thread-191306] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:22:34.257 [DEBUG] [Thread-191308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:22:40.154 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:22:40.155 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:22:41.927 [DEBUG] [Thread-191309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:22:49.310 [DEBUG] [Thread-191310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:22:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:22:58.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:22:58.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:22:59.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 22, 27), 6.91821, 63.082, 0.0, 15.2809, 15.0443, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:22:59.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:22:27
2026-04-12T15:23:00.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:23:00.477 [DEBUG] [Thread-191311] [transport.py] [_log()] starting thread (client mode): 0xb0f6c4f0
2026-04-12T15:23:00.477 [DEBUG] [Thread-191311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:23:00.500 [DEBUG] [Thread-191311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:23:00.500 [INFO] [Thread-191311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] client lang: <none>
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] server lang: <none>
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] kex follows: False
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] Compression: none
2026-04-12T15:23:00.503 [DEBUG] [Thread-191311] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:23:00.517 [DEBUG] [Thread-191311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:23:00.517 [DEBUG] [Thread-191311] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:23:00.518 [DEBUG] [Thread-191311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:23:00.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:23:00.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:23:00.519 [DEBUG] [Thread-191311] [transport.py] [_log()] userauth is OK
2026-04-12T15:23:00.519 [DEBUG] [Thread-191311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:23:00.519 [DEBUG] [Thread-191311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:23:00.519 [DEBUG] [Thread-191311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:23:00.519 [DEBUG] [Thread-191311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:23:00.535 [INFO] [Thread-191311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:23:00.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:23:01.169 [DEBUG] [Thread-191311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:23:01.169 [DEBUG] [Thread-191311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:23:01.170 [DEBUG] [Thread-191311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:23:01.210 [DEBUG] [Thread-191311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:23:01.210 [DEBUG] [Thread-191311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:23:01.213 [DEBUG] [Thread-191311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:23:01.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:23:01.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:23:01.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:23:01.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:23:01.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:23:01.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:23:01.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:23:01.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.557398 -999.00  +14.60  16.32     68   +8.70 1 2 1 1 1   888    0 7.07 63.37 ----- 16.1 16.3 276.4 22.1 19.9 -21.7 19.5 -19.1 19.1 -22.0 20.3 -19.6
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.557398
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:23:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:23:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:22:27', tmtdew=6.91821, humidity=63.082, cloud=0.0, wind=15.2809, temperature=15.0443, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:22:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:23:01.236 [DEBUG] [Thread-191311] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:23:01.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:23:01.330 [DEBUG] [Thread-191314] [transport.py] [_log()] starting thread (client mode): 0xb0f41510
2026-04-12T15:23:01.330 [DEBUG] [Thread-191314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:23:01.344 [DEBUG] [Thread-191314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:23:01.344 [INFO] [Thread-191314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] client lang: <none>
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] server lang: <none>
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] kex follows: False
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] Compression: none
2026-04-12T15:23:01.352 [DEBUG] [Thread-191314] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:23:01.410 [DEBUG] [Thread-191314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:23:01.410 [DEBUG] [Thread-191314] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:23:01.411 [DEBUG] [Thread-191314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:23:01.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:23:01.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:23:01.467 [DEBUG] [Thread-191314] [transport.py] [_log()] userauth is OK
2026-04-12T15:23:01.467 [DEBUG] [Thread-191314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:23:01.467 [DEBUG] [Thread-191314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:23:01.468 [DEBUG] [Thread-191314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:23:01.468 [DEBUG] [Thread-191314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:23:01.489 [INFO] [Thread-191314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:23:01.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:23:01.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:23:02.326 [DEBUG] [Thread-191314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:23:02.326 [DEBUG] [Thread-191314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:23:02.375 [DEBUG] [Thread-191314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:23:02.375 [DEBUG] [Thread-191314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:23:02.384 [DEBUG] [Thread-191314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:23:02.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:23:02.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:23:02.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:23:02.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:23:02.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:23:02.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:23:02.420 [DEBUG] [Thread-191314] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:23:04.346 [DEBUG] [Thread-191316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:23:19.399 [DEBUG] [Thread-191317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:23:32.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:23:32.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:23:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:23:33.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 23, 2), 7.00454, 62.7175, 0.0, 16.2688, 15.0775, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:23:33.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:23:02
2026-04-12T15:23:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:23:34.287 [DEBUG] [Thread-191318] [transport.py] [_log()] starting thread (client mode): 0xb0fea3b0
2026-04-12T15:23:34.287 [DEBUG] [Thread-191318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:23:34.308 [DEBUG] [Thread-191318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:23:34.308 [INFO] [Thread-191318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:23:34.311 [DEBUG] [Thread-191318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:23:34.311 [DEBUG] [Thread-191318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] client lang: <none>
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] server lang: <none>
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] kex follows: False
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] Compression: none
2026-04-12T15:23:34.312 [DEBUG] [Thread-191318] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:23:34.330 [DEBUG] [Thread-191318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:23:34.331 [DEBUG] [Thread-191318] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:23:34.331 [DEBUG] [Thread-191318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:23:34.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:23:34.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:23:34.333 [DEBUG] [Thread-191318] [transport.py] [_log()] userauth is OK
2026-04-12T15:23:34.333 [DEBUG] [Thread-191318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:23:34.334 [DEBUG] [Thread-191318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:23:34.334 [DEBUG] [Thread-191318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:23:34.334 [DEBUG] [Thread-191318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:23:34.357 [INFO] [Thread-191318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:23:34.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:23:34.435 [DEBUG] [Thread-191320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:23:34.963 [DEBUG] [Thread-191318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:23:34.964 [DEBUG] [Thread-191318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:23:34.964 [DEBUG] [Thread-191318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:23:35.005 [DEBUG] [Thread-191318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:23:35.005 [DEBUG] [Thread-191318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:23:35.008 [DEBUG] [Thread-191318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:23:35.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:23:35.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:23:35.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:23:35.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:23:35.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:23:35.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:23:35.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:23:35.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:23:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:23:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.557745 -999.00  +14.70  10.36     69   +9.30 1 2 1 1 1   888    0 7.23 71.37 ----- 11.8 10.4 281.2 21.5 19.9 -20.3 19.5 -17.9 19.2 -18.7 20.2 -19.0
2026-04-12T15:23:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:23:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:23:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.557745
2026-04-12T15:23:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:23:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:23:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:23:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:23:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:23:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:23:02', tmtdew=7.00454, humidity=62.7175, cloud=0.0, wind=16.2688, temperature=15.0775, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:23:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:23:35.031 [DEBUG] [Thread-191318] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:23:35.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:23:35.127 [DEBUG] [Thread-191322] [transport.py] [_log()] starting thread (client mode): 0xb0fe9720
2026-04-12T15:23:35.127 [DEBUG] [Thread-191322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:23:35.142 [DEBUG] [Thread-191322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:23:35.142 [INFO] [Thread-191322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] client lang: <none>
2026-04-12T15:23:35.149 [DEBUG] [Thread-191322] [transport.py] [_log()] server lang: <none>
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] kex follows: False
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] Compression: none
2026-04-12T15:23:35.150 [DEBUG] [Thread-191322] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:23:35.209 [DEBUG] [Thread-191322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:23:35.210 [DEBUG] [Thread-191322] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:23:35.210 [DEBUG] [Thread-191322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:23:35.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:23:35.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:23:35.268 [DEBUG] [Thread-191322] [transport.py] [_log()] userauth is OK
2026-04-12T15:23:35.268 [DEBUG] [Thread-191322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:23:35.268 [DEBUG] [Thread-191322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:23:35.268 [DEBUG] [Thread-191322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:23:35.268 [DEBUG] [Thread-191322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:23:35.287 [INFO] [Thread-191322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:23:35.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:23:35.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:23:36.115 [DEBUG] [Thread-191322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:23:36.115 [DEBUG] [Thread-191322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:23:36.163 [DEBUG] [Thread-191322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:23:36.163 [DEBUG] [Thread-191322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:23:36.172 [DEBUG] [Thread-191322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:23:36.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:23:36.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:23:36.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:23:36.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:23:36.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:23:36.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:23:36.206 [DEBUG] [Thread-191322] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:23:40.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:23:40.299 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:23:41.960 [DEBUG] [Thread-191324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:23:49.470 [DEBUG] [Thread-191325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:24:04.533 [DEBUG] [Thread-191326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:24:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:24:06.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:24:06.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:24:07.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 23, 37), 6.86873, 63.6007, 0.0, 16.7616, 15.7218, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:24:07.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:23:37
2026-04-12T15:24:07.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:24:08.041 [DEBUG] [Thread-191327] [transport.py] [_log()] starting thread (client mode): 0xae534e80
2026-04-12T15:24:08.041 [DEBUG] [Thread-191327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:24:08.056 [DEBUG] [Thread-191327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:24:08.057 [INFO] [Thread-191327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] client lang: <none>
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] server lang: <none>
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] kex follows: False
2026-04-12T15:24:08.059 [DEBUG] [Thread-191327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:24:08.060 [DEBUG] [Thread-191327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:24:08.060 [DEBUG] [Thread-191327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:24:08.060 [DEBUG] [Thread-191327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:24:08.060 [DEBUG] [Thread-191327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:24:08.060 [DEBUG] [Thread-191327] [transport.py] [_log()] Compression: none
2026-04-12T15:24:08.060 [DEBUG] [Thread-191327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:24:08.075 [DEBUG] [Thread-191327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:24:08.076 [DEBUG] [Thread-191327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:24:08.076 [DEBUG] [Thread-191327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:24:08.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:24:08.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:24:08.078 [DEBUG] [Thread-191327] [transport.py] [_log()] userauth is OK
2026-04-12T15:24:08.078 [DEBUG] [Thread-191327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:24:08.078 [DEBUG] [Thread-191327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:24:08.078 [DEBUG] [Thread-191327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:24:08.078 [DEBUG] [Thread-191327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:24:08.102 [INFO] [Thread-191327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:24:08.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:24:08.721 [DEBUG] [Thread-191327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:24:08.722 [DEBUG] [Thread-191327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:24:08.722 [DEBUG] [Thread-191327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:24:08.763 [DEBUG] [Thread-191327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:24:08.763 [DEBUG] [Thread-191327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:24:08.766 [DEBUG] [Thread-191327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:24:08.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:24:08.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:24:08.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:24:08.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:24:08.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:24:08.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:24:08.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:24:08.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:24:08.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:24:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.558092 -999.00  +14.80  11.49     69   +9.10 1 2 1 1 1   888    0 7.41 70.25 ----- 8.6 11.5 268.2 14.6 19.9 -19.1 19.5 -16.9 19.3 -16.6 20.1 -19.3
2026-04-12T15:24:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:24:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:24:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.558092
2026-04-12T15:24:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:24:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:24:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:24:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:24:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:24:08.790 [DEBUG] [Thread-191327] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:24:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:23:37', tmtdew=6.86873, humidity=63.6007, cloud=0.0, wind=16.7616, temperature=15.7218, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:23:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:24:08.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:24:08.891 [DEBUG] [Thread-191330] [transport.py] [_log()] starting thread (client mode): 0xae534970
2026-04-12T15:24:08.891 [DEBUG] [Thread-191330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:24:08.906 [DEBUG] [Thread-191330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:24:08.906 [INFO] [Thread-191330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:24:08.915 [DEBUG] [Thread-191330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] client lang: <none>
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] server lang: <none>
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] kex follows: False
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] Compression: none
2026-04-12T15:24:08.916 [DEBUG] [Thread-191330] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:24:08.972 [DEBUG] [Thread-191330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:24:08.973 [DEBUG] [Thread-191330] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:24:08.974 [DEBUG] [Thread-191330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:24:08.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:24:08.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:24:09.032 [DEBUG] [Thread-191330] [transport.py] [_log()] userauth is OK
2026-04-12T15:24:09.032 [DEBUG] [Thread-191330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:24:09.033 [DEBUG] [Thread-191330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:24:09.033 [DEBUG] [Thread-191330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:24:09.033 [DEBUG] [Thread-191330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:24:09.051 [INFO] [Thread-191330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:24:09.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:24:09.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:24:09.856 [DEBUG] [Thread-191330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:24:09.856 [DEBUG] [Thread-191330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:24:09.905 [DEBUG] [Thread-191330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:24:09.905 [DEBUG] [Thread-191330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:24:09.915 [DEBUG] [Thread-191330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:24:09.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:24:09.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:24:09.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:24:09.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:24:09.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:24:09.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:24:09.959 [DEBUG] [Thread-191330] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:24:19.573 [DEBUG] [Thread-191332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:24:34.625 [DEBUG] [Thread-191333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:24:39.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:24:39.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:24:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:24:40.440 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:24:40.442 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:24:41.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 24, 13), 6.98804, 63.0518, 0.0, 12.793, 14.9281, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:24:41.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:24:13
2026-04-12T15:24:41.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:24:41.795 [DEBUG] [Thread-191334] [transport.py] [_log()] starting thread (client mode): 0xb0f6c700
2026-04-12T15:24:41.795 [DEBUG] [Thread-191334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:24:41.815 [DEBUG] [Thread-191334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:24:41.815 [INFO] [Thread-191334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:24:41.819 [DEBUG] [Thread-191334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:24:41.819 [DEBUG] [Thread-191334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:24:41.819 [DEBUG] [Thread-191334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:24:41.819 [DEBUG] [Thread-191334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:41.819 [DEBUG] [Thread-191334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:41.819 [DEBUG] [Thread-191334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] client lang: <none>
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] server lang: <none>
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] kex follows: False
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:24:41.820 [DEBUG] [Thread-191334] [transport.py] [_log()] Compression: none
2026-04-12T15:24:41.821 [DEBUG] [Thread-191334] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:24:41.840 [DEBUG] [Thread-191334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:24:41.841 [DEBUG] [Thread-191334] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:24:41.842 [DEBUG] [Thread-191334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:24:41.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:24:41.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:24:41.844 [DEBUG] [Thread-191334] [transport.py] [_log()] userauth is OK
2026-04-12T15:24:41.844 [DEBUG] [Thread-191334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:24:41.844 [DEBUG] [Thread-191334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:24:41.844 [DEBUG] [Thread-191334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:24:41.844 [DEBUG] [Thread-191334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:24:41.869 [INFO] [Thread-191334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:24:41.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:24:42.006 [DEBUG] [Thread-191336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:24:42.554 [DEBUG] [Thread-191334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:24:42.555 [DEBUG] [Thread-191334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:24:42.555 [DEBUG] [Thread-191334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:24:42.596 [DEBUG] [Thread-191334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:24:42.596 [DEBUG] [Thread-191334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:24:42.602 [DEBUG] [Thread-191334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:24:42.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:24:42.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:24:42.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:24:42.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:24:42.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:24:42.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:24:42.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.558439 -999.00  +15.00  12.83     69   +9.50 1 2 1 1 1   888    0 7.34 68.86 ----- 10.2 12.8 272.6 19.8 19.9 -18.7 19.5 -16.6 19.3 -16.5 20.0 -18.3
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.558439
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:24:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:24:13', tmtdew=6.98804, humidity=63.0518, cloud=0.0, wind=12.793, temperature=14.9281, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:24:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:24:42.620 [DEBUG] [Thread-191334] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:24:42.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:24:42.706 [DEBUG] [Thread-191338] [transport.py] [_log()] starting thread (client mode): 0xb0fcc550
2026-04-12T15:24:42.706 [DEBUG] [Thread-191338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:24:42.720 [DEBUG] [Thread-191338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:24:42.720 [INFO] [Thread-191338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] client lang: <none>
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] server lang: <none>
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] kex follows: False
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] Compression: none
2026-04-12T15:24:42.728 [DEBUG] [Thread-191338] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:24:42.787 [DEBUG] [Thread-191338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:24:42.787 [DEBUG] [Thread-191338] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:24:42.788 [DEBUG] [Thread-191338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:24:42.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:24:42.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:24:42.845 [DEBUG] [Thread-191338] [transport.py] [_log()] userauth is OK
2026-04-12T15:24:42.845 [DEBUG] [Thread-191338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:24:42.845 [DEBUG] [Thread-191338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:24:42.845 [DEBUG] [Thread-191338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:24:42.845 [DEBUG] [Thread-191338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:24:42.865 [INFO] [Thread-191338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:24:42.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:24:42.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:24:43.650 [DEBUG] [Thread-191338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:24:43.651 [DEBUG] [Thread-191338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:24:43.698 [DEBUG] [Thread-191338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:24:43.698 [DEBUG] [Thread-191338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:24:43.707 [DEBUG] [Thread-191338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:24:43.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:24:43.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:24:43.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:24:43.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:24:43.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:24:43.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:24:43.746 [DEBUG] [Thread-191338] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:24:49.661 [DEBUG] [Thread-191340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:25:04.717 [DEBUG] [Thread-191341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:25:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:25:13.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:25:13.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:25:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 24, 48), 6.9005, 63.4345, 0.0, 13.7981, 15.5888, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:25:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:24:48
2026-04-12T15:25:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:25:15.536 [DEBUG] [Thread-191342] [transport.py] [_log()] starting thread (client mode): 0xb0fcc970
2026-04-12T15:25:15.536 [DEBUG] [Thread-191342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:25:15.564 [DEBUG] [Thread-191342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:25:15.564 [INFO] [Thread-191342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:25:15.566 [DEBUG] [Thread-191342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:25:15.567 [DEBUG] [Thread-191342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:25:15.567 [DEBUG] [Thread-191342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:25:15.567 [DEBUG] [Thread-191342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:25:15.567 [DEBUG] [Thread-191342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:25:15.567 [DEBUG] [Thread-191342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:25:15.567 [DEBUG] [Thread-191342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] client lang: <none>
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] server lang: <none>
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] kex follows: False
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:25:15.568 [DEBUG] [Thread-191342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:25:15.569 [DEBUG] [Thread-191342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:25:15.569 [DEBUG] [Thread-191342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:25:15.569 [DEBUG] [Thread-191342] [transport.py] [_log()] Compression: none
2026-04-12T15:25:15.569 [DEBUG] [Thread-191342] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:25:15.589 [DEBUG] [Thread-191342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:25:15.589 [DEBUG] [Thread-191342] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:25:15.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:25:15.590 [DEBUG] [Thread-191342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:25:15.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:25:15.592 [DEBUG] [Thread-191342] [transport.py] [_log()] userauth is OK
2026-04-12T15:25:15.592 [DEBUG] [Thread-191342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:25:15.593 [DEBUG] [Thread-191342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:25:15.593 [DEBUG] [Thread-191342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:25:15.593 [DEBUG] [Thread-191342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:25:15.616 [INFO] [Thread-191342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:25:15.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:25:16.629 [DEBUG] [Thread-191342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:25:16.629 [DEBUG] [Thread-191342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:25:16.630 [DEBUG] [Thread-191342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:25:16.670 [DEBUG] [Thread-191342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:25:16.671 [DEBUG] [Thread-191342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:25:16.673 [DEBUG] [Thread-191342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:25:16.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:25:16.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:25:16.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:25:16.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:25:16.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:25:16.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:25:16.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:25:16.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.558786 -999.00  +15.00   5.13     68   +9.30 1 2 1 1 1   888    0 7.48 74.55 ----- 6.2 5.1 256.4 9.3 20.0 -17.8 19.6 -16.0 19.4 -15.2 20.1 -17.2
2026-04-12T15:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.558786
2026-04-12T15:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:25:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:24:48', tmtdew=6.9005, humidity=63.4345, cloud=0.0, wind=13.7981, temperature=15.5888, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:24:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:25:16.701 [DEBUG] [Thread-191342] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:25:16.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:25:19.756 [DEBUG] [Thread-191345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:25:34.810 [DEBUG] [Thread-191346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:25:40.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:25:40.584 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:25:42.052 [DEBUG] [Thread-191347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:25:49.847 [DEBUG] [Thread-191348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:26:04.886 [DEBUG] [Thread-191349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:26:19.926 [DEBUG] [Thread-191350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:26:34.965 [DEBUG] [Thread-191351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:26:40.728 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:26:40.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:26:42.090 [DEBUG] [Thread-191352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:26:50.005 [DEBUG] [Thread-191353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:27:05.043 [DEBUG] [Thread-191354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:27:20.081 [DEBUG] [Thread-191355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:27:30.175 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T15:27:35.120 [DEBUG] [Thread-191356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:27:40.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:27:40.871 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:27:42.125 [DEBUG] [Thread-191357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:27:50.159 [DEBUG] [Thread-191358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:28:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:28:00.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:28:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:28:01.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 27, 45), 6.19082, 66.6491, 0.0, 11.1521, 16.0857, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:28:01.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:27:45
2026-04-12T15:28:01.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:28:02.077 [DEBUG] [Thread-191359] [transport.py] [_log()] starting thread (client mode): 0xb0fcc400
2026-04-12T15:28:02.077 [DEBUG] [Thread-191359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:28:02.098 [DEBUG] [Thread-191359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:28:02.099 [INFO] [Thread-191359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:28:02.101 [DEBUG] [Thread-191359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:28:02.101 [DEBUG] [Thread-191359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] client lang: <none>
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] server lang: <none>
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] kex follows: False
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] Compression: none
2026-04-12T15:28:02.102 [DEBUG] [Thread-191359] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:28:02.120 [DEBUG] [Thread-191359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:28:02.121 [DEBUG] [Thread-191359] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:28:02.121 [DEBUG] [Thread-191359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:28:02.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:28:02.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:28:02.124 [DEBUG] [Thread-191359] [transport.py] [_log()] userauth is OK
2026-04-12T15:28:02.125 [DEBUG] [Thread-191359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:28:02.125 [DEBUG] [Thread-191359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:28:02.125 [DEBUG] [Thread-191359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:28:02.125 [DEBUG] [Thread-191359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:28:02.150 [INFO] [Thread-191359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:28:02.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:28:02.785 [DEBUG] [Thread-191359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:28:02.786 [DEBUG] [Thread-191359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:28:02.786 [DEBUG] [Thread-191359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:28:02.826 [DEBUG] [Thread-191359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:28:02.826 [DEBUG] [Thread-191359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:28:02.829 [DEBUG] [Thread-191359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:28:02.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:28:02.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:28:02.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:28:02.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:28:02.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:28:02.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:28:02.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:28:02.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:28:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:28:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.560870 -999.00  +15.00  12.72     69   +9.40 1 2 1 1 1   888    0 7.67 75.18 ----- 11.0 12.7 266.4 17.9 20.2 -13.4 19.8 -12.2 19.9 -12.1 20.4 -14.1
2026-04-12T15:28:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:28:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:28:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.560870
2026-04-12T15:28:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:28:02.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:28:02.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:28:02.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:28:02.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:28:02.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:27:45', tmtdew=6.19082, humidity=66.6491, cloud=0.0, wind=11.1521, temperature=16.0857, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:27:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:28:02.853 [DEBUG] [Thread-191359] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:28:02.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:28:02.947 [DEBUG] [Thread-191362] [transport.py] [_log()] starting thread (client mode): 0xb0f6e260
2026-04-12T15:28:02.948 [DEBUG] [Thread-191362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:28:02.962 [DEBUG] [Thread-191362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:28:02.963 [INFO] [Thread-191362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:28:02.970 [DEBUG] [Thread-191362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] client lang: <none>
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] server lang: <none>
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] kex follows: False
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] Compression: none
2026-04-12T15:28:02.971 [DEBUG] [Thread-191362] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:28:03.030 [DEBUG] [Thread-191362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:28:03.030 [DEBUG] [Thread-191362] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:28:03.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:28:03.031 [DEBUG] [Thread-191362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:28:03.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:28:03.091 [DEBUG] [Thread-191362] [transport.py] [_log()] userauth is OK
2026-04-12T15:28:03.091 [DEBUG] [Thread-191362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:28:03.092 [DEBUG] [Thread-191362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:28:03.092 [DEBUG] [Thread-191362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:28:03.092 [DEBUG] [Thread-191362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:28:03.113 [INFO] [Thread-191362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:28:03.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:28:03.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:28:03.930 [DEBUG] [Thread-191362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:28:03.931 [DEBUG] [Thread-191362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:28:03.978 [DEBUG] [Thread-191362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:28:03.978 [DEBUG] [Thread-191362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:28:03.987 [DEBUG] [Thread-191362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:28:03.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:28:03.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:28:04.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:28:04.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:28:04.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:28:04.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:28:04.021 [DEBUG] [Thread-191362] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:28:05.193 [DEBUG] [Thread-191364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:28:20.255 [DEBUG] [Thread-191365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:28:34.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:28:34.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:28:34.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:28:35.295 [DEBUG] [Thread-191366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:28:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 28, 21), 6.67253, 64.5098, 0.0, 15.9336, 15.4755, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:28:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:28:21
2026-04-12T15:28:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:28:35.858 [DEBUG] [Thread-191367] [transport.py] [_log()] starting thread (client mode): 0xb0f422c0
2026-04-12T15:28:35.858 [DEBUG] [Thread-191367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:28:35.878 [DEBUG] [Thread-191367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:28:35.878 [INFO] [Thread-191367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] client lang: <none>
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] server lang: <none>
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] kex follows: False
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:28:35.881 [DEBUG] [Thread-191367] [transport.py] [_log()] Compression: none
2026-04-12T15:28:35.882 [DEBUG] [Thread-191367] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:28:35.898 [DEBUG] [Thread-191367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:28:35.898 [DEBUG] [Thread-191367] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:28:35.899 [DEBUG] [Thread-191367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:28:35.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:28:35.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:28:35.901 [DEBUG] [Thread-191367] [transport.py] [_log()] userauth is OK
2026-04-12T15:28:35.901 [DEBUG] [Thread-191367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:28:35.902 [DEBUG] [Thread-191367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:28:35.902 [DEBUG] [Thread-191367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:28:35.902 [DEBUG] [Thread-191367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:28:35.923 [INFO] [Thread-191367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:28:35.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:28:36.552 [DEBUG] [Thread-191367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:28:36.552 [DEBUG] [Thread-191367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:28:36.552 [DEBUG] [Thread-191367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:28:36.593 [DEBUG] [Thread-191367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:28:36.593 [DEBUG] [Thread-191367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:28:36.598 [DEBUG] [Thread-191367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:28:36.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:28:36.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:28:36.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:28:36.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:28:36.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:28:36.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:28:36.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:28:36.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:28:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:28:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.561217 -999.00  +15.10  14.65     70   +9.70 1 2 1 1 1   888    0 7.50 71.23 ----- 14.8 14.7 278.0 17.9 20.2 -14.5 19.8 -12.8 19.9 -13.0 20.6 -14.1
2026-04-12T15:28:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:28:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:28:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.561217
2026-04-12T15:28:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:28:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:28:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:28:36.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:28:36.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:28:36.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:28:21', tmtdew=6.67253, humidity=64.5098, cloud=0.0, wind=15.9336, temperature=15.4755, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:28:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:28:36.628 [DEBUG] [Thread-191367] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:28:36.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:28:36.722 [DEBUG] [Thread-191370] [transport.py] [_log()] starting thread (client mode): 0xb0f42140
2026-04-12T15:28:36.722 [DEBUG] [Thread-191370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:28:36.738 [DEBUG] [Thread-191370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:28:36.738 [INFO] [Thread-191370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:28:36.745 [DEBUG] [Thread-191370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] client lang: <none>
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] server lang: <none>
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] kex follows: False
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:28:36.746 [DEBUG] [Thread-191370] [transport.py] [_log()] Compression: none
2026-04-12T15:28:36.747 [DEBUG] [Thread-191370] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:28:36.806 [DEBUG] [Thread-191370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:28:36.806 [DEBUG] [Thread-191370] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:28:36.807 [DEBUG] [Thread-191370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:28:36.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:28:36.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:28:36.865 [DEBUG] [Thread-191370] [transport.py] [_log()] userauth is OK
2026-04-12T15:28:36.865 [DEBUG] [Thread-191370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:28:36.865 [DEBUG] [Thread-191370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:28:36.866 [DEBUG] [Thread-191370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:28:36.866 [DEBUG] [Thread-191370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:28:36.885 [INFO] [Thread-191370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:28:36.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:28:36.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:28:37.706 [DEBUG] [Thread-191370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:28:37.707 [DEBUG] [Thread-191370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:28:37.754 [DEBUG] [Thread-191370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:28:37.755 [DEBUG] [Thread-191370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:28:37.763 [DEBUG] [Thread-191370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:28:37.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:28:37.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:28:37.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:28:37.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:28:37.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:28:37.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:28:37.796 [DEBUG] [Thread-191370] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:28:41.011 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:28:41.013 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:28:42.169 [DEBUG] [Thread-191372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:28:50.333 [DEBUG] [Thread-191373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:29:05.386 [DEBUG] [Thread-191374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:29:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:29:07.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:29:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:29:09.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 28, 56), 7.00713, 62.8858, 0.0, 13.9226, 15.8412, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:29:09.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:28:56
2026-04-12T15:29:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:29:09.650 [DEBUG] [Thread-191375] [transport.py] [_log()] starting thread (client mode): 0xae537700
2026-04-12T15:29:09.650 [DEBUG] [Thread-191375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:29:09.670 [DEBUG] [Thread-191375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:29:09.670 [INFO] [Thread-191375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] client lang: <none>
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] server lang: <none>
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] kex follows: False
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] Compression: none
2026-04-12T15:29:09.672 [DEBUG] [Thread-191375] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:29:09.681 [DEBUG] [Thread-191375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:29:09.681 [DEBUG] [Thread-191375] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:29:09.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:29:09.682 [DEBUG] [Thread-191375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:29:09.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:29:09.684 [DEBUG] [Thread-191375] [transport.py] [_log()] userauth is OK
2026-04-12T15:29:09.684 [DEBUG] [Thread-191375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:29:09.685 [DEBUG] [Thread-191375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:29:09.685 [DEBUG] [Thread-191375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:29:09.685 [DEBUG] [Thread-191375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:29:09.709 [INFO] [Thread-191375] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:29:09.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:29:10.332 [DEBUG] [Thread-191375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:29:10.332 [DEBUG] [Thread-191375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:29:10.332 [DEBUG] [Thread-191375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:29:10.373 [DEBUG] [Thread-191375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:29:10.373 [DEBUG] [Thread-191375] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:29:10.377 [DEBUG] [Thread-191375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:29:10.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:29:10.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:29:10.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:29:10.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:29:10.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:29:10.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:29:10.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:29:10.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:29:10.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:29:10.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.561564 -999.00  +15.10  15.67     68   +9.30 1 2 1 1 1   888    0 7.42 67.34 ----- 15.3 15.7 281.0 18.5 20.2 -13.7 19.8 -12.3 19.7 -13.6 20.6 -14.1
2026-04-12T15:29:10.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:29:10.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:29:10.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.561564
2026-04-12T15:29:10.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:29:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:29:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:29:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:29:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:29:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:28:56', tmtdew=7.00713, humidity=62.8858, cloud=0.0, wind=13.9226, temperature=15.8412, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:28:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:29:10.403 [DEBUG] [Thread-191375] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:29:10.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:29:10.491 [DEBUG] [Thread-191378] [transport.py] [_log()] starting thread (client mode): 0xae5b6fe0
2026-04-12T15:29:10.491 [DEBUG] [Thread-191378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:29:10.506 [DEBUG] [Thread-191378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:29:10.506 [INFO] [Thread-191378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:29:10.514 [DEBUG] [Thread-191378] [transport.py] [_log()] client lang: <none>
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] server lang: <none>
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] kex follows: False
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] Compression: none
2026-04-12T15:29:10.515 [DEBUG] [Thread-191378] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:29:10.573 [DEBUG] [Thread-191378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:29:10.574 [DEBUG] [Thread-191378] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:29:10.574 [DEBUG] [Thread-191378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:29:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:29:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:29:10.630 [DEBUG] [Thread-191378] [transport.py] [_log()] userauth is OK
2026-04-12T15:29:10.630 [DEBUG] [Thread-191378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:29:10.630 [DEBUG] [Thread-191378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:29:10.631 [DEBUG] [Thread-191378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:29:10.631 [DEBUG] [Thread-191378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:29:10.653 [INFO] [Thread-191378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:29:10.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:29:10.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:29:11.480 [DEBUG] [Thread-191378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:29:11.480 [DEBUG] [Thread-191378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:29:11.528 [DEBUG] [Thread-191378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:29:11.528 [DEBUG] [Thread-191378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:29:11.538 [DEBUG] [Thread-191378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:29:11.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:29:11.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:29:11.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:29:11.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:29:11.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:29:11.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:29:11.576 [DEBUG] [Thread-191378] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:29:20.421 [DEBUG] [Thread-191380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:29:35.475 [DEBUG] [Thread-191381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:29:41.153 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:29:41.154 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:29:41.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:29:41.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:29:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:29:42.207 [DEBUG] [Thread-191382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:29:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 29, 32), 7.40262, 61.5124, 0.0, 18.2434, 16.4506, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:29:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:29:32
2026-04-12T15:29:43.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:29:43.543 [DEBUG] [Thread-191383] [transport.py] [_log()] starting thread (client mode): 0xae5b45e0
2026-04-12T15:29:43.543 [DEBUG] [Thread-191383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:29:43.563 [DEBUG] [Thread-191383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:29:43.563 [INFO] [Thread-191383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:29:43.564 [DEBUG] [Thread-191383] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] client lang: <none>
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] server lang: <none>
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] kex follows: False
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:29:43.565 [DEBUG] [Thread-191383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:29:43.566 [DEBUG] [Thread-191383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:29:43.566 [DEBUG] [Thread-191383] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:29:43.566 [DEBUG] [Thread-191383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:29:43.566 [DEBUG] [Thread-191383] [transport.py] [_log()] Compression: none
2026-04-12T15:29:43.566 [DEBUG] [Thread-191383] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:29:43.586 [DEBUG] [Thread-191383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:29:43.586 [DEBUG] [Thread-191383] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:29:43.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:29:43.587 [DEBUG] [Thread-191383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:29:43.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:29:43.590 [DEBUG] [Thread-191383] [transport.py] [_log()] userauth is OK
2026-04-12T15:29:43.591 [DEBUG] [Thread-191383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:29:43.591 [DEBUG] [Thread-191383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:29:43.591 [DEBUG] [Thread-191383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:29:43.591 [DEBUG] [Thread-191383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:29:43.612 [INFO] [Thread-191383] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:29:43.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:29:44.395 [DEBUG] [Thread-191383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:29:44.395 [DEBUG] [Thread-191383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:29:44.396 [DEBUG] [Thread-191383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:29:44.436 [DEBUG] [Thread-191383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:29:44.436 [DEBUG] [Thread-191383] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:29:44.440 [DEBUG] [Thread-191383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:29:44.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:29:44.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:29:44.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:29:44.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:29:44.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:29:44.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:29:44.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:29:44.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:29:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:29:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.561911 -999.00  +14.90  13.45     67   +8.90 1 2 1 1 1   888    0 7.64 72.61 ----- 10.4 13.4 304.2 20.4 20.2 -13.4 19.8 -12.1 19.7 -17.1 20.5 -13.7
2026-04-12T15:29:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:29:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:29:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.561911
2026-04-12T15:29:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:29:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:29:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:29:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:29:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:29:44.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:29:32', tmtdew=7.40262, humidity=61.5124, cloud=0.0, wind=18.2434, temperature=16.4506, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:29:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:29:44.468 [DEBUG] [Thread-191383] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:29:44.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:29:44.564 [DEBUG] [Thread-191386] [transport.py] [_log()] starting thread (client mode): 0xae536a70
2026-04-12T15:29:44.564 [DEBUG] [Thread-191386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:29:44.579 [DEBUG] [Thread-191386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:29:44.580 [INFO] [Thread-191386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:29:44.587 [DEBUG] [Thread-191386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:29:44.588 [DEBUG] [Thread-191386] [transport.py] [_log()] client lang: <none>
2026-04-12T15:29:44.589 [DEBUG] [Thread-191386] [transport.py] [_log()] server lang: <none>
2026-04-12T15:29:44.589 [DEBUG] [Thread-191386] [transport.py] [_log()] kex follows: False
2026-04-12T15:29:44.589 [DEBUG] [Thread-191386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:29:44.589 [DEBUG] [Thread-191386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:29:44.589 [DEBUG] [Thread-191386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:29:44.589 [DEBUG] [Thread-191386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:29:44.589 [DEBUG] [Thread-191386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:29:44.590 [DEBUG] [Thread-191386] [transport.py] [_log()] Compression: none
2026-04-12T15:29:44.590 [DEBUG] [Thread-191386] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:29:44.647 [DEBUG] [Thread-191386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:29:44.647 [DEBUG] [Thread-191386] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:29:44.648 [DEBUG] [Thread-191386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:29:44.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:29:44.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:29:44.716 [DEBUG] [Thread-191386] [transport.py] [_log()] userauth is OK
2026-04-12T15:29:44.716 [DEBUG] [Thread-191386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:29:44.716 [DEBUG] [Thread-191386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:29:44.716 [DEBUG] [Thread-191386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:29:44.716 [DEBUG] [Thread-191386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:29:44.735 [INFO] [Thread-191386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:29:44.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:29:44.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:29:45.557 [DEBUG] [Thread-191386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:29:45.557 [DEBUG] [Thread-191386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:29:45.605 [DEBUG] [Thread-191386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:29:45.605 [DEBUG] [Thread-191386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:29:45.614 [DEBUG] [Thread-191386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:29:45.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:29:45.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:29:45.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:29:45.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:29:45.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:29:45.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:29:45.651 [DEBUG] [Thread-191386] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:29:50.513 [DEBUG] [Thread-191388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:05.564 [DEBUG] [Thread-191389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:30:15.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:30:15.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:30:17.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 30, 8), 7.26182, 61.9051, 0.0, 16.3224, 15.4588, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:30:17.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:30:08
2026-04-12T15:30:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:30:17.557 [DEBUG] [Thread-191390] [transport.py] [_log()] starting thread (client mode): 0xae536200
2026-04-12T15:30:17.557 [DEBUG] [Thread-191390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:30:17.580 [DEBUG] [Thread-191390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:30:17.580 [INFO] [Thread-191390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:30:17.583 [DEBUG] [Thread-191390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:30:17.583 [DEBUG] [Thread-191390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:30:17.583 [DEBUG] [Thread-191390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] client lang: <none>
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] server lang: <none>
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] kex follows: False
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:30:17.584 [DEBUG] [Thread-191390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:30:17.585 [DEBUG] [Thread-191390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:30:17.585 [DEBUG] [Thread-191390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:30:17.585 [DEBUG] [Thread-191390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:30:17.585 [DEBUG] [Thread-191390] [transport.py] [_log()] Compression: none
2026-04-12T15:30:17.585 [DEBUG] [Thread-191390] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:30:17.604 [DEBUG] [Thread-191390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:30:17.605 [DEBUG] [Thread-191390] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:30:17.605 [DEBUG] [Thread-191390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:30:17.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:30:17.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:30:17.608 [DEBUG] [Thread-191390] [transport.py] [_log()] userauth is OK
2026-04-12T15:30:17.608 [DEBUG] [Thread-191390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:30:17.608 [DEBUG] [Thread-191390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:30:17.608 [DEBUG] [Thread-191390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:30:17.608 [DEBUG] [Thread-191390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:30:17.632 [INFO] [Thread-191390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:30:17.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:30:18.801 [DEBUG] [Thread-191390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:30:18.801 [DEBUG] [Thread-191390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:30:18.801 [DEBUG] [Thread-191390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:30:18.842 [DEBUG] [Thread-191390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:30:18.842 [DEBUG] [Thread-191390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:30:18.846 [DEBUG] [Thread-191390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:30:18.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:30:18.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:30:18.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:30:18.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:30:18.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:30:18.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:30:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:30:18.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:30:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:30:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.562259 -999.00  +14.90   8.55     68   +9.20 1 2 1 1 1   888    0 7.47 68.53 ----- 9.9 8.6 278.5 15.6 20.2 -13.3 19.8 -12.4 19.6 -14.9 20.6 -13.9
2026-04-12T15:30:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:30:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:30:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.562259
2026-04-12T15:30:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:30:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:30:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:30:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:30:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:30:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:30:08', tmtdew=7.26182, humidity=61.9051, cloud=0.0, wind=16.3224, temperature=15.4588, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:29:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:30:18.940 [DEBUG] [Thread-191390] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:30:19.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:30:19.040 [DEBUG] [Thread-191393] [transport.py] [_log()] starting thread (client mode): 0xae52f970
2026-04-12T15:30:19.040 [DEBUG] [Thread-191393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:30:19.065 [DEBUG] [Thread-191393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:30:19.065 [INFO] [Thread-191393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:30:19.074 [DEBUG] [Thread-191393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:30:19.074 [DEBUG] [Thread-191393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:30:19.074 [DEBUG] [Thread-191393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:30:19.074 [DEBUG] [Thread-191393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:19.074 [DEBUG] [Thread-191393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:19.074 [DEBUG] [Thread-191393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:19.074 [DEBUG] [Thread-191393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] client lang: <none>
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] server lang: <none>
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] kex follows: False
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] Compression: none
2026-04-12T15:30:19.075 [DEBUG] [Thread-191393] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:30:19.137 [DEBUG] [Thread-191393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:30:19.138 [DEBUG] [Thread-191393] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:30:19.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:30:19.139 [DEBUG] [Thread-191393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:30:19.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:30:19.199 [DEBUG] [Thread-191393] [transport.py] [_log()] userauth is OK
2026-04-12T15:30:19.199 [DEBUG] [Thread-191393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:30:19.200 [DEBUG] [Thread-191393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:30:19.200 [DEBUG] [Thread-191393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:30:19.200 [DEBUG] [Thread-191393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:30:19.220 [INFO] [Thread-191393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:30:19.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:30:19.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:30:20.052 [DEBUG] [Thread-191393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:30:20.052 [DEBUG] [Thread-191393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:30:20.103 [DEBUG] [Thread-191393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:30:20.104 [DEBUG] [Thread-191393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:30:20.114 [DEBUG] [Thread-191393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:30:20.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:30:20.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:30:20.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:30:20.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:30:20.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:30:20.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:30:20.166 [DEBUG] [Thread-191393] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:30:20.605 [DEBUG] [Thread-191395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:35.658 [DEBUG] [Thread-191396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:41.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:41.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:42.252 [DEBUG] [Thread-191397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:50.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:30:50.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:30:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:30:50.696 [DEBUG] [Thread-191398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:30:51.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 30, 43), 7.35971, 61.6446, 0.0, 13.8686, 16.2513, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:30:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:30:43
2026-04-12T15:30:51.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:30:52.074 [DEBUG] [Thread-191399] [transport.py] [_log()] starting thread (client mode): 0xae5b7d30
2026-04-12T15:30:52.074 [DEBUG] [Thread-191399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:30:52.096 [DEBUG] [Thread-191399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:30:52.096 [INFO] [Thread-191399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:30:52.099 [DEBUG] [Thread-191399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:30:52.099 [DEBUG] [Thread-191399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:30:52.099 [DEBUG] [Thread-191399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:30:52.099 [DEBUG] [Thread-191399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:52.099 [DEBUG] [Thread-191399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] client lang: <none>
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] server lang: <none>
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] kex follows: False
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:30:52.100 [DEBUG] [Thread-191399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:30:52.101 [DEBUG] [Thread-191399] [transport.py] [_log()] Compression: none
2026-04-12T15:30:52.101 [DEBUG] [Thread-191399] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:30:52.120 [DEBUG] [Thread-191399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:30:52.120 [DEBUG] [Thread-191399] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:30:52.121 [DEBUG] [Thread-191399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:30:52.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:30:52.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:30:52.123 [DEBUG] [Thread-191399] [transport.py] [_log()] userauth is OK
2026-04-12T15:30:52.123 [DEBUG] [Thread-191399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:30:52.124 [DEBUG] [Thread-191399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:30:52.124 [DEBUG] [Thread-191399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:30:52.124 [DEBUG] [Thread-191399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:30:52.138 [INFO] [Thread-191399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:30:52.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:30:52.915 [DEBUG] [Thread-191399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:30:52.916 [DEBUG] [Thread-191399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:30:52.916 [DEBUG] [Thread-191399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:30:52.957 [DEBUG] [Thread-191399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:30:52.957 [DEBUG] [Thread-191399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:30:52.959 [DEBUG] [Thread-191399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:30:52.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:30:52.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:30:52.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:30:52.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:30:52.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:30:52.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:30:52.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.562606 -999.00  +15.10  16.79     68   +9.40 1 2 1 1 1   888    0 7.35 65.88 ----- 15.8 16.8 274.8 20.2 20.2 -13.5 19.8 -12.9 19.6 -13.3 20.5 -14.1
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.562606
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:30:52.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:30:52.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:30:43', tmtdew=7.35971, humidity=61.6446, cloud=0.0, wind=13.8686, temperature=16.2513, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:30:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:30:52.978 [DEBUG] [Thread-191399] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:30:53.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:30:53.064 [DEBUG] [Thread-191402] [transport.py] [_log()] starting thread (client mode): 0xb0f6d240
2026-04-12T15:30:53.064 [DEBUG] [Thread-191402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:30:53.080 [DEBUG] [Thread-191402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:30:53.080 [INFO] [Thread-191402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] client lang: <none>
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] server lang: <none>
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] kex follows: False
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:30:53.088 [DEBUG] [Thread-191402] [transport.py] [_log()] Compression: none
2026-04-12T15:30:53.089 [DEBUG] [Thread-191402] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:30:53.147 [DEBUG] [Thread-191402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:30:53.147 [DEBUG] [Thread-191402] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:30:53.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:30:53.149 [DEBUG] [Thread-191402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:30:53.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:30:53.203 [DEBUG] [Thread-191402] [transport.py] [_log()] userauth is OK
2026-04-12T15:30:53.203 [DEBUG] [Thread-191402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:30:53.203 [DEBUG] [Thread-191402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:30:53.203 [DEBUG] [Thread-191402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:30:53.203 [DEBUG] [Thread-191402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:30:53.222 [INFO] [Thread-191402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:30:53.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:30:53.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:30:54.036 [DEBUG] [Thread-191402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:30:54.037 [DEBUG] [Thread-191402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:30:54.085 [DEBUG] [Thread-191402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:30:54.085 [DEBUG] [Thread-191402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:30:54.095 [DEBUG] [Thread-191402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:30:54.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:30:54.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:30:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:30:54.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:30:54.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:30:54.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:30:54.132 [DEBUG] [Thread-191402] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:31:05.739 [DEBUG] [Thread-191404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:31:20.793 [DEBUG] [Thread-191405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:31:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:31:24.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:31:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:31:25.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 30, 43), 7.35971, 61.6446, 0.0, 13.8686, 16.2513, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:31:25.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:30:43
2026-04-12T15:31:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:31:25.998 [DEBUG] [Thread-191406] [transport.py] [_log()] starting thread (client mode): 0xae5090f0
2026-04-12T15:31:25.998 [DEBUG] [Thread-191406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:31:26.018 [DEBUG] [Thread-191406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:31:26.018 [INFO] [Thread-191406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:31:26.021 [DEBUG] [Thread-191406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] client lang: <none>
2026-04-12T15:31:26.022 [DEBUG] [Thread-191406] [transport.py] [_log()] server lang: <none>
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] kex follows: False
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] Compression: none
2026-04-12T15:31:26.023 [DEBUG] [Thread-191406] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:31:26.041 [DEBUG] [Thread-191406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:31:26.042 [DEBUG] [Thread-191406] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:31:26.042 [DEBUG] [Thread-191406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:31:26.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:31:26.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:31:26.044 [DEBUG] [Thread-191406] [transport.py] [_log()] userauth is OK
2026-04-12T15:31:26.044 [DEBUG] [Thread-191406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:31:26.044 [DEBUG] [Thread-191406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:31:26.044 [DEBUG] [Thread-191406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:31:26.044 [DEBUG] [Thread-191406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:31:26.063 [INFO] [Thread-191406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:31:26.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:31:26.819 [DEBUG] [Thread-191406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:31:26.820 [DEBUG] [Thread-191406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:31:26.820 [DEBUG] [Thread-191406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:31:26.860 [DEBUG] [Thread-191406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:31:26.861 [DEBUG] [Thread-191406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:31:26.865 [DEBUG] [Thread-191406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:31:26.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:31:26.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:31:26.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:31:26.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:31:26.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:31:26.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:31:26.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:31:26.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:31:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:31:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.562953 -999.00  +15.10  11.15     68   +9.30 1 2 1 1 1   887    0 7.44 66.38 ----- 13.3 11.2 275.8 17.5 20.2 -13.8 19.8 -12.7 19.4 -15.0 20.5 -13.9
2026-04-12T15:31:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:31:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:31:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.562953
2026-04-12T15:31:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:31:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:31:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:31:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:31:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:31:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:30:43', tmtdew=7.35971, humidity=61.6446, cloud=0.0, wind=13.8686, temperature=16.2513, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:30:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:31:26.893 [DEBUG] [Thread-191406] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:31:26.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:31:26.988 [DEBUG] [Thread-191409] [transport.py] [_log()] starting thread (client mode): 0xb0f6d240
2026-04-12T15:31:26.988 [DEBUG] [Thread-191409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:31:27.007 [DEBUG] [Thread-191409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:31:27.007 [INFO] [Thread-191409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:31:27.014 [DEBUG] [Thread-191409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] client lang: <none>
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] server lang: <none>
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] kex follows: False
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:31:27.015 [DEBUG] [Thread-191409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:31:27.016 [DEBUG] [Thread-191409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:31:27.016 [DEBUG] [Thread-191409] [transport.py] [_log()] Compression: none
2026-04-12T15:31:27.016 [DEBUG] [Thread-191409] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:31:27.074 [DEBUG] [Thread-191409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:31:27.075 [DEBUG] [Thread-191409] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:31:27.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:31:27.076 [DEBUG] [Thread-191409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:31:27.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:31:27.131 [DEBUG] [Thread-191409] [transport.py] [_log()] userauth is OK
2026-04-12T15:31:27.131 [DEBUG] [Thread-191409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:31:27.131 [DEBUG] [Thread-191409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:31:27.132 [DEBUG] [Thread-191409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:31:27.132 [DEBUG] [Thread-191409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:31:27.150 [INFO] [Thread-191409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:31:27.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:31:27.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:31:27.986 [DEBUG] [Thread-191409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:31:27.986 [DEBUG] [Thread-191409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:31:28.035 [DEBUG] [Thread-191409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:31:28.035 [DEBUG] [Thread-191409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:31:28.044 [DEBUG] [Thread-191409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:31:28.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:31:28.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:31:28.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:31:28.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:31:28.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:31:28.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:31:28.077 [DEBUG] [Thread-191409] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:31:35.832 [DEBUG] [Thread-191411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:31:41.439 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:31:41.440 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:31:42.286 [DEBUG] [Thread-191412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:31:50.886 [DEBUG] [Thread-191413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:31:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:31:58.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:31:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:31:59.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 31, 19), 7.09271, 62.6175, 0.0, 15.422, 15.3586, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:31:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:31:19
2026-04-12T15:31:59.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:31:59.878 [DEBUG] [Thread-191414] [transport.py] [_log()] starting thread (client mode): 0xae508c70
2026-04-12T15:31:59.878 [DEBUG] [Thread-191414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:31:59.897 [DEBUG] [Thread-191414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:31:59.897 [INFO] [Thread-191414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:31:59.900 [DEBUG] [Thread-191414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:31:59.900 [DEBUG] [Thread-191414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:31:59.900 [DEBUG] [Thread-191414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:31:59.900 [DEBUG] [Thread-191414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:31:59.900 [DEBUG] [Thread-191414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:31:59.900 [DEBUG] [Thread-191414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] client lang: <none>
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] server lang: <none>
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] kex follows: False
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] Compression: none
2026-04-12T15:31:59.901 [DEBUG] [Thread-191414] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:31:59.922 [DEBUG] [Thread-191414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:31:59.922 [DEBUG] [Thread-191414] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:31:59.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:31:59.924 [DEBUG] [Thread-191414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:31:59.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:31:59.926 [DEBUG] [Thread-191414] [transport.py] [_log()] userauth is OK
2026-04-12T15:31:59.927 [DEBUG] [Thread-191414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:31:59.927 [DEBUG] [Thread-191414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:31:59.927 [DEBUG] [Thread-191414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:31:59.927 [DEBUG] [Thread-191414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:31:59.961 [INFO] [Thread-191414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:31:59.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:32:00.775 [DEBUG] [Thread-191414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:32:00.775 [DEBUG] [Thread-191414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:32:00.775 [DEBUG] [Thread-191414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:32:00.815 [DEBUG] [Thread-191414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:32:00.815 [DEBUG] [Thread-191414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:32:00.818 [DEBUG] [Thread-191414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:32:00.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:32:00.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:32:00.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:32:00.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:32:00.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:32:00.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:32:00.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:32:00.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:32:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:32:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.563647 -999.00  +14.80  16.19     67   +8.90 1 2 1 1 1   887    0 7.69 76.43 ----- 11.8 16.2 273.2 18.8 20.1 -14.1 19.7 -12.6 19.5 -14.5 20.5 -14.4
2026-04-12T15:32:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:32:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:32:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.563647
2026-04-12T15:32:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:32:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:32:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:32:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:32:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:32:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:31:19', tmtdew=7.09271, humidity=62.6175, cloud=0.0, wind=15.422, temperature=15.3586, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:31:39.101', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:32:00.840 [DEBUG] [Thread-191414] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:32:00.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:32:00.942 [DEBUG] [Thread-191417] [transport.py] [_log()] starting thread (client mode): 0xb0f41f90
2026-04-12T15:32:00.942 [DEBUG] [Thread-191417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:32:00.957 [DEBUG] [Thread-191417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:32:00.957 [INFO] [Thread-191417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:32:00.965 [DEBUG] [Thread-191417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] client lang: <none>
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] server lang: <none>
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] kex follows: False
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] Compression: none
2026-04-12T15:32:00.966 [DEBUG] [Thread-191417] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:32:01.025 [DEBUG] [Thread-191417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:32:01.025 [DEBUG] [Thread-191417] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:32:01.026 [DEBUG] [Thread-191417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:32:01.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:32:01.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:32:01.084 [DEBUG] [Thread-191417] [transport.py] [_log()] userauth is OK
2026-04-12T15:32:01.084 [DEBUG] [Thread-191417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:32:01.084 [DEBUG] [Thread-191417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:32:01.084 [DEBUG] [Thread-191417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:32:01.084 [DEBUG] [Thread-191417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:32:01.104 [INFO] [Thread-191417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:32:01.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:32:01.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:32:01.940 [DEBUG] [Thread-191417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:32:01.941 [DEBUG] [Thread-191417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:32:01.990 [DEBUG] [Thread-191417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:32:01.990 [DEBUG] [Thread-191417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:32:02.001 [DEBUG] [Thread-191417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:32:02.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:32:02.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:32:02.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:32:02.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:32:02.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:32:02.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:32:02.035 [DEBUG] [Thread-191417] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:32:05.919 [DEBUG] [Thread-191419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:32:20.969 [DEBUG] [Thread-191420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:32:32.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:32:32.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:32:32.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:32:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 31, 55), 7.35398, 61.5073, 0.0, 15.4397, 15.2924, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:32:33.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:31:55
2026-04-12T15:32:33.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:32:33.943 [DEBUG] [Thread-191421] [transport.py] [_log()] starting thread (client mode): 0xae534f10
2026-04-12T15:32:33.943 [DEBUG] [Thread-191421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:32:33.963 [DEBUG] [Thread-191421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:32:33.963 [INFO] [Thread-191421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] client lang: <none>
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] server lang: <none>
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] kex follows: False
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:32:33.966 [DEBUG] [Thread-191421] [transport.py] [_log()] Compression: none
2026-04-12T15:32:33.967 [DEBUG] [Thread-191421] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:32:33.984 [DEBUG] [Thread-191421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:32:33.984 [DEBUG] [Thread-191421] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:32:33.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:32:33.985 [DEBUG] [Thread-191421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:32:33.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:32:34.029 [DEBUG] [Thread-191421] [transport.py] [_log()] userauth is OK
2026-04-12T15:32:34.029 [DEBUG] [Thread-191421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:32:34.029 [DEBUG] [Thread-191421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:32:34.029 [DEBUG] [Thread-191421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:32:34.030 [DEBUG] [Thread-191421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:32:34.060 [INFO] [Thread-191421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:32:34.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:32:34.872 [DEBUG] [Thread-191421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:32:34.872 [DEBUG] [Thread-191421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:32:34.872 [DEBUG] [Thread-191421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:32:34.913 [DEBUG] [Thread-191421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:32:34.913 [DEBUG] [Thread-191421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:32:34.917 [DEBUG] [Thread-191421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:32:34.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:32:34.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:32:34.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:32:34.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:32:34.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:32:34.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:32:34.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:32:34.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:32:34.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:32:34.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.563995 -999.00  +14.70  10.12     68   +8.90 1 2 1 1 1   887    0 7.76 74.68 ----- 13.3 10.1 272.6 18.0 20.1 -14.1 19.8 -13.0 19.4 -15.7 20.4 -14.1
2026-04-12T15:32:34.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:32:34.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:32:34.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.563995
2026-04-12T15:32:34.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:32:34.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:32:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:32:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:32:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:32:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:31:55', tmtdew=7.35398, humidity=61.5073, cloud=0.0, wind=15.4397, temperature=15.2924, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:32:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:32:34.944 [DEBUG] [Thread-191421] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:32:35.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:32:35.037 [DEBUG] [Thread-191424] [transport.py] [_log()] starting thread (client mode): 0xae5b5780
2026-04-12T15:32:35.037 [DEBUG] [Thread-191424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:32:35.053 [DEBUG] [Thread-191424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:32:35.053 [INFO] [Thread-191424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:32:35.061 [DEBUG] [Thread-191424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:32:35.061 [DEBUG] [Thread-191424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:32:35.061 [DEBUG] [Thread-191424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:32:35.061 [DEBUG] [Thread-191424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:32:35.061 [DEBUG] [Thread-191424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:32:35.061 [DEBUG] [Thread-191424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:32:35.061 [DEBUG] [Thread-191424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] client lang: <none>
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] server lang: <none>
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] kex follows: False
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] Compression: none
2026-04-12T15:32:35.062 [DEBUG] [Thread-191424] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:32:35.120 [DEBUG] [Thread-191424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:32:35.121 [DEBUG] [Thread-191424] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:32:35.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:32:35.123 [DEBUG] [Thread-191424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:32:35.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:32:35.180 [DEBUG] [Thread-191424] [transport.py] [_log()] userauth is OK
2026-04-12T15:32:35.180 [DEBUG] [Thread-191424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:32:35.180 [DEBUG] [Thread-191424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:32:35.181 [DEBUG] [Thread-191424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:32:35.181 [DEBUG] [Thread-191424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:32:35.200 [INFO] [Thread-191424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:32:35.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:32:35.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:32:36.007 [DEBUG] [Thread-191426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:32:36.017 [DEBUG] [Thread-191424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:32:36.017 [DEBUG] [Thread-191424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:32:36.065 [DEBUG] [Thread-191424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:32:36.065 [DEBUG] [Thread-191424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:32:36.074 [DEBUG] [Thread-191424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:32:36.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:32: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')
2026-04-12T15:32:36.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:32:36.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:32:36.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:32:36.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:32:36.111 [DEBUG] [Thread-191424] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:32:41.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:32:41.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:32:42.322 [DEBUG] [Thread-191427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:32:51.061 [DEBUG] [Thread-191428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:33:06.099 [DEBUG] [Thread-191429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:33:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:33:06.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:33:06.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:33:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 32, 30), 7.20011, 62.1368, 0.0, 14.4342, 15.2425, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:33:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:32:30
2026-04-12T15:33:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:33:08.103 [DEBUG] [Thread-191430] [transport.py] [_log()] starting thread (client mode): 0xae52ee00
2026-04-12T15:33:08.103 [DEBUG] [Thread-191430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:33:08.127 [DEBUG] [Thread-191430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:33:08.127 [INFO] [Thread-191430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:33:08.130 [DEBUG] [Thread-191430] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:33:08.130 [DEBUG] [Thread-191430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:33:08.130 [DEBUG] [Thread-191430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] client lang: <none>
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] server lang: <none>
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] kex follows: False
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] Compression: none
2026-04-12T15:33:08.131 [DEBUG] [Thread-191430] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:33:08.148 [DEBUG] [Thread-191430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:33:08.149 [DEBUG] [Thread-191430] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:33:08.149 [DEBUG] [Thread-191430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:33:08.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:33:08.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:33:08.192 [DEBUG] [Thread-191430] [transport.py] [_log()] userauth is OK
2026-04-12T15:33:08.193 [DEBUG] [Thread-191430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:33:08.193 [DEBUG] [Thread-191430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:33:08.193 [DEBUG] [Thread-191430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:33:08.193 [DEBUG] [Thread-191430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:33:08.231 [INFO] [Thread-191430] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:33:08.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:33:09.031 [DEBUG] [Thread-191430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:33:09.032 [DEBUG] [Thread-191430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:33:09.032 [DEBUG] [Thread-191430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:33:09.073 [DEBUG] [Thread-191430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:33:09.073 [DEBUG] [Thread-191430] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:33:09.076 [DEBUG] [Thread-191430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:33:09.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:33:09.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:33:09.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:33:09.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:33:09.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:33:09.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:33:09.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:33:09.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:33:09.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:33:09.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.564342 -999.00  +14.70   9.41     69   +9.10 1 2 1 1 1   887    0 7.54 67.47 ----- 10.0 9.4 287.8 14.8 20.2 -13.8 19.7 -12.8 19.6 -12.8 20.4 -13.5
2026-04-12T15:33:09.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:33:09.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:33:09.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.564342
2026-04-12T15:33:09.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:33:09.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:33:09.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:33:09.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:33:09.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:33:09.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:32:30', tmtdew=7.20011, humidity=62.1368, cloud=0.0, wind=14.4342, temperature=15.2425, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:32:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:33:09.104 [DEBUG] [Thread-191430] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:33:09.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:33:09.194 [DEBUG] [Thread-191433] [transport.py] [_log()] starting thread (client mode): 0xae52f160
2026-04-12T15:33:09.194 [DEBUG] [Thread-191433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:33:09.210 [DEBUG] [Thread-191433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:33:09.210 [INFO] [Thread-191433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:09.218 [DEBUG] [Thread-191433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] client lang: <none>
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] server lang: <none>
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] kex follows: False
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] Compression: none
2026-04-12T15:33:09.219 [DEBUG] [Thread-191433] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:33:09.280 [DEBUG] [Thread-191433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:33:09.280 [DEBUG] [Thread-191433] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:33:09.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:33:09.282 [DEBUG] [Thread-191433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:33:09.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:33:09.337 [DEBUG] [Thread-191433] [transport.py] [_log()] userauth is OK
2026-04-12T15:33:09.337 [DEBUG] [Thread-191433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:33:09.337 [DEBUG] [Thread-191433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:33:09.337 [DEBUG] [Thread-191433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:33:09.337 [DEBUG] [Thread-191433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:33:09.358 [INFO] [Thread-191433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:33:09.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:33:09.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:33:10.154 [DEBUG] [Thread-191433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:33:10.154 [DEBUG] [Thread-191433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:33:10.201 [DEBUG] [Thread-191433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:33:10.201 [DEBUG] [Thread-191433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:33:10.210 [DEBUG] [Thread-191433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:33:10.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:33: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')
2026-04-12T15:33: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
2026-04-12T15:33:10.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:33:10.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:33:10.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:33:10.243 [DEBUG] [Thread-191433] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:33:21.135 [DEBUG] [Thread-191435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:33:36.199 [DEBUG] [Thread-191436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:33:40.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:33:40.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:33:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:33:41.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 33, 6), 7.21194, 62.0871, 0.0, 13.658, 15.2425, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:33:41.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:33:06
2026-04-12T15:33:41.735 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:33:41.736 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:33:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:33:42.071 [DEBUG] [Thread-191437] [transport.py] [_log()] starting thread (client mode): 0xae508f10
2026-04-12T15:33:42.072 [DEBUG] [Thread-191437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:33:42.099 [DEBUG] [Thread-191437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:33:42.099 [INFO] [Thread-191437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:33:42.102 [DEBUG] [Thread-191437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:33:42.103 [DEBUG] [Thread-191437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] client lang: <none>
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] server lang: <none>
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] kex follows: False
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:33:42.104 [DEBUG] [Thread-191437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:33:42.105 [DEBUG] [Thread-191437] [transport.py] [_log()] Compression: none
2026-04-12T15:33:42.105 [DEBUG] [Thread-191437] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:33:42.124 [DEBUG] [Thread-191437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:33:42.125 [DEBUG] [Thread-191437] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:33:42.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:33:42.126 [DEBUG] [Thread-191437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:33:42.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:33:42.128 [DEBUG] [Thread-191437] [transport.py] [_log()] userauth is OK
2026-04-12T15:33:42.128 [DEBUG] [Thread-191437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:33:42.128 [DEBUG] [Thread-191437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:33:42.128 [DEBUG] [Thread-191437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:33:42.128 [DEBUG] [Thread-191437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:33:42.152 [INFO] [Thread-191437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:33:42.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:33:42.372 [DEBUG] [Thread-191439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:33:42.937 [DEBUG] [Thread-191437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:33:42.938 [DEBUG] [Thread-191437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:33:42.938 [DEBUG] [Thread-191437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:33:42.978 [DEBUG] [Thread-191437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:33:42.979 [DEBUG] [Thread-191437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:33:42.983 [DEBUG] [Thread-191437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:33:42.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:33:42.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:33:42.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:33:42.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:33:43.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:33:43.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:33:43.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:33:43.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:33:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:33:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.564689 -999.00  +14.90   7.12     71   +9.70 1 2 1 1 1   887    0 7.30 62.50 ----- 10.6 7.1 267.1 12.4 20.2 -13.4 19.8 -12.7 19.4 -12.1 20.4 -13.7
2026-04-12T15:33:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:33:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:33:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.564689
2026-04-12T15:33:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:33:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:33:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:33:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:33:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:33:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:33:06', tmtdew=7.21194, humidity=62.0871, cloud=0.0, wind=13.658, temperature=15.2425, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:33:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:33:43.011 [DEBUG] [Thread-191437] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:33:43.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:33:43.103 [DEBUG] [Thread-191441] [transport.py] [_log()] starting thread (client mode): 0xae50ad70
2026-04-12T15:33:43.104 [DEBUG] [Thread-191441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:33:43.119 [DEBUG] [Thread-191441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:33:43.119 [INFO] [Thread-191441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:33:43.126 [DEBUG] [Thread-191441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:33:43.126 [DEBUG] [Thread-191441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:33:43.126 [DEBUG] [Thread-191441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] client lang: <none>
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] server lang: <none>
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] kex follows: False
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] Compression: none
2026-04-12T15:33:43.127 [DEBUG] [Thread-191441] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:33:43.188 [DEBUG] [Thread-191441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:33:43.189 [DEBUG] [Thread-191441] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:33:43.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:33:43.190 [DEBUG] [Thread-191441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:33:43.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:33:43.244 [DEBUG] [Thread-191441] [transport.py] [_log()] userauth is OK
2026-04-12T15:33:43.244 [DEBUG] [Thread-191441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:33:43.245 [DEBUG] [Thread-191441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:33:43.245 [DEBUG] [Thread-191441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:33:43.245 [DEBUG] [Thread-191441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:33:43.263 [INFO] [Thread-191441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:33:43.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:33:43.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:33:44.106 [DEBUG] [Thread-191441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:33:44.106 [DEBUG] [Thread-191441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:33:44.153 [DEBUG] [Thread-191441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:33:44.154 [DEBUG] [Thread-191441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:33:44.162 [DEBUG] [Thread-191441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:33:44.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:33:44.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:33:44.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:33:44.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:33:44.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:33:44.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:33:44.198 [DEBUG] [Thread-191441] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:33:51.236 [DEBUG] [Thread-191443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:06.290 [DEBUG] [Thread-191444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:34:14.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:34:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:34:15.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 33, 42), 7.35491, 61.6106, 0.0, 11.6813, 16.0185, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:34:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:33:42
2026-04-12T15:34:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:34:16.045 [DEBUG] [Thread-191445] [transport.py] [_log()] starting thread (client mode): 0xae5a5270
2026-04-12T15:34:16.045 [DEBUG] [Thread-191445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:34:16.067 [DEBUG] [Thread-191445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:34:16.067 [INFO] [Thread-191445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] client lang: <none>
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] server lang: <none>
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] kex follows: False
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:34:16.069 [DEBUG] [Thread-191445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:34:16.070 [DEBUG] [Thread-191445] [transport.py] [_log()] Compression: none
2026-04-12T15:34:16.070 [DEBUG] [Thread-191445] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:34:16.086 [DEBUG] [Thread-191445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:34:16.087 [DEBUG] [Thread-191445] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:34:16.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:34:16.088 [DEBUG] [Thread-191445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:34:16.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:34:16.090 [DEBUG] [Thread-191445] [transport.py] [_log()] userauth is OK
2026-04-12T15:34:16.090 [DEBUG] [Thread-191445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:34:16.091 [DEBUG] [Thread-191445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:34:16.091 [DEBUG] [Thread-191445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:34:16.091 [DEBUG] [Thread-191445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:34:16.125 [INFO] [Thread-191445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:34:16.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:34:16.900 [DEBUG] [Thread-191445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:34:16.901 [DEBUG] [Thread-191445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:34:16.901 [DEBUG] [Thread-191445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:34:16.942 [DEBUG] [Thread-191445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:34:16.942 [DEBUG] [Thread-191445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:34:16.944 [DEBUG] [Thread-191445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:34:16.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:34:16.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:34:16.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:34:16.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:34:16.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:34:16.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:34:16.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:34:16.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:34:16.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:34:16.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.565036 -999.00  +15.00  14.31     68   +9.30 1 2 1 1 1   887    0 7.20 57.12 ----- 14.2 14.3 276.0 15.9 20.2 -13.7 19.8 -12.6 19.6 -13.4 20.3 -13.8
2026-04-12T15:34:16.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:34:16.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:34:16.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.565036
2026-04-12T15:34:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:34:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:34:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:34:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:34:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:34:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:33:42', tmtdew=7.35491, humidity=61.6106, cloud=0.0, wind=11.6813, temperature=16.0185, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:33:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:34:16.969 [DEBUG] [Thread-191445] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:34:17.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:34:17.061 [DEBUG] [Thread-191448] [transport.py] [_log()] starting thread (client mode): 0xae5a4460
2026-04-12T15:34:17.061 [DEBUG] [Thread-191448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:34:17.079 [DEBUG] [Thread-191448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:34:17.079 [INFO] [Thread-191448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] client lang: <none>
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] server lang: <none>
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] kex follows: False
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:34:17.090 [DEBUG] [Thread-191448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:34:17.091 [DEBUG] [Thread-191448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:34:17.091 [DEBUG] [Thread-191448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:34:17.091 [DEBUG] [Thread-191448] [transport.py] [_log()] Compression: none
2026-04-12T15:34:17.091 [DEBUG] [Thread-191448] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:34:17.147 [DEBUG] [Thread-191448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:34:17.147 [DEBUG] [Thread-191448] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:34:17.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:34:17.148 [DEBUG] [Thread-191448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:34:17.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:34:17.211 [DEBUG] [Thread-191448] [transport.py] [_log()] userauth is OK
2026-04-12T15:34:17.211 [DEBUG] [Thread-191448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:34:17.211 [DEBUG] [Thread-191448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:34:17.212 [DEBUG] [Thread-191448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:34:17.212 [DEBUG] [Thread-191448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:34:17.226 [INFO] [Thread-191448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:34:17.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:34:17.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:34:18.047 [DEBUG] [Thread-191448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:34:18.047 [DEBUG] [Thread-191448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:34:18.095 [DEBUG] [Thread-191448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:34:18.095 [DEBUG] [Thread-191448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:34:18.104 [DEBUG] [Thread-191448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:34:18.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:34: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')
2026-04-12T15:34: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
2026-04-12T15:34:18.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:34:18.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:34:18.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:34:18.142 [DEBUG] [Thread-191448] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:34:21.327 [DEBUG] [Thread-191450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:36.380 [DEBUG] [Thread-191451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:41.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:41.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:42.416 [DEBUG] [Thread-191452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:34:48.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:34:48.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:34:49.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 34, 17), 7.19366, 62.2225, 0.0, 9.93528, 15.243, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:34:49.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:34:17
2026-04-12T15:34:49.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:34:49.965 [DEBUG] [Thread-191453] [transport.py] [_log()] starting thread (client mode): 0xae5b5480
2026-04-12T15:34:49.965 [DEBUG] [Thread-191453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:34:49.988 [DEBUG] [Thread-191453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:34:49.988 [INFO] [Thread-191453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] client lang: <none>
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] server lang: <none>
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] kex follows: False
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:34:49.990 [DEBUG] [Thread-191453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:34:49.991 [DEBUG] [Thread-191453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:34:49.991 [DEBUG] [Thread-191453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:34:49.991 [DEBUG] [Thread-191453] [transport.py] [_log()] Compression: none
2026-04-12T15:34:49.991 [DEBUG] [Thread-191453] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:34:50.004 [DEBUG] [Thread-191453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:34:50.004 [DEBUG] [Thread-191453] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:34:50.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:34:50.005 [DEBUG] [Thread-191453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:34:50.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:34:50.007 [DEBUG] [Thread-191453] [transport.py] [_log()] userauth is OK
2026-04-12T15:34:50.008 [DEBUG] [Thread-191453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:34:50.008 [DEBUG] [Thread-191453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:34:50.008 [DEBUG] [Thread-191453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:34:50.008 [DEBUG] [Thread-191453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:34:50.021 [INFO] [Thread-191453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:34:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:34:50.792 [DEBUG] [Thread-191453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:34:50.792 [DEBUG] [Thread-191453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:34:50.793 [DEBUG] [Thread-191453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:34:50.833 [DEBUG] [Thread-191453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:34:50.833 [DEBUG] [Thread-191453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:34:50.836 [DEBUG] [Thread-191453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:34:50.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:34:50.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:34:50.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:34:50.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:34:50.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:34:50.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:34:50.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:34:50.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:34:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:34:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.565384 -999.00  +15.10   9.12     68   +9.30 1 2 1 1 1   887    0 7.10 54.47 ----- 7.9 9.1 281.2 14.3 20.3 -13.2 19.8 -12.4 19.5 -12.1 20.3 -13.2
2026-04-12T15:34:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:34:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:34:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.565384
2026-04-12T15:34:50.867 [DEBUG] [Thread-191453] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:34:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:34:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:34:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:34:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:34:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:34:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:34:17', tmtdew=7.19366, humidity=62.2225, cloud=0.0, wind=9.93528, temperature=15.243, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:34:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:34:50.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:34:50.955 [DEBUG] [Thread-191456] [transport.py] [_log()] starting thread (client mode): 0xae508730
2026-04-12T15:34:50.955 [DEBUG] [Thread-191456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:34:50.970 [DEBUG] [Thread-191456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:34:50.971 [INFO] [Thread-191456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:34:50.978 [DEBUG] [Thread-191456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:34:50.978 [DEBUG] [Thread-191456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] client lang: <none>
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] server lang: <none>
2026-04-12T15:34:50.979 [DEBUG] [Thread-191456] [transport.py] [_log()] kex follows: False
2026-04-12T15:34:50.980 [DEBUG] [Thread-191456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:34:50.980 [DEBUG] [Thread-191456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:34:50.980 [DEBUG] [Thread-191456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:34:50.980 [DEBUG] [Thread-191456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:34:50.980 [DEBUG] [Thread-191456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:34:50.980 [DEBUG] [Thread-191456] [transport.py] [_log()] Compression: none
2026-04-12T15:34:50.980 [DEBUG] [Thread-191456] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:34:51.037 [DEBUG] [Thread-191456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:34:51.037 [DEBUG] [Thread-191456] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:34:51.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:34:51.038 [DEBUG] [Thread-191456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:34:51.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:34:51.093 [DEBUG] [Thread-191456] [transport.py] [_log()] userauth is OK
2026-04-12T15:34:51.093 [DEBUG] [Thread-191456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:34:51.093 [DEBUG] [Thread-191456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:34:51.093 [DEBUG] [Thread-191456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:34:51.094 [DEBUG] [Thread-191456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:34:51.118 [INFO] [Thread-191456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:34:51.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:34:51.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:34:51.417 [DEBUG] [Thread-191458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:34:51.956 [DEBUG] [Thread-191456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:34:51.957 [DEBUG] [Thread-191456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:34:52.005 [DEBUG] [Thread-191456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:34:52.006 [DEBUG] [Thread-191456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:34:52.015 [DEBUG] [Thread-191456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:34:52.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:34:52.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:34: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') -> 00000000
2026-04-12T15:34:52.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:34:52.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:34:52.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:34:52.052 [DEBUG] [Thread-191456] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:35:06.468 [DEBUG] [Thread-191459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:35:21.507 [DEBUG] [Thread-191460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:35:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:35:22.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:35:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:35:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 34, 53), 6.97388, 63.135, 0.0, 12.7044, 15.6538, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:35:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:34:53
2026-04-12T15:35:23.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:35:23.849 [DEBUG] [Thread-191461] [transport.py] [_log()] starting thread (client mode): 0xb0fe8100
2026-04-12T15:35:23.849 [DEBUG] [Thread-191461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:35:23.870 [DEBUG] [Thread-191461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:35:23.870 [INFO] [Thread-191461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:35:23.872 [DEBUG] [Thread-191461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:35:23.872 [DEBUG] [Thread-191461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:35:23.872 [DEBUG] [Thread-191461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] client lang: <none>
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] server lang: <none>
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] kex follows: False
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:35:23.873 [DEBUG] [Thread-191461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:35:23.874 [DEBUG] [Thread-191461] [transport.py] [_log()] Compression: none
2026-04-12T15:35:23.874 [DEBUG] [Thread-191461] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:35:23.894 [DEBUG] [Thread-191461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:35:23.895 [DEBUG] [Thread-191461] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:35:23.895 [DEBUG] [Thread-191461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:35:23.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:35:23.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:35:23.898 [DEBUG] [Thread-191461] [transport.py] [_log()] userauth is OK
2026-04-12T15:35:23.898 [DEBUG] [Thread-191461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:35:23.898 [DEBUG] [Thread-191461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:35:23.898 [DEBUG] [Thread-191461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:35:23.899 [DEBUG] [Thread-191461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:35:23.935 [INFO] [Thread-191461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:35:23.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:35:25.428 [DEBUG] [Thread-191461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:35:25.428 [DEBUG] [Thread-191461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:35:25.428 [DEBUG] [Thread-191461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:35:25.470 [DEBUG] [Thread-191461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:35:25.470 [DEBUG] [Thread-191461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:35:25.473 [DEBUG] [Thread-191461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:35:25.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:35:25.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:35:25.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:35:25.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:35:25.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:35:25.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:35:25.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:35:25.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:35:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:35:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.565731 -999.00  +15.10   8.40     67   +9.10 1 2 1 1 1   887    0 7.21 52.33 ----- 7.6 8.4 290.4 9.6 20.4 -13.3 19.8 -12.8 19.6 -14.9 20.4 -12.5
2026-04-12T15:35:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:35:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:35:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.565731
2026-04-12T15:35:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:35:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:35:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:35:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:35:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:35:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:34:53', tmtdew=6.97388, humidity=63.135, cloud=0.0, wind=12.7044, temperature=15.6538, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:34:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:35:25.546 [DEBUG] [Thread-191461] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:35:25.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:35:25.646 [DEBUG] [Thread-191464] [transport.py] [_log()] starting thread (client mode): 0xb0fead70
2026-04-12T15:35:25.646 [DEBUG] [Thread-191464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:35:25.662 [DEBUG] [Thread-191464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:35:25.662 [INFO] [Thread-191464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:35:25.669 [DEBUG] [Thread-191464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] client lang: <none>
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] server lang: <none>
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] kex follows: False
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:35:25.670 [DEBUG] [Thread-191464] [transport.py] [_log()] Compression: none
2026-04-12T15:35:25.671 [DEBUG] [Thread-191464] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:35:25.729 [DEBUG] [Thread-191464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:35:25.729 [DEBUG] [Thread-191464] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:35:25.730 [DEBUG] [Thread-191464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:35:25.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:35:25.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:35:25.785 [DEBUG] [Thread-191464] [transport.py] [_log()] userauth is OK
2026-04-12T15:35:25.786 [DEBUG] [Thread-191464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:35:25.786 [DEBUG] [Thread-191464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:35:25.786 [DEBUG] [Thread-191464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:35:25.786 [DEBUG] [Thread-191464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:35:25.811 [INFO] [Thread-191464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:35:25.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:35:25.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:35:26.656 [DEBUG] [Thread-191464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:35:26.656 [DEBUG] [Thread-191464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:35:26.704 [DEBUG] [Thread-191464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:35:26.704 [DEBUG] [Thread-191464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:35:26.717 [DEBUG] [Thread-191464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:35:26.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:35:26.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:35:26.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:35:26.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:35:26.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:35:26.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:35:26.756 [DEBUG] [Thread-191464] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:35:36.545 [DEBUG] [Thread-191466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:35:42.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:35:42.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:35:42.449 [DEBUG] [Thread-191467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:35:51.595 [DEBUG] [Thread-191468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:35:56.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:35:56.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:35: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
2026-04-12T15:35:58.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 35, 28), 7.05382, 62.7166, 0.0, 13.1641, 15.16, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:35:58.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:35:28
2026-04-12T15:35:58.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:35:58.576 [DEBUG] [Thread-191469] [transport.py] [_log()] starting thread (client mode): 0xae5a51b0
2026-04-12T15:35:58.576 [DEBUG] [Thread-191469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:35:58.596 [DEBUG] [Thread-191469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:35:58.596 [INFO] [Thread-191469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:35:58.599 [DEBUG] [Thread-191469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] client lang: <none>
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] server lang: <none>
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] kex follows: False
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] Compression: none
2026-04-12T15:35:58.600 [DEBUG] [Thread-191469] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:35:58.617 [DEBUG] [Thread-191469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:35:58.618 [DEBUG] [Thread-191469] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:35:58.618 [DEBUG] [Thread-191469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:35:58.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:35:58.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:35:58.620 [DEBUG] [Thread-191469] [transport.py] [_log()] userauth is OK
2026-04-12T15:35:58.620 [DEBUG] [Thread-191469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:35:58.620 [DEBUG] [Thread-191469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:35:58.621 [DEBUG] [Thread-191469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:35:58.621 [DEBUG] [Thread-191469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:35:58.639 [INFO] [Thread-191469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:35:58.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:35:59.416 [DEBUG] [Thread-191469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:35:59.416 [DEBUG] [Thread-191469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:35:59.417 [DEBUG] [Thread-191469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:35:59.457 [DEBUG] [Thread-191469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:35:59.457 [DEBUG] [Thread-191469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:35:59.461 [DEBUG] [Thread-191469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:35:59.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:35:59.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:35:59.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:35:59.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:35:59.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:35:59.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:35:59.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:35:59.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:35:59.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:35:59.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.566078 -999.00  +15.10   9.27     66   +8.90 1 2 1 1 1   887    0 7.08 49.06 ----- 7.3 9.3 266.6 11.5 20.5 -13.7 19.9 -12.7 19.7 -12.1 20.4 -13.2
2026-04-12T15:35:59.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:35:59.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:35:59.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.566078
2026-04-12T15:35:59.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:35:59.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:35:59.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:35:59.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:35:59.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:35:59.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:35:28', tmtdew=7.05382, humidity=62.7166, cloud=0.0, wind=13.1641, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:35:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:35:59.488 [DEBUG] [Thread-191469] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:35:59.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:35:59.584 [DEBUG] [Thread-191472] [transport.py] [_log()] starting thread (client mode): 0xae5b44c0
2026-04-12T15:35:59.584 [DEBUG] [Thread-191472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:35:59.598 [DEBUG] [Thread-191472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:35:59.598 [INFO] [Thread-191472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:35:59.606 [DEBUG] [Thread-191472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:35:59.606 [DEBUG] [Thread-191472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:35:59.606 [DEBUG] [Thread-191472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:35:59.606 [DEBUG] [Thread-191472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:59.606 [DEBUG] [Thread-191472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:35:59.606 [DEBUG] [Thread-191472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] client lang: <none>
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] server lang: <none>
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] kex follows: False
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] Compression: none
2026-04-12T15:35:59.607 [DEBUG] [Thread-191472] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:35:59.665 [DEBUG] [Thread-191472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:35:59.666 [DEBUG] [Thread-191472] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:35:59.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:35:59.667 [DEBUG] [Thread-191472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:35:59.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:35:59.721 [DEBUG] [Thread-191472] [transport.py] [_log()] userauth is OK
2026-04-12T15:35:59.722 [DEBUG] [Thread-191472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:35:59.722 [DEBUG] [Thread-191472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:35:59.722 [DEBUG] [Thread-191472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:35:59.722 [DEBUG] [Thread-191472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:35:59.740 [INFO] [Thread-191472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:35:59.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:35:59.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:36:00.578 [DEBUG] [Thread-191472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:36:00.578 [DEBUG] [Thread-191472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:36:00.625 [DEBUG] [Thread-191472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:36:00.625 [DEBUG] [Thread-191472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:36:00.634 [DEBUG] [Thread-191472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:36:00.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:36:00.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:36:00.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:36:00.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:36:00.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:36:00.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:36:00.666 [DEBUG] [Thread-191472] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:36:06.633 [DEBUG] [Thread-191474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:36:21.690 [DEBUG] [Thread-191475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:36:30.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:36:30.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:36:30.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:36:32.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 36, 4), 7.26248, 61.8217, 0.0, 11.4707, 15.1102, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:36:32.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:36:04
2026-04-12T15:36:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:36:32.677 [DEBUG] [Thread-191476] [transport.py] [_log()] starting thread (client mode): 0xae5a6020
2026-04-12T15:36:32.677 [DEBUG] [Thread-191476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:36:32.697 [DEBUG] [Thread-191476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:36:32.697 [INFO] [Thread-191476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] client lang: <none>
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] server lang: <none>
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] kex follows: False
2026-04-12T15:36:32.701 [DEBUG] [Thread-191476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:36:32.702 [DEBUG] [Thread-191476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:36:32.702 [DEBUG] [Thread-191476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:36:32.702 [DEBUG] [Thread-191476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:36:32.702 [DEBUG] [Thread-191476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:36:32.702 [DEBUG] [Thread-191476] [transport.py] [_log()] Compression: none
2026-04-12T15:36:32.702 [DEBUG] [Thread-191476] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:36:32.719 [DEBUG] [Thread-191476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:36:32.720 [DEBUG] [Thread-191476] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:36:32.729 [DEBUG] [Thread-191476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:36:32.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:36:32.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:36:32.733 [DEBUG] [Thread-191476] [transport.py] [_log()] userauth is OK
2026-04-12T15:36:32.733 [DEBUG] [Thread-191476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:36:32.733 [DEBUG] [Thread-191476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:36:32.733 [DEBUG] [Thread-191476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:36:32.734 [DEBUG] [Thread-191476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:36:32.769 [INFO] [Thread-191476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:36:32.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:36:33.553 [DEBUG] [Thread-191476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:36:33.553 [DEBUG] [Thread-191476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:36:33.554 [DEBUG] [Thread-191476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:36:33.593 [DEBUG] [Thread-191476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:36:33.594 [DEBUG] [Thread-191476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:36:33.596 [DEBUG] [Thread-191476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:36:33.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:36:33.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:36:33.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:36:33.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:36:33.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:36:33.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:36:33.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:36:33.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:36:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:36:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.566425 -999.00  +15.00   5.81     67   +9.10 1 2 1 1 1   887    0 7.19 49.98 ----- 10.4 5.8 289.2 9.5 20.6 -12.7 19.9 -12.8 19.8 -12.3 20.6 -12.5
2026-04-12T15:36:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:36:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:36:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.566425
2026-04-12T15:36:33.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:36:33.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:36:33.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:36:33.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:36:33.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:36:33.621 [DEBUG] [Thread-191476] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:36:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:36:04', tmtdew=7.26248, humidity=61.8217, cloud=0.0, wind=11.4707, temperature=15.1102, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:35:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:36:33.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:36:33.717 [DEBUG] [Thread-191479] [transport.py] [_log()] starting thread (client mode): 0xae5a5c00
2026-04-12T15:36:33.717 [DEBUG] [Thread-191479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:36:33.733 [DEBUG] [Thread-191479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:36:33.734 [INFO] [Thread-191479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:36:33.749 [DEBUG] [Thread-191479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] client lang: <none>
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] server lang: <none>
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] kex follows: False
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] Compression: none
2026-04-12T15:36:33.750 [DEBUG] [Thread-191479] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:36:33.817 [DEBUG] [Thread-191479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:36:33.818 [DEBUG] [Thread-191479] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:36:33.818 [DEBUG] [Thread-191479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:36:33.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:36:33.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:36:33.883 [DEBUG] [Thread-191479] [transport.py] [_log()] userauth is OK
2026-04-12T15:36:33.883 [DEBUG] [Thread-191479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:36:33.883 [DEBUG] [Thread-191479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:36:33.883 [DEBUG] [Thread-191479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:36:33.883 [DEBUG] [Thread-191479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:36:33.903 [INFO] [Thread-191479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:36:33.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:36:33.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:36:34.721 [DEBUG] [Thread-191479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:36:34.721 [DEBUG] [Thread-191479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:36:34.772 [DEBUG] [Thread-191479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:36:34.772 [DEBUG] [Thread-191479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:36:34.785 [DEBUG] [Thread-191479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:36:34.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:36:34.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:36:34.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:36:34.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:36:34.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:36:34.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:36:34.832 [DEBUG] [Thread-191479] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:36:36.725 [DEBUG] [Thread-191481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:36:42.160 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:36:42.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:36:42.493 [DEBUG] [Thread-191482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:36:51.779 [DEBUG] [Thread-191483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:37:04.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:37:04.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:37:04.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:37:06.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 36, 39), 7.61458, 60.4504, 0.0, 10.6229, 15.6536, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:37:06.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:36:39
2026-04-12T15:37:06.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:37:06.704 [DEBUG] [Thread-191484] [transport.py] [_log()] starting thread (client mode): 0xae5a7880
2026-04-12T15:37:06.704 [DEBUG] [Thread-191484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:37:06.725 [DEBUG] [Thread-191484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:37:06.725 [INFO] [Thread-191484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:37:06.728 [DEBUG] [Thread-191484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:37:06.728 [DEBUG] [Thread-191484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:37:06.728 [DEBUG] [Thread-191484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:37:06.728 [DEBUG] [Thread-191484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:06.728 [DEBUG] [Thread-191484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:06.728 [DEBUG] [Thread-191484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] client lang: <none>
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] server lang: <none>
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] kex follows: False
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] Compression: none
2026-04-12T15:37:06.729 [DEBUG] [Thread-191484] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:37:06.746 [DEBUG] [Thread-191484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:37:06.747 [DEBUG] [Thread-191484] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:37:06.748 [DEBUG] [Thread-191484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:37:06.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:37:06.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:37:06.750 [DEBUG] [Thread-191484] [transport.py] [_log()] userauth is OK
2026-04-12T15:37:06.751 [DEBUG] [Thread-191484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:37:06.751 [DEBUG] [Thread-191484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:37:06.751 [DEBUG] [Thread-191484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:37:06.751 [DEBUG] [Thread-191484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:37:06.775 [INFO] [Thread-191484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:37:06.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:37:06.818 [DEBUG] [Thread-191486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:37:07.579 [DEBUG] [Thread-191484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:37:07.580 [DEBUG] [Thread-191484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:37:07.580 [DEBUG] [Thread-191484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:37:07.621 [DEBUG] [Thread-191484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:37:07.621 [DEBUG] [Thread-191484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:37:07.625 [DEBUG] [Thread-191484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:37:07.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:37:07.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:37:07.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:37:07.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:37:07.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:37:07.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:37:07.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:37:07.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:37:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:37:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.567120 -999.00  +14.90  12.12     66   +8.70 1 2 1 1 1   887    0 7.02 47.07 ----- 9.3 12.1 280.6 15.9 20.4 -13.7 19.9 -13.0 19.6 -12.4 20.6 -12.8
2026-04-12T15:37:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:37:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:37:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.567120
2026-04-12T15:37:07.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:37:07.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:37:07.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:37:07.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:37:07.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:37:07.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:36:39', tmtdew=7.61458, humidity=60.4504, cloud=0.0, wind=10.6229, temperature=15.6536, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:36:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:37:07.652 [DEBUG] [Thread-191484] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:37:07.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:37:07.757 [DEBUG] [Thread-191488] [transport.py] [_log()] starting thread (client mode): 0xae5a6f80
2026-04-12T15:37:07.757 [DEBUG] [Thread-191488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:37:07.776 [DEBUG] [Thread-191488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:37:07.777 [INFO] [Thread-191488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:37:07.786 [DEBUG] [Thread-191488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:37:07.786 [DEBUG] [Thread-191488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:37:07.786 [DEBUG] [Thread-191488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] client lang: <none>
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] server lang: <none>
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] kex follows: False
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] Compression: none
2026-04-12T15:37:07.787 [DEBUG] [Thread-191488] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:37:07.848 [DEBUG] [Thread-191488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:37:07.849 [DEBUG] [Thread-191488] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:37:07.849 [DEBUG] [Thread-191488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:37:07.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:37:07.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:37:07.906 [DEBUG] [Thread-191488] [transport.py] [_log()] userauth is OK
2026-04-12T15:37:07.907 [DEBUG] [Thread-191488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:37:07.907 [DEBUG] [Thread-191488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:37:07.907 [DEBUG] [Thread-191488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:37:07.907 [DEBUG] [Thread-191488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:37:07.926 [INFO] [Thread-191488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:37:07.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:37:07.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:37:08.712 [DEBUG] [Thread-191488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:37:08.712 [DEBUG] [Thread-191488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:37:08.759 [DEBUG] [Thread-191488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:37:08.759 [DEBUG] [Thread-191488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:37:08.768 [DEBUG] [Thread-191488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:37:08.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:37:08.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:37:08.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:37:08.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:37:08.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:37:08.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:37:08.800 [DEBUG] [Thread-191488] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:37:21.856 [DEBUG] [Thread-191490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:37:36.918 [DEBUG] [Thread-191491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:37:38.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:37:38.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:37:38.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:37:40.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 37, 14), 7.34767, 61.7057, 0.0, 12.388, 15.1427, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:37:40.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:37:14
2026-04-12T15:37:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:37:40.612 [DEBUG] [Thread-191492] [transport.py] [_log()] starting thread (client mode): 0xae5a7d00
2026-04-12T15:37:40.612 [DEBUG] [Thread-191492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:37:40.633 [DEBUG] [Thread-191492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:37:40.633 [INFO] [Thread-191492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] client lang: <none>
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] server lang: <none>
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] kex follows: False
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] Compression: none
2026-04-12T15:37:40.637 [DEBUG] [Thread-191492] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:37:40.654 [DEBUG] [Thread-191492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:37:40.655 [DEBUG] [Thread-191492] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:37:40.655 [DEBUG] [Thread-191492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:37:40.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:37:40.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:37:40.657 [DEBUG] [Thread-191492] [transport.py] [_log()] userauth is OK
2026-04-12T15:37:40.658 [DEBUG] [Thread-191492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:37:40.658 [DEBUG] [Thread-191492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:37:40.658 [DEBUG] [Thread-191492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:37:40.658 [DEBUG] [Thread-191492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:37:40.683 [INFO] [Thread-191492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:37:40.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:37:41.488 [DEBUG] [Thread-191492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:37:41.488 [DEBUG] [Thread-191492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:37:41.488 [DEBUG] [Thread-191492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:37:41.529 [DEBUG] [Thread-191492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:37:41.529 [DEBUG] [Thread-191492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:37:41.532 [DEBUG] [Thread-191492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:37:41.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:37:41.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:37:41.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:37:41.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:37:41.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:37:41.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:37:41.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:37:41.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:37:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:37:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.567467 -999.00  +15.10  10.32     68   +9.20 1 2 1 1 1   887    0 7.00 43.57 ----- 8.4 10.3 268.2 15.3 20.6 -13.5 20.0 -13.1 19.6 -12.3 20.8 -11.9
2026-04-12T15:37:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:37:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:37:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.567467
2026-04-12T15:37:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:37:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:37:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:37:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:37:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:37:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:37:14', tmtdew=7.34767, humidity=61.7057, cloud=0.0, wind=12.388, temperature=15.1427, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:37:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:37:41.557 [DEBUG] [Thread-191492] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:37:41.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:37:41.652 [DEBUG] [Thread-191495] [transport.py] [_log()] starting thread (client mode): 0xae5a7970
2026-04-12T15:37:41.652 [DEBUG] [Thread-191495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:37:41.666 [DEBUG] [Thread-191495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:37:41.667 [INFO] [Thread-191495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:37:41.674 [DEBUG] [Thread-191495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] client lang: <none>
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] server lang: <none>
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] kex follows: False
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] Compression: none
2026-04-12T15:37:41.675 [DEBUG] [Thread-191495] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:37:41.733 [DEBUG] [Thread-191495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:37:41.734 [DEBUG] [Thread-191495] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:37:41.735 [DEBUG] [Thread-191495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:37:41.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:37:41.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:37:41.790 [DEBUG] [Thread-191495] [transport.py] [_log()] userauth is OK
2026-04-12T15:37:41.790 [DEBUG] [Thread-191495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:37:41.790 [DEBUG] [Thread-191495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:37:41.790 [DEBUG] [Thread-191495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:37:41.791 [DEBUG] [Thread-191495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:37:41.808 [INFO] [Thread-191495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:37:41.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:37:41.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:37:42.303 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:37:42.304 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:37:42.524 [DEBUG] [Thread-191497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:37:42.619 [DEBUG] [Thread-191495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:37:42.619 [DEBUG] [Thread-191495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:37:42.667 [DEBUG] [Thread-191495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:37:42.667 [DEBUG] [Thread-191495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:37:42.677 [DEBUG] [Thread-191495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:37:42.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:37: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')
2026-04-12T15:37:42.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:37:42.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:37:42.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:37:42.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:37:42.714 [DEBUG] [Thread-191495] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:37:51.958 [DEBUG] [Thread-191498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:38:07.029 [DEBUG] [Thread-191499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:38:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:38:12.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:38:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:38:14.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 37, 50), 7.55354, 60.7486, 0.0, 12.0694, 15.8524, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:38:14.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:37:50
2026-04-12T15:38:14.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:38:14.565 [DEBUG] [Thread-191500] [transport.py] [_log()] starting thread (client mode): 0xae5b6ad0
2026-04-12T15:38:14.565 [DEBUG] [Thread-191500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:38:14.587 [DEBUG] [Thread-191500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:38:14.587 [INFO] [Thread-191500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] client lang: <none>
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] server lang: <none>
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] kex follows: False
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:38:14.590 [DEBUG] [Thread-191500] [transport.py] [_log()] Compression: none
2026-04-12T15:38:14.591 [DEBUG] [Thread-191500] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:38:14.609 [DEBUG] [Thread-191500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:38:14.610 [DEBUG] [Thread-191500] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:38:14.610 [DEBUG] [Thread-191500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:38:14.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:38:14.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:38:14.612 [DEBUG] [Thread-191500] [transport.py] [_log()] userauth is OK
2026-04-12T15:38:14.613 [DEBUG] [Thread-191500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:38:14.613 [DEBUG] [Thread-191500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:38:14.613 [DEBUG] [Thread-191500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:38:14.613 [DEBUG] [Thread-191500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:38:14.637 [INFO] [Thread-191500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:38:14.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:38:15.435 [DEBUG] [Thread-191500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:38:15.435 [DEBUG] [Thread-191500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:38:15.436 [DEBUG] [Thread-191500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:38:15.476 [DEBUG] [Thread-191500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:38:15.476 [DEBUG] [Thread-191500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:38:15.479 [DEBUG] [Thread-191500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:38:15.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:38:15.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:38:15.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:38:15.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:38:15.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:38:15.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:38:15.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:38:15.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:38:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:38:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.567814 -999.00  +15.00  12.00     65   +8.70 1 2 1 1 1   887    0 6.83 42.20 ----- 12.5 12.0 275.8 13.9 20.7 -13.2 20.0 -13.2 20.0 -11.9 20.9 -12.0
2026-04-12T15:38:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:38:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:38:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.567814
2026-04-12T15:38:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:38:15.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:38:15.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:38:15.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:38:15.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:38:15.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:37:50', tmtdew=7.55354, humidity=60.7486, cloud=0.0, wind=12.0694, temperature=15.8524, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:37:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:38:15.508 [DEBUG] [Thread-191500] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:38:15.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:38:15.615 [DEBUG] [Thread-191503] [transport.py] [_log()] starting thread (client mode): 0xae5b68f0
2026-04-12T15:38:15.615 [DEBUG] [Thread-191503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:38:15.630 [DEBUG] [Thread-191503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:38:15.631 [INFO] [Thread-191503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:38:15.644 [DEBUG] [Thread-191503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:38:15.645 [DEBUG] [Thread-191503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:38:15.645 [DEBUG] [Thread-191503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:38:15.645 [DEBUG] [Thread-191503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:15.645 [DEBUG] [Thread-191503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:15.645 [DEBUG] [Thread-191503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] client lang: <none>
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] server lang: <none>
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] kex follows: False
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] Compression: none
2026-04-12T15:38:15.646 [DEBUG] [Thread-191503] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:38:15.705 [DEBUG] [Thread-191503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:38:15.706 [DEBUG] [Thread-191503] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:38:15.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:38:15.708 [DEBUG] [Thread-191503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:38:15.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:38:15.768 [DEBUG] [Thread-191503] [transport.py] [_log()] userauth is OK
2026-04-12T15:38:15.768 [DEBUG] [Thread-191503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:38:15.768 [DEBUG] [Thread-191503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:38:15.769 [DEBUG] [Thread-191503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:38:15.769 [DEBUG] [Thread-191503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:38:15.787 [INFO] [Thread-191503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:38:15.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:38:15.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:38:16.623 [DEBUG] [Thread-191503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:38:16.623 [DEBUG] [Thread-191503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:38:16.672 [DEBUG] [Thread-191503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:38:16.672 [DEBUG] [Thread-191503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:38:16.686 [DEBUG] [Thread-191503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:38:16.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:38:16.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:38:16.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:38:16.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:38:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:38:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:38:16.729 [DEBUG] [Thread-191503] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:38:22.066 [DEBUG] [Thread-191505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:38:37.116 [DEBUG] [Thread-191506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:38:42.444 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:38:42.446 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:38:42.570 [DEBUG] [Thread-191507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:38:46.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:38:46.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:38:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:38:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 38, 25), 7.46756, 60.924, 0.0, 11.2936, 15.1258, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:38:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:38:25
2026-04-12T15:38:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:38:48.608 [DEBUG] [Thread-191508] [transport.py] [_log()] starting thread (client mode): 0xae5a7df0
2026-04-12T15:38:48.609 [DEBUG] [Thread-191508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:38:48.630 [DEBUG] [Thread-191508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:38:48.630 [INFO] [Thread-191508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:38:48.633 [DEBUG] [Thread-191508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:38:48.633 [DEBUG] [Thread-191508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:38:48.633 [DEBUG] [Thread-191508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:38:48.633 [DEBUG] [Thread-191508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:48.633 [DEBUG] [Thread-191508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] client lang: <none>
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] server lang: <none>
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] kex follows: False
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] Compression: none
2026-04-12T15:38:48.634 [DEBUG] [Thread-191508] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:38:48.652 [DEBUG] [Thread-191508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:38:48.653 [DEBUG] [Thread-191508] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:38:48.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:38:48.654 [DEBUG] [Thread-191508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:38:48.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:38:48.655 [DEBUG] [Thread-191508] [transport.py] [_log()] userauth is OK
2026-04-12T15:38:48.655 [DEBUG] [Thread-191508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:38:48.655 [DEBUG] [Thread-191508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:38:48.655 [DEBUG] [Thread-191508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:38:48.655 [DEBUG] [Thread-191508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:38:48.670 [INFO] [Thread-191508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:38:48.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:38:49.452 [DEBUG] [Thread-191508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:38:49.453 [DEBUG] [Thread-191508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:38:49.453 [DEBUG] [Thread-191508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:38:49.494 [DEBUG] [Thread-191508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:38:49.494 [DEBUG] [Thread-191508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:38:49.497 [DEBUG] [Thread-191508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:38:49.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:38:49.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:38:49.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:38:49.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:38:49.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:38:49.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:38:49.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:38:49.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:38:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:38:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.568161 -999.00  +15.10  10.55     66   +8.90 1 2 1 1 1   887    0 7.08 44.07 ----- 15.8 10.6 262.6 18.4 20.7 -13.6 20.1 -13.7 20.0 -11.8 21.1 -13.3
2026-04-12T15:38:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:38:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:38:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.568161
2026-04-12T15:38:49.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:38:49.523 [DEBUG] [Thread-191508] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:38:49.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:38:49.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:38:49.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:38:49.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:38:49.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:38:25', tmtdew=7.46756, humidity=60.924, cloud=0.0, wind=11.2936, temperature=15.1258, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:38:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:38:49.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:38:49.617 [DEBUG] [Thread-191511] [transport.py] [_log()] starting thread (client mode): 0xae52e0e0
2026-04-12T15:38:49.617 [DEBUG] [Thread-191511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:38:49.633 [DEBUG] [Thread-191511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:38:49.633 [INFO] [Thread-191511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] client lang: <none>
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] server lang: <none>
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] kex follows: False
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] Compression: none
2026-04-12T15:38:49.644 [DEBUG] [Thread-191511] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:38:49.701 [DEBUG] [Thread-191511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:38:49.702 [DEBUG] [Thread-191511] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:38:49.702 [DEBUG] [Thread-191511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:38:49.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:38:49.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:38:49.762 [DEBUG] [Thread-191511] [transport.py] [_log()] userauth is OK
2026-04-12T15:38:49.762 [DEBUG] [Thread-191511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:38:49.762 [DEBUG] [Thread-191511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:38:49.762 [DEBUG] [Thread-191511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:38:49.762 [DEBUG] [Thread-191511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:38:49.781 [INFO] [Thread-191511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:38:49.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:38:49.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:38:50.614 [DEBUG] [Thread-191511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:38:50.615 [DEBUG] [Thread-191511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:38:50.661 [DEBUG] [Thread-191511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:38:50.662 [DEBUG] [Thread-191511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:38:50.670 [DEBUG] [Thread-191511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:38:50.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:38:50.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:38: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') -> 00000000
2026-04-12T15:38:50.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:38:50.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:38:50.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:38:50.717 [DEBUG] [Thread-191511] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:38:52.152 [DEBUG] [Thread-191513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:07.205 [DEBUG] [Thread-191514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:20.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:39:20.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:39:20.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:39:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 39), 7.60362, 60.4737, 0.0, 10.4116, 15.2427, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:39:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:39:00
2026-04-12T15:39:22.246 [DEBUG] [Thread-191515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:39:22.606 [DEBUG] [Thread-191516] [transport.py] [_log()] starting thread (client mode): 0xae508580
2026-04-12T15:39:22.606 [DEBUG] [Thread-191516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:39:22.626 [DEBUG] [Thread-191516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:39:22.626 [INFO] [Thread-191516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:39:22.628 [DEBUG] [Thread-191516] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:39:22.628 [DEBUG] [Thread-191516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] client lang: <none>
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] server lang: <none>
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] kex follows: False
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] Compression: none
2026-04-12T15:39:22.629 [DEBUG] [Thread-191516] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:39:22.645 [DEBUG] [Thread-191516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:39:22.645 [DEBUG] [Thread-191516] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:39:22.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:39:22.647 [DEBUG] [Thread-191516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:39:22.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:39:22.649 [DEBUG] [Thread-191516] [transport.py] [_log()] userauth is OK
2026-04-12T15:39:22.649 [DEBUG] [Thread-191516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:39:22.649 [DEBUG] [Thread-191516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:39:22.649 [DEBUG] [Thread-191516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:39:22.649 [DEBUG] [Thread-191516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:39:22.670 [INFO] [Thread-191516] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:39:22.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:39:23.453 [DEBUG] [Thread-191516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:39:23.453 [DEBUG] [Thread-191516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:39:23.453 [DEBUG] [Thread-191516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:39:23.494 [DEBUG] [Thread-191516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:39:23.494 [DEBUG] [Thread-191516] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:39:23.498 [DEBUG] [Thread-191516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:39:23.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:39:23.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:39:23.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:39:23.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:39:23.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:39:23.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:39:23.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:39:23.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:39:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:39:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.568508 -999.00  +15.20   9.45     65   +8.70 1 2 1 1 1   887    0 6.99 41.97 ----- 10.9 9.4 288.8 14.9 20.7 -15.0 20.1 -14.2 20.1 -13.9 21.1 -14.0
2026-04-12T15:39:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:39:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:39:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.568508
2026-04-12T15:39:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:39:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:39:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:39:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:39:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:39:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:39:00', tmtdew=7.60362, humidity=60.4737, cloud=0.0, wind=10.4116, temperature=15.2427, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:38:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:39:23.524 [DEBUG] [Thread-191516] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:39:23.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:39:23.617 [DEBUG] [Thread-191519] [transport.py] [_log()] starting thread (client mode): 0xb0fe9870
2026-04-12T15:39:23.617 [DEBUG] [Thread-191519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:39:23.631 [DEBUG] [Thread-191519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:39:23.631 [INFO] [Thread-191519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] client lang: <none>
2026-04-12T15:39:23.639 [DEBUG] [Thread-191519] [transport.py] [_log()] server lang: <none>
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] kex follows: False
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] Compression: none
2026-04-12T15:39:23.640 [DEBUG] [Thread-191519] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:39:23.698 [DEBUG] [Thread-191519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:39:23.699 [DEBUG] [Thread-191519] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:39:23.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:39:23.700 [DEBUG] [Thread-191519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:39:23.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:39:23.758 [DEBUG] [Thread-191519] [transport.py] [_log()] userauth is OK
2026-04-12T15:39:23.759 [DEBUG] [Thread-191519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:39:23.759 [DEBUG] [Thread-191519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:39:23.759 [DEBUG] [Thread-191519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:39:23.759 [DEBUG] [Thread-191519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:39:23.778 [INFO] [Thread-191519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:39:23.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:39:23.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:39:24.597 [DEBUG] [Thread-191519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:39:24.597 [DEBUG] [Thread-191519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:39:24.645 [DEBUG] [Thread-191519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:39:24.645 [DEBUG] [Thread-191519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:39:24.655 [DEBUG] [Thread-191519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:39:24.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:39:24.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:39:24.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:39:24.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:39:24.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:39:24.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:39:24.695 [DEBUG] [Thread-191519] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:39:37.282 [DEBUG] [Thread-191521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:42.586 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:42.587 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:42.603 [DEBUG] [Thread-191522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:52.347 [DEBUG] [Thread-191523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:39:54.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:39:54.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:39:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:39:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 39, 36), 7.54324, 60.8142, 0.0, 15.3151, 15.9511, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:39:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:39:36
2026-04-12T15:39:56.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:39:56.478 [DEBUG] [Thread-191524] [transport.py] [_log()] starting thread (client mode): 0xae50b190
2026-04-12T15:39:56.478 [DEBUG] [Thread-191524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:39:56.498 [DEBUG] [Thread-191524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:39:56.498 [INFO] [Thread-191524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] client lang: <none>
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] server lang: <none>
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] kex follows: False
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] Compression: none
2026-04-12T15:39:56.502 [DEBUG] [Thread-191524] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:39:56.519 [DEBUG] [Thread-191524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:39:56.520 [DEBUG] [Thread-191524] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:39:56.520 [DEBUG] [Thread-191524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:39:56.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:39:56.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:39:56.522 [DEBUG] [Thread-191524] [transport.py] [_log()] userauth is OK
2026-04-12T15:39:56.522 [DEBUG] [Thread-191524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:39:56.522 [DEBUG] [Thread-191524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:39:56.522 [DEBUG] [Thread-191524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:39:56.522 [DEBUG] [Thread-191524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:39:56.538 [INFO] [Thread-191524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:39:56.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:39:57.326 [DEBUG] [Thread-191524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:39:57.326 [DEBUG] [Thread-191524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:39:57.326 [DEBUG] [Thread-191524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:39:57.367 [DEBUG] [Thread-191524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:39:57.367 [DEBUG] [Thread-191524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:39:57.371 [DEBUG] [Thread-191524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:39:57.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:39:57.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:39:57.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:39:57.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:39:57.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:39:57.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:39:57.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:39:57.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:39:57.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:39:57.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.568856 -999.00  +15.10  10.01     65   +8.70 1 2 1 1 1   887    0 6.94 38.73 ----- 11.1 10.0 267.4 14.6 20.8 -13.8 20.1 -14.3 20.0 -13.3 20.9 -14.3
2026-04-12T15:39:57.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:39:57.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:39:57.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.568856
2026-04-12T15:39:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:39:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:39:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:39:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:39:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:39:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:39:36', tmtdew=7.54324, humidity=60.8142, cloud=0.0, wind=15.3151, temperature=15.9511, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:39:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:39:57.399 [DEBUG] [Thread-191524] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:39:57.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:39:57.491 [DEBUG] [Thread-191527] [transport.py] [_log()] starting thread (client mode): 0xae5a4970
2026-04-12T15:39:57.491 [DEBUG] [Thread-191527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:39:57.507 [DEBUG] [Thread-191527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:39:57.507 [INFO] [Thread-191527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] client lang: <none>
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] server lang: <none>
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] kex follows: False
2026-04-12T15:39:57.515 [DEBUG] [Thread-191527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:39:57.516 [DEBUG] [Thread-191527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:39:57.516 [DEBUG] [Thread-191527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:39:57.516 [DEBUG] [Thread-191527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:39:57.516 [DEBUG] [Thread-191527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:39:57.516 [DEBUG] [Thread-191527] [transport.py] [_log()] Compression: none
2026-04-12T15:39:57.516 [DEBUG] [Thread-191527] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:39:57.574 [DEBUG] [Thread-191527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:39:57.575 [DEBUG] [Thread-191527] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:39:57.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:39:57.576 [DEBUG] [Thread-191527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:39:57.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:39:57.631 [DEBUG] [Thread-191527] [transport.py] [_log()] userauth is OK
2026-04-12T15:39:57.631 [DEBUG] [Thread-191527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:39:57.631 [DEBUG] [Thread-191527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:39:57.631 [DEBUG] [Thread-191527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:39:57.631 [DEBUG] [Thread-191527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:39:57.655 [INFO] [Thread-191527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:39:57.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:39:57.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:39:58.463 [DEBUG] [Thread-191527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:39:58.463 [DEBUG] [Thread-191527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:39:58.511 [DEBUG] [Thread-191527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:39:58.511 [DEBUG] [Thread-191527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:39:58.521 [DEBUG] [Thread-191527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:39:58.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:39:58.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:39:58.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:39:58.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:39:58.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:39:58.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:39:58.558 [DEBUG] [Thread-191527] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:40:07.385 [DEBUG] [Thread-191529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:40:22.435 [DEBUG] [Thread-191530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:40:28.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:40:28.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:40:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:40:29.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 40, 11), 7.6745, 60.3214, 0.0, 10.1815, 15.3253, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:40:29.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:40:11
2026-04-12T15:40:30.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:40:30.409 [DEBUG] [Thread-191531] [transport.py] [_log()] starting thread (client mode): 0xae509090
2026-04-12T15:40:30.409 [DEBUG] [Thread-191531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:40:30.431 [DEBUG] [Thread-191531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:40:30.431 [INFO] [Thread-191531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] client lang: <none>
2026-04-12T15:40:30.434 [DEBUG] [Thread-191531] [transport.py] [_log()] server lang: <none>
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] kex follows: False
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] Compression: none
2026-04-12T15:40:30.435 [DEBUG] [Thread-191531] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:40:30.453 [DEBUG] [Thread-191531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:40:30.453 [DEBUG] [Thread-191531] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:40:30.454 [DEBUG] [Thread-191531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:40:30.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:40:30.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:40:30.456 [DEBUG] [Thread-191531] [transport.py] [_log()] userauth is OK
2026-04-12T15:40:30.457 [DEBUG] [Thread-191531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:40:30.457 [DEBUG] [Thread-191531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:40:30.457 [DEBUG] [Thread-191531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:40:30.457 [DEBUG] [Thread-191531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:40:30.479 [INFO] [Thread-191531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:40:30.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:40:31.780 [DEBUG] [Thread-191531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:40:31.781 [DEBUG] [Thread-191531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:40:31.781 [DEBUG] [Thread-191531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:40:31.821 [DEBUG] [Thread-191531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:40:31.822 [DEBUG] [Thread-191531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:40:31.825 [DEBUG] [Thread-191531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:40:31.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:40:31.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:40:31.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:40:31.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:40:31.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:40:31.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:40:31.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:40:31.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:40:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:40:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.569203 -999.00  +15.10   7.28     64   +8.50 1 2 1 1 1   887    0 6.98 42.75 ----- 9.7 7.3 260.8 11.1 20.8 -14.5 20.1 -14.9 20.1 -13.5 21.0 -14.5
2026-04-12T15:40:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:40:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:40:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.569203
2026-04-12T15:40:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:40:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:40:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:40:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:40:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:40:31.855 [DEBUG] [Thread-191531] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:40:31.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:40:11', tmtdew=7.6745, humidity=60.3214, cloud=0.0, wind=10.1815, temperature=15.3253, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:39:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:40:31.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:40:31.949 [DEBUG] [Thread-191534] [transport.py] [_log()] starting thread (client mode): 0xae5b6110
2026-04-12T15:40:31.949 [DEBUG] [Thread-191534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:40:31.964 [DEBUG] [Thread-191534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:40:31.965 [INFO] [Thread-191534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] client lang: <none>
2026-04-12T15:40:31.972 [DEBUG] [Thread-191534] [transport.py] [_log()] server lang: <none>
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] kex follows: False
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] Compression: none
2026-04-12T15:40:31.973 [DEBUG] [Thread-191534] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:40:32.030 [DEBUG] [Thread-191534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:40:32.031 [DEBUG] [Thread-191534] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:40:32.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:40:32.032 [DEBUG] [Thread-191534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:40:32.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:40:32.087 [DEBUG] [Thread-191534] [transport.py] [_log()] userauth is OK
2026-04-12T15:40:32.087 [DEBUG] [Thread-191534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:40:32.087 [DEBUG] [Thread-191534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:40:32.088 [DEBUG] [Thread-191534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:40:32.088 [DEBUG] [Thread-191534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:40:32.109 [INFO] [Thread-191534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:40:32.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:40:32.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:40:32.952 [DEBUG] [Thread-191534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:40:32.953 [DEBUG] [Thread-191534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:40:33.001 [DEBUG] [Thread-191534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:40:33.001 [DEBUG] [Thread-191534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:40:33.010 [DEBUG] [Thread-191534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:40:33.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:40:33.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:40:33.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:40:33.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:40:33.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:40:33.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:40:33.045 [DEBUG] [Thread-191534] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:40:37.470 [DEBUG] [Thread-191536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:40:42.636 [DEBUG] [Thread-191537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:40:42.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:40:42.730 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:40:52.521 [DEBUG] [Thread-191538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:41:03.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:41:03.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:41:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:41:04.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 40, 47), 7.90895, 59.3229, 0.0, 10.3054, 15.9511, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:41:04.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:40:47
2026-04-12T15:41:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:41:04.925 [DEBUG] [Thread-191539] [transport.py] [_log()] starting thread (client mode): 0xae5b6ad0
2026-04-12T15:41:04.925 [DEBUG] [Thread-191539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:41:04.945 [DEBUG] [Thread-191539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:41:04.946 [INFO] [Thread-191539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:41:04.949 [DEBUG] [Thread-191539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:41:04.949 [DEBUG] [Thread-191539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:41:04.949 [DEBUG] [Thread-191539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:41:04.949 [DEBUG] [Thread-191539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:04.949 [DEBUG] [Thread-191539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:04.949 [DEBUG] [Thread-191539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] client lang: <none>
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] server lang: <none>
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] kex follows: False
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:41:04.950 [DEBUG] [Thread-191539] [transport.py] [_log()] Compression: none
2026-04-12T15:41:04.951 [DEBUG] [Thread-191539] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:41:04.969 [DEBUG] [Thread-191539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:41:04.971 [DEBUG] [Thread-191539] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:41:04.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:41:04.972 [DEBUG] [Thread-191539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:41:04.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:41:04.974 [DEBUG] [Thread-191539] [transport.py] [_log()] userauth is OK
2026-04-12T15:41:04.974 [DEBUG] [Thread-191539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:41:04.975 [DEBUG] [Thread-191539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:41:04.975 [DEBUG] [Thread-191539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:41:04.975 [DEBUG] [Thread-191539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:41:05.013 [INFO] [Thread-191539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:41:05.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:41:05.771 [DEBUG] [Thread-191539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:41:05.772 [DEBUG] [Thread-191539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:41:05.772 [DEBUG] [Thread-191539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:41:05.813 [DEBUG] [Thread-191539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:41:05.813 [DEBUG] [Thread-191539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:41:05.817 [DEBUG] [Thread-191539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:41:05.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:41:05.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:41:05.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:41:05.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:41:05.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:41:05.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:41:05.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:41:05.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:41:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:41:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.569550 -999.00  +15.10   7.09     63   +8.20 1 2 1 1 1   887    0 7.25 50.85 ----- 7.0 7.1 276.2 10.1 20.8 -15.5 20.1 -15.0 20.2 -13.8 21.0 -14.7
2026-04-12T15:41:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:41:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:41:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.569550
2026-04-12T15:41:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:41:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:41:05.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:41:05.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:41:05.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:41:05.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:40:47', tmtdew=7.90895, humidity=59.3229, cloud=0.0, wind=10.3054, temperature=15.9511, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:40:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:41:05.845 [DEBUG] [Thread-191539] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:41:05.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:41:05.940 [DEBUG] [Thread-191542] [transport.py] [_log()] starting thread (client mode): 0xae50b760
2026-04-12T15:41:05.940 [DEBUG] [Thread-191542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:41:05.955 [DEBUG] [Thread-191542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:41:05.955 [INFO] [Thread-191542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:41:05.963 [DEBUG] [Thread-191542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] client lang: <none>
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] server lang: <none>
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] kex follows: False
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:41:05.964 [DEBUG] [Thread-191542] [transport.py] [_log()] Compression: none
2026-04-12T15:41:05.965 [DEBUG] [Thread-191542] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:41:06.024 [DEBUG] [Thread-191542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:41:06.024 [DEBUG] [Thread-191542] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:41:06.025 [DEBUG] [Thread-191542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:41:06.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:41:06.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:41:06.084 [DEBUG] [Thread-191542] [transport.py] [_log()] userauth is OK
2026-04-12T15:41:06.084 [DEBUG] [Thread-191542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:41:06.084 [DEBUG] [Thread-191542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:41:06.084 [DEBUG] [Thread-191542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:41:06.085 [DEBUG] [Thread-191542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:41:06.104 [INFO] [Thread-191542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:41:06.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:41:06.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:41:06.967 [DEBUG] [Thread-191542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:41:06.967 [DEBUG] [Thread-191542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:41:07.015 [DEBUG] [Thread-191542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:41:07.016 [DEBUG] [Thread-191542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:41:07.025 [DEBUG] [Thread-191542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:41:07.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:41:07.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:41:07.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:41:07.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:41:07.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:41:07.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:41:07.063 [DEBUG] [Thread-191542] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:41:07.560 [DEBUG] [Thread-191544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:41:22.612 [DEBUG] [Thread-191545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:41:37.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:41:37.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:41:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:41:37.652 [DEBUG] [Thread-191546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:41:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 41, 22), 7.86845, 59.3963, 0.0, 8.96508, 15.2924, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:41:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:41:22
2026-04-12T15:41:38.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:41:38.873 [DEBUG] [Thread-191547] [transport.py] [_log()] starting thread (client mode): 0xae5369e0
2026-04-12T15:41:38.873 [DEBUG] [Thread-191547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:41:38.892 [DEBUG] [Thread-191547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:41:38.892 [INFO] [Thread-191547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] client lang: <none>
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] server lang: <none>
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] kex follows: False
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:41:38.895 [DEBUG] [Thread-191547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:41:38.896 [DEBUG] [Thread-191547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:41:38.896 [DEBUG] [Thread-191547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:41:38.896 [DEBUG] [Thread-191547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:41:38.896 [DEBUG] [Thread-191547] [transport.py] [_log()] Compression: none
2026-04-12T15:41:38.896 [DEBUG] [Thread-191547] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:41:38.912 [DEBUG] [Thread-191547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:41:38.912 [DEBUG] [Thread-191547] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:41:38.913 [DEBUG] [Thread-191547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:41:38.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:41:38.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:41:38.915 [DEBUG] [Thread-191547] [transport.py] [_log()] userauth is OK
2026-04-12T15:41:38.915 [DEBUG] [Thread-191547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:41:38.915 [DEBUG] [Thread-191547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:41:38.915 [DEBUG] [Thread-191547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:41:38.915 [DEBUG] [Thread-191547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:41:38.940 [INFO] [Thread-191547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:41:38.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:41:39.716 [DEBUG] [Thread-191547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:41:39.716 [DEBUG] [Thread-191547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:41:39.716 [DEBUG] [Thread-191547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:41:39.757 [DEBUG] [Thread-191547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:41:39.757 [DEBUG] [Thread-191547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:41:39.761 [DEBUG] [Thread-191547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:41:39.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:41:39.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:41:39.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:41:39.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:41:39.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:41:39.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:41:39.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:41:39.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:41:39.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:41:39.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.569898 -999.00  +15.10   8.08     66   +8.80 1 2 1 1 1   887    0 7.35 51.17 ----- 7.5 8.1 281.2 10.6 20.8 -15.5 20.2 -15.2 20.1 -13.9 21.0 -14.2
2026-04-12T15:41:39.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:41:39.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:41:39.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.569898
2026-04-12T15:41:39.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:41:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:41:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:41:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:41:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:41:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:41:22', tmtdew=7.86845, humidity=59.3963, cloud=0.0, wind=8.96508, temperature=15.2924, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:40:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:41:39.788 [DEBUG] [Thread-191547] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:41:39.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:41:39.881 [DEBUG] [Thread-191550] [transport.py] [_log()] starting thread (client mode): 0xb0feb0d0
2026-04-12T15:41:39.882 [DEBUG] [Thread-191550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:41:39.896 [DEBUG] [Thread-191550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:41:39.896 [INFO] [Thread-191550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:41:39.904 [DEBUG] [Thread-191550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:41:39.904 [DEBUG] [Thread-191550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:41:39.904 [DEBUG] [Thread-191550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:41:39.904 [DEBUG] [Thread-191550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:39.904 [DEBUG] [Thread-191550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:41:39.904 [DEBUG] [Thread-191550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:39.904 [DEBUG] [Thread-191550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] client lang: <none>
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] server lang: <none>
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] kex follows: False
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] Compression: none
2026-04-12T15:41:39.905 [DEBUG] [Thread-191550] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:41:39.965 [DEBUG] [Thread-191550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:41:39.966 [DEBUG] [Thread-191550] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:41:39.966 [DEBUG] [Thread-191550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:41:39.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:41:39.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:41:40.024 [DEBUG] [Thread-191550] [transport.py] [_log()] userauth is OK
2026-04-12T15:41:40.024 [DEBUG] [Thread-191550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:41:40.024 [DEBUG] [Thread-191550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:41:40.024 [DEBUG] [Thread-191550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:41:40.024 [DEBUG] [Thread-191550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:41:40.049 [INFO] [Thread-191550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:41:40.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:41:40.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:41:40.843 [DEBUG] [Thread-191550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:41:40.843 [DEBUG] [Thread-191550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:41:40.891 [DEBUG] [Thread-191550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:41:40.891 [DEBUG] [Thread-191550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:41:40.901 [DEBUG] [Thread-191550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:41:40.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:41:40.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')
2026-04-12T15:41:40.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:41:40.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:41:40.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:41:40.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:41:40.937 [DEBUG] [Thread-191550] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:41:42.674 [DEBUG] [Thread-191552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:41:42.871 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:41:42.873 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:41:52.688 [DEBUG] [Thread-191553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:42:07.746 [DEBUG] [Thread-191554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:42:10.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:42:10.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:42:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:42:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 41, 57), 7.76694, 59.5952, 0.0, 11.3818, 15.2593, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:42:12.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:41:57
2026-04-12T15:42:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:42:12.767 [DEBUG] [Thread-191555] [transport.py] [_log()] starting thread (client mode): 0xae50bbb0
2026-04-12T15:42:12.767 [DEBUG] [Thread-191555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:42:12.790 [DEBUG] [Thread-191555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:42:12.790 [INFO] [Thread-191555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] client lang: <none>
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] server lang: <none>
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] kex follows: False
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:42:12.793 [DEBUG] [Thread-191555] [transport.py] [_log()] Compression: none
2026-04-12T15:42:12.794 [DEBUG] [Thread-191555] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:42:12.812 [DEBUG] [Thread-191555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:42:12.812 [DEBUG] [Thread-191555] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:42:12.813 [DEBUG] [Thread-191555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:42:12.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:42:12.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:42:12.814 [DEBUG] [Thread-191555] [transport.py] [_log()] userauth is OK
2026-04-12T15:42:12.815 [DEBUG] [Thread-191555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:42:12.815 [DEBUG] [Thread-191555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:42:12.815 [DEBUG] [Thread-191555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:42:12.815 [DEBUG] [Thread-191555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:42:12.842 [INFO] [Thread-191555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:42:12.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:42:13.671 [DEBUG] [Thread-191555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:42:13.671 [DEBUG] [Thread-191555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:42:13.671 [DEBUG] [Thread-191555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:42:13.712 [DEBUG] [Thread-191555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:42:13.712 [DEBUG] [Thread-191555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:42:13.715 [DEBUG] [Thread-191555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:42:13.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:42:13.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:42:13.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:42:13.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:42:13.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:42:13.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:42:13.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:42:13.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:42:13.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:42:13.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.570245 -999.00  +15.10   6.88     64   +8.50 1 2 1 1 1   887    0 7.16 49.42 ----- 7.6 6.9 259.8 10.9 20.8 -15.6 20.2 -15.6 20.1 -14.5 21.0 -15.1
2026-04-12T15:42:13.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:42:13.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:42:13.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.570245
2026-04-12T15:42:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:42:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:42:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:42:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:42:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:42:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:41:57', tmtdew=7.76694, humidity=59.5952, cloud=0.0, wind=11.3818, temperature=15.2593, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:41:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:42:13.740 [DEBUG] [Thread-191555] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:42:13.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:42:13.840 [DEBUG] [Thread-191558] [transport.py] [_log()] starting thread (client mode): 0xae534850
2026-04-12T15:42:13.840 [DEBUG] [Thread-191558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:42:13.855 [DEBUG] [Thread-191558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:42:13.855 [INFO] [Thread-191558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:42:13.862 [DEBUG] [Thread-191558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:42:13.862 [DEBUG] [Thread-191558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:42:13.862 [DEBUG] [Thread-191558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:42:13.862 [DEBUG] [Thread-191558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:13.862 [DEBUG] [Thread-191558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:13.862 [DEBUG] [Thread-191558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] client lang: <none>
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] server lang: <none>
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] kex follows: False
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] Compression: none
2026-04-12T15:42:13.863 [DEBUG] [Thread-191558] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:42:13.920 [DEBUG] [Thread-191558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:42:13.920 [DEBUG] [Thread-191558] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:42:13.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:42:13.922 [DEBUG] [Thread-191558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:42:13.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:42:13.981 [DEBUG] [Thread-191558] [transport.py] [_log()] userauth is OK
2026-04-12T15:42:13.981 [DEBUG] [Thread-191558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:42:13.981 [DEBUG] [Thread-191558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:42:13.981 [DEBUG] [Thread-191558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:42:13.981 [DEBUG] [Thread-191558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:42:14.000 [INFO] [Thread-191558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:42:14.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:42:14.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:42:14.866 [DEBUG] [Thread-191558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:42:14.866 [DEBUG] [Thread-191558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:42:14.915 [DEBUG] [Thread-191558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:42:14.915 [DEBUG] [Thread-191558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:42:14.925 [DEBUG] [Thread-191558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:42:14.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:42: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')
2026-04-12T15:42:14.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:42:14.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:42:14.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:42:14.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:42:14.963 [DEBUG] [Thread-191558] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:42:22.786 [DEBUG] [Thread-191560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:42:37.836 [DEBUG] [Thread-191561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:42:42.731 [DEBUG] [Thread-191562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:42:43.025 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:42:43.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:42:44.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:42:44.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:42:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:42:46.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 42, 33), 7.87422, 59.455, 0.0, 11.0462, 15.9175, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:42:46.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:42:33
2026-04-12T15:42:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:42:46.690 [DEBUG] [Thread-191563] [transport.py] [_log()] starting thread (client mode): 0xae536860
2026-04-12T15:42:46.691 [DEBUG] [Thread-191563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:42:46.711 [DEBUG] [Thread-191563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:42:46.711 [INFO] [Thread-191563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:42:46.714 [DEBUG] [Thread-191563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:42:46.714 [DEBUG] [Thread-191563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:42:46.714 [DEBUG] [Thread-191563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:42:46.714 [DEBUG] [Thread-191563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:46.714 [DEBUG] [Thread-191563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:46.714 [DEBUG] [Thread-191563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:46.714 [DEBUG] [Thread-191563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] client lang: <none>
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] server lang: <none>
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] kex follows: False
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] Compression: none
2026-04-12T15:42:46.715 [DEBUG] [Thread-191563] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:42:46.732 [DEBUG] [Thread-191563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:42:46.733 [DEBUG] [Thread-191563] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:42:46.733 [DEBUG] [Thread-191563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:42:46.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:42:46.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:42:46.735 [DEBUG] [Thread-191563] [transport.py] [_log()] userauth is OK
2026-04-12T15:42:46.735 [DEBUG] [Thread-191563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:42:46.735 [DEBUG] [Thread-191563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:42:46.735 [DEBUG] [Thread-191563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:42:46.735 [DEBUG] [Thread-191563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:42:46.752 [INFO] [Thread-191563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:42:46.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:42:47.554 [DEBUG] [Thread-191563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:42:47.554 [DEBUG] [Thread-191563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:42:47.554 [DEBUG] [Thread-191563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:42:47.595 [DEBUG] [Thread-191563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:42:47.595 [DEBUG] [Thread-191563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:42:47.598 [DEBUG] [Thread-191563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:42:47.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:42:47.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:42:47.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:42:47.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:42:47.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:42:47.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:42:47.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:42:47.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:42:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:42:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.570939 -999.00  +15.10   5.54     65   +8.70 1 2 1 1 1   887    0 7.79 58.72 ----- 6.8 5.5 271.1 13.2 20.7 -16.3 20.2 -15.9 20.0 -16.9 21.1 -15.4
2026-04-12T15:42:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:42:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:42:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.570939
2026-04-12T15:42:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:42:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:42:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:42:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:42:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:42:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:42:33', tmtdew=7.87422, humidity=59.455, cloud=0.0, wind=11.0462, temperature=15.9175, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:42:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:42:47.621 [DEBUG] [Thread-191563] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:42:47.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:42:47.725 [DEBUG] [Thread-191566] [transport.py] [_log()] starting thread (client mode): 0xae52fd00
2026-04-12T15:42:47.725 [DEBUG] [Thread-191566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:42:47.740 [DEBUG] [Thread-191566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:42:47.740 [INFO] [Thread-191566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:42:47.747 [DEBUG] [Thread-191566] [transport.py] [_log()] client lang: <none>
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] server lang: <none>
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] kex follows: False
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] Compression: none
2026-04-12T15:42:47.748 [DEBUG] [Thread-191566] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:42:47.803 [DEBUG] [Thread-191566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:42:47.803 [DEBUG] [Thread-191566] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:42:47.803 [DEBUG] [Thread-191566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:42:47.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:42:47.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:42:47.859 [DEBUG] [Thread-191566] [transport.py] [_log()] userauth is OK
2026-04-12T15:42:47.860 [DEBUG] [Thread-191566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:42:47.860 [DEBUG] [Thread-191566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:42:47.860 [DEBUG] [Thread-191566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:42:47.860 [DEBUG] [Thread-191566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:42:47.880 [INFO] [Thread-191566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:42:47.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:42:47.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:42:48.733 [DEBUG] [Thread-191566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:42:48.733 [DEBUG] [Thread-191566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:42:48.780 [DEBUG] [Thread-191566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:42:48.780 [DEBUG] [Thread-191566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:42:48.789 [DEBUG] [Thread-191566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:42:48.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:42: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')
2026-04-12T15:42:48.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:42:48.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:42:48.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:42:48.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:42:48.822 [DEBUG] [Thread-191566] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:42:52.867 [DEBUG] [Thread-191568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:07.922 [DEBUG] [Thread-191569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:43:18.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:43:18.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
2026-04-12T15:43:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 43, 8), 7.68738, 60.1252, 0.0, 9.47592, 15.2256, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:43:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:43:08
2026-04-12T15:43:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:43:20.647 [DEBUG] [Thread-191570] [transport.py] [_log()] starting thread (client mode): 0xae5091b0
2026-04-12T15:43:20.647 [DEBUG] [Thread-191570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:43:20.668 [DEBUG] [Thread-191570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:43:20.668 [INFO] [Thread-191570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:43:20.672 [DEBUG] [Thread-191570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:43:20.672 [DEBUG] [Thread-191570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:43:20.672 [DEBUG] [Thread-191570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:43:20.672 [DEBUG] [Thread-191570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:20.672 [DEBUG] [Thread-191570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:20.672 [DEBUG] [Thread-191570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:20.672 [DEBUG] [Thread-191570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] client lang: <none>
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] server lang: <none>
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] kex follows: False
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:43:20.673 [DEBUG] [Thread-191570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:43:20.674 [DEBUG] [Thread-191570] [transport.py] [_log()] Compression: none
2026-04-12T15:43:20.674 [DEBUG] [Thread-191570] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:43:20.693 [DEBUG] [Thread-191570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:43:20.693 [DEBUG] [Thread-191570] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:43:20.694 [DEBUG] [Thread-191570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:43:20.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:43:20.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:43:20.696 [DEBUG] [Thread-191570] [transport.py] [_log()] userauth is OK
2026-04-12T15:43:20.697 [DEBUG] [Thread-191570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:43:20.697 [DEBUG] [Thread-191570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:43:20.697 [DEBUG] [Thread-191570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:43:20.697 [DEBUG] [Thread-191570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:43:20.721 [INFO] [Thread-191570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:43:20.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:43:21.422 [DEBUG] [Thread-191570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:43:21.422 [DEBUG] [Thread-191570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:43:21.423 [DEBUG] [Thread-191570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:43:21.463 [DEBUG] [Thread-191570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:43:21.463 [DEBUG] [Thread-191570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:43:21.466 [DEBUG] [Thread-191570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:43:21.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:43:21.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:43:21.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:43:21.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:43:21.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:43:21.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:43:21.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:43:21.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:43:21.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:43:21.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.571286 -999.00  +15.10   8.16     66   +8.80 1 2 1 1 1   887    0 7.59 53.98 ----- 8.1 8.2 279.6 9.7 20.9 -16.2 20.3 -16.1 20.2 -14.7 21.2 -14.6
2026-04-12T15:43:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:43:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:43:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.571286
2026-04-12T15:43:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:43:21.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:43:21.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:43:21.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:43:21.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:43:21.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:43:08', tmtdew=7.68738, humidity=60.1252, cloud=0.0, wind=9.47592, temperature=15.2256, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:42:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:43:21.493 [DEBUG] [Thread-191570] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:43:21.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:43:21.589 [DEBUG] [Thread-191573] [transport.py] [_log()] starting thread (client mode): 0xb0fce200
2026-04-12T15:43:21.589 [DEBUG] [Thread-191573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:43:21.604 [DEBUG] [Thread-191573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:43:21.604 [INFO] [Thread-191573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:43:21.611 [DEBUG] [Thread-191573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] client lang: <none>
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] server lang: <none>
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] kex follows: False
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:43:21.612 [DEBUG] [Thread-191573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:43:21.613 [DEBUG] [Thread-191573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:43:21.613 [DEBUG] [Thread-191573] [transport.py] [_log()] Compression: none
2026-04-12T15:43:21.613 [DEBUG] [Thread-191573] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:43:21.670 [DEBUG] [Thread-191573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:43:21.671 [DEBUG] [Thread-191573] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:43:21.672 [DEBUG] [Thread-191573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:43:21.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:43:21.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:43:21.726 [DEBUG] [Thread-191573] [transport.py] [_log()] userauth is OK
2026-04-12T15:43:21.727 [DEBUG] [Thread-191573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:43:21.727 [DEBUG] [Thread-191573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:43:21.727 [DEBUG] [Thread-191573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:43:21.727 [DEBUG] [Thread-191573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:43:21.746 [INFO] [Thread-191573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:43:21.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:43:21.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:43:22.577 [DEBUG] [Thread-191573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:43:22.578 [DEBUG] [Thread-191573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:43:22.626 [DEBUG] [Thread-191573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:43:22.626 [DEBUG] [Thread-191573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:43:22.638 [DEBUG] [Thread-191573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:43:22.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:43:22.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:43:22.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:43:22.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:43:22.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:43:22.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:43:22.679 [DEBUG] [Thread-191573] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:43:22.960 [DEBUG] [Thread-191575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:38.015 [DEBUG] [Thread-191576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:42.808 [DEBUG] [Thread-191577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:43.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:43.168 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:43:52.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:43:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:43:53.057 [DEBUG] [Thread-191578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:43:53.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 43, 44), 7.12796, 62.5703, 0.0, 14.1156, 16.0501, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:43:53.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:43:44
2026-04-12T15:43:54.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:43:54.497 [DEBUG] [Thread-191579] [transport.py] [_log()] starting thread (client mode): 0xae509a20
2026-04-12T15:43:54.497 [DEBUG] [Thread-191579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:43:54.517 [DEBUG] [Thread-191579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:43:54.517 [INFO] [Thread-191579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:43:54.520 [DEBUG] [Thread-191579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:43:54.520 [DEBUG] [Thread-191579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:43:54.520 [DEBUG] [Thread-191579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] client lang: <none>
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] server lang: <none>
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] kex follows: False
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] Compression: none
2026-04-12T15:43:54.521 [DEBUG] [Thread-191579] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:43:54.538 [DEBUG] [Thread-191579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:43:54.539 [DEBUG] [Thread-191579] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:43:54.539 [DEBUG] [Thread-191579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:43:54.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:43:54.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:43:54.541 [DEBUG] [Thread-191579] [transport.py] [_log()] userauth is OK
2026-04-12T15:43:54.541 [DEBUG] [Thread-191579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:43:54.541 [DEBUG] [Thread-191579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:43:54.542 [DEBUG] [Thread-191579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:43:54.542 [DEBUG] [Thread-191579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:43:54.559 [INFO] [Thread-191579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:43:54.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:43:55.166 [DEBUG] [Thread-191579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:43:55.166 [DEBUG] [Thread-191579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:43:55.166 [DEBUG] [Thread-191579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:43:55.207 [DEBUG] [Thread-191579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:43:55.207 [DEBUG] [Thread-191579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:43:55.210 [DEBUG] [Thread-191579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:43:55.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:43:55.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:43:55.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:43:55.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:43:55.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:43:55.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:43:55.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:43:55.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:43:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:43:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.571981 -999.00  +15.30   5.58     66   +9.00 1 2 1 1 1   887    0 7.61 50.62 ----- 5.9 5.6 277.2 8.1 21.1 -16.3 20.4 -16.5 20.5 -15.0 21.5 -15.8
2026-04-12T15:43:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:43:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:43:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.571981
2026-04-12T15:43:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:43:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:43:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:43:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:43:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:43:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:43:44', tmtdew=7.12796, humidity=62.5703, cloud=0.0, wind=14.1156, temperature=16.0501, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:43:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:43:55.235 [DEBUG] [Thread-191579] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:43:55.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:43:55.328 [DEBUG] [Thread-191582] [transport.py] [_log()] starting thread (client mode): 0xae5b44c0
2026-04-12T15:43:55.328 [DEBUG] [Thread-191582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:43:55.343 [DEBUG] [Thread-191582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:43:55.344 [INFO] [Thread-191582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:43:55.351 [DEBUG] [Thread-191582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:43:55.351 [DEBUG] [Thread-191582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] client lang: <none>
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] server lang: <none>
2026-04-12T15:43:55.352 [DEBUG] [Thread-191582] [transport.py] [_log()] kex follows: False
2026-04-12T15:43:55.353 [DEBUG] [Thread-191582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:43:55.353 [DEBUG] [Thread-191582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:43:55.353 [DEBUG] [Thread-191582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:43:55.353 [DEBUG] [Thread-191582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:43:55.353 [DEBUG] [Thread-191582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:43:55.353 [DEBUG] [Thread-191582] [transport.py] [_log()] Compression: none
2026-04-12T15:43:55.353 [DEBUG] [Thread-191582] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:43:55.411 [DEBUG] [Thread-191582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:43:55.412 [DEBUG] [Thread-191582] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:43:55.412 [DEBUG] [Thread-191582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:43:55.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:43:55.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:43:55.467 [DEBUG] [Thread-191582] [transport.py] [_log()] userauth is OK
2026-04-12T15:43:55.467 [DEBUG] [Thread-191582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:43:55.467 [DEBUG] [Thread-191582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:43:55.467 [DEBUG] [Thread-191582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:43:55.467 [DEBUG] [Thread-191582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:43:55.487 [INFO] [Thread-191582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:43:55.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:43:55.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:43:56.325 [DEBUG] [Thread-191582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:43:56.325 [DEBUG] [Thread-191582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:43:56.373 [DEBUG] [Thread-191582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:43:56.373 [DEBUG] [Thread-191582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:43:56.383 [DEBUG] [Thread-191582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:43:56.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:43:56.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:43:56.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:43:56.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:43:56.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:43:56.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:43:56.420 [DEBUG] [Thread-191582] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:44:08.095 [DEBUG] [Thread-191584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:44:23.148 [DEBUG] [Thread-191585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:44:26.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:44:26.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:44:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:44:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 44, 19), 7.3712, 61.5366, 0.0, 10.0404, 15.342, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:44:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:44:19
2026-04-12T15:44:28.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:44:28.250 [DEBUG] [Thread-191586] [transport.py] [_log()] starting thread (client mode): 0xae5b4bb0
2026-04-12T15:44:28.250 [DEBUG] [Thread-191586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:44:28.271 [DEBUG] [Thread-191586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:44:28.271 [INFO] [Thread-191586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] client lang: <none>
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] server lang: <none>
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] kex follows: False
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] Compression: none
2026-04-12T15:44:28.273 [DEBUG] [Thread-191586] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:44:28.282 [DEBUG] [Thread-191586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:44:28.282 [DEBUG] [Thread-191586] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:44:28.283 [DEBUG] [Thread-191586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:44:28.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:44:28.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:44:28.284 [DEBUG] [Thread-191586] [transport.py] [_log()] userauth is OK
2026-04-12T15:44:28.284 [DEBUG] [Thread-191586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:44:28.284 [DEBUG] [Thread-191586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:44:28.285 [DEBUG] [Thread-191586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:44:28.285 [DEBUG] [Thread-191586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:44:28.302 [INFO] [Thread-191586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:44:28.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:44:28.902 [DEBUG] [Thread-191586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:44:28.902 [DEBUG] [Thread-191586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:44:28.903 [DEBUG] [Thread-191586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:44:28.943 [DEBUG] [Thread-191586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:44:28.943 [DEBUG] [Thread-191586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:44:28.945 [DEBUG] [Thread-191586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:44:28.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:44:28.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:44:28.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:44:28.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:44:28.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:44:28.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:44:28.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:44:28.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:44:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:44:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.572328 -999.00  +15.30   8.16     65   +8.90 1 2 1 1 1   887    0 7.66 53.36 ----- 8.3 8.2 280.0 9.4 21.1 -16.8 20.4 -17.8 20.4 -18.2 21.5 -15.9
2026-04-12T15:44:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:44:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:44:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.572328
2026-04-12T15:44:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:44:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:44:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:44:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:44:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:44:28.966 [DEBUG] [Thread-191586] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:44:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:44:19', tmtdew=7.3712, humidity=61.5366, cloud=0.0, wind=10.0404, temperature=15.342, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:44:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:44:29.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:44:29.063 [DEBUG] [Thread-191589] [transport.py] [_log()] starting thread (client mode): 0xae5b5ab0
2026-04-12T15:44:29.063 [DEBUG] [Thread-191589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:44:29.078 [DEBUG] [Thread-191589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:44:29.079 [INFO] [Thread-191589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:44:29.086 [DEBUG] [Thread-191589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:44:29.086 [DEBUG] [Thread-191589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:44:29.086 [DEBUG] [Thread-191589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] client lang: <none>
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] server lang: <none>
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] kex follows: False
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] Compression: none
2026-04-12T15:44:29.087 [DEBUG] [Thread-191589] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:44:29.146 [DEBUG] [Thread-191589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:44:29.147 [DEBUG] [Thread-191589] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:44:29.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:44:29.148 [DEBUG] [Thread-191589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:44:29.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:44:29.203 [DEBUG] [Thread-191589] [transport.py] [_log()] userauth is OK
2026-04-12T15:44:29.203 [DEBUG] [Thread-191589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:44:29.204 [DEBUG] [Thread-191589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:44:29.204 [DEBUG] [Thread-191589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:44:29.204 [DEBUG] [Thread-191589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:44:29.222 [INFO] [Thread-191589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:44:29.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:44:29.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:44:30.031 [DEBUG] [Thread-191589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:44:30.031 [DEBUG] [Thread-191589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:44:30.079 [DEBUG] [Thread-191589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:44:30.079 [DEBUG] [Thread-191589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:44:30.088 [DEBUG] [Thread-191589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:44:30.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:44:30.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:44:30.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:44:30.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:44:30.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:44:30.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:44:30.123 [DEBUG] [Thread-191589] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:44:38.184 [DEBUG] [Thread-191591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:44:42.856 [DEBUG] [Thread-191592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:44:43.308 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:44:43.309 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:44:53.237 [DEBUG] [Thread-191593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:45:00.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:45:00.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:45:00.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:45:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 44, 19), 7.3712, 61.5366, 0.0, 10.0404, 15.342, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:45:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:44:19
2026-04-12T15:45:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:45:02.067 [DEBUG] [Thread-191594] [transport.py] [_log()] starting thread (client mode): 0xb0fcd0f0
2026-04-12T15:45:02.067 [DEBUG] [Thread-191594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:45:02.078 [DEBUG] [Thread-191594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:45:02.078 [INFO] [Thread-191594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] client lang: <none>
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] server lang: <none>
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] kex follows: False
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] Compression: none
2026-04-12T15:45:02.081 [DEBUG] [Thread-191594] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:45:02.096 [DEBUG] [Thread-191594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:45:02.096 [DEBUG] [Thread-191594] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:45:02.096 [DEBUG] [Thread-191594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:45:02.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:45:02.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:45:02.098 [DEBUG] [Thread-191594] [transport.py] [_log()] userauth is OK
2026-04-12T15:45:02.098 [DEBUG] [Thread-191594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:45:02.098 [DEBUG] [Thread-191594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:45:02.098 [DEBUG] [Thread-191594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:45:02.098 [DEBUG] [Thread-191594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:45:02.120 [INFO] [Thread-191594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:45:02.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:45:02.917 [DEBUG] [Thread-191594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:45:02.917 [DEBUG] [Thread-191594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:45:02.918 [DEBUG] [Thread-191594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:45:02.958 [DEBUG] [Thread-191594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:45:02.958 [DEBUG] [Thread-191594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:45:02.962 [DEBUG] [Thread-191594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:45:02.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:45:02.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:45:02.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:45:02.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:45:03.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:45:03.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:45:03.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:45:03.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:45:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:45:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.572675 -999.00  +15.30   9.96     66   +9.00 1 2 1 1 1   887    0 7.52 48.08 ----- 10.6 10.0 315.8 10.6 21.2 -16.7 20.4 -17.7 20.6 -15.9 21.6 -16.1
2026-04-12T15:45:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:45:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:45:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.572675
2026-04-12T15:45:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:45:03.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:45:03.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:45:03.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:45:03.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:45:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:44:19', tmtdew=7.3712, humidity=61.5366, cloud=0.0, wind=10.0404, temperature=15.342, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:44:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:45:03.006 [DEBUG] [Thread-191594] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:45:03.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:45:03.101 [DEBUG] [Thread-191597] [transport.py] [_log()] starting thread (client mode): 0xb0f6dc60
2026-04-12T15:45:03.101 [DEBUG] [Thread-191597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:45:03.116 [DEBUG] [Thread-191597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:45:03.116 [INFO] [Thread-191597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:45:03.124 [DEBUG] [Thread-191597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:45:03.124 [DEBUG] [Thread-191597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:45:03.124 [DEBUG] [Thread-191597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:45:03.124 [DEBUG] [Thread-191597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] client lang: <none>
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] server lang: <none>
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] kex follows: False
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] Compression: none
2026-04-12T15:45:03.125 [DEBUG] [Thread-191597] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:45:03.188 [DEBUG] [Thread-191597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:45:03.189 [DEBUG] [Thread-191597] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:45:03.189 [DEBUG] [Thread-191597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:45:03.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:45:03.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:45:03.247 [DEBUG] [Thread-191597] [transport.py] [_log()] userauth is OK
2026-04-12T15:45:03.247 [DEBUG] [Thread-191597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:45:03.248 [DEBUG] [Thread-191597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:45:03.248 [DEBUG] [Thread-191597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:45:03.248 [DEBUG] [Thread-191597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:45:03.266 [INFO] [Thread-191597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:45:03.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:45:03.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:45:04.115 [DEBUG] [Thread-191597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:45:04.115 [DEBUG] [Thread-191597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:45:04.163 [DEBUG] [Thread-191597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:45:04.164 [DEBUG] [Thread-191597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:45:04.173 [DEBUG] [Thread-191597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:45:04.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:45:04.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:45:04.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:45:04.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:45:04.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:45:04.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:45:04.211 [DEBUG] [Thread-191597] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:45:08.267 [DEBUG] [Thread-191599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:45:23.328 [DEBUG] [Thread-191600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:45:34.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:45:34.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:45:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:45:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 44, 54), 7.31795, 61.7415, 0.0, 10.7993, 15.9172, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:45:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:44:54
2026-04-12T15:45:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:45:36.095 [DEBUG] [Thread-191601] [transport.py] [_log()] starting thread (client mode): 0xb0f6d1b0
2026-04-12T15:45:36.095 [DEBUG] [Thread-191601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:45:36.115 [DEBUG] [Thread-191601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:45:36.116 [INFO] [Thread-191601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:45:36.119 [DEBUG] [Thread-191601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:45:36.119 [DEBUG] [Thread-191601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:45:36.119 [DEBUG] [Thread-191601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:45:36.119 [DEBUG] [Thread-191601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:36.119 [DEBUG] [Thread-191601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:36.119 [DEBUG] [Thread-191601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:36.119 [DEBUG] [Thread-191601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] client lang: <none>
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] server lang: <none>
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] kex follows: False
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] Compression: none
2026-04-12T15:45:36.120 [DEBUG] [Thread-191601] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:45:36.140 [DEBUG] [Thread-191601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:45:36.140 [DEBUG] [Thread-191601] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:45:36.141 [DEBUG] [Thread-191601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:45:36.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:45:36.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:45:36.185 [DEBUG] [Thread-191601] [transport.py] [_log()] userauth is OK
2026-04-12T15:45:36.185 [DEBUG] [Thread-191601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:45:36.185 [DEBUG] [Thread-191601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:45:36.185 [DEBUG] [Thread-191601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:45:36.185 [DEBUG] [Thread-191601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:45:36.207 [INFO] [Thread-191601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:45:36.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:45:38.112 [DEBUG] [Thread-191601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:45:38.112 [DEBUG] [Thread-191601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:45:38.113 [DEBUG] [Thread-191601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:45:38.154 [DEBUG] [Thread-191601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:45:38.154 [DEBUG] [Thread-191601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:45:38.157 [DEBUG] [Thread-191601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:45:38.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:45:38.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:45:38.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:45:38.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:45:38.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:45:38.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:45:38.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:45:38.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:45:38.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:45:38.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.572675 -999.00  +15.30   9.96     66   +9.00 1 2 1 1 1   887    0 7.52 48.08 ----- 10.6 10.0 315.8 10.6 21.2 -16.7 20.4 -17.7 20.6 -15.9 21.6 -16.1
2026-04-12T15:45:38.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:45:38.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:45:38.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.572675
2026-04-12T15:45:38.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:45:38.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:45:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:45:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:45:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:45:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:44:54', tmtdew=7.31795, humidity=61.7415, cloud=0.0, wind=10.7993, temperature=15.9172, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:44:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:45:38.261 [DEBUG] [Thread-191601] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:45:38.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:45:38.343 [DEBUG] [Thread-191604] [transport.py] [_log()] starting thread (client mode): 0xb0f41930
2026-04-12T15:45:38.343 [DEBUG] [Thread-191604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:45:38.359 [DEBUG] [Thread-191604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:45:38.359 [INFO] [Thread-191604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:45:38.364 [DEBUG] [Thread-191606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:45:38.366 [DEBUG] [Thread-191604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:45:38.367 [DEBUG] [Thread-191604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:45:38.367 [DEBUG] [Thread-191604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:45:38.367 [DEBUG] [Thread-191604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:38.367 [DEBUG] [Thread-191604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:45:38.367 [DEBUG] [Thread-191604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:38.367 [DEBUG] [Thread-191604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:45:38.367 [DEBUG] [Thread-191604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] client lang: <none>
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] server lang: <none>
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] kex follows: False
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] Compression: none
2026-04-12T15:45:38.368 [DEBUG] [Thread-191604] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:45:38.423 [DEBUG] [Thread-191604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:45:38.424 [DEBUG] [Thread-191604] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:45:38.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:45:38.425 [DEBUG] [Thread-191604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:45:38.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:45:38.480 [DEBUG] [Thread-191604] [transport.py] [_log()] userauth is OK
2026-04-12T15:45:38.480 [DEBUG] [Thread-191604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:45:38.480 [DEBUG] [Thread-191604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:45:38.480 [DEBUG] [Thread-191604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:45:38.480 [DEBUG] [Thread-191604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:45:38.499 [INFO] [Thread-191604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:45:38.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:45:38.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:45:39.379 [DEBUG] [Thread-191604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:45:39.379 [DEBUG] [Thread-191604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:45:39.427 [DEBUG] [Thread-191604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:45:39.428 [DEBUG] [Thread-191604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:45:39.437 [DEBUG] [Thread-191604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:45:39.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:45:39.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:45:39.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:45:39.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:45:39.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:45:39.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:45:39.478 [DEBUG] [Thread-191604] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:45:42.910 [DEBUG] [Thread-191607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:45:43.449 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:45:43.451 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:45:53.425 [DEBUG] [Thread-191608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:46:08.462 [DEBUG] [Thread-191609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:46:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:46:09.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:46:09.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:46:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 45, 30), 7.41057, 61.4565, 0.0, 8.34696, 15.4917, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:46:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:45:30
2026-04-12T15:46:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:46:11.517 [DEBUG] [Thread-191610] [transport.py] [_log()] starting thread (client mode): 0xb0f6fd00
2026-04-12T15:46:11.517 [DEBUG] [Thread-191610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:46:11.537 [DEBUG] [Thread-191610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:46:11.537 [INFO] [Thread-191610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:46:11.540 [DEBUG] [Thread-191610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:46:11.540 [DEBUG] [Thread-191610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:46:11.540 [DEBUG] [Thread-191610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:46:11.540 [DEBUG] [Thread-191610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:46:11.540 [DEBUG] [Thread-191610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] client lang: <none>
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] server lang: <none>
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] kex follows: False
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] Compression: none
2026-04-12T15:46:11.541 [DEBUG] [Thread-191610] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:46:11.562 [DEBUG] [Thread-191610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:46:11.563 [DEBUG] [Thread-191610] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:46:11.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:46:11.564 [DEBUG] [Thread-191610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:46:11.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:46:11.566 [DEBUG] [Thread-191610] [transport.py] [_log()] userauth is OK
2026-04-12T15:46:11.566 [DEBUG] [Thread-191610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:46:11.566 [DEBUG] [Thread-191610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:46:11.566 [DEBUG] [Thread-191610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:46:11.566 [DEBUG] [Thread-191610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:46:11.588 [INFO] [Thread-191610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:46:11.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:46:12.366 [DEBUG] [Thread-191610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:46:12.366 [DEBUG] [Thread-191610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:46:12.367 [DEBUG] [Thread-191610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:46:12.407 [DEBUG] [Thread-191610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:46:12.407 [DEBUG] [Thread-191610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:46:12.410 [DEBUG] [Thread-191610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:46:12.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:46:12.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:46:12.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:46:12.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:46:12.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:46:12.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:46:12.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:46:12.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:46:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:46:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.573369 -999.00  +15.10   7.13     66   +8.90 1 2 1 1 1   887    0 7.25 43.16 ----- 6.5 7.1 306.0 10.4 21.3 -17.5 20.5 -18.2 20.7 -16.9 21.8 -16.3
2026-04-12T15:46:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:46:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:46:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.573369
2026-04-12T15:46:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:46:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:46:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:46:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:46:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:46:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:45:30', tmtdew=7.41057, humidity=61.4565, cloud=0.0, wind=8.34696, temperature=15.4917, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:45:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:46:12.432 [DEBUG] [Thread-191610] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:46:12.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:46:12.528 [DEBUG] [Thread-191613] [transport.py] [_log()] starting thread (client mode): 0xae50b790
2026-04-12T15:46:12.528 [DEBUG] [Thread-191613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:46:12.543 [DEBUG] [Thread-191613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:46:12.543 [INFO] [Thread-191613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] client lang: <none>
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] server lang: <none>
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] kex follows: False
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:46:12.551 [DEBUG] [Thread-191613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:46:12.552 [DEBUG] [Thread-191613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:46:12.552 [DEBUG] [Thread-191613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:46:12.552 [DEBUG] [Thread-191613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:46:12.552 [DEBUG] [Thread-191613] [transport.py] [_log()] Compression: none
2026-04-12T15:46:12.552 [DEBUG] [Thread-191613] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:46:12.610 [DEBUG] [Thread-191613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:46:12.611 [DEBUG] [Thread-191613] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:46:12.611 [DEBUG] [Thread-191613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:46:12.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:46:12.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:46:12.668 [DEBUG] [Thread-191613] [transport.py] [_log()] userauth is OK
2026-04-12T15:46:12.668 [DEBUG] [Thread-191613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:46:12.668 [DEBUG] [Thread-191613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:46:12.668 [DEBUG] [Thread-191613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:46:12.668 [DEBUG] [Thread-191613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:46:12.687 [INFO] [Thread-191613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:46:12.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:46:12.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:46:13.501 [DEBUG] [Thread-191613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:46:13.502 [DEBUG] [Thread-191613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:46:13.550 [DEBUG] [Thread-191613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:46:13.550 [DEBUG] [Thread-191613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:46:13.559 [DEBUG] [Thread-191613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:46:13.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:46:13.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:46:13.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:46:13.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:46:13.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:46:13.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:46:13.596 [DEBUG] [Thread-191613] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:46:23.501 [DEBUG] [Thread-191615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:46:38.551 [DEBUG] [Thread-191616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:46:42.964 [DEBUG] [Thread-191617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:46:43.593 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:46:43.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:46:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:46:43.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:46:43.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:46:44.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 46, 5), 7.38587, 61.5392, 0.0, 7.76484, 15.4087, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:46:44.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:46:05
2026-04-12T15:46:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:46:45.474 [DEBUG] [Thread-191618] [transport.py] [_log()] starting thread (client mode): 0xb0fe9900
2026-04-12T15:46:45.474 [DEBUG] [Thread-191618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:46:45.495 [DEBUG] [Thread-191618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:46:45.495 [INFO] [Thread-191618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] client lang: <none>
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] server lang: <none>
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] kex follows: False
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:46:45.498 [DEBUG] [Thread-191618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:46:45.499 [DEBUG] [Thread-191618] [transport.py] [_log()] Compression: none
2026-04-12T15:46:45.499 [DEBUG] [Thread-191618] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:46:45.515 [DEBUG] [Thread-191618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:46:45.516 [DEBUG] [Thread-191618] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:46:45.516 [DEBUG] [Thread-191618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:46:45.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:46:45.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:46:45.518 [DEBUG] [Thread-191618] [transport.py] [_log()] userauth is OK
2026-04-12T15:46:45.519 [DEBUG] [Thread-191618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:46:45.519 [DEBUG] [Thread-191618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:46:45.519 [DEBUG] [Thread-191618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:46:45.519 [DEBUG] [Thread-191618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:46:45.543 [INFO] [Thread-191618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:46:45.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:46:46.342 [DEBUG] [Thread-191618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:46:46.343 [DEBUG] [Thread-191618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:46:46.343 [DEBUG] [Thread-191618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:46:46.383 [DEBUG] [Thread-191618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:46:46.383 [DEBUG] [Thread-191618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:46:46.386 [DEBUG] [Thread-191618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:46:46.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:46:46.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:46:46.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:46:46.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:46:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:46:46.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:46:46.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:46:46.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:46:46.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:46:46.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.573717 -999.00  +15.20   5.78     67   +9.10 1 2 1 1 1   887    0 7.29 40.21 ----- 6.5 5.8 304.8 6.5 21.4 -16.9 20.7 -18.0 20.9 -15.7 22.1 -15.2
2026-04-12T15:46:46.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:46:46.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:46:46.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.573717
2026-04-12T15:46:46.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:46:46.417 [DEBUG] [Thread-191618] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:46:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:46:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:46:46.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:46:46.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:46:46.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:46:05', tmtdew=7.38587, humidity=61.5392, cloud=0.0, wind=7.76484, temperature=15.4087, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:46:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:46:46.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:46:53.590 [DEBUG] [Thread-191621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:47:08.639 [DEBUG] [Thread-191622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:47:23.676 [DEBUG] [Thread-191623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:47:38.712 [DEBUG] [Thread-191624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:47:43.014 [DEBUG] [Thread-191625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:47:43.735 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:47:43.736 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:47:53.749 [DEBUG] [Thread-191626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:48:08.785 [DEBUG] [Thread-191627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:48:23.823 [DEBUG] [Thread-191628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:48:38.860 [DEBUG] [Thread-191629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:48:43.068 [DEBUG] [Thread-191630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:48:43.875 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:48:43.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:48:53.898 [DEBUG] [Thread-191631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:49:00.415 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T15:49:08.933 [DEBUG] [Thread-191632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:49:23.968 [DEBUG] [Thread-191633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:49:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:49:30.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:49:30.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:49:31.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 49, 2), 7.63335, 60.3898, 0.0, 10.4292, 15.9073, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:49:31.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:49:02
2026-04-12T15:49:32.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:49:32.321 [DEBUG] [Thread-191634] [transport.py] [_log()] starting thread (client mode): 0xb0f6fcd0
2026-04-12T15:49:32.321 [DEBUG] [Thread-191634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:49:32.343 [DEBUG] [Thread-191634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:49:32.343 [INFO] [Thread-191634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:49:32.346 [DEBUG] [Thread-191634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] client lang: <none>
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] server lang: <none>
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] kex follows: False
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] Compression: none
2026-04-12T15:49:32.347 [DEBUG] [Thread-191634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:49:32.364 [DEBUG] [Thread-191634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:49:32.365 [DEBUG] [Thread-191634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:49:32.366 [DEBUG] [Thread-191634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:49:32.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:49:32.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:49:32.368 [DEBUG] [Thread-191634] [transport.py] [_log()] userauth is OK
2026-04-12T15:49:32.368 [DEBUG] [Thread-191634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:49:32.368 [DEBUG] [Thread-191634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:49:32.368 [DEBUG] [Thread-191634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:49:32.368 [DEBUG] [Thread-191634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:49:32.391 [INFO] [Thread-191634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:49:32.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:49:33.161 [DEBUG] [Thread-191634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:49:33.161 [DEBUG] [Thread-191634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:49:33.161 [DEBUG] [Thread-191634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:49:33.202 [DEBUG] [Thread-191634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:49:33.202 [DEBUG] [Thread-191634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:49:33.204 [DEBUG] [Thread-191634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:49:33.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:49:33.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:49:33.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:49:33.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:49:33.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:49:33.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:49:33.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:49:33.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:49:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:49:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.575453 -999.00  +15.50   9.42     65   +9.20 1 2 1 1 1   887    0 7.13 38.43 ----- 9.7 9.4 276.2 12.7 22.1 -19.6 21.1 -20.2 21.8 -18.0 23.0 -19.4
2026-04-12T15:49:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:49:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:49:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.575453
2026-04-12T15:49:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:49:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:49:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:49:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:49:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:49:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:49:02', tmtdew=7.63335, humidity=60.3898, cloud=0.0, wind=10.4292, temperature=15.9073, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:48:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:49:33.230 [DEBUG] [Thread-191634] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:49:33.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:49:33.328 [DEBUG] [Thread-191637] [transport.py] [_log()] starting thread (client mode): 0xb0f6fd00
2026-04-12T15:49:33.328 [DEBUG] [Thread-191637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:49:33.342 [DEBUG] [Thread-191637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:49:33.343 [INFO] [Thread-191637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:49:33.350 [DEBUG] [Thread-191637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:49:33.350 [DEBUG] [Thread-191637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:49:33.350 [DEBUG] [Thread-191637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:49:33.350 [DEBUG] [Thread-191637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:49:33.350 [DEBUG] [Thread-191637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:49:33.350 [DEBUG] [Thread-191637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] client lang: <none>
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] server lang: <none>
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] kex follows: False
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] Compression: none
2026-04-12T15:49:33.351 [DEBUG] [Thread-191637] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:49:33.408 [DEBUG] [Thread-191637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:49:33.409 [DEBUG] [Thread-191637] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:49:33.409 [DEBUG] [Thread-191637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:49:33.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:49:33.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:49:33.465 [DEBUG] [Thread-191637] [transport.py] [_log()] userauth is OK
2026-04-12T15:49:33.465 [DEBUG] [Thread-191637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:49:33.465 [DEBUG] [Thread-191637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:49:33.465 [DEBUG] [Thread-191637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:49:33.465 [DEBUG] [Thread-191637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:49:33.484 [INFO] [Thread-191637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:49:33.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:49:33.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:49:34.305 [DEBUG] [Thread-191637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:49:34.305 [DEBUG] [Thread-191637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:49:34.353 [DEBUG] [Thread-191637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:49:34.353 [DEBUG] [Thread-191637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:49:34.361 [DEBUG] [Thread-191637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:49:34.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:49:34.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:49:34.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:49:34.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:49:34.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:49:34.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:49:34.396 [DEBUG] [Thread-191637] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:49:39.007 [DEBUG] [Thread-191639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:49:43.118 [DEBUG] [Thread-191640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:49:44.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:49:44.020 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:49:54.063 [DEBUG] [Thread-191641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:50:04.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:50:04.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:50:04.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:50:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 49, 38), 7.4981, 61.0777, 0.0, 8.8236, 16.2807, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:50:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:49:38
2026-04-12T15:50:06.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:50:06.231 [DEBUG] [Thread-191642] [transport.py] [_log()] starting thread (client mode): 0xb0f43ca0
2026-04-12T15:50:06.231 [DEBUG] [Thread-191642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:50:06.257 [DEBUG] [Thread-191642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:50:06.257 [INFO] [Thread-191642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] client lang: <none>
2026-04-12T15:50:06.261 [DEBUG] [Thread-191642] [transport.py] [_log()] server lang: <none>
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] kex follows: False
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] Compression: none
2026-04-12T15:50:06.262 [DEBUG] [Thread-191642] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:50:06.280 [DEBUG] [Thread-191642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:50:06.281 [DEBUG] [Thread-191642] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:50:06.281 [DEBUG] [Thread-191642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:50:06.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:50:06.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:50:06.283 [DEBUG] [Thread-191642] [transport.py] [_log()] userauth is OK
2026-04-12T15:50:06.283 [DEBUG] [Thread-191642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:50:06.284 [DEBUG] [Thread-191642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:50:06.284 [DEBUG] [Thread-191642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:50:06.284 [DEBUG] [Thread-191642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:50:06.308 [INFO] [Thread-191642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:50:06.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:50:09.099 [DEBUG] [Thread-191644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:50:16.398 [DEBUG] [Thread-191642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:50:16.399 [DEBUG] [Thread-191642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:50:16.399 [DEBUG] [Thread-191642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:50:16.439 [DEBUG] [Thread-191642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:50:16.439 [DEBUG] [Thread-191642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:50:16.443 [DEBUG] [Thread-191642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:50:16.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:50:16.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:50:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:50:16.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:50:16.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:50:16.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:50:16.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:50:16.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:50:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:50:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.575800 -999.00  +15.50   8.61     65   +9.10 1 2 1 1 1   887    0 7.06 35.99 ----- 7.8 8.6 264.4 10.7 22.1 -20.0 21.1 -20.3 21.7 -22.6 23.0 -19.9
2026-04-12T15:50:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:50:16.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:50:16.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.575800
2026-04-12T15:50:16.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:50:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:50:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:50:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:50:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:50:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:49:38', tmtdew=7.4981, humidity=61.0777, cloud=0.0, wind=8.8236, temperature=16.2807, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:49:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:50:16.480 [DEBUG] [Thread-191642] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:50:16.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:50:16.574 [DEBUG] [Thread-191646] [transport.py] [_log()] starting thread (client mode): 0xb0f40580
2026-04-12T15:50:16.574 [DEBUG] [Thread-191646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:50:16.588 [DEBUG] [Thread-191646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:50:16.588 [INFO] [Thread-191646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:50:16.596 [DEBUG] [Thread-191646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:50:16.596 [DEBUG] [Thread-191646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:50:16.596 [DEBUG] [Thread-191646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:50:16.596 [DEBUG] [Thread-191646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] client lang: <none>
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] server lang: <none>
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] kex follows: False
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] Compression: none
2026-04-12T15:50:16.597 [DEBUG] [Thread-191646] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:50:16.654 [DEBUG] [Thread-191646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:50:16.654 [DEBUG] [Thread-191646] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:50:16.655 [DEBUG] [Thread-191646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:50:16.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:50:16.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:50:16.710 [DEBUG] [Thread-191646] [transport.py] [_log()] userauth is OK
2026-04-12T15:50:16.711 [DEBUG] [Thread-191646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:50:16.711 [DEBUG] [Thread-191646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:50:16.711 [DEBUG] [Thread-191646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:50:16.711 [DEBUG] [Thread-191646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:50:16.730 [INFO] [Thread-191646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:50:16.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:50:16.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:50:17.594 [DEBUG] [Thread-191646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:50:17.594 [DEBUG] [Thread-191646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:50:17.643 [DEBUG] [Thread-191646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:50:17.643 [DEBUG] [Thread-191646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:50:17.652 [DEBUG] [Thread-191646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:50:17.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:50:17.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:50:17.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:50:17.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:50:17.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:50:17.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:50:17.688 [DEBUG] [Thread-191646] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:50:24.137 [DEBUG] [Thread-191648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:50:39.190 [DEBUG] [Thread-191649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:50:43.180 [DEBUG] [Thread-191650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:50:44.160 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:50:44.161 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:50:47.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:50:47.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:50:47.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:50:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 50, 14), 7.85037, 59.1938, 0.0, 6.26544, 15.6409, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:50:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:50:14
2026-04-12T15:50:49.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:50:49.518 [DEBUG] [Thread-191651] [transport.py] [_log()] starting thread (client mode): 0xb0fcdb40
2026-04-12T15:50:49.518 [DEBUG] [Thread-191651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:50:49.538 [DEBUG] [Thread-191651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:50:49.539 [INFO] [Thread-191651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:50:49.541 [DEBUG] [Thread-191651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:50:49.541 [DEBUG] [Thread-191651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] client lang: <none>
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] server lang: <none>
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] kex follows: False
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:50:49.542 [DEBUG] [Thread-191651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:50:49.543 [DEBUG] [Thread-191651] [transport.py] [_log()] Compression: none
2026-04-12T15:50:49.543 [DEBUG] [Thread-191651] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:50:49.558 [DEBUG] [Thread-191651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:50:49.559 [DEBUG] [Thread-191651] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:50:49.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:50:49.560 [DEBUG] [Thread-191651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:50:49.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:50:49.561 [DEBUG] [Thread-191651] [transport.py] [_log()] userauth is OK
2026-04-12T15:50:49.562 [DEBUG] [Thread-191651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:50:49.562 [DEBUG] [Thread-191651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:50:49.562 [DEBUG] [Thread-191651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:50:49.562 [DEBUG] [Thread-191651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:50:49.586 [INFO] [Thread-191651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:50:49.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:50:50.149 [DEBUG] [Thread-191651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:50:50.149 [DEBUG] [Thread-191651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:50:50.149 [DEBUG] [Thread-191651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:50:50.190 [DEBUG] [Thread-191651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:50:50.190 [DEBUG] [Thread-191651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:50:50.194 [DEBUG] [Thread-191651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:50:50.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:50:50.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:50:50.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:50:50.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:50:50.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:50:50.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:50:50.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:50:50.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:50:50.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:50:50.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.576841 -999.00  +15.30  15.90     66   +9.00 1 2 1 1 1   887    0 7.39 45.95 ----- 14.4 15.9 263.0 17.3 21.9 -20.8 21.1 -21.4 21.6 -19.5 22.7 -20.7
2026-04-12T15:50:50.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:50:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:50:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.576841
2026-04-12T15:50:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:50:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:50:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:50:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:50:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:50:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:50:14', tmtdew=7.85037, humidity=59.1938, cloud=0.0, wind=6.26544, temperature=15.6409, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:50:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:50:50.221 [DEBUG] [Thread-191651] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:50:50.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:50:50.315 [DEBUG] [Thread-191654] [transport.py] [_log()] starting thread (client mode): 0xb0fce380
2026-04-12T15:50:50.315 [DEBUG] [Thread-191654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:50:50.330 [DEBUG] [Thread-191654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:50:50.331 [INFO] [Thread-191654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:50:50.338 [DEBUG] [Thread-191654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:50:50.338 [DEBUG] [Thread-191654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:50:50.338 [DEBUG] [Thread-191654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:50:50.338 [DEBUG] [Thread-191654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:50.338 [DEBUG] [Thread-191654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:50:50.338 [DEBUG] [Thread-191654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:50.338 [DEBUG] [Thread-191654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] client lang: <none>
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] server lang: <none>
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] kex follows: False
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] Compression: none
2026-04-12T15:50:50.339 [DEBUG] [Thread-191654] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:50:50.396 [DEBUG] [Thread-191654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:50:50.397 [DEBUG] [Thread-191654] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:50:50.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:50:50.398 [DEBUG] [Thread-191654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:50:50.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:50:50.452 [DEBUG] [Thread-191654] [transport.py] [_log()] userauth is OK
2026-04-12T15:50:50.453 [DEBUG] [Thread-191654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:50:50.453 [DEBUG] [Thread-191654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:50:50.453 [DEBUG] [Thread-191654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:50:50.453 [DEBUG] [Thread-191654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:50:50.474 [INFO] [Thread-191654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:50:50.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:50:50.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:50:51.280 [DEBUG] [Thread-191654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:50:51.280 [DEBUG] [Thread-191654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:50:51.328 [DEBUG] [Thread-191654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:50:51.328 [DEBUG] [Thread-191654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:50:51.337 [DEBUG] [Thread-191654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:50:51.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:50:51.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:50:51.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:50:51.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:50:51.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:50:51.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:50:51.375 [DEBUG] [Thread-191654] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:50:54.227 [DEBUG] [Thread-191656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:09.280 [DEBUG] [Thread-191657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:21.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:51:21.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:51:21.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:51:22.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 50, 50), 7.76282, 60.0171, 0.0, 3.31992, 16.38, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:51:22.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:50:50
2026-04-12T15:51:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:51:23.192 [DEBUG] [Thread-191658] [transport.py] [_log()] starting thread (client mode): 0xb0f6e8f0
2026-04-12T15:51:23.192 [DEBUG] [Thread-191658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:51:23.205 [DEBUG] [Thread-191658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:51:23.206 [INFO] [Thread-191658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] client lang: <none>
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] server lang: <none>
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] kex follows: False
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:51:23.207 [DEBUG] [Thread-191658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:51:23.208 [DEBUG] [Thread-191658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:51:23.208 [DEBUG] [Thread-191658] [transport.py] [_log()] Compression: none
2026-04-12T15:51:23.208 [DEBUG] [Thread-191658] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:51:23.229 [DEBUG] [Thread-191658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:51:23.230 [DEBUG] [Thread-191658] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:51:23.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:51:23.231 [DEBUG] [Thread-191658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:51:23.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:51:23.234 [DEBUG] [Thread-191658] [transport.py] [_log()] userauth is OK
2026-04-12T15:51:23.234 [DEBUG] [Thread-191658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:51:23.234 [DEBUG] [Thread-191658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:51:23.235 [DEBUG] [Thread-191658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:51:23.235 [DEBUG] [Thread-191658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:51:23.263 [INFO] [Thread-191658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:51:23.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:51:23.957 [DEBUG] [Thread-191658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:51:23.958 [DEBUG] [Thread-191658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:51:23.958 [DEBUG] [Thread-191658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:51:23.998 [DEBUG] [Thread-191658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:51:23.999 [DEBUG] [Thread-191658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:51:24.002 [DEBUG] [Thread-191658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:51:24.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:51:24.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:51:24.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:51:24.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:51:24.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:51:24.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:51:24.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:51:24.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:51:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:51:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.577189 -999.00  +15.30  11.31     66   +9.00 1 2 1 1 1   887    0 7.38 42.34 ----- 13.1 11.3 258.8 14.5 21.9 -21.6 21.1 -21.8 21.6 -18.3 22.7 -19.8
2026-04-12T15:51:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:51:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:51:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.577189
2026-04-12T15:51:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:51:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:51:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:51:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:51:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:51:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:50:50', tmtdew=7.76282, humidity=60.0171, cloud=0.0, wind=3.31992, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:51:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:51:24.031 [DEBUG] [Thread-191658] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:51:24.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:51:24.124 [DEBUG] [Thread-191661] [transport.py] [_log()] starting thread (client mode): 0xb0fcc400
2026-04-12T15:51:24.124 [DEBUG] [Thread-191661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:51:24.138 [DEBUG] [Thread-191661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:51:24.138 [INFO] [Thread-191661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:24.146 [DEBUG] [Thread-191661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] client lang: <none>
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] server lang: <none>
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] kex follows: False
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] Compression: none
2026-04-12T15:51:24.147 [DEBUG] [Thread-191661] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:51:24.206 [DEBUG] [Thread-191661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:51:24.207 [DEBUG] [Thread-191661] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:51:24.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:51:24.208 [DEBUG] [Thread-191661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:51:24.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:51:24.264 [DEBUG] [Thread-191661] [transport.py] [_log()] userauth is OK
2026-04-12T15:51:24.264 [DEBUG] [Thread-191661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:51:24.264 [DEBUG] [Thread-191661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:51:24.264 [DEBUG] [Thread-191661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:51:24.264 [DEBUG] [Thread-191661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:51:24.280 [INFO] [Thread-191661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:51:24.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:51:24.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:51:24.316 [DEBUG] [Thread-191663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:25.088 [DEBUG] [Thread-191661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:51:25.088 [DEBUG] [Thread-191661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:51:25.136 [DEBUG] [Thread-191661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:51:25.136 [DEBUG] [Thread-191661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:51:25.146 [DEBUG] [Thread-191661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:51:25.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:51:25.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:51:25.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:51:25.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:51:25.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:51:25.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:51:25.183 [DEBUG] [Thread-191661] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:51:39.364 [DEBUG] [Thread-191664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:43.226 [DEBUG] [Thread-191665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:44.303 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:44.304 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:54.399 [DEBUG] [Thread-191666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:51:55.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:51:55.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:51:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:51:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 51, 25), 7.57044, 60.7571, 0.0, 9.82944, 15.69, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:51:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:51:25
2026-04-12T15:51:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:51:56.993 [DEBUG] [Thread-191667] [transport.py] [_log()] starting thread (client mode): 0xb0feba00
2026-04-12T15:51:56.993 [DEBUG] [Thread-191667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:51:57.011 [DEBUG] [Thread-191667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:51:57.011 [INFO] [Thread-191667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:51:57.014 [DEBUG] [Thread-191667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] client lang: <none>
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] server lang: <none>
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] kex follows: False
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:51:57.015 [DEBUG] [Thread-191667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:51:57.016 [DEBUG] [Thread-191667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:51:57.016 [DEBUG] [Thread-191667] [transport.py] [_log()] Compression: none
2026-04-12T15:51:57.016 [DEBUG] [Thread-191667] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:51:57.024 [DEBUG] [Thread-191667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:51:57.024 [DEBUG] [Thread-191667] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:51:57.024 [DEBUG] [Thread-191667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:51:57.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:51:57.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:51:57.027 [DEBUG] [Thread-191667] [transport.py] [_log()] userauth is OK
2026-04-12T15:51:57.027 [DEBUG] [Thread-191667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:51:57.027 [DEBUG] [Thread-191667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:51:57.027 [DEBUG] [Thread-191667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:51:57.027 [DEBUG] [Thread-191667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:51:57.046 [INFO] [Thread-191667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:51:57.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:51:57.611 [DEBUG] [Thread-191667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:51:57.611 [DEBUG] [Thread-191667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:51:57.612 [DEBUG] [Thread-191667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:51:57.652 [DEBUG] [Thread-191667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:51:57.653 [DEBUG] [Thread-191667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:51:57.655 [DEBUG] [Thread-191667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:51:57.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:51:57.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:51:57.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:51:57.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:51:57.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:51:57.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:51:57.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:51:57.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:51:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:51:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.577536 -999.00  +15.20   8.70     65   +8.90 1 2 1 1 1   887    0 7.39 39.93 ----- 6.9 8.7 287.2 13.7 22.0 -21.4 21.1 -21.6 21.6 -20.1 22.9 -19.9
2026-04-12T15:51:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:51:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:51:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.577536
2026-04-12T15:51:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:51:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:51:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:51:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:51:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:51:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:51:25', tmtdew=7.57044, humidity=60.7571, cloud=0.0, wind=9.82944, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:51:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:51:57.682 [DEBUG] [Thread-191667] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:51:57.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:51:57.779 [DEBUG] [Thread-191670] [transport.py] [_log()] starting thread (client mode): 0xae52d6f0
2026-04-12T15:51:57.779 [DEBUG] [Thread-191670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:51:57.793 [DEBUG] [Thread-191670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:51:57.793 [INFO] [Thread-191670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] client lang: <none>
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] server lang: <none>
2026-04-12T15:51:57.801 [DEBUG] [Thread-191670] [transport.py] [_log()] kex follows: False
2026-04-12T15:51:57.802 [DEBUG] [Thread-191670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:51:57.802 [DEBUG] [Thread-191670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:51:57.802 [DEBUG] [Thread-191670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:51:57.802 [DEBUG] [Thread-191670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:51:57.802 [DEBUG] [Thread-191670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:51:57.802 [DEBUG] [Thread-191670] [transport.py] [_log()] Compression: none
2026-04-12T15:51:57.802 [DEBUG] [Thread-191670] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:51:57.859 [DEBUG] [Thread-191670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:51:57.859 [DEBUG] [Thread-191670] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:51:57.860 [DEBUG] [Thread-191670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:51:57.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:51:57.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:51:57.916 [DEBUG] [Thread-191670] [transport.py] [_log()] userauth is OK
2026-04-12T15:51:57.916 [DEBUG] [Thread-191670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:51:57.916 [DEBUG] [Thread-191670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:51:57.916 [DEBUG] [Thread-191670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:51:57.916 [DEBUG] [Thread-191670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:51:57.934 [INFO] [Thread-191670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:51:57.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:51:57.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:51:58.728 [DEBUG] [Thread-191670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:51:58.728 [DEBUG] [Thread-191670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:51:58.776 [DEBUG] [Thread-191670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:51:58.776 [DEBUG] [Thread-191670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:51:58.786 [DEBUG] [Thread-191670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:51:58.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:51:58.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:51:58.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:51:58.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:51:58.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:51:58.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:51:58.823 [DEBUG] [Thread-191670] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:52:09.437 [DEBUG] [Thread-191672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:52:24.501 [DEBUG] [Thread-191673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:52:28.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:52:28.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:52:28.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:52:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 52, 1), 7.50591, 61.0222, 0.0, 10.2528, 15.6899, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:52:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:52:01
2026-04-12T15:52:30.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:52:30.601 [DEBUG] [Thread-191674] [transport.py] [_log()] starting thread (client mode): 0xb0f6db10
2026-04-12T15:52:30.601 [DEBUG] [Thread-191674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:52:30.621 [DEBUG] [Thread-191674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:52:30.621 [INFO] [Thread-191674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] client lang: <none>
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] server lang: <none>
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] kex follows: False
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] Compression: none
2026-04-12T15:52:30.623 [DEBUG] [Thread-191674] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:52:30.641 [DEBUG] [Thread-191674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:52:30.642 [DEBUG] [Thread-191674] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:52:30.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:52:30.643 [DEBUG] [Thread-191674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:52:30.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:52:30.645 [DEBUG] [Thread-191674] [transport.py] [_log()] userauth is OK
2026-04-12T15:52:30.645 [DEBUG] [Thread-191674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:52:30.645 [DEBUG] [Thread-191674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:52:30.645 [DEBUG] [Thread-191674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:52:30.645 [DEBUG] [Thread-191674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:52:30.663 [INFO] [Thread-191674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:52:30.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:52:31.266 [DEBUG] [Thread-191674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:52:31.267 [DEBUG] [Thread-191674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:52:31.267 [DEBUG] [Thread-191674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:52:31.308 [DEBUG] [Thread-191674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:52:31.308 [DEBUG] [Thread-191674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:52:31.312 [DEBUG] [Thread-191674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:52:31.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:52:31.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:52:31.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:52:31.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:52:31.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:52:31.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:52:31.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:52:31.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:52:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:52:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.577883 -999.00  +15.40  10.24     65   +9.00 1 2 1 1 1   887    0 7.35 41.02 ----- 12.9 10.2 282.3 12.2 21.9 -21.4 21.1 -22.3 21.6 -20.3 22.8 -21.4
2026-04-12T15:52:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:52:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:52:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.577883
2026-04-12T15:52:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:52:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:52:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:52:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:52:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:52:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:52:01', tmtdew=7.50591, humidity=61.0222, cloud=0.0, wind=10.2528, temperature=15.6899, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:52:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:52:31.338 [DEBUG] [Thread-191674] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:52:31.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:52:31.442 [DEBUG] [Thread-191677] [transport.py] [_log()] starting thread (client mode): 0xae535cc0
2026-04-12T15:52:31.442 [DEBUG] [Thread-191677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:52:31.458 [DEBUG] [Thread-191677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:52:31.458 [INFO] [Thread-191677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:52:31.465 [DEBUG] [Thread-191677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] client lang: <none>
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] server lang: <none>
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] kex follows: False
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] Compression: none
2026-04-12T15:52:31.466 [DEBUG] [Thread-191677] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:52:31.527 [DEBUG] [Thread-191677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:52:31.527 [DEBUG] [Thread-191677] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:52:31.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:52:31.528 [DEBUG] [Thread-191677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:52:31.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:52:31.582 [DEBUG] [Thread-191677] [transport.py] [_log()] userauth is OK
2026-04-12T15:52:31.583 [DEBUG] [Thread-191677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:52:31.583 [DEBUG] [Thread-191677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:52:31.583 [DEBUG] [Thread-191677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:52:31.583 [DEBUG] [Thread-191677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:52:31.601 [INFO] [Thread-191677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:52:31.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:52:31.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:52:32.431 [DEBUG] [Thread-191677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:52:32.432 [DEBUG] [Thread-191677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:52:32.480 [DEBUG] [Thread-191677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:52:32.480 [DEBUG] [Thread-191677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:52:32.490 [DEBUG] [Thread-191677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:52:32.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:52:32.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:52:32.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:52:32.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:52:32.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:52:32.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:52:32.529 [DEBUG] [Thread-191677] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:52:39.537 [DEBUG] [Thread-191679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:52:43.281 [DEBUG] [Thread-191680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:52:44.446 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:52:44.447 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:52:54.580 [DEBUG] [Thread-191681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:53:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:53:02.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:53:02.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:53:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 52, 36), 7.60473, 60.6466, 0.0, 9.21168, 16.3136, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:53:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:52:36
2026-04-12T15:53:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:53:04.350 [DEBUG] [Thread-191682] [transport.py] [_log()] starting thread (client mode): 0xae537640
2026-04-12T15:53:04.350 [DEBUG] [Thread-191682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:53:04.368 [DEBUG] [Thread-191682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:53:04.368 [INFO] [Thread-191682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] client lang: <none>
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] server lang: <none>
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] kex follows: False
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:53:04.372 [DEBUG] [Thread-191682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:53:04.373 [DEBUG] [Thread-191682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:53:04.373 [DEBUG] [Thread-191682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:53:04.373 [DEBUG] [Thread-191682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:53:04.373 [DEBUG] [Thread-191682] [transport.py] [_log()] Compression: none
2026-04-12T15:53:04.373 [DEBUG] [Thread-191682] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:53:04.390 [DEBUG] [Thread-191682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:53:04.391 [DEBUG] [Thread-191682] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:53:04.391 [DEBUG] [Thread-191682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:53:04.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:53:04.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:53:04.394 [DEBUG] [Thread-191682] [transport.py] [_log()] userauth is OK
2026-04-12T15:53:04.394 [DEBUG] [Thread-191682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:53:04.394 [DEBUG] [Thread-191682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:53:04.394 [DEBUG] [Thread-191682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:53:04.394 [DEBUG] [Thread-191682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:53:04.418 [INFO] [Thread-191682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:53:04.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:53:05.022 [DEBUG] [Thread-191682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:53:05.022 [DEBUG] [Thread-191682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:53:05.022 [DEBUG] [Thread-191682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:53:05.065 [DEBUG] [Thread-191682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:53:05.065 [DEBUG] [Thread-191682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:53:05.067 [DEBUG] [Thread-191682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:53:05.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:53:05.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:53:05.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:53:05.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:53:05.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:53:05.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:53:05.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:53:05.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:53:05.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:53:05.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.578231 -999.00  +15.40   8.83     65   +8.90 1 2 1 1 1   887    0 7.47 45.76 ----- 6.9 8.8 293.8 15.9 21.9 -22.7 21.0 -22.1 21.2 -23.1 22.8 -20.6
2026-04-12T15:53:05.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:53:05.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:53:05.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.578231
2026-04-12T15:53:05.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:53:05.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:53:05.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:53:05.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:53:05.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:53:05.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:52:36', tmtdew=7.60473, humidity=60.6466, cloud=0.0, wind=9.21168, temperature=16.3136, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:52:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:53:05.090 [DEBUG] [Thread-191682] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:53:05.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:53:05.183 [DEBUG] [Thread-191685] [transport.py] [_log()] starting thread (client mode): 0xb0f6e7a0
2026-04-12T15:53:05.183 [DEBUG] [Thread-191685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:53:05.197 [DEBUG] [Thread-191685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:53:05.197 [INFO] [Thread-191685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] client lang: <none>
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] server lang: <none>
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] kex follows: False
2026-04-12T15:53:05.205 [DEBUG] [Thread-191685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:53:05.206 [DEBUG] [Thread-191685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:53:05.206 [DEBUG] [Thread-191685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:53:05.206 [DEBUG] [Thread-191685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:53:05.206 [DEBUG] [Thread-191685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:53:05.206 [DEBUG] [Thread-191685] [transport.py] [_log()] Compression: none
2026-04-12T15:53:05.206 [DEBUG] [Thread-191685] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:53:05.265 [DEBUG] [Thread-191685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:53:05.266 [DEBUG] [Thread-191685] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:53:05.266 [DEBUG] [Thread-191685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:53:05.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:53:05.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:53:05.321 [DEBUG] [Thread-191685] [transport.py] [_log()] userauth is OK
2026-04-12T15:53:05.321 [DEBUG] [Thread-191685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:53:05.322 [DEBUG] [Thread-191685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:53:05.322 [DEBUG] [Thread-191685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:53:05.322 [DEBUG] [Thread-191685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:53:05.340 [INFO] [Thread-191685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:53:05.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:53:05.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:53:06.155 [DEBUG] [Thread-191685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:53:06.156 [DEBUG] [Thread-191685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:53:06.202 [DEBUG] [Thread-191685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:53:06.203 [DEBUG] [Thread-191685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:53:06.211 [DEBUG] [Thread-191685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:53:06.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:53:06.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:53:06.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:53:06.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:53:06.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:53:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:53:06.246 [DEBUG] [Thread-191685] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:53:09.617 [DEBUG] [Thread-191687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:53:24.676 [DEBUG] [Thread-191688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:53:36.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:53:36.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:53:36.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:53:37.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 53, 12), 7.52569, 60.6547, 0.0, 8.89452, 15.773, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:53:37.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:53:12
2026-04-12T15:53:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:53:38.078 [DEBUG] [Thread-191689] [transport.py] [_log()] starting thread (client mode): 0xb0f6e020
2026-04-12T15:53:38.078 [DEBUG] [Thread-191689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:53:38.098 [DEBUG] [Thread-191689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:53:38.098 [INFO] [Thread-191689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:53:38.099 [DEBUG] [Thread-191689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:53:38.099 [DEBUG] [Thread-191689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] client lang: <none>
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] server lang: <none>
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] kex follows: False
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:53:38.100 [DEBUG] [Thread-191689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:53:38.101 [DEBUG] [Thread-191689] [transport.py] [_log()] Compression: none
2026-04-12T15:53:38.101 [DEBUG] [Thread-191689] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:53:38.110 [DEBUG] [Thread-191689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:53:38.111 [DEBUG] [Thread-191689] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:53:38.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:53:38.112 [DEBUG] [Thread-191689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:53:38.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:53:38.114 [DEBUG] [Thread-191689] [transport.py] [_log()] userauth is OK
2026-04-12T15:53:38.115 [DEBUG] [Thread-191689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:53:38.115 [DEBUG] [Thread-191689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:53:38.115 [DEBUG] [Thread-191689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:53:38.115 [DEBUG] [Thread-191689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:53:38.140 [INFO] [Thread-191689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:53:38.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:53:38.750 [DEBUG] [Thread-191689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:53:38.750 [DEBUG] [Thread-191689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:53:38.751 [DEBUG] [Thread-191689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:53:38.792 [DEBUG] [Thread-191689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:53:38.792 [DEBUG] [Thread-191689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:53:38.795 [DEBUG] [Thread-191689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:53:38.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:53:38.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:53:38.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:53:38.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:53:38.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:53:38.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:53:38.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:53:38.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:53:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:53:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.578578 -999.00  +15.60  12.66     67   +9.40 1 2 1 1 1   887    0 7.24 42.04 ----- 12.9 12.7 280.0 15.2 21.8 -21.9 21.0 -22.7 21.4 -20.4 22.6 -21.0
2026-04-12T15:53:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:53:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:53:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.578578
2026-04-12T15:53:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:53:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:53:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:53:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:53:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:53:38.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:53:12', tmtdew=7.52569, humidity=60.6547, cloud=0.0, wind=8.89452, temperature=15.773, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:53:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:53:38.822 [DEBUG] [Thread-191689] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:53:38.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:53:38.919 [DEBUG] [Thread-191692] [transport.py] [_log()] starting thread (client mode): 0xae534ac0
2026-04-12T15:53:38.920 [DEBUG] [Thread-191692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:53:38.934 [DEBUG] [Thread-191692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:53:38.934 [INFO] [Thread-191692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] client lang: <none>
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] server lang: <none>
2026-04-12T15:53:38.942 [DEBUG] [Thread-191692] [transport.py] [_log()] kex follows: False
2026-04-12T15:53:38.943 [DEBUG] [Thread-191692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:53:38.943 [DEBUG] [Thread-191692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:53:38.943 [DEBUG] [Thread-191692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:53:38.943 [DEBUG] [Thread-191692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:53:38.943 [DEBUG] [Thread-191692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:53:38.943 [DEBUG] [Thread-191692] [transport.py] [_log()] Compression: none
2026-04-12T15:53:38.943 [DEBUG] [Thread-191692] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:53:38.999 [DEBUG] [Thread-191692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:53:39.000 [DEBUG] [Thread-191692] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:53:39.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:53:39.001 [DEBUG] [Thread-191692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:53:39.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:53:39.055 [DEBUG] [Thread-191692] [transport.py] [_log()] userauth is OK
2026-04-12T15:53:39.056 [DEBUG] [Thread-191692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:53:39.056 [DEBUG] [Thread-191692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:53:39.056 [DEBUG] [Thread-191692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:53:39.056 [DEBUG] [Thread-191692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:53:39.079 [INFO] [Thread-191692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:53:39.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:53:39.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:53:39.714 [DEBUG] [Thread-191694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:53:39.873 [DEBUG] [Thread-191692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:53:39.873 [DEBUG] [Thread-191692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:53:39.921 [DEBUG] [Thread-191692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:53:39.921 [DEBUG] [Thread-191692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:53:39.930 [DEBUG] [Thread-191692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:53:39.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:53:39.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:53:39.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:53:39.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:53:39.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:53:39.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:53:39.967 [DEBUG] [Thread-191692] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:53:43.335 [DEBUG] [Thread-191695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:53:44.587 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:53:44.589 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:53:54.769 [DEBUG] [Thread-191696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:54:09.807 [DEBUG] [Thread-191697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:54:09.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:54:09.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:54:09.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:54:11.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 53, 47), 7.40467, 61.5413, 0.0, 10.6229, 16.6117, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:54:11.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:53:47
2026-04-12T15:54:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:54:11.794 [DEBUG] [Thread-191698] [transport.py] [_log()] starting thread (client mode): 0xae537250
2026-04-12T15:54:11.794 [DEBUG] [Thread-191698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:54:11.814 [DEBUG] [Thread-191698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:54:11.815 [INFO] [Thread-191698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:54:11.817 [DEBUG] [Thread-191698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] client lang: <none>
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] server lang: <none>
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] kex follows: False
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] Compression: none
2026-04-12T15:54:11.818 [DEBUG] [Thread-191698] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:54:11.831 [DEBUG] [Thread-191698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:54:11.832 [DEBUG] [Thread-191698] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:54:11.832 [DEBUG] [Thread-191698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:54:11.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:54:11.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:54:11.834 [DEBUG] [Thread-191698] [transport.py] [_log()] userauth is OK
2026-04-12T15:54:11.834 [DEBUG] [Thread-191698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:54:11.834 [DEBUG] [Thread-191698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:54:11.834 [DEBUG] [Thread-191698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:54:11.834 [DEBUG] [Thread-191698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:54:11.865 [INFO] [Thread-191698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:54:11.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:54:12.528 [DEBUG] [Thread-191698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:54:12.529 [DEBUG] [Thread-191698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:54:12.529 [DEBUG] [Thread-191698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:54:12.570 [DEBUG] [Thread-191698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:54:12.570 [DEBUG] [Thread-191698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:54:12.574 [DEBUG] [Thread-191698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:54:12.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:54:12.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:54:12.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:54:12.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:54:12.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:54:12.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:54:12.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:54:12.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:54:12.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:54:12.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.578925 -999.00  +15.50  15.52     63   +8.50 1 2 1 1 1   887    0 7.38 42.26 ----- 13.6 15.5 274.0 21.5 21.7 -23.3 20.9 -22.6 21.2 -21.7 22.6 -21.1
2026-04-12T15:54:12.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:54:12.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:54:12.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.578925
2026-04-12T15:54:12.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:54:12.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:54:12.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:54:12.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:54:12.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:54:12.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:53:47', tmtdew=7.40467, humidity=61.5413, cloud=0.0, wind=10.6229, temperature=16.6117, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:53:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:54:12.603 [DEBUG] [Thread-191698] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:54:12.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:54:12.698 [DEBUG] [Thread-191701] [transport.py] [_log()] starting thread (client mode): 0xae52cfd0
2026-04-12T15:54:12.698 [DEBUG] [Thread-191701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:54:12.713 [DEBUG] [Thread-191701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:54:12.713 [INFO] [Thread-191701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] client lang: <none>
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] server lang: <none>
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] kex follows: False
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:54:12.721 [DEBUG] [Thread-191701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:54:12.722 [DEBUG] [Thread-191701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:54:12.722 [DEBUG] [Thread-191701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:54:12.722 [DEBUG] [Thread-191701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:54:12.722 [DEBUG] [Thread-191701] [transport.py] [_log()] Compression: none
2026-04-12T15:54:12.722 [DEBUG] [Thread-191701] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:54:12.778 [DEBUG] [Thread-191701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:54:12.779 [DEBUG] [Thread-191701] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:54:12.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:54:12.780 [DEBUG] [Thread-191701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:54:12.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:54:12.838 [DEBUG] [Thread-191701] [transport.py] [_log()] userauth is OK
2026-04-12T15:54:12.839 [DEBUG] [Thread-191701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:54:12.839 [DEBUG] [Thread-191701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:54:12.839 [DEBUG] [Thread-191701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:54:12.839 [DEBUG] [Thread-191701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:54:12.858 [INFO] [Thread-191701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:54:12.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:54:12.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:54:13.668 [DEBUG] [Thread-191701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:54:13.668 [DEBUG] [Thread-191701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:54:13.716 [DEBUG] [Thread-191701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:54:13.716 [DEBUG] [Thread-191701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:54:13.726 [DEBUG] [Thread-191701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:54:13.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:54: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')
2026-04-12T15:54: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
2026-04-12T15:54:13.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:54:13.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:54:13.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:54:13.763 [DEBUG] [Thread-191701] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:54:24.846 [DEBUG] [Thread-191703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:54:39.898 [DEBUG] [Thread-191704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:54:43.389 [DEBUG] [Thread-191705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:54:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:54:43.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:54:43.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:54:44.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:54:44.730 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:54:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 54, 22), 7.82244, 59.9889, 0.0, 14.0461, 15.939, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:54:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:54:22
2026-04-12T15:54:45.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:54:45.651 [DEBUG] [Thread-191706] [transport.py] [_log()] starting thread (client mode): 0xb0f41150
2026-04-12T15:54:45.651 [DEBUG] [Thread-191706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:54:45.671 [DEBUG] [Thread-191706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:54:45.671 [INFO] [Thread-191706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:54:45.674 [DEBUG] [Thread-191706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] client lang: <none>
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] server lang: <none>
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] kex follows: False
2026-04-12T15:54:45.675 [DEBUG] [Thread-191706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:54:45.676 [DEBUG] [Thread-191706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:54:45.676 [DEBUG] [Thread-191706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:54:45.676 [DEBUG] [Thread-191706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:54:45.676 [DEBUG] [Thread-191706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:54:45.676 [DEBUG] [Thread-191706] [transport.py] [_log()] Compression: none
2026-04-12T15:54:45.676 [DEBUG] [Thread-191706] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:54:45.695 [DEBUG] [Thread-191706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:54:45.695 [DEBUG] [Thread-191706] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:54:45.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:54:45.696 [DEBUG] [Thread-191706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:54:45.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:54:45.737 [DEBUG] [Thread-191706] [transport.py] [_log()] userauth is OK
2026-04-12T15:54:45.737 [DEBUG] [Thread-191706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:54:45.737 [DEBUG] [Thread-191706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:54:45.737 [DEBUG] [Thread-191706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:54:45.738 [DEBUG] [Thread-191706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:54:45.775 [INFO] [Thread-191706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:54:45.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:54:46.406 [DEBUG] [Thread-191706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:54:46.406 [DEBUG] [Thread-191706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:54:46.407 [DEBUG] [Thread-191706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:54:46.447 [DEBUG] [Thread-191706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:54:46.447 [DEBUG] [Thread-191706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:54:46.450 [DEBUG] [Thread-191706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:54:46.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:54:46.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:54:46.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:54:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:54:46.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:54:46.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:54:46.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:54:46.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:54:46.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:54:46.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.579272 -999.00  +15.50  13.03     62   +8.40 1 2 1 1 1   887    0 7.48 44.75 ----- 12.2 13.0 291.0 16.7 21.7 -22.3 20.9 -23.1 21.2 -22.5 22.4 -20.7
2026-04-12T15:54:46.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:54:46.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:54:46.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.579272
2026-04-12T15:54:46.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:54:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:54:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:54:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:54:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:54:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:54:22', tmtdew=7.82244, humidity=59.9889, cloud=0.0, wind=14.0461, temperature=15.939, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:54:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:54:46.478 [DEBUG] [Thread-191706] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:54:46.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:54:46.570 [DEBUG] [Thread-191709] [transport.py] [_log()] starting thread (client mode): 0xae5351e0
2026-04-12T15:54:46.570 [DEBUG] [Thread-191709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:54:46.585 [DEBUG] [Thread-191709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:54:46.585 [INFO] [Thread-191709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:54:46.593 [DEBUG] [Thread-191709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:54:46.593 [DEBUG] [Thread-191709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:54:46.593 [DEBUG] [Thread-191709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:54:46.593 [DEBUG] [Thread-191709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:46.593 [DEBUG] [Thread-191709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:54:46.593 [DEBUG] [Thread-191709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:46.593 [DEBUG] [Thread-191709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] client lang: <none>
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] server lang: <none>
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] kex follows: False
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:54:46.594 [DEBUG] [Thread-191709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:54:46.595 [DEBUG] [Thread-191709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:54:46.595 [DEBUG] [Thread-191709] [transport.py] [_log()] Compression: none
2026-04-12T15:54:46.595 [DEBUG] [Thread-191709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:54:46.654 [DEBUG] [Thread-191709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:54:46.655 [DEBUG] [Thread-191709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:54:46.656 [DEBUG] [Thread-191709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:54:46.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:54:46.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:54:46.713 [DEBUG] [Thread-191709] [transport.py] [_log()] userauth is OK
2026-04-12T15:54:46.713 [DEBUG] [Thread-191709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:54:46.714 [DEBUG] [Thread-191709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:54:46.714 [DEBUG] [Thread-191709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:54:46.714 [DEBUG] [Thread-191709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:54:46.734 [INFO] [Thread-191709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:54:46.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:54:46.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:54:47.545 [DEBUG] [Thread-191709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:54:47.545 [DEBUG] [Thread-191709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:54:47.593 [DEBUG] [Thread-191709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:54:47.593 [DEBUG] [Thread-191709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:54:47.603 [DEBUG] [Thread-191709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:54:47.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:54:47.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:54:47.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:54:47.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:54:47.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:54:47.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:54:47.639 [DEBUG] [Thread-191709] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:54:54.935 [DEBUG] [Thread-191711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:55:09.991 [DEBUG] [Thread-191712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:55:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:55:17.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:55:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:55:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 54, 58), 8.2156, 58.0279, 0.0, 7.46496, 16.1384, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:55:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:54:58
2026-04-12T15:55:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:55:19.489 [DEBUG] [Thread-191713] [transport.py] [_log()] starting thread (client mode): 0xb0f6e830
2026-04-12T15:55:19.489 [DEBUG] [Thread-191713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:55:19.499 [DEBUG] [Thread-191713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:55:19.499 [INFO] [Thread-191713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] client lang: <none>
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] server lang: <none>
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] kex follows: False
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] Compression: none
2026-04-12T15:55:19.501 [DEBUG] [Thread-191713] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:55:19.508 [DEBUG] [Thread-191713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:55:19.508 [DEBUG] [Thread-191713] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:55:19.509 [DEBUG] [Thread-191713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:55:19.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:55:19.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:55:19.510 [DEBUG] [Thread-191713] [transport.py] [_log()] userauth is OK
2026-04-12T15:55:19.510 [DEBUG] [Thread-191713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:55:19.510 [DEBUG] [Thread-191713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:55:19.510 [DEBUG] [Thread-191713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:55:19.510 [DEBUG] [Thread-191713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:55:19.522 [INFO] [Thread-191713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:55:19.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:55:20.087 [DEBUG] [Thread-191713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:55:20.087 [DEBUG] [Thread-191713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:55:20.087 [DEBUG] [Thread-191713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:55:20.128 [DEBUG] [Thread-191713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:55:20.128 [DEBUG] [Thread-191713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:55:20.130 [DEBUG] [Thread-191713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:55:20.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:55:20.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:55:20.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:55:20.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:55:20.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:55:20.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:55:20.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:55:20.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:55:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:55:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.579967 -999.00  +15.40  11.20     63   +8.50 1 2 1 1 1   887    0 7.34 41.37 ----- 12.4 11.2 307.0 14.2 21.6 -22.7 20.9 -22.8 21.4 -20.5 22.5 -20.7
2026-04-12T15:55:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:55:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:55:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.579967
2026-04-12T15:55:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:55:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:55:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:55:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:55:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:55:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:54:58', tmtdew=8.2156, humidity=58.0279, cloud=0.0, wind=7.46496, temperature=16.1384, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:55:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:55:20.145 [DEBUG] [Thread-191713] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:55:20.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:55:20.241 [DEBUG] [Thread-191716] [transport.py] [_log()] starting thread (client mode): 0xb0f42710
2026-04-12T15:55:20.242 [DEBUG] [Thread-191716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:55:20.256 [DEBUG] [Thread-191716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:55:20.257 [INFO] [Thread-191716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:55:20.264 [DEBUG] [Thread-191716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:55:20.264 [DEBUG] [Thread-191716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:55:20.264 [DEBUG] [Thread-191716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] client lang: <none>
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] server lang: <none>
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] kex follows: False
2026-04-12T15:55:20.265 [DEBUG] [Thread-191716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:55:20.266 [DEBUG] [Thread-191716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:55:20.266 [DEBUG] [Thread-191716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:55:20.266 [DEBUG] [Thread-191716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:55:20.266 [DEBUG] [Thread-191716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:55:20.266 [DEBUG] [Thread-191716] [transport.py] [_log()] Compression: none
2026-04-12T15:55:20.266 [DEBUG] [Thread-191716] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:55:20.324 [DEBUG] [Thread-191716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:55:20.324 [DEBUG] [Thread-191716] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:55:20.325 [DEBUG] [Thread-191716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:55:20.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:55:20.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:55:20.386 [DEBUG] [Thread-191716] [transport.py] [_log()] userauth is OK
2026-04-12T15:55:20.386 [DEBUG] [Thread-191716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:55:20.386 [DEBUG] [Thread-191716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:55:20.387 [DEBUG] [Thread-191716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:55:20.387 [DEBUG] [Thread-191716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:55:20.406 [INFO] [Thread-191716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:55:20.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:55:20.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:55:21.261 [DEBUG] [Thread-191716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:55:21.261 [DEBUG] [Thread-191716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:55:21.309 [DEBUG] [Thread-191716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:55:21.309 [DEBUG] [Thread-191716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:55:21.318 [DEBUG] [Thread-191716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:55:21.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:55:21.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:55:21.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:55:21.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:55:21.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:55:21.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:55:21.356 [DEBUG] [Thread-191716] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:55:25.034 [DEBUG] [Thread-191718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:55:40.087 [DEBUG] [Thread-191719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:55:43.449 [DEBUG] [Thread-191720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:55:44.871 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:55:44.873 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:55:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:55:51.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:55:51.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:55:52.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 55, 33), 8.69429, 56.5034, 0.0, 13.1278, 17.0419, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:55:52.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:55:33
2026-04-12T15:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:55:53.188 [DEBUG] [Thread-191721] [transport.py] [_log()] starting thread (client mode): 0xb0f42b30
2026-04-12T15:55:53.188 [DEBUG] [Thread-191721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:55:53.207 [DEBUG] [Thread-191721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:55:53.207 [INFO] [Thread-191721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] client lang: <none>
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] server lang: <none>
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] kex follows: False
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] Compression: none
2026-04-12T15:55:53.210 [DEBUG] [Thread-191721] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:55:53.227 [DEBUG] [Thread-191721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:55:53.228 [DEBUG] [Thread-191721] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:55:53.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:55:53.229 [DEBUG] [Thread-191721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:55:53.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:55:53.232 [DEBUG] [Thread-191721] [transport.py] [_log()] userauth is OK
2026-04-12T15:55:53.232 [DEBUG] [Thread-191721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:55:53.232 [DEBUG] [Thread-191721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:55:53.232 [DEBUG] [Thread-191721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:55:53.232 [DEBUG] [Thread-191721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:55:53.256 [INFO] [Thread-191721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:55:53.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:55:53.873 [DEBUG] [Thread-191721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:55:53.873 [DEBUG] [Thread-191721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:55:53.873 [DEBUG] [Thread-191721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:55:53.914 [DEBUG] [Thread-191721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:55:53.914 [DEBUG] [Thread-191721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:55:53.918 [DEBUG] [Thread-191721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:55:53.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:55:53.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:55:53.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:55:53.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:55:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:55:53.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:55:53.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:55:53.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:55:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:55:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.580314 -999.00  +15.60  10.18     65   +9.20 1 2 1 1 1   887    0 7.35 38.81 ----- 12.6 10.2 268.8 17.9 21.7 -22.6 20.9 -23.0 21.4 -20.4 22.4 -21.5
2026-04-12T15:55:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:55:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:55:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.580314
2026-04-12T15:55:53.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:55:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:55:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:55:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:55:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:55:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:55:33', tmtdew=8.69429, humidity=56.5034, cloud=0.0, wind=13.1278, temperature=17.0419, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:55:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:55:53.946 [DEBUG] [Thread-191721] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:55:54.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:55:54.039 [DEBUG] [Thread-191724] [transport.py] [_log()] starting thread (client mode): 0xb0fcc280
2026-04-12T15:55:54.039 [DEBUG] [Thread-191724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:55:54.053 [DEBUG] [Thread-191724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:55:54.054 [INFO] [Thread-191724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:55:54.061 [DEBUG] [Thread-191724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] client lang: <none>
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] server lang: <none>
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] kex follows: False
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] Compression: none
2026-04-12T15:55:54.062 [DEBUG] [Thread-191724] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:55:54.121 [DEBUG] [Thread-191724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:55:54.122 [DEBUG] [Thread-191724] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:55:54.122 [DEBUG] [Thread-191724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:55:54.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:55:54.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:55:54.178 [DEBUG] [Thread-191724] [transport.py] [_log()] userauth is OK
2026-04-12T15:55:54.178 [DEBUG] [Thread-191724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:55:54.178 [DEBUG] [Thread-191724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:55:54.178 [DEBUG] [Thread-191724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:55:54.178 [DEBUG] [Thread-191724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:55:54.196 [INFO] [Thread-191724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:55:54.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:55:54.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:55:54.979 [DEBUG] [Thread-191724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:55:54.980 [DEBUG] [Thread-191724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:55:55.027 [DEBUG] [Thread-191724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:55:55.027 [DEBUG] [Thread-191724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:55:55.036 [DEBUG] [Thread-191724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:55:55.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:55:55.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:55: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
2026-04-12T15:55:55.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:55:55.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:55:55.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:55:55.073 [DEBUG] [Thread-191724] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:55:55.124 [DEBUG] [Thread-191726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:10.176 [DEBUG] [Thread-191727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:25.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:56:25.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:56:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:56:25.217 [DEBUG] [Thread-191728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:26.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 56, 9), 8.91187, 55.2573, 0.0, 14.8752, 16.1873, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:56:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:56:09
2026-04-12T15:56:26.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:56:27.078 [DEBUG] [Thread-191729] [transport.py] [_log()] starting thread (client mode): 0xb0feb5b0
2026-04-12T15:56:27.079 [DEBUG] [Thread-191729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:56:27.094 [DEBUG] [Thread-191729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:56:27.094 [INFO] [Thread-191729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:56:27.096 [DEBUG] [Thread-191729] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:56:27.096 [DEBUG] [Thread-191729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:56:27.096 [DEBUG] [Thread-191729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:56:27.096 [DEBUG] [Thread-191729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:56:27.096 [DEBUG] [Thread-191729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] client lang: <none>
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] server lang: <none>
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] kex follows: False
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] Compression: none
2026-04-12T15:56:27.097 [DEBUG] [Thread-191729] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:56:27.111 [DEBUG] [Thread-191729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:56:27.111 [DEBUG] [Thread-191729] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:56:27.112 [DEBUG] [Thread-191729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:56:27.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:56:27.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:56:27.113 [DEBUG] [Thread-191729] [transport.py] [_log()] userauth is OK
2026-04-12T15:56:27.114 [DEBUG] [Thread-191729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:56:27.114 [DEBUG] [Thread-191729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:56:27.114 [DEBUG] [Thread-191729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:56:27.114 [DEBUG] [Thread-191729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:56:27.132 [INFO] [Thread-191729] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:56:27.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:56:27.803 [DEBUG] [Thread-191729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:56:27.803 [DEBUG] [Thread-191729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:56:27.803 [DEBUG] [Thread-191729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:56:27.845 [DEBUG] [Thread-191729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:56:27.845 [DEBUG] [Thread-191729] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:56:27.847 [DEBUG] [Thread-191729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:56:27.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:56:27.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:56:27.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:56:27.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:56:27.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:56:27.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:56:27.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:56:27.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:56:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:56:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.580661 -999.00  +15.80  12.77     64   +9.00 1 2 1 1 1   887    0 7.45 41.05 ----- 11.4 12.8 277.6 15.7 21.6 -22.6 20.9 -23.2 21.5 -20.3 22.5 -21.6
2026-04-12T15:56:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:56:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:56:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.580661
2026-04-12T15:56:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:56:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:56:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:56:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:56:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:56:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:56:09', tmtdew=8.91187, humidity=55.2573, cloud=0.0, wind=14.8752, temperature=16.1873, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:56:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:56:27.862 [DEBUG] [Thread-191729] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:56:27.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:56:27.970 [DEBUG] [Thread-191732] [transport.py] [_log()] starting thread (client mode): 0xb0f6c190
2026-04-12T15:56:27.970 [DEBUG] [Thread-191732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:56:27.984 [DEBUG] [Thread-191732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:56:27.984 [INFO] [Thread-191732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:56:27.991 [DEBUG] [Thread-191732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:56:27.991 [DEBUG] [Thread-191732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] client lang: <none>
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] server lang: <none>
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] kex follows: False
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] Compression: none
2026-04-12T15:56:27.992 [DEBUG] [Thread-191732] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:56:28.049 [DEBUG] [Thread-191732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:56:28.049 [DEBUG] [Thread-191732] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:56:28.050 [DEBUG] [Thread-191732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:56:28.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:56:28.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:56:28.109 [DEBUG] [Thread-191732] [transport.py] [_log()] userauth is OK
2026-04-12T15:56:28.109 [DEBUG] [Thread-191732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:56:28.109 [DEBUG] [Thread-191732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:56:28.109 [DEBUG] [Thread-191732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:56:28.109 [DEBUG] [Thread-191732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:56:28.132 [INFO] [Thread-191732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:56:28.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:56:28.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:56:29.002 [DEBUG] [Thread-191732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:56:29.002 [DEBUG] [Thread-191732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:56:29.050 [DEBUG] [Thread-191732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:56:29.050 [DEBUG] [Thread-191732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:56:29.060 [DEBUG] [Thread-191732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:56:29.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:56:29.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:56:29.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:56:29.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:56:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:56:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:56:29.097 [DEBUG] [Thread-191732] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:56:40.255 [DEBUG] [Thread-191734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:43.497 [DEBUG] [Thread-191735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:45.017 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:45.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:55.308 [DEBUG] [Thread-191736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:56:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:56:59.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:56:59.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:57:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 56, 44), 8.8836, 55.8071, 0.0, 12.0694, 17.1408, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:57:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:56:44
2026-04-12T15:57:00.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:57:00.944 [DEBUG] [Thread-191737] [transport.py] [_log()] starting thread (client mode): 0xae535540
2026-04-12T15:57:00.944 [DEBUG] [Thread-191737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:57:00.961 [DEBUG] [Thread-191737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:57:00.961 [INFO] [Thread-191737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:57:00.964 [DEBUG] [Thread-191737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:57:00.964 [DEBUG] [Thread-191737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:57:00.964 [DEBUG] [Thread-191737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:57:00.964 [DEBUG] [Thread-191737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:00.964 [DEBUG] [Thread-191737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] client lang: <none>
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] server lang: <none>
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] kex follows: False
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] Compression: none
2026-04-12T15:57:00.965 [DEBUG] [Thread-191737] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:57:00.982 [DEBUG] [Thread-191737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:57:00.983 [DEBUG] [Thread-191737] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:57:00.983 [DEBUG] [Thread-191737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:57:00.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:57:00.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:57:00.985 [DEBUG] [Thread-191737] [transport.py] [_log()] userauth is OK
2026-04-12T15:57:00.986 [DEBUG] [Thread-191737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:57:00.986 [DEBUG] [Thread-191737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:57:00.986 [DEBUG] [Thread-191737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:57:00.986 [DEBUG] [Thread-191737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:57:01.010 [INFO] [Thread-191737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:57:01.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:57:01.658 [DEBUG] [Thread-191737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:57:01.659 [DEBUG] [Thread-191737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:57:01.659 [DEBUG] [Thread-191737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:57:01.700 [DEBUG] [Thread-191737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:57:01.700 [DEBUG] [Thread-191737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:57:01.704 [DEBUG] [Thread-191737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:57:01.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:57:01.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:57:01.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:57:01.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:57:01.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:57:01.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:57:01.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:57:01.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:57:01.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:57:01.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.581008 -999.00  +15.80  12.95     60   +8.20 1 2 1 1 1   887    0 7.56 44.01 ----- 13.0 12.9 274.8 15.2 21.7 -23.8 20.9 -23.4 21.3 -21.7 22.5 -21.6
2026-04-12T15:57:01.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:57:01.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:57:01.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.581008
2026-04-12T15:57:01.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:57:01.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:57:01.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:57:01.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:57:01.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:57:01.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:56:44', tmtdew=8.8836, humidity=55.8071, cloud=0.0, wind=12.0694, temperature=17.1408, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:56:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:57:01.732 [DEBUG] [Thread-191737] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:57:01.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:57:01.837 [DEBUG] [Thread-191740] [transport.py] [_log()] starting thread (client mode): 0xae5a7460
2026-04-12T15:57:01.837 [DEBUG] [Thread-191740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:57:01.853 [DEBUG] [Thread-191740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:57:01.853 [INFO] [Thread-191740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:57:01.861 [DEBUG] [Thread-191740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] client lang: <none>
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] server lang: <none>
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] kex follows: False
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] Compression: none
2026-04-12T15:57:01.862 [DEBUG] [Thread-191740] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:57:01.921 [DEBUG] [Thread-191740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:57:01.921 [DEBUG] [Thread-191740] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:57:01.922 [DEBUG] [Thread-191740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:57:01.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:57:01.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:57:01.980 [DEBUG] [Thread-191740] [transport.py] [_log()] userauth is OK
2026-04-12T15:57:01.980 [DEBUG] [Thread-191740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:57:01.980 [DEBUG] [Thread-191740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:57:01.980 [DEBUG] [Thread-191740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:57:01.980 [DEBUG] [Thread-191740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:57:01.999 [INFO] [Thread-191740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:57:01.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:57:02.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:57:02.821 [DEBUG] [Thread-191740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:57:02.821 [DEBUG] [Thread-191740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:57:02.869 [DEBUG] [Thread-191740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:57:02.869 [DEBUG] [Thread-191740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:57:02.878 [DEBUG] [Thread-191740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:57:02.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:57:02.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:57:02.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:57:02.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:57:02.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:57:02.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:57:02.915 [DEBUG] [Thread-191740] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:57:10.345 [DEBUG] [Thread-191742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:57:25.398 [DEBUG] [Thread-191743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:57:32.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:57:32.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:57:32.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:57:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 57, 19), 8.47969, 57.1355, 0.0, 14.0807, 16.3039, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:57:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:57:19
2026-04-12T15:57:34.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:57:34.764 [DEBUG] [Thread-191744] [transport.py] [_log()] starting thread (client mode): 0xae5081c0
2026-04-12T15:57:34.764 [DEBUG] [Thread-191744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:57:34.785 [DEBUG] [Thread-191744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:57:34.785 [INFO] [Thread-191744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] client lang: <none>
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] server lang: <none>
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] kex follows: False
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] Compression: none
2026-04-12T15:57:34.788 [DEBUG] [Thread-191744] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:57:34.807 [DEBUG] [Thread-191744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:57:34.807 [DEBUG] [Thread-191744] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:57:34.808 [DEBUG] [Thread-191744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:57:34.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:57:34.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:57:34.810 [DEBUG] [Thread-191744] [transport.py] [_log()] userauth is OK
2026-04-12T15:57:34.810 [DEBUG] [Thread-191744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:57:34.810 [DEBUG] [Thread-191744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:57:34.810 [DEBUG] [Thread-191744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:57:34.811 [DEBUG] [Thread-191744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:57:34.830 [INFO] [Thread-191744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:57:34.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:57:35.456 [DEBUG] [Thread-191744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:57:35.456 [DEBUG] [Thread-191744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:57:35.457 [DEBUG] [Thread-191744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:57:35.497 [DEBUG] [Thread-191744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:57:35.497 [DEBUG] [Thread-191744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:57:35.500 [DEBUG] [Thread-191744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:57:35.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:57:35.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:57:35.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:57:35.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:57:35.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:57:35.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:57:35.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:57:35.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:57:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:57:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.581355 -999.00  +15.60  13.55     61   +8.20 1 2 1 1 1   887    0 7.84 50.03 ----- 12.6 13.6 275.2 17.3 21.6 -24.0 20.9 -23.1 21.4 -20.8 22.6 -20.7
2026-04-12T15:57:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:57:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:57:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.581355
2026-04-12T15:57:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:57:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:57:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:57:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:57:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:57:35.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:57:19', tmtdew=8.47969, humidity=57.1355, cloud=0.0, wind=14.0807, temperature=16.3039, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:57:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:57:35.530 [DEBUG] [Thread-191744] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:57:35.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:57:35.623 [DEBUG] [Thread-191747] [transport.py] [_log()] starting thread (client mode): 0xb0f408b0
2026-04-12T15:57:35.623 [DEBUG] [Thread-191747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:57:35.637 [DEBUG] [Thread-191747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:57:35.638 [INFO] [Thread-191747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:57:35.646 [DEBUG] [Thread-191747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:57:35.646 [DEBUG] [Thread-191747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:57:35.646 [DEBUG] [Thread-191747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:57:35.646 [DEBUG] [Thread-191747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:35.646 [DEBUG] [Thread-191747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:57:35.646 [DEBUG] [Thread-191747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:35.646 [DEBUG] [Thread-191747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] client lang: <none>
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] server lang: <none>
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] kex follows: False
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] Compression: none
2026-04-12T15:57:35.647 [DEBUG] [Thread-191747] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:57:35.703 [DEBUG] [Thread-191747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:57:35.704 [DEBUG] [Thread-191747] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:57:35.704 [DEBUG] [Thread-191747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:57:35.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:57:35.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:57:35.763 [DEBUG] [Thread-191747] [transport.py] [_log()] userauth is OK
2026-04-12T15:57:35.764 [DEBUG] [Thread-191747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:57:35.764 [DEBUG] [Thread-191747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:57:35.764 [DEBUG] [Thread-191747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:57:35.764 [DEBUG] [Thread-191747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:57:35.783 [INFO] [Thread-191747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:57:35.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:57:35.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:57:36.585 [DEBUG] [Thread-191747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:57:36.585 [DEBUG] [Thread-191747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:57:36.633 [DEBUG] [Thread-191747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:57:36.633 [DEBUG] [Thread-191747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:57:36.642 [DEBUG] [Thread-191747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:57:36.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:57:36.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:57:36.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:57:36.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:57:36.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:57:36.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:57:36.675 [DEBUG] [Thread-191747] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:57:40.432 [DEBUG] [Thread-191749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:57:43.568 [DEBUG] [Thread-191750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:57:45.160 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:57:45.161 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:57:55.480 [DEBUG] [Thread-191751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:58:06.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:58:06.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:58:06.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:58:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 57, 55), 9.01289, 55.2104, 0.0, 11.9815, 16.2202, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:58:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:57:55
2026-04-12T15:58:08.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:58:08.577 [DEBUG] [Thread-191752] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff40
2026-04-12T15:58:08.577 [DEBUG] [Thread-191752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:58:08.597 [DEBUG] [Thread-191752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:58:08.597 [INFO] [Thread-191752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] client lang: <none>
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] server lang: <none>
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] kex follows: False
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:58:08.600 [DEBUG] [Thread-191752] [transport.py] [_log()] Compression: none
2026-04-12T15:58:08.601 [DEBUG] [Thread-191752] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:58:08.618 [DEBUG] [Thread-191752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:58:08.619 [DEBUG] [Thread-191752] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:58:08.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:58:08.620 [DEBUG] [Thread-191752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:58:08.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:58:08.622 [DEBUG] [Thread-191752] [transport.py] [_log()] userauth is OK
2026-04-12T15:58:08.622 [DEBUG] [Thread-191752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:58:08.622 [DEBUG] [Thread-191752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:58:08.622 [DEBUG] [Thread-191752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:58:08.622 [DEBUG] [Thread-191752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:58:08.640 [INFO] [Thread-191752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:58:08.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:58:09.256 [DEBUG] [Thread-191752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:58:09.256 [DEBUG] [Thread-191752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:58:09.257 [DEBUG] [Thread-191752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:58:09.297 [DEBUG] [Thread-191752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:58:09.297 [DEBUG] [Thread-191752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:58:09.301 [DEBUG] [Thread-191752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:58:09.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:58:09.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:58:09.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:58:09.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:58:09.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:58:09.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:58:09.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:58:09.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:58:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:58:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.581703 -999.00  +15.80  11.82     63   +8.80 1 1 1 1 1   887    0 8.13 54.66 ----- 13.1 11.8 292.2 16.1 21.7 -23.9 21.0 -23.5 21.4 -22.7 22.8 -20.8
2026-04-12T15:58:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:58:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:58:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.581703
2026-04-12T15:58:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:58:09.326 [DEBUG] [Thread-191752] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:58:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:58:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:58:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:58:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T15:58:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:57:55', tmtdew=9.01289, humidity=55.2104, cloud=0.0, wind=11.9815, temperature=16.2202, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:57:39.139', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:58:09.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:58:09.420 [DEBUG] [Thread-191755] [transport.py] [_log()] starting thread (client mode): 0xae509e40
2026-04-12T15:58:09.420 [DEBUG] [Thread-191755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:58:09.436 [DEBUG] [Thread-191755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:58:09.436 [INFO] [Thread-191755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:58:09.443 [DEBUG] [Thread-191755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] client lang: <none>
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] server lang: <none>
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] kex follows: False
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:58:09.444 [DEBUG] [Thread-191755] [transport.py] [_log()] Compression: none
2026-04-12T15:58:09.445 [DEBUG] [Thread-191755] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:58:09.501 [DEBUG] [Thread-191755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:58:09.502 [DEBUG] [Thread-191755] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:58:09.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:58:09.503 [DEBUG] [Thread-191755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:58:09.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:58:09.557 [DEBUG] [Thread-191755] [transport.py] [_log()] userauth is OK
2026-04-12T15:58:09.558 [DEBUG] [Thread-191755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:58:09.558 [DEBUG] [Thread-191755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:58:09.558 [DEBUG] [Thread-191755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:58:09.558 [DEBUG] [Thread-191755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:58:09.576 [INFO] [Thread-191755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:58:09.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:58:09.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:58:10.387 [DEBUG] [Thread-191755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:58:10.387 [DEBUG] [Thread-191755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:58:10.436 [DEBUG] [Thread-191755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:58:10.436 [DEBUG] [Thread-191755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:58:10.445 [DEBUG] [Thread-191755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:58:10.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:58:10.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:58:10.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:58:10.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:58:10.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:58:10.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:58:10.493 [DEBUG] [Thread-191755] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:58:10.513 [DEBUG] [Thread-191757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:58:25.568 [DEBUG] [Thread-191758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:58:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:58:40.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:58:40.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:58:40.606 [DEBUG] [Thread-191759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:58:41.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 58, 30), 8.9052, 55.5582, 0.0, 13.5691, 16.0378, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:58:41.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:58:30
2026-04-12T15:58:42.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:58:42.409 [DEBUG] [Thread-191760] [transport.py] [_log()] starting thread (client mode): 0xae5a7b80
2026-04-12T15:58:42.409 [DEBUG] [Thread-191760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:58:42.430 [DEBUG] [Thread-191760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:58:42.430 [INFO] [Thread-191760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:42.433 [DEBUG] [Thread-191760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] client lang: <none>
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] server lang: <none>
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] kex follows: False
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] Compression: none
2026-04-12T15:58:42.434 [DEBUG] [Thread-191760] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:58:42.452 [DEBUG] [Thread-191760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:58:42.452 [DEBUG] [Thread-191760] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:58:42.453 [DEBUG] [Thread-191760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:58:42.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:58:42.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:58:42.454 [DEBUG] [Thread-191760] [transport.py] [_log()] userauth is OK
2026-04-12T15:58:42.455 [DEBUG] [Thread-191760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:58:42.455 [DEBUG] [Thread-191760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:58:42.455 [DEBUG] [Thread-191760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:58:42.455 [DEBUG] [Thread-191760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:58:42.470 [INFO] [Thread-191760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:58:42.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:58:43.111 [DEBUG] [Thread-191760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:58:43.112 [DEBUG] [Thread-191760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:58:43.112 [DEBUG] [Thread-191760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:58:43.152 [DEBUG] [Thread-191760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:58:43.152 [DEBUG] [Thread-191760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:58:43.155 [DEBUG] [Thread-191760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:58:43.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:58:43.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:58:43.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:58:43.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:58:43.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:58:43.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:58:43.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:58:43.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:58:43.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:58:43.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.582050 -999.00  +16.00  10.95     64   +9.20 1 2 1 1 1   887    0 7.88 51.57 ----- 6.9 10.9 288.2 18.0 21.8 -23.5 20.9 -24.1 21.6 -20.3 22.8 -21.8
2026-04-12T15:58:43.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:58:43.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:58:43.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.582050
2026-04-12T15:58:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:58:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:58:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:58:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:58:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:58:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:58:30', tmtdew=8.9052, humidity=55.5582, cloud=0.0, wind=13.5691, temperature=16.0378, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:58:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:58:43.180 [DEBUG] [Thread-191760] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:58:43.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:58:43.269 [DEBUG] [Thread-191763] [transport.py] [_log()] starting thread (client mode): 0xb0feb5b0
2026-04-12T15:58:43.269 [DEBUG] [Thread-191763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:58:43.284 [DEBUG] [Thread-191763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:58:43.284 [INFO] [Thread-191763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:58:43.291 [DEBUG] [Thread-191763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] client lang: <none>
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] server lang: <none>
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] kex follows: False
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] Compression: none
2026-04-12T15:58:43.292 [DEBUG] [Thread-191763] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:58:43.348 [DEBUG] [Thread-191763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:58:43.349 [DEBUG] [Thread-191763] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:58:43.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:58:43.350 [DEBUG] [Thread-191763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:58:43.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:58:43.405 [DEBUG] [Thread-191763] [transport.py] [_log()] userauth is OK
2026-04-12T15:58:43.405 [DEBUG] [Thread-191763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:58:43.405 [DEBUG] [Thread-191763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:58:43.406 [DEBUG] [Thread-191763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:58:43.406 [DEBUG] [Thread-191763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:58:43.425 [INFO] [Thread-191763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:58:43.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:58:43.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:58:43.633 [DEBUG] [Thread-191765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:58:44.217 [DEBUG] [Thread-191763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:58:44.217 [DEBUG] [Thread-191763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:58:44.265 [DEBUG] [Thread-191763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:58:44.265 [DEBUG] [Thread-191763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:58:44.274 [DEBUG] [Thread-191763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:58:44.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:58:44.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:58:44.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:58:44.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:58:44.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:58:44.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:58:44.306 [DEBUG] [Thread-191763] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:58:45.303 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:58:45.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:58:55.645 [DEBUG] [Thread-191766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:59:10.707 [DEBUG] [Thread-191767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:59:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:59:14.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:59:14.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:59:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 59, 6), 8.42827, 57.3809, 0.0, 13.4104, 16.0709, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:59:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:59:06
2026-04-12T15:59:16.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:59:16.168 [DEBUG] [Thread-191768] [transport.py] [_log()] starting thread (client mode): 0xae50ab00
2026-04-12T15:59:16.168 [DEBUG] [Thread-191768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:59:16.188 [DEBUG] [Thread-191768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:59:16.188 [INFO] [Thread-191768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] client lang: <none>
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] server lang: <none>
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] kex follows: False
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:59:16.192 [DEBUG] [Thread-191768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:59:16.193 [DEBUG] [Thread-191768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:59:16.193 [DEBUG] [Thread-191768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:59:16.193 [DEBUG] [Thread-191768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:59:16.193 [DEBUG] [Thread-191768] [transport.py] [_log()] Compression: none
2026-04-12T15:59:16.193 [DEBUG] [Thread-191768] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:59:16.210 [DEBUG] [Thread-191768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:59:16.211 [DEBUG] [Thread-191768] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:59:16.211 [DEBUG] [Thread-191768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:59:16.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:59:16.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:59:16.213 [DEBUG] [Thread-191768] [transport.py] [_log()] userauth is OK
2026-04-12T15:59:16.214 [DEBUG] [Thread-191768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:59:16.214 [DEBUG] [Thread-191768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:59:16.214 [DEBUG] [Thread-191768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:59:16.214 [DEBUG] [Thread-191768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:59:16.239 [INFO] [Thread-191768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:59:16.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:59:16.892 [DEBUG] [Thread-191768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:59:16.892 [DEBUG] [Thread-191768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:59:16.893 [DEBUG] [Thread-191768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:59:16.933 [DEBUG] [Thread-191768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:59:16.933 [DEBUG] [Thread-191768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:59:16.937 [DEBUG] [Thread-191768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:59:16.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:59:16.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:59:16.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:59:16.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:59:16.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:59:16.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:59:16.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:59:16.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:59:16.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:59:16.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.582397 -999.00  +16.00  13.68     62   +8.80 1 1 1 1 1   887    0 7.86 50.82 ----- 14.2 13.7 282.2 15.8 21.8 -25.5 20.9 -24.8 21.5 -22.2 22.8 -22.8
2026-04-12T15:59:16.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:59:16.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:59:16.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.582397
2026-04-12T15:59:16.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:59:16.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:59:16.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:59:16.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:59:16.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T15:59:16.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:59:06', tmtdew=8.42827, humidity=57.3809, cloud=0.0, wind=13.4104, temperature=16.0709, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:58:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:59:16.965 [DEBUG] [Thread-191768] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:59:17.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:59:17.058 [DEBUG] [Thread-191771] [transport.py] [_log()] starting thread (client mode): 0xae5b6f20
2026-04-12T15:59:17.058 [DEBUG] [Thread-191771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:59:17.073 [DEBUG] [Thread-191771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:59:17.073 [INFO] [Thread-191771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] client lang: <none>
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] server lang: <none>
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] kex follows: False
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:59:17.081 [DEBUG] [Thread-191771] [transport.py] [_log()] Compression: none
2026-04-12T15:59:17.082 [DEBUG] [Thread-191771] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:59:17.140 [DEBUG] [Thread-191771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:59:17.141 [DEBUG] [Thread-191771] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:59:17.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:59:17.142 [DEBUG] [Thread-191771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:59:17.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:59:17.200 [DEBUG] [Thread-191771] [transport.py] [_log()] userauth is OK
2026-04-12T15:59:17.200 [DEBUG] [Thread-191771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:59:17.200 [DEBUG] [Thread-191771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:59:17.200 [DEBUG] [Thread-191771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:59:17.200 [DEBUG] [Thread-191771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:59:17.222 [INFO] [Thread-191771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:59:17.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:59:17.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:59:18.026 [DEBUG] [Thread-191771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:59:18.027 [DEBUG] [Thread-191771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:59:18.076 [DEBUG] [Thread-191771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:59:18.076 [DEBUG] [Thread-191771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:59:18.086 [DEBUG] [Thread-191771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:59:18.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:59: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')
2026-04-12T15:59:18.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:59:18.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:59:18.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:59:18.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:59:18.139 [DEBUG] [Thread-191771] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:59:25.746 [DEBUG] [Thread-191773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:59:40.797 [DEBUG] [Thread-191774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:59:43.702 [DEBUG] [Thread-191775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:59:45.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:59:45.455 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T15:59:48.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T15:59:48.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T15:59:48.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T15:59:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 59, 41), 8.43507, 57.4632, 0.0, 14.927, 16.8748, 0, 0, 0, 2, 0, 0),)
2026-04-12T15:59:49.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:59:41
2026-04-12T15:59:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T15:59:49.948 [DEBUG] [Thread-191776] [transport.py] [_log()] starting thread (client mode): 0xae5b58a0
2026-04-12T15:59:49.948 [DEBUG] [Thread-191776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:59:49.970 [DEBUG] [Thread-191776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T15:59:49.970 [INFO] [Thread-191776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] client lang: <none>
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] server lang: <none>
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] kex follows: False
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:59:49.974 [DEBUG] [Thread-191776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:59:49.975 [DEBUG] [Thread-191776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:59:49.975 [DEBUG] [Thread-191776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:59:49.975 [DEBUG] [Thread-191776] [transport.py] [_log()] Compression: none
2026-04-12T15:59:49.975 [DEBUG] [Thread-191776] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:59:49.992 [DEBUG] [Thread-191776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:59:49.992 [DEBUG] [Thread-191776] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:59:49.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T15:59:49.993 [DEBUG] [Thread-191776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T15:59:49.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:59:49.995 [DEBUG] [Thread-191776] [transport.py] [_log()] userauth is OK
2026-04-12T15:59:49.995 [DEBUG] [Thread-191776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:59:49.995 [DEBUG] [Thread-191776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:59:49.995 [DEBUG] [Thread-191776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T15:59:49.995 [DEBUG] [Thread-191776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:59:50.016 [INFO] [Thread-191776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:59:50.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:59:50.652 [DEBUG] [Thread-191776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:59:50.652 [DEBUG] [Thread-191776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:59:50.653 [DEBUG] [Thread-191776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T15:59:50.694 [DEBUG] [Thread-191776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:59:50.694 [DEBUG] [Thread-191776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:59:50.697 [DEBUG] [Thread-191776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:59:50.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:59:50.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T15:59:50.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T15:59:50.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T15:59:50.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:59:50.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T15:59:50.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:59:50.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:59:50.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T15:59:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.583092 -999.00  +15.60   9.85     62   +8.60 1 2 1 1 1   887    0 8.09 55.79 ----- 12.0 9.8 294.0 13.5 21.8 -24.7 21.0 -24.3 21.7 -21.5 22.9 -21.9
2026-04-12T15:59:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T15:59:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T15:59:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.583092
2026-04-12T15:59:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T15:59:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T15:59:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T15:59:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T15:59:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T15:59:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:59:41', tmtdew=8.43507, humidity=57.4632, cloud=0.0, wind=14.927, temperature=16.8748, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:59:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T15:59:50.720 [DEBUG] [Thread-191776] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:59:50.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T15:59:50.815 [DEBUG] [Thread-191779] [transport.py] [_log()] starting thread (client mode): 0xb0f41ff0
2026-04-12T15:59:50.815 [DEBUG] [Thread-191779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T15:59:50.829 [DEBUG] [Thread-191779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T15:59:50.829 [INFO] [Thread-191779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] client lang: <none>
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] server lang: <none>
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] kex follows: False
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T15:59:50.837 [DEBUG] [Thread-191779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T15:59:50.838 [DEBUG] [Thread-191779] [transport.py] [_log()] Compression: none
2026-04-12T15:59:50.838 [DEBUG] [Thread-191779] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T15:59:50.894 [DEBUG] [Thread-191779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T15:59:50.894 [DEBUG] [Thread-191779] [transport.py] [_log()] Switch to new keys ...
2026-04-12T15:59:50.895 [DEBUG] [Thread-191779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T15:59:50.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T15:59:50.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T15:59:50.955 [DEBUG] [Thread-191779] [transport.py] [_log()] userauth is OK
2026-04-12T15:59:50.955 [DEBUG] [Thread-191779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T15:59:50.955 [DEBUG] [Thread-191779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T15:59:50.955 [DEBUG] [Thread-191779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T15:59:50.955 [DEBUG] [Thread-191779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T15:59:50.978 [INFO] [Thread-191779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T15:59:50.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T15:59:50.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T15:59:51.809 [DEBUG] [Thread-191779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T15:59:51.809 [DEBUG] [Thread-191779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T15:59:51.857 [DEBUG] [Thread-191779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T15:59:51.857 [DEBUG] [Thread-191779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T15:59:51.866 [DEBUG] [Thread-191779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T15:59:51.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T15:59:51.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T15:59:51.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T15:59:51.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T15:59:51.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T15:59:51.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T15:59:51.900 [DEBUG] [Thread-191779] [transport.py] [_log()] EOF in transport thread
2026-04-12T15:59:55.831 [DEBUG] [Thread-191781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:00:10.888 [DEBUG] [Thread-191782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:00:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:00:21.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:00:21.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:00:23.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 15, 59, 41), 8.43507, 57.4632, 0.0, 14.927, 16.8748, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:00:23.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 15:59:41
2026-04-12T16:00:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:00:23.768 [DEBUG] [Thread-191783] [transport.py] [_log()] starting thread (client mode): 0xae50bc10
2026-04-12T16:00:23.768 [DEBUG] [Thread-191783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:00:23.790 [DEBUG] [Thread-191783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:00:23.790 [INFO] [Thread-191783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:00:23.793 [DEBUG] [Thread-191783] [transport.py] [_log()] client lang: <none>
2026-04-12T16:00:23.794 [DEBUG] [Thread-191783] [transport.py] [_log()] server lang: <none>
2026-04-12T16:00:23.794 [DEBUG] [Thread-191783] [transport.py] [_log()] kex follows: False
2026-04-12T16:00:23.794 [DEBUG] [Thread-191783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:00:23.794 [DEBUG] [Thread-191783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:00:23.794 [DEBUG] [Thread-191783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:00:23.794 [DEBUG] [Thread-191783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:00:23.803 [DEBUG] [Thread-191783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:00:23.803 [DEBUG] [Thread-191783] [transport.py] [_log()] Compression: none
2026-04-12T16:00:23.803 [DEBUG] [Thread-191783] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:00:23.822 [DEBUG] [Thread-191783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:00:23.822 [DEBUG] [Thread-191783] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:00:23.823 [DEBUG] [Thread-191783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:00:23.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:00:23.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:00:23.826 [DEBUG] [Thread-191783] [transport.py] [_log()] userauth is OK
2026-04-12T16:00:23.826 [DEBUG] [Thread-191783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:00:23.826 [DEBUG] [Thread-191783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:00:23.826 [DEBUG] [Thread-191783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:00:23.826 [DEBUG] [Thread-191783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:00:23.852 [INFO] [Thread-191783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:00:23.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:00:25.928 [DEBUG] [Thread-191785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:00:33.463 [DEBUG] [Thread-191783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:00:33.464 [DEBUG] [Thread-191783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:00:33.464 [DEBUG] [Thread-191783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:00:33.504 [DEBUG] [Thread-191783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:00:33.505 [DEBUG] [Thread-191783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:00:33.507 [DEBUG] [Thread-191783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:00:33.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:00:33.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:00:33.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:00:33.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:00:33.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:00:33.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:00:33.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:00:33.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:00:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:00:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.583092 -999.00  +15.60   9.85     62   +8.60 1 2 1 1 1   887    0 8.09 55.79 ----- 12.0 9.8 294.0 13.5 21.8 -24.7 21.0 -24.3 21.7 -21.5 22.9 -21.9
2026-04-12T16:00:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:00:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:00:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.583092
2026-04-12T16:00:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:00:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:00:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:00:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:00:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:00:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T15:59:41', tmtdew=8.43507, humidity=57.4632, cloud=0.0, wind=14.927, temperature=16.8748, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T13:59:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:00:33.573 [DEBUG] [Thread-191783] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:00:33.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:00:33.674 [DEBUG] [Thread-191787] [transport.py] [_log()] starting thread (client mode): 0xae5f2e30
2026-04-12T16:00:33.674 [DEBUG] [Thread-191787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:00:33.689 [DEBUG] [Thread-191787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:00:33.689 [INFO] [Thread-191787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] client lang: <none>
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] server lang: <none>
2026-04-12T16:00:33.697 [DEBUG] [Thread-191787] [transport.py] [_log()] kex follows: False
2026-04-12T16:00:33.698 [DEBUG] [Thread-191787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:00:33.698 [DEBUG] [Thread-191787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:00:33.698 [DEBUG] [Thread-191787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:00:33.698 [DEBUG] [Thread-191787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:00:33.698 [DEBUG] [Thread-191787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:00:33.698 [DEBUG] [Thread-191787] [transport.py] [_log()] Compression: none
2026-04-12T16:00:33.698 [DEBUG] [Thread-191787] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:00:33.753 [DEBUG] [Thread-191787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:00:33.753 [DEBUG] [Thread-191787] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:00:33.754 [DEBUG] [Thread-191787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:00:33.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:00:33.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:00:33.810 [DEBUG] [Thread-191787] [transport.py] [_log()] userauth is OK
2026-04-12T16:00:33.810 [DEBUG] [Thread-191787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:00:33.810 [DEBUG] [Thread-191787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:00:33.810 [DEBUG] [Thread-191787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:00:33.810 [DEBUG] [Thread-191787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:00:33.829 [INFO] [Thread-191787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:00:33.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:00:33.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:00:34.646 [DEBUG] [Thread-191787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:00:34.646 [DEBUG] [Thread-191787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:00:34.694 [DEBUG] [Thread-191787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:00:34.694 [DEBUG] [Thread-191787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:00:34.703 [DEBUG] [Thread-191787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:00:34.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:00:34.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:00:34.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:00:34.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:00:34.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:00:34.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:00:34.735 [DEBUG] [Thread-191787] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:00:40.966 [DEBUG] [Thread-191789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:00:43.759 [DEBUG] [Thread-191790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:00:45.594 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:00:45.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:00:56.003 [DEBUG] [Thread-191791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:01:04.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:01:04.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:01:04.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:01:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 0, 52), 8.55049, 56.9655, 0.0, 14.292, 16.6752, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:01:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:00:52
2026-04-12T16:01:06.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:01:06.528 [DEBUG] [Thread-191792] [transport.py] [_log()] starting thread (client mode): 0xae5f05e0
2026-04-12T16:01:06.528 [DEBUG] [Thread-191792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:01:06.550 [DEBUG] [Thread-191792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:01:06.550 [INFO] [Thread-191792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] client lang: <none>
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] server lang: <none>
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] kex follows: False
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:01:06.552 [DEBUG] [Thread-191792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:01:06.553 [DEBUG] [Thread-191792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:01:06.553 [DEBUG] [Thread-191792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:01:06.553 [DEBUG] [Thread-191792] [transport.py] [_log()] Compression: none
2026-04-12T16:01:06.553 [DEBUG] [Thread-191792] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:01:06.570 [DEBUG] [Thread-191792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:01:06.570 [DEBUG] [Thread-191792] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:01:06.571 [DEBUG] [Thread-191792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:01:06.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:01:06.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:01:06.573 [DEBUG] [Thread-191792] [transport.py] [_log()] userauth is OK
2026-04-12T16:01:06.573 [DEBUG] [Thread-191792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:01:06.573 [DEBUG] [Thread-191792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:01:06.573 [DEBUG] [Thread-191792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:01:06.573 [DEBUG] [Thread-191792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:01:06.593 [INFO] [Thread-191792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:01:06.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:01:07.185 [DEBUG] [Thread-191792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:01:07.185 [DEBUG] [Thread-191792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:01:07.186 [DEBUG] [Thread-191792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:01:07.226 [DEBUG] [Thread-191792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:01:07.226 [DEBUG] [Thread-191792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:01:07.229 [DEBUG] [Thread-191792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:01:07.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:01:07.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:01:07.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:01:07.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:01:07.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:01:07.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:01:07.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:01:07.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:01:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:01:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.583786 -999.00  +16.00   6.87     64   +9.20 1 2 1 1 1   887    0 8.16 55.29 ----- 7.2 6.9 261.8 9.5 21.9 -25.1 21.1 -24.4 21.9 -20.9 23.1 -23.0
2026-04-12T16:01:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:01:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:01:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.583786
2026-04-12T16:01:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:01:07.255 [DEBUG] [Thread-191792] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:01:07.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:01:07.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:01:07.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:01:07.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:01:07.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:00:52', tmtdew=8.55049, humidity=56.9655, cloud=0.0, wind=14.292, temperature=16.6752, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:00:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:01:07.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:01:07.354 [DEBUG] [Thread-191795] [transport.py] [_log()] starting thread (client mode): 0xae5f3c10
2026-04-12T16:01:07.354 [DEBUG] [Thread-191795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:01:07.368 [DEBUG] [Thread-191795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:01:07.369 [INFO] [Thread-191795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:01:07.376 [DEBUG] [Thread-191795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:01:07.376 [DEBUG] [Thread-191795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:01:07.376 [DEBUG] [Thread-191795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] client lang: <none>
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] server lang: <none>
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] kex follows: False
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] Compression: none
2026-04-12T16:01:07.377 [DEBUG] [Thread-191795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:01:07.437 [DEBUG] [Thread-191795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:01:07.438 [DEBUG] [Thread-191795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:01:07.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:01:07.439 [DEBUG] [Thread-191795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:01:07.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:01:07.497 [DEBUG] [Thread-191795] [transport.py] [_log()] userauth is OK
2026-04-12T16:01:07.497 [DEBUG] [Thread-191795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:01:07.497 [DEBUG] [Thread-191795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:01:07.498 [DEBUG] [Thread-191795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:01:07.498 [DEBUG] [Thread-191795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:01:07.524 [INFO] [Thread-191795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:01:07.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:01:07.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:01:08.338 [DEBUG] [Thread-191795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:01:08.338 [DEBUG] [Thread-191795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:01:08.386 [DEBUG] [Thread-191795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:01:08.386 [DEBUG] [Thread-191795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:01:08.395 [DEBUG] [Thread-191795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:01:08.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:01:08.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')
2026-04-12T16:01: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') -> 00000000
2026-04-12T16:01:08.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:01:08.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:01:08.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:01:08.433 [DEBUG] [Thread-191795] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:01:11.042 [DEBUG] [Thread-191797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:01:26.097 [DEBUG] [Thread-191798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:01:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:01:38.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:01:38.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:01:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 1, 28), 7.97745, 59.2615, 0.0, 8.99964, 16.1042, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:01:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:01:28
2026-04-12T16:01:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:01:40.260 [DEBUG] [Thread-191799] [transport.py] [_log()] starting thread (client mode): 0xae5f0d30
2026-04-12T16:01:40.260 [DEBUG] [Thread-191799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:01:40.280 [DEBUG] [Thread-191799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:01:40.280 [INFO] [Thread-191799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:01:40.283 [DEBUG] [Thread-191799] [transport.py] [_log()] client lang: <none>
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] server lang: <none>
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] kex follows: False
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] Compression: none
2026-04-12T16:01:40.284 [DEBUG] [Thread-191799] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:01:40.301 [DEBUG] [Thread-191799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:01:40.302 [DEBUG] [Thread-191799] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:01:40.302 [DEBUG] [Thread-191799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:01:40.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:01:40.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:01:40.304 [DEBUG] [Thread-191799] [transport.py] [_log()] userauth is OK
2026-04-12T16:01:40.305 [DEBUG] [Thread-191799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:01:40.305 [DEBUG] [Thread-191799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:01:40.305 [DEBUG] [Thread-191799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:01:40.305 [DEBUG] [Thread-191799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:01:40.323 [INFO] [Thread-191799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:01:40.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:01:41.067 [DEBUG] [Thread-191799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:01:41.068 [DEBUG] [Thread-191799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:01:41.068 [DEBUG] [Thread-191799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:01:41.109 [DEBUG] [Thread-191799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:01:41.109 [DEBUG] [Thread-191799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:01:41.113 [DEBUG] [Thread-191799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:01:41.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:01:41.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:01:41.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:01:41.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:01:41.135 [DEBUG] [Thread-191801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:01:41.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:01:41.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:01:41.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:01:41.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:01:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:01:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.584133 -999.00  +16.00   9.52     65   +9.50 1 2 1 1 1   887    0 7.84 48.98 ----- 10.0 9.5 259.8 10.6 22.0 -24.7 21.2 -24.4 21.9 -21.4 23.1 -23.7
2026-04-12T16:01:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:01:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:01:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.584133
2026-04-12T16:01:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:01:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:01:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:01:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:01:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:01:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:01:28', tmtdew=7.97745, humidity=59.2615, cloud=0.0, wind=8.99964, temperature=16.1042, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:01:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:01:41.142 [DEBUG] [Thread-191799] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:01:41.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:01:41.237 [DEBUG] [Thread-191802] [transport.py] [_log()] starting thread (client mode): 0xb0fe8b80
2026-04-12T16:01:41.237 [DEBUG] [Thread-191802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:01:41.252 [DEBUG] [Thread-191802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:01:41.252 [INFO] [Thread-191802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:01:41.260 [DEBUG] [Thread-191802] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:01:41.261 [DEBUG] [Thread-191802] [transport.py] [_log()] client lang: <none>
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] server lang: <none>
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] kex follows: False
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:01:41.262 [DEBUG] [Thread-191802] [transport.py] [_log()] Compression: none
2026-04-12T16:01:41.263 [DEBUG] [Thread-191802] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:01:41.320 [DEBUG] [Thread-191802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:01:41.321 [DEBUG] [Thread-191802] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:01:41.322 [DEBUG] [Thread-191802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:01:41.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:01:41.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:01:41.380 [DEBUG] [Thread-191802] [transport.py] [_log()] userauth is OK
2026-04-12T16:01:41.380 [DEBUG] [Thread-191802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:01:41.381 [DEBUG] [Thread-191802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:01:41.381 [DEBUG] [Thread-191802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:01:41.381 [DEBUG] [Thread-191802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:01:41.400 [INFO] [Thread-191802] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:01:41.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:01:41.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:01:42.229 [DEBUG] [Thread-191802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:01:42.229 [DEBUG] [Thread-191802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:01:42.277 [DEBUG] [Thread-191802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:01:42.277 [DEBUG] [Thread-191802] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:01:42.286 [DEBUG] [Thread-191802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:01:42.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:01:42.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:01:42.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:01:42.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:01:42.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:01:42.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:01:42.324 [DEBUG] [Thread-191802] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:01:43.796 [DEBUG] [Thread-191804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:01:45.738 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:01:45.740 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:01:56.171 [DEBUG] [Thread-191805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:11.219 [DEBUG] [Thread-191806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:12.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:02:12.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:02:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:02:13.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 2, 3), 7.95346, 59.3607, 0.0, 9.37008, 16.1204, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:02:13.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:02:03
2026-04-12T16:02:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:02:14.129 [DEBUG] [Thread-191807] [transport.py] [_log()] starting thread (client mode): 0xae5f1ba0
2026-04-12T16:02:14.129 [DEBUG] [Thread-191807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:02:14.142 [DEBUG] [Thread-191807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:02:14.142 [INFO] [Thread-191807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] client lang: <none>
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] server lang: <none>
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] kex follows: False
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:02:14.143 [DEBUG] [Thread-191807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:02:14.144 [DEBUG] [Thread-191807] [transport.py] [_log()] Compression: none
2026-04-12T16:02:14.144 [DEBUG] [Thread-191807] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:02:14.151 [DEBUG] [Thread-191807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:02:14.152 [DEBUG] [Thread-191807] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:02:14.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:02:14.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:02:14.153 [DEBUG] [Thread-191807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:02:14.154 [DEBUG] [Thread-191807] [transport.py] [_log()] userauth is OK
2026-04-12T16:02:14.154 [DEBUG] [Thread-191807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:02:14.154 [DEBUG] [Thread-191807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:02:14.154 [DEBUG] [Thread-191807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:02:14.154 [DEBUG] [Thread-191807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:02:14.176 [INFO] [Thread-191807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:02:14.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:02:14.770 [DEBUG] [Thread-191807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:02:14.771 [DEBUG] [Thread-191807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:02:14.771 [DEBUG] [Thread-191807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:02:14.812 [DEBUG] [Thread-191807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:02:14.812 [DEBUG] [Thread-191807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:02:14.816 [DEBUG] [Thread-191807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:02:14.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:02:14.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:02:14.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:02:14.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:02:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:02:14.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:02:14.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:02:14.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:02:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:02:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.584828 -999.00  +16.10  10.81     66   +9.80 1 2 1 1 1   887    0 7.82 48.70 ----- 10.1 10.8 263.6 11.9 22.0 -25.8 21.2 -24.6 22.1 -20.5 23.2 -23.3
2026-04-12T16:02:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:02:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:02:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.584828
2026-04-12T16:02:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:02:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:02:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:02:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:02:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:02:14.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:02:03', tmtdew=7.95346, humidity=59.3607, cloud=0.0, wind=9.37008, temperature=16.1204, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:02:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:02:14.841 [DEBUG] [Thread-191807] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:02:14.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:02:14.945 [DEBUG] [Thread-191810] [transport.py] [_log()] starting thread (client mode): 0xae5f1cf0
2026-04-12T16:02:14.945 [DEBUG] [Thread-191810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:02:14.960 [DEBUG] [Thread-191810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:02:14.960 [INFO] [Thread-191810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:02:14.967 [DEBUG] [Thread-191810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:02:14.967 [DEBUG] [Thread-191810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] client lang: <none>
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] server lang: <none>
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] kex follows: False
2026-04-12T16:02:14.968 [DEBUG] [Thread-191810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:02:14.969 [DEBUG] [Thread-191810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:02:14.969 [DEBUG] [Thread-191810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:02:14.969 [DEBUG] [Thread-191810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:02:14.969 [DEBUG] [Thread-191810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:02:14.969 [DEBUG] [Thread-191810] [transport.py] [_log()] Compression: none
2026-04-12T16:02:14.969 [DEBUG] [Thread-191810] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:02:15.027 [DEBUG] [Thread-191810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:02:15.028 [DEBUG] [Thread-191810] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:02:15.028 [DEBUG] [Thread-191810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:02:15.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:02:15.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:02:15.083 [DEBUG] [Thread-191810] [transport.py] [_log()] userauth is OK
2026-04-12T16:02:15.083 [DEBUG] [Thread-191810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:02:15.083 [DEBUG] [Thread-191810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:02:15.083 [DEBUG] [Thread-191810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:02:15.083 [DEBUG] [Thread-191810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:02:15.096 [INFO] [Thread-191810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:02:15.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:02:15.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:02:15.909 [DEBUG] [Thread-191810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:02:15.910 [DEBUG] [Thread-191810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:02:15.957 [DEBUG] [Thread-191810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:02:15.958 [DEBUG] [Thread-191810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:02:15.967 [DEBUG] [Thread-191810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:02:15.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:02:15.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:02:15.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:02:15.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:02:15.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:02:15.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:02:16.005 [DEBUG] [Thread-191810] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:02:26.257 [DEBUG] [Thread-191812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:41.314 [DEBUG] [Thread-191814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:43.851 [DEBUG] [Thread-191815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:45.882 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:45.883 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:46.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:02:46.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:02:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:02:46.852 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:02:47.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 2, 38), 8.2282, 58.2574, 0.0, 15.9854, 16.8071, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:02:47.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:02:38
2026-04-12T16:02:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:02:47.884 [DEBUG] [Thread-191816] [transport.py] [_log()] starting thread (client mode): 0xae5f1b10
2026-04-12T16:02:47.884 [DEBUG] [Thread-191816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:02:47.904 [DEBUG] [Thread-191816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:02:47.904 [INFO] [Thread-191816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] client lang: <none>
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] server lang: <none>
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] kex follows: False
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] Compression: none
2026-04-12T16:02:47.907 [DEBUG] [Thread-191816] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:02:47.924 [DEBUG] [Thread-191816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:02:47.924 [DEBUG] [Thread-191816] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:02:47.925 [DEBUG] [Thread-191816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:02:47.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:02:47.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:02:47.927 [DEBUG] [Thread-191816] [transport.py] [_log()] userauth is OK
2026-04-12T16:02:47.927 [DEBUG] [Thread-191816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:02:47.927 [DEBUG] [Thread-191816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:02:47.927 [DEBUG] [Thread-191816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:02:47.927 [DEBUG] [Thread-191816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:02:47.950 [INFO] [Thread-191816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:02:47.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:02:48.551 [DEBUG] [Thread-191816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:02:48.551 [DEBUG] [Thread-191816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:02:48.552 [DEBUG] [Thread-191816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:02:48.592 [DEBUG] [Thread-191816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:02:48.592 [DEBUG] [Thread-191816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:02:48.596 [DEBUG] [Thread-191816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:02:48.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:02:48.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:02:48.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:02:48.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:02:48.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:02:48.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:02:48.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:02:48.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:02:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:02:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.585175 -999.00  +16.10  14.64     64   +9.40 1 2 1 1 1   887    0 7.77 47.59 ----- 14.9 14.6 294.2 18.8 22.1 -26.5 21.2 -24.6 21.9 -21.2 23.2 -23.1
2026-04-12T16:02:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:02:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:02:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.585175
2026-04-12T16:02:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:02:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:02:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:02:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:02:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:02:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:02:38', tmtdew=8.2282, humidity=58.2574, cloud=0.0, wind=15.9854, temperature=16.8071, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:02:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:02:48.633 [DEBUG] [Thread-191816] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:02:48.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:02:48.728 [DEBUG] [Thread-191819] [transport.py] [_log()] starting thread (client mode): 0xae5f1db0
2026-04-12T16:02:48.728 [DEBUG] [Thread-191819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:02:48.743 [DEBUG] [Thread-191819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:02:48.743 [INFO] [Thread-191819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] client lang: <none>
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] server lang: <none>
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] kex follows: False
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] Compression: none
2026-04-12T16:02:48.750 [DEBUG] [Thread-191819] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:02:48.811 [DEBUG] [Thread-191819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:02:48.812 [DEBUG] [Thread-191819] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:02:48.812 [DEBUG] [Thread-191819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:02:48.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:02:48.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:02:48.870 [DEBUG] [Thread-191819] [transport.py] [_log()] userauth is OK
2026-04-12T16:02:48.870 [DEBUG] [Thread-191819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:02:48.870 [DEBUG] [Thread-191819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:02:48.871 [DEBUG] [Thread-191819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:02:48.871 [DEBUG] [Thread-191819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:02:48.894 [INFO] [Thread-191819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:02:48.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:02:48.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:02:49.750 [DEBUG] [Thread-191819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:02:49.750 [DEBUG] [Thread-191819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:02:49.798 [DEBUG] [Thread-191819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:02:49.798 [DEBUG] [Thread-191819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:02:49.807 [DEBUG] [Thread-191819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:02:49.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:02:49.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:02:49.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:02:49.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:02:49.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:02:49.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:02:49.844 [DEBUG] [Thread-191819] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:02:56.354 [DEBUG] [Thread-191821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:11.407 [DEBUG] [Thread-191822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:03:19.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:03:19.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:03:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 2, 38), 8.2282, 58.2574, 0.0, 15.9854, 16.8071, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:03:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:02:38
2026-04-12T16:03:21.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:03:21.672 [DEBUG] [Thread-191823] [transport.py] [_log()] starting thread (client mode): 0xae5f0070
2026-04-12T16:03:21.673 [DEBUG] [Thread-191823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:03:21.693 [DEBUG] [Thread-191823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:03:21.693 [INFO] [Thread-191823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:03:21.694 [DEBUG] [Thread-191823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] client lang: <none>
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] server lang: <none>
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] kex follows: False
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] Compression: none
2026-04-12T16:03:21.695 [DEBUG] [Thread-191823] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:03:21.708 [DEBUG] [Thread-191823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:03:21.709 [DEBUG] [Thread-191823] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:03:21.709 [DEBUG] [Thread-191823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:03:21.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:03:21.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:03:21.711 [DEBUG] [Thread-191823] [transport.py] [_log()] userauth is OK
2026-04-12T16:03:21.711 [DEBUG] [Thread-191823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:03:21.712 [DEBUG] [Thread-191823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:03:21.712 [DEBUG] [Thread-191823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:03:21.712 [DEBUG] [Thread-191823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:03:21.733 [INFO] [Thread-191823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:03:21.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:03:22.375 [DEBUG] [Thread-191823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:03:22.375 [DEBUG] [Thread-191823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:03:22.375 [DEBUG] [Thread-191823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:03:22.416 [DEBUG] [Thread-191823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:03:22.416 [DEBUG] [Thread-191823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:03:22.420 [DEBUG] [Thread-191823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:03:22.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:03:22.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:03:22.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:03:22.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:03:22.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:03:22.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:03:22.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:03:22.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:03:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:03:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.585522 -999.00  +15.90  10.10     64   +9.10 1 1 1 1 1   887    0 7.80 42.16 ----- 9.3 10.1 285.4 13.7 22.0 -26.1 21.2 -24.3 21.8 -23.7 23.2 -22.5
2026-04-12T16:03:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:03:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:03:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.585522
2026-04-12T16:03:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:03:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:03:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:03:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:03:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:03:22.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:02:38', tmtdew=8.2282, humidity=58.2574, cloud=0.0, wind=15.9854, temperature=16.8071, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:03:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:03:22.447 [DEBUG] [Thread-191823] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:03:22.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:03:22.550 [DEBUG] [Thread-191826] [transport.py] [_log()] starting thread (client mode): 0xb0febb80
2026-04-12T16:03:22.550 [DEBUG] [Thread-191826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:03:22.564 [DEBUG] [Thread-191826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:03:22.564 [INFO] [Thread-191826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] client lang: <none>
2026-04-12T16:03:22.572 [DEBUG] [Thread-191826] [transport.py] [_log()] server lang: <none>
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] kex follows: False
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] Compression: none
2026-04-12T16:03:22.573 [DEBUG] [Thread-191826] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:03:22.632 [DEBUG] [Thread-191826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:03:22.633 [DEBUG] [Thread-191826] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:03:22.634 [DEBUG] [Thread-191826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:03:22.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:03:22.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:03:22.689 [DEBUG] [Thread-191826] [transport.py] [_log()] userauth is OK
2026-04-12T16:03:22.690 [DEBUG] [Thread-191826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:03:22.690 [DEBUG] [Thread-191826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:03:22.690 [DEBUG] [Thread-191826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:03:22.690 [DEBUG] [Thread-191826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:03:22.710 [INFO] [Thread-191826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:03:22.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:03:22.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:03:23.523 [DEBUG] [Thread-191826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:03:23.523 [DEBUG] [Thread-191826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:03:23.571 [DEBUG] [Thread-191826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:03:23.572 [DEBUG] [Thread-191826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:03:23.581 [DEBUG] [Thread-191826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:03:23.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:03:23.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:03: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') -> 00000000
2026-04-12T16:03:23.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:03:23.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:03:23.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:03:23.618 [DEBUG] [Thread-191826] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:03:26.444 [DEBUG] [Thread-191828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:27.517 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:41.499 [DEBUG] [Thread-191829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:43.884 [DEBUG] [Thread-191830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:46.021 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:46.022 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:53.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:03:53.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:03:53.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
2026-04-12T16:03:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 3, 14), 7.76227, 59.725, 0.0, 13.0752, 16.2702, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:03:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:03:14
2026-04-12T16:03:55.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:03:55.630 [DEBUG] [Thread-191831] [transport.py] [_log()] starting thread (client mode): 0xae50a7a0
2026-04-12T16:03:55.630 [DEBUG] [Thread-191831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:03:55.641 [DEBUG] [Thread-191831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:03:55.641 [INFO] [Thread-191831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:03:55.643 [DEBUG] [Thread-191831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:03:55.643 [DEBUG] [Thread-191831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:03:55.643 [DEBUG] [Thread-191831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:03:55.643 [DEBUG] [Thread-191831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:55.643 [DEBUG] [Thread-191831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] client lang: <none>
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] server lang: <none>
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] kex follows: False
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] Compression: none
2026-04-12T16:03:55.644 [DEBUG] [Thread-191831] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:03:55.656 [DEBUG] [Thread-191831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:03:55.657 [DEBUG] [Thread-191831] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:03:55.657 [DEBUG] [Thread-191831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:03:55.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:03:55.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:03:55.658 [DEBUG] [Thread-191831] [transport.py] [_log()] userauth is OK
2026-04-12T16:03:55.658 [DEBUG] [Thread-191831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:03:55.658 [DEBUG] [Thread-191831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:03:55.659 [DEBUG] [Thread-191831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:03:55.659 [DEBUG] [Thread-191831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:03:55.672 [INFO] [Thread-191831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:03:55.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:03:56.311 [DEBUG] [Thread-191831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:03:56.311 [DEBUG] [Thread-191831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:03:56.312 [DEBUG] [Thread-191831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:03:56.352 [DEBUG] [Thread-191831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:03:56.352 [DEBUG] [Thread-191831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:03:56.356 [DEBUG] [Thread-191831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:03:56.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:03:56.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:03:56.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:03:56.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:03:56.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:03:56.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:03:56.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:03:56.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:03:56.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:03:56.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.585869 -999.00  +16.00  10.34     64   +9.40 1 2 1 1 1   887    0 7.66 36.39 ----- 14.4 10.3 294.0 13.9 22.1 -24.9 21.2 -23.9 22.2 -20.5 23.3 -22.3
2026-04-12T16:03:56.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:03:56.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:03:56.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.585869
2026-04-12T16:03:56.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:03:56.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:03:56.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:03:56.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:03:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:03:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:03:14', tmtdew=7.76227, humidity=59.725, cloud=0.0, wind=13.0752, temperature=16.2702, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:03:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:03:56.383 [DEBUG] [Thread-191831] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:03:56.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:03:56.480 [DEBUG] [Thread-191834] [transport.py] [_log()] starting thread (client mode): 0xae50a380
2026-04-12T16:03:56.480 [DEBUG] [Thread-191834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:03:56.495 [DEBUG] [Thread-191834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:03:56.495 [INFO] [Thread-191834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:03:56.503 [DEBUG] [Thread-191834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:03:56.503 [DEBUG] [Thread-191834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:03:56.503 [DEBUG] [Thread-191834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:03:56.503 [DEBUG] [Thread-191834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] client lang: <none>
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] server lang: <none>
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] kex follows: False
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] Compression: none
2026-04-12T16:03:56.504 [DEBUG] [Thread-191834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:03:56.536 [DEBUG] [Thread-191836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:03:56.560 [DEBUG] [Thread-191834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:03:56.561 [DEBUG] [Thread-191834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:03:56.562 [DEBUG] [Thread-191834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:03:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:03:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:03:56.617 [DEBUG] [Thread-191834] [transport.py] [_log()] userauth is OK
2026-04-12T16:03:56.617 [DEBUG] [Thread-191834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:03:56.618 [DEBUG] [Thread-191834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:03:56.618 [DEBUG] [Thread-191834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:03:56.618 [DEBUG] [Thread-191834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:03:56.636 [INFO] [Thread-191834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:03:56.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:03:56.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:03:57.469 [DEBUG] [Thread-191834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:03:57.469 [DEBUG] [Thread-191834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:03:57.517 [DEBUG] [Thread-191834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:03:57.517 [DEBUG] [Thread-191834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:03:57.526 [DEBUG] [Thread-191834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:03:57.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:03:57.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:03:57.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:03:57.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:03:57.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:03:57.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:03:57.563 [DEBUG] [Thread-191834] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:04:11.586 [DEBUG] [Thread-191837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:26.628 [DEBUG] [Thread-191838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:04:27.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:04:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:04:28.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 3, 49), 8.18484, 58.3233, 0.0, 10.6582, 16.3759, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:04:28.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:03:49
2026-04-12T16:04:29.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:04:29.356 [DEBUG] [Thread-191839] [transport.py] [_log()] starting thread (client mode): 0xae50ba90
2026-04-12T16:04:29.356 [DEBUG] [Thread-191839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:04:29.376 [DEBUG] [Thread-191839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:04:29.376 [INFO] [Thread-191839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] client lang: <none>
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] server lang: <none>
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] kex follows: False
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:04:29.379 [DEBUG] [Thread-191839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:04:29.380 [DEBUG] [Thread-191839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:04:29.380 [DEBUG] [Thread-191839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:04:29.380 [DEBUG] [Thread-191839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:04:29.380 [DEBUG] [Thread-191839] [transport.py] [_log()] Compression: none
2026-04-12T16:04:29.380 [DEBUG] [Thread-191839] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:04:29.390 [DEBUG] [Thread-191839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:04:29.391 [DEBUG] [Thread-191839] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:04:29.391 [DEBUG] [Thread-191839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:04:29.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:04:29.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:04:29.393 [DEBUG] [Thread-191839] [transport.py] [_log()] userauth is OK
2026-04-12T16:04:29.393 [DEBUG] [Thread-191839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:04:29.394 [DEBUG] [Thread-191839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:04:29.394 [DEBUG] [Thread-191839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:04:29.394 [DEBUG] [Thread-191839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:04:29.411 [INFO] [Thread-191839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:04:29.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:04:30.083 [DEBUG] [Thread-191839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:04:30.083 [DEBUG] [Thread-191839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:04:30.083 [DEBUG] [Thread-191839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:04:30.124 [DEBUG] [Thread-191839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:04:30.125 [DEBUG] [Thread-191839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:04:30.128 [DEBUG] [Thread-191839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:04:30.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:04:30.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:04:30.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:04:30.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:04:30.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:04:30.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:04:30.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:04:30.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:04:30.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:04:30.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.586217 -999.00  +16.00  16.35     65   +9.40 1 2 1 1 1   887    0 7.51 34.32 ----- 16.4 16.4 296.2 20.4 22.1 -24.5 21.2 -23.8 22.1 -20.5 23.3 -22.2
2026-04-12T16:04:30.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:04:30.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:04:30.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.586217
2026-04-12T16:04:30.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:04:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:04:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:04:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:04:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:04:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:03:49', tmtdew=8.18484, humidity=58.3233, cloud=0.0, wind=10.6582, temperature=16.3759, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:04:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:04:30.158 [DEBUG] [Thread-191839] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:04:30.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:04:30.251 [DEBUG] [Thread-191842] [transport.py] [_log()] starting thread (client mode): 0xae5f2980
2026-04-12T16:04:30.251 [DEBUG] [Thread-191842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:04:30.265 [DEBUG] [Thread-191842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:04:30.265 [INFO] [Thread-191842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:04:30.273 [DEBUG] [Thread-191842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:04:30.273 [DEBUG] [Thread-191842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:04:30.273 [DEBUG] [Thread-191842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:04:30.273 [DEBUG] [Thread-191842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:04:30.273 [DEBUG] [Thread-191842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] client lang: <none>
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] server lang: <none>
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] kex follows: False
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:04:30.274 [DEBUG] [Thread-191842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:04:30.275 [DEBUG] [Thread-191842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:04:30.275 [DEBUG] [Thread-191842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:04:30.275 [DEBUG] [Thread-191842] [transport.py] [_log()] Compression: none
2026-04-12T16:04:30.275 [DEBUG] [Thread-191842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:04:30.338 [DEBUG] [Thread-191842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:04:30.338 [DEBUG] [Thread-191842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:04:30.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:04:30.340 [DEBUG] [Thread-191842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:04:30.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:04:30.396 [DEBUG] [Thread-191842] [transport.py] [_log()] userauth is OK
2026-04-12T16:04:30.397 [DEBUG] [Thread-191842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:04:30.397 [DEBUG] [Thread-191842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:04:30.398 [DEBUG] [Thread-191842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:04:30.398 [DEBUG] [Thread-191842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:04:30.415 [INFO] [Thread-191842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:04:30.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:04:30.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:04:30.943 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:31.277 [DEBUG] [Thread-191842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:04:31.277 [DEBUG] [Thread-191842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:04:31.325 [DEBUG] [Thread-191842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:04:31.325 [DEBUG] [Thread-191842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:04:31.335 [DEBUG] [Thread-191842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:04:31.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:04:31.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')
2026-04-12T16:04:31.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:04:31.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:04:31.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:04:31.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:04:31.372 [DEBUG] [Thread-191842] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:04:41.665 [DEBUG] [Thread-191844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:43.930 [DEBUG] [Thread-191845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:46.165 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:46.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:55.494 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:04:56.723 [DEBUG] [Thread-191846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:05:01.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:05:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:05:02.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 3, 49), 8.18484, 58.3233, 0.0, 10.6582, 16.3759, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:05:02.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:03:49
2026-04-12T16:05:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:05:03.196 [DEBUG] [Thread-191847] [transport.py] [_log()] starting thread (client mode): 0xae5f0ac0
2026-04-12T16:05:03.196 [DEBUG] [Thread-191847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:05:03.217 [DEBUG] [Thread-191847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:05:03.217 [INFO] [Thread-191847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] client lang: <none>
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] server lang: <none>
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] kex follows: False
2026-04-12T16:05:03.221 [DEBUG] [Thread-191847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:05:03.222 [DEBUG] [Thread-191847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:05:03.222 [DEBUG] [Thread-191847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:05:03.222 [DEBUG] [Thread-191847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:05:03.222 [DEBUG] [Thread-191847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:05:03.222 [DEBUG] [Thread-191847] [transport.py] [_log()] Compression: none
2026-04-12T16:05:03.222 [DEBUG] [Thread-191847] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:05:03.238 [DEBUG] [Thread-191847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:05:03.239 [DEBUG] [Thread-191847] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:05:03.239 [DEBUG] [Thread-191847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:05:03.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:05:03.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:05:03.241 [DEBUG] [Thread-191847] [transport.py] [_log()] userauth is OK
2026-04-12T16:05:03.241 [DEBUG] [Thread-191847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:05:03.241 [DEBUG] [Thread-191847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:05:03.242 [DEBUG] [Thread-191847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:05:03.242 [DEBUG] [Thread-191847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:05:03.267 [INFO] [Thread-191847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:05:03.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:05:09.193 [DEBUG] [Thread-191847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:05:09.193 [DEBUG] [Thread-191847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:05:09.194 [DEBUG] [Thread-191847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:05:09.234 [DEBUG] [Thread-191847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:05:09.234 [DEBUG] [Thread-191847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:05:09.236 [DEBUG] [Thread-191847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:05:09.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:05:09.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:05:09.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:05:09.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:05:09.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:05:09.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:05:09.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:05:09.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:05:09.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:05:09.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.586564 -999.00  +16.00  10.80     66   +9.80 1 2 1 1 1   887    0 7.51 32.08 ----- 13.2 10.8 281.8 17.6 22.0 -25.0 21.2 -23.5 22.1 -20.3 23.3 -21.6
2026-04-12T16:05:09.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:05:09.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:05:09.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.586564
2026-04-12T16:05:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:05:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:05:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:05:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:05:09.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:05:09.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:03:49', tmtdew=8.18484, humidity=58.3233, cloud=0.0, wind=10.6582, temperature=16.3759, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:04:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:05:09.391 [DEBUG] [Thread-191847] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:05:09.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:05:09.473 [DEBUG] [Thread-191850] [transport.py] [_log()] starting thread (client mode): 0xae50a890
2026-04-12T16:05:09.473 [DEBUG] [Thread-191850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:05:09.488 [DEBUG] [Thread-191850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:05:09.488 [INFO] [Thread-191850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:05:09.497 [DEBUG] [Thread-191850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:05:09.497 [DEBUG] [Thread-191850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:05:09.497 [DEBUG] [Thread-191850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:05:09.497 [DEBUG] [Thread-191850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] client lang: <none>
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] server lang: <none>
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] kex follows: False
2026-04-12T16:05:09.498 [DEBUG] [Thread-191850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:05:09.499 [DEBUG] [Thread-191850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:05:09.499 [DEBUG] [Thread-191850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:05:09.499 [DEBUG] [Thread-191850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:05:09.499 [DEBUG] [Thread-191850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:05:09.499 [DEBUG] [Thread-191850] [transport.py] [_log()] Compression: none
2026-04-12T16:05:09.499 [DEBUG] [Thread-191850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:05:09.556 [DEBUG] [Thread-191850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:05:09.557 [DEBUG] [Thread-191850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:05:09.558 [DEBUG] [Thread-191850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:05:09.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:05:09.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:05:09.619 [DEBUG] [Thread-191850] [transport.py] [_log()] userauth is OK
2026-04-12T16:05:09.620 [DEBUG] [Thread-191850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:05:09.620 [DEBUG] [Thread-191850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:05:09.620 [DEBUG] [Thread-191850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:05:09.620 [DEBUG] [Thread-191850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:05:09.643 [INFO] [Thread-191850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:05:09.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:05:09.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:05:10.455 [DEBUG] [Thread-191850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:05:10.455 [DEBUG] [Thread-191850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:05:10.503 [DEBUG] [Thread-191850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:05:10.503 [DEBUG] [Thread-191850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:05:10.512 [DEBUG] [Thread-191850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:05:10.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:05:10.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:05:10.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:05:10.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:05:10.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:05:10.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:05:10.548 [DEBUG] [Thread-191850] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:05:11.757 [DEBUG] [Thread-191852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:17.951 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:26.816 [DEBUG] [Thread-191853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:40.475 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:05:40.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:05: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
2026-04-12T16:05:41.853 [DEBUG] [Thread-191854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 4, 25), 7.92478, 59.4266, 0.0, 10.5167, 16.0712, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:05:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:04:25
2026-04-12T16:05:42.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:05:42.432 [DEBUG] [Thread-191855] [transport.py] [_log()] starting thread (client mode): 0xae50a2c0
2026-04-12T16:05:42.432 [DEBUG] [Thread-191855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:05:42.451 [DEBUG] [Thread-191855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:05:42.451 [INFO] [Thread-191855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] client lang: <none>
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] server lang: <none>
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] kex follows: False
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] Compression: none
2026-04-12T16:05:42.454 [DEBUG] [Thread-191855] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:05:42.473 [DEBUG] [Thread-191855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:05:42.473 [DEBUG] [Thread-191855] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:05:42.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:05:42.474 [DEBUG] [Thread-191855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:05:42.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:05:42.477 [DEBUG] [Thread-191855] [transport.py] [_log()] userauth is OK
2026-04-12T16:05:42.477 [DEBUG] [Thread-191855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:05:42.477 [DEBUG] [Thread-191855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:05:42.477 [DEBUG] [Thread-191855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:05:42.477 [DEBUG] [Thread-191855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:05:42.496 [INFO] [Thread-191855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:05:42.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:05:43.112 [DEBUG] [Thread-191855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:05:43.112 [DEBUG] [Thread-191855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:05:43.112 [DEBUG] [Thread-191855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:05:43.153 [DEBUG] [Thread-191855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:05:43.153 [DEBUG] [Thread-191855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:05:43.157 [DEBUG] [Thread-191855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:05:43.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:05:43.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:05:43.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:05:43.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:05:43.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:05:43.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:05:43.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:05:43.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:05:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:05:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.586911 -999.00  +16.10  11.51     65   +9.70 1 2 1 1 1   887    0 7.57 31.86 ----- 11.8 11.5 282.2 16.2 22.0 -24.5 21.3 -22.6 22.0 -21.7 23.3 -22.4
2026-04-12T16:05:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:05:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:05:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.586911
2026-04-12T16:05:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:05:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:05:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:05:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:05:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:05:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:04:25', tmtdew=7.92478, humidity=59.4266, cloud=0.0, wind=10.5167, temperature=16.0712, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:05:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:05:43.184 [DEBUG] [Thread-191855] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:05:43.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:05:43.278 [DEBUG] [Thread-191858] [transport.py] [_log()] starting thread (client mode): 0xae5f2470
2026-04-12T16:05:43.278 [DEBUG] [Thread-191858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:05:43.294 [DEBUG] [Thread-191858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:05:43.294 [INFO] [Thread-191858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:05:43.302 [DEBUG] [Thread-191858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] client lang: <none>
2026-04-12T16:05:43.303 [DEBUG] [Thread-191858] [transport.py] [_log()] server lang: <none>
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] kex follows: False
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] Compression: none
2026-04-12T16:05:43.304 [DEBUG] [Thread-191858] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:05:43.359 [DEBUG] [Thread-191858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:05:43.359 [DEBUG] [Thread-191858] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:05:43.360 [DEBUG] [Thread-191858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:05:43.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:05:43.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:05:43.415 [DEBUG] [Thread-191858] [transport.py] [_log()] userauth is OK
2026-04-12T16:05:43.415 [DEBUG] [Thread-191858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:05:43.415 [DEBUG] [Thread-191858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:05:43.415 [DEBUG] [Thread-191858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:05:43.415 [DEBUG] [Thread-191858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:05:43.434 [INFO] [Thread-191858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:05:43.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:05:43.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:05:43.967 [DEBUG] [Thread-191860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:44.276 [DEBUG] [Thread-191858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:05:44.277 [DEBUG] [Thread-191858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:05:44.327 [DEBUG] [Thread-191858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:05:44.328 [DEBUG] [Thread-191858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:05:44.339 [DEBUG] [Thread-191858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:05:44.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:05:44.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:05:44.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:05:44.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:05:44.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:05:44.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:05:44.381 [DEBUG] [Thread-191858] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:05:46.307 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:46.308 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:05:56.891 [DEBUG] [Thread-191861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:02.964 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:11.949 [DEBUG] [Thread-191862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:14.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:06:14.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:06:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:06:15.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 6, 7), 7.8874, 59.5921, 0.0, 8.75268, 16.1373, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:06:15.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:06:07
2026-04-12T16:06:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:06:16.202 [DEBUG] [Thread-191863] [transport.py] [_log()] starting thread (client mode): 0xae5f34f0
2026-04-12T16:06:16.203 [DEBUG] [Thread-191863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:06:16.224 [DEBUG] [Thread-191863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:06:16.224 [INFO] [Thread-191863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:06:16.227 [DEBUG] [Thread-191863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:06:16.227 [DEBUG] [Thread-191863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:06:16.227 [DEBUG] [Thread-191863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:06:16.227 [DEBUG] [Thread-191863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] client lang: <none>
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] server lang: <none>
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] kex follows: False
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:06:16.228 [DEBUG] [Thread-191863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:06:16.229 [DEBUG] [Thread-191863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:06:16.229 [DEBUG] [Thread-191863] [transport.py] [_log()] Compression: none
2026-04-12T16:06:16.229 [DEBUG] [Thread-191863] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:06:16.248 [DEBUG] [Thread-191863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:06:16.248 [DEBUG] [Thread-191863] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:06:16.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:06:16.250 [DEBUG] [Thread-191863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:06:16.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:06:16.252 [DEBUG] [Thread-191863] [transport.py] [_log()] userauth is OK
2026-04-12T16:06:16.253 [DEBUG] [Thread-191863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:06:16.253 [DEBUG] [Thread-191863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:06:16.253 [DEBUG] [Thread-191863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:06:16.253 [DEBUG] [Thread-191863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:06:16.283 [INFO] [Thread-191863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:06:16.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:06:16.941 [DEBUG] [Thread-191863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:06:16.942 [DEBUG] [Thread-191863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:06:16.943 [DEBUG] [Thread-191863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:06:16.982 [DEBUG] [Thread-191863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:06:16.982 [DEBUG] [Thread-191863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:06:16.986 [DEBUG] [Thread-191863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:06:16.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:06:16.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:06:16.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:06:17.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:06:17.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:06:17.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:06:17.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:06:17.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:06:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:06:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.587258 -999.00  +16.20   8.81     65   +9.80 1 2 1 1 1   887    0 7.35 27.47 ----- 9.1 8.8 280.2 13.4 21.9 -23.7 21.2 -22.4 22.0 -19.9 23.3 -20.8
2026-04-12T16:06:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:06:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:06:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.587258
2026-04-12T16:06:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:06:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:06:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:06:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:06:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:06:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:06:07', tmtdew=7.8874, humidity=59.5921, cloud=0.0, wind=8.75268, temperature=16.1373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:05:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:06:17.010 [DEBUG] [Thread-191863] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:06:17.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:06:17.113 [DEBUG] [Thread-191866] [transport.py] [_log()] starting thread (client mode): 0xae52ffa0
2026-04-12T16:06:17.113 [DEBUG] [Thread-191866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:06:17.129 [DEBUG] [Thread-191866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:06:17.129 [INFO] [Thread-191866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:06:17.137 [DEBUG] [Thread-191866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] client lang: <none>
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] server lang: <none>
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] kex follows: False
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] Compression: none
2026-04-12T16:06:17.138 [DEBUG] [Thread-191866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:06:17.194 [DEBUG] [Thread-191866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:06:17.195 [DEBUG] [Thread-191866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:06:17.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:06:17.196 [DEBUG] [Thread-191866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:06:17.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:06:17.253 [DEBUG] [Thread-191866] [transport.py] [_log()] userauth is OK
2026-04-12T16:06:17.253 [DEBUG] [Thread-191866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:06:17.253 [DEBUG] [Thread-191866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:06:17.253 [DEBUG] [Thread-191866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:06:17.254 [DEBUG] [Thread-191866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:06:17.272 [INFO] [Thread-191866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:06:17.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:06:17.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:06:18.103 [DEBUG] [Thread-191866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:06:18.103 [DEBUG] [Thread-191866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:06:18.152 [DEBUG] [Thread-191866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:06:18.152 [DEBUG] [Thread-191866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:06:18.161 [DEBUG] [Thread-191866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:06:18.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:06:18.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:06:18.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:06:18.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:06:18.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:06:18.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:06:18.195 [DEBUG] [Thread-191866] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:06:25.456 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:26.984 [DEBUG] [Thread-191868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:42.043 [DEBUG] [Thread-191869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:44.009 [DEBUG] [Thread-191870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:46.450 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:46.450 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:47.930 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:06:48.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:06:48.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:06:48.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:06:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 6, 7), 7.8874, 59.5921, 0.0, 8.75268, 16.1373, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:06:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:06:07
2026-04-12T16:06:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:06:50.132 [DEBUG] [Thread-191871] [transport.py] [_log()] starting thread (client mode): 0xae50a470
2026-04-12T16:06:50.132 [DEBUG] [Thread-191871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:06:50.153 [DEBUG] [Thread-191871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:06:50.153 [INFO] [Thread-191871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] client lang: <none>
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] server lang: <none>
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] kex follows: False
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] Compression: none
2026-04-12T16:06:50.157 [DEBUG] [Thread-191871] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:06:50.173 [DEBUG] [Thread-191871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:06:50.173 [DEBUG] [Thread-191871] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:06:50.173 [DEBUG] [Thread-191871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:06:50.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:06:50.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:06:50.174 [DEBUG] [Thread-191871] [transport.py] [_log()] userauth is OK
2026-04-12T16:06:50.174 [DEBUG] [Thread-191871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:06:50.174 [DEBUG] [Thread-191871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:06:50.174 [DEBUG] [Thread-191871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:06:50.174 [DEBUG] [Thread-191871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:06:50.190 [INFO] [Thread-191871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:06:50.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:06:50.825 [DEBUG] [Thread-191871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:06:50.825 [DEBUG] [Thread-191871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:06:50.826 [DEBUG] [Thread-191871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:06:50.866 [DEBUG] [Thread-191871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:06:50.866 [DEBUG] [Thread-191871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:06:50.870 [DEBUG] [Thread-191871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:06:50.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:06:50.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:06:50.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:06:50.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:06:50.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:06:50.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:06:50.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:06:50.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:06:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:06:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.587953 -999.00  +16.30  13.41     65   +9.70 1 2 1 1 1   887    0 7.32 25.66 ----- 11.6 13.4 278.6 16.4 22.0 -22.9 21.4 -22.4 22.1 -19.5 23.3 -21.7
2026-04-12T16:06:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:06:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:06:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.587953
2026-04-12T16:06:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:06:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:06:50.897 [DEBUG] [Thread-191871] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:06:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:06:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:06:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:06:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:06:07', tmtdew=7.8874, humidity=59.5921, cloud=0.0, wind=8.75268, temperature=16.1373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:06:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:06:50.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:06:50.993 [DEBUG] [Thread-191874] [transport.py] [_log()] starting thread (client mode): 0xae5a7b80
2026-04-12T16:06:50.993 [DEBUG] [Thread-191874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:06:51.008 [DEBUG] [Thread-191874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:06:51.008 [INFO] [Thread-191874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:06:51.016 [DEBUG] [Thread-191874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:06:51.016 [DEBUG] [Thread-191874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:06:51.016 [DEBUG] [Thread-191874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:06:51.016 [DEBUG] [Thread-191874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:51.016 [DEBUG] [Thread-191874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:06:51.016 [DEBUG] [Thread-191874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] client lang: <none>
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] server lang: <none>
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] kex follows: False
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:06:51.017 [DEBUG] [Thread-191874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:06:51.018 [DEBUG] [Thread-191874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:06:51.018 [DEBUG] [Thread-191874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:06:51.018 [DEBUG] [Thread-191874] [transport.py] [_log()] Compression: none
2026-04-12T16:06:51.018 [DEBUG] [Thread-191874] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:06:51.077 [DEBUG] [Thread-191874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:06:51.078 [DEBUG] [Thread-191874] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:06:51.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:06:51.080 [DEBUG] [Thread-191874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:06:51.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:06:51.137 [DEBUG] [Thread-191874] [transport.py] [_log()] userauth is OK
2026-04-12T16:06:51.137 [DEBUG] [Thread-191874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:06:51.137 [DEBUG] [Thread-191874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:06:51.137 [DEBUG] [Thread-191874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:06:51.137 [DEBUG] [Thread-191874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:06:51.158 [INFO] [Thread-191874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:06:51.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:06:51.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:06:51.992 [DEBUG] [Thread-191874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:06:51.992 [DEBUG] [Thread-191874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:06:52.040 [DEBUG] [Thread-191874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:06:52.040 [DEBUG] [Thread-191874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:06:52.050 [DEBUG] [Thread-191874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:06:52.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:06:52.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:06:52.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
2026-04-12T16:06:52.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:06:52.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:06:52.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:06:52.086 [DEBUG] [Thread-191874] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:06:57.080 [DEBUG] [Thread-191876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:10.461 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:12.142 [DEBUG] [Thread-191877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:07:22.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:07:22.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:07:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 6, 43), 7.94619, 59.283, 0.0, 13.7275, 16.4075, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:07:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:06:43
2026-04-12T16:07:23.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:07:24.050 [DEBUG] [Thread-191878] [transport.py] [_log()] starting thread (client mode): 0xae5f2680
2026-04-12T16:07:24.050 [DEBUG] [Thread-191878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:07:24.065 [DEBUG] [Thread-191878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:07:24.065 [INFO] [Thread-191878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] client lang: <none>
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] server lang: <none>
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] kex follows: False
2026-04-12T16:07:24.068 [DEBUG] [Thread-191878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:07:24.069 [DEBUG] [Thread-191878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:07:24.069 [DEBUG] [Thread-191878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:07:24.069 [DEBUG] [Thread-191878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:07:24.069 [DEBUG] [Thread-191878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:07:24.069 [DEBUG] [Thread-191878] [transport.py] [_log()] Compression: none
2026-04-12T16:07:24.069 [DEBUG] [Thread-191878] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:07:24.087 [DEBUG] [Thread-191878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:07:24.087 [DEBUG] [Thread-191878] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:07:24.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:07:24.089 [DEBUG] [Thread-191878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:07:24.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:07:24.091 [DEBUG] [Thread-191878] [transport.py] [_log()] userauth is OK
2026-04-12T16:07:24.091 [DEBUG] [Thread-191878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:07:24.092 [DEBUG] [Thread-191878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:07:24.092 [DEBUG] [Thread-191878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:07:24.092 [DEBUG] [Thread-191878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:07:24.117 [INFO] [Thread-191878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:07:24.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:07:24.775 [DEBUG] [Thread-191878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:07:24.775 [DEBUG] [Thread-191878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:07:24.776 [DEBUG] [Thread-191878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:07:24.816 [DEBUG] [Thread-191878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:07:24.816 [DEBUG] [Thread-191878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:07:24.820 [DEBUG] [Thread-191878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:07:24.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:07:24.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:07:24.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:07:24.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:07:24.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:07:24.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:07:24.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:07:24.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:07:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:07:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.588300 -999.00  +16.40  13.35     64   +9.70 1 2 1 1 1   887    0 7.16 22.55 ----- 19.1 13.3 295.2 17.9 22.1 -23.0 21.3 -22.5 22.1 -20.9 23.3 -23.9
2026-04-12T16:07:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:07:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:07:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.588300
2026-04-12T16:07:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:07:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:07:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:07:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:07:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:07:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:06:43', tmtdew=7.94619, humidity=59.283, cloud=0.0, wind=13.7275, temperature=16.4075, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:07:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:07:24.848 [DEBUG] [Thread-191878] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:07:24.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:07:24.942 [DEBUG] [Thread-191881] [transport.py] [_log()] starting thread (client mode): 0xae5f1e10
2026-04-12T16:07:24.942 [DEBUG] [Thread-191881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:07:24.957 [DEBUG] [Thread-191881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:07:24.957 [INFO] [Thread-191881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:07:24.964 [DEBUG] [Thread-191881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] client lang: <none>
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] server lang: <none>
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] kex follows: False
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] Compression: none
2026-04-12T16:07:24.965 [DEBUG] [Thread-191881] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:07:25.025 [DEBUG] [Thread-191881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:07:25.025 [DEBUG] [Thread-191881] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:07:25.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:07:25.026 [DEBUG] [Thread-191881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:07:25.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:07:25.081 [DEBUG] [Thread-191881] [transport.py] [_log()] userauth is OK
2026-04-12T16:07:25.082 [DEBUG] [Thread-191881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:07:25.082 [DEBUG] [Thread-191881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:07:25.082 [DEBUG] [Thread-191881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:07:25.082 [DEBUG] [Thread-191881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:07:25.101 [INFO] [Thread-191881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:07:25.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:07:25.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:07:25.922 [DEBUG] [Thread-191881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:07:25.922 [DEBUG] [Thread-191881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:07:25.970 [DEBUG] [Thread-191881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:07:25.970 [DEBUG] [Thread-191881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:07:25.980 [DEBUG] [Thread-191881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:07:25.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:07:25.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:07:25.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:07:26.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:07:26.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:07:26.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:07:26.015 [DEBUG] [Thread-191881] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:07:27.180 [DEBUG] [Thread-191883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:32.947 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:42.242 [DEBUG] [Thread-191884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:44.047 [DEBUG] [Thread-191885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:46.588 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:46.589 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:55.459 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:56.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:07:56.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:07:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:07:57.282 [DEBUG] [Thread-191886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:07:57.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 7, 19), 7.62783, 60.2379, 0.0, 16.304, 16.0369, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:07:57.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:07:19
2026-04-12T16:07:57.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:07:57.907 [DEBUG] [Thread-191887] [transport.py] [_log()] starting thread (client mode): 0xae5a4370
2026-04-12T16:07:57.907 [DEBUG] [Thread-191887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:07:57.928 [DEBUG] [Thread-191887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:07:57.928 [INFO] [Thread-191887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] client lang: <none>
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] server lang: <none>
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] kex follows: False
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] Compression: none
2026-04-12T16:07:57.931 [DEBUG] [Thread-191887] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:07:57.948 [DEBUG] [Thread-191887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:07:57.948 [DEBUG] [Thread-191887] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:07:57.949 [DEBUG] [Thread-191887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:07:57.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:07:57.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:07:57.951 [DEBUG] [Thread-191887] [transport.py] [_log()] userauth is OK
2026-04-12T16:07:57.951 [DEBUG] [Thread-191887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:07:57.951 [DEBUG] [Thread-191887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:07:57.952 [DEBUG] [Thread-191887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:07:57.952 [DEBUG] [Thread-191887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:07:57.985 [INFO] [Thread-191887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:07:57.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:07:58.625 [DEBUG] [Thread-191887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:07:58.626 [DEBUG] [Thread-191887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:07:58.626 [DEBUG] [Thread-191887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:07:58.666 [DEBUG] [Thread-191887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:07:58.666 [DEBUG] [Thread-191887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:07:58.670 [DEBUG] [Thread-191887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:07:58.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:07:58.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:07:58.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:07:58.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:07:58.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:07:58.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:07:58.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:07:58.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:07:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:07:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.588647 -999.00  +16.00  19.99     61   +8.60 1 1 1 1 1   887    0 7.31 24.64 ----- 15.2 20.0 279.6 28.3 21.8 -26.9 21.4 -24.1 21.4 -28.5 23.0 -24.4
2026-04-12T16:07:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:07:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:07:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.588647
2026-04-12T16:07:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:07:58.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:07:58.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:07:58.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:07:58.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:07:58.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:07:19', tmtdew=7.62783, humidity=60.2379, cloud=0.0, wind=16.304, temperature=16.0369, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:07:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:07:58.696 [DEBUG] [Thread-191887] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:07:58.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:07:58.792 [DEBUG] [Thread-191890] [transport.py] [_log()] starting thread (client mode): 0xae5085e0
2026-04-12T16:07:58.792 [DEBUG] [Thread-191890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:07:58.806 [DEBUG] [Thread-191890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:07:58.806 [INFO] [Thread-191890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:07:58.814 [DEBUG] [Thread-191890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:07:58.815 [DEBUG] [Thread-191890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:07:58.815 [DEBUG] [Thread-191890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:07:58.815 [DEBUG] [Thread-191890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:58.815 [DEBUG] [Thread-191890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:07:58.815 [DEBUG] [Thread-191890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:58.815 [DEBUG] [Thread-191890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:07:58.815 [DEBUG] [Thread-191890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] client lang: <none>
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] server lang: <none>
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] kex follows: False
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:07:58.816 [DEBUG] [Thread-191890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:07:58.817 [DEBUG] [Thread-191890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:07:58.817 [DEBUG] [Thread-191890] [transport.py] [_log()] Compression: none
2026-04-12T16:07:58.817 [DEBUG] [Thread-191890] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:07:58.873 [DEBUG] [Thread-191890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:07:58.874 [DEBUG] [Thread-191890] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:07:58.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:07:58.875 [DEBUG] [Thread-191890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:07:58.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:07:58.933 [DEBUG] [Thread-191890] [transport.py] [_log()] userauth is OK
2026-04-12T16:07:58.933 [DEBUG] [Thread-191890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:07:58.933 [DEBUG] [Thread-191890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:07:58.933 [DEBUG] [Thread-191890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:07:58.934 [DEBUG] [Thread-191890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:07:58.952 [INFO] [Thread-191890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:07:58.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:07:58.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:07:59.763 [DEBUG] [Thread-191890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:07:59.763 [DEBUG] [Thread-191890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:07:59.811 [DEBUG] [Thread-191890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:07:59.812 [DEBUG] [Thread-191890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:07:59.821 [DEBUG] [Thread-191890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:07:59.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:07:59.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:07: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') -> 00000000
2026-04-12T16:07:59.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:07:59.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:07:59.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:07:59.859 [DEBUG] [Thread-191890] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:08:12.324 [DEBUG] [Thread-191892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:17.913 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:18.795 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:21.177 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:22.562 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:22.948 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:23.318 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:24.696 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:25.087 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:25.498 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:25.888 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:27.298 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:27.384 [DEBUG] [Thread-191893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:27.704 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:28.319 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:08:29.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:08:29.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:08:31.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 7, 55), 8.41833, 57.2933, 0.0, 18.1753, 16.136, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:08:31.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:07:55
2026-04-12T16:08:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:08:31.708 [DEBUG] [Thread-191894] [transport.py] [_log()] starting thread (client mode): 0xae509840
2026-04-12T16:08:31.708 [DEBUG] [Thread-191894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:08:31.731 [DEBUG] [Thread-191894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:08:31.731 [INFO] [Thread-191894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] client lang: <none>
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] server lang: <none>
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] kex follows: False
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] Compression: none
2026-04-12T16:08:31.735 [DEBUG] [Thread-191894] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:08:31.754 [DEBUG] [Thread-191894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:08:31.755 [DEBUG] [Thread-191894] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:08:31.755 [DEBUG] [Thread-191894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:08:31.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:08:31.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:08:31.757 [DEBUG] [Thread-191894] [transport.py] [_log()] userauth is OK
2026-04-12T16:08:31.758 [DEBUG] [Thread-191894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:08:31.758 [DEBUG] [Thread-191894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:08:31.758 [DEBUG] [Thread-191894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:08:31.758 [DEBUG] [Thread-191894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:08:31.791 [INFO] [Thread-191894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:08:31.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:08:32.465 [DEBUG] [Thread-191894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:08:32.465 [DEBUG] [Thread-191894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:08:32.466 [DEBUG] [Thread-191894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:08:32.506 [DEBUG] [Thread-191894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:08:32.506 [DEBUG] [Thread-191894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:08:32.511 [DEBUG] [Thread-191894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:08:32.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:08:32.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:08:32.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:08:32.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:08:32.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:08:32.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:08:32.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:08:32.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:08:32.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:08:32.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.588994 -999.00  +15.70  14.81     62   +8.50 1 1 1 1 1   887    0 7.38 26.64 ----- 15.0 14.8 278.8 26.1 21.8 -26.3 21.1 -24.3 21.4 -27.9 22.8 -25.4
2026-04-12T16:08:32.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:08:32.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:08:32.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.588994
2026-04-12T16:08:32.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:08:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:08:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:08:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:08:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:08:32.535 [DEBUG] [Thread-191894] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:08:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:07:55', tmtdew=8.41833, humidity=57.2933, cloud=0.0, wind=18.1753, temperature=16.136, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:08:09.082', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:08:32.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:08:32.631 [DEBUG] [Thread-191897] [transport.py] [_log()] starting thread (client mode): 0xae509bd0
2026-04-12T16:08:32.631 [DEBUG] [Thread-191897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:08:32.645 [DEBUG] [Thread-191897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:08:32.645 [INFO] [Thread-191897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] client lang: <none>
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] server lang: <none>
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] kex follows: False
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:08:32.653 [DEBUG] [Thread-191897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:08:32.654 [DEBUG] [Thread-191897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:08:32.654 [DEBUG] [Thread-191897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:08:32.654 [DEBUG] [Thread-191897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:08:32.654 [DEBUG] [Thread-191897] [transport.py] [_log()] Compression: none
2026-04-12T16:08:32.654 [DEBUG] [Thread-191897] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:08:32.712 [DEBUG] [Thread-191897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:08:32.713 [DEBUG] [Thread-191897] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:08:32.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:08:32.714 [DEBUG] [Thread-191897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:08:32.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:08:32.768 [DEBUG] [Thread-191897] [transport.py] [_log()] userauth is OK
2026-04-12T16:08:32.768 [DEBUG] [Thread-191897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:08:32.768 [DEBUG] [Thread-191897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:08:32.768 [DEBUG] [Thread-191897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:08:32.769 [DEBUG] [Thread-191897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:08:32.787 [INFO] [Thread-191897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:08:32.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:08:32.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:08:33.586 [DEBUG] [Thread-191897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:08:33.586 [DEBUG] [Thread-191897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:08:33.634 [DEBUG] [Thread-191897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:08:33.634 [DEBUG] [Thread-191897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:08:33.644 [DEBUG] [Thread-191897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:08:33.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:08:33.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:08:33.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:08:33.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:08:33.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:08:33.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:08:33.679 [DEBUG] [Thread-191897] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:08:36.728 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:42.423 [DEBUG] [Thread-191899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:43.152 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:44.081 [DEBUG] [Thread-191900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:46.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:46.731 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:49.577 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:55.999 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:08:57.474 [DEBUG] [Thread-191901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:02.397 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:09:03.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:09:03.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:09:04.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 8, 30), 8.25587, 57.956, 0.0, 20.4332, 16.1857, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:09:04.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:08:30
2026-04-12T16:09:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:09:05.454 [DEBUG] [Thread-191902] [transport.py] [_log()] starting thread (client mode): 0xae5a4cd0
2026-04-12T16:09:05.454 [DEBUG] [Thread-191902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:09:05.473 [DEBUG] [Thread-191902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:09:05.473 [INFO] [Thread-191902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] client lang: <none>
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] server lang: <none>
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] kex follows: False
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] Compression: none
2026-04-12T16:09:05.477 [DEBUG] [Thread-191902] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:09:05.486 [DEBUG] [Thread-191902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:09:05.486 [DEBUG] [Thread-191902] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:09:05.486 [DEBUG] [Thread-191902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:09:05.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:09:05.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:09:05.488 [DEBUG] [Thread-191902] [transport.py] [_log()] userauth is OK
2026-04-12T16:09:05.488 [DEBUG] [Thread-191902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:09:05.488 [DEBUG] [Thread-191902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:09:05.488 [DEBUG] [Thread-191902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:09:05.489 [DEBUG] [Thread-191902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:09:05.524 [INFO] [Thread-191902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:09:05.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:09:06.173 [DEBUG] [Thread-191902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:09:06.173 [DEBUG] [Thread-191902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:09:06.173 [DEBUG] [Thread-191902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:09:06.214 [DEBUG] [Thread-191902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:09:06.214 [DEBUG] [Thread-191902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:09:06.218 [DEBUG] [Thread-191902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:09:06.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:09:06.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:09:06.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:09:06.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:09:06.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:09:06.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:09:06.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:09:06.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:09:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:09:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.589342 -999.00  +15.60  12.94     64   +8.90 1 2 1 1 1   887    0 7.46 29.27 ----- 15.3 12.9 272.6 19.4 21.6 -25.7 21.1 -24.3 21.4 -21.7 22.8 -24.6
2026-04-12T16:09:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:09:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:09:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.589342
2026-04-12T16:09:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:09:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:09:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:09:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:09:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:09:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:08:30', tmtdew=8.25587, humidity=57.956, cloud=0.0, wind=20.4332, temperature=16.1857, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:08:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:09:06.243 [DEBUG] [Thread-191902] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:09:06.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:09:06.336 [DEBUG] [Thread-191905] [transport.py] [_log()] starting thread (client mode): 0xb0fce110
2026-04-12T16:09:06.336 [DEBUG] [Thread-191905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:09:06.350 [DEBUG] [Thread-191905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:09:06.350 [INFO] [Thread-191905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:06.358 [DEBUG] [Thread-191905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] client lang: <none>
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] server lang: <none>
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] kex follows: False
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] Compression: none
2026-04-12T16:09:06.359 [DEBUG] [Thread-191905] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:09:06.416 [DEBUG] [Thread-191905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:09:06.416 [DEBUG] [Thread-191905] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:09:06.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:09:06.417 [DEBUG] [Thread-191905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:09:06.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:09:06.472 [DEBUG] [Thread-191905] [transport.py] [_log()] userauth is OK
2026-04-12T16:09:06.472 [DEBUG] [Thread-191905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:09:06.472 [DEBUG] [Thread-191905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:09:06.472 [DEBUG] [Thread-191905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:09:06.472 [DEBUG] [Thread-191905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:09:06.497 [INFO] [Thread-191905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:09:06.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:09:06.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:09:07.347 [DEBUG] [Thread-191905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:09:07.347 [DEBUG] [Thread-191905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:09:07.396 [DEBUG] [Thread-191905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:09:07.396 [DEBUG] [Thread-191905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:09:07.405 [DEBUG] [Thread-191905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:09:07.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:09:07.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:09:07.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:09:07.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:09:07.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:09:07.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:09:07.443 [DEBUG] [Thread-191905] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:09:08.852 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:12.513 [DEBUG] [Thread-191907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:15.288 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:21.781 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:27.577 [DEBUG] [Thread-191908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:28.185 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:34.586 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:34.935 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:36.335 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:36.730 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:37.151 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:37.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:09:37.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:09:37.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:09:37.555 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:37.968 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:38.340 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:38.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 9, 6), 8.4579, 57.177, 0.0, 18.6869, 16.3014, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:09:38.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:09:06
2026-04-12T16:09:38.719 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:39.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:09:39.137 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:39.233 [DEBUG] [Thread-191909] [transport.py] [_log()] starting thread (client mode): 0xb0f6c850
2026-04-12T16:09:39.233 [DEBUG] [Thread-191909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:09:39.253 [DEBUG] [Thread-191909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:09:39.254 [INFO] [Thread-191909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:09:39.256 [DEBUG] [Thread-191909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:09:39.256 [DEBUG] [Thread-191909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] client lang: <none>
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] server lang: <none>
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] kex follows: False
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] Compression: none
2026-04-12T16:09:39.257 [DEBUG] [Thread-191909] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:09:39.266 [DEBUG] [Thread-191909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:09:39.267 [DEBUG] [Thread-191909] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:09:39.267 [DEBUG] [Thread-191909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:09:39.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:09:39.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:09:39.269 [DEBUG] [Thread-191909] [transport.py] [_log()] userauth is OK
2026-04-12T16:09:39.269 [DEBUG] [Thread-191909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:09:39.269 [DEBUG] [Thread-191909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:09:39.269 [DEBUG] [Thread-191909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:09:39.269 [DEBUG] [Thread-191909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:09:39.288 [INFO] [Thread-191909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:09:39.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:09:39.542 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:39.916 [DEBUG] [Thread-191909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:09:39.916 [DEBUG] [Thread-191909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:09:39.917 [DEBUG] [Thread-191909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:09:39.957 [DEBUG] [Thread-191909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:09:39.957 [DEBUG] [Thread-191909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:09:39.961 [DEBUG] [Thread-191909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:09:39.967 [DEBUG] [Thread-191813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:39.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:09:39.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:09:39.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:09:39.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:09:39.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:09:39.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:09:39.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:09:39.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:09:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:09:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.589689 -999.00  +15.60   7.72     64   +9.00 1 1 1 1 1   887    0 7.42 27.26 ----- 8.2 7.7 281.6 20.3 21.6 -25.9 21.0 -25.2 21.5 -22.6 22.8 -23.6
2026-04-12T16:09:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:09:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:09:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.589689
2026-04-12T16:09:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:09:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:09:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:09:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:09:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:09:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:09:06', tmtdew=8.4579, humidity=57.177, cloud=0.0, wind=18.6869, temperature=16.3014, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:09:09.130', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:09:39.985 [DEBUG] [Thread-191909] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:09:40.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:09:40.079 [DEBUG] [Thread-191912] [transport.py] [_log()] starting thread (client mode): 0xb0fccc70
2026-04-12T16:09:40.080 [DEBUG] [Thread-191912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:09:40.094 [DEBUG] [Thread-191912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:09:40.094 [INFO] [Thread-191912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:09:40.101 [DEBUG] [Thread-191912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:09:40.101 [DEBUG] [Thread-191912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:09:40.101 [DEBUG] [Thread-191912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:09:40.101 [DEBUG] [Thread-191912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] client lang: <none>
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] server lang: <none>
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] kex follows: False
2026-04-12T16:09:40.102 [DEBUG] [Thread-191912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:09:40.103 [DEBUG] [Thread-191912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:09:40.103 [DEBUG] [Thread-191912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:09:40.103 [DEBUG] [Thread-191912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:09:40.103 [DEBUG] [Thread-191912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:09:40.103 [DEBUG] [Thread-191912] [transport.py] [_log()] Compression: none
2026-04-12T16:09:40.103 [DEBUG] [Thread-191912] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:09:40.159 [DEBUG] [Thread-191912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:09:40.159 [DEBUG] [Thread-191912] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:09:40.160 [DEBUG] [Thread-191912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:09:40.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:09:40.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:09:40.220 [DEBUG] [Thread-191912] [transport.py] [_log()] userauth is OK
2026-04-12T16:09:40.220 [DEBUG] [Thread-191912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:09:40.220 [DEBUG] [Thread-191912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:09:40.220 [DEBUG] [Thread-191912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:09:40.220 [DEBUG] [Thread-191912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:09:40.239 [INFO] [Thread-191912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:09:40.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:09:40.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:09:41.036 [DEBUG] [Thread-191912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:09:41.036 [DEBUG] [Thread-191912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:09:41.084 [DEBUG] [Thread-191912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:09:41.084 [DEBUG] [Thread-191912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:09:41.093 [DEBUG] [Thread-191912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:09:41.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:09:41.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:09:41.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:09:41.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:09:41.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:09:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:09:41.130 [DEBUG] [Thread-191912] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:09:42.611 [DEBUG] [Thread-191914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:44.118 [DEBUG] [Thread-191915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:46.871 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:46.872 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:09:57.655 [DEBUG] [Thread-191916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:10:11.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:10:11.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:10:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:10:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 9, 41), 8.25581, 58.1884, 0.0, 15.809, 16.9697, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:10:12.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:09:41
2026-04-12T16:10:12.691 [DEBUG] [Thread-191917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:10:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:10:13.032 [DEBUG] [Thread-191918] [transport.py] [_log()] starting thread (client mode): 0xb0f41d20
2026-04-12T16:10:13.033 [DEBUG] [Thread-191918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:10:13.053 [DEBUG] [Thread-191918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:10:13.053 [INFO] [Thread-191918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] client lang: <none>
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] server lang: <none>
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] kex follows: False
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] Compression: none
2026-04-12T16:10:13.054 [DEBUG] [Thread-191918] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:10:13.067 [DEBUG] [Thread-191918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:10:13.067 [DEBUG] [Thread-191918] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:10:13.068 [DEBUG] [Thread-191918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:10:13.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:10:13.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:10:13.069 [DEBUG] [Thread-191918] [transport.py] [_log()] userauth is OK
2026-04-12T16:10:13.069 [DEBUG] [Thread-191918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:10:13.070 [DEBUG] [Thread-191918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:10:13.070 [DEBUG] [Thread-191918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:10:13.070 [DEBUG] [Thread-191918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:10:13.094 [INFO] [Thread-191918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:10:13.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:10:17.401 [DEBUG] [Thread-191918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:10:17.401 [DEBUG] [Thread-191918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:10:17.401 [DEBUG] [Thread-191918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:10:17.442 [DEBUG] [Thread-191918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:10:17.442 [DEBUG] [Thread-191918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:10:17.445 [DEBUG] [Thread-191918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:10:17.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:10:17.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:10:17.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:10:17.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:10:17.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:10:17.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:10:17.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:10:17.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:10:17.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:10:17.664 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T16:10:17.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:09:41', tmtdew=8.25581, humidity=58.1884, cloud=0.0, wind=15.809, temperature=16.9697, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:10:17.669 [DEBUG] [Thread-191918] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:10:17.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:10:17.752 [DEBUG] [Thread-191921] [transport.py] [_log()] starting thread (client mode): 0xae5a4700
2026-04-12T16:10:17.752 [DEBUG] [Thread-191921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:10:17.767 [DEBUG] [Thread-191921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:10:17.767 [INFO] [Thread-191921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] client lang: <none>
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] server lang: <none>
2026-04-12T16:10:17.779 [DEBUG] [Thread-191921] [transport.py] [_log()] kex follows: False
2026-04-12T16:10:17.780 [DEBUG] [Thread-191921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:10:17.780 [DEBUG] [Thread-191921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:10:17.780 [DEBUG] [Thread-191921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:10:17.780 [DEBUG] [Thread-191921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:10:17.780 [DEBUG] [Thread-191921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:10:17.780 [DEBUG] [Thread-191921] [transport.py] [_log()] Compression: none
2026-04-12T16:10:17.780 [DEBUG] [Thread-191921] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:10:17.838 [DEBUG] [Thread-191921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:10:17.839 [DEBUG] [Thread-191921] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:10:17.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:10:17.840 [DEBUG] [Thread-191921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:10:17.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:10:17.894 [DEBUG] [Thread-191921] [transport.py] [_log()] userauth is OK
2026-04-12T16:10:17.894 [DEBUG] [Thread-191921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:10:17.894 [DEBUG] [Thread-191921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:10:17.894 [DEBUG] [Thread-191921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:10:17.894 [DEBUG] [Thread-191921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:10:17.917 [INFO] [Thread-191921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:10:17.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:10:17.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:10:18.782 [DEBUG] [Thread-191921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:10:18.783 [DEBUG] [Thread-191921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:10:18.835 [DEBUG] [Thread-191921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:10:18.835 [DEBUG] [Thread-191921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:10:18.847 [DEBUG] [Thread-191921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:10:18.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:10:18.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:10:18.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:10:18.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:10:18.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:10:18.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:10:18.900 [DEBUG] [Thread-191921] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:10:27.724 [DEBUG] [Thread-191923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:10:42.792 [DEBUG] [Thread-191924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:10:44.152 [DEBUG] [Thread-191925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:10:47.014 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:10:47.016 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:10:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:10:48.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:10:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:10:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 10, 17), 8.26493, 57.9447, 0.0, 14.8223, 16.1178, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:10:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:10:17
2026-04-12T16:10:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:10:50.714 [DEBUG] [Thread-191926] [transport.py] [_log()] starting thread (client mode): 0xae5a6e00
2026-04-12T16:10:50.715 [DEBUG] [Thread-191926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:10:50.734 [DEBUG] [Thread-191926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:10:50.735 [INFO] [Thread-191926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:10:50.736 [DEBUG] [Thread-191926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:10:50.736 [DEBUG] [Thread-191926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:10:50.736 [DEBUG] [Thread-191926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:10:50.736 [DEBUG] [Thread-191926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] client lang: <none>
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] server lang: <none>
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] kex follows: False
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] Compression: none
2026-04-12T16:10:50.737 [DEBUG] [Thread-191926] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:10:50.749 [DEBUG] [Thread-191926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:10:50.749 [DEBUG] [Thread-191926] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:10:50.750 [DEBUG] [Thread-191926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:10:50.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:10:50.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:10:50.752 [DEBUG] [Thread-191926] [transport.py] [_log()] userauth is OK
2026-04-12T16:10:50.752 [DEBUG] [Thread-191926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:10:50.752 [DEBUG] [Thread-191926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:10:50.752 [DEBUG] [Thread-191926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:10:50.752 [DEBUG] [Thread-191926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:10:50.770 [INFO] [Thread-191926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:10:50.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:10:51.328 [DEBUG] [Thread-191926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:10:51.328 [DEBUG] [Thread-191926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:10:51.329 [DEBUG] [Thread-191926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:10:51.369 [DEBUG] [Thread-191926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:10:51.369 [DEBUG] [Thread-191926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:10:51.372 [DEBUG] [Thread-191926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:10:51.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:10:51.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:10:51.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:10:51.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:10:51.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:10:51.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:10:51.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:10:51.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:10:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:10:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.590730 -999.00  +16.10   8.86     64   +9.40 1 1 1 1 1   887    0 7.35 28.09 ----- 14.0 8.9 263.3 23.1 21.7 -25.8 21.0 -25.7 21.7 -22.5 22.7 -25.4
2026-04-12T16:10:51.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:10:51.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:10:51.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.590730
2026-04-12T16:10:51.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:10:51.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:10:51.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:10:51.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:10:51.399 [DEBUG] [Thread-191926] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:10:51.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:10:51.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:10:17', tmtdew=8.26493, humidity=57.9447, cloud=0.0, wind=14.8223, temperature=16.1178, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:10:39.072', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:10:51.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:10:51.494 [DEBUG] [Thread-191929] [transport.py] [_log()] starting thread (client mode): 0xae50b9d0
2026-04-12T16:10:51.495 [DEBUG] [Thread-191929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:10:51.510 [DEBUG] [Thread-191929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:10:51.510 [INFO] [Thread-191929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] client lang: <none>
2026-04-12T16:10:51.517 [DEBUG] [Thread-191929] [transport.py] [_log()] server lang: <none>
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] kex follows: False
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] Compression: none
2026-04-12T16:10:51.518 [DEBUG] [Thread-191929] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:10:51.582 [DEBUG] [Thread-191929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:10:51.583 [DEBUG] [Thread-191929] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:10:51.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:10:51.584 [DEBUG] [Thread-191929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:10:51.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:10:51.641 [DEBUG] [Thread-191929] [transport.py] [_log()] userauth is OK
2026-04-12T16:10:51.641 [DEBUG] [Thread-191929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:10:51.642 [DEBUG] [Thread-191929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:10:51.642 [DEBUG] [Thread-191929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:10:51.642 [DEBUG] [Thread-191929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:10:51.660 [INFO] [Thread-191929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:10:51.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:10:51.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:10:52.494 [DEBUG] [Thread-191929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:10:52.494 [DEBUG] [Thread-191929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:10:52.542 [DEBUG] [Thread-191929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:10:52.543 [DEBUG] [Thread-191929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:10:52.552 [DEBUG] [Thread-191929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:10:52.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:10:52.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:10:52.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:10:52.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:10:52.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:10:52.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:10:52.592 [DEBUG] [Thread-191929] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:10:57.830 [DEBUG] [Thread-191931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:12.886 [DEBUG] [Thread-191932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:22.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:11:22.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:11:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:11:23.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 10, 52), 8.18068, 58.452, 0.0, 20.1485, 16.8354, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:11:23.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:10:52
2026-04-12T16:11:24.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:11:24.393 [DEBUG] [Thread-191933] [transport.py] [_log()] starting thread (client mode): 0xae5b7040
2026-04-12T16:11:24.393 [DEBUG] [Thread-191933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:11:24.413 [DEBUG] [Thread-191933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:11:24.413 [INFO] [Thread-191933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] client lang: <none>
2026-04-12T16:11:24.416 [DEBUG] [Thread-191933] [transport.py] [_log()] server lang: <none>
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] kex follows: False
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] Compression: none
2026-04-12T16:11:24.417 [DEBUG] [Thread-191933] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:11:24.431 [DEBUG] [Thread-191933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:11:24.432 [DEBUG] [Thread-191933] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:11:24.432 [DEBUG] [Thread-191933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:11:24.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:11:24.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:11:24.436 [DEBUG] [Thread-191933] [transport.py] [_log()] userauth is OK
2026-04-12T16:11:24.436 [DEBUG] [Thread-191933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:11:24.436 [DEBUG] [Thread-191933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:11:24.436 [DEBUG] [Thread-191933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:11:24.436 [DEBUG] [Thread-191933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:11:24.460 [INFO] [Thread-191933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:11:24.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:11:25.180 [DEBUG] [Thread-191933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:11:25.180 [DEBUG] [Thread-191933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:11:25.180 [DEBUG] [Thread-191933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:11:25.222 [DEBUG] [Thread-191933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:11:25.222 [DEBUG] [Thread-191933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:11:25.225 [DEBUG] [Thread-191933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:11:25.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:11:25.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:11:25.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:11:25.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:11:25.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:11:25.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:11:25.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:11:25.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:11:25.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:11:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.590730 -999.00  +16.10   8.86     64   +9.40 1 1 1 1 1   887    0 7.35 28.09 ----- 14.0 8.9 263.3 23.1 21.7 -25.8 21.0 -25.7 21.7 -22.5 22.7 -25.4
2026-04-12T16:11:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:11:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:11:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.590730
2026-04-12T16:11:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:11:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:11:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:11:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:11:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:11:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:10:52', tmtdew=8.18068, humidity=58.452, cloud=0.0, wind=20.1485, temperature=16.8354, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:10:39.072', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:11:25.250 [DEBUG] [Thread-191933] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:11:25.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:11:25.336 [DEBUG] [Thread-191936] [transport.py] [_log()] starting thread (client mode): 0xae5b71f0
2026-04-12T16:11:25.336 [DEBUG] [Thread-191936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:11:25.352 [DEBUG] [Thread-191936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:11:25.353 [INFO] [Thread-191936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:11:25.360 [DEBUG] [Thread-191936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] client lang: <none>
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] server lang: <none>
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] kex follows: False
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] Compression: none
2026-04-12T16:11:25.361 [DEBUG] [Thread-191936] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:11:25.422 [DEBUG] [Thread-191936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:11:25.422 [DEBUG] [Thread-191936] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:11:25.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:11:25.424 [DEBUG] [Thread-191936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:11:25.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:11:25.481 [DEBUG] [Thread-191936] [transport.py] [_log()] userauth is OK
2026-04-12T16:11:25.482 [DEBUG] [Thread-191936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:11:25.482 [DEBUG] [Thread-191936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:11:25.482 [DEBUG] [Thread-191936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:11:25.482 [DEBUG] [Thread-191936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:11:25.500 [INFO] [Thread-191936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:11:25.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:11:25.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:11:26.340 [DEBUG] [Thread-191936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:11:26.340 [DEBUG] [Thread-191936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:11:26.388 [DEBUG] [Thread-191936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:11:26.388 [DEBUG] [Thread-191936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:11:26.398 [DEBUG] [Thread-191936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:11:26.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:11:26.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:11:26.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:11:26.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:11:26.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:11:26.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:11:26.435 [DEBUG] [Thread-191936] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:11:27.923 [DEBUG] [Thread-191938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:42.971 [DEBUG] [Thread-191939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:44.186 [DEBUG] [Thread-191940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:47.156 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:47.157 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:56.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:11:56.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:11:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:11:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 11, 27), 8.27038, 57.8946, 0.0, 18.6685, 16.2014, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:11:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:11:27
2026-04-12T16:11:58.009 [DEBUG] [Thread-191941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:11:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:11:58.224 [DEBUG] [Thread-191942] [transport.py] [_log()] starting thread (client mode): 0xb0fea500
2026-04-12T16:11:58.224 [DEBUG] [Thread-191942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:11:58.238 [DEBUG] [Thread-191942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:11:58.239 [INFO] [Thread-191942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] client lang: <none>
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] server lang: <none>
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] kex follows: False
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:11:58.242 [DEBUG] [Thread-191942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:11:58.243 [DEBUG] [Thread-191942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:11:58.243 [DEBUG] [Thread-191942] [transport.py] [_log()] Compression: none
2026-04-12T16:11:58.243 [DEBUG] [Thread-191942] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:11:58.252 [DEBUG] [Thread-191942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:11:58.253 [DEBUG] [Thread-191942] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:11:58.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:11:58.254 [DEBUG] [Thread-191942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:11:58.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:11:58.256 [DEBUG] [Thread-191942] [transport.py] [_log()] userauth is OK
2026-04-12T16:11:58.256 [DEBUG] [Thread-191942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:11:58.257 [DEBUG] [Thread-191942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:11:58.257 [DEBUG] [Thread-191942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:11:58.257 [DEBUG] [Thread-191942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:11:58.276 [INFO] [Thread-191942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:11:58.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:11:58.906 [DEBUG] [Thread-191942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:11:58.907 [DEBUG] [Thread-191942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:11:58.907 [DEBUG] [Thread-191942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:11:58.948 [DEBUG] [Thread-191942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:11:58.948 [DEBUG] [Thread-191942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:11:58.952 [DEBUG] [Thread-191942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:11:58.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:11:58.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:11:58.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:11:58.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:11:58.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:11:58.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:11:58.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:11:58.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:11:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:11:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.591425 -999.00  +16.00  14.05     63   +9.00 1 1 1 1 1   887    0 7.67 31.53 ----- 11.2 14.1 270.2 16.4 21.6 -28.2 21.0 -25.5 21.6 -23.5 22.6 -26.6
2026-04-12T16:11:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:11:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:11:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.591425
2026-04-12T16:11:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:11:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:11:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:11:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:11:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:11:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:11:27', tmtdew=8.27038, humidity=57.8946, cloud=0.0, wind=18.6685, temperature=16.2014, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:11:39.120', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:11:58.979 [DEBUG] [Thread-191942] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:11:59.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:11:59.072 [DEBUG] [Thread-191945] [transport.py] [_log()] starting thread (client mode): 0xae536aa0
2026-04-12T16:11:59.073 [DEBUG] [Thread-191945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:11:59.088 [DEBUG] [Thread-191945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:11:59.088 [INFO] [Thread-191945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] client lang: <none>
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] server lang: <none>
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] kex follows: False
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:11:59.096 [DEBUG] [Thread-191945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:11:59.097 [DEBUG] [Thread-191945] [transport.py] [_log()] Compression: none
2026-04-12T16:11:59.097 [DEBUG] [Thread-191945] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:11:59.156 [DEBUG] [Thread-191945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:11:59.157 [DEBUG] [Thread-191945] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:11:59.157 [DEBUG] [Thread-191945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:11:59.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:11:59.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:11:59.213 [DEBUG] [Thread-191945] [transport.py] [_log()] userauth is OK
2026-04-12T16:11:59.213 [DEBUG] [Thread-191945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:11:59.213 [DEBUG] [Thread-191945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:11:59.213 [DEBUG] [Thread-191945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:11:59.213 [DEBUG] [Thread-191945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:11:59.232 [INFO] [Thread-191945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:11:59.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:11:59.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:12:00.046 [DEBUG] [Thread-191945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:12:00.046 [DEBUG] [Thread-191945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:12:00.095 [DEBUG] [Thread-191945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:12:00.095 [DEBUG] [Thread-191945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:12:00.108 [DEBUG] [Thread-191945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:12:00.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:12:00.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:12:00.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:12:00.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:12:00.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:12:00.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:12:00.150 [DEBUG] [Thread-191945] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:12:13.048 [DEBUG] [Thread-191947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:12:28.097 [DEBUG] [Thread-191948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:12:30.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:12:30.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:12:30.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:12:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 12, 3), 8.27785, 57.8449, 0.0, 18.545, 16.1186, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:12:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:12:03
2026-04-12T16:12:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:12:31.985 [DEBUG] [Thread-191949] [transport.py] [_log()] starting thread (client mode): 0xb0f428f0
2026-04-12T16:12:31.986 [DEBUG] [Thread-191949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:12:32.007 [DEBUG] [Thread-191949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:12:32.007 [INFO] [Thread-191949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] client lang: <none>
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] server lang: <none>
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] kex follows: False
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] Compression: none
2026-04-12T16:12:32.009 [DEBUG] [Thread-191949] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:12:32.026 [DEBUG] [Thread-191949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:12:32.027 [DEBUG] [Thread-191949] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:12:32.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:12:32.027 [DEBUG] [Thread-191949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:12:32.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:12:32.030 [DEBUG] [Thread-191949] [transport.py] [_log()] userauth is OK
2026-04-12T16:12:32.030 [DEBUG] [Thread-191949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:12:32.030 [DEBUG] [Thread-191949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:12:32.030 [DEBUG] [Thread-191949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:12:32.030 [DEBUG] [Thread-191949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:12:32.053 [INFO] [Thread-191949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:12:32.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:12:32.680 [DEBUG] [Thread-191949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:12:32.680 [DEBUG] [Thread-191949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:12:32.681 [DEBUG] [Thread-191949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:12:32.721 [DEBUG] [Thread-191949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:12:32.722 [DEBUG] [Thread-191949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:12:32.725 [DEBUG] [Thread-191949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:12:32.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:12:32.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:12:32.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:12:32.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:12:32.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:12:32.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:12:32.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:12:32.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:12:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:12:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.591772 -999.00  +16.00  16.29     63   +9.00 1 1 1 1 1   887    0 7.68 33.38 ----- 17.4 16.3 260.8 20.6 21.6 -28.6 21.0 -25.0 21.5 -24.0 22.6 -25.3
2026-04-12T16:12:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:12:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:12:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.591772
2026-04-12T16:12:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:12:32.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:12:32.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:12:32.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:12:32.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:12:32.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:12:03', tmtdew=8.27785, humidity=57.8449, cloud=0.0, wind=18.545, temperature=16.1186, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:12:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:12:32.750 [DEBUG] [Thread-191949] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:12:32.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:12:32.848 [DEBUG] [Thread-191952] [transport.py] [_log()] starting thread (client mode): 0xb0f40d00
2026-04-12T16:12:32.848 [DEBUG] [Thread-191952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:12:32.863 [DEBUG] [Thread-191952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:12:32.863 [INFO] [Thread-191952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:12:32.871 [DEBUG] [Thread-191952] [transport.py] [_log()] client lang: <none>
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] server lang: <none>
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] kex follows: False
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] Compression: none
2026-04-12T16:12:32.872 [DEBUG] [Thread-191952] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:12:32.927 [DEBUG] [Thread-191952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:12:32.927 [DEBUG] [Thread-191952] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:12:32.928 [DEBUG] [Thread-191952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:12:32.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:12:32.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:12:32.984 [DEBUG] [Thread-191952] [transport.py] [_log()] userauth is OK
2026-04-12T16:12:32.984 [DEBUG] [Thread-191952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:12:32.984 [DEBUG] [Thread-191952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:12:32.984 [DEBUG] [Thread-191952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:12:32.984 [DEBUG] [Thread-191952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:12:33.002 [INFO] [Thread-191952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:12:33.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:12:33.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:12:33.851 [DEBUG] [Thread-191952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:12:33.852 [DEBUG] [Thread-191952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:12:33.900 [DEBUG] [Thread-191952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:12:33.900 [DEBUG] [Thread-191952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:12:33.909 [DEBUG] [Thread-191952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:12:33.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:12:33.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:12:33.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:12:33.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:12:33.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:12:33.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:12:33.953 [DEBUG] [Thread-191952] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:12:43.129 [DEBUG] [Thread-191954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:12:44.231 [DEBUG] [Thread-191955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:12:47.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:12:47.297 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:12:58.184 [DEBUG] [Thread-191956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:13:03.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:13:03.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:13:03.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:13:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 12, 39), 8.22728, 58.219, 0.0, 14.3978, 16.6354, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:13:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:12:39
2026-04-12T16:13:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:13:05.839 [DEBUG] [Thread-191957] [transport.py] [_log()] starting thread (client mode): 0xb0fcc550
2026-04-12T16:13:05.839 [DEBUG] [Thread-191957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:13:05.858 [DEBUG] [Thread-191957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:13:05.858 [INFO] [Thread-191957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] client lang: <none>
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] server lang: <none>
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] kex follows: False
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] Compression: none
2026-04-12T16:13:05.862 [DEBUG] [Thread-191957] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:13:05.870 [DEBUG] [Thread-191957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:13:05.871 [DEBUG] [Thread-191957] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:13:05.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:13:05.871 [DEBUG] [Thread-191957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:13:05.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:13:05.873 [DEBUG] [Thread-191957] [transport.py] [_log()] userauth is OK
2026-04-12T16:13:05.873 [DEBUG] [Thread-191957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:13:05.873 [DEBUG] [Thread-191957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:13:05.873 [DEBUG] [Thread-191957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:13:05.873 [DEBUG] [Thread-191957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:13:05.892 [INFO] [Thread-191957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:13:05.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:13:06.533 [DEBUG] [Thread-191957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:13:06.533 [DEBUG] [Thread-191957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:13:06.534 [DEBUG] [Thread-191957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:13:06.574 [DEBUG] [Thread-191957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:13:06.574 [DEBUG] [Thread-191957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:13:06.578 [DEBUG] [Thread-191957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:13:06.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:13:06.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:13:06.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:13:06.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:13:06.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:13:06.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:13:06.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:13:06.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:13:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:13:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.592119 -999.00  +15.70  18.58     64   +8.90 1 1 1 1 1   887    0 7.59 32.96 ----- 15.5 18.6 276.0 24.3 21.2 -28.9 20.8 -26.3 21.2 -25.2 22.2 -28.1
2026-04-12T16:13:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:13:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:13:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.592119
2026-04-12T16:13:06.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:13:06.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:13:06.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:13:06.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:13:06.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:13:06.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:12:39', tmtdew=8.22728, humidity=58.219, cloud=0.0, wind=14.3978, temperature=16.6354, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:12:39.082', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:13:06.606 [DEBUG] [Thread-191957] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:13:06.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:13:06.711 [DEBUG] [Thread-191960] [transport.py] [_log()] starting thread (client mode): 0xb0fe8b80
2026-04-12T16:13:06.711 [DEBUG] [Thread-191960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:13:06.726 [DEBUG] [Thread-191960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:13:06.726 [INFO] [Thread-191960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] client lang: <none>
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] server lang: <none>
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] kex follows: False
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:13:06.734 [DEBUG] [Thread-191960] [transport.py] [_log()] Compression: none
2026-04-12T16:13:06.735 [DEBUG] [Thread-191960] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:13:06.791 [DEBUG] [Thread-191960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:13:06.792 [DEBUG] [Thread-191960] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:13:06.792 [DEBUG] [Thread-191960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:13:06.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:13:06.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:13:06.848 [DEBUG] [Thread-191960] [transport.py] [_log()] userauth is OK
2026-04-12T16:13:06.848 [DEBUG] [Thread-191960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:13:06.848 [DEBUG] [Thread-191960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:13:06.848 [DEBUG] [Thread-191960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:13:06.848 [DEBUG] [Thread-191960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:13:06.868 [INFO] [Thread-191960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:13:06.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:13:06.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:13:07.704 [DEBUG] [Thread-191960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:13:07.704 [DEBUG] [Thread-191960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:13:07.753 [DEBUG] [Thread-191960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:13:07.753 [DEBUG] [Thread-191960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:13:07.761 [DEBUG] [Thread-191960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:13:07.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:13:07.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:13:07.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:13:07.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:13:07.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:13:07.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:13:07.795 [DEBUG] [Thread-191960] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:13:13.225 [DEBUG] [Thread-191962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:13:28.283 [DEBUG] [Thread-191963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:13:37.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:13:37.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:13:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:13:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 13, 14), 8.19699, 58.159, 0.0, 22.6382, 15.9012, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:13:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:13:14
2026-04-12T16:13:39.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:13:39.645 [DEBUG] [Thread-191964] [transport.py] [_log()] starting thread (client mode): 0xae535720
2026-04-12T16:13:39.645 [DEBUG] [Thread-191964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:13:39.666 [DEBUG] [Thread-191964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:13:39.666 [INFO] [Thread-191964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:13:39.669 [DEBUG] [Thread-191964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] client lang: <none>
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] server lang: <none>
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] kex follows: False
2026-04-12T16:13:39.670 [DEBUG] [Thread-191964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:13:39.671 [DEBUG] [Thread-191964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:13:39.671 [DEBUG] [Thread-191964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:13:39.671 [DEBUG] [Thread-191964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:13:39.671 [DEBUG] [Thread-191964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:13:39.671 [DEBUG] [Thread-191964] [transport.py] [_log()] Compression: none
2026-04-12T16:13:39.671 [DEBUG] [Thread-191964] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:13:39.689 [DEBUG] [Thread-191964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:13:39.690 [DEBUG] [Thread-191964] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:13:39.691 [DEBUG] [Thread-191964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:13:39.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:13:39.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:13:39.693 [DEBUG] [Thread-191964] [transport.py] [_log()] userauth is OK
2026-04-12T16:13:39.693 [DEBUG] [Thread-191964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:13:39.693 [DEBUG] [Thread-191964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:13:39.693 [DEBUG] [Thread-191964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:13:39.693 [DEBUG] [Thread-191964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:13:39.707 [INFO] [Thread-191964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:13:39.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:13:40.291 [DEBUG] [Thread-191964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:13:40.291 [DEBUG] [Thread-191964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:13:40.292 [DEBUG] [Thread-191964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:13:40.332 [DEBUG] [Thread-191964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:13:40.333 [DEBUG] [Thread-191964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:13:40.336 [DEBUG] [Thread-191964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:13:40.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:13:40.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:13:40.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:13:40.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:13:40.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:13:40.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:13:40.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:13:40.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:13:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:13:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.592466 -999.00  +15.70  13.38     65   +9.20 1 1 1 1 1   887    0 7.58 32.10 ----- 15.6 13.4 280.8 20.5 21.0 -28.5 20.6 -26.3 20.6 -28.3 21.7 -27.5
2026-04-12T16:13:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:13:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:13:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.592466
2026-04-12T16:13:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:13:40.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:13:40.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:13:40.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:13:40.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:13:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:13:14', tmtdew=8.19699, humidity=58.159, cloud=0.0, wind=22.6382, temperature=15.9012, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:13:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:13:40.363 [DEBUG] [Thread-191964] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:13:40.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:13:40.467 [DEBUG] [Thread-191967] [transport.py] [_log()] starting thread (client mode): 0xb0fead70
2026-04-12T16:13:40.467 [DEBUG] [Thread-191967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:13:40.483 [DEBUG] [Thread-191967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:13:40.483 [INFO] [Thread-191967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:13:40.490 [DEBUG] [Thread-191967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] client lang: <none>
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] server lang: <none>
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] kex follows: False
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] Compression: none
2026-04-12T16:13:40.491 [DEBUG] [Thread-191967] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:13:40.551 [DEBUG] [Thread-191967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:13:40.552 [DEBUG] [Thread-191967] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:13:40.552 [DEBUG] [Thread-191967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:13:40.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:13:40.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:13:40.607 [DEBUG] [Thread-191967] [transport.py] [_log()] userauth is OK
2026-04-12T16:13:40.607 [DEBUG] [Thread-191967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:13:40.608 [DEBUG] [Thread-191967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:13:40.608 [DEBUG] [Thread-191967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:13:40.608 [DEBUG] [Thread-191967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:13:40.625 [INFO] [Thread-191967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:13:40.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:13:40.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:13:41.447 [DEBUG] [Thread-191967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:13:41.447 [DEBUG] [Thread-191967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:13:41.495 [DEBUG] [Thread-191967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:13:41.495 [DEBUG] [Thread-191967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:13:41.504 [DEBUG] [Thread-191967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:13:41.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:13:41.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:13:41.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:13:41.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:13:41.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:13:41.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:13:41.542 [DEBUG] [Thread-191967] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:13:43.324 [DEBUG] [Thread-191969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:13:44.278 [DEBUG] [Thread-191970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:13:47.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:13:47.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:13:58.376 [DEBUG] [Thread-191971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:14:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:14:11.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:14:11.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:14:12.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 13, 49), 7.84358, 59.7429, 0.0, 22.6886, 16.6019, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:14:12.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:13:49
2026-04-12T16:14:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:14:13.342 [DEBUG] [Thread-191972] [transport.py] [_log()] starting thread (client mode): 0xb0fea230
2026-04-12T16:14:13.342 [DEBUG] [Thread-191972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:14:13.362 [DEBUG] [Thread-191972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:14:13.362 [INFO] [Thread-191972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:14:13.366 [DEBUG] [Thread-191972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:14:13.366 [DEBUG] [Thread-191972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:14:13.366 [DEBUG] [Thread-191972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:14:13.366 [DEBUG] [Thread-191972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:13.366 [DEBUG] [Thread-191972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:13.366 [DEBUG] [Thread-191972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:13.366 [DEBUG] [Thread-191972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] client lang: <none>
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] server lang: <none>
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] kex follows: False
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] Compression: none
2026-04-12T16:14:13.367 [DEBUG] [Thread-191972] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:14:13.386 [DEBUG] [Thread-191972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:14:13.387 [DEBUG] [Thread-191972] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:14:13.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:14:13.388 [DEBUG] [Thread-191972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:14:13.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:14:13.390 [DEBUG] [Thread-191972] [transport.py] [_log()] userauth is OK
2026-04-12T16:14:13.390 [DEBUG] [Thread-191972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:14:13.390 [DEBUG] [Thread-191972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:14:13.390 [DEBUG] [Thread-191972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:14:13.390 [DEBUG] [Thread-191972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:14:13.410 [INFO] [Thread-191972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:14:13.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:14:13.414 [DEBUG] [Thread-191974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:14:14.030 [DEBUG] [Thread-191972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:14:14.030 [DEBUG] [Thread-191972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:14:14.031 [DEBUG] [Thread-191972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:14:14.071 [DEBUG] [Thread-191972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:14:14.072 [DEBUG] [Thread-191972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:14:14.075 [DEBUG] [Thread-191972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:14:14.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:14:14.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:14:14.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:14:14.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:14:14.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:14:14.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:14:14.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:14:14.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:14:14.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:14:14.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.592814 -999.00  +15.70  16.24     62   +8.60 1 1 1 1 1   887    0 7.55 29.07 ----- 19.7 16.2 283.8 20.6 21.1 -26.0 20.6 -25.2 20.9 -23.4 21.8 -23.6
2026-04-12T16:14:14.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:14:14.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:14:14.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.592814
2026-04-12T16:14:14.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:14:14.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:14:14.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:14:14.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:14:14.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:14:14.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:13:49', tmtdew=7.84358, humidity=59.7429, cloud=0.0, wind=22.6886, temperature=16.6019, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:13:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:14:14.104 [DEBUG] [Thread-191972] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:14:14.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:14:14.206 [DEBUG] [Thread-191976] [transport.py] [_log()] starting thread (client mode): 0xae5377f0
2026-04-12T16:14:14.206 [DEBUG] [Thread-191976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:14:14.221 [DEBUG] [Thread-191976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:14:14.221 [INFO] [Thread-191976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] client lang: <none>
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] server lang: <none>
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] kex follows: False
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] Compression: none
2026-04-12T16:14:14.229 [DEBUG] [Thread-191976] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:14:14.287 [DEBUG] [Thread-191976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:14:14.287 [DEBUG] [Thread-191976] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:14:14.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:14:14.288 [DEBUG] [Thread-191976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:14:14.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:14:14.347 [DEBUG] [Thread-191976] [transport.py] [_log()] userauth is OK
2026-04-12T16:14:14.347 [DEBUG] [Thread-191976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:14:14.347 [DEBUG] [Thread-191976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:14:14.347 [DEBUG] [Thread-191976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:14:14.347 [DEBUG] [Thread-191976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:14:14.366 [INFO] [Thread-191976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:14:14.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:14:14.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:14:15.175 [DEBUG] [Thread-191976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:14:15.176 [DEBUG] [Thread-191976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:14:15.224 [DEBUG] [Thread-191976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:14:15.224 [DEBUG] [Thread-191976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:14:15.234 [DEBUG] [Thread-191976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:14:15.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:14:15.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:14:15.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:14:15.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:14:15.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:14:15.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:14:15.271 [DEBUG] [Thread-191976] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:14:28.451 [DEBUG] [Thread-191978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:14:43.504 [DEBUG] [Thread-191979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:14:44.322 [DEBUG] [Thread-191980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:14:45.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:14:45.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:14:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:14:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 14, 25), 8.21681, 57.9738, 0.0, 19.921, 15.6347, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:14:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:14:25
2026-04-12T16:14:46.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:14:47.100 [DEBUG] [Thread-191981] [transport.py] [_log()] starting thread (client mode): 0xae52c7c0
2026-04-12T16:14:47.101 [DEBUG] [Thread-191981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:14:47.121 [DEBUG] [Thread-191981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:14:47.121 [INFO] [Thread-191981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] client lang: <none>
2026-04-12T16:14:47.124 [DEBUG] [Thread-191981] [transport.py] [_log()] server lang: <none>
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] kex follows: False
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] Compression: none
2026-04-12T16:14:47.125 [DEBUG] [Thread-191981] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:14:47.139 [DEBUG] [Thread-191981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:14:47.139 [DEBUG] [Thread-191981] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:14:47.139 [DEBUG] [Thread-191981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:14:47.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:14:47.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:14:47.140 [DEBUG] [Thread-191981] [transport.py] [_log()] userauth is OK
2026-04-12T16:14:47.140 [DEBUG] [Thread-191981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:14:47.140 [DEBUG] [Thread-191981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:14:47.140 [DEBUG] [Thread-191981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:14:47.140 [DEBUG] [Thread-191981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:14:47.155 [INFO] [Thread-191981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:14:47.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:14:47.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:14:47.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:14:47.822 [DEBUG] [Thread-191981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:14:47.823 [DEBUG] [Thread-191981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:14:47.823 [DEBUG] [Thread-191981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:14:47.864 [DEBUG] [Thread-191981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:14:47.864 [DEBUG] [Thread-191981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:14:47.867 [DEBUG] [Thread-191981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:14:47.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:14:47.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:14:47.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:14:47.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:14:47.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:14:47.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:14:47.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:14:47.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:14:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:14:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.593508 -999.00  +15.60  15.65     64   +9.00 1 1 1 1 1   887    0 7.67 32.84 ----- 18.6 15.7 266.0 25.9 20.9 -27.0 20.5 -25.1 20.6 -22.0 21.7 -25.0
2026-04-12T16:14:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:14:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:14:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.593508
2026-04-12T16:14:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:14:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:14:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:14:47.890 [DEBUG] [Thread-191981] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:14:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:14:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:14:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:14:25', tmtdew=8.21681, humidity=57.9738, cloud=0.0, wind=19.921, temperature=15.6347, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:14:39.091', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:14:47.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:14:47.989 [DEBUG] [Thread-191984] [transport.py] [_log()] starting thread (client mode): 0xae52d210
2026-04-12T16:14:47.990 [DEBUG] [Thread-191984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:14:48.008 [DEBUG] [Thread-191984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:14:48.009 [INFO] [Thread-191984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] client lang: <none>
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] server lang: <none>
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] kex follows: False
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:14:48.019 [DEBUG] [Thread-191984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:14:48.020 [DEBUG] [Thread-191984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:14:48.020 [DEBUG] [Thread-191984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:14:48.020 [DEBUG] [Thread-191984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:14:48.020 [DEBUG] [Thread-191984] [transport.py] [_log()] Compression: none
2026-04-12T16:14:48.020 [DEBUG] [Thread-191984] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:14:48.078 [DEBUG] [Thread-191984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:14:48.079 [DEBUG] [Thread-191984] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:14:48.079 [DEBUG] [Thread-191984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:14:48.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:14:48.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:14:48.134 [DEBUG] [Thread-191984] [transport.py] [_log()] userauth is OK
2026-04-12T16:14:48.134 [DEBUG] [Thread-191984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:14:48.134 [DEBUG] [Thread-191984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:14:48.135 [DEBUG] [Thread-191984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:14:48.135 [DEBUG] [Thread-191984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:14:48.158 [INFO] [Thread-191984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:14:48.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:14:48.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:14:49.002 [DEBUG] [Thread-191984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:14:49.003 [DEBUG] [Thread-191984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:14:49.052 [DEBUG] [Thread-191984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:14:49.053 [DEBUG] [Thread-191984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:14:49.065 [DEBUG] [Thread-191984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:14:49.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:14:49.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:14:49.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:14:49.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:14:49.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:14:49.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:14:49.101 [DEBUG] [Thread-191984] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:14:58.539 [DEBUG] [Thread-191986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:15:13.592 [DEBUG] [Thread-191987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:15:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:15:19.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:15:19.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:15:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 15), 8.0687, 58.4903, 0.0, 16.2688, 16.1339, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:15:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:15:00
2026-04-12T16:15:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:15:20.920 [DEBUG] [Thread-191988] [transport.py] [_log()] starting thread (client mode): 0xae537b80
2026-04-12T16:15:20.920 [DEBUG] [Thread-191988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:15:20.941 [DEBUG] [Thread-191988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:15:20.942 [INFO] [Thread-191988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] client lang: <none>
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] server lang: <none>
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] kex follows: False
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:15:20.946 [DEBUG] [Thread-191988] [transport.py] [_log()] Compression: none
2026-04-12T16:15:20.947 [DEBUG] [Thread-191988] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:15:20.965 [DEBUG] [Thread-191988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:15:20.966 [DEBUG] [Thread-191988] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:15:20.966 [DEBUG] [Thread-191988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:15:20.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:15:20.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:15:20.968 [DEBUG] [Thread-191988] [transport.py] [_log()] userauth is OK
2026-04-12T16:15:20.969 [DEBUG] [Thread-191988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:15:20.969 [DEBUG] [Thread-191988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:15:20.969 [DEBUG] [Thread-191988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:15:20.969 [DEBUG] [Thread-191988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:15:20.986 [INFO] [Thread-191988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:15:20.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:15:28.603 [DEBUG] [Thread-191988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:15:28.603 [DEBUG] [Thread-191988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:15:28.603 [DEBUG] [Thread-191988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:15:28.632 [DEBUG] [Thread-191990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:15:28.645 [DEBUG] [Thread-191988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:15:28.645 [DEBUG] [Thread-191988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:15:28.648 [DEBUG] [Thread-191988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:15:28.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:15:28.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:15:28.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:15:28.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:15:28.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:15:28.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:15:28.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:15:28.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:15:28.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:15:28.837 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T16:15:28.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:15:00', tmtdew=8.0687, humidity=58.4903, cloud=0.0, wind=16.2688, temperature=16.1339, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:15:28.838 [DEBUG] [Thread-191988] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:15:28.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:15:28.937 [DEBUG] [Thread-191992] [transport.py] [_log()] starting thread (client mode): 0xae5a61a0
2026-04-12T16:15:28.938 [DEBUG] [Thread-191992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:15:28.953 [DEBUG] [Thread-191992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:15:28.953 [INFO] [Thread-191992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:15:28.960 [DEBUG] [Thread-191992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:15:28.961 [DEBUG] [Thread-191992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:15:28.961 [DEBUG] [Thread-191992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:15:28.961 [DEBUG] [Thread-191992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:15:28.961 [DEBUG] [Thread-191992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:15:28.961 [DEBUG] [Thread-191992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:15:28.961 [DEBUG] [Thread-191992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:15:28.961 [DEBUG] [Thread-191992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] client lang: <none>
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] server lang: <none>
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] kex follows: False
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] Compression: none
2026-04-12T16:15:28.962 [DEBUG] [Thread-191992] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:15:29.027 [DEBUG] [Thread-191992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:15:29.027 [DEBUG] [Thread-191992] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:15:29.028 [DEBUG] [Thread-191992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:15:29.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:15:29.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:15:29.086 [DEBUG] [Thread-191992] [transport.py] [_log()] userauth is OK
2026-04-12T16:15:29.086 [DEBUG] [Thread-191992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:15:29.086 [DEBUG] [Thread-191992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:15:29.086 [DEBUG] [Thread-191992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:15:29.086 [DEBUG] [Thread-191992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:15:29.105 [INFO] [Thread-191992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:15:29.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:15:29.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:15:29.917 [DEBUG] [Thread-191992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:15:29.917 [DEBUG] [Thread-191992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:15:29.966 [DEBUG] [Thread-191992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:15:29.967 [DEBUG] [Thread-191992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:15:29.976 [DEBUG] [Thread-191992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:15:29.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:15:29.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:15:29.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:15:30.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:15:30.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:15:30.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:15:30.013 [DEBUG] [Thread-191992] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:15:43.675 [DEBUG] [Thread-191994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:15:44.380 [DEBUG] [Thread-191995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:15:47.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:15:47.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:15:58.739 [DEBUG] [Thread-191996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:16:00.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:16:00.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:16:00.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:16:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 15, 35), 8.20244, 58.2845, 0.0, 21.9478, 16.5019, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:16:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:15:35
2026-04-12T16:16:01.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:16:01.919 [DEBUG] [Thread-191997] [transport.py] [_log()] starting thread (client mode): 0xb0fce680
2026-04-12T16:16:01.920 [DEBUG] [Thread-191997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:16:01.940 [DEBUG] [Thread-191997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:16:01.940 [INFO] [Thread-191997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] client lang: <none>
2026-04-12T16:16:01.943 [DEBUG] [Thread-191997] [transport.py] [_log()] server lang: <none>
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] kex follows: False
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] Compression: none
2026-04-12T16:16:01.944 [DEBUG] [Thread-191997] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:16:01.956 [DEBUG] [Thread-191997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:16:01.956 [DEBUG] [Thread-191997] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:16:01.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:16:01.958 [DEBUG] [Thread-191997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:16:01.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:16:01.960 [DEBUG] [Thread-191997] [transport.py] [_log()] userauth is OK
2026-04-12T16:16:01.960 [DEBUG] [Thread-191997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:16:01.960 [DEBUG] [Thread-191997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:16:01.960 [DEBUG] [Thread-191997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:16:01.960 [DEBUG] [Thread-191997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:16:01.979 [INFO] [Thread-191997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:16:01.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:16:02.990 [DEBUG] [Thread-191997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:16:02.991 [DEBUG] [Thread-191997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:16:02.991 [DEBUG] [Thread-191997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:16:03.032 [DEBUG] [Thread-191997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:16:03.032 [DEBUG] [Thread-191997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:16:03.036 [DEBUG] [Thread-191997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:16:03.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:16:03.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:16:03.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:16:03.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:16:03.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:16:03.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:16:03.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:16:03.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:16:03.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:16:03.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 
2026-04-12T16:16:03.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:16:03.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:16:03.065 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T16:16:03.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:15:35', tmtdew=8.20244, humidity=58.2845, cloud=0.0, wind=21.9478, temperature=16.5019, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:16:03.066 [DEBUG] [Thread-191997] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:16:03.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:16:03.158 [DEBUG] [Thread-192000] [transport.py] [_log()] starting thread (client mode): 0xae535030
2026-04-12T16:16:03.159 [DEBUG] [Thread-192000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:16:03.174 [DEBUG] [Thread-192000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:16:03.174 [INFO] [Thread-192000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] client lang: <none>
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] server lang: <none>
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] kex follows: False
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:16:03.182 [DEBUG] [Thread-192000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:16:03.183 [DEBUG] [Thread-192000] [transport.py] [_log()] Compression: none
2026-04-12T16:16:03.183 [DEBUG] [Thread-192000] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:16:03.239 [DEBUG] [Thread-192000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:16:03.239 [DEBUG] [Thread-192000] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:16:03.240 [DEBUG] [Thread-192000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:16:03.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:16:03.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:16:03.297 [DEBUG] [Thread-192000] [transport.py] [_log()] userauth is OK
2026-04-12T16:16:03.297 [DEBUG] [Thread-192000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:16:03.297 [DEBUG] [Thread-192000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:16:03.297 [DEBUG] [Thread-192000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:16:03.297 [DEBUG] [Thread-192000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:16:03.319 [INFO] [Thread-192000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:16:03.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:16:03.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:16:04.196 [DEBUG] [Thread-192000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:16:04.197 [DEBUG] [Thread-192000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:16:04.245 [DEBUG] [Thread-192000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:16:04.245 [DEBUG] [Thread-192000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:16:04.254 [DEBUG] [Thread-192000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:16:04.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:16:04.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:16:04.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:16:04.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:16:04.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:16:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:16:04.291 [DEBUG] [Thread-192000] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:16:13.779 [DEBUG] [Thread-192002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:16:28.841 [DEBUG] [Thread-192003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:16:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:16:34.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:16:34.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:16:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 16, 11), 8.09114, 58.5564, 0.0, 17.8387, 15.7516, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:16:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:16:11
2026-04-12T16:16:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:16:36.126 [DEBUG] [Thread-192004] [transport.py] [_log()] starting thread (client mode): 0xb0fce920
2026-04-12T16:16:36.126 [DEBUG] [Thread-192004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:16:36.139 [DEBUG] [Thread-192004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:16:36.139 [INFO] [Thread-192004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] client lang: <none>
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] server lang: <none>
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] kex follows: False
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] Compression: none
2026-04-12T16:16:36.141 [DEBUG] [Thread-192004] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:16:36.150 [DEBUG] [Thread-192004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:16:36.151 [DEBUG] [Thread-192004] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:16:36.151 [DEBUG] [Thread-192004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:16:36.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:16:36.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:16:36.152 [DEBUG] [Thread-192004] [transport.py] [_log()] userauth is OK
2026-04-12T16:16:36.153 [DEBUG] [Thread-192004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:16:36.153 [DEBUG] [Thread-192004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:16:36.153 [DEBUG] [Thread-192004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:16:36.153 [DEBUG] [Thread-192004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:16:36.169 [INFO] [Thread-192004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:16:36.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:16:36.722 [DEBUG] [Thread-192004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:16:36.722 [DEBUG] [Thread-192004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:16:36.723 [DEBUG] [Thread-192004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:16:36.763 [DEBUG] [Thread-192004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:16:36.763 [DEBUG] [Thread-192004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:16:36.766 [DEBUG] [Thread-192004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:16:36.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:16:36.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:16:36.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:16:36.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:16:36.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:16:36.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:16:36.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:16:36.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:16:36.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:16:36.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.594550 -999.00  +16.00  18.83     63   +9.10 1 1 1 1 1   887    0 7.29 24.71 ----- 17.6 18.8 282.4 21.4 20.9 -28.3 20.5 -24.7 20.8 -23.0 21.9 -24.1
2026-04-12T16:16:36.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:16:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:16:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.594550
2026-04-12T16:16:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:16:36.792 [DEBUG] [Thread-192004] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:16:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:16:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:16:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:16:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:16:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:16:11', tmtdew=8.09114, humidity=58.5564, cloud=0.0, wind=17.8387, temperature=15.7516, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:16:09.120', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:16:36.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:16:36.890 [DEBUG] [Thread-192007] [transport.py] [_log()] starting thread (client mode): 0xb0fcd8a0
2026-04-12T16:16:36.890 [DEBUG] [Thread-192007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:16:36.905 [DEBUG] [Thread-192007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:16:36.905 [INFO] [Thread-192007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:16:36.922 [DEBUG] [Thread-192007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:16:36.922 [DEBUG] [Thread-192007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:16:36.922 [DEBUG] [Thread-192007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] client lang: <none>
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] server lang: <none>
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] kex follows: False
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:16:36.923 [DEBUG] [Thread-192007] [transport.py] [_log()] Compression: none
2026-04-12T16:16:36.924 [DEBUG] [Thread-192007] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:16:36.979 [DEBUG] [Thread-192007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:16:36.980 [DEBUG] [Thread-192007] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:16:36.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:16:36.981 [DEBUG] [Thread-192007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:16:36.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:16:37.042 [DEBUG] [Thread-192007] [transport.py] [_log()] userauth is OK
2026-04-12T16:16:37.042 [DEBUG] [Thread-192007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:16:37.043 [DEBUG] [Thread-192007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:16:37.043 [DEBUG] [Thread-192007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:16:37.043 [DEBUG] [Thread-192007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:16:37.067 [INFO] [Thread-192007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:16:37.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:16:37.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:16:37.877 [DEBUG] [Thread-192007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:16:37.878 [DEBUG] [Thread-192007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:16:37.926 [DEBUG] [Thread-192007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:16:37.926 [DEBUG] [Thread-192007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:16:37.935 [DEBUG] [Thread-192007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:16:37.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:16: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')
2026-04-12T16:16:37.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:16:37.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:16:37.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:16:37.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:16:37.970 [DEBUG] [Thread-192007] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:16:43.879 [DEBUG] [Thread-192009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:16:44.419 [DEBUG] [Thread-192010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:16:47.861 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:16:47.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:16:58.933 [DEBUG] [Thread-192011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:17:07.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:17:07.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:17:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:17:09.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 16, 46), 7.62457, 60.5706, 0.0, 18.1375, 16.3361, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:17:09.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:16:46
2026-04-12T16:17:09.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:17:09.841 [DEBUG] [Thread-192012] [transport.py] [_log()] starting thread (client mode): 0xae536f20
2026-04-12T16:17:09.841 [DEBUG] [Thread-192012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:17:09.855 [DEBUG] [Thread-192012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:17:09.855 [INFO] [Thread-192012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] client lang: <none>
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] server lang: <none>
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] kex follows: False
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] Compression: none
2026-04-12T16:17:09.858 [DEBUG] [Thread-192012] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:17:09.872 [DEBUG] [Thread-192012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:17:09.872 [DEBUG] [Thread-192012] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:17:09.873 [DEBUG] [Thread-192012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:17:09.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:17:09.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:17:09.874 [DEBUG] [Thread-192012] [transport.py] [_log()] userauth is OK
2026-04-12T16:17:09.874 [DEBUG] [Thread-192012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:17:09.875 [DEBUG] [Thread-192012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:17:09.875 [DEBUG] [Thread-192012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:17:09.875 [DEBUG] [Thread-192012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:17:09.892 [INFO] [Thread-192012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:17:09.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:17:10.461 [DEBUG] [Thread-192012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:17:10.462 [DEBUG] [Thread-192012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:17:10.462 [DEBUG] [Thread-192012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:17:10.503 [DEBUG] [Thread-192012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:17:10.503 [DEBUG] [Thread-192012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:17:10.506 [DEBUG] [Thread-192012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:17:10.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:17:10.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:17:10.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:17:10.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:17:10.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:17:10.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:17:10.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:17:10.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:17:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:17:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.594897 -999.00  +15.90  13.28     64   +9.20 1 1 1 1 1   887    0 7.45 21.39 ----- 13.7 13.3 281.0 22.6 20.9 -27.1 20.4 -24.8 20.9 -23.1 21.9 -24.2
2026-04-12T16:17:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:17:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:17:10.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.594897
2026-04-12T16:17:10.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:17:10.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:17:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:17:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:17:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:17:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:16:46', tmtdew=7.62457, humidity=60.5706, cloud=0.0, wind=18.1375, temperature=16.3361, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:16:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:17:10.531 [DEBUG] [Thread-192012] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:17:10.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:17:10.635 [DEBUG] [Thread-192015] [transport.py] [_log()] starting thread (client mode): 0xb0f6c7c0
2026-04-12T16:17:10.636 [DEBUG] [Thread-192015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:17:10.651 [DEBUG] [Thread-192015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:17:10.651 [INFO] [Thread-192015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] client lang: <none>
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] server lang: <none>
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] kex follows: False
2026-04-12T16:17:10.659 [DEBUG] [Thread-192015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:17:10.660 [DEBUG] [Thread-192015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:17:10.660 [DEBUG] [Thread-192015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:17:10.660 [DEBUG] [Thread-192015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:17:10.660 [DEBUG] [Thread-192015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:17:10.660 [DEBUG] [Thread-192015] [transport.py] [_log()] Compression: none
2026-04-12T16:17:10.660 [DEBUG] [Thread-192015] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:17:10.716 [DEBUG] [Thread-192015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:17:10.716 [DEBUG] [Thread-192015] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:17:10.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:17:10.718 [DEBUG] [Thread-192015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:17:10.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:17:10.772 [DEBUG] [Thread-192015] [transport.py] [_log()] userauth is OK
2026-04-12T16:17:10.773 [DEBUG] [Thread-192015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:17:10.773 [DEBUG] [Thread-192015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:17:10.773 [DEBUG] [Thread-192015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:17:10.773 [DEBUG] [Thread-192015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:17:10.791 [INFO] [Thread-192015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:17:10.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:17:10.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:17:11.601 [DEBUG] [Thread-192015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:17:11.601 [DEBUG] [Thread-192015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:17:11.650 [DEBUG] [Thread-192015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:17:11.650 [DEBUG] [Thread-192015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:17:11.659 [DEBUG] [Thread-192015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:17:11.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:17:11.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:17:11.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:17:11.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:17:11.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:17:11.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:17:11.697 [DEBUG] [Thread-192015] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:17:13.974 [DEBUG] [Thread-192017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:17:29.026 [DEBUG] [Thread-192018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:17:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:17:41.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:17:41.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:17:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 17, 22), 7.7109, 59.8877, 0.0, 17.3977, 15.9846, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:17:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:17:22
2026-04-12T16:17:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:17:43.590 [DEBUG] [Thread-192019] [transport.py] [_log()] starting thread (client mode): 0xae5a5870
2026-04-12T16:17:43.590 [DEBUG] [Thread-192019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:17:43.610 [DEBUG] [Thread-192019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:17:43.610 [INFO] [Thread-192019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] client lang: <none>
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] server lang: <none>
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] kex follows: False
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:17:43.613 [DEBUG] [Thread-192019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:17:43.614 [DEBUG] [Thread-192019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:17:43.614 [DEBUG] [Thread-192019] [transport.py] [_log()] Compression: none
2026-04-12T16:17:43.614 [DEBUG] [Thread-192019] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:17:43.632 [DEBUG] [Thread-192019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:17:43.632 [DEBUG] [Thread-192019] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:17:43.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:17:43.633 [DEBUG] [Thread-192019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:17:43.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:17:43.636 [DEBUG] [Thread-192019] [transport.py] [_log()] userauth is OK
2026-04-12T16:17:43.636 [DEBUG] [Thread-192019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:17:43.636 [DEBUG] [Thread-192019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:17:43.636 [DEBUG] [Thread-192019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:17:43.636 [DEBUG] [Thread-192019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:17:43.659 [INFO] [Thread-192019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:17:43.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:17:44.064 [DEBUG] [Thread-192021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:17:44.210 [DEBUG] [Thread-192019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:17:44.210 [DEBUG] [Thread-192019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:17:44.211 [DEBUG] [Thread-192019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:17:44.251 [DEBUG] [Thread-192019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:17:44.251 [DEBUG] [Thread-192019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:17:44.254 [DEBUG] [Thread-192019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:17:44.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:17:44.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:17:44.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:17:44.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:17:44.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:17:44.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:17:44.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:17:44.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:17:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:17:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.595244 -999.00  +15.90  14.23     65   +9.50 1 2 1 1 1   887    0 7.14 16.96 ----- 12.1 14.2 283.4 18.0 20.9 -26.8 20.5 -24.3 20.9 -21.6 21.9 -25.3
2026-04-12T16:17:44.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:17:44.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:17:44.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.595244
2026-04-12T16:17:44.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:17:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:17:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:17:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:17:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:17:44.278 [DEBUG] [Thread-192019] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:17:44.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:17:22', tmtdew=7.7109, humidity=59.8877, cloud=0.0, wind=17.3977, temperature=15.9846, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:17:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:17:44.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:17:44.372 [DEBUG] [Thread-192023] [transport.py] [_log()] starting thread (client mode): 0xb0f42b90
2026-04-12T16:17:44.372 [DEBUG] [Thread-192023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:17:44.391 [DEBUG] [Thread-192023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:17:44.391 [INFO] [Thread-192023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] client lang: <none>
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] server lang: <none>
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] kex follows: False
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:17:44.399 [DEBUG] [Thread-192023] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:17:44.400 [DEBUG] [Thread-192023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:17:44.400 [DEBUG] [Thread-192023] [transport.py] [_log()] Compression: none
2026-04-12T16:17:44.400 [DEBUG] [Thread-192023] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:17:44.446 [DEBUG] [Thread-192025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:17:44.455 [DEBUG] [Thread-192023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:17:44.455 [DEBUG] [Thread-192023] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:17:44.455 [DEBUG] [Thread-192023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:17:44.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:17:44.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:17:44.514 [DEBUG] [Thread-192023] [transport.py] [_log()] userauth is OK
2026-04-12T16:17:44.514 [DEBUG] [Thread-192023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:17:44.514 [DEBUG] [Thread-192023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:17:44.514 [DEBUG] [Thread-192023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:17:44.514 [DEBUG] [Thread-192023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:17:44.528 [INFO] [Thread-192023] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:17:44.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:17:44.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:17:45.333 [DEBUG] [Thread-192023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:17:45.333 [DEBUG] [Thread-192023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:17:45.381 [DEBUG] [Thread-192023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:17:45.382 [DEBUG] [Thread-192023] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:17:45.391 [DEBUG] [Thread-192023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:17:45.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:17:45.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:17:45.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:17:45.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:17:45.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:17:45.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:17:45.427 [DEBUG] [Thread-192023] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:17:48.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:17:48.002 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:17:59.100 [DEBUG] [Thread-192026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:18:14.156 [DEBUG] [Thread-192027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:18:15.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:18:15.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:18:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:18:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 17, 57), 7.78882, 59.901, 0.0, 16.4275, 15.9505, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:18:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:17:57
2026-04-12T16:18:17.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:18:17.284 [DEBUG] [Thread-192028] [transport.py] [_log()] starting thread (client mode): 0xae535840
2026-04-12T16:18:17.284 [DEBUG] [Thread-192028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:18:17.294 [DEBUG] [Thread-192028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:18:17.294 [INFO] [Thread-192028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] client lang: <none>
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] server lang: <none>
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] kex follows: False
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] Compression: none
2026-04-12T16:18:17.296 [DEBUG] [Thread-192028] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:18:17.304 [DEBUG] [Thread-192028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:18:17.304 [DEBUG] [Thread-192028] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:18:17.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:18:17.305 [DEBUG] [Thread-192028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:18:17.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:18:17.306 [DEBUG] [Thread-192028] [transport.py] [_log()] userauth is OK
2026-04-12T16:18:17.306 [DEBUG] [Thread-192028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:18:17.306 [DEBUG] [Thread-192028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:18:17.306 [DEBUG] [Thread-192028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:18:17.306 [DEBUG] [Thread-192028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:18:17.318 [INFO] [Thread-192028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:18:17.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:18:17.971 [DEBUG] [Thread-192028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:18:17.971 [DEBUG] [Thread-192028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:18:17.971 [DEBUG] [Thread-192028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:18:18.013 [DEBUG] [Thread-192028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:18:18.013 [DEBUG] [Thread-192028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:18:18.015 [DEBUG] [Thread-192028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:18:18.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:18:18.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:18:18.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:18:18.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:18:18.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:18:18.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:18:18.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.595939 -999.00  +16.00  10.99     65   +9.60 1 2 1 1 1   887    0 7.03 10.43 ----- 10.1 11.0 280.6 18.8 21.0 -25.9 20.4 -24.1 21.1 -20.7 21.9 -24.4
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.595939
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:18:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:18:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:17:57', tmtdew=7.78882, humidity=59.901, cloud=0.0, wind=16.4275, temperature=15.9505, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:18:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:18:18.037 [DEBUG] [Thread-192028] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:18:18.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:18:29.194 [DEBUG] [Thread-192031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:18:44.246 [DEBUG] [Thread-192032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:18:44.480 [DEBUG] [Thread-192033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:18:48.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:18:48.143 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:18:59.285 [DEBUG] [Thread-192034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:19:14.324 [DEBUG] [Thread-192035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:19:29.366 [DEBUG] [Thread-192036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:19:44.405 [DEBUG] [Thread-192037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:19:44.519 [DEBUG] [Thread-192038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:19:48.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:19:48.286 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:19:59.442 [DEBUG] [Thread-192039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:20:14.481 [DEBUG] [Thread-192040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:20:29.519 [DEBUG] [Thread-192041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:20:32.767 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T16:20:44.553 [DEBUG] [Thread-192042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:20:44.554 [DEBUG] [Thread-192043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:20:48.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:20:48.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:20:59.587 [DEBUG] [Thread-192044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:21:02.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:21:02.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:21:02.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:21:04.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 20, 54), 7.68734, 60.3371, 0.0, 16.5852, 16.4338, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:21:04.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:20:54
2026-04-12T16:21:04.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:21:04.641 [DEBUG] [Thread-192045] [transport.py] [_log()] starting thread (client mode): 0xae535150
2026-04-12T16:21:04.641 [DEBUG] [Thread-192045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:21:04.661 [DEBUG] [Thread-192045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:21:04.661 [INFO] [Thread-192045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] client lang: <none>
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] server lang: <none>
2026-04-12T16:21:04.664 [DEBUG] [Thread-192045] [transport.py] [_log()] kex follows: False
2026-04-12T16:21:04.665 [DEBUG] [Thread-192045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:21:04.665 [DEBUG] [Thread-192045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:21:04.665 [DEBUG] [Thread-192045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:21:04.665 [DEBUG] [Thread-192045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:21:04.665 [DEBUG] [Thread-192045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:21:04.665 [DEBUG] [Thread-192045] [transport.py] [_log()] Compression: none
2026-04-12T16:21:04.665 [DEBUG] [Thread-192045] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:21:04.681 [DEBUG] [Thread-192045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:21:04.682 [DEBUG] [Thread-192045] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:21:04.682 [DEBUG] [Thread-192045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:21:04.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:21:04.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:21:04.684 [DEBUG] [Thread-192045] [transport.py] [_log()] userauth is OK
2026-04-12T16:21:04.684 [DEBUG] [Thread-192045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:21:04.684 [DEBUG] [Thread-192045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:21:04.684 [DEBUG] [Thread-192045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:21:04.684 [DEBUG] [Thread-192045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:21:04.720 [INFO] [Thread-192045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:21:04.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:21:05.541 [DEBUG] [Thread-192045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:21:05.541 [DEBUG] [Thread-192045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:21:05.541 [DEBUG] [Thread-192045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:21:05.582 [DEBUG] [Thread-192045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:21:05.582 [DEBUG] [Thread-192045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:21:05.585 [DEBUG] [Thread-192045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:21:05.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:21:05.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:21:05.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:21:05.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:21:05.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:21:05.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:21:05.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.597327 -999.00  +15.80  11.56     64   +9.20 1 2 1 1 1   887    0 6.79 3.15 ----- 9.5 11.6 250.6 12.9 21.0 -25.7 20.5 -22.7 21.4 -20.3 22.0 -23.3
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.597327
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:21:05.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:20:54', tmtdew=7.68734, humidity=60.3371, cloud=0.0, wind=16.5852, temperature=16.4338, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:20:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:21:05.604 [DEBUG] [Thread-192045] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:21:05.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:21:05.688 [DEBUG] [Thread-192048] [transport.py] [_log()] starting thread (client mode): 0xae52f6a0
2026-04-12T16:21:05.688 [DEBUG] [Thread-192048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:21:05.702 [DEBUG] [Thread-192048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:21:05.703 [INFO] [Thread-192048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:21:05.710 [DEBUG] [Thread-192048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:21:05.710 [DEBUG] [Thread-192048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:21:05.710 [DEBUG] [Thread-192048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:21:05.710 [DEBUG] [Thread-192048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:05.710 [DEBUG] [Thread-192048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] client lang: <none>
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] server lang: <none>
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] kex follows: False
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:21:05.711 [DEBUG] [Thread-192048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:21:05.712 [DEBUG] [Thread-192048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:21:05.712 [DEBUG] [Thread-192048] [transport.py] [_log()] Compression: none
2026-04-12T16:21:05.712 [DEBUG] [Thread-192048] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:21:05.773 [DEBUG] [Thread-192048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:21:05.774 [DEBUG] [Thread-192048] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:21:05.774 [DEBUG] [Thread-192048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:21:05.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:21:05.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:21:05.830 [DEBUG] [Thread-192048] [transport.py] [_log()] userauth is OK
2026-04-12T16:21:05.830 [DEBUG] [Thread-192048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:21:05.830 [DEBUG] [Thread-192048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:21:05.830 [DEBUG] [Thread-192048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:21:05.830 [DEBUG] [Thread-192048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:21:05.850 [INFO] [Thread-192048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:21:05.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:21:05.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:21:06.656 [DEBUG] [Thread-192048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:21:06.656 [DEBUG] [Thread-192048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:21:06.704 [DEBUG] [Thread-192048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:21:06.704 [DEBUG] [Thread-192048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:21:06.713 [DEBUG] [Thread-192048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:21:06.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:21:06.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:21:06.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:21:06.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:21:06.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:21:06.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:21:06.749 [DEBUG] [Thread-192048] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:21:14.626 [DEBUG] [Thread-192050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:21:29.681 [DEBUG] [Thread-192051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:21:36.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:21:36.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:21: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
2026-04-12T16:21:38.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 21, 30), 7.73417, 60.0195, 0.0, 10.2874, 15.9332, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:21:38.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:21:30
2026-04-12T16:21:38.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:21:38.626 [DEBUG] [Thread-192052] [transport.py] [_log()] starting thread (client mode): 0xae5343d0
2026-04-12T16:21:38.626 [DEBUG] [Thread-192052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:21:38.646 [DEBUG] [Thread-192052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:21:38.646 [INFO] [Thread-192052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:21:38.650 [DEBUG] [Thread-192052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:21:38.650 [DEBUG] [Thread-192052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:21:38.650 [DEBUG] [Thread-192052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:21:38.650 [DEBUG] [Thread-192052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:38.650 [DEBUG] [Thread-192052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:38.650 [DEBUG] [Thread-192052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] client lang: <none>
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] server lang: <none>
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] kex follows: False
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] Compression: none
2026-04-12T16:21:38.651 [DEBUG] [Thread-192052] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:21:38.669 [DEBUG] [Thread-192052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:21:38.670 [DEBUG] [Thread-192052] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:21:38.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:21:38.671 [DEBUG] [Thread-192052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:21:38.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:21:38.673 [DEBUG] [Thread-192052] [transport.py] [_log()] userauth is OK
2026-04-12T16:21:38.673 [DEBUG] [Thread-192052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:21:38.673 [DEBUG] [Thread-192052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:21:38.673 [DEBUG] [Thread-192052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:21:38.673 [DEBUG] [Thread-192052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:21:38.698 [INFO] [Thread-192052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:21:38.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:21:39.510 [DEBUG] [Thread-192052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:21:39.511 [DEBUG] [Thread-192052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:21:39.511 [DEBUG] [Thread-192052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:21:39.551 [DEBUG] [Thread-192052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:21:39.552 [DEBUG] [Thread-192052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:21:39.555 [DEBUG] [Thread-192052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:21:39.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:21:39.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:21:39.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:21:39.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:21:39.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:21:39.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:21:39.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:21:39.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:21:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:21:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.597675 -999.00  +15.90   7.01     65   +9.50 1 2 1 1 1   887    0 6.69 -0.99 ----- 6.9 7.0 259.3 10.0 21.1 -24.2 20.5 -21.8 21.4 -20.2 22.1 -24.1
2026-04-12T16:21:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:21:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:21:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.597675
2026-04-12T16:21:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:21:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:21:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:21:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:21:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:21:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:21:30', tmtdew=7.73417, humidity=60.0195, cloud=0.0, wind=10.2874, temperature=15.9332, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:20:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:21:39.581 [DEBUG] [Thread-192052] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:21:39.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:21:39.680 [DEBUG] [Thread-192055] [transport.py] [_log()] starting thread (client mode): 0xb0fcee90
2026-04-12T16:21:39.681 [DEBUG] [Thread-192055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:21:39.695 [DEBUG] [Thread-192055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:21:39.695 [INFO] [Thread-192055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:21:39.703 [DEBUG] [Thread-192055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:21:39.703 [DEBUG] [Thread-192055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:21:39.703 [DEBUG] [Thread-192055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:21:39.703 [DEBUG] [Thread-192055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] client lang: <none>
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] server lang: <none>
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] kex follows: False
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:21:39.704 [DEBUG] [Thread-192055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:21:39.705 [DEBUG] [Thread-192055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:21:39.705 [DEBUG] [Thread-192055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:21:39.705 [DEBUG] [Thread-192055] [transport.py] [_log()] Compression: none
2026-04-12T16:21:39.705 [DEBUG] [Thread-192055] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:21:39.768 [DEBUG] [Thread-192055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:21:39.768 [DEBUG] [Thread-192055] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:21:39.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:21:39.770 [DEBUG] [Thread-192055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:21:39.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:21:39.827 [DEBUG] [Thread-192055] [transport.py] [_log()] userauth is OK
2026-04-12T16:21:39.827 [DEBUG] [Thread-192055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:21:39.828 [DEBUG] [Thread-192055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:21:39.828 [DEBUG] [Thread-192055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:21:39.828 [DEBUG] [Thread-192055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:21:39.848 [INFO] [Thread-192055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:21:39.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:21:39.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:21:40.684 [DEBUG] [Thread-192055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:21:40.684 [DEBUG] [Thread-192055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:21:40.732 [DEBUG] [Thread-192055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:21:40.733 [DEBUG] [Thread-192055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:21:40.742 [DEBUG] [Thread-192055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:21:40.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:21:40.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:21:40.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:21:40.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:21:40.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:21:40.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:21:40.779 [DEBUG] [Thread-192055] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:21:44.599 [DEBUG] [Thread-192057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:21:44.719 [DEBUG] [Thread-192058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:21:48.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:21:48.571 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:21:59.775 [DEBUG] [Thread-192059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:22:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:22:10.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:22:10.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:22:12.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 21, 30), 7.73417, 60.0195, 0.0, 10.2874, 15.9332, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:22:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:21:30
2026-04-12T16:22:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:22:12.712 [DEBUG] [Thread-192060] [transport.py] [_log()] starting thread (client mode): 0xae5f3580
2026-04-12T16:22:12.712 [DEBUG] [Thread-192060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:22:12.724 [DEBUG] [Thread-192060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:22:12.725 [INFO] [Thread-192060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] client lang: <none>
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] server lang: <none>
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] kex follows: False
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:22:12.729 [DEBUG] [Thread-192060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:22:12.730 [DEBUG] [Thread-192060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:22:12.730 [DEBUG] [Thread-192060] [transport.py] [_log()] Compression: none
2026-04-12T16:22:12.730 [DEBUG] [Thread-192060] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:22:12.748 [DEBUG] [Thread-192060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:22:12.749 [DEBUG] [Thread-192060] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:22:12.750 [DEBUG] [Thread-192060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:22:12.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:22:12.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:22:12.752 [DEBUG] [Thread-192060] [transport.py] [_log()] userauth is OK
2026-04-12T16:22:12.752 [DEBUG] [Thread-192060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:22:12.753 [DEBUG] [Thread-192060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:22:12.753 [DEBUG] [Thread-192060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:22:12.753 [DEBUG] [Thread-192060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:22:12.775 [INFO] [Thread-192060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:22:12.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:22:13.547 [DEBUG] [Thread-192060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:22:13.547 [DEBUG] [Thread-192060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:22:13.548 [DEBUG] [Thread-192060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:22:13.588 [DEBUG] [Thread-192060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:22:13.588 [DEBUG] [Thread-192060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:22:13.592 [DEBUG] [Thread-192060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:22:13.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:22:13.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:22:13.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:22:13.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:22:13.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:22:13.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:22:13.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:22:13.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:22:13.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:22:13.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.598369 -999.00  +15.90  14.46     65   +9.40 1 1 1 1 1   887    0 6.45 -8.86 ----- 17.1 14.5 294.3 19.8 20.7 -26.4 20.4 -21.8 20.6 -26.4 21.8 -25.9
2026-04-12T16:22:13.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:22:13.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:22:13.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.598369
2026-04-12T16:22:13.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:22:13.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:22:13.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:22:13.621 [DEBUG] [Thread-192060] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:22:13.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:22:13.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:22:13.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:21:30', tmtdew=7.73417, humidity=60.0195, cloud=0.0, wind=10.2874, temperature=15.9332, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:21:39.082', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:22:13.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:22:13.728 [DEBUG] [Thread-192063] [transport.py] [_log()] starting thread (client mode): 0xae5a7790
2026-04-12T16:22:13.728 [DEBUG] [Thread-192063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:22:13.743 [DEBUG] [Thread-192063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:22:13.743 [INFO] [Thread-192063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:22:13.751 [DEBUG] [Thread-192063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:22:13.751 [DEBUG] [Thread-192063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:22:13.752 [DEBUG] [Thread-192063] [transport.py] [_log()] client lang: <none>
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] server lang: <none>
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] kex follows: False
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] Compression: none
2026-04-12T16:22:13.753 [DEBUG] [Thread-192063] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:22:13.812 [DEBUG] [Thread-192063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:22:13.812 [DEBUG] [Thread-192063] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:22:13.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:22:13.813 [DEBUG] [Thread-192063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:22:13.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:22:13.867 [DEBUG] [Thread-192063] [transport.py] [_log()] userauth is OK
2026-04-12T16:22:13.868 [DEBUG] [Thread-192063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:22:13.868 [DEBUG] [Thread-192063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:22:13.868 [DEBUG] [Thread-192063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:22:13.868 [DEBUG] [Thread-192063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:22:13.886 [INFO] [Thread-192063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:22:13.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:22:13.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:22:14.728 [DEBUG] [Thread-192063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:22:14.728 [DEBUG] [Thread-192063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:22:14.779 [DEBUG] [Thread-192063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:22:14.779 [DEBUG] [Thread-192063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:22:14.789 [DEBUG] [Thread-192063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:22:14.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:22:14.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:22:14.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:22:14.813 [DEBUG] [Thread-192065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:22:14.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:22:14.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:22:14.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:22:14.828 [DEBUG] [Thread-192063] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:22:29.866 [DEBUG] [Thread-192066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:22:44.633 [DEBUG] [Thread-192067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:22:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:22:44.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:22:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:22:44.906 [DEBUG] [Thread-192068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:22:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 22, 5), 7.65005, 60.3509, 0.0, 13.4978, 15.8835, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:22:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:22:05
2026-04-12T16:22:46.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:22:46.781 [DEBUG] [Thread-192069] [transport.py] [_log()] starting thread (client mode): 0xae5a5090
2026-04-12T16:22:46.781 [DEBUG] [Thread-192069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:22:46.802 [DEBUG] [Thread-192069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:22:46.802 [INFO] [Thread-192069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:22:46.805 [DEBUG] [Thread-192069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] client lang: <none>
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] server lang: <none>
2026-04-12T16:22:46.806 [DEBUG] [Thread-192069] [transport.py] [_log()] kex follows: False
2026-04-12T16:22:46.807 [DEBUG] [Thread-192069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:22:46.807 [DEBUG] [Thread-192069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:22:46.807 [DEBUG] [Thread-192069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:22:46.807 [DEBUG] [Thread-192069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:22:46.807 [DEBUG] [Thread-192069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:22:46.807 [DEBUG] [Thread-192069] [transport.py] [_log()] Compression: none
2026-04-12T16:22:46.807 [DEBUG] [Thread-192069] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:22:46.826 [DEBUG] [Thread-192069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:22:46.827 [DEBUG] [Thread-192069] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:22:46.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:22:46.828 [DEBUG] [Thread-192069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:22:46.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:22:46.830 [DEBUG] [Thread-192069] [transport.py] [_log()] userauth is OK
2026-04-12T16:22:46.830 [DEBUG] [Thread-192069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:22:46.831 [DEBUG] [Thread-192069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:22:46.831 [DEBUG] [Thread-192069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:22:46.831 [DEBUG] [Thread-192069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:22:46.854 [INFO] [Thread-192069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:22:46.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:22:47.660 [DEBUG] [Thread-192069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:22:47.661 [DEBUG] [Thread-192069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:22:47.661 [DEBUG] [Thread-192069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:22:47.703 [DEBUG] [Thread-192069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:22:47.703 [DEBUG] [Thread-192069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:22:47.705 [DEBUG] [Thread-192069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:22:47.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:22:47.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:22:47.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:22:47.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:22:47.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:22:47.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:22:47.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:22:47.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:22:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:22:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.598716 -999.00  +15.60  18.17     65   +9.10 1 1 1 1 1   887    0 6.37 -11.43 ----- 22.9 18.2 279.6 22.0 20.4 -25.7 20.2 -22.2 20.1 -27.0 21.3 -26.7
2026-04-12T16:22:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:22:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:22:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.598716
2026-04-12T16:22:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:22:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:22:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:22:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:22:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T16:22:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:22:05', tmtdew=7.65005, humidity=60.3509, cloud=0.0, wind=13.4978, temperature=15.8835, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:22:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:22:47.727 [DEBUG] [Thread-192069] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:22:47.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:22:47.819 [DEBUG] [Thread-192072] [transport.py] [_log()] starting thread (client mode): 0xae5f3520
2026-04-12T16:22:47.819 [DEBUG] [Thread-192072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:22:47.833 [DEBUG] [Thread-192072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:22:47.834 [INFO] [Thread-192072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:22:47.841 [DEBUG] [Thread-192072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:22:47.841 [DEBUG] [Thread-192072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:22:47.841 [DEBUG] [Thread-192072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] client lang: <none>
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] server lang: <none>
2026-04-12T16:22:47.842 [DEBUG] [Thread-192072] [transport.py] [_log()] kex follows: False
2026-04-12T16:22:47.843 [DEBUG] [Thread-192072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:22:47.843 [DEBUG] [Thread-192072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:22:47.843 [DEBUG] [Thread-192072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:22:47.843 [DEBUG] [Thread-192072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:22:47.843 [DEBUG] [Thread-192072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:22:47.843 [DEBUG] [Thread-192072] [transport.py] [_log()] Compression: none
2026-04-12T16:22:47.843 [DEBUG] [Thread-192072] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:22:47.899 [DEBUG] [Thread-192072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:22:47.900 [DEBUG] [Thread-192072] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:22:47.900 [DEBUG] [Thread-192072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:22:47.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:22:47.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:22:47.956 [DEBUG] [Thread-192072] [transport.py] [_log()] userauth is OK
2026-04-12T16:22:47.956 [DEBUG] [Thread-192072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:22:47.956 [DEBUG] [Thread-192072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:22:47.956 [DEBUG] [Thread-192072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:22:47.956 [DEBUG] [Thread-192072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:22:47.972 [INFO] [Thread-192072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:22:47.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:22:47.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:22:48.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:22:48.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:22:48.801 [DEBUG] [Thread-192072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:22:48.802 [DEBUG] [Thread-192072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:22:48.849 [DEBUG] [Thread-192072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:22:48.849 [DEBUG] [Thread-192072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:22:48.859 [DEBUG] [Thread-192072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:22:48.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:22:48.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:22:48.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:22:48.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:22:48.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:22:48.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:22:48.897 [DEBUG] [Thread-192072] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:22:59.945 [DEBUG] [Thread-192074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:23:14.996 [DEBUG] [Thread-192075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:23:18.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:23:18.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:23:18.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:23:20.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 22, 41), 7.20879, 62.3249, 0.0, 19.6193, 16.4667, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:23:20.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:22:41
2026-04-12T16:23:20.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:23:21.009 [DEBUG] [Thread-192076] [transport.py] [_log()] starting thread (client mode): 0xae536560
2026-04-12T16:23:21.009 [DEBUG] [Thread-192076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:23:21.029 [DEBUG] [Thread-192076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:23:21.029 [INFO] [Thread-192076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] client lang: <none>
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] server lang: <none>
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] kex follows: False
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:23:21.032 [DEBUG] [Thread-192076] [transport.py] [_log()] Compression: none
2026-04-12T16:23:21.033 [DEBUG] [Thread-192076] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:23:21.050 [DEBUG] [Thread-192076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:23:21.051 [DEBUG] [Thread-192076] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:23:21.051 [DEBUG] [Thread-192076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:23:21.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:23:21.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:23:21.053 [DEBUG] [Thread-192076] [transport.py] [_log()] userauth is OK
2026-04-12T16:23:21.054 [DEBUG] [Thread-192076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:23:21.054 [DEBUG] [Thread-192076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:23:21.054 [DEBUG] [Thread-192076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:23:21.054 [DEBUG] [Thread-192076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:23:21.078 [INFO] [Thread-192076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:23:21.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:23:21.860 [DEBUG] [Thread-192076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:23:21.860 [DEBUG] [Thread-192076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:23:21.860 [DEBUG] [Thread-192076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:23:21.901 [DEBUG] [Thread-192076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:23:21.901 [DEBUG] [Thread-192076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:23:21.905 [DEBUG] [Thread-192076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:23:21.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:23:21.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:23:21.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:23:21.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:23:21.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:23:21.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:23:21.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:23:21.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:23:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:23:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.599064 -999.00  +15.30  20.00     65   +8.90 1 2 1 1 1   887    0 6.26 -15.38 ----- 22.5 20.0 280.3 25.8 20.1 -25.9 20.1 -22.1 19.7 -22.1 20.9 -26.3
2026-04-12T16:23:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:23:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:23:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.599064
2026-04-12T16:23:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:23:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:23:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:23:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:23:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:23:21.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:22:41', tmtdew=7.20879, humidity=62.3249, cloud=0.0, wind=19.6193, temperature=16.4667, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:22:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:23:21.934 [DEBUG] [Thread-192076] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:23:22.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:23:22.027 [DEBUG] [Thread-192079] [transport.py] [_log()] starting thread (client mode): 0xae52f6a0
2026-04-12T16:23:22.027 [DEBUG] [Thread-192079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:23:22.042 [DEBUG] [Thread-192079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:23:22.043 [INFO] [Thread-192079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:23:22.050 [DEBUG] [Thread-192079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] client lang: <none>
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] server lang: <none>
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] kex follows: False
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] Compression: none
2026-04-12T16:23:22.051 [DEBUG] [Thread-192079] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:23:22.109 [DEBUG] [Thread-192079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:23:22.110 [DEBUG] [Thread-192079] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:23:22.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:23:22.111 [DEBUG] [Thread-192079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:23:22.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:23:22.169 [DEBUG] [Thread-192079] [transport.py] [_log()] userauth is OK
2026-04-12T16:23:22.169 [DEBUG] [Thread-192079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:23:22.170 [DEBUG] [Thread-192079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:23:22.170 [DEBUG] [Thread-192079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:23:22.170 [DEBUG] [Thread-192079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:23:22.189 [INFO] [Thread-192079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:23:22.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:23:22.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:23:23.016 [DEBUG] [Thread-192079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:23:23.016 [DEBUG] [Thread-192079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:23:23.064 [DEBUG] [Thread-192079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:23:23.064 [DEBUG] [Thread-192079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:23:23.074 [DEBUG] [Thread-192079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:23:23.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:23:23.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:23:23.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:23:23.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:23:23.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:23:23.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:23:23.112 [DEBUG] [Thread-192079] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:23:30.033 [DEBUG] [Thread-192081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:23:44.666 [DEBUG] [Thread-192082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:23:45.095 [DEBUG] [Thread-192083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:23:48.853 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:23:48.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:23:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:23:53.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:23:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:23:54.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 23, 17), 7.38595, 61.5992, 0.0, 15.0869, 15.8671, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:23:54.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:23:17
2026-04-12T16:23:54.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:23:54.910 [DEBUG] [Thread-192084] [transport.py] [_log()] starting thread (client mode): 0xae5b72e0
2026-04-12T16:23:54.910 [DEBUG] [Thread-192084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:23:54.931 [DEBUG] [Thread-192084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:23:54.931 [INFO] [Thread-192084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:23:54.934 [DEBUG] [Thread-192084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:23:54.934 [DEBUG] [Thread-192084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] client lang: <none>
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] server lang: <none>
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] kex follows: False
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] Compression: none
2026-04-12T16:23:54.935 [DEBUG] [Thread-192084] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:23:54.952 [DEBUG] [Thread-192084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:23:54.953 [DEBUG] [Thread-192084] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:23:54.954 [DEBUG] [Thread-192084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:23:54.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:23:54.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:23:54.955 [DEBUG] [Thread-192084] [transport.py] [_log()] userauth is OK
2026-04-12T16:23:54.956 [DEBUG] [Thread-192084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:23:54.956 [DEBUG] [Thread-192084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:23:54.956 [DEBUG] [Thread-192084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:23:54.956 [DEBUG] [Thread-192084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:23:54.981 [INFO] [Thread-192084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:23:54.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:23:55.761 [DEBUG] [Thread-192084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:23:55.761 [DEBUG] [Thread-192084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:23:55.762 [DEBUG] [Thread-192084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:23:55.802 [DEBUG] [Thread-192084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:23:55.802 [DEBUG] [Thread-192084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:23:55.806 [DEBUG] [Thread-192084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:23:55.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:23:55.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:23:55.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:23:55.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:23:55.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:23:55.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:23:55.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:23:55.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:23:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:23:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.599411 -999.00  +15.20  14.18     67   +9.20 1 2 1 1 1   887    0 6.01 -20.74 ----- 16.6 14.2 275.4 20.9 20.0 -24.5 19.9 -21.5 19.4 -23.5 20.5 -25.3
2026-04-12T16:23:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:23:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:23:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.599411
2026-04-12T16:23:55.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:23:55.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:23:55.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:23:55.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:23:55.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:23:55.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:23:17', tmtdew=7.38595, humidity=61.5992, cloud=0.0, wind=15.0869, temperature=15.8671, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:23:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:23:55.835 [DEBUG] [Thread-192084] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:23:55.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:23:55.934 [DEBUG] [Thread-192087] [transport.py] [_log()] starting thread (client mode): 0xae52c070
2026-04-12T16:23:55.934 [DEBUG] [Thread-192087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:23:55.949 [DEBUG] [Thread-192087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:23:55.949 [INFO] [Thread-192087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:23:55.957 [DEBUG] [Thread-192087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:23:55.957 [DEBUG] [Thread-192087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:23:55.957 [DEBUG] [Thread-192087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:23:55.957 [DEBUG] [Thread-192087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] client lang: <none>
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] server lang: <none>
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] kex follows: False
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:23:55.958 [DEBUG] [Thread-192087] [transport.py] [_log()] Compression: none
2026-04-12T16:23:55.959 [DEBUG] [Thread-192087] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:23:56.017 [DEBUG] [Thread-192087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:23:56.018 [DEBUG] [Thread-192087] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:23:56.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:23:56.019 [DEBUG] [Thread-192087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:23:56.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:23:56.073 [DEBUG] [Thread-192087] [transport.py] [_log()] userauth is OK
2026-04-12T16:23:56.073 [DEBUG] [Thread-192087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:23:56.074 [DEBUG] [Thread-192087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:23:56.074 [DEBUG] [Thread-192087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:23:56.074 [DEBUG] [Thread-192087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:23:56.093 [INFO] [Thread-192087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:23:56.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:23:56.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:23:56.903 [DEBUG] [Thread-192087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:23:56.904 [DEBUG] [Thread-192087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:23:56.951 [DEBUG] [Thread-192087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:23:56.951 [DEBUG] [Thread-192087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:23:56.961 [DEBUG] [Thread-192087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:23:56.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:23:56.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:23:56.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:23:56.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:23:56.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:23:56.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:23:57.000 [DEBUG] [Thread-192087] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:24:00.131 [DEBUG] [Thread-192089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:24:15.194 [DEBUG] [Thread-192090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:24:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:24:27.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:24:27.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:24:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 23, 53), 7.35645, 61.662, 0.0, 16.9027, 16.2676, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:24:28.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:23:53
2026-04-12T16:24:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:24:29.013 [DEBUG] [Thread-192091] [transport.py] [_log()] starting thread (client mode): 0xae5370a0
2026-04-12T16:24:29.013 [DEBUG] [Thread-192091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:24:29.033 [DEBUG] [Thread-192091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:24:29.033 [INFO] [Thread-192091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:24:29.036 [DEBUG] [Thread-192091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:24:29.036 [DEBUG] [Thread-192091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] client lang: <none>
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] server lang: <none>
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] kex follows: False
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:24:29.037 [DEBUG] [Thread-192091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:24:29.038 [DEBUG] [Thread-192091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:24:29.038 [DEBUG] [Thread-192091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:24:29.038 [DEBUG] [Thread-192091] [transport.py] [_log()] Compression: none
2026-04-12T16:24:29.038 [DEBUG] [Thread-192091] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:24:29.056 [DEBUG] [Thread-192091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:24:29.056 [DEBUG] [Thread-192091] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:24:29.057 [DEBUG] [Thread-192091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:24:29.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:24:29.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:24:29.058 [DEBUG] [Thread-192091] [transport.py] [_log()] userauth is OK
2026-04-12T16:24:29.059 [DEBUG] [Thread-192091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:24:29.059 [DEBUG] [Thread-192091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:24:29.059 [DEBUG] [Thread-192091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:24:29.059 [DEBUG] [Thread-192091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:24:29.095 [INFO] [Thread-192091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:24:29.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:24:29.847 [DEBUG] [Thread-192091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:24:29.847 [DEBUG] [Thread-192091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:24:29.848 [DEBUG] [Thread-192091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:24:29.888 [DEBUG] [Thread-192091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:24:29.888 [DEBUG] [Thread-192091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:24:29.892 [DEBUG] [Thread-192091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:24:29.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:24:29.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:24:29.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:24:29.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:24:29.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:24:29.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:24:29.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:24:29.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:24:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:24:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.599758 -999.00  +15.30  13.27     68   +9.50 1 2 1 1 1   887    0 5.74 -26.73 ----- 12.0 13.3 274.6 17.9 20.0 -23.0 19.9 -20.3 19.6 -22.1 20.3 -21.6
2026-04-12T16:24:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:24:29.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:24:29.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.599758
2026-04-12T16:24:29.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:24:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:24:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:24:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:24:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:24:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:23:53', tmtdew=7.35645, humidity=61.662, cloud=0.0, wind=16.9027, temperature=16.2676, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:23:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:24:29.920 [DEBUG] [Thread-192091] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:24:30.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:24:30.013 [DEBUG] [Thread-192094] [transport.py] [_log()] starting thread (client mode): 0xae5b5750
2026-04-12T16:24:30.013 [DEBUG] [Thread-192094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:24:30.027 [DEBUG] [Thread-192094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:24:30.028 [INFO] [Thread-192094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:24:30.035 [DEBUG] [Thread-192094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:24:30.035 [DEBUG] [Thread-192094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] client lang: <none>
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] server lang: <none>
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] kex follows: False
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] Compression: none
2026-04-12T16:24:30.036 [DEBUG] [Thread-192094] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:24:30.094 [DEBUG] [Thread-192094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:24:30.094 [DEBUG] [Thread-192094] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:24:30.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:24:30.096 [DEBUG] [Thread-192094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:24:30.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:24:30.153 [DEBUG] [Thread-192094] [transport.py] [_log()] userauth is OK
2026-04-12T16:24:30.154 [DEBUG] [Thread-192094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:24:30.154 [DEBUG] [Thread-192094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:24:30.154 [DEBUG] [Thread-192094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:24:30.154 [DEBUG] [Thread-192094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:24:30.178 [INFO] [Thread-192094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:24:30.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:24:30.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:24:30.233 [DEBUG] [Thread-192096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:24:31.103 [DEBUG] [Thread-192094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:24:31.103 [DEBUG] [Thread-192094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:24:31.151 [DEBUG] [Thread-192094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:24:31.152 [DEBUG] [Thread-192094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:24:31.161 [DEBUG] [Thread-192094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:24:31.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:24:31.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:24:31.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:24:31.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:24:31.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:24:31.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:24:31.200 [DEBUG] [Thread-192094] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:24:44.709 [DEBUG] [Thread-192097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:24:45.291 [DEBUG] [Thread-192098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:24:48.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:24:48.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:25:00.333 [DEBUG] [Thread-192099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:25:01.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:25:01.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:25:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:25:02.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 24, 28), 7.28363, 61.7119, 0.0, 17.1684, 15.7174, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:25:02.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:24:28
2026-04-12T16:25:02.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:25:02.986 [DEBUG] [Thread-192100] [transport.py] [_log()] starting thread (client mode): 0xae52eda0
2026-04-12T16:25:02.986 [DEBUG] [Thread-192100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:25:03.002 [DEBUG] [Thread-192100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:25:03.002 [INFO] [Thread-192100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:25:03.004 [DEBUG] [Thread-192100] [transport.py] [_log()] client lang: <none>
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] server lang: <none>
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] kex follows: False
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] Compression: none
2026-04-12T16:25:03.005 [DEBUG] [Thread-192100] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:25:03.012 [DEBUG] [Thread-192100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:25:03.013 [DEBUG] [Thread-192100] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:25:03.013 [DEBUG] [Thread-192100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:25:03.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:25:03.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:25:03.015 [DEBUG] [Thread-192100] [transport.py] [_log()] userauth is OK
2026-04-12T16:25:03.015 [DEBUG] [Thread-192100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:25:03.015 [DEBUG] [Thread-192100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:25:03.015 [DEBUG] [Thread-192100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:25:03.015 [DEBUG] [Thread-192100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:25:03.036 [INFO] [Thread-192100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:25:03.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:25:05.312 [DEBUG] [Thread-192100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:25:05.312 [DEBUG] [Thread-192100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:25:05.313 [DEBUG] [Thread-192100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:25:05.353 [DEBUG] [Thread-192100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:25:05.353 [DEBUG] [Thread-192100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:25:05.357 [DEBUG] [Thread-192100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:25:05.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:25:05.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:25:05.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:25:05.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:25:05.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:25:05.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:25:05.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:25:05.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:25:05.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:25:05.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.600452 -999.00  +15.50   9.94     67   +9.50 1 2 1 1 1   887    0 5.74 -29.17 ----- 9.8 9.9 277.8 16.0 19.9 -23.3 19.7 -20.4 19.4 -21.4 20.1 -23.4
2026-04-12T16:25:05.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:25:05.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:25:05.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.600452
2026-04-12T16:25:05.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:25:05.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:25:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:25:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:25:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:25:05.437 [DEBUG] [Thread-192100] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:25:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:24:28', tmtdew=7.28363, humidity=61.7119, cloud=0.0, wind=17.1684, temperature=15.7174, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:24:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:25:05.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:25:05.526 [DEBUG] [Thread-192103] [transport.py] [_log()] starting thread (client mode): 0xae5351b0
2026-04-12T16:25:05.526 [DEBUG] [Thread-192103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:25:05.540 [DEBUG] [Thread-192103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:25:05.541 [INFO] [Thread-192103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:25:05.549 [DEBUG] [Thread-192103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:25:05.549 [DEBUG] [Thread-192103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] client lang: <none>
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] server lang: <none>
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] kex follows: False
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:25:05.550 [DEBUG] [Thread-192103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:25:05.551 [DEBUG] [Thread-192103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:25:05.551 [DEBUG] [Thread-192103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:25:05.551 [DEBUG] [Thread-192103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:25:05.551 [DEBUG] [Thread-192103] [transport.py] [_log()] Compression: none
2026-04-12T16:25:05.551 [DEBUG] [Thread-192103] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:25:05.607 [DEBUG] [Thread-192103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:25:05.607 [DEBUG] [Thread-192103] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:25:05.608 [DEBUG] [Thread-192103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:25:05.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:25:05.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:25:05.666 [DEBUG] [Thread-192103] [transport.py] [_log()] userauth is OK
2026-04-12T16:25:05.666 [DEBUG] [Thread-192103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:25:05.666 [DEBUG] [Thread-192103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:25:05.666 [DEBUG] [Thread-192103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:25:05.667 [DEBUG] [Thread-192103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:25:05.685 [INFO] [Thread-192103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:25:05.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:25:05.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:25:06.526 [DEBUG] [Thread-192103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:25:06.526 [DEBUG] [Thread-192103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:25:06.574 [DEBUG] [Thread-192103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:25:06.575 [DEBUG] [Thread-192103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:25:06.584 [DEBUG] [Thread-192103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:25:06.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:25:06.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:25: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
2026-04-12T16:25:06.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:25:06.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:25:06.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:25:06.621 [DEBUG] [Thread-192103] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:25:15.370 [DEBUG] [Thread-192105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:25:30.432 [DEBUG] [Thread-192106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:25:36.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:25:36.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:25:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:25:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 25, 4), 7.31062, 61.5794, 0.0, 16.4804, 15.6346, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:25:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:25:04
2026-04-12T16:25:38.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:25:38.478 [DEBUG] [Thread-192107] [transport.py] [_log()] starting thread (client mode): 0xae50b8b0
2026-04-12T16:25:38.478 [DEBUG] [Thread-192107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:25:38.500 [DEBUG] [Thread-192107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:25:38.500 [INFO] [Thread-192107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:25:38.504 [DEBUG] [Thread-192107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:25:38.504 [DEBUG] [Thread-192107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:25:38.504 [DEBUG] [Thread-192107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:25:38.504 [DEBUG] [Thread-192107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:38.504 [DEBUG] [Thread-192107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:38.504 [DEBUG] [Thread-192107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:38.504 [DEBUG] [Thread-192107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] client lang: <none>
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] server lang: <none>
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] kex follows: False
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] Compression: none
2026-04-12T16:25:38.505 [DEBUG] [Thread-192107] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:25:38.522 [DEBUG] [Thread-192107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:25:38.523 [DEBUG] [Thread-192107] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:25:38.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:25:38.524 [DEBUG] [Thread-192107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:25:38.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:25:38.526 [DEBUG] [Thread-192107] [transport.py] [_log()] userauth is OK
2026-04-12T16:25:38.526 [DEBUG] [Thread-192107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:25:38.526 [DEBUG] [Thread-192107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:25:38.526 [DEBUG] [Thread-192107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:25:38.527 [DEBUG] [Thread-192107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:25:38.550 [INFO] [Thread-192107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:25:38.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:25:39.468 [DEBUG] [Thread-192107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:25:39.469 [DEBUG] [Thread-192107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:25:39.469 [DEBUG] [Thread-192107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:25:39.510 [DEBUG] [Thread-192107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:25:39.510 [DEBUG] [Thread-192107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:25:39.513 [DEBUG] [Thread-192107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:25:39.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:25:39.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:25:39.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:25:39.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:25:39.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:25:39.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:25:39.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:25:39.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:25:39.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:25:39.584 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T16:25:39.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:25:04', tmtdew=7.31062, humidity=61.5794, cloud=0.0, wind=16.4804, temperature=15.6346, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:25:39.594 [DEBUG] [Thread-192107] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:25:39.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:25:39.691 [DEBUG] [Thread-192110] [transport.py] [_log()] starting thread (client mode): 0xa7939b40
2026-04-12T16:25:39.692 [DEBUG] [Thread-192110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:25:39.704 [DEBUG] [Thread-192110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:25:39.705 [INFO] [Thread-192110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:25:39.712 [DEBUG] [Thread-192110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] client lang: <none>
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] server lang: <none>
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] kex follows: False
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] Compression: none
2026-04-12T16:25:39.713 [DEBUG] [Thread-192110] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:25:39.770 [DEBUG] [Thread-192110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:25:39.771 [DEBUG] [Thread-192110] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:25:39.772 [DEBUG] [Thread-192110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:25:39.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:25:39.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:25:39.826 [DEBUG] [Thread-192110] [transport.py] [_log()] userauth is OK
2026-04-12T16:25:39.827 [DEBUG] [Thread-192110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:25:39.827 [DEBUG] [Thread-192110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:25:39.827 [DEBUG] [Thread-192110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:25:39.827 [DEBUG] [Thread-192110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:25:39.846 [INFO] [Thread-192110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:25:39.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:25:39.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:25:40.633 [DEBUG] [Thread-192110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:25:40.633 [DEBUG] [Thread-192110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:25:40.681 [DEBUG] [Thread-192110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:25:40.682 [DEBUG] [Thread-192110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:25:40.691 [DEBUG] [Thread-192110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:25:40.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:25:40.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:25:40.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:25:40.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:25:40.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:25:40.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:25:40.726 [DEBUG] [Thread-192110] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:25:44.752 [DEBUG] [Thread-192112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:25:45.478 [DEBUG] [Thread-192113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:25:49.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:25:49.138 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:26:00.532 [DEBUG] [Thread-192114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:26:10.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:26:10.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:26:10.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:26:12.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 25, 40), 7.04515, 62.8877, 0.0, 17.7847, 15.9028, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:26:12.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:25:40
2026-04-12T16:26:12.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:26:12.601 [DEBUG] [Thread-192115] [transport.py] [_log()] starting thread (client mode): 0xae50b400
2026-04-12T16:26:12.601 [DEBUG] [Thread-192115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:26:12.621 [DEBUG] [Thread-192115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:26:12.622 [INFO] [Thread-192115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] client lang: <none>
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] server lang: <none>
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] kex follows: False
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] Compression: none
2026-04-12T16:26:12.625 [DEBUG] [Thread-192115] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:26:12.643 [DEBUG] [Thread-192115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:26:12.643 [DEBUG] [Thread-192115] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:26:12.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:26:12.644 [DEBUG] [Thread-192115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:26:12.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:26:12.646 [DEBUG] [Thread-192115] [transport.py] [_log()] userauth is OK
2026-04-12T16:26:12.646 [DEBUG] [Thread-192115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:26:12.647 [DEBUG] [Thread-192115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:26:12.647 [DEBUG] [Thread-192115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:26:12.647 [DEBUG] [Thread-192115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:26:12.670 [INFO] [Thread-192115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:26:12.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:26:13.405 [DEBUG] [Thread-192115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:26:13.405 [DEBUG] [Thread-192115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:26:13.405 [DEBUG] [Thread-192115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:26:13.446 [DEBUG] [Thread-192115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:26:13.446 [DEBUG] [Thread-192115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:26:13.450 [DEBUG] [Thread-192115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:26:13.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:26:13.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:26:13.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:26:13.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:26:13.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:26:13.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:26:13.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:26:13.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:26:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:26:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.601494 -999.00  +16.00   4.65     67  +10.00 1 2 1 1 1   887    0 5.56 -34.47 ----- 5.6 4.7 289.1 11.4 20.2 -20.7 19.9 -19.2 20.2 -16.8 20.6 -19.3
2026-04-12T16:26:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:26:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:26:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.601494
2026-04-12T16:26:13.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:26:13.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:26:13.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:26:13.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:26:13.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:26:13.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:25:40', tmtdew=7.04515, humidity=62.8877, cloud=0.0, wind=17.7847, temperature=15.9028, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:26:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:26:13.474 [DEBUG] [Thread-192115] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:26:13.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:26:13.570 [DEBUG] [Thread-192118] [transport.py] [_log()] starting thread (client mode): 0xae5083a0
2026-04-12T16:26:13.570 [DEBUG] [Thread-192118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:26:13.584 [DEBUG] [Thread-192118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:26:13.584 [INFO] [Thread-192118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:26:13.593 [DEBUG] [Thread-192118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:26:13.593 [DEBUG] [Thread-192118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:26:13.593 [DEBUG] [Thread-192118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:26:13.593 [DEBUG] [Thread-192118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:13.593 [DEBUG] [Thread-192118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] client lang: <none>
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] server lang: <none>
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] kex follows: False
2026-04-12T16:26:13.594 [DEBUG] [Thread-192118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:26:13.595 [DEBUG] [Thread-192118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:26:13.595 [DEBUG] [Thread-192118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:26:13.595 [DEBUG] [Thread-192118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:26:13.595 [DEBUG] [Thread-192118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:26:13.596 [DEBUG] [Thread-192118] [transport.py] [_log()] Compression: none
2026-04-12T16:26:13.596 [DEBUG] [Thread-192118] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:26:13.656 [DEBUG] [Thread-192118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:26:13.656 [DEBUG] [Thread-192118] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:26:13.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:26:13.657 [DEBUG] [Thread-192118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:26:13.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:26:13.715 [DEBUG] [Thread-192118] [transport.py] [_log()] userauth is OK
2026-04-12T16:26:13.715 [DEBUG] [Thread-192118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:26:13.715 [DEBUG] [Thread-192118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:26:13.715 [DEBUG] [Thread-192118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:26:13.715 [DEBUG] [Thread-192118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:26:13.734 [INFO] [Thread-192118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:26:13.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:26:13.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:26:14.552 [DEBUG] [Thread-192118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:26:14.552 [DEBUG] [Thread-192118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:26:14.600 [DEBUG] [Thread-192118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:26:14.601 [DEBUG] [Thread-192118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:26:14.610 [DEBUG] [Thread-192118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:26:14.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:26:14.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:26:14.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:26:14.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:26:14.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:26:14.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:26:14.649 [DEBUG] [Thread-192118] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:26:15.569 [DEBUG] [Thread-192120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:26:30.631 [DEBUG] [Thread-192121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:26:44.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:26:44.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:26:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:26:44.786 [DEBUG] [Thread-192122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:26:45.669 [DEBUG] [Thread-192123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:26:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 26, 15), 7.32863, 61.9106, 0.0, 12.0344, 15.6182, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:26:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:26:15
2026-04-12T16:26:46.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:26:46.527 [DEBUG] [Thread-192124] [transport.py] [_log()] starting thread (client mode): 0xae50a4d0
2026-04-12T16:26:46.527 [DEBUG] [Thread-192124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:26:46.548 [DEBUG] [Thread-192124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:26:46.548 [INFO] [Thread-192124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] client lang: <none>
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] server lang: <none>
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] kex follows: False
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] Compression: none
2026-04-12T16:26:46.550 [DEBUG] [Thread-192124] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:26:46.565 [DEBUG] [Thread-192124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:26:46.565 [DEBUG] [Thread-192124] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:26:46.566 [DEBUG] [Thread-192124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:26:46.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:26:46.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:26:46.568 [DEBUG] [Thread-192124] [transport.py] [_log()] userauth is OK
2026-04-12T16:26:46.568 [DEBUG] [Thread-192124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:26:46.568 [DEBUG] [Thread-192124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:26:46.568 [DEBUG] [Thread-192124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:26:46.568 [DEBUG] [Thread-192124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:26:46.592 [INFO] [Thread-192124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:26:46.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:26:47.192 [DEBUG] [Thread-192124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:26:47.192 [DEBUG] [Thread-192124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:26:47.192 [DEBUG] [Thread-192124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:26:47.233 [DEBUG] [Thread-192124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:26:47.233 [DEBUG] [Thread-192124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:26:47.237 [DEBUG] [Thread-192124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:26:47.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:26:47.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:26:47.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:26:47.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:26:47.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:26:47.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:26:47.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:26:47.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:26:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:26:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.601841 -999.00  +16.20   9.33     67  +10.10 1 2 1 1 1   887    0 5.39 -35.96 ----- 8.1 9.3 263.1 15.1 20.4 -20.6 19.9 -19.0 20.4 -17.1 20.9 -19.9
2026-04-12T16:26:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:26:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:26:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.601841
2026-04-12T16:26:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:26:47.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:26:47.262 [DEBUG] [Thread-192124] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:26:47.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:26:47.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:26:47.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:26:47.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:26:15', tmtdew=7.32863, humidity=61.9106, cloud=0.0, wind=12.0344, temperature=15.6182, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:26:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:26:47.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:26:47.357 [DEBUG] [Thread-192127] [transport.py] [_log()] starting thread (client mode): 0xb0fea3b0
2026-04-12T16:26:47.357 [DEBUG] [Thread-192127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:26:47.375 [DEBUG] [Thread-192127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:26:47.375 [INFO] [Thread-192127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:26:47.386 [DEBUG] [Thread-192127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:26:47.387 [DEBUG] [Thread-192127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] client lang: <none>
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] server lang: <none>
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] kex follows: False
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:26:47.388 [DEBUG] [Thread-192127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:26:47.389 [DEBUG] [Thread-192127] [transport.py] [_log()] Compression: none
2026-04-12T16:26:47.389 [DEBUG] [Thread-192127] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:26:47.443 [DEBUG] [Thread-192127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:26:47.444 [DEBUG] [Thread-192127] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:26:47.445 [DEBUG] [Thread-192127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:26:47.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:26:47.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:26:47.504 [DEBUG] [Thread-192127] [transport.py] [_log()] userauth is OK
2026-04-12T16:26:47.504 [DEBUG] [Thread-192127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:26:47.505 [DEBUG] [Thread-192127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:26:47.505 [DEBUG] [Thread-192127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:26:47.505 [DEBUG] [Thread-192127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:26:47.523 [INFO] [Thread-192127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:26:47.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:26:47.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:26:48.338 [DEBUG] [Thread-192127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:26:48.338 [DEBUG] [Thread-192127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:26:48.386 [DEBUG] [Thread-192127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:26:48.387 [DEBUG] [Thread-192127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:26:48.396 [DEBUG] [Thread-192127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:26:48.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:26:48.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:26:48.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:26:48.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:26:48.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:26:48.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:26:48.433 [DEBUG] [Thread-192127] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:26:49.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:26:49.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:00.706 [DEBUG] [Thread-192129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:15.768 [DEBUG] [Thread-192130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:27:18.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:27:18.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:27:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 26, 51), 7.05728, 62.821, 0.0, 15.6326, 15.8362, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:27:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:26:51
2026-04-12T16:27:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:27:20.252 [DEBUG] [Thread-192131] [transport.py] [_log()] starting thread (client mode): 0xb0feb3a0
2026-04-12T16:27:20.252 [DEBUG] [Thread-192131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:27:20.273 [DEBUG] [Thread-192131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:27:20.273 [INFO] [Thread-192131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:27:20.276 [DEBUG] [Thread-192131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] client lang: <none>
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] server lang: <none>
2026-04-12T16:27:20.277 [DEBUG] [Thread-192131] [transport.py] [_log()] kex follows: False
2026-04-12T16:27:20.278 [DEBUG] [Thread-192131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:27:20.278 [DEBUG] [Thread-192131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:27:20.278 [DEBUG] [Thread-192131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:27:20.278 [DEBUG] [Thread-192131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:27:20.278 [DEBUG] [Thread-192131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:27:20.278 [DEBUG] [Thread-192131] [transport.py] [_log()] Compression: none
2026-04-12T16:27:20.278 [DEBUG] [Thread-192131] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:27:20.297 [DEBUG] [Thread-192131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:27:20.298 [DEBUG] [Thread-192131] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:27:20.299 [DEBUG] [Thread-192131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:27:20.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:27:20.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:27:20.300 [DEBUG] [Thread-192131] [transport.py] [_log()] userauth is OK
2026-04-12T16:27:20.301 [DEBUG] [Thread-192131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:27:20.301 [DEBUG] [Thread-192131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:27:20.301 [DEBUG] [Thread-192131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:27:20.301 [DEBUG] [Thread-192131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:27:20.326 [INFO] [Thread-192131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:27:20.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:27:20.947 [DEBUG] [Thread-192131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:27:20.947 [DEBUG] [Thread-192131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:27:20.948 [DEBUG] [Thread-192131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:27:20.988 [DEBUG] [Thread-192131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:27:20.988 [DEBUG] [Thread-192131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:27:20.993 [DEBUG] [Thread-192131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:27:21.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:27:21.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:27:21.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:27:21.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:27:21.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:27:21.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:27:21.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:27:21.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:27:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:27:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.602189 -999.00  +16.40   8.50     65   +9.90 1 2 1 1 1   887    0 5.63 -30.97 ----- 8.1 8.5 244.6 14.2 20.5 -21.5 20.1 -19.2 20.6 -17.1 21.1 -20.1
2026-04-12T16:27:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:27:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:27:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.602189
2026-04-12T16:27:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:27:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:27:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:27:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:27:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:27:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:26:51', tmtdew=7.05728, humidity=62.821, cloud=0.0, wind=15.6326, temperature=15.8362, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:27:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:27:21.020 [DEBUG] [Thread-192131] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:27:21.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:27:21.124 [DEBUG] [Thread-192134] [transport.py] [_log()] starting thread (client mode): 0xae50bfa0
2026-04-12T16:27:21.125 [DEBUG] [Thread-192134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:27:21.139 [DEBUG] [Thread-192134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:27:21.140 [INFO] [Thread-192134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:27:21.147 [DEBUG] [Thread-192134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:27:21.148 [DEBUG] [Thread-192134] [transport.py] [_log()] client lang: <none>
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] server lang: <none>
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] kex follows: False
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:27:21.149 [DEBUG] [Thread-192134] [transport.py] [_log()] Compression: none
2026-04-12T16:27:21.150 [DEBUG] [Thread-192134] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:27:21.208 [DEBUG] [Thread-192134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:27:21.208 [DEBUG] [Thread-192134] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:27:21.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:27:21.210 [DEBUG] [Thread-192134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:27:21.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:27:21.267 [DEBUG] [Thread-192134] [transport.py] [_log()] userauth is OK
2026-04-12T16:27:21.267 [DEBUG] [Thread-192134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:27:21.268 [DEBUG] [Thread-192134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:27:21.268 [DEBUG] [Thread-192134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:27:21.268 [DEBUG] [Thread-192134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:27:21.286 [INFO] [Thread-192134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:27:21.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:27:21.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:27:22.080 [DEBUG] [Thread-192134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:27:22.080 [DEBUG] [Thread-192134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:27:22.129 [DEBUG] [Thread-192134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:27:22.129 [DEBUG] [Thread-192134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:27:22.138 [DEBUG] [Thread-192134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:27:22.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:27:22.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:27:22.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:27:22.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:27:22.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:27:22.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:27:22.176 [DEBUG] [Thread-192134] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:27:30.807 [DEBUG] [Thread-192136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:44.837 [DEBUG] [Thread-192137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:45.857 [DEBUG] [Thread-192138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:49.423 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:49.424 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:27:52.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:27:52.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:27:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:27:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 27, 27), 7.38525, 61.4798, 0.0, 15.7565, 15.9009, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:27:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:27:27
2026-04-12T16:27:53.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:27:54.027 [DEBUG] [Thread-192139] [transport.py] [_log()] starting thread (client mode): 0xae50ab00
2026-04-12T16:27:54.027 [DEBUG] [Thread-192139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:27:54.046 [DEBUG] [Thread-192139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:27:54.046 [INFO] [Thread-192139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:27:54.048 [DEBUG] [Thread-192139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:27:54.048 [DEBUG] [Thread-192139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:27:54.048 [DEBUG] [Thread-192139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:27:54.048 [DEBUG] [Thread-192139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:54.048 [DEBUG] [Thread-192139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:54.048 [DEBUG] [Thread-192139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:54.048 [DEBUG] [Thread-192139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] client lang: <none>
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] server lang: <none>
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] kex follows: False
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] Compression: none
2026-04-12T16:27:54.049 [DEBUG] [Thread-192139] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:27:54.060 [DEBUG] [Thread-192139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:27:54.061 [DEBUG] [Thread-192139] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:27:54.061 [DEBUG] [Thread-192139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:27:54.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:27:54.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:27:54.063 [DEBUG] [Thread-192139] [transport.py] [_log()] userauth is OK
2026-04-12T16:27:54.063 [DEBUG] [Thread-192139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:27:54.063 [DEBUG] [Thread-192139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:27:54.063 [DEBUG] [Thread-192139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:27:54.063 [DEBUG] [Thread-192139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:27:54.088 [INFO] [Thread-192139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:27:54.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:27:54.667 [DEBUG] [Thread-192139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:27:54.667 [DEBUG] [Thread-192139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:27:54.667 [DEBUG] [Thread-192139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:27:54.708 [DEBUG] [Thread-192139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:27:54.708 [DEBUG] [Thread-192139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:27:54.713 [DEBUG] [Thread-192139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:27:54.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:27:54.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:27:54.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:27:54.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:27:54.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:27:54.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:27:54.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:27:54.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:27:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:27:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.602536 -999.00  +16.30   9.96     64   +9.50 1 2 1 1 1   887    0 5.65 -28.01 ----- 11.4 10.0 265.2 19.5 20.6 -21.6 20.2 -18.8 20.7 -17.3 21.3 -20.7
2026-04-12T16:27:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:27:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:27:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.602536
2026-04-12T16:27:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:27:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:27:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:27:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:27:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:27:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:27:27', tmtdew=7.38525, humidity=61.4798, cloud=0.0, wind=15.7565, temperature=15.9009, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:27:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:27:54.740 [DEBUG] [Thread-192139] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:27:54.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:27:54.845 [DEBUG] [Thread-192142] [transport.py] [_log()] starting thread (client mode): 0xae5092a0
2026-04-12T16:27:54.845 [DEBUG] [Thread-192142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:27:54.865 [DEBUG] [Thread-192142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:27:54.865 [INFO] [Thread-192142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:27:54.872 [DEBUG] [Thread-192142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] client lang: <none>
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] server lang: <none>
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] kex follows: False
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] Compression: none
2026-04-12T16:27:54.873 [DEBUG] [Thread-192142] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:27:54.931 [DEBUG] [Thread-192142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:27:54.932 [DEBUG] [Thread-192142] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:27:54.932 [DEBUG] [Thread-192142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:27:54.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:27:54.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:27:54.987 [DEBUG] [Thread-192142] [transport.py] [_log()] userauth is OK
2026-04-12T16:27:54.988 [DEBUG] [Thread-192142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:27:54.988 [DEBUG] [Thread-192142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:27:54.988 [DEBUG] [Thread-192142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:27:54.988 [DEBUG] [Thread-192142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:27:55.006 [INFO] [Thread-192142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:27:55.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:27:55.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:27:55.848 [DEBUG] [Thread-192142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:27:55.848 [DEBUG] [Thread-192142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:27:55.896 [DEBUG] [Thread-192142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:27:55.897 [DEBUG] [Thread-192142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:27:55.906 [DEBUG] [Thread-192142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:27:55.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:27:55.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:27:55.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:27:55.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:27:55.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:27:55.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:27:55.943 [DEBUG] [Thread-192142] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:28:00.894 [DEBUG] [Thread-192144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:28:15.943 [DEBUG] [Thread-192145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:28:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:28:25.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:28:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:28:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 28, 3), 7.45461, 61.1981, 0.0, 15.2449, 15.934, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:28:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:28:03
2026-04-12T16:28:27.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:28:27.798 [DEBUG] [Thread-192146] [transport.py] [_log()] starting thread (client mode): 0xb0fe8ac0
2026-04-12T16:28:27.798 [DEBUG] [Thread-192146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:28:27.814 [DEBUG] [Thread-192146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:28:27.814 [INFO] [Thread-192146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:28:27.820 [DEBUG] [Thread-192146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] client lang: <none>
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] server lang: <none>
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] kex follows: False
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] Compression: none
2026-04-12T16:28:27.821 [DEBUG] [Thread-192146] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:28:27.831 [DEBUG] [Thread-192146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:28:27.831 [DEBUG] [Thread-192146] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:28:27.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:28:27.832 [DEBUG] [Thread-192146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:28:27.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:28:27.833 [DEBUG] [Thread-192146] [transport.py] [_log()] userauth is OK
2026-04-12T16:28:27.833 [DEBUG] [Thread-192146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:28:27.833 [DEBUG] [Thread-192146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:28:27.834 [DEBUG] [Thread-192146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:28:27.834 [DEBUG] [Thread-192146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:28:27.849 [INFO] [Thread-192146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:28:27.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:28:28.409 [DEBUG] [Thread-192146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:28:28.409 [DEBUG] [Thread-192146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:28:28.409 [DEBUG] [Thread-192146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:28:28.450 [DEBUG] [Thread-192146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:28:28.450 [DEBUG] [Thread-192146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:28:28.453 [DEBUG] [Thread-192146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:28:28.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:28:28.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:28:28.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:28:28.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:28:28.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:28:28.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:28:28.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:28:28.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:28:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:28:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.602883 -999.00  +16.20  16.22     63   +9.30 1 2 1 1 1   887    0 5.65 -26.73 ----- 16.1 16.2 282.2 21.4 20.6 -21.7 20.2 -18.3 20.6 -19.5 21.5 -20.3
2026-04-12T16:28:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:28:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:28:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.602883
2026-04-12T16:28:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:28:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:28:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:28:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:28:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:28:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:28:03', tmtdew=7.45461, humidity=61.1981, cloud=0.0, wind=15.2449, temperature=15.934, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:28:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:28:28.482 [DEBUG] [Thread-192146] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:28:28.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:28:28.576 [DEBUG] [Thread-192149] [transport.py] [_log()] starting thread (client mode): 0xb0fea3b0
2026-04-12T16:28:28.576 [DEBUG] [Thread-192149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:28:28.591 [DEBUG] [Thread-192149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:28:28.591 [INFO] [Thread-192149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] client lang: <none>
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] server lang: <none>
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] kex follows: False
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:28:28.599 [DEBUG] [Thread-192149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:28:28.600 [DEBUG] [Thread-192149] [transport.py] [_log()] Compression: none
2026-04-12T16:28:28.600 [DEBUG] [Thread-192149] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:28:28.659 [DEBUG] [Thread-192149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:28:28.660 [DEBUG] [Thread-192149] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:28:28.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:28:28.661 [DEBUG] [Thread-192149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:28:28.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:28:28.722 [DEBUG] [Thread-192149] [transport.py] [_log()] userauth is OK
2026-04-12T16:28:28.722 [DEBUG] [Thread-192149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:28:28.722 [DEBUG] [Thread-192149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:28:28.722 [DEBUG] [Thread-192149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:28:28.722 [DEBUG] [Thread-192149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:28:28.741 [INFO] [Thread-192149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:28:28.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:28:28.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:28:29.557 [DEBUG] [Thread-192149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:28:29.558 [DEBUG] [Thread-192149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:28:29.606 [DEBUG] [Thread-192149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:28:29.606 [DEBUG] [Thread-192149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:28:29.616 [DEBUG] [Thread-192149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:28:29.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:28:29.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:28:29.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:28:29.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:28:29.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:28:29.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:28:29.654 [DEBUG] [Thread-192149] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:28:30.981 [DEBUG] [Thread-192151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:28:44.890 [DEBUG] [Thread-192152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:28:46.039 [DEBUG] [Thread-192153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:28:49.572 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:28:49.574 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:28:59.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:28:59.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:28:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:29:00.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 28, 38), 7.60083, 60.6673, 0.0, 16.303, 16.3331, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:29:00.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:28:38
2026-04-12T16:29:01.075 [DEBUG] [Thread-192154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:29:01.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:29:01.496 [DEBUG] [Thread-192155] [transport.py] [_log()] starting thread (client mode): 0xae5b4a30
2026-04-12T16:29:01.496 [DEBUG] [Thread-192155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:29:01.508 [DEBUG] [Thread-192155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:29:01.508 [INFO] [Thread-192155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] client lang: <none>
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] server lang: <none>
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] kex follows: False
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] Compression: none
2026-04-12T16:29:01.511 [DEBUG] [Thread-192155] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:29:01.528 [DEBUG] [Thread-192155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:29:01.529 [DEBUG] [Thread-192155] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:29:01.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:29:01.530 [DEBUG] [Thread-192155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:29:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:29:01.532 [DEBUG] [Thread-192155] [transport.py] [_log()] userauth is OK
2026-04-12T16:29:01.532 [DEBUG] [Thread-192155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:29:01.532 [DEBUG] [Thread-192155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:29:01.532 [DEBUG] [Thread-192155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:29:01.532 [DEBUG] [Thread-192155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:29:01.556 [INFO] [Thread-192155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:29:01.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:29:02.204 [DEBUG] [Thread-192155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:29:02.204 [DEBUG] [Thread-192155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:29:02.204 [DEBUG] [Thread-192155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:29:02.245 [DEBUG] [Thread-192155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:29:02.245 [DEBUG] [Thread-192155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:29:02.249 [DEBUG] [Thread-192155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:29:02.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:29:02.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:29:02.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:29:02.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:29:02.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:29:02.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:29:02.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:29:02.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:29:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:29:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.603230 -999.00  +16.00  17.31     63   +9.20 1 2 1 1 1   887    0 5.93 -25.87 ----- 13.6 17.3 281.4 24.1 20.5 -21.8 20.2 -18.9 20.5 -20.8 21.5 -20.3
2026-04-12T16:29:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:29:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:29:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.603230
2026-04-12T16:29:02.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:29:02.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:29:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:29:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:29:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:29:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:28:38', tmtdew=7.60083, humidity=60.6673, cloud=0.0, wind=16.303, temperature=16.3331, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:28:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:29:02.276 [DEBUG] [Thread-192155] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:29:02.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:29:02.371 [DEBUG] [Thread-192158] [transport.py] [_log()] starting thread (client mode): 0xae508e50
2026-04-12T16:29:02.371 [DEBUG] [Thread-192158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:29:02.386 [DEBUG] [Thread-192158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:29:02.386 [INFO] [Thread-192158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:29:02.393 [DEBUG] [Thread-192158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] client lang: <none>
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] server lang: <none>
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] kex follows: False
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] Compression: none
2026-04-12T16:29:02.394 [DEBUG] [Thread-192158] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:29:02.454 [DEBUG] [Thread-192158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:29:02.454 [DEBUG] [Thread-192158] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:29:02.454 [DEBUG] [Thread-192158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:29:02.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:29:02.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:29:02.511 [DEBUG] [Thread-192158] [transport.py] [_log()] userauth is OK
2026-04-12T16:29:02.511 [DEBUG] [Thread-192158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:29:02.511 [DEBUG] [Thread-192158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:29:02.511 [DEBUG] [Thread-192158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:29:02.511 [DEBUG] [Thread-192158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:29:02.536 [INFO] [Thread-192158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:29:02.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:29:02.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:29:03.402 [DEBUG] [Thread-192158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:29:03.403 [DEBUG] [Thread-192158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:29:03.453 [DEBUG] [Thread-192158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:29:03.454 [DEBUG] [Thread-192158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:29:03.464 [DEBUG] [Thread-192158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:29:03.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:29:03.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:29:03.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:29:03.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:29:03.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:29:03.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:29:03.508 [DEBUG] [Thread-192158] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:29:16.114 [DEBUG] [Thread-192160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:29:31.181 [DEBUG] [Thread-192161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:29:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:29:33.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:29:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:29:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 29, 14), 8.05492, 58.9194, 0.0, 16.5863, 16.3162, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:29:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:29:14
2026-04-12T16:29:35.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:29:35.281 [DEBUG] [Thread-192162] [transport.py] [_log()] starting thread (client mode): 0xae5f3610
2026-04-12T16:29:35.281 [DEBUG] [Thread-192162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:29:35.301 [DEBUG] [Thread-192162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:29:35.302 [INFO] [Thread-192162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:29:35.305 [DEBUG] [Thread-192162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:29:35.305 [DEBUG] [Thread-192162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:29:35.305 [DEBUG] [Thread-192162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:29:35.305 [DEBUG] [Thread-192162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] client lang: <none>
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] server lang: <none>
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] kex follows: False
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:29:35.306 [DEBUG] [Thread-192162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:29:35.307 [DEBUG] [Thread-192162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:29:35.307 [DEBUG] [Thread-192162] [transport.py] [_log()] Compression: none
2026-04-12T16:29:35.307 [DEBUG] [Thread-192162] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:29:35.326 [DEBUG] [Thread-192162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:29:35.327 [DEBUG] [Thread-192162] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:29:35.327 [DEBUG] [Thread-192162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:29:35.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:29:35.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:29:35.329 [DEBUG] [Thread-192162] [transport.py] [_log()] userauth is OK
2026-04-12T16:29:35.329 [DEBUG] [Thread-192162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:29:35.330 [DEBUG] [Thread-192162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:29:35.330 [DEBUG] [Thread-192162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:29:35.330 [DEBUG] [Thread-192162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:29:35.352 [INFO] [Thread-192162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:29:35.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:29:36.004 [DEBUG] [Thread-192162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:29:36.005 [DEBUG] [Thread-192162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:29:36.005 [DEBUG] [Thread-192162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:29:36.046 [DEBUG] [Thread-192162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:29:36.046 [DEBUG] [Thread-192162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:29:36.049 [DEBUG] [Thread-192162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:29:36.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:29:36.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:29:36.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:29:36.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:29:36.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:29:36.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:29:36.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.603577 -999.00  +16.00  13.94     65   +9.50 1 2 1 1 1   887    0 5.85 -21.46 ----- 10.3 13.9 290.7 23.9 20.5 -20.5 20.2 -17.9 20.5 -15.3 21.5 -20.1
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.603577
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:29:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:29:14', tmtdew=8.05492, humidity=58.9194, cloud=0.0, wind=16.5863, temperature=16.3162, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:29:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:29:36.062 [DEBUG] [Thread-192162] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:29:36.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:29:36.145 [DEBUG] [Thread-192165] [transport.py] [_log()] starting thread (client mode): 0xb0febe80
2026-04-12T16:29:36.145 [DEBUG] [Thread-192165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:29:36.160 [DEBUG] [Thread-192165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:29:36.160 [INFO] [Thread-192165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] client lang: <none>
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] server lang: <none>
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] kex follows: False
2026-04-12T16:29:36.168 [DEBUG] [Thread-192165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:29:36.169 [DEBUG] [Thread-192165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:29:36.169 [DEBUG] [Thread-192165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:29:36.169 [DEBUG] [Thread-192165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:29:36.169 [DEBUG] [Thread-192165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:29:36.169 [DEBUG] [Thread-192165] [transport.py] [_log()] Compression: none
2026-04-12T16:29:36.169 [DEBUG] [Thread-192165] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:29:36.226 [DEBUG] [Thread-192165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:29:36.227 [DEBUG] [Thread-192165] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:29:36.227 [DEBUG] [Thread-192165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:29:36.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:29:36.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:29:36.284 [DEBUG] [Thread-192165] [transport.py] [_log()] userauth is OK
2026-04-12T16:29:36.284 [DEBUG] [Thread-192165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:29:36.284 [DEBUG] [Thread-192165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:29:36.284 [DEBUG] [Thread-192165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:29:36.284 [DEBUG] [Thread-192165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:29:36.307 [INFO] [Thread-192165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:29:36.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:29:36.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:29:37.137 [DEBUG] [Thread-192165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:29:37.137 [DEBUG] [Thread-192165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:29:37.185 [DEBUG] [Thread-192165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:29:37.186 [DEBUG] [Thread-192165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:29:37.194 [DEBUG] [Thread-192165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:29:37.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:29:37.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')
2026-04-12T16:29:37.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:29:37.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:29:37.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:29:37.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:29:37.229 [DEBUG] [Thread-192165] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:29:44.947 [DEBUG] [Thread-192167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:29:46.216 [DEBUG] [Thread-192168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:29:49.714 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:29:49.715 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:01.270 [DEBUG] [Thread-192169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:07.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:30:07.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:30:07.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:30:08.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 29, 49), 7.84189, 59.7726, 0.0, 21.8419, 16.6974, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:30:08.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:29:49
2026-04-12T16:30:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:30:09.106 [DEBUG] [Thread-192170] [transport.py] [_log()] starting thread (client mode): 0xae5f2dd0
2026-04-12T16:30:09.106 [DEBUG] [Thread-192170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:30:09.128 [DEBUG] [Thread-192170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:30:09.128 [INFO] [Thread-192170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:30:09.131 [DEBUG] [Thread-192170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] client lang: <none>
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] server lang: <none>
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] kex follows: False
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:30:09.132 [DEBUG] [Thread-192170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:30:09.133 [DEBUG] [Thread-192170] [transport.py] [_log()] Compression: none
2026-04-12T16:30:09.133 [DEBUG] [Thread-192170] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:30:09.149 [DEBUG] [Thread-192170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:30:09.150 [DEBUG] [Thread-192170] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:30:09.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:30:09.151 [DEBUG] [Thread-192170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:30:09.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:30:09.153 [DEBUG] [Thread-192170] [transport.py] [_log()] userauth is OK
2026-04-12T16:30:09.153 [DEBUG] [Thread-192170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:30:09.153 [DEBUG] [Thread-192170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:30:09.153 [DEBUG] [Thread-192170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:30:09.153 [DEBUG] [Thread-192170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:30:09.178 [INFO] [Thread-192170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:30:09.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:30:14.877 [DEBUG] [Thread-192170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:30:14.878 [DEBUG] [Thread-192170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:30:14.878 [DEBUG] [Thread-192170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:30:14.919 [DEBUG] [Thread-192170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:30:14.919 [DEBUG] [Thread-192170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:30:14.921 [DEBUG] [Thread-192170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:30:14.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:30:14.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:30:14.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:30:14.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:30:15.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:30:15.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:30:15.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:30:15.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:30:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:30:15.038 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T16:30:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:29:49', tmtdew=7.84189, humidity=59.7726, cloud=0.0, wind=21.8419, temperature=16.6974, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:30:15.042 [DEBUG] [Thread-192170] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:30:15.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:30:15.133 [DEBUG] [Thread-192173] [transport.py] [_log()] starting thread (client mode): 0xae537cd0
2026-04-12T16:30:15.133 [DEBUG] [Thread-192173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:30:15.149 [DEBUG] [Thread-192173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:30:15.149 [INFO] [Thread-192173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] client lang: <none>
2026-04-12T16:30:15.156 [DEBUG] [Thread-192173] [transport.py] [_log()] server lang: <none>
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] kex follows: False
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] Compression: none
2026-04-12T16:30:15.157 [DEBUG] [Thread-192173] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:30:15.216 [DEBUG] [Thread-192173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:30:15.216 [DEBUG] [Thread-192173] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:30:15.217 [DEBUG] [Thread-192173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:30:15.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:30:15.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:30:15.272 [DEBUG] [Thread-192173] [transport.py] [_log()] userauth is OK
2026-04-12T16:30:15.272 [DEBUG] [Thread-192173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:30:15.273 [DEBUG] [Thread-192173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:30:15.273 [DEBUG] [Thread-192173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:30:15.273 [DEBUG] [Thread-192173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:30:15.299 [INFO] [Thread-192173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:30:15.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:30:15.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:30:16.143 [DEBUG] [Thread-192173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:30:16.143 [DEBUG] [Thread-192173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:30:16.191 [DEBUG] [Thread-192173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:30:16.192 [DEBUG] [Thread-192173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:30:16.201 [DEBUG] [Thread-192173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:30:16.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:30:16.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:30:16.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:30:16.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:30:16.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:30:16.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:30:16.238 [DEBUG] [Thread-192173] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:30:16.308 [DEBUG] [Thread-192175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:31.361 [DEBUG] [Thread-192176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:44.999 [DEBUG] [Thread-192177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:46.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:30:46.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:30:46.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:30:46.398 [DEBUG] [Thread-192178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:47.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 30, 25), 8.14697, 58.3892, 0.0, 17.4154, 16.2818, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:30:47.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:30:25
2026-04-12T16:30:47.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:30:48.131 [DEBUG] [Thread-192179] [transport.py] [_log()] starting thread (client mode): 0xae5372b0
2026-04-12T16:30:48.131 [DEBUG] [Thread-192179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:30:48.141 [DEBUG] [Thread-192179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:30:48.141 [INFO] [Thread-192179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:30:48.143 [DEBUG] [Thread-192179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] client lang: <none>
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] server lang: <none>
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] kex follows: False
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] Compression: none
2026-04-12T16:30:48.144 [DEBUG] [Thread-192179] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:30:48.155 [DEBUG] [Thread-192179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:30:48.155 [DEBUG] [Thread-192179] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:30:48.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:30:48.156 [DEBUG] [Thread-192179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:30:48.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:30:48.157 [DEBUG] [Thread-192179] [transport.py] [_log()] userauth is OK
2026-04-12T16:30:48.157 [DEBUG] [Thread-192179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:30:48.157 [DEBUG] [Thread-192179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:30:48.157 [DEBUG] [Thread-192179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:30:48.157 [DEBUG] [Thread-192179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:30:48.180 [INFO] [Thread-192179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:30:48.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:30:48.797 [DEBUG] [Thread-192179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:30:48.798 [DEBUG] [Thread-192179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:30:48.798 [DEBUG] [Thread-192179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:30:48.839 [DEBUG] [Thread-192179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:30:48.839 [DEBUG] [Thread-192179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:30:48.842 [DEBUG] [Thread-192179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:30:48.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:30:48.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:30:48.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:30:48.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:30:48.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:30:48.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:30:48.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:30:48.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:30:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:30:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.604619 -999.00  +16.00  15.00     65   +9.50 1 2 1 1 1   887    0 6.26 -14.75 ----- 10.8 15.0 275.8 18.6 20.7 -17.7 20.2 -15.6 20.8 -13.8 21.6 -17.0
2026-04-12T16:30:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:30:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:30:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.604619
2026-04-12T16:30:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:30:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:30:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:30:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:30:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:30:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:30:25', tmtdew=8.14697, humidity=58.3892, cloud=0.0, wind=17.4154, temperature=16.2818, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:30:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:30:48.862 [DEBUG] [Thread-192179] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:30:48.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:30:48.959 [DEBUG] [Thread-192182] [transport.py] [_log()] starting thread (client mode): 0xae508d90
2026-04-12T16:30:48.959 [DEBUG] [Thread-192182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:30:48.976 [DEBUG] [Thread-192182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:30:48.976 [INFO] [Thread-192182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:30:48.984 [DEBUG] [Thread-192182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:30:48.984 [DEBUG] [Thread-192182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:30:48.984 [DEBUG] [Thread-192182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:30:48.984 [DEBUG] [Thread-192182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:48.984 [DEBUG] [Thread-192182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:30:48.984 [DEBUG] [Thread-192182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] client lang: <none>
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] server lang: <none>
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] kex follows: False
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:30:48.985 [DEBUG] [Thread-192182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:30:48.986 [DEBUG] [Thread-192182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:30:48.986 [DEBUG] [Thread-192182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:30:48.986 [DEBUG] [Thread-192182] [transport.py] [_log()] Compression: none
2026-04-12T16:30:48.986 [DEBUG] [Thread-192182] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:30:49.049 [DEBUG] [Thread-192182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:30:49.049 [DEBUG] [Thread-192182] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:30:49.050 [DEBUG] [Thread-192182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:30:49.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:30:49.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:30:49.110 [DEBUG] [Thread-192182] [transport.py] [_log()] userauth is OK
2026-04-12T16:30:49.110 [DEBUG] [Thread-192182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:30:49.110 [DEBUG] [Thread-192182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:30:49.110 [DEBUG] [Thread-192182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:30:49.110 [DEBUG] [Thread-192182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:30:49.128 [INFO] [Thread-192182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:30:49.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:30:49.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:30:49.858 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:49.859 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:30:50.014 [DEBUG] [Thread-192182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:30:50.014 [DEBUG] [Thread-192182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:30:50.062 [DEBUG] [Thread-192182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:30:50.062 [DEBUG] [Thread-192182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:30:50.071 [DEBUG] [Thread-192182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:30:50.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:30:50.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:30:50.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:30:50.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:30:50.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:30:50.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:30:50.106 [DEBUG] [Thread-192182] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:31:01.434 [DEBUG] [Thread-192184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:31:16.488 [DEBUG] [Thread-192185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:31:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:31:20.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:31:20.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:31:21.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 31), 8.06972, 58.817, 0.0, 17.3808, 16.1315, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:31:21.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:31:00
2026-04-12T16:31:21.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:31:21.926 [DEBUG] [Thread-192186] [transport.py] [_log()] starting thread (client mode): 0xae5f1c60
2026-04-12T16:31:21.926 [DEBUG] [Thread-192186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:31:21.947 [DEBUG] [Thread-192186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:31:21.948 [INFO] [Thread-192186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:31:21.950 [DEBUG] [Thread-192186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:31:21.950 [DEBUG] [Thread-192186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:31:21.950 [DEBUG] [Thread-192186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:31:21.950 [DEBUG] [Thread-192186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:21.950 [DEBUG] [Thread-192186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:21.950 [DEBUG] [Thread-192186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:21.950 [DEBUG] [Thread-192186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] client lang: <none>
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] server lang: <none>
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] kex follows: False
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] Compression: none
2026-04-12T16:31:21.951 [DEBUG] [Thread-192186] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:31:21.966 [DEBUG] [Thread-192186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:31:21.966 [DEBUG] [Thread-192186] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:31:21.967 [DEBUG] [Thread-192186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:31:21.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:31:21.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:31:21.969 [DEBUG] [Thread-192186] [transport.py] [_log()] userauth is OK
2026-04-12T16:31:21.969 [DEBUG] [Thread-192186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:31:21.969 [DEBUG] [Thread-192186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:31:21.969 [DEBUG] [Thread-192186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:31:21.970 [DEBUG] [Thread-192186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:31:22.007 [INFO] [Thread-192186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:31:22.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:31:22.578 [DEBUG] [Thread-192186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:31:22.578 [DEBUG] [Thread-192186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:31:22.579 [DEBUG] [Thread-192186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:31:22.619 [DEBUG] [Thread-192186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:31:22.619 [DEBUG] [Thread-192186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:31:22.622 [DEBUG] [Thread-192186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:31:22.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:31:22.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:31:22.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:31:22.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:31:22.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:31:22.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:31:22.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:31:22.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:31:22.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:31:22.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.604966 -999.00  +16.30   9.66     65   +9.70 1 2 1 1 1   887    0 5.98 -14.90 ----- 15.9 9.7 276.8 14.0 20.9 -16.9 20.3 -14.7 21.0 -13.7 21.8 -16.6
2026-04-12T16:31:22.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:31:22.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:31:22.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.604966
2026-04-12T16:31:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:31:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:31:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:31:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:31:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:31:22.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:31:00', tmtdew=8.06972, humidity=58.817, cloud=0.0, wind=17.3808, temperature=16.1315, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:31:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:31:22.652 [DEBUG] [Thread-192186] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:31:22.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:31:22.744 [DEBUG] [Thread-192189] [transport.py] [_log()] starting thread (client mode): 0xae5b5630
2026-04-12T16:31:22.744 [DEBUG] [Thread-192189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:31:22.761 [DEBUG] [Thread-192189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:31:22.761 [INFO] [Thread-192189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:31:22.768 [DEBUG] [Thread-192189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] client lang: <none>
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] server lang: <none>
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] kex follows: False
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:31:22.769 [DEBUG] [Thread-192189] [transport.py] [_log()] Compression: none
2026-04-12T16:31:22.770 [DEBUG] [Thread-192189] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:31:22.827 [DEBUG] [Thread-192189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:31:22.828 [DEBUG] [Thread-192189] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:31:22.829 [DEBUG] [Thread-192189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:31:22.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:31:22.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:31:22.884 [DEBUG] [Thread-192189] [transport.py] [_log()] userauth is OK
2026-04-12T16:31:22.884 [DEBUG] [Thread-192189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:31:22.884 [DEBUG] [Thread-192189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:31:22.884 [DEBUG] [Thread-192189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:31:22.885 [DEBUG] [Thread-192189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:31:22.905 [INFO] [Thread-192189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:31:22.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:31:22.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:31:23.770 [DEBUG] [Thread-192189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:31:23.770 [DEBUG] [Thread-192189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:31:23.818 [DEBUG] [Thread-192189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:31:23.818 [DEBUG] [Thread-192189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:31:23.827 [DEBUG] [Thread-192189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:31:23.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:31: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')
2026-04-12T16:31:23.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:31:23.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:31:23.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:31:23.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:31:23.865 [DEBUG] [Thread-192189] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:31:31.529 [DEBUG] [Thread-192191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:31:45.061 [DEBUG] [Thread-192192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:31:46.579 [DEBUG] [Thread-192193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:31:49.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:31:50.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:31:53.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:31:53.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:31:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:31:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 31, 36), 8.00195, 59.2092, 0.0, 18.4198, 17.0286, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:31:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:31:36
2026-04-12T16:31:55.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:31:55.749 [DEBUG] [Thread-192194] [transport.py] [_log()] starting thread (client mode): 0xae536aa0
2026-04-12T16:31:55.749 [DEBUG] [Thread-192194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:31:55.764 [DEBUG] [Thread-192194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:31:55.764 [INFO] [Thread-192194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] client lang: <none>
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] server lang: <none>
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] kex follows: False
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] Compression: none
2026-04-12T16:31:55.767 [DEBUG] [Thread-192194] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:31:55.783 [DEBUG] [Thread-192194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:31:55.784 [DEBUG] [Thread-192194] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:31:55.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:31:55.785 [DEBUG] [Thread-192194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:31:55.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:31:55.787 [DEBUG] [Thread-192194] [transport.py] [_log()] userauth is OK
2026-04-12T16:31:55.787 [DEBUG] [Thread-192194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:31:55.787 [DEBUG] [Thread-192194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:31:55.787 [DEBUG] [Thread-192194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:31:55.788 [DEBUG] [Thread-192194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:31:55.811 [INFO] [Thread-192194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:31:55.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:31:56.469 [DEBUG] [Thread-192194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:31:56.469 [DEBUG] [Thread-192194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:31:56.469 [DEBUG] [Thread-192194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:31:56.510 [DEBUG] [Thread-192194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:31:56.511 [DEBUG] [Thread-192194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:31:56.513 [DEBUG] [Thread-192194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:31:56.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:31:56.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:31:56.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:31:56.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:31:56.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:31:56.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:31:56.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:31:56.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:31:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:31:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.605314 -999.00  +16.00  17.50     62   +8.80 1 2 1 1 1   887    0 6.19 -14.21 ----- 15.8 17.5 272.2 22.5 20.8 -17.9 20.4 -14.7 20.8 -13.9 21.9 -16.2
2026-04-12T16:31:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:31:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:31:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.605314
2026-04-12T16:31:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:31:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:31:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:31:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:31:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:31:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:31:36', tmtdew=8.00195, humidity=59.2092, cloud=0.0, wind=18.4198, temperature=17.0286, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:31:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:31:56.540 [DEBUG] [Thread-192194] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:31:56.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:31:56.623 [DEBUG] [Thread-192197] [transport.py] [_log()] starting thread (client mode): 0xae5f2530
2026-04-12T16:31:56.623 [DEBUG] [Thread-192197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:31:56.638 [DEBUG] [Thread-192197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:31:56.638 [INFO] [Thread-192197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] client lang: <none>
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] server lang: <none>
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] kex follows: False
2026-04-12T16:31:56.646 [DEBUG] [Thread-192197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:31:56.647 [DEBUG] [Thread-192197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:31:56.647 [DEBUG] [Thread-192197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:31:56.647 [DEBUG] [Thread-192197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:31:56.647 [DEBUG] [Thread-192197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:31:56.647 [DEBUG] [Thread-192197] [transport.py] [_log()] Compression: none
2026-04-12T16:31:56.647 [DEBUG] [Thread-192197] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:31:56.706 [DEBUG] [Thread-192197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:31:56.707 [DEBUG] [Thread-192197] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:31:56.707 [DEBUG] [Thread-192197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:31:56.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:31:56.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:31:56.764 [DEBUG] [Thread-192197] [transport.py] [_log()] userauth is OK
2026-04-12T16:31:56.765 [DEBUG] [Thread-192197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:31:56.765 [DEBUG] [Thread-192197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:31:56.765 [DEBUG] [Thread-192197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:31:56.765 [DEBUG] [Thread-192197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:31:56.785 [INFO] [Thread-192197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:31:56.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:31:56.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:31:57.598 [DEBUG] [Thread-192197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:31:57.598 [DEBUG] [Thread-192197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:31:57.646 [DEBUG] [Thread-192197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:31:57.646 [DEBUG] [Thread-192197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:31:57.656 [DEBUG] [Thread-192197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:31:57.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:31:57.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:31:57.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:31:57.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:31:57.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:31:57.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:31:57.691 [DEBUG] [Thread-192197] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:32:01.615 [DEBUG] [Thread-192199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:32:16.659 [DEBUG] [Thread-192200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:32:27.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:32:27.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:32:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:32:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 32, 11), 8.09184, 58.6211, 0.0, 15.228, 16.0315, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:32:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:32:11
2026-04-12T16:32:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:32:29.545 [DEBUG] [Thread-192201] [transport.py] [_log()] starting thread (client mode): 0xae5a47c0
2026-04-12T16:32:29.545 [DEBUG] [Thread-192201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:32:29.566 [DEBUG] [Thread-192201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:32:29.566 [INFO] [Thread-192201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:32:29.569 [DEBUG] [Thread-192201] [transport.py] [_log()] client lang: <none>
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] server lang: <none>
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] kex follows: False
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] Compression: none
2026-04-12T16:32:29.570 [DEBUG] [Thread-192201] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:32:29.584 [DEBUG] [Thread-192201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:32:29.584 [DEBUG] [Thread-192201] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:32:29.585 [DEBUG] [Thread-192201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:32:29.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:32:29.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:32:29.587 [DEBUG] [Thread-192201] [transport.py] [_log()] userauth is OK
2026-04-12T16:32:29.587 [DEBUG] [Thread-192201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:32:29.587 [DEBUG] [Thread-192201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:32:29.587 [DEBUG] [Thread-192201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:32:29.587 [DEBUG] [Thread-192201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:32:29.612 [INFO] [Thread-192201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:32:29.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:32:30.205 [DEBUG] [Thread-192201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:32:30.205 [DEBUG] [Thread-192201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:32:30.206 [DEBUG] [Thread-192201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:32:30.246 [DEBUG] [Thread-192201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:32:30.246 [DEBUG] [Thread-192201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:32:30.250 [DEBUG] [Thread-192201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:32:30.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:32:30.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:32:30.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:32:30.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:32:30.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:32:30.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:32:30.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:32:30.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:32:30.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:32:30.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.605661 -999.00  +15.80  16.93     64   +9.10 1 2 1 1 1   887    0 6.10 -14.43 ----- 19.0 16.9 266.4 19.6 20.8 -15.3 20.3 -14.2 20.9 -14.6 21.8 -15.6
2026-04-12T16:32:30.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:32:30.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:32:30.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.605661
2026-04-12T16:32:30.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:32:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:32:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:32:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:32:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:32:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:32:11', tmtdew=8.09184, humidity=58.6211, cloud=0.0, wind=15.228, temperature=16.0315, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:32:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:32:30.274 [DEBUG] [Thread-192201] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:32:30.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:32:30.373 [DEBUG] [Thread-192204] [transport.py] [_log()] starting thread (client mode): 0xae5345b0
2026-04-12T16:32:30.373 [DEBUG] [Thread-192204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:32:30.392 [DEBUG] [Thread-192204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:32:30.392 [INFO] [Thread-192204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:32:30.399 [DEBUG] [Thread-192204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] client lang: <none>
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] server lang: <none>
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] kex follows: False
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:32:30.400 [DEBUG] [Thread-192204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:32:30.401 [DEBUG] [Thread-192204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:32:30.401 [DEBUG] [Thread-192204] [transport.py] [_log()] Compression: none
2026-04-12T16:32:30.401 [DEBUG] [Thread-192204] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:32:30.461 [DEBUG] [Thread-192204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:32:30.462 [DEBUG] [Thread-192204] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:32:30.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:32:30.463 [DEBUG] [Thread-192204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:32:30.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:32:30.520 [DEBUG] [Thread-192204] [transport.py] [_log()] userauth is OK
2026-04-12T16:32:30.521 [DEBUG] [Thread-192204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:32:30.521 [DEBUG] [Thread-192204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:32:30.521 [DEBUG] [Thread-192204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:32:30.521 [DEBUG] [Thread-192204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:32:30.540 [INFO] [Thread-192204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:32:30.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:32:30.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:32:31.350 [DEBUG] [Thread-192204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:32:31.350 [DEBUG] [Thread-192204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:32:31.398 [DEBUG] [Thread-192204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:32:31.399 [DEBUG] [Thread-192204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:32:31.408 [DEBUG] [Thread-192204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:32:31.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:32:31.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:32:31.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:32:31.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:32:31.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:32:31.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:32:31.446 [DEBUG] [Thread-192204] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:32:31.697 [DEBUG] [Thread-192206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:32:45.111 [DEBUG] [Thread-192207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:32:46.752 [DEBUG] [Thread-192208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:32:50.141 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:32:50.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:33:01.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:33:01.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:33:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:33:01.787 [DEBUG] [Thread-192209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:33:02.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 32, 47), 8.09776, 58.8115, 0.0, 18.455, 16.9623, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:33:02.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:32:47
2026-04-12T16:33:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:33:03.280 [DEBUG] [Thread-192210] [transport.py] [_log()] starting thread (client mode): 0xae5373a0
2026-04-12T16:33:03.280 [DEBUG] [Thread-192210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:33:03.301 [DEBUG] [Thread-192210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:33:03.301 [INFO] [Thread-192210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:03.304 [DEBUG] [Thread-192210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] client lang: <none>
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] server lang: <none>
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] kex follows: False
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] Compression: none
2026-04-12T16:33:03.305 [DEBUG] [Thread-192210] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:33:03.323 [DEBUG] [Thread-192210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:33:03.324 [DEBUG] [Thread-192210] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:33:03.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:33:03.325 [DEBUG] [Thread-192210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:33:03.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:33:03.327 [DEBUG] [Thread-192210] [transport.py] [_log()] userauth is OK
2026-04-12T16:33:03.327 [DEBUG] [Thread-192210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:33:03.327 [DEBUG] [Thread-192210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:33:03.328 [DEBUG] [Thread-192210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:33:03.328 [DEBUG] [Thread-192210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:33:03.347 [INFO] [Thread-192210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:33:03.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:33:04.004 [DEBUG] [Thread-192210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:33:04.004 [DEBUG] [Thread-192210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:33:04.005 [DEBUG] [Thread-192210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:33:04.045 [DEBUG] [Thread-192210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:33:04.045 [DEBUG] [Thread-192210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:33:04.049 [DEBUG] [Thread-192210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:33:04.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:33:04.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:33:04.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:33:04.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:33:04.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:33:04.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:33:04.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:33:04.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:33:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:33:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.606008 -999.00  +15.70  12.49     65   +9.10 1 2 1 1 1   887    0 6.15 -15.50 ----- 11.2 12.5 297.0 20.9 20.8 -16.0 20.4 -14.0 20.9 -13.1 21.8 -14.6
2026-04-12T16:33:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:33:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:33:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.606008
2026-04-12T16:33:04.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:33:04.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:33:04.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:33:04.078 [DEBUG] [Thread-192210] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:33:04.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:33:04.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:33:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:32:47', tmtdew=8.09776, humidity=58.8115, cloud=0.0, wind=18.455, temperature=16.9623, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:32:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:33:04.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:33:04.171 [DEBUG] [Thread-192213] [transport.py] [_log()] starting thread (client mode): 0xb0fe8ac0
2026-04-12T16:33:04.172 [DEBUG] [Thread-192213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:33:04.186 [DEBUG] [Thread-192213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:33:04.186 [INFO] [Thread-192213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:33:04.194 [DEBUG] [Thread-192213] [transport.py] [_log()] client lang: <none>
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] server lang: <none>
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] kex follows: False
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] Compression: none
2026-04-12T16:33:04.195 [DEBUG] [Thread-192213] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:33:04.256 [DEBUG] [Thread-192213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:33:04.257 [DEBUG] [Thread-192213] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:33:04.258 [DEBUG] [Thread-192213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:33:04.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:33:04.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:33:04.312 [DEBUG] [Thread-192213] [transport.py] [_log()] userauth is OK
2026-04-12T16:33:04.312 [DEBUG] [Thread-192213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:33:04.313 [DEBUG] [Thread-192213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:33:04.313 [DEBUG] [Thread-192213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:33:04.313 [DEBUG] [Thread-192213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:33:04.331 [INFO] [Thread-192213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:33:04.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:33:04.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:33:05.140 [DEBUG] [Thread-192213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:33:05.140 [DEBUG] [Thread-192213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:33:05.188 [DEBUG] [Thread-192213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:33:05.188 [DEBUG] [Thread-192213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:33:05.198 [DEBUG] [Thread-192213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:33:05.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:33:05.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:33:05.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:33:05.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:33:05.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:33:05.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:33:05.234 [DEBUG] [Thread-192213] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:33:16.822 [DEBUG] [Thread-192215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:33:31.884 [DEBUG] [Thread-192216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:33:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:33:35.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:33:35.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:33:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 33, 23), 7.96874, 59.5217, 0.0, 16.5341, 16.1646, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:33:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:33:23
2026-04-12T16:33:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:33:37.080 [DEBUG] [Thread-192217] [transport.py] [_log()] starting thread (client mode): 0xae5b7490
2026-04-12T16:33:37.080 [DEBUG] [Thread-192217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:33:37.100 [DEBUG] [Thread-192217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:33:37.100 [INFO] [Thread-192217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:33:37.103 [DEBUG] [Thread-192217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:33:37.103 [DEBUG] [Thread-192217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] client lang: <none>
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] server lang: <none>
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] kex follows: False
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] Compression: none
2026-04-12T16:33:37.104 [DEBUG] [Thread-192217] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:33:37.122 [DEBUG] [Thread-192217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:33:37.122 [DEBUG] [Thread-192217] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:33:37.123 [DEBUG] [Thread-192217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:33:37.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:33:37.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:33:37.125 [DEBUG] [Thread-192217] [transport.py] [_log()] userauth is OK
2026-04-12T16:33:37.125 [DEBUG] [Thread-192217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:33:37.125 [DEBUG] [Thread-192217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:33:37.125 [DEBUG] [Thread-192217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:33:37.126 [DEBUG] [Thread-192217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:33:37.148 [INFO] [Thread-192217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:33:37.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:33:37.785 [DEBUG] [Thread-192217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:33:37.786 [DEBUG] [Thread-192217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:33:37.786 [DEBUG] [Thread-192217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:33:37.827 [DEBUG] [Thread-192217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:33:37.827 [DEBUG] [Thread-192217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:33:37.829 [DEBUG] [Thread-192217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:33:37.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:33:37.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:33:37.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:33:37.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:33:37.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:33:37.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:33:37.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:33:37.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:33:37.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:33:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.606355 -999.00  +15.90  15.59     65   +9.40 1 2 1 1 1   887    0 6.02 -13.96 ----- 15.6 15.6 292.6 18.8 21.0 -14.6 20.4 -13.2 21.1 -13.9 22.0 -13.7
2026-04-12T16:33:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:33:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:33:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.606355
2026-04-12T16:33:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:33:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:33:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:33:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:33:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:33:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:33:23', tmtdew=7.96874, humidity=59.5217, cloud=0.0, wind=16.5341, temperature=16.1646, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:33:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:33:37.854 [DEBUG] [Thread-192217] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:33:37.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:33:37.952 [DEBUG] [Thread-192220] [transport.py] [_log()] starting thread (client mode): 0xae5f3e80
2026-04-12T16:33:37.952 [DEBUG] [Thread-192220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:33:37.966 [DEBUG] [Thread-192220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:33:37.966 [INFO] [Thread-192220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] client lang: <none>
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] server lang: <none>
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] kex follows: False
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:33:37.974 [DEBUG] [Thread-192220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:33:37.975 [DEBUG] [Thread-192220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:33:37.975 [DEBUG] [Thread-192220] [transport.py] [_log()] Compression: none
2026-04-12T16:33:37.975 [DEBUG] [Thread-192220] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:33:38.031 [DEBUG] [Thread-192220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:33:38.032 [DEBUG] [Thread-192220] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:33:38.032 [DEBUG] [Thread-192220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:33:38.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:33:38.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:33:38.087 [DEBUG] [Thread-192220] [transport.py] [_log()] userauth is OK
2026-04-12T16:33:38.088 [DEBUG] [Thread-192220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:33:38.088 [DEBUG] [Thread-192220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:33:38.088 [DEBUG] [Thread-192220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:33:38.088 [DEBUG] [Thread-192220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:33:38.111 [INFO] [Thread-192220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:33:38.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:33:38.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:33:38.952 [DEBUG] [Thread-192220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:33:38.953 [DEBUG] [Thread-192220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:33:39.000 [DEBUG] [Thread-192220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:33:39.000 [DEBUG] [Thread-192220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:33:39.009 [DEBUG] [Thread-192220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:33:39.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:33:39.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:33:39.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:33:39.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:33:39.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:33:39.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:33:39.049 [DEBUG] [Thread-192220] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:33:45.164 [DEBUG] [Thread-192222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:33:46.922 [DEBUG] [Thread-192223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:33:50.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:33:50.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:34:01.973 [DEBUG] [Thread-192224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:34:09.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:34:09.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:34:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:34:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 33, 58), 8.06914, 58.6075, 0.0, 12.9348, 16.1983, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:34:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:33:58
2026-04-12T16:34:10.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:34:10.859 [DEBUG] [Thread-192225] [transport.py] [_log()] starting thread (client mode): 0xae5f38e0
2026-04-12T16:34:10.859 [DEBUG] [Thread-192225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:34:10.879 [DEBUG] [Thread-192225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:34:10.879 [INFO] [Thread-192225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:34:10.882 [DEBUG] [Thread-192225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:34:10.882 [DEBUG] [Thread-192225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:34:10.882 [DEBUG] [Thread-192225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:34:10.882 [DEBUG] [Thread-192225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:10.882 [DEBUG] [Thread-192225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:10.882 [DEBUG] [Thread-192225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] client lang: <none>
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] server lang: <none>
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] kex follows: False
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] Compression: none
2026-04-12T16:34:10.883 [DEBUG] [Thread-192225] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:34:10.905 [DEBUG] [Thread-192225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:34:10.906 [DEBUG] [Thread-192225] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:34:10.907 [DEBUG] [Thread-192225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:34:10.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:34:10.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:34:10.948 [DEBUG] [Thread-192225] [transport.py] [_log()] userauth is OK
2026-04-12T16:34:10.948 [DEBUG] [Thread-192225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:34:10.948 [DEBUG] [Thread-192225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:34:10.948 [DEBUG] [Thread-192225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:34:10.948 [DEBUG] [Thread-192225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:34:10.978 [INFO] [Thread-192225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:34:10.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:34:11.608 [DEBUG] [Thread-192225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:34:11.608 [DEBUG] [Thread-192225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:34:11.608 [DEBUG] [Thread-192225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:34:11.649 [DEBUG] [Thread-192225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:34:11.649 [DEBUG] [Thread-192225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:34:11.651 [DEBUG] [Thread-192225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:34:11.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:34:11.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:34:11.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:34:11.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:34:11.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:34:11.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:34:11.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:34:11.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:34:11.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:34:11.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.606702 -999.00  +15.90  15.26     63   +9.00 1 2 1 1 1   887    0 6.15 -13.87 ----- 13.8 15.3 272.0 18.4 20.9 -15.0 20.5 -13.5 21.0 -13.1 22.1 -13.3
2026-04-12T16:34:11.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:34:11.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:34:11.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.606702
2026-04-12T16:34:11.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:34:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:34:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:34:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:34:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:34:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:33:58', tmtdew=8.06914, humidity=58.6075, cloud=0.0, wind=12.9348, temperature=16.1983, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:33:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:34:11.675 [DEBUG] [Thread-192225] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:34:11.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:34:11.771 [DEBUG] [Thread-192228] [transport.py] [_log()] starting thread (client mode): 0xb0f6e9b0
2026-04-12T16:34:11.771 [DEBUG] [Thread-192228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:34:11.785 [DEBUG] [Thread-192228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:34:11.785 [INFO] [Thread-192228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:34:11.793 [DEBUG] [Thread-192228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:34:11.793 [DEBUG] [Thread-192228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:34:11.793 [DEBUG] [Thread-192228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:34:11.793 [DEBUG] [Thread-192228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:11.793 [DEBUG] [Thread-192228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] client lang: <none>
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] server lang: <none>
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] kex follows: False
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:34:11.794 [DEBUG] [Thread-192228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:34:11.795 [DEBUG] [Thread-192228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:34:11.795 [DEBUG] [Thread-192228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:34:11.795 [DEBUG] [Thread-192228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:34:11.795 [DEBUG] [Thread-192228] [transport.py] [_log()] Compression: none
2026-04-12T16:34:11.795 [DEBUG] [Thread-192228] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:34:11.853 [DEBUG] [Thread-192228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:34:11.853 [DEBUG] [Thread-192228] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:34:11.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:34:11.854 [DEBUG] [Thread-192228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:34:11.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:34:11.909 [DEBUG] [Thread-192228] [transport.py] [_log()] userauth is OK
2026-04-12T16:34:11.909 [DEBUG] [Thread-192228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:34:11.910 [DEBUG] [Thread-192228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:34:11.910 [DEBUG] [Thread-192228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:34:11.910 [DEBUG] [Thread-192228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:34:11.930 [INFO] [Thread-192228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:34:11.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:34:11.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:34:12.762 [DEBUG] [Thread-192228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:34:12.762 [DEBUG] [Thread-192228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:34:12.810 [DEBUG] [Thread-192228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:34:12.810 [DEBUG] [Thread-192228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:34:12.819 [DEBUG] [Thread-192228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:34:12.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:34:12.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:34:12.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:34:12.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:34:12.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:34:12.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:34:12.856 [DEBUG] [Thread-192228] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:34:17.015 [DEBUG] [Thread-192230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:34:32.069 [DEBUG] [Thread-192231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:34:42.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:34:42.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:34:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:34:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 34, 33), 7.7519, 60.1368, 0.0, 12.5986, 16.6972, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:34:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:34:33
2026-04-12T16:34:44.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:34:44.703 [DEBUG] [Thread-192232] [transport.py] [_log()] starting thread (client mode): 0xae5b6c80
2026-04-12T16:34:44.703 [DEBUG] [Thread-192232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:34:44.723 [DEBUG] [Thread-192232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:34:44.723 [INFO] [Thread-192232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:34:44.726 [DEBUG] [Thread-192232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] client lang: <none>
2026-04-12T16:34:44.727 [DEBUG] [Thread-192232] [transport.py] [_log()] server lang: <none>
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] kex follows: False
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] Compression: none
2026-04-12T16:34:44.728 [DEBUG] [Thread-192232] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:34:44.748 [DEBUG] [Thread-192232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:34:44.749 [DEBUG] [Thread-192232] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:34:44.749 [DEBUG] [Thread-192232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:34:44.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:34:44.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:34:44.793 [DEBUG] [Thread-192232] [transport.py] [_log()] userauth is OK
2026-04-12T16:34:44.793 [DEBUG] [Thread-192232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:34:44.793 [DEBUG] [Thread-192232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:34:44.793 [DEBUG] [Thread-192232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:34:44.793 [DEBUG] [Thread-192232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:34:44.825 [INFO] [Thread-192232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:34:44.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:34:45.217 [DEBUG] [Thread-192234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:34:45.474 [DEBUG] [Thread-192232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:34:45.474 [DEBUG] [Thread-192232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:34:45.475 [DEBUG] [Thread-192232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:34:45.515 [DEBUG] [Thread-192232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:34:45.515 [DEBUG] [Thread-192232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:34:45.519 [DEBUG] [Thread-192232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:34:45.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:34:45.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:34:45.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:34:45.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:34:45.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:34:45.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:34:45.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:34:45.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:34:45.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:34:45.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.607050 -999.00  +15.90  10.90     64   +9.10 1 2 1 1 1   887    0 6.19 -13.19 ----- 11.8 10.9 277.2 12.8 21.0 -14.8 20.5 -13.0 21.0 -14.1 22.1 -12.2
2026-04-12T16:34:45.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:34:45.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:34:45.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.607050
2026-04-12T16:34:45.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:34:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:34:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:34:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:34:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:34:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:34:33', tmtdew=7.7519, humidity=60.1368, cloud=0.0, wind=12.5986, temperature=16.6972, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:34:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:34:45.547 [DEBUG] [Thread-192232] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:34:45.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:34:45.640 [DEBUG] [Thread-192236] [transport.py] [_log()] starting thread (client mode): 0xae5b4a30
2026-04-12T16:34:45.640 [DEBUG] [Thread-192236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:34:45.655 [DEBUG] [Thread-192236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:34:45.655 [INFO] [Thread-192236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:34:45.663 [DEBUG] [Thread-192236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] client lang: <none>
2026-04-12T16:34:45.664 [DEBUG] [Thread-192236] [transport.py] [_log()] server lang: <none>
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] kex follows: False
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] Compression: none
2026-04-12T16:34:45.665 [DEBUG] [Thread-192236] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:34:45.720 [DEBUG] [Thread-192236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:34:45.720 [DEBUG] [Thread-192236] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:34:45.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:34:45.722 [DEBUG] [Thread-192236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:34:45.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:34:45.777 [DEBUG] [Thread-192236] [transport.py] [_log()] userauth is OK
2026-04-12T16:34:45.778 [DEBUG] [Thread-192236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:34:45.778 [DEBUG] [Thread-192236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:34:45.778 [DEBUG] [Thread-192236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:34:45.778 [DEBUG] [Thread-192236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:34:45.798 [INFO] [Thread-192236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:34:45.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:34:45.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:34:46.653 [DEBUG] [Thread-192236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:34:46.653 [DEBUG] [Thread-192236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:34:46.701 [DEBUG] [Thread-192236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:34:46.702 [DEBUG] [Thread-192236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:34:46.711 [DEBUG] [Thread-192236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:34:46.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:34:46.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:34:46.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:34:46.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:34:46.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:34:46.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:34:46.751 [DEBUG] [Thread-192236] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:34:47.107 [DEBUG] [Thread-192238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:34:50.423 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:34:50.425 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:02.160 [DEBUG] [Thread-192239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:35:16.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:35:16.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:35:17.200 [DEBUG] [Thread-192240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 35, 9), 8.01468, 58.8229, 0.0, 12.8995, 16.2483, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:35:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:35:09
2026-04-12T16:35:18.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:35:18.642 [DEBUG] [Thread-192241] [transport.py] [_log()] starting thread (client mode): 0xae5b50c0
2026-04-12T16:35:18.642 [DEBUG] [Thread-192241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:35:18.655 [DEBUG] [Thread-192241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:35:18.656 [INFO] [Thread-192241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:35:18.658 [DEBUG] [Thread-192241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] client lang: <none>
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] server lang: <none>
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] kex follows: False
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] Compression: none
2026-04-12T16:35:18.659 [DEBUG] [Thread-192241] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:35:18.675 [DEBUG] [Thread-192241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:35:18.675 [DEBUG] [Thread-192241] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:35:18.675 [DEBUG] [Thread-192241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:35:18.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:35:18.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:35:18.676 [DEBUG] [Thread-192241] [transport.py] [_log()] userauth is OK
2026-04-12T16:35:18.676 [DEBUG] [Thread-192241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:35:18.676 [DEBUG] [Thread-192241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:35:18.676 [DEBUG] [Thread-192241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:35:18.676 [DEBUG] [Thread-192241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:35:18.695 [INFO] [Thread-192241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:35:18.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:35:24.020 [DEBUG] [Thread-192241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:35:24.020 [DEBUG] [Thread-192241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:35:24.021 [DEBUG] [Thread-192241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:35:24.061 [DEBUG] [Thread-192241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:35:24.062 [DEBUG] [Thread-192241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:35:24.065 [DEBUG] [Thread-192241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:35:24.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:35:24.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:35:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:35:24.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:35:24.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:35:24.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:35:24.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:35:24.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:35:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:35:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.607050 -999.00  +15.90  10.90     64   +9.10 1 2 1 1 1   887    0 6.19 -13.19 ----- 11.8 10.9 277.2 12.8 21.0 -14.8 20.5 -13.0 21.0 -14.1 22.1 -12.2
2026-04-12T16:35:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:35:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:35:24.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.607050
2026-04-12T16:35:24.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:35:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:35:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:35:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:35:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:35:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:35:09', tmtdew=8.01468, humidity=58.8229, cloud=0.0, wind=12.8995, temperature=16.2483, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:34:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:35:24.105 [DEBUG] [Thread-192241] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:35:24.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:35:24.208 [DEBUG] [Thread-192244] [transport.py] [_log()] starting thread (client mode): 0xb0fcddb0
2026-04-12T16:35:24.208 [DEBUG] [Thread-192244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:35:24.223 [DEBUG] [Thread-192244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:35:24.223 [INFO] [Thread-192244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:35:24.231 [DEBUG] [Thread-192244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:35:24.231 [DEBUG] [Thread-192244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:35:24.231 [DEBUG] [Thread-192244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] client lang: <none>
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] server lang: <none>
2026-04-12T16:35:24.232 [DEBUG] [Thread-192244] [transport.py] [_log()] kex follows: False
2026-04-12T16:35:24.233 [DEBUG] [Thread-192244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:35:24.233 [DEBUG] [Thread-192244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:35:24.233 [DEBUG] [Thread-192244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:35:24.233 [DEBUG] [Thread-192244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:35:24.233 [DEBUG] [Thread-192244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:35:24.233 [DEBUG] [Thread-192244] [transport.py] [_log()] Compression: none
2026-04-12T16:35:24.233 [DEBUG] [Thread-192244] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:35:24.287 [DEBUG] [Thread-192244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:35:24.287 [DEBUG] [Thread-192244] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:35:24.287 [DEBUG] [Thread-192244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:35:24.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:35:24.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:35:24.344 [DEBUG] [Thread-192244] [transport.py] [_log()] userauth is OK
2026-04-12T16:35:24.345 [DEBUG] [Thread-192244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:35:24.345 [DEBUG] [Thread-192244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:35:24.345 [DEBUG] [Thread-192244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:35:24.345 [DEBUG] [Thread-192244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:35:24.368 [INFO] [Thread-192244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:35:24.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:35:24.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:35:25.199 [DEBUG] [Thread-192244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:35:25.199 [DEBUG] [Thread-192244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:35:25.247 [DEBUG] [Thread-192244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:35:25.247 [DEBUG] [Thread-192244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:35:25.256 [DEBUG] [Thread-192244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:35:25.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:35:25.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:35:25.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:35:25.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:35:25.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:35:25.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:35:25.296 [DEBUG] [Thread-192244] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:35:32.238 [DEBUG] [Thread-192246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:45.271 [DEBUG] [Thread-192247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:47.293 [DEBUG] [Thread-192248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:50.564 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:50.566 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:35:55.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:35:55.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:35:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:35:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 35, 44), 8.03776, 59.0102, 0.0, 15.1034, 16.7966, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:35:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:35:44
2026-04-12T16:35:57.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:35:57.235 [DEBUG] [Thread-192249] [transport.py] [_log()] starting thread (client mode): 0xae50bd00
2026-04-12T16:35:57.235 [DEBUG] [Thread-192249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:35:57.255 [DEBUG] [Thread-192249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:35:57.256 [INFO] [Thread-192249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:35:57.259 [DEBUG] [Thread-192249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:35:57.259 [DEBUG] [Thread-192249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:35:57.259 [DEBUG] [Thread-192249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:35:57.259 [DEBUG] [Thread-192249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:57.259 [DEBUG] [Thread-192249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:57.259 [DEBUG] [Thread-192249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] client lang: <none>
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] server lang: <none>
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] kex follows: False
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:35:57.260 [DEBUG] [Thread-192249] [transport.py] [_log()] Compression: none
2026-04-12T16:35:57.261 [DEBUG] [Thread-192249] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:35:57.279 [DEBUG] [Thread-192249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:35:57.280 [DEBUG] [Thread-192249] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:35:57.280 [DEBUG] [Thread-192249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:35:57.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:35:57.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:35:57.282 [DEBUG] [Thread-192249] [transport.py] [_log()] userauth is OK
2026-04-12T16:35:57.283 [DEBUG] [Thread-192249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:35:57.283 [DEBUG] [Thread-192249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:35:57.283 [DEBUG] [Thread-192249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:35:57.283 [DEBUG] [Thread-192249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:35:57.306 [INFO] [Thread-192249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:35:57.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:35:58.037 [DEBUG] [Thread-192249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:35:58.046 [DEBUG] [Thread-192249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:35:58.046 [DEBUG] [Thread-192249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:35:58.077 [DEBUG] [Thread-192249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:35:58.078 [DEBUG] [Thread-192249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:35:58.080 [DEBUG] [Thread-192249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:35:58.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:35:58.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:35:58.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:35:58.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:35:58.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:35:58.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:35:58.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:35:58.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:35:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:35:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.607744 -999.00  +15.60  22.50     66   +9.30 1 2 1 1 1   887    0 6.08 -17.96 ----- 21.2 22.5 271.4 25.8 20.9 -13.9 20.5 -13.1 20.8 -14.7 22.0 -11.6
2026-04-12T16:35:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:35:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:35:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.607744
2026-04-12T16:35:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:35:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:35:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:35:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:35:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:35:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:35:44', tmtdew=8.03776, humidity=59.0102, cloud=0.0, wind=15.1034, temperature=16.7966, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:35:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:35:58.110 [DEBUG] [Thread-192249] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:35:58.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:35:58.205 [DEBUG] [Thread-192252] [transport.py] [_log()] starting thread (client mode): 0xae50a770
2026-04-12T16:35:58.205 [DEBUG] [Thread-192252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:35:58.222 [DEBUG] [Thread-192252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:35:58.222 [INFO] [Thread-192252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:35:58.229 [DEBUG] [Thread-192252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:35:58.229 [DEBUG] [Thread-192252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:35:58.229 [DEBUG] [Thread-192252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:35:58.229 [DEBUG] [Thread-192252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] client lang: <none>
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] server lang: <none>
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] kex follows: False
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] Compression: none
2026-04-12T16:35:58.230 [DEBUG] [Thread-192252] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:35:58.287 [DEBUG] [Thread-192252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:35:58.287 [DEBUG] [Thread-192252] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:35:58.288 [DEBUG] [Thread-192252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:35:58.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:35:58.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:35:58.343 [DEBUG] [Thread-192252] [transport.py] [_log()] userauth is OK
2026-04-12T16:35:58.343 [DEBUG] [Thread-192252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:35:58.344 [DEBUG] [Thread-192252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:35:58.344 [DEBUG] [Thread-192252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:35:58.344 [DEBUG] [Thread-192252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:35:58.363 [INFO] [Thread-192252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:35:58.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:35:58.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:35:59.200 [DEBUG] [Thread-192252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:35:59.200 [DEBUG] [Thread-192252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:35:59.248 [DEBUG] [Thread-192252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:35:59.248 [DEBUG] [Thread-192252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:35:59.257 [DEBUG] [Thread-192252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:35:59.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:35:59.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:35:59.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:35:59.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:35:59.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:35:59.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:35:59.290 [DEBUG] [Thread-192252] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:36:02.329 [DEBUG] [Thread-192254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:36:17.383 [DEBUG] [Thread-192255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:36:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:36:29.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:36:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:36:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 36, 20), 7.68894, 59.9662, 0.0, 18.6509, 16.3811, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:36:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:36:20
2026-04-12T16:36:30.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:36:31.128 [DEBUG] [Thread-192256] [transport.py] [_log()] starting thread (client mode): 0xae5f37f0
2026-04-12T16:36:31.129 [DEBUG] [Thread-192256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:36:31.145 [DEBUG] [Thread-192256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:36:31.145 [INFO] [Thread-192256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:36:31.146 [DEBUG] [Thread-192256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] client lang: <none>
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] server lang: <none>
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] kex follows: False
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] Compression: none
2026-04-12T16:36:31.147 [DEBUG] [Thread-192256] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:36:31.154 [DEBUG] [Thread-192256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:36:31.155 [DEBUG] [Thread-192256] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:36:31.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:36:31.155 [DEBUG] [Thread-192256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:36:31.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:36:31.157 [DEBUG] [Thread-192256] [transport.py] [_log()] userauth is OK
2026-04-12T16:36:31.157 [DEBUG] [Thread-192256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:36:31.157 [DEBUG] [Thread-192256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:36:31.157 [DEBUG] [Thread-192256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:36:31.157 [DEBUG] [Thread-192256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:36:31.179 [INFO] [Thread-192256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:36:31.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:36:31.808 [DEBUG] [Thread-192256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:36:31.808 [DEBUG] [Thread-192256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:36:31.808 [DEBUG] [Thread-192256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:36:31.849 [DEBUG] [Thread-192256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:36:31.849 [DEBUG] [Thread-192256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:36:31.852 [DEBUG] [Thread-192256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:36:31.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:36:31.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:36:31.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:36:31.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:36:31.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:36:31.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:36:31.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:36:31.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:36:31.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:36:31.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.608438 -999.00  +15.60  12.25     67   +9.50 1 2 1 1 1   887    0 5.96 -22.08 ----- 11.2 12.2 306.6 17.8 20.9 -12.6 20.5 -12.5 20.9 -9.1 22.1 -11.5
2026-04-12T16:36:31.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:36:31.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:36:31.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.608438
2026-04-12T16:36:31.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:36:31.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:36:31.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:36:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:36:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:36:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:36:20', tmtdew=7.68894, humidity=59.9662, cloud=0.0, wind=18.6509, temperature=16.3811, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:36:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:36:31.872 [DEBUG] [Thread-192256] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:36:31.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:36:31.966 [DEBUG] [Thread-192259] [transport.py] [_log()] starting thread (client mode): 0xae50ac20
2026-04-12T16:36:31.967 [DEBUG] [Thread-192259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:36:31.981 [DEBUG] [Thread-192259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:36:31.981 [INFO] [Thread-192259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] client lang: <none>
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] server lang: <none>
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] kex follows: False
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:36:31.989 [DEBUG] [Thread-192259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:36:31.990 [DEBUG] [Thread-192259] [transport.py] [_log()] Compression: none
2026-04-12T16:36:31.990 [DEBUG] [Thread-192259] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:36:32.048 [DEBUG] [Thread-192259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:36:32.049 [DEBUG] [Thread-192259] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:36:32.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:36:32.050 [DEBUG] [Thread-192259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:36:32.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:36:32.104 [DEBUG] [Thread-192259] [transport.py] [_log()] userauth is OK
2026-04-12T16:36:32.105 [DEBUG] [Thread-192259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:36:32.105 [DEBUG] [Thread-192259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:36:32.105 [DEBUG] [Thread-192259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:36:32.105 [DEBUG] [Thread-192259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:36:32.123 [INFO] [Thread-192259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:36:32.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:36:32.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:36:32.420 [DEBUG] [Thread-192261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:36:32.942 [DEBUG] [Thread-192259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:36:32.942 [DEBUG] [Thread-192259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:36:32.990 [DEBUG] [Thread-192259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:36:32.990 [DEBUG] [Thread-192259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:36:33.000 [DEBUG] [Thread-192259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:36:33.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:36:33.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:36: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
2026-04-12T16:36:33.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:36:33.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:36:33.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:36:33.037 [DEBUG] [Thread-192259] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:36:45.316 [DEBUG] [Thread-192262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:36:47.471 [DEBUG] [Thread-192263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:36:50.703 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:36:50.705 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:37:02.508 [DEBUG] [Thread-192264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:37:03.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:37:03.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:37:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:37:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 36, 55), 7.91039, 59.5551, 0.0, 15.6866, 16.0648, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:37:04.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:36:55
2026-04-12T16:37:04.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:37:04.897 [DEBUG] [Thread-192265] [transport.py] [_log()] starting thread (client mode): 0xae5f3070
2026-04-12T16:37:04.897 [DEBUG] [Thread-192265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:37:04.912 [DEBUG] [Thread-192265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:37:04.912 [INFO] [Thread-192265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] client lang: <none>
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] server lang: <none>
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] kex follows: False
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] Compression: none
2026-04-12T16:37:04.914 [DEBUG] [Thread-192265] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:37:04.926 [DEBUG] [Thread-192265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:37:04.926 [DEBUG] [Thread-192265] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:37:04.927 [DEBUG] [Thread-192265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:37:04.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:37:04.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:37:04.928 [DEBUG] [Thread-192265] [transport.py] [_log()] userauth is OK
2026-04-12T16:37:04.928 [DEBUG] [Thread-192265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:37:04.928 [DEBUG] [Thread-192265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:37:04.928 [DEBUG] [Thread-192265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:37:04.928 [DEBUG] [Thread-192265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:37:04.955 [INFO] [Thread-192265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:37:04.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:37:05.584 [DEBUG] [Thread-192265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:37:05.585 [DEBUG] [Thread-192265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:37:05.585 [DEBUG] [Thread-192265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:37:05.625 [DEBUG] [Thread-192265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:37:05.625 [DEBUG] [Thread-192265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:37:05.627 [DEBUG] [Thread-192265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:37:05.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:37:05.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:37:05.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:37:05.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:37:05.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:37:05.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:37:05.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:37:05.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:37:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:37:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.608786 -999.00  +15.80  12.19     66   +9.50 1 2 1 1 1   887    0 5.97 -22.71 ----- 12.7 12.2 284.6 16.3 21.2 -12.1 20.6 -11.9 21.3 -10.2 22.1 -10.4
2026-04-12T16:37:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:37:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:37:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.608786
2026-04-12T16:37:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:37:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:37:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:37:05.654 [DEBUG] [Thread-192265] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:37:05.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:37:05.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:37:05.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:36:55', tmtdew=7.91039, humidity=59.5551, cloud=0.0, wind=15.6866, temperature=16.0648, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:36:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:37:05.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:37:05.749 [DEBUG] [Thread-192268] [transport.py] [_log()] starting thread (client mode): 0xb0f43c70
2026-04-12T16:37:05.749 [DEBUG] [Thread-192268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:37:05.763 [DEBUG] [Thread-192268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:37:05.764 [INFO] [Thread-192268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:37:05.771 [DEBUG] [Thread-192268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:37:05.772 [DEBUG] [Thread-192268] [transport.py] [_log()] client lang: <none>
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] server lang: <none>
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] kex follows: False
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:37:05.773 [DEBUG] [Thread-192268] [transport.py] [_log()] Compression: none
2026-04-12T16:37:05.774 [DEBUG] [Thread-192268] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:37:05.832 [DEBUG] [Thread-192268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:37:05.832 [DEBUG] [Thread-192268] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:37:05.833 [DEBUG] [Thread-192268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:37:05.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:37:05.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:37:05.888 [DEBUG] [Thread-192268] [transport.py] [_log()] userauth is OK
2026-04-12T16:37:05.888 [DEBUG] [Thread-192268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:37:05.889 [DEBUG] [Thread-192268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:37:05.889 [DEBUG] [Thread-192268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:37:05.889 [DEBUG] [Thread-192268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:37:05.908 [INFO] [Thread-192268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:37:05.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:37:05.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:37:06.702 [DEBUG] [Thread-192268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:37:06.702 [DEBUG] [Thread-192268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:37:06.750 [DEBUG] [Thread-192268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:37:06.750 [DEBUG] [Thread-192268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:37:06.759 [DEBUG] [Thread-192268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:37:06.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:37:06.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:37:06.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:37:06.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:37:06.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:37:06.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:37:06.797 [DEBUG] [Thread-192268] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:37:17.545 [DEBUG] [Thread-192270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:37:32.606 [DEBUG] [Thread-192271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:37:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:37:36.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:37:36.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:37:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 37, 30), 7.78623, 60.0189, 0.0, 15.034, 15.9156, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:37:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:37:30
2026-04-12T16:37:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:37:38.617 [DEBUG] [Thread-192272] [transport.py] [_log()] starting thread (client mode): 0xb0fcfe50
2026-04-12T16:37:38.617 [DEBUG] [Thread-192272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:37:38.636 [DEBUG] [Thread-192272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:37:38.636 [INFO] [Thread-192272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:37:38.639 [DEBUG] [Thread-192272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] client lang: <none>
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] server lang: <none>
2026-04-12T16:37:38.640 [DEBUG] [Thread-192272] [transport.py] [_log()] kex follows: False
2026-04-12T16:37:38.641 [DEBUG] [Thread-192272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:37:38.641 [DEBUG] [Thread-192272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:37:38.641 [DEBUG] [Thread-192272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:37:38.641 [DEBUG] [Thread-192272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:37:38.641 [DEBUG] [Thread-192272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:37:38.641 [DEBUG] [Thread-192272] [transport.py] [_log()] Compression: none
2026-04-12T16:37:38.641 [DEBUG] [Thread-192272] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:37:38.660 [DEBUG] [Thread-192272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:37:38.660 [DEBUG] [Thread-192272] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:37:38.661 [DEBUG] [Thread-192272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:37:38.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:37:38.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:37:38.663 [DEBUG] [Thread-192272] [transport.py] [_log()] userauth is OK
2026-04-12T16:37:38.664 [DEBUG] [Thread-192272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:37:38.664 [DEBUG] [Thread-192272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:37:38.665 [DEBUG] [Thread-192272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:37:38.665 [DEBUG] [Thread-192272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:37:38.685 [INFO] [Thread-192272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:37:38.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:37:39.302 [DEBUG] [Thread-192272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:37:39.302 [DEBUG] [Thread-192272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:37:39.303 [DEBUG] [Thread-192272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:37:39.343 [DEBUG] [Thread-192272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:37:39.343 [DEBUG] [Thread-192272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:37:39.347 [DEBUG] [Thread-192272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:37:39.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:37:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:37:39.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:37:39.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:37:39.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:37:39.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:37:39.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:37:39.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:37:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:37:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.609133 -999.00  +15.70  11.95     66   +9.40 1 2 1 1 1   887    0 5.88 -25.53 ----- 11.4 11.9 264.8 14.8 21.1 -12.6 20.6 -12.6 21.3 -13.1 22.3 -10.6
2026-04-12T16:37:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:37:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:37:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.609133
2026-04-12T16:37:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:37:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:37:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:37:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:37:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:37:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:37:30', tmtdew=7.78623, humidity=60.0189, cloud=0.0, wind=15.034, temperature=15.9156, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:37:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:37:39.374 [DEBUG] [Thread-192272] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:37:39.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:37:39.476 [DEBUG] [Thread-192275] [transport.py] [_log()] starting thread (client mode): 0xb0fcc250
2026-04-12T16:37:39.476 [DEBUG] [Thread-192275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:37:39.490 [DEBUG] [Thread-192275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:37:39.491 [INFO] [Thread-192275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:37:39.498 [DEBUG] [Thread-192275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] client lang: <none>
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] server lang: <none>
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] kex follows: False
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] Compression: none
2026-04-12T16:37:39.499 [DEBUG] [Thread-192275] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:37:39.556 [DEBUG] [Thread-192275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:37:39.556 [DEBUG] [Thread-192275] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:37:39.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:37:39.558 [DEBUG] [Thread-192275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:37:39.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:37:39.611 [DEBUG] [Thread-192275] [transport.py] [_log()] userauth is OK
2026-04-12T16:37:39.612 [DEBUG] [Thread-192275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:37:39.612 [DEBUG] [Thread-192275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:37:39.612 [DEBUG] [Thread-192275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:37:39.612 [DEBUG] [Thread-192275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:37:39.631 [INFO] [Thread-192275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:37:39.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:37:39.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:37:40.430 [DEBUG] [Thread-192275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:37:40.430 [DEBUG] [Thread-192275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:37:40.478 [DEBUG] [Thread-192275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:37:40.479 [DEBUG] [Thread-192275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:37:40.487 [DEBUG] [Thread-192275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:37:40.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:37:40.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:37:40.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:37:40.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:37:40.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:37:40.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:37:40.524 [DEBUG] [Thread-192275] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:37:45.372 [DEBUG] [Thread-192277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:37:47.647 [DEBUG] [Thread-192278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:37:50.845 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:37:50.846 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:38:02.700 [DEBUG] [Thread-192279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:38:10.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:38:10.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:38:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:38:11.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 37, 30), 7.78623, 60.0189, 0.0, 15.034, 15.9156, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:38:11.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:37:30
2026-04-12T16:38:12.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:38:12.416 [DEBUG] [Thread-192280] [transport.py] [_log()] starting thread (client mode): 0xb0f6f670
2026-04-12T16:38:12.416 [DEBUG] [Thread-192280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:38:12.431 [DEBUG] [Thread-192280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:38:12.431 [INFO] [Thread-192280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] client lang: <none>
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] server lang: <none>
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] kex follows: False
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] Compression: none
2026-04-12T16:38:12.434 [DEBUG] [Thread-192280] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:38:12.450 [DEBUG] [Thread-192280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:38:12.450 [DEBUG] [Thread-192280] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:38:12.451 [DEBUG] [Thread-192280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:38:12.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:38:12.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:38:12.452 [DEBUG] [Thread-192280] [transport.py] [_log()] userauth is OK
2026-04-12T16:38:12.452 [DEBUG] [Thread-192280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:38:12.452 [DEBUG] [Thread-192280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:38:12.452 [DEBUG] [Thread-192280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:38:12.452 [DEBUG] [Thread-192280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:38:12.465 [INFO] [Thread-192280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:38:12.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:38:13.096 [DEBUG] [Thread-192280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:38:13.096 [DEBUG] [Thread-192280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:38:13.096 [DEBUG] [Thread-192280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:38:13.137 [DEBUG] [Thread-192280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:38:13.137 [DEBUG] [Thread-192280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:38:13.140 [DEBUG] [Thread-192280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:38:13.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:38:13.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:38:13.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:38:13.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:38:13.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:38:13.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:38:13.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:38:13.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:38:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:38:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.609480 -999.00  +15.90  12.25     67   +9.90 1 2 1 1 1   887    0 5.80 -24.60 ----- 10.4 12.2 298.8 13.6 21.2 -12.4 20.7 -12.5 21.4 -10.3 22.3 -11.5
2026-04-12T16:38:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:38:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:38:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.609480
2026-04-12T16:38:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:38:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:38:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:38:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:38:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:38:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:37:30', tmtdew=7.78623, humidity=60.0189, cloud=0.0, wind=15.034, temperature=15.9156, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:37:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:38:13.163 [DEBUG] [Thread-192280] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:38:13.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:38:13.249 [DEBUG] [Thread-192283] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc40
2026-04-12T16:38:13.249 [DEBUG] [Thread-192283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:38:13.264 [DEBUG] [Thread-192283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:38:13.264 [INFO] [Thread-192283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:38:13.271 [DEBUG] [Thread-192283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] client lang: <none>
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] server lang: <none>
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] kex follows: False
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] Compression: none
2026-04-12T16:38:13.272 [DEBUG] [Thread-192283] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:38:13.332 [DEBUG] [Thread-192283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:38:13.332 [DEBUG] [Thread-192283] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:38:13.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:38:13.333 [DEBUG] [Thread-192283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:38:13.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:38:13.388 [DEBUG] [Thread-192283] [transport.py] [_log()] userauth is OK
2026-04-12T16:38:13.389 [DEBUG] [Thread-192283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:38:13.389 [DEBUG] [Thread-192283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:38:13.398 [DEBUG] [Thread-192283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:38:13.398 [DEBUG] [Thread-192283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:38:13.418 [INFO] [Thread-192283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:38:13.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:38:13.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:38:14.195 [DEBUG] [Thread-192283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:38:14.195 [DEBUG] [Thread-192283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:38:14.243 [DEBUG] [Thread-192283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:38:14.243 [DEBUG] [Thread-192283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:38:14.252 [DEBUG] [Thread-192283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:38:14.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:38:14.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:38:14.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:38:14.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:38:14.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:38:14.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:38:14.289 [DEBUG] [Thread-192283] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:38:17.734 [DEBUG] [Thread-192285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:38:32.779 [DEBUG] [Thread-192286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:38:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:38:44.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:38:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:38:45.406 [DEBUG] [Thread-192287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:38:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 38, 6), 7.5318, 61.0628, 0.0, 15.0869, 15.8993, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:38:45.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:38:06
2026-04-12T16:38:46.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:38:46.210 [DEBUG] [Thread-192288] [transport.py] [_log()] starting thread (client mode): 0xb0f6d8d0
2026-04-12T16:38:46.210 [DEBUG] [Thread-192288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:38:46.234 [DEBUG] [Thread-192288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:38:46.234 [INFO] [Thread-192288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] client lang: <none>
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] server lang: <none>
2026-04-12T16:38:46.238 [DEBUG] [Thread-192288] [transport.py] [_log()] kex follows: False
2026-04-12T16:38:46.239 [DEBUG] [Thread-192288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:38:46.239 [DEBUG] [Thread-192288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:38:46.239 [DEBUG] [Thread-192288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:38:46.239 [DEBUG] [Thread-192288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:38:46.239 [DEBUG] [Thread-192288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:38:46.239 [DEBUG] [Thread-192288] [transport.py] [_log()] Compression: none
2026-04-12T16:38:46.239 [DEBUG] [Thread-192288] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:38:46.248 [DEBUG] [Thread-192288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:38:46.249 [DEBUG] [Thread-192288] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:38:46.249 [DEBUG] [Thread-192288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:38:46.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:38:46.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:38:46.251 [DEBUG] [Thread-192288] [transport.py] [_log()] userauth is OK
2026-04-12T16:38:46.251 [DEBUG] [Thread-192288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:38:46.251 [DEBUG] [Thread-192288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:38:46.252 [DEBUG] [Thread-192288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:38:46.252 [DEBUG] [Thread-192288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:38:46.287 [INFO] [Thread-192288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:38:46.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:38:46.913 [DEBUG] [Thread-192288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:38:46.913 [DEBUG] [Thread-192288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:38:46.914 [DEBUG] [Thread-192288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:38:46.954 [DEBUG] [Thread-192288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:38:46.954 [DEBUG] [Thread-192288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:38:46.958 [DEBUG] [Thread-192288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:38:46.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:38:46.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:38:46.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:38:46.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:38:46.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:38:46.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:38:46.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:38:46.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:38:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:38:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.610175 -999.00  +16.20  11.58     67  +10.10 1 2 1 1 1   887    0 5.79 -21.92 ----- 11.8 11.6 278.2 19.1 21.4 -13.7 20.8 -13.8 21.6 -12.0 22.5 -12.7
2026-04-12T16:38:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:38:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:38:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.610175
2026-04-12T16:38:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:38:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:38:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:38:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:38:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:38:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:38:06', tmtdew=7.5318, humidity=61.0628, cloud=0.0, wind=15.0869, temperature=15.8993, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:38:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:38:46.986 [DEBUG] [Thread-192288] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:38:47.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:38:47.090 [DEBUG] [Thread-192291] [transport.py] [_log()] starting thread (client mode): 0xb0f41e70
2026-04-12T16:38:47.090 [DEBUG] [Thread-192291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:38:47.104 [DEBUG] [Thread-192291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:38:47.104 [INFO] [Thread-192291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:38:47.111 [DEBUG] [Thread-192291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] client lang: <none>
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] server lang: <none>
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] kex follows: False
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] Compression: none
2026-04-12T16:38:47.112 [DEBUG] [Thread-192291] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:38:47.171 [DEBUG] [Thread-192291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:38:47.172 [DEBUG] [Thread-192291] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:38:47.173 [DEBUG] [Thread-192291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:38:47.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:38:47.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:38:47.232 [DEBUG] [Thread-192291] [transport.py] [_log()] userauth is OK
2026-04-12T16:38:47.232 [DEBUG] [Thread-192291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:38:47.232 [DEBUG] [Thread-192291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:38:47.233 [DEBUG] [Thread-192291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:38:47.233 [DEBUG] [Thread-192291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:38:47.251 [INFO] [Thread-192291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:38:47.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:38:47.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:38:47.819 [DEBUG] [Thread-192293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:38:48.111 [DEBUG] [Thread-192291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:38:48.111 [DEBUG] [Thread-192291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:38:48.160 [DEBUG] [Thread-192291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:38:48.160 [DEBUG] [Thread-192291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:38:48.169 [DEBUG] [Thread-192291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:38:48.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:38:48.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:38:48.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:38:48.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:38:48.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:38:48.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:38:48.203 [DEBUG] [Thread-192291] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:38:50.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:38:50.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:02.871 [DEBUG] [Thread-192294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:17.911 [DEBUG] [Thread-192295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:39:18.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:39:18.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:39:19.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 38, 41), 7.33875, 61.8274, 0.0, 13.3042, 16.6649, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:39:19.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:38:41
2026-04-12T16:39:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:39:20.120 [DEBUG] [Thread-192296] [transport.py] [_log()] starting thread (client mode): 0xb0f41ff0
2026-04-12T16:39:20.120 [DEBUG] [Thread-192296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:39:20.140 [DEBUG] [Thread-192296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:39:20.140 [INFO] [Thread-192296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:39:20.144 [DEBUG] [Thread-192296] [transport.py] [_log()] client lang: <none>
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] server lang: <none>
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] kex follows: False
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] Compression: none
2026-04-12T16:39:20.145 [DEBUG] [Thread-192296] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:39:20.161 [DEBUG] [Thread-192296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:39:20.162 [DEBUG] [Thread-192296] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:39:20.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:39:20.163 [DEBUG] [Thread-192296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:39:20.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:39:20.165 [DEBUG] [Thread-192296] [transport.py] [_log()] userauth is OK
2026-04-12T16:39:20.166 [DEBUG] [Thread-192296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:39:20.166 [DEBUG] [Thread-192296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:39:20.166 [DEBUG] [Thread-192296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:39:20.166 [DEBUG] [Thread-192296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:39:20.190 [INFO] [Thread-192296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:39:20.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:39:20.798 [DEBUG] [Thread-192296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:39:20.798 [DEBUG] [Thread-192296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:39:20.799 [DEBUG] [Thread-192296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:39:20.839 [DEBUG] [Thread-192296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:39:20.839 [DEBUG] [Thread-192296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:39:20.842 [DEBUG] [Thread-192296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:39:20.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:39:20.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:39:20.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:39:20.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:39:20.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:39:20.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:39:20.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:39:20.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:39:20.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:39:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.610522 -999.00  +16.20  18.18     66   +9.90 1 2 1 1 1   887    0 5.77 -21.72 ----- 14.9 18.2 266.2 22.2 21.4 -15.4 20.8 -15.5 21.5 -13.5 22.4 -13.3
2026-04-12T16:39:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:39:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:39:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.610522
2026-04-12T16:39:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:39:20.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:39:20.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:39:20.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:39:20.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:39:20.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:38:41', tmtdew=7.33875, humidity=61.8274, cloud=0.0, wind=13.3042, temperature=16.6649, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:39:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:39:20.864 [DEBUG] [Thread-192296] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:39:20.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:39:20.960 [DEBUG] [Thread-192299] [transport.py] [_log()] starting thread (client mode): 0xb0f6ffd0
2026-04-12T16:39:20.960 [DEBUG] [Thread-192299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:39:20.975 [DEBUG] [Thread-192299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:39:20.975 [INFO] [Thread-192299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:39:20.982 [DEBUG] [Thread-192299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:39:20.982 [DEBUG] [Thread-192299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] client lang: <none>
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] server lang: <none>
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] kex follows: False
2026-04-12T16:39:20.983 [DEBUG] [Thread-192299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:39:20.984 [DEBUG] [Thread-192299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:39:20.984 [DEBUG] [Thread-192299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:39:20.984 [DEBUG] [Thread-192299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:39:20.984 [DEBUG] [Thread-192299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:39:20.984 [DEBUG] [Thread-192299] [transport.py] [_log()] Compression: none
2026-04-12T16:39:20.984 [DEBUG] [Thread-192299] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:39:21.038 [DEBUG] [Thread-192299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:39:21.039 [DEBUG] [Thread-192299] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:39:21.039 [DEBUG] [Thread-192299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:39:21.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:39:21.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:39:21.096 [DEBUG] [Thread-192299] [transport.py] [_log()] userauth is OK
2026-04-12T16:39:21.096 [DEBUG] [Thread-192299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:39:21.097 [DEBUG] [Thread-192299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:39:21.097 [DEBUG] [Thread-192299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:39:21.097 [DEBUG] [Thread-192299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:39:21.115 [INFO] [Thread-192299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:39:21.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:39:21.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:39:21.933 [DEBUG] [Thread-192299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:39:21.933 [DEBUG] [Thread-192299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:39:21.981 [DEBUG] [Thread-192299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:39:21.981 [DEBUG] [Thread-192299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:39:21.991 [DEBUG] [Thread-192299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:39:22.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:39:22.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:39:22.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:39:22.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:39:22.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:39:22.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:39:22.028 [DEBUG] [Thread-192299] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:39:32.948 [DEBUG] [Thread-192301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:45.455 [DEBUG] [Thread-192302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:48.011 [DEBUG] [Thread-192303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:51.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:51.131 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:39:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:39:52.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:39:52.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:39:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 39, 17), 7.19546, 62.2976, 0.0, 16.2511, 16.2492, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:39:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:39:17
2026-04-12T16:39:53.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:39:53.855 [DEBUG] [Thread-192304] [transport.py] [_log()] starting thread (client mode): 0xb0f6d1b0
2026-04-12T16:39:53.855 [DEBUG] [Thread-192304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:39:53.877 [DEBUG] [Thread-192304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:39:53.877 [INFO] [Thread-192304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:39:53.880 [DEBUG] [Thread-192304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:39:53.880 [DEBUG] [Thread-192304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:39:53.880 [DEBUG] [Thread-192304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] client lang: <none>
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] server lang: <none>
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] kex follows: False
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:39:53.881 [DEBUG] [Thread-192304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:39:53.882 [DEBUG] [Thread-192304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:39:53.882 [DEBUG] [Thread-192304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:39:53.882 [DEBUG] [Thread-192304] [transport.py] [_log()] Compression: none
2026-04-12T16:39:53.882 [DEBUG] [Thread-192304] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:39:53.903 [DEBUG] [Thread-192304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:39:53.903 [DEBUG] [Thread-192304] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:39:53.904 [DEBUG] [Thread-192304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:39:53.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:39:53.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:39:53.906 [DEBUG] [Thread-192304] [transport.py] [_log()] userauth is OK
2026-04-12T16:39:53.907 [DEBUG] [Thread-192304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:39:53.907 [DEBUG] [Thread-192304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:39:53.907 [DEBUG] [Thread-192304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:39:53.907 [DEBUG] [Thread-192304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:39:53.931 [INFO] [Thread-192304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:39:53.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:39:54.500 [DEBUG] [Thread-192304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:39:54.501 [DEBUG] [Thread-192304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:39:54.501 [DEBUG] [Thread-192304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:39:54.542 [DEBUG] [Thread-192304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:39:54.542 [DEBUG] [Thread-192304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:39:54.546 [DEBUG] [Thread-192304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:39:54.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:39:54.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:39:54.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:39:54.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:39:54.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:39:54.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:39:54.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:39:54.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:39:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:39:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.610869 -999.00  +16.20  11.48     67  +10.20 1 2 1 1 1   887    0 5.88 -21.92 ----- 14.7 11.5 269.0 21.6 21.4 -15.4 20.9 -16.3 21.5 -14.2 22.3 -15.3
2026-04-12T16:39:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:39:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:39:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.610869
2026-04-12T16:39:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:39:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:39:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:39:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:39:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:39:54.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:39:17', tmtdew=7.19546, humidity=62.2976, cloud=0.0, wind=16.2511, temperature=16.2492, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:39:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:39:54.571 [DEBUG] [Thread-192304] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:39:54.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:39:54.654 [DEBUG] [Thread-192307] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-12T16:39:54.654 [DEBUG] [Thread-192307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:39:54.669 [DEBUG] [Thread-192307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:39:54.669 [INFO] [Thread-192307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:39:54.676 [DEBUG] [Thread-192307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:39:54.676 [DEBUG] [Thread-192307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:39:54.676 [DEBUG] [Thread-192307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:39:54.676 [DEBUG] [Thread-192307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] client lang: <none>
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] server lang: <none>
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] kex follows: False
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] Compression: none
2026-04-12T16:39:54.677 [DEBUG] [Thread-192307] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:39:54.735 [DEBUG] [Thread-192307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:39:54.736 [DEBUG] [Thread-192307] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:39:54.736 [DEBUG] [Thread-192307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:39:54.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:39:54.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:39:54.791 [DEBUG] [Thread-192307] [transport.py] [_log()] userauth is OK
2026-04-12T16:39:54.792 [DEBUG] [Thread-192307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:39:54.792 [DEBUG] [Thread-192307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:39:54.792 [DEBUG] [Thread-192307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:39:54.792 [DEBUG] [Thread-192307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:39:54.813 [INFO] [Thread-192307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:39:54.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:39:54.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:39:55.631 [DEBUG] [Thread-192307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:39:55.631 [DEBUG] [Thread-192307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:39:55.679 [DEBUG] [Thread-192307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:39:55.679 [DEBUG] [Thread-192307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:39:55.689 [DEBUG] [Thread-192307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:39:55.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:39:55.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:39:55.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:39:55.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:39:55.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:39:55.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:39:55.728 [DEBUG] [Thread-192307] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:40:03.048 [DEBUG] [Thread-192309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:40:18.100 [DEBUG] [Thread-192310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:40:25.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:40:25.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:40:25.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:40:27.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 39, 53), 7.24283, 62.2579, 0.0, 21.7361, 16.7972, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:40:27.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:39:53
2026-04-12T16:40:27.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:40:27.816 [DEBUG] [Thread-192311] [transport.py] [_log()] starting thread (client mode): 0xae5a5cc0
2026-04-12T16:40:27.817 [DEBUG] [Thread-192311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:40:27.838 [DEBUG] [Thread-192311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:40:27.838 [INFO] [Thread-192311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] client lang: <none>
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] server lang: <none>
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] kex follows: False
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:40:27.842 [DEBUG] [Thread-192311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:40:27.843 [DEBUG] [Thread-192311] [transport.py] [_log()] Compression: none
2026-04-12T16:40:27.843 [DEBUG] [Thread-192311] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:40:27.858 [DEBUG] [Thread-192311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:40:27.858 [DEBUG] [Thread-192311] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:40:27.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:40:27.859 [DEBUG] [Thread-192311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:40:27.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:40:27.861 [DEBUG] [Thread-192311] [transport.py] [_log()] userauth is OK
2026-04-12T16:40:27.861 [DEBUG] [Thread-192311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:40:27.861 [DEBUG] [Thread-192311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:40:27.861 [DEBUG] [Thread-192311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:40:27.862 [DEBUG] [Thread-192311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:40:27.885 [INFO] [Thread-192311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:40:27.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:40:32.142 [DEBUG] [Thread-192311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:40:32.142 [DEBUG] [Thread-192311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:40:32.143 [DEBUG] [Thread-192311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:40:32.183 [DEBUG] [Thread-192311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:40:32.184 [DEBUG] [Thread-192311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:40:32.188 [DEBUG] [Thread-192311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:40:32.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:40:32.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:40:32.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:40:32.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:40:32.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:40:32.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:40:32.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:40:32.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:40:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:40:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.610869 -999.00  +16.20  11.48     67  +10.20 1 2 1 1 1   887    0 5.88 -21.92 ----- 14.7 11.5 269.0 21.6 21.4 -15.4 20.9 -16.3 21.5 -14.2 22.3 -15.3
2026-04-12T16:40:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:40:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:40:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.610869
2026-04-12T16:40:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:40:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:40:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:40:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:40:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:40:32.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:39:53', tmtdew=7.24283, humidity=62.2579, cloud=0.0, wind=21.7361, temperature=16.7972, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:39:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:40:32.305 [DEBUG] [Thread-192311] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:40:32.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:40:32.400 [DEBUG] [Thread-192314] [transport.py] [_log()] starting thread (client mode): 0xae5a5900
2026-04-12T16:40:32.400 [DEBUG] [Thread-192314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:40:32.415 [DEBUG] [Thread-192314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:40:32.415 [INFO] [Thread-192314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] client lang: <none>
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] server lang: <none>
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] kex follows: False
2026-04-12T16:40:32.423 [DEBUG] [Thread-192314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:40:32.424 [DEBUG] [Thread-192314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:40:32.424 [DEBUG] [Thread-192314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:40:32.424 [DEBUG] [Thread-192314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:40:32.424 [DEBUG] [Thread-192314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:40:32.424 [DEBUG] [Thread-192314] [transport.py] [_log()] Compression: none
2026-04-12T16:40:32.424 [DEBUG] [Thread-192314] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:40:32.479 [DEBUG] [Thread-192314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:40:32.480 [DEBUG] [Thread-192314] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:40:32.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:40:32.481 [DEBUG] [Thread-192314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:40:32.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:40:32.536 [DEBUG] [Thread-192314] [transport.py] [_log()] userauth is OK
2026-04-12T16:40:32.536 [DEBUG] [Thread-192314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:40:32.536 [DEBUG] [Thread-192314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:40:32.536 [DEBUG] [Thread-192314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:40:32.537 [DEBUG] [Thread-192314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:40:32.556 [INFO] [Thread-192314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:40:32.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:40:32.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:40:33.134 [DEBUG] [Thread-192316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:40:33.371 [DEBUG] [Thread-192314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:40:33.371 [DEBUG] [Thread-192314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:40:33.419 [DEBUG] [Thread-192314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:40:33.419 [DEBUG] [Thread-192314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:40:33.428 [DEBUG] [Thread-192314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:40:33.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:40:33.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:40:33.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:40:33.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:40:33.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:40:33.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:40:33.462 [DEBUG] [Thread-192314] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:40:45.512 [DEBUG] [Thread-192317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:40:48.187 [DEBUG] [Thread-192318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:40:51.271 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:40:51.272 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:41:03.221 [DEBUG] [Thread-192319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:41:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:41:03.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:41:03.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:41:04.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 40, 28), 7.30401, 61.7283, 0.0, 16.8862, 16.5145, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:41:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:40:28
2026-04-12T16:41:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:41:05.353 [DEBUG] [Thread-192320] [transport.py] [_log()] starting thread (client mode): 0xae5a5f60
2026-04-12T16:41:05.353 [DEBUG] [Thread-192320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:41:05.372 [DEBUG] [Thread-192320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:41:05.373 [INFO] [Thread-192320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] client lang: <none>
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] server lang: <none>
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] kex follows: False
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:41:05.376 [DEBUG] [Thread-192320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:41:05.377 [DEBUG] [Thread-192320] [transport.py] [_log()] Compression: none
2026-04-12T16:41:05.377 [DEBUG] [Thread-192320] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:41:05.395 [DEBUG] [Thread-192320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:41:05.395 [DEBUG] [Thread-192320] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:41:05.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:41:05.397 [DEBUG] [Thread-192320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:41:05.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:41:05.398 [DEBUG] [Thread-192320] [transport.py] [_log()] userauth is OK
2026-04-12T16:41:05.399 [DEBUG] [Thread-192320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:41:05.399 [DEBUG] [Thread-192320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:41:05.399 [DEBUG] [Thread-192320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:41:05.399 [DEBUG] [Thread-192320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:41:05.423 [INFO] [Thread-192320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:41:05.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:41:06.171 [DEBUG] [Thread-192320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:41:06.171 [DEBUG] [Thread-192320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:41:06.171 [DEBUG] [Thread-192320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:41:06.212 [DEBUG] [Thread-192320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:41:06.212 [DEBUG] [Thread-192320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:41:06.215 [DEBUG] [Thread-192320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:41:06.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:41:06.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:41:06.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:41:06.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:41:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:41:06.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:41:06.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:41:06.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:41:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:41:06.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.611216 -999.00  +16.30   8.09     67  +10.30 1 2 1 1 1   887    0 5.78 -22.66 ----- 8.1 8.1 229.3 18.0 21.4 -17.3 20.8 -17.3 21.6 -15.9 22.4 -14.9
2026-04-12T16:41:06.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:41:06.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:41:06.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.611216
2026-04-12T16:41:06.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:41:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:41:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:41:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:41:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:41:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:40:28', tmtdew=7.30401, humidity=61.7283, cloud=0.0, wind=16.8862, temperature=16.5145, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:40:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:41:06.242 [DEBUG] [Thread-192320] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:41:06.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:41:06.335 [DEBUG] [Thread-192323] [transport.py] [_log()] starting thread (client mode): 0xb0f6c700
2026-04-12T16:41:06.335 [DEBUG] [Thread-192323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:41:06.350 [DEBUG] [Thread-192323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:41:06.350 [INFO] [Thread-192323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] client lang: <none>
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] server lang: <none>
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] kex follows: False
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:41:06.358 [DEBUG] [Thread-192323] [transport.py] [_log()] Compression: none
2026-04-12T16:41:06.359 [DEBUG] [Thread-192323] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:41:06.416 [DEBUG] [Thread-192323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:41:06.417 [DEBUG] [Thread-192323] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:41:06.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:41:06.418 [DEBUG] [Thread-192323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:41:06.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:41:06.475 [DEBUG] [Thread-192323] [transport.py] [_log()] userauth is OK
2026-04-12T16:41:06.476 [DEBUG] [Thread-192323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:41:06.476 [DEBUG] [Thread-192323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:41:06.476 [DEBUG] [Thread-192323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:41:06.476 [DEBUG] [Thread-192323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:41:06.494 [INFO] [Thread-192323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:41:06.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:41:06.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:41:07.319 [DEBUG] [Thread-192323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:41:07.319 [DEBUG] [Thread-192323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:41:07.367 [DEBUG] [Thread-192323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:41:07.368 [DEBUG] [Thread-192323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:41:07.377 [DEBUG] [Thread-192323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:41:07.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:41:07.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:41:07.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:41:07.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:41:07.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:41:07.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:41:07.413 [DEBUG] [Thread-192323] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:41:18.258 [DEBUG] [Thread-192325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:41:33.311 [DEBUG] [Thread-192326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:41:37.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:41:37.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:41:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:41:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 41, 4), 7.35528, 61.5295, 0.0, 17.5212, 16.5807, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:41:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:41:04
2026-04-12T16:41:39.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:41:39.214 [DEBUG] [Thread-192327] [transport.py] [_log()] starting thread (client mode): 0xae5a7610
2026-04-12T16:41:39.215 [DEBUG] [Thread-192327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:41:39.239 [DEBUG] [Thread-192327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:41:39.239 [INFO] [Thread-192327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:41:39.240 [DEBUG] [Thread-192327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] client lang: <none>
2026-04-12T16:41:39.241 [DEBUG] [Thread-192327] [transport.py] [_log()] server lang: <none>
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] kex follows: False
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] Compression: none
2026-04-12T16:41:39.242 [DEBUG] [Thread-192327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:41:39.264 [DEBUG] [Thread-192327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:41:39.264 [DEBUG] [Thread-192327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:41:39.265 [DEBUG] [Thread-192327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:41:39.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:41:39.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:41:39.267 [DEBUG] [Thread-192327] [transport.py] [_log()] userauth is OK
2026-04-12T16:41:39.267 [DEBUG] [Thread-192327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:41:39.268 [DEBUG] [Thread-192327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:41:39.268 [DEBUG] [Thread-192327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:41:39.268 [DEBUG] [Thread-192327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:41:39.286 [INFO] [Thread-192327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:41:39.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:41:39.950 [DEBUG] [Thread-192327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:41:39.950 [DEBUG] [Thread-192327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:41:39.950 [DEBUG] [Thread-192327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:41:39.991 [DEBUG] [Thread-192327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:41:39.991 [DEBUG] [Thread-192327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:41:39.995 [DEBUG] [Thread-192327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:41:40.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:41:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:41:40.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:41:40.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:41:40.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:41:40.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:41:40.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:41:40.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:41:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:41:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.611911 -999.00  +16.50   8.81     67  +10.40 1 2 1 1 1   887    0 5.80 -22.71 ----- 8.8 8.8 267.8 11.2 21.4 -18.5 20.7 -19.5 21.8 -17.2 22.6 -16.7
2026-04-12T16:41:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:41:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:41:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.611911
2026-04-12T16:41:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:41:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:41:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:41:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:41:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:41:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:41:04', tmtdew=7.35528, humidity=61.5295, cloud=0.0, wind=17.5212, temperature=16.5807, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:41:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:41:40.019 [DEBUG] [Thread-192327] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:41:40.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:41:40.113 [DEBUG] [Thread-192330] [transport.py] [_log()] starting thread (client mode): 0xae5a4c10
2026-04-12T16:41:40.113 [DEBUG] [Thread-192330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:41:40.127 [DEBUG] [Thread-192330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:41:40.127 [INFO] [Thread-192330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:41:40.135 [DEBUG] [Thread-192330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:41:40.135 [DEBUG] [Thread-192330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:41:40.135 [DEBUG] [Thread-192330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:41:40.135 [DEBUG] [Thread-192330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:40.135 [DEBUG] [Thread-192330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] client lang: <none>
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] server lang: <none>
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] kex follows: False
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] Compression: none
2026-04-12T16:41:40.136 [DEBUG] [Thread-192330] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:41:40.189 [DEBUG] [Thread-192330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:41:40.189 [DEBUG] [Thread-192330] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:41:40.190 [DEBUG] [Thread-192330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:41:40.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:41:40.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:41:40.247 [DEBUG] [Thread-192330] [transport.py] [_log()] userauth is OK
2026-04-12T16:41:40.247 [DEBUG] [Thread-192330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:41:40.247 [DEBUG] [Thread-192330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:41:40.247 [DEBUG] [Thread-192330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:41:40.247 [DEBUG] [Thread-192330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:41:40.266 [INFO] [Thread-192330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:41:40.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:41:40.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:41:41.117 [DEBUG] [Thread-192330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:41:41.117 [DEBUG] [Thread-192330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:41:41.166 [DEBUG] [Thread-192330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:41:41.166 [DEBUG] [Thread-192330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:41:41.175 [DEBUG] [Thread-192330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:41:41.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:41:41.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:41:41.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:41:41.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:41:41.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:41:41.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:41:41.214 [DEBUG] [Thread-192330] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:41:45.567 [DEBUG] [Thread-192332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:41:48.352 [DEBUG] [Thread-192333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:41:51.414 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:41:51.415 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:42:03.418 [DEBUG] [Thread-192334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:42:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:42:11.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:42:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:42:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 41, 40), 7.6046, 60.7998, 0.0, 13.1278, 16.9626, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:42:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:41:40
2026-04-12T16:42:12.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:42:13.044 [DEBUG] [Thread-192335] [transport.py] [_log()] starting thread (client mode): 0xae537b80
2026-04-12T16:42:13.044 [DEBUG] [Thread-192335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:42:13.062 [DEBUG] [Thread-192335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:42:13.062 [INFO] [Thread-192335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] client lang: <none>
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] server lang: <none>
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] kex follows: False
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] Compression: none
2026-04-12T16:42:13.065 [DEBUG] [Thread-192335] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:42:13.080 [DEBUG] [Thread-192335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:42:13.081 [DEBUG] [Thread-192335] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:42:13.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:42:13.082 [DEBUG] [Thread-192335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:42:13.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:42:13.084 [DEBUG] [Thread-192335] [transport.py] [_log()] userauth is OK
2026-04-12T16:42:13.084 [DEBUG] [Thread-192335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:42:13.084 [DEBUG] [Thread-192335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:42:13.084 [DEBUG] [Thread-192335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:42:13.084 [DEBUG] [Thread-192335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:42:13.105 [INFO] [Thread-192335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:42:13.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:42:13.695 [DEBUG] [Thread-192335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:42:13.695 [DEBUG] [Thread-192335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:42:13.696 [DEBUG] [Thread-192335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:42:13.736 [DEBUG] [Thread-192335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:42:13.736 [DEBUG] [Thread-192335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:42:13.739 [DEBUG] [Thread-192335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:42:13.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:42:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:42:13.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:42:13.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:42:13.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:42:13.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:42:13.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:42:13.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:42:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:42:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.612258 -999.00  +16.50  14.83     66  +10.30 1 2 1 1 1   887    0 5.88 -20.78 ----- 14.8 14.8 264.8 19.4 21.4 -20.9 20.7 -21.2 21.6 -19.8 22.6 -20.2
2026-04-12T16:42:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:42:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:42:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.612258
2026-04-12T16:42:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:42:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:42:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:42:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:42:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:42:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:41:40', tmtdew=7.6046, humidity=60.7998, cloud=0.0, wind=13.1278, temperature=16.9626, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:41:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:42:13.760 [DEBUG] [Thread-192335] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:42:13.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:42:13.849 [DEBUG] [Thread-192338] [transport.py] [_log()] starting thread (client mode): 0xb0fcfe50
2026-04-12T16:42:13.849 [DEBUG] [Thread-192338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:42:13.864 [DEBUG] [Thread-192338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:42:13.865 [INFO] [Thread-192338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:42:13.872 [DEBUG] [Thread-192338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] client lang: <none>
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] server lang: <none>
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] kex follows: False
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:42:13.873 [DEBUG] [Thread-192338] [transport.py] [_log()] Compression: none
2026-04-12T16:42:13.874 [DEBUG] [Thread-192338] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:42:13.935 [DEBUG] [Thread-192338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:42:13.935 [DEBUG] [Thread-192338] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:42:13.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:42:13.936 [DEBUG] [Thread-192338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:42:13.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:42:13.991 [DEBUG] [Thread-192338] [transport.py] [_log()] userauth is OK
2026-04-12T16:42:13.992 [DEBUG] [Thread-192338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:42:13.992 [DEBUG] [Thread-192338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:42:13.992 [DEBUG] [Thread-192338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:42:13.992 [DEBUG] [Thread-192338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:42:14.010 [INFO] [Thread-192338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:42:14.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:42:14.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:42:14.813 [DEBUG] [Thread-192338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:42:14.814 [DEBUG] [Thread-192338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:42:14.862 [DEBUG] [Thread-192338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:42:14.862 [DEBUG] [Thread-192338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:42:14.871 [DEBUG] [Thread-192338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:42:14.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:42:14.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:42:14.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:42:14.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:42:14.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:42:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:42:14.908 [DEBUG] [Thread-192338] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:42:18.458 [DEBUG] [Thread-192340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:42:33.509 [DEBUG] [Thread-192341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:42:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:42:44.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:42:44.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:42:45.621 [DEBUG] [Thread-192342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:42:46.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 42, 15), 7.4576, 61.5987, 0.0, 18.3326, 16.5476, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:42:46.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:42:15
2026-04-12T16:42:46.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:42:46.774 [DEBUG] [Thread-192343] [transport.py] [_log()] starting thread (client mode): 0xae5378e0
2026-04-12T16:42:46.775 [DEBUG] [Thread-192343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:42:46.794 [DEBUG] [Thread-192343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:42:46.795 [INFO] [Thread-192343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:42:46.798 [DEBUG] [Thread-192343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] client lang: <none>
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] server lang: <none>
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] kex follows: False
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] Compression: none
2026-04-12T16:42:46.799 [DEBUG] [Thread-192343] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:42:46.809 [DEBUG] [Thread-192343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:42:46.810 [DEBUG] [Thread-192343] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:42:46.810 [DEBUG] [Thread-192343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:42:46.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:42:46.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:42:46.813 [DEBUG] [Thread-192343] [transport.py] [_log()] userauth is OK
2026-04-12T16:42:46.813 [DEBUG] [Thread-192343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:42:46.813 [DEBUG] [Thread-192343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:42:46.813 [DEBUG] [Thread-192343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:42:46.813 [DEBUG] [Thread-192343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:42:46.836 [INFO] [Thread-192343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:42:46.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:42:47.438 [DEBUG] [Thread-192343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:42:47.438 [DEBUG] [Thread-192343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:42:47.438 [DEBUG] [Thread-192343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:42:47.479 [DEBUG] [Thread-192343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:42:47.479 [DEBUG] [Thread-192343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:42:47.482 [DEBUG] [Thread-192343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:42:47.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:42:47.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:42:47.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:42:47.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:42:47.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:42:47.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:42:47.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:42:47.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:42:47.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:42:47.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.612952 -999.00  +16.20   9.64     66  +10.10 1 2 1 1 1   887    0 5.99 -16.26 ----- 9.6 9.6 225.8 17.5 21.0 -23.3 20.6 -23.0 21.1 -21.0 21.9 -22.1
2026-04-12T16:42:47.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:42:47.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:42:47.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.612952
2026-04-12T16:42:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:42:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:42:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:42:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:42:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:42:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:42:15', tmtdew=7.4576, humidity=61.5987, cloud=0.0, wind=18.3326, temperature=16.5476, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:42:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:42:47.518 [DEBUG] [Thread-192343] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:42:47.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:42:47.615 [DEBUG] [Thread-192346] [transport.py] [_log()] starting thread (client mode): 0xb0feb400
2026-04-12T16:42:47.615 [DEBUG] [Thread-192346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:42:47.630 [DEBUG] [Thread-192346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:42:47.630 [INFO] [Thread-192346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:42:47.638 [DEBUG] [Thread-192346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:42:47.638 [DEBUG] [Thread-192346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:42:47.638 [DEBUG] [Thread-192346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:42:47.638 [DEBUG] [Thread-192346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:47.638 [DEBUG] [Thread-192346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:42:47.638 [DEBUG] [Thread-192346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:47.638 [DEBUG] [Thread-192346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] client lang: <none>
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] server lang: <none>
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] kex follows: False
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] Compression: none
2026-04-12T16:42:47.639 [DEBUG] [Thread-192346] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:42:47.694 [DEBUG] [Thread-192346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:42:47.694 [DEBUG] [Thread-192346] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:42:47.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:42:47.695 [DEBUG] [Thread-192346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:42:47.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:42:47.750 [DEBUG] [Thread-192346] [transport.py] [_log()] userauth is OK
2026-04-12T16:42:47.750 [DEBUG] [Thread-192346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:42:47.750 [DEBUG] [Thread-192346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:42:47.751 [DEBUG] [Thread-192346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:42:47.751 [DEBUG] [Thread-192346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:42:47.768 [INFO] [Thread-192346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:42:47.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:42:47.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:42:48.546 [DEBUG] [Thread-192348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:42:48.579 [DEBUG] [Thread-192346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:42:48.579 [DEBUG] [Thread-192346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:42:48.627 [DEBUG] [Thread-192346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:42:48.627 [DEBUG] [Thread-192346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:42:48.636 [DEBUG] [Thread-192346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:42:48.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:42:48.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:42:48.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:42:48.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:42:48.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:42:48.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:42:48.673 [DEBUG] [Thread-192346] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:42:51.557 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:42:51.558 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:03.598 [DEBUG] [Thread-192349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:18.636 [DEBUG] [Thread-192350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:18.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:43:18.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:43:18.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:43:19.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 42, 50), 7.36951, 61.7605, 0.0, 18.1375, 16.9293, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:43:19.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:42:50
2026-04-12T16:43:20.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:43:20.513 [DEBUG] [Thread-192351] [transport.py] [_log()] starting thread (client mode): 0xb0fcc250
2026-04-12T16:43:20.513 [DEBUG] [Thread-192351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:43:20.532 [DEBUG] [Thread-192351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:43:20.532 [INFO] [Thread-192351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:43:20.535 [DEBUG] [Thread-192351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:43:20.535 [DEBUG] [Thread-192351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:43:20.535 [DEBUG] [Thread-192351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:43:20.535 [DEBUG] [Thread-192351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] client lang: <none>
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] server lang: <none>
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] kex follows: False
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] Compression: none
2026-04-12T16:43:20.536 [DEBUG] [Thread-192351] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:43:20.552 [DEBUG] [Thread-192351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:43:20.553 [DEBUG] [Thread-192351] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:43:20.553 [DEBUG] [Thread-192351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:43:20.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:43:20.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:43:20.555 [DEBUG] [Thread-192351] [transport.py] [_log()] userauth is OK
2026-04-12T16:43:20.556 [DEBUG] [Thread-192351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:43:20.556 [DEBUG] [Thread-192351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:43:20.556 [DEBUG] [Thread-192351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:43:20.556 [DEBUG] [Thread-192351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:43:20.580 [INFO] [Thread-192351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:43:20.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:43:21.165 [DEBUG] [Thread-192351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:43:21.166 [DEBUG] [Thread-192351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:43:21.166 [DEBUG] [Thread-192351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:43:21.206 [DEBUG] [Thread-192351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:43:21.206 [DEBUG] [Thread-192351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:43:21.210 [DEBUG] [Thread-192351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:43:21.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:43:21.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:43:21.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:43:21.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:43:21.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:43:21.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:43:21.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:43:21.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:43:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:43:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.613300 -999.00  +16.10   7.22     67  +10.00 1 2 1 1 1   887    0 5.96 -16.39 ----- 7.2 7.2 250.9 15.7 20.8 -23.7 20.5 -23.0 20.9 -20.5 21.7 -21.7
2026-04-12T16:43:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:43:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:43:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.613300
2026-04-12T16:43:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:43:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:43:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:43:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:43:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:43:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:42:50', tmtdew=7.36951, humidity=61.7605, cloud=0.0, wind=18.1375, temperature=16.9293, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:43:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:43:21.232 [DEBUG] [Thread-192351] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:43:21.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:43:21.325 [DEBUG] [Thread-192354] [transport.py] [_log()] starting thread (client mode): 0xae5355a0
2026-04-12T16:43:21.325 [DEBUG] [Thread-192354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:43:21.340 [DEBUG] [Thread-192354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:43:21.340 [INFO] [Thread-192354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:43:21.347 [DEBUG] [Thread-192354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:43:21.348 [DEBUG] [Thread-192354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:43:21.348 [DEBUG] [Thread-192354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:43:21.348 [DEBUG] [Thread-192354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:21.348 [DEBUG] [Thread-192354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:21.348 [DEBUG] [Thread-192354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:21.348 [DEBUG] [Thread-192354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:21.348 [DEBUG] [Thread-192354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] client lang: <none>
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] server lang: <none>
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] kex follows: False
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:43:21.349 [DEBUG] [Thread-192354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:43:21.350 [DEBUG] [Thread-192354] [transport.py] [_log()] Compression: none
2026-04-12T16:43:21.350 [DEBUG] [Thread-192354] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:43:21.408 [DEBUG] [Thread-192354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:43:21.409 [DEBUG] [Thread-192354] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:43:21.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:43:21.410 [DEBUG] [Thread-192354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:43:21.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:43:21.475 [DEBUG] [Thread-192354] [transport.py] [_log()] userauth is OK
2026-04-12T16:43:21.475 [DEBUG] [Thread-192354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:43:21.475 [DEBUG] [Thread-192354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:43:21.475 [DEBUG] [Thread-192354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:43:21.475 [DEBUG] [Thread-192354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:43:21.495 [INFO] [Thread-192354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:43:21.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:43:21.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:43:22.300 [DEBUG] [Thread-192354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:43:22.300 [DEBUG] [Thread-192354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:43:22.348 [DEBUG] [Thread-192354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:43:22.348 [DEBUG] [Thread-192354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:43:22.358 [DEBUG] [Thread-192354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:43:22.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:43:22.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:43:22.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:43:22.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:43:22.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:43:22.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:43:22.394 [DEBUG] [Thread-192354] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:43:33.671 [DEBUG] [Thread-192356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:45.688 [DEBUG] [Thread-192357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:48.729 [DEBUG] [Thread-192358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:51.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:51.713 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:43:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:43:52.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:43:52.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:43:53.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 43, 26), 7.38817, 61.4601, 0.0, 14.9281, 16.3156, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:43:53.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:43:26
2026-04-12T16:43:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:43:54.329 [DEBUG] [Thread-192359] [transport.py] [_log()] starting thread (client mode): 0xae509000
2026-04-12T16:43:54.329 [DEBUG] [Thread-192359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:43:54.349 [DEBUG] [Thread-192359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:43:54.349 [INFO] [Thread-192359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:43:54.352 [DEBUG] [Thread-192359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:43:54.352 [DEBUG] [Thread-192359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] client lang: <none>
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] server lang: <none>
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] kex follows: False
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:43:54.353 [DEBUG] [Thread-192359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:43:54.354 [DEBUG] [Thread-192359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:43:54.354 [DEBUG] [Thread-192359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:43:54.354 [DEBUG] [Thread-192359] [transport.py] [_log()] Compression: none
2026-04-12T16:43:54.354 [DEBUG] [Thread-192359] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:43:54.373 [DEBUG] [Thread-192359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:43:54.373 [DEBUG] [Thread-192359] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:43:54.374 [DEBUG] [Thread-192359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:43:54.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:43:54.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:43:54.376 [DEBUG] [Thread-192359] [transport.py] [_log()] userauth is OK
2026-04-12T16:43:54.376 [DEBUG] [Thread-192359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:43:54.376 [DEBUG] [Thread-192359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:43:54.376 [DEBUG] [Thread-192359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:43:54.376 [DEBUG] [Thread-192359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:43:54.395 [INFO] [Thread-192359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:43:54.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:43:55.033 [DEBUG] [Thread-192359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:43:55.033 [DEBUG] [Thread-192359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:43:55.034 [DEBUG] [Thread-192359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:43:55.074 [DEBUG] [Thread-192359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:43:55.074 [DEBUG] [Thread-192359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:43:55.077 [DEBUG] [Thread-192359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:43:55.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:43:55.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:43:55.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:43:55.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:43:55.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:43:55.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:43:55.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:43:55.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:43:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:43:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.613647 -999.00  +16.00  14.98     67  +10.00 1 2 1 1 1   887    0 5.82 -16.57 ----- 15.0 15.0 276.6 16.4 20.6 -24.7 20.4 -23.3 20.6 -21.0 21.4 -21.6
2026-04-12T16:43:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:43:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:43:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.613647
2026-04-12T16:43:55.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:43:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:43:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:43:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:43:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:43:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:43:26', tmtdew=7.38817, humidity=61.4601, cloud=0.0, wind=14.9281, temperature=16.3156, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:43:39.101', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:43:55.105 [DEBUG] [Thread-192359] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:43:55.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:43:55.198 [DEBUG] [Thread-192362] [transport.py] [_log()] starting thread (client mode): 0xae50b700
2026-04-12T16:43:55.198 [DEBUG] [Thread-192362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:43:55.212 [DEBUG] [Thread-192362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:43:55.213 [INFO] [Thread-192362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:43:55.220 [DEBUG] [Thread-192362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] client lang: <none>
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] server lang: <none>
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] kex follows: False
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] Compression: none
2026-04-12T16:43:55.221 [DEBUG] [Thread-192362] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:43:55.279 [DEBUG] [Thread-192362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:43:55.280 [DEBUG] [Thread-192362] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:43:55.280 [DEBUG] [Thread-192362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:43:55.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:43:55.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:43:55.335 [DEBUG] [Thread-192362] [transport.py] [_log()] userauth is OK
2026-04-12T16:43:55.335 [DEBUG] [Thread-192362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:43:55.336 [DEBUG] [Thread-192362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:43:55.336 [DEBUG] [Thread-192362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:43:55.336 [DEBUG] [Thread-192362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:43:55.354 [INFO] [Thread-192362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:43:55.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:43:55.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:43:56.167 [DEBUG] [Thread-192362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:43:56.167 [DEBUG] [Thread-192362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:43:56.215 [DEBUG] [Thread-192362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:43:56.216 [DEBUG] [Thread-192362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:43:56.225 [DEBUG] [Thread-192362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:43:56.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:43:56.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:43:56.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:43:56.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:43:56.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:43:56.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:43:56.262 [DEBUG] [Thread-192362] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:44:03.771 [DEBUG] [Thread-192364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:44:18.824 [DEBUG] [Thread-192365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:44:26.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:44:26.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:44:26.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:44:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 44, 1), 7.37163, 61.5263, 0.0, 14.0814, 16.299, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:44:27.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:44:01
2026-04-12T16:44:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:44:28.169 [DEBUG] [Thread-192366] [transport.py] [_log()] starting thread (client mode): 0xb0f6e500
2026-04-12T16:44:28.169 [DEBUG] [Thread-192366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:44:28.188 [DEBUG] [Thread-192366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:44:28.189 [INFO] [Thread-192366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:44:28.192 [DEBUG] [Thread-192366] [transport.py] [_log()] client lang: <none>
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] server lang: <none>
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] kex follows: False
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] Compression: none
2026-04-12T16:44:28.193 [DEBUG] [Thread-192366] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:44:28.211 [DEBUG] [Thread-192366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:44:28.212 [DEBUG] [Thread-192366] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:44:28.213 [DEBUG] [Thread-192366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:44:28.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:44:28.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:44:28.215 [DEBUG] [Thread-192366] [transport.py] [_log()] userauth is OK
2026-04-12T16:44:28.215 [DEBUG] [Thread-192366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:44:28.216 [DEBUG] [Thread-192366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:44:28.216 [DEBUG] [Thread-192366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:44:28.216 [DEBUG] [Thread-192366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:44:28.241 [INFO] [Thread-192366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:44:28.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:44:28.867 [DEBUG] [Thread-192366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:44:28.867 [DEBUG] [Thread-192366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:44:28.868 [DEBUG] [Thread-192366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:44:28.908 [DEBUG] [Thread-192366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:44:28.908 [DEBUG] [Thread-192366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:44:28.910 [DEBUG] [Thread-192366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:44:28.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:44:28.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:44:28.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:44:28.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:44:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:44:28.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:44:28.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:44:28.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:44:28.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:44:28.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.613994 -999.00  +15.90  15.27     68  +10.00 1 2 1 1 1   887    0 5.91 -14.83 ----- 15.3 15.3 270.2 20.1 20.5 -24.7 20.3 -23.9 20.3 -20.8 21.1 -22.3
2026-04-12T16:44:28.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:44:28.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:44:28.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.613994
2026-04-12T16:44:28.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:44:28.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:44:28.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:44:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:44:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:44:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:44:01', tmtdew=7.37163, humidity=61.5263, cloud=0.0, wind=14.0814, temperature=16.299, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:44:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:44:28.934 [DEBUG] [Thread-192366] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:44:29.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:44:29.029 [DEBUG] [Thread-192369] [transport.py] [_log()] starting thread (client mode): 0xb0fea590
2026-04-12T16:44:29.029 [DEBUG] [Thread-192369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:44:29.043 [DEBUG] [Thread-192369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:44:29.043 [INFO] [Thread-192369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] client lang: <none>
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] server lang: <none>
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] kex follows: False
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] Compression: none
2026-04-12T16:44:29.052 [DEBUG] [Thread-192369] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:44:29.110 [DEBUG] [Thread-192369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:44:29.110 [DEBUG] [Thread-192369] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:44:29.110 [DEBUG] [Thread-192369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:44:29.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:44:29.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:44:29.166 [DEBUG] [Thread-192369] [transport.py] [_log()] userauth is OK
2026-04-12T16:44:29.166 [DEBUG] [Thread-192369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:44:29.166 [DEBUG] [Thread-192369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:44:29.166 [DEBUG] [Thread-192369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:44:29.166 [DEBUG] [Thread-192369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:44:29.183 [INFO] [Thread-192369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:44:29.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:44:29.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:44:30.002 [DEBUG] [Thread-192369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:44:30.003 [DEBUG] [Thread-192369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:44:30.050 [DEBUG] [Thread-192369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:44:30.051 [DEBUG] [Thread-192369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:44:30.060 [DEBUG] [Thread-192369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:44:30.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:44:30.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:44:30.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:44:30.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:44:30.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:44:30.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:44:30.095 [DEBUG] [Thread-192369] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:44:33.862 [DEBUG] [Thread-192371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:44:45.739 [DEBUG] [Thread-192372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:44:48.918 [DEBUG] [Thread-192373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:44:51.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:44:51.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:45:00.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:45:00.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:45:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:45:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 44, 37), 7.17815, 62.4231, 0.0, 17.0438, 16.3329, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:45:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:44:37
2026-04-12T16:45:01.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:45:01.925 [DEBUG] [Thread-192374] [transport.py] [_log()] starting thread (client mode): 0xb0f6c3d0
2026-04-12T16:45:01.925 [DEBUG] [Thread-192374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:45:01.945 [DEBUG] [Thread-192374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:45:01.946 [INFO] [Thread-192374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] client lang: <none>
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] server lang: <none>
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] kex follows: False
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] Compression: none
2026-04-12T16:45:01.949 [DEBUG] [Thread-192374] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:45:01.960 [DEBUG] [Thread-192374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:45:01.961 [DEBUG] [Thread-192374] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:45:01.961 [DEBUG] [Thread-192374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:45:01.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:45:01.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:45:01.962 [DEBUG] [Thread-192374] [transport.py] [_log()] userauth is OK
2026-04-12T16:45:01.962 [DEBUG] [Thread-192374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:45:01.962 [DEBUG] [Thread-192374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:45:01.962 [DEBUG] [Thread-192374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:45:01.962 [DEBUG] [Thread-192374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:45:01.978 [INFO] [Thread-192374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:45:01.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:45:02.609 [DEBUG] [Thread-192374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:45:02.610 [DEBUG] [Thread-192374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:45:02.610 [DEBUG] [Thread-192374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:45:02.650 [DEBUG] [Thread-192374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:45:02.650 [DEBUG] [Thread-192374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:45:02.654 [DEBUG] [Thread-192374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:45:02.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:45:02.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:45:02.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:45:02.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:45:02.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:45:02.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:45:02.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:45:02.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:45:02.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:45:02.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.614341 -999.00  +15.60  14.14     67   +9.50 1 2 1 1 1   887    0 5.95 -14.17 ----- 14.1 14.1 272.2 20.4 20.3 -25.2 20.2 -24.0 20.1 -20.9 20.8 -22.3
2026-04-12T16:45:02.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:45:02.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:45:02.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.614341
2026-04-12T16:45:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:45:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:45:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:45:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:45:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:45:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:44:37', tmtdew=7.17815, humidity=62.4231, cloud=0.0, wind=17.0438, temperature=16.3329, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:44:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:45:02.685 [DEBUG] [Thread-192374] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:45:02.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:45:02.779 [DEBUG] [Thread-192377] [transport.py] [_log()] starting thread (client mode): 0xb0fea800
2026-04-12T16:45:02.779 [DEBUG] [Thread-192377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:45:02.794 [DEBUG] [Thread-192377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:45:02.795 [INFO] [Thread-192377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:45:02.803 [DEBUG] [Thread-192377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:45:02.803 [DEBUG] [Thread-192377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:45:02.803 [DEBUG] [Thread-192377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:45:02.803 [DEBUG] [Thread-192377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] client lang: <none>
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] server lang: <none>
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] kex follows: False
2026-04-12T16:45:02.804 [DEBUG] [Thread-192377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:45:02.805 [DEBUG] [Thread-192377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:45:02.805 [DEBUG] [Thread-192377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:45:02.805 [DEBUG] [Thread-192377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:45:02.805 [DEBUG] [Thread-192377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:45:02.805 [DEBUG] [Thread-192377] [transport.py] [_log()] Compression: none
2026-04-12T16:45:02.805 [DEBUG] [Thread-192377] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:45:02.861 [DEBUG] [Thread-192377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:45:02.861 [DEBUG] [Thread-192377] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:45:02.861 [DEBUG] [Thread-192377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:45:02.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:45:02.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:45:02.919 [DEBUG] [Thread-192377] [transport.py] [_log()] userauth is OK
2026-04-12T16:45:02.919 [DEBUG] [Thread-192377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:45:02.919 [DEBUG] [Thread-192377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:45:02.919 [DEBUG] [Thread-192377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:45:02.919 [DEBUG] [Thread-192377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:45:02.939 [INFO] [Thread-192377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:45:02.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:45:02.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:45:03.829 [DEBUG] [Thread-192377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:45:03.830 [DEBUG] [Thread-192377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:45:03.878 [DEBUG] [Thread-192377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:45:03.878 [DEBUG] [Thread-192377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:45:03.888 [DEBUG] [Thread-192377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:45:03.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:45:03.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:45:03.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:45:03.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:45:03.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:45:03.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:45:03.927 [DEBUG] [Thread-192377] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:45:03.956 [DEBUG] [Thread-192379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:45:19.015 [DEBUG] [Thread-192380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:45:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:45:33.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:45:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:45:34.055 [DEBUG] [Thread-192381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:45:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 45, 12), 6.93716, 63.0567, 0.0, 16.8685, 15.6504, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:45:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:45:12
2026-04-12T16:45:35.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:45:35.758 [DEBUG] [Thread-192382] [transport.py] [_log()] starting thread (client mode): 0xb0f42e60
2026-04-12T16:45:35.758 [DEBUG] [Thread-192382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:45:35.777 [DEBUG] [Thread-192382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:45:35.777 [INFO] [Thread-192382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:35.780 [DEBUG] [Thread-192382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] client lang: <none>
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] server lang: <none>
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] kex follows: False
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] Compression: none
2026-04-12T16:45:35.781 [DEBUG] [Thread-192382] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:45:35.800 [DEBUG] [Thread-192382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:45:35.801 [DEBUG] [Thread-192382] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:45:35.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:45:35.802 [DEBUG] [Thread-192382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:45:35.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:45:35.804 [DEBUG] [Thread-192382] [transport.py] [_log()] userauth is OK
2026-04-12T16:45:35.805 [DEBUG] [Thread-192382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:45:35.805 [DEBUG] [Thread-192382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:45:35.805 [DEBUG] [Thread-192382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:45:35.805 [DEBUG] [Thread-192382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:45:35.838 [INFO] [Thread-192382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:45:35.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:45:41.605 [DEBUG] [Thread-192382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:45:41.605 [DEBUG] [Thread-192382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:45:41.605 [DEBUG] [Thread-192382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:45:41.646 [DEBUG] [Thread-192382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:45:41.646 [DEBUG] [Thread-192382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:45:41.649 [DEBUG] [Thread-192382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:45:41.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:45:41.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:45:41.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:45:41.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:45:41.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:45:41.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:45:41.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:45:41.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:45:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:45:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.614341 -999.00  +15.60  14.14     67   +9.50 1 2 1 1 1   887    0 5.95 -14.17 ----- 14.1 14.1 272.2 20.4 20.3 -25.2 20.2 -24.0 20.1 -20.9 20.8 -22.3
2026-04-12T16:45:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:45:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:45:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.614341
2026-04-12T16:45:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:45:41.673 [DEBUG] [Thread-192382] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:45:41.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:45:41.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:45:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:45:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:45:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:45:12', tmtdew=6.93716, humidity=63.0567, cloud=0.0, wind=16.8685, temperature=15.6504, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:44:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:45:41.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:45:41.761 [DEBUG] [Thread-192385] [transport.py] [_log()] starting thread (client mode): 0xae536020
2026-04-12T16:45:41.761 [DEBUG] [Thread-192385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:45:41.776 [DEBUG] [Thread-192385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:45:41.776 [INFO] [Thread-192385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:45:41.783 [DEBUG] [Thread-192385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] client lang: <none>
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] server lang: <none>
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] kex follows: False
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] Compression: none
2026-04-12T16:45:41.784 [DEBUG] [Thread-192385] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:45:41.842 [DEBUG] [Thread-192385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:45:41.843 [DEBUG] [Thread-192385] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:45:41.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:45:41.844 [DEBUG] [Thread-192385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:45:41.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:45:41.898 [DEBUG] [Thread-192385] [transport.py] [_log()] userauth is OK
2026-04-12T16:45:41.899 [DEBUG] [Thread-192385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:45:41.899 [DEBUG] [Thread-192385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:45:41.899 [DEBUG] [Thread-192385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:45:41.899 [DEBUG] [Thread-192385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:45:41.918 [INFO] [Thread-192385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:45:41.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:45:41.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:45:42.765 [DEBUG] [Thread-192385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:45:42.765 [DEBUG] [Thread-192385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:45:42.813 [DEBUG] [Thread-192385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:45:42.813 [DEBUG] [Thread-192385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:45:42.823 [DEBUG] [Thread-192385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:45:42.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:45: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')
2026-04-12T16:45: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
2026-04-12T16:45:42.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:45:42.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:45:42.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:45:42.860 [DEBUG] [Thread-192385] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:45:45.771 [DEBUG] [Thread-192387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:45:49.091 [DEBUG] [Thread-192388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:45:52.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:45:52.011 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:46:04.145 [DEBUG] [Thread-192389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:46:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:46:12.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:46:12.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:46:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 45, 48), 6.86848, 63.6495, 0.0, 19.9721, 15.9358, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:46:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:45:48
2026-04-12T16:46:14.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:46:14.702 [DEBUG] [Thread-192390] [transport.py] [_log()] starting thread (client mode): 0xb0f6d6c0
2026-04-12T16:46:14.702 [DEBUG] [Thread-192390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:46:14.722 [DEBUG] [Thread-192390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:46:14.722 [INFO] [Thread-192390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:46:14.726 [DEBUG] [Thread-192390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] client lang: <none>
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] server lang: <none>
2026-04-12T16:46:14.727 [DEBUG] [Thread-192390] [transport.py] [_log()] kex follows: False
2026-04-12T16:46:14.728 [DEBUG] [Thread-192390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:46:14.728 [DEBUG] [Thread-192390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:46:14.728 [DEBUG] [Thread-192390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:46:14.728 [DEBUG] [Thread-192390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:46:14.728 [DEBUG] [Thread-192390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:46:14.728 [DEBUG] [Thread-192390] [transport.py] [_log()] Compression: none
2026-04-12T16:46:14.728 [DEBUG] [Thread-192390] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:46:14.751 [DEBUG] [Thread-192390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:46:14.751 [DEBUG] [Thread-192390] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:46:14.752 [DEBUG] [Thread-192390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:46:14.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:46:14.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:46:14.754 [DEBUG] [Thread-192390] [transport.py] [_log()] userauth is OK
2026-04-12T16:46:14.755 [DEBUG] [Thread-192390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:46:14.755 [DEBUG] [Thread-192390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:46:14.755 [DEBUG] [Thread-192390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:46:14.755 [DEBUG] [Thread-192390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:46:14.790 [INFO] [Thread-192390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:46:14.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:46:15.535 [DEBUG] [Thread-192390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:46:15.536 [DEBUG] [Thread-192390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:46:15.536 [DEBUG] [Thread-192390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:46:15.577 [DEBUG] [Thread-192390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:46:15.577 [DEBUG] [Thread-192390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:46:15.581 [DEBUG] [Thread-192390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:46:15.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:46:15.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:46:15.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:46:15.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:46:15.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:46:15.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:46:15.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:46:15.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:46:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:46:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.615383 -999.00  +15.30  17.76     69   +9.70 1 2 1 1 1   887    0 5.71 -22.13 ----- 17.8 17.8 266.8 21.6 19.8 -24.3 19.8 -23.2 19.4 -20.3 20.0 -21.1
2026-04-12T16:46:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:46:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:46:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.615383
2026-04-12T16:46:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:46:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:46:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:46:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:46:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:46:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:45:48', tmtdew=6.86848, humidity=63.6495, cloud=0.0, wind=19.9721, temperature=15.9358, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:46:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:46:15.609 [DEBUG] [Thread-192390] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:46:15.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:46:15.705 [DEBUG] [Thread-192392] [transport.py] [_log()] starting thread (client mode): 0xae5f1b10
2026-04-12T16:46:15.705 [DEBUG] [Thread-192392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:46:15.720 [DEBUG] [Thread-192392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:46:15.720 [INFO] [Thread-192392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:46:15.728 [DEBUG] [Thread-192392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:46:15.728 [DEBUG] [Thread-192392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:46:15.728 [DEBUG] [Thread-192392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:46:15.728 [DEBUG] [Thread-192392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] client lang: <none>
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] server lang: <none>
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] kex follows: False
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] Compression: none
2026-04-12T16:46:15.729 [DEBUG] [Thread-192392] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:46:15.787 [DEBUG] [Thread-192392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:46:15.787 [DEBUG] [Thread-192392] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:46:15.788 [DEBUG] [Thread-192392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:46:15.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:46:15.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:46:15.846 [DEBUG] [Thread-192392] [transport.py] [_log()] userauth is OK
2026-04-12T16:46:15.846 [DEBUG] [Thread-192392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:46:15.847 [DEBUG] [Thread-192392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:46:15.847 [DEBUG] [Thread-192392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:46:15.847 [DEBUG] [Thread-192392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:46:15.866 [INFO] [Thread-192392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:46:15.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:46:15.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:46:16.741 [DEBUG] [Thread-192392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:46:16.742 [DEBUG] [Thread-192392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:46:16.790 [DEBUG] [Thread-192392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:46:16.790 [DEBUG] [Thread-192392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:46:16.799 [DEBUG] [Thread-192392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:46:16.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:46:16.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:46:16.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:46:16.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:46:16.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:46:16.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:46:16.837 [DEBUG] [Thread-192392] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:46:19.185 [DEBUG] [Thread-192394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:46:34.238 [DEBUG] [Thread-192395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:46:45.808 [DEBUG] [Thread-192396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:46:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:46:46.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:46:46.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:46:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 46, 23), 6.75257, 63.9572, 0.0, 16.4452, 15.3512, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:46:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:46:23
2026-04-12T16:46:48.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:46:48.667 [DEBUG] [Thread-192397] [transport.py] [_log()] starting thread (client mode): 0xae536350
2026-04-12T16:46:48.667 [DEBUG] [Thread-192397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:46:48.683 [DEBUG] [Thread-192397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:46:48.683 [INFO] [Thread-192397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] client lang: <none>
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] server lang: <none>
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] kex follows: False
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] Compression: none
2026-04-12T16:46:48.684 [DEBUG] [Thread-192397] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:46:48.696 [DEBUG] [Thread-192397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:46:48.697 [DEBUG] [Thread-192397] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:46:48.697 [DEBUG] [Thread-192397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:46:48.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:46:48.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:46:48.698 [DEBUG] [Thread-192397] [transport.py] [_log()] userauth is OK
2026-04-12T16:46:48.698 [DEBUG] [Thread-192397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:46:48.699 [DEBUG] [Thread-192397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:46:48.699 [DEBUG] [Thread-192397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:46:48.699 [DEBUG] [Thread-192397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:46:48.712 [INFO] [Thread-192397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:46:48.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:46:49.268 [DEBUG] [Thread-192399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:46:49.288 [DEBUG] [Thread-192397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:46:49.288 [DEBUG] [Thread-192397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:46:49.288 [DEBUG] [Thread-192397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:46:49.329 [DEBUG] [Thread-192397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:46:49.330 [DEBUG] [Thread-192397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:46:49.333 [DEBUG] [Thread-192397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:46:49.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:46:49.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:46:49.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:46:49.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:46:49.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:46:49.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:46:49.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:46:49.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:46:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:46:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.615730 -999.00  +15.30  14.68     70   +9.90 1 2 1 1 1   887    0 5.62 -23.02 ----- 14.7 14.7 259.6 18.1 19.8 -24.1 19.7 -23.1 19.2 -20.1 19.7 -20.8
2026-04-12T16:46:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:46:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:46:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.615730
2026-04-12T16:46:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:46:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:46:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:46:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:46:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:46:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:46:23', tmtdew=6.75257, humidity=63.9572, cloud=0.0, wind=16.4452, temperature=15.3512, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:46:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:46:49.360 [DEBUG] [Thread-192397] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:46:49.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:46:49.456 [DEBUG] [Thread-192401] [transport.py] [_log()] starting thread (client mode): 0xae5b4880
2026-04-12T16:46:49.457 [DEBUG] [Thread-192401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:46:49.471 [DEBUG] [Thread-192401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:46:49.471 [INFO] [Thread-192401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:46:49.479 [DEBUG] [Thread-192401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:46:49.479 [DEBUG] [Thread-192401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:46:49.479 [DEBUG] [Thread-192401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:46:49.479 [DEBUG] [Thread-192401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:49.479 [DEBUG] [Thread-192401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:46:49.479 [DEBUG] [Thread-192401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:49.479 [DEBUG] [Thread-192401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] client lang: <none>
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] server lang: <none>
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] kex follows: False
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] Compression: none
2026-04-12T16:46:49.480 [DEBUG] [Thread-192401] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:46:49.538 [DEBUG] [Thread-192401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:46:49.539 [DEBUG] [Thread-192401] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:46:49.539 [DEBUG] [Thread-192401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:46:49.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:46:49.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:46:49.594 [DEBUG] [Thread-192401] [transport.py] [_log()] userauth is OK
2026-04-12T16:46:49.595 [DEBUG] [Thread-192401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:46:49.595 [DEBUG] [Thread-192401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:46:49.595 [DEBUG] [Thread-192401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:46:49.595 [DEBUG] [Thread-192401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:46:49.613 [INFO] [Thread-192401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:46:49.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:46:49.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:46:50.442 [DEBUG] [Thread-192401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:46:50.442 [DEBUG] [Thread-192401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:46:50.490 [DEBUG] [Thread-192401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:46:50.491 [DEBUG] [Thread-192401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:46:50.500 [DEBUG] [Thread-192401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:46:50.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:46:50.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:46:50.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:46:50.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:46:50.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:46:50.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:46:50.538 [DEBUG] [Thread-192401] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:46:52.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:46:52.153 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:04.303 [DEBUG] [Thread-192403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:19.349 [DEBUG] [Thread-192404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:20.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:47:20.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:47:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:47:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 46, 59), 6.62531, 64.5566, 0.0, 20.6626, 15.2184, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:47:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:46:59
2026-04-12T16:47:22.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:47:22.522 [DEBUG] [Thread-192405] [transport.py] [_log()] starting thread (client mode): 0xb0f6e500
2026-04-12T16:47:22.522 [DEBUG] [Thread-192405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:47:22.533 [DEBUG] [Thread-192405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:47:22.534 [INFO] [Thread-192405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] client lang: <none>
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] server lang: <none>
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] kex follows: False
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] Compression: none
2026-04-12T16:47:22.535 [DEBUG] [Thread-192405] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:47:22.544 [DEBUG] [Thread-192405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:47:22.544 [DEBUG] [Thread-192405] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:47:22.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:47:22.545 [DEBUG] [Thread-192405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:47:22.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:47:22.546 [DEBUG] [Thread-192405] [transport.py] [_log()] userauth is OK
2026-04-12T16:47:22.546 [DEBUG] [Thread-192405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:47:22.546 [DEBUG] [Thread-192405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:47:22.546 [DEBUG] [Thread-192405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:47:22.546 [DEBUG] [Thread-192405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:47:22.561 [INFO] [Thread-192405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:47:22.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:47:23.140 [DEBUG] [Thread-192405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:47:23.140 [DEBUG] [Thread-192405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:47:23.141 [DEBUG] [Thread-192405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:47:23.182 [DEBUG] [Thread-192405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:47:23.182 [DEBUG] [Thread-192405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:47:23.189 [DEBUG] [Thread-192405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:47:23.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:47:23.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:47:23.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:47:23.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:47:23.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:47:23.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:47:23.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:47:23.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:47:23.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:47:23.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.616077 -999.00  +15.10  15.75     69   +9.60 1 2 1 1 1   887    0 5.54 -25.22 ----- 15.8 15.8 269.0 21.9 19.6 -24.3 19.6 -23.4 18.9 -20.5 19.5 -21.2
2026-04-12T16:47:23.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:47:23.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:47:23.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.616077
2026-04-12T16:47:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:47:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:47:23.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:47:23.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:47:23.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:47:23.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:46:59', tmtdew=6.62531, humidity=64.5566, cloud=0.0, wind=20.6626, temperature=15.2184, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:47:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:47:23.210 [DEBUG] [Thread-192405] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:47:23.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:47:23.303 [DEBUG] [Thread-192408] [transport.py] [_log()] starting thread (client mode): 0xae5b4e80
2026-04-12T16:47:23.303 [DEBUG] [Thread-192408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:47:23.319 [DEBUG] [Thread-192408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:47:23.319 [INFO] [Thread-192408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:47:23.326 [DEBUG] [Thread-192408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] client lang: <none>
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] server lang: <none>
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] kex follows: False
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] Compression: none
2026-04-12T16:47:23.327 [DEBUG] [Thread-192408] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:47:23.386 [DEBUG] [Thread-192408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:47:23.387 [DEBUG] [Thread-192408] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:47:23.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:47:23.388 [DEBUG] [Thread-192408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:47:23.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:47:23.442 [DEBUG] [Thread-192408] [transport.py] [_log()] userauth is OK
2026-04-12T16:47:23.443 [DEBUG] [Thread-192408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:47:23.443 [DEBUG] [Thread-192408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:47:23.443 [DEBUG] [Thread-192408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:47:23.443 [DEBUG] [Thread-192408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:47:23.468 [INFO] [Thread-192408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:47:23.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:47:23.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:47:24.295 [DEBUG] [Thread-192408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:47:24.295 [DEBUG] [Thread-192408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:47:24.343 [DEBUG] [Thread-192408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:47:24.344 [DEBUG] [Thread-192408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:47:24.352 [DEBUG] [Thread-192408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:47:24.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:47:24.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:47:24.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:47:24.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:47:24.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:47:24.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:47:24.399 [DEBUG] [Thread-192408] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:47:34.385 [DEBUG] [Thread-192410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:45.853 [DEBUG] [Thread-192411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:49.445 [DEBUG] [Thread-192412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:52.291 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:52.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:47:54.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:47:54.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:47:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:47:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 47, 35), 6.52937, 65.0409, 0.0, 17.4319, 15.571, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:47:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:47:35
2026-04-12T16:47:56.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:47:56.313 [DEBUG] [Thread-192413] [transport.py] [_log()] starting thread (client mode): 0xae535a20
2026-04-12T16:47:56.313 [DEBUG] [Thread-192413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:47:56.332 [DEBUG] [Thread-192413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:47:56.333 [INFO] [Thread-192413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] client lang: <none>
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] server lang: <none>
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] kex follows: False
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] Compression: none
2026-04-12T16:47:56.336 [DEBUG] [Thread-192413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:47:56.353 [DEBUG] [Thread-192413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:47:56.353 [DEBUG] [Thread-192413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:47:56.354 [DEBUG] [Thread-192413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:47:56.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:47:56.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:47:56.355 [DEBUG] [Thread-192413] [transport.py] [_log()] userauth is OK
2026-04-12T16:47:56.356 [DEBUG] [Thread-192413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:47:56.356 [DEBUG] [Thread-192413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:47:56.356 [DEBUG] [Thread-192413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:47:56.356 [DEBUG] [Thread-192413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:47:56.388 [INFO] [Thread-192413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:47:56.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:47:56.968 [DEBUG] [Thread-192413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:47:56.968 [DEBUG] [Thread-192413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:47:56.968 [DEBUG] [Thread-192413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:47:57.009 [DEBUG] [Thread-192413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:47:57.009 [DEBUG] [Thread-192413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:47:57.013 [DEBUG] [Thread-192413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:47:57.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:47:57.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:47:57.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:47:57.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:47:57.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:47:57.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:47:57.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:47:57.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:47:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:47:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.616424 -999.00  +15.10  20.78     70   +9.80 1 2 1 1 1   887    0 5.32 -28.76 ----- 20.8 20.8 265.6 23.6 19.4 -24.0 19.4 -23.2 18.9 -20.3 19.3 -21.2
2026-04-12T16:47:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:47:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:47:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.616424
2026-04-12T16:47:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:47:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:47:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:47:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:47:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:47:57.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:47:35', tmtdew=6.52937, humidity=65.0409, cloud=0.0, wind=17.4319, temperature=15.571, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:47:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:47:57.036 [DEBUG] [Thread-192413] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:47:57.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:47:57.129 [DEBUG] [Thread-192416] [transport.py] [_log()] starting thread (client mode): 0xb0fe8ac0
2026-04-12T16:47:57.129 [DEBUG] [Thread-192416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:47:57.143 [DEBUG] [Thread-192416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:47:57.143 [INFO] [Thread-192416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:47:57.151 [DEBUG] [Thread-192416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:47:57.151 [DEBUG] [Thread-192416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:47:57.151 [DEBUG] [Thread-192416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:47:57.151 [DEBUG] [Thread-192416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] client lang: <none>
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] server lang: <none>
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] kex follows: False
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] Compression: none
2026-04-12T16:47:57.152 [DEBUG] [Thread-192416] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:47:57.213 [DEBUG] [Thread-192416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:47:57.214 [DEBUG] [Thread-192416] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:47:57.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:47:57.215 [DEBUG] [Thread-192416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:47:57.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:47:57.270 [DEBUG] [Thread-192416] [transport.py] [_log()] userauth is OK
2026-04-12T16:47:57.270 [DEBUG] [Thread-192416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:47:57.271 [DEBUG] [Thread-192416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:47:57.271 [DEBUG] [Thread-192416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:47:57.271 [DEBUG] [Thread-192416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:47:57.290 [INFO] [Thread-192416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:47:57.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:47:57.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:47:58.077 [DEBUG] [Thread-192416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:47:58.077 [DEBUG] [Thread-192416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:47:58.125 [DEBUG] [Thread-192416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:47:58.125 [DEBUG] [Thread-192416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:47:58.134 [DEBUG] [Thread-192416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:47:58.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:47:58.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:47:58.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:47:58.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:47:58.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:47:58.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:47:58.168 [DEBUG] [Thread-192416] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:48:04.482 [DEBUG] [Thread-192418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:48:19.534 [DEBUG] [Thread-192419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:48:28.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:48:28.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:48:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:48:29.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 48, 10), 6.24431, 66.2825, 0.0, 22.162, 15.1186, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:48:29.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:48:10
2026-04-12T16:48:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:48:30.001 [DEBUG] [Thread-192420] [transport.py] [_log()] starting thread (client mode): 0xb0f43c70
2026-04-12T16:48:30.001 [DEBUG] [Thread-192420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:48:30.022 [DEBUG] [Thread-192420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:48:30.023 [INFO] [Thread-192420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:48:30.033 [DEBUG] [Thread-192420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:48:30.033 [DEBUG] [Thread-192420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:48:30.033 [DEBUG] [Thread-192420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:48:30.033 [DEBUG] [Thread-192420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] client lang: <none>
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] server lang: <none>
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] kex follows: False
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] Compression: none
2026-04-12T16:48:30.034 [DEBUG] [Thread-192420] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:48:30.058 [DEBUG] [Thread-192420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:48:30.059 [DEBUG] [Thread-192420] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:48:30.060 [DEBUG] [Thread-192420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:48:30.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:48:30.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:48:30.062 [DEBUG] [Thread-192420] [transport.py] [_log()] userauth is OK
2026-04-12T16:48:30.062 [DEBUG] [Thread-192420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:48:30.062 [DEBUG] [Thread-192420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:48:30.062 [DEBUG] [Thread-192420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:48:30.062 [DEBUG] [Thread-192420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:48:30.087 [INFO] [Thread-192420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:48:30.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:48:30.746 [DEBUG] [Thread-192420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:48:30.746 [DEBUG] [Thread-192420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:48:30.746 [DEBUG] [Thread-192420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:48:30.787 [DEBUG] [Thread-192420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:48:30.787 [DEBUG] [Thread-192420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:48:30.790 [DEBUG] [Thread-192420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:48:30.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:48:30.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:48:30.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:48:30.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:48:30.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:48:30.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:48:30.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:48:30.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:48:30.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:48:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.616772 -999.00  +15.10   8.07     71  +10.00 1 2 1 1 1   887    0 5.26 -34.44 ----- 8.1 8.1 268.1 18.8 19.4 -23.6 19.3 -22.9 18.7 -20.2 19.1 -20.8
2026-04-12T16:48:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:48:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:48:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.616772
2026-04-12T16:48:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:48:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:48:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:48:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:48:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:48:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:48:10', tmtdew=6.24431, humidity=66.2825, cloud=0.0, wind=22.162, temperature=15.1186, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:48:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:48:30.813 [DEBUG] [Thread-192420] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:48:30.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:48:30.905 [DEBUG] [Thread-192423] [transport.py] [_log()] starting thread (client mode): 0xb0fea290
2026-04-12T16:48:30.905 [DEBUG] [Thread-192423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:48:30.920 [DEBUG] [Thread-192423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:48:30.921 [INFO] [Thread-192423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:48:30.928 [DEBUG] [Thread-192423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] client lang: <none>
2026-04-12T16:48:30.929 [DEBUG] [Thread-192423] [transport.py] [_log()] server lang: <none>
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] kex follows: False
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] Compression: none
2026-04-12T16:48:30.930 [DEBUG] [Thread-192423] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:48:30.986 [DEBUG] [Thread-192423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:48:30.987 [DEBUG] [Thread-192423] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:48:30.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:48:30.989 [DEBUG] [Thread-192423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:48:30.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:48:31.050 [DEBUG] [Thread-192423] [transport.py] [_log()] userauth is OK
2026-04-12T16:48:31.050 [DEBUG] [Thread-192423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:48:31.051 [DEBUG] [Thread-192423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:48:31.051 [DEBUG] [Thread-192423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:48:31.051 [DEBUG] [Thread-192423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:48:31.070 [INFO] [Thread-192423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:48:31.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:48:31.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:48:31.904 [DEBUG] [Thread-192423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:48:31.904 [DEBUG] [Thread-192423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:48:31.953 [DEBUG] [Thread-192423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:48:31.953 [DEBUG] [Thread-192423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:48:31.963 [DEBUG] [Thread-192423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:48:31.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:48:31.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:48:31.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:48:31.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:48:31.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:48:31.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:48:32.003 [DEBUG] [Thread-192423] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:48:34.574 [DEBUG] [Thread-192425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:48:45.886 [DEBUG] [Thread-192426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:48:49.620 [DEBUG] [Thread-192427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:48:52.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:48:52.435 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:49:02.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:49:02.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:49:02.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:49:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 48, 46), 6.27884, 66.1342, 0.0, 23.0414, 15.5046, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:49:03.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:48:46
2026-04-12T16:49:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:49:03.856 [DEBUG] [Thread-192428] [transport.py] [_log()] starting thread (client mode): 0xae5b6fe0
2026-04-12T16:49:03.856 [DEBUG] [Thread-192428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:49:03.876 [DEBUG] [Thread-192428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:49:03.877 [INFO] [Thread-192428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:49:03.880 [DEBUG] [Thread-192428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:49:03.880 [DEBUG] [Thread-192428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:49:03.880 [DEBUG] [Thread-192428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] client lang: <none>
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] server lang: <none>
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] kex follows: False
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] Compression: none
2026-04-12T16:49:03.881 [DEBUG] [Thread-192428] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:49:03.897 [DEBUG] [Thread-192428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:49:03.898 [DEBUG] [Thread-192428] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:49:03.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:49:03.899 [DEBUG] [Thread-192428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:49:03.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:49:03.901 [DEBUG] [Thread-192428] [transport.py] [_log()] userauth is OK
2026-04-12T16:49:03.901 [DEBUG] [Thread-192428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:49:03.901 [DEBUG] [Thread-192428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:49:03.902 [DEBUG] [Thread-192428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:49:03.902 [DEBUG] [Thread-192428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:49:03.925 [INFO] [Thread-192428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:49:03.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:49:04.524 [DEBUG] [Thread-192428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:49:04.524 [DEBUG] [Thread-192428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:49:04.525 [DEBUG] [Thread-192428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:49:04.565 [DEBUG] [Thread-192428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:49:04.565 [DEBUG] [Thread-192428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:49:04.567 [DEBUG] [Thread-192428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:49:04.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:49:04.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:49:04.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:49:04.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:49:04.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:49:04.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:49:04.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:49:04.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:49:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:49:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.617119 -999.00  +15.10   8.14     72  +10.20 1 2 1 1 1   887    0 5.05 -38.64 ----- 8.1 8.1 269.8 15.9 19.2 -23.3 19.2 -23.0 18.6 -20.2 19.0 -20.9
2026-04-12T16:49:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:49:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:49:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.617119
2026-04-12T16:49:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:49:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:49:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:49:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:49:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:49:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:48:46', tmtdew=6.27884, humidity=66.1342, cloud=0.0, wind=23.0414, temperature=15.5046, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:48:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:49:04.591 [DEBUG] [Thread-192428] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:49:04.656 [DEBUG] [Thread-192431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:49:04.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:49:04.689 [DEBUG] [Thread-192432] [transport.py] [_log()] starting thread (client mode): 0xae52c730
2026-04-12T16:49:04.689 [DEBUG] [Thread-192432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:49:04.708 [DEBUG] [Thread-192432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:49:04.708 [INFO] [Thread-192432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:49:04.718 [DEBUG] [Thread-192432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:49:04.718 [DEBUG] [Thread-192432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:49:04.718 [DEBUG] [Thread-192432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:49:04.718 [DEBUG] [Thread-192432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] client lang: <none>
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] server lang: <none>
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] kex follows: False
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] Compression: none
2026-04-12T16:49:04.719 [DEBUG] [Thread-192432] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:49:04.779 [DEBUG] [Thread-192432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:49:04.780 [DEBUG] [Thread-192432] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:49:04.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:49:04.781 [DEBUG] [Thread-192432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:49:04.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:49:04.838 [DEBUG] [Thread-192432] [transport.py] [_log()] userauth is OK
2026-04-12T16:49:04.838 [DEBUG] [Thread-192432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:49:04.838 [DEBUG] [Thread-192432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:49:04.838 [DEBUG] [Thread-192432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:49:04.838 [DEBUG] [Thread-192432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:49:04.857 [INFO] [Thread-192432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:49:04.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:49:04.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:49:05.687 [DEBUG] [Thread-192432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:49:05.687 [DEBUG] [Thread-192432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:49:05.736 [DEBUG] [Thread-192432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:49:05.736 [DEBUG] [Thread-192432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:49:05.747 [DEBUG] [Thread-192432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:49:05.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:49:05.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:49:05.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:49:05.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:49:05.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:49:05.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:49:05.786 [DEBUG] [Thread-192432] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:49:19.698 [DEBUG] [Thread-192434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:49:34.737 [DEBUG] [Thread-192435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:49:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:49:35.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:49:35.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:49:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 49, 21), 6.04939, 66.7493, 0.0, 18.2797, 15.0689, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:49:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:49:21
2026-04-12T16:49:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:49:37.770 [DEBUG] [Thread-192436] [transport.py] [_log()] starting thread (client mode): 0xae5b5510
2026-04-12T16:49:37.770 [DEBUG] [Thread-192436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:49:37.789 [DEBUG] [Thread-192436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:49:37.789 [INFO] [Thread-192436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] client lang: <none>
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] server lang: <none>
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] kex follows: False
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] Compression: none
2026-04-12T16:49:37.793 [DEBUG] [Thread-192436] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:49:37.810 [DEBUG] [Thread-192436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:49:37.810 [DEBUG] [Thread-192436] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:49:37.811 [DEBUG] [Thread-192436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:49:37.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:49:37.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:49:37.812 [DEBUG] [Thread-192436] [transport.py] [_log()] userauth is OK
2026-04-12T16:49:37.812 [DEBUG] [Thread-192436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:49:37.812 [DEBUG] [Thread-192436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:49:37.812 [DEBUG] [Thread-192436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:49:37.812 [DEBUG] [Thread-192436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:49:37.827 [INFO] [Thread-192436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:49:37.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:49:38.437 [DEBUG] [Thread-192436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:49:38.437 [DEBUG] [Thread-192436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:49:38.438 [DEBUG] [Thread-192436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:49:38.478 [DEBUG] [Thread-192436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:49:38.479 [DEBUG] [Thread-192436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:49:38.482 [DEBUG] [Thread-192436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:49:38.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:49:38.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:49:38.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:49:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:49:38.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:49:38.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:49:38.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:49:38.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:49:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:49:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.617466 -999.00  +15.10  10.50     72  +10.20 1 2 1 1 1   887    0 4.86 -46.06 ----- 10.5 10.5 256.0 15.9 19.1 -23.7 19.1 -22.8 18.6 -20.5 18.9 -21.2
2026-04-12T16:49:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:49:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:49:38.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.617466
2026-04-12T16:49:38.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:49:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:49:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:49:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:49:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:49:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:49:21', tmtdew=6.04939, humidity=66.7493, cloud=0.0, wind=18.2797, temperature=15.0689, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:49:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:49:38.511 [DEBUG] [Thread-192436] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:49:38.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:49:38.605 [DEBUG] [Thread-192439] [transport.py] [_log()] starting thread (client mode): 0xae5b72e0
2026-04-12T16:49:38.605 [DEBUG] [Thread-192439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:49:38.619 [DEBUG] [Thread-192439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:49:38.620 [INFO] [Thread-192439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:49:38.627 [DEBUG] [Thread-192439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:49:38.628 [DEBUG] [Thread-192439] [transport.py] [_log()] client lang: <none>
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] server lang: <none>
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] kex follows: False
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] Compression: none
2026-04-12T16:49:38.629 [DEBUG] [Thread-192439] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:49:38.686 [DEBUG] [Thread-192439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:49:38.687 [DEBUG] [Thread-192439] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:49:38.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:49:38.689 [DEBUG] [Thread-192439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:49:38.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:49:38.745 [DEBUG] [Thread-192439] [transport.py] [_log()] userauth is OK
2026-04-12T16:49:38.746 [DEBUG] [Thread-192439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:49:38.746 [DEBUG] [Thread-192439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:49:38.747 [DEBUG] [Thread-192439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:49:38.747 [DEBUG] [Thread-192439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:49:38.767 [INFO] [Thread-192439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:49:38.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:49:38.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:49:39.603 [DEBUG] [Thread-192439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:49:39.603 [DEBUG] [Thread-192439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:49:39.651 [DEBUG] [Thread-192439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:49:39.651 [DEBUG] [Thread-192439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:49:39.660 [DEBUG] [Thread-192439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:49:39.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:49:39.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:49:39.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:49:39.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:49:39.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:49:39.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:49:39.697 [DEBUG] [Thread-192439] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:49:45.920 [DEBUG] [Thread-192441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:49:49.776 [DEBUG] [Thread-192442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:49:52.575 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:49:52.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:04.830 [DEBUG] [Thread-192443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:09.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:50:09.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:50:09.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:50:11.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 49, 57), 5.98456, 67.2463, 0.0, 22.2502, 14.9194, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:50:11.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:49:57
2026-04-12T16:50:11.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:50:11.595 [DEBUG] [Thread-192444] [transport.py] [_log()] starting thread (client mode): 0xae5b4e20
2026-04-12T16:50:11.595 [DEBUG] [Thread-192444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:50:11.615 [DEBUG] [Thread-192444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:50:11.615 [INFO] [Thread-192444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] client lang: <none>
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] server lang: <none>
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] kex follows: False
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:50:11.621 [DEBUG] [Thread-192444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:50:11.622 [DEBUG] [Thread-192444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:50:11.622 [DEBUG] [Thread-192444] [transport.py] [_log()] Compression: none
2026-04-12T16:50:11.622 [DEBUG] [Thread-192444] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:50:11.640 [DEBUG] [Thread-192444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:50:11.641 [DEBUG] [Thread-192444] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:50:11.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:50:11.641 [DEBUG] [Thread-192444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:50:11.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:50:11.684 [DEBUG] [Thread-192444] [transport.py] [_log()] userauth is OK
2026-04-12T16:50:11.685 [DEBUG] [Thread-192444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:50:11.685 [DEBUG] [Thread-192444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:50:11.685 [DEBUG] [Thread-192444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:50:11.685 [DEBUG] [Thread-192444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:50:11.716 [INFO] [Thread-192444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:50:11.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:50:17.908 [DEBUG] [Thread-192444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:50:17.908 [DEBUG] [Thread-192444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:50:17.909 [DEBUG] [Thread-192444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:50:17.950 [DEBUG] [Thread-192444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:50:17.950 [DEBUG] [Thread-192444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:50:17.953 [DEBUG] [Thread-192444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:50:18.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:50:18.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:50:18.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:50:18.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:50:18.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:50:18.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:50:18.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:50:18.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:50:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:50:18.170 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T16:50:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:49:57', tmtdew=5.98456, humidity=67.2463, cloud=0.0, wind=22.2502, temperature=14.9194, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:50:18.171 [DEBUG] [Thread-192444] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:50:18.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:50:18.268 [DEBUG] [Thread-192447] [transport.py] [_log()] starting thread (client mode): 0xae50b850
2026-04-12T16:50:18.268 [DEBUG] [Thread-192447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:50:18.282 [DEBUG] [Thread-192447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:50:18.283 [INFO] [Thread-192447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:50:18.290 [DEBUG] [Thread-192447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:50:18.290 [DEBUG] [Thread-192447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] client lang: <none>
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] server lang: <none>
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] kex follows: False
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] Compression: none
2026-04-12T16:50:18.291 [DEBUG] [Thread-192447] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:50:18.349 [DEBUG] [Thread-192447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:50:18.349 [DEBUG] [Thread-192447] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:50:18.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:50:18.351 [DEBUG] [Thread-192447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:50:18.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:50:18.405 [DEBUG] [Thread-192447] [transport.py] [_log()] userauth is OK
2026-04-12T16:50:18.405 [DEBUG] [Thread-192447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:50:18.405 [DEBUG] [Thread-192447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:50:18.406 [DEBUG] [Thread-192447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:50:18.406 [DEBUG] [Thread-192447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:50:18.424 [INFO] [Thread-192447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:50:18.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:50:18.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:50:19.242 [DEBUG] [Thread-192447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:50:19.242 [DEBUG] [Thread-192447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:50:19.290 [DEBUG] [Thread-192447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:50:19.290 [DEBUG] [Thread-192447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:50:19.299 [DEBUG] [Thread-192447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:50:19.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:50:19.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:50:19.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:50:19.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:50:19.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:50:19.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:50:19.331 [DEBUG] [Thread-192447] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:50:19.865 [DEBUG] [Thread-192449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:34.906 [DEBUG] [Thread-192450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:45.954 [DEBUG] [Thread-192451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:49.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:50:49.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:50:49.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:50:49.941 [DEBUG] [Thread-192452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:50.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 50, 32), 5.91916, 67.5444, 0.0, 22.3207, 14.9194, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:50:50.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:50:32
2026-04-12T16:50:51.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:50:51.197 [DEBUG] [Thread-192453] [transport.py] [_log()] starting thread (client mode): 0xb0febb80
2026-04-12T16:50:51.197 [DEBUG] [Thread-192453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:50:51.219 [DEBUG] [Thread-192453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:50:51.219 [INFO] [Thread-192453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:50:51.222 [DEBUG] [Thread-192453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:50:51.222 [DEBUG] [Thread-192453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] client lang: <none>
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] server lang: <none>
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] kex follows: False
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] Compression: none
2026-04-12T16:50:51.223 [DEBUG] [Thread-192453] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:50:51.240 [DEBUG] [Thread-192453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:50:51.241 [DEBUG] [Thread-192453] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:50:51.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:50:51.242 [DEBUG] [Thread-192453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:50:51.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:50:51.244 [DEBUG] [Thread-192453] [transport.py] [_log()] userauth is OK
2026-04-12T16:50:51.244 [DEBUG] [Thread-192453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:50:51.244 [DEBUG] [Thread-192453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:50:51.244 [DEBUG] [Thread-192453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:50:51.244 [DEBUG] [Thread-192453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:50:51.262 [INFO] [Thread-192453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:50:51.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:50:51.874 [DEBUG] [Thread-192453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:50:51.875 [DEBUG] [Thread-192453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:50:51.875 [DEBUG] [Thread-192453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:50:51.916 [DEBUG] [Thread-192453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:50:51.916 [DEBUG] [Thread-192453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:50:51.920 [DEBUG] [Thread-192453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:50:51.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:50:51.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:50:51.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:50:51.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:50:51.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:50:51.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:50:51.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:50:51.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:50:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:50:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.618508 -999.00  +15.10  17.01     73  +10.30 1 2 1 1 1   887    0 4.25 -60.62 ----- 17.0 17.0 257.4 21.9 18.7 -24.1 18.7 -23.7 18.1 -21.0 18.5 -21.6
2026-04-12T16:50:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:50:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:50:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.618508
2026-04-12T16:50:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:50:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:50:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:50:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:50:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:50:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:50:32', tmtdew=5.91916, humidity=67.5444, cloud=0.0, wind=22.3207, temperature=14.9194, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:50:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:50:51.947 [DEBUG] [Thread-192453] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:50:52.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:50:52.037 [DEBUG] [Thread-192456] [transport.py] [_log()] starting thread (client mode): 0xae52e0e0
2026-04-12T16:50:52.037 [DEBUG] [Thread-192456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:50:52.052 [DEBUG] [Thread-192456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:50:52.053 [INFO] [Thread-192456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] client lang: <none>
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] server lang: <none>
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] kex follows: False
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:50:52.061 [DEBUG] [Thread-192456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:50:52.062 [DEBUG] [Thread-192456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:50:52.062 [DEBUG] [Thread-192456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:50:52.062 [DEBUG] [Thread-192456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:50:52.062 [DEBUG] [Thread-192456] [transport.py] [_log()] Compression: none
2026-04-12T16:50:52.062 [DEBUG] [Thread-192456] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:50:52.121 [DEBUG] [Thread-192456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:50:52.121 [DEBUG] [Thread-192456] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:50:52.122 [DEBUG] [Thread-192456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:50:52.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:50:52.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:50:52.181 [DEBUG] [Thread-192456] [transport.py] [_log()] userauth is OK
2026-04-12T16:50:52.182 [DEBUG] [Thread-192456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:50:52.182 [DEBUG] [Thread-192456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:50:52.182 [DEBUG] [Thread-192456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:50:52.182 [DEBUG] [Thread-192456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:50:52.200 [INFO] [Thread-192456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:50:52.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:50:52.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:50:52.715 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:52.716 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:50:53.036 [DEBUG] [Thread-192456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:50:53.036 [DEBUG] [Thread-192456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:50:53.084 [DEBUG] [Thread-192456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:50:53.084 [DEBUG] [Thread-192456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:50:53.093 [DEBUG] [Thread-192456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:50:53.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:50:53.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:50:53.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:50:53.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:50:53.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:50:53.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:50:53.128 [DEBUG] [Thread-192456] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:51:04.976 [DEBUG] [Thread-192458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:51:20.037 [DEBUG] [Thread-192459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:51:23.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:51:23.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:51:23.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:51:24.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 51, 7), 5.90177, 67.6107, 0.0, 18.7927, 14.8531, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:51:24.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:51:07
2026-04-12T16:51:24.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:51:25.028 [DEBUG] [Thread-192460] [transport.py] [_log()] starting thread (client mode): 0xae5b4580
2026-04-12T16:51:25.028 [DEBUG] [Thread-192460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:51:25.043 [DEBUG] [Thread-192460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:51:25.043 [INFO] [Thread-192460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:51:25.044 [DEBUG] [Thread-192460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] client lang: <none>
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] server lang: <none>
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] kex follows: False
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] Compression: none
2026-04-12T16:51:25.045 [DEBUG] [Thread-192460] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:51:25.058 [DEBUG] [Thread-192460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:51:25.059 [DEBUG] [Thread-192460] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:51:25.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:51:25.061 [DEBUG] [Thread-192460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:51:25.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:51:25.063 [DEBUG] [Thread-192460] [transport.py] [_log()] userauth is OK
2026-04-12T16:51:25.063 [DEBUG] [Thread-192460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:51:25.063 [DEBUG] [Thread-192460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:51:25.064 [DEBUG] [Thread-192460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:51:25.064 [DEBUG] [Thread-192460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:51:25.089 [INFO] [Thread-192460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:51:25.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:51:25.717 [DEBUG] [Thread-192460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:51:25.718 [DEBUG] [Thread-192460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:51:25.718 [DEBUG] [Thread-192460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:51:25.759 [DEBUG] [Thread-192460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:51:25.759 [DEBUG] [Thread-192460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:51:25.762 [DEBUG] [Thread-192460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:51:25.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:51:25.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:51:25.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:51:25.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:51:25.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:51:25.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:51:25.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:51:25.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:51:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:51:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.618855 -999.00  +14.90  12.38     73  +10.20 1 2 1 1 1   887    0 3.96 -64.66 ----- 12.4 12.4 268.2 20.5 18.6 -24.2 18.6 -23.7 18.0 -20.7 18.4 -21.5
2026-04-12T16:51:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:51:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:51:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.618855
2026-04-12T16:51:25.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:51:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:51:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:51:25.785 [DEBUG] [Thread-192460] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:51:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:51:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:51:25.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:51:07', tmtdew=5.90177, humidity=67.6107, cloud=0.0, wind=18.7927, temperature=14.8531, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:51:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:51:25.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:51:25.875 [DEBUG] [Thread-192463] [transport.py] [_log()] starting thread (client mode): 0xb0feb3a0
2026-04-12T16:51:25.875 [DEBUG] [Thread-192463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:51:25.890 [DEBUG] [Thread-192463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:51:25.890 [INFO] [Thread-192463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:51:25.898 [DEBUG] [Thread-192463] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:51:25.899 [DEBUG] [Thread-192463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:51:25.899 [DEBUG] [Thread-192463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:51:25.899 [DEBUG] [Thread-192463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:25.899 [DEBUG] [Thread-192463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:25.899 [DEBUG] [Thread-192463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:25.899 [DEBUG] [Thread-192463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:25.899 [DEBUG] [Thread-192463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] client lang: <none>
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] server lang: <none>
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] kex follows: False
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] Compression: none
2026-04-12T16:51:25.900 [DEBUG] [Thread-192463] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:51:25.956 [DEBUG] [Thread-192463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:51:25.957 [DEBUG] [Thread-192463] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:51:25.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:51:25.958 [DEBUG] [Thread-192463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:51:25.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:51:26.017 [DEBUG] [Thread-192463] [transport.py] [_log()] userauth is OK
2026-04-12T16:51:26.017 [DEBUG] [Thread-192463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:51:26.017 [DEBUG] [Thread-192463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:51:26.017 [DEBUG] [Thread-192463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:51:26.017 [DEBUG] [Thread-192463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:51:26.036 [INFO] [Thread-192463] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:51:26.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:51:26.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:51:26.869 [DEBUG] [Thread-192463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:51:26.869 [DEBUG] [Thread-192463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:51:26.917 [DEBUG] [Thread-192463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:51:26.918 [DEBUG] [Thread-192463] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:51:26.927 [DEBUG] [Thread-192463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:51:26.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:51:26.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:51:26.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:51:26.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:51:26.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:51:26.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:51:26.963 [DEBUG] [Thread-192463] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:51:35.073 [DEBUG] [Thread-192465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:51:45.988 [DEBUG] [Thread-192466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:51:50.135 [DEBUG] [Thread-192467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:51:52.856 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:51:52.857 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:51:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:51:56.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:51:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:51:58.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 51, 44), 5.68983, 68.7515, 0.0, 22.6534, 15.2394, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:51:58.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:51:44
2026-04-12T16:51:58.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:51:58.909 [DEBUG] [Thread-192468] [transport.py] [_log()] starting thread (client mode): 0xae5f1c90
2026-04-12T16:51:58.909 [DEBUG] [Thread-192468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:51:58.926 [DEBUG] [Thread-192468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:51:58.927 [INFO] [Thread-192468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] client lang: <none>
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] server lang: <none>
2026-04-12T16:51:58.928 [DEBUG] [Thread-192468] [transport.py] [_log()] kex follows: False
2026-04-12T16:51:58.929 [DEBUG] [Thread-192468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:51:58.929 [DEBUG] [Thread-192468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:51:58.929 [DEBUG] [Thread-192468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:51:58.929 [DEBUG] [Thread-192468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:51:58.929 [DEBUG] [Thread-192468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:51:58.929 [DEBUG] [Thread-192468] [transport.py] [_log()] Compression: none
2026-04-12T16:51:58.929 [DEBUG] [Thread-192468] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:51:58.938 [DEBUG] [Thread-192468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:51:58.938 [DEBUG] [Thread-192468] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:51:58.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:51:58.939 [DEBUG] [Thread-192468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:51:58.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:51:58.941 [DEBUG] [Thread-192468] [transport.py] [_log()] userauth is OK
2026-04-12T16:51:58.941 [DEBUG] [Thread-192468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:51:58.941 [DEBUG] [Thread-192468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:51:58.941 [DEBUG] [Thread-192468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:51:58.942 [DEBUG] [Thread-192468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:51:58.960 [INFO] [Thread-192468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:51:58.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:51:59.517 [DEBUG] [Thread-192468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:51:59.518 [DEBUG] [Thread-192468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:51:59.518 [DEBUG] [Thread-192468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:51:59.559 [DEBUG] [Thread-192468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:51:59.559 [DEBUG] [Thread-192468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:51:59.561 [DEBUG] [Thread-192468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:51:59.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:51:59.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:51:59.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:51:59.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:51:59.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:51:59.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:51:59.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:51:59.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:51:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:51:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.619202 -999.00  +14.80  21.09     74  +10.20 1 2 1 1 1   887    0 3.78 -73.24 ----- 21.1 21.1 238.4 23.0 18.5 -24.7 18.5 -23.5 17.9 -21.1 18.3 -21.8
2026-04-12T16:51:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:51:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:51:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.619202
2026-04-12T16:51:59.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:51:59.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:51:59.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:51:59.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:51:59.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:51:59.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:51:44', tmtdew=5.68983, humidity=68.7515, cloud=0.0, wind=22.6534, temperature=15.2394, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:51:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:51:59.588 [DEBUG] [Thread-192468] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:51:59.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:51:59.684 [DEBUG] [Thread-192471] [transport.py] [_log()] starting thread (client mode): 0xae5f2290
2026-04-12T16:51:59.684 [DEBUG] [Thread-192471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:51:59.700 [DEBUG] [Thread-192471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:51:59.701 [INFO] [Thread-192471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:51:59.709 [DEBUG] [Thread-192471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:51:59.709 [DEBUG] [Thread-192471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] client lang: <none>
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] server lang: <none>
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] kex follows: False
2026-04-12T16:51:59.710 [DEBUG] [Thread-192471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:51:59.711 [DEBUG] [Thread-192471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:51:59.711 [DEBUG] [Thread-192471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:51:59.711 [DEBUG] [Thread-192471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:51:59.711 [DEBUG] [Thread-192471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:51:59.711 [DEBUG] [Thread-192471] [transport.py] [_log()] Compression: none
2026-04-12T16:51:59.711 [DEBUG] [Thread-192471] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:51:59.770 [DEBUG] [Thread-192471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:51:59.771 [DEBUG] [Thread-192471] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:51:59.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:51:59.772 [DEBUG] [Thread-192471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:51:59.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:51:59.832 [DEBUG] [Thread-192471] [transport.py] [_log()] userauth is OK
2026-04-12T16:51:59.833 [DEBUG] [Thread-192471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:51:59.833 [DEBUG] [Thread-192471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:51:59.833 [DEBUG] [Thread-192471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:51:59.833 [DEBUG] [Thread-192471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:51:59.853 [INFO] [Thread-192471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:51:59.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:51:59.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:52:00.721 [DEBUG] [Thread-192471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:52:00.721 [DEBUG] [Thread-192471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:52:00.769 [DEBUG] [Thread-192471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:52:00.769 [DEBUG] [Thread-192471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:52:00.778 [DEBUG] [Thread-192471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:52:00.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:52:00.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:52:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:52:00.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:52:00.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:52:00.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:52:00.817 [DEBUG] [Thread-192471] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:52:05.170 [DEBUG] [Thread-192473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:52:20.221 [DEBUG] [Thread-192474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:52:30.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:52:30.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:52:30.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:52:32.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 52, 19), 5.60772, 69.0414, 0.0, 16.34, 14.7365, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:52:32.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:52:19
2026-04-12T16:52:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:52:32.668 [DEBUG] [Thread-192475] [transport.py] [_log()] starting thread (client mode): 0xae5f39d0
2026-04-12T16:52:32.668 [DEBUG] [Thread-192475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:52:32.680 [DEBUG] [Thread-192475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:52:32.680 [INFO] [Thread-192475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:52:32.683 [DEBUG] [Thread-192475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:52:32.683 [DEBUG] [Thread-192475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:52:32.683 [DEBUG] [Thread-192475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:52:32.683 [DEBUG] [Thread-192475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:52:32.683 [DEBUG] [Thread-192475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:52:32.683 [DEBUG] [Thread-192475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:52:32.683 [DEBUG] [Thread-192475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] client lang: <none>
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] server lang: <none>
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] kex follows: False
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] Compression: none
2026-04-12T16:52:32.684 [DEBUG] [Thread-192475] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:52:32.698 [DEBUG] [Thread-192475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:52:32.699 [DEBUG] [Thread-192475] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:52:32.699 [DEBUG] [Thread-192475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:52:32.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:52:32.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:52:32.701 [DEBUG] [Thread-192475] [transport.py] [_log()] userauth is OK
2026-04-12T16:52:32.701 [DEBUG] [Thread-192475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:52:32.702 [DEBUG] [Thread-192475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:52:32.702 [DEBUG] [Thread-192475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:52:32.702 [DEBUG] [Thread-192475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:52:32.716 [INFO] [Thread-192475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:52:32.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:52:33.314 [DEBUG] [Thread-192475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:52:33.314 [DEBUG] [Thread-192475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:52:33.315 [DEBUG] [Thread-192475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:52:33.355 [DEBUG] [Thread-192475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:52:33.356 [DEBUG] [Thread-192475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:52:33.359 [DEBUG] [Thread-192475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:52:33.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:52:33.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:52:33.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:52:33.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:52:33.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:52:33.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:52:33.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:52:33.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:52:33.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:52:33.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.619549 -999.00  +14.80  13.60     74  +10.30 1 2 1 1 1   887    0 3.51 -81.01 ----- 13.6 13.6 270.0 23.2 18.3 -24.3 18.3 -23.4 17.8 -20.8 18.1 -22.6
2026-04-12T16:52:33.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:52:33.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:52:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.619549
2026-04-12T16:52:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:52:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:52:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:52:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:52:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:52:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:52:19', tmtdew=5.60772, humidity=69.0414, cloud=0.0, wind=16.34, temperature=14.7365, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:52:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:52:33.378 [DEBUG] [Thread-192475] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:52:33.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:52:33.471 [DEBUG] [Thread-192478] [transport.py] [_log()] starting thread (client mode): 0xae50af80
2026-04-12T16:52:33.471 [DEBUG] [Thread-192478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:52:33.488 [DEBUG] [Thread-192478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:52:33.488 [INFO] [Thread-192478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:52:33.496 [DEBUG] [Thread-192478] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:52:33.496 [DEBUG] [Thread-192478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] client lang: <none>
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] server lang: <none>
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] kex follows: False
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] Compression: none
2026-04-12T16:52:33.497 [DEBUG] [Thread-192478] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:52:33.557 [DEBUG] [Thread-192478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:52:33.557 [DEBUG] [Thread-192478] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:52:33.558 [DEBUG] [Thread-192478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:52:33.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:52:33.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:52:33.618 [DEBUG] [Thread-192478] [transport.py] [_log()] userauth is OK
2026-04-12T16:52:33.618 [DEBUG] [Thread-192478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:52:33.618 [DEBUG] [Thread-192478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:52:33.618 [DEBUG] [Thread-192478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:52:33.618 [DEBUG] [Thread-192478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:52:33.638 [INFO] [Thread-192478] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:52:33.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:52:33.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:52:34.462 [DEBUG] [Thread-192478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:52:34.462 [DEBUG] [Thread-192478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:52:34.510 [DEBUG] [Thread-192478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:52:34.510 [DEBUG] [Thread-192478] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:52:34.519 [DEBUG] [Thread-192478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:52:34.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:52: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')
2026-04-12T16:52:34.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:52:34.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:52:34.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:52:34.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:52:34.555 [DEBUG] [Thread-192478] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:52:35.259 [DEBUG] [Thread-192480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:52:46.020 [DEBUG] [Thread-192481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:52:50.319 [DEBUG] [Thread-192482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:52:52.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:52:52.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:53:04.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:53:04.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:53:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:53:05.358 [DEBUG] [Thread-192483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:53:05.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 52, 55), 5.43018, 69.9061, 0.0, 22.1083, 14.7534, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:53:05.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:52:55
2026-04-12T16:53:06.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:53:06.433 [DEBUG] [Thread-192484] [transport.py] [_log()] starting thread (client mode): 0xae5f0250
2026-04-12T16:53:06.433 [DEBUG] [Thread-192484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:53:06.453 [DEBUG] [Thread-192484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:53:06.453 [INFO] [Thread-192484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:53:06.456 [DEBUG] [Thread-192484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:53:06.456 [DEBUG] [Thread-192484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] client lang: <none>
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] server lang: <none>
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] kex follows: False
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:53:06.457 [DEBUG] [Thread-192484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:53:06.458 [DEBUG] [Thread-192484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:53:06.458 [DEBUG] [Thread-192484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:53:06.458 [DEBUG] [Thread-192484] [transport.py] [_log()] Compression: none
2026-04-12T16:53:06.458 [DEBUG] [Thread-192484] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:53:06.474 [DEBUG] [Thread-192484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:53:06.475 [DEBUG] [Thread-192484] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:53:06.475 [DEBUG] [Thread-192484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:53:06.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:53:06.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:53:06.477 [DEBUG] [Thread-192484] [transport.py] [_log()] userauth is OK
2026-04-12T16:53:06.477 [DEBUG] [Thread-192484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:53:06.477 [DEBUG] [Thread-192484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:53:06.477 [DEBUG] [Thread-192484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:53:06.477 [DEBUG] [Thread-192484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:53:06.494 [INFO] [Thread-192484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:53:06.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:53:07.113 [DEBUG] [Thread-192484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:53:07.113 [DEBUG] [Thread-192484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:53:07.113 [DEBUG] [Thread-192484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:53:07.154 [DEBUG] [Thread-192484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:53:07.154 [DEBUG] [Thread-192484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:53:07.157 [DEBUG] [Thread-192484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:53:07.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:53:07.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:53:07.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:53:07.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:53:07.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:53:07.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:53:07.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:53:07.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:53:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:53:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.619897 -999.00  +14.80  13.87     75  +10.40 1 2 1 1 1   887    0 3.37 -86.15 ----- 13.9 13.9 269.6 19.2 18.2 -24.5 18.2 -23.1 17.7 -21.5 18.0 -22.0
2026-04-12T16:53:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:53:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:53:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.619897
2026-04-12T16:53:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:53:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:53:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:53:07.175 [DEBUG] [Thread-192484] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:53:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:53:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:53:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:52:55', tmtdew=5.43018, humidity=69.9061, cloud=0.0, wind=22.1083, temperature=14.7534, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:52:39.101', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:53:07.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:53:07.270 [DEBUG] [Thread-192487] [transport.py] [_log()] starting thread (client mode): 0xae5f1180
2026-04-12T16:53:07.270 [DEBUG] [Thread-192487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:53:07.286 [DEBUG] [Thread-192487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:53:07.286 [INFO] [Thread-192487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:53:07.293 [DEBUG] [Thread-192487] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:53:07.293 [DEBUG] [Thread-192487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:53:07.293 [DEBUG] [Thread-192487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:53:07.293 [DEBUG] [Thread-192487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:07.293 [DEBUG] [Thread-192487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:07.293 [DEBUG] [Thread-192487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] client lang: <none>
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] server lang: <none>
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] kex follows: False
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] Compression: none
2026-04-12T16:53:07.294 [DEBUG] [Thread-192487] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:53:07.352 [DEBUG] [Thread-192487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:53:07.353 [DEBUG] [Thread-192487] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:53:07.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:53:07.353 [DEBUG] [Thread-192487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:53:07.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:53:07.408 [DEBUG] [Thread-192487] [transport.py] [_log()] userauth is OK
2026-04-12T16:53:07.408 [DEBUG] [Thread-192487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:53:07.408 [DEBUG] [Thread-192487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:53:07.408 [DEBUG] [Thread-192487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:53:07.409 [DEBUG] [Thread-192487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:53:07.430 [INFO] [Thread-192487] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:53:07.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:53:07.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:53:08.288 [DEBUG] [Thread-192487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:53:08.288 [DEBUG] [Thread-192487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:53:08.336 [DEBUG] [Thread-192487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:53:08.336 [DEBUG] [Thread-192487] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:53:08.346 [DEBUG] [Thread-192487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:53:08.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:53:08.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:53:08.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:53:08.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:53:08.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:53:08.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:53:08.383 [DEBUG] [Thread-192487] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:53:20.395 [DEBUG] [Thread-192489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:53:35.448 [DEBUG] [Thread-192490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:53:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:53:38.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:53:38.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:53:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 53, 30), 5.46147, 69.7405, 0.0, 20.0444, 14.654, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:53:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:53:30
2026-04-12T16:53:40.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:53:40.262 [DEBUG] [Thread-192491] [transport.py] [_log()] starting thread (client mode): 0xae535390
2026-04-12T16:53:40.262 [DEBUG] [Thread-192491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:53:40.283 [DEBUG] [Thread-192491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:53:40.283 [INFO] [Thread-192491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:53:40.284 [DEBUG] [Thread-192491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:53:40.284 [DEBUG] [Thread-192491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:53:40.284 [DEBUG] [Thread-192491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:53:40.284 [DEBUG] [Thread-192491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:40.284 [DEBUG] [Thread-192491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:40.284 [DEBUG] [Thread-192491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] client lang: <none>
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] server lang: <none>
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] kex follows: False
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] Compression: none
2026-04-12T16:53:40.285 [DEBUG] [Thread-192491] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:53:40.299 [DEBUG] [Thread-192491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:53:40.300 [DEBUG] [Thread-192491] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:53:40.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:53:40.301 [DEBUG] [Thread-192491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:53:40.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:53:40.304 [DEBUG] [Thread-192491] [transport.py] [_log()] userauth is OK
2026-04-12T16:53:40.304 [DEBUG] [Thread-192491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:53:40.304 [DEBUG] [Thread-192491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:53:40.304 [DEBUG] [Thread-192491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:53:40.304 [DEBUG] [Thread-192491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:53:40.329 [INFO] [Thread-192491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:53:40.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:53:40.982 [DEBUG] [Thread-192491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:53:40.982 [DEBUG] [Thread-192491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:53:40.982 [DEBUG] [Thread-192491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:53:41.024 [DEBUG] [Thread-192491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:53:41.024 [DEBUG] [Thread-192491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:53:41.027 [DEBUG] [Thread-192491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:53:41.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:53:41.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:53:41.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:53:41.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:53:41.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:53:41.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:53:41.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:53:41.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:53:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:53:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.620244 -999.00  +14.80  19.59     74  +10.40 1 2 1 1 1   887    0 3.30 -85.78 ----- 19.6 19.6 265.2 23.1 18.2 -24.8 18.2 -23.4 17.6 -20.8 17.9 -22.4
2026-04-12T16:53:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:53:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:53:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.620244
2026-04-12T16:53:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:53:41.058 [DEBUG] [Thread-192491] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:53:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:53:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:53:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:53:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:53:41.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:53:30', tmtdew=5.46147, humidity=69.7405, cloud=0.0, wind=20.0444, temperature=14.654, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:53:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:53:41.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:53:41.160 [DEBUG] [Thread-192494] [transport.py] [_log()] starting thread (client mode): 0xae535630
2026-04-12T16:53:41.160 [DEBUG] [Thread-192494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:53:41.175 [DEBUG] [Thread-192494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:53:41.175 [INFO] [Thread-192494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:53:41.183 [DEBUG] [Thread-192494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:53:41.183 [DEBUG] [Thread-192494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] client lang: <none>
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] server lang: <none>
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] kex follows: False
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] Compression: none
2026-04-12T16:53:41.184 [DEBUG] [Thread-192494] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:53:41.243 [DEBUG] [Thread-192494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:53:41.244 [DEBUG] [Thread-192494] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:53:41.244 [DEBUG] [Thread-192494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:53:41.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:53:41.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:53:41.303 [DEBUG] [Thread-192494] [transport.py] [_log()] userauth is OK
2026-04-12T16:53:41.304 [DEBUG] [Thread-192494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:53:41.304 [DEBUG] [Thread-192494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:53:41.305 [DEBUG] [Thread-192494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:53:41.305 [DEBUG] [Thread-192494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:53:41.324 [INFO] [Thread-192494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:53:41.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:53:41.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:53:42.147 [DEBUG] [Thread-192494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:53:42.148 [DEBUG] [Thread-192494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:53:42.195 [DEBUG] [Thread-192494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:53:42.195 [DEBUG] [Thread-192494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:53:42.205 [DEBUG] [Thread-192494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:53:42.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:53:42.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:53:42.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:53:42.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:53:42.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:53:42.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:53:42.243 [DEBUG] [Thread-192494] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:53:46.070 [DEBUG] [Thread-192496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:53:50.483 [DEBUG] [Thread-192497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:53:53.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:53:53.141 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:54:05.547 [DEBUG] [Thread-192498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:54:12.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:54:12.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:54:12.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:54:13.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 54, 6), 5.44101, 69.8232, 0.0, 21.7379, 14.5876, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:54:13.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:54:06
2026-04-12T16:54:14.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:54:14.205 [DEBUG] [Thread-192499] [transport.py] [_log()] starting thread (client mode): 0xae52f160
2026-04-12T16:54:14.205 [DEBUG] [Thread-192499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:54:14.225 [DEBUG] [Thread-192499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:54:14.225 [INFO] [Thread-192499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] client lang: <none>
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] server lang: <none>
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] kex follows: False
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] Compression: none
2026-04-12T16:54:14.228 [DEBUG] [Thread-192499] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:54:14.246 [DEBUG] [Thread-192499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:54:14.246 [DEBUG] [Thread-192499] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:54:14.247 [DEBUG] [Thread-192499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:54:14.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:54:14.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:54:14.249 [DEBUG] [Thread-192499] [transport.py] [_log()] userauth is OK
2026-04-12T16:54:14.249 [DEBUG] [Thread-192499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:54:14.249 [DEBUG] [Thread-192499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:54:14.250 [DEBUG] [Thread-192499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:54:14.250 [DEBUG] [Thread-192499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:54:14.284 [INFO] [Thread-192499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:54:14.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:54:14.906 [DEBUG] [Thread-192499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:54:14.906 [DEBUG] [Thread-192499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:54:14.906 [DEBUG] [Thread-192499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:54:14.947 [DEBUG] [Thread-192499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:54:14.947 [DEBUG] [Thread-192499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:54:14.951 [DEBUG] [Thread-192499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:54:14.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:54:14.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:54:14.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:54:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:54:14.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:54:14.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:54:14.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:54:14.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:54:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:54:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.620591 -999.00  +14.70  11.26     75  +10.30 1 2 1 1 1   887    0 3.14 -89.55 ----- 11.3 11.3 264.8 24.2 18.0 -24.7 18.0 -23.1 17.4 -21.0 17.8 -22.7
2026-04-12T16:54:14.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:54:14.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:54:14.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.620591
2026-04-12T16:54:14.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:54:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:54:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:54:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:54:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:54:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:54:06', tmtdew=5.44101, humidity=69.8232, cloud=0.0, wind=21.7379, temperature=14.5876, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:53:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:54:14.976 [DEBUG] [Thread-192499] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:54:15.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:54:15.069 [DEBUG] [Thread-192502] [transport.py] [_log()] starting thread (client mode): 0xae50afb0
2026-04-12T16:54:15.069 [DEBUG] [Thread-192502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:54:15.087 [DEBUG] [Thread-192502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:54:15.087 [INFO] [Thread-192502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:54:15.095 [DEBUG] [Thread-192502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:54:15.095 [DEBUG] [Thread-192502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:54:15.095 [DEBUG] [Thread-192502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:54:15.095 [DEBUG] [Thread-192502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:15.095 [DEBUG] [Thread-192502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:15.095 [DEBUG] [Thread-192502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] client lang: <none>
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] server lang: <none>
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] kex follows: False
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:54:15.096 [DEBUG] [Thread-192502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:54:15.097 [DEBUG] [Thread-192502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:54:15.097 [DEBUG] [Thread-192502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:54:15.097 [DEBUG] [Thread-192502] [transport.py] [_log()] Compression: none
2026-04-12T16:54:15.097 [DEBUG] [Thread-192502] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:54:15.157 [DEBUG] [Thread-192502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:54:15.158 [DEBUG] [Thread-192502] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:54:15.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:54:15.159 [DEBUG] [Thread-192502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:54:15.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:54:15.213 [DEBUG] [Thread-192502] [transport.py] [_log()] userauth is OK
2026-04-12T16:54:15.213 [DEBUG] [Thread-192502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:54:15.213 [DEBUG] [Thread-192502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:54:15.213 [DEBUG] [Thread-192502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:54:15.214 [DEBUG] [Thread-192502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:54:15.232 [INFO] [Thread-192502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:54:15.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:54:15.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:54:16.034 [DEBUG] [Thread-192502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:54:16.035 [DEBUG] [Thread-192502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:54:16.086 [DEBUG] [Thread-192502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:54:16.086 [DEBUG] [Thread-192502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:54:16.095 [DEBUG] [Thread-192502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:54:16.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:54:16.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:54:16.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:54:16.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:54:16.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:54:16.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:54:16.133 [DEBUG] [Thread-192502] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:54:20.584 [DEBUG] [Thread-192504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:54:35.640 [DEBUG] [Thread-192505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:54:46.104 [DEBUG] [Thread-192506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:54:46.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:54:46.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:54:46.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:54:47.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 54, 6), 5.44101, 69.8232, 0.0, 21.7379, 14.5876, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:54:47.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:54:06
2026-04-12T16:54:47.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:54:48.027 [DEBUG] [Thread-192507] [transport.py] [_log()] starting thread (client mode): 0xae5369e0
2026-04-12T16:54:48.027 [DEBUG] [Thread-192507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:54:48.048 [DEBUG] [Thread-192507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:54:48.048 [INFO] [Thread-192507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:54:48.051 [DEBUG] [Thread-192507] [transport.py] [_log()] client lang: <none>
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] server lang: <none>
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] kex follows: False
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] Compression: none
2026-04-12T16:54:48.052 [DEBUG] [Thread-192507] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:54:48.068 [DEBUG] [Thread-192507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:54:48.069 [DEBUG] [Thread-192507] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:54:48.069 [DEBUG] [Thread-192507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:54:48.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:54:48.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:54:48.071 [DEBUG] [Thread-192507] [transport.py] [_log()] userauth is OK
2026-04-12T16:54:48.072 [DEBUG] [Thread-192507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:54:48.072 [DEBUG] [Thread-192507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:54:48.072 [DEBUG] [Thread-192507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:54:48.072 [DEBUG] [Thread-192507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:54:48.096 [INFO] [Thread-192507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:54:48.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:54:48.663 [DEBUG] [Thread-192507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:54:48.663 [DEBUG] [Thread-192507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:54:48.663 [DEBUG] [Thread-192507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:54:48.704 [DEBUG] [Thread-192507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:54:48.704 [DEBUG] [Thread-192507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:54:48.708 [DEBUG] [Thread-192507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:54:48.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:54:48.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:54:48.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:54:48.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:54:48.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:54:48.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:54:48.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.621286 -999.00  +14.60  12.11     74  +10.20 1 2 1 1 1   887    0 2.86 -95.48 ----- 12.1 12.1 243.8 13.3 17.8 -24.7 17.9 -23.2 17.3 -20.6 17.6 -22.3
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.621286
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:54:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:54:06', tmtdew=5.44101, humidity=69.8232, cloud=0.0, wind=21.7379, temperature=14.5876, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:54:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:54:48.731 [DEBUG] [Thread-192507] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:54:48.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:54:48.812 [DEBUG] [Thread-192510] [transport.py] [_log()] starting thread (client mode): 0xae5370a0
2026-04-12T16:54:48.812 [DEBUG] [Thread-192510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:54:48.826 [DEBUG] [Thread-192510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:54:48.826 [INFO] [Thread-192510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] client lang: <none>
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] server lang: <none>
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] kex follows: False
2026-04-12T16:54:48.834 [DEBUG] [Thread-192510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:54:48.835 [DEBUG] [Thread-192510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:54:48.835 [DEBUG] [Thread-192510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:54:48.835 [DEBUG] [Thread-192510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:54:48.835 [DEBUG] [Thread-192510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:54:48.835 [DEBUG] [Thread-192510] [transport.py] [_log()] Compression: none
2026-04-12T16:54:48.835 [DEBUG] [Thread-192510] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:54:48.891 [DEBUG] [Thread-192510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:54:48.892 [DEBUG] [Thread-192510] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:54:48.893 [DEBUG] [Thread-192510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:54:48.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:54:48.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:54:48.948 [DEBUG] [Thread-192510] [transport.py] [_log()] userauth is OK
2026-04-12T16:54:48.948 [DEBUG] [Thread-192510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:54:48.948 [DEBUG] [Thread-192510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:54:48.948 [DEBUG] [Thread-192510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:54:48.948 [DEBUG] [Thread-192510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:54:48.966 [INFO] [Thread-192510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:54:48.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:54:48.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:54:49.796 [DEBUG] [Thread-192510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:54:49.797 [DEBUG] [Thread-192510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:54:49.844 [DEBUG] [Thread-192510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:54:49.844 [DEBUG] [Thread-192510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:54:49.854 [DEBUG] [Thread-192510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:54:49.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:54:49.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:54:49.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:54:49.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:54:49.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:54:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:54:49.891 [DEBUG] [Thread-192510] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:54:50.682 [DEBUG] [Thread-192512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:54:53.282 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:54:53.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:05.744 [DEBUG] [Thread-192513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:19.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:55:19.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:55:19.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:55:20.779 [DEBUG] [Thread-192514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 54, 41), 5.46788, 69.7127, 0.0, 20.5366, 14.8753, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:55:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:54:41
2026-04-12T16:55:21.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:55:21.838 [DEBUG] [Thread-192515] [transport.py] [_log()] starting thread (client mode): 0xae536200
2026-04-12T16:55:21.838 [DEBUG] [Thread-192515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:55:21.859 [DEBUG] [Thread-192515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:55:21.859 [INFO] [Thread-192515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] client lang: <none>
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] server lang: <none>
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] kex follows: False
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:55:21.861 [DEBUG] [Thread-192515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:55:21.862 [DEBUG] [Thread-192515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:55:21.862 [DEBUG] [Thread-192515] [transport.py] [_log()] Compression: none
2026-04-12T16:55:21.862 [DEBUG] [Thread-192515] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:55:21.877 [DEBUG] [Thread-192515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:55:21.878 [DEBUG] [Thread-192515] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:55:21.878 [DEBUG] [Thread-192515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:55:21.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:55:21.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:55:21.880 [DEBUG] [Thread-192515] [transport.py] [_log()] userauth is OK
2026-04-12T16:55:21.881 [DEBUG] [Thread-192515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:55:21.881 [DEBUG] [Thread-192515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:55:21.881 [DEBUG] [Thread-192515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:55:21.881 [DEBUG] [Thread-192515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:55:21.904 [INFO] [Thread-192515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:55:21.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:55:26.610 [DEBUG] [Thread-192515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:55:26.610 [DEBUG] [Thread-192515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:55:26.611 [DEBUG] [Thread-192515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:55:26.651 [DEBUG] [Thread-192515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:55:26.651 [DEBUG] [Thread-192515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:55:26.654 [DEBUG] [Thread-192515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:55:26.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:55:26.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:55:26.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:55:26.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:55:26.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:55:26.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:55:26.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:55:26.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:55:26.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:55:26.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.621286 -999.00  +14.60  12.11     74  +10.20 1 2 1 1 1   887    0 2.86 -95.48 ----- 12.1 12.1 243.8 13.3 17.8 -24.7 17.9 -23.2 17.3 -20.6 17.6 -22.3
2026-04-12T16:55:26.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:55:26.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:55:26.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.621286
2026-04-12T16:55:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:55:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:55:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:55:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:55:26.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:55:26.692 [DEBUG] [Thread-192515] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:55:26.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:54:41', tmtdew=5.46788, humidity=69.7127, cloud=0.0, wind=20.5366, temperature=14.8753, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:54:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:55:26.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:55:26.788 [DEBUG] [Thread-192518] [transport.py] [_log()] starting thread (client mode): 0xb0f40ee0
2026-04-12T16:55:26.788 [DEBUG] [Thread-192518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:55:26.807 [DEBUG] [Thread-192518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:55:26.808 [INFO] [Thread-192518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:55:26.815 [DEBUG] [Thread-192518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:55:26.815 [DEBUG] [Thread-192518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:55:26.815 [DEBUG] [Thread-192518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] client lang: <none>
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] server lang: <none>
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] kex follows: False
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] Compression: none
2026-04-12T16:55:26.816 [DEBUG] [Thread-192518] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:55:26.874 [DEBUG] [Thread-192518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:55:26.875 [DEBUG] [Thread-192518] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:55:26.875 [DEBUG] [Thread-192518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:55:26.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:55:26.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:55:26.936 [DEBUG] [Thread-192518] [transport.py] [_log()] userauth is OK
2026-04-12T16:55:26.936 [DEBUG] [Thread-192518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:55:26.937 [DEBUG] [Thread-192518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:55:26.937 [DEBUG] [Thread-192518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:55:26.937 [DEBUG] [Thread-192518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:55:26.955 [INFO] [Thread-192518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:55:26.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:55:26.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:55:27.825 [DEBUG] [Thread-192518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:55:27.825 [DEBUG] [Thread-192518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:55:27.874 [DEBUG] [Thread-192518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:55:27.874 [DEBUG] [Thread-192518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:55:27.883 [DEBUG] [Thread-192518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:55:27.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:55:27.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:55:27.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:55:27.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:55:27.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:55:27.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:55:27.917 [DEBUG] [Thread-192518] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:55:35.817 [DEBUG] [Thread-192520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:46.138 [DEBUG] [Thread-192521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:50.869 [DEBUG] [Thread-192522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:53.423 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:53.425 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:55:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:55:57.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:55:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:55:59.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 55, 17), 5.32554, 70.1217, 0.0, 16.8156, 14.4381, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:55:59.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:55:17
2026-04-12T16:55:59.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:55:59.751 [DEBUG] [Thread-192523] [transport.py] [_log()] starting thread (client mode): 0xae5f3940
2026-04-12T16:55:59.751 [DEBUG] [Thread-192523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:55:59.772 [DEBUG] [Thread-192523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:55:59.772 [INFO] [Thread-192523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] client lang: <none>
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] server lang: <none>
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] kex follows: False
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:55:59.773 [DEBUG] [Thread-192523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:55:59.774 [DEBUG] [Thread-192523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:55:59.774 [DEBUG] [Thread-192523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:55:59.774 [DEBUG] [Thread-192523] [transport.py] [_log()] Compression: none
2026-04-12T16:55:59.774 [DEBUG] [Thread-192523] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:55:59.790 [DEBUG] [Thread-192523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:55:59.791 [DEBUG] [Thread-192523] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:55:59.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:55:59.792 [DEBUG] [Thread-192523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:55:59.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:55:59.794 [DEBUG] [Thread-192523] [transport.py] [_log()] userauth is OK
2026-04-12T16:55:59.794 [DEBUG] [Thread-192523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:55:59.795 [DEBUG] [Thread-192523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:55:59.795 [DEBUG] [Thread-192523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:55:59.795 [DEBUG] [Thread-192523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:55:59.811 [INFO] [Thread-192523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:55:59.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:56:00.573 [DEBUG] [Thread-192523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:56:00.573 [DEBUG] [Thread-192523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:56:00.574 [DEBUG] [Thread-192523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:56:00.614 [DEBUG] [Thread-192523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:56:00.614 [DEBUG] [Thread-192523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:56:00.617 [DEBUG] [Thread-192523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:56:00.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:56:00.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:56:00.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:56:00.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:56:00.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:56:00.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:56:00.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:56:00.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.621980 -999.00  +14.60  16.35     74  +10.20 1 2 1 1 1   887    0 2.38 -113.40 ----- 16.4 16.4 255.0 20.2 17.7 -24.6 17.6 -23.0 17.1 -20.5 17.4 -22.5
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.621980
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:55:17', tmtdew=5.32554, humidity=70.1217, cloud=0.0, wind=16.8156, temperature=14.4381, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:55:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:56:00.636 [DEBUG] [Thread-192523] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:56:00.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:56:00.718 [DEBUG] [Thread-192526] [transport.py] [_log()] starting thread (client mode): 0xb0f43760
2026-04-12T16:56:00.718 [DEBUG] [Thread-192526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:56:00.732 [DEBUG] [Thread-192526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:56:00.732 [INFO] [Thread-192526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] client lang: <none>
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] server lang: <none>
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] kex follows: False
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] Compression: none
2026-04-12T16:56:00.741 [DEBUG] [Thread-192526] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:56:00.799 [DEBUG] [Thread-192526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:56:00.799 [DEBUG] [Thread-192526] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:56:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:56:00.800 [DEBUG] [Thread-192526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:56:00.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:56:00.856 [DEBUG] [Thread-192526] [transport.py] [_log()] userauth is OK
2026-04-12T16:56:00.856 [DEBUG] [Thread-192526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:56:00.856 [DEBUG] [Thread-192526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:56:00.856 [DEBUG] [Thread-192526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:56:00.857 [DEBUG] [Thread-192526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:56:00.876 [INFO] [Thread-192526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:56:00.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:56:00.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:56:01.690 [DEBUG] [Thread-192526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:56:01.690 [DEBUG] [Thread-192526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:56:01.739 [DEBUG] [Thread-192526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:56:01.740 [DEBUG] [Thread-192526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:56:01.749 [DEBUG] [Thread-192526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:56:01.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:56:01.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:56:01.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:56:01.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:56:01.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:56:01.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:56:01.786 [DEBUG] [Thread-192526] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:56:05.906 [DEBUG] [Thread-192528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:56:20.961 [DEBUG] [Thread-192529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:56:31.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:56:31.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:56:31.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:56:33.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 55, 52), 5.214, 70.906, 0.0, 17.9611, 14.8425, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:56:33.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:55:52
2026-04-12T16:56:33.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:56:33.690 [DEBUG] [Thread-192530] [transport.py] [_log()] starting thread (client mode): 0xae534c70
2026-04-12T16:56:33.691 [DEBUG] [Thread-192530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:56:33.701 [DEBUG] [Thread-192530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:56:33.701 [INFO] [Thread-192530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:56:33.703 [DEBUG] [Thread-192530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] client lang: <none>
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] server lang: <none>
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] kex follows: False
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] Compression: none
2026-04-12T16:56:33.704 [DEBUG] [Thread-192530] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:56:33.714 [DEBUG] [Thread-192530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:56:33.715 [DEBUG] [Thread-192530] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:56:33.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:56:33.715 [DEBUG] [Thread-192530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:56:33.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:56:33.716 [DEBUG] [Thread-192530] [transport.py] [_log()] userauth is OK
2026-04-12T16:56:33.716 [DEBUG] [Thread-192530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:56:33.716 [DEBUG] [Thread-192530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:56:33.717 [DEBUG] [Thread-192530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:56:33.717 [DEBUG] [Thread-192530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:56:33.729 [INFO] [Thread-192530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:56:33.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:56:34.304 [DEBUG] [Thread-192530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:56:34.304 [DEBUG] [Thread-192530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:56:34.304 [DEBUG] [Thread-192530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:56:34.345 [DEBUG] [Thread-192530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:56:34.345 [DEBUG] [Thread-192530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:56:34.348 [DEBUG] [Thread-192530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:56:34.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:56:34.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:56:34.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:56:34.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:56:34.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:56:34.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:56:34.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:56:34.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:56:34.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:56:34.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.622327 -999.00  +14.50  14.04     74  +10.00 1 2 1 1 1   887    0 2.02 -121.56 ----- 14.0 14.0 256.4 24.2 17.6 -24.7 17.6 -23.2 17.1 -20.4 17.3 -22.6
2026-04-12T16:56:34.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:56:34.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:56:34.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.622327
2026-04-12T16:56:34.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:56:34.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:56:34.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:56:34.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:56:34.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:56:34.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:55:52', tmtdew=5.214, humidity=70.906, cloud=0.0, wind=17.9611, temperature=14.8425, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:56:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:56:34.371 [DEBUG] [Thread-192530] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:56:34.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:56:34.465 [DEBUG] [Thread-192533] [transport.py] [_log()] starting thread (client mode): 0xae52c520
2026-04-12T16:56:34.465 [DEBUG] [Thread-192533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:56:34.481 [DEBUG] [Thread-192533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:56:34.481 [INFO] [Thread-192533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:56:34.490 [DEBUG] [Thread-192533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] client lang: <none>
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] server lang: <none>
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] kex follows: False
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] Compression: none
2026-04-12T16:56:34.491 [DEBUG] [Thread-192533] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:56:34.549 [DEBUG] [Thread-192533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:56:34.549 [DEBUG] [Thread-192533] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:56:34.550 [DEBUG] [Thread-192533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:56:34.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:56:34.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:56:34.605 [DEBUG] [Thread-192533] [transport.py] [_log()] userauth is OK
2026-04-12T16:56:34.606 [DEBUG] [Thread-192533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:56:34.606 [DEBUG] [Thread-192533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:56:34.606 [DEBUG] [Thread-192533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:56:34.606 [DEBUG] [Thread-192533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:56:34.625 [INFO] [Thread-192533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:56:34.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:56:34.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:56:35.441 [DEBUG] [Thread-192533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:56:35.441 [DEBUG] [Thread-192533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:56:35.490 [DEBUG] [Thread-192533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:56:35.490 [DEBUG] [Thread-192533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:56:35.501 [DEBUG] [Thread-192533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:56:35.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:56:35.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:56:35.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:56:35.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:56:35.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:56:35.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:56:35.542 [DEBUG] [Thread-192533] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:56:36.000 [DEBUG] [Thread-192535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:56:46.183 [DEBUG] [Thread-192536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:56:51.054 [DEBUG] [Thread-192537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:56:53.565 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:56:53.566 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:57:05.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:57:05.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:57:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:57:06.090 [DEBUG] [Thread-192538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:57:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 56, 28), 5.25414, 70.4698, 0.0, 15.0516, 14.438, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:57:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:56:28
2026-04-12T16:57:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:57:07.473 [DEBUG] [Thread-192539] [transport.py] [_log()] starting thread (client mode): 0xb0f6ca00
2026-04-12T16:57:07.473 [DEBUG] [Thread-192539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:57:07.493 [DEBUG] [Thread-192539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:57:07.493 [INFO] [Thread-192539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] client lang: <none>
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] server lang: <none>
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] kex follows: False
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] Compression: none
2026-04-12T16:57:07.495 [DEBUG] [Thread-192539] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:57:07.513 [DEBUG] [Thread-192539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:57:07.514 [DEBUG] [Thread-192539] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:57:07.514 [DEBUG] [Thread-192539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:57:07.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:57:07.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:57:07.516 [DEBUG] [Thread-192539] [transport.py] [_log()] userauth is OK
2026-04-12T16:57:07.516 [DEBUG] [Thread-192539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:57:07.516 [DEBUG] [Thread-192539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:57:07.517 [DEBUG] [Thread-192539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:57:07.517 [DEBUG] [Thread-192539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:57:07.536 [INFO] [Thread-192539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:57:07.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:57:08.162 [DEBUG] [Thread-192539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:57:08.162 [DEBUG] [Thread-192539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:57:08.163 [DEBUG] [Thread-192539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:57:08.204 [DEBUG] [Thread-192539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:57:08.204 [DEBUG] [Thread-192539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:57:08.206 [DEBUG] [Thread-192539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:57:08.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:57:08.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:57:08.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:57:08.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:57:08.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:57:08.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:57:08.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:57:08.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:57:08.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:57:08.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.622674 -999.00  +14.40  19.35     74   +9.90 1 2 1 1 1   887    0 1.92 -124.83 ----- 19.4 19.4 252.2 23.4 17.5 -24.5 17.4 -22.9 17.0 -20.4 17.2 -22.6
2026-04-12T16:57:08.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:57:08.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:57:08.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.622674
2026-04-12T16:57:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:57:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:57:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:57:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:57:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:57:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:56:28', tmtdew=5.25414, humidity=70.4698, cloud=0.0, wind=15.0516, temperature=14.438, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:56:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:57:08.225 [DEBUG] [Thread-192539] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:57:08.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:57:08.317 [DEBUG] [Thread-192542] [transport.py] [_log()] starting thread (client mode): 0xb0fcc070
2026-04-12T16:57:08.317 [DEBUG] [Thread-192542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:57:08.332 [DEBUG] [Thread-192542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:57:08.332 [INFO] [Thread-192542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] client lang: <none>
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] server lang: <none>
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] kex follows: False
2026-04-12T16:57:08.340 [DEBUG] [Thread-192542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:57:08.341 [DEBUG] [Thread-192542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:57:08.341 [DEBUG] [Thread-192542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:57:08.341 [DEBUG] [Thread-192542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:57:08.341 [DEBUG] [Thread-192542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:57:08.341 [DEBUG] [Thread-192542] [transport.py] [_log()] Compression: none
2026-04-12T16:57:08.341 [DEBUG] [Thread-192542] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:57:08.403 [DEBUG] [Thread-192542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:57:08.404 [DEBUG] [Thread-192542] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:57:08.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:57:08.405 [DEBUG] [Thread-192542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:57:08.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:57:08.464 [DEBUG] [Thread-192542] [transport.py] [_log()] userauth is OK
2026-04-12T16:57:08.464 [DEBUG] [Thread-192542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:57:08.464 [DEBUG] [Thread-192542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:57:08.464 [DEBUG] [Thread-192542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:57:08.465 [DEBUG] [Thread-192542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:57:08.492 [INFO] [Thread-192542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:57:08.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:57:08.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:57:09.300 [DEBUG] [Thread-192542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:57:09.300 [DEBUG] [Thread-192542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:57:09.348 [DEBUG] [Thread-192542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:57:09.348 [DEBUG] [Thread-192542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:57:09.358 [DEBUG] [Thread-192542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:57:09.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:57:09.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:57:09.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:57:09.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:57:09.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:57:09.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:57:09.392 [DEBUG] [Thread-192542] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:57:21.126 [DEBUG] [Thread-192544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:57:36.188 [DEBUG] [Thread-192545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:57:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:57:39.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:57:39.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:57:40.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 57, 3), 5.25565, 70.4532, 0.0, 16.6216, 14.3883, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:57:40.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:57:03
2026-04-12T16:57:41.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:57:41.285 [DEBUG] [Thread-192546] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T16:57:41.285 [DEBUG] [Thread-192546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:57:41.300 [DEBUG] [Thread-192546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:57:41.300 [INFO] [Thread-192546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:57:41.304 [DEBUG] [Thread-192546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:57:41.304 [DEBUG] [Thread-192546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] client lang: <none>
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] server lang: <none>
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] kex follows: False
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] Compression: none
2026-04-12T16:57:41.305 [DEBUG] [Thread-192546] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:57:41.315 [DEBUG] [Thread-192546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:57:41.315 [DEBUG] [Thread-192546] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:57:41.315 [DEBUG] [Thread-192546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:57:41.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:57:41.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:57:41.317 [DEBUG] [Thread-192546] [transport.py] [_log()] userauth is OK
2026-04-12T16:57:41.317 [DEBUG] [Thread-192546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:57:41.317 [DEBUG] [Thread-192546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:57:41.317 [DEBUG] [Thread-192546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:57:41.317 [DEBUG] [Thread-192546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:57:41.342 [INFO] [Thread-192546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:57:41.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:57:41.939 [DEBUG] [Thread-192546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:57:41.939 [DEBUG] [Thread-192546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:57:41.940 [DEBUG] [Thread-192546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:57:41.980 [DEBUG] [Thread-192546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:57:41.980 [DEBUG] [Thread-192546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:57:41.983 [DEBUG] [Thread-192546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:57:41.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:57:41.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:57:41.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:57:41.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:57:41.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:57:42.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:57:42.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:57:42.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:57:42.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:57:42.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.623022 -999.00  +14.40  12.97     75  +10.00 1 2 1 1 1   887    0 1.60 -134.11 ----- 13.0 13.0 255.0 17.9 17.4 -25.6 17.4 -22.9 16.9 -20.3 17.1 -22.1
2026-04-12T16:57:42.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:57:42.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:57:42.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.623022
2026-04-12T16:57:42.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:57:42.002 [DEBUG] [Thread-192546] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:57:42.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:57:42.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:57:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:57:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:57:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:57:03', tmtdew=5.25565, humidity=70.4532, cloud=0.0, wind=16.6216, temperature=14.3883, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:57:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:57:42.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:57:42.099 [DEBUG] [Thread-192549] [transport.py] [_log()] starting thread (client mode): 0xb0f41150
2026-04-12T16:57:42.099 [DEBUG] [Thread-192549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:57:42.115 [DEBUG] [Thread-192549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:57:42.115 [INFO] [Thread-192549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] client lang: <none>
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] server lang: <none>
2026-04-12T16:57:42.123 [DEBUG] [Thread-192549] [transport.py] [_log()] kex follows: False
2026-04-12T16:57:42.124 [DEBUG] [Thread-192549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:57:42.124 [DEBUG] [Thread-192549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:57:42.124 [DEBUG] [Thread-192549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:57:42.124 [DEBUG] [Thread-192549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:57:42.124 [DEBUG] [Thread-192549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:57:42.124 [DEBUG] [Thread-192549] [transport.py] [_log()] Compression: none
2026-04-12T16:57:42.124 [DEBUG] [Thread-192549] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:57:42.182 [DEBUG] [Thread-192549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:57:42.183 [DEBUG] [Thread-192549] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:57:42.183 [DEBUG] [Thread-192549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:57:42.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:57:42.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:57:42.245 [DEBUG] [Thread-192549] [transport.py] [_log()] userauth is OK
2026-04-12T16:57:42.245 [DEBUG] [Thread-192549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:57:42.245 [DEBUG] [Thread-192549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:57:42.245 [DEBUG] [Thread-192549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:57:42.246 [DEBUG] [Thread-192549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:57:42.265 [INFO] [Thread-192549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:57:42.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:57:42.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:57:43.109 [DEBUG] [Thread-192549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:57:43.110 [DEBUG] [Thread-192549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:57:43.158 [DEBUG] [Thread-192549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:57:43.158 [DEBUG] [Thread-192549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:57:43.167 [DEBUG] [Thread-192549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:57:43.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:57:43.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:57:43.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:57:43.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:57:43.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:57:43.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:57:43.203 [DEBUG] [Thread-192549] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:57:46.223 [DEBUG] [Thread-192551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:57:51.228 [DEBUG] [Thread-192552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:57:53.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:57:53.708 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:58:06.279 [DEBUG] [Thread-192553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:58:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:58:13.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:58:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:58:14.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 57, 39), 5.21388, 70.9067, 0.0, 22.5475, 14.8432, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:58:14.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:57:39
2026-04-12T16:58:14.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:58:15.034 [DEBUG] [Thread-192554] [transport.py] [_log()] starting thread (client mode): 0xae5f10c0
2026-04-12T16:58:15.034 [DEBUG] [Thread-192554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:58:15.053 [DEBUG] [Thread-192554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:58:15.053 [INFO] [Thread-192554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] client lang: <none>
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] server lang: <none>
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] kex follows: False
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:58:15.056 [DEBUG] [Thread-192554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:58:15.057 [DEBUG] [Thread-192554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:58:15.057 [DEBUG] [Thread-192554] [transport.py] [_log()] Compression: none
2026-04-12T16:58:15.057 [DEBUG] [Thread-192554] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:58:15.075 [DEBUG] [Thread-192554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:58:15.075 [DEBUG] [Thread-192554] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:58:15.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:58:15.076 [DEBUG] [Thread-192554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:58:15.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:58:15.079 [DEBUG] [Thread-192554] [transport.py] [_log()] userauth is OK
2026-04-12T16:58:15.079 [DEBUG] [Thread-192554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:58:15.079 [DEBUG] [Thread-192554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:58:15.080 [DEBUG] [Thread-192554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:58:15.080 [DEBUG] [Thread-192554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:58:15.104 [INFO] [Thread-192554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:58:15.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:58:15.729 [DEBUG] [Thread-192554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:58:15.730 [DEBUG] [Thread-192554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:58:15.730 [DEBUG] [Thread-192554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:58:15.771 [DEBUG] [Thread-192554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:58:15.771 [DEBUG] [Thread-192554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:58:15.776 [DEBUG] [Thread-192554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:58:15.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:58:15.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:58:15.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:58:15.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:58:15.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:58:15.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:58:15.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:58:15.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:58:15.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:58:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.623369 -999.00  +14.40   9.37     75  +10.20 1 2 1 1 1   887    0 1.50 -136.30 ----- 9.4 9.4 234.9 13.6 17.3 -24.3 17.3 -22.6 16.9 -20.4 17.1 -22.2
2026-04-12T16:58:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:58:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:58:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.623369
2026-04-12T16:58:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:58:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:58:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:58:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:58:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:58:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:57:39', tmtdew=5.21388, humidity=70.9067, cloud=0.0, wind=22.5475, temperature=14.8432, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:57:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:58:15.803 [DEBUG] [Thread-192554] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:58:15.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:58:15.896 [DEBUG] [Thread-192557] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T16:58:15.896 [DEBUG] [Thread-192557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:58:15.911 [DEBUG] [Thread-192557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:58:15.911 [INFO] [Thread-192557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:58:15.919 [DEBUG] [Thread-192557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:58:15.919 [DEBUG] [Thread-192557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:58:15.920 [DEBUG] [Thread-192557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:58:15.920 [DEBUG] [Thread-192557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:15.920 [DEBUG] [Thread-192557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:15.920 [DEBUG] [Thread-192557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:15.920 [DEBUG] [Thread-192557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:15.920 [DEBUG] [Thread-192557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:58:15.920 [DEBUG] [Thread-192557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] client lang: <none>
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] server lang: <none>
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] kex follows: False
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] Compression: none
2026-04-12T16:58:15.921 [DEBUG] [Thread-192557] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:58:15.976 [DEBUG] [Thread-192557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:58:15.976 [DEBUG] [Thread-192557] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:58:15.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:58:15.977 [DEBUG] [Thread-192557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:58:15.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:58:16.033 [DEBUG] [Thread-192557] [transport.py] [_log()] userauth is OK
2026-04-12T16:58:16.033 [DEBUG] [Thread-192557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:58:16.033 [DEBUG] [Thread-192557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:58:16.033 [DEBUG] [Thread-192557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:58:16.034 [DEBUG] [Thread-192557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:58:16.057 [INFO] [Thread-192557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:58:16.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:58:16.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:58:16.953 [DEBUG] [Thread-192557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:58:16.953 [DEBUG] [Thread-192557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:58:17.001 [DEBUG] [Thread-192557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:58:17.001 [DEBUG] [Thread-192557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:58:17.011 [DEBUG] [Thread-192557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:58:17.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:58:17.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:58:17.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:58:17.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:58:17.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:58:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:58:17.047 [DEBUG] [Thread-192557] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:58:21.317 [DEBUG] [Thread-192559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:58:36.375 [DEBUG] [Thread-192560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:58:46.267 [DEBUG] [Thread-192561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:58:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:58:47.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:58:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:58:48.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 58, 15), 5.24303, 71.0196, 0.0, 16.2688, 14.4716, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:58:48.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:58:15
2026-04-12T16:58:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:58:48.903 [DEBUG] [Thread-192562] [transport.py] [_log()] starting thread (client mode): 0xb0fcefe0
2026-04-12T16:58:48.903 [DEBUG] [Thread-192562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:58:48.922 [DEBUG] [Thread-192562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:58:48.922 [INFO] [Thread-192562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:58:48.925 [DEBUG] [Thread-192562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:58:48.925 [DEBUG] [Thread-192562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:58:48.925 [DEBUG] [Thread-192562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] client lang: <none>
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] server lang: <none>
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] kex follows: False
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] Compression: none
2026-04-12T16:58:48.926 [DEBUG] [Thread-192562] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:58:48.943 [DEBUG] [Thread-192562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:58:48.944 [DEBUG] [Thread-192562] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:58:48.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:58:48.945 [DEBUG] [Thread-192562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:58:48.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:58:48.948 [DEBUG] [Thread-192562] [transport.py] [_log()] userauth is OK
2026-04-12T16:58:48.948 [DEBUG] [Thread-192562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:58:48.948 [DEBUG] [Thread-192562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:58:48.949 [DEBUG] [Thread-192562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:58:48.949 [DEBUG] [Thread-192562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:58:48.968 [INFO] [Thread-192562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:58:48.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:58:49.603 [DEBUG] [Thread-192562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:58:49.603 [DEBUG] [Thread-192562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:58:49.603 [DEBUG] [Thread-192562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:58:49.644 [DEBUG] [Thread-192562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:58:49.644 [DEBUG] [Thread-192562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:58:49.646 [DEBUG] [Thread-192562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:58:49.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:58:49.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:58:49.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:58:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:58:49.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:58:49.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:58:49.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:58:49.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:58:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:58:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.624063 -999.00  +14.40  10.71     76  +10.30 1 2 1 1 1   887    0 1.62 -127.36 ----- 10.7 10.7 240.1 16.4 17.1 -24.1 17.1 -22.6 16.7 -20.1 17.0 -22.3
2026-04-12T16:58:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:58:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:58:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.624063
2026-04-12T16:58:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:58:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:58:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:58:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:58:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:58:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:58:15', tmtdew=5.24303, humidity=71.0196, cloud=0.0, wind=16.2688, temperature=14.4716, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:58:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:58:49.673 [DEBUG] [Thread-192562] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:58:49.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:58:49.773 [DEBUG] [Thread-192565] [transport.py] [_log()] starting thread (client mode): 0xb0fcef50
2026-04-12T16:58:49.773 [DEBUG] [Thread-192565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:58:49.787 [DEBUG] [Thread-192565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:58:49.788 [INFO] [Thread-192565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:58:49.795 [DEBUG] [Thread-192565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:58:49.795 [DEBUG] [Thread-192565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:58:49.795 [DEBUG] [Thread-192565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] client lang: <none>
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] server lang: <none>
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] kex follows: False
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:58:49.796 [DEBUG] [Thread-192565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:58:49.797 [DEBUG] [Thread-192565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:58:49.797 [DEBUG] [Thread-192565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:58:49.797 [DEBUG] [Thread-192565] [transport.py] [_log()] Compression: none
2026-04-12T16:58:49.797 [DEBUG] [Thread-192565] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:58:49.855 [DEBUG] [Thread-192565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:58:49.856 [DEBUG] [Thread-192565] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:58:49.857 [DEBUG] [Thread-192565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:58:49.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:58:49.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:58:49.911 [DEBUG] [Thread-192565] [transport.py] [_log()] userauth is OK
2026-04-12T16:58:49.911 [DEBUG] [Thread-192565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:58:49.911 [DEBUG] [Thread-192565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:58:49.911 [DEBUG] [Thread-192565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:58:49.912 [DEBUG] [Thread-192565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:58:49.934 [INFO] [Thread-192565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:58:49.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:58:49.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:58:50.795 [DEBUG] [Thread-192565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:58:50.795 [DEBUG] [Thread-192565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:58:50.842 [DEBUG] [Thread-192565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:58:50.843 [DEBUG] [Thread-192565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:58:50.852 [DEBUG] [Thread-192565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:58:50.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:58:50.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:58:50.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:58:50.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:58:50.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:58:50.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:58:50.889 [DEBUG] [Thread-192565] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:58:51.413 [DEBUG] [Thread-192567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:58:53.851 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:58:53.852 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:06.465 [DEBUG] [Thread-192568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:20.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:59:20.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:59:20.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:59:21.504 [DEBUG] [Thread-192569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 58, 51), 5.16259, 71.1389, 0.0, 19.4782, 14.7771, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:59:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:58:51
2026-04-12T16:59:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:59:22.717 [DEBUG] [Thread-192570] [transport.py] [_log()] starting thread (client mode): 0xae5f29e0
2026-04-12T16:59:22.717 [DEBUG] [Thread-192570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:59:22.739 [DEBUG] [Thread-192570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:59:22.739 [INFO] [Thread-192570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] client lang: <none>
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] server lang: <none>
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] kex follows: False
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] Compression: none
2026-04-12T16:59:22.742 [DEBUG] [Thread-192570] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:59:22.759 [DEBUG] [Thread-192570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:59:22.759 [DEBUG] [Thread-192570] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:59:22.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:59:22.760 [DEBUG] [Thread-192570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:59:22.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:59:22.770 [DEBUG] [Thread-192570] [transport.py] [_log()] userauth is OK
2026-04-12T16:59:22.770 [DEBUG] [Thread-192570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:59:22.770 [DEBUG] [Thread-192570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:59:22.771 [DEBUG] [Thread-192570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:59:22.771 [DEBUG] [Thread-192570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:59:22.794 [INFO] [Thread-192570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:59:22.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:59:23.453 [DEBUG] [Thread-192570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:59:23.454 [DEBUG] [Thread-192570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:59:23.454 [DEBUG] [Thread-192570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:59:23.495 [DEBUG] [Thread-192570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:59:23.495 [DEBUG] [Thread-192570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:59:23.498 [DEBUG] [Thread-192570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:59:23.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:59:23.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:59:23.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:59:23.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:59:23.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:59:23.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:59:23.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:59:23.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:59:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:59:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.624410 -999.00  +14.40  18.01     76  +10.30 1 2 1 1 1   887    0 1.54 -129.31 ----- 18.0 18.0 242.8 22.1 17.1 -24.1 17.1 -22.5 16.7 -20.1 16.9 -22.2
2026-04-12T16:59:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:59:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:59:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.624410
2026-04-12T16:59:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:59:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:59:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:59:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:59:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:59:23.523 [DEBUG] [Thread-192570] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:59:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:58:51', tmtdew=5.16259, humidity=71.1389, cloud=0.0, wind=19.4782, temperature=14.7771, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:59:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:59:23.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:59:23.617 [DEBUG] [Thread-192573] [transport.py] [_log()] starting thread (client mode): 0xae52d210
2026-04-12T16:59:23.617 [DEBUG] [Thread-192573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:59:23.632 [DEBUG] [Thread-192573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:59:23.632 [INFO] [Thread-192573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:23.640 [DEBUG] [Thread-192573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] client lang: <none>
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] server lang: <none>
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] kex follows: False
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:59:23.641 [DEBUG] [Thread-192573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:59:23.642 [DEBUG] [Thread-192573] [transport.py] [_log()] Compression: none
2026-04-12T16:59:23.642 [DEBUG] [Thread-192573] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:59:23.696 [DEBUG] [Thread-192573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:59:23.697 [DEBUG] [Thread-192573] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:59:23.697 [DEBUG] [Thread-192573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:59:23.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:59:23.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:59:23.752 [DEBUG] [Thread-192573] [transport.py] [_log()] userauth is OK
2026-04-12T16:59:23.752 [DEBUG] [Thread-192573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:59:23.752 [DEBUG] [Thread-192573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:59:23.752 [DEBUG] [Thread-192573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:59:23.752 [DEBUG] [Thread-192573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:59:23.771 [INFO] [Thread-192573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:59:23.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:59:23.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:59:24.607 [DEBUG] [Thread-192573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:59:24.608 [DEBUG] [Thread-192573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:59:24.655 [DEBUG] [Thread-192573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:59:24.656 [DEBUG] [Thread-192573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:59:24.664 [DEBUG] [Thread-192573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:59:24.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:59:24.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')
2026-04-12T16:59:24.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:59:24.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:59:24.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:59:24.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:59:24.698 [DEBUG] [Thread-192573] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:59:36.537 [DEBUG] [Thread-192575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:46.300 [DEBUG] [Thread-192576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:51.592 [DEBUG] [Thread-192577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:53.992 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:53.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T16:59:54.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T16:59:54.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T16:59:54.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T16:59:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 16, 59, 26), 5.08224, 71.3014, 0.0, 19.2154, 14.372, 0, 0, 0, 2, 0, 0),)
2026-04-12T16:59:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 16:59:26
2026-04-12T16:59:56.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T16:59:56.589 [DEBUG] [Thread-192578] [transport.py] [_log()] starting thread (client mode): 0xb0f40c40
2026-04-12T16:59:56.589 [DEBUG] [Thread-192578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:59:56.609 [DEBUG] [Thread-192578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T16:59:56.610 [INFO] [Thread-192578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] client lang: <none>
2026-04-12T16:59:56.622 [DEBUG] [Thread-192578] [transport.py] [_log()] server lang: <none>
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] kex follows: False
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] Compression: none
2026-04-12T16:59:56.623 [DEBUG] [Thread-192578] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:59:56.643 [DEBUG] [Thread-192578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:59:56.644 [DEBUG] [Thread-192578] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:59:56.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T16:59:56.645 [DEBUG] [Thread-192578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T16:59:56.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:59:56.647 [DEBUG] [Thread-192578] [transport.py] [_log()] userauth is OK
2026-04-12T16:59:56.648 [DEBUG] [Thread-192578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:59:56.648 [DEBUG] [Thread-192578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:59:56.648 [DEBUG] [Thread-192578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T16:59:56.648 [DEBUG] [Thread-192578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:59:56.673 [INFO] [Thread-192578] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:59:56.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:59:57.308 [DEBUG] [Thread-192578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:59:57.308 [DEBUG] [Thread-192578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:59:57.309 [DEBUG] [Thread-192578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T16:59:57.349 [DEBUG] [Thread-192578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:59:57.350 [DEBUG] [Thread-192578] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:59:57.353 [DEBUG] [Thread-192578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:59:57.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:59:57.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T16:59:57.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T16:59:57.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T16:59:57.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:59:57.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T16:59:57.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:59:57.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:59:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T16:59:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.624758 -999.00  +14.40   8.01     76  +10.20 1 2 1 1 1   887    0 1.79 -122.91 ----- 8.0 8.0 236.0 21.1 17.0 -23.5 16.9 -22.2 16.6 -19.7 16.9 -21.9
2026-04-12T16:59:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T16:59:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T16:59:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.624758
2026-04-12T16:59:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T16:59:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T16:59:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T16:59:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T16:59:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T16:59:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T16:59:26', tmtdew=5.08224, humidity=71.3014, cloud=0.0, wind=19.2154, temperature=14.372, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T14:59:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T16:59:57.381 [DEBUG] [Thread-192578] [transport.py] [_log()] EOF in transport thread
2026-04-12T16:59:57.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T16:59:57.473 [DEBUG] [Thread-192581] [transport.py] [_log()] starting thread (client mode): 0xa79385b0
2026-04-12T16:59:57.474 [DEBUG] [Thread-192581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T16:59:57.488 [DEBUG] [Thread-192581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T16:59:57.488 [INFO] [Thread-192581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] client lang: <none>
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] server lang: <none>
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] kex follows: False
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] Compression: none
2026-04-12T16:59:57.495 [DEBUG] [Thread-192581] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T16:59:57.554 [DEBUG] [Thread-192581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T16:59:57.554 [DEBUG] [Thread-192581] [transport.py] [_log()] Switch to new keys ...
2026-04-12T16:59:57.555 [DEBUG] [Thread-192581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T16:59:57.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T16:59:57.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T16:59:57.610 [DEBUG] [Thread-192581] [transport.py] [_log()] userauth is OK
2026-04-12T16:59:57.610 [DEBUG] [Thread-192581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T16:59:57.610 [DEBUG] [Thread-192581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T16:59:57.610 [DEBUG] [Thread-192581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T16:59:57.610 [DEBUG] [Thread-192581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T16:59:57.634 [INFO] [Thread-192581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T16:59:57.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T16:59:57.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T16:59:58.434 [DEBUG] [Thread-192581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T16:59:58.434 [DEBUG] [Thread-192581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T16:59:58.482 [DEBUG] [Thread-192581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T16:59:58.482 [DEBUG] [Thread-192581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T16:59:58.492 [DEBUG] [Thread-192581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T16:59:58.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T16:59:58.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T16:59:58.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T16:59:58.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T16:59:58.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T16:59:58.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T16:59:58.529 [DEBUG] [Thread-192581] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:00:06.627 [DEBUG] [Thread-192583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:00:21.667 [DEBUG] [Thread-192584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:00:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:00:28.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:00:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:00:29.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 0, 1), 5.06623, 71.3846, 0.0, 20.7324, 14.4055, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:00:29.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:00:01
2026-04-12T17:00:30.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:00:30.344 [DEBUG] [Thread-192585] [transport.py] [_log()] starting thread (client mode): 0xa793aef0
2026-04-12T17:00:30.344 [DEBUG] [Thread-192585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:00:30.363 [DEBUG] [Thread-192585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:00:30.363 [INFO] [Thread-192585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:00:30.365 [DEBUG] [Thread-192585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:00:30.365 [DEBUG] [Thread-192585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:00:30.365 [DEBUG] [Thread-192585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:00:30.365 [DEBUG] [Thread-192585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:00:30.365 [DEBUG] [Thread-192585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:00:30.365 [DEBUG] [Thread-192585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:00:30.365 [DEBUG] [Thread-192585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] client lang: <none>
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] server lang: <none>
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] kex follows: False
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] Compression: none
2026-04-12T17:00:30.366 [DEBUG] [Thread-192585] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:00:30.383 [DEBUG] [Thread-192585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:00:30.384 [DEBUG] [Thread-192585] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:00:30.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:00:30.385 [DEBUG] [Thread-192585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:00:30.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:00:30.387 [DEBUG] [Thread-192585] [transport.py] [_log()] userauth is OK
2026-04-12T17:00:30.387 [DEBUG] [Thread-192585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:00:30.387 [DEBUG] [Thread-192585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:00:30.387 [DEBUG] [Thread-192585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:00:30.388 [DEBUG] [Thread-192585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:00:30.411 [INFO] [Thread-192585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:00:30.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:00:36.706 [DEBUG] [Thread-192587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:00:36.878 [DEBUG] [Thread-192585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:00:36.879 [DEBUG] [Thread-192585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:00:36.879 [DEBUG] [Thread-192585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:00:36.920 [DEBUG] [Thread-192585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:00:36.920 [DEBUG] [Thread-192585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:00:36.923 [DEBUG] [Thread-192585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:00:36.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:00:36.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:00:36.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:00:36.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:00:37.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:00:37.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:00:37.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:00:37.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:00:37.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:00:37.046 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T17:00:37.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:00:01', tmtdew=5.06623, humidity=71.3846, cloud=0.0, wind=20.7324, temperature=14.4055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:00:37.047 [DEBUG] [Thread-192585] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:00:37.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:00:37.144 [DEBUG] [Thread-192589] [transport.py] [_log()] starting thread (client mode): 0xae5a5f30
2026-04-12T17:00:37.144 [DEBUG] [Thread-192589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:00:37.158 [DEBUG] [Thread-192589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:00:37.158 [INFO] [Thread-192589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:00:37.165 [DEBUG] [Thread-192589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:00:37.166 [DEBUG] [Thread-192589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] client lang: <none>
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] server lang: <none>
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] kex follows: False
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:00:37.167 [DEBUG] [Thread-192589] [transport.py] [_log()] Compression: none
2026-04-12T17:00:37.168 [DEBUG] [Thread-192589] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:00:37.222 [DEBUG] [Thread-192589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:00:37.222 [DEBUG] [Thread-192589] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:00:37.222 [DEBUG] [Thread-192589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:00:37.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:00:37.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:00:37.279 [DEBUG] [Thread-192589] [transport.py] [_log()] userauth is OK
2026-04-12T17:00:37.280 [DEBUG] [Thread-192589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:00:37.280 [DEBUG] [Thread-192589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:00:37.280 [DEBUG] [Thread-192589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:00:37.281 [DEBUG] [Thread-192589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:00:37.300 [INFO] [Thread-192589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:00:37.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:00:37.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:00:38.119 [DEBUG] [Thread-192589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:00:38.120 [DEBUG] [Thread-192589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:00:38.168 [DEBUG] [Thread-192589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:00:38.168 [DEBUG] [Thread-192589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:00:38.177 [DEBUG] [Thread-192589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:00:38.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:00: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')
2026-04-12T17:00:38.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:00:38.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:00:38.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:00:38.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:00:38.216 [DEBUG] [Thread-192589] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:00:46.338 [DEBUG] [Thread-192591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:00:51.745 [DEBUG] [Thread-192592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:00:54.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:00:54.143 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:01:06.799 [DEBUG] [Thread-192593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:01:08.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:01:08.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:01:08.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:01:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 0, 37), 5.03554, 71.7361, 0.0, 22.2653, 14.7116, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:01:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:00:37
2026-04-12T17:01:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:01:10.090 [DEBUG] [Thread-192594] [transport.py] [_log()] starting thread (client mode): 0xae5a4070
2026-04-12T17:01:10.090 [DEBUG] [Thread-192594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:01:10.110 [DEBUG] [Thread-192594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:01:10.110 [INFO] [Thread-192594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] client lang: <none>
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] server lang: <none>
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] kex follows: False
2026-04-12T17:01:10.112 [DEBUG] [Thread-192594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:01:10.113 [DEBUG] [Thread-192594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:01:10.113 [DEBUG] [Thread-192594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:01:10.113 [DEBUG] [Thread-192594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:01:10.113 [DEBUG] [Thread-192594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:01:10.113 [DEBUG] [Thread-192594] [transport.py] [_log()] Compression: none
2026-04-12T17:01:10.113 [DEBUG] [Thread-192594] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:01:10.122 [DEBUG] [Thread-192594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:01:10.123 [DEBUG] [Thread-192594] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:01:10.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:01:10.124 [DEBUG] [Thread-192594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:01:10.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:01:10.126 [DEBUG] [Thread-192594] [transport.py] [_log()] userauth is OK
2026-04-12T17:01:10.127 [DEBUG] [Thread-192594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:01:10.127 [DEBUG] [Thread-192594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:01:10.127 [DEBUG] [Thread-192594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:01:10.127 [DEBUG] [Thread-192594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:01:10.164 [INFO] [Thread-192594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:01:10.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:01:10.915 [DEBUG] [Thread-192594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:01:10.916 [DEBUG] [Thread-192594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:01:10.916 [DEBUG] [Thread-192594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:01:10.957 [DEBUG] [Thread-192594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:01:10.957 [DEBUG] [Thread-192594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:01:10.961 [DEBUG] [Thread-192594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:01:10.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:01:10.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:01:10.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:01:10.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:01:10.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:01:10.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:01:10.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:01:10.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:01:10.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:01:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.625452 -999.00  +14.40  11.09     76  +10.30 1 2 1 1 1   887    0 1.03 -143.91 ----- 11.1 11.1 237.1 16.5 16.9 -23.0 16.8 -22.5 16.5 -19.9 16.8 -21.4
2026-04-12T17:01:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:01:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:01:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.625452
2026-04-12T17:01:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:01:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:01:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:01:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:01:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:01:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:00:37', tmtdew=5.03554, humidity=71.7361, cloud=0.0, wind=22.2653, temperature=14.7116, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:00:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:01:10.987 [DEBUG] [Thread-192594] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:01:11.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:01:11.088 [DEBUG] [Thread-192597] [transport.py] [_log()] starting thread (client mode): 0xae5a4610
2026-04-12T17:01:11.088 [DEBUG] [Thread-192597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:01:11.103 [DEBUG] [Thread-192597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:01:11.103 [INFO] [Thread-192597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] client lang: <none>
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] server lang: <none>
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] kex follows: False
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] Compression: none
2026-04-12T17:01:11.111 [DEBUG] [Thread-192597] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:01:11.168 [DEBUG] [Thread-192597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:01:11.169 [DEBUG] [Thread-192597] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:01:11.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:01:11.170 [DEBUG] [Thread-192597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:01:11.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:01:11.224 [DEBUG] [Thread-192597] [transport.py] [_log()] userauth is OK
2026-04-12T17:01:11.224 [DEBUG] [Thread-192597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:01:11.225 [DEBUG] [Thread-192597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:01:11.225 [DEBUG] [Thread-192597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:01:11.225 [DEBUG] [Thread-192597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:01:11.244 [INFO] [Thread-192597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:01:11.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:01:11.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:01:12.049 [DEBUG] [Thread-192597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:01:12.049 [DEBUG] [Thread-192597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:01:12.097 [DEBUG] [Thread-192597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:01:12.097 [DEBUG] [Thread-192597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:01:12.106 [DEBUG] [Thread-192597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:01:12.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:01: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')
2026-04-12T17:01:12.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:01:12.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:01:12.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:01:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:01:12.144 [DEBUG] [Thread-192597] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:01:21.834 [DEBUG] [Thread-192599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:01:36.884 [DEBUG] [Thread-192600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:01:42.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:01:42.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:01:42.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:01:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 1, 12), 5.01025, 71.9012, 0.0, 17.3272, 14.2892, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:01:43.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:01:12
2026-04-12T17:01:43.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:01:43.958 [DEBUG] [Thread-192601] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-12T17:01:43.958 [DEBUG] [Thread-192601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:01:43.970 [DEBUG] [Thread-192601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:01:43.970 [INFO] [Thread-192601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] client lang: <none>
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] server lang: <none>
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] kex follows: False
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] Compression: none
2026-04-12T17:01:43.974 [DEBUG] [Thread-192601] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:01:43.992 [DEBUG] [Thread-192601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:01:43.993 [DEBUG] [Thread-192601] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:01:43.993 [DEBUG] [Thread-192601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:01:43.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:01:43.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:01:43.995 [DEBUG] [Thread-192601] [transport.py] [_log()] userauth is OK
2026-04-12T17:01:43.995 [DEBUG] [Thread-192601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:01:43.995 [DEBUG] [Thread-192601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:01:43.996 [DEBUG] [Thread-192601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:01:43.996 [DEBUG] [Thread-192601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:01:44.012 [INFO] [Thread-192601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:01:44.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:01:44.601 [DEBUG] [Thread-192601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:01:44.602 [DEBUG] [Thread-192601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:01:44.602 [DEBUG] [Thread-192601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:01:44.642 [DEBUG] [Thread-192601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:01:44.642 [DEBUG] [Thread-192601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:01:44.646 [DEBUG] [Thread-192601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:01:44.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:01:44.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:01:44.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:01:44.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:01:44.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:01:44.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:01:44.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:01:44.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:01:44.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:01:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.626146 -999.00  +14.40  15.21     76  +10.30 1 2 1 1 1   887    0 0.49 -157.29 ----- 15.2 15.2 262.8 19.9 16.8 -23.1 16.7 -22.3 16.4 -19.6 16.8 -21.9
2026-04-12T17:01:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:01:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:01:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.626146
2026-04-12T17:01:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:01:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:01:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:01:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:01:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:01:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:01:12', tmtdew=5.01025, humidity=71.9012, cloud=0.0, wind=17.3272, temperature=14.2892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:01:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:01:44.668 [DEBUG] [Thread-192601] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:01:44.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:01:44.766 [DEBUG] [Thread-192604] [transport.py] [_log()] starting thread (client mode): 0xa7939fc0
2026-04-12T17:01:44.766 [DEBUG] [Thread-192604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:01:44.780 [DEBUG] [Thread-192604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:01:44.781 [INFO] [Thread-192604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:01:44.788 [DEBUG] [Thread-192604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:01:44.788 [DEBUG] [Thread-192604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:01:44.788 [DEBUG] [Thread-192604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:01:44.788 [DEBUG] [Thread-192604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] client lang: <none>
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] server lang: <none>
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] kex follows: False
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] Compression: none
2026-04-12T17:01:44.789 [DEBUG] [Thread-192604] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:01:44.845 [DEBUG] [Thread-192604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:01:44.846 [DEBUG] [Thread-192604] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:01:44.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:01:44.847 [DEBUG] [Thread-192604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:01:44.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:01:44.901 [DEBUG] [Thread-192604] [transport.py] [_log()] userauth is OK
2026-04-12T17:01:44.902 [DEBUG] [Thread-192604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:01:44.902 [DEBUG] [Thread-192604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:01:44.902 [DEBUG] [Thread-192604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:01:44.902 [DEBUG] [Thread-192604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:01:44.921 [INFO] [Thread-192604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:01:44.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:01:44.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:01:45.743 [DEBUG] [Thread-192604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:01:45.744 [DEBUG] [Thread-192604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:01:45.792 [DEBUG] [Thread-192604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:01:45.792 [DEBUG] [Thread-192604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:01:45.800 [DEBUG] [Thread-192604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:01:45.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:01:45.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:01:45.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:01:45.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:01:45.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:01:45.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:01:45.834 [DEBUG] [Thread-192604] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:01:46.372 [DEBUG] [Thread-192606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:01:51.919 [DEBUG] [Thread-192607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:01:54.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:01:54.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:02:06.972 [DEBUG] [Thread-192608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:02:15.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:02:15.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:02:15.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:02:17.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 1, 48), 4.9549, 72.1012, 0.0, 18.455, 14.5796, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:02:17.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:01:48
2026-04-12T17:02:17.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:02:17.617 [DEBUG] [Thread-192609] [transport.py] [_log()] starting thread (client mode): 0xae5a4370
2026-04-12T17:02:17.618 [DEBUG] [Thread-192609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:02:17.635 [DEBUG] [Thread-192609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:02:17.635 [INFO] [Thread-192609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:02:17.636 [DEBUG] [Thread-192609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:02:17.636 [DEBUG] [Thread-192609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:02:17.636 [DEBUG] [Thread-192609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:02:17.636 [DEBUG] [Thread-192609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:02:17.636 [DEBUG] [Thread-192609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:02:17.636 [DEBUG] [Thread-192609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:02:17.636 [DEBUG] [Thread-192609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] client lang: <none>
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] server lang: <none>
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] kex follows: False
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] Compression: none
2026-04-12T17:02:17.637 [DEBUG] [Thread-192609] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:02:17.646 [DEBUG] [Thread-192609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:02:17.646 [DEBUG] [Thread-192609] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:02:17.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:02:17.647 [DEBUG] [Thread-192609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:02:17.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:02:17.649 [DEBUG] [Thread-192609] [transport.py] [_log()] userauth is OK
2026-04-12T17:02:17.649 [DEBUG] [Thread-192609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:02:17.649 [DEBUG] [Thread-192609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:02:17.649 [DEBUG] [Thread-192609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:02:17.649 [DEBUG] [Thread-192609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:02:17.677 [INFO] [Thread-192609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:02:17.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:02:18.276 [DEBUG] [Thread-192609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:02:18.276 [DEBUG] [Thread-192609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:02:18.277 [DEBUG] [Thread-192609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:02:18.318 [DEBUG] [Thread-192609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:02:18.318 [DEBUG] [Thread-192609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:02:18.321 [DEBUG] [Thread-192609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:02:18.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:02:18.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:02:18.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:02:18.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:02:18.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:02:18.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:02:18.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:02:18.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:02:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:02:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.626494 -999.00  +14.30  18.00     76  +10.30 1 2 1 1 1   887    0 0.79 -143.19 ----- 18.0 18.0 247.6 24.8 16.7 -23.9 16.7 -21.9 16.4 -20.0 16.7 -22.0
2026-04-12T17:02:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:02:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:02:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.626494
2026-04-12T17:02:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:02:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:02:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:02:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:02:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:02:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:01:48', tmtdew=4.9549, humidity=72.1012, cloud=0.0, wind=18.455, temperature=14.5796, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:02:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:02:18.340 [DEBUG] [Thread-192609] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:02:18.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:02:22.009 [DEBUG] [Thread-192612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:02:37.070 [DEBUG] [Thread-192613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:02:46.424 [DEBUG] [Thread-192614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:02:52.111 [DEBUG] [Thread-192615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:02:54.425 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:02:54.426 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:03:07.148 [DEBUG] [Thread-192616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:03:22.181 [DEBUG] [Thread-192617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:03:37.220 [DEBUG] [Thread-192618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:03:46.474 [DEBUG] [Thread-192619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:03:52.257 [DEBUG] [Thread-192620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:03:54.565 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:03:54.568 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:04:07.298 [DEBUG] [Thread-192621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:04:22.337 [DEBUG] [Thread-192622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:04:30.591 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T17:04:37.376 [DEBUG] [Thread-192623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:04:46.517 [DEBUG] [Thread-192624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:04:52.413 [DEBUG] [Thread-192625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:04:54.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:04:54.709 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:05:00.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:05:00.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:05:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:05:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 4, 45), 4.989, 71.9364, 0.0, 25.2288, 14.5804, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:05:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:04:45
2026-04-12T17:05:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:05:02.559 [DEBUG] [Thread-192626] [transport.py] [_log()] starting thread (client mode): 0xae5a4c40
2026-04-12T17:05:02.559 [DEBUG] [Thread-192626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:05:02.580 [DEBUG] [Thread-192626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:05:02.580 [INFO] [Thread-192626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] client lang: <none>
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] server lang: <none>
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] kex follows: False
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:05:02.584 [DEBUG] [Thread-192626] [transport.py] [_log()] Compression: none
2026-04-12T17:05:02.585 [DEBUG] [Thread-192626] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:05:02.599 [DEBUG] [Thread-192626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:05:02.599 [DEBUG] [Thread-192626] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:05:02.600 [DEBUG] [Thread-192626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:05:02.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:05:02.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:05:02.600 [DEBUG] [Thread-192626] [transport.py] [_log()] userauth is OK
2026-04-12T17:05:02.601 [DEBUG] [Thread-192626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:05:02.601 [DEBUG] [Thread-192626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:05:02.601 [DEBUG] [Thread-192626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:05:02.601 [DEBUG] [Thread-192626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:05:02.619 [INFO] [Thread-192626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:05:02.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:05:07.456 [DEBUG] [Thread-192628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:05:11.980 [DEBUG] [Thread-192626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:05:11.980 [DEBUG] [Thread-192626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:05:11.981 [DEBUG] [Thread-192626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:05:12.021 [DEBUG] [Thread-192626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:05:12.021 [DEBUG] [Thread-192626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:05:12.025 [DEBUG] [Thread-192626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:05:12.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:05:12.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:05:12.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:05:12.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:05:12.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:05:12.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:05:12.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:05:12.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:05:12.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:05:12.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.627883 -999.00  +14.40  16.72     76  +10.30 1 2 1 1 1   887    0 -0.12 -171.02 ----- 16.7 16.7 253.4 22.0 16.7 -23.5 16.6 -22.0 16.5 -19.9 16.8 -22.1
2026-04-12T17:05:12.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:05:12.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:05:12.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.627883
2026-04-12T17:05:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:05:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:05:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:05:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:05:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:05:12.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:04:45', tmtdew=4.989, humidity=71.9364, cloud=0.0, wind=25.2288, temperature=14.5804, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:04:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:05:12.207 [DEBUG] [Thread-192626] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:05:12.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:05:12.304 [DEBUG] [Thread-192630] [transport.py] [_log()] starting thread (client mode): 0xb0f421a0
2026-04-12T17:05:12.304 [DEBUG] [Thread-192630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:05:12.319 [DEBUG] [Thread-192630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:05:12.319 [INFO] [Thread-192630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] client lang: <none>
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] server lang: <none>
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] kex follows: False
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] Compression: none
2026-04-12T17:05:12.327 [DEBUG] [Thread-192630] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:05:12.387 [DEBUG] [Thread-192630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:05:12.388 [DEBUG] [Thread-192630] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:05:12.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:05:12.389 [DEBUG] [Thread-192630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:05:12.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:05:12.449 [DEBUG] [Thread-192630] [transport.py] [_log()] userauth is OK
2026-04-12T17:05:12.449 [DEBUG] [Thread-192630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:05:12.449 [DEBUG] [Thread-192630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:05:12.449 [DEBUG] [Thread-192630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:05:12.449 [DEBUG] [Thread-192630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:05:12.474 [INFO] [Thread-192630] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:05:12.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:05:12.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:05:13.328 [DEBUG] [Thread-192630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:05:13.328 [DEBUG] [Thread-192630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:05:13.376 [DEBUG] [Thread-192630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:05:13.376 [DEBUG] [Thread-192630] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:05:13.385 [DEBUG] [Thread-192630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:05:13.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:05:13.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:05:13.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:05:13.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:05:13.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:05:13.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:05:13.424 [DEBUG] [Thread-192630] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:05:22.496 [DEBUG] [Thread-192632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:05:37.549 [DEBUG] [Thread-192633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:05:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:05:43.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:05:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:05:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 5, 21), 5.01369, 71.6173, 0.0, 19.4976, 14.3902, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:05:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:05:21
2026-04-12T17:05:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:05:45.335 [DEBUG] [Thread-192634] [transport.py] [_log()] starting thread (client mode): 0xae5a4880
2026-04-12T17:05:45.335 [DEBUG] [Thread-192634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:05:45.354 [DEBUG] [Thread-192634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:05:45.355 [INFO] [Thread-192634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:45.358 [DEBUG] [Thread-192634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] client lang: <none>
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] server lang: <none>
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] kex follows: False
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] Compression: none
2026-04-12T17:05:45.359 [DEBUG] [Thread-192634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:05:45.379 [DEBUG] [Thread-192634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:05:45.380 [DEBUG] [Thread-192634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:05:45.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:05:45.381 [DEBUG] [Thread-192634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:05:45.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:05:45.383 [DEBUG] [Thread-192634] [transport.py] [_log()] userauth is OK
2026-04-12T17:05:45.383 [DEBUG] [Thread-192634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:05:45.383 [DEBUG] [Thread-192634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:05:45.383 [DEBUG] [Thread-192634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:05:45.383 [DEBUG] [Thread-192634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:05:45.407 [INFO] [Thread-192634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:05:45.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:05:46.562 [DEBUG] [Thread-192636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:05:47.843 [DEBUG] [Thread-192634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:05:47.843 [DEBUG] [Thread-192634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:05:47.843 [DEBUG] [Thread-192634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:05:47.883 [DEBUG] [Thread-192634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:05:47.883 [DEBUG] [Thread-192634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:05:47.885 [DEBUG] [Thread-192634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:05:47.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:05:47.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:05:47.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:05:47.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:05:47.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:05:47.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:05:47.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:05:47.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:05:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:05:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.628230 -999.00  +14.40  15.89     76  +10.30 1 2 1 1 1   887    0 0.07 -157.24 ----- 15.9 15.9 254.6 19.0 16.8 -22.7 16.5 -22.1 16.7 -18.8 16.9 -20.4
2026-04-12T17:05:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:05:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:05:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.628230
2026-04-12T17:05:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:05:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:05:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:05:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:05:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:05:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:05:21', tmtdew=5.01369, humidity=71.6173, cloud=0.0, wind=19.4976, temperature=14.3902, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:04:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:05:47.904 [DEBUG] [Thread-192634] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:05:47.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:05:47.989 [DEBUG] [Thread-192638] [transport.py] [_log()] starting thread (client mode): 0xa79397e0
2026-04-12T17:05:47.989 [DEBUG] [Thread-192638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:05:48.004 [DEBUG] [Thread-192638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:05:48.004 [INFO] [Thread-192638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:05:48.011 [DEBUG] [Thread-192638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:05:48.012 [DEBUG] [Thread-192638] [transport.py] [_log()] client lang: <none>
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] server lang: <none>
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] kex follows: False
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:05:48.013 [DEBUG] [Thread-192638] [transport.py] [_log()] Compression: none
2026-04-12T17:05:48.014 [DEBUG] [Thread-192638] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:05:48.075 [DEBUG] [Thread-192638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:05:48.076 [DEBUG] [Thread-192638] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:05:48.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:05:48.077 [DEBUG] [Thread-192638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:05:48.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:05:48.133 [DEBUG] [Thread-192638] [transport.py] [_log()] userauth is OK
2026-04-12T17:05:48.133 [DEBUG] [Thread-192638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:05:48.133 [DEBUG] [Thread-192638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:05:48.133 [DEBUG] [Thread-192638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:05:48.133 [DEBUG] [Thread-192638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:05:48.162 [INFO] [Thread-192638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:05:48.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:05:48.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:05:49.026 [DEBUG] [Thread-192638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:05:49.026 [DEBUG] [Thread-192638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:05:49.074 [DEBUG] [Thread-192638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:05:49.074 [DEBUG] [Thread-192638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:05:49.083 [DEBUG] [Thread-192638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:05:49.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:05:49.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:05:49.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:05:49.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:05:49.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:05:49.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:05:49.117 [DEBUG] [Thread-192638] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:05:52.583 [DEBUG] [Thread-192640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:05:54.850 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:05:54.851 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:07.635 [DEBUG] [Thread-192641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:19.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:06:19.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:06:19.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:06:20.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 5, 57), 5.17232, 71.0846, 0.0, 18.4921, 14.3903, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:06:20.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:05:57
2026-04-12T17:06:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:06:20.982 [DEBUG] [Thread-192642] [transport.py] [_log()] starting thread (client mode): 0xb0f6c220
2026-04-12T17:06:20.982 [DEBUG] [Thread-192642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:06:21.002 [DEBUG] [Thread-192642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:06:21.002 [INFO] [Thread-192642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:06:21.005 [DEBUG] [Thread-192642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:06:21.005 [DEBUG] [Thread-192642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:06:21.005 [DEBUG] [Thread-192642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:06:21.005 [DEBUG] [Thread-192642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] client lang: <none>
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] server lang: <none>
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] kex follows: False
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] Compression: none
2026-04-12T17:06:21.006 [DEBUG] [Thread-192642] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:06:21.023 [DEBUG] [Thread-192642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:06:21.023 [DEBUG] [Thread-192642] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:06:21.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:06:21.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:06:21.025 [DEBUG] [Thread-192642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:06:21.026 [DEBUG] [Thread-192642] [transport.py] [_log()] userauth is OK
2026-04-12T17:06:21.026 [DEBUG] [Thread-192642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:06:21.026 [DEBUG] [Thread-192642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:06:21.026 [DEBUG] [Thread-192642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:06:21.026 [DEBUG] [Thread-192642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:06:21.049 [INFO] [Thread-192642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:06:21.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:06:21.858 [DEBUG] [Thread-192642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:06:21.859 [DEBUG] [Thread-192642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:06:21.859 [DEBUG] [Thread-192642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:06:21.900 [DEBUG] [Thread-192642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:06:21.900 [DEBUG] [Thread-192642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:06:21.904 [DEBUG] [Thread-192642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:06:21.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:06:21.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:06:21.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:06:21.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:06:21.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:06:21.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:06:21.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:06:21.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:06:21.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:06:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.628924 -999.00  +14.40  15.60     75  +10.10 1 2 1 1 1   887    0 0.22 -152.52 ----- 15.6 15.6 239.2 23.9 16.8 -23.7 16.6 -22.2 16.6 -19.8 17.1 -21.7
2026-04-12T17:06:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:06:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:06:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.628924
2026-04-12T17:06:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:06:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:06:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:06:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:06:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:06:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:05:57', tmtdew=5.17232, humidity=71.0846, cloud=0.0, wind=18.4921, temperature=14.3903, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:05:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:06:21.930 [DEBUG] [Thread-192642] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:06:22.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:06:22.029 [DEBUG] [Thread-192645] [transport.py] [_log()] starting thread (client mode): 0xb0f6e8c0
2026-04-12T17:06:22.029 [DEBUG] [Thread-192645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:06:22.043 [DEBUG] [Thread-192645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:06:22.044 [INFO] [Thread-192645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:06:22.051 [DEBUG] [Thread-192645] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:06:22.051 [DEBUG] [Thread-192645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:06:22.051 [DEBUG] [Thread-192645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] client lang: <none>
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] server lang: <none>
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] kex follows: False
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] Compression: none
2026-04-12T17:06:22.052 [DEBUG] [Thread-192645] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:06:22.112 [DEBUG] [Thread-192645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:06:22.113 [DEBUG] [Thread-192645] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:06:22.114 [DEBUG] [Thread-192645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:06:22.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:06:22.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:06:22.177 [DEBUG] [Thread-192645] [transport.py] [_log()] userauth is OK
2026-04-12T17:06:22.177 [DEBUG] [Thread-192645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:06:22.177 [DEBUG] [Thread-192645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:06:22.177 [DEBUG] [Thread-192645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:06:22.177 [DEBUG] [Thread-192645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:06:22.199 [INFO] [Thread-192645] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:06:22.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:06:22.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:06:22.673 [DEBUG] [Thread-192647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:23.015 [DEBUG] [Thread-192645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:06:23.015 [DEBUG] [Thread-192645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:06:23.063 [DEBUG] [Thread-192645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:06:23.063 [DEBUG] [Thread-192645] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:06:23.072 [DEBUG] [Thread-192645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:06:23.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:06:23.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:06:23.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:06:23.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:06:23.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:06:23.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:06:23.109 [DEBUG] [Thread-192645] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:06:37.715 [DEBUG] [Thread-192648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:46.597 [DEBUG] [Thread-192649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:52.753 [DEBUG] [Thread-192650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:06:53.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:06:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:06:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 6, 32), 5.21067, 70.9025, 0.0, 16.8163, 14.407, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:06:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:06:32
2026-04-12T17:06:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:06:54.958 [DEBUG] [Thread-192651] [transport.py] [_log()] starting thread (client mode): 0xae5a7df0
2026-04-12T17:06:54.958 [DEBUG] [Thread-192651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:06:54.978 [DEBUG] [Thread-192651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:06:54.978 [INFO] [Thread-192651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:54.979 [DEBUG] [Thread-192651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] client lang: <none>
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] server lang: <none>
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] kex follows: False
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] Compression: none
2026-04-12T17:06:54.980 [DEBUG] [Thread-192651] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:06:54.992 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:54.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:06:54.994 [DEBUG] [Thread-192651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:06:54.995 [DEBUG] [Thread-192651] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:06:54.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:06:54.996 [DEBUG] [Thread-192651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:06:54.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:06:54.997 [DEBUG] [Thread-192651] [transport.py] [_log()] userauth is OK
2026-04-12T17:06:54.998 [DEBUG] [Thread-192651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:06:54.998 [DEBUG] [Thread-192651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:06:54.998 [DEBUG] [Thread-192651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:06:54.998 [DEBUG] [Thread-192651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:06:55.016 [INFO] [Thread-192651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:06:55.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:06:55.808 [DEBUG] [Thread-192651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:06:55.808 [DEBUG] [Thread-192651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:06:55.808 [DEBUG] [Thread-192651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:06:55.849 [DEBUG] [Thread-192651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:06:55.849 [DEBUG] [Thread-192651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:06:55.853 [DEBUG] [Thread-192651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:06:55.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:06:55.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:06:55.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:06:55.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:06:55.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:06:55.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:06:55.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:06:55.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:06:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:06:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.629271 -999.00  +14.40  16.21     75  +10.20 1 2 1 1 1   887    0 0.05 -159.12 ----- 16.2 16.2 254.2 21.3 16.7 -23.8 16.6 -22.0 16.6 -20.5 17.0 -22.6
2026-04-12T17:06:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:06:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:06:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.629271
2026-04-12T17:06:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:06:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:06:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:06:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:06:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:06:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:06:32', tmtdew=5.21067, humidity=70.9025, cloud=0.0, wind=16.8163, temperature=14.407, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:06:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:06:55.879 [DEBUG] [Thread-192651] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:06:55.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:06:55.972 [DEBUG] [Thread-192654] [transport.py] [_log()] starting thread (client mode): 0xae5a4d00
2026-04-12T17:06:55.972 [DEBUG] [Thread-192654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:06:55.986 [DEBUG] [Thread-192654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:06:55.987 [INFO] [Thread-192654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:06:55.994 [DEBUG] [Thread-192654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] client lang: <none>
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] server lang: <none>
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] kex follows: False
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] Compression: none
2026-04-12T17:06:55.995 [DEBUG] [Thread-192654] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:06:56.052 [DEBUG] [Thread-192654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:06:56.052 [DEBUG] [Thread-192654] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:06:56.053 [DEBUG] [Thread-192654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:06:56.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:06:56.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:06:56.108 [DEBUG] [Thread-192654] [transport.py] [_log()] userauth is OK
2026-04-12T17:06:56.108 [DEBUG] [Thread-192654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:06:56.108 [DEBUG] [Thread-192654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:06:56.108 [DEBUG] [Thread-192654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:06:56.108 [DEBUG] [Thread-192654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:06:56.130 [INFO] [Thread-192654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:06:56.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:06:56.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:06:56.935 [DEBUG] [Thread-192654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:06:56.935 [DEBUG] [Thread-192654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:06:56.983 [DEBUG] [Thread-192654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:06:56.983 [DEBUG] [Thread-192654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:06:56.993 [DEBUG] [Thread-192654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:06:57.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:06:57.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:06:57.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:06:57.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:06:57.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:06:57.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:06:57.030 [DEBUG] [Thread-192654] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:07:07.792 [DEBUG] [Thread-192656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:07:22.840 [DEBUG] [Thread-192657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:07:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:07:27.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:07:27.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:07:28.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 7, 8), 5.16356, 71.151, 0.0, 18.0158, 14.5229, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:07:28.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:07:08
2026-04-12T17:07:28.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:07:28.840 [DEBUG] [Thread-192658] [transport.py] [_log()] starting thread (client mode): 0xb0f41ff0
2026-04-12T17:07:28.840 [DEBUG] [Thread-192658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:07:28.860 [DEBUG] [Thread-192658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:07:28.861 [INFO] [Thread-192658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] client lang: <none>
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] server lang: <none>
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] kex follows: False
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:07:28.864 [DEBUG] [Thread-192658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:07:28.865 [DEBUG] [Thread-192658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:07:28.865 [DEBUG] [Thread-192658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:07:28.865 [DEBUG] [Thread-192658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:07:28.865 [DEBUG] [Thread-192658] [transport.py] [_log()] Compression: none
2026-04-12T17:07:28.865 [DEBUG] [Thread-192658] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:07:28.883 [DEBUG] [Thread-192658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:07:28.883 [DEBUG] [Thread-192658] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:07:28.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:07:28.884 [DEBUG] [Thread-192658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:07:28.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:07:28.887 [DEBUG] [Thread-192658] [transport.py] [_log()] userauth is OK
2026-04-12T17:07:28.887 [DEBUG] [Thread-192658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:07:28.887 [DEBUG] [Thread-192658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:07:28.887 [DEBUG] [Thread-192658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:07:28.887 [DEBUG] [Thread-192658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:07:28.906 [INFO] [Thread-192658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:07:28.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:07:29.668 [DEBUG] [Thread-192658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:07:29.668 [DEBUG] [Thread-192658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:07:29.668 [DEBUG] [Thread-192658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:07:29.709 [DEBUG] [Thread-192658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:07:29.709 [DEBUG] [Thread-192658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:07:29.712 [DEBUG] [Thread-192658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:07:29.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:07:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:07:29.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:07:29.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:07:29.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:07:29.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:07:29.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:07:29.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:07:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:07:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.629619 -999.00  +14.40  16.32     75  +10.20 1 2 1 1 1   887    0 0.24 -154.94 ----- 16.3 16.3 267.4 19.8 16.6 -23.7 16.5 -22.2 16.5 -20.6 16.9 -22.8
2026-04-12T17:07:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:07:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:07:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.629619
2026-04-12T17:07:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:07:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:07:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:07:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:07:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:07:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:07:08', tmtdew=5.16356, humidity=71.151, cloud=0.0, wind=18.0158, temperature=14.5229, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:06:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:07:29.740 [DEBUG] [Thread-192658] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:07:29.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:07:29.832 [DEBUG] [Thread-192661] [transport.py] [_log()] starting thread (client mode): 0xb0f43640
2026-04-12T17:07:29.832 [DEBUG] [Thread-192661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:07:29.847 [DEBUG] [Thread-192661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:07:29.847 [INFO] [Thread-192661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:07:29.854 [DEBUG] [Thread-192661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:07:29.854 [DEBUG] [Thread-192661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:07:29.854 [DEBUG] [Thread-192661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:07:29.854 [DEBUG] [Thread-192661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:07:29.854 [DEBUG] [Thread-192661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:07:29.854 [DEBUG] [Thread-192661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] client lang: <none>
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] server lang: <none>
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] kex follows: False
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] Compression: none
2026-04-12T17:07:29.855 [DEBUG] [Thread-192661] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:07:29.914 [DEBUG] [Thread-192661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:07:29.915 [DEBUG] [Thread-192661] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:07:29.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:07:29.916 [DEBUG] [Thread-192661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:07:29.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:07:29.977 [DEBUG] [Thread-192661] [transport.py] [_log()] userauth is OK
2026-04-12T17:07:29.978 [DEBUG] [Thread-192661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:07:29.978 [DEBUG] [Thread-192661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:07:29.978 [DEBUG] [Thread-192661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:07:29.978 [DEBUG] [Thread-192661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:07:30.001 [INFO] [Thread-192661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:07:30.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:07:30.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:07:30.841 [DEBUG] [Thread-192661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:07:30.841 [DEBUG] [Thread-192661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:07:30.890 [DEBUG] [Thread-192661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:07:30.890 [DEBUG] [Thread-192661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:07:30.903 [DEBUG] [Thread-192661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:07:30.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:07:30.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:07:30.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:07:30.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:07:30.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:07:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:07:30.941 [DEBUG] [Thread-192661] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:07:37.877 [DEBUG] [Thread-192663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:07:46.651 [DEBUG] [Thread-192664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:07:52.927 [DEBUG] [Thread-192665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:07:55.134 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:07:55.135 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:08:00.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:08:00.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:08:00.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:08:02.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 7, 43), 5.0219, 71.8388, 0.0, 20.6424, 14.9134, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:08:02.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:07:43
2026-04-12T17:08:02.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:08:02.856 [DEBUG] [Thread-192666] [transport.py] [_log()] starting thread (client mode): 0xb0f42710
2026-04-12T17:08:02.856 [DEBUG] [Thread-192666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:08:02.875 [DEBUG] [Thread-192666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:08:02.876 [INFO] [Thread-192666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] client lang: <none>
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] server lang: <none>
2026-04-12T17:08:02.879 [DEBUG] [Thread-192666] [transport.py] [_log()] kex follows: False
2026-04-12T17:08:02.880 [DEBUG] [Thread-192666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:08:02.880 [DEBUG] [Thread-192666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:08:02.880 [DEBUG] [Thread-192666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:08:02.880 [DEBUG] [Thread-192666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:08:02.880 [DEBUG] [Thread-192666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:08:02.880 [DEBUG] [Thread-192666] [transport.py] [_log()] Compression: none
2026-04-12T17:08:02.880 [DEBUG] [Thread-192666] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:08:02.899 [DEBUG] [Thread-192666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:08:02.900 [DEBUG] [Thread-192666] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:08:02.901 [DEBUG] [Thread-192666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:08:02.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:08:02.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:08:02.903 [DEBUG] [Thread-192666] [transport.py] [_log()] userauth is OK
2026-04-12T17:08:02.903 [DEBUG] [Thread-192666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:08:02.904 [DEBUG] [Thread-192666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:08:02.904 [DEBUG] [Thread-192666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:08:02.904 [DEBUG] [Thread-192666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:08:02.919 [INFO] [Thread-192666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:08:02.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:08:03.704 [DEBUG] [Thread-192666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:08:03.705 [DEBUG] [Thread-192666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:08:03.706 [DEBUG] [Thread-192666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:08:03.746 [DEBUG] [Thread-192666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:08:03.747 [DEBUG] [Thread-192666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:08:03.750 [DEBUG] [Thread-192666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:08:03.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:08:03.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:08:03.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:08:03.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:08:03.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:08:03.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:08:03.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:08:03.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:08:03.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:08:03.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.629966 -999.00  +14.40  11.37     76  +10.30 1 2 1 1 1   887    0 0.20 -149.28 ----- 11.4 11.4 255.4 15.1 16.7 -23.7 16.5 -22.1 16.5 -20.3 16.8 -22.4
2026-04-12T17:08:03.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:08:03.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:08:03.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.629966
2026-04-12T17:08:03.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:08:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:08:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:08:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:08:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:08:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:07:43', tmtdew=5.0219, humidity=71.8388, cloud=0.0, wind=20.6424, temperature=14.9134, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:07:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:08:03.777 [DEBUG] [Thread-192666] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:08:03.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:08:03.873 [DEBUG] [Thread-192669] [transport.py] [_log()] starting thread (client mode): 0xae534820
2026-04-12T17:08:03.873 [DEBUG] [Thread-192669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:08:03.890 [DEBUG] [Thread-192669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:08:03.890 [INFO] [Thread-192669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:08:03.898 [DEBUG] [Thread-192669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:08:03.898 [DEBUG] [Thread-192669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] client lang: <none>
2026-04-12T17:08:03.899 [DEBUG] [Thread-192669] [transport.py] [_log()] server lang: <none>
2026-04-12T17:08:03.900 [DEBUG] [Thread-192669] [transport.py] [_log()] kex follows: False
2026-04-12T17:08:03.900 [DEBUG] [Thread-192669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:08:03.900 [DEBUG] [Thread-192669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:08:03.900 [DEBUG] [Thread-192669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:08:03.900 [DEBUG] [Thread-192669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:08:03.900 [DEBUG] [Thread-192669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:08:03.900 [DEBUG] [Thread-192669] [transport.py] [_log()] Compression: none
2026-04-12T17:08:03.901 [DEBUG] [Thread-192669] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:08:03.958 [DEBUG] [Thread-192669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:08:03.959 [DEBUG] [Thread-192669] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:08:03.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:08:03.960 [DEBUG] [Thread-192669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:08:03.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:08:04.014 [DEBUG] [Thread-192669] [transport.py] [_log()] userauth is OK
2026-04-12T17:08:04.014 [DEBUG] [Thread-192669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:08:04.014 [DEBUG] [Thread-192669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:08:04.014 [DEBUG] [Thread-192669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:08:04.014 [DEBUG] [Thread-192669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:08:04.033 [INFO] [Thread-192669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:08:04.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:08:04.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:08:04.874 [DEBUG] [Thread-192669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:08:04.874 [DEBUG] [Thread-192669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:08:04.922 [DEBUG] [Thread-192669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:08:04.922 [DEBUG] [Thread-192669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:08:04.932 [DEBUG] [Thread-192669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:08:04.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:08:04.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:08:04.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:08:04.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:08:04.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:08:04.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:08:04.969 [DEBUG] [Thread-192669] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:08:07.960 [DEBUG] [Thread-192671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:08:23.021 [DEBUG] [Thread-192672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:08:34.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:08:34.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:08:34.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:08:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 8, 19), 5.08506, 71.5549, 0.0, 18.1562, 14.457, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:08:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:08:19
2026-04-12T17:08:36.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:08:36.782 [DEBUG] [Thread-192673] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1f0
2026-04-12T17:08:36.782 [DEBUG] [Thread-192673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:08:36.803 [DEBUG] [Thread-192673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:08:36.803 [INFO] [Thread-192673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] client lang: <none>
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] server lang: <none>
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] kex follows: False
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] Compression: none
2026-04-12T17:08:36.807 [DEBUG] [Thread-192673] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:08:36.823 [DEBUG] [Thread-192673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:08:36.824 [DEBUG] [Thread-192673] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:08:36.824 [DEBUG] [Thread-192673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:08:36.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:08:36.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:08:36.827 [DEBUG] [Thread-192673] [transport.py] [_log()] userauth is OK
2026-04-12T17:08:36.827 [DEBUG] [Thread-192673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:08:36.827 [DEBUG] [Thread-192673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:08:36.827 [DEBUG] [Thread-192673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:08:36.827 [DEBUG] [Thread-192673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:08:36.845 [INFO] [Thread-192673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:08:36.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:08:37.655 [DEBUG] [Thread-192673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:08:37.655 [DEBUG] [Thread-192673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:08:37.655 [DEBUG] [Thread-192673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:08:37.697 [DEBUG] [Thread-192673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:08:37.697 [DEBUG] [Thread-192673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:08:37.700 [DEBUG] [Thread-192673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:08:37.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:08:37.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:08:37.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:08:37.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:08:37.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:08:37.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:08:37.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:08:37.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:08:37.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:08:37.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.630313 -999.00  +14.40   8.06     76  +10.40 1 2 1 1 1   887    0 0.12 -149.88 ----- 8.1 8.1 234.3 14.0 16.7 -23.6 16.5 -22.2 16.4 -20.2 16.8 -22.4
2026-04-12T17:08:37.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:08:37.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:08:37.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.630313
2026-04-12T17:08:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:08:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:08:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:08:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:08:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:08:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:08:19', tmtdew=5.08506, humidity=71.5549, cloud=0.0, wind=18.1562, temperature=14.457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:07:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:08:37.723 [DEBUG] [Thread-192673] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:08:37.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:08:37.811 [DEBUG] [Thread-192676] [transport.py] [_log()] starting thread (client mode): 0xae535fc0
2026-04-12T17:08:37.811 [DEBUG] [Thread-192676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:08:37.825 [DEBUG] [Thread-192676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:08:37.825 [INFO] [Thread-192676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] client lang: <none>
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] server lang: <none>
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] kex follows: False
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] Compression: none
2026-04-12T17:08:37.833 [DEBUG] [Thread-192676] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:08:37.888 [DEBUG] [Thread-192676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:08:37.889 [DEBUG] [Thread-192676] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:08:37.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:08:37.889 [DEBUG] [Thread-192676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:08:37.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:08:37.946 [DEBUG] [Thread-192676] [transport.py] [_log()] userauth is OK
2026-04-12T17:08:37.946 [DEBUG] [Thread-192676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:08:37.946 [DEBUG] [Thread-192676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:08:37.946 [DEBUG] [Thread-192676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:08:37.946 [DEBUG] [Thread-192676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:08:37.969 [INFO] [Thread-192676] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:08:37.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:08:37.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:08:38.058 [DEBUG] [Thread-192678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:08:38.798 [DEBUG] [Thread-192676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:08:38.798 [DEBUG] [Thread-192676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:08:38.846 [DEBUG] [Thread-192676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:08:38.847 [DEBUG] [Thread-192676] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:08:38.856 [DEBUG] [Thread-192676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:08:38.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:08:38.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:08:38.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:08:38.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:08:38.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:08:38.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:08:38.893 [DEBUG] [Thread-192676] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:08:46.685 [DEBUG] [Thread-192679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:08:53.112 [DEBUG] [Thread-192680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:08:55.274 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:08:55.276 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:09:08.154 [DEBUG] [Thread-192681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:09:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:09:08.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:09:08.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:09:10.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 8, 54), 5.1605, 71.1435, 0.0, 18.2786, 14.7482, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:09:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:08:54
2026-04-12T17:09:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:09:10.854 [DEBUG] [Thread-192682] [transport.py] [_log()] starting thread (client mode): 0xb0f421a0
2026-04-12T17:09:10.855 [DEBUG] [Thread-192682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:09:10.874 [DEBUG] [Thread-192682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:09:10.874 [INFO] [Thread-192682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:09:10.877 [DEBUG] [Thread-192682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:09:10.877 [DEBUG] [Thread-192682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:09:10.877 [DEBUG] [Thread-192682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] client lang: <none>
2026-04-12T17:09:10.878 [DEBUG] [Thread-192682] [transport.py] [_log()] server lang: <none>
2026-04-12T17:09:10.879 [DEBUG] [Thread-192682] [transport.py] [_log()] kex follows: False
2026-04-12T17:09:10.879 [DEBUG] [Thread-192682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:09:10.879 [DEBUG] [Thread-192682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:09:10.879 [DEBUG] [Thread-192682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:09:10.880 [DEBUG] [Thread-192682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:09:10.880 [DEBUG] [Thread-192682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:09:10.880 [DEBUG] [Thread-192682] [transport.py] [_log()] Compression: none
2026-04-12T17:09:10.880 [DEBUG] [Thread-192682] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:09:10.899 [DEBUG] [Thread-192682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:09:10.900 [DEBUG] [Thread-192682] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:09:10.901 [DEBUG] [Thread-192682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:09:10.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:09:10.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:09:10.903 [DEBUG] [Thread-192682] [transport.py] [_log()] userauth is OK
2026-04-12T17:09:10.903 [DEBUG] [Thread-192682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:09:10.904 [DEBUG] [Thread-192682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:09:10.904 [DEBUG] [Thread-192682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:09:10.904 [DEBUG] [Thread-192682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:09:10.929 [INFO] [Thread-192682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:09:10.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:09:11.686 [DEBUG] [Thread-192682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:09:11.686 [DEBUG] [Thread-192682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:09:11.687 [DEBUG] [Thread-192682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:09:11.727 [DEBUG] [Thread-192682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:09:11.727 [DEBUG] [Thread-192682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:09:11.729 [DEBUG] [Thread-192682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:09:11.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:09:11.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:09:11.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:09:11.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:09:11.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:09:11.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:09:11.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:09:11.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:09:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:09:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.630660 -999.00  +14.40  19.61     76  +10.30 1 2 1 1 1   887    0 0.40 -144.20 ----- 19.6 19.6 256.8 21.5 16.6 -23.6 16.5 -22.1 16.3 -20.2 16.7 -22.4
2026-04-12T17:09:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:09:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:09:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.630660
2026-04-12T17:09:11.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:09:11.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:09:11.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:09:11.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:09:11.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:09:11.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:08:54', tmtdew=5.1605, humidity=71.1435, cloud=0.0, wind=18.2786, temperature=14.7482, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:08:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:09:11.758 [DEBUG] [Thread-192682] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:09:11.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:09:11.860 [DEBUG] [Thread-192685] [transport.py] [_log()] starting thread (client mode): 0xb0f6c8e0
2026-04-12T17:09:11.860 [DEBUG] [Thread-192685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:09:11.877 [DEBUG] [Thread-192685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:09:11.878 [INFO] [Thread-192685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:09:11.885 [DEBUG] [Thread-192685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:09:11.886 [DEBUG] [Thread-192685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:09:11.886 [DEBUG] [Thread-192685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:09:11.886 [DEBUG] [Thread-192685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:11.886 [DEBUG] [Thread-192685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:11.886 [DEBUG] [Thread-192685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:11.886 [DEBUG] [Thread-192685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:11.886 [DEBUG] [Thread-192685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] client lang: <none>
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] server lang: <none>
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] kex follows: False
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:09:11.887 [DEBUG] [Thread-192685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:09:11.888 [DEBUG] [Thread-192685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:09:11.888 [DEBUG] [Thread-192685] [transport.py] [_log()] Compression: none
2026-04-12T17:09:11.888 [DEBUG] [Thread-192685] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:09:11.943 [DEBUG] [Thread-192685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:09:11.944 [DEBUG] [Thread-192685] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:09:11.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:09:11.945 [DEBUG] [Thread-192685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:09:11.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:09:11.999 [DEBUG] [Thread-192685] [transport.py] [_log()] userauth is OK
2026-04-12T17:09:11.999 [DEBUG] [Thread-192685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:09:11.999 [DEBUG] [Thread-192685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:09:11.999 [DEBUG] [Thread-192685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:09:12.000 [DEBUG] [Thread-192685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:09:12.019 [INFO] [Thread-192685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:09:12.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:09:12.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:09:12.875 [DEBUG] [Thread-192685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:09:12.875 [DEBUG] [Thread-192685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:09:12.923 [DEBUG] [Thread-192685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:09:12.923 [DEBUG] [Thread-192685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:09:12.932 [DEBUG] [Thread-192685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:09:12.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:09:12.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:09:12.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:09:12.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:09:12.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:09:12.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:09:12.969 [DEBUG] [Thread-192685] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:09:23.193 [DEBUG] [Thread-192687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:09:38.247 [DEBUG] [Thread-192688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:09:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:09:42.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:09:42.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:09:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 9, 29), 5.12215, 71.3534, 0.0, 15.422, 14.3907, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:09:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:09:29
2026-04-12T17:09:44.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:09:44.865 [DEBUG] [Thread-192689] [transport.py] [_log()] starting thread (client mode): 0xae5a58a0
2026-04-12T17:09:44.865 [DEBUG] [Thread-192689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:09:44.875 [DEBUG] [Thread-192689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:09:44.875 [INFO] [Thread-192689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:09:44.877 [DEBUG] [Thread-192689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:09:44.877 [DEBUG] [Thread-192689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:09:44.877 [DEBUG] [Thread-192689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:09:44.877 [DEBUG] [Thread-192689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:44.877 [DEBUG] [Thread-192689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] client lang: <none>
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] server lang: <none>
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] kex follows: False
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] Compression: none
2026-04-12T17:09:44.878 [DEBUG] [Thread-192689] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:09:44.889 [DEBUG] [Thread-192689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:09:44.890 [DEBUG] [Thread-192689] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:09:44.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:09:44.890 [DEBUG] [Thread-192689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:09:44.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:09:44.891 [DEBUG] [Thread-192689] [transport.py] [_log()] userauth is OK
2026-04-12T17:09:44.892 [DEBUG] [Thread-192689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:09:44.892 [DEBUG] [Thread-192689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:09:44.892 [DEBUG] [Thread-192689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:09:44.892 [DEBUG] [Thread-192689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:09:44.913 [INFO] [Thread-192689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:09:44.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:09:45.534 [DEBUG] [Thread-192689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:09:45.534 [DEBUG] [Thread-192689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:09:45.535 [DEBUG] [Thread-192689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:09:45.575 [DEBUG] [Thread-192689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:09:45.575 [DEBUG] [Thread-192689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:09:45.579 [DEBUG] [Thread-192689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:09:45.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:09:45.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:09:45.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:09:45.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:09:45.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:09:45.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:09:45.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:09:45.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:09:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:09:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.631702 -999.00  +14.40  11.84     76  +10.30 1 2 1 1 1   887    0 0.52 -138.51 ----- 11.8 11.8 248.9 13.1 16.5 -23.7 16.4 -22.0 16.2 -20.3 16.6 -21.8
2026-04-12T17:09:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:09:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:09:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.631702
2026-04-12T17:09:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:09:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:09:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:09:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:09:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:09:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:09:29', tmtdew=5.12215, humidity=71.3534, cloud=0.0, wind=15.422, temperature=14.3907, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:09:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:09:45.603 [DEBUG] [Thread-192689] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:09:45.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:09:45.696 [DEBUG] [Thread-192692] [transport.py] [_log()] starting thread (client mode): 0xae536830
2026-04-12T17:09:45.696 [DEBUG] [Thread-192692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:09:45.710 [DEBUG] [Thread-192692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:09:45.710 [INFO] [Thread-192692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] client lang: <none>
2026-04-12T17:09:45.718 [DEBUG] [Thread-192692] [transport.py] [_log()] server lang: <none>
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] kex follows: False
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] Compression: none
2026-04-12T17:09:45.719 [DEBUG] [Thread-192692] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:09:45.775 [DEBUG] [Thread-192692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:09:45.776 [DEBUG] [Thread-192692] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:09:45.777 [DEBUG] [Thread-192692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:09:45.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:09:45.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:09:45.831 [DEBUG] [Thread-192692] [transport.py] [_log()] userauth is OK
2026-04-12T17:09:45.832 [DEBUG] [Thread-192692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:09:45.832 [DEBUG] [Thread-192692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:09:45.832 [DEBUG] [Thread-192692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:09:45.832 [DEBUG] [Thread-192692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:09:45.851 [INFO] [Thread-192692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:09:45.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:09:45.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:09:46.674 [DEBUG] [Thread-192692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:09:46.674 [DEBUG] [Thread-192692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:09:46.716 [DEBUG] [Thread-192694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:09:46.721 [DEBUG] [Thread-192692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:09:46.721 [DEBUG] [Thread-192692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:09:46.730 [DEBUG] [Thread-192692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:09:46.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:09:46.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:09:46.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:09:46.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:09:46.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:09:46.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:09:46.765 [DEBUG] [Thread-192692] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:09:53.289 [DEBUG] [Thread-192695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:09:55.417 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:09:55.418 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:10:08.346 [DEBUG] [Thread-192696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:10:16.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:10:16.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:10:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:10:18.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 10, 5), 5.10703, 71.4202, 0.0, 15.5279, 14.358, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:10:18.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:10:05
2026-04-12T17:10:18.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:10:18.608 [DEBUG] [Thread-192697] [transport.py] [_log()] starting thread (client mode): 0xae536200
2026-04-12T17:10:18.609 [DEBUG] [Thread-192697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:10:18.632 [DEBUG] [Thread-192697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:10:18.632 [INFO] [Thread-192697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:10:18.633 [DEBUG] [Thread-192697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:10:18.633 [DEBUG] [Thread-192697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] client lang: <none>
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] server lang: <none>
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] kex follows: False
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:10:18.634 [DEBUG] [Thread-192697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:10:18.635 [DEBUG] [Thread-192697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:10:18.635 [DEBUG] [Thread-192697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:10:18.635 [DEBUG] [Thread-192697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:10:18.635 [DEBUG] [Thread-192697] [transport.py] [_log()] Compression: none
2026-04-12T17:10:18.635 [DEBUG] [Thread-192697] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:10:18.656 [DEBUG] [Thread-192697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:10:18.656 [DEBUG] [Thread-192697] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:10:18.657 [DEBUG] [Thread-192697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:10:18.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:10:18.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:10:18.659 [DEBUG] [Thread-192697] [transport.py] [_log()] userauth is OK
2026-04-12T17:10:18.660 [DEBUG] [Thread-192697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:10:18.660 [DEBUG] [Thread-192697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:10:18.660 [DEBUG] [Thread-192697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:10:18.660 [DEBUG] [Thread-192697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:10:18.694 [INFO] [Thread-192697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:10:18.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:10:23.386 [DEBUG] [Thread-192699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:10:32.412 [DEBUG] [Thread-192697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:10:32.412 [DEBUG] [Thread-192697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:10:32.412 [DEBUG] [Thread-192697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:10:32.453 [DEBUG] [Thread-192697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:10:32.453 [DEBUG] [Thread-192697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:10:32.456 [DEBUG] [Thread-192697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:10:32.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:10:32.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:10:32.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:10:32.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:10:32.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:10:32.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:10:32.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:10:32.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:10:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:10:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.631702 -999.00  +14.40  11.84     76  +10.30 1 2 1 1 1   887    0 0.52 -138.51 ----- 11.8 11.8 248.9 13.1 16.5 -23.7 16.4 -22.0 16.2 -20.3 16.6 -21.8
2026-04-12T17:10:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:10:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:10:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.631702
2026-04-12T17:10:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:10:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:10:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:10:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:10:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:10:32.546 [DEBUG] [Thread-192697] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:10:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:10:05', tmtdew=5.10703, humidity=71.4202, cloud=0.0, wind=15.5279, temperature=14.358, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:09:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:10:32.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:10:32.641 [DEBUG] [Thread-192701] [transport.py] [_log()] starting thread (client mode): 0xae5a5d80
2026-04-12T17:10:32.641 [DEBUG] [Thread-192701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:10:32.660 [DEBUG] [Thread-192701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:10:32.660 [INFO] [Thread-192701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] client lang: <none>
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] server lang: <none>
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] kex follows: False
2026-04-12T17:10:32.668 [DEBUG] [Thread-192701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:10:32.669 [DEBUG] [Thread-192701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:10:32.669 [DEBUG] [Thread-192701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:10:32.669 [DEBUG] [Thread-192701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:10:32.669 [DEBUG] [Thread-192701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:10:32.669 [DEBUG] [Thread-192701] [transport.py] [_log()] Compression: none
2026-04-12T17:10:32.669 [DEBUG] [Thread-192701] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:10:32.729 [DEBUG] [Thread-192701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:10:32.729 [DEBUG] [Thread-192701] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:10:32.730 [DEBUG] [Thread-192701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:10:32.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:10:32.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:10:32.788 [DEBUG] [Thread-192701] [transport.py] [_log()] userauth is OK
2026-04-12T17:10:32.789 [DEBUG] [Thread-192701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:10:32.789 [DEBUG] [Thread-192701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:10:32.789 [DEBUG] [Thread-192701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:10:32.789 [DEBUG] [Thread-192701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:10:32.809 [INFO] [Thread-192701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:10:32.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:10:32.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:10:33.624 [DEBUG] [Thread-192701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:10:33.625 [DEBUG] [Thread-192701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:10:33.675 [DEBUG] [Thread-192701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:10:33.675 [DEBUG] [Thread-192701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:10:33.687 [DEBUG] [Thread-192701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:10:33.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:10:33.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:10:33.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:10:33.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:10:33.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:10:33.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:10:33.732 [DEBUG] [Thread-192701] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:10:38.427 [DEBUG] [Thread-192703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:10:46.760 [DEBUG] [Thread-192704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:10:53.484 [DEBUG] [Thread-192705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:10:55.562 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:10:55.563 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:11:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:11:03.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:11:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:11:05.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 10, 41), 5.12873, 71.277, 0.0, 22.2653, 14.6497, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:11:05.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:10:41
2026-04-12T17:11:05.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:11:05.616 [DEBUG] [Thread-192706] [transport.py] [_log()] starting thread (client mode): 0xae5f0c10
2026-04-12T17:11:05.616 [DEBUG] [Thread-192706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:11:05.635 [DEBUG] [Thread-192706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:11:05.635 [INFO] [Thread-192706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] client lang: <none>
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] server lang: <none>
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] kex follows: False
2026-04-12T17:11:05.637 [DEBUG] [Thread-192706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:11:05.638 [DEBUG] [Thread-192706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:11:05.638 [DEBUG] [Thread-192706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:11:05.638 [DEBUG] [Thread-192706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:11:05.638 [DEBUG] [Thread-192706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:11:05.638 [DEBUG] [Thread-192706] [transport.py] [_log()] Compression: none
2026-04-12T17:11:05.638 [DEBUG] [Thread-192706] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:11:05.646 [DEBUG] [Thread-192706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:11:05.647 [DEBUG] [Thread-192706] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:11:05.647 [DEBUG] [Thread-192706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:11:05.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:11:05.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:11:05.649 [DEBUG] [Thread-192706] [transport.py] [_log()] userauth is OK
2026-04-12T17:11:05.649 [DEBUG] [Thread-192706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:11:05.649 [DEBUG] [Thread-192706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:11:05.649 [DEBUG] [Thread-192706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:11:05.649 [DEBUG] [Thread-192706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:11:05.684 [INFO] [Thread-192706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:11:05.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:11:06.421 [DEBUG] [Thread-192706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:11:06.421 [DEBUG] [Thread-192706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:11:06.421 [DEBUG] [Thread-192706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:11:06.462 [DEBUG] [Thread-192706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:11:06.463 [DEBUG] [Thread-192706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:11:06.465 [DEBUG] [Thread-192706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:11:06.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:11:06.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:11:06.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:11:06.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:11:06.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:11:06.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:11:06.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:11:06.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:11:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:11:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.632049 -999.00  +14.30  11.94     76  +10.20 1 2 1 1 1   887    0 0.38 -134.96 ----- 11.9 11.9 264.4 22.1 16.5 -23.6 16.4 -22.0 16.1 -20.8 16.5 -22.4
2026-04-12T17:11:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:11:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:11:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.632049
2026-04-12T17:11:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:11:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:11:06.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:11:06.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:11:06.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:11:06.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:10:41', tmtdew=5.12873, humidity=71.277, cloud=0.0, wind=22.2653, temperature=14.6497, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:10:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:11:06.493 [DEBUG] [Thread-192706] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:11:06.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:11:06.587 [DEBUG] [Thread-192709] [transport.py] [_log()] starting thread (client mode): 0xae52f160
2026-04-12T17:11:06.587 [DEBUG] [Thread-192709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:11:06.601 [DEBUG] [Thread-192709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:11:06.601 [INFO] [Thread-192709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:11:06.609 [DEBUG] [Thread-192709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:11:06.609 [DEBUG] [Thread-192709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] client lang: <none>
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] server lang: <none>
2026-04-12T17:11:06.610 [DEBUG] [Thread-192709] [transport.py] [_log()] kex follows: False
2026-04-12T17:11:06.611 [DEBUG] [Thread-192709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:11:06.611 [DEBUG] [Thread-192709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:11:06.611 [DEBUG] [Thread-192709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:11:06.611 [DEBUG] [Thread-192709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:11:06.611 [DEBUG] [Thread-192709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:11:06.611 [DEBUG] [Thread-192709] [transport.py] [_log()] Compression: none
2026-04-12T17:11:06.611 [DEBUG] [Thread-192709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:11:06.669 [DEBUG] [Thread-192709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:11:06.669 [DEBUG] [Thread-192709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:11:06.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:11:06.671 [DEBUG] [Thread-192709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:11:06.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:11:06.725 [DEBUG] [Thread-192709] [transport.py] [_log()] userauth is OK
2026-04-12T17:11:06.725 [DEBUG] [Thread-192709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:11:06.726 [DEBUG] [Thread-192709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:11:06.726 [DEBUG] [Thread-192709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:11:06.726 [DEBUG] [Thread-192709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:11:06.744 [INFO] [Thread-192709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:11:06.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:11:06.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:11:07.548 [DEBUG] [Thread-192709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:11:07.548 [DEBUG] [Thread-192709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:11:07.597 [DEBUG] [Thread-192709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:11:07.597 [DEBUG] [Thread-192709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:11:07.606 [DEBUG] [Thread-192709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:11:07.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:11:07.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:11:07.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:11:07.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:11:07.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:11:07.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:11:07.638 [DEBUG] [Thread-192709] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:11:08.521 [DEBUG] [Thread-192711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:11:23.576 [DEBUG] [Thread-192712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:11:37.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:11:37.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:11:37.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:11:38.616 [DEBUG] [Thread-192713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:11:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 11, 17), 5.19417, 70.9898, 0.0, 20.6626, 14.2421, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:11:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:11:17
2026-04-12T17:11:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:11:39.495 [DEBUG] [Thread-192714] [transport.py] [_log()] starting thread (client mode): 0xae52c370
2026-04-12T17:11:39.495 [DEBUG] [Thread-192714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:11:39.508 [DEBUG] [Thread-192714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:11:39.508 [INFO] [Thread-192714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:11:39.510 [DEBUG] [Thread-192714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:11:39.510 [DEBUG] [Thread-192714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:11:39.510 [DEBUG] [Thread-192714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:11:39.510 [DEBUG] [Thread-192714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:39.510 [DEBUG] [Thread-192714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:39.510 [DEBUG] [Thread-192714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] client lang: <none>
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] server lang: <none>
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] kex follows: False
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] Compression: none
2026-04-12T17:11:39.511 [DEBUG] [Thread-192714] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:11:39.518 [DEBUG] [Thread-192714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:11:39.519 [DEBUG] [Thread-192714] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:11:39.519 [DEBUG] [Thread-192714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:11:39.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:11:39.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:11:39.520 [DEBUG] [Thread-192714] [transport.py] [_log()] userauth is OK
2026-04-12T17:11:39.520 [DEBUG] [Thread-192714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:11:39.520 [DEBUG] [Thread-192714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:11:39.520 [DEBUG] [Thread-192714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:11:39.520 [DEBUG] [Thread-192714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:11:39.540 [INFO] [Thread-192714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:11:39.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:11:40.161 [DEBUG] [Thread-192714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:11:40.161 [DEBUG] [Thread-192714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:11:40.162 [DEBUG] [Thread-192714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:11:40.202 [DEBUG] [Thread-192714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:11:40.202 [DEBUG] [Thread-192714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:11:40.205 [DEBUG] [Thread-192714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:11:40.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:11:40.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:11:40.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:11:40.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:11:40.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:11:40.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:11:40.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:11:40.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:11:40.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:11:40.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.632744 -999.00  +14.20  17.09     75   +9.90 1 2 1 1 1   887    0 1.52 -102.96 ----- 17.1 17.1 257.2 20.3 16.4 -23.7 16.3 -22.1 16.0 -20.2 16.3 -22.4
2026-04-12T17:11:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:11:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:11:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.632744
2026-04-12T17:11:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:11:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:11:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:11:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:11:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:11:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:11:17', tmtdew=5.19417, humidity=70.9898, cloud=0.0, wind=20.6626, temperature=14.2421, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:11:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:11:40.229 [DEBUG] [Thread-192714] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:11:40.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:11:40.322 [DEBUG] [Thread-192717] [transport.py] [_log()] starting thread (client mode): 0xae536740
2026-04-12T17:11:40.322 [DEBUG] [Thread-192717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:11:40.337 [DEBUG] [Thread-192717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:11:40.337 [INFO] [Thread-192717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] client lang: <none>
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] server lang: <none>
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] kex follows: False
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:11:40.345 [DEBUG] [Thread-192717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:11:40.346 [DEBUG] [Thread-192717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:11:40.346 [DEBUG] [Thread-192717] [transport.py] [_log()] Compression: none
2026-04-12T17:11:40.346 [DEBUG] [Thread-192717] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:11:40.404 [DEBUG] [Thread-192717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:11:40.405 [DEBUG] [Thread-192717] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:11:40.405 [DEBUG] [Thread-192717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:11:40.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:11:40.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:11:40.461 [DEBUG] [Thread-192717] [transport.py] [_log()] userauth is OK
2026-04-12T17:11:40.461 [DEBUG] [Thread-192717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:11:40.461 [DEBUG] [Thread-192717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:11:40.461 [DEBUG] [Thread-192717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:11:40.461 [DEBUG] [Thread-192717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:11:40.480 [INFO] [Thread-192717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:11:40.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:11:40.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:11:41.320 [DEBUG] [Thread-192717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:11:41.320 [DEBUG] [Thread-192717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:11:41.368 [DEBUG] [Thread-192717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:11:41.368 [DEBUG] [Thread-192717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:11:41.378 [DEBUG] [Thread-192717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:11:41.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:11:41.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:11:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:11:41.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:11:41.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:11:41.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:11:41.415 [DEBUG] [Thread-192717] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:11:46.810 [DEBUG] [Thread-192719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:11:53.654 [DEBUG] [Thread-192720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:11:55.701 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:11:55.702 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:12:08.706 [DEBUG] [Thread-192721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:12:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:12:11.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:12:11.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:12:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 11, 52), 5.25526, 70.6483, 0.0, 21.8772, 14.5179, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:12:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:11:52
2026-04-12T17:12:13.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:12:13.277 [DEBUG] [Thread-192722] [transport.py] [_log()] starting thread (client mode): 0xae5f3640
2026-04-12T17:12:13.277 [DEBUG] [Thread-192722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:12:13.298 [DEBUG] [Thread-192722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:12:13.298 [INFO] [Thread-192722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] client lang: <none>
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] server lang: <none>
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] kex follows: False
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:12:13.301 [DEBUG] [Thread-192722] [transport.py] [_log()] Compression: none
2026-04-12T17:12:13.302 [DEBUG] [Thread-192722] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:12:13.310 [DEBUG] [Thread-192722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:12:13.310 [DEBUG] [Thread-192722] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:12:13.311 [DEBUG] [Thread-192722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:12:13.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:12:13.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:12:13.313 [DEBUG] [Thread-192722] [transport.py] [_log()] userauth is OK
2026-04-12T17:12:13.313 [DEBUG] [Thread-192722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:12:13.313 [DEBUG] [Thread-192722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:12:13.313 [DEBUG] [Thread-192722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:12:13.313 [DEBUG] [Thread-192722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:12:13.325 [INFO] [Thread-192722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:12:13.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:12:13.937 [DEBUG] [Thread-192722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:12:13.938 [DEBUG] [Thread-192722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:12:13.938 [DEBUG] [Thread-192722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:12:13.979 [DEBUG] [Thread-192722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:12:13.979 [DEBUG] [Thread-192722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:12:13.982 [DEBUG] [Thread-192722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:12:13.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:12:13.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:12:13.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:12:13.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:12:14.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:12:14.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:12:14.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:12:14.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:12:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:12:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.633091 -999.00  +14.20  13.62     75   +9.80 1 2 1 1 1   887    0 1.60 -98.47 ----- 13.6 13.6 263.2 22.3 16.4 -23.4 16.3 -22.1 15.9 -20.1 16.3 -22.5
2026-04-12T17:12:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:12:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:12:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.633091
2026-04-12T17:12:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:12:14.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:12:14.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:12:14.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:12:14.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:12:14.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:11:52', tmtdew=5.25526, humidity=70.6483, cloud=0.0, wind=21.8772, temperature=14.5179, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:11:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:12:14.006 [DEBUG] [Thread-192722] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:12:14.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:12:14.108 [DEBUG] [Thread-192725] [transport.py] [_log()] starting thread (client mode): 0xae5b50c0
2026-04-12T17:12:14.108 [DEBUG] [Thread-192725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:12:14.122 [DEBUG] [Thread-192725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:12:14.122 [INFO] [Thread-192725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:14.130 [DEBUG] [Thread-192725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] client lang: <none>
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] server lang: <none>
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] kex follows: False
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] Compression: none
2026-04-12T17:12:14.131 [DEBUG] [Thread-192725] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:12:14.188 [DEBUG] [Thread-192725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:12:14.188 [DEBUG] [Thread-192725] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:12:14.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:12:14.189 [DEBUG] [Thread-192725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:12:14.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:12:14.249 [DEBUG] [Thread-192725] [transport.py] [_log()] userauth is OK
2026-04-12T17:12:14.249 [DEBUG] [Thread-192725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:12:14.249 [DEBUG] [Thread-192725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:12:14.249 [DEBUG] [Thread-192725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:12:14.249 [DEBUG] [Thread-192725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:12:14.271 [INFO] [Thread-192725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:12:14.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:12:14.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:12:15.149 [DEBUG] [Thread-192725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:12:15.150 [DEBUG] [Thread-192725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:12:15.198 [DEBUG] [Thread-192725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:12:15.198 [DEBUG] [Thread-192725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:12:15.207 [DEBUG] [Thread-192725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:12:15.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:12:15.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:12:15.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:12:15.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:12:15.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:12:15.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:12:15.241 [DEBUG] [Thread-192725] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:12:23.740 [DEBUG] [Thread-192727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:12:38.794 [DEBUG] [Thread-192728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:12:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:12:45.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:12:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:12:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 12, 28), 5.26168, 70.3907, 0.0, 17.8571, 14.1595, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:12:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:12:28
2026-04-12T17:12:46.862 [DEBUG] [Thread-192729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:12:46.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:12:47.016 [DEBUG] [Thread-192730] [transport.py] [_log()] starting thread (client mode): 0xae5a4250
2026-04-12T17:12:47.016 [DEBUG] [Thread-192730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:12:47.032 [DEBUG] [Thread-192730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:12:47.032 [INFO] [Thread-192730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:47.034 [DEBUG] [Thread-192730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] client lang: <none>
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] server lang: <none>
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] kex follows: False
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] Compression: none
2026-04-12T17:12:47.035 [DEBUG] [Thread-192730] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:12:47.051 [DEBUG] [Thread-192730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:12:47.052 [DEBUG] [Thread-192730] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:12:47.052 [DEBUG] [Thread-192730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:12:47.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:12:47.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:12:47.055 [DEBUG] [Thread-192730] [transport.py] [_log()] userauth is OK
2026-04-12T17:12:47.055 [DEBUG] [Thread-192730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:12:47.055 [DEBUG] [Thread-192730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:12:47.055 [DEBUG] [Thread-192730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:12:47.055 [DEBUG] [Thread-192730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:12:47.080 [INFO] [Thread-192730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:12:47.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:12:47.658 [DEBUG] [Thread-192730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:12:47.659 [DEBUG] [Thread-192730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:12:47.659 [DEBUG] [Thread-192730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:12:47.700 [DEBUG] [Thread-192730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:12:47.700 [DEBUG] [Thread-192730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:12:47.704 [DEBUG] [Thread-192730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:12:47.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:12:47.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:12:47.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:12:47.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:12:47.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:12:47.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.633785 -999.00  +14.20  12.61     74   +9.80 1 2 1 1 1   887    0 2.09 -81.82 ----- 12.6 12.6 262.4 19.3 16.5 -23.1 16.3 -21.8 16.3 -18.8 16.6 -20.3
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.633785
2026-04-12T17:12:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:12:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:12:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:12:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:12:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:12:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:12:28', tmtdew=5.26168, humidity=70.3907, cloud=0.0, wind=17.8571, temperature=14.1595, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:12:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:12:47.716 [DEBUG] [Thread-192730] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:12:47.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:12:47.800 [DEBUG] [Thread-192733] [transport.py] [_log()] starting thread (client mode): 0xae5f2cb0
2026-04-12T17:12:47.800 [DEBUG] [Thread-192733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:12:47.814 [DEBUG] [Thread-192733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:12:47.814 [INFO] [Thread-192733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:12:47.822 [DEBUG] [Thread-192733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:12:47.822 [DEBUG] [Thread-192733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:12:47.822 [DEBUG] [Thread-192733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:12:47.822 [DEBUG] [Thread-192733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:47.822 [DEBUG] [Thread-192733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:12:47.822 [DEBUG] [Thread-192733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:47.822 [DEBUG] [Thread-192733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] client lang: <none>
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] server lang: <none>
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] kex follows: False
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:12:47.823 [DEBUG] [Thread-192733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:12:47.824 [DEBUG] [Thread-192733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:12:47.824 [DEBUG] [Thread-192733] [transport.py] [_log()] Compression: none
2026-04-12T17:12:47.824 [DEBUG] [Thread-192733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:12:47.881 [DEBUG] [Thread-192733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:12:47.882 [DEBUG] [Thread-192733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:12:47.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:12:47.883 [DEBUG] [Thread-192733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:12:47.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:12:47.938 [DEBUG] [Thread-192733] [transport.py] [_log()] userauth is OK
2026-04-12T17:12:47.938 [DEBUG] [Thread-192733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:12:47.938 [DEBUG] [Thread-192733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:12:47.938 [DEBUG] [Thread-192733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:12:47.939 [DEBUG] [Thread-192733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:12:47.962 [INFO] [Thread-192733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:12:47.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:12:47.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:12:48.816 [DEBUG] [Thread-192733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:12:48.817 [DEBUG] [Thread-192733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:12:48.864 [DEBUG] [Thread-192733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:12:48.864 [DEBUG] [Thread-192733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:12:48.873 [DEBUG] [Thread-192733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:12:48.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:12:48.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:12:48.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:12:48.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:12:48.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:12:48.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:12:48.910 [DEBUG] [Thread-192733] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:12:53.834 [DEBUG] [Thread-192735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:12:55.841 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:12:55.843 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:08.886 [DEBUG] [Thread-192736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:13:18.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:13:18.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:13:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 13, 4), 5.28803, 70.2748, 0.0, 18.6156, 14.2093, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:13:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:13:04
2026-04-12T17:13:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:13:20.734 [DEBUG] [Thread-192737] [transport.py] [_log()] starting thread (client mode): 0xae52faf0
2026-04-12T17:13:20.734 [DEBUG] [Thread-192737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:13:20.749 [DEBUG] [Thread-192737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:13:20.749 [INFO] [Thread-192737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] client lang: <none>
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] server lang: <none>
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] kex follows: False
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:13:20.751 [DEBUG] [Thread-192737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:13:20.752 [DEBUG] [Thread-192737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:13:20.752 [DEBUG] [Thread-192737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:13:20.752 [DEBUG] [Thread-192737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:13:20.752 [DEBUG] [Thread-192737] [transport.py] [_log()] Compression: none
2026-04-12T17:13:20.752 [DEBUG] [Thread-192737] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:13:20.763 [DEBUG] [Thread-192737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:13:20.763 [DEBUG] [Thread-192737] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:13:20.764 [DEBUG] [Thread-192737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:13:20.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:13:20.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:13:20.765 [DEBUG] [Thread-192737] [transport.py] [_log()] userauth is OK
2026-04-12T17:13:20.766 [DEBUG] [Thread-192737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:13:20.766 [DEBUG] [Thread-192737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:13:20.766 [DEBUG] [Thread-192737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:13:20.766 [DEBUG] [Thread-192737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:13:20.789 [INFO] [Thread-192737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:13:20.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:13:21.380 [DEBUG] [Thread-192737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:13:21.380 [DEBUG] [Thread-192737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:13:21.381 [DEBUG] [Thread-192737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:13:21.421 [DEBUG] [Thread-192737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:13:21.421 [DEBUG] [Thread-192737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:13:21.424 [DEBUG] [Thread-192737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:13:21.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:13:21.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:13:21.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:13:21.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:13:21.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:13:21.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:13:21.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:13:21.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:13:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:13:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.634132 -999.00  +14.30  13.59     73   +9.60 1 2 1 1 1   887    0 2.35 -68.62 ----- 13.6 13.6 267.4 24.0 16.6 -22.9 16.3 -22.0 16.4 -18.8 16.7 -21.0
2026-04-12T17:13:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:13:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:13:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.634132
2026-04-12T17:13:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:13:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:13:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:13:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:13:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:13:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:13:04', tmtdew=5.28803, humidity=70.2748, cloud=0.0, wind=18.6156, temperature=14.2093, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:13:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:13:21.451 [DEBUG] [Thread-192737] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:13:21.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:13:21.544 [DEBUG] [Thread-192740] [transport.py] [_log()] starting thread (client mode): 0xae5f2ec0
2026-04-12T17:13:21.544 [DEBUG] [Thread-192740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:13:21.558 [DEBUG] [Thread-192740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:13:21.558 [INFO] [Thread-192740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] client lang: <none>
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] server lang: <none>
2026-04-12T17:13:21.566 [DEBUG] [Thread-192740] [transport.py] [_log()] kex follows: False
2026-04-12T17:13:21.567 [DEBUG] [Thread-192740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:13:21.567 [DEBUG] [Thread-192740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:13:21.567 [DEBUG] [Thread-192740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:13:21.567 [DEBUG] [Thread-192740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:13:21.567 [DEBUG] [Thread-192740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:13:21.567 [DEBUG] [Thread-192740] [transport.py] [_log()] Compression: none
2026-04-12T17:13:21.567 [DEBUG] [Thread-192740] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:13:21.626 [DEBUG] [Thread-192740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:13:21.626 [DEBUG] [Thread-192740] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:13:21.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:13:21.627 [DEBUG] [Thread-192740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:13:21.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:13:21.682 [DEBUG] [Thread-192740] [transport.py] [_log()] userauth is OK
2026-04-12T17:13:21.682 [DEBUG] [Thread-192740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:13:21.682 [DEBUG] [Thread-192740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:13:21.682 [DEBUG] [Thread-192740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:13:21.682 [DEBUG] [Thread-192740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:13:21.701 [INFO] [Thread-192740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:13:21.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:13:21.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:13:22.540 [DEBUG] [Thread-192740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:13:22.541 [DEBUG] [Thread-192740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:13:22.588 [DEBUG] [Thread-192740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:13:22.588 [DEBUG] [Thread-192740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:13:22.597 [DEBUG] [Thread-192740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:13:22.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:13:22.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:13:22.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:13:22.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:13:22.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:13:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:13:22.638 [DEBUG] [Thread-192740] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:13:23.921 [DEBUG] [Thread-192742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:38.976 [DEBUG] [Thread-192743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:46.911 [DEBUG] [Thread-192744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:13:52.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:13:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:13:53.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 13, 39), 5.31755, 70.3844, 0.0, 15.0329, 14.6847, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:13:53.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:13:39
2026-04-12T17:13:54.017 [DEBUG] [Thread-192745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:54.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:13:54.473 [DEBUG] [Thread-192746] [transport.py] [_log()] starting thread (client mode): 0xae50a140
2026-04-12T17:13:54.473 [DEBUG] [Thread-192746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:13:54.493 [DEBUG] [Thread-192746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:13:54.493 [INFO] [Thread-192746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:13:54.504 [DEBUG] [Thread-192746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:13:54.505 [DEBUG] [Thread-192746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:13:54.506 [DEBUG] [Thread-192746] [transport.py] [_log()] client lang: <none>
2026-04-12T17:13:54.506 [DEBUG] [Thread-192746] [transport.py] [_log()] server lang: <none>
2026-04-12T17:13:54.506 [DEBUG] [Thread-192746] [transport.py] [_log()] kex follows: False
2026-04-12T17:13:54.506 [DEBUG] [Thread-192746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:13:54.506 [DEBUG] [Thread-192746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:13:54.507 [DEBUG] [Thread-192746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:13:54.507 [DEBUG] [Thread-192746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:13:54.507 [DEBUG] [Thread-192746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:13:54.507 [DEBUG] [Thread-192746] [transport.py] [_log()] Compression: none
2026-04-12T17:13:54.507 [DEBUG] [Thread-192746] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:13:54.526 [DEBUG] [Thread-192746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:13:54.526 [DEBUG] [Thread-192746] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:13:54.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:13:54.528 [DEBUG] [Thread-192746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:13:54.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:13:54.530 [DEBUG] [Thread-192746] [transport.py] [_log()] userauth is OK
2026-04-12T17:13:54.530 [DEBUG] [Thread-192746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:13:54.530 [DEBUG] [Thread-192746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:13:54.530 [DEBUG] [Thread-192746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:13:54.530 [DEBUG] [Thread-192746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:13:54.540 [INFO] [Thread-192746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:13:54.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:13:55.135 [DEBUG] [Thread-192746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:13:55.135 [DEBUG] [Thread-192746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:13:55.136 [DEBUG] [Thread-192746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:13:55.176 [DEBUG] [Thread-192746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:13:55.176 [DEBUG] [Thread-192746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:13:55.179 [DEBUG] [Thread-192746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:13:55.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:13:55.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:13:55.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:13:55.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:13:55.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:13:55.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:13:55.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:13:55.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:13:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:13:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.634480 -999.00  +14.40  19.76     74   +9.80 1 2 1 1 1   887    0 2.72 -59.07 ----- 19.8 19.8 266.2 23.6 16.4 -23.6 16.4 -21.7 16.3 -21.8 16.7 -22.7
2026-04-12T17:13:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:13:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:13:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.634480
2026-04-12T17:13:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:13:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:13:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:13:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:13:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:13:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:13:39', tmtdew=5.31755, humidity=70.3844, cloud=0.0, wind=15.0329, temperature=14.6847, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:13:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:13:55.202 [DEBUG] [Thread-192746] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:13:55.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:13:55.298 [DEBUG] [Thread-192749] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-12T17:13:55.298 [DEBUG] [Thread-192749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:13:55.313 [DEBUG] [Thread-192749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:13:55.313 [INFO] [Thread-192749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:13:55.320 [DEBUG] [Thread-192749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:13:55.320 [DEBUG] [Thread-192749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] client lang: <none>
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] server lang: <none>
2026-04-12T17:13:55.321 [DEBUG] [Thread-192749] [transport.py] [_log()] kex follows: False
2026-04-12T17:13:55.322 [DEBUG] [Thread-192749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:13:55.322 [DEBUG] [Thread-192749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:13:55.322 [DEBUG] [Thread-192749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:13:55.322 [DEBUG] [Thread-192749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:13:55.322 [DEBUG] [Thread-192749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:13:55.322 [DEBUG] [Thread-192749] [transport.py] [_log()] Compression: none
2026-04-12T17:13:55.322 [DEBUG] [Thread-192749] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:13:55.378 [DEBUG] [Thread-192749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:13:55.378 [DEBUG] [Thread-192749] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:13:55.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:13:55.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:13:55.380 [DEBUG] [Thread-192749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:13:55.434 [DEBUG] [Thread-192749] [transport.py] [_log()] userauth is OK
2026-04-12T17:13:55.434 [DEBUG] [Thread-192749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:13:55.434 [DEBUG] [Thread-192749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:13:55.435 [DEBUG] [Thread-192749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:13:55.435 [DEBUG] [Thread-192749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:13:55.453 [INFO] [Thread-192749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:13:55.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:13:55.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:13:55.984 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:55.985 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:13:56.270 [DEBUG] [Thread-192749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:13:56.271 [DEBUG] [Thread-192749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:13:56.318 [DEBUG] [Thread-192749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:13:56.318 [DEBUG] [Thread-192749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:13:56.327 [DEBUG] [Thread-192749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:13:56.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:13:56.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:13:56.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:13:56.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:13:56.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:13:56.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:13:56.364 [DEBUG] [Thread-192749] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:14:09.057 [DEBUG] [Thread-192751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:14:24.108 [DEBUG] [Thread-192752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:14:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:14:26.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:14:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:14:27.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 14, 15), 5.53748, 69.3277, 0.0, 16.8509, 14.4755, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:14:27.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:14:15
2026-04-12T17:14:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:14:28.186 [DEBUG] [Thread-192753] [transport.py] [_log()] starting thread (client mode): 0xae50a7a0
2026-04-12T17:14:28.186 [DEBUG] [Thread-192753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:14:28.206 [DEBUG] [Thread-192753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:14:28.206 [INFO] [Thread-192753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] client lang: <none>
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] server lang: <none>
2026-04-12T17:14:28.209 [DEBUG] [Thread-192753] [transport.py] [_log()] kex follows: False
2026-04-12T17:14:28.210 [DEBUG] [Thread-192753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:14:28.210 [DEBUG] [Thread-192753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:14:28.210 [DEBUG] [Thread-192753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:14:28.210 [DEBUG] [Thread-192753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:14:28.210 [DEBUG] [Thread-192753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:14:28.210 [DEBUG] [Thread-192753] [transport.py] [_log()] Compression: none
2026-04-12T17:14:28.210 [DEBUG] [Thread-192753] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:14:28.229 [DEBUG] [Thread-192753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:14:28.230 [DEBUG] [Thread-192753] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:14:28.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:14:28.231 [DEBUG] [Thread-192753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:14:28.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:14:28.233 [DEBUG] [Thread-192753] [transport.py] [_log()] userauth is OK
2026-04-12T17:14:28.234 [DEBUG] [Thread-192753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:14:28.234 [DEBUG] [Thread-192753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:14:28.234 [DEBUG] [Thread-192753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:14:28.234 [DEBUG] [Thread-192753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:14:28.259 [INFO] [Thread-192753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:14:28.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:14:28.884 [DEBUG] [Thread-192753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:14:28.885 [DEBUG] [Thread-192753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:14:28.885 [DEBUG] [Thread-192753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:14:28.925 [DEBUG] [Thread-192753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:14:28.926 [DEBUG] [Thread-192753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:14:28.929 [DEBUG] [Thread-192753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:14:28.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:14:28.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:14:28.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:14:28.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:14:28.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:14:28.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:14:28.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:14:28.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:14:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:14:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.634827 -999.00  +14.30  12.05     74   +9.80 1 2 1 1 1   887    0 2.93 -53.28 ----- 12.1 12.1 273.8 23.6 16.4 -23.6 16.2 -22.2 16.1 -20.2 16.7 -22.8
2026-04-12T17:14:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:14:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:14:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.634827
2026-04-12T17:14:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:14:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:14:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:14:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:14:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:14:28.954 [DEBUG] [Thread-192753] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:14:28.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:14:15', tmtdew=5.53748, humidity=69.3277, cloud=0.0, wind=16.8509, temperature=14.4755, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:14:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:14:29.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:14:29.048 [DEBUG] [Thread-192756] [transport.py] [_log()] starting thread (client mode): 0xae509090
2026-04-12T17:14:29.048 [DEBUG] [Thread-192756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:14:29.063 [DEBUG] [Thread-192756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:14:29.063 [INFO] [Thread-192756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:14:29.071 [DEBUG] [Thread-192756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:14:29.071 [DEBUG] [Thread-192756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:14:29.071 [DEBUG] [Thread-192756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:14:29.071 [DEBUG] [Thread-192756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:14:29.071 [DEBUG] [Thread-192756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] client lang: <none>
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] server lang: <none>
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] kex follows: False
2026-04-12T17:14:29.072 [DEBUG] [Thread-192756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:14:29.073 [DEBUG] [Thread-192756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:14:29.073 [DEBUG] [Thread-192756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:14:29.073 [DEBUG] [Thread-192756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:14:29.073 [DEBUG] [Thread-192756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:14:29.073 [DEBUG] [Thread-192756] [transport.py] [_log()] Compression: none
2026-04-12T17:14:29.073 [DEBUG] [Thread-192756] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:14:29.132 [DEBUG] [Thread-192756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:14:29.132 [DEBUG] [Thread-192756] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:14:29.133 [DEBUG] [Thread-192756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:14:29.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:14:29.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:14:29.191 [DEBUG] [Thread-192756] [transport.py] [_log()] userauth is OK
2026-04-12T17:14:29.191 [DEBUG] [Thread-192756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:14:29.191 [DEBUG] [Thread-192756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:14:29.191 [DEBUG] [Thread-192756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:14:29.191 [DEBUG] [Thread-192756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:14:29.210 [INFO] [Thread-192756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:14:29.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:14:29.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:14:30.035 [DEBUG] [Thread-192756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:14:30.035 [DEBUG] [Thread-192756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:14:30.085 [DEBUG] [Thread-192756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:14:30.086 [DEBUG] [Thread-192756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:14:30.096 [DEBUG] [Thread-192756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:14:30.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:14:30.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:14:30.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:14:30.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:14:30.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:14:30.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:14:30.141 [DEBUG] [Thread-192756] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:14:39.146 [DEBUG] [Thread-192758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:14:46.959 [DEBUG] [Thread-192759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:14:54.201 [DEBUG] [Thread-192760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:14:56.127 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:14:56.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:15:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:15:00.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:15:00.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:15:01.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 14, 50), 5.5343, 69.3906, 0.0, 21.6302, 14.8176, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:15:01.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:14:50
2026-04-12T17:15:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:15:01.965 [DEBUG] [Thread-192761] [transport.py] [_log()] starting thread (client mode): 0xae50b040
2026-04-12T17:15:01.965 [DEBUG] [Thread-192761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:15:01.984 [DEBUG] [Thread-192761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:15:01.984 [INFO] [Thread-192761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] client lang: <none>
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] server lang: <none>
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] kex follows: False
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:15:01.987 [DEBUG] [Thread-192761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:15:01.988 [DEBUG] [Thread-192761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:15:01.988 [DEBUG] [Thread-192761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:15:01.988 [DEBUG] [Thread-192761] [transport.py] [_log()] Compression: none
2026-04-12T17:15:01.988 [DEBUG] [Thread-192761] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:15:02.002 [DEBUG] [Thread-192761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:15:02.003 [DEBUG] [Thread-192761] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:15:02.003 [DEBUG] [Thread-192761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:15:02.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:15:02.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:15:02.003 [DEBUG] [Thread-192761] [transport.py] [_log()] userauth is OK
2026-04-12T17:15:02.004 [DEBUG] [Thread-192761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:15:02.004 [DEBUG] [Thread-192761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:15:02.004 [DEBUG] [Thread-192761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:15:02.004 [DEBUG] [Thread-192761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:15:02.017 [INFO] [Thread-192761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:15:02.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:15:02.674 [DEBUG] [Thread-192761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:15:02.675 [DEBUG] [Thread-192761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:15:02.675 [DEBUG] [Thread-192761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:15:02.716 [DEBUG] [Thread-192761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:15:02.716 [DEBUG] [Thread-192761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:15:02.719 [DEBUG] [Thread-192761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:15:02.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:15:02.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:15:02.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:15:02.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:15:02.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:15:02.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:15:02.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:15:02.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:15:02.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:15:02.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.635174 -999.00  +14.20  13.04     74   +9.90 1 2 1 1 1   887    0 3.00 -48.08 ----- 13.0 13.0 260.0 17.8 16.4 -23.2 16.2 -22.0 16.1 -20.2 16.6 -22.5
2026-04-12T17:15:02.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:15:02.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:15:02.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.635174
2026-04-12T17:15:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:15:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:15:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:15:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:15:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:15:02.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:14:50', tmtdew=5.5343, humidity=69.3906, cloud=0.0, wind=21.6302, temperature=14.8176, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:14:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:15:02.747 [DEBUG] [Thread-192761] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:15:02.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:15:02.848 [DEBUG] [Thread-192764] [transport.py] [_log()] starting thread (client mode): 0xae52dc00
2026-04-12T17:15:02.848 [DEBUG] [Thread-192764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:15:02.864 [DEBUG] [Thread-192764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:15:02.864 [INFO] [Thread-192764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:15:02.871 [DEBUG] [Thread-192764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] client lang: <none>
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] server lang: <none>
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] kex follows: False
2026-04-12T17:15:02.872 [DEBUG] [Thread-192764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:15:02.873 [DEBUG] [Thread-192764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:15:02.873 [DEBUG] [Thread-192764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:15:02.873 [DEBUG] [Thread-192764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:15:02.873 [DEBUG] [Thread-192764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:15:02.873 [DEBUG] [Thread-192764] [transport.py] [_log()] Compression: none
2026-04-12T17:15:02.873 [DEBUG] [Thread-192764] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:15:02.935 [DEBUG] [Thread-192764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:15:02.936 [DEBUG] [Thread-192764] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:15:02.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:15:02.937 [DEBUG] [Thread-192764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:15:02.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:15:02.995 [DEBUG] [Thread-192764] [transport.py] [_log()] userauth is OK
2026-04-12T17:15:02.996 [DEBUG] [Thread-192764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:15:02.996 [DEBUG] [Thread-192764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:15:02.996 [DEBUG] [Thread-192764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:15:02.996 [DEBUG] [Thread-192764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:15:03.015 [INFO] [Thread-192764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:15:03.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:15:03.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:15:03.868 [DEBUG] [Thread-192764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:15:03.868 [DEBUG] [Thread-192764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:15:03.916 [DEBUG] [Thread-192764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:15:03.917 [DEBUG] [Thread-192764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:15:03.926 [DEBUG] [Thread-192764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:15:03.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:15:03.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:15:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:15:03.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:15:03.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:15:03.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:15:03.961 [DEBUG] [Thread-192764] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:15:09.240 [DEBUG] [Thread-192766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:15:24.303 [DEBUG] [Thread-192767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:15:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:15:33.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:15:33.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:15:35.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 15, 26), 5.61637, 69.1958, 0.0, 14.4166, 14.4427, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:15:35.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:15:26
2026-04-12T17:15:35.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:15:35.846 [DEBUG] [Thread-192768] [transport.py] [_log()] starting thread (client mode): 0xae52faf0
2026-04-12T17:15:35.846 [DEBUG] [Thread-192768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:15:35.869 [DEBUG] [Thread-192768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:15:35.869 [INFO] [Thread-192768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] client lang: <none>
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] server lang: <none>
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] kex follows: False
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:15:35.872 [DEBUG] [Thread-192768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:15:35.873 [DEBUG] [Thread-192768] [transport.py] [_log()] Compression: none
2026-04-12T17:15:35.873 [DEBUG] [Thread-192768] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:15:35.890 [DEBUG] [Thread-192768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:15:35.890 [DEBUG] [Thread-192768] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:15:35.891 [DEBUG] [Thread-192768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:15:35.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:15:35.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:15:35.893 [DEBUG] [Thread-192768] [transport.py] [_log()] userauth is OK
2026-04-12T17:15:35.893 [DEBUG] [Thread-192768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:15:35.894 [DEBUG] [Thread-192768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:15:35.894 [DEBUG] [Thread-192768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:15:35.894 [DEBUG] [Thread-192768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:15:35.928 [INFO] [Thread-192768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:15:35.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:15:39.339 [DEBUG] [Thread-192770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:15:40.397 [DEBUG] [Thread-192768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:15:40.397 [DEBUG] [Thread-192768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:15:40.398 [DEBUG] [Thread-192768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:15:40.438 [DEBUG] [Thread-192768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:15:40.438 [DEBUG] [Thread-192768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:15:40.441 [DEBUG] [Thread-192768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:15:40.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:15:40.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:15:40.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:15:40.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:15:40.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:15:40.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:15:40.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:15:40.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:15:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:15:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.635174 -999.00  +14.20  13.04     74   +9.90 1 2 1 1 1   887    0 3.00 -48.08 ----- 13.0 13.0 260.0 17.8 16.4 -23.2 16.2 -22.0 16.1 -20.2 16.6 -22.5
2026-04-12T17:15:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:15:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:15:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.635174
2026-04-12T17:15:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:15:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:15:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:15:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:15:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:15:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:15:26', tmtdew=5.61637, humidity=69.1958, cloud=0.0, wind=14.4166, temperature=14.4427, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:14:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:15:40.479 [DEBUG] [Thread-192768] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:15:40.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:15:40.577 [DEBUG] [Thread-192772] [transport.py] [_log()] starting thread (client mode): 0xae52fd90
2026-04-12T17:15:40.577 [DEBUG] [Thread-192772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:15:40.592 [DEBUG] [Thread-192772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:15:40.592 [INFO] [Thread-192772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:15:40.599 [DEBUG] [Thread-192772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:15:40.600 [DEBUG] [Thread-192772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] client lang: <none>
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] server lang: <none>
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] kex follows: False
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:15:40.601 [DEBUG] [Thread-192772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:15:40.602 [DEBUG] [Thread-192772] [transport.py] [_log()] Compression: none
2026-04-12T17:15:40.602 [DEBUG] [Thread-192772] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:15:40.659 [DEBUG] [Thread-192772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:15:40.660 [DEBUG] [Thread-192772] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:15:40.660 [DEBUG] [Thread-192772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:15:40.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:15:40.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:15:40.715 [DEBUG] [Thread-192772] [transport.py] [_log()] userauth is OK
2026-04-12T17:15:40.716 [DEBUG] [Thread-192772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:15:40.716 [DEBUG] [Thread-192772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:15:40.716 [DEBUG] [Thread-192772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:15:40.717 [DEBUG] [Thread-192772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:15:40.736 [INFO] [Thread-192772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:15:40.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:15:40.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:15:41.571 [DEBUG] [Thread-192772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:15:41.571 [DEBUG] [Thread-192772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:15:41.619 [DEBUG] [Thread-192772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:15:41.619 [DEBUG] [Thread-192772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:15:41.628 [DEBUG] [Thread-192772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:15:41.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:15:41.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:15:41.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:15:41.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:15:41.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:15:41.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:15:41.663 [DEBUG] [Thread-192772] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:15:47.015 [DEBUG] [Thread-192774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:15:54.383 [DEBUG] [Thread-192775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:15:56.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:15:56.269 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:16:09.442 [DEBUG] [Thread-192776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:16:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:16:11.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:16:11.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:16:12.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 16, 1), 5.59228, 69.3118, 0.0, 15.7748, 14.4592, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:16:12.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:16:01
2026-04-12T17:16:13.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:16:13.559 [DEBUG] [Thread-192777] [transport.py] [_log()] starting thread (client mode): 0xb0fea590
2026-04-12T17:16:13.559 [DEBUG] [Thread-192777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:16:13.581 [DEBUG] [Thread-192777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:16:13.581 [INFO] [Thread-192777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:16:13.584 [DEBUG] [Thread-192777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:16:13.584 [DEBUG] [Thread-192777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:16:13.584 [DEBUG] [Thread-192777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:16:13.584 [DEBUG] [Thread-192777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:13.584 [DEBUG] [Thread-192777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:13.584 [DEBUG] [Thread-192777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] client lang: <none>
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] server lang: <none>
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] kex follows: False
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] Compression: none
2026-04-12T17:16:13.585 [DEBUG] [Thread-192777] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:16:13.606 [DEBUG] [Thread-192777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:16:13.606 [DEBUG] [Thread-192777] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:16:13.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:16:13.607 [DEBUG] [Thread-192777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:16:13.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:16:13.610 [DEBUG] [Thread-192777] [transport.py] [_log()] userauth is OK
2026-04-12T17:16:13.610 [DEBUG] [Thread-192777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:16:13.610 [DEBUG] [Thread-192777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:16:13.610 [DEBUG] [Thread-192777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:16:13.610 [DEBUG] [Thread-192777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:16:13.634 [INFO] [Thread-192777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:16:13.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:16:14.399 [DEBUG] [Thread-192777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:16:14.399 [DEBUG] [Thread-192777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:16:14.399 [DEBUG] [Thread-192777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:16:14.439 [DEBUG] [Thread-192777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:16:14.439 [DEBUG] [Thread-192777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:16:14.442 [DEBUG] [Thread-192777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:16:14.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:16:14.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:16:14.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:16:14.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:16:14.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:16:14.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:16:14.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.635521 -999.00  +14.30  16.94     75   +9.90 1 2 1 1 1   887    0 3.16 -41.49 ----- 16.9 16.9 267.2 18.9 16.4 -23.1 16.2 -21.7 16.1 -20.1 16.5 -21.9
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.635521
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:16:01', tmtdew=5.59228, humidity=69.3118, cloud=0.0, wind=15.7748, temperature=14.4592, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:15:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:16:14.460 [DEBUG] [Thread-192777] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:16:14.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:16:14.547 [DEBUG] [Thread-192780] [transport.py] [_log()] starting thread (client mode): 0xae509810
2026-04-12T17:16:14.547 [DEBUG] [Thread-192780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:16:14.564 [DEBUG] [Thread-192780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:16:14.564 [INFO] [Thread-192780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:16:14.572 [DEBUG] [Thread-192780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:16:14.572 [DEBUG] [Thread-192780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:16:14.572 [DEBUG] [Thread-192780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:16:14.572 [DEBUG] [Thread-192780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:14.572 [DEBUG] [Thread-192780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:14.572 [DEBUG] [Thread-192780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] client lang: <none>
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] server lang: <none>
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] kex follows: False
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] Compression: none
2026-04-12T17:16:14.573 [DEBUG] [Thread-192780] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:16:14.631 [DEBUG] [Thread-192780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:16:14.632 [DEBUG] [Thread-192780] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:16:14.632 [DEBUG] [Thread-192780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:16:14.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:16:14.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:16:14.688 [DEBUG] [Thread-192780] [transport.py] [_log()] userauth is OK
2026-04-12T17:16:14.688 [DEBUG] [Thread-192780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:16:14.688 [DEBUG] [Thread-192780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:16:14.688 [DEBUG] [Thread-192780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:16:14.688 [DEBUG] [Thread-192780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:16:14.707 [INFO] [Thread-192780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:16:14.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:16:14.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:16:15.570 [DEBUG] [Thread-192780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:16:15.570 [DEBUG] [Thread-192780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:16:15.618 [DEBUG] [Thread-192780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:16:15.618 [DEBUG] [Thread-192780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:16:15.627 [DEBUG] [Thread-192780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:16:15.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:16:15.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:16:15.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:16:15.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:16:15.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:16:15.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:16:15.663 [DEBUG] [Thread-192780] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:16:24.482 [DEBUG] [Thread-192782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:16:39.532 [DEBUG] [Thread-192783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:16:45.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:16:45.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:16:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:16:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 16, 37), 5.4183, 69.9218, 0.0, 17.9258, 14.7522, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:16:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:16:37
2026-04-12T17:16:47.076 [DEBUG] [Thread-192784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:16:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:16:47.504 [DEBUG] [Thread-192785] [transport.py] [_log()] starting thread (client mode): 0xae52d210
2026-04-12T17:16:47.504 [DEBUG] [Thread-192785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:16:47.530 [DEBUG] [Thread-192785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:16:47.531 [INFO] [Thread-192785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] client lang: <none>
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] server lang: <none>
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] kex follows: False
2026-04-12T17:16:47.534 [DEBUG] [Thread-192785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:16:47.535 [DEBUG] [Thread-192785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:16:47.535 [DEBUG] [Thread-192785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:16:47.535 [DEBUG] [Thread-192785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:16:47.535 [DEBUG] [Thread-192785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:16:47.535 [DEBUG] [Thread-192785] [transport.py] [_log()] Compression: none
2026-04-12T17:16:47.535 [DEBUG] [Thread-192785] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:16:47.552 [DEBUG] [Thread-192785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:16:47.553 [DEBUG] [Thread-192785] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:16:47.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:16:47.554 [DEBUG] [Thread-192785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:16:47.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:16:47.556 [DEBUG] [Thread-192785] [transport.py] [_log()] userauth is OK
2026-04-12T17:16:47.556 [DEBUG] [Thread-192785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:16:47.556 [DEBUG] [Thread-192785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:16:47.556 [DEBUG] [Thread-192785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:16:47.556 [DEBUG] [Thread-192785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:16:47.578 [INFO] [Thread-192785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:16:47.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:16:48.190 [DEBUG] [Thread-192785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:16:48.190 [DEBUG] [Thread-192785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:16:48.190 [DEBUG] [Thread-192785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:16:48.231 [DEBUG] [Thread-192785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:16:48.231 [DEBUG] [Thread-192785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:16:48.233 [DEBUG] [Thread-192785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:16:48.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:16:48.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:16:48.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:16:48.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:16:48.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:16:48.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:16:48.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:16:48.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:16:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:16:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.636563 -999.00  +14.50   9.72     75  +10.30 1 2 1 1 1   887    0 3.48 -27.11 ----- 9.7 9.7 260.4 15.4 16.6 -22.4 16.3 -21.2 16.3 -18.3 16.8 -21.1
2026-04-12T17:16:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:16:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:16:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.636563
2026-04-12T17:16:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:16:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:16:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:16:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:16:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:16:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:16:37', tmtdew=5.4183, humidity=69.9218, cloud=0.0, wind=17.9258, temperature=14.7522, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:16:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:16:48.258 [DEBUG] [Thread-192785] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:16:48.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:16:48.349 [DEBUG] [Thread-192788] [transport.py] [_log()] starting thread (client mode): 0xae52d240
2026-04-12T17:16:48.349 [DEBUG] [Thread-192788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:16:48.364 [DEBUG] [Thread-192788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:16:48.364 [INFO] [Thread-192788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:16:48.372 [DEBUG] [Thread-192788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:16:48.372 [DEBUG] [Thread-192788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:16:48.372 [DEBUG] [Thread-192788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:16:48.372 [DEBUG] [Thread-192788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:48.372 [DEBUG] [Thread-192788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:16:48.372 [DEBUG] [Thread-192788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:48.372 [DEBUG] [Thread-192788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] client lang: <none>
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] server lang: <none>
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] kex follows: False
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:16:48.373 [DEBUG] [Thread-192788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:16:48.374 [DEBUG] [Thread-192788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:16:48.374 [DEBUG] [Thread-192788] [transport.py] [_log()] Compression: none
2026-04-12T17:16:48.374 [DEBUG] [Thread-192788] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:16:48.433 [DEBUG] [Thread-192788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:16:48.433 [DEBUG] [Thread-192788] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:16:48.434 [DEBUG] [Thread-192788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:16:48.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:16:48.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:16:48.492 [DEBUG] [Thread-192788] [transport.py] [_log()] userauth is OK
2026-04-12T17:16:48.492 [DEBUG] [Thread-192788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:16:48.493 [DEBUG] [Thread-192788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:16:48.493 [DEBUG] [Thread-192788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:16:48.493 [DEBUG] [Thread-192788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:16:48.518 [INFO] [Thread-192788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:16:48.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:16:48.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:16:49.350 [DEBUG] [Thread-192788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:16:49.350 [DEBUG] [Thread-192788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:16:49.398 [DEBUG] [Thread-192788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:16:49.398 [DEBUG] [Thread-192788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:16:49.408 [DEBUG] [Thread-192788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:16:49.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:16:49.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:16:49.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:16:49.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:16:49.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:16:49.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:16:49.446 [DEBUG] [Thread-192788] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:16:54.570 [DEBUG] [Thread-192790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:16:56.413 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:16:56.414 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:09.621 [DEBUG] [Thread-192791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:19.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:17:19.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:17:19.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:17:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 17, 12), 5.28348, 70.8092, 0.0, 16.4628, 14.4767, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:17:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:17:12
2026-04-12T17:17:21.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:17:21.336 [DEBUG] [Thread-192792] [transport.py] [_log()] starting thread (client mode): 0xae5f2740
2026-04-12T17:17:21.336 [DEBUG] [Thread-192792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:17:21.359 [DEBUG] [Thread-192792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:17:21.360 [INFO] [Thread-192792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:17:21.361 [DEBUG] [Thread-192792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:17:21.361 [DEBUG] [Thread-192792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:17:21.361 [DEBUG] [Thread-192792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:17:21.361 [DEBUG] [Thread-192792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] client lang: <none>
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] server lang: <none>
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] kex follows: False
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:17:21.362 [DEBUG] [Thread-192792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:17:21.363 [DEBUG] [Thread-192792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:17:21.363 [DEBUG] [Thread-192792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:17:21.363 [DEBUG] [Thread-192792] [transport.py] [_log()] Compression: none
2026-04-12T17:17:21.363 [DEBUG] [Thread-192792] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:17:21.376 [DEBUG] [Thread-192792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:17:21.376 [DEBUG] [Thread-192792] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:17:21.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:17:21.377 [DEBUG] [Thread-192792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:17:21.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:17:21.379 [DEBUG] [Thread-192792] [transport.py] [_log()] userauth is OK
2026-04-12T17:17:21.379 [DEBUG] [Thread-192792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:17:21.379 [DEBUG] [Thread-192792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:17:21.380 [DEBUG] [Thread-192792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:17:21.380 [DEBUG] [Thread-192792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:17:21.398 [INFO] [Thread-192792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:17:21.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:17:22.014 [DEBUG] [Thread-192792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:17:22.014 [DEBUG] [Thread-192792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:17:22.015 [DEBUG] [Thread-192792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:17:22.056 [DEBUG] [Thread-192792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:17:22.057 [DEBUG] [Thread-192792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:17:22.061 [DEBUG] [Thread-192792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:17:22.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:17:22.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:17:22.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:17:22.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:17:22.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:17:22.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:17:22.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:17:22.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:17:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:17:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.636910 -999.00  +14.60  18.35     76  +10.40 1 2 1 1 1   887    0 3.66 -21.83 ----- 18.4 18.4 256.7 23.1 16.7 -22.3 16.4 -21.0 16.4 -18.4 17.0 -20.2
2026-04-12T17:17:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:17:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:17:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.636910
2026-04-12T17:17:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:17:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:17:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:17:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:17:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:17:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:17:12', tmtdew=5.28348, humidity=70.8092, cloud=0.0, wind=16.4628, temperature=14.4767, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:17:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:17:22.087 [DEBUG] [Thread-192792] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:17:22.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:17:22.185 [DEBUG] [Thread-192795] [transport.py] [_log()] starting thread (client mode): 0xae5b7f40
2026-04-12T17:17:22.185 [DEBUG] [Thread-192795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:17:22.199 [DEBUG] [Thread-192795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:17:22.200 [INFO] [Thread-192795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:17:22.207 [DEBUG] [Thread-192795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:17:22.208 [DEBUG] [Thread-192795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:17:22.208 [DEBUG] [Thread-192795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:17:22.208 [DEBUG] [Thread-192795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:22.208 [DEBUG] [Thread-192795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:22.208 [DEBUG] [Thread-192795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] client lang: <none>
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] server lang: <none>
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] kex follows: False
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] Compression: none
2026-04-12T17:17:22.209 [DEBUG] [Thread-192795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:17:22.264 [DEBUG] [Thread-192795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:17:22.264 [DEBUG] [Thread-192795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:17:22.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:17:22.266 [DEBUG] [Thread-192795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:17:22.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:17:22.320 [DEBUG] [Thread-192795] [transport.py] [_log()] userauth is OK
2026-04-12T17:17:22.321 [DEBUG] [Thread-192795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:17:22.321 [DEBUG] [Thread-192795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:17:22.321 [DEBUG] [Thread-192795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:17:22.321 [DEBUG] [Thread-192795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:17:22.340 [INFO] [Thread-192795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:17:22.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:17:22.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:17:23.135 [DEBUG] [Thread-192795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:17:23.135 [DEBUG] [Thread-192795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:17:23.183 [DEBUG] [Thread-192795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:17:23.184 [DEBUG] [Thread-192795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:17:23.193 [DEBUG] [Thread-192795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:17:23.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:17:23.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')
2026-04-12T17:17:23.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:17:23.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:17:23.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:17:23.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:17:23.228 [DEBUG] [Thread-192795] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:17:24.657 [DEBUG] [Thread-192797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:39.710 [DEBUG] [Thread-192798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:47.127 [DEBUG] [Thread-192799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:17:53.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:17:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:17:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 17, 12), 5.28348, 70.8092, 0.0, 16.4628, 14.4767, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:17:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:17:12
2026-04-12T17:17:54.747 [DEBUG] [Thread-192800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:54.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:17:55.088 [DEBUG] [Thread-192801] [transport.py] [_log()] starting thread (client mode): 0xae5b4c10
2026-04-12T17:17:55.088 [DEBUG] [Thread-192801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:17:55.100 [DEBUG] [Thread-192801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:17:55.101 [INFO] [Thread-192801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] client lang: <none>
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] server lang: <none>
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] kex follows: False
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] Compression: none
2026-04-12T17:17:55.102 [DEBUG] [Thread-192801] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:17:55.116 [DEBUG] [Thread-192801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:17:55.116 [DEBUG] [Thread-192801] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:17:55.116 [DEBUG] [Thread-192801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:17:55.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:17:55.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:17:55.118 [DEBUG] [Thread-192801] [transport.py] [_log()] userauth is OK
2026-04-12T17:17:55.118 [DEBUG] [Thread-192801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:17:55.118 [DEBUG] [Thread-192801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:17:55.118 [DEBUG] [Thread-192801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:17:55.118 [DEBUG] [Thread-192801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:17:55.140 [INFO] [Thread-192801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:17:55.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:17:55.709 [DEBUG] [Thread-192801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:17:55.710 [DEBUG] [Thread-192801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:17:55.710 [DEBUG] [Thread-192801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:17:55.751 [DEBUG] [Thread-192801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:17:55.752 [DEBUG] [Thread-192801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:17:55.754 [DEBUG] [Thread-192801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:17:55.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:17:55.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:17:55.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:17:55.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:17:55.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:17:55.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:17:55.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:17:55.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:17:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:17:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.637257 -999.00  +14.60  13.82     75  +10.30 1 2 1 1 1   887    0 3.70 -20.65 ----- 13.8 13.8 262.0 21.6 16.6 -22.8 16.4 -21.5 16.6 -18.7 17.1 -20.6
2026-04-12T17:17:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:17:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:17:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.637257
2026-04-12T17:17:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:17:55.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:17:55.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:17:55.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:17:55.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:17:55.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:17:12', tmtdew=5.28348, humidity=70.8092, cloud=0.0, wind=16.4628, temperature=14.4767, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:17:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:17:55.778 [DEBUG] [Thread-192801] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:17:55.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:17:55.878 [DEBUG] [Thread-192804] [transport.py] [_log()] starting thread (client mode): 0xae5083d0
2026-04-12T17:17:55.878 [DEBUG] [Thread-192804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:17:55.893 [DEBUG] [Thread-192804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:17:55.893 [INFO] [Thread-192804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:17:55.906 [DEBUG] [Thread-192804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:17:55.906 [DEBUG] [Thread-192804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:17:55.906 [DEBUG] [Thread-192804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] client lang: <none>
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] server lang: <none>
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] kex follows: False
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] Compression: none
2026-04-12T17:17:55.907 [DEBUG] [Thread-192804] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:17:55.965 [DEBUG] [Thread-192804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:17:55.965 [DEBUG] [Thread-192804] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:17:55.966 [DEBUG] [Thread-192804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:17:55.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:17:55.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:17:56.021 [DEBUG] [Thread-192804] [transport.py] [_log()] userauth is OK
2026-04-12T17:17:56.021 [DEBUG] [Thread-192804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:17:56.022 [DEBUG] [Thread-192804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:17:56.022 [DEBUG] [Thread-192804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:17:56.022 [DEBUG] [Thread-192804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:17:56.041 [INFO] [Thread-192804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:17:56.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:17:56.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:17:56.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:56.555 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:17:56.860 [DEBUG] [Thread-192804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:17:56.860 [DEBUG] [Thread-192804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:17:56.908 [DEBUG] [Thread-192804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:17:56.909 [DEBUG] [Thread-192804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:17:56.918 [DEBUG] [Thread-192804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:17:56.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:17:56.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:17: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
2026-04-12T17:17:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:17:56.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:17:56.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:17:56.955 [DEBUG] [Thread-192804] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:18:09.784 [DEBUG] [Thread-192806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:18:24.837 [DEBUG] [Thread-192807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:18:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:18:26.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:18:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:18:28.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 17, 48), 5.22334, 70.851, 0.0, 20.8894, 14.7865, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:18:28.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:17:48
2026-04-12T17:18:28.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:18:28.969 [DEBUG] [Thread-192808] [transport.py] [_log()] starting thread (client mode): 0xae5b6f50
2026-04-12T17:18:28.969 [DEBUG] [Thread-192808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:18:28.988 [DEBUG] [Thread-192808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:18:28.988 [INFO] [Thread-192808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:18:28.991 [DEBUG] [Thread-192808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:18:28.991 [DEBUG] [Thread-192808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:18:28.991 [DEBUG] [Thread-192808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:18:28.991 [DEBUG] [Thread-192808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] client lang: <none>
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] server lang: <none>
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] kex follows: False
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] Compression: none
2026-04-12T17:18:28.992 [DEBUG] [Thread-192808] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:18:29.008 [DEBUG] [Thread-192808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:18:29.009 [DEBUG] [Thread-192808] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:18:29.009 [DEBUG] [Thread-192808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:18:29.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:18:29.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:18:29.011 [DEBUG] [Thread-192808] [transport.py] [_log()] userauth is OK
2026-04-12T17:18:29.011 [DEBUG] [Thread-192808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:18:29.012 [DEBUG] [Thread-192808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:18:29.012 [DEBUG] [Thread-192808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:18:29.012 [DEBUG] [Thread-192808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:18:29.045 [INFO] [Thread-192808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:18:29.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:18:29.661 [DEBUG] [Thread-192808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:18:29.662 [DEBUG] [Thread-192808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:18:29.662 [DEBUG] [Thread-192808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:18:29.703 [DEBUG] [Thread-192808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:18:29.703 [DEBUG] [Thread-192808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:18:29.707 [DEBUG] [Thread-192808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:18:29.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:18:29.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:18:29.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:18:29.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:18:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:18:29.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:18:29.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:18:29.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:18:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:18:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.637605 -999.00  +14.70  17.49     75  +10.30 1 2 1 1 1   887    0 3.91 -15.93 ----- 17.5 17.5 254.8 20.6 16.8 -23.0 16.4 -21.6 16.7 -18.9 17.3 -21.0
2026-04-12T17:18:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:18:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:18:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.637605
2026-04-12T17:18:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:18:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:18:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:18:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:18:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:18:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:17:48', tmtdew=5.22334, humidity=70.851, cloud=0.0, wind=20.8894, temperature=14.7865, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:18:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:18:29.733 [DEBUG] [Thread-192808] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:18:29.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:18:29.820 [DEBUG] [Thread-192811] [transport.py] [_log()] starting thread (client mode): 0xae5f3e80
2026-04-12T17:18:29.821 [DEBUG] [Thread-192811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:18:29.836 [DEBUG] [Thread-192811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:18:29.836 [INFO] [Thread-192811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:18:29.844 [DEBUG] [Thread-192811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:18:29.844 [DEBUG] [Thread-192811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:18:29.844 [DEBUG] [Thread-192811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:18:29.844 [DEBUG] [Thread-192811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:18:29.844 [DEBUG] [Thread-192811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] client lang: <none>
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] server lang: <none>
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] kex follows: False
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:18:29.845 [DEBUG] [Thread-192811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:18:29.846 [DEBUG] [Thread-192811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:18:29.846 [DEBUG] [Thread-192811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:18:29.846 [DEBUG] [Thread-192811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:18:29.846 [DEBUG] [Thread-192811] [transport.py] [_log()] Compression: none
2026-04-12T17:18:29.846 [DEBUG] [Thread-192811] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:18:29.901 [DEBUG] [Thread-192811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:18:29.902 [DEBUG] [Thread-192811] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:18:29.903 [DEBUG] [Thread-192811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:18:29.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:18:29.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:18:29.961 [DEBUG] [Thread-192811] [transport.py] [_log()] userauth is OK
2026-04-12T17:18:29.961 [DEBUG] [Thread-192811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:18:29.962 [DEBUG] [Thread-192811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:18:29.962 [DEBUG] [Thread-192811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:18:29.962 [DEBUG] [Thread-192811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:18:29.981 [INFO] [Thread-192811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:18:29.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:18:29.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:18:30.784 [DEBUG] [Thread-192811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:18:30.785 [DEBUG] [Thread-192811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:18:30.831 [DEBUG] [Thread-192811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:18:30.832 [DEBUG] [Thread-192811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:18:30.841 [DEBUG] [Thread-192811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:18:30.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:18:30.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:18:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:18:30.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:18:30.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:18:30.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:18:30.878 [DEBUG] [Thread-192811] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:18:39.872 [DEBUG] [Thread-192813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:18:47.181 [DEBUG] [Thread-192814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:18:54.930 [DEBUG] [Thread-192815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:18:56.698 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:18:56.699 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:19:00.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:19:00.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:19:00.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:19:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 18, 24), 5.42146, 69.8758, 0.0, 20.4325, 14.5767, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:19:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:18:24
2026-04-12T17:19:02.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:19:02.827 [DEBUG] [Thread-192816] [transport.py] [_log()] starting thread (client mode): 0xb0fea0b0
2026-04-12T17:19:02.828 [DEBUG] [Thread-192816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:19:02.855 [DEBUG] [Thread-192816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:19:02.855 [INFO] [Thread-192816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] client lang: <none>
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] server lang: <none>
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] kex follows: False
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:19:02.857 [DEBUG] [Thread-192816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:19:02.858 [DEBUG] [Thread-192816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:19:02.858 [DEBUG] [Thread-192816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:19:02.858 [DEBUG] [Thread-192816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:19:02.858 [DEBUG] [Thread-192816] [transport.py] [_log()] Compression: none
2026-04-12T17:19:02.858 [DEBUG] [Thread-192816] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:19:02.873 [DEBUG] [Thread-192816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:19:02.874 [DEBUG] [Thread-192816] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:19:02.874 [DEBUG] [Thread-192816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:19:02.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:19:02.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:19:02.877 [DEBUG] [Thread-192816] [transport.py] [_log()] userauth is OK
2026-04-12T17:19:02.877 [DEBUG] [Thread-192816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:19:02.877 [DEBUG] [Thread-192816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:19:02.877 [DEBUG] [Thread-192816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:19:02.877 [DEBUG] [Thread-192816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:19:02.894 [INFO] [Thread-192816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:19:02.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:19:03.534 [DEBUG] [Thread-192816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:19:03.534 [DEBUG] [Thread-192816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:19:03.535 [DEBUG] [Thread-192816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:19:03.575 [DEBUG] [Thread-192816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:19:03.575 [DEBUG] [Thread-192816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:19:03.579 [DEBUG] [Thread-192816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:19:03.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:19:03.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:19:03.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:19:03.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:19:03.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:19:03.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:19:03.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:19:03.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:19:03.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:19:03.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.637952 -999.00  +14.70  14.05     74  +10.10 1 2 1 1 1   887    0 3.96 -13.06 ----- 14.1 14.1 249.8 19.7 16.8 -23.2 16.4 -21.9 16.9 -19.2 17.4 -21.6
2026-04-12T17:19:03.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:19:03.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:19:03.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.637952
2026-04-12T17:19:03.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:19:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:19:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:19:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:19:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:19:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:18:24', tmtdew=5.42146, humidity=69.8758, cloud=0.0, wind=20.4325, temperature=14.5767, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:18:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:19:03.600 [DEBUG] [Thread-192816] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:19:03.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:19:03.694 [DEBUG] [Thread-192819] [transport.py] [_log()] starting thread (client mode): 0xae5f2fe0
2026-04-12T17:19:03.694 [DEBUG] [Thread-192819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:19:03.709 [DEBUG] [Thread-192819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:19:03.709 [INFO] [Thread-192819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] client lang: <none>
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] server lang: <none>
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] kex follows: False
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:19:03.717 [DEBUG] [Thread-192819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:19:03.718 [DEBUG] [Thread-192819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:19:03.718 [DEBUG] [Thread-192819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:19:03.718 [DEBUG] [Thread-192819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:19:03.718 [DEBUG] [Thread-192819] [transport.py] [_log()] Compression: none
2026-04-12T17:19:03.718 [DEBUG] [Thread-192819] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:19:03.777 [DEBUG] [Thread-192819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:19:03.778 [DEBUG] [Thread-192819] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:19:03.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:19:03.779 [DEBUG] [Thread-192819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:19:03.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:19:03.833 [DEBUG] [Thread-192819] [transport.py] [_log()] userauth is OK
2026-04-12T17:19:03.834 [DEBUG] [Thread-192819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:19:03.834 [DEBUG] [Thread-192819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:19:03.834 [DEBUG] [Thread-192819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:19:03.834 [DEBUG] [Thread-192819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:19:03.853 [INFO] [Thread-192819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:19:03.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:19:03.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:19:04.673 [DEBUG] [Thread-192819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:19:04.673 [DEBUG] [Thread-192819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:19:04.721 [DEBUG] [Thread-192819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:19:04.721 [DEBUG] [Thread-192819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:19:04.730 [DEBUG] [Thread-192819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:19:04.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:19:04.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:19:04.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:19:04.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:19:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:19:04.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:19:04.772 [DEBUG] [Thread-192819] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:19:09.966 [DEBUG] [Thread-192821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:19:25.019 [DEBUG] [Thread-192822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:19:34.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:19:34.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:19:34.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:19:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 18, 59), 5.49525, 69.81, 0.0, 17.2044, 14.8757, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:19:36.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:18:59
2026-04-12T17:19:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:19:36.632 [DEBUG] [Thread-192823] [transport.py] [_log()] starting thread (client mode): 0xae5362c0
2026-04-12T17:19:36.633 [DEBUG] [Thread-192823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:19:36.652 [DEBUG] [Thread-192823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:19:36.653 [INFO] [Thread-192823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] client lang: <none>
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] server lang: <none>
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] kex follows: False
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] Compression: none
2026-04-12T17:19:36.656 [DEBUG] [Thread-192823] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:19:36.673 [DEBUG] [Thread-192823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:19:36.674 [DEBUG] [Thread-192823] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:19:36.674 [DEBUG] [Thread-192823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:19:36.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:19:36.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:19:36.676 [DEBUG] [Thread-192823] [transport.py] [_log()] userauth is OK
2026-04-12T17:19:36.676 [DEBUG] [Thread-192823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:19:36.676 [DEBUG] [Thread-192823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:19:36.676 [DEBUG] [Thread-192823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:19:36.677 [DEBUG] [Thread-192823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:19:36.712 [INFO] [Thread-192823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:19:36.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:19:37.349 [DEBUG] [Thread-192823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:19:37.349 [DEBUG] [Thread-192823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:19:37.349 [DEBUG] [Thread-192823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:19:37.390 [DEBUG] [Thread-192823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:19:37.390 [DEBUG] [Thread-192823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:19:37.394 [DEBUG] [Thread-192823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:19:37.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:19:37.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:19:37.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:19:37.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:19:37.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:19:37.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:19:37.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:19:37.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:19:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:19:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.638299 -999.00  +14.70   8.24     74  +10.20 1 2 1 1 1   887    0 4.01 -9.86 ----- 8.2 8.2 221.8 17.8 16.9 -23.3 16.4 -21.9 16.9 -19.5 17.5 -21.6
2026-04-12T17:19:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:19:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:19:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.638299
2026-04-12T17:19:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:19:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:19:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:19:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:19:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:19:37.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:18:59', tmtdew=5.49525, humidity=69.81, cloud=0.0, wind=17.2044, temperature=14.8757, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:19:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:19:37.421 [DEBUG] [Thread-192823] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:19:37.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:19:37.516 [DEBUG] [Thread-192826] [transport.py] [_log()] starting thread (client mode): 0xae535cc0
2026-04-12T17:19:37.516 [DEBUG] [Thread-192826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:19:37.530 [DEBUG] [Thread-192826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:19:37.530 [INFO] [Thread-192826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:19:37.538 [DEBUG] [Thread-192826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:19:37.538 [DEBUG] [Thread-192826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:19:37.538 [DEBUG] [Thread-192826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] client lang: <none>
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] server lang: <none>
2026-04-12T17:19:37.539 [DEBUG] [Thread-192826] [transport.py] [_log()] kex follows: False
2026-04-12T17:19:37.540 [DEBUG] [Thread-192826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:19:37.540 [DEBUG] [Thread-192826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:19:37.540 [DEBUG] [Thread-192826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:19:37.540 [DEBUG] [Thread-192826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:19:37.540 [DEBUG] [Thread-192826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:19:37.540 [DEBUG] [Thread-192826] [transport.py] [_log()] Compression: none
2026-04-12T17:19:37.540 [DEBUG] [Thread-192826] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:19:37.598 [DEBUG] [Thread-192826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:19:37.599 [DEBUG] [Thread-192826] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:19:37.600 [DEBUG] [Thread-192826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:19:37.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:19:37.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:19:37.658 [DEBUG] [Thread-192826] [transport.py] [_log()] userauth is OK
2026-04-12T17:19:37.658 [DEBUG] [Thread-192826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:19:37.658 [DEBUG] [Thread-192826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:19:37.658 [DEBUG] [Thread-192826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:19:37.658 [DEBUG] [Thread-192826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:19:37.683 [INFO] [Thread-192826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:19:37.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:19:37.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:19:38.496 [DEBUG] [Thread-192826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:19:38.496 [DEBUG] [Thread-192826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:19:38.544 [DEBUG] [Thread-192826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:19:38.544 [DEBUG] [Thread-192826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:19:38.553 [DEBUG] [Thread-192826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:19:38.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:19:38.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:19:38.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:19:38.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:19:38.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:19:38.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:19:38.590 [DEBUG] [Thread-192826] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:19:40.056 [DEBUG] [Thread-192828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:19:47.238 [DEBUG] [Thread-192829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:19:55.110 [DEBUG] [Thread-192830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:19:56.838 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:19:56.840 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:20:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:20:08.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:20:08.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:20:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 19, 35), 5.36946, 70.2224, 0.0, 18.702, 15.1189, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:20:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:19:35
2026-04-12T17:20:10.147 [DEBUG] [Thread-192831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:20:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:20:10.428 [DEBUG] [Thread-192832] [transport.py] [_log()] starting thread (client mode): 0xb0fea590
2026-04-12T17:20:10.428 [DEBUG] [Thread-192832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:20:10.441 [DEBUG] [Thread-192832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:20:10.441 [INFO] [Thread-192832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] client lang: <none>
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] server lang: <none>
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] kex follows: False
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] Compression: none
2026-04-12T17:20:10.444 [DEBUG] [Thread-192832] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:20:10.455 [DEBUG] [Thread-192832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:20:10.455 [DEBUG] [Thread-192832] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:20:10.456 [DEBUG] [Thread-192832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:20:10.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:20:10.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:20:10.466 [DEBUG] [Thread-192832] [transport.py] [_log()] userauth is OK
2026-04-12T17:20:10.466 [DEBUG] [Thread-192832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:20:10.466 [DEBUG] [Thread-192832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:20:10.466 [DEBUG] [Thread-192832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:20:10.466 [DEBUG] [Thread-192832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:20:10.486 [INFO] [Thread-192832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:20:10.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:20:17.654 [DEBUG] [Thread-192832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:20:17.655 [DEBUG] [Thread-192832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:20:17.655 [DEBUG] [Thread-192832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:20:17.695 [DEBUG] [Thread-192832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:20:17.696 [DEBUG] [Thread-192832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:20:17.698 [DEBUG] [Thread-192832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:20:17.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:20:17.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:20:17.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:20:17.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:20:17.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:20:17.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:20:17.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:20:17.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:20:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:20:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.638299 -999.00  +14.70   8.24     74  +10.20 1 2 1 1 1   887    0 4.01 -9.86 ----- 8.2 8.2 221.8 17.8 16.9 -23.3 16.4 -21.9 16.9 -19.5 17.5 -21.6
2026-04-12T17:20:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:20:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:20:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.638299
2026-04-12T17:20:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:20:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:20:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:20:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:20:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:20:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:19:35', tmtdew=5.36946, humidity=70.2224, cloud=0.0, wind=18.702, temperature=15.1189, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:19:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:20:17.810 [DEBUG] [Thread-192832] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:20:17.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:20:17.908 [DEBUG] [Thread-192835] [transport.py] [_log()] starting thread (client mode): 0xae52e500
2026-04-12T17:20:17.908 [DEBUG] [Thread-192835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:20:17.927 [DEBUG] [Thread-192835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:20:17.927 [INFO] [Thread-192835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:20:17.934 [DEBUG] [Thread-192835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] client lang: <none>
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] server lang: <none>
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] kex follows: False
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] Compression: none
2026-04-12T17:20:17.935 [DEBUG] [Thread-192835] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:20:17.993 [DEBUG] [Thread-192835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:20:17.993 [DEBUG] [Thread-192835] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:20:17.993 [DEBUG] [Thread-192835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:20:17.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:20:17.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:20:18.050 [DEBUG] [Thread-192835] [transport.py] [_log()] userauth is OK
2026-04-12T17:20:18.050 [DEBUG] [Thread-192835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:20:18.050 [DEBUG] [Thread-192835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:20:18.050 [DEBUG] [Thread-192835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:20:18.051 [DEBUG] [Thread-192835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:20:18.073 [INFO] [Thread-192835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:20:18.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:20:18.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:20:18.899 [DEBUG] [Thread-192835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:20:18.899 [DEBUG] [Thread-192835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:20:18.947 [DEBUG] [Thread-192835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:20:18.948 [DEBUG] [Thread-192835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:20:18.957 [DEBUG] [Thread-192835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:20:18.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:20:18.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:20:18.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:20:18.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:20:18.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:20:18.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:20:18.993 [DEBUG] [Thread-192835] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:20:25.187 [DEBUG] [Thread-192837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:20:40.241 [DEBUG] [Thread-192838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:20:47.282 [DEBUG] [Thread-192839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:20:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:20:49.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:20:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:20:50.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 20, 10), 5.6553, 68.7802, 0.0, 16.0747, 14.8098, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:20:50.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:20:10
2026-04-12T17:20:50.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:20:50.912 [DEBUG] [Thread-192840] [transport.py] [_log()] starting thread (client mode): 0xae50ace0
2026-04-12T17:20:50.912 [DEBUG] [Thread-192840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:20:50.932 [DEBUG] [Thread-192840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:20:50.932 [INFO] [Thread-192840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] client lang: <none>
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] server lang: <none>
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] kex follows: False
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] Compression: none
2026-04-12T17:20:50.935 [DEBUG] [Thread-192840] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:20:50.951 [DEBUG] [Thread-192840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:20:50.951 [DEBUG] [Thread-192840] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:20:50.952 [DEBUG] [Thread-192840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:20:50.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:20:50.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:20:50.954 [DEBUG] [Thread-192840] [transport.py] [_log()] userauth is OK
2026-04-12T17:20:50.954 [DEBUG] [Thread-192840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:20:50.954 [DEBUG] [Thread-192840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:20:50.954 [DEBUG] [Thread-192840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:20:50.954 [DEBUG] [Thread-192840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:20:50.972 [INFO] [Thread-192840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:20:50.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:20:51.602 [DEBUG] [Thread-192840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:20:51.603 [DEBUG] [Thread-192840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:20:51.603 [DEBUG] [Thread-192840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:20:51.644 [DEBUG] [Thread-192840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:20:51.644 [DEBUG] [Thread-192840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:20:51.647 [DEBUG] [Thread-192840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:20:51.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:20:51.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:20:51.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:20:51.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:20:51.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:20:51.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:20:51.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:20:51.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:20:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:20:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.639341 -999.00  +14.60  15.69     72   +9.70 1 2 1 1 1   887    0 4.34 1.21 ----- 15.7 15.7 250.0 19.7 16.9 -23.7 16.6 -22.3 17.2 -19.9 17.8 -22.8
2026-04-12T17:20:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:20:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:20:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.639341
2026-04-12T17:20:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:20:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:20:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:20:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:20:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:20:51.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:20:10', tmtdew=5.6553, humidity=68.7802, cloud=0.0, wind=16.0747, temperature=14.8098, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:20:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:20:51.670 [DEBUG] [Thread-192840] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:20:51.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:20:51.775 [DEBUG] [Thread-192843] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1f0
2026-04-12T17:20:51.775 [DEBUG] [Thread-192843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:20:51.790 [DEBUG] [Thread-192843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:20:51.790 [INFO] [Thread-192843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:20:51.797 [DEBUG] [Thread-192843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] client lang: <none>
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] server lang: <none>
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] kex follows: False
2026-04-12T17:20:51.798 [DEBUG] [Thread-192843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:20:51.799 [DEBUG] [Thread-192843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:20:51.799 [DEBUG] [Thread-192843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:20:51.799 [DEBUG] [Thread-192843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:20:51.799 [DEBUG] [Thread-192843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:20:51.799 [DEBUG] [Thread-192843] [transport.py] [_log()] Compression: none
2026-04-12T17:20:51.799 [DEBUG] [Thread-192843] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:20:51.859 [DEBUG] [Thread-192843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:20:51.859 [DEBUG] [Thread-192843] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:20:51.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:20:51.860 [DEBUG] [Thread-192843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:20:51.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:20:51.918 [DEBUG] [Thread-192843] [transport.py] [_log()] userauth is OK
2026-04-12T17:20:51.919 [DEBUG] [Thread-192843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:20:51.919 [DEBUG] [Thread-192843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:20:51.919 [DEBUG] [Thread-192843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:20:51.919 [DEBUG] [Thread-192843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:20:51.938 [INFO] [Thread-192843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:20:51.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:20:51.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:20:52.750 [DEBUG] [Thread-192843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:20:52.751 [DEBUG] [Thread-192843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:20:52.798 [DEBUG] [Thread-192843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:20:52.798 [DEBUG] [Thread-192843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:20:52.807 [DEBUG] [Thread-192843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:20:52.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:20:52.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:20:52.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:20:52.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:20:52.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:20:52.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:20:52.845 [DEBUG] [Thread-192843] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:20:55.279 [DEBUG] [Thread-192845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:20:56.982 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:20:56.983 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:10.336 [DEBUG] [Thread-192846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:22.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:21:22.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:21:22.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:21:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 20, 46), 5.75212, 68.4337, 0.0, 20.8894, 15.0865, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:21:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:20:46
2026-04-12T17:21:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:21:24.791 [DEBUG] [Thread-192847] [transport.py] [_log()] starting thread (client mode): 0xae5b6110
2026-04-12T17:21:24.791 [DEBUG] [Thread-192847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:21:24.803 [DEBUG] [Thread-192847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:21:24.804 [INFO] [Thread-192847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] client lang: <none>
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] server lang: <none>
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] kex follows: False
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] Compression: none
2026-04-12T17:21:24.807 [DEBUG] [Thread-192847] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:21:24.816 [DEBUG] [Thread-192847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:21:24.817 [DEBUG] [Thread-192847] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:21:24.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:21:24.818 [DEBUG] [Thread-192847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:21:24.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:21:24.820 [DEBUG] [Thread-192847] [transport.py] [_log()] userauth is OK
2026-04-12T17:21:24.820 [DEBUG] [Thread-192847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:21:24.820 [DEBUG] [Thread-192847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:21:24.820 [DEBUG] [Thread-192847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:21:24.820 [DEBUG] [Thread-192847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:21:24.835 [INFO] [Thread-192847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:21:24.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:21:25.377 [DEBUG] [Thread-192849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:25.460 [DEBUG] [Thread-192847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:21:25.460 [DEBUG] [Thread-192847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:21:25.460 [DEBUG] [Thread-192847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:21:25.501 [DEBUG] [Thread-192847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:21:25.501 [DEBUG] [Thread-192847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:21:25.505 [DEBUG] [Thread-192847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:21:25.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:21:25.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:21:25.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:21:25.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:21:25.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:21:25.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:21:25.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:21:25.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:21:25.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:21:25.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.639688 -999.00  +14.60  12.05     73   +9.90 1 2 1 1 1   887    0 4.52 4.85 ----- 12.1 12.1 251.2 20.6 16.9 -23.6 16.6 -22.0 17.2 -20.0 17.8 -22.7
2026-04-12T17:21:25.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:21:25.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:21:25.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.639688
2026-04-12T17:21:25.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:21:25.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:21:25.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:21:25.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:21:25.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:21:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:20:46', tmtdew=5.75212, humidity=68.4337, cloud=0.0, wind=20.8894, temperature=15.0865, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:21:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:21:25.524 [DEBUG] [Thread-192847] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:21:25.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:21:25.624 [DEBUG] [Thread-192851] [transport.py] [_log()] starting thread (client mode): 0xae5362f0
2026-04-12T17:21:25.625 [DEBUG] [Thread-192851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:21:25.639 [DEBUG] [Thread-192851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:21:25.640 [INFO] [Thread-192851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:21:25.647 [DEBUG] [Thread-192851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:21:25.647 [DEBUG] [Thread-192851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:21:25.647 [DEBUG] [Thread-192851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:21:25.647 [DEBUG] [Thread-192851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:25.647 [DEBUG] [Thread-192851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] client lang: <none>
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] server lang: <none>
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] kex follows: False
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] Compression: none
2026-04-12T17:21:25.648 [DEBUG] [Thread-192851] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:21:25.706 [DEBUG] [Thread-192851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:21:25.706 [DEBUG] [Thread-192851] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:21:25.707 [DEBUG] [Thread-192851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:21:25.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:21:25.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:21:25.763 [DEBUG] [Thread-192851] [transport.py] [_log()] userauth is OK
2026-04-12T17:21:25.763 [DEBUG] [Thread-192851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:21:25.764 [DEBUG] [Thread-192851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:21:25.764 [DEBUG] [Thread-192851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:21:25.764 [DEBUG] [Thread-192851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:21:25.788 [INFO] [Thread-192851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:21:25.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:21:25.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:21:26.610 [DEBUG] [Thread-192851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:21:26.610 [DEBUG] [Thread-192851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:21:26.658 [DEBUG] [Thread-192851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:21:26.658 [DEBUG] [Thread-192851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:21:26.667 [DEBUG] [Thread-192851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:21:26.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:21:26.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:21:26.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:21:26.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:21:26.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:21:26.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:21:26.705 [DEBUG] [Thread-192851] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:21:40.415 [DEBUG] [Thread-192853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:47.334 [DEBUG] [Thread-192854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:55.477 [DEBUG] [Thread-192855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:56.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:21:56.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:21:56.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:21:57.124 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:57.126 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:21:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 21, 21), 5.96201, 67.5517, 0.0, 15.7572, 14.7438, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:21:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:21:21
2026-04-12T17:21:58.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:21:58.672 [DEBUG] [Thread-192856] [transport.py] [_log()] starting thread (client mode): 0xae536ad0
2026-04-12T17:21:58.672 [DEBUG] [Thread-192856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:21:58.692 [DEBUG] [Thread-192856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:21:58.692 [INFO] [Thread-192856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] client lang: <none>
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] server lang: <none>
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] kex follows: False
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] Compression: none
2026-04-12T17:21:58.694 [DEBUG] [Thread-192856] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:21:58.711 [DEBUG] [Thread-192856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:21:58.711 [DEBUG] [Thread-192856] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:21:58.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:21:58.713 [DEBUG] [Thread-192856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:21:58.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:21:58.715 [DEBUG] [Thread-192856] [transport.py] [_log()] userauth is OK
2026-04-12T17:21:58.715 [DEBUG] [Thread-192856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:21:58.715 [DEBUG] [Thread-192856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:21:58.715 [DEBUG] [Thread-192856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:21:58.715 [DEBUG] [Thread-192856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:21:58.733 [INFO] [Thread-192856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:21:58.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:21:59.307 [DEBUG] [Thread-192856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:21:59.307 [DEBUG] [Thread-192856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:21:59.308 [DEBUG] [Thread-192856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:21:59.348 [DEBUG] [Thread-192856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:21:59.348 [DEBUG] [Thread-192856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:21:59.351 [DEBUG] [Thread-192856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:21:59.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:21:59.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:21:59.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:21:59.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:21:59.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:21:59.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:21:59.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:21:59.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:21:59.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:21:59.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.640035 -999.00  +14.60  14.03     72   +9.70 1 2 1 1 1   887    0 4.52 9.03 ----- 14.0 14.0 241.1 20.6 17.0 -23.8 16.6 -22.5 17.3 -19.9 17.9 -22.6
2026-04-12T17:21:59.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:21:59.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:21:59.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.640035
2026-04-12T17:21:59.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:21:59.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:21:59.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:21:59.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:21:59.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:21:59.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:21:21', tmtdew=5.96201, humidity=67.5517, cloud=0.0, wind=15.7572, temperature=14.7438, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:21:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:21:59.371 [DEBUG] [Thread-192856] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:21:59.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:21:59.464 [DEBUG] [Thread-192859] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1f0
2026-04-12T17:21:59.465 [DEBUG] [Thread-192859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:21:59.480 [DEBUG] [Thread-192859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:21:59.480 [INFO] [Thread-192859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:21:59.487 [DEBUG] [Thread-192859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] client lang: <none>
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] server lang: <none>
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] kex follows: False
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] Compression: none
2026-04-12T17:21:59.488 [DEBUG] [Thread-192859] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:21:59.547 [DEBUG] [Thread-192859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:21:59.547 [DEBUG] [Thread-192859] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:21:59.548 [DEBUG] [Thread-192859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:21:59.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:21:59.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:21:59.603 [DEBUG] [Thread-192859] [transport.py] [_log()] userauth is OK
2026-04-12T17:21:59.603 [DEBUG] [Thread-192859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:21:59.603 [DEBUG] [Thread-192859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:21:59.603 [DEBUG] [Thread-192859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:21:59.603 [DEBUG] [Thread-192859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:21:59.622 [INFO] [Thread-192859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:21:59.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:21:59.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:22:00.450 [DEBUG] [Thread-192859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:22:00.451 [DEBUG] [Thread-192859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:22:00.498 [DEBUG] [Thread-192859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:22:00.499 [DEBUG] [Thread-192859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:22:00.509 [DEBUG] [Thread-192859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:22:00.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:22:00.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:22: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') -> 00000000
2026-04-12T17:22:00.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:22:00.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:22:00.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:22:00.546 [DEBUG] [Thread-192859] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:22:10.515 [DEBUG] [Thread-192861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:22:25.567 [DEBUG] [Thread-192862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:22:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:22:30.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:22: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
2026-04-12T17:22:31.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 21, 57), 5.93533, 67.6843, 0.0, 20.7148, 14.7936, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:22:31.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:21:57
2026-04-12T17:22:32.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:22:32.374 [DEBUG] [Thread-192863] [transport.py] [_log()] starting thread (client mode): 0xae5370a0
2026-04-12T17:22:32.374 [DEBUG] [Thread-192863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:22:32.393 [DEBUG] [Thread-192863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:22:32.393 [INFO] [Thread-192863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:22:32.395 [DEBUG] [Thread-192863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:22:32.395 [DEBUG] [Thread-192863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:22:32.395 [DEBUG] [Thread-192863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:22:32.395 [DEBUG] [Thread-192863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:22:32.395 [DEBUG] [Thread-192863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:22:32.395 [DEBUG] [Thread-192863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:22:32.395 [DEBUG] [Thread-192863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] client lang: <none>
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] server lang: <none>
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] kex follows: False
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] Compression: none
2026-04-12T17:22:32.396 [DEBUG] [Thread-192863] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:22:32.408 [DEBUG] [Thread-192863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:22:32.409 [DEBUG] [Thread-192863] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:22:32.409 [DEBUG] [Thread-192863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:22:32.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:22:32.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:22:32.412 [DEBUG] [Thread-192863] [transport.py] [_log()] userauth is OK
2026-04-12T17:22:32.412 [DEBUG] [Thread-192863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:22:32.412 [DEBUG] [Thread-192863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:22:32.412 [DEBUG] [Thread-192863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:22:32.412 [DEBUG] [Thread-192863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:22:32.436 [INFO] [Thread-192863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:22:32.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:22:33.028 [DEBUG] [Thread-192863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:22:33.028 [DEBUG] [Thread-192863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:22:33.028 [DEBUG] [Thread-192863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:22:33.069 [DEBUG] [Thread-192863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:22:33.069 [DEBUG] [Thread-192863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:22:33.073 [DEBUG] [Thread-192863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:22:33.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:22:33.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:22:33.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:22:33.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:22:33.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:22:33.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:22:33.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.640382 -999.00  +14.60   9.97     72   +9.80 1 2 1 1 1   887    0 4.68 12.37 ----- 10.0 10.0 244.2 21.2 16.9 -24.2 16.6 -22.3 17.4 -20.2 17.9 -22.4
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.640382
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:22:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:21:57', tmtdew=5.93533, humidity=67.6843, cloud=0.0, wind=20.7148, temperature=14.7936, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:22:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:22:33.087 [DEBUG] [Thread-192863] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:22:33.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:22:33.181 [DEBUG] [Thread-192866] [transport.py] [_log()] starting thread (client mode): 0xb0fce260
2026-04-12T17:22:33.181 [DEBUG] [Thread-192866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:22:33.197 [DEBUG] [Thread-192866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:22:33.197 [INFO] [Thread-192866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:22:33.204 [DEBUG] [Thread-192866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] client lang: <none>
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] server lang: <none>
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] kex follows: False
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:22:33.205 [DEBUG] [Thread-192866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:22:33.206 [DEBUG] [Thread-192866] [transport.py] [_log()] Compression: none
2026-04-12T17:22:33.206 [DEBUG] [Thread-192866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:22:33.267 [DEBUG] [Thread-192866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:22:33.268 [DEBUG] [Thread-192866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:22:33.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:22:33.269 [DEBUG] [Thread-192866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:22:33.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:22:33.330 [DEBUG] [Thread-192866] [transport.py] [_log()] userauth is OK
2026-04-12T17:22:33.331 [DEBUG] [Thread-192866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:22:33.331 [DEBUG] [Thread-192866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:22:33.331 [DEBUG] [Thread-192866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:22:33.331 [DEBUG] [Thread-192866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:22:33.350 [INFO] [Thread-192866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:22:33.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:22:33.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:22:34.164 [DEBUG] [Thread-192866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:22:34.164 [DEBUG] [Thread-192866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:22:34.212 [DEBUG] [Thread-192866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:22:34.212 [DEBUG] [Thread-192866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:22:34.221 [DEBUG] [Thread-192866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:22:34.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:22:34.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:22:34.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:22:34.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:22:34.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:22:34.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:22:34.253 [DEBUG] [Thread-192866] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:22:40.608 [DEBUG] [Thread-192868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:22:47.382 [DEBUG] [Thread-192869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:22:55.658 [DEBUG] [Thread-192870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:22:57.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:22:57.269 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:23:04.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:23:04.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:23:04.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:23:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 22, 32), 5.96852, 67.5354, 0.0, 17.275, 14.8103, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:23:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:22:32
2026-04-12T17:23:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:23:06.020 [DEBUG] [Thread-192871] [transport.py] [_log()] starting thread (client mode): 0xae5346d0
2026-04-12T17:23:06.020 [DEBUG] [Thread-192871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:23:06.033 [DEBUG] [Thread-192871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:23:06.033 [INFO] [Thread-192871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] client lang: <none>
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] server lang: <none>
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] kex follows: False
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] Compression: none
2026-04-12T17:23:06.037 [DEBUG] [Thread-192871] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:23:06.045 [DEBUG] [Thread-192871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:23:06.045 [DEBUG] [Thread-192871] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:23:06.046 [DEBUG] [Thread-192871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:23:06.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:23:06.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:23:06.047 [DEBUG] [Thread-192871] [transport.py] [_log()] userauth is OK
2026-04-12T17:23:06.047 [DEBUG] [Thread-192871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:23:06.047 [DEBUG] [Thread-192871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:23:06.047 [DEBUG] [Thread-192871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:23:06.047 [DEBUG] [Thread-192871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:23:06.067 [INFO] [Thread-192871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:23:06.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:23:06.724 [DEBUG] [Thread-192871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:23:06.725 [DEBUG] [Thread-192871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:23:06.725 [DEBUG] [Thread-192871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:23:06.766 [DEBUG] [Thread-192871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:23:06.766 [DEBUG] [Thread-192871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:23:06.769 [DEBUG] [Thread-192871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:23:06.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:23:06.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:23:06.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:23:06.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:23:06.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:23:06.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:23:06.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:23:06.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:23:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:23:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.640730 -999.00  +14.70  13.36     73   +9.90 1 2 1 1 1   887    0 4.85 15.02 ----- 13.4 13.4 262.0 15.9 17.0 -24.0 16.6 -22.3 17.4 -20.2 17.9 -22.8
2026-04-12T17:23:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:23:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:23:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.640730
2026-04-12T17:23:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:23:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:23:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:23:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:23:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:23:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:22:32', tmtdew=5.96852, humidity=67.5354, cloud=0.0, wind=17.275, temperature=14.8103, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:22:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:23:06.797 [DEBUG] [Thread-192871] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:23:06.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:23:06.890 [DEBUG] [Thread-192874] [transport.py] [_log()] starting thread (client mode): 0xb0f6ece0
2026-04-12T17:23:06.890 [DEBUG] [Thread-192874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:23:06.905 [DEBUG] [Thread-192874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:23:06.906 [INFO] [Thread-192874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:23:06.913 [DEBUG] [Thread-192874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:23:06.913 [DEBUG] [Thread-192874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:23:06.914 [DEBUG] [Thread-192874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:23:06.914 [DEBUG] [Thread-192874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:06.914 [DEBUG] [Thread-192874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:06.914 [DEBUG] [Thread-192874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:06.914 [DEBUG] [Thread-192874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:06.914 [DEBUG] [Thread-192874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:23:06.914 [DEBUG] [Thread-192874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] client lang: <none>
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] server lang: <none>
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] kex follows: False
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] Compression: none
2026-04-12T17:23:06.915 [DEBUG] [Thread-192874] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:23:06.971 [DEBUG] [Thread-192874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:23:06.972 [DEBUG] [Thread-192874] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:23:06.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:23:06.973 [DEBUG] [Thread-192874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:23:06.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:23:07.027 [DEBUG] [Thread-192874] [transport.py] [_log()] userauth is OK
2026-04-12T17:23:07.027 [DEBUG] [Thread-192874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:23:07.028 [DEBUG] [Thread-192874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:23:07.028 [DEBUG] [Thread-192874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:23:07.028 [DEBUG] [Thread-192874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:23:07.046 [INFO] [Thread-192874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:23:07.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:23:07.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:23:07.821 [DEBUG] [Thread-192874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:23:07.822 [DEBUG] [Thread-192874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:23:07.869 [DEBUG] [Thread-192874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:23:07.869 [DEBUG] [Thread-192874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:23:07.878 [DEBUG] [Thread-192874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:23:07.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:23:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:23:07.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:23:07.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:23:07.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:23:07.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:23:07.911 [DEBUG] [Thread-192874] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:23:10.692 [DEBUG] [Thread-192876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:23:25.755 [DEBUG] [Thread-192877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:23:37.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:23:37.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:23:37.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:23:39.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 23, 8), 5.98596, 67.4691, 0.0, 17.6278, 14.8766, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:23:39.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:23:08
2026-04-12T17:23:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:23:39.835 [DEBUG] [Thread-192878] [transport.py] [_log()] starting thread (client mode): 0xb0f6e770
2026-04-12T17:23:39.835 [DEBUG] [Thread-192878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:23:39.856 [DEBUG] [Thread-192878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:23:39.856 [INFO] [Thread-192878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:23:39.859 [DEBUG] [Thread-192878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] client lang: <none>
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] server lang: <none>
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] kex follows: False
2026-04-12T17:23:39.860 [DEBUG] [Thread-192878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:23:39.861 [DEBUG] [Thread-192878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:23:39.861 [DEBUG] [Thread-192878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:23:39.861 [DEBUG] [Thread-192878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:23:39.861 [DEBUG] [Thread-192878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:23:39.861 [DEBUG] [Thread-192878] [transport.py] [_log()] Compression: none
2026-04-12T17:23:39.861 [DEBUG] [Thread-192878] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:23:39.880 [DEBUG] [Thread-192878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:23:39.881 [DEBUG] [Thread-192878] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:23:39.881 [DEBUG] [Thread-192878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:23:39.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:23:39.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:23:39.883 [DEBUG] [Thread-192878] [transport.py] [_log()] userauth is OK
2026-04-12T17:23:39.884 [DEBUG] [Thread-192878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:23:39.884 [DEBUG] [Thread-192878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:23:39.884 [DEBUG] [Thread-192878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:23:39.884 [DEBUG] [Thread-192878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:23:39.919 [INFO] [Thread-192878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:23:39.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:23:40.585 [DEBUG] [Thread-192878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:23:40.586 [DEBUG] [Thread-192878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:23:40.586 [DEBUG] [Thread-192878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:23:40.627 [DEBUG] [Thread-192878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:23:40.627 [DEBUG] [Thread-192878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:23:40.629 [DEBUG] [Thread-192878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:23:40.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:23:40.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:23:40.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:23:40.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:23:40.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:23:40.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:23:40.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:23:40.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:23:40.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:23:40.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.641077 -999.00  +14.60  11.64     72   +9.70 1 2 1 1 1   887    0 4.82 17.40 ----- 11.6 11.6 270.8 20.8 17.0 -24.2 16.7 -22.5 17.4 -20.4 18.0 -22.5
2026-04-12T17:23:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:23:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:23:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.641077
2026-04-12T17:23:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:23:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:23:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:23:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:23:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:23:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:23:08', tmtdew=5.98596, humidity=67.4691, cloud=0.0, wind=17.6278, temperature=14.8766, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:23:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:23:40.654 [DEBUG] [Thread-192878] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:23:40.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:23:40.746 [DEBUG] [Thread-192881] [transport.py] [_log()] starting thread (client mode): 0xae535fc0
2026-04-12T17:23:40.746 [DEBUG] [Thread-192881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:23:40.760 [DEBUG] [Thread-192881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:23:40.760 [INFO] [Thread-192881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:23:40.768 [DEBUG] [Thread-192881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:23:40.768 [DEBUG] [Thread-192881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:23:40.768 [DEBUG] [Thread-192881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:23:40.768 [DEBUG] [Thread-192881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:40.768 [DEBUG] [Thread-192881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:23:40.768 [DEBUG] [Thread-192881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] client lang: <none>
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] server lang: <none>
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] kex follows: False
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] Compression: none
2026-04-12T17:23:40.769 [DEBUG] [Thread-192881] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:23:40.793 [DEBUG] [Thread-192883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:23:40.830 [DEBUG] [Thread-192881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:23:40.830 [DEBUG] [Thread-192881] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:23:40.831 [DEBUG] [Thread-192881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:23:40.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:23:40.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:23:40.887 [DEBUG] [Thread-192881] [transport.py] [_log()] userauth is OK
2026-04-12T17:23:40.887 [DEBUG] [Thread-192881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:23:40.888 [DEBUG] [Thread-192881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:23:40.888 [DEBUG] [Thread-192881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:23:40.888 [DEBUG] [Thread-192881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:23:40.906 [INFO] [Thread-192881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:23:40.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:23:40.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:23:41.720 [DEBUG] [Thread-192881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:23:41.721 [DEBUG] [Thread-192881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:23:41.769 [DEBUG] [Thread-192881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:23:41.769 [DEBUG] [Thread-192881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:23:41.778 [DEBUG] [Thread-192881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:23:41.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:23:41.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:23:41.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:23:41.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:23:41.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:23:41.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:23:41.815 [DEBUG] [Thread-192881] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:23:47.435 [DEBUG] [Thread-192884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:23:55.856 [DEBUG] [Thread-192885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:23:57.410 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:23:57.411 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:24:10.896 [DEBUG] [Thread-192886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:24:11.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:24:11.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:24:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:24:13.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 23, 43), 5.9401, 67.6071, 0.0, 15.6679, 15.2541, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:24:13.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:23:43
2026-04-12T17:24:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:24:13.640 [DEBUG] [Thread-192887] [transport.py] [_log()] starting thread (client mode): 0xae5b7bb0
2026-04-12T17:24:13.640 [DEBUG] [Thread-192887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:24:13.661 [DEBUG] [Thread-192887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:24:13.661 [INFO] [Thread-192887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:24:13.664 [DEBUG] [Thread-192887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] client lang: <none>
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] server lang: <none>
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] kex follows: False
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:24:13.665 [DEBUG] [Thread-192887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:24:13.666 [DEBUG] [Thread-192887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:24:13.666 [DEBUG] [Thread-192887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:24:13.666 [DEBUG] [Thread-192887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:24:13.666 [DEBUG] [Thread-192887] [transport.py] [_log()] Compression: none
2026-04-12T17:24:13.666 [DEBUG] [Thread-192887] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:24:13.684 [DEBUG] [Thread-192887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:24:13.685 [DEBUG] [Thread-192887] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:24:13.686 [DEBUG] [Thread-192887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:24:13.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:24:13.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:24:13.688 [DEBUG] [Thread-192887] [transport.py] [_log()] userauth is OK
2026-04-12T17:24:13.688 [DEBUG] [Thread-192887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:24:13.688 [DEBUG] [Thread-192887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:24:13.689 [DEBUG] [Thread-192887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:24:13.689 [DEBUG] [Thread-192887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:24:13.712 [INFO] [Thread-192887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:24:13.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:24:14.353 [DEBUG] [Thread-192887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:24:14.353 [DEBUG] [Thread-192887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:24:14.353 [DEBUG] [Thread-192887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:24:14.394 [DEBUG] [Thread-192887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:24:14.394 [DEBUG] [Thread-192887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:24:14.398 [DEBUG] [Thread-192887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:24:14.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:24:14.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:24:14.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:24:14.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:24:14.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:24:14.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:24:14.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:24:14.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:24:14.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:24:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.641424 -999.00  +14.60  13.69     71   +9.50 1 2 1 1 1   887    0 5.09 21.27 ----- 13.7 13.7 254.8 19.0 17.1 -23.8 16.8 -22.5 17.5 -20.6 18.1 -23.2
2026-04-12T17:24:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:24:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:24:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.641424
2026-04-12T17:24:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:24:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:24:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:24:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:24:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:24:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:23:43', tmtdew=5.9401, humidity=67.6071, cloud=0.0, wind=15.6679, temperature=15.2541, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:23:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:24:14.427 [DEBUG] [Thread-192887] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:24:14.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:24:14.520 [DEBUG] [Thread-192890] [transport.py] [_log()] starting thread (client mode): 0xb0f40bb0
2026-04-12T17:24:14.520 [DEBUG] [Thread-192890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:24:14.535 [DEBUG] [Thread-192890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:24:14.535 [INFO] [Thread-192890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:24:14.542 [DEBUG] [Thread-192890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] client lang: <none>
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] server lang: <none>
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] kex follows: False
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] Compression: none
2026-04-12T17:24:14.543 [DEBUG] [Thread-192890] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:24:14.599 [DEBUG] [Thread-192890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:24:14.600 [DEBUG] [Thread-192890] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:24:14.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:24:14.601 [DEBUG] [Thread-192890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:24:14.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:24:14.655 [DEBUG] [Thread-192890] [transport.py] [_log()] userauth is OK
2026-04-12T17:24:14.656 [DEBUG] [Thread-192890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:24:14.656 [DEBUG] [Thread-192890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:24:14.656 [DEBUG] [Thread-192890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:24:14.656 [DEBUG] [Thread-192890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:24:14.675 [INFO] [Thread-192890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:24:14.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:24:14.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:24:15.481 [DEBUG] [Thread-192890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:24:15.481 [DEBUG] [Thread-192890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:24:15.529 [DEBUG] [Thread-192890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:24:15.530 [DEBUG] [Thread-192890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:24:15.539 [DEBUG] [Thread-192890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:24:15.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:24:15.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:24:15.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:24:15.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:24:15.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:24:15.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:24:15.576 [DEBUG] [Thread-192890] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:24:25.938 [DEBUG] [Thread-192892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:24:40.994 [DEBUG] [Thread-192893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:24:45.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:24:45.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:24:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:24:46.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 24, 19), 6.15944, 66.4059, 0.0, 17.716, 14.8102, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:24:46.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:24:19
2026-04-12T17:24:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:24:47.463 [DEBUG] [Thread-192894] [transport.py] [_log()] starting thread (client mode): 0xb0fcc610
2026-04-12T17:24:47.463 [DEBUG] [Thread-192894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:24:47.477 [DEBUG] [Thread-192894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:24:47.477 [INFO] [Thread-192894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:24:47.490 [DEBUG] [Thread-192896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] client lang: <none>
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] server lang: <none>
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] kex follows: False
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:24:47.490 [DEBUG] [Thread-192894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:24:47.491 [DEBUG] [Thread-192894] [transport.py] [_log()] Compression: none
2026-04-12T17:24:47.491 [DEBUG] [Thread-192894] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:24:47.509 [DEBUG] [Thread-192894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:24:47.510 [DEBUG] [Thread-192894] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:24:47.510 [DEBUG] [Thread-192894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:24:47.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:24:47.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:24:47.512 [DEBUG] [Thread-192894] [transport.py] [_log()] userauth is OK
2026-04-12T17:24:47.512 [DEBUG] [Thread-192894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:24:47.512 [DEBUG] [Thread-192894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:24:47.512 [DEBUG] [Thread-192894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:24:47.512 [DEBUG] [Thread-192894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:24:47.548 [INFO] [Thread-192894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:24:47.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:24:48.197 [DEBUG] [Thread-192894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:24:48.197 [DEBUG] [Thread-192894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:24:48.197 [DEBUG] [Thread-192894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:24:48.237 [DEBUG] [Thread-192894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:24:48.238 [DEBUG] [Thread-192894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:24:48.240 [DEBUG] [Thread-192894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:24:48.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:24:48.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:24:48.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:24:48.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:24:48.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:24:48.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:24:48.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:24:48.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:24:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:24:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.642118 -999.00  +14.60   7.86     71   +9.60 1 2 1 1 1   887    0 5.32 30.60 ----- 7.9 7.9 241.6 16.9 17.1 -23.9 16.9 -22.8 17.5 -20.4 18.1 -22.9
2026-04-12T17:24:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:24:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:24:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.642118
2026-04-12T17:24:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:24:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:24:48.265 [DEBUG] [Thread-192894] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:24:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:24:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:24:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:24:48.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:24:19', tmtdew=6.15944, humidity=66.4059, cloud=0.0, wind=17.716, temperature=14.8102, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:24:38.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:24:48.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:24:48.361 [DEBUG] [Thread-192898] [transport.py] [_log()] starting thread (client mode): 0xae5f3640
2026-04-12T17:24:48.362 [DEBUG] [Thread-192898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:24:48.376 [DEBUG] [Thread-192898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:24:48.376 [INFO] [Thread-192898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:24:48.383 [DEBUG] [Thread-192898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:24:48.383 [DEBUG] [Thread-192898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] client lang: <none>
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] server lang: <none>
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] kex follows: False
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] Compression: none
2026-04-12T17:24:48.384 [DEBUG] [Thread-192898] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:24:48.448 [DEBUG] [Thread-192898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:24:48.449 [DEBUG] [Thread-192898] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:24:48.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:24:48.450 [DEBUG] [Thread-192898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:24:48.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:24:48.504 [DEBUG] [Thread-192898] [transport.py] [_log()] userauth is OK
2026-04-12T17:24:48.504 [DEBUG] [Thread-192898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:24:48.504 [DEBUG] [Thread-192898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:24:48.505 [DEBUG] [Thread-192898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:24:48.505 [DEBUG] [Thread-192898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:24:48.523 [INFO] [Thread-192898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:24:48.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:24:48.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:24:49.320 [DEBUG] [Thread-192898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:24:49.320 [DEBUG] [Thread-192898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:24:49.368 [DEBUG] [Thread-192898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:24:49.368 [DEBUG] [Thread-192898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:24:49.377 [DEBUG] [Thread-192898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:24:49.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:24:49.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:24:49.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:24:49.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:24:49.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:24:49.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:24:49.414 [DEBUG] [Thread-192898] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:24:56.033 [DEBUG] [Thread-192900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:24:57.551 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:24:57.552 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:11.085 [DEBUG] [Thread-192901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:25:19.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:25:19.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:25:20.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 24, 54), 6.19107, 66.4806, 0.0, 15.6679, 15.2875, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:25:20.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:24:54
2026-04-12T17:25:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:25:21.312 [DEBUG] [Thread-192902] [transport.py] [_log()] starting thread (client mode): 0xb0f42410
2026-04-12T17:25:21.312 [DEBUG] [Thread-192902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:25:21.333 [DEBUG] [Thread-192902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:25:21.333 [INFO] [Thread-192902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:25:21.346 [DEBUG] [Thread-192902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:25:21.346 [DEBUG] [Thread-192902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:25:21.346 [DEBUG] [Thread-192902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:25:21.346 [DEBUG] [Thread-192902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:25:21.346 [DEBUG] [Thread-192902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:25:21.346 [DEBUG] [Thread-192902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] client lang: <none>
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] server lang: <none>
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] kex follows: False
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:25:21.347 [DEBUG] [Thread-192902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:25:21.348 [DEBUG] [Thread-192902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:25:21.348 [DEBUG] [Thread-192902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:25:21.348 [DEBUG] [Thread-192902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:25:21.348 [DEBUG] [Thread-192902] [transport.py] [_log()] Compression: none
2026-04-12T17:25:21.348 [DEBUG] [Thread-192902] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:25:21.369 [DEBUG] [Thread-192902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:25:21.370 [DEBUG] [Thread-192902] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:25:21.371 [DEBUG] [Thread-192902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:25:21.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:25:21.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:25:21.373 [DEBUG] [Thread-192902] [transport.py] [_log()] userauth is OK
2026-04-12T17:25:21.373 [DEBUG] [Thread-192902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:25:21.374 [DEBUG] [Thread-192902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:25:21.374 [DEBUG] [Thread-192902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:25:21.374 [DEBUG] [Thread-192902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:25:21.400 [INFO] [Thread-192902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:25:21.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:25:26.123 [DEBUG] [Thread-192904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:27.136 [DEBUG] [Thread-192902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:25:27.136 [DEBUG] [Thread-192902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:25:27.136 [DEBUG] [Thread-192902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:25:27.177 [DEBUG] [Thread-192902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:25:27.177 [DEBUG] [Thread-192902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:25:27.181 [DEBUG] [Thread-192902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:25:27.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:25:27.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:25:27.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:25:27.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:25:27.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:25:27.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:25:27.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:25:27.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:25:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:25:27.235 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T17:25:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:24:54', tmtdew=6.19107, humidity=66.4806, cloud=0.0, wind=15.6679, temperature=15.2875, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:25:27.237 [DEBUG] [Thread-192902] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:25:27.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:25:27.334 [DEBUG] [Thread-192906] [transport.py] [_log()] starting thread (client mode): 0xae52e0e0
2026-04-12T17:25:27.334 [DEBUG] [Thread-192906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:25:27.349 [DEBUG] [Thread-192906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:25:27.349 [INFO] [Thread-192906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:25:27.357 [DEBUG] [Thread-192906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:25:27.357 [DEBUG] [Thread-192906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:25:27.357 [DEBUG] [Thread-192906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:25:27.357 [DEBUG] [Thread-192906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] client lang: <none>
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] server lang: <none>
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] kex follows: False
2026-04-12T17:25:27.358 [DEBUG] [Thread-192906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:25:27.359 [DEBUG] [Thread-192906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:25:27.359 [DEBUG] [Thread-192906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:25:27.359 [DEBUG] [Thread-192906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:25:27.359 [DEBUG] [Thread-192906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:25:27.359 [DEBUG] [Thread-192906] [transport.py] [_log()] Compression: none
2026-04-12T17:25:27.359 [DEBUG] [Thread-192906] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:25:27.417 [DEBUG] [Thread-192906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:25:27.417 [DEBUG] [Thread-192906] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:25:27.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:25:27.419 [DEBUG] [Thread-192906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:25:27.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:25:27.476 [DEBUG] [Thread-192906] [transport.py] [_log()] userauth is OK
2026-04-12T17:25:27.477 [DEBUG] [Thread-192906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:25:27.477 [DEBUG] [Thread-192906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:25:27.477 [DEBUG] [Thread-192906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:25:27.477 [DEBUG] [Thread-192906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:25:27.496 [INFO] [Thread-192906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:25:27.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:25:27.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:25:28.353 [DEBUG] [Thread-192906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:25:28.353 [DEBUG] [Thread-192906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:25:28.401 [DEBUG] [Thread-192906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:25:28.401 [DEBUG] [Thread-192906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:25:28.411 [DEBUG] [Thread-192906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:25:28.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:25:28.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:25:28.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:25:28.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:25:28.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:25:28.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:25:28.444 [DEBUG] [Thread-192906] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:25:41.165 [DEBUG] [Thread-192908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:47.553 [DEBUG] [Thread-192909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:56.223 [DEBUG] [Thread-192910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:57.693 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:57.694 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:25:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:25:58.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:25:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:25:59.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 25, 29), 6.23659, 66.2734, 0.0, 16.4981, 14.7606, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:25:59.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:25:29
2026-04-12T17:26:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:26:00.281 [DEBUG] [Thread-192911] [transport.py] [_log()] starting thread (client mode): 0xae52eec0
2026-04-12T17:26:00.281 [DEBUG] [Thread-192911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:26:00.302 [DEBUG] [Thread-192911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:26:00.302 [INFO] [Thread-192911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] client lang: <none>
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] server lang: <none>
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] kex follows: False
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] Compression: none
2026-04-12T17:26:00.305 [DEBUG] [Thread-192911] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:26:00.323 [DEBUG] [Thread-192911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:26:00.324 [DEBUG] [Thread-192911] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:26:00.324 [DEBUG] [Thread-192911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:26:00.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:26:00.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:26:00.326 [DEBUG] [Thread-192911] [transport.py] [_log()] userauth is OK
2026-04-12T17:26:00.327 [DEBUG] [Thread-192911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:26:00.327 [DEBUG] [Thread-192911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:26:00.327 [DEBUG] [Thread-192911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:26:00.327 [DEBUG] [Thread-192911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:26:00.345 [INFO] [Thread-192911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:26:00.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:26:01.105 [DEBUG] [Thread-192911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:26:01.106 [DEBUG] [Thread-192911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:26:01.106 [DEBUG] [Thread-192911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:26:01.147 [DEBUG] [Thread-192911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:26:01.147 [DEBUG] [Thread-192911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:26:01.151 [DEBUG] [Thread-192911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:26:01.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:26:01.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:26:01.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:26:01.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:26:01.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:26:01.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:26:01.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:26:01.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:26:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:26:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.642813 -999.00  +14.70   9.11     71   +9.60 1 2 1 1 1   887    0 5.59 38.13 ----- 9.1 9.1 225.0 16.1 17.1 -24.2 16.8 -22.7 17.5 -20.8 18.1 -23.2
2026-04-12T17:26:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:26:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:26:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.642813
2026-04-12T17:26:01.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:26:01.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:26:01.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:26:01.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:26:01.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:26:01.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:25:29', tmtdew=6.23659, humidity=66.2734, cloud=0.0, wind=16.4981, temperature=14.7606, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:25:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:26:01.173 [DEBUG] [Thread-192911] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:26:01.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:26:01.269 [DEBUG] [Thread-192914] [transport.py] [_log()] starting thread (client mode): 0xae5a7250
2026-04-12T17:26:01.269 [DEBUG] [Thread-192914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:26:01.284 [DEBUG] [Thread-192914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:26:01.284 [INFO] [Thread-192914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:26:01.291 [DEBUG] [Thread-192914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] client lang: <none>
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] server lang: <none>
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] kex follows: False
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:26:01.292 [DEBUG] [Thread-192914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:26:01.293 [DEBUG] [Thread-192914] [transport.py] [_log()] Compression: none
2026-04-12T17:26:01.293 [DEBUG] [Thread-192914] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:26:01.352 [DEBUG] [Thread-192914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:26:01.353 [DEBUG] [Thread-192914] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:26:01.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:26:01.353 [DEBUG] [Thread-192914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:26:01.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:26:01.415 [DEBUG] [Thread-192914] [transport.py] [_log()] userauth is OK
2026-04-12T17:26:01.415 [DEBUG] [Thread-192914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:26:01.415 [DEBUG] [Thread-192914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:26:01.416 [DEBUG] [Thread-192914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:26:01.416 [DEBUG] [Thread-192914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:26:01.437 [INFO] [Thread-192914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:26:01.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:26:01.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:26:02.272 [DEBUG] [Thread-192914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:26:02.272 [DEBUG] [Thread-192914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:26:02.321 [DEBUG] [Thread-192914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:26:02.321 [DEBUG] [Thread-192914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:26:02.331 [DEBUG] [Thread-192914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:26:02.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:26:02.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:26:02.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:26:02.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:26:02.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:26:02.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:26:02.368 [DEBUG] [Thread-192914] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:26:11.260 [DEBUG] [Thread-192916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:26:26.307 [DEBUG] [Thread-192917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:26:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:26:32.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:26:32.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:26:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 26, 5), 6.28841, 66.0415, 0.0, 14.9987, 14.7607, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:26:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:26:05
2026-04-12T17:26:34.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:26:34.185 [DEBUG] [Thread-192918] [transport.py] [_log()] starting thread (client mode): 0xb0fcd3f0
2026-04-12T17:26:34.185 [DEBUG] [Thread-192918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:26:34.206 [DEBUG] [Thread-192918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:26:34.206 [INFO] [Thread-192918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] client lang: <none>
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] server lang: <none>
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] kex follows: False
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] Compression: none
2026-04-12T17:26:34.208 [DEBUG] [Thread-192918] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:26:34.222 [DEBUG] [Thread-192918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:26:34.222 [DEBUG] [Thread-192918] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:26:34.223 [DEBUG] [Thread-192918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:26:34.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:26:34.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:26:34.224 [DEBUG] [Thread-192918] [transport.py] [_log()] userauth is OK
2026-04-12T17:26:34.224 [DEBUG] [Thread-192918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:26:34.224 [DEBUG] [Thread-192918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:26:34.224 [DEBUG] [Thread-192918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:26:34.224 [DEBUG] [Thread-192918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:26:34.243 [INFO] [Thread-192918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:26:34.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:26:34.825 [DEBUG] [Thread-192918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:26:34.826 [DEBUG] [Thread-192918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:26:34.826 [DEBUG] [Thread-192918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:26:34.866 [DEBUG] [Thread-192918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:26:34.866 [DEBUG] [Thread-192918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:26:34.870 [DEBUG] [Thread-192918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:26:34.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:26:34.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:26:34.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:26:34.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:26:34.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:26:34.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:26:34.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:26:34.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:26:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:26:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.643160 -999.00  +14.70  10.01     72   +9.70 1 2 1 1 1   887    0 5.72 43.38 ----- 10.0 10.0 252.6 13.5 17.1 -24.2 16.8 -22.5 17.6 -20.6 18.2 -23.4
2026-04-12T17:26:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:26:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:26:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.643160
2026-04-12T17:26:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:26:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:26:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:26:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:26:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:26:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:26:05', tmtdew=6.28841, humidity=66.0415, cloud=0.0, wind=14.9987, temperature=14.7607, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:26:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:26:34.891 [DEBUG] [Thread-192918] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:26:34.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:26:34.996 [DEBUG] [Thread-192921] [transport.py] [_log()] starting thread (client mode): 0xb0fcef50
2026-04-12T17:26:34.996 [DEBUG] [Thread-192921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:26:35.011 [DEBUG] [Thread-192921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:26:35.011 [INFO] [Thread-192921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] client lang: <none>
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] server lang: <none>
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] kex follows: False
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] Compression: none
2026-04-12T17:26:35.019 [DEBUG] [Thread-192921] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:26:35.079 [DEBUG] [Thread-192921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:26:35.079 [DEBUG] [Thread-192921] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:26:35.080 [DEBUG] [Thread-192921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:26:35.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:26:35.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:26:35.135 [DEBUG] [Thread-192921] [transport.py] [_log()] userauth is OK
2026-04-12T17:26:35.135 [DEBUG] [Thread-192921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:26:35.135 [DEBUG] [Thread-192921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:26:35.136 [DEBUG] [Thread-192921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:26:35.136 [DEBUG] [Thread-192921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:26:35.155 [INFO] [Thread-192921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:26:35.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:26:35.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:26:35.964 [DEBUG] [Thread-192921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:26:35.964 [DEBUG] [Thread-192921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:26:36.012 [DEBUG] [Thread-192921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:26:36.012 [DEBUG] [Thread-192921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:26:36.022 [DEBUG] [Thread-192921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:26:36.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:26:36.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:26:36.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:26:36.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:26:36.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:26:36.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:26:36.058 [DEBUG] [Thread-192921] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:26:41.348 [DEBUG] [Thread-192923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:26:47.618 [DEBUG] [Thread-192924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:26:56.402 [DEBUG] [Thread-192925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:26:57.835 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:26:57.837 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:27:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:27:06.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:27:06.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:27:07.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 26, 40), 6.18947, 66.4808, 0.0, 14.8212, 15.2546, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:27:07.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:26:40
2026-04-12T17:27:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:27:07.909 [DEBUG] [Thread-192926] [transport.py] [_log()] starting thread (client mode): 0xae5a5b10
2026-04-12T17:27:07.909 [DEBUG] [Thread-192926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:27:07.929 [DEBUG] [Thread-192926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:27:07.930 [INFO] [Thread-192926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:27:07.932 [DEBUG] [Thread-192926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] client lang: <none>
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] server lang: <none>
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] kex follows: False
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] Compression: none
2026-04-12T17:27:07.933 [DEBUG] [Thread-192926] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:27:07.943 [DEBUG] [Thread-192926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:27:07.943 [DEBUG] [Thread-192926] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:27:07.944 [DEBUG] [Thread-192926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:27:07.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:27:07.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:27:07.945 [DEBUG] [Thread-192926] [transport.py] [_log()] userauth is OK
2026-04-12T17:27:07.946 [DEBUG] [Thread-192926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:27:07.946 [DEBUG] [Thread-192926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:27:07.946 [DEBUG] [Thread-192926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:27:07.946 [DEBUG] [Thread-192926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:27:07.964 [INFO] [Thread-192926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:27:07.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:27:08.589 [DEBUG] [Thread-192926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:27:08.589 [DEBUG] [Thread-192926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:27:08.590 [DEBUG] [Thread-192926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:27:08.630 [DEBUG] [Thread-192926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:27:08.630 [DEBUG] [Thread-192926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:27:08.633 [DEBUG] [Thread-192926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:27:08.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:27:08.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:27:08.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:27:08.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:27:08.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:27:08.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:27:08.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:27:08.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:27:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:27:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.643507 -999.00  +14.70   8.28     71   +9.50 1 2 1 1 1   887    0 5.96 49.16 ----- 8.3 8.3 242.0 16.1 17.1 -24.7 16.9 -22.7 17.6 -20.6 18.2 -23.3
2026-04-12T17:27:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:27:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:27:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.643507
2026-04-12T17:27:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:27:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:27:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:27:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:27:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:27:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:26:40', tmtdew=6.18947, humidity=66.4808, cloud=0.0, wind=14.8212, temperature=15.2546, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:26:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:27:08.654 [DEBUG] [Thread-192926] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:27:08.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:27:08.748 [DEBUG] [Thread-192929] [transport.py] [_log()] starting thread (client mode): 0xb0fce4d0
2026-04-12T17:27:08.748 [DEBUG] [Thread-192929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:27:08.762 [DEBUG] [Thread-192929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:27:08.762 [INFO] [Thread-192929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:08.770 [DEBUG] [Thread-192929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] client lang: <none>
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] server lang: <none>
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] kex follows: False
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:27:08.771 [DEBUG] [Thread-192929] [transport.py] [_log()] Compression: none
2026-04-12T17:27:08.772 [DEBUG] [Thread-192929] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:27:08.826 [DEBUG] [Thread-192929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:27:08.827 [DEBUG] [Thread-192929] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:27:08.827 [DEBUG] [Thread-192929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:27:08.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:27:08.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:27:08.882 [DEBUG] [Thread-192929] [transport.py] [_log()] userauth is OK
2026-04-12T17:27:08.882 [DEBUG] [Thread-192929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:27:08.882 [DEBUG] [Thread-192929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:27:08.882 [DEBUG] [Thread-192929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:27:08.883 [DEBUG] [Thread-192929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:27:08.902 [INFO] [Thread-192929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:27:08.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:27:08.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:27:09.697 [DEBUG] [Thread-192929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:27:09.697 [DEBUG] [Thread-192929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:27:09.744 [DEBUG] [Thread-192929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:27:09.745 [DEBUG] [Thread-192929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:27:09.754 [DEBUG] [Thread-192929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:27:09.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:27: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')
2026-04-12T17:27:09.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:27:09.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:27:09.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:27:09.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:27:09.788 [DEBUG] [Thread-192929] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:27:11.434 [DEBUG] [Thread-192931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:27:26.485 [DEBUG] [Thread-192932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:27:39.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:27:39.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:27:39.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:27:41.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 27, 16), 6.35811, 65.691, 0.0, 15.5639, 14.8773, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:27:41.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:27:16
2026-04-12T17:27:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:27:41.522 [DEBUG] [Thread-192933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:27:41.672 [DEBUG] [Thread-192934] [transport.py] [_log()] starting thread (client mode): 0xae52faf0
2026-04-12T17:27:41.672 [DEBUG] [Thread-192934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:27:41.691 [DEBUG] [Thread-192934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:27:41.691 [INFO] [Thread-192934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:41.694 [DEBUG] [Thread-192934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] client lang: <none>
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] server lang: <none>
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] kex follows: False
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] Compression: none
2026-04-12T17:27:41.695 [DEBUG] [Thread-192934] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:27:41.715 [DEBUG] [Thread-192934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:27:41.716 [DEBUG] [Thread-192934] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:27:41.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:27:41.716 [DEBUG] [Thread-192934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:27:41.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:27:41.718 [DEBUG] [Thread-192934] [transport.py] [_log()] userauth is OK
2026-04-12T17:27:41.719 [DEBUG] [Thread-192934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:27:41.719 [DEBUG] [Thread-192934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:27:41.719 [DEBUG] [Thread-192934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:27:41.719 [DEBUG] [Thread-192934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:27:41.737 [INFO] [Thread-192934] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:27:41.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:27:42.358 [DEBUG] [Thread-192934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:27:42.358 [DEBUG] [Thread-192934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:27:42.359 [DEBUG] [Thread-192934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:27:42.399 [DEBUG] [Thread-192934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:27:42.399 [DEBUG] [Thread-192934] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:27:42.402 [DEBUG] [Thread-192934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:27:42.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:27:42.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:27:42.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:27:42.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:27:42.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:27:42.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:27:42.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:27:42.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:27:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:27:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.643855 -999.00  +14.60  13.01     70   +9.40 1 2 1 1 1   887    0 5.95 48.00 ----- 13.0 13.0 262.0 19.3 17.1 -24.4 16.9 -22.8 17.6 -20.7 18.2 -23.6
2026-04-12T17:27:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:27:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:27:42.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.643855
2026-04-12T17:27:42.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:27:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:27:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:27:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:27:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:27:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:27:16', tmtdew=6.35811, humidity=65.691, cloud=0.0, wind=15.5639, temperature=14.8773, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:27:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:27:42.426 [DEBUG] [Thread-192934] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:27:42.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:27:42.521 [DEBUG] [Thread-192937] [transport.py] [_log()] starting thread (client mode): 0xae52f0d0
2026-04-12T17:27:42.521 [DEBUG] [Thread-192937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:27:42.535 [DEBUG] [Thread-192937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:27:42.535 [INFO] [Thread-192937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:27:42.543 [DEBUG] [Thread-192937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:27:42.543 [DEBUG] [Thread-192937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] client lang: <none>
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] server lang: <none>
2026-04-12T17:27:42.544 [DEBUG] [Thread-192937] [transport.py] [_log()] kex follows: False
2026-04-12T17:27:42.545 [DEBUG] [Thread-192937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:27:42.545 [DEBUG] [Thread-192937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:27:42.545 [DEBUG] [Thread-192937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:27:42.545 [DEBUG] [Thread-192937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:27:42.545 [DEBUG] [Thread-192937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:27:42.545 [DEBUG] [Thread-192937] [transport.py] [_log()] Compression: none
2026-04-12T17:27:42.545 [DEBUG] [Thread-192937] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:27:42.603 [DEBUG] [Thread-192937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:27:42.604 [DEBUG] [Thread-192937] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:27:42.605 [DEBUG] [Thread-192937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:27:42.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:27:42.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:27:42.663 [DEBUG] [Thread-192937] [transport.py] [_log()] userauth is OK
2026-04-12T17:27:42.663 [DEBUG] [Thread-192937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:27:42.663 [DEBUG] [Thread-192937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:27:42.664 [DEBUG] [Thread-192937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:27:42.664 [DEBUG] [Thread-192937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:27:42.688 [INFO] [Thread-192937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:27:42.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:27:42.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:27:43.541 [DEBUG] [Thread-192937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:27:43.541 [DEBUG] [Thread-192937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:27:43.590 [DEBUG] [Thread-192937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:27:43.590 [DEBUG] [Thread-192937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:27:43.599 [DEBUG] [Thread-192937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:27:43.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:27:43.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:27:43.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:27:43.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:27:43.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:27:43.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:27:43.636 [DEBUG] [Thread-192937] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:27:47.663 [DEBUG] [Thread-192939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:27:56.558 [DEBUG] [Thread-192940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:27:57.978 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:27:57.979 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:28:11.617 [DEBUG] [Thread-192941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:28:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:28:13.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:28:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:28:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 27, 51), 6.25644, 66.2164, 0.0, 14.539, 15.421, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:28:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:27:51
2026-04-12T17:28:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:28:15.528 [DEBUG] [Thread-192942] [transport.py] [_log()] starting thread (client mode): 0xb0f43580
2026-04-12T17:28:15.529 [DEBUG] [Thread-192942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:28:15.548 [DEBUG] [Thread-192942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:28:15.548 [INFO] [Thread-192942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] client lang: <none>
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] server lang: <none>
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] kex follows: False
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] Compression: none
2026-04-12T17:28:15.551 [DEBUG] [Thread-192942] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:28:15.569 [DEBUG] [Thread-192942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:28:15.570 [DEBUG] [Thread-192942] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:28:15.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:28:15.571 [DEBUG] [Thread-192942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:28:15.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:28:15.573 [DEBUG] [Thread-192942] [transport.py] [_log()] userauth is OK
2026-04-12T17:28:15.573 [DEBUG] [Thread-192942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:28:15.573 [DEBUG] [Thread-192942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:28:15.573 [DEBUG] [Thread-192942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:28:15.573 [DEBUG] [Thread-192942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:28:15.597 [INFO] [Thread-192942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:28:15.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:28:16.245 [DEBUG] [Thread-192942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:28:16.245 [DEBUG] [Thread-192942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:28:16.246 [DEBUG] [Thread-192942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:28:16.286 [DEBUG] [Thread-192942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:28:16.286 [DEBUG] [Thread-192942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:28:16.290 [DEBUG] [Thread-192942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:28:16.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:28:16.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:28:16.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:28:16.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:28:16.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:28:16.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:28:16.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:28:16.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:28:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:28:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.644549 -999.00  +14.60  13.18     70   +9.30 1 2 1 1 1   887    0 5.95 51.14 ----- 13.2 13.2 263.2 20.6 17.2 -24.8 16.9 -22.8 17.6 -22.7 18.2 -23.7
2026-04-12T17:28:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:28:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:28:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.644549
2026-04-12T17:28:16.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:28:16.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:28:16.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:28:16.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:28:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:28:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:27:51', tmtdew=6.25644, humidity=66.2164, cloud=0.0, wind=14.539, temperature=15.421, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:28:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:28:16.319 [DEBUG] [Thread-192942] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:28:16.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:28:16.413 [DEBUG] [Thread-192945] [transport.py] [_log()] starting thread (client mode): 0xb0f41150
2026-04-12T17:28:16.413 [DEBUG] [Thread-192945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:28:16.427 [DEBUG] [Thread-192945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:28:16.427 [INFO] [Thread-192945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] client lang: <none>
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] server lang: <none>
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] kex follows: False
2026-04-12T17:28:16.435 [DEBUG] [Thread-192945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:28:16.436 [DEBUG] [Thread-192945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:28:16.436 [DEBUG] [Thread-192945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:28:16.436 [DEBUG] [Thread-192945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:28:16.436 [DEBUG] [Thread-192945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:28:16.436 [DEBUG] [Thread-192945] [transport.py] [_log()] Compression: none
2026-04-12T17:28:16.436 [DEBUG] [Thread-192945] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:28:16.494 [DEBUG] [Thread-192945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:28:16.494 [DEBUG] [Thread-192945] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:28:16.495 [DEBUG] [Thread-192945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:28:16.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:28:16.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:28:16.549 [DEBUG] [Thread-192945] [transport.py] [_log()] userauth is OK
2026-04-12T17:28:16.549 [DEBUG] [Thread-192945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:28:16.549 [DEBUG] [Thread-192945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:28:16.549 [DEBUG] [Thread-192945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:28:16.549 [DEBUG] [Thread-192945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:28:16.563 [INFO] [Thread-192945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:28:16.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:28:16.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:28:17.385 [DEBUG] [Thread-192945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:28:17.386 [DEBUG] [Thread-192945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:28:17.433 [DEBUG] [Thread-192945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:28:17.433 [DEBUG] [Thread-192945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:28:17.443 [DEBUG] [Thread-192945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:28:17.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:28:17.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:28:17.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:28:17.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:28:17.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:28:17.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:28:17.481 [DEBUG] [Thread-192945] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:28:26.657 [DEBUG] [Thread-192947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:28:41.709 [DEBUG] [Thread-192948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:28:47.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:28:47.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:28:47.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:28:47.723 [DEBUG] [Thread-192949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:28:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 28, 26), 6.32711, 65.8405, 0.0, 16.3753, 14.8773, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:28:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:28:26
2026-04-12T17:28:49.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:28:49.354 [DEBUG] [Thread-192950] [transport.py] [_log()] starting thread (client mode): 0xb0f40610
2026-04-12T17:28:49.354 [DEBUG] [Thread-192950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:28:49.374 [DEBUG] [Thread-192950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:28:49.374 [INFO] [Thread-192950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] client lang: <none>
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] server lang: <none>
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] kex follows: False
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:28:49.377 [DEBUG] [Thread-192950] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:28:49.378 [DEBUG] [Thread-192950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:28:49.378 [DEBUG] [Thread-192950] [transport.py] [_log()] Compression: none
2026-04-12T17:28:49.378 [DEBUG] [Thread-192950] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:28:49.395 [DEBUG] [Thread-192950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:28:49.395 [DEBUG] [Thread-192950] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:28:49.396 [DEBUG] [Thread-192950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:28:49.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:28:49.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:28:49.398 [DEBUG] [Thread-192950] [transport.py] [_log()] userauth is OK
2026-04-12T17:28:49.398 [DEBUG] [Thread-192950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:28:49.398 [DEBUG] [Thread-192950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:28:49.398 [DEBUG] [Thread-192950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:28:49.398 [DEBUG] [Thread-192950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:28:49.415 [INFO] [Thread-192950] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:28:49.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:28:49.983 [DEBUG] [Thread-192950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:28:49.983 [DEBUG] [Thread-192950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:28:49.983 [DEBUG] [Thread-192950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:28:50.024 [DEBUG] [Thread-192950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:28:50.024 [DEBUG] [Thread-192950] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:28:50.028 [DEBUG] [Thread-192950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:28:50.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:28:50.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:28:50.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:28:50.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:28:50.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:28:50.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:28:50.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:28:50.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.644896 -999.00  +14.60  14.22     71   +9.40 1 2 1 1 1   887    0 5.97 50.70 ----- 14.2 14.2 262.8 17.9 17.2 -24.5 16.9 -22.7 17.5 -20.7 18.1 -23.6
2026-04-12T17:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.644896
2026-04-12T17:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:28:50.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:28:26', tmtdew=6.32711, humidity=65.8405, cloud=0.0, wind=16.3753, temperature=14.8773, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:28:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:28:50.055 [DEBUG] [Thread-192950] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:28:50.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:28:50.148 [DEBUG] [Thread-192953] [transport.py] [_log()] starting thread (client mode): 0xae5a5990
2026-04-12T17:28:50.148 [DEBUG] [Thread-192953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:28:50.165 [DEBUG] [Thread-192953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:28:50.165 [INFO] [Thread-192953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:28:50.172 [DEBUG] [Thread-192953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:28:50.172 [DEBUG] [Thread-192953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:28:50.172 [DEBUG] [Thread-192953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:28:50.172 [DEBUG] [Thread-192953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] client lang: <none>
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] server lang: <none>
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] kex follows: False
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] Compression: none
2026-04-12T17:28:50.173 [DEBUG] [Thread-192953] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:28:50.229 [DEBUG] [Thread-192953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:28:50.230 [DEBUG] [Thread-192953] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:28:50.230 [DEBUG] [Thread-192953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:28:50.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:28:50.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:28:50.286 [DEBUG] [Thread-192953] [transport.py] [_log()] userauth is OK
2026-04-12T17:28:50.286 [DEBUG] [Thread-192953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:28:50.286 [DEBUG] [Thread-192953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:28:50.286 [DEBUG] [Thread-192953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:28:50.286 [DEBUG] [Thread-192953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:28:50.305 [INFO] [Thread-192953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:28:50.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:28:50.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:28:51.113 [DEBUG] [Thread-192953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:28:51.114 [DEBUG] [Thread-192953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:28:51.162 [DEBUG] [Thread-192953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:28:51.162 [DEBUG] [Thread-192953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:28:51.171 [DEBUG] [Thread-192953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:28:51.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:28:51.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:28:51.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:28:51.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:28:51.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:28:51.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:28:51.208 [DEBUG] [Thread-192953] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:28:56.749 [DEBUG] [Thread-192955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:28:58.120 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:28:58.121 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:11.805 [DEBUG] [Thread-192956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:29:21.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:29:21.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:29:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 29, 2), 6.37895, 65.6085, 0.0, 18.3157, 14.8773, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:29:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:29:02
2026-04-12T17:29:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:29:23.077 [DEBUG] [Thread-192957] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6a0
2026-04-12T17:29:23.077 [DEBUG] [Thread-192957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:29:23.097 [DEBUG] [Thread-192957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:29:23.097 [INFO] [Thread-192957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] client lang: <none>
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] server lang: <none>
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] kex follows: False
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] Compression: none
2026-04-12T17:29:23.100 [DEBUG] [Thread-192957] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:29:23.119 [DEBUG] [Thread-192957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:29:23.119 [DEBUG] [Thread-192957] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:29:23.119 [DEBUG] [Thread-192957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:29:23.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:29:23.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:29:23.121 [DEBUG] [Thread-192957] [transport.py] [_log()] userauth is OK
2026-04-12T17:29:23.122 [DEBUG] [Thread-192957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:29:23.122 [DEBUG] [Thread-192957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:29:23.122 [DEBUG] [Thread-192957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:29:23.122 [DEBUG] [Thread-192957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:29:23.147 [INFO] [Thread-192957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:29:23.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:29:23.745 [DEBUG] [Thread-192957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:29:23.745 [DEBUG] [Thread-192957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:29:23.745 [DEBUG] [Thread-192957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:29:23.787 [DEBUG] [Thread-192957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:29:23.787 [DEBUG] [Thread-192957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:29:23.790 [DEBUG] [Thread-192957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:29:23.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:29:23.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:29:23.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:29:23.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:29:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:29:23.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:29:23.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:29:23.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:29:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:29:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.645243 -999.00  +14.60  19.76     71   +9.40 1 2 1 1 1   887    0 6.37 60.36 ----- 19.8 19.8 264.2 22.7 17.2 -24.8 17.0 -22.9 17.5 -21.1 18.1 -23.9
2026-04-12T17:29:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:29:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:29:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.645243
2026-04-12T17:29:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:29:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:29:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:29:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:29:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:29:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:29:02', tmtdew=6.37895, humidity=65.6085, cloud=0.0, wind=18.3157, temperature=14.8773, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:29:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:29:23.820 [DEBUG] [Thread-192957] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:29:23.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:29:23.914 [DEBUG] [Thread-192960] [transport.py] [_log()] starting thread (client mode): 0xb0fccd00
2026-04-12T17:29:23.914 [DEBUG] [Thread-192960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:29:23.928 [DEBUG] [Thread-192960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:29:23.928 [INFO] [Thread-192960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:29:23.935 [DEBUG] [Thread-192960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:29:23.936 [DEBUG] [Thread-192960] [transport.py] [_log()] client lang: <none>
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] server lang: <none>
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] kex follows: False
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:29:23.937 [DEBUG] [Thread-192960] [transport.py] [_log()] Compression: none
2026-04-12T17:29:23.938 [DEBUG] [Thread-192960] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:29:23.993 [DEBUG] [Thread-192960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:29:23.994 [DEBUG] [Thread-192960] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:29:23.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:29:23.996 [DEBUG] [Thread-192960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:29:23.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:29:24.051 [DEBUG] [Thread-192960] [transport.py] [_log()] userauth is OK
2026-04-12T17:29:24.051 [DEBUG] [Thread-192960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:29:24.051 [DEBUG] [Thread-192960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:29:24.051 [DEBUG] [Thread-192960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:29:24.052 [DEBUG] [Thread-192960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:29:24.070 [INFO] [Thread-192960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:29:24.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:29:24.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:29:24.913 [DEBUG] [Thread-192960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:29:24.913 [DEBUG] [Thread-192960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:29:24.964 [DEBUG] [Thread-192960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:29:24.964 [DEBUG] [Thread-192960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:29:24.977 [DEBUG] [Thread-192960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:29:24.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:29:24.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:29:24.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:29:25.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:29:25.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:29:25.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:29:25.017 [DEBUG] [Thread-192960] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:29:26.837 [DEBUG] [Thread-192962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:41.888 [DEBUG] [Thread-192963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:47.765 [DEBUG] [Thread-192964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:55.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:29:55.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:29:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:29:56.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 29, 38), 6.56028, 64.8586, 0.0, 16.0913, 15.3557, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:29:56.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:29:38
2026-04-12T17:29:56.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:29:56.922 [DEBUG] [Thread-192965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:56.955 [DEBUG] [Thread-192966] [transport.py] [_log()] starting thread (client mode): 0xb0f6c040
2026-04-12T17:29:56.955 [DEBUG] [Thread-192966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:29:56.977 [DEBUG] [Thread-192966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:29:56.977 [INFO] [Thread-192966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] client lang: <none>
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] server lang: <none>
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] kex follows: False
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:29:56.980 [DEBUG] [Thread-192966] [transport.py] [_log()] Compression: none
2026-04-12T17:29:56.981 [DEBUG] [Thread-192966] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:29:56.998 [DEBUG] [Thread-192966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:29:56.999 [DEBUG] [Thread-192966] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:29:56.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:29:57.000 [DEBUG] [Thread-192966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:29:57.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:29:57.002 [DEBUG] [Thread-192966] [transport.py] [_log()] userauth is OK
2026-04-12T17:29:57.002 [DEBUG] [Thread-192966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:29:57.002 [DEBUG] [Thread-192966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:29:57.002 [DEBUG] [Thread-192966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:29:57.003 [DEBUG] [Thread-192966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:29:57.028 [INFO] [Thread-192966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:29:57.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:29:57.649 [DEBUG] [Thread-192966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:29:57.649 [DEBUG] [Thread-192966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:29:57.650 [DEBUG] [Thread-192966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:29:57.690 [DEBUG] [Thread-192966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:29:57.690 [DEBUG] [Thread-192966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:29:57.693 [DEBUG] [Thread-192966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:29:57.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:29:57.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:29:57.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:29:57.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:29:57.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:29:57.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:29:57.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:29:57.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:29:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:29:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.645591 -999.00  +14.60  10.81     71   +9.50 1 2 1 1 1   887    0 6.36 59.07 ----- 10.8 10.8 263.5 16.6 17.2 -24.4 17.0 -22.9 17.5 -20.7 18.1 -23.1
2026-04-12T17:29:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:29:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:29:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.645591
2026-04-12T17:29:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:29:57.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:29:57.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:29:57.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:29:57.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:29:57.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:29:38', tmtdew=6.56028, humidity=64.8586, cloud=0.0, wind=16.0913, temperature=15.3557, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:29:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:29:57.718 [DEBUG] [Thread-192966] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:29:57.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:29:57.807 [DEBUG] [Thread-192969] [transport.py] [_log()] starting thread (client mode): 0xb0f6c3a0
2026-04-12T17:29:57.807 [DEBUG] [Thread-192969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:29:57.821 [DEBUG] [Thread-192969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:29:57.821 [INFO] [Thread-192969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] client lang: <none>
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] server lang: <none>
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] kex follows: False
2026-04-12T17:29:57.829 [DEBUG] [Thread-192969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:29:57.830 [DEBUG] [Thread-192969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:29:57.830 [DEBUG] [Thread-192969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:29:57.830 [DEBUG] [Thread-192969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:29:57.830 [DEBUG] [Thread-192969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:29:57.830 [DEBUG] [Thread-192969] [transport.py] [_log()] Compression: none
2026-04-12T17:29:57.830 [DEBUG] [Thread-192969] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:29:57.888 [DEBUG] [Thread-192969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:29:57.889 [DEBUG] [Thread-192969] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:29:57.889 [DEBUG] [Thread-192969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:29:57.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:29:57.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:29:57.944 [DEBUG] [Thread-192969] [transport.py] [_log()] userauth is OK
2026-04-12T17:29:57.944 [DEBUG] [Thread-192969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:29:57.944 [DEBUG] [Thread-192969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:29:57.944 [DEBUG] [Thread-192969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:29:57.945 [DEBUG] [Thread-192969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:29:57.967 [INFO] [Thread-192969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:29:57.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:29:57.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:29:58.262 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:58.264 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:29:58.774 [DEBUG] [Thread-192969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:29:58.774 [DEBUG] [Thread-192969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:29:58.822 [DEBUG] [Thread-192969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:29:58.822 [DEBUG] [Thread-192969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:29:58.831 [DEBUG] [Thread-192969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:29:58.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:29:58.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:29:58.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:29:58.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:29:58.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:29:58.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:29:58.869 [DEBUG] [Thread-192969] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:30:11.960 [DEBUG] [Thread-192971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:30:27.024 [DEBUG] [Thread-192972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:30:28.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:30:28.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:30:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:30:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 30, 13), 6.42816, 65.1615, 0.0, 17.4683, 14.7946, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:30:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:30:13
2026-04-12T17:30:30.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:30:30.673 [DEBUG] [Thread-192973] [transport.py] [_log()] starting thread (client mode): 0xb0fcd990
2026-04-12T17:30:30.673 [DEBUG] [Thread-192973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:30:30.694 [DEBUG] [Thread-192973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:30:30.694 [INFO] [Thread-192973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] client lang: <none>
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] server lang: <none>
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] kex follows: False
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] Compression: none
2026-04-12T17:30:30.698 [DEBUG] [Thread-192973] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:30:30.716 [DEBUG] [Thread-192973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:30:30.716 [DEBUG] [Thread-192973] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:30:30.717 [DEBUG] [Thread-192973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:30:30.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:30:30.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:30:30.719 [DEBUG] [Thread-192973] [transport.py] [_log()] userauth is OK
2026-04-12T17:30:30.719 [DEBUG] [Thread-192973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:30:30.719 [DEBUG] [Thread-192973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:30:30.719 [DEBUG] [Thread-192973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:30:30.720 [DEBUG] [Thread-192973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:30:30.752 [INFO] [Thread-192973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:30:30.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:30:36.558 [DEBUG] [Thread-192973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:30:36.558 [DEBUG] [Thread-192973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:30:36.559 [DEBUG] [Thread-192973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:30:36.599 [DEBUG] [Thread-192973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:30:36.599 [DEBUG] [Thread-192973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:30:36.603 [DEBUG] [Thread-192973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:30:36.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:30:36.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:30:36.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:30:36.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:30:36.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:30:36.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:30:36.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:30:36.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:30:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:30:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.645591 -999.00  +14.60  10.81     71   +9.50 1 2 1 1 1   887    0 6.36 59.07 ----- 10.8 10.8 263.5 16.6 17.2 -24.4 17.0 -22.9 17.5 -20.7 18.1 -23.1
2026-04-12T17:30:36.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:30:36.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:30:36.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.645591
2026-04-12T17:30:36.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:30:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:30:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:30:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:30:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:30:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:30:13', tmtdew=6.42816, humidity=65.1615, cloud=0.0, wind=17.4683, temperature=14.7946, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:29:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:30:36.742 [DEBUG] [Thread-192973] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:30:36.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:30:36.836 [DEBUG] [Thread-192976] [transport.py] [_log()] starting thread (client mode): 0xb0f6ffa0
2026-04-12T17:30:36.836 [DEBUG] [Thread-192976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:30:36.856 [DEBUG] [Thread-192976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:30:36.856 [INFO] [Thread-192976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:30:36.863 [DEBUG] [Thread-192976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:30:36.863 [DEBUG] [Thread-192976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:30:36.863 [DEBUG] [Thread-192976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:30:36.863 [DEBUG] [Thread-192976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] client lang: <none>
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] server lang: <none>
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] kex follows: False
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] Compression: none
2026-04-12T17:30:36.864 [DEBUG] [Thread-192976] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:30:36.925 [DEBUG] [Thread-192976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:30:36.925 [DEBUG] [Thread-192976] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:30:36.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:30:36.926 [DEBUG] [Thread-192976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:30:36.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:30:36.981 [DEBUG] [Thread-192976] [transport.py] [_log()] userauth is OK
2026-04-12T17:30:36.981 [DEBUG] [Thread-192976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:30:36.981 [DEBUG] [Thread-192976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:30:36.981 [DEBUG] [Thread-192976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:30:36.981 [DEBUG] [Thread-192976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:30:37.000 [INFO] [Thread-192976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:30:37.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:30:37.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:30:37.811 [DEBUG] [Thread-192976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:30:37.811 [DEBUG] [Thread-192976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:30:37.858 [DEBUG] [Thread-192976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:30:37.859 [DEBUG] [Thread-192976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:30:37.867 [DEBUG] [Thread-192976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:30:37.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:30: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')
2026-04-12T17:30:37.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:30:37.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:30:37.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:30:37.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:30:37.900 [DEBUG] [Thread-192976] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:30:42.061 [DEBUG] [Thread-192978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:30:47.813 [DEBUG] [Thread-192979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:30:57.116 [DEBUG] [Thread-192980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:30:58.403 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:30:58.404 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:31:07.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:31:07.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:31:07.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:31:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 30, 49), 6.50247, 65.0909, 0.0, 18.1375, 15.2566, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:31:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:30:49
2026-04-12T17:31:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:31:09.718 [DEBUG] [Thread-192981] [transport.py] [_log()] starting thread (client mode): 0xb0f6e440
2026-04-12T17:31:09.718 [DEBUG] [Thread-192981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:31:09.733 [DEBUG] [Thread-192981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:31:09.733 [INFO] [Thread-192981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:31:09.737 [DEBUG] [Thread-192981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:31:09.737 [DEBUG] [Thread-192981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:31:09.737 [DEBUG] [Thread-192981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:31:09.737 [DEBUG] [Thread-192981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:09.737 [DEBUG] [Thread-192981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:09.737 [DEBUG] [Thread-192981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] client lang: <none>
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] server lang: <none>
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] kex follows: False
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] Compression: none
2026-04-12T17:31:09.738 [DEBUG] [Thread-192981] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:31:09.758 [DEBUG] [Thread-192981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:31:09.759 [DEBUG] [Thread-192981] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:31:09.760 [DEBUG] [Thread-192981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:31:09.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:31:09.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:31:09.762 [DEBUG] [Thread-192981] [transport.py] [_log()] userauth is OK
2026-04-12T17:31:09.763 [DEBUG] [Thread-192981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:31:09.763 [DEBUG] [Thread-192981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:31:09.763 [DEBUG] [Thread-192981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:31:09.763 [DEBUG] [Thread-192981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:31:09.785 [INFO] [Thread-192981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:31:09.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:31:10.521 [DEBUG] [Thread-192981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:31:10.521 [DEBUG] [Thread-192981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:31:10.522 [DEBUG] [Thread-192981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:31:10.562 [DEBUG] [Thread-192981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:31:10.563 [DEBUG] [Thread-192981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:31:10.566 [DEBUG] [Thread-192981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:31:10.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:31:10.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:31:10.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:31:10.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:31:10.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:31:10.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:31:10.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:31:10.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:31:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:31:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.645938 -999.00  +14.60  16.70     70   +9.30 1 2 1 1 1   887    0 6.48 61.12 ----- 16.7 16.7 271.0 22.9 17.3 -24.6 17.0 -22.8 17.5 -20.8 18.1 -23.4
2026-04-12T17:31:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:31:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:31:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.645938
2026-04-12T17:31:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:31:10.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:31:10.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:31:10.593 [DEBUG] [Thread-192981] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:31:10.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:31:10.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:31:10.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:30:49', tmtdew=6.50247, humidity=65.0909, cloud=0.0, wind=18.1375, temperature=15.2566, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:30:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:31:10.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:31:10.687 [DEBUG] [Thread-192984] [transport.py] [_log()] starting thread (client mode): 0xae534520
2026-04-12T17:31:10.687 [DEBUG] [Thread-192984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:31:10.702 [DEBUG] [Thread-192984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:31:10.702 [INFO] [Thread-192984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:31:10.710 [DEBUG] [Thread-192984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] client lang: <none>
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] server lang: <none>
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] kex follows: False
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] Compression: none
2026-04-12T17:31:10.711 [DEBUG] [Thread-192984] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:31:10.768 [DEBUG] [Thread-192984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:31:10.769 [DEBUG] [Thread-192984] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:31:10.769 [DEBUG] [Thread-192984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:31:10.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:31:10.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:31:10.824 [DEBUG] [Thread-192984] [transport.py] [_log()] userauth is OK
2026-04-12T17:31:10.824 [DEBUG] [Thread-192984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:31:10.824 [DEBUG] [Thread-192984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:31:10.825 [DEBUG] [Thread-192984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:31:10.825 [DEBUG] [Thread-192984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:31:10.843 [INFO] [Thread-192984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:31:10.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:31:10.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:31:11.693 [DEBUG] [Thread-192984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:31:11.693 [DEBUG] [Thread-192984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:31:11.741 [DEBUG] [Thread-192984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:31:11.741 [DEBUG] [Thread-192984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:31:11.750 [DEBUG] [Thread-192984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:31:11.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:31:11.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:31:11.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:31:11.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:31:11.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:31:11.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:31:11.787 [DEBUG] [Thread-192984] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:31:12.153 [DEBUG] [Thread-192986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:31:27.204 [DEBUG] [Thread-192987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:31:41.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:31:41.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:31:41.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:31:42.245 [DEBUG] [Thread-192988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:31:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 31, 24), 6.45795, 65.0123, 0.0, 16.5334, 14.7617, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:31:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:31:24
2026-04-12T17:31:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:31:43.598 [DEBUG] [Thread-192989] [transport.py] [_log()] starting thread (client mode): 0xae5a4e50
2026-04-12T17:31:43.598 [DEBUG] [Thread-192989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:31:43.618 [DEBUG] [Thread-192989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:31:43.618 [INFO] [Thread-192989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:31:43.622 [DEBUG] [Thread-192989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:31:43.622 [DEBUG] [Thread-192989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] client lang: <none>
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] server lang: <none>
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] kex follows: False
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] Compression: none
2026-04-12T17:31:43.623 [DEBUG] [Thread-192989] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:31:43.640 [DEBUG] [Thread-192989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:31:43.640 [DEBUG] [Thread-192989] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:31:43.641 [DEBUG] [Thread-192989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:31:43.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:31:43.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:31:43.643 [DEBUG] [Thread-192989] [transport.py] [_log()] userauth is OK
2026-04-12T17:31:43.643 [DEBUG] [Thread-192989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:31:43.643 [DEBUG] [Thread-192989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:31:43.643 [DEBUG] [Thread-192989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:31:43.643 [DEBUG] [Thread-192989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:31:43.665 [INFO] [Thread-192989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:31:43.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:31:44.252 [DEBUG] [Thread-192989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:31:44.252 [DEBUG] [Thread-192989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:31:44.253 [DEBUG] [Thread-192989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:31:44.294 [DEBUG] [Thread-192989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:31:44.294 [DEBUG] [Thread-192989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:31:44.297 [DEBUG] [Thread-192989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:31:44.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:31:44.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:31:44.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:31:44.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:31:44.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:31:44.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:31:44.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:31:44.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:31:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:31:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.646979 -999.00  +14.70  10.58     70   +9.30 1 2 1 1 1   887    0 6.45 57.92 ----- 10.6 10.6 255.8 13.4 17.3 -24.4 17.0 -22.8 17.6 -20.7 18.1 -23.2
2026-04-12T17:31:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:31:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:31:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.646979
2026-04-12T17:31:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:31:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:31:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:31:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:31:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:31:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:31:24', tmtdew=6.45795, humidity=65.0123, cloud=0.0, wind=16.5334, temperature=14.7617, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:31:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:31:44.323 [DEBUG] [Thread-192989] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:31:44.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:31:44.414 [DEBUG] [Thread-192992] [transport.py] [_log()] starting thread (client mode): 0xae5a5ae0
2026-04-12T17:31:44.415 [DEBUG] [Thread-192992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:31:44.430 [DEBUG] [Thread-192992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:31:44.430 [INFO] [Thread-192992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:31:44.437 [DEBUG] [Thread-192992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] client lang: <none>
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] server lang: <none>
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] kex follows: False
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:31:44.438 [DEBUG] [Thread-192992] [transport.py] [_log()] Compression: none
2026-04-12T17:31:44.439 [DEBUG] [Thread-192992] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:31:44.495 [DEBUG] [Thread-192992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:31:44.496 [DEBUG] [Thread-192992] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:31:44.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:31:44.497 [DEBUG] [Thread-192992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:31:44.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:31:44.552 [DEBUG] [Thread-192992] [transport.py] [_log()] userauth is OK
2026-04-12T17:31:44.552 [DEBUG] [Thread-192992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:31:44.553 [DEBUG] [Thread-192992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:31:44.553 [DEBUG] [Thread-192992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:31:44.553 [DEBUG] [Thread-192992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:31:44.572 [INFO] [Thread-192992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:31:44.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:31:44.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:31:45.378 [DEBUG] [Thread-192992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:31:45.378 [DEBUG] [Thread-192992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:31:45.426 [DEBUG] [Thread-192992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:31:45.426 [DEBUG] [Thread-192992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:31:45.435 [DEBUG] [Thread-192992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:31:45.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:31:45.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:31: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
2026-04-12T17:31:45.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:31:45.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:31:45.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:31:45.477 [DEBUG] [Thread-192992] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:31:47.868 [DEBUG] [Thread-192994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:31:57.283 [DEBUG] [Thread-192995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:31:58.543 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:31:58.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:32:12.336 [DEBUG] [Thread-192996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:32:15.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:32:15.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:32:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:32:16.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 31, 24), 6.45795, 65.0123, 0.0, 16.5334, 14.7617, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:32:16.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:31:24
2026-04-12T17:32:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:32:17.338 [DEBUG] [Thread-192997] [transport.py] [_log()] starting thread (client mode): 0xae5a7cd0
2026-04-12T17:32:17.338 [DEBUG] [Thread-192997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:32:17.357 [DEBUG] [Thread-192997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:32:17.357 [INFO] [Thread-192997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] client lang: <none>
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] server lang: <none>
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] kex follows: False
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:32:17.359 [DEBUG] [Thread-192997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:32:17.360 [DEBUG] [Thread-192997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:32:17.360 [DEBUG] [Thread-192997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:32:17.360 [DEBUG] [Thread-192997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:32:17.360 [DEBUG] [Thread-192997] [transport.py] [_log()] Compression: none
2026-04-12T17:32:17.360 [DEBUG] [Thread-192997] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:32:17.379 [DEBUG] [Thread-192997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:32:17.379 [DEBUG] [Thread-192997] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:32:17.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:32:17.380 [DEBUG] [Thread-192997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:32:17.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:32:17.382 [DEBUG] [Thread-192997] [transport.py] [_log()] userauth is OK
2026-04-12T17:32:17.382 [DEBUG] [Thread-192997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:32:17.383 [DEBUG] [Thread-192997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:32:17.383 [DEBUG] [Thread-192997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:32:17.383 [DEBUG] [Thread-192997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:32:17.420 [INFO] [Thread-192997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:32:17.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:32:17.973 [DEBUG] [Thread-192997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:32:17.974 [DEBUG] [Thread-192997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:32:17.974 [DEBUG] [Thread-192997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:32:18.015 [DEBUG] [Thread-192997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:32:18.015 [DEBUG] [Thread-192997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:32:18.017 [DEBUG] [Thread-192997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:32:18.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:32:18.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:32:18.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:32:18.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:32:18.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:32:18.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:32:18.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:32:18.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:32:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:32:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.647327 -999.00  +14.80  12.49     70   +9.50 1 2 1 1 1   887    0 6.53 59.99 ----- 12.5 12.5 269.8 14.5 17.3 -24.0 17.1 -22.6 17.6 -20.6 18.2 -23.2
2026-04-12T17:32:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:32:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:32:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.647327
2026-04-12T17:32:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:32:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:32:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:32:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:32:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:32:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:31:24', tmtdew=6.45795, humidity=65.0123, cloud=0.0, wind=16.5334, temperature=14.7617, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:32:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:32:18.044 [DEBUG] [Thread-192997] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:32:18.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:32:18.137 [DEBUG] [Thread-193000] [transport.py] [_log()] starting thread (client mode): 0xae5a5930
2026-04-12T17:32:18.137 [DEBUG] [Thread-193000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:32:18.152 [DEBUG] [Thread-193000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:32:18.153 [INFO] [Thread-193000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:32:18.160 [DEBUG] [Thread-193000] [transport.py] [_log()] client lang: <none>
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] server lang: <none>
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] kex follows: False
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] Compression: none
2026-04-12T17:32:18.161 [DEBUG] [Thread-193000] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:32:18.220 [DEBUG] [Thread-193000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:32:18.220 [DEBUG] [Thread-193000] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:32:18.221 [DEBUG] [Thread-193000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:32:18.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:32:18.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:32:18.275 [DEBUG] [Thread-193000] [transport.py] [_log()] userauth is OK
2026-04-12T17:32:18.276 [DEBUG] [Thread-193000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:32:18.276 [DEBUG] [Thread-193000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:32:18.276 [DEBUG] [Thread-193000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:32:18.276 [DEBUG] [Thread-193000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:32:18.295 [INFO] [Thread-193000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:32:18.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:32:18.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:32:19.117 [DEBUG] [Thread-193000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:32:19.117 [DEBUG] [Thread-193000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:32:19.165 [DEBUG] [Thread-193000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:32:19.165 [DEBUG] [Thread-193000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:32:19.174 [DEBUG] [Thread-193000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:32:19.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:32:19.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:32:19.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:32:19.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:32:19.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:32:19.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:32:19.211 [DEBUG] [Thread-193000] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:32:27.374 [DEBUG] [Thread-193002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:32:42.436 [DEBUG] [Thread-193003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:32:47.921 [DEBUG] [Thread-193004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:32:49.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:32:49.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:32:49.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:32:50.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 32, 35), 6.58378, 64.7269, 0.0, 17.4319, 15.224, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:32:50.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:32:35
2026-04-12T17:32:50.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:32:51.024 [DEBUG] [Thread-193005] [transport.py] [_log()] starting thread (client mode): 0xb0f6dfc0
2026-04-12T17:32:51.024 [DEBUG] [Thread-193005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:32:51.040 [DEBUG] [Thread-193005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:32:51.040 [INFO] [Thread-193005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] client lang: <none>
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] server lang: <none>
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] kex follows: False
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] Compression: none
2026-04-12T17:32:51.043 [DEBUG] [Thread-193005] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:32:51.051 [DEBUG] [Thread-193005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:32:51.052 [DEBUG] [Thread-193005] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:32:51.052 [DEBUG] [Thread-193005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:32:51.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:32:51.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:32:51.053 [DEBUG] [Thread-193005] [transport.py] [_log()] userauth is OK
2026-04-12T17:32:51.053 [DEBUG] [Thread-193005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:32:51.053 [DEBUG] [Thread-193005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:32:51.054 [DEBUG] [Thread-193005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:32:51.054 [DEBUG] [Thread-193005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:32:51.070 [INFO] [Thread-193005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:32:51.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:32:51.674 [DEBUG] [Thread-193005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:32:51.674 [DEBUG] [Thread-193005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:32:51.675 [DEBUG] [Thread-193005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:32:51.715 [DEBUG] [Thread-193005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:32:51.715 [DEBUG] [Thread-193005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:32:51.718 [DEBUG] [Thread-193005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:32:51.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:32:51.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:32:51.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:32:51.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:32:51.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:32:51.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:32:51.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:32:51.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:32:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:32:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.647674 -999.00  +14.70  16.93     69   +9.20 1 2 1 1 1   887    0 6.41 58.33 ----- 16.9 16.9 266.4 20.3 17.3 -24.6 17.0 -22.8 17.5 -20.8 18.1 -23.5
2026-04-12T17:32:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:32:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:32:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.647674
2026-04-12T17:32:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:32:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:32:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:32:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:32:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:32:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:32:35', tmtdew=6.58378, humidity=64.7269, cloud=0.0, wind=17.4319, temperature=15.224, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:32:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:32:51.742 [DEBUG] [Thread-193005] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:32:51.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:32:51.836 [DEBUG] [Thread-193008] [transport.py] [_log()] starting thread (client mode): 0xa793b5e0
2026-04-12T17:32:51.836 [DEBUG] [Thread-193008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:32:51.853 [DEBUG] [Thread-193008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:32:51.853 [INFO] [Thread-193008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:32:51.861 [DEBUG] [Thread-193008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:32:51.861 [DEBUG] [Thread-193008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:32:51.861 [DEBUG] [Thread-193008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] client lang: <none>
2026-04-12T17:32:51.862 [DEBUG] [Thread-193008] [transport.py] [_log()] server lang: <none>
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] kex follows: False
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] Compression: none
2026-04-12T17:32:51.863 [DEBUG] [Thread-193008] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:32:51.920 [DEBUG] [Thread-193008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:32:51.920 [DEBUG] [Thread-193008] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:32:51.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:32:51.921 [DEBUG] [Thread-193008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:32:51.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:32:51.975 [DEBUG] [Thread-193008] [transport.py] [_log()] userauth is OK
2026-04-12T17:32:51.976 [DEBUG] [Thread-193008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:32:51.976 [DEBUG] [Thread-193008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:32:51.976 [DEBUG] [Thread-193008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:32:51.976 [DEBUG] [Thread-193008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:32:51.995 [INFO] [Thread-193008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:32:51.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:32:51.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:32:52.830 [DEBUG] [Thread-193008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:32:52.831 [DEBUG] [Thread-193008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:32:52.878 [DEBUG] [Thread-193008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:32:52.878 [DEBUG] [Thread-193008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:32:52.888 [DEBUG] [Thread-193008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:32:52.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:32:52.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:32:52.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:32:52.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:32:52.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:32:52.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:32:52.925 [DEBUG] [Thread-193008] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:32:57.473 [DEBUG] [Thread-193010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:32:58.689 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:32:58.690 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:12.525 [DEBUG] [Thread-193011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:22.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:33:22.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:33:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:33:24.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 33, 10), 6.72554, 63.9989, 0.0, 16.5863, 14.862, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:33:24.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:33:10
2026-04-12T17:33:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:33:24.728 [DEBUG] [Thread-193012] [transport.py] [_log()] starting thread (client mode): 0xa7939fc0
2026-04-12T17:33:24.728 [DEBUG] [Thread-193012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:33:24.748 [DEBUG] [Thread-193012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:33:24.748 [INFO] [Thread-193012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:24.749 [DEBUG] [Thread-193012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] client lang: <none>
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] server lang: <none>
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] kex follows: False
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] Compression: none
2026-04-12T17:33:24.750 [DEBUG] [Thread-193012] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:33:24.758 [DEBUG] [Thread-193012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:33:24.758 [DEBUG] [Thread-193012] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:33:24.759 [DEBUG] [Thread-193012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:33:24.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:33:24.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:33:24.760 [DEBUG] [Thread-193012] [transport.py] [_log()] userauth is OK
2026-04-12T17:33:24.761 [DEBUG] [Thread-193012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:33:24.761 [DEBUG] [Thread-193012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:33:24.761 [DEBUG] [Thread-193012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:33:24.761 [DEBUG] [Thread-193012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:33:24.784 [INFO] [Thread-193012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:33:24.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:33:25.412 [DEBUG] [Thread-193012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:33:25.412 [DEBUG] [Thread-193012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:33:25.413 [DEBUG] [Thread-193012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:33:25.453 [DEBUG] [Thread-193012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:33:25.453 [DEBUG] [Thread-193012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:33:25.456 [DEBUG] [Thread-193012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:33:25.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:33:25.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:33:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:33:25.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:33:25.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:33:25.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:33:25.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:33:25.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:33:25.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:33:25.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.648021 -999.00  +14.70  13.52     70   +9.30 1 2 1 1 1   887    0 6.49 60.73 ----- 13.5 13.5 266.6 17.9 17.2 -24.6 17.1 -22.7 17.5 -20.8 18.1 -23.3
2026-04-12T17:33:25.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:33:25.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:33:25.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.648021
2026-04-12T17:33:25.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:33:25.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:33:25.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:33:25.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:33:25.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:33:25.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:33:10', tmtdew=6.72554, humidity=63.9989, cloud=0.0, wind=16.5863, temperature=14.862, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:33:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:33:25.481 [DEBUG] [Thread-193012] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:33:25.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:33:25.575 [DEBUG] [Thread-193015] [transport.py] [_log()] starting thread (client mode): 0xb0f43e80
2026-04-12T17:33:25.575 [DEBUG] [Thread-193015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:33:25.589 [DEBUG] [Thread-193015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:33:25.590 [INFO] [Thread-193015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:33:25.597 [DEBUG] [Thread-193015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] client lang: <none>
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] server lang: <none>
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] kex follows: False
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:33:25.598 [DEBUG] [Thread-193015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:33:25.599 [DEBUG] [Thread-193015] [transport.py] [_log()] Compression: none
2026-04-12T17:33:25.599 [DEBUG] [Thread-193015] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:33:25.655 [DEBUG] [Thread-193015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:33:25.655 [DEBUG] [Thread-193015] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:33:25.656 [DEBUG] [Thread-193015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:33:25.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:33:25.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:33:25.712 [DEBUG] [Thread-193015] [transport.py] [_log()] userauth is OK
2026-04-12T17:33:25.712 [DEBUG] [Thread-193015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:33:25.712 [DEBUG] [Thread-193015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:33:25.712 [DEBUG] [Thread-193015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:33:25.712 [DEBUG] [Thread-193015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:33:25.732 [INFO] [Thread-193015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:33:25.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:33:25.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:33:26.589 [DEBUG] [Thread-193015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:33:26.589 [DEBUG] [Thread-193015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:33:26.637 [DEBUG] [Thread-193015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:33:26.637 [DEBUG] [Thread-193015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:33:26.647 [DEBUG] [Thread-193015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:33:26.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:33:26.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:33:26.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:33:26.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:33:26.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:33:26.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:33:26.684 [DEBUG] [Thread-193015] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:33:27.563 [DEBUG] [Thread-193017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:42.619 [DEBUG] [Thread-193018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:47.961 [DEBUG] [Thread-193019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:56.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:33:56.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:33:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:33:57.658 [DEBUG] [Thread-193020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:57.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 33, 46), 6.91831, 63.2688, 0.0, 18.1022, 15.191, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:33:57.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:33:46
2026-04-12T17:33:58.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:33:58.573 [DEBUG] [Thread-193021] [transport.py] [_log()] starting thread (client mode): 0xae50a080
2026-04-12T17:33:58.573 [DEBUG] [Thread-193021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:33:58.591 [DEBUG] [Thread-193021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:33:58.591 [INFO] [Thread-193021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] client lang: <none>
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] server lang: <none>
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] kex follows: False
2026-04-12T17:33:58.595 [DEBUG] [Thread-193021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:33:58.596 [DEBUG] [Thread-193021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:33:58.596 [DEBUG] [Thread-193021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:33:58.596 [DEBUG] [Thread-193021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:33:58.596 [DEBUG] [Thread-193021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:33:58.596 [DEBUG] [Thread-193021] [transport.py] [_log()] Compression: none
2026-04-12T17:33:58.596 [DEBUG] [Thread-193021] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:33:58.606 [DEBUG] [Thread-193021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:33:58.606 [DEBUG] [Thread-193021] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:33:58.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:33:58.607 [DEBUG] [Thread-193021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:33:58.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:33:58.610 [DEBUG] [Thread-193021] [transport.py] [_log()] userauth is OK
2026-04-12T17:33:58.610 [DEBUG] [Thread-193021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:33:58.610 [DEBUG] [Thread-193021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:33:58.610 [DEBUG] [Thread-193021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:33:58.610 [DEBUG] [Thread-193021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:33:58.634 [INFO] [Thread-193021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:33:58.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:33:58.831 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:58.833 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:33:59.258 [DEBUG] [Thread-193021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:33:59.258 [DEBUG] [Thread-193021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:33:59.259 [DEBUG] [Thread-193021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:33:59.299 [DEBUG] [Thread-193021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:33:59.299 [DEBUG] [Thread-193021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:33:59.303 [DEBUG] [Thread-193021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:33:59.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:33:59.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:33:59.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:33:59.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:33:59.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:33:59.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:33:59.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:33:59.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:33:59.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:33:59.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.648368 -999.00  +14.70  11.98     70   +9.40 1 2 1 1 1   887    0 6.59 58.05 ----- 12.0 12.0 266.8 16.6 17.3 -24.3 17.1 -23.0 17.6 -20.9 18.1 -23.5
2026-04-12T17:33:59.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:33:59.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:33:59.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.648368
2026-04-12T17:33:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:33:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:33:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:33:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:33:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:33:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:33:46', tmtdew=6.91831, humidity=63.2688, cloud=0.0, wind=18.1022, temperature=15.191, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:33:38.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:33:59.331 [DEBUG] [Thread-193021] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:33:59.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:33:59.425 [DEBUG] [Thread-193024] [transport.py] [_log()] starting thread (client mode): 0xb0f41c90
2026-04-12T17:33:59.425 [DEBUG] [Thread-193024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:33:59.440 [DEBUG] [Thread-193024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:33:59.440 [INFO] [Thread-193024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:33:59.448 [DEBUG] [Thread-193024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:33:59.448 [DEBUG] [Thread-193024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:33:59.448 [DEBUG] [Thread-193024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:33:59.448 [DEBUG] [Thread-193024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:59.448 [DEBUG] [Thread-193024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] client lang: <none>
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] server lang: <none>
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] kex follows: False
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] Compression: none
2026-04-12T17:33:59.449 [DEBUG] [Thread-193024] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:33:59.507 [DEBUG] [Thread-193024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:33:59.508 [DEBUG] [Thread-193024] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:33:59.509 [DEBUG] [Thread-193024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:33:59.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:33:59.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:33:59.563 [DEBUG] [Thread-193024] [transport.py] [_log()] userauth is OK
2026-04-12T17:33:59.563 [DEBUG] [Thread-193024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:33:59.564 [DEBUG] [Thread-193024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:33:59.564 [DEBUG] [Thread-193024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:33:59.564 [DEBUG] [Thread-193024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:33:59.583 [INFO] [Thread-193024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:33:59.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:33:59.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:34:00.373 [DEBUG] [Thread-193024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:34:00.373 [DEBUG] [Thread-193024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:34:00.421 [DEBUG] [Thread-193024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:34:00.421 [DEBUG] [Thread-193024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:34:00.431 [DEBUG] [Thread-193024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:34:00.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:34:00.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:34: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') -> 00000000
2026-04-12T17:34:00.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:34:00.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:34:00.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:34:00.468 [DEBUG] [Thread-193024] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:34:12.698 [DEBUG] [Thread-193026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:34:27.753 [DEBUG] [Thread-193027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:34:30.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:34:30.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:34:30.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:34:31.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 34, 21), 6.79672, 63.6841, 0.0, 16.5157, 14.7289, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:34:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:34:21
2026-04-12T17:34:32.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:34:32.384 [DEBUG] [Thread-193028] [transport.py] [_log()] starting thread (client mode): 0xae534cd0
2026-04-12T17:34:32.384 [DEBUG] [Thread-193028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:34:32.405 [DEBUG] [Thread-193028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:34:32.405 [INFO] [Thread-193028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:34:32.408 [DEBUG] [Thread-193028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] client lang: <none>
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] server lang: <none>
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] kex follows: False
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] Compression: none
2026-04-12T17:34:32.409 [DEBUG] [Thread-193028] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:34:32.425 [DEBUG] [Thread-193028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:34:32.425 [DEBUG] [Thread-193028] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:34:32.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:34:32.426 [DEBUG] [Thread-193028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:34:32.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:34:32.428 [DEBUG] [Thread-193028] [transport.py] [_log()] userauth is OK
2026-04-12T17:34:32.429 [DEBUG] [Thread-193028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:34:32.429 [DEBUG] [Thread-193028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:34:32.429 [DEBUG] [Thread-193028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:34:32.429 [DEBUG] [Thread-193028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:34:32.464 [INFO] [Thread-193028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:34:32.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:34:33.116 [DEBUG] [Thread-193028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:34:33.117 [DEBUG] [Thread-193028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:34:33.117 [DEBUG] [Thread-193028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:34:33.157 [DEBUG] [Thread-193028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:34:33.158 [DEBUG] [Thread-193028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:34:33.160 [DEBUG] [Thread-193028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:34:33.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:34:33.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:34:33.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:34:33.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:34:33.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:34:33.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:34:33.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:34:33.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:34:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:34:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.648716 -999.00  +14.70  12.34     69   +9.20 1 2 1 1 1   887    0 6.69 60.52 ----- 12.3 12.3 261.9 21.6 17.3 -24.6 17.1 -23.1 17.5 -21.0 18.1 -23.3
2026-04-12T17:34:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:34:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:34:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.648716
2026-04-12T17:34:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:34:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:34:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:34:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:34:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:34:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:34:21', tmtdew=6.79672, humidity=63.6841, cloud=0.0, wind=16.5157, temperature=14.7289, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:34:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:34:33.181 [DEBUG] [Thread-193028] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:34:33.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:34:33.291 [DEBUG] [Thread-193031] [transport.py] [_log()] starting thread (client mode): 0xb0f6db70
2026-04-12T17:34:33.291 [DEBUG] [Thread-193031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:34:33.306 [DEBUG] [Thread-193031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:34:33.306 [INFO] [Thread-193031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] client lang: <none>
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] server lang: <none>
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] kex follows: False
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:34:33.317 [DEBUG] [Thread-193031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:34:33.318 [DEBUG] [Thread-193031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:34:33.318 [DEBUG] [Thread-193031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:34:33.318 [DEBUG] [Thread-193031] [transport.py] [_log()] Compression: none
2026-04-12T17:34:33.318 [DEBUG] [Thread-193031] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:34:33.379 [DEBUG] [Thread-193031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:34:33.379 [DEBUG] [Thread-193031] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:34:33.380 [DEBUG] [Thread-193031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:34:33.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:34:33.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:34:33.444 [DEBUG] [Thread-193031] [transport.py] [_log()] userauth is OK
2026-04-12T17:34:33.445 [DEBUG] [Thread-193031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:34:33.445 [DEBUG] [Thread-193031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:34:33.445 [DEBUG] [Thread-193031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:34:33.445 [DEBUG] [Thread-193031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:34:33.471 [INFO] [Thread-193031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:34:33.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:34:33.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:34:34.282 [DEBUG] [Thread-193031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:34:34.282 [DEBUG] [Thread-193031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:34:34.330 [DEBUG] [Thread-193031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:34:34.330 [DEBUG] [Thread-193031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:34:34.338 [DEBUG] [Thread-193031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:34:34.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:34:34.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:34:34.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:34:34.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:34:34.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:34:34.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:34:34.373 [DEBUG] [Thread-193031] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:34:42.791 [DEBUG] [Thread-193033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:34:48.009 [DEBUG] [Thread-193034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:34:57.845 [DEBUG] [Thread-193035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:34:58.982 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:34:58.984 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:35:04.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:35:04.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:35:04.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:35:05.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 34, 56), 6.64647, 64.347, 0.0, 17.0449, 14.8287, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:35:05.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:34:56
2026-04-12T17:35:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:35:06.230 [DEBUG] [Thread-193036] [transport.py] [_log()] starting thread (client mode): 0xae5a7460
2026-04-12T17:35:06.230 [DEBUG] [Thread-193036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:35:06.249 [DEBUG] [Thread-193036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:35:06.249 [INFO] [Thread-193036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:35:06.252 [DEBUG] [Thread-193036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] client lang: <none>
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] server lang: <none>
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] kex follows: False
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] Compression: none
2026-04-12T17:35:06.253 [DEBUG] [Thread-193036] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:35:06.267 [DEBUG] [Thread-193036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:35:06.267 [DEBUG] [Thread-193036] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:35:06.268 [DEBUG] [Thread-193036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:35:06.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:35:06.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:35:06.270 [DEBUG] [Thread-193036] [transport.py] [_log()] userauth is OK
2026-04-12T17:35:06.270 [DEBUG] [Thread-193036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:35:06.270 [DEBUG] [Thread-193036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:35:06.271 [DEBUG] [Thread-193036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:35:06.271 [DEBUG] [Thread-193036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:35:06.286 [INFO] [Thread-193036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:35:06.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:35:11.779 [DEBUG] [Thread-193036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:35:11.779 [DEBUG] [Thread-193036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:35:11.779 [DEBUG] [Thread-193036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:35:11.820 [DEBUG] [Thread-193036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:35:11.820 [DEBUG] [Thread-193036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:35:11.824 [DEBUG] [Thread-193036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:35:11.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:35:11.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:35:11.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:35:11.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:35:11.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:35:11.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:35:11.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:35:11.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:35:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:35:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.649063 -999.00  +14.60  12.37     70   +9.30 1 2 1 1 1   887    0 6.58 62.90 ----- 12.4 12.4 235.2 19.6 17.3 -24.7 17.1 -22.8 17.6 -20.9 18.1 -23.8
2026-04-12T17:35:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:35:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:35:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.649063
2026-04-12T17:35:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:35:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:35:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:35:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:35:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:35:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:34:56', tmtdew=6.64647, humidity=64.347, cloud=0.0, wind=17.0449, temperature=14.8287, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:34:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:35:11.883 [DEBUG] [Thread-193036] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:35:11.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:35:11.980 [DEBUG] [Thread-193039] [transport.py] [_log()] starting thread (client mode): 0xa793b550
2026-04-12T17:35:11.980 [DEBUG] [Thread-193039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:35:11.994 [DEBUG] [Thread-193039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:35:11.994 [INFO] [Thread-193039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] client lang: <none>
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] server lang: <none>
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] kex follows: False
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] Compression: none
2026-04-12T17:35:12.002 [DEBUG] [Thread-193039] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:35:12.058 [DEBUG] [Thread-193039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:35:12.059 [DEBUG] [Thread-193039] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:35:12.059 [DEBUG] [Thread-193039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:35:12.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:35:12.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:35:12.115 [DEBUG] [Thread-193039] [transport.py] [_log()] userauth is OK
2026-04-12T17:35:12.115 [DEBUG] [Thread-193039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:35:12.116 [DEBUG] [Thread-193039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:35:12.116 [DEBUG] [Thread-193039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:35:12.116 [DEBUG] [Thread-193039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:35:12.136 [INFO] [Thread-193039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:35:12.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:35:12.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:35:12.883 [DEBUG] [Thread-193041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:35:12.933 [DEBUG] [Thread-193039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:35:12.933 [DEBUG] [Thread-193039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:35:12.981 [DEBUG] [Thread-193039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:35:12.981 [DEBUG] [Thread-193039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:35:12.990 [DEBUG] [Thread-193039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:35:12.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:35:12.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:35:13.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:35:13.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:35:13.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:35:13.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:35:13.026 [DEBUG] [Thread-193039] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:35:27.943 [DEBUG] [Thread-193042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:35:42.977 [DEBUG] [Thread-193043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:35:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:35:43.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:35:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:35:44.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 35, 32), 6.59871, 64.5459, 0.0, 13.9932, 14.779, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:35:44.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:35:32
2026-04-12T17:35:44.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:35:44.863 [DEBUG] [Thread-193044] [transport.py] [_log()] starting thread (client mode): 0xae5b63b0
2026-04-12T17:35:44.863 [DEBUG] [Thread-193044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:35:44.883 [DEBUG] [Thread-193044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:35:44.883 [INFO] [Thread-193044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:35:44.885 [DEBUG] [Thread-193044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:35:44.885 [DEBUG] [Thread-193044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:35:44.885 [DEBUG] [Thread-193044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:35:44.885 [DEBUG] [Thread-193044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] client lang: <none>
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] server lang: <none>
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] kex follows: False
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:35:44.886 [DEBUG] [Thread-193044] [transport.py] [_log()] Compression: none
2026-04-12T17:35:44.887 [DEBUG] [Thread-193044] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:35:44.902 [DEBUG] [Thread-193044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:35:44.903 [DEBUG] [Thread-193044] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:35:44.904 [DEBUG] [Thread-193044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:35:44.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:35:44.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:35:44.906 [DEBUG] [Thread-193044] [transport.py] [_log()] userauth is OK
2026-04-12T17:35:44.907 [DEBUG] [Thread-193044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:35:44.907 [DEBUG] [Thread-193044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:35:44.907 [DEBUG] [Thread-193044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:35:44.907 [DEBUG] [Thread-193044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:35:44.930 [INFO] [Thread-193044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:35:44.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:35:45.563 [DEBUG] [Thread-193044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:35:45.563 [DEBUG] [Thread-193044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:35:45.564 [DEBUG] [Thread-193044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:35:45.603 [DEBUG] [Thread-193044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:35:45.603 [DEBUG] [Thread-193044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:35:45.606 [DEBUG] [Thread-193044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:35:45.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:35:45.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:35:45.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:35:45.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:35:45.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:35:45.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.649757 -999.00  +14.70   4.64     71   +9.50 1 2 1 1 1   887    0 6.81 66.10 ----- 4.6 4.6 220.4 14.3 17.3 -24.3 17.0 -22.8 17.6 -20.8 18.2 -23.2
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.649757
2026-04-12T17:35:45.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:35:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:35:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:35:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:35:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:35:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:35:32', tmtdew=6.59871, humidity=64.5459, cloud=0.0, wind=13.9932, temperature=14.779, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:35:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:35:45.624 [DEBUG] [Thread-193044] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:35:45.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:35:45.707 [DEBUG] [Thread-193047] [transport.py] [_log()] starting thread (client mode): 0xae5a5930
2026-04-12T17:35:45.707 [DEBUG] [Thread-193047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:35:45.727 [DEBUG] [Thread-193047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:35:45.727 [INFO] [Thread-193047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:35:45.734 [DEBUG] [Thread-193047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:35:45.735 [DEBUG] [Thread-193047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] client lang: <none>
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] server lang: <none>
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] kex follows: False
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:35:45.736 [DEBUG] [Thread-193047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:35:45.737 [DEBUG] [Thread-193047] [transport.py] [_log()] Compression: none
2026-04-12T17:35:45.737 [DEBUG] [Thread-193047] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:35:45.795 [DEBUG] [Thread-193047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:35:45.795 [DEBUG] [Thread-193047] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:35:45.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:35:45.796 [DEBUG] [Thread-193047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:35:45.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:35:45.850 [DEBUG] [Thread-193047] [transport.py] [_log()] userauth is OK
2026-04-12T17:35:45.851 [DEBUG] [Thread-193047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:35:45.851 [DEBUG] [Thread-193047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:35:45.851 [DEBUG] [Thread-193047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:35:45.851 [DEBUG] [Thread-193047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:35:45.869 [INFO] [Thread-193047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:35:45.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:35:45.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:35:46.688 [DEBUG] [Thread-193047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:35:46.688 [DEBUG] [Thread-193047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:35:46.736 [DEBUG] [Thread-193047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:35:46.736 [DEBUG] [Thread-193047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:35:46.746 [DEBUG] [Thread-193047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:35:46.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:35:46.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:35:46.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:35:46.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:35:46.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:35:46.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:35:46.782 [DEBUG] [Thread-193047] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:35:48.055 [DEBUG] [Thread-193049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:35:58.014 [DEBUG] [Thread-193050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:35:59.124 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:35:59.125 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:36:13.069 [DEBUG] [Thread-193051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:36:16.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:36:16.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:36:16.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:36:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 36, 7), 6.58773, 64.6122, 0.0, 13.5698, 14.8619, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:36:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:36:07
2026-04-12T17:36:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:36:18.570 [DEBUG] [Thread-193052] [transport.py] [_log()] starting thread (client mode): 0xa793aa10
2026-04-12T17:36:18.570 [DEBUG] [Thread-193052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:36:18.591 [DEBUG] [Thread-193052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:36:18.591 [INFO] [Thread-193052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] client lang: <none>
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] server lang: <none>
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] kex follows: False
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] Compression: none
2026-04-12T17:36:18.595 [DEBUG] [Thread-193052] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:36:18.603 [DEBUG] [Thread-193052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:36:18.604 [DEBUG] [Thread-193052] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:36:18.604 [DEBUG] [Thread-193052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:36:18.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:36:18.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:36:18.605 [DEBUG] [Thread-193052] [transport.py] [_log()] userauth is OK
2026-04-12T17:36:18.605 [DEBUG] [Thread-193052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:36:18.606 [DEBUG] [Thread-193052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:36:18.606 [DEBUG] [Thread-193052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:36:18.606 [DEBUG] [Thread-193052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:36:18.618 [INFO] [Thread-193052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:36:18.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:36:19.250 [DEBUG] [Thread-193052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:36:19.250 [DEBUG] [Thread-193052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:36:19.250 [DEBUG] [Thread-193052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:36:19.291 [DEBUG] [Thread-193052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:36:19.291 [DEBUG] [Thread-193052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:36:19.297 [DEBUG] [Thread-193052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:36:19.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:36:19.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:36:19.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:36:19.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:36:19.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:36:19.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:36:19.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:36:19.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:36:19.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:36:19.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.650104 -999.00  +14.80   7.39     70   +9.50 1 2 1 1 1   887    0 6.75 67.10 ----- 7.4 7.4 250.8 9.6 17.3 -24.2 17.0 -22.8 17.7 -20.9 18.2 -23.4
2026-04-12T17:36:19.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:36:19.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:36:19.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.650104
2026-04-12T17:36:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:36:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:36:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:36:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:36:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:36:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:36:07', tmtdew=6.58773, humidity=64.6122, cloud=0.0, wind=13.5698, temperature=14.8619, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:36:08.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:36:19.323 [DEBUG] [Thread-193052] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:36:19.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:36:19.416 [DEBUG] [Thread-193055] [transport.py] [_log()] starting thread (client mode): 0xae509f60
2026-04-12T17:36:19.416 [DEBUG] [Thread-193055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:36:19.431 [DEBUG] [Thread-193055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:36:19.431 [INFO] [Thread-193055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:36:19.438 [DEBUG] [Thread-193055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:36:19.438 [DEBUG] [Thread-193055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:36:19.438 [DEBUG] [Thread-193055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:36:19.438 [DEBUG] [Thread-193055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:19.438 [DEBUG] [Thread-193055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] client lang: <none>
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] server lang: <none>
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] kex follows: False
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] Compression: none
2026-04-12T17:36:19.439 [DEBUG] [Thread-193055] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:36:19.499 [DEBUG] [Thread-193055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:36:19.499 [DEBUG] [Thread-193055] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:36:19.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:36:19.500 [DEBUG] [Thread-193055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:36:19.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:36:19.555 [DEBUG] [Thread-193055] [transport.py] [_log()] userauth is OK
2026-04-12T17:36:19.555 [DEBUG] [Thread-193055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:36:19.555 [DEBUG] [Thread-193055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:36:19.555 [DEBUG] [Thread-193055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:36:19.555 [DEBUG] [Thread-193055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:36:19.574 [INFO] [Thread-193055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:36:19.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:36:19.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:36:20.386 [DEBUG] [Thread-193055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:36:20.387 [DEBUG] [Thread-193055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:36:20.435 [DEBUG] [Thread-193055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:36:20.435 [DEBUG] [Thread-193055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:36:20.444 [DEBUG] [Thread-193055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:36:20.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:36:20.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:36:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:36:20.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:36:20.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:36:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:36:20.481 [DEBUG] [Thread-193055] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:36:28.108 [DEBUG] [Thread-193057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:36:43.170 [DEBUG] [Thread-193058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:36:48.092 [DEBUG] [Thread-193059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:36:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:36:50.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:36:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:36:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 36, 43), 6.45555, 65.2907, 0.0, 12.8455, 15.2245, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:36:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:36:43
2026-04-12T17:36:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:36:52.486 [DEBUG] [Thread-193060] [transport.py] [_log()] starting thread (client mode): 0xae5f38b0
2026-04-12T17:36:52.486 [DEBUG] [Thread-193060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:36:52.505 [DEBUG] [Thread-193060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:36:52.505 [INFO] [Thread-193060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:36:52.508 [DEBUG] [Thread-193060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:36:52.508 [DEBUG] [Thread-193060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:36:52.508 [DEBUG] [Thread-193060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:36:52.508 [DEBUG] [Thread-193060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] client lang: <none>
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] server lang: <none>
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] kex follows: False
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] Compression: none
2026-04-12T17:36:52.509 [DEBUG] [Thread-193060] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:36:52.530 [DEBUG] [Thread-193060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:36:52.530 [DEBUG] [Thread-193060] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:36:52.531 [DEBUG] [Thread-193060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:36:52.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:36:52.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:36:52.533 [DEBUG] [Thread-193060] [transport.py] [_log()] userauth is OK
2026-04-12T17:36:52.533 [DEBUG] [Thread-193060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:36:52.533 [DEBUG] [Thread-193060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:36:52.533 [DEBUG] [Thread-193060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:36:52.533 [DEBUG] [Thread-193060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:36:52.552 [INFO] [Thread-193060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:36:52.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:36:53.169 [DEBUG] [Thread-193060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:36:53.169 [DEBUG] [Thread-193060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:36:53.170 [DEBUG] [Thread-193060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:36:53.210 [DEBUG] [Thread-193060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:36:53.210 [DEBUG] [Thread-193060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:36:53.213 [DEBUG] [Thread-193060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:36:53.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:36:53.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:36:53.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:36:53.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:36:53.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:36:53.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:36:53.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:36:53.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:36:53.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:36:53.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.650452 -999.00  +14.80  16.09     70   +9.40 1 2 1 1 1   887    0 6.90 69.49 ----- 16.1 16.1 258.0 17.7 17.3 -24.1 17.1 -22.6 17.7 -20.8 18.2 -23.7
2026-04-12T17:36:53.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:36:53.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:36:53.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.650452
2026-04-12T17:36:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:36:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:36:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:36:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:36:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:36:53.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:36:43', tmtdew=6.45555, humidity=65.2907, cloud=0.0, wind=12.8455, temperature=15.2245, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:36:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:36:53.242 [DEBUG] [Thread-193060] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:36:53.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:36:53.335 [DEBUG] [Thread-193063] [transport.py] [_log()] starting thread (client mode): 0xae5f1660
2026-04-12T17:36:53.336 [DEBUG] [Thread-193063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:36:53.351 [DEBUG] [Thread-193063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:36:53.352 [INFO] [Thread-193063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:36:53.359 [DEBUG] [Thread-193063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:36:53.359 [DEBUG] [Thread-193063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:36:53.359 [DEBUG] [Thread-193063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:36:53.359 [DEBUG] [Thread-193063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:53.359 [DEBUG] [Thread-193063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:36:53.359 [DEBUG] [Thread-193063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] client lang: <none>
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] server lang: <none>
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] kex follows: False
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:36:53.360 [DEBUG] [Thread-193063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:36:53.361 [DEBUG] [Thread-193063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:36:53.361 [DEBUG] [Thread-193063] [transport.py] [_log()] Compression: none
2026-04-12T17:36:53.361 [DEBUG] [Thread-193063] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:36:53.419 [DEBUG] [Thread-193063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:36:53.420 [DEBUG] [Thread-193063] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:36:53.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:36:53.422 [DEBUG] [Thread-193063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:36:53.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:36:53.478 [DEBUG] [Thread-193063] [transport.py] [_log()] userauth is OK
2026-04-12T17:36:53.479 [DEBUG] [Thread-193063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:36:53.479 [DEBUG] [Thread-193063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:36:53.479 [DEBUG] [Thread-193063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:36:53.479 [DEBUG] [Thread-193063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:36:53.499 [INFO] [Thread-193063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:36:53.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:36:53.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:36:54.324 [DEBUG] [Thread-193063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:36:54.324 [DEBUG] [Thread-193063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:36:54.377 [DEBUG] [Thread-193063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:36:54.377 [DEBUG] [Thread-193063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:36:54.391 [DEBUG] [Thread-193063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:36:54.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:36:54.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:36:54.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:36:54.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:36:54.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:36:54.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:36:54.436 [DEBUG] [Thread-193063] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:36:58.208 [DEBUG] [Thread-193065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:36:59.266 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:36:59.267 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:13.262 [DEBUG] [Thread-193066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:24.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:37:24.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:37:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:37:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 36, 43), 6.45555, 65.2907, 0.0, 12.8455, 15.2245, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:37:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:36:43
2026-04-12T17:37:26.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:37:26.294 [DEBUG] [Thread-193067] [transport.py] [_log()] starting thread (client mode): 0xae5f0940
2026-04-12T17:37:26.295 [DEBUG] [Thread-193067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:37:26.310 [DEBUG] [Thread-193067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:37:26.310 [INFO] [Thread-193067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:37:26.313 [DEBUG] [Thread-193067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:37:26.313 [DEBUG] [Thread-193067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:37:26.313 [DEBUG] [Thread-193067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:37:26.313 [DEBUG] [Thread-193067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] client lang: <none>
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] server lang: <none>
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] kex follows: False
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:37:26.314 [DEBUG] [Thread-193067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:37:26.315 [DEBUG] [Thread-193067] [transport.py] [_log()] Compression: none
2026-04-12T17:37:26.315 [DEBUG] [Thread-193067] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:37:26.332 [DEBUG] [Thread-193067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:37:26.333 [DEBUG] [Thread-193067] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:37:26.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:37:26.334 [DEBUG] [Thread-193067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:37:26.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:37:26.336 [DEBUG] [Thread-193067] [transport.py] [_log()] userauth is OK
2026-04-12T17:37:26.336 [DEBUG] [Thread-193067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:37:26.336 [DEBUG] [Thread-193067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:37:26.337 [DEBUG] [Thread-193067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:37:26.337 [DEBUG] [Thread-193067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:37:26.361 [INFO] [Thread-193067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:37:26.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:37:26.959 [DEBUG] [Thread-193067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:37:26.959 [DEBUG] [Thread-193067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:37:26.960 [DEBUG] [Thread-193067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:37:27.000 [DEBUG] [Thread-193067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:37:27.001 [DEBUG] [Thread-193067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:37:27.004 [DEBUG] [Thread-193067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:37:27.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:37:27.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:37:27.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:37:27.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:37:27.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:37:27.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:37:27.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:37:27.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:37:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:37:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.650799 -999.00  +14.70  12.59     70   +9.40 1 2 1 1 1   887    0 6.83 65.67 ----- 12.6 12.6 261.4 20.4 17.3 -24.2 17.1 -22.9 17.7 -20.9 18.2 -23.4
2026-04-12T17:37:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:37:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:37:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.650799
2026-04-12T17:37:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:37:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:37:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:37:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:37:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:37:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:36:43', tmtdew=6.45555, humidity=65.2907, cloud=0.0, wind=12.8455, temperature=15.2245, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:37:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:37:27.025 [DEBUG] [Thread-193067] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:37:27.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:37:27.118 [DEBUG] [Thread-193070] [transport.py] [_log()] starting thread (client mode): 0xae5b79a0
2026-04-12T17:37:27.118 [DEBUG] [Thread-193070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:37:27.132 [DEBUG] [Thread-193070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:37:27.132 [INFO] [Thread-193070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] client lang: <none>
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] server lang: <none>
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] kex follows: False
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] Compression: none
2026-04-12T17:37:27.140 [DEBUG] [Thread-193070] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:37:27.199 [DEBUG] [Thread-193070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:37:27.199 [DEBUG] [Thread-193070] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:37:27.200 [DEBUG] [Thread-193070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:37:27.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:37:27.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:37:27.254 [DEBUG] [Thread-193070] [transport.py] [_log()] userauth is OK
2026-04-12T17:37:27.255 [DEBUG] [Thread-193070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:37:27.255 [DEBUG] [Thread-193070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:37:27.255 [DEBUG] [Thread-193070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:37:27.255 [DEBUG] [Thread-193070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:37:27.273 [INFO] [Thread-193070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:37:27.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:37:27.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:37:28.096 [DEBUG] [Thread-193070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:37:28.096 [DEBUG] [Thread-193070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:37:28.143 [DEBUG] [Thread-193070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:37:28.144 [DEBUG] [Thread-193070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:37:28.152 [DEBUG] [Thread-193070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:37:28.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:37:28.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:37:28.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:37:28.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:37:28.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:37:28.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:37:28.187 [DEBUG] [Thread-193070] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:37:28.302 [DEBUG] [Thread-193072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:43.354 [DEBUG] [Thread-193073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:48.153 [DEBUG] [Thread-193074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:37:58.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:37:58.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:37:58.385 [DEBUG] [Thread-193075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:59.408 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:59.409 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:37:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 37, 19), 6.56326, 64.9963, 0.0, 16.4106, 14.8454, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:37:59.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:37:19
2026-04-12T17:37:59.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:38:00.097 [DEBUG] [Thread-193076] [transport.py] [_log()] starting thread (client mode): 0xae5b44c0
2026-04-12T17:38:00.097 [DEBUG] [Thread-193076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:38:00.111 [DEBUG] [Thread-193076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:38:00.112 [INFO] [Thread-193076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:38:00.114 [DEBUG] [Thread-193076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:38:00.114 [DEBUG] [Thread-193076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:38:00.114 [DEBUG] [Thread-193076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:38:00.114 [DEBUG] [Thread-193076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:00.114 [DEBUG] [Thread-193076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] client lang: <none>
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] server lang: <none>
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] kex follows: False
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] Compression: none
2026-04-12T17:38:00.115 [DEBUG] [Thread-193076] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:38:00.131 [DEBUG] [Thread-193076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:38:00.131 [DEBUG] [Thread-193076] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:38:00.131 [DEBUG] [Thread-193076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:38:00.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:38:00.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:38:00.132 [DEBUG] [Thread-193076] [transport.py] [_log()] userauth is OK
2026-04-12T17:38:00.132 [DEBUG] [Thread-193076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:38:00.132 [DEBUG] [Thread-193076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:38:00.132 [DEBUG] [Thread-193076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:38:00.132 [DEBUG] [Thread-193076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:38:00.142 [INFO] [Thread-193076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:38:00.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:38:00.722 [DEBUG] [Thread-193076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:38:00.722 [DEBUG] [Thread-193076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:38:00.722 [DEBUG] [Thread-193076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:38:00.763 [DEBUG] [Thread-193076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:38:00.763 [DEBUG] [Thread-193076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:38:00.765 [DEBUG] [Thread-193076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:38:00.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:38:00.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:38:00.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:38:00.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:38:00.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:38:00.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:38:00.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:38:00.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:38:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:38:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.651152 -999.00  +14.70  14.21     70   +9.30 1 2 1 1 1   887    0 7.01 68.16 ----- 14.2 14.2 267.3 19.0 17.3 -24.7 17.1 -23.0 17.6 -21.1 18.1 -23.3
2026-04-12T17:38:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:38:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:38:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.651152
2026-04-12T17:38:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:38:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:38:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:38:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:38:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:38:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:37:19', tmtdew=6.56326, humidity=64.9963, cloud=0.0, wind=16.4106, temperature=14.8454, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:37:39.533', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:38:00.784 [DEBUG] [Thread-193076] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:38:00.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:38:00.877 [DEBUG] [Thread-193079] [transport.py] [_log()] starting thread (client mode): 0xae5b4880
2026-04-12T17:38:00.877 [DEBUG] [Thread-193079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:38:00.892 [DEBUG] [Thread-193079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:38:00.892 [INFO] [Thread-193079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:38:00.899 [DEBUG] [Thread-193079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] client lang: <none>
2026-04-12T17:38:00.900 [DEBUG] [Thread-193079] [transport.py] [_log()] server lang: <none>
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] kex follows: False
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] Compression: none
2026-04-12T17:38:00.901 [DEBUG] [Thread-193079] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:38:00.957 [DEBUG] [Thread-193079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:38:00.958 [DEBUG] [Thread-193079] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:38:00.958 [DEBUG] [Thread-193079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:38:00.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:38:00.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:38:01.014 [DEBUG] [Thread-193079] [transport.py] [_log()] userauth is OK
2026-04-12T17:38:01.014 [DEBUG] [Thread-193079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:38:01.014 [DEBUG] [Thread-193079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:38:01.015 [DEBUG] [Thread-193079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:38:01.015 [DEBUG] [Thread-193079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:38:01.033 [INFO] [Thread-193079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:38:01.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:38:01.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:38:01.836 [DEBUG] [Thread-193079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:38:01.837 [DEBUG] [Thread-193079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:38:01.885 [DEBUG] [Thread-193079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:38:01.885 [DEBUG] [Thread-193079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:38:01.895 [DEBUG] [Thread-193079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:38:01.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:38:01.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:38:01.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:38:01.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:38:01.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:38:01.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:38:01.932 [DEBUG] [Thread-193079] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:38:13.421 [DEBUG] [Thread-193081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:38:28.471 [DEBUG] [Thread-193082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:38:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:38:31.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:38:31.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:38:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 37, 54), 6.39129, 65.5891, 0.0, 13.1278, 15.2908, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:38:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:37:54
2026-04-12T17:38:33.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:38:33.842 [DEBUG] [Thread-193083] [transport.py] [_log()] starting thread (client mode): 0xae5f24d0
2026-04-12T17:38:33.842 [DEBUG] [Thread-193083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:38:33.863 [DEBUG] [Thread-193083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:38:33.863 [INFO] [Thread-193083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:38:33.865 [DEBUG] [Thread-193083] [transport.py] [_log()] client lang: <none>
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] server lang: <none>
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] kex follows: False
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] Compression: none
2026-04-12T17:38:33.866 [DEBUG] [Thread-193083] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:38:33.877 [DEBUG] [Thread-193083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:38:33.877 [DEBUG] [Thread-193083] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:38:33.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:38:33.879 [DEBUG] [Thread-193083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:38:33.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:38:33.881 [DEBUG] [Thread-193083] [transport.py] [_log()] userauth is OK
2026-04-12T17:38:33.881 [DEBUG] [Thread-193083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:38:33.881 [DEBUG] [Thread-193083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:38:33.881 [DEBUG] [Thread-193083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:38:33.881 [DEBUG] [Thread-193083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:38:33.902 [INFO] [Thread-193083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:38:33.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:38:34.526 [DEBUG] [Thread-193083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:38:34.526 [DEBUG] [Thread-193083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:38:34.527 [DEBUG] [Thread-193083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:38:34.567 [DEBUG] [Thread-193083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:38:34.567 [DEBUG] [Thread-193083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:38:34.570 [DEBUG] [Thread-193083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:38:34.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:38:34.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:38:34.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:38:34.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:38:34.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:38:34.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:38:34.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:38:34.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:38:34.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:38:34.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.651493 -999.00  +14.60   9.44     70   +9.30 1 2 1 1 1   887    0 6.94 69.30 ----- 9.4 9.4 263.8 16.9 17.3 -24.6 17.1 -22.9 17.6 -20.9 18.1 -23.3
2026-04-12T17:38:34.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:38:34.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:38:34.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.651493
2026-04-12T17:38:34.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:38:34.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:38:34.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:38:34.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:38:34.594 [DEBUG] [Thread-193083] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:38:34.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:38:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:37:54', tmtdew=6.39129, humidity=65.5891, cloud=0.0, wind=13.1278, temperature=15.2908, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:38:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:38:34.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:38:34.687 [DEBUG] [Thread-193086] [transport.py] [_log()] starting thread (client mode): 0xb0fce1d0
2026-04-12T17:38:34.687 [DEBUG] [Thread-193086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:38:34.703 [DEBUG] [Thread-193086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:38:34.703 [INFO] [Thread-193086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:38:34.710 [DEBUG] [Thread-193086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] client lang: <none>
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] server lang: <none>
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] kex follows: False
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] Compression: none
2026-04-12T17:38:34.711 [DEBUG] [Thread-193086] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:38:34.770 [DEBUG] [Thread-193086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:38:34.771 [DEBUG] [Thread-193086] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:38:34.781 [DEBUG] [Thread-193086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:38:34.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:38:34.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:38:34.829 [DEBUG] [Thread-193086] [transport.py] [_log()] userauth is OK
2026-04-12T17:38:34.829 [DEBUG] [Thread-193086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:38:34.830 [DEBUG] [Thread-193086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:38:34.830 [DEBUG] [Thread-193086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:38:34.830 [DEBUG] [Thread-193086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:38:34.852 [INFO] [Thread-193086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:38:34.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:38:34.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:38:35.742 [DEBUG] [Thread-193086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:38:35.742 [DEBUG] [Thread-193086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:38:35.790 [DEBUG] [Thread-193086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:38:35.790 [DEBUG] [Thread-193086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:38:35.800 [DEBUG] [Thread-193086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:38:35.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:38:35.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:38:35.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:38:35.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:38:35.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:38:35.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:38:35.838 [DEBUG] [Thread-193086] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:38:43.508 [DEBUG] [Thread-193088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:38:48.204 [DEBUG] [Thread-193089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:38:58.569 [DEBUG] [Thread-193090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:38:59.551 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:38:59.552 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:39:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:39:05.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17: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
2026-04-12T17:39:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 38, 30), 6.49644, 64.7946, 0.0, 16.4452, 14.812, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:39:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:38:30
2026-04-12T17:39:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:39:07.762 [DEBUG] [Thread-193091] [transport.py] [_log()] starting thread (client mode): 0xae5b5630
2026-04-12T17:39:07.762 [DEBUG] [Thread-193091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:39:07.781 [DEBUG] [Thread-193091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:39:07.781 [INFO] [Thread-193091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:39:07.784 [DEBUG] [Thread-193091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:39:07.784 [DEBUG] [Thread-193091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:39:07.784 [DEBUG] [Thread-193091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:39:07.784 [DEBUG] [Thread-193091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:07.784 [DEBUG] [Thread-193091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] client lang: <none>
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] server lang: <none>
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] kex follows: False
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] Compression: none
2026-04-12T17:39:07.785 [DEBUG] [Thread-193091] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:39:07.799 [DEBUG] [Thread-193091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:39:07.799 [DEBUG] [Thread-193091] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:39:07.799 [DEBUG] [Thread-193091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:39:07.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:39:07.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:39:07.800 [DEBUG] [Thread-193091] [transport.py] [_log()] userauth is OK
2026-04-12T17:39:07.800 [DEBUG] [Thread-193091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:39:07.800 [DEBUG] [Thread-193091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:39:07.800 [DEBUG] [Thread-193091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:39:07.800 [DEBUG] [Thread-193091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:39:07.813 [INFO] [Thread-193091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:39:07.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:39:08.412 [DEBUG] [Thread-193091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:39:08.412 [DEBUG] [Thread-193091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:39:08.412 [DEBUG] [Thread-193091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:39:08.453 [DEBUG] [Thread-193091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:39:08.453 [DEBUG] [Thread-193091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:39:08.457 [DEBUG] [Thread-193091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:39:08.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:39:08.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:39:08.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:39:08.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:39:08.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:39:08.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:39:08.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:39:08.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:39:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.651841 -999.00  +14.70   9.30     71   +9.50 1 2 1 1 1   887    0 7.12 71.83 ----- 9.3 9.3 260.9 12.5 17.3 -24.3 17.1 -22.6 17.6 -20.8 18.1 -23.6
2026-04-12T17:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.651841
2026-04-12T17:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:39:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:39:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:39:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:39:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:39:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:38:30', tmtdew=6.49644, humidity=64.7946, cloud=0.0, wind=16.4452, temperature=14.812, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:38:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:39:08.484 [DEBUG] [Thread-193091] [transport.py] [_log()] EOF in transport thread
2026-04-12T17: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
2026-04-12T17:39:08.580 [DEBUG] [Thread-193094] [transport.py] [_log()] starting thread (client mode): 0xae50a770
2026-04-12T17:39:08.580 [DEBUG] [Thread-193094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:39:08.594 [DEBUG] [Thread-193094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:39:08.594 [INFO] [Thread-193094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:39:08.602 [DEBUG] [Thread-193094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:39:08.602 [DEBUG] [Thread-193094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:39:08.602 [DEBUG] [Thread-193094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:39:08.602 [DEBUG] [Thread-193094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] client lang: <none>
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] server lang: <none>
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] kex follows: False
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:39:08.603 [DEBUG] [Thread-193094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:39:08.604 [DEBUG] [Thread-193094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:39:08.604 [DEBUG] [Thread-193094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:39:08.604 [DEBUG] [Thread-193094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:39:08.604 [DEBUG] [Thread-193094] [transport.py] [_log()] Compression: none
2026-04-12T17:39:08.604 [DEBUG] [Thread-193094] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:39:08.663 [DEBUG] [Thread-193094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:39:08.664 [DEBUG] [Thread-193094] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:39:08.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:39:08.666 [DEBUG] [Thread-193094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:39:08.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:39:08.722 [DEBUG] [Thread-193094] [transport.py] [_log()] userauth is OK
2026-04-12T17:39:08.723 [DEBUG] [Thread-193094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:39:08.723 [DEBUG] [Thread-193094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:39:08.723 [DEBUG] [Thread-193094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:39:08.723 [DEBUG] [Thread-193094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:39:08.741 [INFO] [Thread-193094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:39:08.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:39:08.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:39:09.613 [DEBUG] [Thread-193094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:39:09.613 [DEBUG] [Thread-193094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:39:09.661 [DEBUG] [Thread-193094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:39:09.661 [DEBUG] [Thread-193094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:39:09.671 [DEBUG] [Thread-193094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:39:09.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:39:09.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:39:09.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:39:09.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:39:09.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:39:09.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:39:09.708 [DEBUG] [Thread-193094] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:39:13.605 [DEBUG] [Thread-193096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:39:28.650 [DEBUG] [Thread-193097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:39:39.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:39:39.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:39:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:39:40.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 39, 5), 6.59727, 64.3472, 0.0, 14.9458, 14.7955, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:39:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:39:05
2026-04-12T17:39:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:39:41.535 [DEBUG] [Thread-193098] [transport.py] [_log()] starting thread (client mode): 0xa793a500
2026-04-12T17:39:41.536 [DEBUG] [Thread-193098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:39:41.556 [DEBUG] [Thread-193098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:39:41.556 [INFO] [Thread-193098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] client lang: <none>
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] server lang: <none>
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] kex follows: False
2026-04-12T17:39:41.559 [DEBUG] [Thread-193098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:39:41.560 [DEBUG] [Thread-193098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:39:41.560 [DEBUG] [Thread-193098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:39:41.560 [DEBUG] [Thread-193098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:39:41.560 [DEBUG] [Thread-193098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:39:41.560 [DEBUG] [Thread-193098] [transport.py] [_log()] Compression: none
2026-04-12T17:39:41.560 [DEBUG] [Thread-193098] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:39:41.577 [DEBUG] [Thread-193098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:39:41.577 [DEBUG] [Thread-193098] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:39:41.577 [DEBUG] [Thread-193098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:39:41.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:39:41.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:39:41.579 [DEBUG] [Thread-193098] [transport.py] [_log()] userauth is OK
2026-04-12T17:39:41.579 [DEBUG] [Thread-193098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:39:41.580 [DEBUG] [Thread-193098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:39:41.580 [DEBUG] [Thread-193098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:39:41.580 [DEBUG] [Thread-193098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:39:41.615 [INFO] [Thread-193098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:39:41.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:39:42.250 [DEBUG] [Thread-193098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:39:42.250 [DEBUG] [Thread-193098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:39:42.251 [DEBUG] [Thread-193098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:39:42.291 [DEBUG] [Thread-193098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:39:42.291 [DEBUG] [Thread-193098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:39:42.295 [DEBUG] [Thread-193098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:39:42.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:39:42.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:39:42.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:39:42.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:39:42.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:39:42.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:39:42.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:39:42.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:39:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:39:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.652188 -999.00  +14.60  15.26     71   +9.50 1 2 1 1 1   887    0 7.13 70.98 ----- 15.3 15.3 247.5 21.5 17.3 -24.2 17.1 -22.9 17.6 -20.8 18.1 -23.9
2026-04-12T17:39:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:39:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:39:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.652188
2026-04-12T17:39:42.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:39:42.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:39:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:39:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:39:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:39:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:39:05', tmtdew=6.59727, humidity=64.3472, cloud=0.0, wind=14.9458, temperature=14.7955, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:39:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:39:42.324 [DEBUG] [Thread-193098] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:39:42.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:39:42.417 [DEBUG] [Thread-193101] [transport.py] [_log()] starting thread (client mode): 0xae5b5b40
2026-04-12T17:39:42.417 [DEBUG] [Thread-193101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:39:42.432 [DEBUG] [Thread-193101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:39:42.432 [INFO] [Thread-193101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] client lang: <none>
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] server lang: <none>
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] kex follows: False
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:39:42.440 [DEBUG] [Thread-193101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:39:42.441 [DEBUG] [Thread-193101] [transport.py] [_log()] Compression: none
2026-04-12T17:39:42.441 [DEBUG] [Thread-193101] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:39:42.498 [DEBUG] [Thread-193101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:39:42.499 [DEBUG] [Thread-193101] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:39:42.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:39:42.500 [DEBUG] [Thread-193101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:39:42.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:39:42.554 [DEBUG] [Thread-193101] [transport.py] [_log()] userauth is OK
2026-04-12T17:39:42.555 [DEBUG] [Thread-193101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:39:42.555 [DEBUG] [Thread-193101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:39:42.555 [DEBUG] [Thread-193101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:39:42.555 [DEBUG] [Thread-193101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:39:42.573 [INFO] [Thread-193101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:39:42.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:39:42.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:39:43.388 [DEBUG] [Thread-193101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:39:43.388 [DEBUG] [Thread-193101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:39:43.436 [DEBUG] [Thread-193101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:39:43.436 [DEBUG] [Thread-193101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:39:43.445 [DEBUG] [Thread-193101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:39:43.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:39: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')
2026-04-12T17:39:43.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:39:43.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:39:43.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:39:43.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:39:43.483 [DEBUG] [Thread-193101] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:39:43.688 [DEBUG] [Thread-193103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:39:48.245 [DEBUG] [Thread-193104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:39:58.742 [DEBUG] [Thread-193105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:39:59.694 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:39:59.694 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:40:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:40:13.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:40:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:40:13.782 [DEBUG] [Thread-193106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:40:14.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 39, 41), 6.59714, 64.6612, 0.0, 16.5146, 15.1915, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:40:14.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:39:41
2026-04-12T17:40:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:40:15.301 [DEBUG] [Thread-193107] [transport.py] [_log()] starting thread (client mode): 0xae5f3be0
2026-04-12T17:40:15.301 [DEBUG] [Thread-193107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:40:15.322 [DEBUG] [Thread-193107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:40:15.322 [INFO] [Thread-193107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] client lang: <none>
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] server lang: <none>
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] kex follows: False
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:40:15.325 [DEBUG] [Thread-193107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:40:15.326 [DEBUG] [Thread-193107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:40:15.326 [DEBUG] [Thread-193107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:40:15.326 [DEBUG] [Thread-193107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:40:15.326 [DEBUG] [Thread-193107] [transport.py] [_log()] Compression: none
2026-04-12T17:40:15.326 [DEBUG] [Thread-193107] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:40:15.343 [DEBUG] [Thread-193107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:40:15.343 [DEBUG] [Thread-193107] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:40:15.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:40:15.344 [DEBUG] [Thread-193107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:40:15.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:40:15.346 [DEBUG] [Thread-193107] [transport.py] [_log()] userauth is OK
2026-04-12T17:40:15.346 [DEBUG] [Thread-193107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:40:15.347 [DEBUG] [Thread-193107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:40:15.347 [DEBUG] [Thread-193107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:40:15.347 [DEBUG] [Thread-193107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:40:15.372 [INFO] [Thread-193107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:40:15.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:40:19.941 [DEBUG] [Thread-193107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:40:19.942 [DEBUG] [Thread-193107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:40:19.942 [DEBUG] [Thread-193107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:40:19.983 [DEBUG] [Thread-193107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:40:19.983 [DEBUG] [Thread-193107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:40:19.986 [DEBUG] [Thread-193107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:40:20.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:40:20.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:40:20.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:40:20.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:40:20.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:40:20.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:40:20.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:40:20.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:40:20.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:40:20.137 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T17:40:20.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:39:41', tmtdew=6.59714, humidity=64.6612, cloud=0.0, wind=16.5146, temperature=15.1915, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:40:20.138 [DEBUG] [Thread-193107] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:40:20.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:40:20.235 [DEBUG] [Thread-193110] [transport.py] [_log()] starting thread (client mode): 0xae5354b0
2026-04-12T17:40:20.235 [DEBUG] [Thread-193110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:40:20.249 [DEBUG] [Thread-193110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:40:20.249 [INFO] [Thread-193110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] client lang: <none>
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] server lang: <none>
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] kex follows: False
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:40:20.257 [DEBUG] [Thread-193110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:40:20.258 [DEBUG] [Thread-193110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:40:20.258 [DEBUG] [Thread-193110] [transport.py] [_log()] Compression: none
2026-04-12T17:40:20.258 [DEBUG] [Thread-193110] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:40:20.315 [DEBUG] [Thread-193110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:40:20.315 [DEBUG] [Thread-193110] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:40:20.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:40:20.316 [DEBUG] [Thread-193110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:40:20.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:40:20.374 [DEBUG] [Thread-193110] [transport.py] [_log()] userauth is OK
2026-04-12T17:40:20.374 [DEBUG] [Thread-193110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:40:20.375 [DEBUG] [Thread-193110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:40:20.375 [DEBUG] [Thread-193110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:40:20.375 [DEBUG] [Thread-193110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:40:20.393 [INFO] [Thread-193110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:40:20.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:40:20.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:40:21.193 [DEBUG] [Thread-193110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:40:21.193 [DEBUG] [Thread-193110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:40:21.241 [DEBUG] [Thread-193110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:40:21.242 [DEBUG] [Thread-193110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:40:21.251 [DEBUG] [Thread-193110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:40:21.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:40:21.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:40:21.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:40:21.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:40:21.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:40:21.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:40:21.287 [DEBUG] [Thread-193110] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:40:28.821 [DEBUG] [Thread-193112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:40:43.883 [DEBUG] [Thread-193113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:40:48.282 [DEBUG] [Thread-193114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:40:51.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:40:51.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:40:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:40:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 40, 17), 6.27749, 65.8609, 0.0, 12.1226, 14.7792, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:40:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:40:17
2026-04-12T17:40:52.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:40:53.097 [DEBUG] [Thread-193115] [transport.py] [_log()] starting thread (client mode): 0xae509360
2026-04-12T17:40:53.097 [DEBUG] [Thread-193115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:40:53.115 [DEBUG] [Thread-193115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:40:53.115 [INFO] [Thread-193115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:40:53.117 [DEBUG] [Thread-193115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:40:53.117 [DEBUG] [Thread-193115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:40:53.117 [DEBUG] [Thread-193115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:40:53.117 [DEBUG] [Thread-193115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:53.117 [DEBUG] [Thread-193115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:53.117 [DEBUG] [Thread-193115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:53.117 [DEBUG] [Thread-193115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] client lang: <none>
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] server lang: <none>
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] kex follows: False
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] Compression: none
2026-04-12T17:40:53.118 [DEBUG] [Thread-193115] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:40:53.131 [DEBUG] [Thread-193115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:40:53.132 [DEBUG] [Thread-193115] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:40:53.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:40:53.133 [DEBUG] [Thread-193115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:40:53.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:40:53.135 [DEBUG] [Thread-193115] [transport.py] [_log()] userauth is OK
2026-04-12T17:40:53.135 [DEBUG] [Thread-193115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:40:53.136 [DEBUG] [Thread-193115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:40:53.136 [DEBUG] [Thread-193115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:40:53.136 [DEBUG] [Thread-193115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:40:53.155 [INFO] [Thread-193115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:40:53.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:40:53.776 [DEBUG] [Thread-193115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:40:53.776 [DEBUG] [Thread-193115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:40:53.776 [DEBUG] [Thread-193115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:40:53.817 [DEBUG] [Thread-193115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:40:53.817 [DEBUG] [Thread-193115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:40:53.819 [DEBUG] [Thread-193115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:40:53.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:40:53.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:40:53.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:40:53.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:40:53.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:40:53.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:40:53.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:40:53.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:40:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:40:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.653229 -999.00  +14.60  18.78     71   +9.60 1 2 1 1 1   887    0 6.75 60.46 ----- 18.8 18.8 266.4 22.4 17.3 -24.4 17.1 -22.8 17.4 -20.7 18.0 -23.7
2026-04-12T17:40:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:40:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:40:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.653229
2026-04-12T17:40:53.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:40:53.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:40:53.844 [DEBUG] [Thread-193115] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:40:53.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:40:53.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:40:53.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:40:53.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:40:17', tmtdew=6.27749, humidity=65.8609, cloud=0.0, wind=12.1226, temperature=14.7792, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:40:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:40:53.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:40:53.938 [DEBUG] [Thread-193118] [transport.py] [_log()] starting thread (client mode): 0xae5f31c0
2026-04-12T17:40:53.938 [DEBUG] [Thread-193118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:40:53.952 [DEBUG] [Thread-193118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:40:53.952 [INFO] [Thread-193118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] client lang: <none>
2026-04-12T17:40:53.960 [DEBUG] [Thread-193118] [transport.py] [_log()] server lang: <none>
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] kex follows: False
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] Compression: none
2026-04-12T17:40:53.961 [DEBUG] [Thread-193118] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:40:54.018 [DEBUG] [Thread-193118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:40:54.019 [DEBUG] [Thread-193118] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:40:54.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:40:54.020 [DEBUG] [Thread-193118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:40:54.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:40:54.074 [DEBUG] [Thread-193118] [transport.py] [_log()] userauth is OK
2026-04-12T17:40:54.074 [DEBUG] [Thread-193118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:40:54.074 [DEBUG] [Thread-193118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:40:54.075 [DEBUG] [Thread-193118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:40:54.075 [DEBUG] [Thread-193118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:40:54.093 [INFO] [Thread-193118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:40:54.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:40:54.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:40:54.895 [DEBUG] [Thread-193118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:40:54.896 [DEBUG] [Thread-193118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:40:54.943 [DEBUG] [Thread-193118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:40:54.944 [DEBUG] [Thread-193118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:40:54.953 [DEBUG] [Thread-193118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:40:54.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:40:54.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:40: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
2026-04-12T17:40:54.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:40:54.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:40:54.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:40:54.995 [DEBUG] [Thread-193118] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:40:58.920 [DEBUG] [Thread-193120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:40:59.834 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:40:59.835 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:41:13.978 [DEBUG] [Thread-193121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:41:25.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:41:25.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:41:25.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:41:26.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 40, 52), 6.13293, 66.7493, 0.0, 14.2214, 15.3242, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:41:26.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:40:52
2026-04-12T17:41:26.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:41:26.826 [DEBUG] [Thread-193122] [transport.py] [_log()] starting thread (client mode): 0xae509c90
2026-04-12T17:41:26.826 [DEBUG] [Thread-193122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:41:26.846 [DEBUG] [Thread-193122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:41:26.847 [INFO] [Thread-193122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] client lang: <none>
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] server lang: <none>
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] kex follows: False
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] Compression: none
2026-04-12T17:41:26.850 [DEBUG] [Thread-193122] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:41:26.858 [DEBUG] [Thread-193122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:41:26.859 [DEBUG] [Thread-193122] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:41:26.859 [DEBUG] [Thread-193122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:41:26.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:41:26.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:41:26.861 [DEBUG] [Thread-193122] [transport.py] [_log()] userauth is OK
2026-04-12T17:41:26.861 [DEBUG] [Thread-193122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:41:26.861 [DEBUG] [Thread-193122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:41:26.861 [DEBUG] [Thread-193122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:41:26.861 [DEBUG] [Thread-193122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:41:26.886 [INFO] [Thread-193122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:41:26.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:41:27.503 [DEBUG] [Thread-193122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:41:27.503 [DEBUG] [Thread-193122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:41:27.504 [DEBUG] [Thread-193122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:41:27.544 [DEBUG] [Thread-193122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:41:27.544 [DEBUG] [Thread-193122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:41:27.548 [DEBUG] [Thread-193122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:41:27.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:41:27.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:41:27.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:41:27.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:41:27.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:41:27.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:41:27.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:41:27.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:41:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:41:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.653582 -999.00  +14.50  14.64     71   +9.30 1 2 1 1 1   887    0 6.64 53.87 ----- 14.6 14.6 280.8 23.6 17.2 -24.7 17.0 -23.3 17.4 -22.3 17.9 -23.1
2026-04-12T17:41:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:41:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:41:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.653582
2026-04-12T17:41:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:41:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:41:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:41:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:41:27.573 [DEBUG] [Thread-193122] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:41:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:41:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:40:52', tmtdew=6.13293, humidity=66.7493, cloud=0.0, wind=14.2214, temperature=15.3242, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:41:09.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:41:27.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:41:27.665 [DEBUG] [Thread-193125] [transport.py] [_log()] starting thread (client mode): 0xae537be0
2026-04-12T17:41:27.665 [DEBUG] [Thread-193125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:41:27.680 [DEBUG] [Thread-193125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:41:27.680 [INFO] [Thread-193125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] client lang: <none>
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] server lang: <none>
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] kex follows: False
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] Compression: none
2026-04-12T17:41:27.688 [DEBUG] [Thread-193125] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:41:27.746 [DEBUG] [Thread-193125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:41:27.747 [DEBUG] [Thread-193125] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:41:27.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:41:27.748 [DEBUG] [Thread-193125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:41:27.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:41:27.807 [DEBUG] [Thread-193125] [transport.py] [_log()] userauth is OK
2026-04-12T17:41:27.807 [DEBUG] [Thread-193125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:41:27.808 [DEBUG] [Thread-193125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:41:27.808 [DEBUG] [Thread-193125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:41:27.808 [DEBUG] [Thread-193125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:41:27.834 [INFO] [Thread-193125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:41:27.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:41:27.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:41:28.660 [DEBUG] [Thread-193125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:41:28.660 [DEBUG] [Thread-193125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:41:28.708 [DEBUG] [Thread-193125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:41:28.709 [DEBUG] [Thread-193125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:41:28.718 [DEBUG] [Thread-193125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:41:28.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:41:28.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:41:28.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:41:28.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:41:28.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:41:28.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:41:28.755 [DEBUG] [Thread-193125] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:41:29.019 [DEBUG] [Thread-193127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:41:44.074 [DEBUG] [Thread-193128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:41:48.315 [DEBUG] [Thread-193129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:41:58.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:41:58.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:41:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:41:59.113 [DEBUG] [Thread-193130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:41:59.975 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:41:59.977 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:42:00.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 41, 27), 6.24307, 66.2587, 0.0, 16.9744, 14.8287, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:42:00.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:41:27
2026-04-12T17:42:00.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:42:00.572 [DEBUG] [Thread-193131] [transport.py] [_log()] starting thread (client mode): 0xa793b910
2026-04-12T17:42:00.572 [DEBUG] [Thread-193131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:42:00.585 [DEBUG] [Thread-193131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:42:00.585 [INFO] [Thread-193131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] client lang: <none>
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] server lang: <none>
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] kex follows: False
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:42:00.588 [DEBUG] [Thread-193131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:42:00.589 [DEBUG] [Thread-193131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:42:00.589 [DEBUG] [Thread-193131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:42:00.589 [DEBUG] [Thread-193131] [transport.py] [_log()] Compression: none
2026-04-12T17:42:00.589 [DEBUG] [Thread-193131] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:42:00.605 [DEBUG] [Thread-193131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:42:00.606 [DEBUG] [Thread-193131] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:42:00.606 [DEBUG] [Thread-193131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:42:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:42:00.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:42:00.608 [DEBUG] [Thread-193131] [transport.py] [_log()] userauth is OK
2026-04-12T17:42:00.608 [DEBUG] [Thread-193131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:42:00.608 [DEBUG] [Thread-193131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:42:00.608 [DEBUG] [Thread-193131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:42:00.608 [DEBUG] [Thread-193131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:42:00.631 [INFO] [Thread-193131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:42:00.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:42:01.219 [DEBUG] [Thread-193131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:42:01.219 [DEBUG] [Thread-193131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:42:01.220 [DEBUG] [Thread-193131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:42:01.261 [DEBUG] [Thread-193131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:42:01.261 [DEBUG] [Thread-193131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:42:01.263 [DEBUG] [Thread-193131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:42:01.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:42:01.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:42:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:42:01.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:42:01.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:42:01.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:42:01.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:42:01.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:42:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:42:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.653924 -999.00  +14.50  17.34     71   +9.40 1 2 1 1 1   887    0 6.41 50.91 ----- 17.3 17.3 268.2 21.0 17.2 -24.4 17.0 -23.0 17.3 -21.2 17.9 -23.7
2026-04-12T17:42:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:42:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:42:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.653924
2026-04-12T17:42:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:42:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:42:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:42:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:42:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:42:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:41:27', tmtdew=6.24307, humidity=66.2587, cloud=0.0, wind=16.9744, temperature=14.8287, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:41:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:42:01.283 [DEBUG] [Thread-193131] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:42:01.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:42:01.384 [DEBUG] [Thread-193134] [transport.py] [_log()] starting thread (client mode): 0xae535e10
2026-04-12T17:42:01.384 [DEBUG] [Thread-193134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:42:01.398 [DEBUG] [Thread-193134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:42:01.398 [INFO] [Thread-193134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:42:01.406 [DEBUG] [Thread-193134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:42:01.406 [DEBUG] [Thread-193134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:42:01.406 [DEBUG] [Thread-193134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:42:01.406 [DEBUG] [Thread-193134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] client lang: <none>
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] server lang: <none>
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] kex follows: False
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] Compression: none
2026-04-12T17:42:01.407 [DEBUG] [Thread-193134] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:42:01.464 [DEBUG] [Thread-193134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:42:01.464 [DEBUG] [Thread-193134] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:42:01.464 [DEBUG] [Thread-193134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:42:01.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:42:01.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:42:01.521 [DEBUG] [Thread-193134] [transport.py] [_log()] userauth is OK
2026-04-12T17:42:01.521 [DEBUG] [Thread-193134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:42:01.521 [DEBUG] [Thread-193134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:42:01.521 [DEBUG] [Thread-193134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:42:01.521 [DEBUG] [Thread-193134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:42:01.543 [INFO] [Thread-193134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:42:01.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:42:01.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:42:02.427 [DEBUG] [Thread-193134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:42:02.428 [DEBUG] [Thread-193134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:42:02.476 [DEBUG] [Thread-193134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:42:02.476 [DEBUG] [Thread-193134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:42:02.485 [DEBUG] [Thread-193134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:42:02.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:42: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')
2026-04-12T17:42:02.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:42:02.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:42:02.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:42:02.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:42:02.521 [DEBUG] [Thread-193134] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:42:14.151 [DEBUG] [Thread-193136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:42:29.204 [DEBUG] [Thread-193137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:42:32.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:42:32.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:42:32.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:42:33.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 42, 3), 6.3144, 65.9438, 0.0, 16.5157, 14.8452, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:42:33.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:42:03
2026-04-12T17:42:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:42:34.307 [DEBUG] [Thread-193138] [transport.py] [_log()] starting thread (client mode): 0xb0f6c040
2026-04-12T17:42:34.307 [DEBUG] [Thread-193138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:42:34.324 [DEBUG] [Thread-193138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:42:34.324 [INFO] [Thread-193138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:42:34.325 [DEBUG] [Thread-193138] [transport.py] [_log()] client lang: <none>
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] server lang: <none>
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] kex follows: False
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] Compression: none
2026-04-12T17:42:34.326 [DEBUG] [Thread-193138] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:42:34.333 [DEBUG] [Thread-193138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:42:34.333 [DEBUG] [Thread-193138] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:42:34.333 [DEBUG] [Thread-193138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:42:34.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:42:34.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:42:34.334 [DEBUG] [Thread-193138] [transport.py] [_log()] userauth is OK
2026-04-12T17:42:34.334 [DEBUG] [Thread-193138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:42:34.334 [DEBUG] [Thread-193138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:42:34.334 [DEBUG] [Thread-193138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:42:34.334 [DEBUG] [Thread-193138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:42:34.343 [INFO] [Thread-193138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:42:34.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:42:34.896 [DEBUG] [Thread-193138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:42:34.896 [DEBUG] [Thread-193138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:42:34.896 [DEBUG] [Thread-193138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:42:34.937 [DEBUG] [Thread-193138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:42:34.937 [DEBUG] [Thread-193138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:42:34.942 [DEBUG] [Thread-193138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:42:34.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:42:34.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:42:34.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:42:34.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:42:34.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:42:34.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:42:34.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:42:34.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:42:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:42:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.654271 -999.00  +14.50  12.24     71   +9.40 1 2 1 1 1   887    0 6.69 50.54 ----- 12.2 12.2 261.6 14.9 17.2 -24.2 17.0 -22.7 17.4 -20.8 17.9 -23.7
2026-04-12T17:42:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:42:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:42:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.654271
2026-04-12T17:42:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:42:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:42:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:42:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:42:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:42:34.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:42:03', tmtdew=6.3144, humidity=65.9438, cloud=0.0, wind=16.5157, temperature=14.8452, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:42:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:42:34.965 [DEBUG] [Thread-193138] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:42:35.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:42:35.058 [DEBUG] [Thread-193141] [transport.py] [_log()] starting thread (client mode): 0xb0f6d300
2026-04-12T17:42:35.058 [DEBUG] [Thread-193141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:42:35.074 [DEBUG] [Thread-193141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:42:35.074 [INFO] [Thread-193141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] client lang: <none>
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] server lang: <none>
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] kex follows: False
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] Compression: none
2026-04-12T17:42:35.082 [DEBUG] [Thread-193141] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:42:35.140 [DEBUG] [Thread-193141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:42:35.140 [DEBUG] [Thread-193141] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:42:35.140 [DEBUG] [Thread-193141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:42:35.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:42:35.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:42:35.198 [DEBUG] [Thread-193141] [transport.py] [_log()] userauth is OK
2026-04-12T17:42:35.198 [DEBUG] [Thread-193141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:42:35.198 [DEBUG] [Thread-193141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:42:35.198 [DEBUG] [Thread-193141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:42:35.198 [DEBUG] [Thread-193141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:42:35.223 [INFO] [Thread-193141] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:42:35.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:42:35.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:42:36.019 [DEBUG] [Thread-193141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:42:36.019 [DEBUG] [Thread-193141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:42:36.071 [DEBUG] [Thread-193141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:42:36.071 [DEBUG] [Thread-193141] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:42:36.080 [DEBUG] [Thread-193141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:42:36.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:42:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:42:36.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:42:36.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:42:36.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:42:36.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:42:36.118 [DEBUG] [Thread-193141] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:42:44.240 [DEBUG] [Thread-193143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:42:48.345 [DEBUG] [Thread-193144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:42:59.284 [DEBUG] [Thread-193145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:43:00.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:43:00.119 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:43:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:43:06.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:43:06.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:43:07.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 42, 38), 6.53338, 64.9265, 0.0, 19.1606, 15.1253, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:43:07.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:42:38
2026-04-12T17:43:07.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:43:07.951 [DEBUG] [Thread-193146] [transport.py] [_log()] starting thread (client mode): 0xae5f0fa0
2026-04-12T17:43:07.951 [DEBUG] [Thread-193146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:43:07.968 [DEBUG] [Thread-193146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:43:07.968 [INFO] [Thread-193146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:43:07.970 [DEBUG] [Thread-193146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:43:07.970 [DEBUG] [Thread-193146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:43:07.970 [DEBUG] [Thread-193146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:43:07.970 [DEBUG] [Thread-193146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:07.970 [DEBUG] [Thread-193146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:07.970 [DEBUG] [Thread-193146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] client lang: <none>
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] server lang: <none>
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] kex follows: False
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:43:07.971 [DEBUG] [Thread-193146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:43:07.972 [DEBUG] [Thread-193146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:43:07.972 [DEBUG] [Thread-193146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:43:07.972 [DEBUG] [Thread-193146] [transport.py] [_log()] Compression: none
2026-04-12T17:43:07.972 [DEBUG] [Thread-193146] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:43:07.983 [DEBUG] [Thread-193146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:43:07.983 [DEBUG] [Thread-193146] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:43:07.984 [DEBUG] [Thread-193146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:43:07.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:43:07.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:43:07.985 [DEBUG] [Thread-193146] [transport.py] [_log()] userauth is OK
2026-04-12T17:43:07.986 [DEBUG] [Thread-193146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:43:07.986 [DEBUG] [Thread-193146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:43:07.986 [DEBUG] [Thread-193146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:43:07.986 [DEBUG] [Thread-193146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:43:08.004 [INFO] [Thread-193146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:43:08.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:43:08.622 [DEBUG] [Thread-193146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:43:08.622 [DEBUG] [Thread-193146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:43:08.623 [DEBUG] [Thread-193146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:43:08.664 [DEBUG] [Thread-193146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:43:08.664 [DEBUG] [Thread-193146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:43:08.666 [DEBUG] [Thread-193146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:43:08.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:43:08.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:43:08.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:43:08.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:43:08.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:43:08.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:43:08.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:43:08.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.654618 -999.00  +14.50  13.78     71   +9.40 1 2 1 1 1   887    0 6.53 48.39 ----- 13.8 13.8 259.4 15.2 17.2 -24.5 17.0 -22.8 17.4 -20.8 17.8 -23.3
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.654618
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:43:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:42:38', tmtdew=6.53338, humidity=64.9265, cloud=0.0, wind=19.1606, temperature=15.1253, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:42:38.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:43:08.683 [DEBUG] [Thread-193146] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:43:08.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:43:08.764 [DEBUG] [Thread-193149] [transport.py] [_log()] starting thread (client mode): 0xae50ac20
2026-04-12T17:43:08.764 [DEBUG] [Thread-193149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:43:08.778 [DEBUG] [Thread-193149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:43:08.778 [INFO] [Thread-193149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] client lang: <none>
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] server lang: <none>
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] kex follows: False
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:43:08.786 [DEBUG] [Thread-193149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:43:08.787 [DEBUG] [Thread-193149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:43:08.787 [DEBUG] [Thread-193149] [transport.py] [_log()] Compression: none
2026-04-12T17:43:08.787 [DEBUG] [Thread-193149] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:43:08.848 [DEBUG] [Thread-193149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:43:08.849 [DEBUG] [Thread-193149] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:43:08.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:43:08.850 [DEBUG] [Thread-193149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:43:08.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:43:08.906 [DEBUG] [Thread-193149] [transport.py] [_log()] userauth is OK
2026-04-12T17:43:08.906 [DEBUG] [Thread-193149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:43:08.906 [DEBUG] [Thread-193149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:43:08.906 [DEBUG] [Thread-193149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:43:08.906 [DEBUG] [Thread-193149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:43:08.924 [INFO] [Thread-193149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:43:08.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:43:08.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:43:09.748 [DEBUG] [Thread-193149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:43:09.749 [DEBUG] [Thread-193149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:43:09.797 [DEBUG] [Thread-193149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:43:09.797 [DEBUG] [Thread-193149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:43:09.806 [DEBUG] [Thread-193149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:43:09.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:43:09.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:43:09.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:43:09.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:43:09.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:43:09.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:43:09.843 [DEBUG] [Thread-193149] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:43:14.327 [DEBUG] [Thread-193151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:43:29.382 [DEBUG] [Thread-193152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:43:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:43:39.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:43:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:43:41.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 43, 14), 6.35658, 65.7284, 0.0, 14.7164, 14.6627, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:43:41.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:43:14
2026-04-12T17:43:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:43:41.697 [DEBUG] [Thread-193153] [transport.py] [_log()] starting thread (client mode): 0xae534820
2026-04-12T17:43:41.697 [DEBUG] [Thread-193153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:43:41.716 [DEBUG] [Thread-193153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:43:41.716 [INFO] [Thread-193153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:43:41.717 [DEBUG] [Thread-193153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] client lang: <none>
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] server lang: <none>
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] kex follows: False
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] Compression: none
2026-04-12T17:43:41.718 [DEBUG] [Thread-193153] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:43:41.726 [DEBUG] [Thread-193153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:43:41.727 [DEBUG] [Thread-193153] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:43:41.727 [DEBUG] [Thread-193153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:43:41.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:43:41.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:43:41.729 [DEBUG] [Thread-193153] [transport.py] [_log()] userauth is OK
2026-04-12T17:43:41.729 [DEBUG] [Thread-193153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:43:41.729 [DEBUG] [Thread-193153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:43:41.729 [DEBUG] [Thread-193153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:43:41.729 [DEBUG] [Thread-193153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:43:41.748 [INFO] [Thread-193153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:43:41.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:43:42.383 [DEBUG] [Thread-193153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:43:42.384 [DEBUG] [Thread-193153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:43:42.384 [DEBUG] [Thread-193153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:43:42.425 [DEBUG] [Thread-193153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:43:42.425 [DEBUG] [Thread-193153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:43:42.429 [DEBUG] [Thread-193153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:43:42.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:43:42.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:43:42.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:43:42.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:43:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:43:42.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:43:42.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:43:42.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:43:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:43:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.654965 -999.00  +14.50  12.73     71   +9.30 1 2 1 1 1   887    0 6.41 46.74 ----- 12.7 12.7 263.8 16.1 17.1 -24.5 17.0 -22.8 17.4 -20.8 17.8 -23.5
2026-04-12T17:43:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:43:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:43:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.654965
2026-04-12T17:43:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:43:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:43:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:43:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:43:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:43:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:43:14', tmtdew=6.35658, humidity=65.7284, cloud=0.0, wind=14.7164, temperature=14.6627, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:43:08.976', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:43:42.457 [DEBUG] [Thread-193153] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:43:42.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:43:42.549 [DEBUG] [Thread-193156] [transport.py] [_log()] starting thread (client mode): 0xae5f2d10
2026-04-12T17:43:42.549 [DEBUG] [Thread-193156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:43:42.565 [DEBUG] [Thread-193156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:43:42.566 [INFO] [Thread-193156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:43:42.573 [DEBUG] [Thread-193156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:43:42.573 [DEBUG] [Thread-193156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:43:42.573 [DEBUG] [Thread-193156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] client lang: <none>
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] server lang: <none>
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] kex follows: False
2026-04-12T17:43:42.574 [DEBUG] [Thread-193156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:43:42.575 [DEBUG] [Thread-193156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:43:42.575 [DEBUG] [Thread-193156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:43:42.575 [DEBUG] [Thread-193156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:43:42.575 [DEBUG] [Thread-193156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:43:42.575 [DEBUG] [Thread-193156] [transport.py] [_log()] Compression: none
2026-04-12T17:43:42.575 [DEBUG] [Thread-193156] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:43:42.634 [DEBUG] [Thread-193156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:43:42.635 [DEBUG] [Thread-193156] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:43:42.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:43:42.637 [DEBUG] [Thread-193156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:43:42.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:43:42.689 [DEBUG] [Thread-193156] [transport.py] [_log()] userauth is OK
2026-04-12T17:43:42.690 [DEBUG] [Thread-193156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:43:42.690 [DEBUG] [Thread-193156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:43:42.690 [DEBUG] [Thread-193156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:43:42.690 [DEBUG] [Thread-193156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:43:42.714 [INFO] [Thread-193156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:43:42.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:43:42.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:43:43.535 [DEBUG] [Thread-193156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:43:43.536 [DEBUG] [Thread-193156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:43:43.583 [DEBUG] [Thread-193156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:43:43.583 [DEBUG] [Thread-193156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:43:43.592 [DEBUG] [Thread-193156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:43:43.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:43:43.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:43:43.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:43:43.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:43:43.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:43:43.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:43:43.629 [DEBUG] [Thread-193156] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:43:44.420 [DEBUG] [Thread-193158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:43:48.378 [DEBUG] [Thread-193159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:43:59.469 [DEBUG] [Thread-193160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:44:00.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:44:00.262 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:44:13.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:44:13.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:44:13.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:44:14.505 [DEBUG] [Thread-193161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:44:14.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 43, 49), 6.35913, 65.6894, 0.0, 15.5974, 15.0928, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:44:14.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:43:49
2026-04-12T17:44:15.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:44:15.453 [DEBUG] [Thread-193162] [transport.py] [_log()] starting thread (client mode): 0xae52c370
2026-04-12T17:44:15.453 [DEBUG] [Thread-193162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:44:15.474 [DEBUG] [Thread-193162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:44:15.474 [INFO] [Thread-193162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:44:15.477 [DEBUG] [Thread-193162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:44:15.477 [DEBUG] [Thread-193162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:44:15.477 [DEBUG] [Thread-193162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:44:15.477 [DEBUG] [Thread-193162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:15.477 [DEBUG] [Thread-193162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] client lang: <none>
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] server lang: <none>
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] kex follows: False
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] Compression: none
2026-04-12T17:44:15.478 [DEBUG] [Thread-193162] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:44:15.495 [DEBUG] [Thread-193162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:44:15.496 [DEBUG] [Thread-193162] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:44:15.496 [DEBUG] [Thread-193162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:44:15.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:44:15.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:44:15.498 [DEBUG] [Thread-193162] [transport.py] [_log()] userauth is OK
2026-04-12T17:44:15.498 [DEBUG] [Thread-193162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:44:15.498 [DEBUG] [Thread-193162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:44:15.499 [DEBUG] [Thread-193162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:44:15.499 [DEBUG] [Thread-193162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:44:15.523 [INFO] [Thread-193162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:44:15.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:44:16.154 [DEBUG] [Thread-193162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:44:16.154 [DEBUG] [Thread-193162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:44:16.155 [DEBUG] [Thread-193162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:44:16.195 [DEBUG] [Thread-193162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:44:16.195 [DEBUG] [Thread-193162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:44:16.199 [DEBUG] [Thread-193162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:44:16.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:44:16.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:44:16.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:44:16.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:44:16.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:44:16.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:44:16.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:44:16.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:44:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:44:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.655313 -999.00  +14.50  10.48     71   +9.40 1 2 1 1 1   887    0 6.34 41.40 ----- 10.5 10.5 268.4 19.7 17.2 -24.5 17.0 -22.9 17.3 -20.9 17.8 -23.4
2026-04-12T17:44:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:44:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:44:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.655313
2026-04-12T17:44:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:44:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:44:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:44:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:44:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:44:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:43:49', tmtdew=6.35913, humidity=65.6894, cloud=0.0, wind=15.5974, temperature=15.0928, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:43:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:44:16.227 [DEBUG] [Thread-193162] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:44:16.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:44:16.320 [DEBUG] [Thread-193165] [transport.py] [_log()] starting thread (client mode): 0xa7938af0
2026-04-12T17:44:16.320 [DEBUG] [Thread-193165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:44:16.334 [DEBUG] [Thread-193165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:44:16.335 [INFO] [Thread-193165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:44:16.342 [DEBUG] [Thread-193165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:44:16.342 [DEBUG] [Thread-193165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:44:16.342 [DEBUG] [Thread-193165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] client lang: <none>
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] server lang: <none>
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] kex follows: False
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] Compression: none
2026-04-12T17:44:16.343 [DEBUG] [Thread-193165] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:44:16.402 [DEBUG] [Thread-193165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:44:16.402 [DEBUG] [Thread-193165] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:44:16.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:44:16.404 [DEBUG] [Thread-193165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:44:16.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:44:16.458 [DEBUG] [Thread-193165] [transport.py] [_log()] userauth is OK
2026-04-12T17:44:16.458 [DEBUG] [Thread-193165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:44:16.458 [DEBUG] [Thread-193165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:44:16.458 [DEBUG] [Thread-193165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:44:16.458 [DEBUG] [Thread-193165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:44:16.483 [INFO] [Thread-193165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:44:16.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:44:16.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:44:17.303 [DEBUG] [Thread-193165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:44:17.303 [DEBUG] [Thread-193165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:44:17.351 [DEBUG] [Thread-193165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:44:17.351 [DEBUG] [Thread-193165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:44:17.360 [DEBUG] [Thread-193165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:44:17.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:44:17.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:44:17.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:44:17.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:44:17.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:44:17.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:44:17.396 [DEBUG] [Thread-193165] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:44:29.541 [DEBUG] [Thread-193167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:44:44.602 [DEBUG] [Thread-193168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:44:47.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:44:47.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:44:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:44:48.410 [DEBUG] [Thread-193169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:44:48.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 44, 24), 6.31013, 65.9275, 0.0, 15.5455, 14.5798, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:44:48.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:44:24
2026-04-12T17:44:49.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:44:49.202 [DEBUG] [Thread-193170] [transport.py] [_log()] starting thread (client mode): 0xae52c2b0
2026-04-12T17:44:49.202 [DEBUG] [Thread-193170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:44:49.222 [DEBUG] [Thread-193170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:44:49.222 [INFO] [Thread-193170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] client lang: <none>
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] server lang: <none>
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] kex follows: False
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] Compression: none
2026-04-12T17:44:49.225 [DEBUG] [Thread-193170] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:44:49.244 [DEBUG] [Thread-193170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:44:49.244 [DEBUG] [Thread-193170] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:44:49.245 [DEBUG] [Thread-193170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:44:49.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:44:49.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:44:49.247 [DEBUG] [Thread-193170] [transport.py] [_log()] userauth is OK
2026-04-12T17:44:49.247 [DEBUG] [Thread-193170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:44:49.247 [DEBUG] [Thread-193170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:44:49.247 [DEBUG] [Thread-193170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:44:49.247 [DEBUG] [Thread-193170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:44:49.265 [INFO] [Thread-193170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:44:49.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:44:49.893 [DEBUG] [Thread-193170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:44:49.893 [DEBUG] [Thread-193170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:44:49.894 [DEBUG] [Thread-193170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:44:49.934 [DEBUG] [Thread-193170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:44:49.934 [DEBUG] [Thread-193170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:44:49.938 [DEBUG] [Thread-193170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:44:49.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:44:49.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:44:49.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:44:49.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:44:49.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:44:49.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:44:49.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:44:49.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:44:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:44:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.656007 -999.00  +14.40   8.61     71   +9.30 1 2 1 1 1   887    0 6.15 38.18 ----- 8.6 8.6 243.4 14.2 17.1 -24.4 17.0 -22.9 17.3 -21.0 17.7 -23.0
2026-04-12T17:44:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:44:49.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:44:49.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.656007
2026-04-12T17:44:49.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:44:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:44:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:44:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:44:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:44:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:44:24', tmtdew=6.31013, humidity=65.9275, cloud=0.0, wind=15.5455, temperature=14.5798, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:44:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:44:49.963 [DEBUG] [Thread-193170] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:44:50.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:44:50.057 [DEBUG] [Thread-193173] [transport.py] [_log()] starting thread (client mode): 0xae537b80
2026-04-12T17:44:50.057 [DEBUG] [Thread-193173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:44:50.072 [DEBUG] [Thread-193173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:44:50.073 [INFO] [Thread-193173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:44:50.080 [DEBUG] [Thread-193173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:44:50.080 [DEBUG] [Thread-193173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:44:50.080 [DEBUG] [Thread-193173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:44:50.080 [DEBUG] [Thread-193173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] client lang: <none>
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] server lang: <none>
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] kex follows: False
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] Compression: none
2026-04-12T17:44:50.081 [DEBUG] [Thread-193173] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:44:50.137 [DEBUG] [Thread-193173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:44:50.138 [DEBUG] [Thread-193173] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:44:50.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:44:50.139 [DEBUG] [Thread-193173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:44:50.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:44:50.194 [DEBUG] [Thread-193173] [transport.py] [_log()] userauth is OK
2026-04-12T17:44:50.194 [DEBUG] [Thread-193173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:44:50.194 [DEBUG] [Thread-193173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:44:50.195 [DEBUG] [Thread-193173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:44:50.195 [DEBUG] [Thread-193173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:44:50.214 [INFO] [Thread-193173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:44:50.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:44:50.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:44:51.042 [DEBUG] [Thread-193173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:44:51.042 [DEBUG] [Thread-193173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:44:51.090 [DEBUG] [Thread-193173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:44:51.090 [DEBUG] [Thread-193173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:44:51.099 [DEBUG] [Thread-193173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:44:51.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:44:51.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:44:51.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:44:51.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:44:51.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:44:51.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:44:51.136 [DEBUG] [Thread-193173] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:44:59.641 [DEBUG] [Thread-193175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:45:00.404 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:45:00.405 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:45:14.703 [DEBUG] [Thread-193176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:45:21.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:45:21.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:45:21.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:45:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 45), 6.29076, 66.0104, 0.0, 15.5984, 14.6133, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:45:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:45:00
2026-04-12T17:45:22.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:45:22.956 [DEBUG] [Thread-193177] [transport.py] [_log()] starting thread (client mode): 0xae52e380
2026-04-12T17:45:22.956 [DEBUG] [Thread-193177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:45:22.977 [DEBUG] [Thread-193177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:45:22.977 [INFO] [Thread-193177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] client lang: <none>
2026-04-12T17:45:22.981 [DEBUG] [Thread-193177] [transport.py] [_log()] server lang: <none>
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] kex follows: False
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] Compression: none
2026-04-12T17:45:22.982 [DEBUG] [Thread-193177] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:45:23.000 [DEBUG] [Thread-193177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:45:23.001 [DEBUG] [Thread-193177] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:45:23.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:45:23.002 [DEBUG] [Thread-193177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:45:23.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:45:23.005 [DEBUG] [Thread-193177] [transport.py] [_log()] userauth is OK
2026-04-12T17:45:23.005 [DEBUG] [Thread-193177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:45:23.005 [DEBUG] [Thread-193177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:45:23.005 [DEBUG] [Thread-193177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:45:23.005 [DEBUG] [Thread-193177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:45:23.043 [INFO] [Thread-193177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:45:23.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:45:28.874 [DEBUG] [Thread-193177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:45:28.875 [DEBUG] [Thread-193177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:45:28.875 [DEBUG] [Thread-193177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:45:28.916 [DEBUG] [Thread-193177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:45:28.916 [DEBUG] [Thread-193177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:45:28.920 [DEBUG] [Thread-193177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:45:28.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:45:28.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:45:28.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:45:28.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:45:28.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:45:28.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:45:28.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:45:28.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:45:28.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:45:28.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.656007 -999.00  +14.40   8.61     71   +9.30 1 2 1 1 1   887    0 6.15 38.18 ----- 8.6 8.6 243.4 14.2 17.1 -24.4 17.0 -22.9 17.3 -21.0 17.7 -23.0
2026-04-12T17:45:28.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:45:28.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:45:28.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.656007
2026-04-12T17:45:28.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:45:28.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:45:28.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:45:28.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:45:28.948 [DEBUG] [Thread-193177] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:45:28.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:45:28.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:45:00', tmtdew=6.29076, humidity=66.0104, cloud=0.0, wind=15.5984, temperature=14.6133, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:44:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:45:29.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:45:29.042 [DEBUG] [Thread-193180] [transport.py] [_log()] starting thread (client mode): 0xae5363e0
2026-04-12T17:45:29.043 [DEBUG] [Thread-193180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:45:29.057 [DEBUG] [Thread-193180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:45:29.057 [INFO] [Thread-193180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:45:29.065 [DEBUG] [Thread-193180] [transport.py] [_log()] client lang: <none>
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] server lang: <none>
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] kex follows: False
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] Compression: none
2026-04-12T17:45:29.066 [DEBUG] [Thread-193180] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:45:29.126 [DEBUG] [Thread-193180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:45:29.126 [DEBUG] [Thread-193180] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:45:29.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:45:29.127 [DEBUG] [Thread-193180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:45:29.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:45:29.181 [DEBUG] [Thread-193180] [transport.py] [_log()] userauth is OK
2026-04-12T17:45:29.181 [DEBUG] [Thread-193180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:45:29.181 [DEBUG] [Thread-193180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:45:29.181 [DEBUG] [Thread-193180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:45:29.181 [DEBUG] [Thread-193180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:45:29.198 [INFO] [Thread-193180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:45:29.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:45:29.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:45:29.740 [DEBUG] [Thread-193182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:45:30.006 [DEBUG] [Thread-193180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:45:30.006 [DEBUG] [Thread-193180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:45:30.054 [DEBUG] [Thread-193180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:45:30.054 [DEBUG] [Thread-193180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:45:30.063 [DEBUG] [Thread-193180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:45:30.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:45:30.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:45:30.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:45:30.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:45:30.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:45:30.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:45:30.100 [DEBUG] [Thread-193180] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:45:44.794 [DEBUG] [Thread-193183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:45:48.443 [DEBUG] [Thread-193184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:45:59.831 [DEBUG] [Thread-193185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:46:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:46:00.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:46:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:46:00.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:46:00.555 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:46:01.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 45, 36), 6.40332, 65.4578, 0.0, 10.764, 14.9275, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:46:01.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:45:36
2026-04-12T17:46:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:46:01.940 [DEBUG] [Thread-193186] [transport.py] [_log()] starting thread (client mode): 0xae52fbe0
2026-04-12T17:46:01.940 [DEBUG] [Thread-193186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:46:01.961 [DEBUG] [Thread-193186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:46:01.961 [INFO] [Thread-193186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:46:01.963 [DEBUG] [Thread-193186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] client lang: <none>
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] server lang: <none>
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] kex follows: False
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] Compression: none
2026-04-12T17:46:01.964 [DEBUG] [Thread-193186] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:46:01.975 [DEBUG] [Thread-193186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:46:01.975 [DEBUG] [Thread-193186] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:46:01.976 [DEBUG] [Thread-193186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:46:01.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:46:01.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:46:01.977 [DEBUG] [Thread-193186] [transport.py] [_log()] userauth is OK
2026-04-12T17:46:01.977 [DEBUG] [Thread-193186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:46:01.977 [DEBUG] [Thread-193186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:46:01.977 [DEBUG] [Thread-193186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:46:01.977 [DEBUG] [Thread-193186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:46:01.990 [INFO] [Thread-193186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:46:01.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:46:02.690 [DEBUG] [Thread-193186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:46:02.690 [DEBUG] [Thread-193186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:46:02.691 [DEBUG] [Thread-193186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:46:02.731 [DEBUG] [Thread-193186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:46:02.731 [DEBUG] [Thread-193186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:46:02.733 [DEBUG] [Thread-193186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:46:02.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:46:02.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:46:02.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:46:02.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:46:02.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:46:02.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:46:02.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:46:02.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:46:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:46:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.656354 -999.00  +14.50   8.51     72   +9.60 1 2 1 1 1   887    0 6.05 34.90 ----- 8.5 8.5 259.0 11.6 17.1 -24.1 16.9 -22.7 17.3 -20.7 17.8 -23.2
2026-04-12T17:46:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:46:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:46:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.656354
2026-04-12T17:46:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:46:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:46:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:46:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:46:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:46:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:45:36', tmtdew=6.40332, humidity=65.4578, cloud=0.0, wind=10.764, temperature=14.9275, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:45:08.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:46:02.758 [DEBUG] [Thread-193186] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:46:02.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:46:02.852 [DEBUG] [Thread-193189] [transport.py] [_log()] starting thread (client mode): 0xb0f41a50
2026-04-12T17:46:02.852 [DEBUG] [Thread-193189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:46:02.867 [DEBUG] [Thread-193189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:46:02.867 [INFO] [Thread-193189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] client lang: <none>
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] server lang: <none>
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] kex follows: False
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:46:02.875 [DEBUG] [Thread-193189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:46:02.876 [DEBUG] [Thread-193189] [transport.py] [_log()] Compression: none
2026-04-12T17:46:02.876 [DEBUG] [Thread-193189] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:46:02.934 [DEBUG] [Thread-193189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:46:02.934 [DEBUG] [Thread-193189] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:46:02.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:46:02.936 [DEBUG] [Thread-193189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:46:02.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:46:02.990 [DEBUG] [Thread-193189] [transport.py] [_log()] userauth is OK
2026-04-12T17:46:02.990 [DEBUG] [Thread-193189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:46:02.990 [DEBUG] [Thread-193189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:46:02.990 [DEBUG] [Thread-193189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:46:02.990 [DEBUG] [Thread-193189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:46:03.008 [INFO] [Thread-193189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:46:03.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:46:03.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:46:03.874 [DEBUG] [Thread-193189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:46:03.874 [DEBUG] [Thread-193189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:46:03.923 [DEBUG] [Thread-193189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:46:03.924 [DEBUG] [Thread-193189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:46:03.937 [DEBUG] [Thread-193189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:46:03.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:46:03.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:46:03.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:46:03.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:46:03.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:46:03.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:46:03.977 [DEBUG] [Thread-193189] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:46:14.876 [DEBUG] [Thread-193191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:46:29.934 [DEBUG] [Thread-193192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:46:34.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:46:34.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:46:34.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:46:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 46, 11), 6.21322, 66.6265, 0.0, 13.905, 14.6802, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:46:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:46:11
2026-04-12T17:46:35.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:46:35.803 [DEBUG] [Thread-193193] [transport.py] [_log()] starting thread (client mode): 0xa793a380
2026-04-12T17:46:35.803 [DEBUG] [Thread-193193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:46:35.823 [DEBUG] [Thread-193193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:46:35.823 [INFO] [Thread-193193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:46:35.825 [DEBUG] [Thread-193193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] client lang: <none>
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] server lang: <none>
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] kex follows: False
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] Compression: none
2026-04-12T17:46:35.826 [DEBUG] [Thread-193193] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:46:35.839 [DEBUG] [Thread-193193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:46:35.840 [DEBUG] [Thread-193193] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:46:35.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:46:35.842 [DEBUG] [Thread-193193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:46:35.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:46:35.845 [DEBUG] [Thread-193193] [transport.py] [_log()] userauth is OK
2026-04-12T17:46:35.845 [DEBUG] [Thread-193193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:46:35.845 [DEBUG] [Thread-193193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:46:35.846 [DEBUG] [Thread-193193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:46:35.846 [DEBUG] [Thread-193193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:46:35.870 [INFO] [Thread-193193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:46:35.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:46:36.467 [DEBUG] [Thread-193193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:46:36.467 [DEBUG] [Thread-193193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:46:36.467 [DEBUG] [Thread-193193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:46:36.509 [DEBUG] [Thread-193193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:46:36.509 [DEBUG] [Thread-193193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:46:36.512 [DEBUG] [Thread-193193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:46:36.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:46:36.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:46:36.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:46:36.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:46:36.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:46:36.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:46:36.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:46:36.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:46:36.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:46:36.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.657049 -999.00  +14.70  10.96     72   +9.80 1 2 1 1 1   887    0 5.93 27.23 ----- 11.0 11.0 262.8 15.4 17.2 -24.1 17.0 -22.7 17.3 -20.7 17.9 -23.5
2026-04-12T17:46:36.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:46:36.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:46:36.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.657049
2026-04-12T17:46:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:46:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:46:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:46:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:46:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:46:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:46:11', tmtdew=6.21322, humidity=66.6265, cloud=0.0, wind=13.905, temperature=14.6802, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:46:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:46:36.532 [DEBUG] [Thread-193193] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:46:36.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:46:36.625 [DEBUG] [Thread-193196] [transport.py] [_log()] starting thread (client mode): 0xa7938af0
2026-04-12T17:46:36.625 [DEBUG] [Thread-193196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:46:36.640 [DEBUG] [Thread-193196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:46:36.640 [INFO] [Thread-193196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:46:36.647 [DEBUG] [Thread-193196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] client lang: <none>
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] server lang: <none>
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] kex follows: False
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] Compression: none
2026-04-12T17:46:36.648 [DEBUG] [Thread-193196] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:46:36.705 [DEBUG] [Thread-193196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:46:36.706 [DEBUG] [Thread-193196] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:46:36.706 [DEBUG] [Thread-193196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:46:36.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:46:36.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:46:36.762 [DEBUG] [Thread-193196] [transport.py] [_log()] userauth is OK
2026-04-12T17:46:36.762 [DEBUG] [Thread-193196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:46:36.763 [DEBUG] [Thread-193196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:46:36.763 [DEBUG] [Thread-193196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:46:36.763 [DEBUG] [Thread-193196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:46:36.782 [INFO] [Thread-193196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:46:36.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:46:36.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:46:37.594 [DEBUG] [Thread-193196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:46:37.594 [DEBUG] [Thread-193196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:46:37.642 [DEBUG] [Thread-193196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:46:37.642 [DEBUG] [Thread-193196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:46:37.650 [DEBUG] [Thread-193196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:46:37.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:46:37.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:46:37.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:46:37.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:46:37.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:46:37.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:46:37.682 [DEBUG] [Thread-193196] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:46:44.970 [DEBUG] [Thread-193198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:46:48.476 [DEBUG] [Thread-193199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:47:00.024 [DEBUG] [Thread-193200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:47:00.695 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:47:00.696 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:47:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:47:07.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:47:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:47:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 46, 46), 6.11738, 66.7502, 0.0, 18.9137, 14.9936, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:47:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:46:46
2026-04-12T17:47:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:47:09.567 [DEBUG] [Thread-193201] [transport.py] [_log()] starting thread (client mode): 0xa793b250
2026-04-12T17:47:09.567 [DEBUG] [Thread-193201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:47:09.587 [DEBUG] [Thread-193201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:47:09.588 [INFO] [Thread-193201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:47:09.590 [DEBUG] [Thread-193201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] client lang: <none>
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] server lang: <none>
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] kex follows: False
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] Compression: none
2026-04-12T17:47:09.591 [DEBUG] [Thread-193201] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:47:09.609 [DEBUG] [Thread-193201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:47:09.610 [DEBUG] [Thread-193201] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:47:09.610 [DEBUG] [Thread-193201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:47:09.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:47:09.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:47:09.653 [DEBUG] [Thread-193201] [transport.py] [_log()] userauth is OK
2026-04-12T17:47:09.653 [DEBUG] [Thread-193201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:47:09.654 [DEBUG] [Thread-193201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:47:09.654 [DEBUG] [Thread-193201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:47:09.654 [DEBUG] [Thread-193201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:47:09.675 [INFO] [Thread-193201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:47:09.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:47:10.277 [DEBUG] [Thread-193201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:47:10.278 [DEBUG] [Thread-193201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:47:10.278 [DEBUG] [Thread-193201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:47:10.319 [DEBUG] [Thread-193201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:47:10.319 [DEBUG] [Thread-193201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:47:10.321 [DEBUG] [Thread-193201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:47:10.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:47:10.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:47:10.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:47:10.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:47:10.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:47:10.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:47:10.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:47:10.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:47:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:47:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.657396 -999.00  +14.60  13.17     71   +9.60 1 2 1 1 1   887    0 5.82 24.19 ----- 13.2 13.2 258.8 20.0 17.1 -24.3 17.0 -22.8 17.4 -22.1 17.8 -23.8
2026-04-12T17:47:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:47:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:47:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.657396
2026-04-12T17:47:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:47:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:47:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:47:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:47:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:47:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:46:46', tmtdew=6.11738, humidity=66.7502, cloud=0.0, wind=18.9137, temperature=14.9936, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:46:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:47:10.341 [DEBUG] [Thread-193201] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:47:10.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:47:10.433 [DEBUG] [Thread-193204] [transport.py] [_log()] starting thread (client mode): 0xae51beb0
2026-04-12T17:47:10.433 [DEBUG] [Thread-193204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:47:10.448 [DEBUG] [Thread-193204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:47:10.448 [INFO] [Thread-193204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:47:10.455 [DEBUG] [Thread-193204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] client lang: <none>
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] server lang: <none>
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] kex follows: False
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] Compression: none
2026-04-12T17:47:10.456 [DEBUG] [Thread-193204] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:47:10.513 [DEBUG] [Thread-193204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:47:10.514 [DEBUG] [Thread-193204] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:47:10.515 [DEBUG] [Thread-193204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:47:10.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:47:10.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:47:10.569 [DEBUG] [Thread-193204] [transport.py] [_log()] userauth is OK
2026-04-12T17:47:10.570 [DEBUG] [Thread-193204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:47:10.570 [DEBUG] [Thread-193204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:47:10.570 [DEBUG] [Thread-193204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:47:10.570 [DEBUG] [Thread-193204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:47:10.587 [INFO] [Thread-193204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:47:10.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:47:10.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:47:11.401 [DEBUG] [Thread-193204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:47:11.401 [DEBUG] [Thread-193204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:47:11.449 [DEBUG] [Thread-193204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:47:11.449 [DEBUG] [Thread-193204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:47:11.459 [DEBUG] [Thread-193204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:47:11.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:47:11.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:47:11.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:47:11.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:47:11.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:47:11.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:47:11.505 [DEBUG] [Thread-193204] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:47:15.063 [DEBUG] [Thread-193206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:47:30.119 [DEBUG] [Thread-193207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:47:41.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:47:41.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:47:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:47:42.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 47, 22), 6.2148, 66.1265, 0.0, 13.9396, 14.6633, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:47:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:47:22
2026-04-12T17:47:43.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:47:43.327 [DEBUG] [Thread-193208] [transport.py] [_log()] starting thread (client mode): 0xb0f6db10
2026-04-12T17:47:43.327 [DEBUG] [Thread-193208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:47:43.343 [DEBUG] [Thread-193208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:47:43.344 [INFO] [Thread-193208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] client lang: <none>
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] server lang: <none>
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] kex follows: False
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:47:43.345 [DEBUG] [Thread-193208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:47:43.346 [DEBUG] [Thread-193208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:47:43.346 [DEBUG] [Thread-193208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:47:43.346 [DEBUG] [Thread-193208] [transport.py] [_log()] Compression: none
2026-04-12T17:47:43.346 [DEBUG] [Thread-193208] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:47:43.355 [DEBUG] [Thread-193208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:47:43.356 [DEBUG] [Thread-193208] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:47:43.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:47:43.357 [DEBUG] [Thread-193208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:47:43.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:47:43.359 [DEBUG] [Thread-193208] [transport.py] [_log()] userauth is OK
2026-04-12T17:47:43.359 [DEBUG] [Thread-193208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:47:43.359 [DEBUG] [Thread-193208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:47:43.359 [DEBUG] [Thread-193208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:47:43.359 [DEBUG] [Thread-193208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:47:43.380 [INFO] [Thread-193208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:47:43.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:47:43.985 [DEBUG] [Thread-193208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:47:43.985 [DEBUG] [Thread-193208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:47:43.986 [DEBUG] [Thread-193208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:47:44.026 [DEBUG] [Thread-193208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:47:44.026 [DEBUG] [Thread-193208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:47:44.030 [DEBUG] [Thread-193208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:47:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:47:44.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:47:44.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:47:44.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:47:44.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:47:44.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:47:44.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:47:44.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:47:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:47:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.657743 -999.00  +14.60   8.47     71   +9.50 1 2 1 1 1   887    0 5.72 19.59 ----- 8.5 8.5 275.6 18.2 17.1 -24.6 16.9 -22.8 17.2 -21.5 17.8 -23.4
2026-04-12T17:47:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:47:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:47:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.657743
2026-04-12T17:47:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:47:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:47:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:47:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:47:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:47:44.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:47:22', tmtdew=6.2148, humidity=66.1265, cloud=0.0, wind=13.9396, temperature=14.6633, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:47:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:47:44.050 [DEBUG] [Thread-193208] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:47:44.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:47:44.143 [DEBUG] [Thread-193211] [transport.py] [_log()] starting thread (client mode): 0xb0f40af0
2026-04-12T17:47:44.143 [DEBUG] [Thread-193211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:47:44.158 [DEBUG] [Thread-193211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:47:44.158 [INFO] [Thread-193211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:47:44.166 [DEBUG] [Thread-193211] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:47:44.166 [DEBUG] [Thread-193211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:47:44.166 [DEBUG] [Thread-193211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:47:44.166 [DEBUG] [Thread-193211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:44.166 [DEBUG] [Thread-193211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] client lang: <none>
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] server lang: <none>
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] kex follows: False
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] Compression: none
2026-04-12T17:47:44.167 [DEBUG] [Thread-193211] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:47:44.226 [DEBUG] [Thread-193211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:47:44.226 [DEBUG] [Thread-193211] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:47:44.227 [DEBUG] [Thread-193211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:47:44.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:47:44.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:47:44.281 [DEBUG] [Thread-193211] [transport.py] [_log()] userauth is OK
2026-04-12T17:47:44.282 [DEBUG] [Thread-193211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:47:44.282 [DEBUG] [Thread-193211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:47:44.282 [DEBUG] [Thread-193211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:47:44.282 [DEBUG] [Thread-193211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:47:44.301 [INFO] [Thread-193211] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:47:44.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:47:44.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:47:45.098 [DEBUG] [Thread-193211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:47:45.098 [DEBUG] [Thread-193211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:47:45.146 [DEBUG] [Thread-193211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:47:45.146 [DEBUG] [Thread-193211] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:47:45.155 [DEBUG] [Thread-193211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:47:45.157 [DEBUG] [Thread-193213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:47:45.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:47:45.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')
2026-04-12T17:47:45.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:47:45.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:47:45.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:47:45.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:47:45.190 [DEBUG] [Thread-193211] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:47:48.525 [DEBUG] [Thread-193214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:00.211 [DEBUG] [Thread-193215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:00.835 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:00.836 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:15.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:48:15.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:48:15.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:48:15.250 [DEBUG] [Thread-193216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 47, 58), 6.1837, 66.259, 0.0, 15.6514, 14.4802, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:48:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:47:58
2026-04-12T17:48:16.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:48:17.085 [DEBUG] [Thread-193217] [transport.py] [_log()] starting thread (client mode): 0xae5a6ad0
2026-04-12T17:48:17.085 [DEBUG] [Thread-193217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:48:17.095 [DEBUG] [Thread-193217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:48:17.095 [INFO] [Thread-193217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] client lang: <none>
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] server lang: <none>
2026-04-12T17:48:17.097 [DEBUG] [Thread-193217] [transport.py] [_log()] kex follows: False
2026-04-12T17:48:17.098 [DEBUG] [Thread-193217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:48:17.098 [DEBUG] [Thread-193217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:48:17.098 [DEBUG] [Thread-193217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:48:17.098 [DEBUG] [Thread-193217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:48:17.098 [DEBUG] [Thread-193217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:48:17.098 [DEBUG] [Thread-193217] [transport.py] [_log()] Compression: none
2026-04-12T17:48:17.098 [DEBUG] [Thread-193217] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:48:17.107 [DEBUG] [Thread-193217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:48:17.107 [DEBUG] [Thread-193217] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:48:17.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:48:17.107 [DEBUG] [Thread-193217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:48:17.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:48:17.108 [DEBUG] [Thread-193217] [transport.py] [_log()] userauth is OK
2026-04-12T17:48:17.108 [DEBUG] [Thread-193217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:48:17.108 [DEBUG] [Thread-193217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:48:17.108 [DEBUG] [Thread-193217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:48:17.108 [DEBUG] [Thread-193217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:48:17.119 [INFO] [Thread-193217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:48:17.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:48:17.762 [DEBUG] [Thread-193217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:48:17.762 [DEBUG] [Thread-193217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:48:17.762 [DEBUG] [Thread-193217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:48:17.803 [DEBUG] [Thread-193217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:48:17.803 [DEBUG] [Thread-193217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:48:17.805 [DEBUG] [Thread-193217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:48:17.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:48:17.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:48:17.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:48:17.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:48:17.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:48:17.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:48:17.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:48:17.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:48:17.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:48:17.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.658438 -999.00  +14.60  10.92     72   +9.60 1 2 1 1 1   887    0 5.49 12.93 ----- 10.9 10.9 274.7 15.8 17.1 -24.4 16.9 -22.7 17.3 -20.8 17.8 -23.3
2026-04-12T17:48:17.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:48:17.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:48:17.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.658438
2026-04-12T17:48:17.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:48:17.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:48:17.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:48:17.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:48:17.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:48:17.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:47:58', tmtdew=6.1837, humidity=66.259, cloud=0.0, wind=15.6514, temperature=14.4802, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:48:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:48:17.827 [DEBUG] [Thread-193217] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:48:17.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:48:17.922 [DEBUG] [Thread-193220] [transport.py] [_log()] starting thread (client mode): 0xa793aad0
2026-04-12T17:48:17.922 [DEBUG] [Thread-193220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:48:17.936 [DEBUG] [Thread-193220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:48:17.936 [INFO] [Thread-193220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] client lang: <none>
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] server lang: <none>
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] kex follows: False
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] Compression: none
2026-04-12T17:48:17.944 [DEBUG] [Thread-193220] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:48:18.001 [DEBUG] [Thread-193220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:48:18.001 [DEBUG] [Thread-193220] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:48:18.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:48:18.002 [DEBUG] [Thread-193220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:48:18.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:48:18.057 [DEBUG] [Thread-193220] [transport.py] [_log()] userauth is OK
2026-04-12T17:48:18.058 [DEBUG] [Thread-193220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:48:18.067 [DEBUG] [Thread-193220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:48:18.067 [DEBUG] [Thread-193220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:48:18.067 [DEBUG] [Thread-193220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:48:18.091 [INFO] [Thread-193220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:48:18.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:48:18.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:48:18.901 [DEBUG] [Thread-193220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:48:18.901 [DEBUG] [Thread-193220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:48:18.949 [DEBUG] [Thread-193220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:48:18.949 [DEBUG] [Thread-193220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:48:18.958 [DEBUG] [Thread-193220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:48:18.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:48:18.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:48:18.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:48:18.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:48:18.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:48:18.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:48:18.994 [DEBUG] [Thread-193220] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:48:30.286 [DEBUG] [Thread-193222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:45.343 [DEBUG] [Thread-193223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:48.557 [DEBUG] [Thread-193224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:48:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:48:49.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:48:49.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:48:50.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 48, 33), 6.18372, 66.4517, 0.0, 19.337, 14.9934, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:48:50.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:48:33
2026-04-12T17:48:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:48:50.891 [DEBUG] [Thread-193225] [transport.py] [_log()] starting thread (client mode): 0xae5a7d00
2026-04-12T17:48:50.891 [DEBUG] [Thread-193225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:48:50.910 [DEBUG] [Thread-193225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:48:50.910 [INFO] [Thread-193225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:48:50.913 [DEBUG] [Thread-193225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:48:50.913 [DEBUG] [Thread-193225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:48:50.913 [DEBUG] [Thread-193225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:48:50.913 [DEBUG] [Thread-193225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] client lang: <none>
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] server lang: <none>
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] kex follows: False
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] Compression: none
2026-04-12T17:48:50.914 [DEBUG] [Thread-193225] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:48:50.931 [DEBUG] [Thread-193225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:48:50.932 [DEBUG] [Thread-193225] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:48:50.932 [DEBUG] [Thread-193225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:48:50.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:48:50.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:48:50.934 [DEBUG] [Thread-193225] [transport.py] [_log()] userauth is OK
2026-04-12T17:48:50.935 [DEBUG] [Thread-193225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:48:50.935 [DEBUG] [Thread-193225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:48:50.935 [DEBUG] [Thread-193225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:48:50.935 [DEBUG] [Thread-193225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:48:50.952 [INFO] [Thread-193225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:48:50.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:48:51.531 [DEBUG] [Thread-193225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:48:51.531 [DEBUG] [Thread-193225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:48:51.531 [DEBUG] [Thread-193225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:48:51.572 [DEBUG] [Thread-193225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:48:51.572 [DEBUG] [Thread-193225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:48:51.576 [DEBUG] [Thread-193225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:48:51.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:48:51.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:48:51.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:48:51.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:48:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:48:51.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:48:51.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:48:51.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:48:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:48:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.658785 -999.00  +14.50  11.58     71   +9.50 1 2 1 1 1   887    0 5.32 10.18 ----- 11.6 11.6 267.0 18.4 17.1 -24.3 17.0 -22.7 17.2 -21.2 17.7 -23.4
2026-04-12T17:48:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:48:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:48:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.658785
2026-04-12T17:48:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:48:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:48:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:48:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:48:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:48:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:48:33', tmtdew=6.18372, humidity=66.4517, cloud=0.0, wind=19.337, temperature=14.9934, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:48:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:48:51.603 [DEBUG] [Thread-193225] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:48:51.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:48:51.694 [DEBUG] [Thread-193228] [transport.py] [_log()] starting thread (client mode): 0xae5a5b10
2026-04-12T17:48:51.694 [DEBUG] [Thread-193228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:48:51.708 [DEBUG] [Thread-193228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:48:51.709 [INFO] [Thread-193228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:48:51.716 [DEBUG] [Thread-193228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:48:51.717 [DEBUG] [Thread-193228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:48:51.717 [DEBUG] [Thread-193228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:48:51.717 [DEBUG] [Thread-193228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:51.717 [DEBUG] [Thread-193228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:48:51.717 [DEBUG] [Thread-193228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:51.717 [DEBUG] [Thread-193228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:48:51.717 [DEBUG] [Thread-193228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] client lang: <none>
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] server lang: <none>
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] kex follows: False
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] Compression: none
2026-04-12T17:48:51.718 [DEBUG] [Thread-193228] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:48:51.773 [DEBUG] [Thread-193228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:48:51.774 [DEBUG] [Thread-193228] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:48:51.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:48:51.775 [DEBUG] [Thread-193228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:48:51.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:48:51.829 [DEBUG] [Thread-193228] [transport.py] [_log()] userauth is OK
2026-04-12T17:48:51.829 [DEBUG] [Thread-193228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:48:51.830 [DEBUG] [Thread-193228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:48:51.830 [DEBUG] [Thread-193228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:48:51.830 [DEBUG] [Thread-193228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:48:51.849 [INFO] [Thread-193228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:48:51.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:48:51.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:48:52.658 [DEBUG] [Thread-193228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:48:52.658 [DEBUG] [Thread-193228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:48:52.706 [DEBUG] [Thread-193228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:48:52.706 [DEBUG] [Thread-193228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:48:52.715 [DEBUG] [Thread-193228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:48:52.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:48:52.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:48:52.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:48:52.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:48:52.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:48:52.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:48:52.752 [DEBUG] [Thread-193228] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:49:00.380 [DEBUG] [Thread-193230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:49:00.976 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:49:00.978 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:49:15.433 [DEBUG] [Thread-193231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:49:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:49:22.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:49:22.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:49:24.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 49, 8), 6.17356, 66.5767, 0.0, 15.5808, 14.5135, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:49:24.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:49:08
2026-04-12T17:49:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:49:24.648 [DEBUG] [Thread-193232] [transport.py] [_log()] starting thread (client mode): 0xae5a47c0
2026-04-12T17:49:24.648 [DEBUG] [Thread-193232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:49:24.669 [DEBUG] [Thread-193232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:49:24.669 [INFO] [Thread-193232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] client lang: <none>
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] server lang: <none>
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] kex follows: False
2026-04-12T17:49:24.672 [DEBUG] [Thread-193232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:49:24.673 [DEBUG] [Thread-193232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:49:24.673 [DEBUG] [Thread-193232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:49:24.673 [DEBUG] [Thread-193232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:49:24.673 [DEBUG] [Thread-193232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:49:24.673 [DEBUG] [Thread-193232] [transport.py] [_log()] Compression: none
2026-04-12T17:49:24.673 [DEBUG] [Thread-193232] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:49:24.690 [DEBUG] [Thread-193232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:49:24.691 [DEBUG] [Thread-193232] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:49:24.691 [DEBUG] [Thread-193232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:49:24.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:49:24.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:49:24.693 [DEBUG] [Thread-193232] [transport.py] [_log()] userauth is OK
2026-04-12T17:49:24.694 [DEBUG] [Thread-193232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:49:24.694 [DEBUG] [Thread-193232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:49:24.694 [DEBUG] [Thread-193232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:49:24.694 [DEBUG] [Thread-193232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:49:24.712 [INFO] [Thread-193232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:49:24.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:49:25.374 [DEBUG] [Thread-193232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:49:25.375 [DEBUG] [Thread-193232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:49:25.375 [DEBUG] [Thread-193232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:49:25.416 [DEBUG] [Thread-193232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:49:25.416 [DEBUG] [Thread-193232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:49:25.420 [DEBUG] [Thread-193232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:49:25.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:49:25.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:49:25.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:49:25.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:49:25.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:49:25.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:49:25.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:49:25.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:49:25.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:49:25.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.659132 -999.00  +14.50  17.55     72   +9.70 1 2 1 1 1   887    0 5.35 6.46 ----- 17.6 17.6 268.4 21.7 17.1 -24.3 16.9 -22.9 17.2 -20.8 17.6 -23.7
2026-04-12T17:49:25.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:49:25.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:49:25.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.659132
2026-04-12T17:49:25.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:49:25.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:49:25.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:49:25.448 [DEBUG] [Thread-193232] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:49:25.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:49:25.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:49:25.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:49:08', tmtdew=6.17356, humidity=66.5767, cloud=0.0, wind=15.5808, temperature=14.5135, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:49:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:49:25.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:49:25.544 [DEBUG] [Thread-193235] [transport.py] [_log()] starting thread (client mode): 0xae5a6770
2026-04-12T17:49:25.544 [DEBUG] [Thread-193235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:49:25.559 [DEBUG] [Thread-193235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:49:25.559 [INFO] [Thread-193235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] client lang: <none>
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] server lang: <none>
2026-04-12T17:49:25.567 [DEBUG] [Thread-193235] [transport.py] [_log()] kex follows: False
2026-04-12T17:49:25.568 [DEBUG] [Thread-193235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:49:25.568 [DEBUG] [Thread-193235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:49:25.568 [DEBUG] [Thread-193235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:49:25.568 [DEBUG] [Thread-193235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:49:25.568 [DEBUG] [Thread-193235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:49:25.568 [DEBUG] [Thread-193235] [transport.py] [_log()] Compression: none
2026-04-12T17:49:25.568 [DEBUG] [Thread-193235] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:49:25.626 [DEBUG] [Thread-193235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:49:25.626 [DEBUG] [Thread-193235] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:49:25.627 [DEBUG] [Thread-193235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:49:25.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:49:25.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:49:25.682 [DEBUG] [Thread-193235] [transport.py] [_log()] userauth is OK
2026-04-12T17:49:25.682 [DEBUG] [Thread-193235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:49:25.682 [DEBUG] [Thread-193235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:49:25.682 [DEBUG] [Thread-193235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:49:25.682 [DEBUG] [Thread-193235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:49:25.702 [INFO] [Thread-193235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:49:25.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:49:25.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:49:26.513 [DEBUG] [Thread-193235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:49:26.513 [DEBUG] [Thread-193235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:49:26.561 [DEBUG] [Thread-193235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:49:26.561 [DEBUG] [Thread-193235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:49:26.570 [DEBUG] [Thread-193235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:49:26.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:49:26.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:49:26.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:49:26.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:49:26.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:49:26.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:49:26.607 [DEBUG] [Thread-193235] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:49:30.472 [DEBUG] [Thread-193237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:49:45.527 [DEBUG] [Thread-193238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:49:48.597 [DEBUG] [Thread-193239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:49:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:49:56.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:49:56.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:49:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 49, 44), 6.19498, 66.3521, 0.0, 14.6095, 14.7613, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:49:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:49:44
2026-04-12T17:49:58.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:49:58.461 [DEBUG] [Thread-193240] [transport.py] [_log()] starting thread (client mode): 0xae5a5d80
2026-04-12T17:49:58.461 [DEBUG] [Thread-193240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:49:58.482 [DEBUG] [Thread-193240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:49:58.482 [INFO] [Thread-193240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:49:58.485 [DEBUG] [Thread-193240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:49:58.485 [DEBUG] [Thread-193240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:49:58.485 [DEBUG] [Thread-193240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:49:58.485 [DEBUG] [Thread-193240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] client lang: <none>
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] server lang: <none>
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] kex follows: False
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:49:58.486 [DEBUG] [Thread-193240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:49:58.487 [DEBUG] [Thread-193240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:49:58.487 [DEBUG] [Thread-193240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:49:58.487 [DEBUG] [Thread-193240] [transport.py] [_log()] Compression: none
2026-04-12T17:49:58.487 [DEBUG] [Thread-193240] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:49:58.507 [DEBUG] [Thread-193240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:49:58.507 [DEBUG] [Thread-193240] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:49:58.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:49:58.509 [DEBUG] [Thread-193240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:49:58.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:49:58.511 [DEBUG] [Thread-193240] [transport.py] [_log()] userauth is OK
2026-04-12T17:49:58.512 [DEBUG] [Thread-193240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:49:58.512 [DEBUG] [Thread-193240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:49:58.512 [DEBUG] [Thread-193240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:49:58.512 [DEBUG] [Thread-193240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:49:58.549 [INFO] [Thread-193240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:49:58.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:49:59.181 [DEBUG] [Thread-193240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:49:59.182 [DEBUG] [Thread-193240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:49:59.182 [DEBUG] [Thread-193240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:49:59.222 [DEBUG] [Thread-193240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:49:59.222 [DEBUG] [Thread-193240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:49:59.225 [DEBUG] [Thread-193240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:49:59.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:49:59.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:49:59.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:49:59.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:49:59.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:49:59.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:49:59.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:49:59.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:49:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:49:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.659479 -999.00  +14.50  11.09     72   +9.60 1 2 1 1 1   887    0 5.17 2.90 ----- 11.1 11.1 260.0 15.8 17.1 -24.4 16.9 -22.8 17.2 -20.9 17.6 -23.4
2026-04-12T17:49:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:49:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:49:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.659479
2026-04-12T17:49:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:49:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:49:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:49:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:49:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:49:59.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:49:44', tmtdew=6.19498, humidity=66.3521, cloud=0.0, wind=14.6095, temperature=14.7613, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:49:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:49:59.254 [DEBUG] [Thread-193240] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:49:59.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:49:59.351 [DEBUG] [Thread-193243] [transport.py] [_log()] starting thread (client mode): 0xb0f41510
2026-04-12T17:49:59.351 [DEBUG] [Thread-193243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:49:59.365 [DEBUG] [Thread-193243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:49:59.365 [INFO] [Thread-193243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:49:59.373 [DEBUG] [Thread-193243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] client lang: <none>
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] server lang: <none>
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] kex follows: False
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] Compression: none
2026-04-12T17:49:59.374 [DEBUG] [Thread-193243] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:49:59.434 [DEBUG] [Thread-193243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:49:59.434 [DEBUG] [Thread-193243] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:49:59.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:49:59.435 [DEBUG] [Thread-193243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:49:59.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:49:59.490 [DEBUG] [Thread-193243] [transport.py] [_log()] userauth is OK
2026-04-12T17:49:59.490 [DEBUG] [Thread-193243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:49:59.490 [DEBUG] [Thread-193243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:49:59.490 [DEBUG] [Thread-193243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:49:59.490 [DEBUG] [Thread-193243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:49:59.508 [INFO] [Thread-193243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:49:59.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:49:59.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:50:00.320 [DEBUG] [Thread-193243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:50:00.320 [DEBUG] [Thread-193243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:50:00.369 [DEBUG] [Thread-193243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:50:00.369 [DEBUG] [Thread-193243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:50:00.382 [DEBUG] [Thread-193243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:50:00.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:50:00.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:50:00.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
2026-04-12T17:50:00.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:50:00.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:50:00.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:50:00.421 [DEBUG] [Thread-193243] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:50:00.564 [DEBUG] [Thread-193245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:50:01.120 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:50:01.121 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:50:15.616 [DEBUG] [Thread-193246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:50:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:50:30.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:50:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:50:30.653 [DEBUG] [Thread-193247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:50:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 50, 20), 6.07128, 67.0406, 0.0, 15.6866, 14.5301, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:50:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:50:20
2026-04-12T17:50:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:50:32.244 [DEBUG] [Thread-193248] [transport.py] [_log()] starting thread (client mode): 0xa7939f60
2026-04-12T17:50:32.245 [DEBUG] [Thread-193248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:50:32.264 [DEBUG] [Thread-193248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:50:32.264 [INFO] [Thread-193248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] client lang: <none>
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] server lang: <none>
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] kex follows: False
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:50:32.267 [DEBUG] [Thread-193248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:50:32.268 [DEBUG] [Thread-193248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:50:32.268 [DEBUG] [Thread-193248] [transport.py] [_log()] Compression: none
2026-04-12T17:50:32.268 [DEBUG] [Thread-193248] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:50:32.283 [DEBUG] [Thread-193248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:50:32.283 [DEBUG] [Thread-193248] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:50:32.284 [DEBUG] [Thread-193248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:50:32.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:50:32.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:50:32.285 [DEBUG] [Thread-193248] [transport.py] [_log()] userauth is OK
2026-04-12T17:50:32.285 [DEBUG] [Thread-193248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:50:32.286 [DEBUG] [Thread-193248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:50:32.286 [DEBUG] [Thread-193248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:50:32.286 [DEBUG] [Thread-193248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:50:32.303 [INFO] [Thread-193248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:50:32.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:50:35.317 [DEBUG] [Thread-193248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:50:35.317 [DEBUG] [Thread-193248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:50:35.317 [DEBUG] [Thread-193248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:50:35.358 [DEBUG] [Thread-193248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:50:35.358 [DEBUG] [Thread-193248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:50:35.361 [DEBUG] [Thread-193248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:50:35.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:50:35.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:50:35.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:50:35.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:50:35.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:50:35.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:50:35.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:50:35.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:50:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:50:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.659479 -999.00  +14.50  11.09     72   +9.60 1 2 1 1 1   887    0 5.17 2.90 ----- 11.1 11.1 260.0 15.8 17.1 -24.4 16.9 -22.8 17.2 -20.9 17.6 -23.4
2026-04-12T17:50:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:50:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:50:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.659479
2026-04-12T17:50:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:50:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:50:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:50:35.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:50:35.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:50:35.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:50:20', tmtdew=6.07128, humidity=67.0406, cloud=0.0, wind=15.6866, temperature=14.5301, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:49:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:50:35.587 [DEBUG] [Thread-193248] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:50:35.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:50:35.687 [DEBUG] [Thread-193251] [transport.py] [_log()] starting thread (client mode): 0xae5198a0
2026-04-12T17:50:35.687 [DEBUG] [Thread-193251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:50:35.702 [DEBUG] [Thread-193251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:50:35.702 [INFO] [Thread-193251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] client lang: <none>
2026-04-12T17:50:35.709 [DEBUG] [Thread-193251] [transport.py] [_log()] server lang: <none>
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] kex follows: False
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] Compression: none
2026-04-12T17:50:35.710 [DEBUG] [Thread-193251] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:50:35.768 [DEBUG] [Thread-193251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:50:35.769 [DEBUG] [Thread-193251] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:50:35.769 [DEBUG] [Thread-193251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:50:35.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:50:35.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:50:35.825 [DEBUG] [Thread-193251] [transport.py] [_log()] userauth is OK
2026-04-12T17:50:35.825 [DEBUG] [Thread-193251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:50:35.825 [DEBUG] [Thread-193251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:50:35.825 [DEBUG] [Thread-193251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:50:35.825 [DEBUG] [Thread-193251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:50:35.843 [INFO] [Thread-193251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:50:35.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:50:35.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:50:36.664 [DEBUG] [Thread-193251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:50:36.664 [DEBUG] [Thread-193251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:50:36.717 [DEBUG] [Thread-193251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:50:36.717 [DEBUG] [Thread-193251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:50:36.729 [DEBUG] [Thread-193251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:50:36.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:50:36.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:50:36.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:50:36.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:50:36.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:50:36.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:50:36.777 [DEBUG] [Thread-193251] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:50:45.688 [DEBUG] [Thread-193253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:50:48.652 [DEBUG] [Thread-193254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:51:00.740 [DEBUG] [Thread-193255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:51:01.260 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:51:01.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:51:06.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:51:06.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:51:06.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:51:08.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 50, 55), 6.00881, 67.0903, 0.0, 14.5048, 14.4969, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:51:08.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:50:55
2026-04-12T17:51:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:51:08.569 [DEBUG] [Thread-193256] [transport.py] [_log()] starting thread (client mode): 0xb0f6c8e0
2026-04-12T17:51:08.569 [DEBUG] [Thread-193256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:51:08.591 [DEBUG] [Thread-193256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:51:08.591 [INFO] [Thread-193256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:51:08.595 [DEBUG] [Thread-193256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:51:08.596 [DEBUG] [Thread-193256] [transport.py] [_log()] client lang: <none>
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] server lang: <none>
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] kex follows: False
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] Compression: none
2026-04-12T17:51:08.597 [DEBUG] [Thread-193256] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:51:08.616 [DEBUG] [Thread-193256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:51:08.616 [DEBUG] [Thread-193256] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:51:08.617 [DEBUG] [Thread-193256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:51:08.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:51:08.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:51:08.619 [DEBUG] [Thread-193256] [transport.py] [_log()] userauth is OK
2026-04-12T17:51:08.619 [DEBUG] [Thread-193256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:51:08.619 [DEBUG] [Thread-193256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:51:08.619 [DEBUG] [Thread-193256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:51:08.619 [DEBUG] [Thread-193256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:51:08.637 [INFO] [Thread-193256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:51:08.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:51:09.348 [DEBUG] [Thread-193256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:51:09.348 [DEBUG] [Thread-193256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:51:09.349 [DEBUG] [Thread-193256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:51:09.388 [DEBUG] [Thread-193256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:51:09.389 [DEBUG] [Thread-193256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:51:09.391 [DEBUG] [Thread-193256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:51:09.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:51:09.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:51:09.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:51:09.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:51:09.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:51:09.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:51:09.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:51:09.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:51:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:51:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.660174 -999.00  +14.40  13.54     72   +9.50 1 2 1 1 1   887    0 5.01 -2.88 ----- 13.5 13.5 267.6 17.4 17.0 -24.5 16.8 -22.8 17.1 -22.2 17.6 -23.4
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.660174
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:51:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:50:55', tmtdew=6.00881, humidity=67.0903, cloud=0.0, wind=14.5048, temperature=14.4969, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:50:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:51:09.407 [DEBUG] [Thread-193256] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:51:09.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:51:09.489 [DEBUG] [Thread-193259] [transport.py] [_log()] starting thread (client mode): 0xb0f6c100
2026-04-12T17:51:09.489 [DEBUG] [Thread-193259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:51:09.503 [DEBUG] [Thread-193259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:51:09.503 [INFO] [Thread-193259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:51:09.511 [DEBUG] [Thread-193259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:51:09.511 [DEBUG] [Thread-193259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:51:09.511 [DEBUG] [Thread-193259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] client lang: <none>
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] server lang: <none>
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] kex follows: False
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] Compression: none
2026-04-12T17:51:09.512 [DEBUG] [Thread-193259] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:51:09.569 [DEBUG] [Thread-193259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:51:09.570 [DEBUG] [Thread-193259] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:51:09.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:51:09.571 [DEBUG] [Thread-193259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:51:09.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:51:09.626 [DEBUG] [Thread-193259] [transport.py] [_log()] userauth is OK
2026-04-12T17:51:09.626 [DEBUG] [Thread-193259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:51:09.626 [DEBUG] [Thread-193259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:51:09.626 [DEBUG] [Thread-193259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:51:09.626 [DEBUG] [Thread-193259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:51:09.645 [INFO] [Thread-193259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:51:09.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:51:09.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:51:10.475 [DEBUG] [Thread-193259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:51:10.475 [DEBUG] [Thread-193259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:51:10.522 [DEBUG] [Thread-193259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:51:10.523 [DEBUG] [Thread-193259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:51:10.531 [DEBUG] [Thread-193259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:51:10.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:51:10.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:51:10.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:51:10.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:51:10.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:51:10.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:51:10.564 [DEBUG] [Thread-193259] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:51:15.775 [DEBUG] [Thread-193261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:51:30.828 [DEBUG] [Thread-193262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:51:40.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:51:40.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:51:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:51:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 51, 31), 5.93106, 67.4549, 0.0, 13.5698, 14.5466, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:51:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:51:31
2026-04-12T17:51:42.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:51:42.415 [DEBUG] [Thread-193263] [transport.py] [_log()] starting thread (client mode): 0xae5a5db0
2026-04-12T17:51:42.415 [DEBUG] [Thread-193263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:51:42.432 [DEBUG] [Thread-193263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:51:42.432 [INFO] [Thread-193263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] client lang: <none>
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] server lang: <none>
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] kex follows: False
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:51:42.434 [DEBUG] [Thread-193263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:51:42.435 [DEBUG] [Thread-193263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:51:42.435 [DEBUG] [Thread-193263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:51:42.435 [DEBUG] [Thread-193263] [transport.py] [_log()] Compression: none
2026-04-12T17:51:42.435 [DEBUG] [Thread-193263] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:51:42.448 [DEBUG] [Thread-193263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:51:42.448 [DEBUG] [Thread-193263] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:51:42.449 [DEBUG] [Thread-193263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:51:42.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:51:42.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:51:42.450 [DEBUG] [Thread-193263] [transport.py] [_log()] userauth is OK
2026-04-12T17:51:42.451 [DEBUG] [Thread-193263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:51:42.451 [DEBUG] [Thread-193263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:51:42.451 [DEBUG] [Thread-193263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:51:42.451 [DEBUG] [Thread-193263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:51:42.486 [INFO] [Thread-193263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:51:42.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:51:43.084 [DEBUG] [Thread-193263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:51:43.085 [DEBUG] [Thread-193263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:51:43.085 [DEBUG] [Thread-193263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:51:43.127 [DEBUG] [Thread-193263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:51:43.127 [DEBUG] [Thread-193263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:51:43.130 [DEBUG] [Thread-193263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:51:43.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:51:43.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:51:43.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:51:43.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:51:43.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:51:43.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:51:43.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:51:43.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:51:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:51:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.660521 -999.00  +14.40  13.29     72   +9.60 1 2 1 1 1   887    0 4.87 -5.40 ----- 13.3 13.3 263.2 14.3 17.0 -24.4 16.9 -22.6 17.1 -20.8 17.6 -23.4
2026-04-12T17:51:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:51:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:51:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.660521
2026-04-12T17:51:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:51:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:51:43.155 [DEBUG] [Thread-193263] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:51:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:51:43.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:51:43.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:51:43.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:51:31', tmtdew=5.93106, humidity=67.4549, cloud=0.0, wind=13.5698, temperature=14.5466, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:51:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:51:43.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:51:43.249 [DEBUG] [Thread-193266] [transport.py] [_log()] starting thread (client mode): 0xae51ae90
2026-04-12T17:51:43.249 [DEBUG] [Thread-193266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:51:43.263 [DEBUG] [Thread-193266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:51:43.263 [INFO] [Thread-193266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:51:43.271 [DEBUG] [Thread-193266] [transport.py] [_log()] client lang: <none>
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] server lang: <none>
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] kex follows: False
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] Compression: none
2026-04-12T17:51:43.272 [DEBUG] [Thread-193266] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:51:43.330 [DEBUG] [Thread-193266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:51:43.330 [DEBUG] [Thread-193266] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:51:43.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:51:43.331 [DEBUG] [Thread-193266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:51:43.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:51:43.390 [DEBUG] [Thread-193266] [transport.py] [_log()] userauth is OK
2026-04-12T17:51:43.390 [DEBUG] [Thread-193266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:51:43.390 [DEBUG] [Thread-193266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:51:43.390 [DEBUG] [Thread-193266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:51:43.391 [DEBUG] [Thread-193266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:51:43.409 [INFO] [Thread-193266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:51:43.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:51:43.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:51:44.207 [DEBUG] [Thread-193266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:51:44.208 [DEBUG] [Thread-193266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:51:44.256 [DEBUG] [Thread-193266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:51:44.256 [DEBUG] [Thread-193266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:51:44.265 [DEBUG] [Thread-193266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:51:44.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:51:44.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:51:44.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:51:44.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:51:44.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:51:44.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:51:44.303 [DEBUG] [Thread-193266] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:51:45.866 [DEBUG] [Thread-193268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:51:48.696 [DEBUG] [Thread-193269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:00.917 [DEBUG] [Thread-193270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:01.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:01.403 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:14.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:52:14.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:52:14.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:52:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 52, 7), 5.94992, 67.372, 0.0, 15.669, 14.5632, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:52:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:52:07
2026-04-12T17:52:15.957 [DEBUG] [Thread-193271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:52:16.139 [DEBUG] [Thread-193272] [transport.py] [_log()] starting thread (client mode): 0xae52f4f0
2026-04-12T17:52:16.139 [DEBUG] [Thread-193272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:52:16.158 [DEBUG] [Thread-193272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:52:16.158 [INFO] [Thread-193272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:52:16.161 [DEBUG] [Thread-193272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:52:16.161 [DEBUG] [Thread-193272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:52:16.161 [DEBUG] [Thread-193272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] client lang: <none>
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] server lang: <none>
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] kex follows: False
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:52:16.162 [DEBUG] [Thread-193272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:52:16.163 [DEBUG] [Thread-193272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:52:16.163 [DEBUG] [Thread-193272] [transport.py] [_log()] Compression: none
2026-04-12T17:52:16.163 [DEBUG] [Thread-193272] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:52:16.182 [DEBUG] [Thread-193272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:52:16.183 [DEBUG] [Thread-193272] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:52:16.183 [DEBUG] [Thread-193272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:52:16.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:52:16.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:52:16.225 [DEBUG] [Thread-193272] [transport.py] [_log()] userauth is OK
2026-04-12T17:52:16.225 [DEBUG] [Thread-193272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:52:16.225 [DEBUG] [Thread-193272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:52:16.226 [DEBUG] [Thread-193272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:52:16.226 [DEBUG] [Thread-193272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:52:16.245 [INFO] [Thread-193272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:52:16.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:52:16.851 [DEBUG] [Thread-193272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:52:16.851 [DEBUG] [Thread-193272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:52:16.851 [DEBUG] [Thread-193272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:52:16.892 [DEBUG] [Thread-193272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:52:16.892 [DEBUG] [Thread-193272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:52:16.896 [DEBUG] [Thread-193272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:52:16.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:52:16.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:52:16.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:52:16.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:52:16.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:52:16.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:52:16.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:52:16.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:52:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:52:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.661215 -999.00  +14.30   9.77     73   +9.60 1 2 1 1 1   887    0 4.78 -10.98 ----- 9.8 9.8 277.4 20.2 16.9 -24.8 16.8 -22.9 16.9 -21.6 17.4 -23.5
2026-04-12T17:52:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:52:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:52:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.661215
2026-04-12T17:52:16.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:52:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:52:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:52:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:52:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:52:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:52:07', tmtdew=5.94992, humidity=67.372, cloud=0.0, wind=15.669, temperature=14.5632, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:52:08.976', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:52:16.922 [DEBUG] [Thread-193272] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:52:17.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:52:17.016 [DEBUG] [Thread-193275] [transport.py] [_log()] starting thread (client mode): 0xae519960
2026-04-12T17:52:17.016 [DEBUG] [Thread-193275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:52:17.031 [DEBUG] [Thread-193275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:52:17.031 [INFO] [Thread-193275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:52:17.039 [DEBUG] [Thread-193275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:52:17.039 [DEBUG] [Thread-193275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:52:17.039 [DEBUG] [Thread-193275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:52:17.039 [DEBUG] [Thread-193275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:17.039 [DEBUG] [Thread-193275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] client lang: <none>
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] server lang: <none>
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] kex follows: False
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:52:17.040 [DEBUG] [Thread-193275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:52:17.041 [DEBUG] [Thread-193275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:52:17.041 [DEBUG] [Thread-193275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:52:17.041 [DEBUG] [Thread-193275] [transport.py] [_log()] Compression: none
2026-04-12T17:52:17.041 [DEBUG] [Thread-193275] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:52:17.098 [DEBUG] [Thread-193275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:52:17.099 [DEBUG] [Thread-193275] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:52:17.099 [DEBUG] [Thread-193275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:52:17.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:52:17.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:52:17.154 [DEBUG] [Thread-193275] [transport.py] [_log()] userauth is OK
2026-04-12T17:52:17.154 [DEBUG] [Thread-193275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:52:17.154 [DEBUG] [Thread-193275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:52:17.154 [DEBUG] [Thread-193275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:52:17.154 [DEBUG] [Thread-193275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:52:17.173 [INFO] [Thread-193275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:52:17.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:52:17.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:52:17.984 [DEBUG] [Thread-193275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:52:17.984 [DEBUG] [Thread-193275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:52:18.031 [DEBUG] [Thread-193275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:52:18.031 [DEBUG] [Thread-193275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:52:18.040 [DEBUG] [Thread-193275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:52:18.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:52:18.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:52:18.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:52:18.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:52:18.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:52:18.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:52:18.074 [DEBUG] [Thread-193275] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:52:30.995 [DEBUG] [Thread-193277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:46.053 [DEBUG] [Thread-193278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:48.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:52:48.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:52:48.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:52:48.733 [DEBUG] [Thread-193279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:52:49.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 52, 7), 5.94992, 67.372, 0.0, 15.669, 14.5632, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:52:49.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:52:07
2026-04-12T17:52:49.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:52:49.980 [DEBUG] [Thread-193280] [transport.py] [_log()] starting thread (client mode): 0xae52dc30
2026-04-12T17:52:49.980 [DEBUG] [Thread-193280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:52:49.994 [DEBUG] [Thread-193280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:52:49.994 [INFO] [Thread-193280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] client lang: <none>
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] server lang: <none>
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] kex follows: False
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] Compression: none
2026-04-12T17:52:49.996 [DEBUG] [Thread-193280] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:52:50.004 [DEBUG] [Thread-193280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:52:50.004 [DEBUG] [Thread-193280] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:52:50.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:52:50.004 [DEBUG] [Thread-193280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:52:50.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:52:50.006 [DEBUG] [Thread-193280] [transport.py] [_log()] userauth is OK
2026-04-12T17:52:50.006 [DEBUG] [Thread-193280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:52:50.006 [DEBUG] [Thread-193280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:52:50.006 [DEBUG] [Thread-193280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:52:50.006 [DEBUG] [Thread-193280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:52:50.021 [INFO] [Thread-193280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:52:50.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:52:50.599 [DEBUG] [Thread-193280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:52:50.600 [DEBUG] [Thread-193280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:52:50.600 [DEBUG] [Thread-193280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:52:50.640 [DEBUG] [Thread-193280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:52:50.640 [DEBUG] [Thread-193280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:52:50.644 [DEBUG] [Thread-193280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:52:50.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:52:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:52:50.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:52:50.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:52:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:52:50.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:52:50.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:52:50.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:52:50.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:52:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.661563 -999.00  +14.40  12.79     72   +9.50 1 2 1 1 1   887    0 4.73 -13.43 ----- 12.8 12.8 267.2 16.1 16.9 -24.0 16.8 -22.8 17.0 -20.7 17.4 -23.3
2026-04-12T17:52:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:52:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:52:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.661563
2026-04-12T17:52:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:52:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:52:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:52:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:52:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:52:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:52:07', tmtdew=5.94992, humidity=67.372, cloud=0.0, wind=15.669, temperature=14.5632, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:52:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:52:50.668 [DEBUG] [Thread-193280] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:52:50.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:52:50.763 [DEBUG] [Thread-193283] [transport.py] [_log()] starting thread (client mode): 0xae518fa0
2026-04-12T17:52:50.763 [DEBUG] [Thread-193283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:52:50.777 [DEBUG] [Thread-193283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:52:50.778 [INFO] [Thread-193283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:52:50.785 [DEBUG] [Thread-193283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:52:50.785 [DEBUG] [Thread-193283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:52:50.785 [DEBUG] [Thread-193283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:52:50.785 [DEBUG] [Thread-193283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] client lang: <none>
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] server lang: <none>
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] kex follows: False
2026-04-12T17:52:50.786 [DEBUG] [Thread-193283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:52:50.787 [DEBUG] [Thread-193283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:52:50.787 [DEBUG] [Thread-193283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:52:50.787 [DEBUG] [Thread-193283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:52:50.787 [DEBUG] [Thread-193283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:52:50.787 [DEBUG] [Thread-193283] [transport.py] [_log()] Compression: none
2026-04-12T17:52:50.787 [DEBUG] [Thread-193283] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:52:50.850 [DEBUG] [Thread-193283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:52:50.851 [DEBUG] [Thread-193283] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:52:50.851 [DEBUG] [Thread-193283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:52:50.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:52:50.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:52:50.912 [DEBUG] [Thread-193283] [transport.py] [_log()] userauth is OK
2026-04-12T17:52:50.912 [DEBUG] [Thread-193283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:52:50.912 [DEBUG] [Thread-193283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:52:50.912 [DEBUG] [Thread-193283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:52:50.913 [DEBUG] [Thread-193283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:52:50.931 [INFO] [Thread-193283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:52:50.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:52:50.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:52:51.776 [DEBUG] [Thread-193283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:52:51.776 [DEBUG] [Thread-193283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:52:51.824 [DEBUG] [Thread-193283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:52:51.824 [DEBUG] [Thread-193283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:52:51.836 [DEBUG] [Thread-193283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:52:51.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:52:51.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:52:51.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:52:51.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:52:51.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:52:51.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:52:51.873 [DEBUG] [Thread-193283] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:53:01.090 [DEBUG] [Thread-193285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:53:01.542 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:53:01.543 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:53:16.139 [DEBUG] [Thread-193286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:53:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:53:21.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:53:21.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:53:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 52, 42), 5.88962, 67.7772, 0.0, 18.0317, 14.96, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:53:23.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:52:42
2026-04-12T17:53:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:53:23.741 [DEBUG] [Thread-193287] [transport.py] [_log()] starting thread (client mode): 0xae52ca30
2026-04-12T17:53:23.741 [DEBUG] [Thread-193287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:53:23.761 [DEBUG] [Thread-193287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:53:23.761 [INFO] [Thread-193287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:53:23.764 [DEBUG] [Thread-193287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] client lang: <none>
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] server lang: <none>
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] kex follows: False
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] Compression: none
2026-04-12T17:53:23.765 [DEBUG] [Thread-193287] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:53:23.780 [DEBUG] [Thread-193287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:53:23.781 [DEBUG] [Thread-193287] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:53:23.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:53:23.782 [DEBUG] [Thread-193287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:53:23.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:53:23.784 [DEBUG] [Thread-193287] [transport.py] [_log()] userauth is OK
2026-04-12T17:53:23.784 [DEBUG] [Thread-193287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:53:23.784 [DEBUG] [Thread-193287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:53:23.785 [DEBUG] [Thread-193287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:53:23.785 [DEBUG] [Thread-193287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:53:23.799 [INFO] [Thread-193287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:53:23.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:53:24.442 [DEBUG] [Thread-193287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:53:24.443 [DEBUG] [Thread-193287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:53:24.443 [DEBUG] [Thread-193287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:53:24.483 [DEBUG] [Thread-193287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:53:24.483 [DEBUG] [Thread-193287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:53:24.487 [DEBUG] [Thread-193287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:53:24.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:53:24.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:53:24.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:53:24.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:53:24.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:53:24.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:53:24.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:53:24.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:53:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:53:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.661910 -999.00  +14.40   8.65     73   +9.60 1 2 1 1 1   887    0 4.58 -17.41 ----- 8.7 8.7 277.6 16.4 16.9 -24.0 16.8 -22.6 16.9 -20.7 17.4 -22.9
2026-04-12T17:53:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:53:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:53:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.661910
2026-04-12T17:53:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:53:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:53:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:53:24.511 [DEBUG] [Thread-193287] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:53:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:53:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:53:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:52:42', tmtdew=5.88962, humidity=67.7772, cloud=0.0, wind=18.0317, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:53:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:53:24.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:53:24.604 [DEBUG] [Thread-193290] [transport.py] [_log()] starting thread (client mode): 0xae519240
2026-04-12T17:53:24.604 [DEBUG] [Thread-193290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:53:24.619 [DEBUG] [Thread-193290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:53:24.619 [INFO] [Thread-193290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:53:24.626 [DEBUG] [Thread-193290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:53:24.626 [DEBUG] [Thread-193290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:53:24.626 [DEBUG] [Thread-193290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:53:24.626 [DEBUG] [Thread-193290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] client lang: <none>
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] server lang: <none>
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] kex follows: False
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] Compression: none
2026-04-12T17:53:24.627 [DEBUG] [Thread-193290] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:53:24.685 [DEBUG] [Thread-193290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:53:24.686 [DEBUG] [Thread-193290] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:53:24.686 [DEBUG] [Thread-193290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:53:24.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:53:24.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:53:24.741 [DEBUG] [Thread-193290] [transport.py] [_log()] userauth is OK
2026-04-12T17:53:24.742 [DEBUG] [Thread-193290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:53:24.742 [DEBUG] [Thread-193290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:53:24.742 [DEBUG] [Thread-193290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:53:24.742 [DEBUG] [Thread-193290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:53:24.755 [INFO] [Thread-193290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:53:24.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:53:24.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:53:25.586 [DEBUG] [Thread-193290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:53:25.587 [DEBUG] [Thread-193290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:53:25.635 [DEBUG] [Thread-193290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:53:25.635 [DEBUG] [Thread-193290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:53:25.644 [DEBUG] [Thread-193290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:53:25.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:53:25.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:53:25.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:53:25.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:53:25.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:53:25.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:53:25.681 [DEBUG] [Thread-193290] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:53:31.176 [DEBUG] [Thread-193292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:53:46.231 [DEBUG] [Thread-193293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:53:48.779 [DEBUG] [Thread-193294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:53:55.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:53:55.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:53:55.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:53:56.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 53, 18), 5.92387, 67.256, 0.0, 16.0394, 14.48, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:53:56.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:53:18
2026-04-12T17:53:57.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:53:57.458 [DEBUG] [Thread-193295] [transport.py] [_log()] starting thread (client mode): 0xb0fcf190
2026-04-12T17:53:57.458 [DEBUG] [Thread-193295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:53:57.478 [DEBUG] [Thread-193295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:53:57.478 [INFO] [Thread-193295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:53:57.481 [DEBUG] [Thread-193295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] client lang: <none>
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] server lang: <none>
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] kex follows: False
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:53:57.482 [DEBUG] [Thread-193295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:53:57.483 [DEBUG] [Thread-193295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:53:57.483 [DEBUG] [Thread-193295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:53:57.483 [DEBUG] [Thread-193295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:53:57.483 [DEBUG] [Thread-193295] [transport.py] [_log()] Compression: none
2026-04-12T17:53:57.483 [DEBUG] [Thread-193295] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:53:57.500 [DEBUG] [Thread-193295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:53:57.501 [DEBUG] [Thread-193295] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:53:57.501 [DEBUG] [Thread-193295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:53:57.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:53:57.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:53:57.503 [DEBUG] [Thread-193295] [transport.py] [_log()] userauth is OK
2026-04-12T17:53:57.504 [DEBUG] [Thread-193295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:53:57.504 [DEBUG] [Thread-193295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:53:57.504 [DEBUG] [Thread-193295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:53:57.504 [DEBUG] [Thread-193295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:53:57.529 [INFO] [Thread-193295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:53:57.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:53:58.166 [DEBUG] [Thread-193295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:53:58.166 [DEBUG] [Thread-193295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:53:58.166 [DEBUG] [Thread-193295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:53:58.207 [DEBUG] [Thread-193295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:53:58.207 [DEBUG] [Thread-193295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:53:58.211 [DEBUG] [Thread-193295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:53:58.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:53:58.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:53:58.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:53:58.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:53:58.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:53:58.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:53:58.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:53:58.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:53:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:53:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.662257 -999.00  +14.40   8.01     73   +9.70 1 2 1 1 1   887    0 4.38 -19.88 ----- 8.0 8.0 260.6 11.8 16.9 -24.0 16.8 -22.7 16.9 -20.5 17.4 -23.2
2026-04-12T17:53:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:53:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:53:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.662257
2026-04-12T17:53:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:53:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:53:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:53:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:53:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:53:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:53:18', tmtdew=5.92387, humidity=67.256, cloud=0.0, wind=16.0394, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:53:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:53:58.238 [DEBUG] [Thread-193295] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:53:58.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:53:58.333 [DEBUG] [Thread-193298] [transport.py] [_log()] starting thread (client mode): 0xae52fbe0
2026-04-12T17:53:58.333 [DEBUG] [Thread-193298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:53:58.349 [DEBUG] [Thread-193298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:53:58.349 [INFO] [Thread-193298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:53:58.357 [DEBUG] [Thread-193298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:53:58.357 [DEBUG] [Thread-193298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:53:58.357 [DEBUG] [Thread-193298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:53:58.357 [DEBUG] [Thread-193298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:58.357 [DEBUG] [Thread-193298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:53:58.357 [DEBUG] [Thread-193298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] client lang: <none>
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] server lang: <none>
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] kex follows: False
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] Compression: none
2026-04-12T17:53:58.358 [DEBUG] [Thread-193298] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:53:58.418 [DEBUG] [Thread-193298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:53:58.418 [DEBUG] [Thread-193298] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:53:58.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:53:58.420 [DEBUG] [Thread-193298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:53:58.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:53:58.475 [DEBUG] [Thread-193298] [transport.py] [_log()] userauth is OK
2026-04-12T17:53:58.475 [DEBUG] [Thread-193298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:53:58.475 [DEBUG] [Thread-193298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:53:58.475 [DEBUG] [Thread-193298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:53:58.475 [DEBUG] [Thread-193298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:53:58.500 [INFO] [Thread-193298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:53:58.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:53:58.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:53:59.335 [DEBUG] [Thread-193298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:53:59.335 [DEBUG] [Thread-193298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:53:59.383 [DEBUG] [Thread-193298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:53:59.383 [DEBUG] [Thread-193298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:53:59.393 [DEBUG] [Thread-193298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:53:59.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:53:59.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:53:59.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:53:59.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:53:59.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:53:59.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:53:59.430 [DEBUG] [Thread-193298] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:54:01.266 [DEBUG] [Thread-193300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:54:01.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:54:01.686 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:54:16.315 [DEBUG] [Thread-193301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:54:29.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:54:29.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:54:29.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:54:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 53, 53), 5.96658, 67.4125, 0.0, 16.691, 14.8937, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:54:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:53:53
2026-04-12T17:54:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:54:31.314 [DEBUG] [Thread-193302] [transport.py] [_log()] starting thread (client mode): 0xb0f42710
2026-04-12T17:54:31.314 [DEBUG] [Thread-193302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:54:31.335 [DEBUG] [Thread-193302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:54:31.335 [INFO] [Thread-193302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] client lang: <none>
2026-04-12T17:54:31.339 [DEBUG] [Thread-193302] [transport.py] [_log()] server lang: <none>
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] kex follows: False
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] Compression: none
2026-04-12T17:54:31.340 [DEBUG] [Thread-193302] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:54:31.356 [DEBUG] [Thread-193304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:54:31.358 [DEBUG] [Thread-193302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:54:31.359 [DEBUG] [Thread-193302] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:54:31.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:54:31.360 [DEBUG] [Thread-193302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:54:31.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:54:31.362 [DEBUG] [Thread-193302] [transport.py] [_log()] userauth is OK
2026-04-12T17:54:31.362 [DEBUG] [Thread-193302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:54:31.362 [DEBUG] [Thread-193302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:54:31.362 [DEBUG] [Thread-193302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:54:31.363 [DEBUG] [Thread-193302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:54:31.380 [INFO] [Thread-193302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:54:31.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:54:32.034 [DEBUG] [Thread-193302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:54:32.035 [DEBUG] [Thread-193302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:54:32.035 [DEBUG] [Thread-193302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:54:32.075 [DEBUG] [Thread-193302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:54:32.075 [DEBUG] [Thread-193302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:54:32.078 [DEBUG] [Thread-193302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:54:32.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:54:32.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:54:32.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:54:32.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:54:32.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:54:32.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:54:32.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:54:32.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:54:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:54:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.662604 -999.00  +14.40   9.40     73   +9.70 1 2 1 1 1   887    0 4.47 -20.99 ----- 9.4 9.4 268.2 15.4 16.9 -24.0 16.7 -22.6 16.9 -20.7 17.4 -23.1
2026-04-12T17:54:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:54:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:54:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.662604
2026-04-12T17:54:32.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:54:32.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:54:32.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:54:32.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:54:32.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:54:32.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:53:53', tmtdew=5.96658, humidity=67.4125, cloud=0.0, wind=16.691, temperature=14.8937, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:54:08.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:54:32.108 [DEBUG] [Thread-193302] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:54:32.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:54:32.206 [DEBUG] [Thread-193306] [transport.py] [_log()] starting thread (client mode): 0xae5a5690
2026-04-12T17:54:32.206 [DEBUG] [Thread-193306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:54:32.223 [DEBUG] [Thread-193306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:54:32.223 [INFO] [Thread-193306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:54:32.230 [DEBUG] [Thread-193306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:54:32.230 [DEBUG] [Thread-193306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:54:32.230 [DEBUG] [Thread-193306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] client lang: <none>
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] server lang: <none>
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] kex follows: False
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] Compression: none
2026-04-12T17:54:32.231 [DEBUG] [Thread-193306] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:54:32.290 [DEBUG] [Thread-193306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:54:32.290 [DEBUG] [Thread-193306] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:54:32.291 [DEBUG] [Thread-193306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:54:32.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:54:32.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:54:32.346 [DEBUG] [Thread-193306] [transport.py] [_log()] userauth is OK
2026-04-12T17:54:32.346 [DEBUG] [Thread-193306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:54:32.346 [DEBUG] [Thread-193306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:54:32.346 [DEBUG] [Thread-193306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:54:32.346 [DEBUG] [Thread-193306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:54:32.370 [INFO] [Thread-193306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:54:32.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:54:32.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:54:33.228 [DEBUG] [Thread-193306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:54:33.229 [DEBUG] [Thread-193306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:54:33.276 [DEBUG] [Thread-193306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:54:33.276 [DEBUG] [Thread-193306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:54:33.284 [DEBUG] [Thread-193306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:54:33.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:54:33.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:54:33.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:54:33.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:54:33.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:54:33.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:54:33.319 [DEBUG] [Thread-193306] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:54:46.394 [DEBUG] [Thread-193308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:54:48.828 [DEBUG] [Thread-193309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:55:01.441 [DEBUG] [Thread-193310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:55:01.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:55:01.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:55:03.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:55:03.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:55:03.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:55:04.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 54, 28), 6.01386, 67.0571, 0.0, 16.1276, 14.3971, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:55:04.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:54:28
2026-04-12T17:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:55:05.290 [DEBUG] [Thread-193311] [transport.py] [_log()] starting thread (client mode): 0xae534b20
2026-04-12T17:55:05.290 [DEBUG] [Thread-193311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:55:05.310 [DEBUG] [Thread-193311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:55:05.310 [INFO] [Thread-193311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] client lang: <none>
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] server lang: <none>
2026-04-12T17:55:05.314 [DEBUG] [Thread-193311] [transport.py] [_log()] kex follows: False
2026-04-12T17:55:05.315 [DEBUG] [Thread-193311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:55:05.315 [DEBUG] [Thread-193311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:55:05.315 [DEBUG] [Thread-193311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:55:05.315 [DEBUG] [Thread-193311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:55:05.315 [DEBUG] [Thread-193311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:55:05.315 [DEBUG] [Thread-193311] [transport.py] [_log()] Compression: none
2026-04-12T17:55:05.315 [DEBUG] [Thread-193311] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:55:05.329 [DEBUG] [Thread-193311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:55:05.330 [DEBUG] [Thread-193311] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:55:05.331 [DEBUG] [Thread-193311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:55:05.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:55:05.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:55:05.334 [DEBUG] [Thread-193311] [transport.py] [_log()] userauth is OK
2026-04-12T17:55:05.335 [DEBUG] [Thread-193311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:55:05.335 [DEBUG] [Thread-193311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:55:05.336 [DEBUG] [Thread-193311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:55:05.336 [DEBUG] [Thread-193311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:55:05.359 [INFO] [Thread-193311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:55:05.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:55:12.446 [DEBUG] [Thread-193311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:55:12.447 [DEBUG] [Thread-193311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:55:12.447 [DEBUG] [Thread-193311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:55:12.487 [DEBUG] [Thread-193311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:55:12.488 [DEBUG] [Thread-193311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:55:12.491 [DEBUG] [Thread-193311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:55:12.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:55:12.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:55:12.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:55:12.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:55:12.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:55:12.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:55:12.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:55:12.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:55:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:55:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.662951 -999.00  +14.50   8.06     73   +9.70 1 2 1 1 1   887    0 4.41 -22.67 ----- 8.1 8.1 279.0 10.5 16.9 -23.8 16.8 -22.4 16.9 -20.7 17.4 -23.0
2026-04-12T17:55:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:55:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:55:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.662951
2026-04-12T17:55:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:55:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:55:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:55:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:55:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:55:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:54:28', tmtdew=6.01386, humidity=67.0571, cloud=0.0, wind=16.1276, temperature=14.3971, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:54:38.966', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:55:12.617 [DEBUG] [Thread-193311] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:55:12.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:55:12.720 [DEBUG] [Thread-193314] [transport.py] [_log()] starting thread (client mode): 0xae535390
2026-04-12T17:55:12.720 [DEBUG] [Thread-193314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:55:12.734 [DEBUG] [Thread-193314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:55:12.734 [INFO] [Thread-193314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:55:12.742 [DEBUG] [Thread-193314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] client lang: <none>
2026-04-12T17:55:12.743 [DEBUG] [Thread-193314] [transport.py] [_log()] server lang: <none>
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] kex follows: False
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] Compression: none
2026-04-12T17:55:12.744 [DEBUG] [Thread-193314] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:55:12.799 [DEBUG] [Thread-193314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:55:12.800 [DEBUG] [Thread-193314] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:55:12.800 [DEBUG] [Thread-193314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:55:12.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:55:12.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:55:12.857 [DEBUG] [Thread-193314] [transport.py] [_log()] userauth is OK
2026-04-12T17:55:12.857 [DEBUG] [Thread-193314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:55:12.858 [DEBUG] [Thread-193314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:55:12.858 [DEBUG] [Thread-193314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:55:12.858 [DEBUG] [Thread-193314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:55:12.883 [INFO] [Thread-193314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:55:12.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:55:12.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:55:13.671 [DEBUG] [Thread-193314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:55:13.671 [DEBUG] [Thread-193314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:55:13.719 [DEBUG] [Thread-193314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:55:13.719 [DEBUG] [Thread-193314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:55:13.728 [DEBUG] [Thread-193314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:55:13.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:55:13.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:55:13.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:55:13.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:55:13.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:55:13.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:55:13.765 [DEBUG] [Thread-193314] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:55:16.476 [DEBUG] [Thread-193316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:55:31.527 [DEBUG] [Thread-193317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:55:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:55:43.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:55:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:55:45.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 55, 4), 6.03062, 66.9743, 0.0, 14.9987, 14.364, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:55:45.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:55:04
2026-04-12T17:55:45.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:55:45.528 [DEBUG] [Thread-193318] [transport.py] [_log()] starting thread (client mode): 0xae535cc0
2026-04-12T17:55:45.529 [DEBUG] [Thread-193318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:55:45.540 [DEBUG] [Thread-193318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:55:45.540 [INFO] [Thread-193318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] client lang: <none>
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] server lang: <none>
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] kex follows: False
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:55:45.541 [DEBUG] [Thread-193318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:55:45.542 [DEBUG] [Thread-193318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:55:45.542 [DEBUG] [Thread-193318] [transport.py] [_log()] Compression: none
2026-04-12T17:55:45.542 [DEBUG] [Thread-193318] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:55:45.552 [DEBUG] [Thread-193318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:55:45.553 [DEBUG] [Thread-193318] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:55:45.553 [DEBUG] [Thread-193318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:55:45.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:55:45.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:55:45.554 [DEBUG] [Thread-193318] [transport.py] [_log()] userauth is OK
2026-04-12T17:55:45.554 [DEBUG] [Thread-193318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:55:45.554 [DEBUG] [Thread-193318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:55:45.554 [DEBUG] [Thread-193318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:55:45.554 [DEBUG] [Thread-193318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:55:45.569 [INFO] [Thread-193318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:55:45.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:55:46.189 [DEBUG] [Thread-193318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:55:46.189 [DEBUG] [Thread-193318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:55:46.189 [DEBUG] [Thread-193318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:55:46.230 [DEBUG] [Thread-193318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:55:46.231 [DEBUG] [Thread-193318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:55:46.233 [DEBUG] [Thread-193318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:55:46.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:55:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:55:46.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:55:46.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:55:46.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:55:46.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:55:46.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:55:46.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:55:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:55:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.663304 -999.00  +14.50   8.96     73   +9.70 1 2 1 1 1   887    0 4.36 -23.86 ----- 9.0 9.0 270.5 13.2 16.9 -24.1 16.8 -22.4 16.9 -20.7 17.4 -23.0
2026-04-12T17:55:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:55:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:55:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.663304
2026-04-12T17:55:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:55:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:55:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:55:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:55:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:55:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:55:04', tmtdew=6.03062, humidity=66.9743, cloud=0.0, wind=14.9987, temperature=14.364, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:55:09.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:55:46.261 [DEBUG] [Thread-193318] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:55:46.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:55:46.354 [DEBUG] [Thread-193321] [transport.py] [_log()] starting thread (client mode): 0xae509960
2026-04-12T17:55:46.354 [DEBUG] [Thread-193321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:55:46.368 [DEBUG] [Thread-193321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:55:46.369 [INFO] [Thread-193321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:55:46.376 [DEBUG] [Thread-193321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:55:46.376 [DEBUG] [Thread-193321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:55:46.376 [DEBUG] [Thread-193321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] client lang: <none>
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] server lang: <none>
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] kex follows: False
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] Compression: none
2026-04-12T17:55:46.377 [DEBUG] [Thread-193321] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:55:46.432 [DEBUG] [Thread-193321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:55:46.432 [DEBUG] [Thread-193321] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:55:46.432 [DEBUG] [Thread-193321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:55:46.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:55:46.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:55:46.493 [DEBUG] [Thread-193321] [transport.py] [_log()] userauth is OK
2026-04-12T17:55:46.494 [DEBUG] [Thread-193321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:55:46.494 [DEBUG] [Thread-193321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:55:46.494 [DEBUG] [Thread-193321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:55:46.494 [DEBUG] [Thread-193321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:55:46.518 [INFO] [Thread-193321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:55:46.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:55:46.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:55:46.566 [DEBUG] [Thread-193323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:55:47.365 [DEBUG] [Thread-193321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:55:47.369 [DEBUG] [Thread-193321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:55:47.418 [DEBUG] [Thread-193321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:55:47.418 [DEBUG] [Thread-193321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:55:47.427 [DEBUG] [Thread-193321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:55:47.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:55:47.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:55:47.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:55:47.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:55:47.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:55:47.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:55:47.465 [DEBUG] [Thread-193321] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:55:48.879 [DEBUG] [Thread-193324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:01.626 [DEBUG] [Thread-193325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:01.969 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:01.970 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:16.665 [DEBUG] [Thread-193326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:56:17.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:56:17.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:56:18.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 55, 40), 5.99552, 67.2468, 0.0, 15.7385, 14.7279, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:56:18.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:55:40
2026-04-12T17:56:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:56:19.263 [DEBUG] [Thread-193327] [transport.py] [_log()] starting thread (client mode): 0xae535fc0
2026-04-12T17:56:19.263 [DEBUG] [Thread-193327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:56:19.279 [DEBUG] [Thread-193327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:56:19.279 [INFO] [Thread-193327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] client lang: <none>
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] server lang: <none>
2026-04-12T17:56:19.282 [DEBUG] [Thread-193327] [transport.py] [_log()] kex follows: False
2026-04-12T17:56:19.283 [DEBUG] [Thread-193327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:56:19.283 [DEBUG] [Thread-193327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:56:19.283 [DEBUG] [Thread-193327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:56:19.283 [DEBUG] [Thread-193327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:56:19.283 [DEBUG] [Thread-193327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:56:19.283 [DEBUG] [Thread-193327] [transport.py] [_log()] Compression: none
2026-04-12T17:56:19.283 [DEBUG] [Thread-193327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:56:19.296 [DEBUG] [Thread-193327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:56:19.297 [DEBUG] [Thread-193327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:56:19.297 [DEBUG] [Thread-193327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:56:19.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:56:19.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:56:19.341 [DEBUG] [Thread-193327] [transport.py] [_log()] userauth is OK
2026-04-12T17:56:19.341 [DEBUG] [Thread-193327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:56:19.341 [DEBUG] [Thread-193327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:56:19.342 [DEBUG] [Thread-193327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:56:19.342 [DEBUG] [Thread-193327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:56:19.365 [INFO] [Thread-193327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:56:19.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:56:19.971 [DEBUG] [Thread-193327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:56:19.971 [DEBUG] [Thread-193327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:56:19.972 [DEBUG] [Thread-193327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:56:20.012 [DEBUG] [Thread-193327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:56:20.012 [DEBUG] [Thread-193327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:56:20.014 [DEBUG] [Thread-193327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:56:20.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:56:20.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:56:20.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:56:20.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:56:20.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:56:20.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:56:20.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:56:20.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:56:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:56:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.663993 -999.00  +14.40   9.78     73   +9.70 1 2 1 1 1   887    0 4.20 -28.35 ----- 9.8 9.8 263.6 14.5 16.8 -24.1 16.7 -22.6 16.9 -20.8 17.3 -23.3
2026-04-12T17:56:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.663993
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:56:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:55:40', tmtdew=5.99552, humidity=67.2468, cloud=0.0, wind=15.7385, temperature=14.7279, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:56:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:56:20.036 [DEBUG] [Thread-193327] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:56:20.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:56:20.121 [DEBUG] [Thread-193330] [transport.py] [_log()] starting thread (client mode): 0xae52e380
2026-04-12T17:56:20.121 [DEBUG] [Thread-193330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:56:20.136 [DEBUG] [Thread-193330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:56:20.136 [INFO] [Thread-193330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:56:20.144 [DEBUG] [Thread-193330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:56:20.144 [DEBUG] [Thread-193330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:56:20.144 [DEBUG] [Thread-193330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:56:20.144 [DEBUG] [Thread-193330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] client lang: <none>
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] server lang: <none>
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] kex follows: False
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] Compression: none
2026-04-12T17:56:20.145 [DEBUG] [Thread-193330] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:56:20.201 [DEBUG] [Thread-193330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:56:20.202 [DEBUG] [Thread-193330] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:56:20.202 [DEBUG] [Thread-193330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:56:20.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:56:20.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:56:20.257 [DEBUG] [Thread-193330] [transport.py] [_log()] userauth is OK
2026-04-12T17:56:20.258 [DEBUG] [Thread-193330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:56:20.258 [DEBUG] [Thread-193330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:56:20.258 [DEBUG] [Thread-193330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:56:20.258 [DEBUG] [Thread-193330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:56:20.278 [INFO] [Thread-193330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:56:20.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:56:20.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:56:21.101 [DEBUG] [Thread-193330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:56:21.101 [DEBUG] [Thread-193330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:56:21.149 [DEBUG] [Thread-193330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:56:21.149 [DEBUG] [Thread-193330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:56:21.159 [DEBUG] [Thread-193330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:56:21.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:56:21.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:56:21.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:56:21.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:56:21.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:56:21.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:56:21.195 [DEBUG] [Thread-193330] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:56:31.703 [DEBUG] [Thread-193332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:46.759 [DEBUG] [Thread-193333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:48.931 [DEBUG] [Thread-193334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:56:51.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:56:51.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:56:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:56:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 56, 15), 5.92517, 67.7228, 0.0, 13.4633, 14.3474, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:56:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:56:15
2026-04-12T17:56:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:56:53.049 [DEBUG] [Thread-193335] [transport.py] [_log()] starting thread (client mode): 0xae519960
2026-04-12T17:56:53.049 [DEBUG] [Thread-193335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:56:53.066 [DEBUG] [Thread-193335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:56:53.066 [INFO] [Thread-193335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:56:53.069 [DEBUG] [Thread-193335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:56:53.069 [DEBUG] [Thread-193335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:56:53.069 [DEBUG] [Thread-193335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] client lang: <none>
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] server lang: <none>
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] kex follows: False
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] Compression: none
2026-04-12T17:56:53.070 [DEBUG] [Thread-193335] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:56:53.090 [DEBUG] [Thread-193335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:56:53.090 [DEBUG] [Thread-193335] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:56:53.091 [DEBUG] [Thread-193335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:56:53.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:56:53.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:56:53.093 [DEBUG] [Thread-193335] [transport.py] [_log()] userauth is OK
2026-04-12T17:56:53.093 [DEBUG] [Thread-193335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:56:53.093 [DEBUG] [Thread-193335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:56:53.093 [DEBUG] [Thread-193335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:56:53.093 [DEBUG] [Thread-193335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:56:53.118 [INFO] [Thread-193335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:56:53.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:56:53.770 [DEBUG] [Thread-193335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:56:53.770 [DEBUG] [Thread-193335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:56:53.771 [DEBUG] [Thread-193335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:56:53.811 [DEBUG] [Thread-193335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:56:53.811 [DEBUG] [Thread-193335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:56:53.814 [DEBUG] [Thread-193335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:56:53.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:56:53.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:56:53.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:56:53.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:56:53.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:56:53.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:56:53.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:56:53.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:56:53.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:56:53.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.664346 -999.00  +14.40  14.36     73   +9.70 1 2 1 1 1   887    0 4.20 -30.14 ----- 14.4 14.4 260.8 18.5 16.8 -24.1 16.7 -22.6 16.9 -21.5 17.3 -23.3
2026-04-12T17:56:53.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:56:53.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:56:53.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.664346
2026-04-12T17:56:53.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:56:53.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:56:53.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:56:53.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:56:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:56:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:56:15', tmtdew=5.92517, humidity=67.7228, cloud=0.0, wind=13.4633, temperature=14.3474, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:56:39.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:56:53.843 [DEBUG] [Thread-193335] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:56:53.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:56:53.940 [DEBUG] [Thread-193338] [transport.py] [_log()] starting thread (client mode): 0xae5353f0
2026-04-12T17:56:53.940 [DEBUG] [Thread-193338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:56:53.955 [DEBUG] [Thread-193338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:56:53.955 [INFO] [Thread-193338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:56:53.962 [DEBUG] [Thread-193338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:56:53.963 [DEBUG] [Thread-193338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] client lang: <none>
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] server lang: <none>
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] kex follows: False
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] Compression: none
2026-04-12T17:56:53.964 [DEBUG] [Thread-193338] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:56:54.021 [DEBUG] [Thread-193338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:56:54.021 [DEBUG] [Thread-193338] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:56:54.022 [DEBUG] [Thread-193338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:56:54.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:56:54.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:56:54.077 [DEBUG] [Thread-193338] [transport.py] [_log()] userauth is OK
2026-04-12T17:56:54.077 [DEBUG] [Thread-193338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:56:54.077 [DEBUG] [Thread-193338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:56:54.078 [DEBUG] [Thread-193338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:56:54.078 [DEBUG] [Thread-193338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:56:54.096 [INFO] [Thread-193338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:56:54.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:56:54.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:56:54.929 [DEBUG] [Thread-193338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:56:54.929 [DEBUG] [Thread-193338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:56:54.978 [DEBUG] [Thread-193338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:56:54.978 [DEBUG] [Thread-193338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:56:54.987 [DEBUG] [Thread-193338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:56:54.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:56:54.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:56:55.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:56:55.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:56:55.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:56:55.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:56:55.021 [DEBUG] [Thread-193338] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:57:01.793 [DEBUG] [Thread-193340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:57:02.109 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:57:02.111 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:57:16.846 [DEBUG] [Thread-193341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:57:25.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:57:25.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:57:25.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:57:26.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 56, 50), 5.85897, 67.877, 0.0, 14.045, 14.7616, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:57:26.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:56:50
2026-04-12T17:57:26.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:57:26.828 [DEBUG] [Thread-193342] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc40
2026-04-12T17:57:26.829 [DEBUG] [Thread-193342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:57:26.843 [DEBUG] [Thread-193342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:57:26.843 [INFO] [Thread-193342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] client lang: <none>
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] server lang: <none>
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] kex follows: False
2026-04-12T17:57:26.846 [DEBUG] [Thread-193342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:57:26.847 [DEBUG] [Thread-193342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:57:26.847 [DEBUG] [Thread-193342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:57:26.847 [DEBUG] [Thread-193342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:57:26.847 [DEBUG] [Thread-193342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:57:26.847 [DEBUG] [Thread-193342] [transport.py] [_log()] Compression: none
2026-04-12T17:57:26.847 [DEBUG] [Thread-193342] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:57:26.863 [DEBUG] [Thread-193342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:57:26.863 [DEBUG] [Thread-193342] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:57:26.864 [DEBUG] [Thread-193342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:57:26.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:57:26.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:57:26.864 [DEBUG] [Thread-193342] [transport.py] [_log()] userauth is OK
2026-04-12T17:57:26.864 [DEBUG] [Thread-193342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:57:26.864 [DEBUG] [Thread-193342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:57:26.864 [DEBUG] [Thread-193342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:57:26.864 [DEBUG] [Thread-193342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:57:26.876 [INFO] [Thread-193342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:57:26.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:57:27.506 [DEBUG] [Thread-193342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:57:27.506 [DEBUG] [Thread-193342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:57:27.507 [DEBUG] [Thread-193342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:57:27.547 [DEBUG] [Thread-193342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:57:27.547 [DEBUG] [Thread-193342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:57:27.550 [DEBUG] [Thread-193342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:57:27.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:57:27.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:57:27.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:57:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:57:27.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:57:27.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:57:27.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:57:27.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:57:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:57:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.664693 -999.00  +14.30   8.20     73   +9.60 1 2 1 1 1   887    0 4.13 -32.02 ----- 8.2 8.2 258.2 14.6 16.8 -24.1 16.6 -22.4 16.8 -20.7 17.3 -23.2
2026-04-12T17:57:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:57:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:57:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.664693
2026-04-12T17:57:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:57:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:57:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:57:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:57:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:57:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:56:50', tmtdew=5.85897, humidity=67.877, cloud=0.0, wind=14.045, temperature=14.7616, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:57:09.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:57:27.578 [DEBUG] [Thread-193342] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:57:27.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:57:27.672 [DEBUG] [Thread-193345] [transport.py] [_log()] starting thread (client mode): 0xb0f427a0
2026-04-12T17:57:27.673 [DEBUG] [Thread-193345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:57:27.688 [DEBUG] [Thread-193345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:57:27.688 [INFO] [Thread-193345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:57:27.695 [DEBUG] [Thread-193345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:57:27.695 [DEBUG] [Thread-193345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:57:27.695 [DEBUG] [Thread-193345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:57:27.695 [DEBUG] [Thread-193345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:57:27.695 [DEBUG] [Thread-193345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:57:27.695 [DEBUG] [Thread-193345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:57:27.695 [DEBUG] [Thread-193345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] client lang: <none>
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] server lang: <none>
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] kex follows: False
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:57:27.696 [DEBUG] [Thread-193345] [transport.py] [_log()] Compression: none
2026-04-12T17:57:27.697 [DEBUG] [Thread-193345] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:57:27.754 [DEBUG] [Thread-193345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:57:27.754 [DEBUG] [Thread-193345] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:57:27.755 [DEBUG] [Thread-193345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:57:27.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:57:27.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:57:27.813 [DEBUG] [Thread-193345] [transport.py] [_log()] userauth is OK
2026-04-12T17:57:27.814 [DEBUG] [Thread-193345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:57:27.814 [DEBUG] [Thread-193345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:57:27.814 [DEBUG] [Thread-193345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:57:27.814 [DEBUG] [Thread-193345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:57:27.837 [INFO] [Thread-193345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:57:27.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:57:27.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:57:28.639 [DEBUG] [Thread-193345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:57:28.640 [DEBUG] [Thread-193345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:57:28.687 [DEBUG] [Thread-193345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:57:28.687 [DEBUG] [Thread-193345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:57:28.696 [DEBUG] [Thread-193345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:57:28.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:57: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')
2026-04-12T17:57:28.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:57:28.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:57:28.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:57:28.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:57:28.734 [DEBUG] [Thread-193345] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:57:31.884 [DEBUG] [Thread-193347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:57:46.940 [DEBUG] [Thread-193348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:57:48.979 [DEBUG] [Thread-193349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:57:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:57:58.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:57:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:58:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 57, 26), 5.70392, 68.2864, 0.0, 13.0936, 14.3307, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:58:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:57:26
2026-04-12T17:58:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:58:00.588 [DEBUG] [Thread-193350] [transport.py] [_log()] starting thread (client mode): 0xb0f6fca0
2026-04-12T17:58:00.588 [DEBUG] [Thread-193350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:58:00.608 [DEBUG] [Thread-193350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:58:00.608 [INFO] [Thread-193350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] client lang: <none>
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] server lang: <none>
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] kex follows: False
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:58:00.611 [DEBUG] [Thread-193350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:58:00.612 [DEBUG] [Thread-193350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:58:00.612 [DEBUG] [Thread-193350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:58:00.612 [DEBUG] [Thread-193350] [transport.py] [_log()] Compression: none
2026-04-12T17:58:00.612 [DEBUG] [Thread-193350] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:58:00.619 [DEBUG] [Thread-193350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:58:00.619 [DEBUG] [Thread-193350] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:58:00.619 [DEBUG] [Thread-193350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:58:00.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:58:00.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:58:00.620 [DEBUG] [Thread-193350] [transport.py] [_log()] userauth is OK
2026-04-12T17:58:00.621 [DEBUG] [Thread-193350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:58:00.621 [DEBUG] [Thread-193350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:58:00.621 [DEBUG] [Thread-193350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:58:00.621 [DEBUG] [Thread-193350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:58:00.629 [INFO] [Thread-193350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:58:00.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:58:01.252 [DEBUG] [Thread-193350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:58:01.252 [DEBUG] [Thread-193350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:58:01.253 [DEBUG] [Thread-193350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:58:01.293 [DEBUG] [Thread-193350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:58:01.293 [DEBUG] [Thread-193350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:58:01.297 [DEBUG] [Thread-193350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:58:01.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:58:01.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:58:01.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:58:01.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:58:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:58:01.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:58:01.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:58:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:58:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:58:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.665035 -999.00  +14.30  11.01     73   +9.70 1 2 1 1 1   887    0 3.94 -33.84 ----- 11.0 11.0 253.6 14.1 16.8 -24.5 16.6 -22.6 16.8 -20.7 17.2 -23.2
2026-04-12T17:58:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:58:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:58:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.665035
2026-04-12T17:58:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:58:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:58:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:58:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:58:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:58:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:57:26', tmtdew=5.70392, humidity=68.2864, cloud=0.0, wind=13.0936, temperature=14.3307, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:57:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:58:01.322 [DEBUG] [Thread-193350] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:58:01.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:58:01.430 [DEBUG] [Thread-193353] [transport.py] [_log()] starting thread (client mode): 0xae5f2320
2026-04-12T17:58:01.430 [DEBUG] [Thread-193353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:58:01.444 [DEBUG] [Thread-193353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:58:01.445 [INFO] [Thread-193353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] client lang: <none>
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] server lang: <none>
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] kex follows: False
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] Compression: none
2026-04-12T17:58:01.452 [DEBUG] [Thread-193353] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:58:01.507 [DEBUG] [Thread-193353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:58:01.508 [DEBUG] [Thread-193353] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:58:01.508 [DEBUG] [Thread-193353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:58:01.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:58:01.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:58:01.565 [DEBUG] [Thread-193353] [transport.py] [_log()] userauth is OK
2026-04-12T17:58:01.566 [DEBUG] [Thread-193353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:58:01.566 [DEBUG] [Thread-193353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:58:01.566 [DEBUG] [Thread-193353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:58:01.566 [DEBUG] [Thread-193353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:58:01.584 [INFO] [Thread-193353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:58:01.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:58:01.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:58:01.975 [DEBUG] [Thread-193355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:58:02.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:58:02.253 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:58:02.458 [DEBUG] [Thread-193353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:58:02.458 [DEBUG] [Thread-193353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:58:02.506 [DEBUG] [Thread-193353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:58:02.506 [DEBUG] [Thread-193353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:58:02.515 [DEBUG] [Thread-193353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:58:02.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:58:02.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:58:02.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:58:02.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:58:02.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:58:02.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:58:02.552 [DEBUG] [Thread-193353] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:58:17.032 [DEBUG] [Thread-193356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:58:32.069 [DEBUG] [Thread-193357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:58:32.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:58:32.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:58:32.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:58:33.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 58, 1), 5.67887, 68.4024, 0.0, 14.2402, 14.3307, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:58:33.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:58:01
2026-04-12T17:58:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:58:34.357 [DEBUG] [Thread-193358] [transport.py] [_log()] starting thread (client mode): 0xae52c850
2026-04-12T17:58:34.358 [DEBUG] [Thread-193358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:58:34.377 [DEBUG] [Thread-193358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:58:34.378 [INFO] [Thread-193358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] client lang: <none>
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] server lang: <none>
2026-04-12T17:58:34.381 [DEBUG] [Thread-193358] [transport.py] [_log()] kex follows: False
2026-04-12T17:58:34.382 [DEBUG] [Thread-193358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:58:34.382 [DEBUG] [Thread-193358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:58:34.382 [DEBUG] [Thread-193358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:58:34.382 [DEBUG] [Thread-193358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:58:34.382 [DEBUG] [Thread-193358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:58:34.382 [DEBUG] [Thread-193358] [transport.py] [_log()] Compression: none
2026-04-12T17:58:34.391 [DEBUG] [Thread-193358] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:58:34.410 [DEBUG] [Thread-193358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:58:34.410 [DEBUG] [Thread-193358] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:58:34.411 [DEBUG] [Thread-193358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:58:34.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:58:34.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:58:34.413 [DEBUG] [Thread-193358] [transport.py] [_log()] userauth is OK
2026-04-12T17:58:34.413 [DEBUG] [Thread-193358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:58:34.413 [DEBUG] [Thread-193358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:58:34.413 [DEBUG] [Thread-193358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:58:34.413 [DEBUG] [Thread-193358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:58:34.437 [INFO] [Thread-193358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:58:34.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:58:35.070 [DEBUG] [Thread-193358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:58:35.070 [DEBUG] [Thread-193358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:58:35.071 [DEBUG] [Thread-193358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:58:35.112 [DEBUG] [Thread-193358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:58:35.112 [DEBUG] [Thread-193358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:58:35.115 [DEBUG] [Thread-193358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:58:35.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:58:35.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:58:35.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:58:35.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:58:35.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:58:35.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:58:35.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:58:35.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:58:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:58:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.665382 -999.00  +14.30  11.61     73   +9.60 1 2 1 1 1   887    0 3.86 -35.51 ----- 11.6 11.6 261.4 15.7 16.7 -24.2 16.6 -22.6 16.8 -20.8 17.2 -23.3
2026-04-12T17:58:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:58:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:58:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.665382
2026-04-12T17:58:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:58:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:58:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:58:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:58:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:58:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:58:01', tmtdew=5.67887, humidity=68.4024, cloud=0.0, wind=14.2402, temperature=14.3307, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:58:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:58:35.147 [DEBUG] [Thread-193358] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:58:35.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:58:35.240 [DEBUG] [Thread-193361] [transport.py] [_log()] starting thread (client mode): 0xae5b5ba0
2026-04-12T17:58:35.240 [DEBUG] [Thread-193361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:58:35.256 [DEBUG] [Thread-193361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:58:35.256 [INFO] [Thread-193361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:58:35.263 [DEBUG] [Thread-193361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] client lang: <none>
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] server lang: <none>
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] kex follows: False
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:58:35.264 [DEBUG] [Thread-193361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:58:35.265 [DEBUG] [Thread-193361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:58:35.265 [DEBUG] [Thread-193361] [transport.py] [_log()] Compression: none
2026-04-12T17:58:35.265 [DEBUG] [Thread-193361] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:58:35.322 [DEBUG] [Thread-193361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:58:35.322 [DEBUG] [Thread-193361] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:58:35.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:58:35.324 [DEBUG] [Thread-193361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:58:35.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:58:35.377 [DEBUG] [Thread-193361] [transport.py] [_log()] userauth is OK
2026-04-12T17:58:35.378 [DEBUG] [Thread-193361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:58:35.378 [DEBUG] [Thread-193361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:58:35.378 [DEBUG] [Thread-193361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:58:35.378 [DEBUG] [Thread-193361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:58:35.397 [INFO] [Thread-193361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:58:35.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:58:35.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:58:36.254 [DEBUG] [Thread-193361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:58:36.254 [DEBUG] [Thread-193361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:58:36.302 [DEBUG] [Thread-193361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:58:36.302 [DEBUG] [Thread-193361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:58:36.312 [DEBUG] [Thread-193361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:58:36.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:58:36.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:58:36.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:58:36.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:58:36.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:58:36.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:58:36.350 [DEBUG] [Thread-193361] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:58:47.107 [DEBUG] [Thread-193363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:58:49.032 [DEBUG] [Thread-193364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:59:02.161 [DEBUG] [Thread-193365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:59:02.393 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:59:02.394 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:59:06.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:59:06.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:59:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:59:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 58, 37), 5.63624, 68.9048, 0.0, 17.82, 14.7619, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:59:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:58:37
2026-04-12T17:59:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:59:08.163 [DEBUG] [Thread-193366] [transport.py] [_log()] starting thread (client mode): 0xae5a4760
2026-04-12T17:59:08.163 [DEBUG] [Thread-193366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:59:08.183 [DEBUG] [Thread-193366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:59:08.183 [INFO] [Thread-193366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] client lang: <none>
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] server lang: <none>
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] kex follows: False
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] Compression: none
2026-04-12T17:59:08.186 [DEBUG] [Thread-193366] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:59:08.202 [DEBUG] [Thread-193366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:59:08.203 [DEBUG] [Thread-193366] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:59:08.203 [DEBUG] [Thread-193366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:59:08.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:59:08.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:59:08.244 [DEBUG] [Thread-193366] [transport.py] [_log()] userauth is OK
2026-04-12T17:59:08.244 [DEBUG] [Thread-193366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:59:08.244 [DEBUG] [Thread-193366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:59:08.244 [DEBUG] [Thread-193366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:59:08.244 [DEBUG] [Thread-193366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:59:08.268 [INFO] [Thread-193366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:59:08.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:59:08.898 [DEBUG] [Thread-193366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:59:08.908 [DEBUG] [Thread-193366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:59:08.908 [DEBUG] [Thread-193366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:59:08.940 [DEBUG] [Thread-193366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:59:08.940 [DEBUG] [Thread-193366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:59:08.943 [DEBUG] [Thread-193366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:59:08.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:59:08.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:59:08.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:59:08.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:59:08.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:59:08.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:59:08.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:59:08.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:59:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:59:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.665729 -999.00  +14.30   9.79     73   +9.60 1 2 1 1 1   887    0 3.93 -34.48 ----- 9.8 9.8 275.8 14.8 16.7 -23.9 16.6 -22.5 16.8 -20.7 17.2 -23.3
2026-04-12T17:59:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:59:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:59:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.665729
2026-04-12T17:59:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:59:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:59:08.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:59:08.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:59:08.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:59:08.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:58:37', tmtdew=5.63624, humidity=68.9048, cloud=0.0, wind=17.82, temperature=14.7619, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:58:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:59:08.965 [DEBUG] [Thread-193366] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:59:09.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:59:09.058 [DEBUG] [Thread-193369] [transport.py] [_log()] starting thread (client mode): 0xae536e00
2026-04-12T17:59:09.058 [DEBUG] [Thread-193369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:59:09.076 [DEBUG] [Thread-193369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:59:09.076 [INFO] [Thread-193369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:59:09.084 [DEBUG] [Thread-193369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:59:09.085 [DEBUG] [Thread-193369] [transport.py] [_log()] client lang: <none>
2026-04-12T17:59:09.085 [DEBUG] [Thread-193369] [transport.py] [_log()] server lang: <none>
2026-04-12T17:59:09.085 [DEBUG] [Thread-193369] [transport.py] [_log()] kex follows: False
2026-04-12T17:59:09.085 [DEBUG] [Thread-193369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:59:09.085 [DEBUG] [Thread-193369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:59:09.085 [DEBUG] [Thread-193369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:59:09.085 [DEBUG] [Thread-193369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:59:09.086 [DEBUG] [Thread-193369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:59:09.086 [DEBUG] [Thread-193369] [transport.py] [_log()] Compression: none
2026-04-12T17:59:09.086 [DEBUG] [Thread-193369] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:59:09.141 [DEBUG] [Thread-193369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:59:09.141 [DEBUG] [Thread-193369] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:59:09.142 [DEBUG] [Thread-193369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:59:09.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:59:09.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:59:09.197 [DEBUG] [Thread-193369] [transport.py] [_log()] userauth is OK
2026-04-12T17:59:09.197 [DEBUG] [Thread-193369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:59:09.197 [DEBUG] [Thread-193369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:59:09.197 [DEBUG] [Thread-193369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:59:09.197 [DEBUG] [Thread-193369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:59:09.216 [INFO] [Thread-193369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:59:09.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:59:09.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:59:10.019 [DEBUG] [Thread-193369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:59:10.019 [DEBUG] [Thread-193369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:59:10.067 [DEBUG] [Thread-193369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:59:10.067 [DEBUG] [Thread-193369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:59:10.077 [DEBUG] [Thread-193369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:59:10.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:59:10.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:59:10.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:59:10.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:59:10.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:59:10.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:59:10.114 [DEBUG] [Thread-193369] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:59:17.197 [DEBUG] [Thread-193371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:59:32.252 [DEBUG] [Thread-193372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:59:40.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T17:59:40.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T17:59:40.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T17:59:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 59, 12), 5.86066, 68.0215, 0.0, 15.863, 14.3144, 0, 0, 0, 2, 0, 0),)
2026-04-12T17:59:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:59:12
2026-04-12T17:59:41.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T17:59:41.978 [DEBUG] [Thread-193373] [transport.py] [_log()] starting thread (client mode): 0xae5b7d90
2026-04-12T17:59:41.978 [DEBUG] [Thread-193373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:59:41.995 [DEBUG] [Thread-193373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T17:59:41.995 [INFO] [Thread-193373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] client lang: <none>
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] server lang: <none>
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] kex follows: False
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] Compression: none
2026-04-12T17:59:41.999 [DEBUG] [Thread-193373] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:59:42.016 [DEBUG] [Thread-193373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:59:42.017 [DEBUG] [Thread-193373] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:59:42.017 [DEBUG] [Thread-193373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T17:59:42.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T17:59:42.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:59:42.019 [DEBUG] [Thread-193373] [transport.py] [_log()] userauth is OK
2026-04-12T17:59:42.019 [DEBUG] [Thread-193373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:59:42.019 [DEBUG] [Thread-193373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:59:42.019 [DEBUG] [Thread-193373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T17:59:42.019 [DEBUG] [Thread-193373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:59:42.034 [INFO] [Thread-193373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:59:42.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:59:42.667 [DEBUG] [Thread-193373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:59:42.667 [DEBUG] [Thread-193373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:59:42.667 [DEBUG] [Thread-193373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T17:59:42.708 [DEBUG] [Thread-193373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:59:42.708 [DEBUG] [Thread-193373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:59:42.712 [DEBUG] [Thread-193373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:59:42.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:59:42.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T17:59:42.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T17:59:42.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T17:59:42.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:59:42.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T17:59:42.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:59:42.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:59:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T17:59:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.666082 -999.00  +14.30  10.25     73   +9.70 1 2 1 1 1   887    0 4.00 -34.15 ----- 10.2 10.2 255.4 15.3 16.7 -24.0 16.5 -22.4 16.8 -20.5 17.1 -23.1
2026-04-12T17:59:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T17:59:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T17:59:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.666082
2026-04-12T17:59:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T17:59:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T17:59:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T17:59:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T17:59:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T17:59:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:59:12', tmtdew=5.86066, humidity=68.0215, cloud=0.0, wind=15.863, temperature=14.3144, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:59:09.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T17:59:42.739 [DEBUG] [Thread-193373] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:59:42.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T17:59:42.830 [DEBUG] [Thread-193376] [transport.py] [_log()] starting thread (client mode): 0xae5b5690
2026-04-12T17:59:42.831 [DEBUG] [Thread-193376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T17:59:42.845 [DEBUG] [Thread-193376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T17:59:42.845 [INFO] [Thread-193376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T17:59:42.852 [DEBUG] [Thread-193376] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T17:59:42.852 [DEBUG] [Thread-193376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T17:59:42.852 [DEBUG] [Thread-193376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T17:59:42.852 [DEBUG] [Thread-193376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:42.852 [DEBUG] [Thread-193376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] client lang: <none>
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] server lang: <none>
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] kex follows: False
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] Compression: none
2026-04-12T17:59:42.853 [DEBUG] [Thread-193376] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T17:59:42.908 [DEBUG] [Thread-193376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T17:59:42.908 [DEBUG] [Thread-193376] [transport.py] [_log()] Switch to new keys ...
2026-04-12T17:59:42.908 [DEBUG] [Thread-193376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T17:59:42.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T17:59:42.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T17:59:42.965 [DEBUG] [Thread-193376] [transport.py] [_log()] userauth is OK
2026-04-12T17:59:42.965 [DEBUG] [Thread-193376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T17:59:42.965 [DEBUG] [Thread-193376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T17:59:42.965 [DEBUG] [Thread-193376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T17:59:42.965 [DEBUG] [Thread-193376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T17:59:42.979 [INFO] [Thread-193376] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T17:59:42.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T17:59:42.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T17:59:43.855 [DEBUG] [Thread-193376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T17:59:43.855 [DEBUG] [Thread-193376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T17:59:43.903 [DEBUG] [Thread-193376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T17:59:43.903 [DEBUG] [Thread-193376] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T17:59:43.912 [DEBUG] [Thread-193376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T17:59:43.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T17:59:43.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T17:59:43.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T17:59:43.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T17:59:43.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T17:59:43.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T17:59:43.950 [DEBUG] [Thread-193376] [transport.py] [_log()] EOF in transport thread
2026-04-12T17:59:47.292 [DEBUG] [Thread-193378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T17:59:49.095 [DEBUG] [Thread-193379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:02.352 [DEBUG] [Thread-193380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:02.535 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:02.536 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:00:13.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:00:13.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:00:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 17, 59, 47), 5.76795, 68.2754, 0.0, 14.4684, 14.6628, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:00:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 17:59:47
2026-04-12T18:00:15.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:00:15.847 [DEBUG] [Thread-193381] [transport.py] [_log()] starting thread (client mode): 0xae5f23e0
2026-04-12T18:00:15.847 [DEBUG] [Thread-193381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:00:15.867 [DEBUG] [Thread-193381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:00:15.867 [INFO] [Thread-193381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] client lang: <none>
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] server lang: <none>
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] kex follows: False
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:00:15.871 [DEBUG] [Thread-193381] [transport.py] [_log()] Compression: none
2026-04-12T18:00:15.872 [DEBUG] [Thread-193381] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:00:15.888 [DEBUG] [Thread-193381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:00:15.888 [DEBUG] [Thread-193381] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:00:15.889 [DEBUG] [Thread-193381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:00:15.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:00:15.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:00:15.891 [DEBUG] [Thread-193381] [transport.py] [_log()] userauth is OK
2026-04-12T18:00:15.891 [DEBUG] [Thread-193381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:00:15.891 [DEBUG] [Thread-193381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:00:15.891 [DEBUG] [Thread-193381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:00:15.891 [DEBUG] [Thread-193381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:00:15.915 [INFO] [Thread-193381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:00:15.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:00:17.388 [DEBUG] [Thread-193383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:20.721 [DEBUG] [Thread-193381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:00:20.721 [DEBUG] [Thread-193381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:00:20.722 [DEBUG] [Thread-193381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:00:20.762 [DEBUG] [Thread-193381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:00:20.762 [DEBUG] [Thread-193381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:00:20.766 [DEBUG] [Thread-193381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:00:20.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:00:20.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:00:20.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:00:20.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:00:20.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:00:20.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:00:20.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:00:20.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:00:20.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:00:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.666082 -999.00  +14.30  10.25     73   +9.70 1 2 1 1 1   887    0 4.00 -34.15 ----- 10.2 10.2 255.4 15.3 16.7 -24.0 16.5 -22.4 16.8 -20.5 17.1 -23.1
2026-04-12T18:00:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:00:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:00:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.666082
2026-04-12T18:00:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:00:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:00:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:00:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:00:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:00:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T17:59:47', tmtdew=5.76795, humidity=68.2754, cloud=0.0, wind=14.4684, temperature=14.6628, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T15:59:09.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:00:20.886 [DEBUG] [Thread-193381] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:00:20.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:00:20.982 [DEBUG] [Thread-193385] [transport.py] [_log()] starting thread (client mode): 0xae5f1420
2026-04-12T18:00:20.982 [DEBUG] [Thread-193385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:00:20.996 [DEBUG] [Thread-193385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:00:20.997 [INFO] [Thread-193385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:00:21.004 [DEBUG] [Thread-193385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:00:21.004 [DEBUG] [Thread-193385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:00:21.004 [DEBUG] [Thread-193385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] client lang: <none>
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] server lang: <none>
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] kex follows: False
2026-04-12T18:00:21.005 [DEBUG] [Thread-193385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:00:21.006 [DEBUG] [Thread-193385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:00:21.006 [DEBUG] [Thread-193385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:00:21.006 [DEBUG] [Thread-193385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:00:21.006 [DEBUG] [Thread-193385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:00:21.006 [DEBUG] [Thread-193385] [transport.py] [_log()] Compression: none
2026-04-12T18:00:21.006 [DEBUG] [Thread-193385] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:00:21.062 [DEBUG] [Thread-193385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:00:21.063 [DEBUG] [Thread-193385] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:00:21.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:00:21.064 [DEBUG] [Thread-193385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:00:21.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:00:21.118 [DEBUG] [Thread-193385] [transport.py] [_log()] userauth is OK
2026-04-12T18:00:21.118 [DEBUG] [Thread-193385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:00:21.118 [DEBUG] [Thread-193385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:00:21.118 [DEBUG] [Thread-193385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:00:21.119 [DEBUG] [Thread-193385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:00:21.138 [INFO] [Thread-193385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:00:21.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:00:21.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:00:21.914 [DEBUG] [Thread-193385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:00:21.914 [DEBUG] [Thread-193385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:00:21.962 [DEBUG] [Thread-193385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:00:21.962 [DEBUG] [Thread-193385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:00:21.971 [DEBUG] [Thread-193385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:00:21.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:00:21.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:00:21.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:00:21.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:00:22.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:00:22.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:00:22.008 [DEBUG] [Thread-193385] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:00:32.428 [DEBUG] [Thread-193387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:47.479 [DEBUG] [Thread-193388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:49.144 [DEBUG] [Thread-193389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:00:52.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:00:52.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:00:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:00:53.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 0, 23), 5.68667, 68.8531, 0.0, 12.0521, 14.2648, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:00:53.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:00:23
2026-04-12T18:00:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:00:53.838 [DEBUG] [Thread-193390] [transport.py] [_log()] starting thread (client mode): 0xae5f1f90
2026-04-12T18:00:53.838 [DEBUG] [Thread-193390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:00:53.859 [DEBUG] [Thread-193390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:00:53.859 [INFO] [Thread-193390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:00:53.863 [DEBUG] [Thread-193390] [transport.py] [_log()] client lang: <none>
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] server lang: <none>
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] kex follows: False
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] Compression: none
2026-04-12T18:00:53.864 [DEBUG] [Thread-193390] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:00:53.881 [DEBUG] [Thread-193390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:00:53.881 [DEBUG] [Thread-193390] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:00:53.882 [DEBUG] [Thread-193390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:00:53.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:00:53.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:00:53.892 [DEBUG] [Thread-193390] [transport.py] [_log()] userauth is OK
2026-04-12T18:00:53.892 [DEBUG] [Thread-193390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:00:53.892 [DEBUG] [Thread-193390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:00:53.893 [DEBUG] [Thread-193390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:00:53.893 [DEBUG] [Thread-193390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:00:53.916 [INFO] [Thread-193390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:00:53.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:00:54.561 [DEBUG] [Thread-193390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:00:54.561 [DEBUG] [Thread-193390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:00:54.562 [DEBUG] [Thread-193390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:00:54.602 [DEBUG] [Thread-193390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:00:54.602 [DEBUG] [Thread-193390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:00:54.606 [DEBUG] [Thread-193390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:00:54.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:00:54.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:00:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:00:54.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:00:54.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:00:54.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:00:54.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:00:54.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:00:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:00:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.667118 -999.00  +14.20  12.18     73   +9.60 1 2 1 1 1   887    0 3.87 -37.74 ----- 12.2 12.2 251.2 15.1 16.6 -23.9 16.5 -22.5 16.6 -20.6 17.0 -23.5
2026-04-12T18:00:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:00:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:00:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.667118
2026-04-12T18:00:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:00:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:00:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:00:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:00:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:00:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:00:23', tmtdew=5.68667, humidity=68.8531, cloud=0.0, wind=12.0521, temperature=14.2648, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:00:38.995', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:00:54.635 [DEBUG] [Thread-193390] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:00:54.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:00:54.731 [DEBUG] [Thread-193393] [transport.py] [_log()] starting thread (client mode): 0xae5f2800
2026-04-12T18:00:54.731 [DEBUG] [Thread-193393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:00:54.745 [DEBUG] [Thread-193393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:00:54.745 [INFO] [Thread-193393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] client lang: <none>
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] server lang: <none>
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] kex follows: False
2026-04-12T18:00:54.753 [DEBUG] [Thread-193393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:00:54.754 [DEBUG] [Thread-193393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:00:54.754 [DEBUG] [Thread-193393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:00:54.754 [DEBUG] [Thread-193393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:00:54.754 [DEBUG] [Thread-193393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:00:54.754 [DEBUG] [Thread-193393] [transport.py] [_log()] Compression: none
2026-04-12T18:00:54.754 [DEBUG] [Thread-193393] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:00:54.809 [DEBUG] [Thread-193393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:00:54.810 [DEBUG] [Thread-193393] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:00:54.811 [DEBUG] [Thread-193393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:00:54.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:00:54.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:00:54.870 [DEBUG] [Thread-193393] [transport.py] [_log()] userauth is OK
2026-04-12T18:00:54.871 [DEBUG] [Thread-193393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:00:54.871 [DEBUG] [Thread-193393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:00:54.871 [DEBUG] [Thread-193393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:00:54.871 [DEBUG] [Thread-193393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:00:54.889 [INFO] [Thread-193393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:00:54.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:00:54.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:00:55.691 [DEBUG] [Thread-193393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:00:55.691 [DEBUG] [Thread-193393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:00:55.739 [DEBUG] [Thread-193393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:00:55.739 [DEBUG] [Thread-193393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:00:55.748 [DEBUG] [Thread-193393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:00:55.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:00:55.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:00:55.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:00:55.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:00:55.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:00:55.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:00:55.785 [DEBUG] [Thread-193393] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:01:02.515 [DEBUG] [Thread-193395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:01:02.677 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:01:02.678 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:01:17.569 [DEBUG] [Thread-193396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:01:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:01:25.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:01:25.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:01:27.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 0, 58), 5.60666, 69.0024, 0.0, 13.4104, 14.3147, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:01:27.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:00:58
2026-04-12T18:01:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:01:27.646 [DEBUG] [Thread-193397] [transport.py] [_log()] starting thread (client mode): 0xae5f05b0
2026-04-12T18:01:27.646 [DEBUG] [Thread-193397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:01:27.666 [DEBUG] [Thread-193397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:01:27.667 [INFO] [Thread-193397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:01:27.669 [DEBUG] [Thread-193397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:01:27.669 [DEBUG] [Thread-193397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:01:27.669 [DEBUG] [Thread-193397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:01:27.669 [DEBUG] [Thread-193397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] client lang: <none>
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] server lang: <none>
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] kex follows: False
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] Compression: none
2026-04-12T18:01:27.670 [DEBUG] [Thread-193397] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:01:27.689 [DEBUG] [Thread-193397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:01:27.689 [DEBUG] [Thread-193397] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:01:27.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:01:27.691 [DEBUG] [Thread-193397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:01:27.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:01:27.692 [DEBUG] [Thread-193397] [transport.py] [_log()] userauth is OK
2026-04-12T18:01:27.692 [DEBUG] [Thread-193397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:01:27.692 [DEBUG] [Thread-193397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:01:27.692 [DEBUG] [Thread-193397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:01:27.692 [DEBUG] [Thread-193397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:01:27.715 [INFO] [Thread-193397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:01:27.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:01:28.327 [DEBUG] [Thread-193397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:01:28.328 [DEBUG] [Thread-193397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:01:28.328 [DEBUG] [Thread-193397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:01:28.369 [DEBUG] [Thread-193397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:01:28.369 [DEBUG] [Thread-193397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:01:28.372 [DEBUG] [Thread-193397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:01:28.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:01:28.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:01:28.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:01:28.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:01:28.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:01:28.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:01:28.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:01:28.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:01:28.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:01:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.667471 -999.00  +14.20  11.91     74   +9.70 1 2 1 1 1   887    0 3.90 -38.33 ----- 11.9 11.9 265.8 15.0 16.6 -23.6 16.4 -22.4 16.6 -20.5 16.9 -23.2
2026-04-12T18:01:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:01:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:01:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.667471
2026-04-12T18:01:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:01:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:01:28.399 [DEBUG] [Thread-193397] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:01:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:01:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:01:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:01:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:00:58', tmtdew=5.60666, humidity=69.0024, cloud=0.0, wind=13.4104, temperature=14.3147, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:01:09.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:01:28.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:01:28.496 [DEBUG] [Thread-193400] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc40
2026-04-12T18:01:28.496 [DEBUG] [Thread-193400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:01:28.511 [DEBUG] [Thread-193400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:01:28.511 [INFO] [Thread-193400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:01:28.518 [DEBUG] [Thread-193400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:01:28.518 [DEBUG] [Thread-193400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:01:28.518 [DEBUG] [Thread-193400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] client lang: <none>
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] server lang: <none>
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] kex follows: False
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] Compression: none
2026-04-12T18:01:28.519 [DEBUG] [Thread-193400] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:01:28.577 [DEBUG] [Thread-193400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:01:28.577 [DEBUG] [Thread-193400] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:01:28.578 [DEBUG] [Thread-193400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:01:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:01:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:01:28.633 [DEBUG] [Thread-193400] [transport.py] [_log()] userauth is OK
2026-04-12T18:01:28.633 [DEBUG] [Thread-193400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:01:28.633 [DEBUG] [Thread-193400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:01:28.633 [DEBUG] [Thread-193400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:01:28.633 [DEBUG] [Thread-193400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:01:28.649 [INFO] [Thread-193400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:01:28.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:01:28.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:01:29.491 [DEBUG] [Thread-193400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:01:29.491 [DEBUG] [Thread-193400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:01:29.539 [DEBUG] [Thread-193400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:01:29.539 [DEBUG] [Thread-193400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:01:29.549 [DEBUG] [Thread-193400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:01:29.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:01:29.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:01:29.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:01:29.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:01:29.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:01:29.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:01:29.587 [DEBUG] [Thread-193400] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:01:32.605 [DEBUG] [Thread-193402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:01:47.658 [DEBUG] [Thread-193403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:01:49.196 [DEBUG] [Thread-193404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:01:59.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:01:59.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:01:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:02:00.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 1, 34), 5.63617, 68.8723, 0.0, 13.41, 14.5968, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:02:00.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:01:34
2026-04-12T18:02:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:02:01.490 [DEBUG] [Thread-193405] [transport.py] [_log()] starting thread (client mode): 0xae5f0a60
2026-04-12T18:02:01.490 [DEBUG] [Thread-193405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:02:01.510 [DEBUG] [Thread-193405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:02:01.510 [INFO] [Thread-193405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:02:01.513 [DEBUG] [Thread-193405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] client lang: <none>
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] server lang: <none>
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] kex follows: False
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] Compression: none
2026-04-12T18:02:01.514 [DEBUG] [Thread-193405] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:02:01.530 [DEBUG] [Thread-193405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:02:01.530 [DEBUG] [Thread-193405] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:02:01.530 [DEBUG] [Thread-193405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:02:01.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:02:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:02:01.531 [DEBUG] [Thread-193405] [transport.py] [_log()] userauth is OK
2026-04-12T18:02:01.531 [DEBUG] [Thread-193405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:02:01.532 [DEBUG] [Thread-193405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:02:01.532 [DEBUG] [Thread-193405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:02:01.532 [DEBUG] [Thread-193405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:02:01.547 [INFO] [Thread-193405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:02:01.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:02:02.142 [DEBUG] [Thread-193405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:02:02.143 [DEBUG] [Thread-193405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:02:02.143 [DEBUG] [Thread-193405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:02:02.184 [DEBUG] [Thread-193405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:02:02.184 [DEBUG] [Thread-193405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:02:02.186 [DEBUG] [Thread-193405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:02:02.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:02:02.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:02:02.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:02:02.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:02:02.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:02:02.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:02:02.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.667818 -999.00  +14.20  10.36     74   +9.70 1 2 1 1 1   887    0 3.61 -40.98 ----- 10.4 10.4 256.2 13.1 16.6 -23.8 16.4 -22.3 16.6 -20.4 16.9 -22.7
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.667818
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:02:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:01:34', tmtdew=5.63617, humidity=68.8723, cloud=0.0, wind=13.41, temperature=14.5968, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:01:39.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:02:02.206 [DEBUG] [Thread-193405] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:02:02.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:02:02.287 [DEBUG] [Thread-193408] [transport.py] [_log()] starting thread (client mode): 0xae5f14b0
2026-04-12T18:02:02.287 [DEBUG] [Thread-193408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:02:02.303 [DEBUG] [Thread-193408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:02:02.303 [INFO] [Thread-193408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:02:02.310 [DEBUG] [Thread-193408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:02:02.310 [DEBUG] [Thread-193408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:02:02.310 [DEBUG] [Thread-193408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:02:02.310 [DEBUG] [Thread-193408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] client lang: <none>
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] server lang: <none>
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] kex follows: False
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] Compression: none
2026-04-12T18:02:02.311 [DEBUG] [Thread-193408] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:02:02.373 [DEBUG] [Thread-193408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:02:02.373 [DEBUG] [Thread-193408] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:02:02.374 [DEBUG] [Thread-193408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:02:02.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:02:02.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:02:02.429 [DEBUG] [Thread-193408] [transport.py] [_log()] userauth is OK
2026-04-12T18:02:02.430 [DEBUG] [Thread-193408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:02:02.430 [DEBUG] [Thread-193408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:02:02.430 [DEBUG] [Thread-193408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:02:02.430 [DEBUG] [Thread-193408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:02:02.448 [INFO] [Thread-193408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:02:02.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:02:02.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:02:02.693 [DEBUG] [Thread-193410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:02:02.819 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:02:02.820 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:02:03.305 [DEBUG] [Thread-193408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:02:03.305 [DEBUG] [Thread-193408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:02:03.353 [DEBUG] [Thread-193408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:02:03.353 [DEBUG] [Thread-193408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:02:03.362 [DEBUG] [Thread-193408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:02:03.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:02:03.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:02: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
2026-04-12T18:02:03.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:02:03.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:02:03.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:02:03.400 [DEBUG] [Thread-193408] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:02:17.751 [DEBUG] [Thread-193411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:02:32.790 [DEBUG] [Thread-193412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:02:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:02:33.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:02:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:02:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 2, 9), 5.53505, 69.3337, 0.0, 10.9231, 14.2979, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:02:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:02:09
2026-04-12T18:02:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:02:35.230 [DEBUG] [Thread-193413] [transport.py] [_log()] starting thread (client mode): 0xae535840
2026-04-12T18:02:35.230 [DEBUG] [Thread-193413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:02:35.242 [DEBUG] [Thread-193413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:02:35.242 [INFO] [Thread-193413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] client lang: <none>
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] server lang: <none>
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] kex follows: False
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] Compression: none
2026-04-12T18:02:35.243 [DEBUG] [Thread-193413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:02:35.257 [DEBUG] [Thread-193413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:02:35.257 [DEBUG] [Thread-193413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:02:35.257 [DEBUG] [Thread-193413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:02:35.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:02:35.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:02:35.259 [DEBUG] [Thread-193413] [transport.py] [_log()] userauth is OK
2026-04-12T18:02:35.259 [DEBUG] [Thread-193413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:02:35.259 [DEBUG] [Thread-193413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:02:35.259 [DEBUG] [Thread-193413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:02:35.259 [DEBUG] [Thread-193413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:02:35.279 [INFO] [Thread-193413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:02:35.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:02:35.874 [DEBUG] [Thread-193413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:02:35.874 [DEBUG] [Thread-193413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:02:35.875 [DEBUG] [Thread-193413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:02:35.916 [DEBUG] [Thread-193413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:02:35.916 [DEBUG] [Thread-193413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:02:35.917 [DEBUG] [Thread-193413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:02:35.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:02:35.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:02:35.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:02:35.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:02:35.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:02:35.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:02:35.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.668165 -999.00  +14.20   7.21     74   +9.80 1 2 1 1 1   887    0 3.58 -45.22 ----- 7.2 7.2 268.0 13.6 16.5 -23.8 16.4 -22.4 16.5 -20.6 16.9 -22.8
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.668165
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:02:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:02:09', tmtdew=5.53505, humidity=69.3337, cloud=0.0, wind=10.9231, temperature=14.2979, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:02:09.456', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:02:35.930 [DEBUG] [Thread-193413] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:02:36.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:02:36.014 [DEBUG] [Thread-193416] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-12T18:02:36.014 [DEBUG] [Thread-193416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:02:36.030 [DEBUG] [Thread-193416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:02:36.030 [INFO] [Thread-193416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] client lang: <none>
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] server lang: <none>
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] kex follows: False
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:02:36.038 [DEBUG] [Thread-193416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:02:36.039 [DEBUG] [Thread-193416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:02:36.039 [DEBUG] [Thread-193416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:02:36.039 [DEBUG] [Thread-193416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:02:36.039 [DEBUG] [Thread-193416] [transport.py] [_log()] Compression: none
2026-04-12T18:02:36.039 [DEBUG] [Thread-193416] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:02:36.097 [DEBUG] [Thread-193416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:02:36.097 [DEBUG] [Thread-193416] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:02:36.098 [DEBUG] [Thread-193416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:02:36.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:02:36.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:02:36.153 [DEBUG] [Thread-193416] [transport.py] [_log()] userauth is OK
2026-04-12T18:02:36.153 [DEBUG] [Thread-193416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:02:36.154 [DEBUG] [Thread-193416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:02:36.154 [DEBUG] [Thread-193416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:02:36.154 [DEBUG] [Thread-193416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:02:36.173 [INFO] [Thread-193416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:02:36.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:02:36.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:02:36.982 [DEBUG] [Thread-193416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:02:36.983 [DEBUG] [Thread-193416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:02:37.031 [DEBUG] [Thread-193416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:02:37.031 [DEBUG] [Thread-193416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:02:37.041 [DEBUG] [Thread-193416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:02:37.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:02:37.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:02:37.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:02:37.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:02:37.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:02:37.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:02:37.078 [DEBUG] [Thread-193416] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:02:47.827 [DEBUG] [Thread-193418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:02:49.252 [DEBUG] [Thread-193419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:03:02.878 [DEBUG] [Thread-193420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:03:02.961 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:03:02.963 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:03:07.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:03:07.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:03:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:03:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 2, 44), 5.39259, 70.032, 0.0, 13.5158, 14.6959, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:03:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:02:44
2026-04-12T18:03:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:03:08.929 [DEBUG] [Thread-193421] [transport.py] [_log()] starting thread (client mode): 0xae50afb0
2026-04-12T18:03:08.929 [DEBUG] [Thread-193421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:03:08.949 [DEBUG] [Thread-193421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:03:08.949 [INFO] [Thread-193421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] client lang: <none>
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] server lang: <none>
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] kex follows: False
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:03:08.951 [DEBUG] [Thread-193421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:03:08.952 [DEBUG] [Thread-193421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:03:08.952 [DEBUG] [Thread-193421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:03:08.952 [DEBUG] [Thread-193421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:03:08.952 [DEBUG] [Thread-193421] [transport.py] [_log()] Compression: none
2026-04-12T18:03:08.952 [DEBUG] [Thread-193421] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:03:08.964 [DEBUG] [Thread-193421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:03:08.964 [DEBUG] [Thread-193421] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:03:08.965 [DEBUG] [Thread-193421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:03:08.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:03:08.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:03:08.968 [DEBUG] [Thread-193421] [transport.py] [_log()] userauth is OK
2026-04-12T18:03:08.968 [DEBUG] [Thread-193421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:03:08.968 [DEBUG] [Thread-193421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:03:08.968 [DEBUG] [Thread-193421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:03:08.968 [DEBUG] [Thread-193421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:03:08.986 [INFO] [Thread-193421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:03:08.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:03:09.580 [DEBUG] [Thread-193421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:03:09.580 [DEBUG] [Thread-193421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:03:09.581 [DEBUG] [Thread-193421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:03:09.621 [DEBUG] [Thread-193421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:03:09.621 [DEBUG] [Thread-193421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:03:09.624 [DEBUG] [Thread-193421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:03:09.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:03:09.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:03:09.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:03:09.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:03:09.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:03:09.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:03:09.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:03:09.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:03:09.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:03:09.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.668513 -999.00  +14.20   9.26     74   +9.80 1 2 1 1 1   887    0 3.74 -42.39 ----- 9.3 9.3 268.8 10.8 16.6 -23.8 16.4 -22.4 16.5 -20.6 16.9 -22.8
2026-04-12T18:03:09.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:03:09.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:03:09.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.668513
2026-04-12T18:03:09.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:03:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:03:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:03:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:03:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:03:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:02:44', tmtdew=5.39259, humidity=70.032, cloud=0.0, wind=13.5158, temperature=14.6959, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:02:39.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:03:09.643 [DEBUG] [Thread-193421] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:03:09.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:03:09.736 [DEBUG] [Thread-193424] [transport.py] [_log()] starting thread (client mode): 0xae5f2d40
2026-04-12T18:03:09.736 [DEBUG] [Thread-193424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:03:09.751 [DEBUG] [Thread-193424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:03:09.751 [INFO] [Thread-193424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:03:09.759 [DEBUG] [Thread-193424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:03:09.759 [DEBUG] [Thread-193424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:03:09.759 [DEBUG] [Thread-193424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:03:09.759 [DEBUG] [Thread-193424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:09.759 [DEBUG] [Thread-193424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:09.759 [DEBUG] [Thread-193424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:09.759 [DEBUG] [Thread-193424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] client lang: <none>
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] server lang: <none>
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] kex follows: False
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] Compression: none
2026-04-12T18:03:09.760 [DEBUG] [Thread-193424] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:03:09.821 [DEBUG] [Thread-193424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:03:09.821 [DEBUG] [Thread-193424] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:03:09.822 [DEBUG] [Thread-193424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:03:09.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:03:09.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:03:09.876 [DEBUG] [Thread-193424] [transport.py] [_log()] userauth is OK
2026-04-12T18:03:09.876 [DEBUG] [Thread-193424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:03:09.876 [DEBUG] [Thread-193424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:03:09.876 [DEBUG] [Thread-193424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:03:09.877 [DEBUG] [Thread-193424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:03:09.892 [INFO] [Thread-193424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:03:09.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:03:09.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:03:10.728 [DEBUG] [Thread-193424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:03:10.728 [DEBUG] [Thread-193424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:03:10.776 [DEBUG] [Thread-193424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:03:10.776 [DEBUG] [Thread-193424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:03:10.785 [DEBUG] [Thread-193424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:03:10.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:03:10.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:03:10.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:03:10.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:03:10.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:03:10.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:03:10.820 [DEBUG] [Thread-193424] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:03:17.917 [DEBUG] [Thread-193426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:03:32.967 [DEBUG] [Thread-193427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:03:40.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:03:40.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:03:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:03:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 3, 20), 5.47659, 69.367, 0.0, 15.2633, 14.2649, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:03:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:03:20
2026-04-12T18:03:42.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:03:42.639 [DEBUG] [Thread-193428] [transport.py] [_log()] starting thread (client mode): 0xb0fcda20
2026-04-12T18:03:42.639 [DEBUG] [Thread-193428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:03:42.660 [DEBUG] [Thread-193428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:03:42.661 [INFO] [Thread-193428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:42.664 [DEBUG] [Thread-193428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] client lang: <none>
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] server lang: <none>
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] kex follows: False
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:03:42.665 [DEBUG] [Thread-193428] [transport.py] [_log()] Compression: none
2026-04-12T18:03:42.666 [DEBUG] [Thread-193428] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:03:42.679 [DEBUG] [Thread-193428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:03:42.680 [DEBUG] [Thread-193428] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:03:42.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:03:42.681 [DEBUG] [Thread-193428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:03:42.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:03:42.683 [DEBUG] [Thread-193428] [transport.py] [_log()] userauth is OK
2026-04-12T18:03:42.684 [DEBUG] [Thread-193428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:03:42.684 [DEBUG] [Thread-193428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:03:42.684 [DEBUG] [Thread-193428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:03:42.684 [DEBUG] [Thread-193428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:03:42.707 [INFO] [Thread-193428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:03:42.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:03:43.300 [DEBUG] [Thread-193428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:03:43.300 [DEBUG] [Thread-193428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:03:43.300 [DEBUG] [Thread-193428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:03:43.341 [DEBUG] [Thread-193428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:03:43.341 [DEBUG] [Thread-193428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:03:43.344 [DEBUG] [Thread-193428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:03:43.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:03:43.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:03:43.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:03:43.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:03:43.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:03:43.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:03:43.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:03:43.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:03:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:03:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.668860 -999.00  +14.20   8.06     74   +9.80 1 2 1 1 1   887    0 3.45 -46.52 ----- 8.1 8.1 265.4 12.3 16.5 -24.0 16.4 -22.5 16.4 -21.4 16.9 -22.8
2026-04-12T18:03:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:03:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:03:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.668860
2026-04-12T18:03:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:03:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:03:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:03:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:03:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:03:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:03:20', tmtdew=5.47659, humidity=69.367, cloud=0.0, wind=15.2633, temperature=14.2649, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:03:09.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:03:43.375 [DEBUG] [Thread-193428] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:03:43.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:03:43.470 [DEBUG] [Thread-193431] [transport.py] [_log()] starting thread (client mode): 0xb0fcf310
2026-04-12T18:03:43.470 [DEBUG] [Thread-193431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:03:43.484 [DEBUG] [Thread-193431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:03:43.484 [INFO] [Thread-193431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:03:43.492 [DEBUG] [Thread-193431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:03:43.492 [DEBUG] [Thread-193431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] client lang: <none>
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] server lang: <none>
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] kex follows: False
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:03:43.493 [DEBUG] [Thread-193431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:03:43.494 [DEBUG] [Thread-193431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:03:43.494 [DEBUG] [Thread-193431] [transport.py] [_log()] Compression: none
2026-04-12T18:03:43.494 [DEBUG] [Thread-193431] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:03:43.553 [DEBUG] [Thread-193431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:03:43.554 [DEBUG] [Thread-193431] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:03:43.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:03:43.555 [DEBUG] [Thread-193431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:03:43.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:03:43.609 [DEBUG] [Thread-193431] [transport.py] [_log()] userauth is OK
2026-04-12T18:03:43.610 [DEBUG] [Thread-193431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:03:43.610 [DEBUG] [Thread-193431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:03:43.610 [DEBUG] [Thread-193431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:03:43.610 [DEBUG] [Thread-193431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:03:43.628 [INFO] [Thread-193431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:03:43.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:03:43.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:03:44.432 [DEBUG] [Thread-193431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:03:44.432 [DEBUG] [Thread-193431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:03:44.480 [DEBUG] [Thread-193431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:03:44.480 [DEBUG] [Thread-193431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:03:44.490 [DEBUG] [Thread-193431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:03:44.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:03:44.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:03:44.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:03:44.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:03:44.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:03:44.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:03:44.527 [DEBUG] [Thread-193431] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:03:48.005 [DEBUG] [Thread-193433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:03:49.300 [DEBUG] [Thread-193434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:03.060 [DEBUG] [Thread-193435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:03.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:03.107 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:14.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:04:14.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:04:14.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:04:15.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 3, 55), 5.40478, 69.9664, 0.0, 11.1524, 14.1984, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:04:15.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:03:55
2026-04-12T18:04:16.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:04:16.333 [DEBUG] [Thread-193436] [transport.py] [_log()] starting thread (client mode): 0xae519240
2026-04-12T18:04:16.333 [DEBUG] [Thread-193436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:04:16.351 [DEBUG] [Thread-193436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:04:16.351 [INFO] [Thread-193436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:04:16.354 [DEBUG] [Thread-193436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] client lang: <none>
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] server lang: <none>
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] kex follows: False
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] Compression: none
2026-04-12T18:04:16.355 [DEBUG] [Thread-193436] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:04:16.373 [DEBUG] [Thread-193436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:04:16.373 [DEBUG] [Thread-193436] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:04:16.374 [DEBUG] [Thread-193436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:04:16.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:04:16.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:04:16.376 [DEBUG] [Thread-193436] [transport.py] [_log()] userauth is OK
2026-04-12T18:04:16.376 [DEBUG] [Thread-193436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:04:16.376 [DEBUG] [Thread-193436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:04:16.376 [DEBUG] [Thread-193436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:04:16.376 [DEBUG] [Thread-193436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:04:16.412 [INFO] [Thread-193436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:04:16.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:04:17.048 [DEBUG] [Thread-193436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:04:17.049 [DEBUG] [Thread-193436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:04:17.049 [DEBUG] [Thread-193436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:04:17.090 [DEBUG] [Thread-193436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:04:17.090 [DEBUG] [Thread-193436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:04:17.094 [DEBUG] [Thread-193436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:04:17.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:04:17.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:04:17.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:04:17.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:04:17.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:04:17.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:04:17.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:04:17.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:04:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:04:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.669554 -999.00  +14.20  11.71     75   +9.90 1 2 1 1 1   887    0 3.20 -52.59 ----- 11.7 11.7 266.6 14.9 16.5 -23.7 16.4 -22.2 16.4 -20.5 16.9 -22.8
2026-04-12T18:04:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:04:17.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:04:17.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.669554
2026-04-12T18:04:17.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:04:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:04:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:04:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:04:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:04:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:03:55', tmtdew=5.40478, humidity=69.9664, cloud=0.0, wind=11.1524, temperature=14.1984, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:04:09.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:04:17.120 [DEBUG] [Thread-193436] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:04:17.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:04:17.213 [DEBUG] [Thread-193439] [transport.py] [_log()] starting thread (client mode): 0xae52fbe0
2026-04-12T18:04:17.214 [DEBUG] [Thread-193439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:04:17.228 [DEBUG] [Thread-193439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:04:17.229 [INFO] [Thread-193439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:04:17.236 [DEBUG] [Thread-193439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:04:17.236 [DEBUG] [Thread-193439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] client lang: <none>
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] server lang: <none>
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] kex follows: False
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] Compression: none
2026-04-12T18:04:17.237 [DEBUG] [Thread-193439] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:04:17.297 [DEBUG] [Thread-193439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:04:17.298 [DEBUG] [Thread-193439] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:04:17.298 [DEBUG] [Thread-193439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:04:17.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:04:17.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:04:17.353 [DEBUG] [Thread-193439] [transport.py] [_log()] userauth is OK
2026-04-12T18:04:17.353 [DEBUG] [Thread-193439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:04:17.353 [DEBUG] [Thread-193439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:04:17.353 [DEBUG] [Thread-193439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:04:17.353 [DEBUG] [Thread-193439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:04:17.372 [INFO] [Thread-193439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:04:17.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:04:17.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:04:18.102 [DEBUG] [Thread-193441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:18.233 [DEBUG] [Thread-193439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:04:18.233 [DEBUG] [Thread-193439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:04:18.281 [DEBUG] [Thread-193439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:04:18.281 [DEBUG] [Thread-193439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:04:18.290 [DEBUG] [Thread-193439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:04:18.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:04:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:04:18.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:04:18.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:04:18.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:04:18.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:04:18.327 [DEBUG] [Thread-193439] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:04:33.150 [DEBUG] [Thread-193442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:48.181 [DEBUG] [Thread-193443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:48.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:04:48.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:04: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
2026-04-12T18:04:49.350 [DEBUG] [Thread-193444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:04:49.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 4, 30), 5.31165, 70.414, 0.0, 12.5813, 14.2316, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:04:49.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:04:30
2026-04-12T18:04:50.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:04:50.275 [DEBUG] [Thread-193445] [transport.py] [_log()] starting thread (client mode): 0xae52e380
2026-04-12T18:04:50.275 [DEBUG] [Thread-193445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:04:50.296 [DEBUG] [Thread-193445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:04:50.296 [INFO] [Thread-193445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:04:50.297 [DEBUG] [Thread-193445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:04:50.297 [DEBUG] [Thread-193445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:04:50.297 [DEBUG] [Thread-193445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:04:50.297 [DEBUG] [Thread-193445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:50.297 [DEBUG] [Thread-193445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] client lang: <none>
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] server lang: <none>
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] kex follows: False
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] Compression: none
2026-04-12T18:04:50.298 [DEBUG] [Thread-193445] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:04:50.308 [DEBUG] [Thread-193445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:04:50.309 [DEBUG] [Thread-193445] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:04:50.310 [DEBUG] [Thread-193445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:04:50.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:04:50.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:04:50.312 [DEBUG] [Thread-193445] [transport.py] [_log()] userauth is OK
2026-04-12T18:04:50.312 [DEBUG] [Thread-193445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:04:50.313 [DEBUG] [Thread-193445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:04:50.313 [DEBUG] [Thread-193445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:04:50.313 [DEBUG] [Thread-193445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:04:50.329 [INFO] [Thread-193445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:04:50.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:04:50.951 [DEBUG] [Thread-193445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:04:50.951 [DEBUG] [Thread-193445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:04:50.952 [DEBUG] [Thread-193445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:04:50.992 [DEBUG] [Thread-193445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:04:50.992 [DEBUG] [Thread-193445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:04:50.996 [DEBUG] [Thread-193445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:04:51.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:04:51.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:04:51.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:04:51.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:04:51.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:04:51.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:04:51.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:04:51.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:04:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:04:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.669901 -999.00  +14.20   9.87     75   +9.80 1 2 1 1 1   887    0 3.32 -50.46 ----- 9.9 9.9 260.6 16.3 16.4 -23.9 16.3 -22.4 16.3 -20.6 16.8 -22.8
2026-04-12T18:04:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:04:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:04:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.669901
2026-04-12T18:04:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:04:51.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:04:51.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:04:51.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:04:51.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:04:51.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:04:30', tmtdew=5.31165, humidity=70.414, cloud=0.0, wind=12.5813, temperature=14.2316, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:04:39.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:04:51.025 [DEBUG] [Thread-193445] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:04:51.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:04:51.119 [DEBUG] [Thread-193448] [transport.py] [_log()] starting thread (client mode): 0xae5b4940
2026-04-12T18:04:51.120 [DEBUG] [Thread-193448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:04:51.134 [DEBUG] [Thread-193448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:04:51.135 [INFO] [Thread-193448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:04:51.142 [DEBUG] [Thread-193448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:04:51.142 [DEBUG] [Thread-193448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] client lang: <none>
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] server lang: <none>
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] kex follows: False
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:04:51.143 [DEBUG] [Thread-193448] [transport.py] [_log()] Compression: none
2026-04-12T18:04:51.144 [DEBUG] [Thread-193448] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:04:51.201 [DEBUG] [Thread-193448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:04:51.201 [DEBUG] [Thread-193448] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:04:51.202 [DEBUG] [Thread-193448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:04:51.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:04:51.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:04:51.257 [DEBUG] [Thread-193448] [transport.py] [_log()] userauth is OK
2026-04-12T18:04:51.257 [DEBUG] [Thread-193448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:04:51.257 [DEBUG] [Thread-193448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:04:51.257 [DEBUG] [Thread-193448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:04:51.258 [DEBUG] [Thread-193448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:04:51.276 [INFO] [Thread-193448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:04:51.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:04:51.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:04:52.106 [DEBUG] [Thread-193448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:04:52.106 [DEBUG] [Thread-193448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:04:52.154 [DEBUG] [Thread-193448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:04:52.154 [DEBUG] [Thread-193448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:04:52.164 [DEBUG] [Thread-193448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:04:52.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:04:52.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:04:52.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:04:52.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:04:52.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:04:52.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:04:52.201 [DEBUG] [Thread-193448] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:05:03.214 [DEBUG] [Thread-193450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:05:03.259 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:05:03.260 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:05:18.280 [DEBUG] [Thread-193451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:05:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:05:22.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:05:22.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:05:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 5, 6), 5.36832, 70.1323, 0.0, 13.181, 14.1653, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:05:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:05:06
2026-04-12T18:05:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:05:23.992 [DEBUG] [Thread-193452] [transport.py] [_log()] starting thread (client mode): 0xb0f6fc10
2026-04-12T18:05:23.992 [DEBUG] [Thread-193452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:05:24.012 [DEBUG] [Thread-193452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:05:24.012 [INFO] [Thread-193452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:05:24.015 [DEBUG] [Thread-193452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:05:24.015 [DEBUG] [Thread-193452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:05:24.015 [DEBUG] [Thread-193452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:05:24.015 [DEBUG] [Thread-193452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:05:24.015 [DEBUG] [Thread-193452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:05:24.015 [DEBUG] [Thread-193452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] client lang: <none>
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] server lang: <none>
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] kex follows: False
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:05:24.016 [DEBUG] [Thread-193452] [transport.py] [_log()] Compression: none
2026-04-12T18:05:24.017 [DEBUG] [Thread-193452] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:05:24.036 [DEBUG] [Thread-193452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:05:24.036 [DEBUG] [Thread-193452] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:05:24.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:05:24.038 [DEBUG] [Thread-193452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:05:24.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:05:24.040 [DEBUG] [Thread-193452] [transport.py] [_log()] userauth is OK
2026-04-12T18:05:24.041 [DEBUG] [Thread-193452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:05:24.041 [DEBUG] [Thread-193452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:05:24.041 [DEBUG] [Thread-193452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:05:24.041 [DEBUG] [Thread-193452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:05:24.067 [INFO] [Thread-193452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:05:24.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:05:30.450 [DEBUG] [Thread-193452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:05:30.450 [DEBUG] [Thread-193452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:05:30.451 [DEBUG] [Thread-193452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:05:30.492 [DEBUG] [Thread-193452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:05:30.492 [DEBUG] [Thread-193452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:05:30.495 [DEBUG] [Thread-193452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:05:30.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:05:30.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:05:30.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:05:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:05:30.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:05:30.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:05:30.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:05:30.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:05:30.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:05:30.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.669901 -999.00  +14.20   9.87     75   +9.80 1 2 1 1 1   887    0 3.32 -50.46 ----- 9.9 9.9 260.6 16.3 16.4 -23.9 16.3 -22.4 16.3 -20.6 16.8 -22.8
2026-04-12T18:05:30.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:05:30.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:05:30.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.669901
2026-04-12T18:05:30.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:05:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:05:30.521 [DEBUG] [Thread-193452] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:05:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:05:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:05:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:05:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:05:06', tmtdew=5.36832, humidity=70.1323, cloud=0.0, wind=13.181, temperature=14.1653, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:04:39.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:05:30.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:05:30.620 [DEBUG] [Thread-193455] [transport.py] [_log()] starting thread (client mode): 0xb0fcf0d0
2026-04-12T18:05:30.620 [DEBUG] [Thread-193455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:05:30.634 [DEBUG] [Thread-193455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:05:30.634 [INFO] [Thread-193455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] client lang: <none>
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] server lang: <none>
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] kex follows: False
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] Compression: none
2026-04-12T18:05:30.642 [DEBUG] [Thread-193455] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:05:30.699 [DEBUG] [Thread-193455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:05:30.700 [DEBUG] [Thread-193455] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:05:30.700 [DEBUG] [Thread-193455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:05:30.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:05:30.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:05:30.756 [DEBUG] [Thread-193455] [transport.py] [_log()] userauth is OK
2026-04-12T18:05:30.756 [DEBUG] [Thread-193455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:05:30.756 [DEBUG] [Thread-193455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:05:30.756 [DEBUG] [Thread-193455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:05:30.756 [DEBUG] [Thread-193455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:05:30.778 [INFO] [Thread-193455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:05:30.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:05:30.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:05:31.606 [DEBUG] [Thread-193455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:05:31.606 [DEBUG] [Thread-193455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:05:31.654 [DEBUG] [Thread-193455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:05:31.654 [DEBUG] [Thread-193455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:05:31.663 [DEBUG] [Thread-193455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:05:31.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:05:31.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:05:31.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:05:31.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:05:31.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:05:31.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:05:31.698 [DEBUG] [Thread-193455] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:05:33.314 [DEBUG] [Thread-193457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:05:48.364 [DEBUG] [Thread-193458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:05:49.398 [DEBUG] [Thread-193459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:06:01.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:06:01.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:06:01.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:06:02.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 5, 41), 5.29464, 70.4636, 0.0, 13.6217, 14.5309, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:06:02.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:05:41
2026-04-12T18:06:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:06:03.398 [DEBUG] [Thread-193460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:06:03.401 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:06:03.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:06:03.520 [DEBUG] [Thread-193461] [transport.py] [_log()] starting thread (client mode): 0xae519ed0
2026-04-12T18:06:03.521 [DEBUG] [Thread-193461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:06:03.541 [DEBUG] [Thread-193461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:06:03.541 [INFO] [Thread-193461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:06:03.544 [DEBUG] [Thread-193461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:06:03.544 [DEBUG] [Thread-193461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:06:03.544 [DEBUG] [Thread-193461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:06:03.544 [DEBUG] [Thread-193461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:03.544 [DEBUG] [Thread-193461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:03.544 [DEBUG] [Thread-193461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] client lang: <none>
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] server lang: <none>
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] kex follows: False
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] Compression: none
2026-04-12T18:06:03.545 [DEBUG] [Thread-193461] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:06:03.558 [DEBUG] [Thread-193461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:06:03.559 [DEBUG] [Thread-193461] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:06:03.559 [DEBUG] [Thread-193461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:06:03.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:06:03.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:06:03.561 [DEBUG] [Thread-193461] [transport.py] [_log()] userauth is OK
2026-04-12T18:06:03.561 [DEBUG] [Thread-193461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:06:03.561 [DEBUG] [Thread-193461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:06:03.561 [DEBUG] [Thread-193461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:06:03.562 [DEBUG] [Thread-193461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:06:03.580 [INFO] [Thread-193461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:06:03.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:06:04.165 [DEBUG] [Thread-193461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:06:04.165 [DEBUG] [Thread-193461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:06:04.166 [DEBUG] [Thread-193461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:06:04.206 [DEBUG] [Thread-193461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:06:04.207 [DEBUG] [Thread-193461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:06:04.210 [DEBUG] [Thread-193461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:06:04.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:06:04.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:06:04.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:06:04.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:06:04.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:06:04.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:06:04.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:06:04.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:06:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:06:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.670596 -999.00  +14.20  12.07     75   +9.90 1 2 1 1 1   887    0 3.38 -50.20 ----- 12.1 12.1 269.2 14.9 16.4 -23.5 16.3 -22.2 16.3 -20.4 16.7 -22.6
2026-04-12T18:06:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:06:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:06:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.670596
2026-04-12T18:06:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:06:04.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:06:04.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:06:04.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:06:04.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:06:04.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:05:41', tmtdew=5.29464, humidity=70.4636, cloud=0.0, wind=13.6217, temperature=14.5309, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:05:39.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:06:04.237 [DEBUG] [Thread-193461] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:06:04.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:06:04.329 [DEBUG] [Thread-193464] [transport.py] [_log()] starting thread (client mode): 0xae5f3520
2026-04-12T18:06:04.330 [DEBUG] [Thread-193464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:06:04.344 [DEBUG] [Thread-193464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:06:04.344 [INFO] [Thread-193464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:06:04.351 [DEBUG] [Thread-193464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] client lang: <none>
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] server lang: <none>
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] kex follows: False
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] Compression: none
2026-04-12T18:06:04.352 [DEBUG] [Thread-193464] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:06:04.413 [DEBUG] [Thread-193464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:06:04.414 [DEBUG] [Thread-193464] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:06:04.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:06:04.414 [DEBUG] [Thread-193464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:06:04.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:06:04.473 [DEBUG] [Thread-193464] [transport.py] [_log()] userauth is OK
2026-04-12T18:06:04.473 [DEBUG] [Thread-193464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:06:04.473 [DEBUG] [Thread-193464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:06:04.473 [DEBUG] [Thread-193464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:06:04.473 [DEBUG] [Thread-193464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:06:04.497 [INFO] [Thread-193464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:06:04.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:06:04.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:06:05.332 [DEBUG] [Thread-193464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:06:05.332 [DEBUG] [Thread-193464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:06:05.380 [DEBUG] [Thread-193464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:06:05.380 [DEBUG] [Thread-193464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:06:05.389 [DEBUG] [Thread-193464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:06:05.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:06:05.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:06:05.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:06:05.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:06:05.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:06:05.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:06:05.426 [DEBUG] [Thread-193464] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:06:18.432 [DEBUG] [Thread-193466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:06:33.486 [DEBUG] [Thread-193467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:06:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:06:35.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:06:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:06:36.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 6, 17), 5.26313, 70.3975, 0.0, 13.9748, 14.182, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:06:36.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:06:17
2026-04-12T18:06:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:06:37.274 [DEBUG] [Thread-193468] [transport.py] [_log()] starting thread (client mode): 0xae52fbe0
2026-04-12T18:06:37.274 [DEBUG] [Thread-193468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:06:37.292 [DEBUG] [Thread-193468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:06:37.293 [INFO] [Thread-193468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] client lang: <none>
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] server lang: <none>
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] kex follows: False
2026-04-12T18:06:37.294 [DEBUG] [Thread-193468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:06:37.295 [DEBUG] [Thread-193468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:06:37.295 [DEBUG] [Thread-193468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:06:37.295 [DEBUG] [Thread-193468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:06:37.295 [DEBUG] [Thread-193468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:06:37.295 [DEBUG] [Thread-193468] [transport.py] [_log()] Compression: none
2026-04-12T18:06:37.295 [DEBUG] [Thread-193468] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:06:37.305 [DEBUG] [Thread-193468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:06:37.306 [DEBUG] [Thread-193468] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:06:37.307 [DEBUG] [Thread-193468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:06:37.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:06:37.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:06:37.309 [DEBUG] [Thread-193468] [transport.py] [_log()] userauth is OK
2026-04-12T18:06:37.310 [DEBUG] [Thread-193468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:06:37.310 [DEBUG] [Thread-193468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:06:37.310 [DEBUG] [Thread-193468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:06:37.310 [DEBUG] [Thread-193468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:06:37.331 [INFO] [Thread-193468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:06:37.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:06:37.933 [DEBUG] [Thread-193468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:06:37.934 [DEBUG] [Thread-193468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:06:37.934 [DEBUG] [Thread-193468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:06:37.975 [DEBUG] [Thread-193468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:06:37.975 [DEBUG] [Thread-193468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:06:37.980 [DEBUG] [Thread-193468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:06:37.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:06:37.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:06:37.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:06:37.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:06:37.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:06:38.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:06:38.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:06:38.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:06:38.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:06:38.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.670943 -999.00  +14.20  10.44     75   +9.90 1 2 1 1 1   887    0 2.95 -57.49 ----- 10.4 10.4 265.8 13.1 16.4 -23.7 16.3 -22.5 16.2 -20.5 16.7 -22.8
2026-04-12T18:06:38.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:06:38.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:06:38.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.670943
2026-04-12T18:06:38.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:06:38.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:06:38.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:06:38.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:06:38.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:06:38.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:06:17', tmtdew=5.26313, humidity=70.3975, cloud=0.0, wind=13.9748, temperature=14.182, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:06:09.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:06:38.003 [DEBUG] [Thread-193468] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:06:38.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:06:38.099 [DEBUG] [Thread-193471] [transport.py] [_log()] starting thread (client mode): 0xae5192d0
2026-04-12T18:06:38.099 [DEBUG] [Thread-193471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:06:38.114 [DEBUG] [Thread-193471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:06:38.114 [INFO] [Thread-193471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:06:38.122 [DEBUG] [Thread-193471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:06:38.122 [DEBUG] [Thread-193471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:06:38.122 [DEBUG] [Thread-193471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:06:38.122 [DEBUG] [Thread-193471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:38.122 [DEBUG] [Thread-193471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:06:38.122 [DEBUG] [Thread-193471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] client lang: <none>
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] server lang: <none>
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] kex follows: False
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:06:38.123 [DEBUG] [Thread-193471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:06:38.124 [DEBUG] [Thread-193471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:06:38.124 [DEBUG] [Thread-193471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:06:38.124 [DEBUG] [Thread-193471] [transport.py] [_log()] Compression: none
2026-04-12T18:06:38.124 [DEBUG] [Thread-193471] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:06:38.180 [DEBUG] [Thread-193471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:06:38.180 [DEBUG] [Thread-193471] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:06:38.181 [DEBUG] [Thread-193471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:06:38.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:06:38.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:06:38.236 [DEBUG] [Thread-193471] [transport.py] [_log()] userauth is OK
2026-04-12T18:06:38.237 [DEBUG] [Thread-193471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:06:38.237 [DEBUG] [Thread-193471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:06:38.237 [DEBUG] [Thread-193471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:06:38.237 [DEBUG] [Thread-193471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:06:38.256 [INFO] [Thread-193471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:06:38.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:06:38.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:06:39.076 [DEBUG] [Thread-193471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:06:39.076 [DEBUG] [Thread-193471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:06:39.124 [DEBUG] [Thread-193471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:06:39.124 [DEBUG] [Thread-193471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:06:39.134 [DEBUG] [Thread-193471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:06:39.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:06:39.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:06:39.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:06:39.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:06:39.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:06:39.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:06:39.171 [DEBUG] [Thread-193471] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:06:48.523 [DEBUG] [Thread-193473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:06:49.454 [DEBUG] [Thread-193474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:07:03.545 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:07:03.546 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:07:03.576 [DEBUG] [Thread-193475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:07:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:07:09.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:07:09.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:07:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 6, 52), 5.27942, 70.5295, 0.0, 17.7847, 14.4973, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:07:10.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:06:52
2026-04-12T18:07:10.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:07:11.096 [DEBUG] [Thread-193476] [transport.py] [_log()] starting thread (client mode): 0xb0f42e00
2026-04-12T18:07:11.096 [DEBUG] [Thread-193476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:07:11.106 [DEBUG] [Thread-193476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:07:11.106 [INFO] [Thread-193476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] client lang: <none>
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] server lang: <none>
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] kex follows: False
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] Compression: none
2026-04-12T18:07:11.108 [DEBUG] [Thread-193476] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:07:11.120 [DEBUG] [Thread-193476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:07:11.120 [DEBUG] [Thread-193476] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:07:11.120 [DEBUG] [Thread-193476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:07:11.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:07:11.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:07:11.121 [DEBUG] [Thread-193476] [transport.py] [_log()] userauth is OK
2026-04-12T18:07:11.121 [DEBUG] [Thread-193476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:07:11.122 [DEBUG] [Thread-193476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:07:11.122 [DEBUG] [Thread-193476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:07:11.122 [DEBUG] [Thread-193476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:07:11.143 [INFO] [Thread-193476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:07:11.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:07:11.762 [DEBUG] [Thread-193476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:07:11.763 [DEBUG] [Thread-193476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:07:11.763 [DEBUG] [Thread-193476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:07:11.804 [DEBUG] [Thread-193476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:07:11.804 [DEBUG] [Thread-193476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:07:11.807 [DEBUG] [Thread-193476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:07:11.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:07:11.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:07:11.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:07:11.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:07:11.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:07:11.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:07:11.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:07:11.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:07:11.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:07:11.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.671290 -999.00  +14.10  12.18     75   +9.80 1 2 1 1 1   886    0 3.04 -59.77 ----- 12.2 12.2 268.8 16.5 16.4 -23.8 16.3 -22.5 16.2 -20.5 16.7 -22.9
2026-04-12T18:07:11.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:07:11.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:07:11.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.671290
2026-04-12T18:07:11.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:07:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:07:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:07:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:07:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:07:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:06:52', tmtdew=5.27942, humidity=70.5295, cloud=0.0, wind=17.7847, temperature=14.4973, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:06:39.456', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:07:11.824 [DEBUG] [Thread-193476] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:07:11.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:07:11.918 [DEBUG] [Thread-193479] [transport.py] [_log()] starting thread (client mode): 0xae52f700
2026-04-12T18:07:11.918 [DEBUG] [Thread-193479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:07:11.932 [DEBUG] [Thread-193479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:07:11.932 [INFO] [Thread-193479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:07:11.940 [DEBUG] [Thread-193479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:07:11.940 [DEBUG] [Thread-193479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] client lang: <none>
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] server lang: <none>
2026-04-12T18:07:11.941 [DEBUG] [Thread-193479] [transport.py] [_log()] kex follows: False
2026-04-12T18:07:11.942 [DEBUG] [Thread-193479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:07:11.942 [DEBUG] [Thread-193479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:07:11.942 [DEBUG] [Thread-193479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:07:11.942 [DEBUG] [Thread-193479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:07:11.942 [DEBUG] [Thread-193479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:07:11.942 [DEBUG] [Thread-193479] [transport.py] [_log()] Compression: none
2026-04-12T18:07:11.942 [DEBUG] [Thread-193479] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:07:12.000 [DEBUG] [Thread-193479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:07:12.000 [DEBUG] [Thread-193479] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:07:12.001 [DEBUG] [Thread-193479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:07:12.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:07:12.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:07:12.057 [DEBUG] [Thread-193479] [transport.py] [_log()] userauth is OK
2026-04-12T18:07:12.057 [DEBUG] [Thread-193479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:07:12.057 [DEBUG] [Thread-193479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:07:12.057 [DEBUG] [Thread-193479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:07:12.057 [DEBUG] [Thread-193479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:07:12.081 [INFO] [Thread-193479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:07:12.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:07:12.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:07:12.898 [DEBUG] [Thread-193479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:07:12.898 [DEBUG] [Thread-193479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:07:12.946 [DEBUG] [Thread-193479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:07:12.946 [DEBUG] [Thread-193479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:07:12.955 [DEBUG] [Thread-193479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:07:12.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:07:12.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:07:12.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:07:12.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:07:12.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:07:12.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:07:12.992 [DEBUG] [Thread-193479] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:07:18.612 [DEBUG] [Thread-193481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:07:33.669 [DEBUG] [Thread-193482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:07:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:07:43.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:07:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:07:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 7, 28), 5.31, 70.1653, 0.0, 15.6514, 14.0321, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:07:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:07:28
2026-04-12T18:07:44.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:07:44.825 [DEBUG] [Thread-193483] [transport.py] [_log()] starting thread (client mode): 0xae519960
2026-04-12T18:07:44.825 [DEBUG] [Thread-193483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:07:44.845 [DEBUG] [Thread-193483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:07:44.845 [INFO] [Thread-193483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:07:44.847 [DEBUG] [Thread-193483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:07:44.847 [DEBUG] [Thread-193483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:07:44.847 [DEBUG] [Thread-193483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:07:44.847 [DEBUG] [Thread-193483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:44.847 [DEBUG] [Thread-193483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] client lang: <none>
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] server lang: <none>
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] kex follows: False
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] Compression: none
2026-04-12T18:07:44.848 [DEBUG] [Thread-193483] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:07:44.866 [DEBUG] [Thread-193483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:07:44.867 [DEBUG] [Thread-193483] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:07:44.868 [DEBUG] [Thread-193483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:07:44.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:07:44.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:07:44.869 [DEBUG] [Thread-193483] [transport.py] [_log()] userauth is OK
2026-04-12T18:07:44.870 [DEBUG] [Thread-193483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:07:44.870 [DEBUG] [Thread-193483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:07:44.870 [DEBUG] [Thread-193483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:07:44.870 [DEBUG] [Thread-193483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:07:44.888 [INFO] [Thread-193483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:07:44.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:07:45.471 [DEBUG] [Thread-193483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:07:45.471 [DEBUG] [Thread-193483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:07:45.471 [DEBUG] [Thread-193483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:07:45.512 [DEBUG] [Thread-193483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:07:45.512 [DEBUG] [Thread-193483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:07:45.515 [DEBUG] [Thread-193483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:07:45.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:07:45.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:07:45.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:07:45.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:07:45.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:07:45.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:07:45.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:07:45.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:07:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:07:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.671985 -999.00  +14.00   7.77     74   +9.60 1 2 1 1 1   886    0 3.06 -52.55 ----- 7.8 7.8 264.4 15.6 16.2 -23.8 16.2 -22.4 16.1 -20.8 16.5 -23.0
2026-04-12T18:07:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:07:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:07:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.671985
2026-04-12T18:07:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:07:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:07:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:07:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:07:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:07:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:07:28', tmtdew=5.31, humidity=70.1653, cloud=0.0, wind=15.6514, temperature=14.0321, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:07:39.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:07:45.535 [DEBUG] [Thread-193483] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:07:45.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:07:45.634 [DEBUG] [Thread-193486] [transport.py] [_log()] starting thread (client mode): 0xb0fcc550
2026-04-12T18:07:45.634 [DEBUG] [Thread-193486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:07:45.654 [DEBUG] [Thread-193486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:07:45.654 [INFO] [Thread-193486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] client lang: <none>
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] server lang: <none>
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] kex follows: False
2026-04-12T18:07:45.662 [DEBUG] [Thread-193486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:07:45.663 [DEBUG] [Thread-193486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:07:45.663 [DEBUG] [Thread-193486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:07:45.663 [DEBUG] [Thread-193486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:07:45.663 [DEBUG] [Thread-193486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:07:45.663 [DEBUG] [Thread-193486] [transport.py] [_log()] Compression: none
2026-04-12T18:07:45.663 [DEBUG] [Thread-193486] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:07:45.721 [DEBUG] [Thread-193486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:07:45.721 [DEBUG] [Thread-193486] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:07:45.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:07:45.722 [DEBUG] [Thread-193486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:07:45.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:07:45.776 [DEBUG] [Thread-193486] [transport.py] [_log()] userauth is OK
2026-04-12T18:07:45.777 [DEBUG] [Thread-193486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:07:45.777 [DEBUG] [Thread-193486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:07:45.777 [DEBUG] [Thread-193486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:07:45.777 [DEBUG] [Thread-193486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:07:45.796 [INFO] [Thread-193486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:07:45.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:07:45.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:07:46.627 [DEBUG] [Thread-193486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:07:46.627 [DEBUG] [Thread-193486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:07:46.675 [DEBUG] [Thread-193486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:07:46.675 [DEBUG] [Thread-193486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:07:46.684 [DEBUG] [Thread-193486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:07:46.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:07:46.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:07:46.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:07:46.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:07:46.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:07:46.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:07:46.721 [DEBUG] [Thread-193486] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:07:48.701 [DEBUG] [Thread-193488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:07:49.509 [DEBUG] [Thread-193489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:03.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:03.687 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:03.756 [DEBUG] [Thread-193490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:16.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:08:16.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:08:16.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:08:17.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 8, 3), 5.31496, 70.1323, 0.0, 15.8454, 13.9825, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:08:17.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:08:03
2026-04-12T18:08:18.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:08:18.519 [DEBUG] [Thread-193491] [transport.py] [_log()] starting thread (client mode): 0xb0f40bb0
2026-04-12T18:08:18.519 [DEBUG] [Thread-193491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:08:18.539 [DEBUG] [Thread-193491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:08:18.539 [INFO] [Thread-193491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] client lang: <none>
2026-04-12T18:08:18.540 [DEBUG] [Thread-193491] [transport.py] [_log()] server lang: <none>
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] kex follows: False
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] Compression: none
2026-04-12T18:08:18.541 [DEBUG] [Thread-193491] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:08:18.549 [DEBUG] [Thread-193491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:08:18.550 [DEBUG] [Thread-193491] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:08:18.550 [DEBUG] [Thread-193491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:08:18.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:08:18.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:08:18.552 [DEBUG] [Thread-193491] [transport.py] [_log()] userauth is OK
2026-04-12T18:08:18.552 [DEBUG] [Thread-193491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:08:18.552 [DEBUG] [Thread-193491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:08:18.552 [DEBUG] [Thread-193491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:08:18.552 [DEBUG] [Thread-193491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:08:18.575 [INFO] [Thread-193491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:08:18.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:08:18.795 [DEBUG] [Thread-193493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:19.192 [DEBUG] [Thread-193491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:08:19.192 [DEBUG] [Thread-193491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:08:19.193 [DEBUG] [Thread-193491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:08:19.233 [DEBUG] [Thread-193491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:08:19.233 [DEBUG] [Thread-193491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:08:19.236 [DEBUG] [Thread-193491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:08:19.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:08:19.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:08:19.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:08:19.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:08:19.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:08:19.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:08:19.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:08:19.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:08:19.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:08:19.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.672332 -999.00  +14.00   8.71     75   +9.80 1 2 1 1 1   886    0 3.21 -47.11 ----- 8.7 8.7 268.0 14.3 16.2 -23.5 16.1 -22.3 16.1 -20.8 16.4 -23.1
2026-04-12T18:08:19.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:08:19.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:08:19.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.672332
2026-04-12T18:08:19.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:08:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:08:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:08:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:08:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:08:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:08:03', tmtdew=5.31496, humidity=70.1323, cloud=0.0, wind=15.8454, temperature=13.9825, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:08:09.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:08:19.258 [DEBUG] [Thread-193491] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:08:19.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:08:19.352 [DEBUG] [Thread-193495] [transport.py] [_log()] starting thread (client mode): 0xae536f80
2026-04-12T18:08:19.352 [DEBUG] [Thread-193495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:08:19.367 [DEBUG] [Thread-193495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:08:19.367 [INFO] [Thread-193495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:08:19.374 [DEBUG] [Thread-193495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] client lang: <none>
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] server lang: <none>
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] kex follows: False
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] Compression: none
2026-04-12T18:08:19.375 [DEBUG] [Thread-193495] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:08:19.432 [DEBUG] [Thread-193495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:08:19.432 [DEBUG] [Thread-193495] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:08:19.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:08:19.434 [DEBUG] [Thread-193495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:08:19.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:08:19.488 [DEBUG] [Thread-193495] [transport.py] [_log()] userauth is OK
2026-04-12T18:08:19.488 [DEBUG] [Thread-193495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:08:19.489 [DEBUG] [Thread-193495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:08:19.489 [DEBUG] [Thread-193495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:08:19.489 [DEBUG] [Thread-193495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:08:19.507 [INFO] [Thread-193495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:08:19.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:08:19.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:08:20.304 [DEBUG] [Thread-193495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:08:20.305 [DEBUG] [Thread-193495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:08:20.353 [DEBUG] [Thread-193495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:08:20.353 [DEBUG] [Thread-193495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:08:20.363 [DEBUG] [Thread-193495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:08:20.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:08:20.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:08:20.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:08:20.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:08:20.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:08:20.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:08:20.399 [DEBUG] [Thread-193495] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:08:33.832 [DEBUG] [Thread-193497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:48.885 [DEBUG] [Thread-193498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:49.555 [DEBUG] [Thread-193499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:08:50.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:08:50.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:08:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:08:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 8, 38), 5.24059, 70.6954, 0.0, 12.528, 14.3982, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:08:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:08:38
2026-04-12T18:08:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:08:52.218 [DEBUG] [Thread-193500] [transport.py] [_log()] starting thread (client mode): 0xb0f40e80
2026-04-12T18:08:52.218 [DEBUG] [Thread-193500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:08:52.235 [DEBUG] [Thread-193500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:08:52.235 [INFO] [Thread-193500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:08:52.236 [DEBUG] [Thread-193500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:08:52.236 [DEBUG] [Thread-193500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] client lang: <none>
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] server lang: <none>
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] kex follows: False
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] Compression: none
2026-04-12T18:08:52.237 [DEBUG] [Thread-193500] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:08:52.252 [DEBUG] [Thread-193500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:08:52.252 [DEBUG] [Thread-193500] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:08:52.253 [DEBUG] [Thread-193500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:08:52.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:08:52.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:08:52.255 [DEBUG] [Thread-193500] [transport.py] [_log()] userauth is OK
2026-04-12T18:08:52.255 [DEBUG] [Thread-193500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:08:52.255 [DEBUG] [Thread-193500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:08:52.255 [DEBUG] [Thread-193500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:08:52.255 [DEBUG] [Thread-193500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:08:52.274 [INFO] [Thread-193500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:08:52.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:08:52.934 [DEBUG] [Thread-193500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:08:52.935 [DEBUG] [Thread-193500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:08:52.944 [DEBUG] [Thread-193500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:08:52.976 [DEBUG] [Thread-193500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:08:52.976 [DEBUG] [Thread-193500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:08:52.979 [DEBUG] [Thread-193500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:08:52.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:08:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:08:52.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:08:52.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:08:53.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:08:53.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:08:53.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:08:53.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:08:53.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:08:53.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.672679 -999.00  +14.00  10.48     76   +9.80 1 2 1 1 1   886    0 3.16 -49.48 ----- 10.5 10.5 268.0 14.0 16.2 -23.7 16.1 -22.4 15.9 -20.5 16.3 -22.8
2026-04-12T18:08:53.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:08:53.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:08:53.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.672679
2026-04-12T18:08:53.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:08:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:08:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:08:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:08:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:08:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:08:38', tmtdew=5.24059, humidity=70.6954, cloud=0.0, wind=12.528, temperature=14.3982, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:08:39.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:08:53.007 [DEBUG] [Thread-193500] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:08:53.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:08:53.101 [DEBUG] [Thread-193503] [transport.py] [_log()] starting thread (client mode): 0xae52e1d0
2026-04-12T18:08:53.101 [DEBUG] [Thread-193503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:08:53.116 [DEBUG] [Thread-193503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:08:53.116 [INFO] [Thread-193503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:08:53.123 [DEBUG] [Thread-193503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] client lang: <none>
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] server lang: <none>
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] kex follows: False
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] Compression: none
2026-04-12T18:08:53.124 [DEBUG] [Thread-193503] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:08:53.179 [DEBUG] [Thread-193503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:08:53.180 [DEBUG] [Thread-193503] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:08:53.180 [DEBUG] [Thread-193503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:08:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:08:53.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:08:53.236 [DEBUG] [Thread-193503] [transport.py] [_log()] userauth is OK
2026-04-12T18:08:53.236 [DEBUG] [Thread-193503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:08:53.236 [DEBUG] [Thread-193503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:08:53.236 [DEBUG] [Thread-193503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:08:53.236 [DEBUG] [Thread-193503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:08:53.254 [INFO] [Thread-193503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:08:53.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:08:53.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:08:54.096 [DEBUG] [Thread-193503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:08:54.097 [DEBUG] [Thread-193503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:08:54.144 [DEBUG] [Thread-193503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:08:54.144 [DEBUG] [Thread-193503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:08:54.154 [DEBUG] [Thread-193503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:08:54.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:08:54.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:08:54.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:08:54.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:08:54.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:08:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:08:54.190 [DEBUG] [Thread-193503] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:09:03.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:09:03.830 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:09:03.923 [DEBUG] [Thread-193505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:09:18.986 [DEBUG] [Thread-193506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:09:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:09:24.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:09:24.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:09:25.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 9, 14), 5.15035, 71.1793, 0.0, 12.4754, 13.9826, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:09:25.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:09:14
2026-04-12T18:09:25.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:09:26.038 [DEBUG] [Thread-193507] [transport.py] [_log()] starting thread (client mode): 0xae52eda0
2026-04-12T18:09:26.038 [DEBUG] [Thread-193507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:09:26.059 [DEBUG] [Thread-193507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:09:26.059 [INFO] [Thread-193507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] client lang: <none>
2026-04-12T18:09:26.062 [DEBUG] [Thread-193507] [transport.py] [_log()] server lang: <none>
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] kex follows: False
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] Compression: none
2026-04-12T18:09:26.063 [DEBUG] [Thread-193507] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:09:26.080 [DEBUG] [Thread-193507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:09:26.080 [DEBUG] [Thread-193507] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:09:26.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:09:26.081 [DEBUG] [Thread-193507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:09:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:09:26.084 [DEBUG] [Thread-193507] [transport.py] [_log()] userauth is OK
2026-04-12T18:09:26.084 [DEBUG] [Thread-193507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:09:26.084 [DEBUG] [Thread-193507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:09:26.084 [DEBUG] [Thread-193507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:09:26.084 [DEBUG] [Thread-193507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:09:26.109 [INFO] [Thread-193507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:09:26.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:09:26.747 [DEBUG] [Thread-193507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:09:26.748 [DEBUG] [Thread-193507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:09:26.748 [DEBUG] [Thread-193507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:09:26.788 [DEBUG] [Thread-193507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:09:26.788 [DEBUG] [Thread-193507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:09:26.792 [DEBUG] [Thread-193507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:09:26.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:09:26.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:09:26.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:09:26.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:09:26.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:09:26.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:09:26.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:09:26.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:09:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:09:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.673026 -999.00  +14.00   7.91     76   +9.80 1 2 1 1 1   886    0 3.12 -53.83 ----- 7.9 7.9 275.9 13.1 16.1 -23.5 16.1 -22.0 15.9 -20.3 16.3 -22.5
2026-04-12T18:09:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:09:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:09:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.673026
2026-04-12T18:09:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:09:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:09:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:09:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:09:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:09:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:09:14', tmtdew=5.15035, humidity=71.1793, cloud=0.0, wind=12.4754, temperature=13.9826, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:09:09.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:09:26.820 [DEBUG] [Thread-193507] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:09:26.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:09:26.920 [DEBUG] [Thread-193510] [transport.py] [_log()] starting thread (client mode): 0xb0fcee90
2026-04-12T18:09:26.921 [DEBUG] [Thread-193510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:09:26.937 [DEBUG] [Thread-193510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:09:26.938 [INFO] [Thread-193510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:09:26.945 [DEBUG] [Thread-193510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:09:26.945 [DEBUG] [Thread-193510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:09:26.945 [DEBUG] [Thread-193510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:09:26.945 [DEBUG] [Thread-193510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] client lang: <none>
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] server lang: <none>
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] kex follows: False
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] Compression: none
2026-04-12T18:09:26.946 [DEBUG] [Thread-193510] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:09:27.006 [DEBUG] [Thread-193510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:09:27.006 [DEBUG] [Thread-193510] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:09:27.007 [DEBUG] [Thread-193510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:09:27.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:09:27.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:09:27.064 [DEBUG] [Thread-193510] [transport.py] [_log()] userauth is OK
2026-04-12T18:09:27.065 [DEBUG] [Thread-193510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:09:27.065 [DEBUG] [Thread-193510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:09:27.065 [DEBUG] [Thread-193510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:09:27.065 [DEBUG] [Thread-193510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:09:27.084 [INFO] [Thread-193510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:09:27.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:09:27.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:09:27.952 [DEBUG] [Thread-193510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:09:27.952 [DEBUG] [Thread-193510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:09:28.000 [DEBUG] [Thread-193510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:09:28.001 [DEBUG] [Thread-193510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:09:28.009 [DEBUG] [Thread-193510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:09:28.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:09:28.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:09:28.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:09:28.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:09:28.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:09:28.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:09:28.044 [DEBUG] [Thread-193510] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:09:34.023 [DEBUG] [Thread-193512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:09:49.077 [DEBUG] [Thread-193513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:09:49.610 [DEBUG] [Thread-193514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:09:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:09:58.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:09:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:09:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 9, 49), 4.98941, 71.889, 0.0, 12.528, 14.3322, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:09:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:09:49
2026-04-12T18:09:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:09:59.870 [DEBUG] [Thread-193515] [transport.py] [_log()] starting thread (client mode): 0xae5a74f0
2026-04-12T18:09:59.870 [DEBUG] [Thread-193515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:09:59.889 [DEBUG] [Thread-193515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:09:59.889 [INFO] [Thread-193515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] client lang: <none>
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] server lang: <none>
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] kex follows: False
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] Compression: none
2026-04-12T18:09:59.893 [DEBUG] [Thread-193515] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:09:59.911 [DEBUG] [Thread-193515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:09:59.911 [DEBUG] [Thread-193515] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:09:59.912 [DEBUG] [Thread-193515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:09:59.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:09:59.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:09:59.914 [DEBUG] [Thread-193515] [transport.py] [_log()] userauth is OK
2026-04-12T18:09:59.914 [DEBUG] [Thread-193515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:09:59.914 [DEBUG] [Thread-193515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:09:59.915 [DEBUG] [Thread-193515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:09:59.915 [DEBUG] [Thread-193515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:09:59.946 [INFO] [Thread-193515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:09:59.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:10:00.634 [DEBUG] [Thread-193515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:10:00.634 [DEBUG] [Thread-193515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:10:00.634 [DEBUG] [Thread-193515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:10:00.676 [DEBUG] [Thread-193515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:10:00.676 [DEBUG] [Thread-193515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:10:00.678 [DEBUG] [Thread-193515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:10:00.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:10:00.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:10:00.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:10:00.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:10:00.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:10:00.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:10:00.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:10:00.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:10:00.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:10:00.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.673374 -999.00  +14.00  10.40     76   +9.90 1 2 1 1 1   885    0 2.85 -57.61 ----- 10.4 10.4 266.8 13.7 16.1 -23.4 16.0 -22.1 15.8 -20.2 16.2 -22.7
2026-04-12T18:10:00.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:10:00.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:10:00.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.673374
2026-04-12T18:10:00.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:10:00.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:10:00.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:10:00.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:10:00.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:10:00.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:09:49', tmtdew=4.98941, humidity=71.889, cloud=0.0, wind=12.528, temperature=14.3322, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:09:39.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:10:00.701 [DEBUG] [Thread-193515] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:10:00.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:10:00.782 [DEBUG] [Thread-193518] [transport.py] [_log()] starting thread (client mode): 0xae536f80
2026-04-12T18:10:00.783 [DEBUG] [Thread-193518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:10:00.800 [DEBUG] [Thread-193518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:10:00.800 [INFO] [Thread-193518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:10:00.811 [DEBUG] [Thread-193518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:10:00.812 [DEBUG] [Thread-193518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] client lang: <none>
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] server lang: <none>
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] kex follows: False
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:10:00.813 [DEBUG] [Thread-193518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:10:00.814 [DEBUG] [Thread-193518] [transport.py] [_log()] Compression: none
2026-04-12T18:10:00.814 [DEBUG] [Thread-193518] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:10:00.868 [DEBUG] [Thread-193518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:10:00.868 [DEBUG] [Thread-193518] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:10:00.869 [DEBUG] [Thread-193518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:10:00.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:10:00.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:10:00.924 [DEBUG] [Thread-193518] [transport.py] [_log()] userauth is OK
2026-04-12T18:10:00.924 [DEBUG] [Thread-193518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:10:00.924 [DEBUG] [Thread-193518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:10:00.924 [DEBUG] [Thread-193518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:10:00.924 [DEBUG] [Thread-193518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:10:00.943 [INFO] [Thread-193518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:10:00.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:10:00.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:10:01.752 [DEBUG] [Thread-193518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:10:01.752 [DEBUG] [Thread-193518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:10:01.800 [DEBUG] [Thread-193518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:10:01.800 [DEBUG] [Thread-193518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:10:01.810 [DEBUG] [Thread-193518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:10:01.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:10:01.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:10:01.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:10:01.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:10:01.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:10:01.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:10:01.847 [DEBUG] [Thread-193518] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:10:03.970 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:10:03.971 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:10:04.115 [DEBUG] [Thread-193520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:10:19.169 [DEBUG] [Thread-193521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:10:31.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:10:31.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:10:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:10:33.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 10, 24), 5.02139, 71.5605, 0.0, 11.3641, 13.9827, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:10:33.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:10:24
2026-04-12T18:10:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:10:33.691 [DEBUG] [Thread-193522] [transport.py] [_log()] starting thread (client mode): 0xb0f6e980
2026-04-12T18:10:33.691 [DEBUG] [Thread-193522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:10:33.714 [DEBUG] [Thread-193522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:10:33.714 [INFO] [Thread-193522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:10:33.718 [DEBUG] [Thread-193522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:10:33.718 [DEBUG] [Thread-193522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:10:33.718 [DEBUG] [Thread-193522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:10:33.718 [DEBUG] [Thread-193522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:10:33.718 [DEBUG] [Thread-193522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:10:33.718 [DEBUG] [Thread-193522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] client lang: <none>
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] server lang: <none>
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] kex follows: False
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:10:33.719 [DEBUG] [Thread-193522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:10:33.720 [DEBUG] [Thread-193522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:10:33.720 [DEBUG] [Thread-193522] [transport.py] [_log()] Compression: none
2026-04-12T18:10:33.720 [DEBUG] [Thread-193522] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:10:33.739 [DEBUG] [Thread-193522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:10:33.740 [DEBUG] [Thread-193522] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:10:33.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:10:33.740 [DEBUG] [Thread-193522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:10:33.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:10:33.743 [DEBUG] [Thread-193522] [transport.py] [_log()] userauth is OK
2026-04-12T18:10:33.743 [DEBUG] [Thread-193522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:10:33.743 [DEBUG] [Thread-193522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:10:33.743 [DEBUG] [Thread-193522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:10:33.743 [DEBUG] [Thread-193522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:10:33.767 [INFO] [Thread-193522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:10:33.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:10:34.208 [DEBUG] [Thread-193524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:10:37.958 [DEBUG] [Thread-193522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:10:37.959 [DEBUG] [Thread-193522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:10:37.959 [DEBUG] [Thread-193522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:10:37.999 [DEBUG] [Thread-193522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:10:38.000 [DEBUG] [Thread-193522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:10:38.002 [DEBUG] [Thread-193522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:10:38.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:10:38.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:10:38.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:10:38.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:10:38.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:10:38.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:10:38.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:10:38.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:10:38.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:10:38.148 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T18:10:38.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:10:24', tmtdew=5.02139, humidity=71.5605, cloud=0.0, wind=11.3641, temperature=13.9827, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:10:38.150 [DEBUG] [Thread-193522] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:10:38.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:10:38.260 [DEBUG] [Thread-193526] [transport.py] [_log()] starting thread (client mode): 0xae5e4cd0
2026-04-12T18:10:38.269 [DEBUG] [Thread-193526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:10:38.274 [DEBUG] [Thread-193526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:10:38.274 [INFO] [Thread-193526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] client lang: <none>
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] server lang: <none>
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] kex follows: False
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:10:38.282 [DEBUG] [Thread-193526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:10:38.283 [DEBUG] [Thread-193526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:10:38.283 [DEBUG] [Thread-193526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:10:38.283 [DEBUG] [Thread-193526] [transport.py] [_log()] Compression: none
2026-04-12T18:10:38.283 [DEBUG] [Thread-193526] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:10:38.344 [DEBUG] [Thread-193526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:10:38.347 [DEBUG] [Thread-193526] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:10:38.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:10:38.348 [DEBUG] [Thread-193526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:10:38.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:10:38.400 [DEBUG] [Thread-193526] [transport.py] [_log()] userauth is OK
2026-04-12T18:10:38.401 [DEBUG] [Thread-193526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:10:38.401 [DEBUG] [Thread-193526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:10:38.401 [DEBUG] [Thread-193526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:10:38.401 [DEBUG] [Thread-193526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:10:38.419 [INFO] [Thread-193526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:10:38.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:10:38.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:10:39.210 [DEBUG] [Thread-193526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:10:39.210 [DEBUG] [Thread-193526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:10:39.258 [DEBUG] [Thread-193526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:10:39.259 [DEBUG] [Thread-193526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:10:39.267 [DEBUG] [Thread-193526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:10:39.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:10:39.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:10:39.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:10:39.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:10:39.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:10:39.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:10:39.308 [DEBUG] [Thread-193526] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:10:49.248 [DEBUG] [Thread-193528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:10:49.660 [DEBUG] [Thread-193529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:11:04.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:11:04.113 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:11:04.322 [DEBUG] [Thread-193530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:11:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:11:09.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:11:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:11:10.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 10, 24), 4.97139, 72.0605, 0.0, 13.1641, 13.9827, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:11:10.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:10:24
2026-04-12T18:11:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:11:11.148 [DEBUG] [Thread-193531] [transport.py] [_log()] starting thread (client mode): 0xae5a7dc0
2026-04-12T18:11:11.148 [DEBUG] [Thread-193531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:11:11.170 [DEBUG] [Thread-193531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:11:11.170 [INFO] [Thread-193531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] client lang: <none>
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] server lang: <none>
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] kex follows: False
2026-04-12T18:11:11.171 [DEBUG] [Thread-193531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:11:11.172 [DEBUG] [Thread-193531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:11:11.172 [DEBUG] [Thread-193531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:11:11.172 [DEBUG] [Thread-193531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:11:11.172 [DEBUG] [Thread-193531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:11:11.172 [DEBUG] [Thread-193531] [transport.py] [_log()] Compression: none
2026-04-12T18:11:11.172 [DEBUG] [Thread-193531] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:11:11.181 [DEBUG] [Thread-193531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:11:11.181 [DEBUG] [Thread-193531] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:11:11.182 [DEBUG] [Thread-193531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:11:11.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:11:11.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:11:11.183 [DEBUG] [Thread-193531] [transport.py] [_log()] userauth is OK
2026-04-12T18:11:11.184 [DEBUG] [Thread-193531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:11:11.184 [DEBUG] [Thread-193531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:11:11.184 [DEBUG] [Thread-193531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:11:11.184 [DEBUG] [Thread-193531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:11:11.202 [INFO] [Thread-193531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:11:11.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:11:11.918 [DEBUG] [Thread-193531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:11:11.918 [DEBUG] [Thread-193531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:11:11.918 [DEBUG] [Thread-193531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:11:11.959 [DEBUG] [Thread-193531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:11:11.959 [DEBUG] [Thread-193531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:11:11.963 [DEBUG] [Thread-193531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:11:11.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:11:11.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:11:11.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:11:11.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:11:11.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:11:11.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:11:11.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:11:11.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:11:11.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:11:11.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.674068 -999.00  +13.90  13.08     76   +9.90 1 2 1 1 1   885    0 2.71 -61.74 ----- 13.1 13.1 265.6 16.9 16.1 -23.5 15.9 -22.1 15.8 -20.2 16.2 -22.5
2026-04-12T18:11:11.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:11:11.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:11:11.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.674068
2026-04-12T18:11:11.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:11:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:11:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:11:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:11:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:11:11.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:10:24', tmtdew=4.97139, humidity=72.0605, cloud=0.0, wind=13.1641, temperature=13.9827, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:10:39.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:11:11.991 [DEBUG] [Thread-193531] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:11:12.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:11:12.084 [DEBUG] [Thread-193534] [transport.py] [_log()] starting thread (client mode): 0xae5a68f0
2026-04-12T18:11:12.084 [DEBUG] [Thread-193534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:11:12.102 [DEBUG] [Thread-193534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:11:12.102 [INFO] [Thread-193534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:11:12.109 [DEBUG] [Thread-193534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] client lang: <none>
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] server lang: <none>
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] kex follows: False
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] Compression: none
2026-04-12T18:11:12.110 [DEBUG] [Thread-193534] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:11:12.168 [DEBUG] [Thread-193534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:11:12.168 [DEBUG] [Thread-193534] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:11:12.169 [DEBUG] [Thread-193534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:11:12.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:11:12.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:11:12.226 [DEBUG] [Thread-193534] [transport.py] [_log()] userauth is OK
2026-04-12T18:11:12.227 [DEBUG] [Thread-193534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:11:12.227 [DEBUG] [Thread-193534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:11:12.227 [DEBUG] [Thread-193534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:11:12.227 [DEBUG] [Thread-193534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:11:12.245 [INFO] [Thread-193534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:11:12.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:11:12.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:11:13.034 [DEBUG] [Thread-193534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:11:13.034 [DEBUG] [Thread-193534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:11:13.082 [DEBUG] [Thread-193534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:11:13.082 [DEBUG] [Thread-193534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:11:13.092 [DEBUG] [Thread-193534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:11:13.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:11:13.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:11: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') -> 00000000
2026-04-12T18:11:13.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:11:13.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:11:13.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:11:13.130 [DEBUG] [Thread-193534] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:11:19.360 [DEBUG] [Thread-193536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:11:34.422 [DEBUG] [Thread-193537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:11:43.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:11:43.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:11:43.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:11:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 11, 36), 4.86842, 72.4526, 0.0, 13.7275, 14.1997, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:11:44.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:11:36
2026-04-12T18:11:44.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:11:45.094 [DEBUG] [Thread-193538] [transport.py] [_log()] starting thread (client mode): 0xb0f41930
2026-04-12T18:11:45.094 [DEBUG] [Thread-193538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:11:45.115 [DEBUG] [Thread-193538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:11:45.115 [INFO] [Thread-193538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] client lang: <none>
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] server lang: <none>
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] kex follows: False
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] Compression: none
2026-04-12T18:11:45.118 [DEBUG] [Thread-193538] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:11:45.134 [DEBUG] [Thread-193538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:11:45.135 [DEBUG] [Thread-193538] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:11:45.135 [DEBUG] [Thread-193538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:11:45.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:11:45.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:11:45.137 [DEBUG] [Thread-193538] [transport.py] [_log()] userauth is OK
2026-04-12T18:11:45.138 [DEBUG] [Thread-193538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:11:45.138 [DEBUG] [Thread-193538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:11:45.138 [DEBUG] [Thread-193538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:11:45.138 [DEBUG] [Thread-193538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:11:45.170 [INFO] [Thread-193538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:11:45.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:11:45.767 [DEBUG] [Thread-193538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:11:45.767 [DEBUG] [Thread-193538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:11:45.767 [DEBUG] [Thread-193538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:11:45.808 [DEBUG] [Thread-193538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:11:45.808 [DEBUG] [Thread-193538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:11:45.810 [DEBUG] [Thread-193538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:11:45.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:11:45.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:11:45.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:11:45.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:11:45.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:11:45.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:11:45.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:11:45.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:11:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:11:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.674762 -999.00  +13.90  10.27     77  +10.00 1 2 1 1 1   884    0 2.83 -57.69 ----- 10.3 10.3 280.2 14.6 16.0 -23.2 15.9 -22.0 15.7 -20.3 16.1 -22.3
2026-04-12T18:11:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:11:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:11:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.674762
2026-04-12T18:11:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:11:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:11:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:11:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:11:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:11:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:11:36', tmtdew=4.86842, humidity=72.4526, cloud=0.0, wind=13.7275, temperature=14.1997, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:11:39.437', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:11:45.830 [DEBUG] [Thread-193538] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:11:45.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:11:45.924 [DEBUG] [Thread-193541] [transport.py] [_log()] starting thread (client mode): 0xb0f41ff0
2026-04-12T18:11:45.924 [DEBUG] [Thread-193541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:11:45.938 [DEBUG] [Thread-193541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:11:45.939 [INFO] [Thread-193541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] client lang: <none>
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] server lang: <none>
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] kex follows: False
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:11:45.946 [DEBUG] [Thread-193541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:11:45.947 [DEBUG] [Thread-193541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:11:45.947 [DEBUG] [Thread-193541] [transport.py] [_log()] Compression: none
2026-04-12T18:11:45.947 [DEBUG] [Thread-193541] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:11:46.005 [DEBUG] [Thread-193541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:11:46.006 [DEBUG] [Thread-193541] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:11:46.006 [DEBUG] [Thread-193541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:11:46.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:11:46.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:11:46.068 [DEBUG] [Thread-193541] [transport.py] [_log()] userauth is OK
2026-04-12T18:11:46.068 [DEBUG] [Thread-193541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:11:46.069 [DEBUG] [Thread-193541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:11:46.069 [DEBUG] [Thread-193541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:11:46.069 [DEBUG] [Thread-193541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:11:46.088 [INFO] [Thread-193541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:11:46.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:11:46.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:11:46.923 [DEBUG] [Thread-193541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:11:46.923 [DEBUG] [Thread-193541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:11:46.971 [DEBUG] [Thread-193541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:11:46.971 [DEBUG] [Thread-193541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:11:46.982 [DEBUG] [Thread-193541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:11:46.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:11:46.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:11:47.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:11:47.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:11:47.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:11:47.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:11:47.018 [DEBUG] [Thread-193541] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:11:49.458 [DEBUG] [Thread-193543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:11:49.723 [DEBUG] [Thread-193544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:04.253 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:04.254 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:04.507 [DEBUG] [Thread-193545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:12:17.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:12:17.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
2026-04-12T18:12:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 11, 36), 4.86842, 72.4526, 0.0, 13.7275, 14.1997, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:12:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:11:36
2026-04-12T18:12:18.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:12:18.814 [DEBUG] [Thread-193546] [transport.py] [_log()] starting thread (client mode): 0xae5a7610
2026-04-12T18:12:18.814 [DEBUG] [Thread-193546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:12:18.833 [DEBUG] [Thread-193546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:12:18.833 [INFO] [Thread-193546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] client lang: <none>
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] server lang: <none>
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] kex follows: False
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] Compression: none
2026-04-12T18:12:18.834 [DEBUG] [Thread-193546] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:12:18.842 [DEBUG] [Thread-193546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:12:18.843 [DEBUG] [Thread-193546] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:12:18.843 [DEBUG] [Thread-193546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:12:18.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:12:18.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:12:18.844 [DEBUG] [Thread-193546] [transport.py] [_log()] userauth is OK
2026-04-12T18:12:18.845 [DEBUG] [Thread-193546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:12:18.845 [DEBUG] [Thread-193546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:12:18.845 [DEBUG] [Thread-193546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:12:18.845 [DEBUG] [Thread-193546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:12:18.862 [INFO] [Thread-193546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:12:18.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:12:19.481 [DEBUG] [Thread-193546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:12:19.481 [DEBUG] [Thread-193546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:12:19.481 [DEBUG] [Thread-193546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:12:19.522 [DEBUG] [Thread-193546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:12:19.522 [DEBUG] [Thread-193546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:12:19.524 [DEBUG] [Thread-193546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:12:19.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:12:19.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:12:19.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:12:19.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:12:19.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:12:19.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:12:19.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:12:19.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:12:19.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:12:19.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.675110 -999.00  +13.90   9.00     77  +10.00 1 2 1 1 1   884    0 2.67 -60.85 ----- 9.0 9.0 260.1 13.8 15.9 -23.1 15.8 -22.0 15.7 -20.1 16.1 -22.4
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.675110
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:12:19.543 [DEBUG] [Thread-193549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:12:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:11:36', tmtdew=4.86842, humidity=72.4526, cloud=0.0, wind=13.7275, temperature=14.1997, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:12:09.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:12:19.544 [DEBUG] [Thread-193546] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:12:19.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:12:19.631 [DEBUG] [Thread-193550] [transport.py] [_log()] starting thread (client mode): 0xae5a5f30
2026-04-12T18:12:19.631 [DEBUG] [Thread-193550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:12:19.646 [DEBUG] [Thread-193550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:12:19.646 [INFO] [Thread-193550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:12:19.654 [DEBUG] [Thread-193550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:12:19.654 [DEBUG] [Thread-193550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:12:19.654 [DEBUG] [Thread-193550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:12:19.654 [DEBUG] [Thread-193550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] client lang: <none>
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] server lang: <none>
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] kex follows: False
2026-04-12T18:12:19.655 [DEBUG] [Thread-193550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:12:19.656 [DEBUG] [Thread-193550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:12:19.656 [DEBUG] [Thread-193550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:12:19.656 [DEBUG] [Thread-193550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:12:19.656 [DEBUG] [Thread-193550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:12:19.656 [DEBUG] [Thread-193550] [transport.py] [_log()] Compression: none
2026-04-12T18:12:19.656 [DEBUG] [Thread-193550] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:12:19.713 [DEBUG] [Thread-193550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:12:19.714 [DEBUG] [Thread-193550] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:12:19.715 [DEBUG] [Thread-193550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:12:19.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:12:19.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:12:19.772 [DEBUG] [Thread-193550] [transport.py] [_log()] userauth is OK
2026-04-12T18:12:19.773 [DEBUG] [Thread-193550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:12:19.773 [DEBUG] [Thread-193550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:12:19.773 [DEBUG] [Thread-193550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:12:19.773 [DEBUG] [Thread-193550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:12:19.795 [INFO] [Thread-193550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:12:19.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:12:19.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:12:20.610 [DEBUG] [Thread-193550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:12:20.611 [DEBUG] [Thread-193550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:12:20.659 [DEBUG] [Thread-193550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:12:20.659 [DEBUG] [Thread-193550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:12:20.668 [DEBUG] [Thread-193550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:12:20.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:12:20.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:12: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
2026-04-12T18:12:20.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:12:20.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:12:20.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:12:20.705 [DEBUG] [Thread-193550] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:12:34.577 [DEBUG] [Thread-193552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:49.625 [DEBUG] [Thread-193553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:49.772 [DEBUG] [Thread-193554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:12:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:12:50.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:12:50.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:12:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 12, 11), 4.7806, 72.4915, 0.0, 11.1341, 13.8665, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:12:52.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:12:11
2026-04-12T18:12:52.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:12:52.581 [DEBUG] [Thread-193555] [transport.py] [_log()] starting thread (client mode): 0xae52eec0
2026-04-12T18:12:52.581 [DEBUG] [Thread-193555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:12:52.593 [DEBUG] [Thread-193555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:12:52.594 [INFO] [Thread-193555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] client lang: <none>
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] server lang: <none>
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] kex follows: False
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] Compression: none
2026-04-12T18:12:52.596 [DEBUG] [Thread-193555] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:12:52.609 [DEBUG] [Thread-193555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:12:52.609 [DEBUG] [Thread-193555] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:12:52.610 [DEBUG] [Thread-193555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:12:52.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:12:52.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:12:52.611 [DEBUG] [Thread-193555] [transport.py] [_log()] userauth is OK
2026-04-12T18:12:52.612 [DEBUG] [Thread-193555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:12:52.612 [DEBUG] [Thread-193555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:12:52.612 [DEBUG] [Thread-193555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:12:52.612 [DEBUG] [Thread-193555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:12:52.640 [INFO] [Thread-193555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:12:52.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:12:53.254 [DEBUG] [Thread-193555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:12:53.254 [DEBUG] [Thread-193555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:12:53.254 [DEBUG] [Thread-193555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:12:53.295 [DEBUG] [Thread-193555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:12:53.295 [DEBUG] [Thread-193555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:12:53.299 [DEBUG] [Thread-193555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:12:53.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:12:53.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:12:53.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:12:53.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:12:53.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:12:53.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:12:53.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:12:53.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:12:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:12:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.675457 -999.00  +13.80   9.78     77   +9.90 1 2 1 1 1   884    0 2.50 -66.83 ----- 9.8 9.8 277.0 14.4 15.9 -23.3 15.8 -22.0 15.7 -20.1 16.0 -22.4
2026-04-12T18:12:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:12:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:12:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.675457
2026-04-12T18:12:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:12:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:12:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:12:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:12:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:12:53.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:12:11', tmtdew=4.7806, humidity=72.4915, cloud=0.0, wind=11.1341, temperature=13.8665, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:12:39.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:12:53.329 [DEBUG] [Thread-193555] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:12:53.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:12:53.423 [DEBUG] [Thread-193558] [transport.py] [_log()] starting thread (client mode): 0xb0f6d8d0
2026-04-12T18:12:53.423 [DEBUG] [Thread-193558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:12:53.439 [DEBUG] [Thread-193558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:12:53.439 [INFO] [Thread-193558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:12:53.447 [DEBUG] [Thread-193558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:12:53.448 [DEBUG] [Thread-193558] [transport.py] [_log()] client lang: <none>
2026-04-12T18:12:53.449 [DEBUG] [Thread-193558] [transport.py] [_log()] server lang: <none>
2026-04-12T18:12:53.449 [DEBUG] [Thread-193558] [transport.py] [_log()] kex follows: False
2026-04-12T18:12:53.449 [DEBUG] [Thread-193558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:12:53.449 [DEBUG] [Thread-193558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:12:53.449 [DEBUG] [Thread-193558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:12:53.449 [DEBUG] [Thread-193558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:12:53.449 [DEBUG] [Thread-193558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:12:53.450 [DEBUG] [Thread-193558] [transport.py] [_log()] Compression: none
2026-04-12T18:12:53.450 [DEBUG] [Thread-193558] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:12:53.509 [DEBUG] [Thread-193558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:12:53.509 [DEBUG] [Thread-193558] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:12:53.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:12:53.510 [DEBUG] [Thread-193558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:12:53.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:12:53.568 [DEBUG] [Thread-193558] [transport.py] [_log()] userauth is OK
2026-04-12T18:12:53.568 [DEBUG] [Thread-193558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:12:53.568 [DEBUG] [Thread-193558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:12:53.568 [DEBUG] [Thread-193558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:12:53.568 [DEBUG] [Thread-193558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:12:53.588 [INFO] [Thread-193558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:12:53.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:12:53.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:12:54.420 [DEBUG] [Thread-193558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:12:54.421 [DEBUG] [Thread-193558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:12:54.473 [DEBUG] [Thread-193558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:12:54.473 [DEBUG] [Thread-193558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:12:54.483 [DEBUG] [Thread-193558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:12:54.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:12:54.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:12:54.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:12:54.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:12:54.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:12:54.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:12:54.520 [DEBUG] [Thread-193558] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:13:04.394 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:13:04.396 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:13:04.666 [DEBUG] [Thread-193560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:13:19.728 [DEBUG] [Thread-193561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:13:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:13:24.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:13:24.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:13:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 12, 47), 4.78944, 72.8504, 0.0, 13.6922, 14.2661, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:13:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:12:47
2026-04-12T18:13:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:13:26.405 [DEBUG] [Thread-193562] [transport.py] [_log()] starting thread (client mode): 0xae52ea10
2026-04-12T18:13:26.405 [DEBUG] [Thread-193562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:13:26.425 [DEBUG] [Thread-193562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:13:26.425 [INFO] [Thread-193562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] client lang: <none>
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] server lang: <none>
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] kex follows: False
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] Compression: none
2026-04-12T18:13:26.426 [DEBUG] [Thread-193562] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:13:26.435 [DEBUG] [Thread-193562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:13:26.435 [DEBUG] [Thread-193562] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:13:26.436 [DEBUG] [Thread-193562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:13:26.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:13:26.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:13:26.437 [DEBUG] [Thread-193562] [transport.py] [_log()] userauth is OK
2026-04-12T18:13:26.437 [DEBUG] [Thread-193562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:13:26.437 [DEBUG] [Thread-193562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:13:26.437 [DEBUG] [Thread-193562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:13:26.437 [DEBUG] [Thread-193562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:13:26.454 [INFO] [Thread-193562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:13:26.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:13:27.046 [DEBUG] [Thread-193562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:13:27.047 [DEBUG] [Thread-193562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:13:27.047 [DEBUG] [Thread-193562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:13:27.088 [DEBUG] [Thread-193562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:13:27.088 [DEBUG] [Thread-193562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:13:27.091 [DEBUG] [Thread-193562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:13:27.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:13:27.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:13:27.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:13:27.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:13:27.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:13:27.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:13:27.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:13:27.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:13:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:13:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.675804 -999.00  +13.80   9.85     77  +10.00 1 2 1 1 1   883    0 2.52 -63.03 ----- 9.8 9.8 259.4 15.6 15.8 -23.3 15.8 -22.0 15.5 -20.1 16.0 -22.3
2026-04-12T18:13:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:13:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:13:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.675804
2026-04-12T18:13:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:13:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:13:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:13:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:13:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:13:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:12:47', tmtdew=4.78944, humidity=72.8504, cloud=0.0, wind=13.6922, temperature=14.2661, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:13:09.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:13:27.117 [DEBUG] [Thread-193562] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:13:27.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:13:27.215 [DEBUG] [Thread-193565] [transport.py] [_log()] starting thread (client mode): 0xae5a4c40
2026-04-12T18:13:27.215 [DEBUG] [Thread-193565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:13:27.230 [DEBUG] [Thread-193565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:13:27.230 [INFO] [Thread-193565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:13:27.238 [DEBUG] [Thread-193565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] client lang: <none>
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] server lang: <none>
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] kex follows: False
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] Compression: none
2026-04-12T18:13:27.239 [DEBUG] [Thread-193565] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:13:27.296 [DEBUG] [Thread-193565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:13:27.297 [DEBUG] [Thread-193565] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:13:27.297 [DEBUG] [Thread-193565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:13:27.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:13:27.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:13:27.352 [DEBUG] [Thread-193565] [transport.py] [_log()] userauth is OK
2026-04-12T18:13:27.352 [DEBUG] [Thread-193565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:13:27.352 [DEBUG] [Thread-193565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:13:27.352 [DEBUG] [Thread-193565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:13:27.353 [DEBUG] [Thread-193565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:13:27.371 [INFO] [Thread-193565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:13:27.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:13:27.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:13:28.225 [DEBUG] [Thread-193565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:13:28.226 [DEBUG] [Thread-193565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:13:28.273 [DEBUG] [Thread-193565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:13:28.274 [DEBUG] [Thread-193565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:13:28.283 [DEBUG] [Thread-193565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:13:28.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:13:28.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:13:28.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:13:28.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:13:28.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:13:28.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:13:28.320 [DEBUG] [Thread-193565] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:13:34.765 [DEBUG] [Thread-193567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:13:49.822 [DEBUG] [Thread-193568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:13:49.840 [DEBUG] [Thread-193569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:13:58.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:13:58.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:13:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:13:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 13, 22), 4.78555, 72.9583, 0.0, 12.4402, 13.8168, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:13:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:13:22
2026-04-12T18:14:00.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:14:00.193 [DEBUG] [Thread-193570] [transport.py] [_log()] starting thread (client mode): 0xb0f42440
2026-04-12T18:14:00.193 [DEBUG] [Thread-193570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:14:00.213 [DEBUG] [Thread-193570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:14:00.214 [INFO] [Thread-193570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:14:00.216 [DEBUG] [Thread-193570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] client lang: <none>
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] server lang: <none>
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] kex follows: False
2026-04-12T18:14:00.217 [DEBUG] [Thread-193570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:14:00.218 [DEBUG] [Thread-193570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:14:00.218 [DEBUG] [Thread-193570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:14:00.218 [DEBUG] [Thread-193570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:14:00.218 [DEBUG] [Thread-193570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:14:00.218 [DEBUG] [Thread-193570] [transport.py] [_log()] Compression: none
2026-04-12T18:14:00.218 [DEBUG] [Thread-193570] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:14:00.232 [DEBUG] [Thread-193570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:14:00.233 [DEBUG] [Thread-193570] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:14:00.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:14:00.233 [DEBUG] [Thread-193570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:14:00.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:14:00.235 [DEBUG] [Thread-193570] [transport.py] [_log()] userauth is OK
2026-04-12T18:14:00.235 [DEBUG] [Thread-193570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:14:00.236 [DEBUG] [Thread-193570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:14:00.236 [DEBUG] [Thread-193570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:14:00.236 [DEBUG] [Thread-193570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:14:00.259 [INFO] [Thread-193570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:14:00.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:14:00.923 [DEBUG] [Thread-193570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:14:00.923 [DEBUG] [Thread-193570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:14:00.923 [DEBUG] [Thread-193570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:14:00.964 [DEBUG] [Thread-193570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:14:00.964 [DEBUG] [Thread-193570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:14:00.966 [DEBUG] [Thread-193570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:14:00.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:14:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:14:00.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:14:00.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:14:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:14:00.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:14:00.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:14:00.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:14:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:14:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.676151 -999.00  +13.80   8.52     77   +9.90 1 2 1 1 1   883    0 2.36 -68.58 ----- 8.5 8.5 265.0 13.8 15.8 -23.3 15.7 -21.9 15.6 -20.1 16.0 -22.5
2026-04-12T18:14:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:14:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:14:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.676151
2026-04-12T18:14:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:14:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:14:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:14:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:14:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:14:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:13:22', tmtdew=4.78555, humidity=72.9583, cloud=0.0, wind=12.4402, temperature=13.8168, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:13:39.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:14:00.991 [DEBUG] [Thread-193570] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:14:01.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:14:01.087 [DEBUG] [Thread-193573] [transport.py] [_log()] starting thread (client mode): 0xae52f7f0
2026-04-12T18:14:01.087 [DEBUG] [Thread-193573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:14:01.102 [DEBUG] [Thread-193573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:14:01.102 [INFO] [Thread-193573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] client lang: <none>
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] server lang: <none>
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] kex follows: False
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:14:01.110 [DEBUG] [Thread-193573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:14:01.111 [DEBUG] [Thread-193573] [transport.py] [_log()] Compression: none
2026-04-12T18:14:01.111 [DEBUG] [Thread-193573] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:14:01.167 [DEBUG] [Thread-193573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:14:01.167 [DEBUG] [Thread-193573] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:14:01.168 [DEBUG] [Thread-193573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:14:01.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:14:01.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:14:01.223 [DEBUG] [Thread-193573] [transport.py] [_log()] userauth is OK
2026-04-12T18:14:01.223 [DEBUG] [Thread-193573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:14:01.224 [DEBUG] [Thread-193573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:14:01.224 [DEBUG] [Thread-193573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:14:01.224 [DEBUG] [Thread-193573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:14:01.237 [INFO] [Thread-193573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:14:01.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:14:01.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:14:02.089 [DEBUG] [Thread-193573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:14:02.089 [DEBUG] [Thread-193573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:14:02.136 [DEBUG] [Thread-193573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:14:02.137 [DEBUG] [Thread-193573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:14:02.146 [DEBUG] [Thread-193573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:14:02.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:14:02.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:14:02.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:14:02.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:14:02.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:14:02.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:14:02.181 [DEBUG] [Thread-193573] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:14:04.534 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:14:04.536 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:14:04.853 [DEBUG] [Thread-193575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:14:19.908 [DEBUG] [Thread-193576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:14:32.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:14:32.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:14:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:14:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 13, 58), 4.75916, 73.091, 0.0, 13.7984, 13.8334, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:14:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:13:58
2026-04-12T18:14:33.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:14:33.997 [DEBUG] [Thread-193577] [transport.py] [_log()] starting thread (client mode): 0xae51b100
2026-04-12T18:14:33.997 [DEBUG] [Thread-193577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:14:34.017 [DEBUG] [Thread-193577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:14:34.017 [INFO] [Thread-193577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] client lang: <none>
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] server lang: <none>
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] kex follows: False
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] Compression: none
2026-04-12T18:14:34.021 [DEBUG] [Thread-193577] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:14:34.037 [DEBUG] [Thread-193577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:14:34.037 [DEBUG] [Thread-193577] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:14:34.037 [DEBUG] [Thread-193577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:14:34.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:14:34.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:14:34.039 [DEBUG] [Thread-193577] [transport.py] [_log()] userauth is OK
2026-04-12T18:14:34.039 [DEBUG] [Thread-193577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:14:34.039 [DEBUG] [Thread-193577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:14:34.039 [DEBUG] [Thread-193577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:14:34.039 [DEBUG] [Thread-193577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:14:34.052 [INFO] [Thread-193577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:14:34.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:14:34.676 [DEBUG] [Thread-193577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:14:34.676 [DEBUG] [Thread-193577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:14:34.677 [DEBUG] [Thread-193577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:14:34.716 [DEBUG] [Thread-193577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:14:34.717 [DEBUG] [Thread-193577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:14:34.720 [DEBUG] [Thread-193577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:14:34.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:14:34.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:14:34.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:14:34.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:14:34.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:14:34.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:14:34.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:14:34.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:14:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:14:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.676499 -999.00  +13.80  10.57     77  +10.00 1 2 1 1 1   882    0 2.35 -69.18 ----- 10.6 10.6 269.7 12.3 15.8 -23.3 15.7 -21.9 15.6 -20.2 15.9 -22.1
2026-04-12T18:14:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:14:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:14:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.676499
2026-04-12T18:14:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:14:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:14:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:14:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:14:34.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:14:34.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:13:58', tmtdew=4.75916, humidity=73.091, cloud=0.0, wind=13.7984, temperature=13.8334, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:14:09.514', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:14:34.738 [DEBUG] [Thread-193577] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:14:34.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:14:34.834 [DEBUG] [Thread-193580] [transport.py] [_log()] starting thread (client mode): 0xae519420
2026-04-12T18:14:34.834 [DEBUG] [Thread-193580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:14:34.850 [DEBUG] [Thread-193580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:14:34.850 [INFO] [Thread-193580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:14:34.857 [DEBUG] [Thread-193580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] client lang: <none>
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] server lang: <none>
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] kex follows: False
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:14:34.858 [DEBUG] [Thread-193580] [transport.py] [_log()] Compression: none
2026-04-12T18:14:34.859 [DEBUG] [Thread-193580] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:14:34.915 [DEBUG] [Thread-193580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:14:34.916 [DEBUG] [Thread-193580] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:14:34.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:14:34.917 [DEBUG] [Thread-193580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:14:34.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:14:34.949 [DEBUG] [Thread-193582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:14:34.971 [DEBUG] [Thread-193580] [transport.py] [_log()] userauth is OK
2026-04-12T18:14:34.972 [DEBUG] [Thread-193580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:14:34.972 [DEBUG] [Thread-193580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:14:34.972 [DEBUG] [Thread-193580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:14:34.972 [DEBUG] [Thread-193580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:14:34.991 [INFO] [Thread-193580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:14:34.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:14:34.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:14:35.821 [DEBUG] [Thread-193580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:14:35.821 [DEBUG] [Thread-193580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:14:35.869 [DEBUG] [Thread-193580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:14:35.869 [DEBUG] [Thread-193580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:14:35.879 [DEBUG] [Thread-193580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:14:35.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:14:35.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:14:35.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:14:35.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:14:35.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:14:35.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:14:35.915 [DEBUG] [Thread-193580] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:14:49.907 [DEBUG] [Thread-193583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:14:50.004 [DEBUG] [Thread-193584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:15:04.676 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:15:04.677 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:15:05.041 [DEBUG] [Thread-193585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:15:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:15:05.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:15:05.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:15:07.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 14, 33), 4.74289, 73.0494, 0.0, 14.8212, 14.1005, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:15:07.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:14:33
2026-04-12T18:15:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:15:07.734 [DEBUG] [Thread-193586] [transport.py] [_log()] starting thread (client mode): 0xb0f41210
2026-04-12T18:15:07.734 [DEBUG] [Thread-193586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:15:07.754 [DEBUG] [Thread-193586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:15:07.754 [INFO] [Thread-193586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:15:07.757 [DEBUG] [Thread-193586] [transport.py] [_log()] client lang: <none>
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] server lang: <none>
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] kex follows: False
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] Compression: none
2026-04-12T18:15:07.758 [DEBUG] [Thread-193586] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:15:07.775 [DEBUG] [Thread-193586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:15:07.776 [DEBUG] [Thread-193586] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:15:07.776 [DEBUG] [Thread-193586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:15:07.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:15:07.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:15:07.778 [DEBUG] [Thread-193586] [transport.py] [_log()] userauth is OK
2026-04-12T18:15:07.778 [DEBUG] [Thread-193586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:15:07.778 [DEBUG] [Thread-193586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:15:07.778 [DEBUG] [Thread-193586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:15:07.778 [DEBUG] [Thread-193586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:15:07.803 [INFO] [Thread-193586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:15:07.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:15:08.412 [DEBUG] [Thread-193586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:15:08.412 [DEBUG] [Thread-193586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:15:08.413 [DEBUG] [Thread-193586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:15:08.453 [DEBUG] [Thread-193586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:15:08.453 [DEBUG] [Thread-193586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:15:08.459 [DEBUG] [Thread-193586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:15:08.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:15:08.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:15:08.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:15:08.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:15:08.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:15:08.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:15:08.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:15:08.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:15:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:15:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.676846 -999.00  +13.80   7.86     77  +10.00 1 2 1 1 1   882    0 2.56 -63.64 ----- 7.9 7.9 248.4 11.4 15.8 -23.0 15.7 -22.0 15.5 -20.1 15.9 -22.3
2026-04-12T18:15:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:15:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:15:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.676846
2026-04-12T18:15:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:15:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:15:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:15:08.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:15:08.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:15:08.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:14:33', tmtdew=4.74289, humidity=73.0494, cloud=0.0, wind=14.8212, temperature=14.1005, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:14:39.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:15:08.485 [DEBUG] [Thread-193586] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:15:08.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:15:08.578 [DEBUG] [Thread-193589] [transport.py] [_log()] starting thread (client mode): 0xae5a7d90
2026-04-12T18:15:08.578 [DEBUG] [Thread-193589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:15:08.592 [DEBUG] [Thread-193589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:15:08.592 [INFO] [Thread-193589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:15:08.599 [DEBUG] [Thread-193589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] client lang: <none>
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] server lang: <none>
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] kex follows: False
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:15:08.600 [DEBUG] [Thread-193589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:15:08.601 [DEBUG] [Thread-193589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:15:08.601 [DEBUG] [Thread-193589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:15:08.601 [DEBUG] [Thread-193589] [transport.py] [_log()] Compression: none
2026-04-12T18:15:08.601 [DEBUG] [Thread-193589] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:15:08.660 [DEBUG] [Thread-193589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:15:08.661 [DEBUG] [Thread-193589] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:15:08.661 [DEBUG] [Thread-193589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:15:08.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:15:08.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:15:08.716 [DEBUG] [Thread-193589] [transport.py] [_log()] userauth is OK
2026-04-12T18:15:08.716 [DEBUG] [Thread-193589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:15:08.716 [DEBUG] [Thread-193589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:15:08.716 [DEBUG] [Thread-193589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:15:08.716 [DEBUG] [Thread-193589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:15:08.737 [INFO] [Thread-193589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:15:08.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:15:08.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:15:09.551 [DEBUG] [Thread-193589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:15:09.552 [DEBUG] [Thread-193589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:15:09.600 [DEBUG] [Thread-193589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:15:09.600 [DEBUG] [Thread-193589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:15:09.610 [DEBUG] [Thread-193589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:15:09.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:15: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')
2026-04-12T18:15: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
2026-04-12T18:15:09.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:15:09.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:15:09.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:15:09.647 [DEBUG] [Thread-193589] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:15:20.081 [DEBUG] [Thread-193591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:15:35.144 [DEBUG] [Thread-193592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:15:39.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:15:39.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:15:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:15:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 15, 9), 4.71193, 73.0744, 0.0, 11.7346, 13.7668, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:15:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:15:09
2026-04-12T18:15:41.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:15:41.535 [DEBUG] [Thread-193593] [transport.py] [_log()] starting thread (client mode): 0xae5a5cc0
2026-04-12T18:15:41.535 [DEBUG] [Thread-193593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:15:41.556 [DEBUG] [Thread-193593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:15:41.556 [INFO] [Thread-193593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] client lang: <none>
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] server lang: <none>
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] kex follows: False
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:15:41.558 [DEBUG] [Thread-193593] [transport.py] [_log()] Compression: none
2026-04-12T18:15:41.559 [DEBUG] [Thread-193593] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:15:41.574 [DEBUG] [Thread-193593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:15:41.575 [DEBUG] [Thread-193593] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:15:41.575 [DEBUG] [Thread-193593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:15:41.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:15:41.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:15:41.577 [DEBUG] [Thread-193593] [transport.py] [_log()] userauth is OK
2026-04-12T18:15:41.578 [DEBUG] [Thread-193593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:15:41.578 [DEBUG] [Thread-193593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:15:41.578 [DEBUG] [Thread-193593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:15:41.578 [DEBUG] [Thread-193593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:15:41.602 [INFO] [Thread-193593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:15:41.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:15:42.168 [DEBUG] [Thread-193593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:15:42.169 [DEBUG] [Thread-193593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:15:42.169 [DEBUG] [Thread-193593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:15:42.209 [DEBUG] [Thread-193593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:15:42.209 [DEBUG] [Thread-193593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:15:42.212 [DEBUG] [Thread-193593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:15:42.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:15:42.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:15:42.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:15:42.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:15:42.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:15:42.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:15:42.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:15:42.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:15:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:15:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.677193 -999.00  +13.80   6.15     77  +10.00 1 2 1 1 1   881    0 2.37 -65.73 ----- 6.2 6.2 268.8 10.0 15.8 -23.2 15.7 -22.0 15.5 -20.1 15.8 -22.1
2026-04-12T18:15:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:15:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:15:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.677193
2026-04-12T18:15:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:15:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:15:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:15:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:15:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:15:42.240 [DEBUG] [Thread-193593] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:15:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:15:09', tmtdew=4.71193, humidity=73.0744, cloud=0.0, wind=11.7346, temperature=13.7668, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:15:09.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:15:42.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:15:42.333 [DEBUG] [Thread-193596] [transport.py] [_log()] starting thread (client mode): 0xb0fcf130
2026-04-12T18:15:42.333 [DEBUG] [Thread-193596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:15:42.348 [DEBUG] [Thread-193596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:15:42.348 [INFO] [Thread-193596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:15:42.355 [DEBUG] [Thread-193596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] client lang: <none>
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] server lang: <none>
2026-04-12T18:15:42.356 [DEBUG] [Thread-193596] [transport.py] [_log()] kex follows: False
2026-04-12T18:15:42.357 [DEBUG] [Thread-193596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:15:42.357 [DEBUG] [Thread-193596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:15:42.357 [DEBUG] [Thread-193596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:15:42.357 [DEBUG] [Thread-193596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:15:42.357 [DEBUG] [Thread-193596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:15:42.357 [DEBUG] [Thread-193596] [transport.py] [_log()] Compression: none
2026-04-12T18:15:42.357 [DEBUG] [Thread-193596] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:15:42.416 [DEBUG] [Thread-193596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:15:42.416 [DEBUG] [Thread-193596] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:15:42.417 [DEBUG] [Thread-193596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:15:42.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:15:42.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:15:42.472 [DEBUG] [Thread-193596] [transport.py] [_log()] userauth is OK
2026-04-12T18:15:42.472 [DEBUG] [Thread-193596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:15:42.472 [DEBUG] [Thread-193596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:15:42.472 [DEBUG] [Thread-193596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:15:42.472 [DEBUG] [Thread-193596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:15:42.491 [INFO] [Thread-193596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:15:42.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:15:42.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:15:43.313 [DEBUG] [Thread-193596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:15:43.313 [DEBUG] [Thread-193596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:15:43.361 [DEBUG] [Thread-193596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:15:43.361 [DEBUG] [Thread-193596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:15:43.370 [DEBUG] [Thread-193596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:15:43.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:15:43.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:15:43.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:15:43.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:15:43.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:15:43.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:15:43.407 [DEBUG] [Thread-193596] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:15:49.973 [DEBUG] [Thread-193598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:15:50.183 [DEBUG] [Thread-193599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:05.240 [DEBUG] [Thread-193600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:10.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:10.861 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:13.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:16:13.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:16:13.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:16:14.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 15, 44), 4.69682, 73.2821, 0.0, 13.7628, 14.1342, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:16:14.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:15:44
2026-04-12T18:16:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:16:15.325 [DEBUG] [Thread-193601] [transport.py] [_log()] starting thread (client mode): 0xae52ca30
2026-04-12T18:16:15.326 [DEBUG] [Thread-193601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:16:15.344 [DEBUG] [Thread-193601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:16:15.344 [INFO] [Thread-193601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:16:15.345 [DEBUG] [Thread-193601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:16:15.345 [DEBUG] [Thread-193601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:16:15.345 [DEBUG] [Thread-193601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:16:15.345 [DEBUG] [Thread-193601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:15.345 [DEBUG] [Thread-193601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] client lang: <none>
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] server lang: <none>
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] kex follows: False
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] Compression: none
2026-04-12T18:16:15.346 [DEBUG] [Thread-193601] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:16:15.354 [DEBUG] [Thread-193601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:16:15.354 [DEBUG] [Thread-193601] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:16:15.354 [DEBUG] [Thread-193601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:16:15.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:16:15.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:16:15.356 [DEBUG] [Thread-193601] [transport.py] [_log()] userauth is OK
2026-04-12T18:16:15.356 [DEBUG] [Thread-193601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:16:15.356 [DEBUG] [Thread-193601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:16:15.356 [DEBUG] [Thread-193601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:16:15.356 [DEBUG] [Thread-193601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:16:15.372 [INFO] [Thread-193601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:16:15.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:16:15.991 [DEBUG] [Thread-193601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:16:15.991 [DEBUG] [Thread-193601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:16:15.992 [DEBUG] [Thread-193601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:16:16.032 [DEBUG] [Thread-193601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:16:16.032 [DEBUG] [Thread-193601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:16:16.035 [DEBUG] [Thread-193601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:16:16.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:16:16.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:16:16.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:16:16.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:16:16.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:16:16.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:16:16.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:16:16.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:16:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:16:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.677888 -999.00  +13.70   7.36     78  +10.00 1 2 1 1 1   880    0 2.30 -66.53 ----- 7.4 7.4 253.9 14.0 15.7 -23.4 15.6 -21.9 15.4 -20.1 15.8 -22.3
2026-04-12T18:16:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:16:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:16:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.677888
2026-04-12T18:16:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:16:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:16:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:16:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:16:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:16:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:15:44', tmtdew=4.69682, humidity=73.2821, cloud=0.0, wind=13.7628, temperature=14.1342, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:16:09.523', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:16:16.061 [DEBUG] [Thread-193601] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:16:16.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:16:16.155 [DEBUG] [Thread-193604] [transport.py] [_log()] starting thread (client mode): 0xae5a5ea0
2026-04-12T18:16:16.155 [DEBUG] [Thread-193604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:16:16.169 [DEBUG] [Thread-193604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:16:16.170 [INFO] [Thread-193604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:16:16.177 [DEBUG] [Thread-193604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:16:16.177 [DEBUG] [Thread-193604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:16:16.177 [DEBUG] [Thread-193604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] client lang: <none>
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] server lang: <none>
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] kex follows: False
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:16:16.178 [DEBUG] [Thread-193604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:16:16.179 [DEBUG] [Thread-193604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:16:16.179 [DEBUG] [Thread-193604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:16:16.179 [DEBUG] [Thread-193604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:16:16.179 [DEBUG] [Thread-193604] [transport.py] [_log()] Compression: none
2026-04-12T18:16:16.179 [DEBUG] [Thread-193604] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:16:16.236 [DEBUG] [Thread-193604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:16:16.236 [DEBUG] [Thread-193604] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:16:16.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:16:16.237 [DEBUG] [Thread-193604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:16:16.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:16:16.292 [DEBUG] [Thread-193604] [transport.py] [_log()] userauth is OK
2026-04-12T18:16:16.292 [DEBUG] [Thread-193604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:16:16.293 [DEBUG] [Thread-193604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:16:16.293 [DEBUG] [Thread-193604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:16:16.293 [DEBUG] [Thread-193604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:16:16.311 [INFO] [Thread-193604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:16:16.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:16:16.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:16:17.189 [DEBUG] [Thread-193604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:16:17.189 [DEBUG] [Thread-193604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:16:17.237 [DEBUG] [Thread-193604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:16:17.237 [DEBUG] [Thread-193604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:16:17.247 [DEBUG] [Thread-193604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:16:17.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:16:17.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:16:17.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:16:17.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:16:17.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:16:17.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:16:17.283 [DEBUG] [Thread-193604] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:16:20.275 [DEBUG] [Thread-193606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:35.329 [DEBUG] [Thread-193607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:16:47.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:16:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:16:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 16, 19), 4.69664, 73.141, 0.0, 13.8521, 13.7174, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:16:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:16:19
2026-04-12T18:16:49.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:16:49.212 [DEBUG] [Thread-193608] [transport.py] [_log()] starting thread (client mode): 0xb0f425c0
2026-04-12T18:16:49.212 [DEBUG] [Thread-193608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:16:49.230 [DEBUG] [Thread-193608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:16:49.230 [INFO] [Thread-193608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:16:49.233 [DEBUG] [Thread-193608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:16:49.233 [DEBUG] [Thread-193608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:16:49.233 [DEBUG] [Thread-193608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:16:49.233 [DEBUG] [Thread-193608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:49.233 [DEBUG] [Thread-193608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:49.233 [DEBUG] [Thread-193608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] client lang: <none>
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] server lang: <none>
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] kex follows: False
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] Compression: none
2026-04-12T18:16:49.234 [DEBUG] [Thread-193608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:16:49.252 [DEBUG] [Thread-193608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:16:49.252 [DEBUG] [Thread-193608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:16:49.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:16:49.254 [DEBUG] [Thread-193608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:16:49.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:16:49.255 [DEBUG] [Thread-193608] [transport.py] [_log()] userauth is OK
2026-04-12T18:16:49.256 [DEBUG] [Thread-193608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:16:49.256 [DEBUG] [Thread-193608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:16:49.256 [DEBUG] [Thread-193608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:16:49.256 [DEBUG] [Thread-193608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:16:49.273 [INFO] [Thread-193608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:16:49.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:16:49.879 [DEBUG] [Thread-193608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:16:49.879 [DEBUG] [Thread-193608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:16:49.880 [DEBUG] [Thread-193608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:16:49.920 [DEBUG] [Thread-193608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:16:49.920 [DEBUG] [Thread-193608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:16:49.924 [DEBUG] [Thread-193608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:16:49.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:16:49.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:16:49.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:16:49.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:16:49.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:16:49.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:16:49.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:16:49.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:16:49.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:16:49.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.678235 -999.00  +13.70  10.89     78  +10.00 1 2 1 1 1   879    0 2.36 -65.69 ----- 10.9 10.9 265.4 12.0 15.7 -23.4 15.6 -21.9 15.4 -20.2 15.8 -22.3
2026-04-12T18:16:49.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:16:49.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:16:49.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.678235
2026-04-12T18:16:49.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:16:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:16:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:16:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:16:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:16:49.953 [DEBUG] [Thread-193608] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:16:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:16:19', tmtdew=4.69664, humidity=73.141, cloud=0.0, wind=13.8521, temperature=13.7174, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:16:39.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:16:50.025 [DEBUG] [Thread-193611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:50.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:16:50.047 [DEBUG] [Thread-193612] [transport.py] [_log()] starting thread (client mode): 0xae5a7460
2026-04-12T18:16:50.047 [DEBUG] [Thread-193612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:16:50.061 [DEBUG] [Thread-193612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:16:50.062 [INFO] [Thread-193612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:16:50.069 [DEBUG] [Thread-193612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:16:50.070 [DEBUG] [Thread-193612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] client lang: <none>
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] server lang: <none>
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] kex follows: False
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:16:50.071 [DEBUG] [Thread-193612] [transport.py] [_log()] Compression: none
2026-04-12T18:16:50.072 [DEBUG] [Thread-193612] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:16:50.128 [DEBUG] [Thread-193612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:16:50.129 [DEBUG] [Thread-193612] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:16:50.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:16:50.131 [DEBUG] [Thread-193612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:16:50.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:16:50.188 [DEBUG] [Thread-193612] [transport.py] [_log()] userauth is OK
2026-04-12T18:16:50.188 [DEBUG] [Thread-193612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:16:50.188 [DEBUG] [Thread-193612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:16:50.189 [DEBUG] [Thread-193612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:16:50.189 [DEBUG] [Thread-193612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:16:50.211 [INFO] [Thread-193612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:16:50.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:16:50.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:16:50.367 [DEBUG] [Thread-193614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:16:51.030 [DEBUG] [Thread-193612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:16:51.031 [DEBUG] [Thread-193612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:16:51.078 [DEBUG] [Thread-193612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:16:51.079 [DEBUG] [Thread-193612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:16:51.088 [DEBUG] [Thread-193612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:16:51.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:16: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')
2026-04-12T18:16:51.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:16:51.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:16:51.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:16:51.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:16:51.125 [DEBUG] [Thread-193612] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:17:05.419 [DEBUG] [Thread-193615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:17:15.649 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:17:15.650 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:17:20.457 [DEBUG] [Thread-193616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:17:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:17:21.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:17:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:17:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 16, 54), 4.6164, 73.7904, 0.0, 10.5703, 13.6676, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:17:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:16:54
2026-04-12T18:17:22.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:17:23.014 [DEBUG] [Thread-193617] [transport.py] [_log()] starting thread (client mode): 0xae5b46d0
2026-04-12T18:17:23.014 [DEBUG] [Thread-193617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:17:23.036 [DEBUG] [Thread-193617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:17:23.036 [INFO] [Thread-193617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] client lang: <none>
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] server lang: <none>
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] kex follows: False
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:17:23.039 [DEBUG] [Thread-193617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:17:23.040 [DEBUG] [Thread-193617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:17:23.040 [DEBUG] [Thread-193617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:17:23.040 [DEBUG] [Thread-193617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:17:23.040 [DEBUG] [Thread-193617] [transport.py] [_log()] Compression: none
2026-04-12T18:17:23.040 [DEBUG] [Thread-193617] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:17:23.057 [DEBUG] [Thread-193617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:17:23.057 [DEBUG] [Thread-193617] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:17:23.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:17:23.058 [DEBUG] [Thread-193617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:17:23.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:17:23.061 [DEBUG] [Thread-193617] [transport.py] [_log()] userauth is OK
2026-04-12T18:17:23.062 [DEBUG] [Thread-193617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:17:23.062 [DEBUG] [Thread-193617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:17:23.062 [DEBUG] [Thread-193617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:17:23.062 [DEBUG] [Thread-193617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:17:23.087 [INFO] [Thread-193617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:17:23.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:17:23.665 [DEBUG] [Thread-193617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:17:23.665 [DEBUG] [Thread-193617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:17:23.666 [DEBUG] [Thread-193617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:17:23.706 [DEBUG] [Thread-193617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:17:23.706 [DEBUG] [Thread-193617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:17:23.710 [DEBUG] [Thread-193617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:17:23.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:17:23.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:17:23.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:17:23.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:17:23.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:17:23.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:17:23.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:17:23.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:17:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:17:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.678576 -999.00  +13.70   7.62     78  +10.00 1 2 1 1 1   878    0 2.55 -60.98 ----- 7.6 7.6 263.6 11.5 15.6 -23.3 15.6 -22.0 15.3 -20.2 15.7 -22.0
2026-04-12T18:17:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:17:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:17:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.678576
2026-04-12T18:17:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:17:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:17:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:17:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:17:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:17:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:16:54', tmtdew=4.6164, humidity=73.7904, cloud=0.0, wind=10.5703, temperature=13.6676, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:17:08.966', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:17:23.736 [DEBUG] [Thread-193617] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:17:23.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:17:23.829 [DEBUG] [Thread-193620] [transport.py] [_log()] starting thread (client mode): 0xae5b5390
2026-04-12T18:17:23.829 [DEBUG] [Thread-193620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:17:23.844 [DEBUG] [Thread-193620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:17:23.844 [INFO] [Thread-193620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:17:23.851 [DEBUG] [Thread-193620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:17:23.851 [DEBUG] [Thread-193620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] client lang: <none>
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] server lang: <none>
2026-04-12T18:17:23.852 [DEBUG] [Thread-193620] [transport.py] [_log()] kex follows: False
2026-04-12T18:17:23.853 [DEBUG] [Thread-193620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:17:23.853 [DEBUG] [Thread-193620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:17:23.853 [DEBUG] [Thread-193620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:17:23.853 [DEBUG] [Thread-193620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:17:23.853 [DEBUG] [Thread-193620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:17:23.853 [DEBUG] [Thread-193620] [transport.py] [_log()] Compression: none
2026-04-12T18:17:23.853 [DEBUG] [Thread-193620] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:17:23.916 [DEBUG] [Thread-193620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:17:23.916 [DEBUG] [Thread-193620] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:17:23.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:17:23.918 [DEBUG] [Thread-193620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:17:23.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:17:23.971 [DEBUG] [Thread-193620] [transport.py] [_log()] userauth is OK
2026-04-12T18:17:23.972 [DEBUG] [Thread-193620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:17:23.972 [DEBUG] [Thread-193620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:17:23.972 [DEBUG] [Thread-193620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:17:23.972 [DEBUG] [Thread-193620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:17:23.996 [INFO] [Thread-193620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:17:23.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:17:23.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:17:24.854 [DEBUG] [Thread-193620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:17:24.854 [DEBUG] [Thread-193620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:17:24.902 [DEBUG] [Thread-193620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:17:24.902 [DEBUG] [Thread-193620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:17:24.911 [DEBUG] [Thread-193620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:17:24.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:17:24.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:17:24.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:17:24.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:17:24.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:17:24.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:17:24.946 [DEBUG] [Thread-193620] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:17:35.494 [DEBUG] [Thread-193622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:17:50.082 [DEBUG] [Thread-193623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:17:50.548 [DEBUG] [Thread-193624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:17:54.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:17:54.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:17:54.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:17:56.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 17, 30), 4.60521, 73.8402, 0.0, 10.9408, 13.6345, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:17:56.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:17:30
2026-04-12T18:17:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:17:56.835 [DEBUG] [Thread-193625] [transport.py] [_log()] starting thread (client mode): 0xae51aa70
2026-04-12T18:17:56.835 [DEBUG] [Thread-193625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:17:56.853 [DEBUG] [Thread-193625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:17:56.853 [INFO] [Thread-193625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:17:56.855 [DEBUG] [Thread-193625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:17:56.855 [DEBUG] [Thread-193625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] client lang: <none>
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] server lang: <none>
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] kex follows: False
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] Compression: none
2026-04-12T18:17:56.856 [DEBUG] [Thread-193625] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:17:56.873 [DEBUG] [Thread-193625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:17:56.874 [DEBUG] [Thread-193625] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:17:56.874 [DEBUG] [Thread-193625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:17:56.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:17:56.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:17:56.876 [DEBUG] [Thread-193625] [transport.py] [_log()] userauth is OK
2026-04-12T18:17:56.877 [DEBUG] [Thread-193625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:17:56.877 [DEBUG] [Thread-193625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:17:56.877 [DEBUG] [Thread-193625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:17:56.877 [DEBUG] [Thread-193625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:17:56.901 [INFO] [Thread-193625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:17:56.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:17:57.563 [DEBUG] [Thread-193625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:17:57.564 [DEBUG] [Thread-193625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:17:57.564 [DEBUG] [Thread-193625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:17:57.605 [DEBUG] [Thread-193625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:17:57.605 [DEBUG] [Thread-193625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:17:57.609 [DEBUG] [Thread-193625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:17:57.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:17:57.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:17:57.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:17:57.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:17:57.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:17:57.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:17:57.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:17:57.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:17:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:17:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.678929 -999.00  +13.70   9.37     78  +10.00 1 2 1 1 1   877    0 2.44 -62.37 ----- 9.4 9.4 254.6 10.8 15.6 -23.4 15.5 -22.1 15.3 -20.2 15.6 -22.4
2026-04-12T18:17:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:17:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:17:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.678929
2026-04-12T18:17:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:17:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:17:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:17:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:17:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:17:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:17:30', tmtdew=4.60521, humidity=73.8402, cloud=0.0, wind=10.9408, temperature=13.6345, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:17:39.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:17:57.638 [DEBUG] [Thread-193625] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:17:57.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:17:57.734 [DEBUG] [Thread-193628] [transport.py] [_log()] starting thread (client mode): 0xb0f40e50
2026-04-12T18:17:57.734 [DEBUG] [Thread-193628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:17:57.748 [DEBUG] [Thread-193628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:17:57.749 [INFO] [Thread-193628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] client lang: <none>
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] server lang: <none>
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] kex follows: False
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] Compression: none
2026-04-12T18:17:57.756 [DEBUG] [Thread-193628] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:17:57.815 [DEBUG] [Thread-193628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:17:57.815 [DEBUG] [Thread-193628] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:17:57.816 [DEBUG] [Thread-193628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:17:57.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:17:57.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:17:57.872 [DEBUG] [Thread-193628] [transport.py] [_log()] userauth is OK
2026-04-12T18:17:57.872 [DEBUG] [Thread-193628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:17:57.872 [DEBUG] [Thread-193628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:17:57.872 [DEBUG] [Thread-193628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:17:57.872 [DEBUG] [Thread-193628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:17:57.894 [INFO] [Thread-193628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:17:57.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:17:57.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:17:58.701 [DEBUG] [Thread-193628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:17:58.701 [DEBUG] [Thread-193628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:17:58.749 [DEBUG] [Thread-193628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:17:58.749 [DEBUG] [Thread-193628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:17:58.758 [DEBUG] [Thread-193628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:17:58.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:17:58.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:17:58.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:17:58.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:17:58.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:17:58.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:17:58.795 [DEBUG] [Thread-193628] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:18:05.587 [DEBUG] [Thread-193630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:18:20.612 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:18:20.613 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:18:20.634 [DEBUG] [Thread-193631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:18:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:18:28.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:18:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:18:30.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 18, 6), 4.58456, 73.9398, 0.0, 12.2285, 13.6181, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:18:30.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:18:06
2026-04-12T18:18:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:18:30.741 [DEBUG] [Thread-193632] [transport.py] [_log()] starting thread (client mode): 0xb0f41060
2026-04-12T18:18:30.742 [DEBUG] [Thread-193632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:18:30.765 [DEBUG] [Thread-193632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:18:30.765 [INFO] [Thread-193632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:18:30.767 [DEBUG] [Thread-193632] [transport.py] [_log()] client lang: <none>
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] server lang: <none>
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] kex follows: False
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] Compression: none
2026-04-12T18:18:30.768 [DEBUG] [Thread-193632] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:18:30.777 [DEBUG] [Thread-193632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:18:30.777 [DEBUG] [Thread-193632] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:18:30.778 [DEBUG] [Thread-193632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:18:30.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:18:30.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:18:30.780 [DEBUG] [Thread-193632] [transport.py] [_log()] userauth is OK
2026-04-12T18:18:30.780 [DEBUG] [Thread-193632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:18:30.780 [DEBUG] [Thread-193632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:18:30.780 [DEBUG] [Thread-193632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:18:30.780 [DEBUG] [Thread-193632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:18:30.804 [INFO] [Thread-193632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:18:30.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:18:31.491 [DEBUG] [Thread-193632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:18:31.491 [DEBUG] [Thread-193632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:18:31.492 [DEBUG] [Thread-193632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:18:31.532 [DEBUG] [Thread-193632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:18:31.532 [DEBUG] [Thread-193632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:18:31.536 [DEBUG] [Thread-193632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:18:31.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:18:31.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:18:31.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:18:31.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:18:31.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:18:31.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:18:31.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:18:31.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:18:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:18:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.679276 -999.00  +13.60   8.66     78   +9.90 1 2 1 1 1   876    0 2.57 -60.50 ----- 8.7 8.7 266.4 12.4 15.5 -23.1 15.5 -21.9 15.3 -20.0 15.7 -22.1
2026-04-12T18:18:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:18:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:18:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.679276
2026-04-12T18:18:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:18:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:18:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:18:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:18:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:18:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:18:06', tmtdew=4.58456, humidity=73.9398, cloud=0.0, wind=12.2285, temperature=13.6181, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:18:09.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:18:31.559 [DEBUG] [Thread-193632] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:18:31.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:18:31.661 [DEBUG] [Thread-193635] [transport.py] [_log()] starting thread (client mode): 0xb0f40610
2026-04-12T18:18:31.661 [DEBUG] [Thread-193635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:18:31.676 [DEBUG] [Thread-193635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:18:31.676 [INFO] [Thread-193635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:18:31.683 [DEBUG] [Thread-193635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] client lang: <none>
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] server lang: <none>
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] kex follows: False
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] Compression: none
2026-04-12T18:18:31.684 [DEBUG] [Thread-193635] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:18:31.744 [DEBUG] [Thread-193635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:18:31.744 [DEBUG] [Thread-193635] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:18:31.745 [DEBUG] [Thread-193635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:18:31.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:18:31.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:18:31.800 [DEBUG] [Thread-193635] [transport.py] [_log()] userauth is OK
2026-04-12T18:18:31.800 [DEBUG] [Thread-193635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:18:31.800 [DEBUG] [Thread-193635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:18:31.800 [DEBUG] [Thread-193635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:18:31.800 [DEBUG] [Thread-193635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:18:31.822 [INFO] [Thread-193635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:18:31.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:18:31.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:18:32.649 [DEBUG] [Thread-193635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:18:32.650 [DEBUG] [Thread-193635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:18:32.697 [DEBUG] [Thread-193635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:18:32.698 [DEBUG] [Thread-193635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:18:32.707 [DEBUG] [Thread-193635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:18:32.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:18:32.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:18:32.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:18:32.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:18:32.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:18:32.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:18:32.743 [DEBUG] [Thread-193635] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:18:35.671 [DEBUG] [Thread-193637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:18:50.141 [DEBUG] [Thread-193638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:18:50.724 [DEBUG] [Thread-193639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:19:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:19:02.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:19:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:19:04.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 18, 41), 4.59118, 73.747, 0.0, 15.7032, 13.8036, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:19:04.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:18:41
2026-04-12T18:19:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:19:04.644 [DEBUG] [Thread-193640] [transport.py] [_log()] starting thread (client mode): 0xae5345e0
2026-04-12T18:19:04.644 [DEBUG] [Thread-193640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:19:04.664 [DEBUG] [Thread-193640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:19:04.664 [INFO] [Thread-193640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:19:04.668 [DEBUG] [Thread-193640] [transport.py] [_log()] client lang: <none>
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] server lang: <none>
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] kex follows: False
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] Compression: none
2026-04-12T18:19:04.669 [DEBUG] [Thread-193640] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:19:04.689 [DEBUG] [Thread-193640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:19:04.690 [DEBUG] [Thread-193640] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:19:04.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:19:04.691 [DEBUG] [Thread-193640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:19:04.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:19:04.693 [DEBUG] [Thread-193640] [transport.py] [_log()] userauth is OK
2026-04-12T18:19:04.693 [DEBUG] [Thread-193640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:19:04.693 [DEBUG] [Thread-193640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:19:04.693 [DEBUG] [Thread-193640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:19:04.693 [DEBUG] [Thread-193640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:19:04.729 [INFO] [Thread-193640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:19:04.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:19:05.335 [DEBUG] [Thread-193640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:19:05.335 [DEBUG] [Thread-193640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:19:05.336 [DEBUG] [Thread-193640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:19:05.376 [DEBUG] [Thread-193640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:19:05.376 [DEBUG] [Thread-193640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:19:05.379 [DEBUG] [Thread-193640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:19:05.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:19:05.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:19:05.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:19:05.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:19:05.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:19:05.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:19:05.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:19:05.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:19:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:19:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.679623 -999.00  +13.60   8.61     78   +9.90 1 2 1 1 1   874    0 2.41 -62.77 ----- 8.6 8.6 263.0 12.8 15.5 -23.1 15.4 -21.8 15.2 -20.5 15.5 -22.1
2026-04-12T18:19:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:19:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:19:05.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.679623
2026-04-12T18:19:05.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:19:05.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:19:05.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:19:05.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:19:05.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:19:05.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:18:41', tmtdew=4.59118, humidity=73.747, cloud=0.0, wind=15.7032, temperature=13.8036, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:18:39.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:19:05.409 [DEBUG] [Thread-193640] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:19:05.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:19:05.502 [DEBUG] [Thread-193643] [transport.py] [_log()] starting thread (client mode): 0xae50ab90
2026-04-12T18:19:05.503 [DEBUG] [Thread-193643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:19:05.517 [DEBUG] [Thread-193643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:19:05.517 [INFO] [Thread-193643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:19:05.525 [DEBUG] [Thread-193643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:19:05.525 [DEBUG] [Thread-193643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] client lang: <none>
2026-04-12T18:19:05.526 [DEBUG] [Thread-193643] [transport.py] [_log()] server lang: <none>
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] kex follows: False
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] Compression: none
2026-04-12T18:19:05.527 [DEBUG] [Thread-193643] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:19:05.585 [DEBUG] [Thread-193643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:19:05.585 [DEBUG] [Thread-193643] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:19:05.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:19:05.586 [DEBUG] [Thread-193643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:19:05.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:19:05.644 [DEBUG] [Thread-193643] [transport.py] [_log()] userauth is OK
2026-04-12T18:19:05.644 [DEBUG] [Thread-193643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:19:05.645 [DEBUG] [Thread-193643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:19:05.645 [DEBUG] [Thread-193643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:19:05.645 [DEBUG] [Thread-193643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:19:05.670 [INFO] [Thread-193643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:19:05.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:19:05.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:19:05.763 [DEBUG] [Thread-193645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:19:06.495 [DEBUG] [Thread-193643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:19:06.495 [DEBUG] [Thread-193643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:19:06.542 [DEBUG] [Thread-193643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:19:06.543 [DEBUG] [Thread-193643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:19:06.552 [DEBUG] [Thread-193643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:19:06.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:19:06.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:19:06.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:19:06.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:19:06.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:19:06.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:19:06.586 [DEBUG] [Thread-193643] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:19:20.823 [DEBUG] [Thread-193646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:19:25.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:19:25.867 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:19:35.861 [DEBUG] [Thread-193647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:19:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:19:36.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:19:36.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:19:37.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 19, 16), 4.55281, 73.8405, 0.0, 12.5813, 13.5185, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:19:37.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:19:16
2026-04-12T18:19:38.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:19:38.479 [DEBUG] [Thread-193648] [transport.py] [_log()] starting thread (client mode): 0xae519030
2026-04-12T18:19:38.479 [DEBUG] [Thread-193648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:19:38.499 [DEBUG] [Thread-193648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:19:38.499 [INFO] [Thread-193648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:19:38.502 [DEBUG] [Thread-193648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:19:38.502 [DEBUG] [Thread-193648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:19:38.502 [DEBUG] [Thread-193648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] client lang: <none>
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] server lang: <none>
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] kex follows: False
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:19:38.503 [DEBUG] [Thread-193648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:19:38.504 [DEBUG] [Thread-193648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:19:38.504 [DEBUG] [Thread-193648] [transport.py] [_log()] Compression: none
2026-04-12T18:19:38.504 [DEBUG] [Thread-193648] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:19:38.523 [DEBUG] [Thread-193648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:19:38.523 [DEBUG] [Thread-193648] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:19:38.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:19:38.524 [DEBUG] [Thread-193648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:19:38.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:19:38.564 [DEBUG] [Thread-193648] [transport.py] [_log()] userauth is OK
2026-04-12T18:19:38.565 [DEBUG] [Thread-193648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:19:38.565 [DEBUG] [Thread-193648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:19:38.565 [DEBUG] [Thread-193648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:19:38.565 [DEBUG] [Thread-193648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:19:38.602 [INFO] [Thread-193648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:19:38.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:19:39.259 [DEBUG] [Thread-193648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:19:39.260 [DEBUG] [Thread-193648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:19:39.260 [DEBUG] [Thread-193648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:19:39.301 [DEBUG] [Thread-193648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:19:39.301 [DEBUG] [Thread-193648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:19:39.304 [DEBUG] [Thread-193648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:19:39.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:19:39.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:19:39.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:19:39.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:19:39.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:19:39.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:19:39.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:19:39.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:19:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:19:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.679971 -999.00  +13.60  12.75     77   +9.70 1 2 1 1 1   873    0 2.49 -59.77 ----- 12.8 12.8 260.6 15.8 15.4 -23.3 15.4 -21.9 15.2 -20.0 15.5 -22.5
2026-04-12T18:19:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:19:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:19:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.679971
2026-04-12T18:19:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:19:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:19:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:19:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:19:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:19:39.332 [DEBUG] [Thread-193648] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:19:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:19:16', tmtdew=4.55281, humidity=73.8405, cloud=0.0, wind=12.5813, temperature=13.5185, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:19:09.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:19:39.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:19:39.426 [DEBUG] [Thread-193651] [transport.py] [_log()] starting thread (client mode): 0xae50a7a0
2026-04-12T18:19:39.426 [DEBUG] [Thread-193651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:19:39.441 [DEBUG] [Thread-193651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:19:39.441 [INFO] [Thread-193651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:19:39.449 [DEBUG] [Thread-193651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:19:39.449 [DEBUG] [Thread-193651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:19:39.449 [DEBUG] [Thread-193651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:19:39.449 [DEBUG] [Thread-193651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:39.449 [DEBUG] [Thread-193651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:19:39.449 [DEBUG] [Thread-193651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:39.449 [DEBUG] [Thread-193651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] client lang: <none>
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] server lang: <none>
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] kex follows: False
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] Compression: none
2026-04-12T18:19:39.450 [DEBUG] [Thread-193651] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:19:39.506 [DEBUG] [Thread-193651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:19:39.506 [DEBUG] [Thread-193651] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:19:39.506 [DEBUG] [Thread-193651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:19:39.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:19:39.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:19:39.563 [DEBUG] [Thread-193651] [transport.py] [_log()] userauth is OK
2026-04-12T18:19:39.563 [DEBUG] [Thread-193651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:19:39.564 [DEBUG] [Thread-193651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:19:39.564 [DEBUG] [Thread-193651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:19:39.564 [DEBUG] [Thread-193651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:19:39.586 [INFO] [Thread-193651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:19:39.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:19:39.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:19:40.458 [DEBUG] [Thread-193651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:19:40.458 [DEBUG] [Thread-193651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:19:40.506 [DEBUG] [Thread-193651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:19:40.506 [DEBUG] [Thread-193651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:19:40.515 [DEBUG] [Thread-193651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:19:40.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:19: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')
2026-04-12T18:19:40.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
2026-04-12T18:19:40.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:19:40.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:19:40.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:19:40.553 [DEBUG] [Thread-193651] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:19:50.198 [DEBUG] [Thread-193654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:19:50.900 [DEBUG] [Thread-193655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:20:05.961 [DEBUG] [Thread-193656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:20:10.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:20:10.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:20:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:20:11.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 19, 52), 4.59779, 73.7142, 0.0, 14.1156, 13.8039, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:20:11.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:19:52
2026-04-12T18:20:12.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:20:12.436 [DEBUG] [Thread-193657] [transport.py] [_log()] starting thread (client mode): 0xae5f3190
2026-04-12T18:20:12.436 [DEBUG] [Thread-193657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:20:12.457 [DEBUG] [Thread-193657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:20:12.457 [INFO] [Thread-193657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] client lang: <none>
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] server lang: <none>
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] kex follows: False
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] Compression: none
2026-04-12T18:20:12.460 [DEBUG] [Thread-193657] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:20:12.478 [DEBUG] [Thread-193657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:20:12.479 [DEBUG] [Thread-193657] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:20:12.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:20:12.480 [DEBUG] [Thread-193657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:20:12.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:20:12.483 [DEBUG] [Thread-193657] [transport.py] [_log()] userauth is OK
2026-04-12T18:20:12.483 [DEBUG] [Thread-193657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:20:12.483 [DEBUG] [Thread-193657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:20:12.483 [DEBUG] [Thread-193657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:20:12.483 [DEBUG] [Thread-193657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:20:12.507 [INFO] [Thread-193657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:20:12.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:20:13.116 [DEBUG] [Thread-193657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:20:13.116 [DEBUG] [Thread-193657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:20:13.116 [DEBUG] [Thread-193657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:20:13.158 [DEBUG] [Thread-193657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:20:13.158 [DEBUG] [Thread-193657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:20:13.160 [DEBUG] [Thread-193657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:20:13.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:20:13.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:20:13.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:20:13.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:20:13.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:20:13.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:20:13.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:20:13.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:20:13.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:20:13.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.680318 -999.00  +13.50   9.89     78   +9.80 1 2 1 1 1   871    0 2.37 -63.57 ----- 9.9 9.9 255.5 13.7 15.4 -23.2 15.4 -21.6 15.1 -20.0 15.4 -22.2
2026-04-12T18:20:13.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:20:13.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:20:13.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.680318
2026-04-12T18:20:13.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:20:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:20:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:20:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:20:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:20:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:19:52', tmtdew=4.59779, humidity=73.7142, cloud=0.0, wind=14.1156, temperature=13.8039, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:19:39.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:20:13.174 [DEBUG] [Thread-193657] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:20:13.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:20:13.259 [DEBUG] [Thread-193660] [transport.py] [_log()] starting thread (client mode): 0xae5a6f20
2026-04-12T18:20:13.259 [DEBUG] [Thread-193660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:20:13.274 [DEBUG] [Thread-193660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:20:13.274 [INFO] [Thread-193660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:20:13.281 [DEBUG] [Thread-193660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:20:13.281 [DEBUG] [Thread-193660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] client lang: <none>
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] server lang: <none>
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] kex follows: False
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] Compression: none
2026-04-12T18:20:13.282 [DEBUG] [Thread-193660] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:20:13.340 [DEBUG] [Thread-193660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:20:13.340 [DEBUG] [Thread-193660] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:20:13.341 [DEBUG] [Thread-193660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:20:13.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:20:13.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:20:13.396 [DEBUG] [Thread-193660] [transport.py] [_log()] userauth is OK
2026-04-12T18:20:13.396 [DEBUG] [Thread-193660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:20:13.397 [DEBUG] [Thread-193660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:20:13.397 [DEBUG] [Thread-193660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:20:13.397 [DEBUG] [Thread-193660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:20:13.422 [INFO] [Thread-193660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:20:13.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:20:13.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:20:14.265 [DEBUG] [Thread-193660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:20:14.265 [DEBUG] [Thread-193660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:20:14.313 [DEBUG] [Thread-193660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:20:14.313 [DEBUG] [Thread-193660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:20:14.323 [DEBUG] [Thread-193660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:20:14.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:20:14.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:20:14.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:20:14.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:20:14.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:20:14.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:20:14.360 [DEBUG] [Thread-193660] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:20:20.998 [DEBUG] [Thread-193662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:20:31.227 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:20:31.228 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:20:36.049 [DEBUG] [Thread-193663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:20:44.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:20:44.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:20:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:20:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 20, 28), 4.58438, 73.9235, 0.0, 11.5405, 13.4689, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:20:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:20:28
2026-04-12T18:20:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:20:46.217 [DEBUG] [Thread-193664] [transport.py] [_log()] starting thread (client mode): 0xae5f2470
2026-04-12T18:20:46.217 [DEBUG] [Thread-193664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:20:46.236 [DEBUG] [Thread-193664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:20:46.236 [INFO] [Thread-193664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:20:46.238 [DEBUG] [Thread-193664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] client lang: <none>
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] server lang: <none>
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] kex follows: False
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] Compression: none
2026-04-12T18:20:46.239 [DEBUG] [Thread-193664] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:20:46.256 [DEBUG] [Thread-193664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:20:46.257 [DEBUG] [Thread-193664] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:20:46.257 [DEBUG] [Thread-193664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:20:46.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:20:46.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:20:46.259 [DEBUG] [Thread-193664] [transport.py] [_log()] userauth is OK
2026-04-12T18:20:46.260 [DEBUG] [Thread-193664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:20:46.260 [DEBUG] [Thread-193664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:20:46.260 [DEBUG] [Thread-193664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:20:46.260 [DEBUG] [Thread-193664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:20:46.284 [INFO] [Thread-193664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:20:46.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:20:46.878 [DEBUG] [Thread-193664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:20:46.878 [DEBUG] [Thread-193664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:20:46.879 [DEBUG] [Thread-193664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:20:46.919 [DEBUG] [Thread-193664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:20:46.919 [DEBUG] [Thread-193664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:20:46.923 [DEBUG] [Thread-193664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:20:46.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:20:46.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:20:46.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:20:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:20:46.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:20:46.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:20:46.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:20:46.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:20:46.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:20:46.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.681012 -999.00  +13.50   6.23     79  +10.00 1 2 1 1 1   868    0 2.26 -64.39 ----- 6.2 6.2 254.2 11.8 15.3 -23.1 15.3 -21.7 15.0 -19.9 15.3 -21.9
2026-04-12T18:20:46.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:20:46.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:20:46.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.681012
2026-04-12T18:20:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:20:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:20:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:20:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:20:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:20:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:20:28', tmtdew=4.58438, humidity=73.9235, cloud=0.0, wind=11.5405, temperature=13.4689, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:20:39.437', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:20:46.949 [DEBUG] [Thread-193664] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:20:47.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:20:47.042 [DEBUG] [Thread-193667] [transport.py] [_log()] starting thread (client mode): 0xb0fcfe50
2026-04-12T18:20:47.042 [DEBUG] [Thread-193667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:20:47.057 [DEBUG] [Thread-193667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:20:47.057 [INFO] [Thread-193667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] client lang: <none>
2026-04-12T18:20:47.065 [DEBUG] [Thread-193667] [transport.py] [_log()] server lang: <none>
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] kex follows: False
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] Compression: none
2026-04-12T18:20:47.066 [DEBUG] [Thread-193667] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:20:47.124 [DEBUG] [Thread-193667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:20:47.125 [DEBUG] [Thread-193667] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:20:47.125 [DEBUG] [Thread-193667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:20:47.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:20:47.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:20:47.180 [DEBUG] [Thread-193667] [transport.py] [_log()] userauth is OK
2026-04-12T18:20:47.180 [DEBUG] [Thread-193667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:20:47.180 [DEBUG] [Thread-193667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:20:47.180 [DEBUG] [Thread-193667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:20:47.180 [DEBUG] [Thread-193667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:20:47.205 [INFO] [Thread-193667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:20:47.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:20:47.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:20:48.019 [DEBUG] [Thread-193667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:20:48.019 [DEBUG] [Thread-193667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:20:48.066 [DEBUG] [Thread-193667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:20:48.067 [DEBUG] [Thread-193667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:20:48.076 [DEBUG] [Thread-193667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:20:48.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:20:48.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:20:48.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:20:48.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:20:48.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:20:48.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:20:48.117 [DEBUG] [Thread-193667] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:20:50.263 [DEBUG] [Thread-193669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:20:51.085 [DEBUG] [Thread-193670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:06.139 [DEBUG] [Thread-193671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:18.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:21:18.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:21:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:21:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 21, 3), 4.55503, 74.0727, 0.0, 10.9937, 13.4855, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:21:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:21:03
2026-04-12T18:21:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:21:19.956 [DEBUG] [Thread-193672] [transport.py] [_log()] starting thread (client mode): 0xae5b74f0
2026-04-12T18:21:19.956 [DEBUG] [Thread-193672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:21:19.978 [DEBUG] [Thread-193672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:21:19.978 [INFO] [Thread-193672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:21:19.979 [DEBUG] [Thread-193672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:21:19.979 [DEBUG] [Thread-193672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:21:19.979 [DEBUG] [Thread-193672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:21:19.979 [DEBUG] [Thread-193672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] client lang: <none>
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] server lang: <none>
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] kex follows: False
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:21:19.980 [DEBUG] [Thread-193672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:21:19.981 [DEBUG] [Thread-193672] [transport.py] [_log()] Compression: none
2026-04-12T18:21:19.981 [DEBUG] [Thread-193672] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:21:19.995 [DEBUG] [Thread-193672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:21:19.996 [DEBUG] [Thread-193672] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:21:19.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:21:19.998 [DEBUG] [Thread-193672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:21:19.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:21:20.000 [DEBUG] [Thread-193672] [transport.py] [_log()] userauth is OK
2026-04-12T18:21:20.001 [DEBUG] [Thread-193672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:21:20.001 [DEBUG] [Thread-193672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:21:20.001 [DEBUG] [Thread-193672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:21:20.001 [DEBUG] [Thread-193672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:21:20.024 [INFO] [Thread-193672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:21:20.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:21:20.657 [DEBUG] [Thread-193672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:21:20.657 [DEBUG] [Thread-193672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:21:20.658 [DEBUG] [Thread-193672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:21:20.698 [DEBUG] [Thread-193672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:21:20.698 [DEBUG] [Thread-193672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:21:20.702 [DEBUG] [Thread-193672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:21:20.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:21:20.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:21:20.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:21:20.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:21:20.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:21:20.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:21:20.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:21:20.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:21:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:21:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.681360 -999.00  +13.50   7.99     78   +9.90 1 2 1 1 1   866    0 2.17 -67.52 ----- 8.0 8.0 244.4 11.8 -999.0 -999.0 15.2 -21.7 14.9 -19.9 15.2 -22.1
2026-04-12T18:21:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:21:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:21:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.681360
2026-04-12T18:21:20.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:21:20.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:21:20.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:21:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:21:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:21:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:21:03', tmtdew=4.55503, humidity=74.0727, cloud=0.0, wind=10.9937, temperature=13.4855, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:21:09.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:21:20.725 [DEBUG] [Thread-193672] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:21:20.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:21:20.821 [DEBUG] [Thread-193675] [transport.py] [_log()] starting thread (client mode): 0xb0fcd420
2026-04-12T18:21:20.821 [DEBUG] [Thread-193675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:21:20.835 [DEBUG] [Thread-193675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:21:20.836 [INFO] [Thread-193675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:21:20.843 [DEBUG] [Thread-193675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:21:20.843 [DEBUG] [Thread-193675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:21:20.843 [DEBUG] [Thread-193675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:21:20.843 [DEBUG] [Thread-193675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] client lang: <none>
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] server lang: <none>
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] kex follows: False
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:21:20.844 [DEBUG] [Thread-193675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:21:20.845 [DEBUG] [Thread-193675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:21:20.845 [DEBUG] [Thread-193675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:21:20.845 [DEBUG] [Thread-193675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:21:20.845 [DEBUG] [Thread-193675] [transport.py] [_log()] Compression: none
2026-04-12T18:21:20.845 [DEBUG] [Thread-193675] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:21:20.904 [DEBUG] [Thread-193675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:21:20.904 [DEBUG] [Thread-193675] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:21:20.905 [DEBUG] [Thread-193675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:21:20.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:21:20.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:21:20.960 [DEBUG] [Thread-193675] [transport.py] [_log()] userauth is OK
2026-04-12T18:21:20.960 [DEBUG] [Thread-193675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:21:20.961 [DEBUG] [Thread-193675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:21:20.961 [DEBUG] [Thread-193675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:21:20.961 [DEBUG] [Thread-193675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:21:20.979 [INFO] [Thread-193675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:21:20.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:21:20.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:21:21.177 [DEBUG] [Thread-193677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:21.787 [DEBUG] [Thread-193675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:21:21.787 [DEBUG] [Thread-193675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:21:21.835 [DEBUG] [Thread-193675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:21:21.835 [DEBUG] [Thread-193675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:21:21.844 [DEBUG] [Thread-193675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:21:21.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:21:21.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:21:21.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:21:21.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:21:21.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:21:21.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:21:21.881 [DEBUG] [Thread-193675] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:21:36.245 [DEBUG] [Thread-193678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:36.519 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:36.521 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:50.331 [DEBUG] [Thread-193679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:51.287 [DEBUG] [Thread-193680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:21:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:21:51.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:21:51.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:21:53.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 21, 39), 4.43605, 74.5102, 0.0, 10.3054, 13.7381, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:21:53.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:21:39
2026-04-12T18:21:53.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:21:53.811 [DEBUG] [Thread-193681] [transport.py] [_log()] starting thread (client mode): 0xae5a4be0
2026-04-12T18:21:53.811 [DEBUG] [Thread-193681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:21:53.832 [DEBUG] [Thread-193681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:21:53.833 [INFO] [Thread-193681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:21:53.835 [DEBUG] [Thread-193681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:21:53.835 [DEBUG] [Thread-193681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:21:53.835 [DEBUG] [Thread-193681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:21:53.835 [DEBUG] [Thread-193681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] client lang: <none>
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] server lang: <none>
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] kex follows: False
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:21:53.836 [DEBUG] [Thread-193681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:21:53.837 [DEBUG] [Thread-193681] [transport.py] [_log()] Compression: none
2026-04-12T18:21:53.837 [DEBUG] [Thread-193681] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:21:53.856 [DEBUG] [Thread-193681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:21:53.857 [DEBUG] [Thread-193681] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:21:53.858 [DEBUG] [Thread-193681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:21:53.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:21:53.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:21:53.860 [DEBUG] [Thread-193681] [transport.py] [_log()] userauth is OK
2026-04-12T18:21:53.860 [DEBUG] [Thread-193681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:21:53.860 [DEBUG] [Thread-193681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:21:53.860 [DEBUG] [Thread-193681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:21:53.860 [DEBUG] [Thread-193681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:21:53.875 [INFO] [Thread-193681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:21:53.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:21:54.495 [DEBUG] [Thread-193681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:21:54.495 [DEBUG] [Thread-193681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:21:54.495 [DEBUG] [Thread-193681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:21:54.536 [DEBUG] [Thread-193681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:21:54.536 [DEBUG] [Thread-193681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:21:54.540 [DEBUG] [Thread-193681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:21:54.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:21:54.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:21:54.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:21:54.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:21:54.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:21:54.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:21:54.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:21:54.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:21:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:21:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.681707 -999.00  +13.50  10.74     78   +9.80 1 2 1 1 1   863    0 2.12 -67.80 ----- 10.7 10.7 257.6 13.5 15.2 -22.9 15.2 -21.6 14.9 -19.7 15.2 -22.0
2026-04-12T18:21:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:21:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:21:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.681707
2026-04-12T18:21:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:21:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:21:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:21:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:21:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:21:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:21:39', tmtdew=4.43605, humidity=74.5102, cloud=0.0, wind=10.3054, temperature=13.7381, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:21:39.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:21:54.566 [DEBUG] [Thread-193681] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:21:54.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:21:54.665 [DEBUG] [Thread-193684] [transport.py] [_log()] starting thread (client mode): 0xae5f0e20
2026-04-12T18:21:54.665 [DEBUG] [Thread-193684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:21:54.680 [DEBUG] [Thread-193684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:21:54.680 [INFO] [Thread-193684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:21:54.687 [DEBUG] [Thread-193684] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] client lang: <none>
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] server lang: <none>
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] kex follows: False
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:21:54.688 [DEBUG] [Thread-193684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:21:54.689 [DEBUG] [Thread-193684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:21:54.689 [DEBUG] [Thread-193684] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:21:54.689 [DEBUG] [Thread-193684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:21:54.689 [DEBUG] [Thread-193684] [transport.py] [_log()] Compression: none
2026-04-12T18:21:54.689 [DEBUG] [Thread-193684] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:21:54.749 [DEBUG] [Thread-193684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:21:54.749 [DEBUG] [Thread-193684] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:21:54.750 [DEBUG] [Thread-193684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:21:54.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:21:54.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:21:54.810 [DEBUG] [Thread-193684] [transport.py] [_log()] userauth is OK
2026-04-12T18:21:54.810 [DEBUG] [Thread-193684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:21:54.811 [DEBUG] [Thread-193684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:21:54.811 [DEBUG] [Thread-193684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:21:54.811 [DEBUG] [Thread-193684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:21:54.840 [INFO] [Thread-193684] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:21:54.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:21:54.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:21:55.656 [DEBUG] [Thread-193684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:21:55.656 [DEBUG] [Thread-193684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:21:55.704 [DEBUG] [Thread-193684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:21:55.704 [DEBUG] [Thread-193684] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:21:55.713 [DEBUG] [Thread-193684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:21:55.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:21:55.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:21:55.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:21:55.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:21:55.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:21:55.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:21:55.751 [DEBUG] [Thread-193684] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:22:06.325 [DEBUG] [Thread-193686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:22:21.375 [DEBUG] [Thread-193687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:22:25.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:22:25.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:22:25.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:22:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 22, 14), 4.40701, 74.3048, 0.0, 11.1348, 13.3859, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:22:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:22:14
2026-04-12T18:22:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:22:27.476 [DEBUG] [Thread-193688] [transport.py] [_log()] starting thread (client mode): 0xb0fcddb0
2026-04-12T18:22:27.476 [DEBUG] [Thread-193688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:22:27.498 [DEBUG] [Thread-193688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:22:27.498 [INFO] [Thread-193688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:22:27.501 [DEBUG] [Thread-193688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] client lang: <none>
2026-04-12T18:22:27.502 [DEBUG] [Thread-193688] [transport.py] [_log()] server lang: <none>
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] kex follows: False
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] Compression: none
2026-04-12T18:22:27.503 [DEBUG] [Thread-193688] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:22:27.522 [DEBUG] [Thread-193688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:22:27.522 [DEBUG] [Thread-193688] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:22:27.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:22:27.524 [DEBUG] [Thread-193688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:22:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:22:27.526 [DEBUG] [Thread-193688] [transport.py] [_log()] userauth is OK
2026-04-12T18:22:27.526 [DEBUG] [Thread-193688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:22:27.526 [DEBUG] [Thread-193688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:22:27.526 [DEBUG] [Thread-193688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:22:27.526 [DEBUG] [Thread-193688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:22:27.546 [INFO] [Thread-193688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:22:27.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:22:28.155 [DEBUG] [Thread-193688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:22:28.155 [DEBUG] [Thread-193688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:22:28.156 [DEBUG] [Thread-193688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:22:28.196 [DEBUG] [Thread-193688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:22:28.197 [DEBUG] [Thread-193688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:22:28.199 [DEBUG] [Thread-193688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:22:28.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:22:28.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:22:28.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:22:28.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:22:28.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:22:28.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:22:28.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:22:28.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:22:28.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:22:28.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.682054 -999.00  +13.50  12.35     78   +9.80 1 2 1 1 1   861    0 1.91 -74.65 ----- 12.3 12.3 253.8 14.2 15.2 -23.0 15.2 -21.5 14.9 -19.8 15.1 -21.8
2026-04-12T18:22:28.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:22:28.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:22:28.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.682054
2026-04-12T18:22:28.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:22:28.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:22:28.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:22:28.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:22:28.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:22:28.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:22:14', tmtdew=4.40701, humidity=74.3048, cloud=0.0, wind=11.1348, temperature=13.3859, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:22:09.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:22:28.224 [DEBUG] [Thread-193688] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:22:28.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:22:28.321 [DEBUG] [Thread-193691] [transport.py] [_log()] starting thread (client mode): 0xb0fccdf0
2026-04-12T18:22:28.321 [DEBUG] [Thread-193691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:22:28.336 [DEBUG] [Thread-193691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:22:28.336 [INFO] [Thread-193691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:22:28.343 [DEBUG] [Thread-193691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] client lang: <none>
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] server lang: <none>
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] kex follows: False
2026-04-12T18:22:28.344 [DEBUG] [Thread-193691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:22:28.345 [DEBUG] [Thread-193691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:22:28.345 [DEBUG] [Thread-193691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:22:28.345 [DEBUG] [Thread-193691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:22:28.345 [DEBUG] [Thread-193691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:22:28.345 [DEBUG] [Thread-193691] [transport.py] [_log()] Compression: none
2026-04-12T18:22:28.345 [DEBUG] [Thread-193691] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:22:28.402 [DEBUG] [Thread-193691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:22:28.403 [DEBUG] [Thread-193691] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:22:28.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:22:28.404 [DEBUG] [Thread-193691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:22:28.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:22:28.459 [DEBUG] [Thread-193691] [transport.py] [_log()] userauth is OK
2026-04-12T18:22:28.459 [DEBUG] [Thread-193691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:22:28.459 [DEBUG] [Thread-193691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:22:28.459 [DEBUG] [Thread-193691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:22:28.459 [DEBUG] [Thread-193691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:22:28.482 [INFO] [Thread-193691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:22:28.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:22:28.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:22:29.313 [DEBUG] [Thread-193691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:22:29.313 [DEBUG] [Thread-193691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:22:29.360 [DEBUG] [Thread-193691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:22:29.361 [DEBUG] [Thread-193691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:22:29.369 [DEBUG] [Thread-193691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:22:29.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:22:29.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:22:29.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:22:29.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:22:29.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:22:29.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:22:29.403 [DEBUG] [Thread-193691] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:22:36.413 [DEBUG] [Thread-193693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:22:41.123 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:22:41.124 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:22:50.408 [DEBUG] [Thread-193694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:22:51.468 [DEBUG] [Thread-193695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:22:59.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:22:59.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:22:59.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:23:00.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 22, 50), 4.39309, 74.7093, 0.0, 13.5511, 13.6388, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:23:00.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:22:50
2026-04-12T18:23:01.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:23:01.228 [DEBUG] [Thread-193696] [transport.py] [_log()] starting thread (client mode): 0xb0fcfe50
2026-04-12T18:23:01.228 [DEBUG] [Thread-193696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:23:01.247 [DEBUG] [Thread-193696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:23:01.247 [INFO] [Thread-193696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:23:01.250 [DEBUG] [Thread-193696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] client lang: <none>
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] server lang: <none>
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] kex follows: False
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] Compression: none
2026-04-12T18:23:01.251 [DEBUG] [Thread-193696] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:23:01.267 [DEBUG] [Thread-193696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:23:01.268 [DEBUG] [Thread-193696] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:23:01.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:23:01.269 [DEBUG] [Thread-193696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:23:01.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:23:01.270 [DEBUG] [Thread-193696] [transport.py] [_log()] userauth is OK
2026-04-12T18:23:01.271 [DEBUG] [Thread-193696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:23:01.271 [DEBUG] [Thread-193696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:23:01.271 [DEBUG] [Thread-193696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:23:01.271 [DEBUG] [Thread-193696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:23:01.289 [INFO] [Thread-193696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:23:01.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:23:01.885 [DEBUG] [Thread-193696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:23:01.885 [DEBUG] [Thread-193696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:23:01.886 [DEBUG] [Thread-193696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:23:01.926 [DEBUG] [Thread-193696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:23:01.926 [DEBUG] [Thread-193696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:23:01.929 [DEBUG] [Thread-193696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:23:01.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:23:01.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:23:01.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:23:01.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:23:01.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:23:01.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:23:01.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:23:01.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:23:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:23:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.682401 -999.00  +13.40  13.78     78   +9.70 1 2 1 1 1   858    0 2.10 -66.25 ----- 13.8 13.8 254.0 16.0 15.2 -22.9 15.1 -21.5 14.8 -19.7 15.1 -21.7
2026-04-12T18:23:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:23:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:23:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.682401
2026-04-12T18:23:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:23:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:23:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:23:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:23:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:23:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:22:50', tmtdew=4.39309, humidity=74.7093, cloud=0.0, wind=13.5511, temperature=13.6388, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:22:39.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:23:01.956 [DEBUG] [Thread-193696] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:23:02.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:23:02.049 [DEBUG] [Thread-193699] [transport.py] [_log()] starting thread (client mode): 0xb0fcd3f0
2026-04-12T18:23:02.049 [DEBUG] [Thread-193699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:23:02.063 [DEBUG] [Thread-193699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:23:02.063 [INFO] [Thread-193699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:23:02.071 [DEBUG] [Thread-193699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:23:02.071 [DEBUG] [Thread-193699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:23:02.071 [DEBUG] [Thread-193699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] client lang: <none>
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] server lang: <none>
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] kex follows: False
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:23:02.072 [DEBUG] [Thread-193699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:23:02.073 [DEBUG] [Thread-193699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:23:02.073 [DEBUG] [Thread-193699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:23:02.073 [DEBUG] [Thread-193699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:23:02.073 [DEBUG] [Thread-193699] [transport.py] [_log()] Compression: none
2026-04-12T18:23:02.073 [DEBUG] [Thread-193699] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:23:02.136 [DEBUG] [Thread-193699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:23:02.136 [DEBUG] [Thread-193699] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:23:02.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:23:02.138 [DEBUG] [Thread-193699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:23:02.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:23:02.194 [DEBUG] [Thread-193699] [transport.py] [_log()] userauth is OK
2026-04-12T18:23:02.194 [DEBUG] [Thread-193699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:23:02.194 [DEBUG] [Thread-193699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:23:02.194 [DEBUG] [Thread-193699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:23:02.194 [DEBUG] [Thread-193699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:23:02.212 [INFO] [Thread-193699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:23:02.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:23:02.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:23:03.023 [DEBUG] [Thread-193699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:23:03.024 [DEBUG] [Thread-193699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:23:03.071 [DEBUG] [Thread-193699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:23:03.072 [DEBUG] [Thread-193699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:23:03.081 [DEBUG] [Thread-193699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:23:03.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:23:03.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:23:03.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:23:03.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:23:03.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:23:03.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:23:03.115 [DEBUG] [Thread-193699] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:23:06.507 [DEBUG] [Thread-193701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:23:21.561 [DEBUG] [Thread-193702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:23:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:23:33.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:23:33.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:23:34.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 23, 25), 4.43996, 74.3878, 0.0, 11.3994, 13.3694, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:23:34.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:23:25
2026-04-12T18:23:34.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:23:34.994 [DEBUG] [Thread-193703] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc40
2026-04-12T18:23:34.994 [DEBUG] [Thread-193703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:23:35.014 [DEBUG] [Thread-193703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:23:35.015 [INFO] [Thread-193703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:35.018 [DEBUG] [Thread-193703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] client lang: <none>
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] server lang: <none>
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] kex follows: False
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] Compression: none
2026-04-12T18:23:35.019 [DEBUG] [Thread-193703] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:23:35.041 [DEBUG] [Thread-193703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:23:35.041 [DEBUG] [Thread-193703] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:23:35.042 [DEBUG] [Thread-193703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:23:35.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:23:35.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:23:35.044 [DEBUG] [Thread-193703] [transport.py] [_log()] userauth is OK
2026-04-12T18:23:35.044 [DEBUG] [Thread-193703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:23:35.045 [DEBUG] [Thread-193703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:23:35.045 [DEBUG] [Thread-193703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:23:35.045 [DEBUG] [Thread-193703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:23:35.068 [INFO] [Thread-193703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:23:35.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:23:35.668 [DEBUG] [Thread-193703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:23:35.669 [DEBUG] [Thread-193703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:23:35.669 [DEBUG] [Thread-193703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:23:35.709 [DEBUG] [Thread-193703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:23:35.709 [DEBUG] [Thread-193703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:23:35.712 [DEBUG] [Thread-193703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:23:35.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:23:35.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:23:35.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:23:35.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:23:35.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:23:35.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:23:35.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:23:35.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:23:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:23:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.682748 -999.00  +13.40   6.92     78   +9.80 1 2 1 1 1   855    0 2.14 -65.57 ----- 6.9 6.9 262.4 12.2 15.1 -22.7 15.1 -21.6 14.7 -19.6 15.0 -21.7
2026-04-12T18:23:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:23:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:23:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.682748
2026-04-12T18:23:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:23:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:23:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:23:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:23:35.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:23:35.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:23:25', tmtdew=4.43996, humidity=74.3878, cloud=0.0, wind=11.3994, temperature=13.3694, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:23:09.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:23:35.739 [DEBUG] [Thread-193703] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:23:35.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:23:35.829 [DEBUG] [Thread-193706] [transport.py] [_log()] starting thread (client mode): 0xae5f2fe0
2026-04-12T18:23:35.829 [DEBUG] [Thread-193706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:23:35.843 [DEBUG] [Thread-193706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:23:35.843 [INFO] [Thread-193706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] client lang: <none>
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] server lang: <none>
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] kex follows: False
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:23:35.851 [DEBUG] [Thread-193706] [transport.py] [_log()] Compression: none
2026-04-12T18:23:35.852 [DEBUG] [Thread-193706] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:23:35.912 [DEBUG] [Thread-193706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:23:35.912 [DEBUG] [Thread-193706] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:23:35.913 [DEBUG] [Thread-193706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:23:35.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:23:35.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:23:35.968 [DEBUG] [Thread-193706] [transport.py] [_log()] userauth is OK
2026-04-12T18:23:35.968 [DEBUG] [Thread-193706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:23:35.969 [DEBUG] [Thread-193706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:23:35.969 [DEBUG] [Thread-193706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:23:35.969 [DEBUG] [Thread-193706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:23:35.987 [INFO] [Thread-193706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:23:35.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:23:35.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:23:36.598 [DEBUG] [Thread-193708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:23:36.823 [DEBUG] [Thread-193706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:23:36.824 [DEBUG] [Thread-193706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:23:36.871 [DEBUG] [Thread-193706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:23:36.871 [DEBUG] [Thread-193706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:23:36.881 [DEBUG] [Thread-193706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:23:36.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:23:36.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:23:36.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:23:36.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:23:36.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:23:36.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:23:36.918 [DEBUG] [Thread-193706] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:23:45.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:23:45.240 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:23:50.475 [DEBUG] [Thread-193709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:23:51.662 [DEBUG] [Thread-193710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:24:06.702 [DEBUG] [Thread-193711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:24:06.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:24:06.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:24:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:24:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 24, 1), 4.41689, 74.5042, 0.0, 10.0058, 13.3697, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:24:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:24:01
2026-04-12T18:24:08.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:24:08.771 [DEBUG] [Thread-193712] [transport.py] [_log()] starting thread (client mode): 0xae50be50
2026-04-12T18:24:08.771 [DEBUG] [Thread-193712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:24:08.791 [DEBUG] [Thread-193712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:24:08.791 [INFO] [Thread-193712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] client lang: <none>
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] server lang: <none>
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] kex follows: False
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:24:08.794 [DEBUG] [Thread-193712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:24:08.795 [DEBUG] [Thread-193712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:24:08.795 [DEBUG] [Thread-193712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:24:08.795 [DEBUG] [Thread-193712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:24:08.795 [DEBUG] [Thread-193712] [transport.py] [_log()] Compression: none
2026-04-12T18:24:08.795 [DEBUG] [Thread-193712] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:24:08.811 [DEBUG] [Thread-193712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:24:08.812 [DEBUG] [Thread-193712] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:24:08.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:24:08.813 [DEBUG] [Thread-193712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:24:08.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:24:08.853 [DEBUG] [Thread-193712] [transport.py] [_log()] userauth is OK
2026-04-12T18:24:08.853 [DEBUG] [Thread-193712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:24:08.853 [DEBUG] [Thread-193712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:24:08.853 [DEBUG] [Thread-193712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:24:08.854 [DEBUG] [Thread-193712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:24:08.884 [INFO] [Thread-193712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:24:08.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:24:09.489 [DEBUG] [Thread-193712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:24:09.489 [DEBUG] [Thread-193712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:24:09.489 [DEBUG] [Thread-193712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:24:09.530 [DEBUG] [Thread-193712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:24:09.530 [DEBUG] [Thread-193712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:24:09.534 [DEBUG] [Thread-193712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:24:09.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:24:09.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:24:09.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:24:09.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:24:09.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:24:09.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:24:09.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:24:09.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:24:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:24:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.683096 -999.00  +13.40   8.83     78   +9.80 1 2 1 1 1   851    0 2.32 -59.92 ----- 8.8 8.8 260.2 12.0 15.1 -22.7 15.1 -21.5 14.7 -19.6 15.0 -21.8
2026-04-12T18:24:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:24:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:24:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.683096
2026-04-12T18:24:09.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:24:09.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:24:09.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:24:09.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:24:09.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:24:09.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:24:01', tmtdew=4.41689, humidity=74.5042, cloud=0.0, wind=10.0058, temperature=13.3697, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:23:39.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:24:09.560 [DEBUG] [Thread-193712] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:24:09.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:24:09.653 [DEBUG] [Thread-193715] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-12T18:24:09.654 [DEBUG] [Thread-193715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:24:09.668 [DEBUG] [Thread-193715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:24:09.668 [INFO] [Thread-193715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:24:09.675 [DEBUG] [Thread-193715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:24:09.676 [DEBUG] [Thread-193715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] client lang: <none>
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] server lang: <none>
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] kex follows: False
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] Compression: none
2026-04-12T18:24:09.677 [DEBUG] [Thread-193715] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:24:09.736 [DEBUG] [Thread-193715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:24:09.736 [DEBUG] [Thread-193715] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:24:09.737 [DEBUG] [Thread-193715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:24:09.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:24:09.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:24:09.792 [DEBUG] [Thread-193715] [transport.py] [_log()] userauth is OK
2026-04-12T18:24:09.792 [DEBUG] [Thread-193715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:24:09.792 [DEBUG] [Thread-193715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:24:09.792 [DEBUG] [Thread-193715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:24:09.793 [DEBUG] [Thread-193715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:24:09.811 [INFO] [Thread-193715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:24:09.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:24:09.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:24:10.696 [DEBUG] [Thread-193715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:24:10.696 [DEBUG] [Thread-193715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:24:10.744 [DEBUG] [Thread-193715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:24:10.744 [DEBUG] [Thread-193715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:24:10.753 [DEBUG] [Thread-193715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:24:10.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:24:10.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:24:10.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:24:10.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:24:10.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:24:10.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:24:10.790 [DEBUG] [Thread-193715] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:24:21.740 [DEBUG] [Thread-193717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:24:36.790 [DEBUG] [Thread-193718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:24:40.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:24:40.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:24:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:24:42.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 24, 1), 4.41689, 74.5042, 0.0, 10.0058, 13.3697, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:24:42.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:24:01
2026-04-12T18:24:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:24:42.658 [DEBUG] [Thread-193719] [transport.py] [_log()] starting thread (client mode): 0xb0f42080
2026-04-12T18:24:42.658 [DEBUG] [Thread-193719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:24:42.679 [DEBUG] [Thread-193719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:24:42.679 [INFO] [Thread-193719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] client lang: <none>
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] server lang: <none>
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] kex follows: False
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] Compression: none
2026-04-12T18:24:42.683 [DEBUG] [Thread-193719] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:24:42.698 [DEBUG] [Thread-193719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:24:42.698 [DEBUG] [Thread-193719] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:24:42.699 [DEBUG] [Thread-193719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:24:42.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:24:42.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:24:42.699 [DEBUG] [Thread-193719] [transport.py] [_log()] userauth is OK
2026-04-12T18:24:42.699 [DEBUG] [Thread-193719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:24:42.699 [DEBUG] [Thread-193719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:24:42.699 [DEBUG] [Thread-193719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:24:42.699 [DEBUG] [Thread-193719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:24:42.716 [INFO] [Thread-193719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:24:42.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:24:43.353 [DEBUG] [Thread-193719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:24:43.353 [DEBUG] [Thread-193719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:24:43.354 [DEBUG] [Thread-193719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:24:43.394 [DEBUG] [Thread-193719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:24:43.394 [DEBUG] [Thread-193719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:24:43.397 [DEBUG] [Thread-193719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:24:43.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:24:43.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:24:43.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:24:43.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:24:43.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:24:43.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:24:43.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:24:43.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:24:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:24:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.683443 -999.00  +13.40   9.16     78   +9.80 1 2 1 1 1   848    0 2.38 -56.81 ----- 9.2 9.2 263.2 12.7 15.1 -22.8 15.0 -21.3 14.7 -19.8 14.9 -21.8
2026-04-12T18:24:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:24:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:24:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.683443
2026-04-12T18:24:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:24:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:24:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:24:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:24:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:24:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:24:01', tmtdew=4.41689, humidity=74.5042, cloud=0.0, wind=10.0058, temperature=13.3697, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:24:09.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:24:43.423 [DEBUG] [Thread-193719] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:24:43.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:24:43.518 [DEBUG] [Thread-193722] [transport.py] [_log()] starting thread (client mode): 0xae5f1f90
2026-04-12T18:24:43.518 [DEBUG] [Thread-193722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:24:43.534 [DEBUG] [Thread-193722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:24:43.534 [INFO] [Thread-193722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] client lang: <none>
2026-04-12T18:24:43.545 [DEBUG] [Thread-193722] [transport.py] [_log()] server lang: <none>
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] kex follows: False
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] Compression: none
2026-04-12T18:24:43.546 [DEBUG] [Thread-193722] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:24:43.605 [DEBUG] [Thread-193722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:24:43.606 [DEBUG] [Thread-193722] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:24:43.606 [DEBUG] [Thread-193722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:24:43.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:24:43.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:24:43.668 [DEBUG] [Thread-193722] [transport.py] [_log()] userauth is OK
2026-04-12T18:24:43.669 [DEBUG] [Thread-193722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:24:43.669 [DEBUG] [Thread-193722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:24:43.669 [DEBUG] [Thread-193722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:24:43.669 [DEBUG] [Thread-193722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:24:43.685 [INFO] [Thread-193722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:24:43.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:24:43.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:24:44.514 [DEBUG] [Thread-193722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:24:44.514 [DEBUG] [Thread-193722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:24:44.563 [DEBUG] [Thread-193722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:24:44.563 [DEBUG] [Thread-193722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:24:44.572 [DEBUG] [Thread-193722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:24:44.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:24:44.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:24:44.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:24:44.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:24:44.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:24:44.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:24:44.609 [DEBUG] [Thread-193722] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:24:49.511 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:24:49.512 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:24:50.536 [DEBUG] [Thread-193724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:24:51.824 [DEBUG] [Thread-193725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:25:06.878 [DEBUG] [Thread-193726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:25:14.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:25:14.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:25:14.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:25:16.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 24, 36), 4.31631, 75.0746, 0.0, 13.3042, 13.5068, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:25:16.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:24:36
2026-04-12T18:25:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:25:16.622 [DEBUG] [Thread-193727] [transport.py] [_log()] starting thread (client mode): 0xae52e380
2026-04-12T18:25:16.622 [DEBUG] [Thread-193727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:25:16.641 [DEBUG] [Thread-193727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:25:16.641 [INFO] [Thread-193727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] client lang: <none>
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] server lang: <none>
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] kex follows: False
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:25:16.644 [DEBUG] [Thread-193727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:25:16.645 [DEBUG] [Thread-193727] [transport.py] [_log()] Compression: none
2026-04-12T18:25:16.645 [DEBUG] [Thread-193727] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:25:16.660 [DEBUG] [Thread-193727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:25:16.661 [DEBUG] [Thread-193727] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:25:16.661 [DEBUG] [Thread-193727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:25:16.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:25:16.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:25:16.663 [DEBUG] [Thread-193727] [transport.py] [_log()] userauth is OK
2026-04-12T18:25:16.664 [DEBUG] [Thread-193727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:25:16.664 [DEBUG] [Thread-193727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:25:16.664 [DEBUG] [Thread-193727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:25:16.664 [DEBUG] [Thread-193727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:25:16.682 [INFO] [Thread-193727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:25:16.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:25:17.286 [DEBUG] [Thread-193727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:25:17.286 [DEBUG] [Thread-193727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:25:17.286 [DEBUG] [Thread-193727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:25:17.327 [DEBUG] [Thread-193727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:25:17.327 [DEBUG] [Thread-193727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:25:17.330 [DEBUG] [Thread-193727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:25:17.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:25:17.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:25:17.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:25:17.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:25:17.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:25:17.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:25:17.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.683790 -999.00  +13.40   9.39     78   +9.80 1 2 1 1 1   844    0 2.35 -55.85 ----- 9.4 9.4 260.0 11.8 15.0 -22.9 15.0 -21.4 14.6 -20.0 14.9 -21.6
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.683790
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:25:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:24:36', tmtdew=4.31631, humidity=75.0746, cloud=0.0, wind=13.3042, temperature=13.5068, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:24:39.456', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:25:17.348 [DEBUG] [Thread-193727] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:25:17.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:25:17.428 [DEBUG] [Thread-193730] [transport.py] [_log()] starting thread (client mode): 0xb0f41a50
2026-04-12T18:25:17.428 [DEBUG] [Thread-193730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:25:17.442 [DEBUG] [Thread-193730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:25:17.442 [INFO] [Thread-193730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:17.449 [DEBUG] [Thread-193730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] client lang: <none>
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] server lang: <none>
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] kex follows: False
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] Compression: none
2026-04-12T18:25:17.450 [DEBUG] [Thread-193730] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:25:17.508 [DEBUG] [Thread-193730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:25:17.508 [DEBUG] [Thread-193730] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:25:17.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:25:17.509 [DEBUG] [Thread-193730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:25:17.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:25:17.564 [DEBUG] [Thread-193730] [transport.py] [_log()] userauth is OK
2026-04-12T18:25:17.564 [DEBUG] [Thread-193730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:25:17.565 [DEBUG] [Thread-193730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:25:17.565 [DEBUG] [Thread-193730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:25:17.565 [DEBUG] [Thread-193730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:25:17.590 [INFO] [Thread-193730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:25:17.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:25:17.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:25:18.409 [DEBUG] [Thread-193730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:25:18.409 [DEBUG] [Thread-193730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:25:18.457 [DEBUG] [Thread-193730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:25:18.457 [DEBUG] [Thread-193730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:25:18.466 [DEBUG] [Thread-193730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:25:18.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:25:18.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:25:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:25:18.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:25:18.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:25:18.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:25:18.504 [DEBUG] [Thread-193730] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:25:21.914 [DEBUG] [Thread-193732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:25:36.969 [DEBUG] [Thread-193733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:25:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:25:48.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:25:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:25:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 25, 12), 4.3658, 75.0042, 0.0, 12.352, 13.2866, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:25:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:25:12
2026-04-12T18:25:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:25:50.495 [DEBUG] [Thread-193734] [transport.py] [_log()] starting thread (client mode): 0xae5b7490
2026-04-12T18:25:50.495 [DEBUG] [Thread-193734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:25:50.515 [DEBUG] [Thread-193734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:25:50.515 [INFO] [Thread-193734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] client lang: <none>
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] server lang: <none>
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] kex follows: False
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] Compression: none
2026-04-12T18:25:50.518 [DEBUG] [Thread-193734] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:25:50.536 [DEBUG] [Thread-193734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:25:50.536 [DEBUG] [Thread-193734] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:25:50.537 [DEBUG] [Thread-193734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:25:50.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:25:50.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:25:50.539 [DEBUG] [Thread-193734] [transport.py] [_log()] userauth is OK
2026-04-12T18:25:50.539 [DEBUG] [Thread-193734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:25:50.540 [DEBUG] [Thread-193734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:25:50.540 [DEBUG] [Thread-193734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:25:50.540 [DEBUG] [Thread-193734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:25:50.571 [INFO] [Thread-193734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:25:50.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:25:50.597 [DEBUG] [Thread-193736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:25:51.214 [DEBUG] [Thread-193734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:25:51.215 [DEBUG] [Thread-193734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:25:51.215 [DEBUG] [Thread-193734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:25:51.256 [DEBUG] [Thread-193734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:25:51.256 [DEBUG] [Thread-193734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:25:51.260 [DEBUG] [Thread-193734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:25:51.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:25:51.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:25:51.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:25:51.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:25:51.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:25:51.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:25:51.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:25:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:25:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:25:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.684485 -999.00  +13.40   9.86     79   +9.90 1 2 1 1 1   834    0 2.27 -58.70 ----- 9.9 9.9 252.6 11.1 14.9 -22.5 14.9 -21.4 14.6 -19.4 14.8 -21.3
2026-04-12T18:25:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:25:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:25:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.684485
2026-04-12T18:25:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:25:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:25:51.288 [DEBUG] [Thread-193734] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:25:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:25:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:25:51.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:25:51.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:25:12', tmtdew=4.3658, humidity=75.0042, cloud=0.0, wind=12.352, temperature=13.2866, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:25:39.504', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:25:51.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:25:51.382 [DEBUG] [Thread-193738] [transport.py] [_log()] starting thread (client mode): 0xae5b44c0
2026-04-12T18:25:51.383 [DEBUG] [Thread-193738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:25:51.397 [DEBUG] [Thread-193738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:25:51.397 [INFO] [Thread-193738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:25:51.404 [DEBUG] [Thread-193738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] client lang: <none>
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] server lang: <none>
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] kex follows: False
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] Compression: none
2026-04-12T18:25:51.405 [DEBUG] [Thread-193738] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:25:51.464 [DEBUG] [Thread-193738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:25:51.464 [DEBUG] [Thread-193738] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:25:51.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:25:51.465 [DEBUG] [Thread-193738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:25:51.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:25:51.519 [DEBUG] [Thread-193738] [transport.py] [_log()] userauth is OK
2026-04-12T18:25:51.519 [DEBUG] [Thread-193738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:25:51.520 [DEBUG] [Thread-193738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:25:51.520 [DEBUG] [Thread-193738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:25:51.520 [DEBUG] [Thread-193738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:25:51.538 [INFO] [Thread-193738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:25:51.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:25:51.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:25:52.007 [DEBUG] [Thread-193740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:25:52.311 [DEBUG] [Thread-193738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:25:52.311 [DEBUG] [Thread-193738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:25:52.359 [DEBUG] [Thread-193738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:25:52.359 [DEBUG] [Thread-193738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:25:52.368 [DEBUG] [Thread-193738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:25:52.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:25:52.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:25:52.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:25:52.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:25:52.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:25:52.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:25:52.404 [DEBUG] [Thread-193738] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:25:54.135 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:25:54.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:07.067 [DEBUG] [Thread-193741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:22.105 [DEBUG] [Thread-193742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:26:22.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:26: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
2026-04-12T18:26:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 25, 47), 4.2912, 75.2072, 0.0, 15.6679, 13.54, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:26:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:25:47
2026-04-12T18:26:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:26:24.288 [DEBUG] [Thread-193743] [transport.py] [_log()] starting thread (client mode): 0xae50a1a0
2026-04-12T18:26:24.288 [DEBUG] [Thread-193743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:26:24.308 [DEBUG] [Thread-193743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:26:24.308 [INFO] [Thread-193743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:24.311 [DEBUG] [Thread-193743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] client lang: <none>
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] server lang: <none>
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] kex follows: False
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] Compression: none
2026-04-12T18:26:24.312 [DEBUG] [Thread-193743] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:26:24.327 [DEBUG] [Thread-193743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:26:24.328 [DEBUG] [Thread-193743] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:26:24.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:26:24.329 [DEBUG] [Thread-193743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:26:24.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:26:24.331 [DEBUG] [Thread-193743] [transport.py] [_log()] userauth is OK
2026-04-12T18:26:24.331 [DEBUG] [Thread-193743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:26:24.331 [DEBUG] [Thread-193743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:26:24.332 [DEBUG] [Thread-193743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:26:24.332 [DEBUG] [Thread-193743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:26:24.355 [INFO] [Thread-193743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:26:24.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:26:25.002 [DEBUG] [Thread-193743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:26:25.002 [DEBUG] [Thread-193743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:26:25.003 [DEBUG] [Thread-193743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:26:25.043 [DEBUG] [Thread-193743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:26:25.043 [DEBUG] [Thread-193743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:26:25.047 [DEBUG] [Thread-193743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:26:25.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:26:25.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:26:25.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:26:25.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:26:25.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:26:25.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:26:25.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:26:25.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:26:25.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:26:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.684832 -999.00  +13.30   5.76     79   +9.90 1 2 1 1 1   829    0 2.19 -59.76 ----- 5.8 5.8 250.8 10.8 14.9 -22.5 14.9 -21.3 14.6 -19.5 14.8 -21.5
2026-04-12T18:26:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:26:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:26:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.684832
2026-04-12T18:26:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:26:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:26:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:26:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:26:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:26:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:25:47', tmtdew=4.2912, humidity=75.2072, cloud=0.0, wind=15.6679, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:26:09.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:26:25.073 [DEBUG] [Thread-193743] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:26:25.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:26:25.166 [DEBUG] [Thread-193746] [transport.py] [_log()] starting thread (client mode): 0xb0f42b90
2026-04-12T18:26:25.166 [DEBUG] [Thread-193746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:26:25.181 [DEBUG] [Thread-193746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:26:25.181 [INFO] [Thread-193746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:26:25.189 [DEBUG] [Thread-193746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:26:25.189 [DEBUG] [Thread-193746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:26:25.189 [DEBUG] [Thread-193746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:26:25.189 [DEBUG] [Thread-193746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:25.189 [DEBUG] [Thread-193746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:25.189 [DEBUG] [Thread-193746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:25.189 [DEBUG] [Thread-193746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] client lang: <none>
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] server lang: <none>
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] kex follows: False
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] Compression: none
2026-04-12T18:26:25.190 [DEBUG] [Thread-193746] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:26:25.248 [DEBUG] [Thread-193746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:26:25.248 [DEBUG] [Thread-193746] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:26:25.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:26:25.249 [DEBUG] [Thread-193746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:26:25.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:26:25.304 [DEBUG] [Thread-193746] [transport.py] [_log()] userauth is OK
2026-04-12T18:26:25.304 [DEBUG] [Thread-193746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:26:25.305 [DEBUG] [Thread-193746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:26:25.305 [DEBUG] [Thread-193746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:26:25.305 [DEBUG] [Thread-193746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:26:25.324 [INFO] [Thread-193746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:26:25.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:26:25.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:26:26.146 [DEBUG] [Thread-193746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:26:26.146 [DEBUG] [Thread-193746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:26:26.194 [DEBUG] [Thread-193746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:26:26.194 [DEBUG] [Thread-193746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:26:26.204 [DEBUG] [Thread-193746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:26:26.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:26:26.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:26:26.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:26:26.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:26:26.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:26:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:26:26.242 [DEBUG] [Thread-193746] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:26:37.148 [DEBUG] [Thread-193748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:50.672 [DEBUG] [Thread-193749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:52.197 [DEBUG] [Thread-193750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:26:56.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:26:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:26:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 26, 23), 4.29834, 75.087, 0.0, 12.9517, 13.2534, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:26:57.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:26:23
2026-04-12T18:26:57.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:26:58.136 [DEBUG] [Thread-193751] [transport.py] [_log()] starting thread (client mode): 0xb0f43ca0
2026-04-12T18:26:58.136 [DEBUG] [Thread-193751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:26:58.156 [DEBUG] [Thread-193751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:26:58.156 [INFO] [Thread-193751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] client lang: <none>
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] server lang: <none>
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] kex follows: False
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:26:58.159 [DEBUG] [Thread-193751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:26:58.160 [DEBUG] [Thread-193751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:26:58.160 [DEBUG] [Thread-193751] [transport.py] [_log()] Compression: none
2026-04-12T18:26:58.160 [DEBUG] [Thread-193751] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:26:58.175 [DEBUG] [Thread-193751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:26:58.175 [DEBUG] [Thread-193751] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:26:58.176 [DEBUG] [Thread-193751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:26:58.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:26:58.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:26:58.178 [DEBUG] [Thread-193751] [transport.py] [_log()] userauth is OK
2026-04-12T18:26:58.178 [DEBUG] [Thread-193751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:26:58.178 [DEBUG] [Thread-193751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:26:58.178 [DEBUG] [Thread-193751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:26:58.178 [DEBUG] [Thread-193751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:26:58.196 [INFO] [Thread-193751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:26:58.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:26:58.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:58.435 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:26:58.794 [DEBUG] [Thread-193751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:26:58.794 [DEBUG] [Thread-193751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:26:58.794 [DEBUG] [Thread-193751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:26:58.835 [DEBUG] [Thread-193751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:26:58.835 [DEBUG] [Thread-193751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:26:58.839 [DEBUG] [Thread-193751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:26:58.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:26:58.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:26:58.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:26:58.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:26:58.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:26:58.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:26:58.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:26:58.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:26:58.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:26:58.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.685179 -999.00  +13.30   6.13     79   +9.90 1 2 1 1 1   822    0 2.02 -64.36 ----- 6.1 6.1 254.2 11.6 14.9 -22.5 14.9 -21.2 14.5 -19.4 14.8 -21.4
2026-04-12T18:26:58.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:26:58.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:26:58.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.685179
2026-04-12T18:26:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:26:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:26:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:26:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:26:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:26:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:26:23', tmtdew=4.29834, humidity=75.087, cloud=0.0, wind=12.9517, temperature=13.2534, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:26:39.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:26:58.868 [DEBUG] [Thread-193751] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:26:58.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:26:58.961 [DEBUG] [Thread-193754] [transport.py] [_log()] starting thread (client mode): 0xb0fcfe80
2026-04-12T18:26:58.961 [DEBUG] [Thread-193754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:26:58.975 [DEBUG] [Thread-193754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:26:58.975 [INFO] [Thread-193754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] client lang: <none>
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] server lang: <none>
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] kex follows: False
2026-04-12T18:26:58.983 [DEBUG] [Thread-193754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:26:58.984 [DEBUG] [Thread-193754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:26:58.984 [DEBUG] [Thread-193754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:26:58.984 [DEBUG] [Thread-193754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:26:58.984 [DEBUG] [Thread-193754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:26:58.984 [DEBUG] [Thread-193754] [transport.py] [_log()] Compression: none
2026-04-12T18:26:58.984 [DEBUG] [Thread-193754] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:26:59.039 [DEBUG] [Thread-193754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:26:59.040 [DEBUG] [Thread-193754] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:26:59.040 [DEBUG] [Thread-193754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:26:59.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:26:59.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:26:59.095 [DEBUG] [Thread-193754] [transport.py] [_log()] userauth is OK
2026-04-12T18:26:59.095 [DEBUG] [Thread-193754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:26:59.095 [DEBUG] [Thread-193754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:26:59.096 [DEBUG] [Thread-193754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:26:59.096 [DEBUG] [Thread-193754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:26:59.113 [INFO] [Thread-193754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:26:59.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:26:59.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:26:59.908 [DEBUG] [Thread-193754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:26:59.908 [DEBUG] [Thread-193754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:26:59.956 [DEBUG] [Thread-193754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:26:59.956 [DEBUG] [Thread-193754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:26:59.965 [DEBUG] [Thread-193754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:26:59.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:26:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:26:59.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:26:59.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:26:59.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:26:59.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:27:00.003 [DEBUG] [Thread-193754] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:27:07.236 [DEBUG] [Thread-193756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:27:22.293 [DEBUG] [Thread-193757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:27:30.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:27:30.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:27: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
2026-04-12T18:27:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 26, 58), 4.25537, 75.5542, 0.0, 15.916, 13.2202, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:27:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:26:58
2026-04-12T18:27:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:27:31.869 [DEBUG] [Thread-193758] [transport.py] [_log()] starting thread (client mode): 0xae50a110
2026-04-12T18:27:31.869 [DEBUG] [Thread-193758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:27:31.885 [DEBUG] [Thread-193758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:27:31.885 [INFO] [Thread-193758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] client lang: <none>
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] server lang: <none>
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] kex follows: False
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:27:31.889 [DEBUG] [Thread-193758] [transport.py] [_log()] Compression: none
2026-04-12T18:27:31.890 [DEBUG] [Thread-193758] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:27:31.908 [DEBUG] [Thread-193758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:27:31.908 [DEBUG] [Thread-193758] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:27:31.909 [DEBUG] [Thread-193758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:27:31.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:27:31.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:27:31.911 [DEBUG] [Thread-193758] [transport.py] [_log()] userauth is OK
2026-04-12T18:27:31.911 [DEBUG] [Thread-193758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:27:31.911 [DEBUG] [Thread-193758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:27:31.911 [DEBUG] [Thread-193758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:27:31.911 [DEBUG] [Thread-193758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:27:31.935 [INFO] [Thread-193758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:27:31.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:27:32.609 [DEBUG] [Thread-193758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:27:32.609 [DEBUG] [Thread-193758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:27:32.610 [DEBUG] [Thread-193758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:27:32.650 [DEBUG] [Thread-193758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:27:32.650 [DEBUG] [Thread-193758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:27:32.654 [DEBUG] [Thread-193758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:27:32.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:27:32.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:27:32.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:27:32.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:27:32.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:27:32.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:27:32.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:27:32.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:27:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:27:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.685526 -999.00  +13.30   9.58     80   +9.90 1 2 1 2 1   816    0 2.11 -59.10 ----- 9.6 9.6 262.0 10.7 14.9 -22.5 14.8 -21.3 14.5 -19.4 14.7 -21.4
2026-04-12T18:27:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:27:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:27:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.685526
2026-04-12T18:27:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:27:32.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:27:32.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:27:32.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:27:32.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:27:32.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:26:58', tmtdew=4.25537, humidity=75.5542, cloud=0.0, wind=15.916, temperature=13.2202, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:27:09.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:27:32.681 [DEBUG] [Thread-193758] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:27:32.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:27:32.773 [DEBUG] [Thread-193761] [transport.py] [_log()] starting thread (client mode): 0xae508280
2026-04-12T18:27:32.773 [DEBUG] [Thread-193761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:27:32.788 [DEBUG] [Thread-193761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:27:32.788 [INFO] [Thread-193761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:27:32.796 [DEBUG] [Thread-193761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] client lang: <none>
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] server lang: <none>
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] kex follows: False
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] Compression: none
2026-04-12T18:27:32.797 [DEBUG] [Thread-193761] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:27:32.856 [DEBUG] [Thread-193761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:27:32.857 [DEBUG] [Thread-193761] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:27:32.857 [DEBUG] [Thread-193761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:27:32.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:27:32.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:27:32.911 [DEBUG] [Thread-193761] [transport.py] [_log()] userauth is OK
2026-04-12T18:27:32.912 [DEBUG] [Thread-193761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:27:32.912 [DEBUG] [Thread-193761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:27:32.912 [DEBUG] [Thread-193761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:27:32.912 [DEBUG] [Thread-193761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:27:32.931 [INFO] [Thread-193761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:27:32.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:27:32.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:27:33.729 [DEBUG] [Thread-193761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:27:33.730 [DEBUG] [Thread-193761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:27:33.779 [DEBUG] [Thread-193761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:27:33.779 [DEBUG] [Thread-193761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:27:33.790 [DEBUG] [Thread-193761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:27:33.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:27:33.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:27:33.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:27:33.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:27:33.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:27:33.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:27:33.825 [DEBUG] [Thread-193761] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:27:37.330 [DEBUG] [Thread-193763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:27:50.765 [DEBUG] [Thread-193764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:27:52.393 [DEBUG] [Thread-193765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:28:03.098 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:28:03.099 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:28:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:28:03.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:28:03.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:28:05.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 27, 34), 4.29872, 75.1746, 0.0, 14.539, 13.5736, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:28:05.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:27:34
2026-04-12T18:28:05.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:28:05.658 [DEBUG] [Thread-193766] [transport.py] [_log()] starting thread (client mode): 0xae52f0d0
2026-04-12T18:28:05.658 [DEBUG] [Thread-193766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:28:05.678 [DEBUG] [Thread-193766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:28:05.678 [INFO] [Thread-193766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:28:05.681 [DEBUG] [Thread-193766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] client lang: <none>
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] server lang: <none>
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] kex follows: False
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] Compression: none
2026-04-12T18:28:05.682 [DEBUG] [Thread-193766] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:28:05.700 [DEBUG] [Thread-193766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:28:05.700 [DEBUG] [Thread-193766] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:28:05.701 [DEBUG] [Thread-193766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:28:05.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:28:05.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:28:05.703 [DEBUG] [Thread-193766] [transport.py] [_log()] userauth is OK
2026-04-12T18:28:05.703 [DEBUG] [Thread-193766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:28:05.703 [DEBUG] [Thread-193766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:28:05.703 [DEBUG] [Thread-193766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:28:05.703 [DEBUG] [Thread-193766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:28:05.738 [INFO] [Thread-193766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:28:05.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:28:06.343 [DEBUG] [Thread-193766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:28:06.344 [DEBUG] [Thread-193766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:28:06.344 [DEBUG] [Thread-193766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:28:06.385 [DEBUG] [Thread-193766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:28:06.385 [DEBUG] [Thread-193766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:28:06.389 [DEBUG] [Thread-193766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:28:06.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:28:06.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:28:06.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:28:06.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:28:06.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:28:06.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:28:06.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:28:06.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:28:06.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:28:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.685873 -999.00  +13.20   6.99     80   +9.90 1 2 1 2 1   809    0 2.17 -58.51 ----- 7.0 7.0 259.6 9.9 14.8 -22.5 14.8 -21.2 14.4 -19.4 14.7 -21.5
2026-04-12T18:28:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:28:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:28:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.685873
2026-04-12T18:28:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:28:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:28:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:28:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:28:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:28:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:27:34', tmtdew=4.29872, humidity=75.1746, cloud=0.0, wind=14.539, temperature=13.5736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:27:39.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:28:06.418 [DEBUG] [Thread-193766] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:28:06.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:28:06.521 [DEBUG] [Thread-193769] [transport.py] [_log()] starting thread (client mode): 0xae5b74f0
2026-04-12T18:28:06.521 [DEBUG] [Thread-193769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:28:06.535 [DEBUG] [Thread-193769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:28:06.535 [INFO] [Thread-193769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:28:06.543 [DEBUG] [Thread-193769] [transport.py] [_log()] client lang: <none>
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] server lang: <none>
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] kex follows: False
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] Compression: none
2026-04-12T18:28:06.544 [DEBUG] [Thread-193769] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:28:06.600 [DEBUG] [Thread-193769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:28:06.601 [DEBUG] [Thread-193769] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:28:06.601 [DEBUG] [Thread-193769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:28:06.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:28:06.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:28:06.660 [DEBUG] [Thread-193769] [transport.py] [_log()] userauth is OK
2026-04-12T18:28:06.660 [DEBUG] [Thread-193769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:28:06.660 [DEBUG] [Thread-193769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:28:06.660 [DEBUG] [Thread-193769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:28:06.660 [DEBUG] [Thread-193769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:28:06.679 [INFO] [Thread-193769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:28:06.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:28:06.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:28:07.430 [DEBUG] [Thread-193771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:28:07.495 [DEBUG] [Thread-193769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:28:07.495 [DEBUG] [Thread-193769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:28:07.543 [DEBUG] [Thread-193769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:28:07.543 [DEBUG] [Thread-193769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:28:07.552 [DEBUG] [Thread-193769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:28:07.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:28:07.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:28:07.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:28:07.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:28:07.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:28:07.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:28:07.590 [DEBUG] [Thread-193769] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:28:22.486 [DEBUG] [Thread-193772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:28:37.528 [DEBUG] [Thread-193773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:28:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:28:37.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:28:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:28:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 28, 10), 4.22857, 75.6873, 0.0, 12.4578, 13.2041, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:28:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:28:10
2026-04-12T18:28:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:28:39.494 [DEBUG] [Thread-193774] [transport.py] [_log()] starting thread (client mode): 0xae5b46d0
2026-04-12T18:28:39.495 [DEBUG] [Thread-193774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:28:39.515 [DEBUG] [Thread-193774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:28:39.515 [INFO] [Thread-193774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:39.519 [DEBUG] [Thread-193774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] client lang: <none>
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] server lang: <none>
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] kex follows: False
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] Compression: none
2026-04-12T18:28:39.520 [DEBUG] [Thread-193774] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:28:39.539 [DEBUG] [Thread-193774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:28:39.540 [DEBUG] [Thread-193774] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:28:39.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:28:39.541 [DEBUG] [Thread-193774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:28:39.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:28:39.543 [DEBUG] [Thread-193774] [transport.py] [_log()] userauth is OK
2026-04-12T18:28:39.543 [DEBUG] [Thread-193774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:28:39.544 [DEBUG] [Thread-193774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:28:39.544 [DEBUG] [Thread-193774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:28:39.544 [DEBUG] [Thread-193774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:28:39.567 [INFO] [Thread-193774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:28:39.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:28:40.204 [DEBUG] [Thread-193774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:28:40.205 [DEBUG] [Thread-193774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:28:40.205 [DEBUG] [Thread-193774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:28:40.247 [DEBUG] [Thread-193774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:28:40.247 [DEBUG] [Thread-193774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:28:40.251 [DEBUG] [Thread-193774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:28:40.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:28:40.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:28:40.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:28:40.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:28:40.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:28:40.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:28:40.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:28:40.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:28:40.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:28:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.686221 -999.00  +13.20   8.30     79   +9.80 1 2 1 1 1   801    0 2.17 -58.92 ----- 8.3 8.3 263.6 13.9 14.8 -22.6 14.8 -21.2 14.4 -19.3 14.7 -21.4
2026-04-12T18:28:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:28:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:28:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.686221
2026-04-12T18:28:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:28:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:28:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:28:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:28:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:28:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:28:10', tmtdew=4.22857, humidity=75.6873, cloud=0.0, wind=12.4578, temperature=13.2041, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:28:09.494', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:28:40.279 [DEBUG] [Thread-193774] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:28:40.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:28:40.383 [DEBUG] [Thread-193777] [transport.py] [_log()] starting thread (client mode): 0xae519ab0
2026-04-12T18:28:40.383 [DEBUG] [Thread-193777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:28:40.398 [DEBUG] [Thread-193777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:28:40.398 [INFO] [Thread-193777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] client lang: <none>
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] server lang: <none>
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] kex follows: False
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] Compression: none
2026-04-12T18:28:40.406 [DEBUG] [Thread-193777] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:28:40.464 [DEBUG] [Thread-193777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:28:40.465 [DEBUG] [Thread-193777] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:28:40.465 [DEBUG] [Thread-193777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:28:40.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:28:40.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:28:40.520 [DEBUG] [Thread-193777] [transport.py] [_log()] userauth is OK
2026-04-12T18:28:40.520 [DEBUG] [Thread-193777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:28:40.521 [DEBUG] [Thread-193777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:28:40.521 [DEBUG] [Thread-193777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:28:40.521 [DEBUG] [Thread-193777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:28:40.540 [INFO] [Thread-193777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:28:40.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:28:40.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:28:41.355 [DEBUG] [Thread-193777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:28:41.355 [DEBUG] [Thread-193777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:28:41.402 [DEBUG] [Thread-193777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:28:41.403 [DEBUG] [Thread-193777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:28:41.411 [DEBUG] [Thread-193777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:28:41.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:28:41.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:28:41.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:28:41.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:28:41.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:28:41.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:28:41.446 [DEBUG] [Thread-193777] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:28:50.823 [DEBUG] [Thread-193779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:28:52.565 [DEBUG] [Thread-193780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:29:07.520 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:29:07.521 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:29:07.619 [DEBUG] [Thread-193781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:29:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:29:11.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:29:11.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:29:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 28, 45), 4.24516, 75.4409, 0.0, 13.2689, 13.5414, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:29:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:28:45
2026-04-12T18:29:13.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:29:13.348 [DEBUG] [Thread-193782] [transport.py] [_log()] starting thread (client mode): 0xae534c70
2026-04-12T18:29:13.348 [DEBUG] [Thread-193782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:29:13.368 [DEBUG] [Thread-193782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:29:13.368 [INFO] [Thread-193782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] client lang: <none>
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] server lang: <none>
2026-04-12T18:29:13.371 [DEBUG] [Thread-193782] [transport.py] [_log()] kex follows: False
2026-04-12T18:29:13.372 [DEBUG] [Thread-193782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:29:13.372 [DEBUG] [Thread-193782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:29:13.372 [DEBUG] [Thread-193782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:29:13.372 [DEBUG] [Thread-193782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:29:13.372 [DEBUG] [Thread-193782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:29:13.372 [DEBUG] [Thread-193782] [transport.py] [_log()] Compression: none
2026-04-12T18:29:13.372 [DEBUG] [Thread-193782] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:29:13.380 [DEBUG] [Thread-193782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:29:13.380 [DEBUG] [Thread-193782] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:29:13.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:29:13.381 [DEBUG] [Thread-193782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:29:13.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:29:13.383 [DEBUG] [Thread-193782] [transport.py] [_log()] userauth is OK
2026-04-12T18:29:13.383 [DEBUG] [Thread-193782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:29:13.383 [DEBUG] [Thread-193782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:29:13.384 [DEBUG] [Thread-193782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:29:13.384 [DEBUG] [Thread-193782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:29:13.408 [INFO] [Thread-193782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:29:13.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:29:14.039 [DEBUG] [Thread-193782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:29:14.039 [DEBUG] [Thread-193782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:29:14.039 [DEBUG] [Thread-193782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:29:14.080 [DEBUG] [Thread-193782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:29:14.080 [DEBUG] [Thread-193782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:29:14.084 [DEBUG] [Thread-193782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:29:14.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:29:14.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:29:14.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:29:14.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:29:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:29:14.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:29:14.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:29:14.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:29:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:29:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.686568 -999.00  +13.20   8.91     80   +9.90 1 2 1 2 1   792    0 2.08 -59.99 ----- 8.9 8.9 248.0 14.0 14.8 -22.4 14.8 -21.2 14.4 -19.3 14.7 -21.4
2026-04-12T18:29:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:29:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:29:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.686568
2026-04-12T18:29:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:29:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:29:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:29:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:29:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:29:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:28:45', tmtdew=4.24516, humidity=75.4409, cloud=0.0, wind=13.2689, temperature=13.5414, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:28:39.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:29:14.111 [DEBUG] [Thread-193782] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:29:14.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:29:14.204 [DEBUG] [Thread-193785] [transport.py] [_log()] starting thread (client mode): 0xae5a58d0
2026-04-12T18:29:14.204 [DEBUG] [Thread-193785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:29:14.218 [DEBUG] [Thread-193785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:29:14.219 [INFO] [Thread-193785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:29:14.226 [DEBUG] [Thread-193785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:29:14.227 [DEBUG] [Thread-193785] [transport.py] [_log()] client lang: <none>
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] server lang: <none>
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] kex follows: False
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] Compression: none
2026-04-12T18:29:14.228 [DEBUG] [Thread-193785] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:29:14.284 [DEBUG] [Thread-193785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:29:14.285 [DEBUG] [Thread-193785] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:29:14.286 [DEBUG] [Thread-193785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:29:14.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:29:14.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:29:14.344 [DEBUG] [Thread-193785] [transport.py] [_log()] userauth is OK
2026-04-12T18:29:14.345 [DEBUG] [Thread-193785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:29:14.345 [DEBUG] [Thread-193785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:29:14.345 [DEBUG] [Thread-193785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:29:14.345 [DEBUG] [Thread-193785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:29:14.364 [INFO] [Thread-193785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:29:14.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:29:14.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:29:15.185 [DEBUG] [Thread-193785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:29:15.185 [DEBUG] [Thread-193785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:29:15.234 [DEBUG] [Thread-193785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:29:15.234 [DEBUG] [Thread-193785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:29:15.246 [DEBUG] [Thread-193785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:29:15.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:29:15.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:29:15.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:29:15.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:29:15.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:29:15.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:29:15.284 [DEBUG] [Thread-193785] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:29:22.659 [DEBUG] [Thread-193787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:29:37.713 [DEBUG] [Thread-193788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:29:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:29:45.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:29:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:29:46.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 29, 20), 4.16171, 75.7703, 0.0, 12.4402, 13.1877, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:29:46.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:29:20
2026-04-12T18:29:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:29:47.096 [DEBUG] [Thread-193789] [transport.py] [_log()] starting thread (client mode): 0xae5a5e10
2026-04-12T18:29:47.096 [DEBUG] [Thread-193789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:29:47.116 [DEBUG] [Thread-193789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:29:47.116 [INFO] [Thread-193789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:47.118 [DEBUG] [Thread-193789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] client lang: <none>
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] server lang: <none>
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] kex follows: False
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] Compression: none
2026-04-12T18:29:47.119 [DEBUG] [Thread-193789] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:29:47.133 [DEBUG] [Thread-193789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:29:47.133 [DEBUG] [Thread-193789] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:29:47.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:29:47.134 [DEBUG] [Thread-193789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:29:47.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:29:47.136 [DEBUG] [Thread-193789] [transport.py] [_log()] userauth is OK
2026-04-12T18:29:47.136 [DEBUG] [Thread-193789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:29:47.137 [DEBUG] [Thread-193789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:29:47.137 [DEBUG] [Thread-193789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:29:47.137 [DEBUG] [Thread-193789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:29:47.173 [INFO] [Thread-193789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:29:47.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:29:47.823 [DEBUG] [Thread-193789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:29:47.823 [DEBUG] [Thread-193789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:29:47.824 [DEBUG] [Thread-193789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:29:47.864 [DEBUG] [Thread-193789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:29:47.865 [DEBUG] [Thread-193789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:29:47.867 [DEBUG] [Thread-193789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:29:47.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:29:47.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:29:47.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:29:47.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:29:47.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:29:47.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:29:47.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:29:47.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:29:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:29:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.686915 -999.00  +13.20   8.83     80   +9.90 1 2 1 2 1   783    0 2.17 -55.23 ----- 8.8 8.8 261.2 12.1 14.8 -22.6 14.7 -21.2 14.3 -19.4 14.6 -21.4
2026-04-12T18:29:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:29:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:29:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.686915
2026-04-12T18:29:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:29:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:29:47.889 [DEBUG] [Thread-193789] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:29:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:29:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:29:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:29:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:29:20', tmtdew=4.16171, humidity=75.7703, cloud=0.0, wind=12.4402, temperature=13.1877, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:29:09.456', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:29:47.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:29:47.989 [DEBUG] [Thread-193792] [transport.py] [_log()] starting thread (client mode): 0xae5f02b0
2026-04-12T18:29:47.989 [DEBUG] [Thread-193792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:29:48.008 [DEBUG] [Thread-193792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:29:48.009 [INFO] [Thread-193792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] client lang: <none>
2026-04-12T18:29:48.016 [DEBUG] [Thread-193792] [transport.py] [_log()] server lang: <none>
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] kex follows: False
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] Compression: none
2026-04-12T18:29:48.017 [DEBUG] [Thread-193792] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:29:48.085 [DEBUG] [Thread-193792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:29:48.085 [DEBUG] [Thread-193792] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:29:48.086 [DEBUG] [Thread-193792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:29:48.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:29:48.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:29:48.144 [DEBUG] [Thread-193792] [transport.py] [_log()] userauth is OK
2026-04-12T18:29:48.144 [DEBUG] [Thread-193792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:29:48.144 [DEBUG] [Thread-193792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:29:48.144 [DEBUG] [Thread-193792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:29:48.144 [DEBUG] [Thread-193792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:29:48.167 [INFO] [Thread-193792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:29:48.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:29:48.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:29:49.035 [DEBUG] [Thread-193792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:29:49.035 [DEBUG] [Thread-193792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:29:49.083 [DEBUG] [Thread-193792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:29:49.083 [DEBUG] [Thread-193792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:29:49.092 [DEBUG] [Thread-193792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:29:49.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:29:49.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:29:49.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:29:49.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:29:49.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:29:49.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:29:49.126 [DEBUG] [Thread-193792] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:29:50.890 [DEBUG] [Thread-193794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:29:52.751 [DEBUG] [Thread-193795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:07.803 [DEBUG] [Thread-193796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:12.380 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:12.382 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:19.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:30:19.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:30:19.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:30:20.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 29, 56), 4.08516, 75.9029, 0.0, 11.9992, 13.1211, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:30:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:29:56
2026-04-12T18:30:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:30:20.954 [DEBUG] [Thread-193797] [transport.py] [_log()] starting thread (client mode): 0xae5b4940
2026-04-12T18:30:20.954 [DEBUG] [Thread-193797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:30:20.973 [DEBUG] [Thread-193797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:30:20.973 [INFO] [Thread-193797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:30:20.976 [DEBUG] [Thread-193797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] client lang: <none>
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] server lang: <none>
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] kex follows: False
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:30:20.977 [DEBUG] [Thread-193797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:30:20.978 [DEBUG] [Thread-193797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:30:20.978 [DEBUG] [Thread-193797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:30:20.978 [DEBUG] [Thread-193797] [transport.py] [_log()] Compression: none
2026-04-12T18:30:20.978 [DEBUG] [Thread-193797] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:30:20.996 [DEBUG] [Thread-193797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:30:20.997 [DEBUG] [Thread-193797] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:30:20.997 [DEBUG] [Thread-193797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:30:20.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:30:20.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:30:20.999 [DEBUG] [Thread-193797] [transport.py] [_log()] userauth is OK
2026-04-12T18:30:20.999 [DEBUG] [Thread-193797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:30:21.000 [DEBUG] [Thread-193797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:30:21.000 [DEBUG] [Thread-193797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:30:21.000 [DEBUG] [Thread-193797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:30:21.024 [INFO] [Thread-193797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:30:21.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:30:21.651 [DEBUG] [Thread-193797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:30:21.651 [DEBUG] [Thread-193797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:30:21.652 [DEBUG] [Thread-193797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:30:21.692 [DEBUG] [Thread-193797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:30:21.692 [DEBUG] [Thread-193797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:30:21.694 [DEBUG] [Thread-193797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:30:21.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:30:21.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:30:21.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:30:21.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:30:21.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:30:21.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:30:21.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:30:21.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:30:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:30:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.687262 -999.00  +13.20  11.02     80   +9.90 1 2 1 2 1   773    0 2.23 -54.55 ----- 11.0 11.0 257.0 14.2 14.7 -22.5 14.7 -21.1 14.3 -19.4 14.5 -21.3
2026-04-12T18:30:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:30:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:30:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.687262
2026-04-12T18:30:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:30:21.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:30:21.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:30:21.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:30:21.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:30:21.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:29:56', tmtdew=4.08516, humidity=75.9029, cloud=0.0, wind=11.9992, temperature=13.1211, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:29:39.437', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:30:21.723 [DEBUG] [Thread-193797] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:30:21.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:30:21.815 [DEBUG] [Thread-193800] [transport.py] [_log()] starting thread (client mode): 0xae5a5c30
2026-04-12T18:30:21.815 [DEBUG] [Thread-193800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:30:21.829 [DEBUG] [Thread-193800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:30:21.830 [INFO] [Thread-193800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] client lang: <none>
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] server lang: <none>
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] kex follows: False
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:30:21.837 [DEBUG] [Thread-193800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:30:21.838 [DEBUG] [Thread-193800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:30:21.838 [DEBUG] [Thread-193800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:30:21.838 [DEBUG] [Thread-193800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:30:21.838 [DEBUG] [Thread-193800] [transport.py] [_log()] Compression: none
2026-04-12T18:30:21.838 [DEBUG] [Thread-193800] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:30:21.895 [DEBUG] [Thread-193800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:30:21.896 [DEBUG] [Thread-193800] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:30:21.896 [DEBUG] [Thread-193800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:30:21.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:30:21.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:30:21.951 [DEBUG] [Thread-193800] [transport.py] [_log()] userauth is OK
2026-04-12T18:30:21.952 [DEBUG] [Thread-193800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:30:21.952 [DEBUG] [Thread-193800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:30:21.952 [DEBUG] [Thread-193800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:30:21.952 [DEBUG] [Thread-193800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:30:21.971 [INFO] [Thread-193800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:30:21.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:30:21.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:30:22.781 [DEBUG] [Thread-193800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:30:22.781 [DEBUG] [Thread-193800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:30:22.829 [DEBUG] [Thread-193800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:30:22.830 [DEBUG] [Thread-193800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:30:22.839 [DEBUG] [Thread-193800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:30:22.841 [DEBUG] [Thread-193802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:22.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:30:22.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:30:22.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:30:22.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:30:22.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:30:22.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:30:22.875 [DEBUG] [Thread-193800] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:30:37.889 [DEBUG] [Thread-193803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:50.962 [DEBUG] [Thread-193804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:52.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:30:52.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:30:52.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:30:52.923 [DEBUG] [Thread-193805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:30:54.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 30, 31), 4.06516, 76.0025, 0.0, 11.2936, 13.1046, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:30:54.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:30:31
2026-04-12T18:30:54.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:30:54.701 [DEBUG] [Thread-193806] [transport.py] [_log()] starting thread (client mode): 0xae534c70
2026-04-12T18:30:54.701 [DEBUG] [Thread-193806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:30:54.718 [DEBUG] [Thread-193806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:30:54.718 [INFO] [Thread-193806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] client lang: <none>
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] server lang: <none>
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] kex follows: False
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] Compression: none
2026-04-12T18:30:54.722 [DEBUG] [Thread-193806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:30:54.737 [DEBUG] [Thread-193806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:30:54.738 [DEBUG] [Thread-193806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:30:54.738 [DEBUG] [Thread-193806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:30:54.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:30:54.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:30:54.740 [DEBUG] [Thread-193806] [transport.py] [_log()] userauth is OK
2026-04-12T18:30:54.741 [DEBUG] [Thread-193806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:30:54.741 [DEBUG] [Thread-193806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:30:54.741 [DEBUG] [Thread-193806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:30:54.741 [DEBUG] [Thread-193806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:30:54.760 [INFO] [Thread-193806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:30:54.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:30:55.427 [DEBUG] [Thread-193806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:30:55.428 [DEBUG] [Thread-193806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:30:55.428 [DEBUG] [Thread-193806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:30:55.469 [DEBUG] [Thread-193806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:30:55.469 [DEBUG] [Thread-193806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:30:55.473 [DEBUG] [Thread-193806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:30:55.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:30:55.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:30:55.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:30:55.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:30:55.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:30:55.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:30:55.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:30:55.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:30:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:30:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.687957 -999.00  +13.20   7.10     80   +9.90 1 2 1 2 1   751    0 2.26 -51.11 ----- 7.1 7.1 258.8 10.4 14.7 -22.4 14.6 -21.1 14.2 -19.3 14.5 -21.3
2026-04-12T18:30:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:30:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:30:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.687957
2026-04-12T18:30:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:30:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:30:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:30:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:30:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:30:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:30:31', tmtdew=4.06516, humidity=76.0025, cloud=0.0, wind=11.2936, temperature=13.1046, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:30:39.485', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:30:55.499 [DEBUG] [Thread-193806] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:30:55.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:30:55.593 [DEBUG] [Thread-193809] [transport.py] [_log()] starting thread (client mode): 0xae50b6a0
2026-04-12T18:30:55.593 [DEBUG] [Thread-193809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:30:55.609 [DEBUG] [Thread-193809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:30:55.609 [INFO] [Thread-193809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:30:55.617 [DEBUG] [Thread-193809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:30:55.617 [DEBUG] [Thread-193809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:30:55.617 [DEBUG] [Thread-193809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:30:55.617 [DEBUG] [Thread-193809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:55.617 [DEBUG] [Thread-193809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:30:55.617 [DEBUG] [Thread-193809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] client lang: <none>
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] server lang: <none>
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] kex follows: False
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:30:55.618 [DEBUG] [Thread-193809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:30:55.619 [DEBUG] [Thread-193809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:30:55.619 [DEBUG] [Thread-193809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:30:55.619 [DEBUG] [Thread-193809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:30:55.619 [DEBUG] [Thread-193809] [transport.py] [_log()] Compression: none
2026-04-12T18:30:55.619 [DEBUG] [Thread-193809] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:30:55.677 [DEBUG] [Thread-193809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:30:55.677 [DEBUG] [Thread-193809] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:30:55.678 [DEBUG] [Thread-193809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:30:55.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:30:55.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:30:55.736 [DEBUG] [Thread-193809] [transport.py] [_log()] userauth is OK
2026-04-12T18:30:55.737 [DEBUG] [Thread-193809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:30:55.737 [DEBUG] [Thread-193809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:30:55.737 [DEBUG] [Thread-193809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:30:55.737 [DEBUG] [Thread-193809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:30:55.757 [INFO] [Thread-193809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:30:55.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:30:55.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:30:56.608 [DEBUG] [Thread-193809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:30:56.609 [DEBUG] [Thread-193809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:30:56.657 [DEBUG] [Thread-193809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:30:56.658 [DEBUG] [Thread-193809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:30:56.667 [DEBUG] [Thread-193809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:30:56.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:30:56.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:30:56.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:30:56.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:30:56.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:30:56.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:30:56.705 [DEBUG] [Thread-193809] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:31:07.956 [DEBUG] [Thread-193811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:31:16.766 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:31:16.769 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:31:23.006 [DEBUG] [Thread-193812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:31:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:31:26.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:31:26.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:31:28.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 31, 7), 4.03013, 76.1848, 0.0, 11.3994, 13.1212, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:31:28.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:31:07
2026-04-12T18:31:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:31:28.547 [DEBUG] [Thread-193813] [transport.py] [_log()] starting thread (client mode): 0xb0f6c7c0
2026-04-12T18:31:28.547 [DEBUG] [Thread-193813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:31:28.567 [DEBUG] [Thread-193813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:31:28.567 [INFO] [Thread-193813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:31:28.570 [DEBUG] [Thread-193813] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:31:28.570 [DEBUG] [Thread-193813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:31:28.570 [DEBUG] [Thread-193813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:31:28.570 [DEBUG] [Thread-193813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:31:28.570 [DEBUG] [Thread-193813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] client lang: <none>
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] server lang: <none>
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] kex follows: False
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] Compression: none
2026-04-12T18:31:28.571 [DEBUG] [Thread-193813] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:31:28.588 [DEBUG] [Thread-193813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:31:28.589 [DEBUG] [Thread-193813] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:31:28.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:31:28.590 [DEBUG] [Thread-193813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:31:28.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:31:28.633 [DEBUG] [Thread-193813] [transport.py] [_log()] userauth is OK
2026-04-12T18:31:28.633 [DEBUG] [Thread-193813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:31:28.633 [DEBUG] [Thread-193813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:31:28.633 [DEBUG] [Thread-193813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:31:28.633 [DEBUG] [Thread-193813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:31:28.663 [INFO] [Thread-193813] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:31:28.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:31:29.309 [DEBUG] [Thread-193813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:31:29.309 [DEBUG] [Thread-193813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:31:29.310 [DEBUG] [Thread-193813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:31:29.350 [DEBUG] [Thread-193813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:31:29.350 [DEBUG] [Thread-193813] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:31:29.354 [DEBUG] [Thread-193813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:31:29.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:31:29.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:31:29.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:31:29.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:31:29.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:31:29.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:31:29.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:31:29.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:31:29.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:31:29.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.688304 -999.00  +13.20   7.02     80   +9.90 1 2 1 2 1   738    0 2.31 -47.73 ----- 7.0 7.0 254.8 12.3 14.6 -22.4 14.6 -21.1 14.3 -19.3 14.4 -21.2
2026-04-12T18:31:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:31:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:31:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.688304
2026-04-12T18:31:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:31:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:31:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:31:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:31:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:31:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:31:07', tmtdew=4.03013, humidity=76.1848, cloud=0.0, wind=11.3994, temperature=13.1212, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:31:09.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:31:29.381 [DEBUG] [Thread-193813] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:31:29.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:31:29.476 [DEBUG] [Thread-193816] [transport.py] [_log()] starting thread (client mode): 0xb0f431c0
2026-04-12T18:31:29.476 [DEBUG] [Thread-193816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:31:29.491 [DEBUG] [Thread-193816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:31:29.491 [INFO] [Thread-193816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:31:29.498 [DEBUG] [Thread-193816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] client lang: <none>
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] server lang: <none>
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] kex follows: False
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] Compression: none
2026-04-12T18:31:29.499 [DEBUG] [Thread-193816] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:31:29.556 [DEBUG] [Thread-193816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:31:29.557 [DEBUG] [Thread-193816] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:31:29.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:31:29.558 [DEBUG] [Thread-193816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:31:29.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:31:29.612 [DEBUG] [Thread-193816] [transport.py] [_log()] userauth is OK
2026-04-12T18:31:29.613 [DEBUG] [Thread-193816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:31:29.613 [DEBUG] [Thread-193816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:31:29.613 [DEBUG] [Thread-193816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:31:29.613 [DEBUG] [Thread-193816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:31:29.633 [INFO] [Thread-193816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:31:29.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:31:29.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:31:30.521 [DEBUG] [Thread-193816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:31:30.522 [DEBUG] [Thread-193816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:31:30.570 [DEBUG] [Thread-193816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:31:30.570 [DEBUG] [Thread-193816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:31:30.579 [DEBUG] [Thread-193816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:31:30.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:31:30.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:31:30.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:31:30.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:31:30.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:31:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:31:30.617 [DEBUG] [Thread-193816] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:31:38.041 [DEBUG] [Thread-193818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:31:51.019 [DEBUG] [Thread-193819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:31:53.091 [DEBUG] [Thread-193820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:32:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:32:00.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:32:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:32:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 31, 42), 4.05806, 76.3703, 0.0, 10.7993, 13.3768, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:32:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:31:42
2026-04-12T18:32:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:32:02.494 [DEBUG] [Thread-193821] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T18:32:02.494 [DEBUG] [Thread-193821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:32:02.506 [DEBUG] [Thread-193821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:32:02.506 [INFO] [Thread-193821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:32:02.509 [DEBUG] [Thread-193821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:32:02.509 [DEBUG] [Thread-193821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:32:02.509 [DEBUG] [Thread-193821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:32:02.509 [DEBUG] [Thread-193821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] client lang: <none>
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] server lang: <none>
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] kex follows: False
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] Compression: none
2026-04-12T18:32:02.510 [DEBUG] [Thread-193821] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:32:02.527 [DEBUG] [Thread-193821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:32:02.527 [DEBUG] [Thread-193821] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:32:02.528 [DEBUG] [Thread-193821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:32:02.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:32:02.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:32:02.530 [DEBUG] [Thread-193821] [transport.py] [_log()] userauth is OK
2026-04-12T18:32:02.530 [DEBUG] [Thread-193821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:32:02.530 [DEBUG] [Thread-193821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:32:02.530 [DEBUG] [Thread-193821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:32:02.530 [DEBUG] [Thread-193821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:32:02.555 [INFO] [Thread-193821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:32:02.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:32:03.139 [DEBUG] [Thread-193821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:32:03.148 [DEBUG] [Thread-193821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:32:03.149 [DEBUG] [Thread-193821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:32:03.180 [DEBUG] [Thread-193821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:32:03.180 [DEBUG] [Thread-193821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:32:03.184 [DEBUG] [Thread-193821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:32:03.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:32:03.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:32:03.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:32:03.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:32:03.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:32:03.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:32:03.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:32:03.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:32:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:32:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.688651 -999.00  +13.10   6.23     81  +10.00 1 2 1 2 1   725    0 2.18 -51.98 ----- 6.2 6.2 245.6 10.3 14.6 -22.4 14.6 -21.2 14.2 -19.3 14.5 -21.2
2026-04-12T18:32:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:32:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:32:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.688651
2026-04-12T18:32:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:32:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:31:42', tmtdew=4.05806, humidity=76.3703, cloud=0.0, wind=10.7993, temperature=13.3768, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:31:39.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:32:03.215 [DEBUG] [Thread-193821] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:32:03.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:32:03.308 [DEBUG] [Thread-193824] [transport.py] [_log()] starting thread (client mode): 0xae5a5810
2026-04-12T18:32:03.308 [DEBUG] [Thread-193824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:32:03.323 [DEBUG] [Thread-193824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:32:03.323 [INFO] [Thread-193824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:32:03.331 [DEBUG] [Thread-193824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:32:03.331 [DEBUG] [Thread-193824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] client lang: <none>
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] server lang: <none>
2026-04-12T18:32:03.332 [DEBUG] [Thread-193824] [transport.py] [_log()] kex follows: False
2026-04-12T18:32:03.333 [DEBUG] [Thread-193824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:32:03.333 [DEBUG] [Thread-193824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:32:03.333 [DEBUG] [Thread-193824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:32:03.333 [DEBUG] [Thread-193824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:32:03.333 [DEBUG] [Thread-193824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:32:03.333 [DEBUG] [Thread-193824] [transport.py] [_log()] Compression: none
2026-04-12T18:32:03.333 [DEBUG] [Thread-193824] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:32:03.390 [DEBUG] [Thread-193824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:32:03.391 [DEBUG] [Thread-193824] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:32:03.391 [DEBUG] [Thread-193824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:32:03.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:32:03.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:32:03.452 [DEBUG] [Thread-193824] [transport.py] [_log()] userauth is OK
2026-04-12T18:32:03.453 [DEBUG] [Thread-193824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:32:03.453 [DEBUG] [Thread-193824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:32:03.453 [DEBUG] [Thread-193824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:32:03.453 [DEBUG] [Thread-193824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:32:03.474 [INFO] [Thread-193824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:32:03.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:32:03.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:32:04.330 [DEBUG] [Thread-193824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:32:04.331 [DEBUG] [Thread-193824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:32:04.379 [DEBUG] [Thread-193824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:32:04.379 [DEBUG] [Thread-193824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:32:04.388 [DEBUG] [Thread-193824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:32:04.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:32:04.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:32:04.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:32:04.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:32:04.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:32:04.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:32:04.425 [DEBUG] [Thread-193824] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:32:08.126 [DEBUG] [Thread-193826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:32:21.223 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:32:21.225 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:32:23.173 [DEBUG] [Thread-193827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:32:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:32:34.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:32:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:32:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 32, 18), 4.0087, 76.7846, 0.0, 10.8349, 13.0552, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:32:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:32:18
2026-04-12T18:32:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:32:36.298 [DEBUG] [Thread-193828] [transport.py] [_log()] starting thread (client mode): 0xae5e5030
2026-04-12T18:32:36.298 [DEBUG] [Thread-193828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:32:36.320 [DEBUG] [Thread-193828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:32:36.320 [INFO] [Thread-193828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:36.323 [DEBUG] [Thread-193828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] client lang: <none>
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] server lang: <none>
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] kex follows: False
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] Compression: none
2026-04-12T18:32:36.324 [DEBUG] [Thread-193828] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:32:36.342 [DEBUG] [Thread-193828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:32:36.342 [DEBUG] [Thread-193828] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:32:36.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:32:36.343 [DEBUG] [Thread-193828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:32:36.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:32:36.345 [DEBUG] [Thread-193828] [transport.py] [_log()] userauth is OK
2026-04-12T18:32:36.346 [DEBUG] [Thread-193828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:32:36.346 [DEBUG] [Thread-193828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:32:36.346 [DEBUG] [Thread-193828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:32:36.346 [DEBUG] [Thread-193828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:32:36.371 [INFO] [Thread-193828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:32:36.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:32:37.013 [DEBUG] [Thread-193828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:32:37.014 [DEBUG] [Thread-193828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:32:37.014 [DEBUG] [Thread-193828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:32:37.054 [DEBUG] [Thread-193828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:32:37.054 [DEBUG] [Thread-193828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:32:37.058 [DEBUG] [Thread-193828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:32:37.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:32:37.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:32:37.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:32:37.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:32:37.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:32:37.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:32:37.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:32:37.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:32:37.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:32:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.688998 -999.00  +13.10   6.99     81  +10.00 1 2 1 2 1   710    0 2.12 -54.15 ----- 7.0 7.0 256.8 11.4 14.6 -22.2 14.5 -21.1 14.2 -19.1 14.4 -21.2
2026-04-12T18:32:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:32:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:32:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.688998
2026-04-12T18:32:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:32:37.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:32:37.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:32:37.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:32:37.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:32:37.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:32:18', tmtdew=4.0087, humidity=76.7846, cloud=0.0, wind=10.8349, temperature=13.0552, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:32:09.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:32:37.085 [DEBUG] [Thread-193828] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:32:37.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:32:37.177 [DEBUG] [Thread-193831] [transport.py] [_log()] starting thread (client mode): 0xae5e6a70
2026-04-12T18:32:37.178 [DEBUG] [Thread-193831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:32:37.192 [DEBUG] [Thread-193831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:32:37.192 [INFO] [Thread-193831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:32:37.200 [DEBUG] [Thread-193831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:32:37.200 [DEBUG] [Thread-193831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:32:37.200 [DEBUG] [Thread-193831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:32:37.200 [DEBUG] [Thread-193831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:37.200 [DEBUG] [Thread-193831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:32:37.200 [DEBUG] [Thread-193831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:37.200 [DEBUG] [Thread-193831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] client lang: <none>
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] server lang: <none>
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] kex follows: False
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] Compression: none
2026-04-12T18:32:37.201 [DEBUG] [Thread-193831] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:32:37.260 [DEBUG] [Thread-193831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:32:37.261 [DEBUG] [Thread-193831] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:32:37.261 [DEBUG] [Thread-193831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:32:37.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:32:37.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:32:37.316 [DEBUG] [Thread-193831] [transport.py] [_log()] userauth is OK
2026-04-12T18:32:37.316 [DEBUG] [Thread-193831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:32:37.317 [DEBUG] [Thread-193831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:32:37.317 [DEBUG] [Thread-193831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:32:37.317 [DEBUG] [Thread-193831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:32:37.335 [INFO] [Thread-193831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:32:37.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:32:37.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:32:38.153 [DEBUG] [Thread-193831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:32:38.154 [DEBUG] [Thread-193831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:32:38.201 [DEBUG] [Thread-193831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:32:38.202 [DEBUG] [Thread-193831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:32:38.210 [DEBUG] [Thread-193833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:32:38.212 [DEBUG] [Thread-193831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:32:38.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:32:38.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:32:38.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:32:38.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:32:38.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:32:38.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:32:38.248 [DEBUG] [Thread-193831] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:32:51.086 [DEBUG] [Thread-193834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:32:53.273 [DEBUG] [Thread-193835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:33:08.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:33:08.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:33:08.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:33:08.312 [DEBUG] [Thread-193836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:33:09.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 32, 53), 3.96692, 76.835, 0.0, 10.5876, 13.3441, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:33:09.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:32:53
2026-04-12T18:33:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:33:10.092 [DEBUG] [Thread-193837] [transport.py] [_log()] starting thread (client mode): 0xae5a74f0
2026-04-12T18:33:10.093 [DEBUG] [Thread-193837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:33:10.111 [DEBUG] [Thread-193837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:33:10.112 [INFO] [Thread-193837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] client lang: <none>
2026-04-12T18:33:10.115 [DEBUG] [Thread-193837] [transport.py] [_log()] server lang: <none>
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] kex follows: False
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] Compression: none
2026-04-12T18:33:10.116 [DEBUG] [Thread-193837] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:33:10.124 [DEBUG] [Thread-193837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:33:10.124 [DEBUG] [Thread-193837] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:33:10.125 [DEBUG] [Thread-193837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:33:10.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:33:10.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:33:10.126 [DEBUG] [Thread-193837] [transport.py] [_log()] userauth is OK
2026-04-12T18:33:10.126 [DEBUG] [Thread-193837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:33:10.126 [DEBUG] [Thread-193837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:33:10.126 [DEBUG] [Thread-193837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:33:10.126 [DEBUG] [Thread-193837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:33:10.142 [INFO] [Thread-193837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:33:10.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:33:10.804 [DEBUG] [Thread-193837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:33:10.804 [DEBUG] [Thread-193837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:33:10.805 [DEBUG] [Thread-193837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:33:10.845 [DEBUG] [Thread-193837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:33:10.845 [DEBUG] [Thread-193837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:33:10.847 [DEBUG] [Thread-193837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:33:10.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:33:10.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:33:10.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:33:10.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:33:10.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:33:10.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:33:10.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:33:10.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:33:10.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:33:10.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.689345 -999.00  +13.10  10.51     81   +9.90 1 2 1 2 1   695    0 2.16 -51.85 ----- 10.5 10.5 257.8 11.8 14.5 -22.3 14.5 -20.9 14.2 -19.1 14.4 -21.2
2026-04-12T18:33:10.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:33:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:33:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.689345
2026-04-12T18:33:10.877 [DEBUG] [Thread-193837] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:33:10.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:33:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:33:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:33:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:33:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:33:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:32:53', tmtdew=3.96692, humidity=76.835, cloud=0.0, wind=10.5876, temperature=13.3441, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:32:39.408', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:33:10.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:33:10.973 [DEBUG] [Thread-193840] [transport.py] [_log()] starting thread (client mode): 0xae5e4070
2026-04-12T18:33:10.973 [DEBUG] [Thread-193840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:33:10.988 [DEBUG] [Thread-193840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:33:10.988 [INFO] [Thread-193840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:33:10.995 [DEBUG] [Thread-193840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:33:10.995 [DEBUG] [Thread-193840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:33:10.995 [DEBUG] [Thread-193840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:33:10.995 [DEBUG] [Thread-193840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] client lang: <none>
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] server lang: <none>
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] kex follows: False
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:33:10.996 [DEBUG] [Thread-193840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:33:10.997 [DEBUG] [Thread-193840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:33:10.997 [DEBUG] [Thread-193840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:33:10.997 [DEBUG] [Thread-193840] [transport.py] [_log()] Compression: none
2026-04-12T18:33:10.997 [DEBUG] [Thread-193840] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:33:11.052 [DEBUG] [Thread-193840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:33:11.052 [DEBUG] [Thread-193840] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:33:11.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:33:11.054 [DEBUG] [Thread-193840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:33:11.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:33:11.108 [DEBUG] [Thread-193840] [transport.py] [_log()] userauth is OK
2026-04-12T18:33:11.108 [DEBUG] [Thread-193840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:33:11.108 [DEBUG] [Thread-193840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:33:11.108 [DEBUG] [Thread-193840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:33:11.109 [DEBUG] [Thread-193840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:33:11.135 [INFO] [Thread-193840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:33:11.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:33:11.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:33:11.951 [DEBUG] [Thread-193840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:33:11.951 [DEBUG] [Thread-193840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:33:11.999 [DEBUG] [Thread-193840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:33:11.999 [DEBUG] [Thread-193840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:33:12.008 [DEBUG] [Thread-193840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:33:12.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:33:12.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:33:12.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:33:12.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:33:12.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:33:12.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:33:12.041 [DEBUG] [Thread-193840] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:33:23.351 [DEBUG] [Thread-193842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:33:25.852 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:33:25.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:33:38.402 [DEBUG] [Thread-193843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:33:42.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:33:42.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:33:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:33:43.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 33, 29), 3.91916, 76.9838, 0.0, 12.1579, 12.9724, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:33:43.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:33:29
2026-04-12T18:33:43.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:33:43.934 [DEBUG] [Thread-193844] [transport.py] [_log()] starting thread (client mode): 0xae5b7490
2026-04-12T18:33:43.934 [DEBUG] [Thread-193844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:33:43.954 [DEBUG] [Thread-193844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:33:43.955 [INFO] [Thread-193844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:33:43.957 [DEBUG] [Thread-193844] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] client lang: <none>
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] server lang: <none>
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] kex follows: False
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:33:43.964 [DEBUG] [Thread-193844] [transport.py] [_log()] Compression: none
2026-04-12T18:33:43.965 [DEBUG] [Thread-193844] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:33:43.981 [DEBUG] [Thread-193844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:33:43.982 [DEBUG] [Thread-193844] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:33:43.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:33:43.983 [DEBUG] [Thread-193844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:33:43.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:33:43.985 [DEBUG] [Thread-193844] [transport.py] [_log()] userauth is OK
2026-04-12T18:33:43.985 [DEBUG] [Thread-193844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:33:43.985 [DEBUG] [Thread-193844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:33:43.985 [DEBUG] [Thread-193844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:33:43.985 [DEBUG] [Thread-193844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:33:44.004 [INFO] [Thread-193844] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:33:44.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:33:44.646 [DEBUG] [Thread-193844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:33:44.647 [DEBUG] [Thread-193844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:33:44.647 [DEBUG] [Thread-193844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:33:44.688 [DEBUG] [Thread-193844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:33:44.688 [DEBUG] [Thread-193844] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:33:44.700 [DEBUG] [Thread-193844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:33:44.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:33:44.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:33:44.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:33:44.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:33:44.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:33:44.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:33:44.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:33:44.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:33:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:33:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.689693 -999.00  +13.10   7.48     81  +10.00 1 2 1 2 1   679    0 2.19 -50.85 ----- 7.5 7.5 256.0 13.0 14.5 -22.4 14.5 -21.0 14.1 -19.3 14.4 -21.2
2026-04-12T18:33:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:33:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:33:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.689693
2026-04-12T18:33:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:33:44.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:33:44.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:33:44.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:33:44.727 [DEBUG] [Thread-193844] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:33:44.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:33:44.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:33:29', tmtdew=3.91916, humidity=76.9838, cloud=0.0, wind=12.1579, temperature=12.9724, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:33:09.475', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:33:44.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:33:44.823 [DEBUG] [Thread-193847] [transport.py] [_log()] starting thread (client mode): 0xae5e5480
2026-04-12T18:33:44.823 [DEBUG] [Thread-193847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:33:44.839 [DEBUG] [Thread-193847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:33:44.839 [INFO] [Thread-193847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:33:44.847 [DEBUG] [Thread-193847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] client lang: <none>
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] server lang: <none>
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] kex follows: False
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] Compression: none
2026-04-12T18:33:44.848 [DEBUG] [Thread-193847] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:33:44.904 [DEBUG] [Thread-193847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:33:44.904 [DEBUG] [Thread-193847] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:33:44.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:33:44.906 [DEBUG] [Thread-193847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:33:44.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:33:44.960 [DEBUG] [Thread-193847] [transport.py] [_log()] userauth is OK
2026-04-12T18:33:44.961 [DEBUG] [Thread-193847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:33:44.961 [DEBUG] [Thread-193847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:33:44.961 [DEBUG] [Thread-193847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:33:44.961 [DEBUG] [Thread-193847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:33:44.980 [INFO] [Thread-193847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:33:44.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:33:44.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:33:45.788 [DEBUG] [Thread-193847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:33:45.788 [DEBUG] [Thread-193847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:33:45.836 [DEBUG] [Thread-193847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:33:45.836 [DEBUG] [Thread-193847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:33:45.846 [DEBUG] [Thread-193847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:33:45.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:33:45.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:33:45.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:33:45.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:33:45.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:33:45.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:33:45.883 [DEBUG] [Thread-193847] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:33:51.144 [DEBUG] [Thread-193849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:33:53.443 [DEBUG] [Thread-193850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:34:08.496 [DEBUG] [Thread-193851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:34:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:34:15.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:34:15.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:34:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 34, 5), 3.90732, 77.0504, 0.0, 10.1117, 13.0057, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:34:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:34:05
2026-04-12T18:34:17.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:34:17.680 [DEBUG] [Thread-193852] [transport.py] [_log()] starting thread (client mode): 0xae5e5ab0
2026-04-12T18:34:17.681 [DEBUG] [Thread-193852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:34:17.702 [DEBUG] [Thread-193852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:34:17.702 [INFO] [Thread-193852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] client lang: <none>
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] server lang: <none>
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] kex follows: False
2026-04-12T18:34:17.705 [DEBUG] [Thread-193852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:34:17.706 [DEBUG] [Thread-193852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:34:17.706 [DEBUG] [Thread-193852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:34:17.706 [DEBUG] [Thread-193852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:34:17.706 [DEBUG] [Thread-193852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:34:17.706 [DEBUG] [Thread-193852] [transport.py] [_log()] Compression: none
2026-04-12T18:34:17.706 [DEBUG] [Thread-193852] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:34:17.723 [DEBUG] [Thread-193852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:34:17.724 [DEBUG] [Thread-193852] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:34:17.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:34:17.725 [DEBUG] [Thread-193852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:34:17.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:34:17.727 [DEBUG] [Thread-193852] [transport.py] [_log()] userauth is OK
2026-04-12T18:34:17.727 [DEBUG] [Thread-193852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:34:17.728 [DEBUG] [Thread-193852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:34:17.728 [DEBUG] [Thread-193852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:34:17.728 [DEBUG] [Thread-193852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:34:17.751 [INFO] [Thread-193852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:34:17.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:34:18.346 [DEBUG] [Thread-193852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:34:18.347 [DEBUG] [Thread-193852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:34:18.347 [DEBUG] [Thread-193852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:34:18.388 [DEBUG] [Thread-193852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:34:18.388 [DEBUG] [Thread-193852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:34:18.392 [DEBUG] [Thread-193852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:34:18.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:34:18.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:34:18.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:34:18.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:34:18.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:34:18.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:34:18.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:34:18.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:34:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:34:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.690040 -999.00  +13.10   8.23     81  +10.00 1 2 1 2 1   662    0 2.05 -52.66 ----- 8.2 8.2 253.8 10.6 14.5 -22.3 14.4 -21.1 14.1 -19.2 14.3 -21.1
2026-04-12T18:34:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:34:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:34:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.690040
2026-04-12T18:34:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:34:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:34:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:34:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:34:18.419 [DEBUG] [Thread-193852] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:34:18.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:34:18.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:34:05', tmtdew=3.90732, humidity=77.0504, cloud=0.0, wind=10.1117, temperature=13.0057, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:33:39.456', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:34:18.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:34:18.522 [DEBUG] [Thread-193855] [transport.py] [_log()] starting thread (client mode): 0xb0f6c8e0
2026-04-12T18:34:18.522 [DEBUG] [Thread-193855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:34:18.537 [DEBUG] [Thread-193855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:34:18.537 [INFO] [Thread-193855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:34:18.545 [DEBUG] [Thread-193855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:34:18.545 [DEBUG] [Thread-193855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:34:18.545 [DEBUG] [Thread-193855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:34:18.545 [DEBUG] [Thread-193855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:18.545 [DEBUG] [Thread-193855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:18.545 [DEBUG] [Thread-193855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] client lang: <none>
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] server lang: <none>
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] kex follows: False
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] Compression: none
2026-04-12T18:34:18.546 [DEBUG] [Thread-193855] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:34:18.602 [DEBUG] [Thread-193855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:34:18.603 [DEBUG] [Thread-193855] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:34:18.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:34:18.604 [DEBUG] [Thread-193855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:34:18.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:34:18.658 [DEBUG] [Thread-193855] [transport.py] [_log()] userauth is OK
2026-04-12T18:34:18.659 [DEBUG] [Thread-193855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:34:18.659 [DEBUG] [Thread-193855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:34:18.659 [DEBUG] [Thread-193855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:34:18.659 [DEBUG] [Thread-193855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:34:18.677 [INFO] [Thread-193855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:34:18.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:34:18.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:34:19.516 [DEBUG] [Thread-193855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:34:19.516 [DEBUG] [Thread-193855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:34:19.564 [DEBUG] [Thread-193855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:34:19.565 [DEBUG] [Thread-193855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:34:19.574 [DEBUG] [Thread-193855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:34:19.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:34:19.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:34: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
2026-04-12T18:34:19.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:34:19.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:34:19.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:34:19.610 [DEBUG] [Thread-193855] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:34:23.538 [DEBUG] [Thread-193857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:34:30.466 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:34:30.468 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:34:38.595 [DEBUG] [Thread-193858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:34:49.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:34:49.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:34:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:34:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 34, 40), 3.84986, 77.4322, 0.0, 11.399, 13.2783, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:34:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:34:40
2026-04-12T18:34:51.223 [DEBUG] [Thread-193859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:34:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:34:51.471 [DEBUG] [Thread-193860] [transport.py] [_log()] starting thread (client mode): 0xae5b44c0
2026-04-12T18:34:51.471 [DEBUG] [Thread-193860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:34:51.493 [DEBUG] [Thread-193860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:34:51.494 [INFO] [Thread-193860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:51.497 [DEBUG] [Thread-193860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] client lang: <none>
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] server lang: <none>
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] kex follows: False
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:34:51.498 [DEBUG] [Thread-193860] [transport.py] [_log()] Compression: none
2026-04-12T18:34:51.499 [DEBUG] [Thread-193860] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:34:51.517 [DEBUG] [Thread-193860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:34:51.518 [DEBUG] [Thread-193860] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:34:51.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:34:51.519 [DEBUG] [Thread-193860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:34:51.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:34:51.521 [DEBUG] [Thread-193860] [transport.py] [_log()] userauth is OK
2026-04-12T18:34:51.522 [DEBUG] [Thread-193860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:34:51.522 [DEBUG] [Thread-193860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:34:51.522 [DEBUG] [Thread-193860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:34:51.522 [DEBUG] [Thread-193860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:34:51.558 [INFO] [Thread-193860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:34:51.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:34:52.201 [DEBUG] [Thread-193860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:34:52.202 [DEBUG] [Thread-193860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:34:52.202 [DEBUG] [Thread-193860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:34:52.242 [DEBUG] [Thread-193860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:34:52.242 [DEBUG] [Thread-193860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:34:52.246 [DEBUG] [Thread-193860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:34:52.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:34:52.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:34:52.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:34:52.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:34:52.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:34:52.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:34:52.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:34:52.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:34:52.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:34:52.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.690382 -999.00  +13.10   9.60     81  +10.00 1 2 1 2 1   644    0 1.99 -56.15 ----- 9.6 9.6 248.6 10.4 14.5 -22.4 14.4 -21.0 14.1 -19.1 14.3 -21.1
2026-04-12T18:34:52.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:34:52.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:34:52.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.690382
2026-04-12T18:34:52.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:34:52.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:34:52.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:34:52.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:34:52.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:34:52.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:34:40', tmtdew=3.84986, humidity=77.4322, cloud=0.0, wind=11.399, temperature=13.2783, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:34:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:34:52.272 [DEBUG] [Thread-193860] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:34:52.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:34:52.367 [DEBUG] [Thread-193863] [transport.py] [_log()] starting thread (client mode): 0xae5b45e0
2026-04-12T18:34:52.367 [DEBUG] [Thread-193863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:34:52.382 [DEBUG] [Thread-193863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:34:52.382 [INFO] [Thread-193863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] client lang: <none>
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] server lang: <none>
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] kex follows: False
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:34:52.390 [DEBUG] [Thread-193863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:34:52.391 [DEBUG] [Thread-193863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:34:52.391 [DEBUG] [Thread-193863] [transport.py] [_log()] Compression: none
2026-04-12T18:34:52.391 [DEBUG] [Thread-193863] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:34:52.448 [DEBUG] [Thread-193863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:34:52.449 [DEBUG] [Thread-193863] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:34:52.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:34:52.450 [DEBUG] [Thread-193863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:34:52.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:34:52.504 [DEBUG] [Thread-193863] [transport.py] [_log()] userauth is OK
2026-04-12T18:34:52.504 [DEBUG] [Thread-193863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:34:52.504 [DEBUG] [Thread-193863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:34:52.504 [DEBUG] [Thread-193863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:34:52.505 [DEBUG] [Thread-193863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:34:52.523 [INFO] [Thread-193863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:34:52.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:34:52.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:34:53.358 [DEBUG] [Thread-193863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:34:53.358 [DEBUG] [Thread-193863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:34:53.406 [DEBUG] [Thread-193863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:34:53.406 [DEBUG] [Thread-193863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:34:53.416 [DEBUG] [Thread-193863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:34:53.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:34:53.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:34:53.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:34:53.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:34:53.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:34:53.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:34:53.453 [DEBUG] [Thread-193863] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:34:53.632 [DEBUG] [Thread-193865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:08.695 [DEBUG] [Thread-193866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:35:23.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:35:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:35:23.728 [DEBUG] [Thread-193867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 35, 16), 3.809, 77.7992, 0.0, 12.0344, 12.9893, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:35:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:35:16
2026-04-12T18:35:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:35:25.271 [DEBUG] [Thread-193868] [transport.py] [_log()] starting thread (client mode): 0xb0f6e590
2026-04-12T18:35:25.271 [DEBUG] [Thread-193868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:35:25.292 [DEBUG] [Thread-193868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:35:25.292 [INFO] [Thread-193868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] client lang: <none>
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] server lang: <none>
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] kex follows: False
2026-04-12T18:35:25.296 [DEBUG] [Thread-193868] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:35:25.297 [DEBUG] [Thread-193868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:35:25.297 [DEBUG] [Thread-193868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:35:25.297 [DEBUG] [Thread-193868] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:35:25.297 [DEBUG] [Thread-193868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:35:25.297 [DEBUG] [Thread-193868] [transport.py] [_log()] Compression: none
2026-04-12T18:35:25.297 [DEBUG] [Thread-193868] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:35:25.312 [DEBUG] [Thread-193868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:35:25.312 [DEBUG] [Thread-193868] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:35:25.313 [DEBUG] [Thread-193868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:35:25.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:35:25.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:35:25.357 [DEBUG] [Thread-193868] [transport.py] [_log()] userauth is OK
2026-04-12T18:35:25.357 [DEBUG] [Thread-193868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:35:25.357 [DEBUG] [Thread-193868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:35:25.357 [DEBUG] [Thread-193868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:35:25.358 [DEBUG] [Thread-193868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:35:25.390 [INFO] [Thread-193868] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:35:25.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:35:26.038 [DEBUG] [Thread-193868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:35:26.038 [DEBUG] [Thread-193868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:35:26.039 [DEBUG] [Thread-193868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:35:26.079 [DEBUG] [Thread-193868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:35:26.079 [DEBUG] [Thread-193868] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:35:26.083 [DEBUG] [Thread-193868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:35:26.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:35:26.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:35:26.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:35:26.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:35:26.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:35:26.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:35:26.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:35:26.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:35:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:35:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.690734 -999.00  +13.10   7.11     81  +10.00 1 2 1 2 1   625    0 1.94 -54.58 ----- 7.1 7.1 251.2 8.9 14.5 -22.3 14.4 -21.1 14.0 -19.1 14.3 -21.2
2026-04-12T18:35:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:35:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:35:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.690734
2026-04-12T18:35:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:35:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:35:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:35:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:35:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:35:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:35:16', tmtdew=3.809, humidity=77.7992, cloud=0.0, wind=12.0344, temperature=12.9893, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:34:39.418', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:35:26.110 [DEBUG] [Thread-193868] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:35:26.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:35:26.203 [DEBUG] [Thread-193871] [transport.py] [_log()] starting thread (client mode): 0xb0fcd8a0
2026-04-12T18:35:26.203 [DEBUG] [Thread-193871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:35:26.217 [DEBUG] [Thread-193871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:35:26.218 [INFO] [Thread-193871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:35:26.225 [DEBUG] [Thread-193871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:35:26.225 [DEBUG] [Thread-193871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:35:26.225 [DEBUG] [Thread-193871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:35:26.225 [DEBUG] [Thread-193871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] client lang: <none>
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] server lang: <none>
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] kex follows: False
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] Compression: none
2026-04-12T18:35:26.226 [DEBUG] [Thread-193871] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:35:26.282 [DEBUG] [Thread-193871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:35:26.283 [DEBUG] [Thread-193871] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:35:26.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:35:26.284 [DEBUG] [Thread-193871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:35:26.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:35:26.338 [DEBUG] [Thread-193871] [transport.py] [_log()] userauth is OK
2026-04-12T18:35:26.338 [DEBUG] [Thread-193871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:35:26.339 [DEBUG] [Thread-193871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:35:26.339 [DEBUG] [Thread-193871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:35:26.339 [DEBUG] [Thread-193871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:35:26.357 [INFO] [Thread-193871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:35:26.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:35:26.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:35:27.161 [DEBUG] [Thread-193871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:35:27.162 [DEBUG] [Thread-193871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:35:27.209 [DEBUG] [Thread-193871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:35:27.209 [DEBUG] [Thread-193871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:35:27.219 [DEBUG] [Thread-193871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:35:27.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:35:27.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:35:27.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:35:27.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:35:27.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:35:27.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:35:27.255 [DEBUG] [Thread-193871] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:35:34.891 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:34.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:38.768 [DEBUG] [Thread-193873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:51.273 [DEBUG] [Thread-193874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:53.822 [DEBUG] [Thread-193875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:35:57.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:35:57.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:35:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:35:58.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 35, 16), 3.809, 77.7992, 0.0, 12.0344, 12.9893, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:35:58.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:35:16
2026-04-12T18:35:58.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:35:59.126 [DEBUG] [Thread-193876] [transport.py] [_log()] starting thread (client mode): 0xae5e4b80
2026-04-12T18:35:59.126 [DEBUG] [Thread-193876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:35:59.147 [DEBUG] [Thread-193876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:35:59.147 [INFO] [Thread-193876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:35:59.150 [DEBUG] [Thread-193876] [transport.py] [_log()] client lang: <none>
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] server lang: <none>
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] kex follows: False
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] Compression: none
2026-04-12T18:35:59.151 [DEBUG] [Thread-193876] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:35:59.159 [DEBUG] [Thread-193876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:35:59.159 [DEBUG] [Thread-193876] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:35:59.159 [DEBUG] [Thread-193876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:35:59.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:35:59.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:35:59.161 [DEBUG] [Thread-193876] [transport.py] [_log()] userauth is OK
2026-04-12T18:35:59.161 [DEBUG] [Thread-193876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:35:59.161 [DEBUG] [Thread-193876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:35:59.161 [DEBUG] [Thread-193876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:35:59.161 [DEBUG] [Thread-193876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:35:59.174 [INFO] [Thread-193876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:35:59.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:35:59.803 [DEBUG] [Thread-193876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:35:59.803 [DEBUG] [Thread-193876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:35:59.803 [DEBUG] [Thread-193876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:35:59.844 [DEBUG] [Thread-193876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:35:59.844 [DEBUG] [Thread-193876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:35:59.847 [DEBUG] [Thread-193876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:35:59.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:35:59.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:35:59.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:35:59.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:35:59.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:35:59.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:35:59.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:35:59.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:35:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:35:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.691429 -999.00  +13.00   9.07     81  +10.00 1 2 1 2 1   584    0 1.77 -62.38 ----- 9.1 9.1 251.8 11.1 14.4 -22.2 14.3 -21.1 14.0 -19.1 14.2 -21.1
2026-04-12T18:35:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:35:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:35:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.691429
2026-04-12T18:35:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:35:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:35:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:35:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:35:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:35:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:35:16', tmtdew=3.809, humidity=77.7992, cloud=0.0, wind=12.0344, temperature=12.9893, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:35:39.466', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:35:59.874 [DEBUG] [Thread-193876] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:35:59.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:35:59.967 [DEBUG] [Thread-193879] [transport.py] [_log()] starting thread (client mode): 0xae5e4760
2026-04-12T18:35:59.967 [DEBUG] [Thread-193879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:35:59.981 [DEBUG] [Thread-193879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:35:59.982 [INFO] [Thread-193879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:35:59.989 [DEBUG] [Thread-193879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:35:59.990 [DEBUG] [Thread-193879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] client lang: <none>
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] server lang: <none>
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] kex follows: False
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] Compression: none
2026-04-12T18:35:59.991 [DEBUG] [Thread-193879] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:36:00.048 [DEBUG] [Thread-193879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:36:00.048 [DEBUG] [Thread-193879] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:36:00.049 [DEBUG] [Thread-193879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:36:00.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:36:00.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:36:00.104 [DEBUG] [Thread-193879] [transport.py] [_log()] userauth is OK
2026-04-12T18:36:00.104 [DEBUG] [Thread-193879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:36:00.105 [DEBUG] [Thread-193879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:36:00.105 [DEBUG] [Thread-193879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:36:00.105 [DEBUG] [Thread-193879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:36:00.128 [INFO] [Thread-193879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:36:00.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:36:00.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:36:00.966 [DEBUG] [Thread-193879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:36:00.966 [DEBUG] [Thread-193879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:36:01.013 [DEBUG] [Thread-193879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:36:01.014 [DEBUG] [Thread-193879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:36:01.022 [DEBUG] [Thread-193879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:36:01.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:36:01.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:36:01.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:36:01.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:36:01.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:36:01.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:36:01.056 [DEBUG] [Thread-193879] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:36:08.862 [DEBUG] [Thread-193881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:36:23.923 [DEBUG] [Thread-193882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:36:31.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:36:31.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:36:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:36:32.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 35, 51), 3.78435, 77.7641, 0.0, 16.0913, 13.2123, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:36:32.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:35:51
2026-04-12T18:36:32.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:36:32.890 [DEBUG] [Thread-193883] [transport.py] [_log()] starting thread (client mode): 0xb0f6e980
2026-04-12T18:36:32.890 [DEBUG] [Thread-193883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:36:32.912 [DEBUG] [Thread-193883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:36:32.912 [INFO] [Thread-193883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:36:32.914 [DEBUG] [Thread-193883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] client lang: <none>
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] server lang: <none>
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] kex follows: False
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] Compression: none
2026-04-12T18:36:32.915 [DEBUG] [Thread-193883] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:36:32.927 [DEBUG] [Thread-193883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:36:32.927 [DEBUG] [Thread-193883] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:36:32.928 [DEBUG] [Thread-193883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:36:32.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:36:32.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:36:32.929 [DEBUG] [Thread-193883] [transport.py] [_log()] userauth is OK
2026-04-12T18:36:32.930 [DEBUG] [Thread-193883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:36:32.930 [DEBUG] [Thread-193883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:36:32.930 [DEBUG] [Thread-193883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:36:32.930 [DEBUG] [Thread-193883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:36:32.954 [INFO] [Thread-193883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:36:32.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:36:33.616 [DEBUG] [Thread-193883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:36:33.617 [DEBUG] [Thread-193883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:36:33.617 [DEBUG] [Thread-193883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:36:33.658 [DEBUG] [Thread-193883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:36:33.658 [DEBUG] [Thread-193883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:36:33.661 [DEBUG] [Thread-193883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:36:33.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:36:33.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:36:33.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:36:33.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:36:33.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:36:33.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:36:33.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:36:33.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:36:33.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:36:33.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.691776 -999.00  +13.00   7.01     81  +10.00 1 2 1 2 1   563    0 1.72 -59.76 ----- 7.0 7.0 260.8 10.3 14.4 -22.0 14.3 -20.8 13.9 -18.9 14.2 -21.1
2026-04-12T18:36:33.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:36:33.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:36:33.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.691776
2026-04-12T18:36:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:36:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:36:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:36:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:36:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:36:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:35:51', tmtdew=3.78435, humidity=77.7641, cloud=0.0, wind=16.0913, temperature=13.2123, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:36:09.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:36:33.686 [DEBUG] [Thread-193883] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:36:33.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:36:33.781 [DEBUG] [Thread-193886] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1c0
2026-04-12T18:36:33.781 [DEBUG] [Thread-193886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:36:33.796 [DEBUG] [Thread-193886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:36:33.796 [INFO] [Thread-193886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:36:33.804 [DEBUG] [Thread-193886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:36:33.804 [DEBUG] [Thread-193886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:36:33.804 [DEBUG] [Thread-193886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:36:33.804 [DEBUG] [Thread-193886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:36:33.804 [DEBUG] [Thread-193886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] client lang: <none>
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] server lang: <none>
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] kex follows: False
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:36:33.805 [DEBUG] [Thread-193886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:36:33.806 [DEBUG] [Thread-193886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:36:33.806 [DEBUG] [Thread-193886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:36:33.806 [DEBUG] [Thread-193886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:36:33.806 [DEBUG] [Thread-193886] [transport.py] [_log()] Compression: none
2026-04-12T18:36:33.806 [DEBUG] [Thread-193886] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:36:33.862 [DEBUG] [Thread-193886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:36:33.863 [DEBUG] [Thread-193886] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:36:33.863 [DEBUG] [Thread-193886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:36:33.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:36:33.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:36:33.918 [DEBUG] [Thread-193886] [transport.py] [_log()] userauth is OK
2026-04-12T18:36:33.918 [DEBUG] [Thread-193886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:36:33.918 [DEBUG] [Thread-193886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:36:33.918 [DEBUG] [Thread-193886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:36:33.919 [DEBUG] [Thread-193886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:36:33.938 [INFO] [Thread-193886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:36:33.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:36:33.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:36:34.774 [DEBUG] [Thread-193886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:36:34.774 [DEBUG] [Thread-193886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:36:34.822 [DEBUG] [Thread-193886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:36:34.823 [DEBUG] [Thread-193886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:36:34.834 [DEBUG] [Thread-193886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:36:34.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:36:34.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:36:34.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:36:34.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:36:34.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:36:34.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:36:34.879 [DEBUG] [Thread-193886] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:36:38.956 [DEBUG] [Thread-193888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:36:39.747 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:36:39.748 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:36:51.339 [DEBUG] [Thread-193889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:36:54.018 [DEBUG] [Thread-193890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:37:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:37:04.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:37:04.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:37:06.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 36, 27), 3.73312, 77.9319, 0.0, 9.84636, 12.9229, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:37:06.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:36:27
2026-04-12T18:37:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:37:06.743 [DEBUG] [Thread-193891] [transport.py] [_log()] starting thread (client mode): 0xb0f6e0e0
2026-04-12T18:37:06.744 [DEBUG] [Thread-193891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:37:06.760 [DEBUG] [Thread-193891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:37:06.760 [INFO] [Thread-193891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:37:06.763 [DEBUG] [Thread-193891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] client lang: <none>
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] server lang: <none>
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] kex follows: False
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] Compression: none
2026-04-12T18:37:06.764 [DEBUG] [Thread-193891] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:37:06.781 [DEBUG] [Thread-193891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:37:06.782 [DEBUG] [Thread-193891] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:37:06.782 [DEBUG] [Thread-193891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:37:06.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:37:06.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:37:06.784 [DEBUG] [Thread-193891] [transport.py] [_log()] userauth is OK
2026-04-12T18:37:06.784 [DEBUG] [Thread-193891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:37:06.784 [DEBUG] [Thread-193891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:37:06.785 [DEBUG] [Thread-193891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:37:06.785 [DEBUG] [Thread-193891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:37:06.799 [INFO] [Thread-193891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:37:06.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:37:07.421 [DEBUG] [Thread-193891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:37:07.422 [DEBUG] [Thread-193891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:37:07.422 [DEBUG] [Thread-193891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:37:07.463 [DEBUG] [Thread-193891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:37:07.463 [DEBUG] [Thread-193891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:37:07.466 [DEBUG] [Thread-193891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:37:07.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:37:07.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:37:07.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:37:07.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:37:07.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:37:07.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:37:07.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:37:07.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:37:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:37:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.692123 -999.00  +13.00   8.09     81  +10.00 1 2 1 2 1   541    0 1.75 -60.97 ----- 8.1 8.1 260.4 11.3 14.3 -21.9 14.3 -20.9 13.9 -18.8 14.2 -21.1
2026-04-12T18:37:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:37:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:37:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.692123
2026-04-12T18:37:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:37:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:37:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:37:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:37:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:37:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:36:27', tmtdew=3.73312, humidity=77.9319, cloud=0.0, wind=9.84636, temperature=12.9229, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:36:39.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:37:07.488 [DEBUG] [Thread-193891] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:37:07.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:37:07.582 [DEBUG] [Thread-193894] [transport.py] [_log()] starting thread (client mode): 0xae5a43a0
2026-04-12T18:37:07.582 [DEBUG] [Thread-193894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:37:07.597 [DEBUG] [Thread-193894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:37:07.597 [INFO] [Thread-193894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:37:07.605 [DEBUG] [Thread-193894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:37:07.605 [DEBUG] [Thread-193894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:37:07.605 [DEBUG] [Thread-193894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:37:07.605 [DEBUG] [Thread-193894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:07.605 [DEBUG] [Thread-193894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:07.605 [DEBUG] [Thread-193894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:07.605 [DEBUG] [Thread-193894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] client lang: <none>
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] server lang: <none>
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] kex follows: False
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] Compression: none
2026-04-12T18:37:07.606 [DEBUG] [Thread-193894] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:37:07.663 [DEBUG] [Thread-193894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:37:07.663 [DEBUG] [Thread-193894] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:37:07.663 [DEBUG] [Thread-193894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:37:07.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:37:07.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:37:07.720 [DEBUG] [Thread-193894] [transport.py] [_log()] userauth is OK
2026-04-12T18:37:07.720 [DEBUG] [Thread-193894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:37:07.720 [DEBUG] [Thread-193894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:37:07.720 [DEBUG] [Thread-193894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:37:07.720 [DEBUG] [Thread-193894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:37:07.738 [INFO] [Thread-193894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:37:07.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:37:07.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:37:08.574 [DEBUG] [Thread-193894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:37:08.574 [DEBUG] [Thread-193894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:37:08.622 [DEBUG] [Thread-193894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:37:08.622 [DEBUG] [Thread-193894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:37:08.631 [DEBUG] [Thread-193894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:37:08.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:37:08.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:37:08.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:37:08.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:37:08.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:37:08.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:37:08.668 [DEBUG] [Thread-193894] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:37:09.056 [DEBUG] [Thread-193896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:37:24.107 [DEBUG] [Thread-193897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:37:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:37:38.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:37:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:37:39.142 [DEBUG] [Thread-193898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:37:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 37, 2), 3.71952, 77.9982, 0.0, 9.91692, 12.8897, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:37:39.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:37:02
2026-04-12T18:37:40.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:37:40.519 [DEBUG] [Thread-193899] [transport.py] [_log()] starting thread (client mode): 0xae5a5060
2026-04-12T18:37:40.519 [DEBUG] [Thread-193899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:37:40.540 [DEBUG] [Thread-193899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:37:40.540 [INFO] [Thread-193899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:37:40.542 [DEBUG] [Thread-193899] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:37:40.542 [DEBUG] [Thread-193899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:37:40.542 [DEBUG] [Thread-193899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] client lang: <none>
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] server lang: <none>
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] kex follows: False
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:37:40.543 [DEBUG] [Thread-193899] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:37:40.544 [DEBUG] [Thread-193899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:37:40.544 [DEBUG] [Thread-193899] [transport.py] [_log()] Compression: none
2026-04-12T18:37:40.544 [DEBUG] [Thread-193899] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:37:40.562 [DEBUG] [Thread-193899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:37:40.563 [DEBUG] [Thread-193899] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:37:40.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:37:40.565 [DEBUG] [Thread-193899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:37:40.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:37:40.567 [DEBUG] [Thread-193899] [transport.py] [_log()] userauth is OK
2026-04-12T18:37:40.567 [DEBUG] [Thread-193899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:37:40.567 [DEBUG] [Thread-193899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:37:40.567 [DEBUG] [Thread-193899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:37:40.567 [DEBUG] [Thread-193899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:37:40.585 [INFO] [Thread-193899] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:37:40.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:37:41.216 [DEBUG] [Thread-193899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:37:41.216 [DEBUG] [Thread-193899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:37:41.217 [DEBUG] [Thread-193899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:37:41.257 [DEBUG] [Thread-193899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:37:41.257 [DEBUG] [Thread-193899] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:37:41.261 [DEBUG] [Thread-193899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:37:41.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:37:41.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:37:41.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:37:41.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:37:41.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:37:41.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:37:41.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:37:41.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:37:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:37:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.692470 -999.00  +13.00   4.95     82  +10.00 1 2 1 2 1   519    0 1.67 -59.61 ----- 5.0 5.0 253.8 8.1 14.3 -22.1 14.3 -20.9 13.9 -19.0 14.2 -21.0
2026-04-12T18:37:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:37:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:37:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.692470
2026-04-12T18:37:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:37:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:37:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:37:41.285 [DEBUG] [Thread-193899] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:37:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:37:41.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:37:41.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:37:02', tmtdew=3.71952, humidity=77.9982, cloud=0.0, wind=9.91692, temperature=12.8897, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:37:09.408', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:37:41.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:37:41.379 [DEBUG] [Thread-193902] [transport.py] [_log()] starting thread (client mode): 0xae51a1d0
2026-04-12T18:37:41.379 [DEBUG] [Thread-193902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:37:41.397 [DEBUG] [Thread-193902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:37:41.397 [INFO] [Thread-193902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:37:41.405 [DEBUG] [Thread-193902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:37:41.405 [DEBUG] [Thread-193902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:37:41.405 [DEBUG] [Thread-193902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:37:41.405 [DEBUG] [Thread-193902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] client lang: <none>
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] server lang: <none>
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] kex follows: False
2026-04-12T18:37:41.406 [DEBUG] [Thread-193902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:37:41.407 [DEBUG] [Thread-193902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:37:41.407 [DEBUG] [Thread-193902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:37:41.407 [DEBUG] [Thread-193902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:37:41.407 [DEBUG] [Thread-193902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:37:41.407 [DEBUG] [Thread-193902] [transport.py] [_log()] Compression: none
2026-04-12T18:37:41.407 [DEBUG] [Thread-193902] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:37:41.464 [DEBUG] [Thread-193902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:37:41.465 [DEBUG] [Thread-193902] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:37:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:37:41.466 [DEBUG] [Thread-193902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:37:41.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:37:41.523 [DEBUG] [Thread-193902] [transport.py] [_log()] userauth is OK
2026-04-12T18:37:41.524 [DEBUG] [Thread-193902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:37:41.524 [DEBUG] [Thread-193902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:37:41.524 [DEBUG] [Thread-193902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:37:41.524 [DEBUG] [Thread-193902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:37:41.542 [INFO] [Thread-193902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:37:41.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:37:41.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:37:42.392 [DEBUG] [Thread-193902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:37:42.392 [DEBUG] [Thread-193902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:37:42.440 [DEBUG] [Thread-193902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:37:42.440 [DEBUG] [Thread-193902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:37:42.450 [DEBUG] [Thread-193902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:37:42.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:37:42.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:37:42.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:37:42.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:37:42.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:37:42.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:37:42.487 [DEBUG] [Thread-193902] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:37:46.054 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:37:46.055 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:37:51.408 [DEBUG] [Thread-193904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:37:54.180 [DEBUG] [Thread-193905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:09.236 [DEBUG] [Thread-193906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:12.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:38:12.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:38:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:38:13.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 37, 37), 3.74427, 77.9642, 0.0, 13.163, 13.147, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:38:13.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:37:37
2026-04-12T18:38:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:38:14.274 [DEBUG] [Thread-193907] [transport.py] [_log()] starting thread (client mode): 0xb0fcce50
2026-04-12T18:38:14.274 [DEBUG] [Thread-193907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:38:14.293 [DEBUG] [Thread-193907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:38:14.293 [INFO] [Thread-193907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:38:14.296 [DEBUG] [Thread-193907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] client lang: <none>
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] server lang: <none>
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] kex follows: False
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:38:14.297 [DEBUG] [Thread-193907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:38:14.298 [DEBUG] [Thread-193907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:38:14.298 [DEBUG] [Thread-193907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:38:14.298 [DEBUG] [Thread-193907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:38:14.298 [DEBUG] [Thread-193907] [transport.py] [_log()] Compression: none
2026-04-12T18:38:14.298 [DEBUG] [Thread-193907] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:38:14.308 [DEBUG] [Thread-193907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:38:14.309 [DEBUG] [Thread-193907] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:38:14.309 [DEBUG] [Thread-193907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:38:14.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:38:14.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:38:14.312 [DEBUG] [Thread-193907] [transport.py] [_log()] userauth is OK
2026-04-12T18:38:14.312 [DEBUG] [Thread-193907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:38:14.312 [DEBUG] [Thread-193907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:38:14.312 [DEBUG] [Thread-193907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:38:14.312 [DEBUG] [Thread-193907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:38:14.332 [INFO] [Thread-193907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:38:14.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:38:14.960 [DEBUG] [Thread-193907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:38:14.960 [DEBUG] [Thread-193907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:38:14.960 [DEBUG] [Thread-193907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:38:15.002 [DEBUG] [Thread-193907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:38:15.002 [DEBUG] [Thread-193907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:38:15.006 [DEBUG] [Thread-193907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:38:15.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:38:15.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:38:15.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:38:15.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:38:15.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:38:15.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:38:15.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:38:15.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:38:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:38:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.692817 -999.00  +13.00   8.06     81  +10.00 1 2 1 2 1   496    0 1.58 -64.55 ----- 8.1 8.1 269.0 11.9 14.3 -22.1 14.3 -20.9 13.9 -19.6 14.2 -21.0
2026-04-12T18:38:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:38:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:38:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.692817
2026-04-12T18:38:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:38:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:38:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:38:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:38:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:38:15.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:37:37', tmtdew=3.74427, humidity=77.9642, cloud=0.0, wind=13.163, temperature=13.147, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:37:39.389', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:38:15.034 [DEBUG] [Thread-193907] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:38:15.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:38:15.127 [DEBUG] [Thread-193910] [transport.py] [_log()] starting thread (client mode): 0xae535ae0
2026-04-12T18:38:15.127 [DEBUG] [Thread-193910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:38:15.141 [DEBUG] [Thread-193910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:38:15.141 [INFO] [Thread-193910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:38:15.149 [DEBUG] [Thread-193910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:38:15.149 [DEBUG] [Thread-193910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:38:15.149 [DEBUG] [Thread-193910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:38:15.149 [DEBUG] [Thread-193910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:15.149 [DEBUG] [Thread-193910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:15.149 [DEBUG] [Thread-193910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] client lang: <none>
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] server lang: <none>
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] kex follows: False
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] Compression: none
2026-04-12T18:38:15.150 [DEBUG] [Thread-193910] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:38:15.209 [DEBUG] [Thread-193910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:38:15.210 [DEBUG] [Thread-193910] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:38:15.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:38:15.211 [DEBUG] [Thread-193910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:38:15.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:38:15.269 [DEBUG] [Thread-193910] [transport.py] [_log()] userauth is OK
2026-04-12T18:38:15.270 [DEBUG] [Thread-193910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:38:15.270 [DEBUG] [Thread-193910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:38:15.270 [DEBUG] [Thread-193910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:38:15.270 [DEBUG] [Thread-193910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:38:15.288 [INFO] [Thread-193910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:38:15.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:38:15.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:38:16.110 [DEBUG] [Thread-193910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:38:16.110 [DEBUG] [Thread-193910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:38:16.158 [DEBUG] [Thread-193910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:38:16.158 [DEBUG] [Thread-193910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:38:16.167 [DEBUG] [Thread-193910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:38:16.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:38:16.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:38:16.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:38:16.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:38:16.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:38:16.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:38:16.207 [DEBUG] [Thread-193910] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:38:24.272 [DEBUG] [Thread-193912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:39.326 [DEBUG] [Thread-193913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:46.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:38:46.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:38:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:38:47.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 38, 13), 3.69729, 78.1151, 0.0, 10.5527, 12.8904, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:38:47.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:38:13
2026-04-12T18:38:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:38:47.992 [DEBUG] [Thread-193914] [transport.py] [_log()] starting thread (client mode): 0xae5e7910
2026-04-12T18:38:47.992 [DEBUG] [Thread-193914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:38:48.012 [DEBUG] [Thread-193914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:38:48.013 [INFO] [Thread-193914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] client lang: <none>
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] server lang: <none>
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] kex follows: False
2026-04-12T18:38:48.016 [DEBUG] [Thread-193914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:38:48.017 [DEBUG] [Thread-193914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:38:48.017 [DEBUG] [Thread-193914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:38:48.017 [DEBUG] [Thread-193914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:38:48.017 [DEBUG] [Thread-193914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:38:48.017 [DEBUG] [Thread-193914] [transport.py] [_log()] Compression: none
2026-04-12T18:38:48.017 [DEBUG] [Thread-193914] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:38:48.033 [DEBUG] [Thread-193914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:38:48.034 [DEBUG] [Thread-193914] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:38:48.034 [DEBUG] [Thread-193914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:38:48.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:38:48.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:38:48.036 [DEBUG] [Thread-193914] [transport.py] [_log()] userauth is OK
2026-04-12T18:38:48.036 [DEBUG] [Thread-193914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:38:48.036 [DEBUG] [Thread-193914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:38:48.037 [DEBUG] [Thread-193914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:38:48.037 [DEBUG] [Thread-193914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:38:48.061 [INFO] [Thread-193914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:38:48.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:38:48.724 [DEBUG] [Thread-193914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:38:48.724 [DEBUG] [Thread-193914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:38:48.725 [DEBUG] [Thread-193914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:38:48.765 [DEBUG] [Thread-193914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:38:48.765 [DEBUG] [Thread-193914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:38:48.769 [DEBUG] [Thread-193914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:38:48.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:38:48.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:38:48.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:38:48.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:38:48.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:38:48.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:38:48.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:38:48.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:38:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:38:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.693165 -999.00  +13.00   6.59     81  +10.00 1 2 1 2 1   473    0 1.58 -61.54 ----- 6.6 6.6 245.8 11.6 14.3 -22.0 14.2 -21.0 13.9 -19.0 14.2 -21.0
2026-04-12T18:38:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:38:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:38:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.693165
2026-04-12T18:38:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:38:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:38:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:38:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:38:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:38:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:38:13', tmtdew=3.69729, humidity=78.1151, cloud=0.0, wind=10.5527, temperature=12.8904, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:38:09.456', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:38:48.798 [DEBUG] [Thread-193914] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:38:48.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:38:48.890 [DEBUG] [Thread-193917] [transport.py] [_log()] starting thread (client mode): 0xb0f6d6f0
2026-04-12T18:38:48.890 [DEBUG] [Thread-193917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:38:48.905 [DEBUG] [Thread-193917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:38:48.905 [INFO] [Thread-193917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:38:48.912 [DEBUG] [Thread-193917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:38:48.912 [DEBUG] [Thread-193917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] client lang: <none>
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] server lang: <none>
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] kex follows: False
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] Compression: none
2026-04-12T18:38:48.913 [DEBUG] [Thread-193917] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:38:48.972 [DEBUG] [Thread-193917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:38:48.972 [DEBUG] [Thread-193917] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:38:48.973 [DEBUG] [Thread-193917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:38:48.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:38:48.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:38:49.028 [DEBUG] [Thread-193917] [transport.py] [_log()] userauth is OK
2026-04-12T18:38:49.028 [DEBUG] [Thread-193917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:38:49.029 [DEBUG] [Thread-193917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:38:49.029 [DEBUG] [Thread-193917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:38:49.029 [DEBUG] [Thread-193917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:38:49.046 [INFO] [Thread-193917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:38:49.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:38:49.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:38:49.899 [DEBUG] [Thread-193917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:38:49.899 [DEBUG] [Thread-193917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:38:49.947 [DEBUG] [Thread-193917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:38:49.948 [DEBUG] [Thread-193917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:38:49.957 [DEBUG] [Thread-193917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:38:49.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:38:49.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:38:49.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:38:49.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:38:49.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:38:49.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:38:49.994 [DEBUG] [Thread-193917] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:38:51.155 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:51.156 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:51.483 [DEBUG] [Thread-193919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:54.363 [DEBUG] [Thread-193920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:38:59.135 [DEBUG] [Thread-193921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:09.418 [DEBUG] [Thread-193922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:39:20.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:39:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:39:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 38, 49), 3.67569, 78.3296, 0.0, 11.1521, 13.1808, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:39:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:38:49
2026-04-12T18:39:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:39:21.791 [DEBUG] [Thread-193923] [transport.py] [_log()] starting thread (client mode): 0xae5a4520
2026-04-12T18:39:21.791 [DEBUG] [Thread-193923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:39:21.810 [DEBUG] [Thread-193923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:39:21.810 [INFO] [Thread-193923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:39:21.822 [DEBUG] [Thread-193923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:39:21.822 [DEBUG] [Thread-193923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] client lang: <none>
2026-04-12T18:39:21.823 [DEBUG] [Thread-193923] [transport.py] [_log()] server lang: <none>
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] kex follows: False
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] Compression: none
2026-04-12T18:39:21.824 [DEBUG] [Thread-193923] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:39:21.843 [DEBUG] [Thread-193923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:39:21.843 [DEBUG] [Thread-193923] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:39:21.844 [DEBUG] [Thread-193923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:39:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:39:21.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:39:21.846 [DEBUG] [Thread-193923] [transport.py] [_log()] userauth is OK
2026-04-12T18:39:21.846 [DEBUG] [Thread-193923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:39:21.846 [DEBUG] [Thread-193923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:39:21.846 [DEBUG] [Thread-193923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:39:21.846 [DEBUG] [Thread-193923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:39:21.872 [INFO] [Thread-193923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:39:21.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:39:22.473 [DEBUG] [Thread-193923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:39:22.483 [DEBUG] [Thread-193923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:39:22.484 [DEBUG] [Thread-193923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:39:22.515 [DEBUG] [Thread-193923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:39:22.515 [DEBUG] [Thread-193923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:39:22.519 [DEBUG] [Thread-193923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:39:22.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:39:22.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:39:22.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:39:22.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:39:22.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:39:22.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:39:22.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:39:22.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:39:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:39:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.693859 -999.00  +13.00   8.92     81   +9.90 1 2 1 2 1   427    0 1.81 -54.13 ----- 8.9 8.9 246.2 11.6 14.3 -22.1 14.2 -20.8 13.8 -19.0 14.2 -21.0
2026-04-12T18:39:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:39:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:39:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.693859
2026-04-12T18:39:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:39:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:39:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:39:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:39:22.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:39:22.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:38:49', tmtdew=3.67569, humidity=78.3296, cloud=0.0, wind=11.1521, temperature=13.1808, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:39:09.418', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:39:22.545 [DEBUG] [Thread-193923] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:39:22.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:39:22.638 [DEBUG] [Thread-193926] [transport.py] [_log()] starting thread (client mode): 0xb0fce1d0
2026-04-12T18:39:22.638 [DEBUG] [Thread-193926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:39:22.653 [DEBUG] [Thread-193926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:39:22.653 [INFO] [Thread-193926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:39:22.660 [DEBUG] [Thread-193926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] client lang: <none>
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] server lang: <none>
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] kex follows: False
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] Compression: none
2026-04-12T18:39:22.661 [DEBUG] [Thread-193926] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:39:22.718 [DEBUG] [Thread-193926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:39:22.719 [DEBUG] [Thread-193926] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:39:22.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:39:22.720 [DEBUG] [Thread-193926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:39:22.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:39:22.777 [DEBUG] [Thread-193926] [transport.py] [_log()] userauth is OK
2026-04-12T18:39:22.777 [DEBUG] [Thread-193926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:39:22.777 [DEBUG] [Thread-193926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:39:22.778 [DEBUG] [Thread-193926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:39:22.778 [DEBUG] [Thread-193926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:39:22.796 [INFO] [Thread-193926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:39:22.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:39:22.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:39:23.631 [DEBUG] [Thread-193926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:39:23.632 [DEBUG] [Thread-193926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:39:23.680 [DEBUG] [Thread-193926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:39:23.680 [DEBUG] [Thread-193926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:39:23.689 [DEBUG] [Thread-193926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:39:23.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:39:23.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:39:23.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:39:23.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:39:23.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:39:23.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:39:23.726 [DEBUG] [Thread-193926] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:39:24.456 [DEBUG] [Thread-193928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:39.504 [DEBUG] [Thread-193929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:51.553 [DEBUG] [Thread-193930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:39:53.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:39:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:39:54.542 [DEBUG] [Thread-193931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:55.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 39, 24), 3.73377, 78.1814, 0.0, 12.2108, 12.9072, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:39:55.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:39:24
2026-04-12T18:39:55.291 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:55.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:39:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:39:55.663 [DEBUG] [Thread-193932] [transport.py] [_log()] starting thread (client mode): 0xb0f6ca90
2026-04-12T18:39:55.663 [DEBUG] [Thread-193932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:39:55.680 [DEBUG] [Thread-193932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:39:55.681 [INFO] [Thread-193932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:39:55.684 [DEBUG] [Thread-193932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:39:55.684 [DEBUG] [Thread-193932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:39:55.684 [DEBUG] [Thread-193932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] client lang: <none>
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] server lang: <none>
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] kex follows: False
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:39:55.685 [DEBUG] [Thread-193932] [transport.py] [_log()] Compression: none
2026-04-12T18:39:55.686 [DEBUG] [Thread-193932] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:39:55.704 [DEBUG] [Thread-193932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:39:55.704 [DEBUG] [Thread-193932] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:39:55.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:39:55.705 [DEBUG] [Thread-193932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:39:55.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:39:55.707 [DEBUG] [Thread-193932] [transport.py] [_log()] userauth is OK
2026-04-12T18:39:55.708 [DEBUG] [Thread-193932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:39:55.708 [DEBUG] [Thread-193932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:39:55.709 [DEBUG] [Thread-193932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:39:55.709 [DEBUG] [Thread-193932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:39:55.732 [INFO] [Thread-193932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:39:55.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:39:56.335 [DEBUG] [Thread-193932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:39:56.335 [DEBUG] [Thread-193932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:39:56.335 [DEBUG] [Thread-193932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:39:56.376 [DEBUG] [Thread-193932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:39:56.376 [DEBUG] [Thread-193932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:39:56.378 [DEBUG] [Thread-193932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:39:56.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:39:56.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:39:56.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:39:56.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:39:56.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:39:56.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.694206 -999.00  +13.00   8.98     81   +9.90 1 2 1 2 1   403    0 1.92 -49.41 ----- 9.0 9.0 253.3 10.7 14.3 -22.0 14.2 -20.8 13.8 -18.9 14.1 -20.9
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.694206
2026-04-12T18:39:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:39:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:39:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:39:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:39:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:39:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:39:24', tmtdew=3.73377, humidity=78.1814, cloud=0.0, wind=12.2108, temperature=12.9072, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:39:39.398', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:39:56.396 [DEBUG] [Thread-193932] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:39:56.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:39:56.478 [DEBUG] [Thread-193935] [transport.py] [_log()] starting thread (client mode): 0xb0f40e80
2026-04-12T18:39:56.478 [DEBUG] [Thread-193935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:39:56.493 [DEBUG] [Thread-193935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:39:56.493 [INFO] [Thread-193935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] client lang: <none>
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] server lang: <none>
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] kex follows: False
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] Compression: none
2026-04-12T18:39:56.501 [DEBUG] [Thread-193935] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:39:56.557 [DEBUG] [Thread-193935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:39:56.558 [DEBUG] [Thread-193935] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:39:56.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:39:56.559 [DEBUG] [Thread-193935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:39:56.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:39:56.613 [DEBUG] [Thread-193935] [transport.py] [_log()] userauth is OK
2026-04-12T18:39:56.614 [DEBUG] [Thread-193935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:39:56.614 [DEBUG] [Thread-193935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:39:56.614 [DEBUG] [Thread-193935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:39:56.614 [DEBUG] [Thread-193935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:39:56.633 [INFO] [Thread-193935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:39:56.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:39:56.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:39:57.493 [DEBUG] [Thread-193935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:39:57.493 [DEBUG] [Thread-193935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:39:57.541 [DEBUG] [Thread-193935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:39:57.541 [DEBUG] [Thread-193935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:39:57.550 [DEBUG] [Thread-193935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:39:57.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:39:57.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:39:57.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:39:57.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:39:57.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:39:57.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:39:57.589 [DEBUG] [Thread-193935] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:40:09.578 [DEBUG] [Thread-193937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:40:24.634 [DEBUG] [Thread-193938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:40:27.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:40:27.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:40:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:40:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 40, 1), 3.73413, 78.182, 0.0, 10.9231, 12.9243, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:40:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:40:01
2026-04-12T18:40:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:40:29.388 [DEBUG] [Thread-193939] [transport.py] [_log()] starting thread (client mode): 0xb0fcc550
2026-04-12T18:40:29.389 [DEBUG] [Thread-193939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:40:29.404 [DEBUG] [Thread-193939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:40:29.405 [INFO] [Thread-193939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] client lang: <none>
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] server lang: <none>
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] kex follows: False
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:40:29.406 [DEBUG] [Thread-193939] [transport.py] [_log()] Compression: none
2026-04-12T18:40:29.407 [DEBUG] [Thread-193939] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:40:29.415 [DEBUG] [Thread-193939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:40:29.416 [DEBUG] [Thread-193939] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:40:29.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:40:29.416 [DEBUG] [Thread-193939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:40:29.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:40:29.418 [DEBUG] [Thread-193939] [transport.py] [_log()] userauth is OK
2026-04-12T18:40:29.419 [DEBUG] [Thread-193939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:40:29.419 [DEBUG] [Thread-193939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:40:29.419 [DEBUG] [Thread-193939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:40:29.419 [DEBUG] [Thread-193939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:40:29.451 [INFO] [Thread-193939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:40:29.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:40:29.576 [DEBUG] [Thread-193921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:40:30.012 [DEBUG] [Thread-193939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:40:30.014 [DEBUG] [Thread-193939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:40:30.014 [DEBUG] [Thread-193939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:40:30.054 [DEBUG] [Thread-193939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:40:30.055 [DEBUG] [Thread-193939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:40:30.058 [DEBUG] [Thread-193939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:40:30.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:40:30.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:40:30.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:40:30.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:40:30.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:40:30.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:40:30.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:40:30.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:40:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:40:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.694553 -999.00  +13.00   7.06     81   +9.90 1 2 1 2 1   380    0 1.87 -52.12 ----- 7.1 7.1 255.5 10.3 14.2 -22.0 14.2 -20.7 13.8 -18.9 14.1 -20.9
2026-04-12T18:40:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:40:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:40:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.694553
2026-04-12T18:40:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:40:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:40:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:40:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:40:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:40:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:40:01', tmtdew=3.73413, humidity=78.182, cloud=0.0, wind=10.9231, temperature=12.9243, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:40:09.379', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:40:30.080 [DEBUG] [Thread-193939] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:40:30.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:40:30.175 [DEBUG] [Thread-193942] [transport.py] [_log()] starting thread (client mode): 0xb0fce1d0
2026-04-12T18:40:30.175 [DEBUG] [Thread-193942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:40:30.191 [DEBUG] [Thread-193942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:40:30.191 [INFO] [Thread-193942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:40:30.201 [DEBUG] [Thread-193942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] client lang: <none>
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] server lang: <none>
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] kex follows: False
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:40:30.202 [DEBUG] [Thread-193942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:40:30.203 [DEBUG] [Thread-193942] [transport.py] [_log()] Compression: none
2026-04-12T18:40:30.203 [DEBUG] [Thread-193942] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:40:30.257 [DEBUG] [Thread-193942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:40:30.257 [DEBUG] [Thread-193942] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:40:30.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:40:30.258 [DEBUG] [Thread-193942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:40:30.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:40:30.318 [DEBUG] [Thread-193942] [transport.py] [_log()] userauth is OK
2026-04-12T18:40:30.318 [DEBUG] [Thread-193942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:40:30.318 [DEBUG] [Thread-193942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:40:30.318 [DEBUG] [Thread-193942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:40:30.318 [DEBUG] [Thread-193942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:40:30.338 [INFO] [Thread-193942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:40:30.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:40:30.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:40:31.157 [DEBUG] [Thread-193942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:40:31.158 [DEBUG] [Thread-193942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:40:31.208 [DEBUG] [Thread-193942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:40:31.209 [DEBUG] [Thread-193942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:40:31.218 [DEBUG] [Thread-193942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:40:31.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:40:31.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:40:31.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:40:31.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:40:31.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:40:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:40:31.257 [DEBUG] [Thread-193942] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:40:39.674 [DEBUG] [Thread-193944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:40:51.634 [DEBUG] [Thread-193945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:40:54.742 [DEBUG] [Thread-193946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:41:00.490 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:41:00.492 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:41:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:41:01.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:41:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:41:02.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 40, 36), 3.66006, 78.3975, 0.0, 11.8224, 13.0826, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:41:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:40:36
2026-04-12T18:41:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:41:03.044 [DEBUG] [Thread-193947] [transport.py] [_log()] starting thread (client mode): 0xae50bb50
2026-04-12T18:41:03.044 [DEBUG] [Thread-193947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:41:03.065 [DEBUG] [Thread-193947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:41:03.065 [INFO] [Thread-193947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:41:03.068 [DEBUG] [Thread-193947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] client lang: <none>
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] server lang: <none>
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] kex follows: False
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] Compression: none
2026-04-12T18:41:03.069 [DEBUG] [Thread-193947] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:41:03.086 [DEBUG] [Thread-193947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:41:03.087 [DEBUG] [Thread-193947] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:41:03.087 [DEBUG] [Thread-193947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:41:03.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:41:03.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:41:03.088 [DEBUG] [Thread-193947] [transport.py] [_log()] userauth is OK
2026-04-12T18:41:03.088 [DEBUG] [Thread-193947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:41:03.088 [DEBUG] [Thread-193947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:41:03.088 [DEBUG] [Thread-193947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:41:03.088 [DEBUG] [Thread-193947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:41:03.105 [INFO] [Thread-193947] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:41:03.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:41:03.707 [DEBUG] [Thread-193947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:41:03.707 [DEBUG] [Thread-193947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:41:03.708 [DEBUG] [Thread-193947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:41:03.748 [DEBUG] [Thread-193947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:41:03.748 [DEBUG] [Thread-193947] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:41:03.754 [DEBUG] [Thread-193947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:41:03.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:41:03.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:41:03.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:41:03.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:41:03.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:41:03.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:41:03.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:41:03.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:41:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:41:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.694901 -999.00  +13.00   6.71     81   +9.90 1 2 1 2 1   358    0 1.89 -49.25 ----- 6.7 6.7 259.1 8.4 14.2 -21.8 14.1 -20.7 13.8 -18.9 14.1 -20.7
2026-04-12T18:41:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:41:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:41:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.694901
2026-04-12T18:41:03.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:41:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:41:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:41:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:41:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:41:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:40:36', tmtdew=3.66006, humidity=78.3975, cloud=0.0, wind=11.8224, temperature=13.0826, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:40:39.446', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:41:03.780 [DEBUG] [Thread-193947] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:41:03.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:41:03.874 [DEBUG] [Thread-193950] [transport.py] [_log()] starting thread (client mode): 0xae508670
2026-04-12T18:41:03.874 [DEBUG] [Thread-193950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:41:03.893 [DEBUG] [Thread-193950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:41:03.893 [INFO] [Thread-193950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:41:03.900 [DEBUG] [Thread-193950] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:41:03.900 [DEBUG] [Thread-193950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] client lang: <none>
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] server lang: <none>
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] kex follows: False
2026-04-12T18:41:03.901 [DEBUG] [Thread-193950] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:41:03.902 [DEBUG] [Thread-193950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:41:03.902 [DEBUG] [Thread-193950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:41:03.902 [DEBUG] [Thread-193950] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:41:03.902 [DEBUG] [Thread-193950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:41:03.902 [DEBUG] [Thread-193950] [transport.py] [_log()] Compression: none
2026-04-12T18:41:03.902 [DEBUG] [Thread-193950] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:41:03.959 [DEBUG] [Thread-193950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:41:03.959 [DEBUG] [Thread-193950] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:41:03.960 [DEBUG] [Thread-193950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:41:03.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:41:03.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:41:04.015 [DEBUG] [Thread-193950] [transport.py] [_log()] userauth is OK
2026-04-12T18:41:04.015 [DEBUG] [Thread-193950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:41:04.015 [DEBUG] [Thread-193950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:41:04.015 [DEBUG] [Thread-193950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:41:04.015 [DEBUG] [Thread-193950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:41:04.034 [INFO] [Thread-193950] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:41:04.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:41:04.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:41:04.864 [DEBUG] [Thread-193950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:41:04.864 [DEBUG] [Thread-193950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:41:04.912 [DEBUG] [Thread-193950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:41:04.912 [DEBUG] [Thread-193950] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:41:04.921 [DEBUG] [Thread-193950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:41:04.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:41:04.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:41:04.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:41:04.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:41:04.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:41:04.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:41:04.958 [DEBUG] [Thread-193950] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:41:09.779 [DEBUG] [Thread-193952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:41:24.834 [DEBUG] [Thread-193953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:41:34.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:41:34.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:41:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:41:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 41, 12), 3.65269, 78.3479, 0.0, 9.26424, 12.8745, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:41:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:41:12
2026-04-12T18:41:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:41:36.816 [DEBUG] [Thread-193954] [transport.py] [_log()] starting thread (client mode): 0xae5e49a0
2026-04-12T18:41:36.816 [DEBUG] [Thread-193954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:41:36.827 [DEBUG] [Thread-193954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:41:36.827 [INFO] [Thread-193954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:41:36.830 [DEBUG] [Thread-193954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:41:36.830 [DEBUG] [Thread-193954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] client lang: <none>
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] server lang: <none>
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] kex follows: False
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] Compression: none
2026-04-12T18:41:36.831 [DEBUG] [Thread-193954] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:41:36.847 [DEBUG] [Thread-193954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:41:36.848 [DEBUG] [Thread-193954] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:41:36.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:41:36.849 [DEBUG] [Thread-193954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:41:36.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:41:36.851 [DEBUG] [Thread-193954] [transport.py] [_log()] userauth is OK
2026-04-12T18:41:36.852 [DEBUG] [Thread-193954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:41:36.852 [DEBUG] [Thread-193954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:41:36.852 [DEBUG] [Thread-193954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:41:36.852 [DEBUG] [Thread-193954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:41:36.878 [INFO] [Thread-193954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:41:36.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:41:37.482 [DEBUG] [Thread-193954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:41:37.482 [DEBUG] [Thread-193954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:41:37.482 [DEBUG] [Thread-193954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:41:37.523 [DEBUG] [Thread-193954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:41:37.523 [DEBUG] [Thread-193954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:41:37.526 [DEBUG] [Thread-193954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:41:37.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:41:37.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:41:37.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:41:37.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:41:37.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:41:37.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:41:37.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:41:37.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:41:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:41:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.695248 -999.00  +13.00  10.12     81   +9.90 1 2 1 2 1   336    0 1.87 -49.55 ----- 10.1 10.1 251.0 14.4 14.2 -22.0 14.2 -20.7 13.8 -18.8 14.1 -20.9
2026-04-12T18:41:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:41:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:41:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.695248
2026-04-12T18:41:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:41:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:41:37.548 [DEBUG] [Thread-193954] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:41:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:41:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:41:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:41:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:41:12', tmtdew=3.65269, humidity=78.3479, cloud=0.0, wind=9.26424, temperature=12.8745, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:41:09.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:41:37.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:41:37.645 [DEBUG] [Thread-193957] [transport.py] [_log()] starting thread (client mode): 0xae5e4a30
2026-04-12T18:41:37.645 [DEBUG] [Thread-193957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:41:37.660 [DEBUG] [Thread-193957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:41:37.660 [INFO] [Thread-193957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:41:37.668 [DEBUG] [Thread-193957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:41:37.668 [DEBUG] [Thread-193957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:41:37.668 [DEBUG] [Thread-193957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:41:37.668 [DEBUG] [Thread-193957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:37.668 [DEBUG] [Thread-193957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:41:37.668 [DEBUG] [Thread-193957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] client lang: <none>
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] server lang: <none>
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] kex follows: False
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] Compression: none
2026-04-12T18:41:37.669 [DEBUG] [Thread-193957] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:41:37.724 [DEBUG] [Thread-193957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:41:37.724 [DEBUG] [Thread-193957] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:41:37.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:41:37.725 [DEBUG] [Thread-193957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:41:37.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:41:37.782 [DEBUG] [Thread-193957] [transport.py] [_log()] userauth is OK
2026-04-12T18:41:37.782 [DEBUG] [Thread-193957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:41:37.782 [DEBUG] [Thread-193957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:41:37.782 [DEBUG] [Thread-193957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:41:37.782 [DEBUG] [Thread-193957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:41:37.812 [INFO] [Thread-193957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:41:37.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:41:37.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:41:38.667 [DEBUG] [Thread-193957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:41:38.668 [DEBUG] [Thread-193957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:41:38.715 [DEBUG] [Thread-193957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:41:38.715 [DEBUG] [Thread-193957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:41:38.725 [DEBUG] [Thread-193957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:41:38.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:41: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')
2026-04-12T18:41:38.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:41:38.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:41:38.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:41:38.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:41:38.760 [DEBUG] [Thread-193957] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:41:39.868 [DEBUG] [Thread-193959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:41:51.707 [DEBUG] [Thread-193960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:41:54.917 [DEBUG] [Thread-193961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:05.247 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:05.248 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:42:08.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:42:08.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:42:09.958 [DEBUG] [Thread-193962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 41, 47), 3.60433, 78.6967, 0.0, 10.0584, 13.1165, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:42:10.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:41:47
2026-04-12T18:42:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:42:10.577 [DEBUG] [Thread-193963] [transport.py] [_log()] starting thread (client mode): 0xb0f41510
2026-04-12T18:42:10.577 [DEBUG] [Thread-193963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:42:10.598 [DEBUG] [Thread-193963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:42:10.598 [INFO] [Thread-193963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:42:10.602 [DEBUG] [Thread-193963] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:42:10.602 [DEBUG] [Thread-193963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:42:10.602 [DEBUG] [Thread-193963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:42:10.602 [DEBUG] [Thread-193963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:10.602 [DEBUG] [Thread-193963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:10.602 [DEBUG] [Thread-193963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:10.602 [DEBUG] [Thread-193963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] client lang: <none>
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] server lang: <none>
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] kex follows: False
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] Compression: none
2026-04-12T18:42:10.603 [DEBUG] [Thread-193963] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:42:10.622 [DEBUG] [Thread-193963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:42:10.622 [DEBUG] [Thread-193963] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:42:10.623 [DEBUG] [Thread-193963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:42:10.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:42:10.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:42:10.625 [DEBUG] [Thread-193963] [transport.py] [_log()] userauth is OK
2026-04-12T18:42:10.625 [DEBUG] [Thread-193963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:42:10.625 [DEBUG] [Thread-193963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:42:10.625 [DEBUG] [Thread-193963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:42:10.625 [DEBUG] [Thread-193963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:42:10.650 [INFO] [Thread-193963] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:42:10.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:42:11.260 [DEBUG] [Thread-193963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:42:11.261 [DEBUG] [Thread-193963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:42:11.261 [DEBUG] [Thread-193963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:42:11.301 [DEBUG] [Thread-193963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:42:11.302 [DEBUG] [Thread-193963] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:42:11.305 [DEBUG] [Thread-193963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:42:11.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:42:11.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:42:11.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:42:11.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:42:11.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:42:11.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:42:11.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:42:11.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:42:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:42:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.695595 -999.00  +13.00   7.10     81   +9.80 1 2 1 2 1   314    0 1.94 -46.63 ----- 7.1 7.1 254.6 13.4 14.2 -21.9 14.1 -20.6 13.8 -18.7 14.0 -20.7
2026-04-12T18:42:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:42:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:42:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.695595
2026-04-12T18:42:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:42:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:42:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:42:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:42:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:42:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:41:47', tmtdew=3.60433, humidity=78.6967, cloud=0.0, wind=10.0584, temperature=13.1165, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:41:39.408', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:42:11.334 [DEBUG] [Thread-193963] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:42:11.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:42:11.417 [DEBUG] [Thread-193966] [transport.py] [_log()] starting thread (client mode): 0xae5e4fa0
2026-04-12T18:42:11.418 [DEBUG] [Thread-193966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:42:11.433 [DEBUG] [Thread-193966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:42:11.434 [INFO] [Thread-193966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:42:11.441 [DEBUG] [Thread-193966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:42:11.442 [DEBUG] [Thread-193966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:42:11.442 [DEBUG] [Thread-193966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:42:11.442 [DEBUG] [Thread-193966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:11.442 [DEBUG] [Thread-193966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:11.442 [DEBUG] [Thread-193966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:11.442 [DEBUG] [Thread-193966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] client lang: <none>
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] server lang: <none>
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] kex follows: False
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] Compression: none
2026-04-12T18:42:11.443 [DEBUG] [Thread-193966] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:42:11.501 [DEBUG] [Thread-193966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:42:11.502 [DEBUG] [Thread-193966] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:42:11.502 [DEBUG] [Thread-193966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:42:11.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:42:11.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:42:11.557 [DEBUG] [Thread-193966] [transport.py] [_log()] userauth is OK
2026-04-12T18:42:11.558 [DEBUG] [Thread-193966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:42:11.558 [DEBUG] [Thread-193966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:42:11.558 [DEBUG] [Thread-193966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:42:11.558 [DEBUG] [Thread-193966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:42:11.577 [INFO] [Thread-193966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:42:11.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:42:11.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:42:12.423 [DEBUG] [Thread-193966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:42:12.423 [DEBUG] [Thread-193966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:42:12.471 [DEBUG] [Thread-193966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:42:12.471 [DEBUG] [Thread-193966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:42:12.481 [DEBUG] [Thread-193966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:42:12.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:42:12.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:42:12.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:42:12.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:42:12.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:42:12.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:42:12.519 [DEBUG] [Thread-193966] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:42:25.000 [DEBUG] [Thread-193968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:29.803 [DEBUG] [Thread-193921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:40.053 [DEBUG] [Thread-193969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:42:42.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:42: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
2026-04-12T18:42:43.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 42, 23), 3.70844, 78.3152, 0.0, 11.2936, 12.8583, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:42:43.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:42:23
2026-04-12T18:42:44.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:42:44.312 [DEBUG] [Thread-193970] [transport.py] [_log()] starting thread (client mode): 0xae50ba90
2026-04-12T18:42:44.312 [DEBUG] [Thread-193970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:42:44.332 [DEBUG] [Thread-193970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:42:44.332 [INFO] [Thread-193970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:44.336 [DEBUG] [Thread-193970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] client lang: <none>
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] server lang: <none>
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] kex follows: False
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:42:44.337 [DEBUG] [Thread-193970] [transport.py] [_log()] Compression: none
2026-04-12T18:42:44.338 [DEBUG] [Thread-193970] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:42:44.357 [DEBUG] [Thread-193970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:42:44.357 [DEBUG] [Thread-193970] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:42:44.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:42:44.358 [DEBUG] [Thread-193970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:42:44.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:42:44.361 [DEBUG] [Thread-193970] [transport.py] [_log()] userauth is OK
2026-04-12T18:42:44.361 [DEBUG] [Thread-193970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:42:44.361 [DEBUG] [Thread-193970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:42:44.361 [DEBUG] [Thread-193970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:42:44.361 [DEBUG] [Thread-193970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:42:44.394 [INFO] [Thread-193970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:42:44.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:42:45.046 [DEBUG] [Thread-193970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:42:45.046 [DEBUG] [Thread-193970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:42:45.047 [DEBUG] [Thread-193970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:42:45.087 [DEBUG] [Thread-193970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:42:45.087 [DEBUG] [Thread-193970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:42:45.091 [DEBUG] [Thread-193970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:42:45.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:42:45.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:42:45.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:42:45.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:42:45.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:42:45.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:42:45.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:42:45.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:42:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:42:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.695942 -999.00  +13.00   9.19     81   +9.80 1 2 1 2 1   293    0 2.01 -44.85 ----- 9.2 9.2 261.8 12.5 14.2 -21.8 14.1 -20.7 13.7 -18.8 14.0 -20.7
2026-04-12T18:42:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:42:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:42:45.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.695942
2026-04-12T18:42:45.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:42:45.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:42:45.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:42:45.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:42:45.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:42:45.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:42:23', tmtdew=3.70844, humidity=78.3152, cloud=0.0, wind=11.2936, temperature=12.8583, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:42:09.389', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:42:45.117 [DEBUG] [Thread-193970] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:42:45.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:42:45.212 [DEBUG] [Thread-193973] [transport.py] [_log()] starting thread (client mode): 0xae5f1e70
2026-04-12T18:42:45.212 [DEBUG] [Thread-193973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:42:45.227 [DEBUG] [Thread-193973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:42:45.227 [INFO] [Thread-193973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:42:45.235 [DEBUG] [Thread-193973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:42:45.235 [DEBUG] [Thread-193973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:42:45.235 [DEBUG] [Thread-193973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:42:45.235 [DEBUG] [Thread-193973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:45.235 [DEBUG] [Thread-193973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:42:45.235 [DEBUG] [Thread-193973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] client lang: <none>
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] server lang: <none>
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] kex follows: False
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] Compression: none
2026-04-12T18:42:45.236 [DEBUG] [Thread-193973] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:42:45.292 [DEBUG] [Thread-193973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:42:45.292 [DEBUG] [Thread-193973] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:42:45.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:42:45.293 [DEBUG] [Thread-193973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:42:45.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:42:45.348 [DEBUG] [Thread-193973] [transport.py] [_log()] userauth is OK
2026-04-12T18:42:45.349 [DEBUG] [Thread-193973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:42:45.349 [DEBUG] [Thread-193973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:42:45.349 [DEBUG] [Thread-193973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:42:45.349 [DEBUG] [Thread-193973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:42:45.368 [INFO] [Thread-193973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:42:45.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:42:45.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:42:46.197 [DEBUG] [Thread-193973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:42:46.198 [DEBUG] [Thread-193973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:42:46.245 [DEBUG] [Thread-193973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:42:46.245 [DEBUG] [Thread-193973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:42:46.254 [DEBUG] [Thread-193973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:42:46.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:42:46.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:42:46.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:42:46.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:42:46.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:42:46.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:42:46.293 [DEBUG] [Thread-193973] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:42:51.795 [DEBUG] [Thread-193975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:42:55.092 [DEBUG] [Thread-193976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:43:10.075 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:43:10.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:43:10.152 [DEBUG] [Thread-193977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:43:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:43:16.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:43:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:43:17.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 42, 58), 3.77675, 77.7161, 0.0, 11.2406, 12.892, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:43:17.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:42:58
2026-04-12T18:43:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:43:18.100 [DEBUG] [Thread-193978] [transport.py] [_log()] starting thread (client mode): 0xb0f42e60
2026-04-12T18:43:18.100 [DEBUG] [Thread-193978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:43:18.113 [DEBUG] [Thread-193978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:43:18.113 [INFO] [Thread-193978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] client lang: <none>
2026-04-12T18:43:18.116 [DEBUG] [Thread-193978] [transport.py] [_log()] server lang: <none>
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] kex follows: False
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] Compression: none
2026-04-12T18:43:18.117 [DEBUG] [Thread-193978] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:43:18.137 [DEBUG] [Thread-193978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:43:18.138 [DEBUG] [Thread-193978] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:43:18.138 [DEBUG] [Thread-193978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:43:18.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:43:18.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:43:18.140 [DEBUG] [Thread-193978] [transport.py] [_log()] userauth is OK
2026-04-12T18:43:18.140 [DEBUG] [Thread-193978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:43:18.140 [DEBUG] [Thread-193978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:43:18.140 [DEBUG] [Thread-193978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:43:18.140 [DEBUG] [Thread-193978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:43:18.164 [INFO] [Thread-193978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:43:18.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:43:18.776 [DEBUG] [Thread-193978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:43:18.777 [DEBUG] [Thread-193978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:43:18.777 [DEBUG] [Thread-193978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:43:18.817 [DEBUG] [Thread-193978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:43:18.817 [DEBUG] [Thread-193978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:43:18.821 [DEBUG] [Thread-193978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:43:18.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:43:18.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:43:18.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:43:18.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:43:18.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:43:18.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:43:18.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:43:18.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:43:18.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:43:18.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.696637 -999.00  +13.00  10.48     81   +9.80 1 2 1 2 1   253    0 2.01 -42.46 ----- 10.5 10.5 255.0 12.3 14.1 -21.9 14.1 -20.6 13.7 -18.5 14.0 -20.8
2026-04-12T18:43:18.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:43:18.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:43:18.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.696637
2026-04-12T18:43:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:43:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:43:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:43:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:43:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:43:18.848 [DEBUG] [Thread-193978] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:43:18.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:42:58', tmtdew=3.77675, humidity=77.7161, cloud=0.0, wind=11.2406, temperature=12.892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:43:09.437', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:43:18.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:43:18.940 [DEBUG] [Thread-193981] [transport.py] [_log()] starting thread (client mode): 0xb0fcf6a0
2026-04-12T18:43:18.940 [DEBUG] [Thread-193981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:43:18.956 [DEBUG] [Thread-193981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:43:18.956 [INFO] [Thread-193981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:43:18.964 [DEBUG] [Thread-193981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:43:18.964 [DEBUG] [Thread-193981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:43:18.964 [DEBUG] [Thread-193981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:43:18.964 [DEBUG] [Thread-193981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:18.964 [DEBUG] [Thread-193981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] client lang: <none>
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] server lang: <none>
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] kex follows: False
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] Compression: none
2026-04-12T18:43:18.965 [DEBUG] [Thread-193981] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:43:19.023 [DEBUG] [Thread-193981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:43:19.023 [DEBUG] [Thread-193981] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:43:19.024 [DEBUG] [Thread-193981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:43:19.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:43:19.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:43:19.080 [DEBUG] [Thread-193981] [transport.py] [_log()] userauth is OK
2026-04-12T18:43:19.080 [DEBUG] [Thread-193981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:43:19.080 [DEBUG] [Thread-193981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:43:19.080 [DEBUG] [Thread-193981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:43:19.080 [DEBUG] [Thread-193981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:43:19.102 [INFO] [Thread-193981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:43:19.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:43:19.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:43:19.920 [DEBUG] [Thread-193981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:43:19.920 [DEBUG] [Thread-193981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:43:19.968 [DEBUG] [Thread-193981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:43:19.968 [DEBUG] [Thread-193981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:43:19.978 [DEBUG] [Thread-193981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:43:19.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:43:19.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:43:19.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:43:20.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:43:20.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:43:20.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:43:20.015 [DEBUG] [Thread-193981] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:43:25.190 [DEBUG] [Thread-193983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:43:40.246 [DEBUG] [Thread-193984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:43:50.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:43:50.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:43:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:43:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 43, 33), 3.66608, 78.366, 0.0, 12.0694, 13.084, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:43:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:43:33
2026-04-12T18:43:51.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:43:51.848 [DEBUG] [Thread-193985] [transport.py] [_log()] starting thread (client mode): 0xae5a4d00
2026-04-12T18:43:51.849 [DEBUG] [Thread-193985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:43:51.868 [DEBUG] [Thread-193986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:43:51.869 [DEBUG] [Thread-193985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:43:51.869 [INFO] [Thread-193985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] client lang: <none>
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] server lang: <none>
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] kex follows: False
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] Compression: none
2026-04-12T18:43:51.872 [DEBUG] [Thread-193985] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:43:51.888 [DEBUG] [Thread-193985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:43:51.888 [DEBUG] [Thread-193985] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:43:51.888 [DEBUG] [Thread-193985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:43:51.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:43:51.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:43:51.889 [DEBUG] [Thread-193985] [transport.py] [_log()] userauth is OK
2026-04-12T18:43:51.889 [DEBUG] [Thread-193985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:43:51.889 [DEBUG] [Thread-193985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:43:51.889 [DEBUG] [Thread-193985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:43:51.889 [DEBUG] [Thread-193985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:43:51.899 [INFO] [Thread-193985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:43:51.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:43:52.469 [DEBUG] [Thread-193985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:43:52.470 [DEBUG] [Thread-193985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:43:52.470 [DEBUG] [Thread-193985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:43:52.510 [DEBUG] [Thread-193985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:43:52.510 [DEBUG] [Thread-193985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:43:52.514 [DEBUG] [Thread-193985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:43:52.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:43:52.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:43:52.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:43:52.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:43:52.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:43:52.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:43:52.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:43:52.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:43:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:43:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.696984 -999.00  +13.00  11.44     80   +9.70 1 2 1 2 1   235    0 2.06 -40.60 ----- 11.4 11.4 254.2 14.6 14.1 -21.8 14.0 -20.6 13.7 -18.6 14.0 -20.6
2026-04-12T18:43:52.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:43:52.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:43:52.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.696984
2026-04-12T18:43:52.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:43:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:43:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:43:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:43:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:43:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:43:33', tmtdew=3.66608, humidity=78.366, cloud=0.0, wind=12.0694, temperature=13.084, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:43:39.418', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:43:52.543 [DEBUG] [Thread-193985] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:43:52.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:43:52.640 [DEBUG] [Thread-193989] [transport.py] [_log()] starting thread (client mode): 0xae536200
2026-04-12T18:43:52.640 [DEBUG] [Thread-193989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:43:52.654 [DEBUG] [Thread-193989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:43:52.654 [INFO] [Thread-193989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] client lang: <none>
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] server lang: <none>
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] kex follows: False
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:43:52.662 [DEBUG] [Thread-193989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:43:52.663 [DEBUG] [Thread-193989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:43:52.663 [DEBUG] [Thread-193989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:43:52.663 [DEBUG] [Thread-193989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:43:52.663 [DEBUG] [Thread-193989] [transport.py] [_log()] Compression: none
2026-04-12T18:43:52.663 [DEBUG] [Thread-193989] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:43:52.723 [DEBUG] [Thread-193989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:43:52.723 [DEBUG] [Thread-193989] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:43:52.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:43:52.733 [DEBUG] [Thread-193989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:43:52.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:43:52.782 [DEBUG] [Thread-193989] [transport.py] [_log()] userauth is OK
2026-04-12T18:43:52.783 [DEBUG] [Thread-193989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:43:52.783 [DEBUG] [Thread-193989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:43:52.783 [DEBUG] [Thread-193989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:43:52.783 [DEBUG] [Thread-193989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:43:52.802 [INFO] [Thread-193989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:43:52.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:43:52.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:43:53.607 [DEBUG] [Thread-193989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:43:53.607 [DEBUG] [Thread-193989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:43:53.655 [DEBUG] [Thread-193989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:43:53.656 [DEBUG] [Thread-193989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:43:53.665 [DEBUG] [Thread-193989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:43:53.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:43:53.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:43:53.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:43:53.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:43:53.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:43:53.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:43:53.704 [DEBUG] [Thread-193989] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:43:55.284 [DEBUG] [Thread-193991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:10.347 [DEBUG] [Thread-193992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:14.713 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:14.715 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:44:23.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:44:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:44:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 44, 9), 3.79289, 77.6336, 0.0, 12.0528, 12.8588, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:44:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:44:09
2026-04-12T18:44:25.386 [DEBUG] [Thread-193993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:44:25.568 [DEBUG] [Thread-193994] [transport.py] [_log()] starting thread (client mode): 0xae5e4fd0
2026-04-12T18:44:25.568 [DEBUG] [Thread-193994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:44:25.588 [DEBUG] [Thread-193994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:44:25.588 [INFO] [Thread-193994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] client lang: <none>
2026-04-12T18:44:25.591 [DEBUG] [Thread-193994] [transport.py] [_log()] server lang: <none>
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] kex follows: False
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] Compression: none
2026-04-12T18:44:25.592 [DEBUG] [Thread-193994] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:44:25.611 [DEBUG] [Thread-193994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:44:25.612 [DEBUG] [Thread-193994] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:44:25.612 [DEBUG] [Thread-193994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:44:25.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:44:25.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:44:25.614 [DEBUG] [Thread-193994] [transport.py] [_log()] userauth is OK
2026-04-12T18:44:25.615 [DEBUG] [Thread-193994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:44:25.615 [DEBUG] [Thread-193994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:44:25.615 [DEBUG] [Thread-193994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:44:25.615 [DEBUG] [Thread-193994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:44:25.639 [INFO] [Thread-193994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:44:25.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:44:26.283 [DEBUG] [Thread-193994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:44:26.293 [DEBUG] [Thread-193994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:44:26.294 [DEBUG] [Thread-193994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:44:26.325 [DEBUG] [Thread-193994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:44:26.326 [DEBUG] [Thread-193994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:44:26.329 [DEBUG] [Thread-193994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:44:26.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:44:26.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:44:26.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:44:26.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:44:26.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:44:26.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:44:26.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:44:26.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:44:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:44:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.697331 -999.00  +13.00   8.22     80   +9.70 1 2 1 2 1   217    0 2.15 -38.81 ----- 8.2 8.2 257.6 12.8 14.1 -22.0 14.0 -20.5 13.7 -18.6 13.9 -20.7
2026-04-12T18:44:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:44:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:44:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.697331
2026-04-12T18:44:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:44:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:44:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:44:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:44:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:44:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:44:09', tmtdew=3.79289, humidity=77.6336, cloud=0.0, wind=12.0528, temperature=12.8588, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:44:09.398', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:44:26.357 [DEBUG] [Thread-193994] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:44:26.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:44:26.451 [DEBUG] [Thread-193997] [transport.py] [_log()] starting thread (client mode): 0xae5e6350
2026-04-12T18:44:26.451 [DEBUG] [Thread-193997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:44:26.465 [DEBUG] [Thread-193997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:44:26.466 [INFO] [Thread-193997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:44:26.473 [DEBUG] [Thread-193997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] client lang: <none>
2026-04-12T18:44:26.474 [DEBUG] [Thread-193997] [transport.py] [_log()] server lang: <none>
2026-04-12T18:44:26.475 [DEBUG] [Thread-193997] [transport.py] [_log()] kex follows: False
2026-04-12T18:44:26.475 [DEBUG] [Thread-193997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:44:26.475 [DEBUG] [Thread-193997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:44:26.475 [DEBUG] [Thread-193997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:44:26.475 [DEBUG] [Thread-193997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:44:26.475 [DEBUG] [Thread-193997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:44:26.475 [DEBUG] [Thread-193997] [transport.py] [_log()] Compression: none
2026-04-12T18:44:26.476 [DEBUG] [Thread-193997] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:44:26.534 [DEBUG] [Thread-193997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:44:26.535 [DEBUG] [Thread-193997] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:44:26.535 [DEBUG] [Thread-193997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:44:26.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:44:26.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:44:26.594 [DEBUG] [Thread-193997] [transport.py] [_log()] userauth is OK
2026-04-12T18:44:26.594 [DEBUG] [Thread-193997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:44:26.594 [DEBUG] [Thread-193997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:44:26.594 [DEBUG] [Thread-193997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:44:26.594 [DEBUG] [Thread-193997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:44:26.613 [INFO] [Thread-193997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:44:26.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:44:26.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:44:27.459 [DEBUG] [Thread-193997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:44:27.460 [DEBUG] [Thread-193997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:44:27.507 [DEBUG] [Thread-193997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:44:27.507 [DEBUG] [Thread-193997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:44:27.519 [DEBUG] [Thread-193997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:44:27.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:44:27.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:44:27.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:44:27.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:44:27.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:44:27.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:44:27.557 [DEBUG] [Thread-193997] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:44:40.422 [DEBUG] [Thread-193999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:51.951 [DEBUG] [Thread-194000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:55.489 [DEBUG] [Thread-194001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:44:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:44:57.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:44:57.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:44:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 44, 45), 3.70376, 78.1677, 0.0, 11.8577, 13.0844, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:44:58.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:44:45
2026-04-12T18:44:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:44:59.396 [DEBUG] [Thread-194002] [transport.py] [_log()] starting thread (client mode): 0xae5f1f60
2026-04-12T18:44:59.396 [DEBUG] [Thread-194002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:44:59.417 [DEBUG] [Thread-194002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:44:59.417 [INFO] [Thread-194002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] client lang: <none>
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] server lang: <none>
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] kex follows: False
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:44:59.421 [DEBUG] [Thread-194002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:44:59.422 [DEBUG] [Thread-194002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:44:59.422 [DEBUG] [Thread-194002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:44:59.422 [DEBUG] [Thread-194002] [transport.py] [_log()] Compression: none
2026-04-12T18:44:59.422 [DEBUG] [Thread-194002] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:44:59.438 [DEBUG] [Thread-194002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:44:59.438 [DEBUG] [Thread-194002] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:44:59.439 [DEBUG] [Thread-194002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:44:59.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:44:59.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:44:59.441 [DEBUG] [Thread-194002] [transport.py] [_log()] userauth is OK
2026-04-12T18:44:59.441 [DEBUG] [Thread-194002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:44:59.441 [DEBUG] [Thread-194002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:44:59.441 [DEBUG] [Thread-194002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:44:59.442 [DEBUG] [Thread-194002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:44:59.465 [INFO] [Thread-194002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:44:59.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:45:00.081 [DEBUG] [Thread-194002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:45:00.082 [DEBUG] [Thread-194002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:45:00.082 [DEBUG] [Thread-194002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:45:00.123 [DEBUG] [Thread-194002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:45:00.123 [DEBUG] [Thread-194002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:45:00.127 [DEBUG] [Thread-194002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:45:00.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:45:00.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:45:00.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:45:00.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:45:00.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:45:00.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:45:00.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:45:00.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:45:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:45:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.697678 -999.00  +13.00   6.70     81   +9.80 1 2 1 2 1   200    0 2.23 -34.05 ----- 6.7 6.7 257.4 11.6 14.1 -21.7 14.1 -20.6 13.7 -18.6 13.9 -20.6
2026-04-12T18:45:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:45:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:45:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.697678
2026-04-12T18:45:00.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:45:00.150 [DEBUG] [Thread-194002] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:45:00.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:45:00.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:45:00.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:45:00.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:45:00.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:44:45', tmtdew=3.70376, humidity=78.1677, cloud=0.0, wind=11.8577, temperature=13.0844, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:44:39.379', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:45:00.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:45:00.249 [DEBUG] [Thread-194005] [transport.py] [_log()] starting thread (client mode): 0xae5f2a10
2026-04-12T18:45:00.249 [DEBUG] [Thread-194005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:45:00.264 [DEBUG] [Thread-194005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:45:00.264 [INFO] [Thread-194005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] client lang: <none>
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] server lang: <none>
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] kex follows: False
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:45:00.272 [DEBUG] [Thread-194005] [transport.py] [_log()] Compression: none
2026-04-12T18:45:00.273 [DEBUG] [Thread-194005] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:45:00.329 [DEBUG] [Thread-194005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:45:00.330 [DEBUG] [Thread-194005] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:45:00.330 [DEBUG] [Thread-194005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:45:00.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:45:00.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:45:00.389 [DEBUG] [Thread-194005] [transport.py] [_log()] userauth is OK
2026-04-12T18:45:00.389 [DEBUG] [Thread-194005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:45:00.389 [DEBUG] [Thread-194005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:45:00.389 [DEBUG] [Thread-194005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:45:00.389 [DEBUG] [Thread-194005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:45:00.408 [INFO] [Thread-194005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:45:00.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:45:00.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:45:01.272 [DEBUG] [Thread-194005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:45:01.272 [DEBUG] [Thread-194005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:45:01.320 [DEBUG] [Thread-194005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:45:01.320 [DEBUG] [Thread-194005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:45:01.330 [DEBUG] [Thread-194005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:45:01.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:45:01.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:45:01.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:45:01.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:45:01.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:45:01.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:45:01.365 [DEBUG] [Thread-194005] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:45:10.526 [DEBUG] [Thread-194007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:45:19.020 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:45:19.021 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:45:25.581 [DEBUG] [Thread-194008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:45:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:45:31.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:45:31.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:45:32.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 45, 20), 3.8613, 77.5343, 0.0, 9.63468, 12.8924, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:45:32.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:45:20
2026-04-12T18:45:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:45:33.229 [DEBUG] [Thread-194009] [transport.py] [_log()] starting thread (client mode): 0xae5f31f0
2026-04-12T18:45:33.229 [DEBUG] [Thread-194009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:45:33.250 [DEBUG] [Thread-194009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:45:33.250 [INFO] [Thread-194009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] client lang: <none>
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] server lang: <none>
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] kex follows: False
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:45:33.254 [DEBUG] [Thread-194009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:45:33.255 [DEBUG] [Thread-194009] [transport.py] [_log()] Compression: none
2026-04-12T18:45:33.255 [DEBUG] [Thread-194009] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:45:33.271 [DEBUG] [Thread-194009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:45:33.272 [DEBUG] [Thread-194009] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:45:33.272 [DEBUG] [Thread-194009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:45:33.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:45:33.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:45:33.274 [DEBUG] [Thread-194009] [transport.py] [_log()] userauth is OK
2026-04-12T18:45:33.275 [DEBUG] [Thread-194009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:45:33.275 [DEBUG] [Thread-194009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:45:33.275 [DEBUG] [Thread-194009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:45:33.275 [DEBUG] [Thread-194009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:45:33.310 [INFO] [Thread-194009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:45:33.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:45:34.136 [DEBUG] [Thread-194009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:45:34.136 [DEBUG] [Thread-194009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:45:34.137 [DEBUG] [Thread-194009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:45:34.177 [DEBUG] [Thread-194009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:45:34.178 [DEBUG] [Thread-194009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:45:34.181 [DEBUG] [Thread-194009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:45:34.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:45:34.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:45:34.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:45:34.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:45:34.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:45:34.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:45:34.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:45:34.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:45:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:45:34.240 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T18:45:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:45:20', tmtdew=3.8613, humidity=77.5343, cloud=0.0, wind=9.63468, temperature=12.8924, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:45:34.241 [DEBUG] [Thread-194009] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:45:34.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:45:34.337 [DEBUG] [Thread-194012] [transport.py] [_log()] starting thread (client mode): 0xae5f2320
2026-04-12T18:45:34.337 [DEBUG] [Thread-194012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:45:34.352 [DEBUG] [Thread-194012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:45:34.353 [INFO] [Thread-194012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] client lang: <none>
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] server lang: <none>
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] kex follows: False
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:45:34.360 [DEBUG] [Thread-194012] [transport.py] [_log()] Compression: none
2026-04-12T18:45:34.361 [DEBUG] [Thread-194012] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:45:34.418 [DEBUG] [Thread-194012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:45:34.418 [DEBUG] [Thread-194012] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:45:34.419 [DEBUG] [Thread-194012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:45:34.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:45:34.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:45:34.479 [DEBUG] [Thread-194012] [transport.py] [_log()] userauth is OK
2026-04-12T18:45:34.479 [DEBUG] [Thread-194012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:45:34.479 [DEBUG] [Thread-194012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:45:34.479 [DEBUG] [Thread-194012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:45:34.479 [DEBUG] [Thread-194012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:45:34.498 [INFO] [Thread-194012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:45:34.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:45:34.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:45:35.312 [DEBUG] [Thread-194012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:45:35.312 [DEBUG] [Thread-194012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:45:35.360 [DEBUG] [Thread-194012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:45:35.360 [DEBUG] [Thread-194012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:45:35.370 [DEBUG] [Thread-194012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:45:35.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:45:35.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:45:35.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:45:35.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:45:35.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:45:35.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:45:35.407 [DEBUG] [Thread-194012] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:45:40.617 [DEBUG] [Thread-194014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:45:52.038 [DEBUG] [Thread-194015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:45:55.670 [DEBUG] [Thread-194016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:46:05.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:46:05.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:46:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:46:06.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 45, 55), 3.82346, 77.468, 0.0, 12.2638, 12.8258, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:46:06.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:45:55
2026-04-12T18:46:07.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:46:07.263 [DEBUG] [Thread-194017] [transport.py] [_log()] starting thread (client mode): 0xae5f0130
2026-04-12T18:46:07.263 [DEBUG] [Thread-194017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:46:07.274 [DEBUG] [Thread-194017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:46:07.274 [INFO] [Thread-194017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] client lang: <none>
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] server lang: <none>
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] kex follows: False
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] Compression: none
2026-04-12T18:46:07.275 [DEBUG] [Thread-194017] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:46:07.283 [DEBUG] [Thread-194017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:46:07.283 [DEBUG] [Thread-194017] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:46:07.284 [DEBUG] [Thread-194017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:46:07.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:46:07.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:46:07.285 [DEBUG] [Thread-194017] [transport.py] [_log()] userauth is OK
2026-04-12T18:46:07.285 [DEBUG] [Thread-194017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:46:07.285 [DEBUG] [Thread-194017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:46:07.285 [DEBUG] [Thread-194017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:46:07.285 [DEBUG] [Thread-194017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:46:07.297 [INFO] [Thread-194017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:46:07.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:46:07.952 [DEBUG] [Thread-194017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:46:07.953 [DEBUG] [Thread-194017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:46:07.953 [DEBUG] [Thread-194017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:46:07.993 [DEBUG] [Thread-194017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:46:07.994 [DEBUG] [Thread-194017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:46:07.996 [DEBUG] [Thread-194017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:46:08.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:46:08.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:46:08.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:46:08.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:46:08.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:46:08.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:46:08.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:46:08.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:46:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:46:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.698373 -999.00  +12.90   7.43     81   +9.80 1 2 1 2 1   170    0 2.32 -32.70 ----- 7.4 7.4 269.2 12.6 14.1 -21.7 14.0 -20.5 13.7 -18.8 13.9 -20.7
2026-04-12T18:46:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:46:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:46:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.698373
2026-04-12T18:46:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:46:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:46:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:46:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:46:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:46:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:45:55', tmtdew=3.82346, humidity=77.468, cloud=0.0, wind=12.2638, temperature=12.8258, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:45:39.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:46:08.021 [DEBUG] [Thread-194017] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:46:08.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:46:08.116 [DEBUG] [Thread-194019] [transport.py] [_log()] starting thread (client mode): 0xb0f408b0
2026-04-12T18:46:08.116 [DEBUG] [Thread-194019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:46:08.129 [DEBUG] [Thread-194019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:46:08.130 [INFO] [Thread-194019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] client lang: <none>
2026-04-12T18:46:08.137 [DEBUG] [Thread-194019] [transport.py] [_log()] server lang: <none>
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] kex follows: False
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] Compression: none
2026-04-12T18:46:08.138 [DEBUG] [Thread-194019] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:46:08.199 [DEBUG] [Thread-194019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:46:08.199 [DEBUG] [Thread-194019] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:46:08.200 [DEBUG] [Thread-194019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:46:08.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:46:08.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:46:08.255 [DEBUG] [Thread-194019] [transport.py] [_log()] userauth is OK
2026-04-12T18:46:08.255 [DEBUG] [Thread-194019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:46:08.256 [DEBUG] [Thread-194019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:46:08.256 [DEBUG] [Thread-194019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:46:08.256 [DEBUG] [Thread-194019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:46:08.274 [INFO] [Thread-194019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:46:08.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:46:08.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:46:09.093 [DEBUG] [Thread-194019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:46:09.093 [DEBUG] [Thread-194019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:46:09.141 [DEBUG] [Thread-194019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:46:09.141 [DEBUG] [Thread-194019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:46:09.151 [DEBUG] [Thread-194019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:46:09.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:46:09.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:46:09.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:46:09.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:46:09.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:46:09.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:46:09.188 [DEBUG] [Thread-194019] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:46:10.705 [DEBUG] [Thread-194021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:46:23.043 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:46:23.044 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:46:25.759 [DEBUG] [Thread-194022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:46:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:46:39.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:46:39.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:46:40.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 46, 31), 3.84019, 77.3854, 0.0, 13.0046, 12.8591, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:46:40.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:46:31
2026-04-12T18:46:40.795 [DEBUG] [Thread-194023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:46:40.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:46:41.134 [DEBUG] [Thread-194024] [transport.py] [_log()] starting thread (client mode): 0xae52e0e0
2026-04-12T18:46:41.134 [DEBUG] [Thread-194024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:46:41.154 [DEBUG] [Thread-194024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:46:41.154 [INFO] [Thread-194024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] client lang: <none>
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] server lang: <none>
2026-04-12T18:46:41.157 [DEBUG] [Thread-194024] [transport.py] [_log()] kex follows: False
2026-04-12T18:46:41.158 [DEBUG] [Thread-194024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:46:41.158 [DEBUG] [Thread-194024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:46:41.158 [DEBUG] [Thread-194024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:46:41.158 [DEBUG] [Thread-194024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:46:41.158 [DEBUG] [Thread-194024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:46:41.158 [DEBUG] [Thread-194024] [transport.py] [_log()] Compression: none
2026-04-12T18:46:41.158 [DEBUG] [Thread-194024] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:46:41.176 [DEBUG] [Thread-194024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:46:41.177 [DEBUG] [Thread-194024] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:46:41.177 [DEBUG] [Thread-194024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:46:41.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:46:41.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:46:41.180 [DEBUG] [Thread-194024] [transport.py] [_log()] userauth is OK
2026-04-12T18:46:41.180 [DEBUG] [Thread-194024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:46:41.180 [DEBUG] [Thread-194024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:46:41.180 [DEBUG] [Thread-194024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:46:41.180 [DEBUG] [Thread-194024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:46:41.204 [INFO] [Thread-194024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:46:41.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:46:41.763 [DEBUG] [Thread-194024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:46:41.763 [DEBUG] [Thread-194024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:46:41.764 [DEBUG] [Thread-194024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:46:41.804 [DEBUG] [Thread-194024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:46:41.804 [DEBUG] [Thread-194024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:46:41.808 [DEBUG] [Thread-194024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:46:41.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:46:41.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:46:41.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:46:41.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:46:41.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:46:41.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:46:41.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:46:41.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:46:41.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:46:41.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.698720 -999.00  +12.90   9.94     81   +9.70 1 2 1 2 1   156    0 2.28 -32.03 ----- 9.9 9.9 260.2 11.6 14.1 -21.7 13.9 -20.5 13.6 -18.7 13.9 -20.7
2026-04-12T18:46:41.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:46:41.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:46:41.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.698720
2026-04-12T18:46:41.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:46:41.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:46:41.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:46:41.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:46:41.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:46:41.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:46:31', tmtdew=3.84019, humidity=77.3854, cloud=0.0, wind=13.0046, temperature=12.8591, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:46:09.408', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:46:41.829 [DEBUG] [Thread-194024] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:46:41.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:46:41.925 [DEBUG] [Thread-194027] [transport.py] [_log()] starting thread (client mode): 0xae52eda0
2026-04-12T18:46:41.925 [DEBUG] [Thread-194027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:46:41.940 [DEBUG] [Thread-194027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:46:41.940 [INFO] [Thread-194027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:46:41.948 [DEBUG] [Thread-194027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:46:41.948 [DEBUG] [Thread-194027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:46:41.948 [DEBUG] [Thread-194027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:46:41.948 [DEBUG] [Thread-194027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:41.948 [DEBUG] [Thread-194027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:46:41.948 [DEBUG] [Thread-194027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] client lang: <none>
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] server lang: <none>
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] kex follows: False
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] Compression: none
2026-04-12T18:46:41.949 [DEBUG] [Thread-194027] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:46:42.006 [DEBUG] [Thread-194027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:46:42.007 [DEBUG] [Thread-194027] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:46:42.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:46:42.008 [DEBUG] [Thread-194027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:46:42.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:46:42.062 [DEBUG] [Thread-194027] [transport.py] [_log()] userauth is OK
2026-04-12T18:46:42.063 [DEBUG] [Thread-194027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:46:42.063 [DEBUG] [Thread-194027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:46:42.063 [DEBUG] [Thread-194027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:46:42.063 [DEBUG] [Thread-194027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:46:42.088 [INFO] [Thread-194027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:46:42.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:46:42.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:46:42.924 [DEBUG] [Thread-194027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:46:42.924 [DEBUG] [Thread-194027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:46:42.972 [DEBUG] [Thread-194027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:46:42.972 [DEBUG] [Thread-194027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:46:42.981 [DEBUG] [Thread-194027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:46:42.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:46:42.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:46:43.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
2026-04-12T18:46:43.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:46:43.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:46:43.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:46:43.018 [DEBUG] [Thread-194027] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:46:52.096 [DEBUG] [Thread-194029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:46:55.833 [DEBUG] [Thread-194030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:47:10.888 [DEBUG] [Thread-194031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:47:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:47:13.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:47:13.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:47:14.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 46, 31), 3.84019, 77.3854, 0.0, 13.0046, 12.8591, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:47:14.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:46:31
2026-04-12T18:47:14.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:47:14.866 [DEBUG] [Thread-194032] [transport.py] [_log()] starting thread (client mode): 0xae50b040
2026-04-12T18:47:14.866 [DEBUG] [Thread-194032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:47:14.881 [DEBUG] [Thread-194032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:47:14.882 [INFO] [Thread-194032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:47:14.884 [DEBUG] [Thread-194032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:47:14.884 [DEBUG] [Thread-194032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:47:14.884 [DEBUG] [Thread-194032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] client lang: <none>
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] server lang: <none>
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] kex follows: False
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] Compression: none
2026-04-12T18:47:14.885 [DEBUG] [Thread-194032] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:47:14.903 [DEBUG] [Thread-194032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:47:14.904 [DEBUG] [Thread-194032] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:47:14.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:47:14.905 [DEBUG] [Thread-194032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:47:14.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:47:14.907 [DEBUG] [Thread-194032] [transport.py] [_log()] userauth is OK
2026-04-12T18:47:14.907 [DEBUG] [Thread-194032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:47:14.907 [DEBUG] [Thread-194032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:47:14.907 [DEBUG] [Thread-194032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:47:14.907 [DEBUG] [Thread-194032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:47:14.932 [INFO] [Thread-194032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:47:14.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:47:15.523 [DEBUG] [Thread-194032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:47:15.530 [DEBUG] [Thread-194032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:47:15.531 [DEBUG] [Thread-194032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:47:15.565 [DEBUG] [Thread-194032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:47:15.565 [DEBUG] [Thread-194032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:47:15.568 [DEBUG] [Thread-194032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:47:15.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:47:15.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:47:15.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:47:15.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:47:15.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:47:15.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:47:15.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:47:15.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:47:15.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:47:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.699415 -999.00  +12.90   5.76     81   +9.80 1 2 1 2 1   130    0 2.43 -29.95 ----- 5.8 5.8 258.6 9.9 14.0 -21.8 14.0 -20.7 13.6 -18.9 13.8 -20.6
2026-04-12T18:47:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:47:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:47:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.699415
2026-04-12T18:47:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:47:15.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:47:15.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:47:15.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:47:15.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:47:15.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:46:31', tmtdew=3.84019, humidity=77.3854, cloud=0.0, wind=13.0046, temperature=12.8591, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:47:09.456', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:47:15.589 [DEBUG] [Thread-194032] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:47:15.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:47:15.684 [DEBUG] [Thread-194035] [transport.py] [_log()] starting thread (client mode): 0xae5f3340
2026-04-12T18:47:15.684 [DEBUG] [Thread-194035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:47:15.699 [DEBUG] [Thread-194035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:47:15.699 [INFO] [Thread-194035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:47:15.707 [DEBUG] [Thread-194035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:47:15.707 [DEBUG] [Thread-194035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:47:15.707 [DEBUG] [Thread-194035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] client lang: <none>
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] server lang: <none>
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] kex follows: False
2026-04-12T18:47:15.708 [DEBUG] [Thread-194035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:47:15.709 [DEBUG] [Thread-194035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:47:15.709 [DEBUG] [Thread-194035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:47:15.709 [DEBUG] [Thread-194035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:47:15.709 [DEBUG] [Thread-194035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:47:15.709 [DEBUG] [Thread-194035] [transport.py] [_log()] Compression: none
2026-04-12T18:47:15.709 [DEBUG] [Thread-194035] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:47:15.766 [DEBUG] [Thread-194035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:47:15.767 [DEBUG] [Thread-194035] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:47:15.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:47:15.768 [DEBUG] [Thread-194035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:47:15.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:47:15.821 [DEBUG] [Thread-194035] [transport.py] [_log()] userauth is OK
2026-04-12T18:47:15.821 [DEBUG] [Thread-194035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:47:15.821 [DEBUG] [Thread-194035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:47:15.821 [DEBUG] [Thread-194035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:47:15.821 [DEBUG] [Thread-194035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:47:15.834 [INFO] [Thread-194035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:47:15.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:47:15.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:47:16.670 [DEBUG] [Thread-194035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:47:16.670 [DEBUG] [Thread-194035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:47:16.718 [DEBUG] [Thread-194035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:47:16.718 [DEBUG] [Thread-194035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:47:16.728 [DEBUG] [Thread-194035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:47:16.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:47:16.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:47:16.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:47:16.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:47:16.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:47:16.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:47:16.764 [DEBUG] [Thread-194035] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:47:25.935 [DEBUG] [Thread-194037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:47:28.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:47:28.747 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:47:40.985 [DEBUG] [Thread-194038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:47:46.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:47:46.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:47:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:47:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 47, 7), 3.85874, 77.2859, 0.0, 12.4578, 12.8426, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:47:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:47:07
2026-04-12T18:47:48.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:47:48.643 [DEBUG] [Thread-194039] [transport.py] [_log()] starting thread (client mode): 0xae52faf0
2026-04-12T18:47:48.643 [DEBUG] [Thread-194039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:47:48.663 [DEBUG] [Thread-194039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:47:48.663 [INFO] [Thread-194039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:47:48.664 [DEBUG] [Thread-194039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] client lang: <none>
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] server lang: <none>
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] kex follows: False
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:47:48.665 [DEBUG] [Thread-194039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:47:48.666 [DEBUG] [Thread-194039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:47:48.666 [DEBUG] [Thread-194039] [transport.py] [_log()] Compression: none
2026-04-12T18:47:48.666 [DEBUG] [Thread-194039] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:47:48.684 [DEBUG] [Thread-194039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:47:48.685 [DEBUG] [Thread-194039] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:47:48.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:47:48.686 [DEBUG] [Thread-194039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:47:48.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:47:48.689 [DEBUG] [Thread-194039] [transport.py] [_log()] userauth is OK
2026-04-12T18:47:48.689 [DEBUG] [Thread-194039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:47:48.689 [DEBUG] [Thread-194039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:47:48.689 [DEBUG] [Thread-194039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:47:48.690 [DEBUG] [Thread-194039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:47:48.717 [INFO] [Thread-194039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:47:48.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:47:49.310 [DEBUG] [Thread-194039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:47:49.310 [DEBUG] [Thread-194039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:47:49.311 [DEBUG] [Thread-194039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:47:49.351 [DEBUG] [Thread-194039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:47:49.352 [DEBUG] [Thread-194039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:47:49.355 [DEBUG] [Thread-194039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:47:49.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:47:49.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:47:49.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:47:49.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:47:49.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:47:49.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:47:49.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:47:49.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:47:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:47:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.699762 -999.00  +12.90   5.36     81   +9.90 1 2 1 2 1   119    0 2.34 -29.23 ----- 5.4 5.4 264.8 8.8 14.0 -22.0 13.9 -20.8 13.6 -18.9 13.8 -20.7
2026-04-12T18:47:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:47:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:47:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.699762
2026-04-12T18:47:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:47:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:47:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:47:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:47:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:47:49.379 [DEBUG] [Thread-194039] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:47:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:47:07', tmtdew=3.85874, humidity=77.2859, cloud=0.0, wind=12.4578, temperature=12.8426, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:47:39.437', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:47:49.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:47:49.472 [DEBUG] [Thread-194042] [transport.py] [_log()] starting thread (client mode): 0xae52f910
2026-04-12T18:47:49.472 [DEBUG] [Thread-194042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:47:49.486 [DEBUG] [Thread-194042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:47:49.486 [INFO] [Thread-194042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] client lang: <none>
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] server lang: <none>
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] kex follows: False
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] Compression: none
2026-04-12T18:47:49.494 [DEBUG] [Thread-194042] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:47:49.557 [DEBUG] [Thread-194042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:47:49.557 [DEBUG] [Thread-194042] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:47:49.558 [DEBUG] [Thread-194042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:47:49.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:47:49.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:47:49.617 [DEBUG] [Thread-194042] [transport.py] [_log()] userauth is OK
2026-04-12T18:47:49.617 [DEBUG] [Thread-194042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:47:49.618 [DEBUG] [Thread-194042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:47:49.618 [DEBUG] [Thread-194042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:47:49.618 [DEBUG] [Thread-194042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:47:49.637 [INFO] [Thread-194042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:47:49.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:47:49.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:47:50.466 [DEBUG] [Thread-194042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:47:50.467 [DEBUG] [Thread-194042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:47:50.515 [DEBUG] [Thread-194042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:47:50.515 [DEBUG] [Thread-194042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:47:50.525 [DEBUG] [Thread-194042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:47:50.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:47:50.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:47:50.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:47:50.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:47:50.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:47:50.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:47:50.561 [DEBUG] [Thread-194042] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:47:52.153 [DEBUG] [Thread-194044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:47:56.023 [DEBUG] [Thread-194045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:11.071 [DEBUG] [Thread-194046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:48:20.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:48:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:48:21.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 47, 43), 3.81299, 77.6053, 0.0, 11.1521, 13.1517, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:48:21.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:47:43
2026-04-12T18:48:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:48:22.456 [DEBUG] [Thread-194047] [transport.py] [_log()] starting thread (client mode): 0xae50a0b0
2026-04-12T18:48:22.456 [DEBUG] [Thread-194047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:48:22.475 [DEBUG] [Thread-194047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:48:22.475 [INFO] [Thread-194047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] client lang: <none>
2026-04-12T18:48:22.478 [DEBUG] [Thread-194047] [transport.py] [_log()] server lang: <none>
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] kex follows: False
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] Compression: none
2026-04-12T18:48:22.479 [DEBUG] [Thread-194047] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:48:22.487 [DEBUG] [Thread-194047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:48:22.488 [DEBUG] [Thread-194047] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:48:22.488 [DEBUG] [Thread-194047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:48:22.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:48:22.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:48:22.490 [DEBUG] [Thread-194047] [transport.py] [_log()] userauth is OK
2026-04-12T18:48:22.490 [DEBUG] [Thread-194047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:48:22.490 [DEBUG] [Thread-194047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:48:22.490 [DEBUG] [Thread-194047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:48:22.490 [DEBUG] [Thread-194047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:48:22.515 [INFO] [Thread-194047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:48:22.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:48:23.169 [DEBUG] [Thread-194047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:48:23.170 [DEBUG] [Thread-194047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:48:23.170 [DEBUG] [Thread-194047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:48:23.211 [DEBUG] [Thread-194047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:48:23.211 [DEBUG] [Thread-194047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:48:23.214 [DEBUG] [Thread-194047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:48:23.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:48:23.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:48:23.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:48:23.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:48:23.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:48:23.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:48:23.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:48:23.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:48:23.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:48:23.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.700109 -999.00  +12.90   7.55     81   +9.90 1 2 1 2 1   109    0 2.48 -26.17 ----- 7.5 7.5 252.6 8.8 14.0 -21.9 13.9 -20.8 13.6 -18.8 13.9 -20.8
2026-04-12T18:48:23.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:48:23.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:48:23.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.700109
2026-04-12T18:48:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:48:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:48:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:48:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:48:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:48:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:47:43', tmtdew=3.81299, humidity=77.6053, cloud=0.0, wind=11.1521, temperature=13.1517, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:48:09.418', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:48:23.242 [DEBUG] [Thread-194047] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:48:23.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:48:23.338 [DEBUG] [Thread-194050] [transport.py] [_log()] starting thread (client mode): 0xae536fe0
2026-04-12T18:48:23.338 [DEBUG] [Thread-194050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:48:23.352 [DEBUG] [Thread-194050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:48:23.352 [INFO] [Thread-194050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] client lang: <none>
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] server lang: <none>
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] kex follows: False
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:48:23.360 [DEBUG] [Thread-194050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:48:23.361 [DEBUG] [Thread-194050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:48:23.361 [DEBUG] [Thread-194050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:48:23.361 [DEBUG] [Thread-194050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:48:23.361 [DEBUG] [Thread-194050] [transport.py] [_log()] Compression: none
2026-04-12T18:48:23.361 [DEBUG] [Thread-194050] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:48:23.424 [DEBUG] [Thread-194050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:48:23.425 [DEBUG] [Thread-194050] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:48:23.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:48:23.426 [DEBUG] [Thread-194050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:48:23.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:48:23.480 [DEBUG] [Thread-194050] [transport.py] [_log()] userauth is OK
2026-04-12T18:48:23.480 [DEBUG] [Thread-194050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:48:23.480 [DEBUG] [Thread-194050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:48:23.480 [DEBUG] [Thread-194050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:48:23.481 [DEBUG] [Thread-194050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:48:23.507 [INFO] [Thread-194050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:48:23.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:48:23.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:48:24.329 [DEBUG] [Thread-194050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:48:24.329 [DEBUG] [Thread-194050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:48:24.377 [DEBUG] [Thread-194050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:48:24.377 [DEBUG] [Thread-194050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:48:24.387 [DEBUG] [Thread-194050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:48:24.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:48:24.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:48:24.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:48:24.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:48:24.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:48:24.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:48:24.424 [DEBUG] [Thread-194050] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:48:26.109 [DEBUG] [Thread-194052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:33.226 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:33.227 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:41.161 [DEBUG] [Thread-194053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:52.226 [DEBUG] [Thread-194054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:48:54.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:48:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:48:55.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 48, 18), 3.84967, 77.3358, 0.0, 11.6993, 12.8593, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:48:55.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:48:18
2026-04-12T18:48:56.202 [DEBUG] [Thread-194055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:48:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:48:56.375 [DEBUG] [Thread-194056] [transport.py] [_log()] starting thread (client mode): 0xae536110
2026-04-12T18:48:56.375 [DEBUG] [Thread-194056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:48:56.394 [DEBUG] [Thread-194056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:48:56.394 [INFO] [Thread-194056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:48:56.397 [DEBUG] [Thread-194056] [transport.py] [_log()] client lang: <none>
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] server lang: <none>
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] kex follows: False
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] Compression: none
2026-04-12T18:48:56.398 [DEBUG] [Thread-194056] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:48:56.413 [DEBUG] [Thread-194056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:48:56.413 [DEBUG] [Thread-194056] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:48:56.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:48:56.414 [DEBUG] [Thread-194056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:48:56.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:48:56.416 [DEBUG] [Thread-194056] [transport.py] [_log()] userauth is OK
2026-04-12T18:48:56.417 [DEBUG] [Thread-194056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:48:56.417 [DEBUG] [Thread-194056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:48:56.417 [DEBUG] [Thread-194056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:48:56.417 [DEBUG] [Thread-194056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:48:56.435 [INFO] [Thread-194056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:48:56.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:48:57.079 [DEBUG] [Thread-194056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:48:57.080 [DEBUG] [Thread-194056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:48:57.080 [DEBUG] [Thread-194056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:48:57.120 [DEBUG] [Thread-194056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:48:57.121 [DEBUG] [Thread-194056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:48:57.123 [DEBUG] [Thread-194056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:48:57.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:48:57.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:48:57.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:48:57.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:48:57.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:48:57.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:48:57.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:48:57.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:48:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:48:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.700456 -999.00  +12.90   5.79     82   +9.90 1 2 1 2 1    99    0 2.47 -24.68 ----- 5.8 5.8 269.2 11.7 14.0 -21.9 13.9 -20.8 13.6 -18.8 13.8 -20.7
2026-04-12T18:48:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:48:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:48:57.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.700456
2026-04-12T18:48:57.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:48:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:48:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:48:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:48:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:48:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:48:18', tmtdew=3.84967, humidity=77.3358, cloud=0.0, wind=11.6993, temperature=12.8593, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:48:39.398', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:48:57.153 [DEBUG] [Thread-194056] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:48:57.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:48:57.244 [DEBUG] [Thread-194059] [transport.py] [_log()] starting thread (client mode): 0xae508280
2026-04-12T18:48:57.245 [DEBUG] [Thread-194059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:48:57.259 [DEBUG] [Thread-194059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:48:57.259 [INFO] [Thread-194059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:48:57.267 [DEBUG] [Thread-194059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:48:57.267 [DEBUG] [Thread-194059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:48:57.267 [DEBUG] [Thread-194059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:48:57.267 [DEBUG] [Thread-194059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:57.267 [DEBUG] [Thread-194059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:48:57.267 [DEBUG] [Thread-194059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:57.267 [DEBUG] [Thread-194059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] client lang: <none>
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] server lang: <none>
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] kex follows: False
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:48:57.268 [DEBUG] [Thread-194059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:48:57.269 [DEBUG] [Thread-194059] [transport.py] [_log()] Compression: none
2026-04-12T18:48:57.269 [DEBUG] [Thread-194059] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:48:57.324 [DEBUG] [Thread-194059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:48:57.325 [DEBUG] [Thread-194059] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:48:57.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:48:57.326 [DEBUG] [Thread-194059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:48:57.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:48:57.384 [DEBUG] [Thread-194059] [transport.py] [_log()] userauth is OK
2026-04-12T18:48:57.384 [DEBUG] [Thread-194059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:48:57.384 [DEBUG] [Thread-194059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:48:57.385 [DEBUG] [Thread-194059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:48:57.385 [DEBUG] [Thread-194059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:48:57.404 [INFO] [Thread-194059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:48:57.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:48:57.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:48:58.236 [DEBUG] [Thread-194059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:48:58.237 [DEBUG] [Thread-194059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:48:58.285 [DEBUG] [Thread-194059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:48:58.285 [DEBUG] [Thread-194059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:48:58.295 [DEBUG] [Thread-194059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:48:58.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:48:58.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:48:58.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:48:58.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:48:58.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:48:58.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:48:58.332 [DEBUG] [Thread-194059] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:49:11.242 [DEBUG] [Thread-194061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:49:26.306 [DEBUG] [Thread-194062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:49:28.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:49:28.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:49: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
2026-04-12T18:49:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 48, 54), 3.76763, 77.8376, 0.0, 12.5986, 13.1187, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:49:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:48:54
2026-04-12T18:49:29.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:49:30.151 [DEBUG] [Thread-194063] [transport.py] [_log()] starting thread (client mode): 0xae5f2800
2026-04-12T18:49:30.151 [DEBUG] [Thread-194063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:49:30.166 [DEBUG] [Thread-194063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:49:30.166 [INFO] [Thread-194063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:49:30.169 [DEBUG] [Thread-194063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:49:30.169 [DEBUG] [Thread-194063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] client lang: <none>
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] server lang: <none>
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] kex follows: False
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] Compression: none
2026-04-12T18:49:30.170 [DEBUG] [Thread-194063] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:49:30.190 [DEBUG] [Thread-194063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:49:30.190 [DEBUG] [Thread-194063] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:49:30.191 [DEBUG] [Thread-194063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:49:30.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:49:30.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:49:30.193 [DEBUG] [Thread-194063] [transport.py] [_log()] userauth is OK
2026-04-12T18:49:30.193 [DEBUG] [Thread-194063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:49:30.193 [DEBUG] [Thread-194063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:49:30.193 [DEBUG] [Thread-194063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:49:30.193 [DEBUG] [Thread-194063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:49:30.212 [INFO] [Thread-194063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:49:30.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:49:30.816 [DEBUG] [Thread-194063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:49:30.816 [DEBUG] [Thread-194063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:49:30.817 [DEBUG] [Thread-194063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:49:30.857 [DEBUG] [Thread-194063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:49:30.857 [DEBUG] [Thread-194063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:49:30.861 [DEBUG] [Thread-194063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:49:30.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:49:30.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:49:30.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:49:30.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:49:30.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:49:30.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:49:30.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:49:30.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:49:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:49:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.700803 -999.00  +12.90   5.27     82   +9.90 1 2 1 2 1    90    0 2.50 -23.65 ----- 5.3 5.3 265.0 7.6 14.0 -21.8 13.9 -20.7 13.6 -18.8 13.8 -20.6
2026-04-12T18:49:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:49:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:49:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.700803
2026-04-12T18:49:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:49:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:49:30.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:49:30.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:49:30.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:49:30.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:48:54', tmtdew=3.76763, humidity=77.8376, cloud=0.0, wind=12.5986, temperature=13.1187, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:49:09.379', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:49:30.887 [DEBUG] [Thread-194063] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:49:30.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:49:30.981 [DEBUG] [Thread-194066] [transport.py] [_log()] starting thread (client mode): 0xb0f41bd0
2026-04-12T18:49:30.981 [DEBUG] [Thread-194066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:49:30.996 [DEBUG] [Thread-194066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:49:30.996 [INFO] [Thread-194066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:49:31.005 [DEBUG] [Thread-194066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] client lang: <none>
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] server lang: <none>
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] kex follows: False
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] Compression: none
2026-04-12T18:49:31.006 [DEBUG] [Thread-194066] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:49:31.063 [DEBUG] [Thread-194066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:49:31.064 [DEBUG] [Thread-194066] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:49:31.065 [DEBUG] [Thread-194066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:49:31.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:49:31.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:49:31.119 [DEBUG] [Thread-194066] [transport.py] [_log()] userauth is OK
2026-04-12T18:49:31.119 [DEBUG] [Thread-194066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:49:31.120 [DEBUG] [Thread-194066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:49:31.120 [DEBUG] [Thread-194066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:49:31.120 [DEBUG] [Thread-194066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:49:31.138 [INFO] [Thread-194066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:49:31.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:49:31.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:49:31.954 [DEBUG] [Thread-194066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:49:31.954 [DEBUG] [Thread-194066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:49:32.002 [DEBUG] [Thread-194066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:49:32.002 [DEBUG] [Thread-194066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:49:32.011 [DEBUG] [Thread-194066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:49:32.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:49:32.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:49:32.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:49:32.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:49:32.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:49:32.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:49:32.048 [DEBUG] [Thread-194066] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:49:37.963 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:49:37.964 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:49:41.343 [DEBUG] [Thread-194068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:49:52.295 [DEBUG] [Thread-194069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:49:56.406 [DEBUG] [Thread-194070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:50:02.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:50:02.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:50:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:50:03.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 49, 30), 3.7459, 78.1178, 0.0, 10.8878, 12.8594, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:50:03.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:49:30
2026-04-12T18:50:03.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:50:03.857 [DEBUG] [Thread-194071] [transport.py] [_log()] starting thread (client mode): 0xae5377f0
2026-04-12T18:50:03.857 [DEBUG] [Thread-194071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:50:03.878 [DEBUG] [Thread-194071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:50:03.878 [INFO] [Thread-194071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:50:03.881 [DEBUG] [Thread-194071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:50:03.881 [DEBUG] [Thread-194071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] client lang: <none>
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] server lang: <none>
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] kex follows: False
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] Compression: none
2026-04-12T18:50:03.882 [DEBUG] [Thread-194071] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:50:03.899 [DEBUG] [Thread-194071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:50:03.899 [DEBUG] [Thread-194071] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:50:03.900 [DEBUG] [Thread-194071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:50:03.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:50:03.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:50:03.902 [DEBUG] [Thread-194071] [transport.py] [_log()] userauth is OK
2026-04-12T18:50:03.902 [DEBUG] [Thread-194071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:50:03.902 [DEBUG] [Thread-194071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:50:03.903 [DEBUG] [Thread-194071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:50:03.903 [DEBUG] [Thread-194071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:50:03.926 [INFO] [Thread-194071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:50:03.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:50:10.203 [DEBUG] [Thread-194071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:50:10.203 [DEBUG] [Thread-194071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:50:10.203 [DEBUG] [Thread-194071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:50:10.244 [DEBUG] [Thread-194071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:50:10.244 [DEBUG] [Thread-194071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:50:10.246 [DEBUG] [Thread-194071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:50:10.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:50:10.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:50:10.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:50:10.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:50:10.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:50:10.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:50:10.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:50:10.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:50:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:50:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.701150 -999.00  +12.90   4.82     82   +9.90 1 2 1 2 1    82    0 2.56 -21.82 ----- 4.8 4.8 288.7 8.7 13.9 -22.0 13.9 -20.7 13.5 -19.0 13.8 -20.7
2026-04-12T18:50:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:50:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:50:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.701150
2026-04-12T18:50:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:50:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:50:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:50:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:50:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:50:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:49:30', tmtdew=3.7459, humidity=78.1178, cloud=0.0, wind=10.8878, temperature=12.8594, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:49:39.360', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:50:10.421 [DEBUG] [Thread-194071] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:50:10.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:50:10.517 [DEBUG] [Thread-194074] [transport.py] [_log()] starting thread (client mode): 0xae5f1240
2026-04-12T18:50:10.517 [DEBUG] [Thread-194074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:50:10.531 [DEBUG] [Thread-194074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:50:10.531 [INFO] [Thread-194074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] client lang: <none>
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] server lang: <none>
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] kex follows: False
2026-04-12T18:50:10.539 [DEBUG] [Thread-194074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:50:10.540 [DEBUG] [Thread-194074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:50:10.540 [DEBUG] [Thread-194074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:50:10.540 [DEBUG] [Thread-194074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:50:10.540 [DEBUG] [Thread-194074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:50:10.540 [DEBUG] [Thread-194074] [transport.py] [_log()] Compression: none
2026-04-12T18:50:10.540 [DEBUG] [Thread-194074] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:50:10.598 [DEBUG] [Thread-194074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:50:10.598 [DEBUG] [Thread-194074] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:50:10.599 [DEBUG] [Thread-194074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:50:10.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:50:10.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:50:10.654 [DEBUG] [Thread-194074] [transport.py] [_log()] userauth is OK
2026-04-12T18:50:10.654 [DEBUG] [Thread-194074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:50:10.654 [DEBUG] [Thread-194074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:50:10.654 [DEBUG] [Thread-194074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:50:10.654 [DEBUG] [Thread-194074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:50:10.673 [INFO] [Thread-194074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:50:10.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:50:10.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:50:11.450 [DEBUG] [Thread-194076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:50:11.479 [DEBUG] [Thread-194074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:50:11.479 [DEBUG] [Thread-194074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:50:11.526 [DEBUG] [Thread-194074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:50:11.527 [DEBUG] [Thread-194074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:50:11.535 [DEBUG] [Thread-194074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:50:11.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:50:11.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:50:11.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:50:11.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:50:11.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:50:11.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:50:11.569 [DEBUG] [Thread-194074] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:50:26.498 [DEBUG] [Thread-194077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:50:41.536 [DEBUG] [Thread-194078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:50:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:50:41.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:50:41.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:50:42.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 50, 5), 3.7472, 78.1012, 0.0, 12.2638, 12.7931, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:50:42.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:50:05
2026-04-12T18:50:42.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:50:42.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:50:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:50:43.458 [DEBUG] [Thread-194079] [transport.py] [_log()] starting thread (client mode): 0xae537130
2026-04-12T18:50:43.458 [DEBUG] [Thread-194079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:50:43.478 [DEBUG] [Thread-194079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:50:43.478 [INFO] [Thread-194079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:50:43.481 [DEBUG] [Thread-194079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] client lang: <none>
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] server lang: <none>
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] kex follows: False
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] Compression: none
2026-04-12T18:50:43.482 [DEBUG] [Thread-194079] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:50:43.496 [DEBUG] [Thread-194079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:50:43.497 [DEBUG] [Thread-194079] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:50:43.497 [DEBUG] [Thread-194079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:50:43.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:50:43.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:50:43.499 [DEBUG] [Thread-194079] [transport.py] [_log()] userauth is OK
2026-04-12T18:50:43.499 [DEBUG] [Thread-194079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:50:43.499 [DEBUG] [Thread-194079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:50:43.499 [DEBUG] [Thread-194079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:50:43.499 [DEBUG] [Thread-194079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:50:43.520 [INFO] [Thread-194079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:50:43.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:50:44.160 [DEBUG] [Thread-194079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:50:44.160 [DEBUG] [Thread-194079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:50:44.160 [DEBUG] [Thread-194079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:50:44.201 [DEBUG] [Thread-194079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:50:44.201 [DEBUG] [Thread-194079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:50:44.205 [DEBUG] [Thread-194079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:50:44.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:50:44.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:50:44.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:50:44.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:50:44.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:50:44.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:50:44.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:50:44.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:50:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:50:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.701497 -999.00  +12.90   4.55     82  +10.00 1 2 1 2 1    74    0 2.56 -21.56 ----- 4.5 4.5 268.4 7.3 13.9 -21.9 13.9 -20.7 13.5 -19.0 13.8 -20.7
2026-04-12T18:50:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:50:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:50:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.701497
2026-04-12T18:50:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:50:44.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:50:44.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:50:44.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:50:44.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:50:44.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:50:05', tmtdew=3.7472, humidity=78.1012, cloud=0.0, wind=12.2638, temperature=12.7931, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:50:09.341', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:50:44.230 [DEBUG] [Thread-194079] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:50:44.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:50:44.322 [DEBUG] [Thread-194082] [transport.py] [_log()] starting thread (client mode): 0xb0fcdab0
2026-04-12T18:50:44.322 [DEBUG] [Thread-194082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:50:44.338 [DEBUG] [Thread-194082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:50:44.338 [INFO] [Thread-194082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] client lang: <none>
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] server lang: <none>
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] kex follows: False
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:50:44.346 [DEBUG] [Thread-194082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:50:44.347 [DEBUG] [Thread-194082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:50:44.347 [DEBUG] [Thread-194082] [transport.py] [_log()] Compression: none
2026-04-12T18:50:44.347 [DEBUG] [Thread-194082] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:50:44.406 [DEBUG] [Thread-194082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:50:44.407 [DEBUG] [Thread-194082] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:50:44.407 [DEBUG] [Thread-194082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:50:44.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:50:44.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:50:44.462 [DEBUG] [Thread-194082] [transport.py] [_log()] userauth is OK
2026-04-12T18:50:44.462 [DEBUG] [Thread-194082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:50:44.462 [DEBUG] [Thread-194082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:50:44.462 [DEBUG] [Thread-194082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:50:44.462 [DEBUG] [Thread-194082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:50:44.480 [INFO] [Thread-194082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:50:44.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:50:44.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:50:45.320 [DEBUG] [Thread-194082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:50:45.320 [DEBUG] [Thread-194082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:50:45.368 [DEBUG] [Thread-194082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:50:45.368 [DEBUG] [Thread-194082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:50:45.377 [DEBUG] [Thread-194082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:50:45.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:50:45.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:50:45.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:50:45.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:50:45.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:50:45.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:50:45.414 [DEBUG] [Thread-194082] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:50:52.352 [DEBUG] [Thread-194084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:50:56.575 [DEBUG] [Thread-194085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:51:11.628 [DEBUG] [Thread-194086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:51:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:51:15.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:51:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:51:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 50, 40), 3.58324, 78.7991, 0.0, 11.1168, 13.0526, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:51:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:50:40
2026-04-12T18:51:17.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:51:17.340 [DEBUG] [Thread-194087] [transport.py] [_log()] starting thread (client mode): 0xae52d210
2026-04-12T18:51:17.341 [DEBUG] [Thread-194087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:51:17.360 [DEBUG] [Thread-194087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:51:17.360 [INFO] [Thread-194087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] client lang: <none>
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] server lang: <none>
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] kex follows: False
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:51:17.364 [DEBUG] [Thread-194087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:51:17.365 [DEBUG] [Thread-194087] [transport.py] [_log()] Compression: none
2026-04-12T18:51:17.365 [DEBUG] [Thread-194087] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:51:17.382 [DEBUG] [Thread-194087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:51:17.383 [DEBUG] [Thread-194087] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:51:17.383 [DEBUG] [Thread-194087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:51:17.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:51:17.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:51:17.386 [DEBUG] [Thread-194087] [transport.py] [_log()] userauth is OK
2026-04-12T18:51:17.386 [DEBUG] [Thread-194087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:51:17.386 [DEBUG] [Thread-194087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:51:17.386 [DEBUG] [Thread-194087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:51:17.386 [DEBUG] [Thread-194087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:51:17.422 [INFO] [Thread-194087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:51:17.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:51:18.065 [DEBUG] [Thread-194087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:51:18.066 [DEBUG] [Thread-194087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:51:18.066 [DEBUG] [Thread-194087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:51:18.106 [DEBUG] [Thread-194087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:51:18.106 [DEBUG] [Thread-194087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:51:18.109 [DEBUG] [Thread-194087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:51:18.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:51:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:51:18.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:51:18.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:51:18.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:51:18.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:51:18.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:51:18.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:51:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:51:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.701845 -999.00  +12.90   4.48     82  +10.00 1 2 1 2 1    67    0 2.51 -21.41 ..... 4.5 4.5 274.6 6.6 13.9 -21.8 13.8 -20.7 13.5 -19.1 13.8 -20.7
2026-04-12T18:51:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:51:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:51:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.701845
2026-04-12T18:51:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:51:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:51:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:51:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:51:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:51:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:50:40', tmtdew=3.58324, humidity=78.7991, cloud=0.0, wind=11.1168, temperature=13.0526, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:50:39.408', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:51:18.136 [DEBUG] [Thread-194087] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:51:18.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:51:18.231 [DEBUG] [Thread-194090] [transport.py] [_log()] starting thread (client mode): 0xae52dae0
2026-04-12T18:51:18.231 [DEBUG] [Thread-194090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:51:18.246 [DEBUG] [Thread-194090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:51:18.247 [INFO] [Thread-194090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:51:18.254 [DEBUG] [Thread-194090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:51:18.255 [DEBUG] [Thread-194090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:51:18.255 [DEBUG] [Thread-194090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:51:18.255 [DEBUG] [Thread-194090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:18.255 [DEBUG] [Thread-194090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:18.255 [DEBUG] [Thread-194090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:18.255 [DEBUG] [Thread-194090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:18.255 [DEBUG] [Thread-194090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] client lang: <none>
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] server lang: <none>
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] kex follows: False
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:51:18.256 [DEBUG] [Thread-194090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:51:18.257 [DEBUG] [Thread-194090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:51:18.257 [DEBUG] [Thread-194090] [transport.py] [_log()] Compression: none
2026-04-12T18:51:18.257 [DEBUG] [Thread-194090] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:51:18.314 [DEBUG] [Thread-194090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:51:18.314 [DEBUG] [Thread-194090] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:51:18.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:51:18.316 [DEBUG] [Thread-194090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:51:18.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:51:18.370 [DEBUG] [Thread-194090] [transport.py] [_log()] userauth is OK
2026-04-12T18:51:18.370 [DEBUG] [Thread-194090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:51:18.370 [DEBUG] [Thread-194090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:51:18.370 [DEBUG] [Thread-194090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:51:18.370 [DEBUG] [Thread-194090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:51:18.389 [INFO] [Thread-194090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:51:18.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:51:18.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:51:19.195 [DEBUG] [Thread-194090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:51:19.195 [DEBUG] [Thread-194090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:51:19.243 [DEBUG] [Thread-194090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:51:19.243 [DEBUG] [Thread-194090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:51:19.253 [DEBUG] [Thread-194090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:51:19.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:51:19.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:51:19.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:51:19.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:51:19.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:51:19.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:51:19.290 [DEBUG] [Thread-194090] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:51:26.672 [DEBUG] [Thread-194092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:51:41.724 [DEBUG] [Thread-194093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:51:47.373 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:51:47.374 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:51:49.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:51:49.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:51:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:51:50.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 51, 16), 3.6411, 78.4, 0.0, 10.1462, 12.76, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:51:50.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:51:16
2026-04-12T18:51:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:51:51.190 [DEBUG] [Thread-194094] [transport.py] [_log()] starting thread (client mode): 0xb0f41f90
2026-04-12T18:51:51.190 [DEBUG] [Thread-194094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:51:51.212 [DEBUG] [Thread-194094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:51:51.212 [INFO] [Thread-194094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:51:51.215 [DEBUG] [Thread-194094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] client lang: <none>
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] server lang: <none>
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] kex follows: False
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:51:51.216 [DEBUG] [Thread-194094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:51:51.217 [DEBUG] [Thread-194094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:51:51.217 [DEBUG] [Thread-194094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:51:51.217 [DEBUG] [Thread-194094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:51:51.217 [DEBUG] [Thread-194094] [transport.py] [_log()] Compression: none
2026-04-12T18:51:51.217 [DEBUG] [Thread-194094] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:51:51.235 [DEBUG] [Thread-194094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:51:51.236 [DEBUG] [Thread-194094] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:51:51.236 [DEBUG] [Thread-194094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:51:51.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:51:51.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:51:51.238 [DEBUG] [Thread-194094] [transport.py] [_log()] userauth is OK
2026-04-12T18:51:51.239 [DEBUG] [Thread-194094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:51:51.239 [DEBUG] [Thread-194094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:51:51.239 [DEBUG] [Thread-194094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:51:51.239 [DEBUG] [Thread-194094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:51:51.264 [INFO] [Thread-194094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:51:51.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:51:51.937 [DEBUG] [Thread-194094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:51:51.937 [DEBUG] [Thread-194094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:51:51.937 [DEBUG] [Thread-194094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:51:51.978 [DEBUG] [Thread-194094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:51:51.978 [DEBUG] [Thread-194094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:51:51.982 [DEBUG] [Thread-194094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:51:51.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:51:51.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:51:51.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:51:52.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:51:52.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:51:52.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:51:52.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:51:52.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:51:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:51:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.702192 -999.00  +12.80   7.19     82   +9.90 1 2 1 2 1    61    0 2.59 -21.24 ..... 7.2 7.2 269.4 10.6 13.9 -21.8 13.8 -20.7 13.5 -18.8 13.8 -20.7
2026-04-12T18:51:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:51:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:51:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.702192
2026-04-12T18:51:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:51:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:51:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:51:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:51:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:51:52.011 [DEBUG] [Thread-194094] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:51:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:51:16', tmtdew=3.6411, humidity=78.4, cloud=0.0, wind=10.1462, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:51:09.389', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:51:52.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:51:52.106 [DEBUG] [Thread-194097] [transport.py] [_log()] starting thread (client mode): 0xae508fd0
2026-04-12T18:51:52.106 [DEBUG] [Thread-194097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:51:52.121 [DEBUG] [Thread-194097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:51:52.121 [INFO] [Thread-194097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:51:52.128 [DEBUG] [Thread-194097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:51:52.129 [DEBUG] [Thread-194097] [transport.py] [_log()] client lang: <none>
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] server lang: <none>
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] kex follows: False
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:51:52.130 [DEBUG] [Thread-194097] [transport.py] [_log()] Compression: none
2026-04-12T18:51:52.131 [DEBUG] [Thread-194097] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:51:52.189 [DEBUG] [Thread-194097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:51:52.190 [DEBUG] [Thread-194097] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:51:52.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:51:52.192 [DEBUG] [Thread-194097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:51:52.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:51:52.245 [DEBUG] [Thread-194097] [transport.py] [_log()] userauth is OK
2026-04-12T18:51:52.246 [DEBUG] [Thread-194097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:51:52.246 [DEBUG] [Thread-194097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:51:52.246 [DEBUG] [Thread-194097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:51:52.246 [DEBUG] [Thread-194097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:51:52.288 [INFO] [Thread-194097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:51:52.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:51:52.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:51:52.419 [DEBUG] [Thread-194099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:51:53.111 [DEBUG] [Thread-194097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:51:53.111 [DEBUG] [Thread-194097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:51:53.159 [DEBUG] [Thread-194097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:51:53.159 [DEBUG] [Thread-194097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:51:53.169 [DEBUG] [Thread-194097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:51:53.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:51:53.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:51:53.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:51:53.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:51:53.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:51:53.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:51:53.205 [DEBUG] [Thread-194097] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:51:56.761 [DEBUG] [Thread-194100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:11.822 [DEBUG] [Thread-194101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:23.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:52:23.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:52:23.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:52:24.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 51, 51), 3.52488, 79.0996, 0.0, 14.3626, 12.988, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:52:24.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:51:51
2026-04-12T18:52:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:52:25.032 [DEBUG] [Thread-194102] [transport.py] [_log()] starting thread (client mode): 0xae5f1c00
2026-04-12T18:52:25.032 [DEBUG] [Thread-194102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:52:25.053 [DEBUG] [Thread-194102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:52:25.053 [INFO] [Thread-194102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:25.056 [DEBUG] [Thread-194102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] client lang: <none>
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] server lang: <none>
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] kex follows: False
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] Compression: none
2026-04-12T18:52:25.057 [DEBUG] [Thread-194102] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:52:25.066 [DEBUG] [Thread-194102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:52:25.066 [DEBUG] [Thread-194102] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:52:25.067 [DEBUG] [Thread-194102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:52:25.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:52:25.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:52:25.068 [DEBUG] [Thread-194102] [transport.py] [_log()] userauth is OK
2026-04-12T18:52:25.069 [DEBUG] [Thread-194102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:52:25.069 [DEBUG] [Thread-194102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:52:25.069 [DEBUG] [Thread-194102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:52:25.069 [DEBUG] [Thread-194102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:52:25.093 [INFO] [Thread-194102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:52:25.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:52:25.699 [DEBUG] [Thread-194102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:52:25.699 [DEBUG] [Thread-194102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:52:25.700 [DEBUG] [Thread-194102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:52:25.740 [DEBUG] [Thread-194102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:52:25.740 [DEBUG] [Thread-194102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:52:25.744 [DEBUG] [Thread-194102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:52:25.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:52:25.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:52:25.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:52:25.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:52:25.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:52:25.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:52:25.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:52:25.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:52:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:52:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.702887 -999.00  +12.80   6.75     82   +9.90 1 2 1 2 1    50    0 2.49 -22.24 ..... 6.8 6.8 267.0 9.5 13.9 -21.7 13.8 -20.7 13.5 -18.8 13.8 -20.7
2026-04-12T18:52:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:52:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:52:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.702887
2026-04-12T18:52:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:52:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:52:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:52:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:52:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:52:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:51:51', tmtdew=3.52488, humidity=79.0996, cloud=0.0, wind=14.3626, temperature=12.988, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:52:09.437', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:52:25.771 [DEBUG] [Thread-194102] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:52:25.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:52:25.864 [DEBUG] [Thread-194105] [transport.py] [_log()] starting thread (client mode): 0xae536ef0
2026-04-12T18:52:25.864 [DEBUG] [Thread-194105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:52:25.879 [DEBUG] [Thread-194105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:52:25.879 [INFO] [Thread-194105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:25.886 [DEBUG] [Thread-194105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] client lang: <none>
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] server lang: <none>
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] kex follows: False
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] Compression: none
2026-04-12T18:52:25.887 [DEBUG] [Thread-194105] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:52:25.946 [DEBUG] [Thread-194105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:52:25.947 [DEBUG] [Thread-194105] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:52:25.947 [DEBUG] [Thread-194105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:52:25.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:52:25.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:52:26.007 [DEBUG] [Thread-194105] [transport.py] [_log()] userauth is OK
2026-04-12T18:52:26.007 [DEBUG] [Thread-194105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:52:26.008 [DEBUG] [Thread-194105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:52:26.008 [DEBUG] [Thread-194105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:52:26.008 [DEBUG] [Thread-194105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:52:26.030 [INFO] [Thread-194105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:52:26.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:52:26.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:52:26.856 [DEBUG] [Thread-194107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:26.857 [DEBUG] [Thread-194105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:52:26.858 [DEBUG] [Thread-194105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:52:26.906 [DEBUG] [Thread-194105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:52:26.906 [DEBUG] [Thread-194105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:52:26.916 [DEBUG] [Thread-194105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:52:26.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:52:26.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:52:26.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:52:26.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:52:26.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:52:26.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:52:26.954 [DEBUG] [Thread-194105] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:52:41.914 [DEBUG] [Thread-194108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:51.627 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:51.629 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:52.480 [DEBUG] [Thread-194109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:56.951 [DEBUG] [Thread-194110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:52:56.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:52:56.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:52:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:52:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 52, 27), 3.55222, 78.5995, 0.0, 10.7467, 12.6608, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:52:58.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:52:27
2026-04-12T18:52:58.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:52:58.849 [DEBUG] [Thread-194111] [transport.py] [_log()] starting thread (client mode): 0xae5a7bb0
2026-04-12T18:52:58.850 [DEBUG] [Thread-194111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:52:58.877 [DEBUG] [Thread-194111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:52:58.877 [INFO] [Thread-194111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:52:58.878 [DEBUG] [Thread-194111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:52:58.878 [DEBUG] [Thread-194111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] client lang: <none>
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] server lang: <none>
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] kex follows: False
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] Compression: none
2026-04-12T18:52:58.879 [DEBUG] [Thread-194111] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:52:58.897 [DEBUG] [Thread-194111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:52:58.897 [DEBUG] [Thread-194111] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:52:58.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:52:58.898 [DEBUG] [Thread-194111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:52:58.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:52:58.901 [DEBUG] [Thread-194111] [transport.py] [_log()] userauth is OK
2026-04-12T18:52:58.901 [DEBUG] [Thread-194111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:52:58.901 [DEBUG] [Thread-194111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:52:58.901 [DEBUG] [Thread-194111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:52:58.901 [DEBUG] [Thread-194111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:52:58.926 [INFO] [Thread-194111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:52:58.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:52:59.578 [DEBUG] [Thread-194111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:52:59.578 [DEBUG] [Thread-194111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:52:59.578 [DEBUG] [Thread-194111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:52:59.619 [DEBUG] [Thread-194111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:52:59.619 [DEBUG] [Thread-194111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:52:59.622 [DEBUG] [Thread-194111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:52:59.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:52:59.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:52:59.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:52:59.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:52:59.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:52:59.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:52:59.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:52:59.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:52:59.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:52:59.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.703234 -999.00  +12.80   7.74     82   +9.90 1 2 1 2 1    45    0 2.52 -21.42 ..... 7.7 7.7 274.0 9.2 13.9 -21.9 13.8 -20.6 13.4 -18.8 13.8 -20.6
2026-04-12T18:52:59.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:52:59.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:52:59.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.703234
2026-04-12T18:52:59.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:52:59.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:52:59.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:52:59.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:52:59.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:52:59.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:52:27', tmtdew=3.55222, humidity=78.5995, cloud=0.0, wind=10.7467, temperature=12.6608, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:52:39.418', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:52:59.649 [DEBUG] [Thread-194111] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:52:59.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:52:59.744 [DEBUG] [Thread-194114] [transport.py] [_log()] starting thread (client mode): 0xae51a1d0
2026-04-12T18:52:59.745 [DEBUG] [Thread-194114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:52:59.759 [DEBUG] [Thread-194114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:52:59.759 [INFO] [Thread-194114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:52:59.767 [DEBUG] [Thread-194114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:52:59.767 [DEBUG] [Thread-194114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:52:59.767 [DEBUG] [Thread-194114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:52:59.767 [DEBUG] [Thread-194114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:59.767 [DEBUG] [Thread-194114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:52:59.767 [DEBUG] [Thread-194114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:59.767 [DEBUG] [Thread-194114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] client lang: <none>
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] server lang: <none>
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] kex follows: False
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:52:59.768 [DEBUG] [Thread-194114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:52:59.769 [DEBUG] [Thread-194114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:52:59.769 [DEBUG] [Thread-194114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:52:59.769 [DEBUG] [Thread-194114] [transport.py] [_log()] Compression: none
2026-04-12T18:52:59.769 [DEBUG] [Thread-194114] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:52:59.825 [DEBUG] [Thread-194114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:52:59.825 [DEBUG] [Thread-194114] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:52:59.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:52:59.827 [DEBUG] [Thread-194114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:52:59.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:52:59.884 [DEBUG] [Thread-194114] [transport.py] [_log()] userauth is OK
2026-04-12T18:52:59.885 [DEBUG] [Thread-194114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:52:59.885 [DEBUG] [Thread-194114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:52:59.885 [DEBUG] [Thread-194114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:52:59.885 [DEBUG] [Thread-194114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:52:59.904 [INFO] [Thread-194114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:52:59.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:52:59.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:53:00.760 [DEBUG] [Thread-194114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:53:00.760 [DEBUG] [Thread-194114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:53:00.807 [DEBUG] [Thread-194114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:53:00.807 [DEBUG] [Thread-194114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:53:00.815 [DEBUG] [Thread-194114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:53:00.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:53:00.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:53:00.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:53:00.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:53:00.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:53:00.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:53:00.847 [DEBUG] [Thread-194114] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:53:11.993 [DEBUG] [Thread-194116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:53:27.047 [DEBUG] [Thread-194117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:53:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:53:30.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:53:30.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:53:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 53, 2), 3.54244, 78.6493, 0.0, 11.5582, 12.6442, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:53:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:53:02
2026-04-12T18:53:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:53:32.694 [DEBUG] [Thread-194118] [transport.py] [_log()] starting thread (client mode): 0xae5a7940
2026-04-12T18:53:32.694 [DEBUG] [Thread-194118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:53:32.715 [DEBUG] [Thread-194118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:53:32.715 [INFO] [Thread-194118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:53:32.718 [DEBUG] [Thread-194118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:53:32.718 [DEBUG] [Thread-194118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] client lang: <none>
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] server lang: <none>
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] kex follows: False
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:53:32.719 [DEBUG] [Thread-194118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:53:32.720 [DEBUG] [Thread-194118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:53:32.720 [DEBUG] [Thread-194118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:53:32.720 [DEBUG] [Thread-194118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:53:32.720 [DEBUG] [Thread-194118] [transport.py] [_log()] Compression: none
2026-04-12T18:53:32.720 [DEBUG] [Thread-194118] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:53:32.739 [DEBUG] [Thread-194118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:53:32.740 [DEBUG] [Thread-194118] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:53:32.740 [DEBUG] [Thread-194118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:53:32.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:53:32.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:53:32.742 [DEBUG] [Thread-194118] [transport.py] [_log()] userauth is OK
2026-04-12T18:53:32.743 [DEBUG] [Thread-194118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:53:32.743 [DEBUG] [Thread-194118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:53:32.743 [DEBUG] [Thread-194118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:53:32.743 [DEBUG] [Thread-194118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:53:32.767 [INFO] [Thread-194118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:53:32.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:53:33.308 [DEBUG] [Thread-194118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:53:33.317 [DEBUG] [Thread-194118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:53:33.317 [DEBUG] [Thread-194118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:53:33.349 [DEBUG] [Thread-194118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:53:33.349 [DEBUG] [Thread-194118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:53:33.352 [DEBUG] [Thread-194118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:53:33.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:53:33.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:53:33.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:53:33.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:53:33.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:53:33.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:53:33.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:53:33.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:53:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:53:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.703581 -999.00  +12.80   6.11     82   +9.90 1 2 1 2 1    41    0 2.60 -19.54 ..... 6.1 6.1 289.4 11.2 13.9 -21.8 13.8 -20.8 13.4 -18.7 13.8 -20.6
2026-04-12T18:53:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:53:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:53:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.703581
2026-04-12T18:53:33.375 [DEBUG] [Thread-194118] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:53:33.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:53:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:53:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:53:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:53:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:53:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:53:02', tmtdew=3.54244, humidity=78.6493, cloud=0.0, wind=11.5582, temperature=12.6442, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:53:09.398', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:53:33.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:53:33.466 [DEBUG] [Thread-194121] [transport.py] [_log()] starting thread (client mode): 0xae536ef0
2026-04-12T18:53:33.466 [DEBUG] [Thread-194121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:53:33.481 [DEBUG] [Thread-194121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:53:33.481 [INFO] [Thread-194121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:53:33.488 [DEBUG] [Thread-194121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] client lang: <none>
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] server lang: <none>
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] kex follows: False
2026-04-12T18:53:33.489 [DEBUG] [Thread-194121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:53:33.490 [DEBUG] [Thread-194121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:53:33.490 [DEBUG] [Thread-194121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:53:33.490 [DEBUG] [Thread-194121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:53:33.490 [DEBUG] [Thread-194121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:53:33.490 [DEBUG] [Thread-194121] [transport.py] [_log()] Compression: none
2026-04-12T18:53:33.490 [DEBUG] [Thread-194121] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:53:33.548 [DEBUG] [Thread-194121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:53:33.548 [DEBUG] [Thread-194121] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:53:33.549 [DEBUG] [Thread-194121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:53:33.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:53:33.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:53:33.605 [DEBUG] [Thread-194121] [transport.py] [_log()] userauth is OK
2026-04-12T18:53:33.605 [DEBUG] [Thread-194121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:53:33.605 [DEBUG] [Thread-194121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:53:33.605 [DEBUG] [Thread-194121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:53:33.605 [DEBUG] [Thread-194121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:53:33.625 [INFO] [Thread-194121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:53:33.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:53:33.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:53:34.446 [DEBUG] [Thread-194121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:53:34.447 [DEBUG] [Thread-194121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:53:34.494 [DEBUG] [Thread-194121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:53:34.494 [DEBUG] [Thread-194121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:53:34.502 [DEBUG] [Thread-194121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:53:34.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:53: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')
2026-04-12T18:53: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
2026-04-12T18:53:34.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:53:34.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:53:34.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:53:34.538 [DEBUG] [Thread-194121] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:53:42.087 [DEBUG] [Thread-194123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:53:52.537 [DEBUG] [Thread-194124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:53:56.682 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:53:56.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:53:57.135 [DEBUG] [Thread-194125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:54:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:54:04.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:54:04.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:54:05.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 53, 38), 3.49716, 79.2333, 0.0, 12.3869, 12.8893, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:54:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:53:38
2026-04-12T18:54:06.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:54:06.369 [DEBUG] [Thread-194126] [transport.py] [_log()] starting thread (client mode): 0xb0f6f670
2026-04-12T18:54:06.369 [DEBUG] [Thread-194126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:54:06.390 [DEBUG] [Thread-194126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:54:06.390 [INFO] [Thread-194126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:54:06.392 [DEBUG] [Thread-194126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] client lang: <none>
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] server lang: <none>
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] kex follows: False
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] Compression: none
2026-04-12T18:54:06.393 [DEBUG] [Thread-194126] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:54:06.410 [DEBUG] [Thread-194126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:54:06.411 [DEBUG] [Thread-194126] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:54:06.411 [DEBUG] [Thread-194126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:54:06.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:54:06.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:54:06.413 [DEBUG] [Thread-194126] [transport.py] [_log()] userauth is OK
2026-04-12T18:54:06.413 [DEBUG] [Thread-194126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:54:06.413 [DEBUG] [Thread-194126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:54:06.413 [DEBUG] [Thread-194126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:54:06.413 [DEBUG] [Thread-194126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:54:06.434 [INFO] [Thread-194126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:54:06.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:54:07.083 [DEBUG] [Thread-194126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:54:07.083 [DEBUG] [Thread-194126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:54:07.083 [DEBUG] [Thread-194126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:54:07.124 [DEBUG] [Thread-194126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:54:07.124 [DEBUG] [Thread-194126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:54:07.127 [DEBUG] [Thread-194126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:54:07.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:54:07.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:54:07.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:54:07.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:54:07.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:54:07.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:54:07.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:54:07.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:54:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:54:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.703928 -999.00  +12.80   5.80     82   +9.90 1 2 1 2 1    37    0 2.54 -20.24 ..... 5.8 5.8 274.8 9.5 13.9 -21.6 13.8 -20.5 13.4 -18.7 13.7 -20.5
2026-04-12T18:54:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:54:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:54:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.703928
2026-04-12T18:54:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:54:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:54:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:54:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:54:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:54:07.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:53:38', tmtdew=3.49716, humidity=79.2333, cloud=0.0, wind=12.3869, temperature=12.8893, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:53:39.379', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:54:07.152 [DEBUG] [Thread-194126] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:54:07.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:54:07.246 [DEBUG] [Thread-194129] [transport.py] [_log()] starting thread (client mode): 0xae52e0b0
2026-04-12T18:54:07.246 [DEBUG] [Thread-194129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:54:07.260 [DEBUG] [Thread-194129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:54:07.260 [INFO] [Thread-194129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] client lang: <none>
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] server lang: <none>
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] kex follows: False
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] Compression: none
2026-04-12T18:54:07.268 [DEBUG] [Thread-194129] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:54:07.327 [DEBUG] [Thread-194129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:54:07.328 [DEBUG] [Thread-194129] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:54:07.329 [DEBUG] [Thread-194129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:54:07.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:54:07.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:54:07.383 [DEBUG] [Thread-194129] [transport.py] [_log()] userauth is OK
2026-04-12T18:54:07.384 [DEBUG] [Thread-194129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:54:07.384 [DEBUG] [Thread-194129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:54:07.384 [DEBUG] [Thread-194129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:54:07.384 [DEBUG] [Thread-194129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:54:07.403 [INFO] [Thread-194129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:54:07.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:54:07.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:54:08.227 [DEBUG] [Thread-194129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:54:08.228 [DEBUG] [Thread-194129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:54:08.276 [DEBUG] [Thread-194129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:54:08.276 [DEBUG] [Thread-194129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:54:08.285 [DEBUG] [Thread-194129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:54:08.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:54:08.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:54:08.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:54:08.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:54:08.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:54:08.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:54:08.323 [DEBUG] [Thread-194129] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:54:12.170 [DEBUG] [Thread-194131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:54:27.209 [DEBUG] [Thread-194132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:54:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:54:38.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:54:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:54:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 54, 13), 3.58167, 78.6999, 0.0, 11.7169, 12.6453, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:54:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:54:13
2026-04-12T18:54:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:54:40.178 [DEBUG] [Thread-194133] [transport.py] [_log()] starting thread (client mode): 0xae5e67d0
2026-04-12T18:54:40.179 [DEBUG] [Thread-194133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:54:40.199 [DEBUG] [Thread-194133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:54:40.200 [INFO] [Thread-194133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:54:40.203 [DEBUG] [Thread-194133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] client lang: <none>
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] server lang: <none>
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] kex follows: False
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] Compression: none
2026-04-12T18:54:40.204 [DEBUG] [Thread-194133] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:54:40.227 [DEBUG] [Thread-194133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:54:40.227 [DEBUG] [Thread-194133] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:54:40.228 [DEBUG] [Thread-194133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:54:40.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:54:40.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:54:40.230 [DEBUG] [Thread-194133] [transport.py] [_log()] userauth is OK
2026-04-12T18:54:40.230 [DEBUG] [Thread-194133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:54:40.231 [DEBUG] [Thread-194133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:54:40.231 [DEBUG] [Thread-194133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:54:40.231 [DEBUG] [Thread-194133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:54:40.266 [INFO] [Thread-194133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:54:40.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:54:40.928 [DEBUG] [Thread-194133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:54:40.929 [DEBUG] [Thread-194133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:54:40.929 [DEBUG] [Thread-194133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:54:40.970 [DEBUG] [Thread-194133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:54:40.970 [DEBUG] [Thread-194133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:54:40.974 [DEBUG] [Thread-194133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:54:40.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:54:40.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:54:40.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:54:40.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:54:40.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:54:40.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:54:40.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:54:40.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:54:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:54:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.704275 -999.00  +12.70   6.93     82   +9.90 1 2 1 2 1    33    0 2.57 -19.09 ..... 6.9 6.9 283.4 9.1 13.9 -21.7 13.8 -20.7 13.3 -18.6 13.7 -20.6
2026-04-12T18:54:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:54:41.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:54:41.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.704275
2026-04-12T18:54:41.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:54:41.007 [DEBUG] [Thread-194133] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:54:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:54:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:54:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:54:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:54:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:54:13', tmtdew=3.58167, humidity=78.6999, cloud=0.0, wind=11.7169, temperature=12.6453, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:54:09.360', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:54:41.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:54:41.103 [DEBUG] [Thread-194136] [transport.py] [_log()] starting thread (client mode): 0xae5a74f0
2026-04-12T18:54:41.103 [DEBUG] [Thread-194136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:54:41.117 [DEBUG] [Thread-194136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:54:41.118 [INFO] [Thread-194136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:54:41.125 [DEBUG] [Thread-194136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] client lang: <none>
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] server lang: <none>
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] kex follows: False
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] Compression: none
2026-04-12T18:54:41.126 [DEBUG] [Thread-194136] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:54:41.183 [DEBUG] [Thread-194136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:54:41.183 [DEBUG] [Thread-194136] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:54:41.184 [DEBUG] [Thread-194136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:54:41.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:54:41.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:54:41.239 [DEBUG] [Thread-194136] [transport.py] [_log()] userauth is OK
2026-04-12T18:54:41.240 [DEBUG] [Thread-194136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:54:41.240 [DEBUG] [Thread-194136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:54:41.240 [DEBUG] [Thread-194136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:54:41.240 [DEBUG] [Thread-194136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:54:41.262 [INFO] [Thread-194136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:54:41.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:54:41.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:54:42.087 [DEBUG] [Thread-194136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:54:42.087 [DEBUG] [Thread-194136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:54:42.136 [DEBUG] [Thread-194136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:54:42.136 [DEBUG] [Thread-194136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:54:42.149 [DEBUG] [Thread-194136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:54:42.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:54:42.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:54:42.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:54:42.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:54:42.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:54:42.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:54:42.185 [DEBUG] [Thread-194136] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:54:42.244 [DEBUG] [Thread-194138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:54:52.620 [DEBUG] [Thread-194139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:54:57.309 [DEBUG] [Thread-194140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:01.250 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:01.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:55:12.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:55:12.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:55:12.345 [DEBUG] [Thread-194141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 54, 49), 3.41549, 79.6651, 0.0, 12.9161, 12.8568, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:55:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:54:49
2026-04-12T18:55:13.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:55:14.033 [DEBUG] [Thread-194142] [transport.py] [_log()] starting thread (client mode): 0xae5f2170
2026-04-12T18:55:14.033 [DEBUG] [Thread-194142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:55:14.052 [DEBUG] [Thread-194142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:55:14.053 [INFO] [Thread-194142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] client lang: <none>
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] server lang: <none>
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] kex follows: False
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:55:14.056 [DEBUG] [Thread-194142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:55:14.057 [DEBUG] [Thread-194142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:55:14.057 [DEBUG] [Thread-194142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:55:14.057 [DEBUG] [Thread-194142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:55:14.057 [DEBUG] [Thread-194142] [transport.py] [_log()] Compression: none
2026-04-12T18:55:14.057 [DEBUG] [Thread-194142] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:55:14.073 [DEBUG] [Thread-194142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:55:14.074 [DEBUG] [Thread-194142] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:55:14.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:55:14.075 [DEBUG] [Thread-194142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:55:14.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:55:14.077 [DEBUG] [Thread-194142] [transport.py] [_log()] userauth is OK
2026-04-12T18:55:14.077 [DEBUG] [Thread-194142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:55:14.077 [DEBUG] [Thread-194142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:55:14.077 [DEBUG] [Thread-194142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:55:14.078 [DEBUG] [Thread-194142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:55:14.103 [INFO] [Thread-194142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:55:14.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:55:22.566 [DEBUG] [Thread-194142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:55:22.566 [DEBUG] [Thread-194142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:55:22.567 [DEBUG] [Thread-194142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:55:22.608 [DEBUG] [Thread-194142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:55:22.608 [DEBUG] [Thread-194142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:55:22.612 [DEBUG] [Thread-194142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:55:22.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:55:22.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:55:22.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:55:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:55:22.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:55:22.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:55:22.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:55:22.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:55:22.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:55:22.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.704623 -999.00  +12.70   6.66     82   +9.90 1 2 1 2 1    30    0 2.54 -19.86 ..... 6.7 6.7 288.8 8.8 13.9 -21.7 13.8 -20.6 13.4 -18.8 13.7 -20.6
2026-04-12T18:55:22.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:55:22.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:55:22.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.704623
2026-04-12T18:55:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:55:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:55:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:55:22.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:55:22.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:55:22.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:54:49', tmtdew=3.41549, humidity=79.6651, cloud=0.0, wind=12.9161, temperature=12.8568, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:54:39.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:55:22.688 [DEBUG] [Thread-194142] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:55:22.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:55:22.784 [DEBUG] [Thread-194145] [transport.py] [_log()] starting thread (client mode): 0xae519c00
2026-04-12T18:55:22.784 [DEBUG] [Thread-194145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:55:22.799 [DEBUG] [Thread-194145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:55:22.799 [INFO] [Thread-194145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:55:22.807 [DEBUG] [Thread-194145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:55:22.807 [DEBUG] [Thread-194145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:55:22.807 [DEBUG] [Thread-194145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:55:22.807 [DEBUG] [Thread-194145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:22.807 [DEBUG] [Thread-194145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] client lang: <none>
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] server lang: <none>
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] kex follows: False
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] Compression: none
2026-04-12T18:55:22.808 [DEBUG] [Thread-194145] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:55:22.866 [DEBUG] [Thread-194145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:55:22.867 [DEBUG] [Thread-194145] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:55:22.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:55:22.868 [DEBUG] [Thread-194145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:55:22.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:55:22.922 [DEBUG] [Thread-194145] [transport.py] [_log()] userauth is OK
2026-04-12T18:55:22.923 [DEBUG] [Thread-194145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:55:22.923 [DEBUG] [Thread-194145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:55:22.923 [DEBUG] [Thread-194145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:55:22.923 [DEBUG] [Thread-194145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:55:22.941 [INFO] [Thread-194145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:55:22.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:55:22.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:55:23.758 [DEBUG] [Thread-194145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:55:23.758 [DEBUG] [Thread-194145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:55:23.806 [DEBUG] [Thread-194145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:55:23.806 [DEBUG] [Thread-194145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:55:23.816 [DEBUG] [Thread-194145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:55:23.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:55:23.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:55:23.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:55:23.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:55:23.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:55:23.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:55:23.852 [DEBUG] [Thread-194145] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:55:27.386 [DEBUG] [Thread-194147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:42.437 [DEBUG] [Thread-194148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:52.686 [DEBUG] [Thread-194149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:55:53.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:55:53.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:55:55.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 55, 24), 3.5046, 79.3494, 0.0, 9.75816, 12.6287, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:55:55.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:55:24
2026-04-12T18:55:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:55:55.687 [DEBUG] [Thread-194150] [transport.py] [_log()] starting thread (client mode): 0xae5a55a0
2026-04-12T18:55:55.688 [DEBUG] [Thread-194150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:55:55.703 [DEBUG] [Thread-194150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:55:55.703 [INFO] [Thread-194150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] client lang: <none>
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] server lang: <none>
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] kex follows: False
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:55:55.705 [DEBUG] [Thread-194150] [transport.py] [_log()] Compression: none
2026-04-12T18:55:55.706 [DEBUG] [Thread-194150] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:55:55.723 [DEBUG] [Thread-194150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:55:55.723 [DEBUG] [Thread-194150] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:55:55.724 [DEBUG] [Thread-194150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:55:55.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:55:55.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:55:55.725 [DEBUG] [Thread-194150] [transport.py] [_log()] userauth is OK
2026-04-12T18:55:55.726 [DEBUG] [Thread-194150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:55:55.726 [DEBUG] [Thread-194150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:55:55.726 [DEBUG] [Thread-194150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:55:55.726 [DEBUG] [Thread-194150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:55:55.750 [INFO] [Thread-194150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:55:55.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:55:56.525 [DEBUG] [Thread-194150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:55:56.525 [DEBUG] [Thread-194150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:55:56.525 [DEBUG] [Thread-194150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:55:56.566 [DEBUG] [Thread-194150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:55:56.566 [DEBUG] [Thread-194150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:55:56.569 [DEBUG] [Thread-194150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:55:56.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:55:56.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:55:56.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:55:56.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:55:56.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:55:56.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:55:56.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:55:56.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:55:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:55:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.704970 -999.00  +12.70   8.47     82   +9.90 1 2 1 2 1    27    0 2.52 -19.89 ..... 8.5 8.5 293.1 10.8 13.8 -21.7 13.8 -20.6 13.4 -18.8 13.7 -20.6
2026-04-12T18:55:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:55:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:55:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.704970
2026-04-12T18:55:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:55:56.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:55:56.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:55:56.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:55:56.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:55:56.594 [DEBUG] [Thread-194150] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:55:56.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:55:24', tmtdew=3.5046, humidity=79.3494, cloud=0.0, wind=9.75816, temperature=12.6287, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:55:09.408', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:55:56.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:55:56.687 [DEBUG] [Thread-194153] [transport.py] [_log()] starting thread (client mode): 0xae52d660
2026-04-12T18:55:56.688 [DEBUG] [Thread-194153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:55:56.702 [DEBUG] [Thread-194153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:55:56.702 [INFO] [Thread-194153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:55:56.710 [DEBUG] [Thread-194153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:55:56.710 [DEBUG] [Thread-194153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:55:56.710 [DEBUG] [Thread-194153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:55:56.710 [DEBUG] [Thread-194153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:56.710 [DEBUG] [Thread-194153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] client lang: <none>
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] server lang: <none>
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] kex follows: False
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:55:56.711 [DEBUG] [Thread-194153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:55:56.712 [DEBUG] [Thread-194153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:55:56.712 [DEBUG] [Thread-194153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:55:56.712 [DEBUG] [Thread-194153] [transport.py] [_log()] Compression: none
2026-04-12T18:55:56.712 [DEBUG] [Thread-194153] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:55:56.775 [DEBUG] [Thread-194153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:55:56.775 [DEBUG] [Thread-194153] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:55:56.776 [DEBUG] [Thread-194153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:55:56.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:55:56.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:55:56.834 [DEBUG] [Thread-194153] [transport.py] [_log()] userauth is OK
2026-04-12T18:55:56.835 [DEBUG] [Thread-194153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:55:56.835 [DEBUG] [Thread-194153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:55:56.835 [DEBUG] [Thread-194153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:55:56.835 [DEBUG] [Thread-194153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:55:56.853 [INFO] [Thread-194153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:55:56.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:55:56.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:55:57.480 [DEBUG] [Thread-194155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:55:57.680 [DEBUG] [Thread-194153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:55:57.680 [DEBUG] [Thread-194153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:55:57.728 [DEBUG] [Thread-194153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:55:57.728 [DEBUG] [Thread-194153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:55:57.737 [DEBUG] [Thread-194153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:55:57.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:55: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')
2026-04-12T18:55:57.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:55:57.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:55:57.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:55:57.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:55:57.771 [DEBUG] [Thread-194153] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:56:05.548 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:56:05.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:56:12.540 [DEBUG] [Thread-194156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:56:27.577 [DEBUG] [Thread-194157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:56:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:56:27.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:56:27.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:56:29.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 55, 24), 3.5046, 79.3494, 0.0, 9.75816, 12.6287, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:56:29.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:55:24
2026-04-12T18:56:29.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:56:29.654 [DEBUG] [Thread-194158] [transport.py] [_log()] starting thread (client mode): 0xb0f6e020
2026-04-12T18:56:29.654 [DEBUG] [Thread-194158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:56:29.673 [DEBUG] [Thread-194158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:56:29.673 [INFO] [Thread-194158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:56:29.676 [DEBUG] [Thread-194158] [transport.py] [_log()] client lang: <none>
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] server lang: <none>
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] kex follows: False
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] Compression: none
2026-04-12T18:56:29.677 [DEBUG] [Thread-194158] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:56:29.696 [DEBUG] [Thread-194158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:56:29.696 [DEBUG] [Thread-194158] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:56:29.697 [DEBUG] [Thread-194158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:56:29.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:56:29.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:56:29.700 [DEBUG] [Thread-194158] [transport.py] [_log()] userauth is OK
2026-04-12T18:56:29.700 [DEBUG] [Thread-194158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:56:29.700 [DEBUG] [Thread-194158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:56:29.700 [DEBUG] [Thread-194158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:56:29.700 [DEBUG] [Thread-194158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:56:29.718 [INFO] [Thread-194158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:56:29.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:56:30.493 [DEBUG] [Thread-194158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:56:30.493 [DEBUG] [Thread-194158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:56:30.494 [DEBUG] [Thread-194158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:56:30.534 [DEBUG] [Thread-194158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:56:30.534 [DEBUG] [Thread-194158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:56:30.536 [DEBUG] [Thread-194158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:56:30.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:56:30.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:56:30.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:56:30.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:56:30.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:56:30.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:56:30.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:56:30.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:56:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:56:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.705317 -999.00  +12.70   5.32     82   +9.90 1 2 1 2 1    24    0 2.46 -20.47 ..... 5.3 5.3 292.1 11.3 13.8 -21.9 13.8 -20.6 13.4 -18.7 13.7 -20.5
2026-04-12T18:56:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:56:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:56:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.705317
2026-04-12T18:56:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:56:30.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:56:30.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:56:30.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:56:30.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:56:30.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:55:24', tmtdew=3.5046, humidity=79.3494, cloud=0.0, wind=9.75816, temperature=12.6287, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:55:39.389', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:56:30.562 [DEBUG] [Thread-194158] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:56:30.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:56:30.652 [DEBUG] [Thread-194161] [transport.py] [_log()] starting thread (client mode): 0xae519f90
2026-04-12T18:56:30.652 [DEBUG] [Thread-194161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:56:30.667 [DEBUG] [Thread-194161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:56:30.667 [INFO] [Thread-194161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:56:30.675 [DEBUG] [Thread-194161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:56:30.675 [DEBUG] [Thread-194161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:56:30.675 [DEBUG] [Thread-194161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:56:30.675 [DEBUG] [Thread-194161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:56:30.675 [DEBUG] [Thread-194161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:56:30.675 [DEBUG] [Thread-194161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] client lang: <none>
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] server lang: <none>
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] kex follows: False
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:56:30.676 [DEBUG] [Thread-194161] [transport.py] [_log()] Compression: none
2026-04-12T18:56:30.677 [DEBUG] [Thread-194161] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:56:30.732 [DEBUG] [Thread-194161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:56:30.732 [DEBUG] [Thread-194161] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:56:30.733 [DEBUG] [Thread-194161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:56:30.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:56:30.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:56:30.789 [DEBUG] [Thread-194161] [transport.py] [_log()] userauth is OK
2026-04-12T18:56:30.789 [DEBUG] [Thread-194161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:56:30.789 [DEBUG] [Thread-194161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:56:30.790 [DEBUG] [Thread-194161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:56:30.790 [DEBUG] [Thread-194161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:56:30.815 [INFO] [Thread-194161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:56:30.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:56:30.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:56:31.660 [DEBUG] [Thread-194161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:56:31.660 [DEBUG] [Thread-194161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:56:31.710 [DEBUG] [Thread-194161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:56:31.711 [DEBUG] [Thread-194161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:56:31.721 [DEBUG] [Thread-194161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:56:31.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:56:31.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:56:31.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:56:31.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:56:31.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:56:31.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:56:31.753 [DEBUG] [Thread-194161] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:56:42.610 [DEBUG] [Thread-194163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:56:52.755 [DEBUG] [Thread-194164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:56:57.664 [DEBUG] [Thread-194165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:57:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:57:01.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:57:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:57:03.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 56, 35), 3.35968, 79.9647, 0.0, 11.8224, 12.8578, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:57:03.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:56:35
2026-04-12T18:57:03.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:57:03.561 [DEBUG] [Thread-194166] [transport.py] [_log()] starting thread (client mode): 0xae5a51b0
2026-04-12T18:57:03.561 [DEBUG] [Thread-194166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:57:03.583 [DEBUG] [Thread-194166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:57:03.583 [INFO] [Thread-194166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] client lang: <none>
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] server lang: <none>
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] kex follows: False
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:57:03.587 [DEBUG] [Thread-194166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:57:03.588 [DEBUG] [Thread-194166] [transport.py] [_log()] Compression: none
2026-04-12T18:57:03.588 [DEBUG] [Thread-194166] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:57:03.606 [DEBUG] [Thread-194166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:57:03.607 [DEBUG] [Thread-194166] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:57:03.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:57:03.608 [DEBUG] [Thread-194166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:57:03.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:57:03.611 [DEBUG] [Thread-194166] [transport.py] [_log()] userauth is OK
2026-04-12T18:57:03.611 [DEBUG] [Thread-194166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:57:03.611 [DEBUG] [Thread-194166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:57:03.611 [DEBUG] [Thread-194166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:57:03.611 [DEBUG] [Thread-194166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:57:03.636 [INFO] [Thread-194166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:57:03.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:57:04.436 [DEBUG] [Thread-194166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:57:04.436 [DEBUG] [Thread-194166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:57:04.437 [DEBUG] [Thread-194166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:57:04.477 [DEBUG] [Thread-194166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:57:04.478 [DEBUG] [Thread-194166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:57:04.481 [DEBUG] [Thread-194166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:57:04.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:57:04.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:57:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:57:04.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:57:04.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:57:04.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:57:04.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:57:04.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:57:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:57:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.706011 -999.00  +12.70   8.30     83   +9.90 1 2 1 2 1    20    0 2.47 -20.59 ----- 8.3 8.3 283.7 11.7 13.8 -21.8 13.7 -20.6 13.3 -18.6 13.6 -20.5
2026-04-12T18:57:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:57:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:57:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.706011
2026-04-12T18:57:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:57:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:57:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:57:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:57:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:57:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:56:35', tmtdew=3.35968, humidity=79.9647, cloud=0.0, wind=11.8224, temperature=12.8578, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:56:39.350', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:57:04.507 [DEBUG] [Thread-194166] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:57:04.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:57:04.603 [DEBUG] [Thread-194169] [transport.py] [_log()] starting thread (client mode): 0xae5a4a60
2026-04-12T18:57:04.603 [DEBUG] [Thread-194169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:57:04.618 [DEBUG] [Thread-194169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:57:04.619 [INFO] [Thread-194169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:57:04.626 [DEBUG] [Thread-194169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:57:04.627 [DEBUG] [Thread-194169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] client lang: <none>
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] server lang: <none>
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] kex follows: False
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] Compression: none
2026-04-12T18:57:04.628 [DEBUG] [Thread-194169] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:57:04.690 [DEBUG] [Thread-194169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:57:04.690 [DEBUG] [Thread-194169] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:57:04.691 [DEBUG] [Thread-194169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:57:04.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:57:04.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:57:04.749 [DEBUG] [Thread-194169] [transport.py] [_log()] userauth is OK
2026-04-12T18:57:04.750 [DEBUG] [Thread-194169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:57:04.750 [DEBUG] [Thread-194169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:57:04.750 [DEBUG] [Thread-194169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:57:04.750 [DEBUG] [Thread-194169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:57:04.771 [INFO] [Thread-194169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:57:04.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:57:04.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:57:05.635 [DEBUG] [Thread-194169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:57:05.635 [DEBUG] [Thread-194169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:57:05.682 [DEBUG] [Thread-194169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:57:05.682 [DEBUG] [Thread-194169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:57:05.691 [DEBUG] [Thread-194169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:57:05.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:57:05.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:57:05.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:57:05.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:57:05.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:57:05.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:57:05.725 [DEBUG] [Thread-194169] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:57:12.024 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:57:12.025 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:57:12.704 [DEBUG] [Thread-194171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:57:27.756 [DEBUG] [Thread-194172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:57:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:57:35.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:57:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:57:37.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 57, 10), 3.41359, 79.5652, 0.0, 9.1584, 12.5457, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:57:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:57:10
2026-04-12T18:57:37.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:57:37.547 [DEBUG] [Thread-194173] [transport.py] [_log()] starting thread (client mode): 0xae5a46d0
2026-04-12T18:57:37.547 [DEBUG] [Thread-194173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:57:37.566 [DEBUG] [Thread-194173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:57:37.566 [INFO] [Thread-194173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:57:37.567 [DEBUG] [Thread-194173] [transport.py] [_log()] client lang: <none>
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] server lang: <none>
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] kex follows: False
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] Compression: none
2026-04-12T18:57:37.568 [DEBUG] [Thread-194173] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:57:37.578 [DEBUG] [Thread-194173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:57:37.579 [DEBUG] [Thread-194173] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:57:37.579 [DEBUG] [Thread-194173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:57:37.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:57:37.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:57:37.580 [DEBUG] [Thread-194173] [transport.py] [_log()] userauth is OK
2026-04-12T18:57:37.580 [DEBUG] [Thread-194173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:57:37.580 [DEBUG] [Thread-194173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:57:37.580 [DEBUG] [Thread-194173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:57:37.581 [DEBUG] [Thread-194173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:57:37.593 [INFO] [Thread-194173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:57:37.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:57:38.393 [DEBUG] [Thread-194173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:57:38.393 [DEBUG] [Thread-194173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:57:38.394 [DEBUG] [Thread-194173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:57:38.434 [DEBUG] [Thread-194173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:57:38.434 [DEBUG] [Thread-194173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:57:38.438 [DEBUG] [Thread-194173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:57:38.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:57:38.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:57:38.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:57:38.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:57:38.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:57:38.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:57:38.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:57:38.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:57:38.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:57:38.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.706359 -999.00  +12.70   9.01     82   +9.80 1 2 1 2 1    18    0 2.39 -21.32 ----- 9.0 9.0 283.4 11.9 13.8 -21.8 13.8 -20.6 13.3 -18.6 13.6 -20.5
2026-04-12T18:57:38.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:57:38.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:57:38.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.706359
2026-04-12T18:57:38.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:57:38.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:57:38.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:57:38.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:57:38.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:57:38.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:57:10', tmtdew=3.41359, humidity=79.5652, cloud=0.0, wind=9.1584, temperature=12.5457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:57:09.418', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:57:38.464 [DEBUG] [Thread-194173] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:57:38.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:57:38.568 [DEBUG] [Thread-194176] [transport.py] [_log()] starting thread (client mode): 0xb0f6fac0
2026-04-12T18:57:38.568 [DEBUG] [Thread-194176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:57:38.583 [DEBUG] [Thread-194176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:57:38.583 [INFO] [Thread-194176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:57:38.591 [DEBUG] [Thread-194176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:57:38.591 [DEBUG] [Thread-194176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:57:38.591 [DEBUG] [Thread-194176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:57:38.591 [DEBUG] [Thread-194176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:38.591 [DEBUG] [Thread-194176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] client lang: <none>
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] server lang: <none>
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] kex follows: False
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:57:38.592 [DEBUG] [Thread-194176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:57:38.593 [DEBUG] [Thread-194176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:57:38.593 [DEBUG] [Thread-194176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:57:38.593 [DEBUG] [Thread-194176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:57:38.593 [DEBUG] [Thread-194176] [transport.py] [_log()] Compression: none
2026-04-12T18:57:38.593 [DEBUG] [Thread-194176] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:57:38.649 [DEBUG] [Thread-194176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:57:38.650 [DEBUG] [Thread-194176] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:57:38.651 [DEBUG] [Thread-194176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:57:38.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:57:38.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:57:38.705 [DEBUG] [Thread-194176] [transport.py] [_log()] userauth is OK
2026-04-12T18:57:38.705 [DEBUG] [Thread-194176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:57:38.705 [DEBUG] [Thread-194176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:57:38.705 [DEBUG] [Thread-194176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:57:38.705 [DEBUG] [Thread-194176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:57:38.723 [INFO] [Thread-194176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:57:38.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:57:38.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:57:39.559 [DEBUG] [Thread-194176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:57:39.559 [DEBUG] [Thread-194176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:57:39.607 [DEBUG] [Thread-194176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:57:39.607 [DEBUG] [Thread-194176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:57:39.619 [DEBUG] [Thread-194176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:57:39.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:57:39.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:57:39.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:57:39.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:57:39.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:57:39.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:57:39.657 [DEBUG] [Thread-194176] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:57:42.793 [DEBUG] [Thread-194178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:57:52.830 [DEBUG] [Thread-194179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:57:57.845 [DEBUG] [Thread-194180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:58:09.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:58:09.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:58:09.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:58:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 57, 46), 3.34476, 80.0314, 0.0, 14.1509, 12.7587, 0, 1, 0, 2, 0, 0),)
2026-04-12T18:58:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:57:46
2026-04-12T18:58:11.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:58:11.619 [DEBUG] [Thread-194181] [transport.py] [_log()] starting thread (client mode): 0xb0f6d450
2026-04-12T18:58:11.619 [DEBUG] [Thread-194181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:58:11.639 [DEBUG] [Thread-194181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:58:11.640 [INFO] [Thread-194181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:58:11.643 [DEBUG] [Thread-194181] [transport.py] [_log()] client lang: <none>
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] server lang: <none>
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] kex follows: False
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] Compression: none
2026-04-12T18:58:11.644 [DEBUG] [Thread-194181] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:58:11.664 [DEBUG] [Thread-194181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:58:11.665 [DEBUG] [Thread-194181] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:58:11.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:58:11.666 [DEBUG] [Thread-194181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:58:11.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:58:11.709 [DEBUG] [Thread-194181] [transport.py] [_log()] userauth is OK
2026-04-12T18:58:11.709 [DEBUG] [Thread-194181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:58:11.709 [DEBUG] [Thread-194181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:58:11.709 [DEBUG] [Thread-194181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:58:11.709 [DEBUG] [Thread-194181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:58:11.740 [INFO] [Thread-194181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:58:11.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:58:12.545 [DEBUG] [Thread-194181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:58:12.545 [DEBUG] [Thread-194181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:58:12.546 [DEBUG] [Thread-194181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:58:12.586 [DEBUG] [Thread-194181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:58:12.587 [DEBUG] [Thread-194181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:58:12.590 [DEBUG] [Thread-194181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:58:12.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:58:12.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:58:12.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:58:12.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:58:12.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:58:12.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:58:12.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:58:12.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:58:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:58:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.706706 -999.00  +12.70   7.90     82   +9.80 1 2 1 2 1    16    0 2.47 -21.07 ----- 7.9 7.9 277.6 11.3 13.8 -21.6 13.7 -20.6 13.3 -18.7 13.6 -20.6
2026-04-12T18:58:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:58:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:58:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.706706
2026-04-12T18:58:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:58:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:58:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:58:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:58:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:58:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:57:46', tmtdew=3.34476, humidity=80.0314, cloud=0.0, wind=14.1509, temperature=12.7587, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:57:39.398', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:58:12.617 [DEBUG] [Thread-194181] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:58:12.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:58:12.715 [DEBUG] [Thread-194184] [transport.py] [_log()] starting thread (client mode): 0xae52d660
2026-04-12T18:58:12.715 [DEBUG] [Thread-194184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:58:12.729 [DEBUG] [Thread-194184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:58:12.730 [INFO] [Thread-194184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:58:12.737 [DEBUG] [Thread-194184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:58:12.737 [DEBUG] [Thread-194184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:58:12.737 [DEBUG] [Thread-194184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:58:12.737 [DEBUG] [Thread-194184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:12.737 [DEBUG] [Thread-194184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] client lang: <none>
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] server lang: <none>
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] kex follows: False
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:58:12.738 [DEBUG] [Thread-194184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:58:12.739 [DEBUG] [Thread-194184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:58:12.739 [DEBUG] [Thread-194184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:58:12.739 [DEBUG] [Thread-194184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:58:12.739 [DEBUG] [Thread-194184] [transport.py] [_log()] Compression: none
2026-04-12T18:58:12.739 [DEBUG] [Thread-194184] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:58:12.796 [DEBUG] [Thread-194184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:58:12.797 [DEBUG] [Thread-194184] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:58:12.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:58:12.798 [DEBUG] [Thread-194184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:58:12.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:58:12.852 [DEBUG] [Thread-194184] [transport.py] [_log()] userauth is OK
2026-04-12T18:58:12.853 [DEBUG] [Thread-194184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:58:12.853 [DEBUG] [Thread-194184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:58:12.853 [DEBUG] [Thread-194184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:58:12.853 [DEBUG] [Thread-194184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:58:12.873 [INFO] [Thread-194184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:58:12.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:58:12.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:58:12.888 [DEBUG] [Thread-194186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:58:13.695 [DEBUG] [Thread-194184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:58:13.695 [DEBUG] [Thread-194184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:58:13.743 [DEBUG] [Thread-194184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:58:13.743 [DEBUG] [Thread-194184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:58:13.752 [DEBUG] [Thread-194184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:58:13.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:58:13.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:58:13.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:58:13.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:58:13.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:58:13.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:58:13.791 [DEBUG] [Thread-194184] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:58:16.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:58:16.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:58:27.936 [DEBUG] [Thread-194187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:58:42.966 [DEBUG] [Thread-194188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:58:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:58:43.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:58:43.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:58:45.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 58, 21), 3.37812, 79.9825, 0.0, 11.2576, 12.5128, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:58:45.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:58:21
2026-04-12T18:58:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:58:45.666 [DEBUG] [Thread-194189] [transport.py] [_log()] starting thread (client mode): 0xae52f910
2026-04-12T18:58:45.666 [DEBUG] [Thread-194189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:58:45.687 [DEBUG] [Thread-194189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:58:45.687 [INFO] [Thread-194189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:58:45.690 [DEBUG] [Thread-194189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:58:45.690 [DEBUG] [Thread-194189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] client lang: <none>
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] server lang: <none>
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] kex follows: False
2026-04-12T18:58:45.691 [DEBUG] [Thread-194189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:58:45.692 [DEBUG] [Thread-194189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:58:45.692 [DEBUG] [Thread-194189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:58:45.692 [DEBUG] [Thread-194189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:58:45.692 [DEBUG] [Thread-194189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:58:45.692 [DEBUG] [Thread-194189] [transport.py] [_log()] Compression: none
2026-04-12T18:58:45.692 [DEBUG] [Thread-194189] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:58:45.710 [DEBUG] [Thread-194189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:58:45.711 [DEBUG] [Thread-194189] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:58:45.711 [DEBUG] [Thread-194189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:58:45.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:58:45.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:58:45.714 [DEBUG] [Thread-194189] [transport.py] [_log()] userauth is OK
2026-04-12T18:58:45.714 [DEBUG] [Thread-194189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:58:45.714 [DEBUG] [Thread-194189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:58:45.714 [DEBUG] [Thread-194189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:58:45.714 [DEBUG] [Thread-194189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:58:45.752 [INFO] [Thread-194189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:58:45.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:58:46.539 [DEBUG] [Thread-194189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:58:46.539 [DEBUG] [Thread-194189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:58:46.539 [DEBUG] [Thread-194189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:58:46.581 [DEBUG] [Thread-194189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:58:46.581 [DEBUG] [Thread-194189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:58:46.585 [DEBUG] [Thread-194189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:58:46.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:58:46.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:58:46.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:58:46.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:58:46.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:58:46.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:58:46.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:58:46.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:58:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:58:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.707053 -999.00  +12.70   9.04     82   +9.80 1 2 1 2 1    14    0 2.45 -20.46 ----- 9.0 9.0 281.2 11.1 13.8 -21.7 13.6 -20.6 13.3 -18.7 13.6 -20.6
2026-04-12T18:58:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:58:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:58:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.707053
2026-04-12T18:58:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:58:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:58:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:58:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:58:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:58:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:58:21', tmtdew=3.37812, humidity=79.9825, cloud=0.0, wind=11.2576, temperature=12.5128, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:58:09.379', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:58:46.612 [DEBUG] [Thread-194189] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:58:46.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:58:46.705 [DEBUG] [Thread-194192] [transport.py] [_log()] starting thread (client mode): 0xae50be50
2026-04-12T18:58:46.705 [DEBUG] [Thread-194192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:58:46.719 [DEBUG] [Thread-194192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:58:46.720 [INFO] [Thread-194192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:58:46.727 [DEBUG] [Thread-194192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:58:46.727 [DEBUG] [Thread-194192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:58:46.727 [DEBUG] [Thread-194192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:58:46.727 [DEBUG] [Thread-194192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] client lang: <none>
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] server lang: <none>
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] kex follows: False
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] Compression: none
2026-04-12T18:58:46.728 [DEBUG] [Thread-194192] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:58:46.784 [DEBUG] [Thread-194192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:58:46.785 [DEBUG] [Thread-194192] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:58:46.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:58:46.786 [DEBUG] [Thread-194192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:58:46.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:58:46.839 [DEBUG] [Thread-194192] [transport.py] [_log()] userauth is OK
2026-04-12T18:58:46.840 [DEBUG] [Thread-194192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:58:46.840 [DEBUG] [Thread-194192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:58:46.840 [DEBUG] [Thread-194192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:58:46.840 [DEBUG] [Thread-194192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:58:46.859 [INFO] [Thread-194192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:58:46.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:58:46.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:58:47.685 [DEBUG] [Thread-194192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:58:47.686 [DEBUG] [Thread-194192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:58:47.734 [DEBUG] [Thread-194192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:58:47.734 [DEBUG] [Thread-194192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:58:47.743 [DEBUG] [Thread-194192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:58:47.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:58: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')
2026-04-12T18:58:47.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:58:47.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:58:47.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:58:47.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:58:47.776 [DEBUG] [Thread-194192] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:58:52.905 [DEBUG] [Thread-194194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:58:58.005 [DEBUG] [Thread-194195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:59:13.056 [DEBUG] [Thread-194196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:59:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:59:17.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:59:17.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:59:19.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 58, 57), 3.39042, 79.9164, 0.0, 9.10548, 12.4629, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:59:19.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:58:57
2026-04-12T18:59:19.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:59:19.667 [DEBUG] [Thread-194197] [transport.py] [_log()] starting thread (client mode): 0xae52e500
2026-04-12T18:59:19.667 [DEBUG] [Thread-194197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:59:19.689 [DEBUG] [Thread-194197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:59:19.689 [INFO] [Thread-194197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] client lang: <none>
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] server lang: <none>
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] kex follows: False
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] Compression: none
2026-04-12T18:59:19.692 [DEBUG] [Thread-194197] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:59:19.710 [DEBUG] [Thread-194197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:59:19.710 [DEBUG] [Thread-194197] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:59:19.711 [DEBUG] [Thread-194197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:59:19.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:59:19.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:59:19.713 [DEBUG] [Thread-194197] [transport.py] [_log()] userauth is OK
2026-04-12T18:59:19.713 [DEBUG] [Thread-194197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:59:19.713 [DEBUG] [Thread-194197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:59:19.713 [DEBUG] [Thread-194197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:59:19.713 [DEBUG] [Thread-194197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:59:19.738 [INFO] [Thread-194197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:59:19.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:59:20.511 [DEBUG] [Thread-194197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:59:20.511 [DEBUG] [Thread-194197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:59:20.512 [DEBUG] [Thread-194197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:59:20.552 [DEBUG] [Thread-194197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:59:20.552 [DEBUG] [Thread-194197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:59:20.556 [DEBUG] [Thread-194197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:59:20.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:59:20.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:59:20.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:59:20.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:59:20.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:59:20.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:59:20.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:59:20.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:59:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:59:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.707400 -999.00  +12.70   7.43     82   +9.80 1 2 1 2 1    13    0 2.48 -18.31 ----- 7.4 7.4 273.4 11.1 13.7 -21.8 13.7 -20.6 13.3 -18.8 13.6 -20.5
2026-04-12T18:59:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:59:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:59:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.707400
2026-04-12T18:59:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:59:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:59:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:59:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:59:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:59:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:58:57', tmtdew=3.39042, humidity=79.9164, cloud=0.0, wind=9.10548, temperature=12.4629, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:58:39.360', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:59:20.585 [DEBUG] [Thread-194197] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:59:20.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:59:20.683 [DEBUG] [Thread-194200] [transport.py] [_log()] starting thread (client mode): 0xb0f6e8f0
2026-04-12T18:59:20.683 [DEBUG] [Thread-194200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:59:20.698 [DEBUG] [Thread-194200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:59:20.699 [INFO] [Thread-194200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:59:20.706 [DEBUG] [Thread-194200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:59:20.706 [DEBUG] [Thread-194200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] client lang: <none>
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] server lang: <none>
2026-04-12T18:59:20.707 [DEBUG] [Thread-194200] [transport.py] [_log()] kex follows: False
2026-04-12T18:59:20.708 [DEBUG] [Thread-194200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:59:20.708 [DEBUG] [Thread-194200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:59:20.708 [DEBUG] [Thread-194200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:59:20.708 [DEBUG] [Thread-194200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:59:20.708 [DEBUG] [Thread-194200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:59:20.708 [DEBUG] [Thread-194200] [transport.py] [_log()] Compression: none
2026-04-12T18:59:20.708 [DEBUG] [Thread-194200] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:59:20.764 [DEBUG] [Thread-194200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:59:20.765 [DEBUG] [Thread-194200] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:59:20.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:59:20.766 [DEBUG] [Thread-194200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:59:20.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:59:20.819 [DEBUG] [Thread-194200] [transport.py] [_log()] userauth is OK
2026-04-12T18:59:20.819 [DEBUG] [Thread-194200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:59:20.819 [DEBUG] [Thread-194200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:59:20.820 [DEBUG] [Thread-194200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:59:20.820 [DEBUG] [Thread-194200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:59:20.840 [INFO] [Thread-194200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:59:20.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:59:20.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:59:20.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:59:21.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:59:21.652 [DEBUG] [Thread-194200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:59:21.652 [DEBUG] [Thread-194200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:59:21.700 [DEBUG] [Thread-194200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:59:21.700 [DEBUG] [Thread-194200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:59:21.710 [DEBUG] [Thread-194200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:59:21.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:59:21.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:59:21.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:59:21.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:59:21.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:59:21.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:59:21.747 [DEBUG] [Thread-194200] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:59:28.090 [DEBUG] [Thread-194202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:59:43.151 [DEBUG] [Thread-194203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:59:51.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T18:59:51.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T18:59:51.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T18:59:52.982 [DEBUG] [Thread-194204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T18:59:53.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 18, 59, 33), 3.3817, 79.8328, 0.0, 14.292, 12.7589, 0, 0, 0, 2, 0, 0),)
2026-04-12T18:59:53.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 18:59:33
2026-04-12T18:59:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T18:59:53.584 [DEBUG] [Thread-194205] [transport.py] [_log()] starting thread (client mode): 0xb0f6c2b0
2026-04-12T18:59:53.584 [DEBUG] [Thread-194205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:59:53.604 [DEBUG] [Thread-194205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T18:59:53.604 [INFO] [Thread-194205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T18:59:53.607 [DEBUG] [Thread-194205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:59:53.607 [DEBUG] [Thread-194205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T18:59:53.607 [DEBUG] [Thread-194205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] client lang: <none>
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] server lang: <none>
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] kex follows: False
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] Compression: none
2026-04-12T18:59:53.608 [DEBUG] [Thread-194205] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:59:53.628 [DEBUG] [Thread-194205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:59:53.628 [DEBUG] [Thread-194205] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:59:53.629 [DEBUG] [Thread-194205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T18:59:53.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T18:59:53.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:59:53.631 [DEBUG] [Thread-194205] [transport.py] [_log()] userauth is OK
2026-04-12T18:59:53.631 [DEBUG] [Thread-194205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:59:53.631 [DEBUG] [Thread-194205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:59:53.631 [DEBUG] [Thread-194205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T18:59:53.631 [DEBUG] [Thread-194205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:59:53.649 [INFO] [Thread-194205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:59:53.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:59:54.371 [DEBUG] [Thread-194205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:59:54.371 [DEBUG] [Thread-194205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:59:54.372 [DEBUG] [Thread-194205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T18:59:54.412 [DEBUG] [Thread-194205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:59:54.413 [DEBUG] [Thread-194205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:59:54.416 [DEBUG] [Thread-194205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:59:54.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:59:54.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T18:59:54.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T18:59:54.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T18:59:54.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:59:54.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T18:59:54.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:59:54.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:59:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T18:59:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.707748 -999.00  +12.70   7.12     82   +9.80 1 2 1 2 1    12    0 2.51 -19.17 ----- 7.1 7.1 275.8 11.0 13.8 -21.6 13.6 -20.6 13.3 -18.7 13.6 -20.6
2026-04-12T18:59:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T18:59:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T18:59:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.707748
2026-04-12T18:59:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T18:59:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T18:59:54.445 [DEBUG] [Thread-194205] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:59:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T18:59:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T18:59:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T18:59:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T18:59:33', tmtdew=3.3817, humidity=79.8328, cloud=0.0, wind=14.292, temperature=12.7589, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:59:09.427', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T18:59:54.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T18:59:54.542 [DEBUG] [Thread-194208] [transport.py] [_log()] starting thread (client mode): 0xb0f6ed70
2026-04-12T18:59:54.542 [DEBUG] [Thread-194208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T18:59:54.556 [DEBUG] [Thread-194208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T18:59:54.557 [INFO] [Thread-194208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T18:59:54.564 [DEBUG] [Thread-194208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T18:59:54.564 [DEBUG] [Thread-194208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] client lang: <none>
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] server lang: <none>
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] kex follows: False
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] Compression: none
2026-04-12T18:59:54.565 [DEBUG] [Thread-194208] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T18:59:54.623 [DEBUG] [Thread-194208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T18:59:54.624 [DEBUG] [Thread-194208] [transport.py] [_log()] Switch to new keys ...
2026-04-12T18:59:54.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T18:59:54.625 [DEBUG] [Thread-194208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T18:59:54.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T18:59:54.679 [DEBUG] [Thread-194208] [transport.py] [_log()] userauth is OK
2026-04-12T18:59:54.679 [DEBUG] [Thread-194208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T18:59:54.680 [DEBUG] [Thread-194208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T18:59:54.680 [DEBUG] [Thread-194208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T18:59:54.680 [DEBUG] [Thread-194208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T18:59:54.699 [INFO] [Thread-194208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T18:59:54.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T18:59:54.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T18:59:55.521 [DEBUG] [Thread-194208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T18:59:55.521 [DEBUG] [Thread-194208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T18:59:55.569 [DEBUG] [Thread-194208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T18:59:55.569 [DEBUG] [Thread-194208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T18:59:55.579 [DEBUG] [Thread-194208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T18:59:55.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T18:59:55.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T18:59:55.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T18:59:55.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T18:59:55.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T18:59:55.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T18:59:55.620 [DEBUG] [Thread-194208] [transport.py] [_log()] EOF in transport thread
2026-04-12T18:59:58.188 [DEBUG] [Thread-194210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:00:13.239 [DEBUG] [Thread-194211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:00:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:00:25.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:00:25.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:00:26.400 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:00:26.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:00:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 0, 9), 3.38508, 79.9497, 0.0, 10.2697, 12.4962, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:00:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:00:09
2026-04-12T19:00:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:00:27.516 [DEBUG] [Thread-194212] [transport.py] [_log()] starting thread (client mode): 0xae52d660
2026-04-12T19:00:27.516 [DEBUG] [Thread-194212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:00:27.537 [DEBUG] [Thread-194212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:00:27.537 [INFO] [Thread-194212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:00:27.540 [DEBUG] [Thread-194212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:00:27.540 [DEBUG] [Thread-194212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:00:27.540 [DEBUG] [Thread-194212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:00:27.540 [DEBUG] [Thread-194212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:00:27.540 [DEBUG] [Thread-194212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:00:27.540 [DEBUG] [Thread-194212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:00:27.540 [DEBUG] [Thread-194212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] client lang: <none>
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] server lang: <none>
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] kex follows: False
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] Compression: none
2026-04-12T19:00:27.541 [DEBUG] [Thread-194212] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:00:27.559 [DEBUG] [Thread-194212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:00:27.559 [DEBUG] [Thread-194212] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:00:27.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:00:27.560 [DEBUG] [Thread-194212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:00:27.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:00:27.562 [DEBUG] [Thread-194212] [transport.py] [_log()] userauth is OK
2026-04-12T19:00:27.562 [DEBUG] [Thread-194212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:00:27.562 [DEBUG] [Thread-194212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:00:27.562 [DEBUG] [Thread-194212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:00:27.563 [DEBUG] [Thread-194212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:00:27.596 [INFO] [Thread-194212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:00:27.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:00:28.279 [DEBUG] [Thread-194214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:00:29.811 [DEBUG] [Thread-194212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:00:29.812 [DEBUG] [Thread-194212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:00:29.812 [DEBUG] [Thread-194212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:00:29.854 [DEBUG] [Thread-194212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:00:29.854 [DEBUG] [Thread-194212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:00:29.857 [DEBUG] [Thread-194212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:00:29.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:00:29.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:00:29.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:00:29.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:00:29.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:00:29.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:00:29.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:00:29.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:00:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:00:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.708095 -999.00  +12.70   6.65     82   +9.80 1 2 1 2 1    10    0 2.48 -18.00 ----- 6.7 6.7 285.1 10.7 13.8 -21.6 13.6 -20.6 13.2 -18.7 13.6 -20.7
2026-04-12T19:00:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:00:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:00:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.708095
2026-04-12T19:00:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:00:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:00:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:00:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:00:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:00:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:00:09', tmtdew=3.38508, humidity=79.9497, cloud=0.0, wind=10.2697, temperature=12.4962, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T16:59:39.408', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:00:29.919 [DEBUG] [Thread-194212] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:00:30.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:00:30.012 [DEBUG] [Thread-194216] [transport.py] [_log()] starting thread (client mode): 0xae5097b0
2026-04-12T19:00:30.012 [DEBUG] [Thread-194216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:00:30.027 [DEBUG] [Thread-194216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:00:30.027 [INFO] [Thread-194216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] client lang: <none>
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] server lang: <none>
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] kex follows: False
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] Compression: none
2026-04-12T19:00:30.035 [DEBUG] [Thread-194216] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:00:30.099 [DEBUG] [Thread-194216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:00:30.100 [DEBUG] [Thread-194216] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:00:30.100 [DEBUG] [Thread-194216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:00:30.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:00:30.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:00:30.155 [DEBUG] [Thread-194216] [transport.py] [_log()] userauth is OK
2026-04-12T19:00:30.156 [DEBUG] [Thread-194216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:00:30.156 [DEBUG] [Thread-194216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:00:30.156 [DEBUG] [Thread-194216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:00:30.156 [DEBUG] [Thread-194216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:00:30.178 [INFO] [Thread-194216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:00:30.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:00:30.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:00:31.030 [DEBUG] [Thread-194216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:00:31.030 [DEBUG] [Thread-194216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:00:31.078 [DEBUG] [Thread-194216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:00:31.078 [DEBUG] [Thread-194216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:00:31.087 [DEBUG] [Thread-194216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:00:31.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:00:31.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:00:31.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:00:31.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:00:31.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:00:31.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:00:31.124 [DEBUG] [Thread-194216] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:00:43.316 [DEBUG] [Thread-194218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:00:53.039 [DEBUG] [Thread-194219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:00:58.375 [DEBUG] [Thread-194220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:01:01.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:01:01.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:01:01.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:01:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 0, 44), 3.35782, 79.9657, 0.0, 12.4574, 12.7923, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:01:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:00:44
2026-04-12T19:01:02.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:01:02.955 [DEBUG] [Thread-194221] [transport.py] [_log()] starting thread (client mode): 0xae5a46a0
2026-04-12T19:01:02.955 [DEBUG] [Thread-194221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:01:02.977 [DEBUG] [Thread-194221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:01:02.977 [INFO] [Thread-194221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:01:02.980 [DEBUG] [Thread-194221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:01:02.981 [DEBUG] [Thread-194221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] client lang: <none>
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] server lang: <none>
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] kex follows: False
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] Compression: none
2026-04-12T19:01:02.982 [DEBUG] [Thread-194221] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:01:02.993 [DEBUG] [Thread-194221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:01:02.994 [DEBUG] [Thread-194221] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:01:02.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:01:02.995 [DEBUG] [Thread-194221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:01:02.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:01:02.997 [DEBUG] [Thread-194221] [transport.py] [_log()] userauth is OK
2026-04-12T19:01:02.997 [DEBUG] [Thread-194221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:01:02.997 [DEBUG] [Thread-194221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:01:02.998 [DEBUG] [Thread-194221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:01:02.998 [DEBUG] [Thread-194221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:01:03.023 [INFO] [Thread-194221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:01:03.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:01:03.827 [DEBUG] [Thread-194221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:01:03.827 [DEBUG] [Thread-194221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:01:03.828 [DEBUG] [Thread-194221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:01:03.868 [DEBUG] [Thread-194221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:01:03.868 [DEBUG] [Thread-194221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:01:03.871 [DEBUG] [Thread-194221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:01:03.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:01:03.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:01:03.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:01:03.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:01:03.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:01:03.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:01:03.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:01:03.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:01:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:01:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.708789 -999.00  +12.60   6.50     83   +9.80 1 2 1 2 1     8    0 2.47 -17.63 ----- 6.5 6.5 269.8 8.3 13.7 -21.8 13.6 -20.6 13.3 -18.7 13.5 -20.7
2026-04-12T19:01:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:01:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:01:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.708789
2026-04-12T19:01:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:01:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:01:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:01:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:01:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:01:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:00:44', tmtdew=3.35782, humidity=79.9657, cloud=0.0, wind=12.4574, temperature=12.7923, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:00:39.370', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:01:03.893 [DEBUG] [Thread-194221] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:01:03.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:01:03.986 [DEBUG] [Thread-194224] [transport.py] [_log()] starting thread (client mode): 0xae509150
2026-04-12T19:01:03.986 [DEBUG] [Thread-194224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:01:04.002 [DEBUG] [Thread-194224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:01:04.002 [INFO] [Thread-194224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] client lang: <none>
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] server lang: <none>
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] kex follows: False
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] Compression: none
2026-04-12T19:01:04.010 [DEBUG] [Thread-194224] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:01:04.067 [DEBUG] [Thread-194224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:01:04.068 [DEBUG] [Thread-194224] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:01:04.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:01:04.069 [DEBUG] [Thread-194224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:01:04.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:01:04.129 [DEBUG] [Thread-194224] [transport.py] [_log()] userauth is OK
2026-04-12T19:01:04.129 [DEBUG] [Thread-194224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:01:04.129 [DEBUG] [Thread-194224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:01:04.129 [DEBUG] [Thread-194224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:01:04.129 [DEBUG] [Thread-194224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:01:04.145 [INFO] [Thread-194224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:01:04.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:01:04.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:01:04.994 [DEBUG] [Thread-194224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:01:04.994 [DEBUG] [Thread-194224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:01:05.042 [DEBUG] [Thread-194224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:01:05.042 [DEBUG] [Thread-194224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:01:05.052 [DEBUG] [Thread-194224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:01:05.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:01:05.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:01:05.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:01:05.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:01:05.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:01:05.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:01:05.088 [DEBUG] [Thread-194224] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:01:13.415 [DEBUG] [Thread-194226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:01:28.466 [DEBUG] [Thread-194227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:01:30.834 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:01:30.836 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:01:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:01:35.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:01:35.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:01:36.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 1, 19), 3.38506, 79.9498, 0.0, 12.0521, 12.5462, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:01:36.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:01:19
2026-04-12T19:01:36.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:01:36.964 [DEBUG] [Thread-194228] [transport.py] [_log()] starting thread (client mode): 0xae5a79a0
2026-04-12T19:01:36.964 [DEBUG] [Thread-194228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:01:36.984 [DEBUG] [Thread-194228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:01:36.984 [INFO] [Thread-194228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:01:36.987 [DEBUG] [Thread-194228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:01:36.987 [DEBUG] [Thread-194228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:01:36.987 [DEBUG] [Thread-194228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:01:36.987 [DEBUG] [Thread-194228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:01:36.987 [DEBUG] [Thread-194228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] client lang: <none>
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] server lang: <none>
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] kex follows: False
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] Compression: none
2026-04-12T19:01:36.988 [DEBUG] [Thread-194228] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:01:37.006 [DEBUG] [Thread-194228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:01:37.007 [DEBUG] [Thread-194228] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:01:37.007 [DEBUG] [Thread-194228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:01:37.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:01:37.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:01:37.009 [DEBUG] [Thread-194228] [transport.py] [_log()] userauth is OK
2026-04-12T19:01:37.010 [DEBUG] [Thread-194228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:01:37.010 [DEBUG] [Thread-194228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:01:37.010 [DEBUG] [Thread-194228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:01:37.010 [DEBUG] [Thread-194228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:01:37.034 [INFO] [Thread-194228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:01:37.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:01:37.858 [DEBUG] [Thread-194228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:01:37.858 [DEBUG] [Thread-194228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:01:37.859 [DEBUG] [Thread-194228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:01:37.899 [DEBUG] [Thread-194228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:01:37.899 [DEBUG] [Thread-194228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:01:37.902 [DEBUG] [Thread-194228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:01:37.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:01:37.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:01:37.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:01:37.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:01:37.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:01:37.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:01:37.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:01:37.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:01:37.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:01:37.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.709136 -999.00  +12.60   4.05     82   +9.80 1 2 1 2 1     8    0 2.46 -17.52 ----- 4.0 4.0 264.0 9.8 13.7 -21.7 13.6 -20.6 13.2 -18.6 13.6 -20.7
2026-04-12T19:01:37.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:01:37.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:01:37.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.709136
2026-04-12T19:01:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:01:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:01:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:01:37.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:01:37.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:01:37.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:01:19', tmtdew=3.38506, humidity=79.9498, cloud=0.0, wind=12.0521, temperature=12.5462, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:01:09.350', atlas_cloud=2, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:01:37.926 [DEBUG] [Thread-194228] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:01:38.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:01:43.503 [DEBUG] [Thread-194231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:01:53.128 [DEBUG] [Thread-194232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:01:58.555 [DEBUG] [Thread-194233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:02:13.592 [DEBUG] [Thread-194234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:02:28.629 [DEBUG] [Thread-194235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:02:36.408 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:02:36.410 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:02:43.665 [DEBUG] [Thread-194236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:02:53.213 [DEBUG] [Thread-194237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:02:58.698 [DEBUG] [Thread-194238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:03:13.737 [DEBUG] [Thread-194239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:03:28.775 [DEBUG] [Thread-194240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:03:40.966 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:03:40.967 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:03:43.813 [DEBUG] [Thread-194241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:03:50.399 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T19:03:53.300 [DEBUG] [Thread-194242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:03:58.851 [DEBUG] [Thread-194243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:04:13.891 [DEBUG] [Thread-194244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:04:20.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:04:20.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:04:20.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:04:21.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 3, 41), 3.36136, 79.9331, 0.0, 11.8224, 12.6933, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:04:21.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:03:41
2026-04-12T19:04:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:04:22.368 [DEBUG] [Thread-194245] [transport.py] [_log()] starting thread (client mode): 0xb0f6d870
2026-04-12T19:04:22.368 [DEBUG] [Thread-194245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:04:22.387 [DEBUG] [Thread-194245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:04:22.388 [INFO] [Thread-194245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] client lang: <none>
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] server lang: <none>
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] kex follows: False
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] Compression: none
2026-04-12T19:04:22.391 [DEBUG] [Thread-194245] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:04:22.407 [DEBUG] [Thread-194245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:04:22.408 [DEBUG] [Thread-194245] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:04:22.408 [DEBUG] [Thread-194245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:04:22.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:04:22.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:04:22.410 [DEBUG] [Thread-194245] [transport.py] [_log()] userauth is OK
2026-04-12T19:04:22.410 [DEBUG] [Thread-194245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:04:22.411 [DEBUG] [Thread-194245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:04:22.411 [DEBUG] [Thread-194245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:04:22.411 [DEBUG] [Thread-194245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:04:22.431 [INFO] [Thread-194245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:04:22.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:04:23.205 [DEBUG] [Thread-194245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:04:23.205 [DEBUG] [Thread-194245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:04:23.205 [DEBUG] [Thread-194245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:04:23.246 [DEBUG] [Thread-194245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:04:23.246 [DEBUG] [Thread-194245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:04:23.250 [DEBUG] [Thread-194245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:04:23.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:04:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:04:23.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:04:23.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:04:23.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:04:23.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:04:23.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:04:23.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:04:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:04:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.710872 -999.00  +12.60   7.06     82   +9.70 1 1 1 2 1     4    0 2.49 -16.36 ZNESW 7.1 7.1 248.0 9.1 13.7 -21.6 13.5 -20.5 13.2 -18.6 13.5 -20.5
2026-04-12T19:04:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:04:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:04:23.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.710872
2026-04-12T19:04:23.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:04:23.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:04:23.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:04:23.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:04:23.277 [DEBUG] [Thread-194245] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:04:23.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:04:23.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:03:41', tmtdew=3.36136, humidity=79.9331, cloud=0.0, wind=11.8224, temperature=12.6933, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:03:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:04:23.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:04:23.371 [DEBUG] [Thread-194248] [transport.py] [_log()] starting thread (client mode): 0xae537040
2026-04-12T19:04:23.371 [DEBUG] [Thread-194248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:04:23.386 [DEBUG] [Thread-194248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:04:23.386 [INFO] [Thread-194248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:04:23.393 [DEBUG] [Thread-194248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:04:23.393 [DEBUG] [Thread-194248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:04:23.393 [DEBUG] [Thread-194248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:04:23.393 [DEBUG] [Thread-194248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] client lang: <none>
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] server lang: <none>
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] kex follows: False
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:04:23.394 [DEBUG] [Thread-194248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:04:23.395 [DEBUG] [Thread-194248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:04:23.395 [DEBUG] [Thread-194248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:04:23.395 [DEBUG] [Thread-194248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:04:23.395 [DEBUG] [Thread-194248] [transport.py] [_log()] Compression: none
2026-04-12T19:04:23.395 [DEBUG] [Thread-194248] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:04:23.453 [DEBUG] [Thread-194248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:04:23.453 [DEBUG] [Thread-194248] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:04:23.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:04:23.455 [DEBUG] [Thread-194248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:04:23.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:04:23.509 [DEBUG] [Thread-194248] [transport.py] [_log()] userauth is OK
2026-04-12T19:04:23.509 [DEBUG] [Thread-194248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:04:23.509 [DEBUG] [Thread-194248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:04:23.510 [DEBUG] [Thread-194248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:04:23.510 [DEBUG] [Thread-194248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:04:23.531 [INFO] [Thread-194248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:04:23.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:04:23.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:04:24.358 [DEBUG] [Thread-194248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:04:24.358 [DEBUG] [Thread-194248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:04:24.406 [DEBUG] [Thread-194248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:04:24.406 [DEBUG] [Thread-194248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:04:24.415 [DEBUG] [Thread-194248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:04:24.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:04:24.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:04:24.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:04:24.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:04:24.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:04:24.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:04:24.452 [DEBUG] [Thread-194248] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:04:28.927 [DEBUG] [Thread-194250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:04:43.978 [DEBUG] [Thread-194251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:04:46.204 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:04:46.205 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:04:53.385 [DEBUG] [Thread-194252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:04:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:04:54.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:04:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:04:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 4, 16), 3.47452, 79.4997, 0.0, 11.9815, 12.4966, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:04:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:04:16
2026-04-12T19:04:56.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:04:56.476 [DEBUG] [Thread-194253] [transport.py] [_log()] starting thread (client mode): 0xae5e5f00
2026-04-12T19:04:56.476 [DEBUG] [Thread-194253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:04:56.497 [DEBUG] [Thread-194253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:04:56.497 [INFO] [Thread-194253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] client lang: <none>
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] server lang: <none>
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] kex follows: False
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:04:56.500 [DEBUG] [Thread-194253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:04:56.501 [DEBUG] [Thread-194253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:04:56.501 [DEBUG] [Thread-194253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:04:56.501 [DEBUG] [Thread-194253] [transport.py] [_log()] Compression: none
2026-04-12T19:04:56.501 [DEBUG] [Thread-194253] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:04:56.518 [DEBUG] [Thread-194253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:04:56.519 [DEBUG] [Thread-194253] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:04:56.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:04:56.520 [DEBUG] [Thread-194253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:04:56.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:04:56.522 [DEBUG] [Thread-194253] [transport.py] [_log()] userauth is OK
2026-04-12T19:04:56.523 [DEBUG] [Thread-194253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:04:56.523 [DEBUG] [Thread-194253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:04:56.523 [DEBUG] [Thread-194253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:04:56.523 [DEBUG] [Thread-194253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:04:56.547 [INFO] [Thread-194253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:04:56.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:04:57.347 [DEBUG] [Thread-194253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:04:57.347 [DEBUG] [Thread-194253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:04:57.348 [DEBUG] [Thread-194253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:04:57.388 [DEBUG] [Thread-194253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:04:57.388 [DEBUG] [Thread-194253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:04:57.392 [DEBUG] [Thread-194253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:04:57.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:04:57.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:04:57.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:04:57.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:04:57.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:04:57.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:04:57.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:04:57.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:04:57.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:04:57.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.711220 -999.00  +12.60   9.12     82   +9.70 1 1 1 2 1     4    0 2.49 -14.87 ZNESW 9.1 9.1 271.2 12.0 13.7 -21.6 13.6 -20.5 13.2 -18.6 13.5 -20.6
2026-04-12T19:04:57.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:04:57.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:04:57.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.711220
2026-04-12T19:04:57.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:04:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:04:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:04:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:04:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:04:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:04:16', tmtdew=3.47452, humidity=79.4997, cloud=0.0, wind=11.9815, temperature=12.4966, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:04:09.408', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.08050000000000068, 1.24925, nan, nan, 1.4090000000000007, 0.6240000000000014, 0.5260000000000007, -1.4452500000000015], zp_timestamp='2026-04-12T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:04:57.415 [DEBUG] [Thread-194253] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:04:57.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:04:57.504 [DEBUG] [Thread-194256] [transport.py] [_log()] starting thread (client mode): 0xae518d30
2026-04-12T19:04:57.504 [DEBUG] [Thread-194256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:04:57.519 [DEBUG] [Thread-194256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:04:57.519 [INFO] [Thread-194256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:04:57.527 [DEBUG] [Thread-194256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:04:57.527 [DEBUG] [Thread-194256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:04:57.527 [DEBUG] [Thread-194256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:04:57.527 [DEBUG] [Thread-194256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:57.527 [DEBUG] [Thread-194256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:04:57.527 [DEBUG] [Thread-194256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] client lang: <none>
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] server lang: <none>
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] kex follows: False
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:04:57.528 [DEBUG] [Thread-194256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:04:57.529 [DEBUG] [Thread-194256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:04:57.529 [DEBUG] [Thread-194256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:04:57.529 [DEBUG] [Thread-194256] [transport.py] [_log()] Compression: none
2026-04-12T19:04:57.529 [DEBUG] [Thread-194256] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:04:57.585 [DEBUG] [Thread-194256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:04:57.586 [DEBUG] [Thread-194256] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:04:57.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:04:57.588 [DEBUG] [Thread-194256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:04:57.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:04:57.645 [DEBUG] [Thread-194256] [transport.py] [_log()] userauth is OK
2026-04-12T19:04:57.645 [DEBUG] [Thread-194256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:04:57.645 [DEBUG] [Thread-194256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:04:57.646 [DEBUG] [Thread-194256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:04:57.646 [DEBUG] [Thread-194256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:04:57.667 [INFO] [Thread-194256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:04:57.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:04:57.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:04:58.462 [DEBUG] [Thread-194256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:04:58.463 [DEBUG] [Thread-194256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:04:58.511 [DEBUG] [Thread-194256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:04:58.511 [DEBUG] [Thread-194256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:04:58.521 [DEBUG] [Thread-194256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:04:58.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:04:58.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:04:58.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:04:58.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:04:58.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:04:58.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:04:58.560 [DEBUG] [Thread-194256] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:04:59.017 [DEBUG] [Thread-194258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:05:14.191 [DEBUG] [Thread-194259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:05:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:05:28.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:05:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:05:29.230 [DEBUG] [Thread-194260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:05:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 4, 52), 3.3691, 79.9007, 0.0, 13.657, 12.7602, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:05:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:04:52
2026-04-12T19:05:30.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:05:30.583 [DEBUG] [Thread-194261] [transport.py] [_log()] starting thread (client mode): 0xae5378e0
2026-04-12T19:05:30.583 [DEBUG] [Thread-194261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:05:30.603 [DEBUG] [Thread-194261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:05:30.603 [INFO] [Thread-194261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:05:30.606 [DEBUG] [Thread-194261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] client lang: <none>
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] server lang: <none>
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] kex follows: False
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] Compression: none
2026-04-12T19:05:30.607 [DEBUG] [Thread-194261] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:05:30.616 [DEBUG] [Thread-194261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:05:30.616 [DEBUG] [Thread-194261] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:05:30.616 [DEBUG] [Thread-194261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:05:30.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:05:30.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:05:30.618 [DEBUG] [Thread-194261] [transport.py] [_log()] userauth is OK
2026-04-12T19:05:30.618 [DEBUG] [Thread-194261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:05:30.618 [DEBUG] [Thread-194261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:05:30.618 [DEBUG] [Thread-194261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:05:30.619 [DEBUG] [Thread-194261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:05:30.638 [INFO] [Thread-194261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:05:30.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:05:31.286 [DEBUG] [Thread-194261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:05:31.286 [DEBUG] [Thread-194261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:05:31.287 [DEBUG] [Thread-194261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:05:31.327 [DEBUG] [Thread-194261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:05:31.327 [DEBUG] [Thread-194261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:05:31.331 [DEBUG] [Thread-194261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:05:31.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:05:31.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:05:31.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:05:31.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:05:31.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:05:31.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:05:31.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:05:31.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:05:31.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:05:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.711914 -999.00  +12.60   9.77     82   +9.60 1 2 1 2 1     3    0 2.46 -15.28 ZnESW 9.8 9.8 267.4 12.3 13.7 -21.6 13.5 -20.5 13.2 -18.6 13.4 -20.5
2026-04-12T19:05:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:05:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:05:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.711914
2026-04-12T19:05:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:05:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:05:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:05:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:05:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:05:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:04:52', tmtdew=3.3691, humidity=79.9007, cloud=0.0, wind=13.657, temperature=12.7602, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:05:09.370', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.08050000000000068, 1.24925, nan, nan, 1.4090000000000007, 0.6240000000000014, 0.5260000000000007, -1.4452500000000015], zp_timestamp='2026-04-12T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:05:31.357 [DEBUG] [Thread-194261] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:05:31.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:05:31.448 [DEBUG] [Thread-194264] [transport.py] [_log()] starting thread (client mode): 0xae52d660
2026-04-12T19:05:31.448 [DEBUG] [Thread-194264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:05:31.463 [DEBUG] [Thread-194264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:05:31.463 [INFO] [Thread-194264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] client lang: <none>
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] server lang: <none>
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] kex follows: False
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:05:31.471 [DEBUG] [Thread-194264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:05:31.472 [DEBUG] [Thread-194264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:05:31.472 [DEBUG] [Thread-194264] [transport.py] [_log()] Compression: none
2026-04-12T19:05:31.472 [DEBUG] [Thread-194264] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:05:31.528 [DEBUG] [Thread-194264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:05:31.529 [DEBUG] [Thread-194264] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:05:31.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:05:31.530 [DEBUG] [Thread-194264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:05:31.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:05:31.584 [DEBUG] [Thread-194264] [transport.py] [_log()] userauth is OK
2026-04-12T19:05:31.585 [DEBUG] [Thread-194264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:05:31.586 [DEBUG] [Thread-194264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:05:31.586 [DEBUG] [Thread-194264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:05:31.586 [DEBUG] [Thread-194264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:05:31.612 [INFO] [Thread-194264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:05:31.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:05:31.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:05:32.453 [DEBUG] [Thread-194264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:05:32.453 [DEBUG] [Thread-194264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:05:32.502 [DEBUG] [Thread-194264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:05:32.502 [DEBUG] [Thread-194264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:05:32.512 [DEBUG] [Thread-194264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:05:32.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:05:32.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:05:32.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:05:32.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:05:32.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:05:32.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:05:32.552 [DEBUG] [Thread-194264] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:05:44.267 [DEBUG] [Thread-194266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:05:51.235 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:05:51.237 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:05:53.461 [DEBUG] [Thread-194267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:05:59.319 [DEBUG] [Thread-194268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:06:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:06:02.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:06:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:06:03.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 5, 27), 3.50834, 78.8181, 0.0, 13.1465, 12.4972, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:06:03.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:05:27
2026-04-12T19:06:04.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:06:04.412 [DEBUG] [Thread-194269] [transport.py] [_log()] starting thread (client mode): 0xb0f42b90
2026-04-12T19:06:04.413 [DEBUG] [Thread-194269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:06:04.432 [DEBUG] [Thread-194269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:06:04.433 [INFO] [Thread-194269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] client lang: <none>
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] server lang: <none>
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] kex follows: False
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] Compression: none
2026-04-12T19:06:04.434 [DEBUG] [Thread-194269] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:06:04.444 [DEBUG] [Thread-194269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:06:04.444 [DEBUG] [Thread-194269] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:06:04.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:06:04.445 [DEBUG] [Thread-194269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:06:04.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:06:04.447 [DEBUG] [Thread-194269] [transport.py] [_log()] userauth is OK
2026-04-12T19:06:04.447 [DEBUG] [Thread-194269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:06:04.447 [DEBUG] [Thread-194269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:06:04.447 [DEBUG] [Thread-194269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:06:04.447 [DEBUG] [Thread-194269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:06:04.472 [INFO] [Thread-194269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:06:04.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:06:05.083 [DEBUG] [Thread-194269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:06:05.083 [DEBUG] [Thread-194269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:06:05.084 [DEBUG] [Thread-194269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:06:05.124 [DEBUG] [Thread-194269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:06:05.124 [DEBUG] [Thread-194269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:06:05.127 [DEBUG] [Thread-194269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:06:05.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:06:05.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:06:05.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:06:05.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:06:05.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:06:05.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:06:05.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:06:05.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:06:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:06:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.712261 -999.00  +12.60   9.04     82   +9.60 1 2 1 2 1     3    0 2.48 -14.88 ZnESW 9.0 9.0 264.6 10.8 13.6 -21.7 13.6 -20.5 13.2 -18.8 13.5 -20.6
2026-04-12T19:06:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:06:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:06:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.712261
2026-04-12T19:06:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:05:27', tmtdew=3.50834, humidity=78.8181, cloud=0.0, wind=13.1465, temperature=12.4972, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:05:39.350', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.08050000000000068, 1.24925, nan, nan, 1.4090000000000007, 0.6240000000000014, 0.5260000000000007, -1.4452500000000015], zp_timestamp='2026-04-12T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:06:05.154 [DEBUG] [Thread-194269] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:06:05.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:06:05.248 [DEBUG] [Thread-194272] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T19:06:05.248 [DEBUG] [Thread-194272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:06:05.263 [DEBUG] [Thread-194272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:06:05.263 [INFO] [Thread-194272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:05.271 [DEBUG] [Thread-194272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] client lang: <none>
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] server lang: <none>
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] kex follows: False
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] Compression: none
2026-04-12T19:06:05.272 [DEBUG] [Thread-194272] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:06:05.328 [DEBUG] [Thread-194272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:06:05.329 [DEBUG] [Thread-194272] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:06:05.329 [DEBUG] [Thread-194272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:06:05.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:06:05.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:06:05.384 [DEBUG] [Thread-194272] [transport.py] [_log()] userauth is OK
2026-04-12T19:06:05.384 [DEBUG] [Thread-194272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:06:05.384 [DEBUG] [Thread-194272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:06:05.385 [DEBUG] [Thread-194272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:06:05.385 [DEBUG] [Thread-194272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:06:05.403 [INFO] [Thread-194272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:06:05.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:06:05.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:06:06.247 [DEBUG] [Thread-194272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:06:06.248 [DEBUG] [Thread-194272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:06:06.296 [DEBUG] [Thread-194272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:06:06.296 [DEBUG] [Thread-194272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:06:06.305 [DEBUG] [Thread-194272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:06:06.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:06:06.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:06:06.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:06:06.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:06:06.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:06:06.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:06:06.341 [DEBUG] [Thread-194272] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:06:14.357 [DEBUG] [Thread-194274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:06:29.419 [DEBUG] [Thread-194275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:06:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:06:36.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:06:36.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:06:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 6, 3), 3.52426, 78.7352, 0.0, 12.9348, 12.5138, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:06:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:06:03
2026-04-12T19:06:38.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:06:38.267 [DEBUG] [Thread-194276] [transport.py] [_log()] starting thread (client mode): 0xae5a4760
2026-04-12T19:06:38.267 [DEBUG] [Thread-194276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:06:38.287 [DEBUG] [Thread-194276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:06:38.287 [INFO] [Thread-194276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] client lang: <none>
2026-04-12T19:06:38.289 [DEBUG] [Thread-194276] [transport.py] [_log()] server lang: <none>
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] kex follows: False
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] Compression: none
2026-04-12T19:06:38.290 [DEBUG] [Thread-194276] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:06:38.307 [DEBUG] [Thread-194276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:06:38.308 [DEBUG] [Thread-194276] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:06:38.309 [DEBUG] [Thread-194276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:06:38.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:06:38.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:06:38.311 [DEBUG] [Thread-194276] [transport.py] [_log()] userauth is OK
2026-04-12T19:06:38.311 [DEBUG] [Thread-194276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:06:38.311 [DEBUG] [Thread-194276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:06:38.311 [DEBUG] [Thread-194276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:06:38.311 [DEBUG] [Thread-194276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:06:38.325 [INFO] [Thread-194276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:06:38.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:06:38.938 [DEBUG] [Thread-194276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:06:38.938 [DEBUG] [Thread-194276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:06:38.938 [DEBUG] [Thread-194276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:06:38.979 [DEBUG] [Thread-194276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:06:38.979 [DEBUG] [Thread-194276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:06:38.982 [DEBUG] [Thread-194276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:06:38.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:06:38.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:06:38.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:06:38.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:06:39.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:06:39.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:06:39.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:06:39.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:06:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:06:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.712609 -999.00  +12.70   9.07     82   +9.70 1 1 1 2 1     2    0 2.51 -14.69 ZNESW 9.1 9.1 269.8 10.3 13.6 -21.7 13.6 -20.6 13.2 -18.7 13.5 -20.6
2026-04-12T19:06:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:06:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:06:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.712609
2026-04-12T19:06:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:06:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:06:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:06:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:06:39.010 [DEBUG] [Thread-194276] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:06:39.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:06:39.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:06:03', tmtdew=3.52426, humidity=78.7352, cloud=0.0, wind=12.9348, temperature=12.5138, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:06:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.08050000000000068, 1.24925, nan, nan, 1.4090000000000007, 0.6240000000000014, 0.5260000000000007, -1.4452500000000015], zp_timestamp='2026-04-12T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:06:39.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:06:39.104 [DEBUG] [Thread-194279] [transport.py] [_log()] starting thread (client mode): 0xb0f42710
2026-04-12T19:06:39.104 [DEBUG] [Thread-194279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:06:39.118 [DEBUG] [Thread-194279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:06:39.118 [INFO] [Thread-194279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:06:39.125 [DEBUG] [Thread-194279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:06:39.126 [DEBUG] [Thread-194279] [transport.py] [_log()] client lang: <none>
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] server lang: <none>
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] kex follows: False
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] Compression: none
2026-04-12T19:06:39.127 [DEBUG] [Thread-194279] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:06:39.184 [DEBUG] [Thread-194279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:06:39.184 [DEBUG] [Thread-194279] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:06:39.185 [DEBUG] [Thread-194279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:06:39.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:06:39.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:06:39.240 [DEBUG] [Thread-194279] [transport.py] [_log()] userauth is OK
2026-04-12T19:06:39.240 [DEBUG] [Thread-194279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:06:39.240 [DEBUG] [Thread-194279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:06:39.240 [DEBUG] [Thread-194279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:06:39.240 [DEBUG] [Thread-194279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:06:39.259 [INFO] [Thread-194279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:06:39.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:06:39.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:06:40.086 [DEBUG] [Thread-194279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:06:40.086 [DEBUG] [Thread-194279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:06:40.134 [DEBUG] [Thread-194279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:06:40.134 [DEBUG] [Thread-194279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:06:40.144 [DEBUG] [Thread-194279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:06:40.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:06:40.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:06:40.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:06:40.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:06:40.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:06:40.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:06:40.180 [DEBUG] [Thread-194279] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:06:44.457 [DEBUG] [Thread-194281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:06:51.438 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:06:51.440 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:06:53.539 [DEBUG] [Thread-194282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:06:59.512 [DEBUG] [Thread-194283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:07:10.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:07:10.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:07:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:07:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 6, 38), 3.46876, 79.3714, 0.0, 13.7981, 12.7942, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:07:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:06:38
2026-04-12T19:07:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:07:12.071 [DEBUG] [Thread-194284] [transport.py] [_log()] starting thread (client mode): 0xae5a4a60
2026-04-12T19:07:12.071 [DEBUG] [Thread-194284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:07:12.083 [DEBUG] [Thread-194284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:07:12.083 [INFO] [Thread-194284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] client lang: <none>
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] server lang: <none>
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] kex follows: False
2026-04-12T19:07:12.085 [DEBUG] [Thread-194284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:07:12.086 [DEBUG] [Thread-194284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:07:12.086 [DEBUG] [Thread-194284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:07:12.086 [DEBUG] [Thread-194284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:07:12.086 [DEBUG] [Thread-194284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:07:12.086 [DEBUG] [Thread-194284] [transport.py] [_log()] Compression: none
2026-04-12T19:07:12.086 [DEBUG] [Thread-194284] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:07:12.097 [DEBUG] [Thread-194284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:07:12.098 [DEBUG] [Thread-194284] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:07:12.098 [DEBUG] [Thread-194284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:07:12.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:07:12.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:07:12.099 [DEBUG] [Thread-194284] [transport.py] [_log()] userauth is OK
2026-04-12T19:07:12.099 [DEBUG] [Thread-194284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:07:12.100 [DEBUG] [Thread-194284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:07:12.100 [DEBUG] [Thread-194284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:07:12.100 [DEBUG] [Thread-194284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:07:12.132 [INFO] [Thread-194284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:07:12.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:07:12.704 [DEBUG] [Thread-194284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:07:12.704 [DEBUG] [Thread-194284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:07:12.705 [DEBUG] [Thread-194284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:07:12.745 [DEBUG] [Thread-194284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:07:12.745 [DEBUG] [Thread-194284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:07:12.747 [DEBUG] [Thread-194284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:07:12.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:07:12.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:07:12.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:07:12.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:07:12.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:07:12.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:07:12.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:07:12.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:07:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:07:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.712956 -999.00  +12.70   6.42     82   +9.70 1 1 1 2 1     2    0 2.49 -15.33 ZNESW 6.4 6.4 258.6 11.5 13.6 -21.7 13.6 -20.5 13.2 -18.6 13.5 -20.4
2026-04-12T19:07:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:07:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:07:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.712956
2026-04-12T19:07:12.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:07:12.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:07:12.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:07:12.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:07:12.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:07:12.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:06:38', tmtdew=3.46876, humidity=79.3714, cloud=0.0, wind=13.7981, temperature=12.7942, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:06:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.08050000000000068, 1.24925, nan, nan, 1.4090000000000007, 0.6240000000000014, 0.5260000000000007, -1.4452500000000015], zp_timestamp='2026-04-12T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:07:12.769 [DEBUG] [Thread-194284] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:07:12.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:07:12.862 [DEBUG] [Thread-194287] [transport.py] [_log()] starting thread (client mode): 0xae51a770
2026-04-12T19:07:12.862 [DEBUG] [Thread-194287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:07:12.875 [DEBUG] [Thread-194287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:07:12.875 [INFO] [Thread-194287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] client lang: <none>
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] server lang: <none>
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] kex follows: False
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:07:12.883 [DEBUG] [Thread-194287] [transport.py] [_log()] Compression: none
2026-04-12T19:07:12.884 [DEBUG] [Thread-194287] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:07:12.946 [DEBUG] [Thread-194287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:07:12.946 [DEBUG] [Thread-194287] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:07:12.946 [DEBUG] [Thread-194287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:07:12.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:07:12.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:07:13.011 [DEBUG] [Thread-194287] [transport.py] [_log()] userauth is OK
2026-04-12T19:07:13.011 [DEBUG] [Thread-194287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:07:13.011 [DEBUG] [Thread-194287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:07:13.011 [DEBUG] [Thread-194287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:07:13.011 [DEBUG] [Thread-194287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:07:13.033 [INFO] [Thread-194287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:07:13.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:07:13.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:07:13.899 [DEBUG] [Thread-194287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:07:13.900 [DEBUG] [Thread-194287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:07:13.947 [DEBUG] [Thread-194287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:07:13.947 [DEBUG] [Thread-194287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:07:13.956 [DEBUG] [Thread-194287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:07:13.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:07:13.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:07:13.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:07:13.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:07:13.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:07:13.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:07:13.987 [DEBUG] [Thread-194287] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:07:14.548 [DEBUG] [Thread-194289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:07:29.601 [DEBUG] [Thread-194290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:07:44.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:07:44.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:07:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:07:44.638 [DEBUG] [Thread-194291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:07:45.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 7, 14), 3.64015, 78.6525, 0.0, 9.72288, 12.6305, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:07:45.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:07:14
2026-04-12T19:07:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:07:45.836 [DEBUG] [Thread-194292] [transport.py] [_log()] starting thread (client mode): 0xae5e4760
2026-04-12T19:07:45.836 [DEBUG] [Thread-194292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:07:45.855 [DEBUG] [Thread-194292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:07:45.855 [INFO] [Thread-194292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] client lang: <none>
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] server lang: <none>
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] kex follows: False
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] Compression: none
2026-04-12T19:07:45.858 [DEBUG] [Thread-194292] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:07:45.875 [DEBUG] [Thread-194292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:07:45.876 [DEBUG] [Thread-194292] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:07:45.876 [DEBUG] [Thread-194292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:07:45.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:07:45.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:07:45.879 [DEBUG] [Thread-194292] [transport.py] [_log()] userauth is OK
2026-04-12T19:07:45.880 [DEBUG] [Thread-194292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:07:45.880 [DEBUG] [Thread-194292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:07:45.880 [DEBUG] [Thread-194292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:07:45.880 [DEBUG] [Thread-194292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:07:45.903 [INFO] [Thread-194292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:07:45.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:07:46.463 [DEBUG] [Thread-194292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:07:46.463 [DEBUG] [Thread-194292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:07:46.464 [DEBUG] [Thread-194292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:07:46.504 [DEBUG] [Thread-194292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:07:46.504 [DEBUG] [Thread-194292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:07:46.508 [DEBUG] [Thread-194292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:07:46.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:07:46.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:07:46.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:07:46.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:07:46.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:07:46.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:07:46.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:07:46.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:07:46.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:07:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.713650 -999.00  +12.60   7.96     82   +9.70 1 1 1 2 1     2    0 2.55 -14.74 ZNESW 8.0 8.0 271.8 10.1 13.6 -21.8 13.5 -20.6 13.2 -18.6 13.4 -20.5
2026-04-12T19:07:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:07:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:07:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.713650
2026-04-12T19:07:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:07:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:07:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:07:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:07:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:07:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:07:14', tmtdew=3.64015, humidity=78.6525, cloud=0.0, wind=9.72288, temperature=12.6305, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:07:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08924999999999983, -0.02474999999999916, -0.09675000000000011, -0.027499999999999858, 0.010500000000000398, 0.04525000000000112, -0.015000000000000568, 0.03375000000000128, 0.08249999999999957, -0.11999999999999922, -0.09875000000000078, -0.006000000000000227, 0.15799999999999947, -0.08575000000000088, 0.0024999999999995026, 0.051000000000000156, 0.036249999999999005, 0.09050000000000047, -0.05450000000000088, 0.044749999999998735, 0.014499999999998181, 0.06325000000000003, 0.052250000000000796, 0.07774999999999999, 0.06400000000000006, 0.029500000000000526, -0.00274999999999892, 0.042500000000000426, 0.09050000000000047, 0.05100000000000193, 0.04600000000000115, -0.015499999999999403, 0.10125000000000028], zp_timestamp='2026-04-12T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:07:46.536 [DEBUG] [Thread-194292] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:07:46.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:07:46.632 [DEBUG] [Thread-194295] [transport.py] [_log()] starting thread (client mode): 0xb0fce680
2026-04-12T19:07:46.633 [DEBUG] [Thread-194295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:07:46.647 [DEBUG] [Thread-194295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:07:46.647 [INFO] [Thread-194295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:07:46.655 [DEBUG] [Thread-194295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:07:46.655 [DEBUG] [Thread-194295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:07:46.655 [DEBUG] [Thread-194295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:07:46.655 [DEBUG] [Thread-194295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:46.655 [DEBUG] [Thread-194295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] client lang: <none>
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] server lang: <none>
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] kex follows: False
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:07:46.656 [DEBUG] [Thread-194295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:07:46.657 [DEBUG] [Thread-194295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:07:46.657 [DEBUG] [Thread-194295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:07:46.657 [DEBUG] [Thread-194295] [transport.py] [_log()] Compression: none
2026-04-12T19:07:46.657 [DEBUG] [Thread-194295] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:07:46.716 [DEBUG] [Thread-194295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:07:46.716 [DEBUG] [Thread-194295] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:07:46.717 [DEBUG] [Thread-194295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:07:46.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:07:46.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:07:46.775 [DEBUG] [Thread-194295] [transport.py] [_log()] userauth is OK
2026-04-12T19:07:46.776 [DEBUG] [Thread-194295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:07:46.776 [DEBUG] [Thread-194295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:07:46.776 [DEBUG] [Thread-194295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:07:46.776 [DEBUG] [Thread-194295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:07:46.795 [INFO] [Thread-194295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:07:46.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:07:46.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:07:47.638 [DEBUG] [Thread-194295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:07:47.639 [DEBUG] [Thread-194295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:07:47.687 [DEBUG] [Thread-194295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:07:47.688 [DEBUG] [Thread-194295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:07:47.697 [DEBUG] [Thread-194295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:07:47.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:07:47.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:07:47.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:07:47.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:07:47.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:07:47.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:07:47.738 [DEBUG] [Thread-194295] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:07:51.641 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:07:51.643 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:07:53.615 [DEBUG] [Thread-194297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:07:59.673 [DEBUG] [Thread-194298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:08:14.737 [DEBUG] [Thread-194299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:08:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:08:17.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:08:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:08:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 7, 50), 3.5051, 79.1728, 0.0, 13.1983, 12.7614, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:08:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:07:50
2026-04-12T19:08:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:08:19.595 [DEBUG] [Thread-194300] [transport.py] [_log()] starting thread (client mode): 0xae51a7d0
2026-04-12T19:08:19.596 [DEBUG] [Thread-194300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:08:19.615 [DEBUG] [Thread-194300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:08:19.615 [INFO] [Thread-194300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] client lang: <none>
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] server lang: <none>
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] kex follows: False
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:08:19.618 [DEBUG] [Thread-194300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:08:19.619 [DEBUG] [Thread-194300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:08:19.619 [DEBUG] [Thread-194300] [transport.py] [_log()] Compression: none
2026-04-12T19:08:19.619 [DEBUG] [Thread-194300] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:08:19.634 [DEBUG] [Thread-194300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:08:19.635 [DEBUG] [Thread-194300] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:08:19.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:08:19.636 [DEBUG] [Thread-194300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:08:19.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:08:19.639 [DEBUG] [Thread-194300] [transport.py] [_log()] userauth is OK
2026-04-12T19:08:19.639 [DEBUG] [Thread-194300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:08:19.639 [DEBUG] [Thread-194300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:08:19.639 [DEBUG] [Thread-194300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:08:19.639 [DEBUG] [Thread-194300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:08:19.654 [INFO] [Thread-194300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:08:19.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:08:20.391 [DEBUG] [Thread-194300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:08:20.400 [DEBUG] [Thread-194300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:08:20.400 [DEBUG] [Thread-194300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:08:20.432 [DEBUG] [Thread-194300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:08:20.432 [DEBUG] [Thread-194300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:08:20.438 [DEBUG] [Thread-194300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:08:20.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:08:20.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:08:20.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:08:20.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:08:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:08:20.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:08:20.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:08:20.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:08:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:08:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.713997 -999.00  +12.60  10.68     82   +9.70 1 1 1 2 1     1    0 2.51 -15.60 ZNESW 10.7 10.7 271.4 12.6 13.6 -21.6 13.5 -20.5 13.2 -18.6 13.4 -20.6
2026-04-12T19:08:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:08:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:08:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.713997
2026-04-12T19:08:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:08:20.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:08:20.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:08:20.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:08:20.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:08:20.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:07:50', tmtdew=3.5051, humidity=79.1728, cloud=0.0, wind=13.1983, temperature=12.7614, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:08:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08924999999999983, -0.02474999999999916, -0.09675000000000011, -0.027499999999999858, 0.010500000000000398, 0.04525000000000112, -0.015000000000000568, 0.03375000000000128, 0.08249999999999957, -0.11999999999999922, -0.09875000000000078, -0.006000000000000227, 0.15799999999999947, -0.08575000000000088, 0.0024999999999995026, 0.051000000000000156, 0.036249999999999005, 0.09050000000000047, -0.05450000000000088, 0.044749999999998735, 0.014499999999998181, 0.06325000000000003, 0.052250000000000796, 0.07774999999999999, 0.06400000000000006, 0.029500000000000526, -0.00274999999999892, 0.042500000000000426, 0.09050000000000047, 0.05100000000000193, 0.04600000000000115, -0.015499999999999403, 0.10125000000000028], zp_timestamp='2026-04-12T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:08:20.469 [DEBUG] [Thread-194300] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:08:20.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:08:20.560 [DEBUG] [Thread-194303] [transport.py] [_log()] starting thread (client mode): 0xb0f40cd0
2026-04-12T19:08:20.560 [DEBUG] [Thread-194303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:08:20.576 [DEBUG] [Thread-194303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:08:20.576 [INFO] [Thread-194303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] client lang: <none>
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] server lang: <none>
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] kex follows: False
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:08:20.583 [DEBUG] [Thread-194303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:08:20.584 [DEBUG] [Thread-194303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:08:20.584 [DEBUG] [Thread-194303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:08:20.584 [DEBUG] [Thread-194303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:08:20.584 [DEBUG] [Thread-194303] [transport.py] [_log()] Compression: none
2026-04-12T19:08:20.584 [DEBUG] [Thread-194303] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:08:20.643 [DEBUG] [Thread-194303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:08:20.644 [DEBUG] [Thread-194303] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:08:20.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:08:20.645 [DEBUG] [Thread-194303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:08:20.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:08:20.700 [DEBUG] [Thread-194303] [transport.py] [_log()] userauth is OK
2026-04-12T19:08:20.700 [DEBUG] [Thread-194303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:08:20.700 [DEBUG] [Thread-194303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:08:20.700 [DEBUG] [Thread-194303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:08:20.700 [DEBUG] [Thread-194303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:08:20.724 [INFO] [Thread-194303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:08:20.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:08:20.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:08:21.548 [DEBUG] [Thread-194303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:08:21.548 [DEBUG] [Thread-194303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:08:21.596 [DEBUG] [Thread-194303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:08:21.596 [DEBUG] [Thread-194303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:08:21.605 [DEBUG] [Thread-194303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:08:21.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:08:21.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:08:21.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:08:21.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:08:21.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:08:21.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:08:21.650 [DEBUG] [Thread-194303] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:08:29.784 [DEBUG] [Thread-194305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:08:44.847 [DEBUG] [Thread-194306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:08:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:08:51.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:08:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:08:51.852 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:08:51.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:08:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 8, 25), 3.65921, 78.5533, 0.0, 9.89928, 12.5973, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:08:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:08:25
2026-04-12T19:08:53.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:08:53.571 [DEBUG] [Thread-194307] [transport.py] [_log()] starting thread (client mode): 0xae5f09a0
2026-04-12T19:08:53.572 [DEBUG] [Thread-194307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:08:53.591 [DEBUG] [Thread-194307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:08:53.591 [INFO] [Thread-194307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:08:53.594 [DEBUG] [Thread-194307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:08:53.594 [DEBUG] [Thread-194307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:08:53.594 [DEBUG] [Thread-194307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:08:53.594 [DEBUG] [Thread-194307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:53.594 [DEBUG] [Thread-194307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:53.594 [DEBUG] [Thread-194307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] client lang: <none>
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] server lang: <none>
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] kex follows: False
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] Compression: none
2026-04-12T19:08:53.595 [DEBUG] [Thread-194307] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:08:53.612 [DEBUG] [Thread-194307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:08:53.613 [DEBUG] [Thread-194307] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:08:53.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:08:53.614 [DEBUG] [Thread-194307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:08:53.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:08:53.616 [DEBUG] [Thread-194307] [transport.py] [_log()] userauth is OK
2026-04-12T19:08:53.616 [DEBUG] [Thread-194307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:08:53.616 [DEBUG] [Thread-194307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:08:53.616 [DEBUG] [Thread-194307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:08:53.616 [DEBUG] [Thread-194307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:08:53.638 [INFO] [Thread-194307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:08:53.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:08:53.697 [DEBUG] [Thread-194309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:08:54.360 [DEBUG] [Thread-194307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:08:54.361 [DEBUG] [Thread-194307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:08:54.361 [DEBUG] [Thread-194307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:08:54.401 [DEBUG] [Thread-194307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:08:54.401 [DEBUG] [Thread-194307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:08:54.405 [DEBUG] [Thread-194307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:08:54.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:08:54.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:08:54.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:08:54.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:08:54.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:08:54.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:08:54.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:08:54.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:08:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:08:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.713997 -999.00  +12.60  10.68     82   +9.70 1 1 1 2 1     1    0 2.51 -15.60 ZNESW 10.7 10.7 271.4 12.6 13.6 -21.6 13.5 -20.5 13.2 -18.6 13.4 -20.6
2026-04-12T19:08:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:08:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:08:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.713997
2026-04-12T19:08:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:08:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:08:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:08:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:08:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:08:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:08:25', tmtdew=3.65921, humidity=78.5533, cloud=0.0, wind=9.89928, temperature=12.5973, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:08:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08924999999999983, -0.02474999999999916, -0.09675000000000011, -0.027499999999999858, 0.010500000000000398, 0.04525000000000112, -0.015000000000000568, 0.03375000000000128, 0.08249999999999957, -0.11999999999999922, -0.09875000000000078, -0.006000000000000227, 0.15799999999999947, -0.08575000000000088, 0.0024999999999995026, 0.051000000000000156, 0.036249999999999005, 0.09050000000000047, -0.05450000000000088, 0.044749999999998735, 0.014499999999998181, 0.06325000000000003, 0.052250000000000796, 0.07774999999999999, 0.06400000000000006, 0.029500000000000526, -0.00274999999999892, 0.042500000000000426, 0.09050000000000047, 0.05100000000000193, 0.04600000000000115, -0.015499999999999403, 0.10125000000000028], zp_timestamp='2026-04-12T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:08:54.431 [DEBUG] [Thread-194307] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:08:54.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:08:54.524 [DEBUG] [Thread-194311] [transport.py] [_log()] starting thread (client mode): 0xae518520
2026-04-12T19:08:54.524 [DEBUG] [Thread-194311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:08:54.540 [DEBUG] [Thread-194311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:08:54.540 [INFO] [Thread-194311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:08:54.548 [DEBUG] [Thread-194311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:08:54.548 [DEBUG] [Thread-194311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:08:54.548 [DEBUG] [Thread-194311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:08:54.548 [DEBUG] [Thread-194311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:54.548 [DEBUG] [Thread-194311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:08:54.548 [DEBUG] [Thread-194311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:54.548 [DEBUG] [Thread-194311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] client lang: <none>
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] server lang: <none>
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] kex follows: False
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] Compression: none
2026-04-12T19:08:54.549 [DEBUG] [Thread-194311] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:08:54.609 [DEBUG] [Thread-194311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:08:54.610 [DEBUG] [Thread-194311] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:08:54.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:08:54.611 [DEBUG] [Thread-194311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:08:54.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:08:54.669 [DEBUG] [Thread-194311] [transport.py] [_log()] userauth is OK
2026-04-12T19:08:54.669 [DEBUG] [Thread-194311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:08:54.669 [DEBUG] [Thread-194311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:08:54.669 [DEBUG] [Thread-194311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:08:54.669 [DEBUG] [Thread-194311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:08:54.688 [INFO] [Thread-194311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:08:54.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:08:54.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:08:55.508 [DEBUG] [Thread-194311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:08:55.508 [DEBUG] [Thread-194311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:08:55.559 [DEBUG] [Thread-194311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:08:55.560 [DEBUG] [Thread-194311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:08:55.572 [DEBUG] [Thread-194311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:08:55.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:08:55.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:08:55.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:08:55.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:08:55.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:08:55.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:08:55.617 [DEBUG] [Thread-194311] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:08:59.885 [DEBUG] [Thread-194313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:09:14.940 [DEBUG] [Thread-194314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:09:25.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:09:25.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:09:25.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:09:26.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 9, 1), 3.67203, 78.4874, 0.0, 9.96984, 12.6142, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:09:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:09:01
2026-04-12T19:09:27.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:09:27.506 [DEBUG] [Thread-194315] [transport.py] [_log()] starting thread (client mode): 0xae5b1630
2026-04-12T19:09:27.506 [DEBUG] [Thread-194315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:09:27.526 [DEBUG] [Thread-194315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:09:27.526 [INFO] [Thread-194315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:09:27.529 [DEBUG] [Thread-194315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:09:27.529 [DEBUG] [Thread-194315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:09:27.529 [DEBUG] [Thread-194315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:09:27.529 [DEBUG] [Thread-194315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:09:27.529 [DEBUG] [Thread-194315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] client lang: <none>
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] server lang: <none>
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] kex follows: False
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] Compression: none
2026-04-12T19:09:27.530 [DEBUG] [Thread-194315] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:09:27.538 [DEBUG] [Thread-194315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:09:27.539 [DEBUG] [Thread-194315] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:09:27.539 [DEBUG] [Thread-194315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:09:27.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:09:27.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:09:27.541 [DEBUG] [Thread-194315] [transport.py] [_log()] userauth is OK
2026-04-12T19:09:27.541 [DEBUG] [Thread-194315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:09:27.542 [DEBUG] [Thread-194315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:09:27.542 [DEBUG] [Thread-194315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:09:27.542 [DEBUG] [Thread-194315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:09:27.559 [INFO] [Thread-194315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:09:27.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:09:28.386 [DEBUG] [Thread-194315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:09:28.386 [DEBUG] [Thread-194315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:09:28.387 [DEBUG] [Thread-194315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:09:28.427 [DEBUG] [Thread-194315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:09:28.427 [DEBUG] [Thread-194315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:09:28.429 [DEBUG] [Thread-194315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:09:28.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:09:28.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:09:28.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:09:28.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:09:28.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:09:28.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:09:28.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:09:28.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:09:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:09:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.714345 -999.00  +12.60   9.00     82   +9.60 1 1 1 2 1     1    0 2.46 -15.29 ZNESW 9.0 9.0 272.0 11.5 13.6 -21.7 13.5 -20.4 13.2 -18.6 13.4 -20.5
2026-04-12T19:09:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:09:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:09:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.714345
2026-04-12T19:09:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:09:28.459 [DEBUG] [Thread-194315] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:09:28.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:09:28.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:09:28.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:09:28.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:09:28.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:09:01', tmtdew=3.67203, humidity=78.4874, cloud=0.0, wind=9.96984, temperature=12.6142, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:08:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08924999999999983, -0.02474999999999916, -0.09675000000000011, -0.027499999999999858, 0.010500000000000398, 0.04525000000000112, -0.015000000000000568, 0.03375000000000128, 0.08249999999999957, -0.11999999999999922, -0.09875000000000078, -0.006000000000000227, 0.15799999999999947, -0.08575000000000088, 0.0024999999999995026, 0.051000000000000156, 0.036249999999999005, 0.09050000000000047, -0.05450000000000088, 0.044749999999998735, 0.014499999999998181, 0.06325000000000003, 0.052250000000000796, 0.07774999999999999, 0.06400000000000006, 0.029500000000000526, -0.00274999999999892, 0.042500000000000426, 0.09050000000000047, 0.05100000000000193, 0.04600000000000115, -0.015499999999999403, 0.10125000000000028], zp_timestamp='2026-04-12T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:09:28.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:09:28.541 [DEBUG] [Thread-194318] [transport.py] [_log()] starting thread (client mode): 0xae5e4eb0
2026-04-12T19:09:28.541 [DEBUG] [Thread-194318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:09:28.556 [DEBUG] [Thread-194318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:09:28.556 [INFO] [Thread-194318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:09:28.564 [DEBUG] [Thread-194318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:09:28.566 [DEBUG] [Thread-194318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:09:28.566 [DEBUG] [Thread-194318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:09:28.566 [DEBUG] [Thread-194318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:09:28.566 [DEBUG] [Thread-194318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:09:28.566 [DEBUG] [Thread-194318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] client lang: <none>
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] server lang: <none>
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] kex follows: False
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:09:28.567 [DEBUG] [Thread-194318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:09:28.568 [DEBUG] [Thread-194318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:09:28.568 [DEBUG] [Thread-194318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:09:28.568 [DEBUG] [Thread-194318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:09:28.568 [DEBUG] [Thread-194318] [transport.py] [_log()] Compression: none
2026-04-12T19:09:28.568 [DEBUG] [Thread-194318] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:09:28.621 [DEBUG] [Thread-194318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:09:28.621 [DEBUG] [Thread-194318] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:09:28.622 [DEBUG] [Thread-194318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:09:28.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:09:28.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:09:28.677 [DEBUG] [Thread-194318] [transport.py] [_log()] userauth is OK
2026-04-12T19:09:28.677 [DEBUG] [Thread-194318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:09:28.678 [DEBUG] [Thread-194318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:09:28.678 [DEBUG] [Thread-194318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:09:28.678 [DEBUG] [Thread-194318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:09:28.697 [INFO] [Thread-194318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:09:28.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:09:28.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:09:29.526 [DEBUG] [Thread-194318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:09:29.526 [DEBUG] [Thread-194318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:09:29.574 [DEBUG] [Thread-194318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:09:29.574 [DEBUG] [Thread-194318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:09:29.583 [DEBUG] [Thread-194318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:09:29.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:09:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:09:29.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:09:29.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:09:29.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:09:29.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:09:29.621 [DEBUG] [Thread-194318] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:09:29.974 [DEBUG] [Thread-194320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:09:45.027 [DEBUG] [Thread-194321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:09:52.057 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:09:52.059 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:09:53.755 [DEBUG] [Thread-194322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:09:59.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:09:59.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:09:59.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:10:00.064 [DEBUG] [Thread-194323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:10:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 9, 36), 3.56368, 78.8754, 0.0, 11.6107, 12.8616, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:10:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:09:36
2026-04-12T19:10:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:10:01.488 [DEBUG] [Thread-194324] [transport.py] [_log()] starting thread (client mode): 0xae52dae0
2026-04-12T19:10:01.488 [DEBUG] [Thread-194324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:10:01.511 [DEBUG] [Thread-194324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:10:01.511 [INFO] [Thread-194324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] client lang: <none>
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] server lang: <none>
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] kex follows: False
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] Compression: none
2026-04-12T19:10:01.515 [DEBUG] [Thread-194324] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:10:01.531 [DEBUG] [Thread-194324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:10:01.531 [DEBUG] [Thread-194324] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:10:01.531 [DEBUG] [Thread-194324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:10:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:10:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:10:01.533 [DEBUG] [Thread-194324] [transport.py] [_log()] userauth is OK
2026-04-12T19:10:01.533 [DEBUG] [Thread-194324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:10:01.533 [DEBUG] [Thread-194324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:10:01.533 [DEBUG] [Thread-194324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:10:01.533 [DEBUG] [Thread-194324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:10:01.551 [INFO] [Thread-194324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:10:01.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:10:02.279 [DEBUG] [Thread-194324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:10:02.279 [DEBUG] [Thread-194324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:10:02.280 [DEBUG] [Thread-194324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:10:02.321 [DEBUG] [Thread-194324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:10:02.321 [DEBUG] [Thread-194324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:10:02.325 [DEBUG] [Thread-194324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:10:02.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:10:02.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:10:02.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:10:02.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:10:02.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:10:02.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:10:02.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:10:02.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:10:02.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:10:02.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.714692 -999.00  +12.70   8.70     81   +9.60 1 1 1 2 1     1    0 2.50 -13.27 ZNESW 8.7 8.7 272.2 14.2 13.6 -21.6 13.5 -20.3 13.1 -18.7 13.4 -20.5
2026-04-12T19:10:02.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:10:02.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:10:02.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.714692
2026-04-12T19:10:02.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:10:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:10:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:10:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:10:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:10:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:09:36', tmtdew=3.56368, humidity=78.8754, cloud=0.0, wind=11.6107, temperature=12.8616, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:09:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08924999999999983, -0.02474999999999916, -0.09675000000000011, -0.027499999999999858, 0.010500000000000398, 0.04525000000000112, -0.015000000000000568, 0.03375000000000128, 0.08249999999999957, -0.11999999999999922, -0.09875000000000078, -0.006000000000000227, 0.15799999999999947, -0.08575000000000088, 0.0024999999999995026, 0.051000000000000156, 0.036249999999999005, 0.09050000000000047, -0.05450000000000088, 0.044749999999998735, 0.014499999999998181, 0.06325000000000003, 0.052250000000000796, 0.07774999999999999, 0.06400000000000006, 0.029500000000000526, -0.00274999999999892, 0.042500000000000426, 0.09050000000000047, 0.05100000000000193, 0.04600000000000115, -0.015499999999999403, 0.10125000000000028], zp_timestamp='2026-04-12T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:10:02.351 [DEBUG] [Thread-194324] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:10:02.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:10:02.443 [DEBUG] [Thread-194327] [transport.py] [_log()] starting thread (client mode): 0xb0f42e30
2026-04-12T19:10:02.443 [DEBUG] [Thread-194327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:10:02.458 [DEBUG] [Thread-194327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:10:02.458 [INFO] [Thread-194327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:10:02.466 [DEBUG] [Thread-194327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] client lang: <none>
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] server lang: <none>
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] kex follows: False
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] Compression: none
2026-04-12T19:10:02.467 [DEBUG] [Thread-194327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:10:02.525 [DEBUG] [Thread-194327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:10:02.526 [DEBUG] [Thread-194327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:10:02.526 [DEBUG] [Thread-194327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:10:02.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:10:02.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:10:02.581 [DEBUG] [Thread-194327] [transport.py] [_log()] userauth is OK
2026-04-12T19:10:02.582 [DEBUG] [Thread-194327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:10:02.582 [DEBUG] [Thread-194327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:10:02.582 [DEBUG] [Thread-194327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:10:02.582 [DEBUG] [Thread-194327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:10:02.600 [INFO] [Thread-194327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:10:02.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:10:02.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:10:03.441 [DEBUG] [Thread-194327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:10:03.441 [DEBUG] [Thread-194327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:10:03.489 [DEBUG] [Thread-194327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:10:03.489 [DEBUG] [Thread-194327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:10:03.499 [DEBUG] [Thread-194327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:10:03.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:10:03.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:10:03.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:10:03.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:10:03.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:10:03.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:10:03.536 [DEBUG] [Thread-194327] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:10:15.102 [DEBUG] [Thread-194329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:10:30.156 [DEBUG] [Thread-194330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:10:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:10:33.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:10:33.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:10:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 10, 12), 3.66841, 78.5044, 0.0, 10.9753, 12.598, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:10:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:10:12
2026-04-12T19:10:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:10:35.371 [DEBUG] [Thread-194331] [transport.py] [_log()] starting thread (client mode): 0xae5b7bb0
2026-04-12T19:10:35.371 [DEBUG] [Thread-194331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:10:35.391 [DEBUG] [Thread-194331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:10:35.391 [INFO] [Thread-194331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:10:35.394 [DEBUG] [Thread-194331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:10:35.394 [DEBUG] [Thread-194331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:10:35.394 [DEBUG] [Thread-194331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] client lang: <none>
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] server lang: <none>
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] kex follows: False
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] Compression: none
2026-04-12T19:10:35.395 [DEBUG] [Thread-194331] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:10:35.412 [DEBUG] [Thread-194331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:10:35.413 [DEBUG] [Thread-194331] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:10:35.413 [DEBUG] [Thread-194331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:10:35.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:10:35.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:10:35.415 [DEBUG] [Thread-194331] [transport.py] [_log()] userauth is OK
2026-04-12T19:10:35.415 [DEBUG] [Thread-194331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:10:35.415 [DEBUG] [Thread-194331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:10:35.415 [DEBUG] [Thread-194331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:10:35.416 [DEBUG] [Thread-194331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:10:35.434 [INFO] [Thread-194331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:10:35.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:10:36.237 [DEBUG] [Thread-194331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:10:36.237 [DEBUG] [Thread-194331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:10:36.237 [DEBUG] [Thread-194331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:10:36.278 [DEBUG] [Thread-194331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:10:36.278 [DEBUG] [Thread-194331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:10:36.282 [DEBUG] [Thread-194331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:10:36.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:10:36.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:10:36.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:10:36.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:10:36.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:10:36.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:10:36.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:10:36.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:10:36.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:10:36.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.715039 -999.00  +12.70   6.03     82   +9.70 1 1 1 2 1     1    0 2.63 -13.70 ZNESW 6.0 6.0 264.4 9.2 13.6 -21.6 13.5 -20.4 13.1 -18.6 13.4 -20.4
2026-04-12T19:10:36.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:10:36.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:10:36.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.715039
2026-04-12T19:10:36.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:10:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:10:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:10:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:10:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:10:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:10:12', tmtdew=3.66841, humidity=78.5044, cloud=0.0, wind=10.9753, temperature=12.598, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:09:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:10:36.309 [DEBUG] [Thread-194331] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:10:36.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:10:36.402 [DEBUG] [Thread-194334] [transport.py] [_log()] starting thread (client mode): 0xb0fcef50
2026-04-12T19:10:36.402 [DEBUG] [Thread-194334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:10:36.418 [DEBUG] [Thread-194334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:10:36.418 [INFO] [Thread-194334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:10:36.426 [DEBUG] [Thread-194334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:10:36.426 [DEBUG] [Thread-194334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:10:36.426 [DEBUG] [Thread-194334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:10:36.426 [DEBUG] [Thread-194334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:36.426 [DEBUG] [Thread-194334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] client lang: <none>
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] server lang: <none>
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] kex follows: False
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] Compression: none
2026-04-12T19:10:36.427 [DEBUG] [Thread-194334] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:10:36.486 [DEBUG] [Thread-194334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:10:36.487 [DEBUG] [Thread-194334] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:10:36.487 [DEBUG] [Thread-194334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:10:36.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:10:36.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:10:36.542 [DEBUG] [Thread-194334] [transport.py] [_log()] userauth is OK
2026-04-12T19:10:36.543 [DEBUG] [Thread-194334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:10:36.543 [DEBUG] [Thread-194334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:10:36.543 [DEBUG] [Thread-194334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:10:36.543 [DEBUG] [Thread-194334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:10:36.562 [INFO] [Thread-194334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:10:36.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:10:36.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:10:37.416 [DEBUG] [Thread-194334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:10:37.416 [DEBUG] [Thread-194334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:10:37.464 [DEBUG] [Thread-194334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:10:37.465 [DEBUG] [Thread-194334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:10:37.474 [DEBUG] [Thread-194334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:10:37.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:10:37.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:10:37.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:10:37.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:10:37.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:10:37.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:10:37.510 [DEBUG] [Thread-194334] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:10:45.195 [DEBUG] [Thread-194336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:10:52.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:10:52.263 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:10:53.823 [DEBUG] [Thread-194337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:11:00.261 [DEBUG] [Thread-194338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:11:07.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:11:07.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:11:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:11:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 10, 47), 3.56711, 78.843, 0.0, 12.8102, 12.7628, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:11:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:10:47
2026-04-12T19:11:09.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:11:09.338 [DEBUG] [Thread-194339] [transport.py] [_log()] starting thread (client mode): 0xae52c730
2026-04-12T19:11:09.338 [DEBUG] [Thread-194339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:11:09.358 [DEBUG] [Thread-194339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:11:09.359 [INFO] [Thread-194339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:11:09.361 [DEBUG] [Thread-194339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] client lang: <none>
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] server lang: <none>
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] kex follows: False
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] Compression: none
2026-04-12T19:11:09.362 [DEBUG] [Thread-194339] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:11:09.378 [DEBUG] [Thread-194339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:11:09.379 [DEBUG] [Thread-194339] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:11:09.380 [DEBUG] [Thread-194339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:11:09.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:11:09.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:11:09.381 [DEBUG] [Thread-194339] [transport.py] [_log()] userauth is OK
2026-04-12T19:11:09.382 [DEBUG] [Thread-194339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:11:09.382 [DEBUG] [Thread-194339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:11:09.382 [DEBUG] [Thread-194339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:11:09.382 [DEBUG] [Thread-194339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:11:09.406 [INFO] [Thread-194339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:11:09.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:11:10.197 [DEBUG] [Thread-194339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:11:10.197 [DEBUG] [Thread-194339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:11:10.197 [DEBUG] [Thread-194339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:11:10.238 [DEBUG] [Thread-194339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:11:10.239 [DEBUG] [Thread-194339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:11:10.241 [DEBUG] [Thread-194339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:11:10.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:11:10.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:11:10.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:11:10.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:11:10.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:11:10.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:11:10.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:11:10.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.715386 -999.00  +12.70   5.66     82   +9.70 1 1 1 2 1     1    0 2.61 -12.10 ZNESW 5.7 5.7 255.4 7.5 13.6 -21.5 13.5 -20.5 13.2 -18.7 13.4 -20.5
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.715386
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:11:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:10:47', tmtdew=3.56711, humidity=78.843, cloud=0.0, wind=12.8102, temperature=12.7628, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:10:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:11:10.265 [DEBUG] [Thread-194339] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:11:10.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:11:10.353 [DEBUG] [Thread-194342] [transport.py] [_log()] starting thread (client mode): 0xae5b0d30
2026-04-12T19:11:10.353 [DEBUG] [Thread-194342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:11:10.367 [DEBUG] [Thread-194342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:11:10.367 [INFO] [Thread-194342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:11:10.375 [DEBUG] [Thread-194342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:11:10.375 [DEBUG] [Thread-194342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:11:10.375 [DEBUG] [Thread-194342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:11:10.375 [DEBUG] [Thread-194342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:10.375 [DEBUG] [Thread-194342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:10.375 [DEBUG] [Thread-194342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:10.375 [DEBUG] [Thread-194342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] client lang: <none>
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] server lang: <none>
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] kex follows: False
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] Compression: none
2026-04-12T19:11:10.376 [DEBUG] [Thread-194342] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:11:10.435 [DEBUG] [Thread-194342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:11:10.436 [DEBUG] [Thread-194342] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:11:10.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:11:10.437 [DEBUG] [Thread-194342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:11:10.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:11:10.491 [DEBUG] [Thread-194342] [transport.py] [_log()] userauth is OK
2026-04-12T19:11:10.492 [DEBUG] [Thread-194342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:11:10.492 [DEBUG] [Thread-194342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:11:10.492 [DEBUG] [Thread-194342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:11:10.492 [DEBUG] [Thread-194342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:11:10.510 [INFO] [Thread-194342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:11:10.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:11:10.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:11:11.349 [DEBUG] [Thread-194342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:11:11.349 [DEBUG] [Thread-194342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:11:11.397 [DEBUG] [Thread-194342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:11:11.397 [DEBUG] [Thread-194342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:11:11.406 [DEBUG] [Thread-194342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:11:11.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:11:11.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:11:11.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:11:11.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:11:11.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:11:11.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:11:11.444 [DEBUG] [Thread-194342] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:11:15.297 [DEBUG] [Thread-194344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:11:30.337 [DEBUG] [Thread-194345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:11:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:11:41.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:11:41.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:11:42.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 11, 23), 3.68707, 78.4053, 0.0, 10.552, 12.5982, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:11:42.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:11:23
2026-04-12T19:11:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:11:43.321 [DEBUG] [Thread-194346] [transport.py] [_log()] starting thread (client mode): 0xae5f0e80
2026-04-12T19:11:43.321 [DEBUG] [Thread-194346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:11:43.337 [DEBUG] [Thread-194346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:11:43.337 [INFO] [Thread-194346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:11:43.340 [DEBUG] [Thread-194346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:11:43.340 [DEBUG] [Thread-194346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:11:43.340 [DEBUG] [Thread-194346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] client lang: <none>
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] server lang: <none>
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] kex follows: False
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] Compression: none
2026-04-12T19:11:43.341 [DEBUG] [Thread-194346] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:11:43.351 [DEBUG] [Thread-194346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:11:43.352 [DEBUG] [Thread-194346] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:11:43.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:11:43.353 [DEBUG] [Thread-194346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:11:43.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:11:43.355 [DEBUG] [Thread-194346] [transport.py] [_log()] userauth is OK
2026-04-12T19:11:43.356 [DEBUG] [Thread-194346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:11:43.356 [DEBUG] [Thread-194346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:11:43.356 [DEBUG] [Thread-194346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:11:43.356 [DEBUG] [Thread-194346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:11:43.383 [INFO] [Thread-194346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:11:43.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:11:44.164 [DEBUG] [Thread-194346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:11:44.164 [DEBUG] [Thread-194346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:11:44.164 [DEBUG] [Thread-194346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:11:44.206 [DEBUG] [Thread-194346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:11:44.206 [DEBUG] [Thread-194346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:11:44.210 [DEBUG] [Thread-194346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:11:44.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:11:44.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:11:44.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:11:44.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:11:44.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:11:44.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:11:44.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:11:44.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:11:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:11:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.716081 -999.00  +12.60   5.69     82   +9.70 1 1 1 2 1     0    0 2.54 -12.33 ZNESW 5.7 5.7 261.2 8.8 13.6 -21.7 13.5 -20.3 13.1 -18.6 13.4 -20.5
2026-04-12T19:11:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:11:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:11:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.716081
2026-04-12T19:11:44.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:11:44.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:11:44.238 [DEBUG] [Thread-194346] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:11:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:11:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:11:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:11:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:11:23', tmtdew=3.68707, humidity=78.4053, cloud=0.0, wind=10.552, temperature=12.5982, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:11:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:11:44.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:11:44.332 [DEBUG] [Thread-194349] [transport.py] [_log()] starting thread (client mode): 0xae5f0760
2026-04-12T19:11:44.332 [DEBUG] [Thread-194349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:11:44.346 [DEBUG] [Thread-194349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:11:44.347 [INFO] [Thread-194349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:11:44.354 [DEBUG] [Thread-194349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:11:44.354 [DEBUG] [Thread-194349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:11:44.354 [DEBUG] [Thread-194349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] client lang: <none>
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] server lang: <none>
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] kex follows: False
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] Compression: none
2026-04-12T19:11:44.355 [DEBUG] [Thread-194349] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:11:44.411 [DEBUG] [Thread-194349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:11:44.412 [DEBUG] [Thread-194349] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:11:44.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:11:44.413 [DEBUG] [Thread-194349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:11:44.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:11:44.467 [DEBUG] [Thread-194349] [transport.py] [_log()] userauth is OK
2026-04-12T19:11:44.468 [DEBUG] [Thread-194349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:11:44.468 [DEBUG] [Thread-194349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:11:44.468 [DEBUG] [Thread-194349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:11:44.468 [DEBUG] [Thread-194349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:11:44.493 [INFO] [Thread-194349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:11:44.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:11:44.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:11:45.314 [DEBUG] [Thread-194349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:11:45.314 [DEBUG] [Thread-194349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:11:45.362 [DEBUG] [Thread-194349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:11:45.363 [DEBUG] [Thread-194349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:11:45.371 [DEBUG] [Thread-194349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:11:45.373 [DEBUG] [Thread-194351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:11:45.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:11:45.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:11:45.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:11:45.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:11:45.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:11:45.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:11:45.406 [DEBUG] [Thread-194349] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:11:52.465 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:11:52.466 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:11:53.879 [DEBUG] [Thread-194352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:12:00.434 [DEBUG] [Thread-194353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:12:15.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:12:15.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:12:15.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:12:15.472 [DEBUG] [Thread-194354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:12:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 11, 58), 3.63396, 78.4218, 0.0, 10.0588, 12.5482, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:12:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:11:58
2026-04-12T19:12:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:12:17.207 [DEBUG] [Thread-194355] [transport.py] [_log()] starting thread (client mode): 0xae5f2170
2026-04-12T19:12:17.207 [DEBUG] [Thread-194355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:12:17.226 [DEBUG] [Thread-194355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:12:17.226 [INFO] [Thread-194355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:12:17.229 [DEBUG] [Thread-194355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] client lang: <none>
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] server lang: <none>
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] kex follows: False
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] Compression: none
2026-04-12T19:12:17.230 [DEBUG] [Thread-194355] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:12:17.248 [DEBUG] [Thread-194355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:12:17.248 [DEBUG] [Thread-194355] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:12:17.249 [DEBUG] [Thread-194355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:12:17.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:12:17.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:12:17.293 [DEBUG] [Thread-194355] [transport.py] [_log()] userauth is OK
2026-04-12T19:12:17.293 [DEBUG] [Thread-194355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:12:17.293 [DEBUG] [Thread-194355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:12:17.293 [DEBUG] [Thread-194355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:12:17.293 [DEBUG] [Thread-194355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:12:17.332 [INFO] [Thread-194355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:12:17.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:12:18.133 [DEBUG] [Thread-194355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:12:18.133 [DEBUG] [Thread-194355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:12:18.134 [DEBUG] [Thread-194355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:12:18.174 [DEBUG] [Thread-194355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:12:18.174 [DEBUG] [Thread-194355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:12:18.177 [DEBUG] [Thread-194355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:12:18.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:12:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:12:18.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:12:18.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:12:18.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:12:18.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:12:18.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:12:18.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:12:18.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:12:18.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.716428 -999.00  +12.60   5.84     82   +9.70 1 1 1 2 1     0    0 2.58 -11.78 ZNESW 5.8 5.8 264.8 10.3 13.6 -21.7 13.5 -20.4 13.1 -18.6 13.4 -20.4
2026-04-12T19:12:18.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:12:18.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:12:18.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.716428
2026-04-12T19:12:18.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:12:18.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:12:18.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:12:18.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:12:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:12:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:11:58', tmtdew=3.63396, humidity=78.4218, cloud=0.0, wind=10.0588, temperature=12.5482, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:11:39.379', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:12:18.200 [DEBUG] [Thread-194355] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:12:18.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:12:18.292 [DEBUG] [Thread-194358] [transport.py] [_log()] starting thread (client mode): 0xae5f0d30
2026-04-12T19:12:18.292 [DEBUG] [Thread-194358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:12:18.306 [DEBUG] [Thread-194358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:12:18.307 [INFO] [Thread-194358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] client lang: <none>
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] server lang: <none>
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] kex follows: False
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:12:18.314 [DEBUG] [Thread-194358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:12:18.315 [DEBUG] [Thread-194358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:12:18.315 [DEBUG] [Thread-194358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:12:18.315 [DEBUG] [Thread-194358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:12:18.315 [DEBUG] [Thread-194358] [transport.py] [_log()] Compression: none
2026-04-12T19:12:18.315 [DEBUG] [Thread-194358] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:12:18.371 [DEBUG] [Thread-194358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:12:18.372 [DEBUG] [Thread-194358] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:12:18.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:12:18.374 [DEBUG] [Thread-194358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:12:18.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:12:18.428 [DEBUG] [Thread-194358] [transport.py] [_log()] userauth is OK
2026-04-12T19:12:18.428 [DEBUG] [Thread-194358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:12:18.428 [DEBUG] [Thread-194358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:12:18.428 [DEBUG] [Thread-194358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:12:18.428 [DEBUG] [Thread-194358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:12:18.448 [INFO] [Thread-194358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:12:18.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:12:18.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:12:19.261 [DEBUG] [Thread-194358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:12:19.261 [DEBUG] [Thread-194358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:12:19.309 [DEBUG] [Thread-194358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:12:19.309 [DEBUG] [Thread-194358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:12:19.318 [DEBUG] [Thread-194358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:12:19.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:12:19.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:12:19.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:12:19.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:12:19.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:12:19.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:12:19.355 [DEBUG] [Thread-194358] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:12:30.512 [DEBUG] [Thread-194360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:12:45.577 [DEBUG] [Thread-194361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:12:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:12:49.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:12:49.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:12:50.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 12, 33), 3.57941, 78.7778, 0.0, 10.2701, 12.7637, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:12:50.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:12:33
2026-04-12T19:12:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:12:51.249 [DEBUG] [Thread-194362] [transport.py] [_log()] starting thread (client mode): 0xb0f42b90
2026-04-12T19:12:51.249 [DEBUG] [Thread-194362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:12:51.269 [DEBUG] [Thread-194362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:12:51.269 [INFO] [Thread-194362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] client lang: <none>
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] server lang: <none>
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] kex follows: False
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] Compression: none
2026-04-12T19:12:51.272 [DEBUG] [Thread-194362] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:12:51.290 [DEBUG] [Thread-194362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:12:51.291 [DEBUG] [Thread-194362] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:12:51.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:12:51.291 [DEBUG] [Thread-194362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:12:51.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:12:51.293 [DEBUG] [Thread-194362] [transport.py] [_log()] userauth is OK
2026-04-12T19:12:51.294 [DEBUG] [Thread-194362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:12:51.294 [DEBUG] [Thread-194362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:12:51.294 [DEBUG] [Thread-194362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:12:51.294 [DEBUG] [Thread-194362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:12:51.327 [INFO] [Thread-194362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:12:51.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:12:52.119 [DEBUG] [Thread-194362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:12:52.119 [DEBUG] [Thread-194362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:12:52.120 [DEBUG] [Thread-194362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:12:52.161 [DEBUG] [Thread-194362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:12:52.161 [DEBUG] [Thread-194362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:12:52.165 [DEBUG] [Thread-194362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:12:52.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:12:52.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:12:52.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:12:52.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:12:52.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:12:52.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:12:52.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:12:52.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:12:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:12:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.716775 -999.00  +12.60   4.62     83   +9.80 1 1 1 2 1     0    0 2.62 -11.00 ZNESW 4.6 4.6 259.0 7.5 13.6 -21.6 13.4 -20.4 13.1 -18.6 13.4 -20.6
2026-04-12T19:12:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:12:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:12:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.716775
2026-04-12T19:12:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:12:52.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:12:52.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:12:52.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:12:52.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:12:52.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:12:33', tmtdew=3.57941, humidity=78.7778, cloud=0.0, wind=10.2701, temperature=12.7637, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:12:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:12:52.195 [DEBUG] [Thread-194362] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:12:52.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:12:52.289 [DEBUG] [Thread-194365] [transport.py] [_log()] starting thread (client mode): 0xae52e350
2026-04-12T19:12:52.289 [DEBUG] [Thread-194365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:12:52.303 [DEBUG] [Thread-194365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:12:52.303 [INFO] [Thread-194365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:12:52.311 [DEBUG] [Thread-194365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:12:52.311 [DEBUG] [Thread-194365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:12:52.311 [DEBUG] [Thread-194365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:12:52.311 [DEBUG] [Thread-194365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:52.311 [DEBUG] [Thread-194365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:12:52.311 [DEBUG] [Thread-194365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:52.311 [DEBUG] [Thread-194365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] client lang: <none>
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] server lang: <none>
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] kex follows: False
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] Compression: none
2026-04-12T19:12:52.312 [DEBUG] [Thread-194365] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:12:52.372 [DEBUG] [Thread-194365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:12:52.373 [DEBUG] [Thread-194365] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:12:52.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:12:52.374 [DEBUG] [Thread-194365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:12:52.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:12:52.428 [DEBUG] [Thread-194365] [transport.py] [_log()] userauth is OK
2026-04-12T19:12:52.428 [DEBUG] [Thread-194365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:12:52.429 [DEBUG] [Thread-194365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:12:52.429 [DEBUG] [Thread-194365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:12:52.429 [DEBUG] [Thread-194365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:12:52.449 [INFO] [Thread-194365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:12:52.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:12:52.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:12:52.669 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:12:52.670 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:12:53.272 [DEBUG] [Thread-194365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:12:53.272 [DEBUG] [Thread-194365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:12:53.319 [DEBUG] [Thread-194365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:12:53.319 [DEBUG] [Thread-194365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:12:53.328 [DEBUG] [Thread-194365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:12:53.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:12: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')
2026-04-12T19:12: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
2026-04-12T19:12:53.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:12:53.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:12:53.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:12:53.360 [DEBUG] [Thread-194365] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:12:53.954 [DEBUG] [Thread-194367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:00.617 [DEBUG] [Thread-194368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:15.261 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:15.679 [DEBUG] [Thread-194369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:18.419 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:23.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:13:23.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:13:23.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:13:23.512 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:24.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 13, 9), 3.58257, 78.4221, 0.0, 8.61156, 12.4987, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:13:24.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:13:09
2026-04-12T19:13:25.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:13:25.192 [DEBUG] [Thread-194370] [transport.py] [_log()] starting thread (client mode): 0xae52dae0
2026-04-12T19:13:25.192 [DEBUG] [Thread-194370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:13:25.210 [DEBUG] [Thread-194370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:13:25.210 [INFO] [Thread-194370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] client lang: <none>
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] server lang: <none>
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] kex follows: False
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] Compression: none
2026-04-12T19:13:25.213 [DEBUG] [Thread-194370] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:13:25.229 [DEBUG] [Thread-194370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:13:25.229 [DEBUG] [Thread-194370] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:13:25.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:13:25.230 [DEBUG] [Thread-194370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:13:25.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:13:25.232 [DEBUG] [Thread-194370] [transport.py] [_log()] userauth is OK
2026-04-12T19:13:25.232 [DEBUG] [Thread-194370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:13:25.232 [DEBUG] [Thread-194370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:13:25.232 [DEBUG] [Thread-194370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:13:25.232 [DEBUG] [Thread-194370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:13:25.249 [INFO] [Thread-194370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:13:25.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:13:25.982 [DEBUG] [Thread-194370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:13:25.982 [DEBUG] [Thread-194370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:13:25.983 [DEBUG] [Thread-194370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:13:26.023 [DEBUG] [Thread-194370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:13:26.023 [DEBUG] [Thread-194370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:13:26.025 [DEBUG] [Thread-194370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:13:26.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:13:26.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:13:26.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:13:26.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:13:26.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:13:26.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:13:26.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:13:26.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:13:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:13:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.717122 -999.00  +12.60   3.86     82   +9.70 1 1 1 2 1     0    0 2.56 -10.88 ZNESW 3.9 3.9 259.8 7.2 13.6 -21.7 13.4 -20.4 13.1 -18.5 13.4 -20.6
2026-04-12T19:13:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:13:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:13:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.717122
2026-04-12T19:13:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:13:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:13:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:13:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:13:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:13:26.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:13:09', tmtdew=3.58257, humidity=78.4221, cloud=0.0, wind=8.61156, temperature=12.4987, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:12:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:13:26.051 [DEBUG] [Thread-194370] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:13:26.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:13:26.142 [DEBUG] [Thread-194373] [transport.py] [_log()] starting thread (client mode): 0xae5353f0
2026-04-12T19:13:26.142 [DEBUG] [Thread-194373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:13:26.157 [DEBUG] [Thread-194373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:13:26.157 [INFO] [Thread-194373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:13:26.164 [DEBUG] [Thread-194373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] client lang: <none>
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] server lang: <none>
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] kex follows: False
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] Compression: none
2026-04-12T19:13:26.165 [DEBUG] [Thread-194373] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:13:26.223 [DEBUG] [Thread-194373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:13:26.223 [DEBUG] [Thread-194373] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:13:26.223 [DEBUG] [Thread-194373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:13:26.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:13:26.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:13:26.280 [DEBUG] [Thread-194373] [transport.py] [_log()] userauth is OK
2026-04-12T19:13:26.280 [DEBUG] [Thread-194373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:13:26.280 [DEBUG] [Thread-194373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:13:26.280 [DEBUG] [Thread-194373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:13:26.280 [DEBUG] [Thread-194373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:13:26.296 [INFO] [Thread-194373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:13:26.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:13:26.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:13:27.166 [DEBUG] [Thread-194373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:13:27.166 [DEBUG] [Thread-194373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:13:27.214 [DEBUG] [Thread-194373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:13:27.214 [DEBUG] [Thread-194373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:13:27.224 [DEBUG] [Thread-194373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:13:27.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:13:27.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:13:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:13:27.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:13:27.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:13:27.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:13:27.261 [DEBUG] [Thread-194373] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:13:29.076 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:30.717 [DEBUG] [Thread-194375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:45.768 [DEBUG] [Thread-194376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:48.410 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:52.805 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:52.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:52.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:54.022 [DEBUG] [Thread-194377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:13:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:13:57.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:13:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:13:58.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 13, 44), 3.5241, 79.0766, 0.0, 11.9988, 12.7971, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:13:58.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:13:44
2026-04-12T19:13:59.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:13:59.168 [DEBUG] [Thread-194378] [transport.py] [_log()] starting thread (client mode): 0xae52e440
2026-04-12T19:13:59.168 [DEBUG] [Thread-194378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:13:59.189 [DEBUG] [Thread-194378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:13:59.189 [INFO] [Thread-194378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:13:59.190 [DEBUG] [Thread-194378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] client lang: <none>
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] server lang: <none>
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] kex follows: False
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] Compression: none
2026-04-12T19:13:59.191 [DEBUG] [Thread-194378] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:13:59.208 [DEBUG] [Thread-194378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:13:59.208 [DEBUG] [Thread-194378] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:13:59.209 [DEBUG] [Thread-194378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:13:59.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:13:59.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:13:59.211 [DEBUG] [Thread-194378] [transport.py] [_log()] userauth is OK
2026-04-12T19:13:59.211 [DEBUG] [Thread-194378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:13:59.211 [DEBUG] [Thread-194378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:13:59.211 [DEBUG] [Thread-194378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:13:59.212 [DEBUG] [Thread-194378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:13:59.230 [INFO] [Thread-194378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:13:59.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:14:00.020 [DEBUG] [Thread-194378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:14:00.021 [DEBUG] [Thread-194378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:14:00.021 [DEBUG] [Thread-194378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:14:00.061 [DEBUG] [Thread-194378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:14:00.062 [DEBUG] [Thread-194378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:14:00.064 [DEBUG] [Thread-194378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:14:00.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:14:00.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:14:00.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:14:00.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:14:00.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:14:00.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:14:00.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:14:00.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:14:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:14:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.717469 -999.00  +12.60   8.07     82   +9.70 1 1 1 2 1     0    0 2.67 -9.74 ZNESW 8.1 8.1 242.4 10.3 13.6 -21.6 13.5 -20.3 13.1 -18.6 13.4 -20.6
2026-04-12T19:14:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:14:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:14:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.717469
2026-04-12T19:14:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:14:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:14:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:14:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:14:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:14:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:13:44', tmtdew=3.5241, humidity=79.0766, cloud=0.0, wind=11.9988, temperature=12.7971, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:13:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:14:00.084 [DEBUG] [Thread-194378] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:14:00.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:14:00.167 [DEBUG] [Thread-194381] [transport.py] [_log()] starting thread (client mode): 0xb0f428f0
2026-04-12T19:14:00.168 [DEBUG] [Thread-194381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:14:00.184 [DEBUG] [Thread-194381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:14:00.184 [INFO] [Thread-194381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:14:00.192 [DEBUG] [Thread-194381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:14:00.192 [DEBUG] [Thread-194381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:14:00.193 [DEBUG] [Thread-194381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:14:00.193 [DEBUG] [Thread-194381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:14:00.193 [DEBUG] [Thread-194381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:14:00.193 [DEBUG] [Thread-194381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:14:00.193 [DEBUG] [Thread-194381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:14:00.193 [DEBUG] [Thread-194381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] client lang: <none>
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] server lang: <none>
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] kex follows: False
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] Compression: none
2026-04-12T19:14:00.194 [DEBUG] [Thread-194381] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:14:00.252 [DEBUG] [Thread-194381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:14:00.252 [DEBUG] [Thread-194381] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:14:00.253 [DEBUG] [Thread-194381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:14:00.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:14:00.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:14:00.313 [DEBUG] [Thread-194381] [transport.py] [_log()] userauth is OK
2026-04-12T19:14:00.314 [DEBUG] [Thread-194381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:14:00.314 [DEBUG] [Thread-194381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:14:00.314 [DEBUG] [Thread-194381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:14:00.314 [DEBUG] [Thread-194381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:14:00.332 [INFO] [Thread-194381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:14:00.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:14:00.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:14:00.804 [DEBUG] [Thread-194383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:01.193 [DEBUG] [Thread-194381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:14:01.193 [DEBUG] [Thread-194381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:14:01.241 [DEBUG] [Thread-194381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:14:01.241 [DEBUG] [Thread-194381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:14:01.249 [DEBUG] [Thread-194381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:14:01.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:14:01.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:14:01.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:14:01.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:14:01.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:14:01.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:14:01.284 [DEBUG] [Thread-194381] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:14:12.274 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:15.846 [DEBUG] [Thread-194384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:16.682 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:22.811 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:27.211 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:30.884 [DEBUG] [Thread-194385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:31.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:14:31.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:14:31.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:14:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 14, 19), 3.55316, 78.5881, 0.0, 9.2466, 12.5651, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:14:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:14:19
2026-04-12T19:14:32.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:14:33.088 [DEBUG] [Thread-194386] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T19:14:33.088 [DEBUG] [Thread-194386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:14:33.110 [DEBUG] [Thread-194386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:14:33.110 [INFO] [Thread-194386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:14:33.112 [DEBUG] [Thread-194386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] client lang: <none>
2026-04-12T19:14:33.113 [DEBUG] [Thread-194386] [transport.py] [_log()] server lang: <none>
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] kex follows: False
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] Compression: none
2026-04-12T19:14:33.114 [DEBUG] [Thread-194386] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:14:33.135 [DEBUG] [Thread-194386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:14:33.135 [DEBUG] [Thread-194386] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:14:33.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:14:33.136 [DEBUG] [Thread-194386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:14:33.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:14:33.139 [DEBUG] [Thread-194386] [transport.py] [_log()] userauth is OK
2026-04-12T19:14:33.139 [DEBUG] [Thread-194386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:14:33.140 [DEBUG] [Thread-194386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:14:33.140 [DEBUG] [Thread-194386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:14:33.140 [DEBUG] [Thread-194386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:14:33.176 [INFO] [Thread-194386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:14:33.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:14:33.967 [DEBUG] [Thread-194386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:14:33.967 [DEBUG] [Thread-194386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:14:33.968 [DEBUG] [Thread-194386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:14:34.008 [DEBUG] [Thread-194386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:14:34.008 [DEBUG] [Thread-194386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:14:34.010 [DEBUG] [Thread-194386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:14:34.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:14:34.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:14:34.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:14:34.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:14:34.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:14:34.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:14:34.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:14:34.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:14:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:14:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.717817 -999.00  +12.60   5.63     82   +9.80 1 1 1 2 1     0    0 2.61 -8.87 ZNESW 5.6 5.6 265.6 7.4 13.6 -21.6 13.4 -20.3 13.1 -18.7 13.4 -20.6
2026-04-12T19:14:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:14:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:14:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.717817
2026-04-12T19:14:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:14:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:14:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:14:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:14:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:14:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:14:19', tmtdew=3.55316, humidity=78.5881, cloud=0.0, wind=9.2466, temperature=12.5651, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:13:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:14:34.035 [DEBUG] [Thread-194386] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:14:34.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:14:34.129 [DEBUG] [Thread-194389] [transport.py] [_log()] starting thread (client mode): 0xb0f41b40
2026-04-12T19:14:34.129 [DEBUG] [Thread-194389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:14:34.144 [DEBUG] [Thread-194389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:14:34.144 [INFO] [Thread-194389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] client lang: <none>
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] server lang: <none>
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] kex follows: False
2026-04-12T19:14:34.151 [DEBUG] [Thread-194389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:14:34.152 [DEBUG] [Thread-194389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:14:34.152 [DEBUG] [Thread-194389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:14:34.152 [DEBUG] [Thread-194389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:14:34.152 [DEBUG] [Thread-194389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:14:34.152 [DEBUG] [Thread-194389] [transport.py] [_log()] Compression: none
2026-04-12T19:14:34.152 [DEBUG] [Thread-194389] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:14:34.208 [DEBUG] [Thread-194389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:14:34.208 [DEBUG] [Thread-194389] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:14:34.208 [DEBUG] [Thread-194389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:14:34.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:14:34.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:14:34.265 [DEBUG] [Thread-194389] [transport.py] [_log()] userauth is OK
2026-04-12T19:14:34.266 [DEBUG] [Thread-194389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:14:34.266 [DEBUG] [Thread-194389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:14:34.266 [DEBUG] [Thread-194389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:14:34.266 [DEBUG] [Thread-194389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:14:34.288 [INFO] [Thread-194389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:14:34.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:14:34.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:14:35.092 [DEBUG] [Thread-194389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:14:35.093 [DEBUG] [Thread-194389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:14:35.141 [DEBUG] [Thread-194389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:14:35.142 [DEBUG] [Thread-194389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:14:35.150 [DEBUG] [Thread-194389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:14:35.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:14:35.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:14:35.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:14:35.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:14:35.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:14:35.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:14:35.185 [DEBUG] [Thread-194389] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:14:45.922 [DEBUG] [Thread-194391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:53.071 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:53.073 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:14:54.091 [DEBUG] [Thread-194392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:00.976 [DEBUG] [Thread-194393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:05.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:15:05.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:15:05.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:15:06.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 14, 55), 3.54691, 79.1214, 0.0, 8.61156, 12.5653, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:15:06.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:14:55
2026-04-12T19:15:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:15:07.052 [DEBUG] [Thread-194394] [transport.py] [_log()] starting thread (client mode): 0xae519960
2026-04-12T19:15:07.053 [DEBUG] [Thread-194394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:15:07.065 [DEBUG] [Thread-194394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:15:07.065 [INFO] [Thread-194394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] client lang: <none>
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] server lang: <none>
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] kex follows: False
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:15:07.069 [DEBUG] [Thread-194394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:15:07.070 [DEBUG] [Thread-194394] [transport.py] [_log()] Compression: none
2026-04-12T19:15:07.070 [DEBUG] [Thread-194394] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:15:07.084 [DEBUG] [Thread-194394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:15:07.084 [DEBUG] [Thread-194394] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:15:07.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:15:07.085 [DEBUG] [Thread-194394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:15:07.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:15:07.087 [DEBUG] [Thread-194394] [transport.py] [_log()] userauth is OK
2026-04-12T19:15:07.087 [DEBUG] [Thread-194394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:15:07.087 [DEBUG] [Thread-194394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:15:07.088 [DEBUG] [Thread-194394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:15:07.088 [DEBUG] [Thread-194394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:15:07.122 [INFO] [Thread-194394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:15:07.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:15:08.344 [DEBUG] [Thread-194394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:15:08.344 [DEBUG] [Thread-194394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:15:08.345 [DEBUG] [Thread-194394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:15:08.385 [DEBUG] [Thread-194394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:15:08.385 [DEBUG] [Thread-194394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:15:08.389 [DEBUG] [Thread-194394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:15:08.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:15:08.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:15:08.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:15:08.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:15:08.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:15:08.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:15:08.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:15:08.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:15:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:15:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.718511 -999.00  +12.60   3.72     83   +9.80 1 1 1 2 1     0    0 2.74 -6.57 ZNESW 3.7 3.7 266.6 7.5 13.6 -21.6 13.4 -20.3 13.1 -18.6 13.4 -20.5
2026-04-12T19:15:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:15:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:15:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.718511
2026-04-12T19:15:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:15:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:15:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:15:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:15:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:15:08.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:14:55', tmtdew=3.54691, humidity=79.1214, cloud=0.0, wind=8.61156, temperature=12.5653, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:14:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:15:08.433 [DEBUG] [Thread-194394] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:15:08.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:15:08.518 [DEBUG] [Thread-194397] [transport.py] [_log()] starting thread (client mode): 0xae5b2cb0
2026-04-12T19:15:08.518 [DEBUG] [Thread-194397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:15:08.533 [DEBUG] [Thread-194397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:15:08.533 [INFO] [Thread-194397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:15:08.540 [DEBUG] [Thread-194397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:15:08.540 [DEBUG] [Thread-194397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] client lang: <none>
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] server lang: <none>
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] kex follows: False
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] Compression: none
2026-04-12T19:15:08.541 [DEBUG] [Thread-194397] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:15:08.597 [DEBUG] [Thread-194397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:15:08.598 [DEBUG] [Thread-194397] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:15:08.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:15:08.599 [DEBUG] [Thread-194397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:15:08.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:15:08.657 [DEBUG] [Thread-194397] [transport.py] [_log()] userauth is OK
2026-04-12T19:15:08.658 [DEBUG] [Thread-194397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:15:08.658 [DEBUG] [Thread-194397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:15:08.658 [DEBUG] [Thread-194397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:15:08.658 [DEBUG] [Thread-194397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:15:08.676 [INFO] [Thread-194397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:15:08.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:15:08.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:15:09.513 [DEBUG] [Thread-194397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:15:09.513 [DEBUG] [Thread-194397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:15:09.561 [DEBUG] [Thread-194397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:15:09.561 [DEBUG] [Thread-194397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:15:09.571 [DEBUG] [Thread-194397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:15:09.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:15:09.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:15:09.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:15:09.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:15:09.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:15:09.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:15:09.614 [DEBUG] [Thread-194397] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:15:16.013 [DEBUG] [Thread-194399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:31.063 [DEBUG] [Thread-194400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:31.717 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:34.785 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:39.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:15:39.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:15:39.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:15:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 15, 31), 3.53051, 79.2043, 0.0, 10.0404, 12.5321, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:15:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:15:31
2026-04-12T19:15:41.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:15:41.443 [DEBUG] [Thread-194401] [transport.py] [_log()] starting thread (client mode): 0xae5361d0
2026-04-12T19:15:41.443 [DEBUG] [Thread-194401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:15:41.463 [DEBUG] [Thread-194401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:15:41.463 [INFO] [Thread-194401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:15:41.464 [DEBUG] [Thread-194401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] client lang: <none>
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] server lang: <none>
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] kex follows: False
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] Compression: none
2026-04-12T19:15:41.465 [DEBUG] [Thread-194401] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:15:41.473 [DEBUG] [Thread-194401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:15:41.474 [DEBUG] [Thread-194401] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:15:41.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:15:41.474 [DEBUG] [Thread-194401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:15:41.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:15:41.476 [DEBUG] [Thread-194401] [transport.py] [_log()] userauth is OK
2026-04-12T19:15:41.476 [DEBUG] [Thread-194401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:15:41.476 [DEBUG] [Thread-194401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:15:41.476 [DEBUG] [Thread-194401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:15:41.476 [DEBUG] [Thread-194401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:15:41.493 [INFO] [Thread-194401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:15:41.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:15:42.283 [DEBUG] [Thread-194401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:15:42.283 [DEBUG] [Thread-194401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:15:42.283 [DEBUG] [Thread-194401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:15:42.324 [DEBUG] [Thread-194401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:15:42.324 [DEBUG] [Thread-194401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:15:42.327 [DEBUG] [Thread-194401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:15:42.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:15:42.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:15:42.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:15:42.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:15:42.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:15:42.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:15:42.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:15:42.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:15:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:15:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.718858 -999.00  +12.60   5.69     83   +9.80 1 1 1 2 1     0    0 2.79 -5.44 ZNESW 5.7 5.7 260.8 9.7 13.6 -21.5 13.4 -20.3 13.1 -18.5 13.4 -20.5
2026-04-12T19:15:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:15:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:15:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.718858
2026-04-12T19:15:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:15:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:15:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:15:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:15:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:15:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:15:31', tmtdew=3.53051, humidity=79.2043, cloud=0.0, wind=10.0404, temperature=12.5321, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T05:28:29', seeing=1.36, atlas_timestamp='2026-04-12T17:15:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:15:42.350 [DEBUG] [Thread-194401] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:15:42.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:15:42.443 [DEBUG] [Thread-194404] [transport.py] [_log()] starting thread (client mode): 0xae535a20
2026-04-12T19:15:42.443 [DEBUG] [Thread-194404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:15:42.462 [DEBUG] [Thread-194404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:15:42.462 [INFO] [Thread-194404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:15:42.470 [DEBUG] [Thread-194404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:15:42.470 [DEBUG] [Thread-194404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:15:42.470 [DEBUG] [Thread-194404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:15:42.470 [DEBUG] [Thread-194404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:42.470 [DEBUG] [Thread-194404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:15:42.470 [DEBUG] [Thread-194404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] client lang: <none>
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] server lang: <none>
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] kex follows: False
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:15:42.471 [DEBUG] [Thread-194404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:15:42.472 [DEBUG] [Thread-194404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:15:42.472 [DEBUG] [Thread-194404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:15:42.472 [DEBUG] [Thread-194404] [transport.py] [_log()] Compression: none
2026-04-12T19:15:42.472 [DEBUG] [Thread-194404] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:15:42.528 [DEBUG] [Thread-194404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:15:42.529 [DEBUG] [Thread-194404] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:15:42.529 [DEBUG] [Thread-194404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:15:42.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:15:42.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:15:42.585 [DEBUG] [Thread-194404] [transport.py] [_log()] userauth is OK
2026-04-12T19:15:42.585 [DEBUG] [Thread-194404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:15:42.585 [DEBUG] [Thread-194404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:15:42.585 [DEBUG] [Thread-194404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:15:42.585 [DEBUG] [Thread-194404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:15:42.604 [INFO] [Thread-194404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:15:42.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:15:42.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:15:43.452 [DEBUG] [Thread-194404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:15:43.452 [DEBUG] [Thread-194404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:15:43.500 [DEBUG] [Thread-194404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:15:43.500 [DEBUG] [Thread-194404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:15:43.512 [DEBUG] [Thread-194404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:15:43.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:15:43.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:15:43.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:15:43.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:15:43.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:15:43.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:15:43.546 [DEBUG] [Thread-194404] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:15:46.097 [DEBUG] [Thread-194406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:53.279 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:53.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:15:54.148 [DEBUG] [Thread-194407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:16:01.147 [DEBUG] [Thread-194408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:16:13.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:16:13.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:16:13.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:16:14.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 16, 6), 3.53272, 79.1878, 0.0, 9.89928, 12.4991, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:16:14.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:16:06
2026-04-12T19:16:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:16:15.375 [DEBUG] [Thread-194409] [transport.py] [_log()] starting thread (client mode): 0xae5b0ac0
2026-04-12T19:16:15.376 [DEBUG] [Thread-194409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:16:15.395 [DEBUG] [Thread-194409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:16:15.395 [INFO] [Thread-194409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] client lang: <none>
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] server lang: <none>
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] kex follows: False
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] Compression: none
2026-04-12T19:16:15.398 [DEBUG] [Thread-194409] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:16:15.413 [DEBUG] [Thread-194409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:16:15.413 [DEBUG] [Thread-194409] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:16:15.413 [DEBUG] [Thread-194409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:16:15.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:16:15.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:16:15.414 [DEBUG] [Thread-194409] [transport.py] [_log()] userauth is OK
2026-04-12T19:16:15.414 [DEBUG] [Thread-194409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:16:15.414 [DEBUG] [Thread-194409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:16:15.414 [DEBUG] [Thread-194409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:16:15.414 [DEBUG] [Thread-194409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:16:15.429 [INFO] [Thread-194409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:16:15.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:16:16.186 [DEBUG] [Thread-194411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:16:16.194 [DEBUG] [Thread-194409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:16:16.194 [DEBUG] [Thread-194409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:16:16.195 [DEBUG] [Thread-194409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:16:16.235 [DEBUG] [Thread-194409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:16:16.235 [DEBUG] [Thread-194409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:16:16.239 [DEBUG] [Thread-194409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:16:16.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:16:16.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:16:16.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:16:16.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:16:16.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:16:16.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:16:16.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:16:16.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:16:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:16:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.719206 -999.00  +12.60   5.53     83   +9.80 1 1 1 2 1     0    0 2.71 -5.04 ZNESW 5.5 5.5 249.6 8.5 13.5 -21.6 13.4 -20.1 13.1 -18.7 13.3 -20.4
2026-04-12T19:16:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:16:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:16:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.719206
2026-04-12T19:16:16.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:16:16.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:16:16.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:16:16.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:16:16.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:16:16.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:16:06', tmtdew=3.53272, humidity=79.1878, cloud=0.0, wind=9.89928, temperature=12.4991, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:16:06', seeing=0.8, atlas_timestamp='2026-04-12T17:15:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060750000000000526, -0.019750000000000156, -0.018749999999998934, -0.027499999999999858, 0.009000000000000341, -0.020749999999999602, -0.04100000000000037, -0.09774999999999956, -0.03049999999999997, -0.07699999999999996, -0.11224999999999952, -0.03500000000000014, 0.11800000000000033, -0.008750000000000924, -0.0005000000000006111, -0.009000000000000341, 0.034250000000000114, 0.005499999999999616, -0.04600000000000115, 0.01624999999999943, 0.03500000000000014, 0.02374999999999794, -0.0467499999999994, 0.03575000000000017, 0.04399999999999871, 0.05150000000000077, -0.029749999999999943, 0.01950000000000074, 0.1769999999999996, 0.11850000000000094, 0.11300000000000132, 0.006000000000000227, 0.043250000000000455], zp_timestamp='2026-04-12T17:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:16:16.268 [DEBUG] [Thread-194409] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:16:16.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:16:16.363 [DEBUG] [Thread-194413] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T19:16:16.363 [DEBUG] [Thread-194413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:16:16.378 [DEBUG] [Thread-194413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:16:16.378 [INFO] [Thread-194413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] client lang: <none>
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] server lang: <none>
2026-04-12T19:16:16.386 [DEBUG] [Thread-194413] [transport.py] [_log()] kex follows: False
2026-04-12T19:16:16.387 [DEBUG] [Thread-194413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:16:16.387 [DEBUG] [Thread-194413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:16:16.387 [DEBUG] [Thread-194413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:16:16.387 [DEBUG] [Thread-194413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:16:16.387 [DEBUG] [Thread-194413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:16:16.387 [DEBUG] [Thread-194413] [transport.py] [_log()] Compression: none
2026-04-12T19:16:16.387 [DEBUG] [Thread-194413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:16:16.446 [DEBUG] [Thread-194413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:16:16.446 [DEBUG] [Thread-194413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:16:16.447 [DEBUG] [Thread-194413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:16:16.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:16:16.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:16:16.502 [DEBUG] [Thread-194413] [transport.py] [_log()] userauth is OK
2026-04-12T19:16:16.502 [DEBUG] [Thread-194413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:16:16.502 [DEBUG] [Thread-194413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:16:16.502 [DEBUG] [Thread-194413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:16:16.503 [DEBUG] [Thread-194413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:16:16.521 [INFO] [Thread-194413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:16:16.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:16:16.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:16:17.359 [DEBUG] [Thread-194413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:16:17.359 [DEBUG] [Thread-194413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:16:17.407 [DEBUG] [Thread-194413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:16:17.407 [DEBUG] [Thread-194413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:16:17.416 [DEBUG] [Thread-194413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:16:17.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:16:17.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:16:17.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:16:17.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:16:17.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:16:17.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:16:17.453 [DEBUG] [Thread-194413] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:16:31.224 [DEBUG] [Thread-194415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:16:46.325 [DEBUG] [Thread-194416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:16:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:16:47.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:16:47.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:16:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 16, 6), 3.53272, 79.1878, 0.0, 9.89928, 12.4991, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:16:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:16:06
2026-04-12T19:16:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:16:49.304 [DEBUG] [Thread-194417] [transport.py] [_log()] starting thread (client mode): 0xae5e7c70
2026-04-12T19:16:49.304 [DEBUG] [Thread-194417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:16:49.324 [DEBUG] [Thread-194417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:16:49.324 [INFO] [Thread-194417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] client lang: <none>
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] server lang: <none>
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] kex follows: False
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] Compression: none
2026-04-12T19:16:49.327 [DEBUG] [Thread-194417] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:16:49.342 [DEBUG] [Thread-194417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:16:49.342 [DEBUG] [Thread-194417] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:16:49.342 [DEBUG] [Thread-194417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:16:49.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:16:49.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:16:49.344 [DEBUG] [Thread-194417] [transport.py] [_log()] userauth is OK
2026-04-12T19:16:49.344 [DEBUG] [Thread-194417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:16:49.344 [DEBUG] [Thread-194417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:16:49.344 [DEBUG] [Thread-194417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:16:49.344 [DEBUG] [Thread-194417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:16:49.360 [INFO] [Thread-194417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:16:49.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:16:50.132 [DEBUG] [Thread-194417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:16:50.132 [DEBUG] [Thread-194417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:16:50.132 [DEBUG] [Thread-194417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:16:50.173 [DEBUG] [Thread-194417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:16:50.173 [DEBUG] [Thread-194417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:16:50.175 [DEBUG] [Thread-194417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:16:50.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:16:50.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:16:50.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:16:50.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:16:50.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:16:50.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:16:50.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:16:50.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:16:50.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:16:50.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.719553 -999.00  +12.60   6.01     83   +9.80 1 1 1 2 1     0    0 2.75 -4.51 ZNESW 6.0 6.0 257.0 10.6 13.5 -21.5 13.4 -20.0 13.1 -18.7 13.3 -20.3
2026-04-12T19:16:50.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:16:50.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:16:50.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.719553
2026-04-12T19:16:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:16:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:16:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:16:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:16:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:16:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:16:06', tmtdew=3.53272, humidity=79.1878, cloud=0.0, wind=9.89928, temperature=12.4991, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:16:42', seeing=0.67, atlas_timestamp='2026-04-12T17:16:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:16:50.189 [DEBUG] [Thread-194417] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:16:50.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:16:50.271 [DEBUG] [Thread-194420] [transport.py] [_log()] starting thread (client mode): 0xae5e72e0
2026-04-12T19:16:50.271 [DEBUG] [Thread-194420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:16:50.285 [DEBUG] [Thread-194420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:16:50.285 [INFO] [Thread-194420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:16:50.292 [DEBUG] [Thread-194420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] client lang: <none>
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] server lang: <none>
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] kex follows: False
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] Compression: none
2026-04-12T19:16:50.293 [DEBUG] [Thread-194420] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:16:50.349 [DEBUG] [Thread-194420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:16:50.349 [DEBUG] [Thread-194420] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:16:50.349 [DEBUG] [Thread-194420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:16:50.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:16:50.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:16:50.405 [DEBUG] [Thread-194420] [transport.py] [_log()] userauth is OK
2026-04-12T19:16:50.405 [DEBUG] [Thread-194420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:16:50.405 [DEBUG] [Thread-194420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:16:50.405 [DEBUG] [Thread-194420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:16:50.405 [DEBUG] [Thread-194420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:16:50.419 [INFO] [Thread-194420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:16:50.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:16:50.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:16:51.226 [DEBUG] [Thread-194420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:16:51.226 [DEBUG] [Thread-194420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:16:51.273 [DEBUG] [Thread-194420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:16:51.273 [DEBUG] [Thread-194420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:16:51.282 [DEBUG] [Thread-194420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:16:51.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:16:51.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:16:51.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:16:51.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:16:51.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:16:51.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:16:51.314 [DEBUG] [Thread-194420] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:16:53.486 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:16:53.487 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:16:54.200 [DEBUG] [Thread-194422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:01.350 [DEBUG] [Thread-194423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:16.385 [DEBUG] [Thread-194424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:17:21.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:17:21.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:17:22.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 16, 41), 3.47252, 79.3425, 0.0, 12.281, 12.7313, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:17:22.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:16:41
2026-04-12T19:17:23.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:17:23.152 [DEBUG] [Thread-194425] [transport.py] [_log()] starting thread (client mode): 0xae5e68c0
2026-04-12T19:17:23.152 [DEBUG] [Thread-194425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:17:23.171 [DEBUG] [Thread-194425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:17:23.171 [INFO] [Thread-194425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] client lang: <none>
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] server lang: <none>
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] kex follows: False
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] Compression: none
2026-04-12T19:17:23.174 [DEBUG] [Thread-194425] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:17:23.188 [DEBUG] [Thread-194425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:17:23.188 [DEBUG] [Thread-194425] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:17:23.188 [DEBUG] [Thread-194425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:17:23.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:17:23.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:17:23.189 [DEBUG] [Thread-194425] [transport.py] [_log()] userauth is OK
2026-04-12T19:17:23.189 [DEBUG] [Thread-194425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:17:23.189 [DEBUG] [Thread-194425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:17:23.189 [DEBUG] [Thread-194425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:17:23.189 [DEBUG] [Thread-194425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:17:23.204 [INFO] [Thread-194425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:17:23.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:17:23.989 [DEBUG] [Thread-194425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:17:23.989 [DEBUG] [Thread-194425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:17:23.989 [DEBUG] [Thread-194425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:17:24.031 [DEBUG] [Thread-194425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:17:24.031 [DEBUG] [Thread-194425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:17:24.033 [DEBUG] [Thread-194425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:17:24.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:17:24.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:17:24.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:17:24.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:17:24.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:17:24.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:17:24.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:17:24.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:17:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:17:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.719900 -999.00  +12.60   7.85     83   +9.80 1 1 1 2 1     0    0 2.85 -4.05 ZNESW 7.8 7.8 270.0 8.8 13.6 -21.2 13.4 -20.0 13.1 -18.5 13.3 -20.5
2026-04-12T19:17:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:17:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:17:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.719900
2026-04-12T19:17:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:17:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:17:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:17:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:17:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:17:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:16:41', tmtdew=3.47252, humidity=79.3425, cloud=0.0, wind=12.281, temperature=12.7313, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:17:17', seeing=0.78, atlas_timestamp='2026-04-12T17:16:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:17:24.051 [DEBUG] [Thread-194425] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:17:24.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:17:24.134 [DEBUG] [Thread-194428] [transport.py] [_log()] starting thread (client mode): 0xae5361d0
2026-04-12T19:17:24.134 [DEBUG] [Thread-194428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:17:24.149 [DEBUG] [Thread-194428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:17:24.149 [INFO] [Thread-194428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] client lang: <none>
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] server lang: <none>
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] kex follows: False
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] Compression: none
2026-04-12T19:17:24.157 [DEBUG] [Thread-194428] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:17:24.213 [DEBUG] [Thread-194428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:17:24.213 [DEBUG] [Thread-194428] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:17:24.213 [DEBUG] [Thread-194428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:17:24.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:17:24.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:17:24.270 [DEBUG] [Thread-194428] [transport.py] [_log()] userauth is OK
2026-04-12T19:17:24.270 [DEBUG] [Thread-194428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:17:24.270 [DEBUG] [Thread-194428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:17:24.270 [DEBUG] [Thread-194428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:17:24.270 [DEBUG] [Thread-194428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:17:24.284 [INFO] [Thread-194428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:17:24.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:17:24.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:17:25.139 [DEBUG] [Thread-194428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:17:25.139 [DEBUG] [Thread-194428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:17:25.187 [DEBUG] [Thread-194428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:17:25.187 [DEBUG] [Thread-194428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:17:25.196 [DEBUG] [Thread-194428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:17:25.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:17:25.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:17:25.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:17:25.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:17:25.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:17:25.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:17:25.228 [DEBUG] [Thread-194428] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:17:31.411 [DEBUG] [Thread-194430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:46.443 [DEBUG] [Thread-194431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:53.686 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:53.687 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:54.373 [DEBUG] [Thread-194432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:17:55.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:17:55.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:17:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:17:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 17, 17), 3.53401, 79.1879, 0.0, 9.37008, 12.5489, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:17:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:17:17
2026-04-12T19:17:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:17:57.120 [DEBUG] [Thread-194433] [transport.py] [_log()] starting thread (client mode): 0xb0f43910
2026-04-12T19:17:57.120 [DEBUG] [Thread-194433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:17:57.140 [DEBUG] [Thread-194433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:17:57.140 [INFO] [Thread-194433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] client lang: <none>
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] server lang: <none>
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] kex follows: False
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] Compression: none
2026-04-12T19:17:57.143 [DEBUG] [Thread-194433] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:17:57.159 [DEBUG] [Thread-194433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:17:57.159 [DEBUG] [Thread-194433] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:17:57.159 [DEBUG] [Thread-194433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:17:57.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:17:57.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:17:57.160 [DEBUG] [Thread-194433] [transport.py] [_log()] userauth is OK
2026-04-12T19:17:57.160 [DEBUG] [Thread-194433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:17:57.160 [DEBUG] [Thread-194433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:17:57.160 [DEBUG] [Thread-194433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:17:57.160 [DEBUG] [Thread-194433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:17:57.170 [INFO] [Thread-194433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:17:57.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:17:57.976 [DEBUG] [Thread-194433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:17:57.976 [DEBUG] [Thread-194433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:17:57.976 [DEBUG] [Thread-194433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:17:58.019 [DEBUG] [Thread-194433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:17:58.019 [DEBUG] [Thread-194433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:17:58.021 [DEBUG] [Thread-194433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:17:58.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:17:58.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:17:58.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:17:58.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:17:58.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:17:58.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:17:58.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:17:58.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:17:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:17:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.720247 -999.00  +12.50   5.53     83   +9.70 1 1 1 2 1     0    0 2.80 -3.33 ZNESW 5.5 5.5 250.2 10.8 13.5 -21.3 13.4 -19.8 13.1 -18.6 13.3 -20.4
2026-04-12T19:17:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:17:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:17:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.720247
2026-04-12T19:17:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:17:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:17:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:17:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:17:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:17:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:17:17', tmtdew=3.53401, humidity=79.1879, cloud=0.0, wind=9.37008, temperature=12.5489, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:17:53', seeing=0.63, atlas_timestamp='2026-04-12T17:17:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:17:58.045 [DEBUG] [Thread-194433] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:17:58.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:17:58.151 [DEBUG] [Thread-194436] [transport.py] [_log()] starting thread (client mode): 0xae5e4ee0
2026-04-12T19:17:58.152 [DEBUG] [Thread-194436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:17:58.165 [DEBUG] [Thread-194436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:17:58.165 [INFO] [Thread-194436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] client lang: <none>
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] server lang: <none>
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] kex follows: False
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] Compression: none
2026-04-12T19:17:58.173 [DEBUG] [Thread-194436] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:17:58.229 [DEBUG] [Thread-194436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:17:58.229 [DEBUG] [Thread-194436] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:17:58.229 [DEBUG] [Thread-194436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:17:58.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:17:58.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:17:58.287 [DEBUG] [Thread-194436] [transport.py] [_log()] userauth is OK
2026-04-12T19:17:58.287 [DEBUG] [Thread-194436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:17:58.287 [DEBUG] [Thread-194436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:17:58.287 [DEBUG] [Thread-194436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:17:58.287 [DEBUG] [Thread-194436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:17:58.302 [INFO] [Thread-194436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:17:58.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:17:58.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:17:59.159 [DEBUG] [Thread-194436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:17:59.159 [DEBUG] [Thread-194436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:17:59.210 [DEBUG] [Thread-194436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:17:59.211 [DEBUG] [Thread-194436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:17:59.222 [DEBUG] [Thread-194436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:17:59.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:17:59.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:17:59.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:17:59.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:17:59.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:17:59.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:17:59.265 [DEBUG] [Thread-194436] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:18:01.471 [DEBUG] [Thread-194438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:18:16.553 [DEBUG] [Thread-194439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:18:29.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:18:29.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:18:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:18:30.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 17, 52), 3.46092, 79.4091, 0.0, 10.3759, 12.7647, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:18:30.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:17:52
2026-04-12T19:18:30.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:18:31.119 [DEBUG] [Thread-194440] [transport.py] [_log()] starting thread (client mode): 0xae5e41c0
2026-04-12T19:18:31.119 [DEBUG] [Thread-194440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:18:31.139 [DEBUG] [Thread-194440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:18:31.139 [INFO] [Thread-194440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] client lang: <none>
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] server lang: <none>
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] kex follows: False
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] Compression: none
2026-04-12T19:18:31.142 [DEBUG] [Thread-194440] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:18:31.161 [DEBUG] [Thread-194440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:18:31.161 [DEBUG] [Thread-194440] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:18:31.161 [DEBUG] [Thread-194440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:18:31.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:18:31.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:18:31.162 [DEBUG] [Thread-194440] [transport.py] [_log()] userauth is OK
2026-04-12T19:18:31.162 [DEBUG] [Thread-194440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:18:31.162 [DEBUG] [Thread-194440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:18:31.162 [DEBUG] [Thread-194440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:18:31.162 [DEBUG] [Thread-194440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:18:31.178 [INFO] [Thread-194440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:18:31.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:18:31.579 [DEBUG] [Thread-194442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:18:31.810 [DEBUG] [Thread-194440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:18:31.810 [DEBUG] [Thread-194440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:18:31.811 [DEBUG] [Thread-194440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:18:31.852 [DEBUG] [Thread-194440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:18:31.852 [DEBUG] [Thread-194440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:18:31.854 [DEBUG] [Thread-194440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:18:31.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:18:31.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:18:31.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:18:31.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:18:31.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:18:31.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:18:31.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:18:31.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:18:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:18:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.720942 -999.00  +12.50   8.58     83   +9.80 1 1 1 2 1     0    0 2.72 -3.98 ZNESW 8.6 8.6 256.4 9.4 13.5 -21.1 13.4 -19.7 13.1 -18.5 13.3 -20.3
2026-04-12T19:18:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:18:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:18:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.720942
2026-04-12T19:18:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:18:31.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:18:31.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:18:31.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:18:31.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:18:31.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:17:52', tmtdew=3.46092, humidity=79.4091, cloud=0.0, wind=10.3759, temperature=12.7647, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:18:28', seeing=0.71, atlas_timestamp='2026-04-12T17:18:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:18:31.880 [DEBUG] [Thread-194440] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:18:31.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:18:31.963 [DEBUG] [Thread-194444] [transport.py] [_log()] starting thread (client mode): 0xae5e5870
2026-04-12T19:18:31.964 [DEBUG] [Thread-194444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:18:31.978 [DEBUG] [Thread-194444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:18:31.978 [INFO] [Thread-194444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] client lang: <none>
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] server lang: <none>
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] kex follows: False
2026-04-12T19:18:31.987 [DEBUG] [Thread-194444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:18:31.988 [DEBUG] [Thread-194444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:18:31.988 [DEBUG] [Thread-194444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:18:31.988 [DEBUG] [Thread-194444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:18:31.988 [DEBUG] [Thread-194444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:18:31.988 [DEBUG] [Thread-194444] [transport.py] [_log()] Compression: none
2026-04-12T19:18:31.988 [DEBUG] [Thread-194444] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:18:32.044 [DEBUG] [Thread-194444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:18:32.045 [DEBUG] [Thread-194444] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:18:32.045 [DEBUG] [Thread-194444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:18:32.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:18:32.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:18:32.102 [DEBUG] [Thread-194444] [transport.py] [_log()] userauth is OK
2026-04-12T19:18:32.102 [DEBUG] [Thread-194444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:18:32.102 [DEBUG] [Thread-194444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:18:32.102 [DEBUG] [Thread-194444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:18:32.102 [DEBUG] [Thread-194444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:18:32.116 [INFO] [Thread-194444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:18:32.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:18:32.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:18:32.936 [DEBUG] [Thread-194444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:18:32.936 [DEBUG] [Thread-194444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:18:32.983 [DEBUG] [Thread-194444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:18:32.983 [DEBUG] [Thread-194444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:18:32.991 [DEBUG] [Thread-194444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:18:32.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:18:33.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:18:33.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:18:33.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:18:33.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:18:33.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:18:33.024 [DEBUG] [Thread-194444] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:18:46.609 [DEBUG] [Thread-194446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:18:53.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:18:53.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:18:54.773 [DEBUG] [Thread-194447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:19:01.676 [DEBUG] [Thread-194448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:19:03.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:19:03.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:19:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:19:04.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 18, 28), 3.47029, 79.2543, 0.0, 9.35244, 12.4492, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:19:04.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:18:28
2026-04-12T19:19:04.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:19:04.974 [DEBUG] [Thread-194449] [transport.py] [_log()] starting thread (client mode): 0xae5a5fc0
2026-04-12T19:19:04.974 [DEBUG] [Thread-194449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:19:04.992 [DEBUG] [Thread-194449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:19:04.992 [INFO] [Thread-194449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:19:05.003 [DEBUG] [Thread-194449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] client lang: <none>
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] server lang: <none>
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] kex follows: False
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:19:05.004 [DEBUG] [Thread-194449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:19:05.023 [DEBUG] [Thread-194449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:19:05.023 [DEBUG] [Thread-194449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:19:05.023 [DEBUG] [Thread-194449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:19:05.023 [DEBUG] [Thread-194449] [transport.py] [_log()] Compression: none
2026-04-12T19:19:05.023 [DEBUG] [Thread-194449] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:19:05.104 [DEBUG] [Thread-194449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:19:05.105 [DEBUG] [Thread-194449] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:19:05.106 [DEBUG] [Thread-194449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:19:05.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:19:05.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:19:05.110 [DEBUG] [Thread-194449] [transport.py] [_log()] userauth is OK
2026-04-12T19:19:05.110 [DEBUG] [Thread-194449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:19:05.110 [DEBUG] [Thread-194449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:19:05.110 [DEBUG] [Thread-194449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:19:05.110 [DEBUG] [Thread-194449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:19:05.132 [INFO] [Thread-194449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:19:05.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:19:05.774 [DEBUG] [Thread-194449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:19:05.774 [DEBUG] [Thread-194449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:19:05.774 [DEBUG] [Thread-194449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:19:05.815 [DEBUG] [Thread-194449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:19:05.815 [DEBUG] [Thread-194449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:19:05.818 [DEBUG] [Thread-194449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:19:05.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:19:05.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:19:05.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:19:05.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:19:05.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:19:05.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:19:05.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:19:05.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:19:05.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:19:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.721289 -999.00  +12.50   8.02     83   +9.80 1 1 1 2 1     0    0 2.74 -4.31 ZNESW 8.0 8.0 249.2 10.2 13.5 -21.1 13.4 -19.7 13.1 -18.4 13.4 -20.5
2026-04-12T19:19:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:19:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:19:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.721289
2026-04-12T19:19:05.852 [DEBUG] [Thread-194449] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:19:05.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:19:05.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:19:05.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:19:05.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:19:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:19:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:18:28', tmtdew=3.47029, humidity=79.2543, cloud=0.0, wind=9.35244, temperature=12.4492, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:18:28', seeing=0.71, atlas_timestamp='2026-04-12T17:18:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:19:05.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:19:05.967 [DEBUG] [Thread-194452] [transport.py] [_log()] starting thread (client mode): 0xae509f90
2026-04-12T19:19:05.967 [DEBUG] [Thread-194452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:19:05.983 [DEBUG] [Thread-194452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:19:05.983 [INFO] [Thread-194452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:19:05.990 [DEBUG] [Thread-194452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:19:05.990 [DEBUG] [Thread-194452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] client lang: <none>
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] server lang: <none>
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] kex follows: False
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] Compression: none
2026-04-12T19:19:05.991 [DEBUG] [Thread-194452] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:19:06.050 [DEBUG] [Thread-194452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:19:06.050 [DEBUG] [Thread-194452] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:19:06.051 [DEBUG] [Thread-194452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:19:06.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:19:06.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:19:06.106 [DEBUG] [Thread-194452] [transport.py] [_log()] userauth is OK
2026-04-12T19:19:06.106 [DEBUG] [Thread-194452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:19:06.106 [DEBUG] [Thread-194452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:19:06.106 [DEBUG] [Thread-194452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:19:06.106 [DEBUG] [Thread-194452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:19:06.121 [INFO] [Thread-194452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:19:06.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:19:06.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:19:06.965 [DEBUG] [Thread-194452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:19:06.965 [DEBUG] [Thread-194452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:19:07.013 [DEBUG] [Thread-194452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:19:07.014 [DEBUG] [Thread-194452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:19:07.022 [DEBUG] [Thread-194452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:19:07.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:19:07.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:19:07.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:19:07.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:19:07.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:19:07.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:19:07.056 [DEBUG] [Thread-194452] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:19:16.723 [DEBUG] [Thread-194454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:19:31.775 [DEBUG] [Thread-194455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:19:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:19:37.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:19:37.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:19:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 19, 3), 3.46058, 79.304, 0.0, 8.77032, 12.4326, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:19:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:19:03
2026-04-12T19:19:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:19:38.915 [DEBUG] [Thread-194456] [transport.py] [_log()] starting thread (client mode): 0xae5e7700
2026-04-12T19:19:38.915 [DEBUG] [Thread-194456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:19:38.933 [DEBUG] [Thread-194456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:19:38.933 [INFO] [Thread-194456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:38.937 [DEBUG] [Thread-194456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] client lang: <none>
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] server lang: <none>
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] kex follows: False
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] Compression: none
2026-04-12T19:19:38.938 [DEBUG] [Thread-194456] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:19:38.962 [DEBUG] [Thread-194456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:19:38.964 [DEBUG] [Thread-194456] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:19:38.965 [DEBUG] [Thread-194456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:19:38.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:19:38.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:19:38.968 [DEBUG] [Thread-194456] [transport.py] [_log()] userauth is OK
2026-04-12T19:19:38.968 [DEBUG] [Thread-194456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:19:38.968 [DEBUG] [Thread-194456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:19:38.969 [DEBUG] [Thread-194456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:19:38.969 [DEBUG] [Thread-194456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:19:39.006 [INFO] [Thread-194456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:19:39.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:19:39.633 [DEBUG] [Thread-194456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:19:39.633 [DEBUG] [Thread-194456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:19:39.634 [DEBUG] [Thread-194456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:19:39.674 [DEBUG] [Thread-194456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:19:39.674 [DEBUG] [Thread-194456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:19:39.677 [DEBUG] [Thread-194456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:19:39.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:19:39.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:19:39.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:19:39.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:19:39.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:19:39.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:19:39.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:19:39.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:19:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:19:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.721636 -999.00  +12.50   6.26     83   +9.80 1 1 1 2 1     0    0 2.72 -4.45 ZNESW 6.3 6.3 255.7 8.8 13.5 -21.1 13.4 -19.4 13.2 -18.5 13.3 -20.3
2026-04-12T19:19:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:19:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:19:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.721636
2026-04-12T19:19:39.712 [DEBUG] [Thread-194456] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:19:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:19:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:19:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:19:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:19:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:19:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:19:03', tmtdew=3.46058, humidity=79.304, cloud=0.0, wind=8.77032, temperature=12.4326, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:19:03', seeing=0.91, atlas_timestamp='2026-04-12T17:19:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:19:39.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:19:39.833 [DEBUG] [Thread-194459] [transport.py] [_log()] starting thread (client mode): 0xae5e5c90
2026-04-12T19:19:39.834 [DEBUG] [Thread-194459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:19:39.847 [DEBUG] [Thread-194459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:19:39.847 [INFO] [Thread-194459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:19:39.855 [DEBUG] [Thread-194459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:19:39.855 [DEBUG] [Thread-194459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:19:39.855 [DEBUG] [Thread-194459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:19:39.855 [DEBUG] [Thread-194459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:39.855 [DEBUG] [Thread-194459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:19:39.856 [DEBUG] [Thread-194459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:39.856 [DEBUG] [Thread-194459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:19:39.856 [DEBUG] [Thread-194459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:19:39.856 [DEBUG] [Thread-194459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:19:39.856 [DEBUG] [Thread-194459] [transport.py] [_log()] client lang: <none>
2026-04-12T19:19:39.856 [DEBUG] [Thread-194459] [transport.py] [_log()] server lang: <none>
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] kex follows: False
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] Compression: none
2026-04-12T19:19:39.857 [DEBUG] [Thread-194459] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:19:39.914 [DEBUG] [Thread-194459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:19:39.915 [DEBUG] [Thread-194459] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:19:39.915 [DEBUG] [Thread-194459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:19:39.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:19:39.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:19:39.970 [DEBUG] [Thread-194459] [transport.py] [_log()] userauth is OK
2026-04-12T19:19:39.970 [DEBUG] [Thread-194459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:19:39.970 [DEBUG] [Thread-194459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:19:39.970 [DEBUG] [Thread-194459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:19:39.970 [DEBUG] [Thread-194459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:19:39.984 [INFO] [Thread-194459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:19:39.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:19:39.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:19:40.803 [DEBUG] [Thread-194459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:19:40.803 [DEBUG] [Thread-194459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:19:40.850 [DEBUG] [Thread-194459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:19:40.850 [DEBUG] [Thread-194459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:19:40.858 [DEBUG] [Thread-194459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:19:40.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:19:40.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:19:40.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:19:40.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:19:40.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:19:40.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:19:40.890 [DEBUG] [Thread-194459] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:19:46.804 [DEBUG] [Thread-194461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:19:54.099 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:19:54.100 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:19:55.217 [DEBUG] [Thread-194462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:20:01.850 [DEBUG] [Thread-194463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:20:10.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:20:10.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:20:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:20:12.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 19, 39), 3.36183, 79.9404, 0.0, 9.07056, 12.7653, 0, 0, 0, 2, 0, 0),)
2026-04-12T19:20:12.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:19:39
2026-04-12T19:20:12.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:20:12.768 [DEBUG] [Thread-194464] [transport.py] [_log()] starting thread (client mode): 0xae508cd0
2026-04-12T19:20:12.768 [DEBUG] [Thread-194464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:20:12.784 [DEBUG] [Thread-194464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:20:12.784 [INFO] [Thread-194464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] client lang: <none>
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] server lang: <none>
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] kex follows: False
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:20:12.787 [DEBUG] [Thread-194464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:20:12.788 [DEBUG] [Thread-194464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:20:12.788 [DEBUG] [Thread-194464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:20:12.788 [DEBUG] [Thread-194464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:20:12.788 [DEBUG] [Thread-194464] [transport.py] [_log()] Compression: none
2026-04-12T19:20:12.788 [DEBUG] [Thread-194464] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:20:12.807 [DEBUG] [Thread-194464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:20:12.808 [DEBUG] [Thread-194464] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:20:12.808 [DEBUG] [Thread-194464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:20:12.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:20:12.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:20:12.810 [DEBUG] [Thread-194464] [transport.py] [_log()] userauth is OK
2026-04-12T19:20:12.811 [DEBUG] [Thread-194464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:20:12.811 [DEBUG] [Thread-194464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:20:12.811 [DEBUG] [Thread-194464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:20:12.811 [DEBUG] [Thread-194464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:20:12.834 [INFO] [Thread-194464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:20:12.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:20:13.662 [DEBUG] [Thread-194464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:20:13.662 [DEBUG] [Thread-194464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:20:13.662 [DEBUG] [Thread-194464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:20:13.703 [DEBUG] [Thread-194464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:20:13.703 [DEBUG] [Thread-194464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:20:13.706 [DEBUG] [Thread-194464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:20:13.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:20:13.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:20:13.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:20:13.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:20:13.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:20:13.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:20:13.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:20:13.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:20:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:20:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.721984 -999.00  +12.50   7.42     83   +9.80 1 1 1 2 1     0    0 2.69 -4.86 ZNESW 7.4 7.4 259.6 9.4 13.5 -21.0 13.4 -19.2 13.1 -18.5 13.3 -20.3
2026-04-12T19:20:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:20:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:20:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.721984
2026-04-12T19:20:13.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:20:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:20:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:20:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:20:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:20:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:19:39', tmtdew=3.36183, humidity=79.9404, cloud=0.0, wind=9.07056, temperature=12.7653, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:19:39', seeing=0.75, atlas_timestamp='2026-04-12T17:19:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:20:13.762 [DEBUG] [Thread-194464] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:20:13.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:20:13.864 [DEBUG] [Thread-194467] [transport.py] [_log()] starting thread (client mode): 0xae5b3130
2026-04-12T19:20:13.864 [DEBUG] [Thread-194467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:20:13.879 [DEBUG] [Thread-194467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:20:13.879 [INFO] [Thread-194467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] client lang: <none>
2026-04-12T19:20:13.887 [DEBUG] [Thread-194467] [transport.py] [_log()] server lang: <none>
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] kex follows: False
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] Compression: none
2026-04-12T19:20:13.888 [DEBUG] [Thread-194467] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:20:13.947 [DEBUG] [Thread-194467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:20:13.948 [DEBUG] [Thread-194467] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:20:13.948 [DEBUG] [Thread-194467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:20:13.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:20:13.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:20:14.002 [DEBUG] [Thread-194467] [transport.py] [_log()] userauth is OK
2026-04-12T19:20:14.002 [DEBUG] [Thread-194467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:20:14.003 [DEBUG] [Thread-194467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:20:14.003 [DEBUG] [Thread-194467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:20:14.003 [DEBUG] [Thread-194467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:20:14.017 [INFO] [Thread-194467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:20:14.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:20:14.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:20:14.829 [DEBUG] [Thread-194467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:20:14.830 [DEBUG] [Thread-194467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:20:14.877 [DEBUG] [Thread-194467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:20:14.877 [DEBUG] [Thread-194467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:20:14.885 [DEBUG] [Thread-194467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:20:14.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:20:14.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:20:14.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:20:14.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:20:14.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:20:14.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:20:14.917 [DEBUG] [Thread-194467] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:20:16.879 [DEBUG] [Thread-194469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:20:31.921 [DEBUG] [Thread-194470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:20:44.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:20:44.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:20:44.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:20:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 20, 14), 3.37, 80.0199, 0.0, 11.2936, 12.4163, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:20:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:20:14
2026-04-12T19:20:46.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:20:46.739 [DEBUG] [Thread-194471] [transport.py] [_log()] starting thread (client mode): 0xae5e6b60
2026-04-12T19:20:46.739 [DEBUG] [Thread-194471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:20:46.757 [DEBUG] [Thread-194471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:20:46.757 [INFO] [Thread-194471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] client lang: <none>
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] server lang: <none>
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] kex follows: False
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:20:46.760 [DEBUG] [Thread-194471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:20:46.761 [DEBUG] [Thread-194471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:20:46.761 [DEBUG] [Thread-194471] [transport.py] [_log()] Compression: none
2026-04-12T19:20:46.761 [DEBUG] [Thread-194471] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:20:46.775 [DEBUG] [Thread-194471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:20:46.776 [DEBUG] [Thread-194471] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:20:46.776 [DEBUG] [Thread-194471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:20:46.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:20:46.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:20:46.777 [DEBUG] [Thread-194471] [transport.py] [_log()] userauth is OK
2026-04-12T19:20:46.777 [DEBUG] [Thread-194471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:20:46.777 [DEBUG] [Thread-194471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:20:46.777 [DEBUG] [Thread-194471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:20:46.778 [DEBUG] [Thread-194471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:20:46.790 [INFO] [Thread-194471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:20:46.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:20:46.944 [DEBUG] [Thread-194473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:20:47.432 [DEBUG] [Thread-194471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:20:47.433 [DEBUG] [Thread-194471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:20:47.434 [DEBUG] [Thread-194471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:20:47.474 [DEBUG] [Thread-194471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:20:47.474 [DEBUG] [Thread-194471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:20:47.477 [DEBUG] [Thread-194471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:20:47.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:20:47.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:20:47.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:20:47.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:20:47.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:20:47.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:20:47.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:20:47.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:20:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:20:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.722331 -999.00  +12.50   7.24     83   +9.80 1 1 1 2 1     0    0 2.72 -4.96 ZNESW 7.2 7.2 262.4 10.4 13.5 -20.8 13.4 -19.1 13.0 -18.5 13.3 -20.4
2026-04-12T19:20:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:20:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:20:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.722331
2026-04-12T19:20:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:20:47.503 [DEBUG] [Thread-194471] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:20:47.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:20:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:20:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:20:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:20:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:20:14', tmtdew=3.37, humidity=80.0199, cloud=0.0, wind=11.2936, temperature=12.4163, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:20:14', seeing=0.71, atlas_timestamp='2026-04-12T17:20:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:20:47.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:20:47.598 [DEBUG] [Thread-194475] [transport.py] [_log()] starting thread (client mode): 0xae508190
2026-04-12T19:20:47.598 [DEBUG] [Thread-194475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:20:47.613 [DEBUG] [Thread-194475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:20:47.613 [INFO] [Thread-194475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] client lang: <none>
2026-04-12T19:20:47.621 [DEBUG] [Thread-194475] [transport.py] [_log()] server lang: <none>
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] kex follows: False
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] Compression: none
2026-04-12T19:20:47.622 [DEBUG] [Thread-194475] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:20:47.679 [DEBUG] [Thread-194475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:20:47.679 [DEBUG] [Thread-194475] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:20:47.680 [DEBUG] [Thread-194475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:20:47.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:20:47.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:20:47.747 [DEBUG] [Thread-194475] [transport.py] [_log()] userauth is OK
2026-04-12T19:20:47.747 [DEBUG] [Thread-194475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:20:47.747 [DEBUG] [Thread-194475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:20:47.747 [DEBUG] [Thread-194475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:20:47.747 [DEBUG] [Thread-194475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:20:47.765 [INFO] [Thread-194475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:20:47.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:20:47.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:20:48.596 [DEBUG] [Thread-194475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:20:48.597 [DEBUG] [Thread-194475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:20:48.645 [DEBUG] [Thread-194475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:20:48.645 [DEBUG] [Thread-194475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:20:48.653 [DEBUG] [Thread-194475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:20:48.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:20:48.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:20:48.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:20:48.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:20:48.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:20:48.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:20:48.685 [DEBUG] [Thread-194475] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:20:54.301 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:20:54.302 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:20:55.548 [DEBUG] [Thread-194477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:01.969 [DEBUG] [Thread-194478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:17.004 [DEBUG] [Thread-194479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:18.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:21:18.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:21:18.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:21:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 20, 49), 3.31456, 80.1725, 0.0, 11.3285, 12.5995, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:21:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:20:49
2026-04-12T19:21:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:21:20.519 [DEBUG] [Thread-194480] [transport.py] [_log()] starting thread (client mode): 0xae50bbe0
2026-04-12T19:21:20.519 [DEBUG] [Thread-194480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:21:20.537 [DEBUG] [Thread-194480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:21:20.537 [INFO] [Thread-194480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] client lang: <none>
2026-04-12T19:21:20.540 [DEBUG] [Thread-194480] [transport.py] [_log()] server lang: <none>
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] kex follows: False
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] Compression: none
2026-04-12T19:21:20.541 [DEBUG] [Thread-194480] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:21:20.557 [DEBUG] [Thread-194480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:21:20.557 [DEBUG] [Thread-194480] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:21:20.558 [DEBUG] [Thread-194480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:21:20.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:21:20.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:21:20.559 [DEBUG] [Thread-194480] [transport.py] [_log()] userauth is OK
2026-04-12T19:21:20.559 [DEBUG] [Thread-194480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:21:20.559 [DEBUG] [Thread-194480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:21:20.559 [DEBUG] [Thread-194480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:21:20.559 [DEBUG] [Thread-194480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:21:20.573 [INFO] [Thread-194480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:21:20.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:21:21.176 [DEBUG] [Thread-194480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:21:21.176 [DEBUG] [Thread-194480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:21:21.176 [DEBUG] [Thread-194480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:21:21.217 [DEBUG] [Thread-194480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:21:21.217 [DEBUG] [Thread-194480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:21:21.220 [DEBUG] [Thread-194480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:21:21.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:21:21.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:21:21.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:21:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:21:21.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:21:21.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:21:21.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:21:21.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:21:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:21:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.722678 -999.00  +12.50   7.81     83   +9.70 1 1 1 2 1     0    0 2.70 -5.49 ZNESW 7.8 7.8 259.6 11.9 13.5 -20.6 13.4 -18.9 13.0 -18.3 13.3 -20.5
2026-04-12T19:21:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:21:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:21:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.722678
2026-04-12T19:21:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:21:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:21:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:21:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:21:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:21:21.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:20:49', tmtdew=3.31456, humidity=80.1725, cloud=0.0, wind=11.3285, temperature=12.5995, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:20:50', seeing=0.8, atlas_timestamp='2026-04-12T17:20:39.379', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:21:21.247 [DEBUG] [Thread-194480] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:21:21.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:21:21.342 [DEBUG] [Thread-194483] [transport.py] [_log()] starting thread (client mode): 0xae50be50
2026-04-12T19:21:21.343 [DEBUG] [Thread-194483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:21:21.359 [DEBUG] [Thread-194483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:21:21.359 [INFO] [Thread-194483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:21:21.367 [DEBUG] [Thread-194483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:21:21.367 [DEBUG] [Thread-194483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:21:21.367 [DEBUG] [Thread-194483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:21:21.367 [DEBUG] [Thread-194483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:21.367 [DEBUG] [Thread-194483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:21.367 [DEBUG] [Thread-194483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] client lang: <none>
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] server lang: <none>
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] kex follows: False
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:21:21.368 [DEBUG] [Thread-194483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:21:21.369 [DEBUG] [Thread-194483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:21:21.369 [DEBUG] [Thread-194483] [transport.py] [_log()] Compression: none
2026-04-12T19:21:21.369 [DEBUG] [Thread-194483] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:21:21.425 [DEBUG] [Thread-194483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:21:21.426 [DEBUG] [Thread-194483] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:21:21.426 [DEBUG] [Thread-194483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:21:21.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:21:21.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:21:21.483 [DEBUG] [Thread-194483] [transport.py] [_log()] userauth is OK
2026-04-12T19:21:21.483 [DEBUG] [Thread-194483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:21:21.483 [DEBUG] [Thread-194483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:21:21.483 [DEBUG] [Thread-194483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:21:21.483 [DEBUG] [Thread-194483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:21:21.500 [INFO] [Thread-194483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:21:21.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:21:21.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:21:22.382 [DEBUG] [Thread-194483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:21:22.382 [DEBUG] [Thread-194483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:21:22.429 [DEBUG] [Thread-194483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:21:22.429 [DEBUG] [Thread-194483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:21:22.437 [DEBUG] [Thread-194483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:21:22.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:21:22.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:21:22.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:21:22.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:21:22.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:21:22.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:21:22.469 [DEBUG] [Thread-194483] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:21:32.036 [DEBUG] [Thread-194485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:47.087 [DEBUG] [Thread-194486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:52.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:21:52.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:21:52.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:21:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 21, 25), 3.34807, 80.136, 0.0, 8.20584, 12.3998, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:21:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:21:25
2026-04-12T19:21:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:21:54.280 [DEBUG] [Thread-194487] [transport.py] [_log()] starting thread (client mode): 0xae50a230
2026-04-12T19:21:54.280 [DEBUG] [Thread-194487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:21:54.301 [DEBUG] [Thread-194487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:21:54.301 [INFO] [Thread-194487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] client lang: <none>
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] server lang: <none>
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] kex follows: False
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:21:54.303 [DEBUG] [Thread-194487] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:21:54.304 [DEBUG] [Thread-194487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:21:54.304 [DEBUG] [Thread-194487] [transport.py] [_log()] Compression: none
2026-04-12T19:21:54.304 [DEBUG] [Thread-194487] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:21:54.314 [DEBUG] [Thread-194487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:21:54.314 [DEBUG] [Thread-194487] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:21:54.314 [DEBUG] [Thread-194487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:21:54.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:21:54.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:21:54.315 [DEBUG] [Thread-194487] [transport.py] [_log()] userauth is OK
2026-04-12T19:21:54.315 [DEBUG] [Thread-194487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:21:54.315 [DEBUG] [Thread-194487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:21:54.315 [DEBUG] [Thread-194487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:21:54.315 [DEBUG] [Thread-194487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:21:54.324 [INFO] [Thread-194487] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:21:54.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:21:54.503 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:54.504 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:54.906 [DEBUG] [Thread-194487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:21:54.906 [DEBUG] [Thread-194487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:21:54.907 [DEBUG] [Thread-194487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:21:54.947 [DEBUG] [Thread-194487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:21:54.948 [DEBUG] [Thread-194487] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:21:54.949 [DEBUG] [Thread-194487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:21:54.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:21:54.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:21:54.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:21:54.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:21:54.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:21:54.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:21:54.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.723372 -999.00  +12.50   6.47     83   +9.80 1 1 1 2 1     0    0 2.64 -6.76 ZNESW 6.5 6.5 239.6 9.1 13.5 -20.3 13.4 -18.6 13.1 -18.3 13.3 -20.2
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.723372
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:21:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:21:25', tmtdew=3.34807, humidity=80.136, cloud=0.0, wind=8.20584, temperature=12.3998, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:21:25', seeing=0.83, atlas_timestamp='2026-04-12T17:21:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:21:54.969 [DEBUG] [Thread-194487] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:21:55.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:21:55.058 [DEBUG] [Thread-194490] [transport.py] [_log()] starting thread (client mode): 0xb0f6e770
2026-04-12T19:21:55.058 [DEBUG] [Thread-194490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:21:55.073 [DEBUG] [Thread-194490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:21:55.073 [INFO] [Thread-194490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] client lang: <none>
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] server lang: <none>
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] kex follows: False
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] Compression: none
2026-04-12T19:21:55.081 [DEBUG] [Thread-194490] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:21:55.137 [DEBUG] [Thread-194490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:21:55.137 [DEBUG] [Thread-194490] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:21:55.137 [DEBUG] [Thread-194490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:21:55.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:21:55.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:21:55.195 [DEBUG] [Thread-194490] [transport.py] [_log()] userauth is OK
2026-04-12T19:21:55.195 [DEBUG] [Thread-194490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:21:55.195 [DEBUG] [Thread-194490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:21:55.195 [DEBUG] [Thread-194490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:21:55.195 [DEBUG] [Thread-194490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:21:55.208 [INFO] [Thread-194490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:21:55.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:21:55.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:21:55.749 [DEBUG] [Thread-194492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:21:56.011 [DEBUG] [Thread-194490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:21:56.011 [DEBUG] [Thread-194490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:21:56.059 [DEBUG] [Thread-194490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:21:56.059 [DEBUG] [Thread-194490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:21:56.068 [DEBUG] [Thread-194490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:21:56.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:21:56.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:21:56.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:21:56.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:21:56.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:21:56.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:21:56.100 [DEBUG] [Thread-194490] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:22:02.114 [DEBUG] [Thread-194493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:22:17.161 [DEBUG] [Thread-194494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:22:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:22:26.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:22:26.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:22:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 22), 3.31815, 80.3024, 0.0, 10.5527, 12.4334, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:22:27.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:22:00
2026-04-12T19:22:27.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:22:27.952 [DEBUG] [Thread-194495] [transport.py] [_log()] starting thread (client mode): 0xae5a73a0
2026-04-12T19:22:27.952 [DEBUG] [Thread-194495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:22:27.973 [DEBUG] [Thread-194495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:22:27.973 [INFO] [Thread-194495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] client lang: <none>
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] server lang: <none>
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] kex follows: False
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:22:27.976 [DEBUG] [Thread-194495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:22:27.977 [DEBUG] [Thread-194495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:22:27.977 [DEBUG] [Thread-194495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:22:27.977 [DEBUG] [Thread-194495] [transport.py] [_log()] Compression: none
2026-04-12T19:22:27.977 [DEBUG] [Thread-194495] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:22:27.992 [DEBUG] [Thread-194495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:22:27.992 [DEBUG] [Thread-194495] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:22:27.993 [DEBUG] [Thread-194495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:22:27.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:22:27.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:22:27.994 [DEBUG] [Thread-194495] [transport.py] [_log()] userauth is OK
2026-04-12T19:22:27.994 [DEBUG] [Thread-194495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:22:27.994 [DEBUG] [Thread-194495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:22:27.994 [DEBUG] [Thread-194495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:22:27.994 [DEBUG] [Thread-194495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:22:28.008 [INFO] [Thread-194495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:22:28.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:22:28.627 [DEBUG] [Thread-194495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:22:28.627 [DEBUG] [Thread-194495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:22:28.627 [DEBUG] [Thread-194495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:22:28.668 [DEBUG] [Thread-194495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:22:28.668 [DEBUG] [Thread-194495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:22:28.671 [DEBUG] [Thread-194495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:22:28.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:22:28.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:22:28.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:22:28.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:22:28.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:22:28.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:22:28.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:22:28.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:22:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:22:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.723719 -999.00  +12.50   7.19     83   +9.80 1 1 1 2 1     0    0 2.62 -7.24 ZNESW 7.2 7.2 257.2 10.5 13.5 -20.2 13.4 -18.7 13.1 -18.3 13.3 -20.2
2026-04-12T19:22:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:22:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:22:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.723719
2026-04-12T19:22:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:22:28.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:22:28.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:22:28.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:22:28.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:22:28.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:22:00', tmtdew=3.31815, humidity=80.3024, cloud=0.0, wind=10.5527, temperature=12.4334, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:22:01', seeing=0.75, atlas_timestamp='2026-04-12T17:22:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.0417500000000004, -0.021250000000000213, -0.027000000000001023, 0.006999999999999673, 0.02275000000000027, -0.0259999999999998, -0.03074999999999939, 0.019499999999998963, -0.02200000000000024, -0.10374999999999979, -0.0030000000000001137, 0.0730000000000004, 0.03625000000000078, -0.0070000000000014495, -0.031000000000000583, 0.06475000000000009, 0.0470000000000006, -0.0129999999999999, 0.03724999999999845, 0.032999999999999474, 0.021749999999999048, -0.009749999999998593, 0.03275000000000006, 0.030999999999998806, -0.022499999999999076, -0.04124999999999979, 0.015499999999999403, 0.1479999999999997, 0.17300000000000182, 0.038000000000000256, 0.07450000000000045, 0.013749999999999929], zp_timestamp='2026-04-12T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:22:28.695 [DEBUG] [Thread-194495] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:22:28.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:22:28.790 [DEBUG] [Thread-194498] [transport.py] [_log()] starting thread (client mode): 0xae5a64d0
2026-04-12T19:22:28.790 [DEBUG] [Thread-194498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:22:28.805 [DEBUG] [Thread-194498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:22:28.806 [INFO] [Thread-194498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:22:28.813 [DEBUG] [Thread-194498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:22:28.813 [DEBUG] [Thread-194498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:22:28.813 [DEBUG] [Thread-194498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:22:28.813 [DEBUG] [Thread-194498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:22:28.813 [DEBUG] [Thread-194498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] client lang: <none>
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] server lang: <none>
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] kex follows: False
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:22:28.814 [DEBUG] [Thread-194498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:22:28.815 [DEBUG] [Thread-194498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:22:28.815 [DEBUG] [Thread-194498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:22:28.815 [DEBUG] [Thread-194498] [transport.py] [_log()] Compression: none
2026-04-12T19:22:28.815 [DEBUG] [Thread-194498] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:22:28.869 [DEBUG] [Thread-194498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:22:28.869 [DEBUG] [Thread-194498] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:22:28.869 [DEBUG] [Thread-194498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:22:28.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:22:28.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:22:28.927 [DEBUG] [Thread-194498] [transport.py] [_log()] userauth is OK
2026-04-12T19:22:28.927 [DEBUG] [Thread-194498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:22:28.927 [DEBUG] [Thread-194498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:22:28.927 [DEBUG] [Thread-194498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:22:28.927 [DEBUG] [Thread-194498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:22:28.946 [INFO] [Thread-194498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:22:28.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:22:28.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:22:29.792 [DEBUG] [Thread-194498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:22:29.792 [DEBUG] [Thread-194498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:22:29.840 [DEBUG] [Thread-194498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:22:29.841 [DEBUG] [Thread-194498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:22:29.849 [DEBUG] [Thread-194498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:22:29.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:22:29.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:22:29.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:22:29.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:22:29.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:22:29.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:22:29.882 [DEBUG] [Thread-194498] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:22:32.194 [DEBUG] [Thread-194500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:22:47.284 [DEBUG] [Thread-194501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:22:54.706 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:22:54.708 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:22:56.148 [DEBUG] [Thread-194502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:22:59.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:22:59.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:22:59.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:23:01.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 22, 35), 3.20155, 80.7717, 0.0, 11.7871, 12.5019, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:23:01.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:22:35
2026-04-12T19:23:01.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:23:01.759 [DEBUG] [Thread-194503] [transport.py] [_log()] starting thread (client mode): 0xae5a4ac0
2026-04-12T19:23:01.759 [DEBUG] [Thread-194503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:23:01.777 [DEBUG] [Thread-194503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:23:01.777 [INFO] [Thread-194503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] client lang: <none>
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] server lang: <none>
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] kex follows: False
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:23:01.779 [DEBUG] [Thread-194503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:23:01.780 [DEBUG] [Thread-194503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:23:01.780 [DEBUG] [Thread-194503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:23:01.780 [DEBUG] [Thread-194503] [transport.py] [_log()] Compression: none
2026-04-12T19:23:01.780 [DEBUG] [Thread-194503] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:23:01.792 [DEBUG] [Thread-194503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:23:01.792 [DEBUG] [Thread-194503] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:23:01.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:23:01.793 [DEBUG] [Thread-194503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:23:01.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:23:01.794 [DEBUG] [Thread-194503] [transport.py] [_log()] userauth is OK
2026-04-12T19:23:01.794 [DEBUG] [Thread-194503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:23:01.794 [DEBUG] [Thread-194503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:23:01.794 [DEBUG] [Thread-194503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:23:01.794 [DEBUG] [Thread-194503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:23:01.828 [INFO] [Thread-194503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:23:01.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:23:02.315 [DEBUG] [Thread-194505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:23:02.497 [DEBUG] [Thread-194503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:23:02.497 [DEBUG] [Thread-194503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:23:02.497 [DEBUG] [Thread-194503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:23:02.538 [DEBUG] [Thread-194503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:23:02.538 [DEBUG] [Thread-194503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:23:02.541 [DEBUG] [Thread-194503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:23:02.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:23:02.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:23:02.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:23:02.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:23:02.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:23:02.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:23:02.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:23:02.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:23:02.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:23:02.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.724067 -999.00  +12.50   4.68     83   +9.80 1 1 1 2 1     0    0 2.62 -7.37 ZNESW 4.7 4.7 237.8 7.7 13.5 -20.2 13.4 -18.6 13.1 -18.3 13.3 -20.3
2026-04-12T19:23:02.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:23:02.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:23:02.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.724067
2026-04-12T19:23:02.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:23:02.568 [DEBUG] [Thread-194503] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:23:02.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:23:02.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:23:02.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:23:02.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:23:02.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:22:35', tmtdew=3.20155, humidity=80.7717, cloud=0.0, wind=11.7871, temperature=12.5019, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:22:36', seeing=0.78, atlas_timestamp='2026-04-12T17:22:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08375000000000021, -0.08675000000000033, -0.05224999999999902, -0.08900000000000219, -0.04749999999999943, -0.01574999999999882, -0.07900000000000063, -0.04374999999999929, -0.0045000000000001705, -0.0625, -0.08774999999999977, -0.015000000000000568, 0.019000000000000128, -0.04075000000000095, -0.02400000000000091, -0.030000000000001137, -0.019249999999999545, 0.05400000000000027, -0.02200000000000024, -0.00575000000000081, -0.008000000000002672, -0.05625000000000213, -0.08074999999999832, -0.04625000000000057, 0.039499999999998536, 0.21649999999999991, 0.04475000000000051, -0.04049999999999976, 0.051000000000000156, 0.08600000000000207, -0.028999999999999915, -0.0259999999999998, 0.05274999999999963], zp_timestamp='2026-04-12T17:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:23:02.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:23:02.665 [DEBUG] [Thread-194507] [transport.py] [_log()] starting thread (client mode): 0xae50a3b0
2026-04-12T19:23:02.665 [DEBUG] [Thread-194507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:23:02.680 [DEBUG] [Thread-194507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:23:02.680 [INFO] [Thread-194507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] client lang: <none>
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] server lang: <none>
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] kex follows: False
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] Compression: none
2026-04-12T19:23:02.688 [DEBUG] [Thread-194507] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:23:02.747 [DEBUG] [Thread-194507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:23:02.747 [DEBUG] [Thread-194507] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:23:02.748 [DEBUG] [Thread-194507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:23:02.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:23:02.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:23:02.803 [DEBUG] [Thread-194507] [transport.py] [_log()] userauth is OK
2026-04-12T19:23:02.803 [DEBUG] [Thread-194507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:23:02.803 [DEBUG] [Thread-194507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:23:02.803 [DEBUG] [Thread-194507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:23:02.803 [DEBUG] [Thread-194507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:23:02.822 [INFO] [Thread-194507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:23:02.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:23:02.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:23:03.666 [DEBUG] [Thread-194507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:23:03.666 [DEBUG] [Thread-194507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:23:03.714 [DEBUG] [Thread-194507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:23:03.714 [DEBUG] [Thread-194507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:23:03.723 [DEBUG] [Thread-194507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:23:03.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:23:03.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:23:03.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:23:03.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:23:03.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:23:03.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:23:03.756 [DEBUG] [Thread-194507] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:23:17.349 [DEBUG] [Thread-194509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:23:32.515 [DEBUG] [Thread-194510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:23:33.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:23:33.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:23:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:23:35.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 23, 11), 3.29018, 80.4522, 0.0, 8.38224, 12.4173, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:23:35.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:23:11
2026-04-12T19:23:35.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:23:35.613 [DEBUG] [Thread-194511] [transport.py] [_log()] starting thread (client mode): 0xae5a5150
2026-04-12T19:23:35.613 [DEBUG] [Thread-194511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:23:35.633 [DEBUG] [Thread-194511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:23:35.633 [INFO] [Thread-194511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] client lang: <none>
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] server lang: <none>
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] kex follows: False
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] Compression: none
2026-04-12T19:23:35.636 [DEBUG] [Thread-194511] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:23:35.653 [DEBUG] [Thread-194511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:23:35.653 [DEBUG] [Thread-194511] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:23:35.653 [DEBUG] [Thread-194511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:23:35.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:23:35.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:23:35.655 [DEBUG] [Thread-194511] [transport.py] [_log()] userauth is OK
2026-04-12T19:23:35.655 [DEBUG] [Thread-194511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:23:35.655 [DEBUG] [Thread-194511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:23:35.655 [DEBUG] [Thread-194511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:23:35.655 [DEBUG] [Thread-194511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:23:35.686 [INFO] [Thread-194511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:23:35.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:23:36.262 [DEBUG] [Thread-194511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:23:36.262 [DEBUG] [Thread-194511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:23:36.263 [DEBUG] [Thread-194511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:23:36.303 [DEBUG] [Thread-194511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:23:36.303 [DEBUG] [Thread-194511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:23:36.309 [DEBUG] [Thread-194511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:23:36.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:23:36.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:23:36.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:23:36.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:23:36.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:23:36.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:23:36.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:23:36.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:23:36.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:23:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.724414 -999.00  +12.50   7.55     83   +9.80 1 1 1 2 1     0    0 2.58 -6.97 ZNESW 7.5 7.5 238.2 9.9 13.5 -20.0 13.4 -18.7 13.1 -18.2 13.3 -20.1
2026-04-12T19:23:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:23:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:23:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.724414
2026-04-12T19:23:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:23:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:23:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:23:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:23:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:23:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:23:11', tmtdew=3.29018, humidity=80.4522, cloud=0.0, wind=8.38224, temperature=12.4173, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:23:11', seeing=0.85, atlas_timestamp='2026-04-12T17:23:09.370', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08375000000000021, -0.08675000000000033, -0.05224999999999902, -0.08900000000000219, -0.04749999999999943, -0.01574999999999882, -0.07900000000000063, -0.04374999999999929, -0.0045000000000001705, -0.0625, -0.08774999999999977, -0.015000000000000568, 0.019000000000000128, -0.04075000000000095, -0.02400000000000091, -0.030000000000001137, -0.019249999999999545, 0.05400000000000027, -0.02200000000000024, -0.00575000000000081, -0.008000000000002672, -0.05625000000000213, -0.08074999999999832, -0.04625000000000057, 0.039499999999998536, 0.21649999999999991, 0.04475000000000051, -0.04049999999999976, 0.051000000000000156, 0.08600000000000207, -0.028999999999999915, -0.0259999999999998, 0.05274999999999963], zp_timestamp='2026-04-12T17:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:23:36.333 [DEBUG] [Thread-194511] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:23:36.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:23:36.427 [DEBUG] [Thread-194514] [transport.py] [_log()] starting thread (client mode): 0xb0f6e920
2026-04-12T19:23:36.427 [DEBUG] [Thread-194514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:23:36.442 [DEBUG] [Thread-194514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:23:36.442 [INFO] [Thread-194514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:23:36.450 [DEBUG] [Thread-194514] [transport.py] [_log()] client lang: <none>
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] server lang: <none>
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] kex follows: False
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] Compression: none
2026-04-12T19:23:36.451 [DEBUG] [Thread-194514] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:23:36.507 [DEBUG] [Thread-194514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:23:36.508 [DEBUG] [Thread-194514] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:23:36.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:23:36.509 [DEBUG] [Thread-194514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:23:36.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:23:36.564 [DEBUG] [Thread-194514] [transport.py] [_log()] userauth is OK
2026-04-12T19:23:36.564 [DEBUG] [Thread-194514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:23:36.564 [DEBUG] [Thread-194514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:23:36.564 [DEBUG] [Thread-194514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:23:36.564 [DEBUG] [Thread-194514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:23:36.583 [INFO] [Thread-194514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:23:36.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:23:36.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:23:37.421 [DEBUG] [Thread-194514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:23:37.421 [DEBUG] [Thread-194514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:23:37.469 [DEBUG] [Thread-194514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:23:37.469 [DEBUG] [Thread-194514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:23:37.477 [DEBUG] [Thread-194514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:23:37.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:23:37.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:23:37.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:23:37.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:23:37.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:23:37.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:23:37.509 [DEBUG] [Thread-194514] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:23:47.542 [DEBUG] [Thread-194516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:23:54.909 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:23:54.911 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:23:56.593 [DEBUG] [Thread-194517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:24:02.608 [DEBUG] [Thread-194518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:24:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:24:07.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:24:07.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:24:08.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 23, 46), 3.18313, 80.872, 0.0, 10.5876, 12.5026, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:24:08.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:23:46
2026-04-12T19:24:09.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:24:09.351 [DEBUG] [Thread-194519] [transport.py] [_log()] starting thread (client mode): 0xb0f6e020
2026-04-12T19:24:09.351 [DEBUG] [Thread-194519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:24:09.371 [DEBUG] [Thread-194519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:24:09.371 [INFO] [Thread-194519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:24:09.374 [DEBUG] [Thread-194519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:24:09.374 [DEBUG] [Thread-194519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:24:09.374 [DEBUG] [Thread-194519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:24:09.374 [DEBUG] [Thread-194519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] client lang: <none>
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] server lang: <none>
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] kex follows: False
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] Compression: none
2026-04-12T19:24:09.375 [DEBUG] [Thread-194519] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:24:09.390 [DEBUG] [Thread-194519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:24:09.390 [DEBUG] [Thread-194519] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:24:09.390 [DEBUG] [Thread-194519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:24:09.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:24:09.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:24:09.391 [DEBUG] [Thread-194519] [transport.py] [_log()] userauth is OK
2026-04-12T19:24:09.392 [DEBUG] [Thread-194519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:24:09.392 [DEBUG] [Thread-194519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:24:09.392 [DEBUG] [Thread-194519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:24:09.392 [DEBUG] [Thread-194519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:24:09.409 [INFO] [Thread-194519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:24:09.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:24:09.979 [DEBUG] [Thread-194519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:24:09.979 [DEBUG] [Thread-194519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:24:09.979 [DEBUG] [Thread-194519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:24:10.020 [DEBUG] [Thread-194519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:24:10.020 [DEBUG] [Thread-194519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:24:10.022 [DEBUG] [Thread-194519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:24:10.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:24:10.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:24:10.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:24:10.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:24:10.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:24:10.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:24:10.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:24:10.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:24:10.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:24:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.724761 -999.00  +12.50   8.34     83   +9.80 1 1 1 2 1     0    0 2.66 -7.28 ZNESW 8.3 8.3 242.4 10.6 13.5 -20.1 13.4 -18.7 13.1 -18.4 13.3 -20.3
2026-04-12T19:24:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:24:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:24:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.724761
2026-04-12T19:24:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:24:10.046 [DEBUG] [Thread-194519] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:24:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:24:10.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:24:10.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:24:10.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:24:10.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:23:46', tmtdew=3.18313, humidity=80.872, cloud=0.0, wind=10.5876, temperature=12.5026, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:23:47', seeing=1.03, atlas_timestamp='2026-04-12T17:23:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08375000000000021, -0.08675000000000033, -0.05224999999999902, -0.08900000000000219, -0.04749999999999943, -0.01574999999999882, -0.07900000000000063, -0.04374999999999929, -0.0045000000000001705, -0.0625, -0.08774999999999977, -0.015000000000000568, 0.019000000000000128, -0.04075000000000095, -0.02400000000000091, -0.030000000000001137, -0.019249999999999545, 0.05400000000000027, -0.02200000000000024, -0.00575000000000081, -0.008000000000002672, -0.05625000000000213, -0.08074999999999832, -0.04625000000000057, 0.039499999999998536, 0.21649999999999991, 0.04475000000000051, -0.04049999999999976, 0.051000000000000156, 0.08600000000000207, -0.028999999999999915, -0.0259999999999998, 0.05274999999999963], zp_timestamp='2026-04-12T17:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:24:10.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:24:10.142 [DEBUG] [Thread-194522] [transport.py] [_log()] starting thread (client mode): 0xae5a6770
2026-04-12T19:24:10.143 [DEBUG] [Thread-194522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:24:10.156 [DEBUG] [Thread-194522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:24:10.156 [INFO] [Thread-194522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:24:10.164 [DEBUG] [Thread-194522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] client lang: <none>
2026-04-12T19:24:10.165 [DEBUG] [Thread-194522] [transport.py] [_log()] server lang: <none>
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] kex follows: False
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] Compression: none
2026-04-12T19:24:10.166 [DEBUG] [Thread-194522] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:24:10.227 [DEBUG] [Thread-194522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:24:10.229 [DEBUG] [Thread-194522] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:24:10.230 [DEBUG] [Thread-194522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:24:10.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:24:10.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:24:10.283 [DEBUG] [Thread-194522] [transport.py] [_log()] userauth is OK
2026-04-12T19:24:10.283 [DEBUG] [Thread-194522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:24:10.283 [DEBUG] [Thread-194522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:24:10.283 [DEBUG] [Thread-194522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:24:10.283 [DEBUG] [Thread-194522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:24:10.301 [INFO] [Thread-194522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:24:10.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:24:10.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:24:11.150 [DEBUG] [Thread-194522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:24:11.151 [DEBUG] [Thread-194522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:24:11.198 [DEBUG] [Thread-194522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:24:11.198 [DEBUG] [Thread-194522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:24:11.207 [DEBUG] [Thread-194522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:24:11.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:24:11.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:24:11.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:24:11.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:24:11.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:24:11.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:24:11.241 [DEBUG] [Thread-194522] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:24:17.637 [DEBUG] [Thread-194524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:24:32.671 [DEBUG] [Thread-194525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:24:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:24:41.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:24:41.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:24:42.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 24, 22), 3.28058, 80.5023, 0.0, 8.91144, 12.401, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:24:42.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:24:22
2026-04-12T19:24:42.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:24:43.157 [DEBUG] [Thread-194526] [transport.py] [_log()] starting thread (client mode): 0xae5a5060
2026-04-12T19:24:43.158 [DEBUG] [Thread-194526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:24:43.172 [DEBUG] [Thread-194526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:24:43.173 [INFO] [Thread-194526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:24:43.176 [DEBUG] [Thread-194526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:24:43.176 [DEBUG] [Thread-194526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:24:43.176 [DEBUG] [Thread-194526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] client lang: <none>
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] server lang: <none>
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] kex follows: False
2026-04-12T19:24:43.177 [DEBUG] [Thread-194526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:24:43.178 [DEBUG] [Thread-194526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:24:43.178 [DEBUG] [Thread-194526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:24:43.178 [DEBUG] [Thread-194526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:24:43.178 [DEBUG] [Thread-194526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:24:43.179 [DEBUG] [Thread-194526] [transport.py] [_log()] Compression: none
2026-04-12T19:24:43.179 [DEBUG] [Thread-194526] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:24:43.213 [DEBUG] [Thread-194526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:24:43.220 [DEBUG] [Thread-194526] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:24:43.222 [DEBUG] [Thread-194526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:24:43.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:24:43.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:24:43.227 [DEBUG] [Thread-194526] [transport.py] [_log()] userauth is OK
2026-04-12T19:24:43.227 [DEBUG] [Thread-194526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:24:43.228 [DEBUG] [Thread-194526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:24:43.228 [DEBUG] [Thread-194526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:24:43.228 [DEBUG] [Thread-194526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:24:43.259 [INFO] [Thread-194526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:24:43.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:24:43.849 [DEBUG] [Thread-194526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:24:43.849 [DEBUG] [Thread-194526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:24:43.850 [DEBUG] [Thread-194526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:24:43.891 [DEBUG] [Thread-194526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:24:43.891 [DEBUG] [Thread-194526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:24:43.896 [DEBUG] [Thread-194526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:24:43.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:24:43.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:24:43.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:24:43.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:24:43.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:24:43.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:24:43.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:24:43.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:24:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:24:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.725108 -999.00  +12.50   6.44     83   +9.80 1 1 1 2 1     0    0 2.59 -7.37 ZNESW 6.4 6.4 257.2 10.7 13.5 -20.1 13.4 -18.6 13.1 -18.3 13.3 -20.2
2026-04-12T19:24:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:24:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:24:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.725108
2026-04-12T19:24:43.984 [DEBUG] [Thread-194526] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:24:43.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:24:44.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:24:44.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:24:44.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:24:44.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:24:44.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:24:22', tmtdew=3.28058, humidity=80.5023, cloud=0.0, wind=8.91144, temperature=12.401, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:24:22', seeing=0.71, atlas_timestamp='2026-04-12T17:24:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08375000000000021, -0.08675000000000033, -0.05224999999999902, -0.08900000000000219, -0.04749999999999943, -0.01574999999999882, -0.07900000000000063, -0.04374999999999929, -0.0045000000000001705, -0.0625, -0.08774999999999977, -0.015000000000000568, 0.019000000000000128, -0.04075000000000095, -0.02400000000000091, -0.030000000000001137, -0.019249999999999545, 0.05400000000000027, -0.02200000000000024, -0.00575000000000081, -0.008000000000002672, -0.05625000000000213, -0.08074999999999832, -0.04625000000000057, 0.039499999999998536, 0.21649999999999991, 0.04475000000000051, -0.04049999999999976, 0.051000000000000156, 0.08600000000000207, -0.028999999999999915, -0.0259999999999998, 0.05274999999999963], zp_timestamp='2026-04-12T17:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:24:44.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:24:44.096 [DEBUG] [Thread-194529] [transport.py] [_log()] starting thread (client mode): 0xae536c20
2026-04-12T19:24:44.096 [DEBUG] [Thread-194529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:24:44.111 [DEBUG] [Thread-194529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:24:44.111 [INFO] [Thread-194529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] client lang: <none>
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] server lang: <none>
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] kex follows: False
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:24:44.120 [DEBUG] [Thread-194529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:24:44.121 [DEBUG] [Thread-194529] [transport.py] [_log()] Compression: none
2026-04-12T19:24:44.121 [DEBUG] [Thread-194529] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:24:44.177 [DEBUG] [Thread-194529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:24:44.178 [DEBUG] [Thread-194529] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:24:44.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:24:44.179 [DEBUG] [Thread-194529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:24:44.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:24:44.236 [DEBUG] [Thread-194529] [transport.py] [_log()] userauth is OK
2026-04-12T19:24:44.236 [DEBUG] [Thread-194529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:24:44.237 [DEBUG] [Thread-194529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:24:44.237 [DEBUG] [Thread-194529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:24:44.237 [DEBUG] [Thread-194529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:24:44.255 [INFO] [Thread-194529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:24:44.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:24:44.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:24:45.076 [DEBUG] [Thread-194529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:24:45.076 [DEBUG] [Thread-194529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:24:45.127 [DEBUG] [Thread-194529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:24:45.127 [DEBUG] [Thread-194529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:24:45.139 [DEBUG] [Thread-194529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:24:45.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:24:45.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:24:45.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:24:45.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:24:45.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:24:45.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:24:45.192 [DEBUG] [Thread-194529] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:24:47.705 [DEBUG] [Thread-194531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:24:55.116 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:24:55.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:24:57.054 [DEBUG] [Thread-194532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:02.799 [DEBUG] [Thread-194533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:15.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:25:15.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:25:15.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:25:16.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 24, 57), 3.27404, 80.5358, 0.0, 9.03492, 12.3847, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:25:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:24:57
2026-04-12T19:25:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:25:17.090 [DEBUG] [Thread-194534] [transport.py] [_log()] starting thread (client mode): 0xae50b190
2026-04-12T19:25:17.090 [DEBUG] [Thread-194534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:25:17.104 [DEBUG] [Thread-194534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:25:17.104 [INFO] [Thread-194534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] client lang: <none>
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] server lang: <none>
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] kex follows: False
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] Compression: none
2026-04-12T19:25:17.106 [DEBUG] [Thread-194534] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:25:17.134 [DEBUG] [Thread-194534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:25:17.134 [DEBUG] [Thread-194534] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:25:17.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:25:17.137 [DEBUG] [Thread-194534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:25:17.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:25:17.138 [DEBUG] [Thread-194534] [transport.py] [_log()] userauth is OK
2026-04-12T19:25:17.138 [DEBUG] [Thread-194534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:25:17.138 [DEBUG] [Thread-194534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:25:17.138 [DEBUG] [Thread-194534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:25:17.138 [DEBUG] [Thread-194534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:25:17.175 [INFO] [Thread-194534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:25:17.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:25:17.826 [DEBUG] [Thread-194536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:18.414 [DEBUG] [Thread-194534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:25:18.415 [DEBUG] [Thread-194534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:25:18.416 [DEBUG] [Thread-194534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:25:18.456 [DEBUG] [Thread-194534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:25:18.456 [DEBUG] [Thread-194534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:25:18.459 [DEBUG] [Thread-194534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:25:18.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:25:18.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:25:18.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:25:18.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:25:18.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:25:18.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:25:18.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:25:18.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:25:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:25:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.725802 -999.00  +12.50   6.29     84   +9.80 1 1 1 2 1     0    0 2.53 -8.27 ZNESW 6.3 6.3 251.2 8.3 13.5 -20.1 13.4 -18.4 13.1 -18.2 13.3 -20.1
2026-04-12T19:25:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:25:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:25:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.725802
2026-04-12T19:25:18.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:25:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:25:18.494 [DEBUG] [Thread-194534] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:25:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:25:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:25:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:25:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:24:57', tmtdew=3.27404, humidity=80.5358, cloud=0.0, wind=9.03492, temperature=12.3847, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:24:58', seeing=0.96, atlas_timestamp='2026-04-12T17:25:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08375000000000021, -0.08675000000000033, -0.05224999999999902, -0.08900000000000219, -0.04749999999999943, -0.01574999999999882, -0.07900000000000063, -0.04374999999999929, -0.0045000000000001705, -0.0625, -0.08774999999999977, -0.015000000000000568, 0.019000000000000128, -0.04075000000000095, -0.02400000000000091, -0.030000000000001137, -0.019249999999999545, 0.05400000000000027, -0.02200000000000024, -0.00575000000000081, -0.008000000000002672, -0.05625000000000213, -0.08074999999999832, -0.04625000000000057, 0.039499999999998536, 0.21649999999999991, 0.04475000000000051, -0.04049999999999976, 0.051000000000000156, 0.08600000000000207, -0.028999999999999915, -0.0259999999999998, 0.05274999999999963], zp_timestamp='2026-04-12T17:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:25:18.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:25:18.595 [DEBUG] [Thread-194538] [transport.py] [_log()] starting thread (client mode): 0xae5e58d0
2026-04-12T19:25:18.595 [DEBUG] [Thread-194538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:25:18.609 [DEBUG] [Thread-194538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:25:18.609 [INFO] [Thread-194538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:25:18.616 [DEBUG] [Thread-194538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:25:18.617 [DEBUG] [Thread-194538] [transport.py] [_log()] client lang: <none>
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] server lang: <none>
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] kex follows: False
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] Compression: none
2026-04-12T19:25:18.618 [DEBUG] [Thread-194538] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:25:18.675 [DEBUG] [Thread-194538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:25:18.675 [DEBUG] [Thread-194538] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:25:18.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:25:18.676 [DEBUG] [Thread-194538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:25:18.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:25:18.731 [DEBUG] [Thread-194538] [transport.py] [_log()] userauth is OK
2026-04-12T19:25:18.731 [DEBUG] [Thread-194538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:25:18.732 [DEBUG] [Thread-194538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:25:18.732 [DEBUG] [Thread-194538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:25:18.732 [DEBUG] [Thread-194538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:25:18.751 [INFO] [Thread-194538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:25:18.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:25:18.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:25:19.583 [DEBUG] [Thread-194538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:25:19.583 [DEBUG] [Thread-194538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:25:19.631 [DEBUG] [Thread-194538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:25:19.631 [DEBUG] [Thread-194538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:25:19.639 [DEBUG] [Thread-194538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:25:19.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:25:19.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:25:19.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:25:19.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:25:19.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:25:19.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:25:19.674 [DEBUG] [Thread-194538] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:25:32.852 [DEBUG] [Thread-194540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:47.884 [DEBUG] [Thread-194541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:49.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:25:49.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:25:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:25:50.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 25, 33), 3.13063, 81.1711, 0.0, 10.6229, 12.6025, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:25:50.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:25:33
2026-04-12T19:25:51.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:25:51.562 [DEBUG] [Thread-194542] [transport.py] [_log()] starting thread (client mode): 0xae5e47f0
2026-04-12T19:25:51.563 [DEBUG] [Thread-194542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:25:51.580 [DEBUG] [Thread-194542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:25:51.580 [INFO] [Thread-194542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] client lang: <none>
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] server lang: <none>
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] kex follows: False
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] Compression: none
2026-04-12T19:25:51.583 [DEBUG] [Thread-194542] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:25:51.598 [DEBUG] [Thread-194542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:25:51.598 [DEBUG] [Thread-194542] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:25:51.598 [DEBUG] [Thread-194542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:25:51.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:25:51.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:25:51.599 [DEBUG] [Thread-194542] [transport.py] [_log()] userauth is OK
2026-04-12T19:25:51.599 [DEBUG] [Thread-194542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:25:51.599 [DEBUG] [Thread-194542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:25:51.599 [DEBUG] [Thread-194542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:25:51.599 [DEBUG] [Thread-194542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:25:51.608 [INFO] [Thread-194542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:25:51.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:25:52.416 [DEBUG] [Thread-194542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:25:52.416 [DEBUG] [Thread-194542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:25:52.417 [DEBUG] [Thread-194542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:25:52.458 [DEBUG] [Thread-194542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:25:52.458 [DEBUG] [Thread-194542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:25:52.460 [DEBUG] [Thread-194542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:25:52.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:25:52.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:25:52.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:25:52.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:25:52.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:25:52.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:25:52.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.725802 -999.00  +12.50   6.29     84   +9.80 1 1 1 2 1     0    0 2.53 -8.27 ZNESW 6.3 6.3 251.2 8.3 13.5 -20.1 13.4 -18.4 13.1 -18.2 13.3 -20.1
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.725802
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:25:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:25:33', tmtdew=3.13063, humidity=81.1711, cloud=0.0, wind=10.6229, temperature=12.6025, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:25:33', seeing=0.8, atlas_timestamp='2026-04-12T17:25:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:25:52.482 [DEBUG] [Thread-194542] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:25:52.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:25:52.565 [DEBUG] [Thread-194545] [transport.py] [_log()] starting thread (client mode): 0xae5a4280
2026-04-12T19:25:52.565 [DEBUG] [Thread-194545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:25:52.580 [DEBUG] [Thread-194545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:25:52.580 [INFO] [Thread-194545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] client lang: <none>
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] server lang: <none>
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] kex follows: False
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] Compression: none
2026-04-12T19:25:52.587 [DEBUG] [Thread-194545] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:25:52.646 [DEBUG] [Thread-194545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:25:52.646 [DEBUG] [Thread-194545] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:25:52.646 [DEBUG] [Thread-194545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:25:52.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:25:52.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:25:52.703 [DEBUG] [Thread-194545] [transport.py] [_log()] userauth is OK
2026-04-12T19:25:52.703 [DEBUG] [Thread-194545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:25:52.703 [DEBUG] [Thread-194545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:25:52.703 [DEBUG] [Thread-194545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:25:52.703 [DEBUG] [Thread-194545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:25:52.717 [INFO] [Thread-194545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:25:52.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:25:52.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:25:53.547 [DEBUG] [Thread-194545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:25:53.547 [DEBUG] [Thread-194545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:25:53.595 [DEBUG] [Thread-194545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:25:53.595 [DEBUG] [Thread-194545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:25:53.603 [DEBUG] [Thread-194545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:25:53.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:25:53.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:25:53.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:25:53.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:25:53.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:25:53.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:25:53.635 [DEBUG] [Thread-194545] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:25:55.316 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:55.317 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:57.247 [DEBUG] [Thread-194547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:25:58.619 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:02.911 [DEBUG] [Thread-194548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:08.149 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:12.208 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:17.946 [DEBUG] [Thread-194549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:23.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:26:23.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:26:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:26:24.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 26, 8), 3.22929, 80.5029, 0.0, 8.78796, 12.3017, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:26:24.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:26:08
2026-04-12T19:26:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:26:25.473 [DEBUG] [Thread-194550] [transport.py] [_log()] starting thread (client mode): 0xae50a9b0
2026-04-12T19:26:25.473 [DEBUG] [Thread-194550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:26:25.493 [DEBUG] [Thread-194550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:26:25.493 [INFO] [Thread-194550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:26:25.496 [DEBUG] [Thread-194550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:26:25.496 [DEBUG] [Thread-194550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:26:25.496 [DEBUG] [Thread-194550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:26:25.496 [DEBUG] [Thread-194550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] client lang: <none>
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] server lang: <none>
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] kex follows: False
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] Compression: none
2026-04-12T19:26:25.497 [DEBUG] [Thread-194550] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:26:25.513 [DEBUG] [Thread-194550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:26:25.513 [DEBUG] [Thread-194550] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:26:25.513 [DEBUG] [Thread-194550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:26:25.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:26:25.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:26:25.514 [DEBUG] [Thread-194550] [transport.py] [_log()] userauth is OK
2026-04-12T19:26:25.514 [DEBUG] [Thread-194550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:26:25.514 [DEBUG] [Thread-194550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:26:25.514 [DEBUG] [Thread-194550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:26:25.514 [DEBUG] [Thread-194550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:26:25.523 [INFO] [Thread-194550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:26:25.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:26:26.326 [DEBUG] [Thread-194550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:26:26.326 [DEBUG] [Thread-194550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:26:26.326 [DEBUG] [Thread-194550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:26:26.367 [DEBUG] [Thread-194550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:26:26.367 [DEBUG] [Thread-194550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:26:26.369 [DEBUG] [Thread-194550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:26:26.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:26:26.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:26:26.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:26:26.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:26:26.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:26:26.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:26:26.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:26:26.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:26:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:26:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.726150 -999.00  +12.50   5.31     84   +9.80 1 1 1 2 1     0    0 2.55 -9.47 ZNESW 5.3 5.3 244.6 7.8 13.5 -20.1 13.4 -18.1 13.1 -18.1 13.3 -19.9
2026-04-12T19:26:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:26:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:26:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.726150
2026-04-12T19:26:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:26:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:26:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:26:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:26:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:26:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:26:08', tmtdew=3.22929, humidity=80.5029, cloud=0.0, wind=8.78796, temperature=12.3017, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:26:09', seeing=0.83, atlas_timestamp='2026-04-12T17:25:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:26:26.387 [DEBUG] [Thread-194550] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:26:26.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:26:26.469 [DEBUG] [Thread-194553] [transport.py] [_log()] starting thread (client mode): 0xae5e41c0
2026-04-12T19:26:26.470 [DEBUG] [Thread-194553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:26:26.483 [DEBUG] [Thread-194553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:26:26.483 [INFO] [Thread-194553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] client lang: <none>
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] server lang: <none>
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] kex follows: False
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] Compression: none
2026-04-12T19:26:26.491 [DEBUG] [Thread-194553] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:26:26.545 [DEBUG] [Thread-194553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:26:26.545 [DEBUG] [Thread-194553] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:26:26.545 [DEBUG] [Thread-194553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:26:26.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:26:26.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:26:26.602 [DEBUG] [Thread-194553] [transport.py] [_log()] userauth is OK
2026-04-12T19:26:26.602 [DEBUG] [Thread-194553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:26:26.602 [DEBUG] [Thread-194553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:26:26.602 [DEBUG] [Thread-194553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:26:26.602 [DEBUG] [Thread-194553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:26:26.616 [INFO] [Thread-194553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:26:26.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:26:26.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:26:27.448 [DEBUG] [Thread-194553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:26:27.448 [DEBUG] [Thread-194553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:26:27.495 [DEBUG] [Thread-194553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:26:27.495 [DEBUG] [Thread-194553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:26:27.503 [DEBUG] [Thread-194553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:26:27.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:26:27.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:26:27.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:26:27.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:26:27.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:26:27.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:26:27.535 [DEBUG] [Thread-194553] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:26:32.969 [DEBUG] [Thread-194555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:48.005 [DEBUG] [Thread-194556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:55.521 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:55.523 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:26:57.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:26:57.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:26:57.606 [DEBUG] [Thread-194557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:26:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 26, 44), 3.1184, 81.238, 0.0, 10.6934, 12.603, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:26:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:26:44
2026-04-12T19:26:59.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:26:59.421 [DEBUG] [Thread-194558] [transport.py] [_log()] starting thread (client mode): 0xae52e920
2026-04-12T19:26:59.422 [DEBUG] [Thread-194558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:26:59.442 [DEBUG] [Thread-194558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:26:59.442 [INFO] [Thread-194558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:26:59.445 [DEBUG] [Thread-194558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] client lang: <none>
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] server lang: <none>
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] kex follows: False
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] Compression: none
2026-04-12T19:26:59.446 [DEBUG] [Thread-194558] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:26:59.464 [DEBUG] [Thread-194558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:26:59.465 [DEBUG] [Thread-194558] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:26:59.465 [DEBUG] [Thread-194558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:26:59.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:26:59.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:26:59.466 [DEBUG] [Thread-194558] [transport.py] [_log()] userauth is OK
2026-04-12T19:26:59.466 [DEBUG] [Thread-194558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:26:59.466 [DEBUG] [Thread-194558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:26:59.466 [DEBUG] [Thread-194558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:26:59.466 [DEBUG] [Thread-194558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:26:59.493 [INFO] [Thread-194558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:26:59.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:27:00.267 [DEBUG] [Thread-194558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:27:00.267 [DEBUG] [Thread-194558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:27:00.267 [DEBUG] [Thread-194558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:27:00.309 [DEBUG] [Thread-194558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:27:00.309 [DEBUG] [Thread-194558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:27:00.311 [DEBUG] [Thread-194558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:27:00.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:27:00.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:27:00.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:27:00.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:27:00.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:27:00.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:27:00.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:27:00.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:27:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:27:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.726497 -999.00  +12.50   7.16     84   +9.80 1 1 1 2 1     0    0 2.50 -10.19 ZNESW 7.2 7.2 249.2 8.1 13.6 -19.8 13.4 -17.6 13.1 -17.9 13.3 -19.8
2026-04-12T19:27:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:27:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:27:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.726497
2026-04-12T19:27:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:27:00.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:27:00.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:27:00.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:27:00.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:27:00.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:26:44', tmtdew=3.1184, humidity=81.238, cloud=0.0, wind=10.6934, temperature=12.603, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:26:44', seeing=0.99, atlas_timestamp='2026-04-12T17:26:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:27:00.334 [DEBUG] [Thread-194558] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:27:00.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:27:00.419 [DEBUG] [Thread-194561] [transport.py] [_log()] starting thread (client mode): 0xae52e440
2026-04-12T19:27:00.419 [DEBUG] [Thread-194561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:27:00.433 [DEBUG] [Thread-194561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:27:00.433 [INFO] [Thread-194561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:27:00.440 [DEBUG] [Thread-194561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:27:00.440 [DEBUG] [Thread-194561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:27:00.440 [DEBUG] [Thread-194561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:27:00.440 [DEBUG] [Thread-194561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:27:00.440 [DEBUG] [Thread-194561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] client lang: <none>
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] server lang: <none>
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] kex follows: False
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] Compression: none
2026-04-12T19:27:00.441 [DEBUG] [Thread-194561] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:27:00.498 [DEBUG] [Thread-194561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:27:00.498 [DEBUG] [Thread-194561] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:27:00.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:27:00.498 [DEBUG] [Thread-194561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:27:00.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:27:00.555 [DEBUG] [Thread-194561] [transport.py] [_log()] userauth is OK
2026-04-12T19:27:00.555 [DEBUG] [Thread-194561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:27:00.555 [DEBUG] [Thread-194561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:27:00.555 [DEBUG] [Thread-194561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:27:00.555 [DEBUG] [Thread-194561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:27:00.570 [INFO] [Thread-194561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:27:00.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:27:00.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:27:01.453 [DEBUG] [Thread-194561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:27:01.453 [DEBUG] [Thread-194561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:27:01.501 [DEBUG] [Thread-194561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:27:01.501 [DEBUG] [Thread-194561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:27:01.509 [DEBUG] [Thread-194561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:27:01.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:27:01.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:27:01.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:27:01.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:27:01.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:27:01.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:27:01.542 [DEBUG] [Thread-194561] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:27:03.031 [DEBUG] [Thread-194563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:18.086 [DEBUG] [Thread-194564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:27:31.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:27:31.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:27:32.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 27, 19), 3.21828, 80.5695, 0.0, 9.21132, 12.3517, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:27:32.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:27:19
2026-04-12T19:27:33.121 [DEBUG] [Thread-194565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:27:33.497 [DEBUG] [Thread-194566] [transport.py] [_log()] starting thread (client mode): 0xae5b07f0
2026-04-12T19:27:33.498 [DEBUG] [Thread-194566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:27:33.515 [DEBUG] [Thread-194566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:27:33.515 [INFO] [Thread-194566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:27:33.519 [DEBUG] [Thread-194566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] client lang: <none>
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] server lang: <none>
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] kex follows: False
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:27:33.520 [DEBUG] [Thread-194566] [transport.py] [_log()] Compression: none
2026-04-12T19:27:33.521 [DEBUG] [Thread-194566] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:27:33.551 [DEBUG] [Thread-194566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:27:33.565 [DEBUG] [Thread-194566] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:27:33.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:27:33.568 [DEBUG] [Thread-194566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:27:33.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:27:33.570 [DEBUG] [Thread-194566] [transport.py] [_log()] userauth is OK
2026-04-12T19:27:33.570 [DEBUG] [Thread-194566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:27:33.570 [DEBUG] [Thread-194566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:27:33.571 [DEBUG] [Thread-194566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:27:33.571 [DEBUG] [Thread-194566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:27:33.606 [INFO] [Thread-194566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:27:33.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:27:34.369 [DEBUG] [Thread-194566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:27:34.369 [DEBUG] [Thread-194566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:27:34.370 [DEBUG] [Thread-194566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:27:34.410 [DEBUG] [Thread-194566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:27:34.410 [DEBUG] [Thread-194566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:27:34.413 [DEBUG] [Thread-194566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:27:34.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:27:34.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:27:34.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:27:34.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:27:34.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:27:34.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:27:34.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:27:34.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:27:34.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:27:34.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.726844 -999.00  +12.50   4.18     84   +9.80 1 1 1 2 1     0    0 2.49 -11.36 ZNESW 4.2 4.2 237.6 8.6 13.5 -19.5 13.4 -16.7 13.0 -17.3 13.3 -19.4
2026-04-12T19:27:34.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:27:34.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:27:34.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.726844
2026-04-12T19:27:34.445 [DEBUG] [Thread-194566] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:27:34.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:27:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:27:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:27:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:27:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:27:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:27:19', tmtdew=3.21828, humidity=80.5695, cloud=0.0, wind=9.21132, temperature=12.3517, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:27:20', seeing=0.89, atlas_timestamp='2026-04-12T17:26:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:27:34.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:27:34.542 [DEBUG] [Thread-194569] [transport.py] [_log()] starting thread (client mode): 0xb0f41b40
2026-04-12T19:27:34.542 [DEBUG] [Thread-194569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:27:34.556 [DEBUG] [Thread-194569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:27:34.556 [INFO] [Thread-194569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] client lang: <none>
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] server lang: <none>
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] kex follows: False
2026-04-12T19:27:34.564 [DEBUG] [Thread-194569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:27:34.565 [DEBUG] [Thread-194569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:27:34.565 [DEBUG] [Thread-194569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:27:34.565 [DEBUG] [Thread-194569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:27:34.565 [DEBUG] [Thread-194569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:27:34.565 [DEBUG] [Thread-194569] [transport.py] [_log()] Compression: none
2026-04-12T19:27:34.565 [DEBUG] [Thread-194569] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:27:34.622 [DEBUG] [Thread-194569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:27:34.622 [DEBUG] [Thread-194569] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:27:34.623 [DEBUG] [Thread-194569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:27:34.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:27:34.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:27:34.679 [DEBUG] [Thread-194569] [transport.py] [_log()] userauth is OK
2026-04-12T19:27:34.679 [DEBUG] [Thread-194569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:27:34.679 [DEBUG] [Thread-194569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:27:34.679 [DEBUG] [Thread-194569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:27:34.679 [DEBUG] [Thread-194569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:27:34.693 [INFO] [Thread-194569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:27:34.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:27:34.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:27:35.496 [DEBUG] [Thread-194569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:27:35.496 [DEBUG] [Thread-194569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:27:35.543 [DEBUG] [Thread-194569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:27:35.544 [DEBUG] [Thread-194569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:27:35.552 [DEBUG] [Thread-194569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:27:35.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:27:35.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:27:35.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:27:35.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:27:35.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:27:35.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:27:35.586 [DEBUG] [Thread-194569] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:27:35.691 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:43.604 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:47.695 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:48.152 [DEBUG] [Thread-194571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:55.725 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:55.726 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:27:57.999 [DEBUG] [Thread-194572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:28:03.243 [DEBUG] [Thread-194573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:28:05.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:28:05.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:28:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:28:06.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 27, 55), 3.21523, 80.586, 0.0, 9.26424, 12.3517, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:28:06.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:27:55
2026-04-12T19:28:07.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:28:07.451 [DEBUG] [Thread-194574] [transport.py] [_log()] starting thread (client mode): 0xae5b1f30
2026-04-12T19:28:07.451 [DEBUG] [Thread-194574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:28:07.472 [DEBUG] [Thread-194574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:28:07.472 [INFO] [Thread-194574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:28:07.473 [DEBUG] [Thread-194574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:28:07.473 [DEBUG] [Thread-194574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:28:07.473 [DEBUG] [Thread-194574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:28:07.473 [DEBUG] [Thread-194574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:07.473 [DEBUG] [Thread-194574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] client lang: <none>
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] server lang: <none>
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] kex follows: False
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] Compression: none
2026-04-12T19:28:07.474 [DEBUG] [Thread-194574] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:28:07.483 [DEBUG] [Thread-194574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:28:07.483 [DEBUG] [Thread-194574] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:28:07.483 [DEBUG] [Thread-194574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:28:07.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:28:07.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:28:07.484 [DEBUG] [Thread-194574] [transport.py] [_log()] userauth is OK
2026-04-12T19:28:07.484 [DEBUG] [Thread-194574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:28:07.484 [DEBUG] [Thread-194574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:28:07.484 [DEBUG] [Thread-194574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:28:07.484 [DEBUG] [Thread-194574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:28:07.496 [INFO] [Thread-194574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:28:07.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:28:08.294 [DEBUG] [Thread-194574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:28:08.296 [DEBUG] [Thread-194574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:28:08.297 [DEBUG] [Thread-194574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:28:08.333 [DEBUG] [Thread-194574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:28:08.333 [DEBUG] [Thread-194574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:28:08.335 [DEBUG] [Thread-194574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:28:08.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:28:08.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:28:08.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:28:08.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:28:08.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:28:08.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:28:08.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:28:08.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:28:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:28:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.727191 -999.00  +12.50   5.99     83   +9.80 1 1 1 2 1     0    0 2.41 -12.06 ZNESW 6.0 6.0 245.0 9.2 13.5 -18.8 13.5 -15.7 13.1 -16.5 13.3 -18.7
2026-04-12T19:28:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:28:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:28:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.727191
2026-04-12T19:28:08.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:28:08.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:28:08.361 [DEBUG] [Thread-194574] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:28:08.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:28:08.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:28:08.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:28:08.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:27:55', tmtdew=3.21523, humidity=80.586, cloud=0.0, wind=9.26424, temperature=12.3517, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:27:55', seeing=0.84, atlas_timestamp='2026-04-12T17:27:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:28:08.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:28:08.453 [DEBUG] [Thread-194577] [transport.py] [_log()] starting thread (client mode): 0xae5b12d0
2026-04-12T19:28:08.453 [DEBUG] [Thread-194577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:28:08.467 [DEBUG] [Thread-194577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:28:08.467 [INFO] [Thread-194577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:28:08.475 [DEBUG] [Thread-194577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:28:08.476 [DEBUG] [Thread-194577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] client lang: <none>
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] server lang: <none>
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] kex follows: False
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:28:08.477 [DEBUG] [Thread-194577] [transport.py] [_log()] Compression: none
2026-04-12T19:28:08.478 [DEBUG] [Thread-194577] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:28:08.538 [DEBUG] [Thread-194577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:28:08.539 [DEBUG] [Thread-194577] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:28:08.539 [DEBUG] [Thread-194577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:28:08.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:28:08.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:28:08.595 [DEBUG] [Thread-194577] [transport.py] [_log()] userauth is OK
2026-04-12T19:28:08.595 [DEBUG] [Thread-194577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:28:08.595 [DEBUG] [Thread-194577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:28:08.595 [DEBUG] [Thread-194577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:28:08.595 [DEBUG] [Thread-194577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:28:08.613 [INFO] [Thread-194577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:28:08.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:28:08.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:28:09.416 [DEBUG] [Thread-194577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:28:09.416 [DEBUG] [Thread-194577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:28:09.464 [DEBUG] [Thread-194577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:28:09.464 [DEBUG] [Thread-194577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:28:09.473 [DEBUG] [Thread-194577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:28:09.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:28:09.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:28:09.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:28:09.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:28:09.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:28:09.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:28:09.505 [DEBUG] [Thread-194577] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:28:18.272 [DEBUG] [Thread-194579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:28:33.307 [DEBUG] [Thread-194580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:28:39.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:28:39.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:28:39.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:28:40.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 28, 30), 3.22883, 80.5033, 0.0, 8.57628, 12.2855, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:28:40.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:28:30
2026-04-12T19:28:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:28:41.347 [DEBUG] [Thread-194581] [transport.py] [_log()] starting thread (client mode): 0xae51ba60
2026-04-12T19:28:41.347 [DEBUG] [Thread-194581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:28:41.364 [DEBUG] [Thread-194581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:28:41.364 [INFO] [Thread-194581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] client lang: <none>
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] server lang: <none>
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] kex follows: False
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] Compression: none
2026-04-12T19:28:41.368 [DEBUG] [Thread-194581] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:28:41.383 [DEBUG] [Thread-194581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:28:41.383 [DEBUG] [Thread-194581] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:28:41.383 [DEBUG] [Thread-194581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:28:41.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:28:41.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:28:41.384 [DEBUG] [Thread-194581] [transport.py] [_log()] userauth is OK
2026-04-12T19:28:41.384 [DEBUG] [Thread-194581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:28:41.384 [DEBUG] [Thread-194581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:28:41.384 [DEBUG] [Thread-194581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:28:41.384 [DEBUG] [Thread-194581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:28:41.401 [INFO] [Thread-194581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:28:41.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:28:42.207 [DEBUG] [Thread-194581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:28:42.207 [DEBUG] [Thread-194581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:28:42.207 [DEBUG] [Thread-194581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:28:42.247 [DEBUG] [Thread-194581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:28:42.247 [DEBUG] [Thread-194581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:28:42.249 [DEBUG] [Thread-194581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:28:42.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:28:42.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:28:42.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:28:42.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:28:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:28:42.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:28:42.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:28:42.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:28:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:28:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.727539 -999.00  +12.40   6.69     84   +9.80 1 1 1 2 1     0    0 2.44 -12.77 ZNESW 6.7 6.7 250.6 9.0 13.5 -18.0 13.4 -14.6 13.1 -15.4 13.3 -17.8
2026-04-12T19:28:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:28:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:28:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.727539
2026-04-12T19:28:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:28:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:28:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:28:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:28:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T19:28:42.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:28:30', tmtdew=3.22883, humidity=80.5033, cloud=0.0, wind=8.57628, temperature=12.2855, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:28:31', seeing=0.85, atlas_timestamp='2026-04-12T17:27:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:28:42.275 [DEBUG] [Thread-194581] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:28:42.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:28:42.365 [DEBUG] [Thread-194584] [transport.py] [_log()] starting thread (client mode): 0xae51ab90
2026-04-12T19:28:42.365 [DEBUG] [Thread-194584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:28:42.380 [DEBUG] [Thread-194584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:28:42.380 [INFO] [Thread-194584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:28:42.387 [DEBUG] [Thread-194584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] client lang: <none>
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] server lang: <none>
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] kex follows: False
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] Compression: none
2026-04-12T19:28:42.388 [DEBUG] [Thread-194584] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:28:42.445 [DEBUG] [Thread-194584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:28:42.446 [DEBUG] [Thread-194584] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:28:42.446 [DEBUG] [Thread-194584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:28:42.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:28:42.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:28:42.503 [DEBUG] [Thread-194584] [transport.py] [_log()] userauth is OK
2026-04-12T19:28:42.503 [DEBUG] [Thread-194584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:28:42.503 [DEBUG] [Thread-194584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:28:42.503 [DEBUG] [Thread-194584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:28:42.503 [DEBUG] [Thread-194584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:28:42.519 [INFO] [Thread-194584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:28:42.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:28:42.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:28:43.394 [DEBUG] [Thread-194584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:28:43.394 [DEBUG] [Thread-194584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:28:43.441 [DEBUG] [Thread-194584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:28:43.441 [DEBUG] [Thread-194584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:28:43.450 [DEBUG] [Thread-194584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:28:43.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:28:43.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:28:43.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:28:43.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:28:43.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:28:43.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:28:43.482 [DEBUG] [Thread-194584] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:28:48.330 [DEBUG] [Thread-194586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:28:55.936 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:28:55.938 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:28:58.332 [DEBUG] [Thread-194587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:03.367 [DEBUG] [Thread-194588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:10.166 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:29:13.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:29:13.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:29:14.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 29, 6), 3.22391, 80.5366, 0.0, 9.89928, 12.3353, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:29:14.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:29:06
2026-04-12T19:29:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:29:15.394 [DEBUG] [Thread-194589] [transport.py] [_log()] starting thread (client mode): 0xae52e680
2026-04-12T19:29:15.394 [DEBUG] [Thread-194589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:29:15.413 [DEBUG] [Thread-194589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:29:15.413 [INFO] [Thread-194589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:29:15.416 [DEBUG] [Thread-194589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:29:15.416 [DEBUG] [Thread-194589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:29:15.416 [DEBUG] [Thread-194589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:29:15.416 [DEBUG] [Thread-194589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:15.416 [DEBUG] [Thread-194589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] client lang: <none>
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] server lang: <none>
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] kex follows: False
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:29:15.417 [DEBUG] [Thread-194589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:29:15.418 [DEBUG] [Thread-194589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:29:15.418 [DEBUG] [Thread-194589] [transport.py] [_log()] Compression: none
2026-04-12T19:29:15.418 [DEBUG] [Thread-194589] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:29:15.432 [DEBUG] [Thread-194589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:29:15.432 [DEBUG] [Thread-194589] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:29:15.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:29:15.433 [DEBUG] [Thread-194589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:29:15.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:29:15.435 [DEBUG] [Thread-194589] [transport.py] [_log()] userauth is OK
2026-04-12T19:29:15.436 [DEBUG] [Thread-194589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:29:15.436 [DEBUG] [Thread-194589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:29:15.436 [DEBUG] [Thread-194589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:29:15.436 [DEBUG] [Thread-194589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:29:15.460 [INFO] [Thread-194589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:29:15.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:29:16.165 [DEBUG] [Thread-194589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:29:16.165 [DEBUG] [Thread-194589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:29:16.166 [DEBUG] [Thread-194589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:29:16.205 [DEBUG] [Thread-194589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:29:16.206 [DEBUG] [Thread-194589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:29:16.208 [DEBUG] [Thread-194589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:29:16.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:29:16.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:29:16.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:29:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:29:16.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:29:16.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:29:16.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:29:16.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:29:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:29:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.728233 -999.00  +12.50   4.09     84   +9.90 1 2 1 2 1     0    0 2.38 -14.16 ZNE.W 4.1 4.1 247.8 6.3 13.5 -15.9 13.5 -12.5 13.1 -13.5 13.4 -16.1
2026-04-12T19:29:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:29:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:29:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.728233
2026-04-12T19:29:16.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:29:16.237 [DEBUG] [Thread-194589] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:29:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:29:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:29:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:29:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:29:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:29:06', tmtdew=3.22391, humidity=80.5366, cloud=0.0, wind=9.89928, temperature=12.3353, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:29:06', seeing=0.96, atlas_timestamp='2026-04-12T17:28:39.331', atlas_cloud=2, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:29:16.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:29:16.346 [DEBUG] [Thread-194592] [transport.py] [_log()] starting thread (client mode): 0xb0f6eda0
2026-04-12T19:29:16.346 [DEBUG] [Thread-194592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:29:16.360 [DEBUG] [Thread-194592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:29:16.360 [INFO] [Thread-194592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] client lang: <none>
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] server lang: <none>
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] kex follows: False
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] Compression: none
2026-04-12T19:29:16.368 [DEBUG] [Thread-194592] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:29:16.426 [DEBUG] [Thread-194592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:29:16.426 [DEBUG] [Thread-194592] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:29:16.426 [DEBUG] [Thread-194592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:29:16.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:29:16.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:29:16.483 [DEBUG] [Thread-194592] [transport.py] [_log()] userauth is OK
2026-04-12T19:29:16.483 [DEBUG] [Thread-194592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:29:16.483 [DEBUG] [Thread-194592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:29:16.483 [DEBUG] [Thread-194592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:29:16.483 [DEBUG] [Thread-194592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:29:16.502 [INFO] [Thread-194592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:29:16.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:29:16.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:29:17.325 [DEBUG] [Thread-194592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:29:17.326 [DEBUG] [Thread-194592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:29:17.374 [DEBUG] [Thread-194592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:29:17.374 [DEBUG] [Thread-194592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:29:17.383 [DEBUG] [Thread-194592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:29:17.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:29:17.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:29:17.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:29:17.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:29:17.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:29:17.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:29:17.440 [DEBUG] [Thread-194592] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:29:18.389 [DEBUG] [Thread-194594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:19.003 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:23.092 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:33.491 [DEBUG] [Thread-194595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:29:47.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:29:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:29:48.535 [DEBUG] [Thread-194596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:48.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 29, 6), 3.22391, 80.5366, 0.0, 9.89928, 12.3353, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:29:48.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:29:06
2026-04-12T19:29:49.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:29:49.282 [DEBUG] [Thread-194597] [transport.py] [_log()] starting thread (client mode): 0xae5e7eb0
2026-04-12T19:29:49.282 [DEBUG] [Thread-194597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:29:49.302 [DEBUG] [Thread-194597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:29:49.302 [INFO] [Thread-194597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:29:49.305 [DEBUG] [Thread-194597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:29:49.305 [DEBUG] [Thread-194597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:29:49.305 [DEBUG] [Thread-194597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:29:49.305 [DEBUG] [Thread-194597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:49.305 [DEBUG] [Thread-194597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:49.305 [DEBUG] [Thread-194597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] client lang: <none>
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] server lang: <none>
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] kex follows: False
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] Compression: none
2026-04-12T19:29:49.306 [DEBUG] [Thread-194597] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:29:49.322 [DEBUG] [Thread-194597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:29:49.322 [DEBUG] [Thread-194597] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:29:49.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:29:49.323 [DEBUG] [Thread-194597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:29:49.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:29:49.324 [DEBUG] [Thread-194597] [transport.py] [_log()] userauth is OK
2026-04-12T19:29:49.324 [DEBUG] [Thread-194597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:29:49.324 [DEBUG] [Thread-194597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:29:49.324 [DEBUG] [Thread-194597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:29:49.324 [DEBUG] [Thread-194597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:29:49.343 [INFO] [Thread-194597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:29:49.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:29:50.095 [DEBUG] [Thread-194597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:29:50.095 [DEBUG] [Thread-194597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:29:50.096 [DEBUG] [Thread-194597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:29:50.135 [DEBUG] [Thread-194597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:29:50.135 [DEBUG] [Thread-194597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:29:50.138 [DEBUG] [Thread-194597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:29:50.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:29:50.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:29:50.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:29:50.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:29:50.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:29:50.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:29:50.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:29:50.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:29:50.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:29:50.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.728580 -999.00  +12.50   5.92     84   +9.80 1 2 1 2 1     0    0 2.34 -15.32 ZNE.W 5.9 5.9 232.3 7.8 13.6 -14.9 13.5 -11.5 13.2 -12.5 13.4 -15.1
2026-04-12T19:29:50.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:29:50.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:29:50.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.728580
2026-04-12T19:29:50.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:29:50.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:29:50.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:29:50.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:29:50.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:29:50.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:29:06', tmtdew=3.22391, humidity=80.5366, cloud=0.0, wind=9.89928, temperature=12.3353, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:29:42', seeing=0.93, atlas_timestamp='2026-04-12T17:29:09.312', atlas_cloud=2, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:29:50.162 [DEBUG] [Thread-194597] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:29:50.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:29:50.249 [DEBUG] [Thread-194600] [transport.py] [_log()] starting thread (client mode): 0xae5a7a30
2026-04-12T19:29:50.249 [DEBUG] [Thread-194600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:29:50.264 [DEBUG] [Thread-194600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:29:50.264 [INFO] [Thread-194600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] client lang: <none>
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] server lang: <none>
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] kex follows: False
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] Compression: none
2026-04-12T19:29:50.272 [DEBUG] [Thread-194600] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:29:50.329 [DEBUG] [Thread-194600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:29:50.329 [DEBUG] [Thread-194600] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:29:50.329 [DEBUG] [Thread-194600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:29:50.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:29:50.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:29:50.387 [DEBUG] [Thread-194600] [transport.py] [_log()] userauth is OK
2026-04-12T19:29:50.387 [DEBUG] [Thread-194600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:29:50.387 [DEBUG] [Thread-194600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:29:50.387 [DEBUG] [Thread-194600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:29:50.387 [DEBUG] [Thread-194600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:29:50.404 [INFO] [Thread-194600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:29:50.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:29:50.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:29:51.280 [DEBUG] [Thread-194600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:29:51.280 [DEBUG] [Thread-194600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:29:51.328 [DEBUG] [Thread-194600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:29:51.328 [DEBUG] [Thread-194600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:29:51.336 [DEBUG] [Thread-194600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:29:51.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:29:51.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:29:51.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:29:51.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:29:51.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:29:51.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:29:51.371 [DEBUG] [Thread-194600] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:29:56.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:56.143 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:29:58.648 [DEBUG] [Thread-194602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:03.565 [DEBUG] [Thread-194603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:18.683 [DEBUG] [Thread-194604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:21.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:30:21.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:30:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:30:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 29, 41), 3.14174, 81.1064, 0.0, 11.3638, 12.5706, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:30:22.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:29:41
2026-04-12T19:30:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:30:23.287 [DEBUG] [Thread-194605] [transport.py] [_log()] starting thread (client mode): 0xae5f0eb0
2026-04-12T19:30:23.288 [DEBUG] [Thread-194605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:30:23.308 [DEBUG] [Thread-194605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:30:23.308 [INFO] [Thread-194605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] client lang: <none>
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] server lang: <none>
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] kex follows: False
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] Compression: none
2026-04-12T19:30:23.312 [DEBUG] [Thread-194605] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:30:23.328 [DEBUG] [Thread-194605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:30:23.328 [DEBUG] [Thread-194605] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:30:23.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:30:23.329 [DEBUG] [Thread-194605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:30:23.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:30:23.329 [DEBUG] [Thread-194605] [transport.py] [_log()] userauth is OK
2026-04-12T19:30:23.329 [DEBUG] [Thread-194605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:30:23.329 [DEBUG] [Thread-194605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:30:23.329 [DEBUG] [Thread-194605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:30:23.329 [DEBUG] [Thread-194605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:30:23.339 [INFO] [Thread-194605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:30:23.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:30:24.596 [DEBUG] [Thread-194605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:30:24.596 [DEBUG] [Thread-194605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:30:24.596 [DEBUG] [Thread-194605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:30:24.638 [DEBUG] [Thread-194605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:30:24.638 [DEBUG] [Thread-194605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:30:24.640 [DEBUG] [Thread-194605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:30:24.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:30:24.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:30:24.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:30:24.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:30:24.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:30:24.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:30:24.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:30:24.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:30:24.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:30:24.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.728927 -999.00  +12.50   4.75     84   +9.80 1 2 1 2 1     0    0 2.35 -15.04 zNEsW 4.8 4.8 242.3 7.3 13.6 -13.8 13.6 -10.5 13.2 -11.6 13.4 -14.3
2026-04-12T19:30:24.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:30:24.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:30:24.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.728927
2026-04-12T19:30:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:30:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:30:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:30:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:30:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:30:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:29:41', tmtdew=3.14174, humidity=81.1064, cloud=0.0, wind=11.3638, temperature=12.5706, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:30:17', seeing=0.82, atlas_timestamp='2026-04-12T17:29:39.293', atlas_cloud=2, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:30:24.668 [DEBUG] [Thread-194605] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:30:24.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:30:24.751 [DEBUG] [Thread-194608] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa30
2026-04-12T19:30:24.751 [DEBUG] [Thread-194608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:30:24.765 [DEBUG] [Thread-194608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:30:24.765 [INFO] [Thread-194608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] client lang: <none>
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] server lang: <none>
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] kex follows: False
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:30:24.776 [DEBUG] [Thread-194608] [transport.py] [_log()] Compression: none
2026-04-12T19:30:24.777 [DEBUG] [Thread-194608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:30:24.837 [DEBUG] [Thread-194608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:30:24.837 [DEBUG] [Thread-194608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:30:24.837 [DEBUG] [Thread-194608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:30:24.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:30:24.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:30:24.894 [DEBUG] [Thread-194608] [transport.py] [_log()] userauth is OK
2026-04-12T19:30:24.894 [DEBUG] [Thread-194608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:30:24.894 [DEBUG] [Thread-194608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:30:24.894 [DEBUG] [Thread-194608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:30:24.894 [DEBUG] [Thread-194608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:30:24.908 [INFO] [Thread-194608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:30:24.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:30:24.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:30:25.728 [DEBUG] [Thread-194608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:30:25.729 [DEBUG] [Thread-194608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:30:25.776 [DEBUG] [Thread-194608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:30:25.776 [DEBUG] [Thread-194608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:30:25.785 [DEBUG] [Thread-194608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:30:25.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:30:25.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:30:25.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:30:25.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:30:25.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:30:25.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:30:25.817 [DEBUG] [Thread-194608] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:30:33.711 [DEBUG] [Thread-194610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:45.606 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:48.780 [DEBUG] [Thread-194611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:55.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:30:55.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:30:55.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:30:56.343 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:56.344 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 30, 17), 3.2251, 80.5366, 0.0, 11.2583, 12.385, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:30:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:30:17
2026-04-12T19:30:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:30:57.814 [DEBUG] [Thread-194612] [transport.py] [_log()] starting thread (client mode): 0xae5f2a10
2026-04-12T19:30:57.814 [DEBUG] [Thread-194612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:30:57.830 [DEBUG] [Thread-194612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:30:57.830 [INFO] [Thread-194612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] client lang: <none>
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] server lang: <none>
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] kex follows: False
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:30:57.834 [DEBUG] [Thread-194612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:30:57.835 [DEBUG] [Thread-194612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:30:57.835 [DEBUG] [Thread-194612] [transport.py] [_log()] Compression: none
2026-04-12T19:30:57.835 [DEBUG] [Thread-194612] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:30:57.854 [DEBUG] [Thread-194612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:30:57.855 [DEBUG] [Thread-194612] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:30:57.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:30:57.856 [DEBUG] [Thread-194612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:30:57.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:30:57.896 [DEBUG] [Thread-194612] [transport.py] [_log()] userauth is OK
2026-04-12T19:30:57.897 [DEBUG] [Thread-194612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:30:57.897 [DEBUG] [Thread-194612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:30:57.897 [DEBUG] [Thread-194612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:30:57.897 [DEBUG] [Thread-194612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:30:57.930 [INFO] [Thread-194612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:30:57.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:30:58.716 [DEBUG] [Thread-194612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:30:58.717 [DEBUG] [Thread-194612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:30:58.718 [DEBUG] [Thread-194612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:30:58.758 [DEBUG] [Thread-194612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:30:58.758 [DEBUG] [Thread-194612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:30:58.760 [DEBUG] [Thread-194612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:30:58.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:30:58.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:30:58.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:30:58.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:30:58.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:30:58.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:30:58.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:30:58.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:30:58.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:30:58.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.729274 -999.00  +12.50   5.66     83   +9.80 1 2 1 2 1     0    0 2.32 -15.88 zNEsW 5.7 5.7 235.0 9.4 13.6 -12.8 13.5 -9.7 13.2 -10.8 13.4 -13.5
2026-04-12T19:30:58.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:30:58.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:30:58.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.729274
2026-04-12T19:30:58.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:30:58.784 [DEBUG] [Thread-194612] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:30:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:30:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:30:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:30:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:30:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:30:17', tmtdew=3.2251, humidity=80.5366, cloud=0.0, wind=11.2583, temperature=12.385, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:30:53', seeing=0.97, atlas_timestamp='2026-04-12T17:30:09.274', atlas_cloud=2, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:30:58.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:30:58.870 [DEBUG] [Thread-194615] [transport.py] [_log()] starting thread (client mode): 0xae5e58d0
2026-04-12T19:30:58.870 [DEBUG] [Thread-194615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:30:58.885 [DEBUG] [Thread-194615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:30:58.885 [INFO] [Thread-194615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:30:58.892 [DEBUG] [Thread-194615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:30:58.892 [DEBUG] [Thread-194615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:30:58.892 [DEBUG] [Thread-194615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:30:58.892 [DEBUG] [Thread-194615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:58.892 [DEBUG] [Thread-194615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] client lang: <none>
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] server lang: <none>
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] kex follows: False
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] Compression: none
2026-04-12T19:30:58.893 [DEBUG] [Thread-194615] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:30:58.951 [DEBUG] [Thread-194615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:30:58.951 [DEBUG] [Thread-194615] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:30:58.951 [DEBUG] [Thread-194615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:30:58.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:30:58.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:30:59.007 [DEBUG] [Thread-194615] [transport.py] [_log()] userauth is OK
2026-04-12T19:30:59.007 [DEBUG] [Thread-194615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:30:59.007 [DEBUG] [Thread-194615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:30:59.007 [DEBUG] [Thread-194615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:30:59.007 [DEBUG] [Thread-194615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:30:59.020 [INFO] [Thread-194615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:30:59.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:30:59.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:30:59.030 [DEBUG] [Thread-194617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:59.682 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:30:59.846 [DEBUG] [Thread-194615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:30:59.846 [DEBUG] [Thread-194615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:30:59.893 [DEBUG] [Thread-194615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:30:59.893 [DEBUG] [Thread-194615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:30:59.902 [DEBUG] [Thread-194615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:30:59.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:30:59.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')
2026-04-12T19:30:59.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:30:59.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:30:59.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:30:59.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:30:59.935 [DEBUG] [Thread-194615] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:31:02.742 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:03.813 [DEBUG] [Thread-194618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:09.147 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:18.882 [DEBUG] [Thread-194619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:31:29.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:31:29.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:31:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 30, 52), 3.15466, 81.0403, 0.0, 10.3054, 12.6039, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:31:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:30:52
2026-04-12T19:31:31.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:31:32.069 [DEBUG] [Thread-194620] [transport.py] [_log()] starting thread (client mode): 0xae5e6170
2026-04-12T19:31:32.069 [DEBUG] [Thread-194620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:31:32.079 [DEBUG] [Thread-194620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:31:32.079 [INFO] [Thread-194620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] client lang: <none>
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] server lang: <none>
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] kex follows: False
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:31:32.083 [DEBUG] [Thread-194620] [transport.py] [_log()] Compression: none
2026-04-12T19:31:32.084 [DEBUG] [Thread-194620] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:31:32.102 [DEBUG] [Thread-194620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:31:32.102 [DEBUG] [Thread-194620] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:31:32.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:31:32.104 [DEBUG] [Thread-194620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:31:32.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:31:32.146 [DEBUG] [Thread-194620] [transport.py] [_log()] userauth is OK
2026-04-12T19:31:32.146 [DEBUG] [Thread-194620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:31:32.147 [DEBUG] [Thread-194620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:31:32.147 [DEBUG] [Thread-194620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:31:32.147 [DEBUG] [Thread-194620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:31:32.167 [INFO] [Thread-194620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:31:32.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:31:32.975 [DEBUG] [Thread-194620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:31:32.975 [DEBUG] [Thread-194620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:31:32.975 [DEBUG] [Thread-194620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:31:33.016 [DEBUG] [Thread-194620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:31:33.016 [DEBUG] [Thread-194620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:31:33.020 [DEBUG] [Thread-194620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:31:33.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:31:33.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:31:33.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:31:33.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:31:33.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:31:33.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:31:33.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:31:33.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:31:33.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:31:33.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.729622 -999.00  +12.50   4.98     84   +9.90 1 3 1 2 1     0    0 2.30 -16.24 ZNE.W 5.0 5.0 241.2 7.3 13.6 -12.0 13.6 -9.3 13.2 -10.4 13.4 -12.7
2026-04-12T19:31:33.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:31:33.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:31:33.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.729622
2026-04-12T19:31:33.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:31:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:31:33.050 [DEBUG] [Thread-194620] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:31:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:31:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:31:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:31:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:30:52', tmtdew=3.15466, humidity=81.0403, cloud=0.0, wind=10.3054, temperature=12.6039, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:31:28', seeing=0.89, atlas_timestamp='2026-04-12T17:30:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[-0.08125000000000071, -0.0417500000000004, -0.0442499999999999, -0.06350000000000122, -0.027999999999998693, -0.04724999999999824, -0.04499999999999993, -0.040749999999999176, -0.0235000000000003, 0.0884999999999998, -0.02674999999999983, -0.03500000000000014, 0.03500000000000014, -0.02975000000000172, -0.041999999999999815, -0.036000000000001364, 0.021249999999998437, 0.28999999999999915, 0.07199999999999918, 0.004249999999998977, -0.015000000000000568, -0.03675000000000139, -0.09574999999999889, -0.03824999999999967, 0.15300000000000047, nan, 0.16075000000000017, 0.020500000000000185, 0.050499999999999545, 0.07400000000000162, -0.022999999999999687, -0.0009999999999994458, 0.5647499999999992], zp_timestamp='2026-04-12T17:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:31:33.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:31:33.147 [DEBUG] [Thread-194623] [transport.py] [_log()] starting thread (client mode): 0xae5f22c0
2026-04-12T19:31:33.147 [DEBUG] [Thread-194623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:31:33.161 [DEBUG] [Thread-194623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:31:33.161 [INFO] [Thread-194623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] client lang: <none>
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] server lang: <none>
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] kex follows: False
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] Compression: none
2026-04-12T19:31:33.169 [DEBUG] [Thread-194623] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:31:33.226 [DEBUG] [Thread-194623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:31:33.227 [DEBUG] [Thread-194623] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:31:33.227 [DEBUG] [Thread-194623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:31:33.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:31:33.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:31:33.282 [DEBUG] [Thread-194623] [transport.py] [_log()] userauth is OK
2026-04-12T19:31:33.282 [DEBUG] [Thread-194623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:31:33.283 [DEBUG] [Thread-194623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:31:33.283 [DEBUG] [Thread-194623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:31:33.283 [DEBUG] [Thread-194623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:31:33.301 [INFO] [Thread-194623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:31:33.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:31:33.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:31:33.907 [DEBUG] [Thread-194625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:34.178 [DEBUG] [Thread-194623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:31:34.178 [DEBUG] [Thread-194623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:31:34.225 [DEBUG] [Thread-194623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:31:34.225 [DEBUG] [Thread-194623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:31:34.233 [DEBUG] [Thread-194623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:31:34.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:31:34.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:31:34.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:31:34.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:31:34.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:31:34.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:31:34.265 [DEBUG] [Thread-194623] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:31:48.947 [DEBUG] [Thread-194626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:56.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:56.550 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:31:59.263 [DEBUG] [Thread-194627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:32:03.976 [DEBUG] [Thread-194628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:32:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:32:04.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:32:04.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:32:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 31, 28), 3.2129, 80.6031, 0.0, 8.0118, 12.4352, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:32:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:31:28
2026-04-12T19:32:06.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:32:06.251 [DEBUG] [Thread-194629] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-12T19:32:06.251 [DEBUG] [Thread-194629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:32:06.270 [DEBUG] [Thread-194629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:32:06.270 [INFO] [Thread-194629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] client lang: <none>
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] server lang: <none>
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] kex follows: False
2026-04-12T19:32:06.273 [DEBUG] [Thread-194629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:32:06.274 [DEBUG] [Thread-194629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:32:06.274 [DEBUG] [Thread-194629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:32:06.274 [DEBUG] [Thread-194629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:32:06.274 [DEBUG] [Thread-194629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:32:06.274 [DEBUG] [Thread-194629] [transport.py] [_log()] Compression: none
2026-04-12T19:32:06.274 [DEBUG] [Thread-194629] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:32:06.290 [DEBUG] [Thread-194629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:32:06.291 [DEBUG] [Thread-194629] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:32:06.291 [DEBUG] [Thread-194629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:32:06.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:32:06.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:32:06.292 [DEBUG] [Thread-194629] [transport.py] [_log()] userauth is OK
2026-04-12T19:32:06.292 [DEBUG] [Thread-194629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:32:06.292 [DEBUG] [Thread-194629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:32:06.292 [DEBUG] [Thread-194629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:32:06.292 [DEBUG] [Thread-194629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:32:06.308 [INFO] [Thread-194629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:32:06.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:32:07.126 [DEBUG] [Thread-194629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:32:07.126 [DEBUG] [Thread-194629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:32:07.126 [DEBUG] [Thread-194629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:32:07.166 [DEBUG] [Thread-194629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:32:07.166 [DEBUG] [Thread-194629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:32:07.168 [DEBUG] [Thread-194629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:32:07.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:32:07.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:32:07.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:32:07.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:32:07.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:32:07.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:32:07.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:32:07.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:32:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:32:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.729969 -999.00  +12.50   7.24     83   +9.80 1 3 1 2 1     0    0 2.17 -17.57 zNE.W 7.2 7.2 249.2 9.0 13.7 -11.5 13.6 -8.9 13.2 -9.8 13.4 -12.3
2026-04-12T19:32:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:32:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:32:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.729969
2026-04-12T19:32:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:32:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:32:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:32:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:32:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:32:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:31:28', tmtdew=3.2129, humidity=80.6031, cloud=0.0, wind=8.0118, temperature=12.4352, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:31:28', seeing=0.89, atlas_timestamp='2026-04-12T17:31:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:32:07.187 [DEBUG] [Thread-194629] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:32:07.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:32:07.270 [DEBUG] [Thread-194632] [transport.py] [_log()] starting thread (client mode): 0xae535a20
2026-04-12T19:32:07.270 [DEBUG] [Thread-194632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:32:07.285 [DEBUG] [Thread-194632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:32:07.285 [INFO] [Thread-194632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:32:07.292 [DEBUG] [Thread-194632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:32:07.292 [DEBUG] [Thread-194632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:32:07.292 [DEBUG] [Thread-194632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:32:07.292 [DEBUG] [Thread-194632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:07.292 [DEBUG] [Thread-194632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:07.292 [DEBUG] [Thread-194632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] client lang: <none>
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] server lang: <none>
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] kex follows: False
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] Compression: none
2026-04-12T19:32:07.293 [DEBUG] [Thread-194632] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:32:07.349 [DEBUG] [Thread-194632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:32:07.349 [DEBUG] [Thread-194632] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:32:07.349 [DEBUG] [Thread-194632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:32:07.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:32:07.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:32:07.407 [DEBUG] [Thread-194632] [transport.py] [_log()] userauth is OK
2026-04-12T19:32:07.407 [DEBUG] [Thread-194632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:32:07.407 [DEBUG] [Thread-194632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:32:07.407 [DEBUG] [Thread-194632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:32:07.407 [DEBUG] [Thread-194632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:32:07.424 [INFO] [Thread-194632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:32:07.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:32:07.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:32:08.299 [DEBUG] [Thread-194632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:32:08.299 [DEBUG] [Thread-194632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:32:08.347 [DEBUG] [Thread-194632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:32:08.347 [DEBUG] [Thread-194632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:32:08.355 [DEBUG] [Thread-194632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:32:08.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:32:08.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:32:08.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:32:08.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:32:08.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:32:08.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:32:08.387 [DEBUG] [Thread-194632] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:32:19.003 [DEBUG] [Thread-194634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:32:34.113 [DEBUG] [Thread-194635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:32:38.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:32:38.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:32:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:32:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 32, 4), 3.20947, 80.6197, 0.0, 7.81776, 12.4186, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:32:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:32:04
2026-04-12T19:32:40.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:32:40.200 [DEBUG] [Thread-194636] [transport.py] [_log()] starting thread (client mode): 0xb0fcd810
2026-04-12T19:32:40.200 [DEBUG] [Thread-194636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:32:40.221 [DEBUG] [Thread-194636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:32:40.222 [INFO] [Thread-194636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:32:40.225 [DEBUG] [Thread-194636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:32:40.225 [DEBUG] [Thread-194636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:32:40.225 [DEBUG] [Thread-194636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:32:40.225 [DEBUG] [Thread-194636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] client lang: <none>
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] server lang: <none>
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] kex follows: False
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] Compression: none
2026-04-12T19:32:40.226 [DEBUG] [Thread-194636] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:32:40.242 [DEBUG] [Thread-194636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:32:40.242 [DEBUG] [Thread-194636] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:32:40.242 [DEBUG] [Thread-194636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:32:40.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:32:40.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:32:40.243 [DEBUG] [Thread-194636] [transport.py] [_log()] userauth is OK
2026-04-12T19:32:40.243 [DEBUG] [Thread-194636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:32:40.243 [DEBUG] [Thread-194636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:32:40.243 [DEBUG] [Thread-194636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:32:40.243 [DEBUG] [Thread-194636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:32:40.252 [INFO] [Thread-194636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:32:40.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:32:41.054 [DEBUG] [Thread-194636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:32:41.055 [DEBUG] [Thread-194636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:32:41.055 [DEBUG] [Thread-194636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:32:41.095 [DEBUG] [Thread-194636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:32:41.095 [DEBUG] [Thread-194636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:32:41.098 [DEBUG] [Thread-194636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:32:41.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:32:41.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:32:41.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:32:41.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:32:41.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:32:41.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:32:41.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.730663 -999.00  +12.50   6.53     84   +9.90 1 3 1 2 1     0    0 2.25 -18.98 .NESW 6.5 6.5 244.0 8.9 13.7 -10.6 13.6 -8.4 13.2 -9.4 13.5 -11.7
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.730663
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:32:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:32:04', tmtdew=3.20947, humidity=80.6197, cloud=0.0, wind=7.81776, temperature=12.4186, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:32:04', seeing=0.99, atlas_timestamp='2026-04-12T17:32:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:32:41.119 [DEBUG] [Thread-194636] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:32:41.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:32:41.201 [DEBUG] [Thread-194639] [transport.py] [_log()] starting thread (client mode): 0xae5198a0
2026-04-12T19:32:41.201 [DEBUG] [Thread-194639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:32:41.217 [DEBUG] [Thread-194639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:32:41.217 [INFO] [Thread-194639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] client lang: <none>
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] server lang: <none>
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] kex follows: False
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] Compression: none
2026-04-12T19:32:41.224 [DEBUG] [Thread-194639] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:32:41.281 [DEBUG] [Thread-194639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:32:41.281 [DEBUG] [Thread-194639] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:32:41.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:32:41.281 [DEBUG] [Thread-194639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:32:41.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:32:41.338 [DEBUG] [Thread-194639] [transport.py] [_log()] userauth is OK
2026-04-12T19:32:41.338 [DEBUG] [Thread-194639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:32:41.338 [DEBUG] [Thread-194639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:32:41.339 [DEBUG] [Thread-194639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:32:41.339 [DEBUG] [Thread-194639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:32:41.356 [INFO] [Thread-194639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:32:41.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:32:41.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:32:42.206 [DEBUG] [Thread-194639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:32:42.206 [DEBUG] [Thread-194639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:32:42.254 [DEBUG] [Thread-194639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:32:42.254 [DEBUG] [Thread-194639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:32:42.263 [DEBUG] [Thread-194639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:32:42.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:32:42.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:32:42.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:32:42.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:32:42.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:32:42.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:32:42.294 [DEBUG] [Thread-194639] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:32:49.135 [DEBUG] [Thread-194641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:32:56.755 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:32:56.756 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:32:59.614 [DEBUG] [Thread-194642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:33:04.183 [DEBUG] [Thread-194643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:33:12.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:33:12.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:33:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:33:13.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 32, 39), 3.10447, 81.3057, 0.0, 11.399, 12.5378, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:33:13.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:32:39
2026-04-12T19:33:14.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:33:14.285 [DEBUG] [Thread-194644] [transport.py] [_log()] starting thread (client mode): 0xb0f42e30
2026-04-12T19:33:14.286 [DEBUG] [Thread-194644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:33:14.295 [DEBUG] [Thread-194644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:33:14.295 [INFO] [Thread-194644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:33:14.301 [DEBUG] [Thread-194644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:33:14.301 [DEBUG] [Thread-194644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:33:14.301 [DEBUG] [Thread-194644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:33:14.301 [DEBUG] [Thread-194644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:14.301 [DEBUG] [Thread-194644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:14.301 [DEBUG] [Thread-194644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:14.301 [DEBUG] [Thread-194644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] client lang: <none>
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] server lang: <none>
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] kex follows: False
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] Compression: none
2026-04-12T19:33:14.302 [DEBUG] [Thread-194644] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:33:14.327 [DEBUG] [Thread-194644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:33:14.328 [DEBUG] [Thread-194644] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:33:14.329 [DEBUG] [Thread-194644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:33:14.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:33:14.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:33:14.333 [DEBUG] [Thread-194644] [transport.py] [_log()] userauth is OK
2026-04-12T19:33:14.333 [DEBUG] [Thread-194644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:33:14.333 [DEBUG] [Thread-194644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:33:14.333 [DEBUG] [Thread-194644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:33:14.333 [DEBUG] [Thread-194644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:33:14.350 [INFO] [Thread-194644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:33:14.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:33:15.146 [DEBUG] [Thread-194644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:33:15.146 [DEBUG] [Thread-194644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:33:15.146 [DEBUG] [Thread-194644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:33:15.187 [DEBUG] [Thread-194644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:33:15.187 [DEBUG] [Thread-194644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:33:15.189 [DEBUG] [Thread-194644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:33:15.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:33:15.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:33:15.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:33:15.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:33:15.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:33:15.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:33:15.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:33:15.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:33:15.239 [DEBUG] [Thread-194644] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:33:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:33:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.731011 -999.00  +12.50   6.67     84   +9.90 1 3 1 2 1     0    0 2.24 -17.57 .NESW 6.7 6.7 252.8 9.4 13.7 -10.2 13.7 -8.2 13.3 -9.2 13.5 -11.7
2026-04-12T19:33:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:33:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:33:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.731011
2026-04-12T19:33:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:33:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:33:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:33:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:33:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:33:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:32:39', tmtdew=3.10447, humidity=81.3057, cloud=0.0, wind=11.399, temperature=12.5378, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:32:40', seeing=0.89, atlas_timestamp='2026-04-12T17:32:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:33:15.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:33:15.349 [DEBUG] [Thread-194647] [transport.py] [_log()] starting thread (client mode): 0xb0fcf850
2026-04-12T19:33:15.349 [DEBUG] [Thread-194647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:33:15.363 [DEBUG] [Thread-194647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:33:15.363 [INFO] [Thread-194647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] client lang: <none>
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] server lang: <none>
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] kex follows: False
2026-04-12T19:33:15.370 [DEBUG] [Thread-194647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:33:15.371 [DEBUG] [Thread-194647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:33:15.371 [DEBUG] [Thread-194647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:33:15.371 [DEBUG] [Thread-194647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:33:15.371 [DEBUG] [Thread-194647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:33:15.371 [DEBUG] [Thread-194647] [transport.py] [_log()] Compression: none
2026-04-12T19:33:15.371 [DEBUG] [Thread-194647] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:33:15.429 [DEBUG] [Thread-194647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:33:15.429 [DEBUG] [Thread-194647] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:33:15.429 [DEBUG] [Thread-194647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:33:15.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:33:15.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:33:15.486 [DEBUG] [Thread-194647] [transport.py] [_log()] userauth is OK
2026-04-12T19:33:15.486 [DEBUG] [Thread-194647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:33:15.486 [DEBUG] [Thread-194647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:33:15.486 [DEBUG] [Thread-194647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:33:15.486 [DEBUG] [Thread-194647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:33:15.500 [INFO] [Thread-194647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:33:15.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:33:15.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:33:16.325 [DEBUG] [Thread-194647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:33:16.325 [DEBUG] [Thread-194647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:33:16.372 [DEBUG] [Thread-194647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:33:16.373 [DEBUG] [Thread-194647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:33:16.381 [DEBUG] [Thread-194647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:33:16.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:33:16.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:33:16.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:33:16.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:33:16.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:33:16.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:33:16.413 [DEBUG] [Thread-194647] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:33:19.210 [DEBUG] [Thread-194649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:33:34.251 [DEBUG] [Thread-194650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:33:46.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:33:46.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:33:46.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:33:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 33, 15), 3.20261, 80.6529, 0.0, 9.0702, 12.3855, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:33:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:33:15
2026-04-12T19:33:48.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:33:48.370 [DEBUG] [Thread-194651] [transport.py] [_log()] starting thread (client mode): 0xb0f400d0
2026-04-12T19:33:48.371 [DEBUG] [Thread-194651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:33:48.379 [DEBUG] [Thread-194651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:33:48.379 [INFO] [Thread-194651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] client lang: <none>
2026-04-12T19:33:48.401 [DEBUG] [Thread-194651] [transport.py] [_log()] server lang: <none>
2026-04-12T19:33:48.402 [DEBUG] [Thread-194651] [transport.py] [_log()] kex follows: False
2026-04-12T19:33:48.402 [DEBUG] [Thread-194651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:33:48.402 [DEBUG] [Thread-194651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:33:48.402 [DEBUG] [Thread-194651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:33:48.402 [DEBUG] [Thread-194651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:33:48.402 [DEBUG] [Thread-194651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:33:48.402 [DEBUG] [Thread-194651] [transport.py] [_log()] Compression: none
2026-04-12T19:33:48.403 [DEBUG] [Thread-194651] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:33:48.428 [DEBUG] [Thread-194651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:33:48.430 [DEBUG] [Thread-194651] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:33:48.431 [DEBUG] [Thread-194651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:33:48.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:33:48.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:33:48.435 [DEBUG] [Thread-194651] [transport.py] [_log()] userauth is OK
2026-04-12T19:33:48.435 [DEBUG] [Thread-194651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:33:48.436 [DEBUG] [Thread-194651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:33:48.436 [DEBUG] [Thread-194651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:33:48.436 [DEBUG] [Thread-194651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:33:48.459 [INFO] [Thread-194651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:33:48.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:33:49.221 [DEBUG] [Thread-194651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:33:49.221 [DEBUG] [Thread-194651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:33:49.223 [DEBUG] [Thread-194651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:33:49.262 [DEBUG] [Thread-194651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:33:49.262 [DEBUG] [Thread-194651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:33:49.265 [DEBUG] [Thread-194651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:33:49.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:33:49.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:33:49.279 [DEBUG] [Thread-194653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:33:49.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:33:49.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:33:49.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:33:49.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:33:49.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:33:49.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:33:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:33:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.731359 -999.00  +12.50   5.75     84   +9.90 1 3 1 2 1     0    0 2.26 -17.23 zNE.W 5.8 5.8 244.2 8.4 13.7 -10.0 13.7 -7.9 13.2 -9.0 13.6 -11.4
2026-04-12T19:33:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:33:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:33:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.731359
2026-04-12T19:33:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:33:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:33:49.297 [DEBUG] [Thread-194651] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:33:49.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:33:49.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:33:49.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:33:49.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:33:15', tmtdew=3.20261, humidity=80.6529, cloud=0.0, wind=9.0702, temperature=12.3855, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:33:15', seeing=0.86, atlas_timestamp='2026-04-12T17:33:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:33:49.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:33:49.399 [DEBUG] [Thread-194655] [transport.py] [_log()] starting thread (client mode): 0xae5f22c0
2026-04-12T19:33:49.399 [DEBUG] [Thread-194655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:33:49.413 [DEBUG] [Thread-194655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:33:49.413 [INFO] [Thread-194655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:33:49.421 [DEBUG] [Thread-194655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:33:49.421 [DEBUG] [Thread-194655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:33:49.421 [DEBUG] [Thread-194655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:33:49.421 [DEBUG] [Thread-194655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:49.421 [DEBUG] [Thread-194655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:33:49.421 [DEBUG] [Thread-194655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:49.421 [DEBUG] [Thread-194655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] client lang: <none>
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] server lang: <none>
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] kex follows: False
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:33:49.422 [DEBUG] [Thread-194655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:33:49.423 [DEBUG] [Thread-194655] [transport.py] [_log()] Compression: none
2026-04-12T19:33:49.423 [DEBUG] [Thread-194655] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:33:49.479 [DEBUG] [Thread-194655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:33:49.480 [DEBUG] [Thread-194655] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:33:49.481 [DEBUG] [Thread-194655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:33:49.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:33:49.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:33:49.534 [DEBUG] [Thread-194655] [transport.py] [_log()] userauth is OK
2026-04-12T19:33:49.534 [DEBUG] [Thread-194655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:33:49.534 [DEBUG] [Thread-194655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:33:49.534 [DEBUG] [Thread-194655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:33:49.534 [DEBUG] [Thread-194655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:33:49.549 [INFO] [Thread-194655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:33:49.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:33:49.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:33:50.408 [DEBUG] [Thread-194655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:33:50.408 [DEBUG] [Thread-194655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:33:50.456 [DEBUG] [Thread-194655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:33:50.457 [DEBUG] [Thread-194655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:33:50.465 [DEBUG] [Thread-194655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:33:50.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:33:50.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:33:50.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:33:50.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:33:50.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:33:50.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:33:50.500 [DEBUG] [Thread-194655] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:33:56.959 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:33:56.960 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:33:59.968 [DEBUG] [Thread-194657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:04.312 [DEBUG] [Thread-194658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:19.357 [DEBUG] [Thread-194659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:34:20.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:34:20.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:34:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 33, 50), 3.08845, 81.4061, 0.0, 10.7287, 12.638, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:34:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:33:50
2026-04-12T19:34:22.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:34:22.358 [DEBUG] [Thread-194660] [transport.py] [_log()] starting thread (client mode): 0xae5b3c10
2026-04-12T19:34:22.359 [DEBUG] [Thread-194660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:34:22.376 [DEBUG] [Thread-194660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:34:22.376 [INFO] [Thread-194660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:34:22.377 [DEBUG] [Thread-194660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:34:22.377 [DEBUG] [Thread-194660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:34:22.377 [DEBUG] [Thread-194660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:34:22.377 [DEBUG] [Thread-194660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:22.377 [DEBUG] [Thread-194660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:22.377 [DEBUG] [Thread-194660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:22.377 [DEBUG] [Thread-194660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] client lang: <none>
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] server lang: <none>
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] kex follows: False
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] Compression: none
2026-04-12T19:34:22.378 [DEBUG] [Thread-194660] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:34:22.390 [DEBUG] [Thread-194660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:34:22.391 [DEBUG] [Thread-194660] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:34:22.392 [DEBUG] [Thread-194660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:34:22.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:34:22.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:34:22.393 [DEBUG] [Thread-194660] [transport.py] [_log()] userauth is OK
2026-04-12T19:34:22.393 [DEBUG] [Thread-194660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:34:22.393 [DEBUG] [Thread-194660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:34:22.393 [DEBUG] [Thread-194660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:34:22.393 [DEBUG] [Thread-194660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:34:22.415 [INFO] [Thread-194660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:34:22.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:34:23.183 [DEBUG] [Thread-194660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:34:23.183 [DEBUG] [Thread-194660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:34:23.183 [DEBUG] [Thread-194660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:34:23.224 [DEBUG] [Thread-194660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:34:23.224 [DEBUG] [Thread-194660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:34:23.228 [DEBUG] [Thread-194660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:34:23.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:34:23.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:34:23.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:34:23.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:34:23.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:34:23.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:34:23.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:34:23.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:34:23.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:34:23.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.731705 -999.00  +12.50   5.11     83   +9.80 1 3 1 2 1     0    0 2.28 -17.37 .Ne.W 5.1 5.1 239.2 9.6 13.8 -9.7 13.7 -7.5 13.3 -8.8 13.6 -11.1
2026-04-12T19:34:23.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:34:23.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:34:23.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.731705
2026-04-12T19:34:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:34:23.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:34:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:34:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:34:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:34:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:33:50', tmtdew=3.08845, humidity=81.4061, cloud=0.0, wind=10.7287, temperature=12.638, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:33:51', seeing=0.81, atlas_timestamp='2026-04-12T17:33:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:34:23.254 [DEBUG] [Thread-194660] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:34:23.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:34:23.350 [DEBUG] [Thread-194663] [transport.py] [_log()] starting thread (client mode): 0xae5b0d30
2026-04-12T19:34:23.350 [DEBUG] [Thread-194663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:34:23.364 [DEBUG] [Thread-194663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:34:23.364 [INFO] [Thread-194663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:34:23.373 [DEBUG] [Thread-194663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] client lang: <none>
2026-04-12T19:34:23.374 [DEBUG] [Thread-194663] [transport.py] [_log()] server lang: <none>
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] kex follows: False
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] Compression: none
2026-04-12T19:34:23.375 [DEBUG] [Thread-194663] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:34:23.430 [DEBUG] [Thread-194663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:34:23.431 [DEBUG] [Thread-194663] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:34:23.431 [DEBUG] [Thread-194663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:34:23.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:34:23.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:34:23.486 [DEBUG] [Thread-194663] [transport.py] [_log()] userauth is OK
2026-04-12T19:34:23.486 [DEBUG] [Thread-194663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:34:23.486 [DEBUG] [Thread-194663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:34:23.486 [DEBUG] [Thread-194663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:34:23.487 [DEBUG] [Thread-194663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:34:23.504 [INFO] [Thread-194663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:34:23.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:34:23.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:34:24.333 [DEBUG] [Thread-194663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:34:24.333 [DEBUG] [Thread-194663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:34:24.381 [DEBUG] [Thread-194663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:34:24.381 [DEBUG] [Thread-194663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:34:24.389 [DEBUG] [Thread-194663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:34:24.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:34:24.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:34:24.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:34:24.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:34:24.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:34:24.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:34:24.423 [DEBUG] [Thread-194663] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:34:34.396 [DEBUG] [Thread-194665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:49.447 [DEBUG] [Thread-194666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:52.470 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:34:54.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:34:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:34:55.665 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 34, 26), 3.20441, 80.6367, 0.0, 7.9236, 12.3361, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:34:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:34:26
2026-04-12T19:34:56.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:34:56.309 [DEBUG] [Thread-194667] [transport.py] [_log()] starting thread (client mode): 0xae5f0760
2026-04-12T19:34:56.309 [DEBUG] [Thread-194667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:34:56.328 [DEBUG] [Thread-194667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:34:56.329 [INFO] [Thread-194667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:34:56.335 [DEBUG] [Thread-194667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:34:56.337 [DEBUG] [Thread-194667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:34:56.337 [DEBUG] [Thread-194667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:34:56.337 [DEBUG] [Thread-194667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:56.337 [DEBUG] [Thread-194667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:56.337 [DEBUG] [Thread-194667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:56.337 [DEBUG] [Thread-194667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] client lang: <none>
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] server lang: <none>
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] kex follows: False
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:34:56.338 [DEBUG] [Thread-194667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:34:56.339 [DEBUG] [Thread-194667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:34:56.339 [DEBUG] [Thread-194667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:34:56.340 [DEBUG] [Thread-194667] [transport.py] [_log()] Compression: none
2026-04-12T19:34:56.340 [DEBUG] [Thread-194667] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:34:56.350 [DEBUG] [Thread-194667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:34:56.350 [DEBUG] [Thread-194667] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:34:56.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:34:56.351 [DEBUG] [Thread-194667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:34:56.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:34:56.351 [DEBUG] [Thread-194667] [transport.py] [_log()] userauth is OK
2026-04-12T19:34:56.352 [DEBUG] [Thread-194667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:34:56.352 [DEBUG] [Thread-194667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:34:56.352 [DEBUG] [Thread-194667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:34:56.352 [DEBUG] [Thread-194667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:34:56.369 [INFO] [Thread-194667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:34:56.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:34:57.160 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:57.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:34:57.163 [DEBUG] [Thread-194667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:34:57.163 [DEBUG] [Thread-194667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:34:57.163 [DEBUG] [Thread-194667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:34:57.204 [DEBUG] [Thread-194667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:34:57.204 [DEBUG] [Thread-194667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:34:57.206 [DEBUG] [Thread-194667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:34:57.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:34:57.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:34:57.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:34:57.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:34:57.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:34:57.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:34:57.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:34:57.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:34:57.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:34:57.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.732052 -999.00  +12.50   4.82     84   +9.90 1 3 1 2 1     0    0 2.22 -18.17 .Ne.W 4.8 4.8 249.3 9.0 13.8 -9.2 13.7 -7.1 13.3 -8.6 13.6 -11.0
2026-04-12T19:34:57.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:34:57.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:34:57.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.732052
2026-04-12T19:34:57.237 [DEBUG] [Thread-194667] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:34:57.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:34:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:34:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:34:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:34:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:34:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:34:26', tmtdew=3.20441, humidity=80.6367, cloud=0.0, wind=7.9236, temperature=12.3361, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:34:26', seeing=0.88, atlas_timestamp='2026-04-12T17:34:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:34:57.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:34:57.354 [DEBUG] [Thread-194670] [transport.py] [_log()] starting thread (client mode): 0xb0f40ee0
2026-04-12T19:34:57.354 [DEBUG] [Thread-194670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:34:57.368 [DEBUG] [Thread-194670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:34:57.368 [INFO] [Thread-194670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] client lang: <none>
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] server lang: <none>
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] kex follows: False
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:34:57.376 [DEBUG] [Thread-194670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:34:57.377 [DEBUG] [Thread-194670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:34:57.377 [DEBUG] [Thread-194670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:34:57.377 [DEBUG] [Thread-194670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:34:57.377 [DEBUG] [Thread-194670] [transport.py] [_log()] Compression: none
2026-04-12T19:34:57.377 [DEBUG] [Thread-194670] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:34:57.434 [DEBUG] [Thread-194670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:34:57.434 [DEBUG] [Thread-194670] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:34:57.435 [DEBUG] [Thread-194670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:34:57.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:34:57.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:34:57.490 [DEBUG] [Thread-194670] [transport.py] [_log()] userauth is OK
2026-04-12T19:34:57.490 [DEBUG] [Thread-194670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:34:57.490 [DEBUG] [Thread-194670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:34:57.490 [DEBUG] [Thread-194670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:34:57.490 [DEBUG] [Thread-194670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:34:57.509 [INFO] [Thread-194670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:34:57.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:34:57.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:34:58.310 [DEBUG] [Thread-194670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:34:58.310 [DEBUG] [Thread-194670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:34:58.358 [DEBUG] [Thread-194670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:34:58.358 [DEBUG] [Thread-194670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:34:58.367 [DEBUG] [Thread-194670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:34:58.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:34:58.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:34:58.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:34:58.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:34:58.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:34:58.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:34:58.399 [DEBUG] [Thread-194670] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:35:00.561 [DEBUG] [Thread-194672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:00.744 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:04.477 [DEBUG] [Thread-194673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:06.119 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:19.560 [DEBUG] [Thread-194674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:25.611 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:35:28.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:35:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:35:29.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 35, 1), 3.18816, 80.7362, 0.0, 8.24112, 12.419, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:35:29.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:35:01
2026-04-12T19:35:30.086 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:35:30.336 [DEBUG] [Thread-194675] [transport.py] [_log()] starting thread (client mode): 0xb0f42170
2026-04-12T19:35:30.336 [DEBUG] [Thread-194675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:35:30.352 [DEBUG] [Thread-194675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:35:30.352 [INFO] [Thread-194675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:35:30.356 [DEBUG] [Thread-194675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:35:30.356 [DEBUG] [Thread-194675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] client lang: <none>
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] server lang: <none>
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] kex follows: False
2026-04-12T19:35:30.357 [DEBUG] [Thread-194675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:35:30.358 [DEBUG] [Thread-194675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:35:30.358 [DEBUG] [Thread-194675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:35:30.358 [DEBUG] [Thread-194675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:35:30.358 [DEBUG] [Thread-194675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:35:30.358 [DEBUG] [Thread-194675] [transport.py] [_log()] Compression: none
2026-04-12T19:35:30.358 [DEBUG] [Thread-194675] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:35:30.388 [DEBUG] [Thread-194675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:35:30.390 [DEBUG] [Thread-194675] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:35:30.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:35:30.391 [DEBUG] [Thread-194675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:35:30.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:35:30.395 [DEBUG] [Thread-194675] [transport.py] [_log()] userauth is OK
2026-04-12T19:35:30.395 [DEBUG] [Thread-194675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:35:30.395 [DEBUG] [Thread-194675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:35:30.395 [DEBUG] [Thread-194675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:35:30.395 [DEBUG] [Thread-194675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:35:30.422 [INFO] [Thread-194675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:35:30.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:35:31.240 [DEBUG] [Thread-194675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:35:31.240 [DEBUG] [Thread-194675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:35:31.241 [DEBUG] [Thread-194675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:35:31.281 [DEBUG] [Thread-194675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:35:31.281 [DEBUG] [Thread-194675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:35:31.285 [DEBUG] [Thread-194675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:35:31.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:35:31.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:35:31.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:35:31.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:35:31.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:35:31.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:35:31.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:35:31.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:35:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:35:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.732400 -999.00  +12.50   4.96     84   +9.90 1 3 1 2 1     0    0 2.13 -18.82 .NE.W 5.0 5.0 227.2 8.6 13.8 -9.0 13.7 -7.0 13.3 -8.5 13.6 -10.9
2026-04-12T19:35:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:35:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:35:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.732400
2026-04-12T19:35:31.316 [DEBUG] [Thread-194675] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:35:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:35:31.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:35:31.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:35:31.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:35:31.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:35:31.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:35:01', tmtdew=3.18816, humidity=80.7362, cloud=0.0, wind=8.24112, temperature=12.419, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:35:02', seeing=0.73, atlas_timestamp='2026-04-12T17:34:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:35:31.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:35:31.424 [DEBUG] [Thread-194678] [transport.py] [_log()] starting thread (client mode): 0xb0fcf850
2026-04-12T19:35:31.424 [DEBUG] [Thread-194678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:35:31.441 [DEBUG] [Thread-194678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:35:31.441 [INFO] [Thread-194678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:35:31.448 [DEBUG] [Thread-194678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:35:31.448 [DEBUG] [Thread-194678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] client lang: <none>
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] server lang: <none>
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] kex follows: False
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:35:31.449 [DEBUG] [Thread-194678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:35:31.450 [DEBUG] [Thread-194678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:35:31.450 [DEBUG] [Thread-194678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:35:31.450 [DEBUG] [Thread-194678] [transport.py] [_log()] Compression: none
2026-04-12T19:35:31.450 [DEBUG] [Thread-194678] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:35:31.506 [DEBUG] [Thread-194678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:35:31.507 [DEBUG] [Thread-194678] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:35:31.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:35:31.508 [DEBUG] [Thread-194678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:35:31.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:35:31.563 [DEBUG] [Thread-194678] [transport.py] [_log()] userauth is OK
2026-04-12T19:35:31.563 [DEBUG] [Thread-194678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:35:31.563 [DEBUG] [Thread-194678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:35:31.563 [DEBUG] [Thread-194678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:35:31.563 [DEBUG] [Thread-194678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:35:31.584 [INFO] [Thread-194678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:35:31.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:35:31.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:35:32.404 [DEBUG] [Thread-194678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:35:32.404 [DEBUG] [Thread-194678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:35:32.449 [DEBUG] [Thread-194678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:35:32.450 [DEBUG] [Thread-194678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:35:32.458 [DEBUG] [Thread-194678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:35:32.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:35:32.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:35:32.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:35:32.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:35:32.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:35:32.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:35:32.529 [DEBUG] [Thread-194678] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:35:34.592 [DEBUG] [Thread-194680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:49.474 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:49.688 [DEBUG] [Thread-194681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:53.850 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:57.364 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:57.366 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:35:59.989 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:00.960 [DEBUG] [Thread-194682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:36:02.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:36:02.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:36:03.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 35, 37), 3.07104, 81.5056, 0.0, 9.38808, 12.6711, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:36:03.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:35:37
2026-04-12T19:36:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:36:04.378 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:04.435 [DEBUG] [Thread-194683] [transport.py] [_log()] starting thread (client mode): 0xae536f20
2026-04-12T19:36:04.435 [DEBUG] [Thread-194683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:36:04.448 [DEBUG] [Thread-194683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:36:04.448 [INFO] [Thread-194683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:36:04.452 [DEBUG] [Thread-194683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:36:04.452 [DEBUG] [Thread-194683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] client lang: <none>
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] server lang: <none>
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] kex follows: False
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:36:04.453 [DEBUG] [Thread-194683] [transport.py] [_log()] Compression: none
2026-04-12T19:36:04.454 [DEBUG] [Thread-194683] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:36:04.475 [DEBUG] [Thread-194683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:36:04.478 [DEBUG] [Thread-194683] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:36:04.479 [DEBUG] [Thread-194683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:36:04.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:36:04.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:36:04.484 [DEBUG] [Thread-194683] [transport.py] [_log()] userauth is OK
2026-04-12T19:36:04.484 [DEBUG] [Thread-194683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:36:04.485 [DEBUG] [Thread-194683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:36:04.485 [DEBUG] [Thread-194683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:36:04.485 [DEBUG] [Thread-194683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:36:04.522 [INFO] [Thread-194683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:36:04.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:36:04.716 [DEBUG] [Thread-194685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:05.348 [DEBUG] [Thread-194683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:36:05.348 [DEBUG] [Thread-194683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:36:05.349 [DEBUG] [Thread-194683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:36:05.389 [DEBUG] [Thread-194683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:36:05.389 [DEBUG] [Thread-194683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:36:05.392 [DEBUG] [Thread-194683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:36:05.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:36:05.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:36:05.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:36:05.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:36:05.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:36:05.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:36:05.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:36:05.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:36:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:36:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.733094 -999.00  +12.60   3.74     84  +10.00 1 3 1 2 1     0    0 2.13 -20.52 ZN..W 3.7 3.7 220.0 7.6 13.8 -8.7 13.8 -6.8 13.3 -8.6 13.7 -10.9
2026-04-12T19:36:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:36:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:36:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.733094
2026-04-12T19:36:05.419 [DEBUG] [Thread-194683] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:36:05.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:36:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:36:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:36:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:36:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:36:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:35:37', tmtdew=3.07104, humidity=81.5056, cloud=0.0, wind=9.38808, temperature=12.6711, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:35:37', seeing=0.91, atlas_timestamp='2026-04-12T17:35:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:36:05.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:36:05.533 [DEBUG] [Thread-194687] [transport.py] [_log()] starting thread (client mode): 0xae5a5600
2026-04-12T19:36:05.533 [DEBUG] [Thread-194687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:36:05.548 [DEBUG] [Thread-194687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:36:05.548 [INFO] [Thread-194687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:36:05.556 [DEBUG] [Thread-194687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:36:05.556 [DEBUG] [Thread-194687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:36:05.556 [DEBUG] [Thread-194687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:36:05.556 [DEBUG] [Thread-194687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] client lang: <none>
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] server lang: <none>
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] kex follows: False
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:36:05.557 [DEBUG] [Thread-194687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:36:05.558 [DEBUG] [Thread-194687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:36:05.558 [DEBUG] [Thread-194687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:36:05.558 [DEBUG] [Thread-194687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:36:05.558 [DEBUG] [Thread-194687] [transport.py] [_log()] Compression: none
2026-04-12T19:36:05.558 [DEBUG] [Thread-194687] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:36:05.618 [DEBUG] [Thread-194687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:36:05.619 [DEBUG] [Thread-194687] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:36:05.619 [DEBUG] [Thread-194687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:36:05.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:36:05.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:36:05.673 [DEBUG] [Thread-194687] [transport.py] [_log()] userauth is OK
2026-04-12T19:36:05.673 [DEBUG] [Thread-194687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:36:05.673 [DEBUG] [Thread-194687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:36:05.674 [DEBUG] [Thread-194687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:36:05.674 [DEBUG] [Thread-194687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:36:05.687 [INFO] [Thread-194687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:36:05.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:36:05.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:36:06.519 [DEBUG] [Thread-194687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:36:06.520 [DEBUG] [Thread-194687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:36:06.568 [DEBUG] [Thread-194687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:36:06.568 [DEBUG] [Thread-194687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:36:06.577 [DEBUG] [Thread-194687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:36:06.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:36:06.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:36:06.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:36:06.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:36:06.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:36:06.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:36:06.612 [DEBUG] [Thread-194687] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:36:19.745 [DEBUG] [Thread-194689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:34.950 [DEBUG] [Thread-194690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:36.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:36:36.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:36:36.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:36:37.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 36, 13), 3.18398, 80.7528, 0.0, 9.26424, 12.3692, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:36:37.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:36:13
2026-04-12T19:36:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:36:38.627 [DEBUG] [Thread-194691] [transport.py] [_log()] starting thread (client mode): 0xb0fcf0d0
2026-04-12T19:36:38.627 [DEBUG] [Thread-194691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:36:38.636 [DEBUG] [Thread-194691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:36:38.636 [INFO] [Thread-194691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:36:38.644 [DEBUG] [Thread-194691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] client lang: <none>
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] server lang: <none>
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] kex follows: False
2026-04-12T19:36:38.645 [DEBUG] [Thread-194691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:36:38.646 [DEBUG] [Thread-194691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:36:38.646 [DEBUG] [Thread-194691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:36:38.646 [DEBUG] [Thread-194691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:36:38.646 [DEBUG] [Thread-194691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:36:38.646 [DEBUG] [Thread-194691] [transport.py] [_log()] Compression: none
2026-04-12T19:36:38.646 [DEBUG] [Thread-194691] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:36:38.690 [DEBUG] [Thread-194691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:36:38.698 [DEBUG] [Thread-194691] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:36:38.700 [DEBUG] [Thread-194691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:36:38.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:36:38.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:36:38.708 [DEBUG] [Thread-194691] [transport.py] [_log()] userauth is OK
2026-04-12T19:36:38.709 [DEBUG] [Thread-194691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:36:38.709 [DEBUG] [Thread-194691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:36:38.709 [DEBUG] [Thread-194691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:36:38.709 [DEBUG] [Thread-194691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:36:38.737 [INFO] [Thread-194691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:36:38.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:36:39.560 [DEBUG] [Thread-194691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:36:39.560 [DEBUG] [Thread-194691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:36:39.562 [DEBUG] [Thread-194691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:36:39.601 [DEBUG] [Thread-194691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:36:39.601 [DEBUG] [Thread-194691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:36:39.604 [DEBUG] [Thread-194691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:36:39.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:36:39.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:36:39.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:36:39.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:36:39.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:36:39.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:36:39.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:36:39.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:36:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:36:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.733441 -999.00  +12.60   5.03     84  +10.00 1 3 1 2 1     0    0 2.15 -18.22 zN..W 5.0 5.0 224.0 7.9 13.8 -8.6 13.8 -6.9 13.4 -8.8 13.7 -11.0
2026-04-12T19:36:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:36:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:36:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.733441
2026-04-12T19:36:39.647 [DEBUG] [Thread-194691] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:36:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:36:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:36:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:36:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:36:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:36:39.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:36:13', tmtdew=3.18398, humidity=80.7528, cloud=0.0, wind=9.26424, temperature=12.3692, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:36:13', seeing=0.84, atlas_timestamp='2026-04-12T17:36:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:36:39.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:36:39.771 [DEBUG] [Thread-194694] [transport.py] [_log()] starting thread (client mode): 0xae536b00
2026-04-12T19:36:39.771 [DEBUG] [Thread-194694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:36:39.785 [DEBUG] [Thread-194694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:36:39.785 [INFO] [Thread-194694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:36:39.793 [DEBUG] [Thread-194694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:36:39.793 [DEBUG] [Thread-194694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:36:39.793 [DEBUG] [Thread-194694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:36:39.793 [DEBUG] [Thread-194694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] client lang: <none>
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] server lang: <none>
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] kex follows: False
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:36:39.794 [DEBUG] [Thread-194694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:36:39.795 [DEBUG] [Thread-194694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:36:39.795 [DEBUG] [Thread-194694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:36:39.795 [DEBUG] [Thread-194694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:36:39.795 [DEBUG] [Thread-194694] [transport.py] [_log()] Compression: none
2026-04-12T19:36:39.795 [DEBUG] [Thread-194694] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:36:39.850 [DEBUG] [Thread-194694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:36:39.850 [DEBUG] [Thread-194694] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:36:39.851 [DEBUG] [Thread-194694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:36:39.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:36:39.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:36:39.906 [DEBUG] [Thread-194694] [transport.py] [_log()] userauth is OK
2026-04-12T19:36:39.906 [DEBUG] [Thread-194694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:36:39.906 [DEBUG] [Thread-194694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:36:39.906 [DEBUG] [Thread-194694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:36:39.906 [DEBUG] [Thread-194694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:36:39.929 [INFO] [Thread-194694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:36:39.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:36:39.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:36:40.775 [DEBUG] [Thread-194694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:36:40.776 [DEBUG] [Thread-194694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:36:40.823 [DEBUG] [Thread-194694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:36:40.823 [DEBUG] [Thread-194694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:36:40.832 [DEBUG] [Thread-194694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:36:40.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:36:40.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:36:40.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:36:40.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:36:40.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:36:40.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:36:40.870 [DEBUG] [Thread-194694] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:36:49.998 [DEBUG] [Thread-194696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:57.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:36:57.571 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:01.497 [DEBUG] [Thread-194697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:05.077 [DEBUG] [Thread-194698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:10.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:37:10.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:37:10.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:37:12.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 36, 48), 3.06951, 81.5055, 0.0, 10.1642, 12.6047, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:37:12.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:36:48
2026-04-12T19:37:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:37:12.970 [DEBUG] [Thread-194699] [transport.py] [_log()] starting thread (client mode): 0xb0f42ef0
2026-04-12T19:37:12.971 [DEBUG] [Thread-194699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:37:12.980 [DEBUG] [Thread-194699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:37:12.980 [INFO] [Thread-194699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:37:12.984 [DEBUG] [Thread-194699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] client lang: <none>
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] server lang: <none>
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] kex follows: False
2026-04-12T19:37:12.985 [DEBUG] [Thread-194699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:37:12.986 [DEBUG] [Thread-194699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:37:12.986 [DEBUG] [Thread-194699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:37:12.986 [DEBUG] [Thread-194699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:37:12.986 [DEBUG] [Thread-194699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:37:12.986 [DEBUG] [Thread-194699] [transport.py] [_log()] Compression: none
2026-04-12T19:37:12.986 [DEBUG] [Thread-194699] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:37:13.014 [DEBUG] [Thread-194699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:37:13.017 [DEBUG] [Thread-194699] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:37:13.018 [DEBUG] [Thread-194699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:37:13.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:37:13.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:37:13.022 [DEBUG] [Thread-194699] [transport.py] [_log()] userauth is OK
2026-04-12T19:37:13.022 [DEBUG] [Thread-194699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:37:13.022 [DEBUG] [Thread-194699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:37:13.022 [DEBUG] [Thread-194699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:37:13.022 [DEBUG] [Thread-194699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:37:13.046 [INFO] [Thread-194699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:37:13.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:37:13.393 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:13.836 [DEBUG] [Thread-194699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:37:13.836 [DEBUG] [Thread-194699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:37:13.837 [DEBUG] [Thread-194699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:37:13.878 [DEBUG] [Thread-194699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:37:13.878 [DEBUG] [Thread-194699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:37:13.881 [DEBUG] [Thread-194699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:37:13.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:37:13.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:37:13.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:37:13.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:37:13.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:37:13.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:37:13.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:37:13.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:37:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:37:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.733789 -999.00  +12.60   5.61     84  +10.00 1 3 1 2 1     0    0 2.16 -17.78 zN..W 5.6 5.6 211.0 7.8 13.8 -8.6 13.8 -7.6 13.4 -9.1 13.6 -11.4
2026-04-12T19:37:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:37:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:37:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.733789
2026-04-12T19:37:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:37:13.906 [DEBUG] [Thread-194699] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:37:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:37:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:37:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:37:13.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:37:13.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:36:48', tmtdew=3.06951, humidity=81.5055, cloud=0.0, wind=10.1642, temperature=12.6047, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:36:49', seeing=0.93, atlas_timestamp='2026-04-12T17:36:39.370', atlas_cloud=3, atlas_rain=1, zp_data=[0.7127499999999998, 0.6022500000000006, 1.2247500000000002, 1.1884999999999994, 0.6535000000000002, 0.35025000000000084, 0.26699999999999946, 0.22775000000000034, 0.3254999999999999, 0.8085000000000004, 0.30574999999999974, nan, 1.1909999999999998, 0.12325000000000053, 0.026999999999999247, 0.11999999999999922, 0.1462500000000002, nan, 0.621999999999999, nan, 0.4704999999999986, 0.0337499999999995, -0.042749999999999844, 0.06675000000000075, 0.2879999999999985, nan, nan, 0.3595000000000006, 0.21700000000000053, 0.07000000000000028, 0.0070000000000014495, 0.11450000000000138, nan], zp_timestamp='2026-04-12T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:37:13.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:37:14.008 [DEBUG] [Thread-194702] [transport.py] [_log()] starting thread (client mode): 0xb0fcd2d0
2026-04-12T19:37:14.008 [DEBUG] [Thread-194702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:37:14.023 [DEBUG] [Thread-194702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:37:14.023 [INFO] [Thread-194702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] client lang: <none>
2026-04-12T19:37:14.030 [DEBUG] [Thread-194702] [transport.py] [_log()] server lang: <none>
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] kex follows: False
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] Compression: none
2026-04-12T19:37:14.031 [DEBUG] [Thread-194702] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:37:14.090 [DEBUG] [Thread-194702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:37:14.091 [DEBUG] [Thread-194702] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:37:14.091 [DEBUG] [Thread-194702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:37:14.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:37:14.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:37:14.145 [DEBUG] [Thread-194702] [transport.py] [_log()] userauth is OK
2026-04-12T19:37:14.146 [DEBUG] [Thread-194702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:37:14.146 [DEBUG] [Thread-194702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:37:14.146 [DEBUG] [Thread-194702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:37:14.146 [DEBUG] [Thread-194702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:37:14.169 [INFO] [Thread-194702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:37:14.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:37:14.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:37:14.980 [DEBUG] [Thread-194702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:37:14.981 [DEBUG] [Thread-194702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:37:15.028 [DEBUG] [Thread-194702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:37:15.029 [DEBUG] [Thread-194702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:37:15.038 [DEBUG] [Thread-194702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:37:15.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:37: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')
2026-04-12T19:37:15.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:37:15.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:37:15.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:37:15.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:37:15.075 [DEBUG] [Thread-194702] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:37:17.475 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:20.119 [DEBUG] [Thread-194704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:35.291 [DEBUG] [Thread-194705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:45.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:37:45.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:37:45.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:37:46.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 37, 24), 3.17337, 80.8194, 0.0, 8.541, 12.4358, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:37:46.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:37:24
2026-04-12T19:37:46.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:37:47.008 [DEBUG] [Thread-194706] [transport.py] [_log()] starting thread (client mode): 0xae534790
2026-04-12T19:37:47.009 [DEBUG] [Thread-194706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:37:47.017 [DEBUG] [Thread-194706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:37:47.017 [INFO] [Thread-194706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:37:47.026 [DEBUG] [Thread-194706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:37:47.026 [DEBUG] [Thread-194706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:37:47.026 [DEBUG] [Thread-194706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:37:47.026 [DEBUG] [Thread-194706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:47.026 [DEBUG] [Thread-194706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] client lang: <none>
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] server lang: <none>
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] kex follows: False
2026-04-12T19:37:47.027 [DEBUG] [Thread-194706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:37:47.028 [DEBUG] [Thread-194706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:37:47.028 [DEBUG] [Thread-194706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:37:47.028 [DEBUG] [Thread-194706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:37:47.028 [DEBUG] [Thread-194706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:37:47.028 [DEBUG] [Thread-194706] [transport.py] [_log()] Compression: none
2026-04-12T19:37:47.028 [DEBUG] [Thread-194706] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:37:47.064 [DEBUG] [Thread-194706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:37:47.071 [DEBUG] [Thread-194706] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:37:47.074 [DEBUG] [Thread-194706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:37:47.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:37:47.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:37:47.080 [DEBUG] [Thread-194706] [transport.py] [_log()] userauth is OK
2026-04-12T19:37:47.080 [DEBUG] [Thread-194706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:37:47.081 [DEBUG] [Thread-194706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:37:47.081 [DEBUG] [Thread-194706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:37:47.081 [DEBUG] [Thread-194706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:37:47.108 [INFO] [Thread-194706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:37:47.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:37:47.850 [DEBUG] [Thread-194706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:37:47.851 [DEBUG] [Thread-194706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:37:47.852 [DEBUG] [Thread-194706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:37:47.891 [DEBUG] [Thread-194706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:37:47.891 [DEBUG] [Thread-194706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:37:47.894 [DEBUG] [Thread-194706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:37:47.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:37:47.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:37:47.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:37:47.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:37:47.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:37:47.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:37:47.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:37:47.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:37:47.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:37:47.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.734136 -999.00  +12.60   2.20     84  +10.00 1 3 1 2 1     0    0 2.18 -18.61 zN..W 2.2 2.2 234.4 8.3 13.9 -9.1 13.8 -7.9 13.4 -9.6 13.7 -12.1
2026-04-12T19:37:47.919 [DEBUG] [Thread-194706] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:37:47.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:37:47.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:37:47.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.734136
2026-04-12T19:37:47.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:37:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:37:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:37:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:37:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:37:47.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:37:24', tmtdew=3.17337, humidity=80.8194, cloud=0.0, wind=8.541, temperature=12.4358, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:37:24', seeing=0.8, atlas_timestamp='2026-04-12T17:37:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[1.9857499999999995, nan, nan, 2.1739999999999995, 1.1509999999999998, 1.3462500000000013, 1.4019999999999992, nan, nan, nan, nan, nan, 1.6399999999999997, 0.85025, 1.0319999999999991, 1.0239999999999991, 1.1312499999999996, nan, nan, nan, 0.8644999999999987, 0.5327499999999992, 0.35825000000000173, 0.7557499999999999, 1.0379999999999994, nan, nan, 0.6655000000000006, 0.27149999999999963, 0.11749999999999972, 0.10800000000000054, 0.23100000000000165, nan], zp_timestamp='2026-04-12T17:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:37:48.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:37:48.057 [DEBUG] [Thread-194709] [transport.py] [_log()] starting thread (client mode): 0xae5b2aa0
2026-04-12T19:37:48.057 [DEBUG] [Thread-194709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:37:48.072 [DEBUG] [Thread-194709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:37:48.072 [INFO] [Thread-194709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:37:48.079 [DEBUG] [Thread-194709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:37:48.079 [DEBUG] [Thread-194709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] client lang: <none>
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] server lang: <none>
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] kex follows: False
2026-04-12T19:37:48.080 [DEBUG] [Thread-194709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:37:48.081 [DEBUG] [Thread-194709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:37:48.081 [DEBUG] [Thread-194709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:37:48.081 [DEBUG] [Thread-194709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:37:48.081 [DEBUG] [Thread-194709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:37:48.081 [DEBUG] [Thread-194709] [transport.py] [_log()] Compression: none
2026-04-12T19:37:48.081 [DEBUG] [Thread-194709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:37:48.137 [DEBUG] [Thread-194709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:37:48.138 [DEBUG] [Thread-194709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:37:48.139 [DEBUG] [Thread-194709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:37:48.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:37:48.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:37:48.193 [DEBUG] [Thread-194709] [transport.py] [_log()] userauth is OK
2026-04-12T19:37:48.193 [DEBUG] [Thread-194709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:37:48.194 [DEBUG] [Thread-194709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:37:48.194 [DEBUG] [Thread-194709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:37:48.194 [DEBUG] [Thread-194709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:37:48.211 [INFO] [Thread-194709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:37:48.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:37:48.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:37:49.076 [DEBUG] [Thread-194709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:37:49.076 [DEBUG] [Thread-194709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:37:49.126 [DEBUG] [Thread-194709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:37:49.127 [DEBUG] [Thread-194709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:37:49.135 [DEBUG] [Thread-194709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:37:49.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:37: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')
2026-04-12T19:37: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
2026-04-12T19:37:49.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:37:49.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:37:49.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:37:49.178 [DEBUG] [Thread-194709] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:37:50.324 [DEBUG] [Thread-194711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:57.774 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:37:57.775 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:01.928 [DEBUG] [Thread-194712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:05.382 [DEBUG] [Thread-194713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:19.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:38:19.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:38: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
2026-04-12T19:38:20.405 [DEBUG] [Thread-194714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:20.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 37, 59), 3.17072, 80.836, 0.0, 8.61156, 12.4524, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:38:20.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:37:59
2026-04-12T19:38:20.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:38:21.040 [DEBUG] [Thread-194715] [transport.py] [_log()] starting thread (client mode): 0xae51b550
2026-04-12T19:38:21.041 [DEBUG] [Thread-194715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:38:21.063 [DEBUG] [Thread-194715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:38:21.063 [INFO] [Thread-194715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:38:21.064 [DEBUG] [Thread-194715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] client lang: <none>
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] server lang: <none>
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] kex follows: False
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] Compression: none
2026-04-12T19:38:21.065 [DEBUG] [Thread-194715] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:38:21.083 [DEBUG] [Thread-194715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:38:21.083 [DEBUG] [Thread-194715] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:38:21.084 [DEBUG] [Thread-194715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:38:21.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:38:21.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:38:21.084 [DEBUG] [Thread-194715] [transport.py] [_log()] userauth is OK
2026-04-12T19:38:21.084 [DEBUG] [Thread-194715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:38:21.085 [DEBUG] [Thread-194715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:38:21.085 [DEBUG] [Thread-194715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:38:21.085 [DEBUG] [Thread-194715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:38:21.096 [INFO] [Thread-194715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:38:21.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:38:21.911 [DEBUG] [Thread-194715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:38:21.911 [DEBUG] [Thread-194715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:38:21.911 [DEBUG] [Thread-194715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:38:21.951 [DEBUG] [Thread-194715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:38:21.952 [DEBUG] [Thread-194715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:38:21.954 [DEBUG] [Thread-194715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:38:21.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:38:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:38:21.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:38:21.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:38:21.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:38:21.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:38:21.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:38:21.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:38:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:38:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.734483 -999.00  +12.60   3.48     84  +10.00 1 3 1 2 1     0    0 2.12 -20.36 zN..W 3.5 3.5 202.8 8.1 13.9 -9.7 13.8 -8.8 13.5 -10.2 13.7 -12.9
2026-04-12T19:38:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:38:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:38:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.734483
2026-04-12T19:38:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:38:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:38:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:38:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:38:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:38:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:37:59', tmtdew=3.17072, humidity=80.836, cloud=0.0, wind=8.61156, temperature=12.4524, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:38:00', seeing=0.86, atlas_timestamp='2026-04-12T17:37:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[1.9857499999999995, nan, nan, 2.1739999999999995, 1.1509999999999998, 1.3462500000000013, 1.4019999999999992, nan, nan, nan, nan, nan, 1.6399999999999997, 0.85025, 1.0319999999999991, 1.0239999999999991, 1.1312499999999996, nan, nan, nan, 0.8644999999999987, 0.5327499999999992, 0.35825000000000173, 0.7557499999999999, 1.0379999999999994, nan, nan, 0.6655000000000006, 0.27149999999999963, 0.11749999999999972, 0.10800000000000054, 0.23100000000000165, nan], zp_timestamp='2026-04-12T17:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:38:21.974 [DEBUG] [Thread-194715] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:38:22.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:38:22.060 [DEBUG] [Thread-194718] [transport.py] [_log()] starting thread (client mode): 0xb0fcd450
2026-04-12T19:38:22.060 [DEBUG] [Thread-194718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:38:22.075 [DEBUG] [Thread-194718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:38:22.075 [INFO] [Thread-194718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:38:22.082 [DEBUG] [Thread-194718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] client lang: <none>
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] server lang: <none>
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] kex follows: False
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:38:22.083 [DEBUG] [Thread-194718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:38:22.084 [DEBUG] [Thread-194718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:38:22.084 [DEBUG] [Thread-194718] [transport.py] [_log()] Compression: none
2026-04-12T19:38:22.084 [DEBUG] [Thread-194718] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:38:22.141 [DEBUG] [Thread-194718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:38:22.141 [DEBUG] [Thread-194718] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:38:22.141 [DEBUG] [Thread-194718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:38:22.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:38:22.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:38:22.197 [DEBUG] [Thread-194718] [transport.py] [_log()] userauth is OK
2026-04-12T19:38:22.197 [DEBUG] [Thread-194718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:38:22.197 [DEBUG] [Thread-194718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:38:22.197 [DEBUG] [Thread-194718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:38:22.197 [DEBUG] [Thread-194718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:38:22.213 [INFO] [Thread-194718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:38:22.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:38:22.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:38:23.041 [DEBUG] [Thread-194718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:38:23.041 [DEBUG] [Thread-194718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:38:23.089 [DEBUG] [Thread-194718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:38:23.089 [DEBUG] [Thread-194718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:38:23.097 [DEBUG] [Thread-194718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:38:23.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:38:23.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:38:23.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:38:23.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:38:23.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:38:23.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:38:23.129 [DEBUG] [Thread-194718] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:38:35.435 [DEBUG] [Thread-194720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:42.276 [DEBUG] [Thread-193653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:50.482 [DEBUG] [Thread-194721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:53.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:38:53.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:38:53.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:38:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 38, 35), 3.01729, 81.8045, 0.0, 10.7993, 12.7046, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:38:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:38:35
2026-04-12T19:38:54.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:38:55.103 [DEBUG] [Thread-194722] [transport.py] [_log()] starting thread (client mode): 0xb0fcc970
2026-04-12T19:38:55.123 [DEBUG] [Thread-194722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:38:55.130 [DEBUG] [Thread-194722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:38:55.130 [INFO] [Thread-194722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] client lang: <none>
2026-04-12T19:38:55.136 [DEBUG] [Thread-194722] [transport.py] [_log()] server lang: <none>
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] kex follows: False
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] Compression: none
2026-04-12T19:38:55.137 [DEBUG] [Thread-194722] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:38:55.167 [DEBUG] [Thread-194722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:38:55.172 [DEBUG] [Thread-194722] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:38:55.174 [DEBUG] [Thread-194722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:38:55.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:38:55.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:38:55.179 [DEBUG] [Thread-194722] [transport.py] [_log()] userauth is OK
2026-04-12T19:38:55.180 [DEBUG] [Thread-194722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:38:55.180 [DEBUG] [Thread-194722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:38:55.180 [DEBUG] [Thread-194722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:38:55.180 [DEBUG] [Thread-194722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:38:55.200 [INFO] [Thread-194722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:38:55.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:38:55.998 [DEBUG] [Thread-194722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:38:55.998 [DEBUG] [Thread-194722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:38:56.000 [DEBUG] [Thread-194722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:38:56.039 [DEBUG] [Thread-194722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:38:56.039 [DEBUG] [Thread-194722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:38:56.042 [DEBUG] [Thread-194722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:38:56.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:38:56.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:38:56.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:38:56.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:38:56.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:38:56.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:38:56.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:38:56.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:38:56.079 [DEBUG] [Thread-194722] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:38:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:38:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.734830 -999.00  +12.60   2.15     84  +10.10 1 2 1 2 1     0    0 2.08 -20.84 zN..W 2.1 2.1 231.3 6.6 13.9 -10.7 13.8 -9.5 13.4 -11.1 13.7 -13.8
2026-04-12T19:38:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:38:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:38:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.734830
2026-04-12T19:38:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:38:56.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:38:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:38:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:38:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:38:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:38:35', tmtdew=3.01729, humidity=81.8045, cloud=0.0, wind=10.7993, temperature=12.7046, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:38:35', seeing=0.87, atlas_timestamp='2026-04-12T17:38:09.312', atlas_cloud=2, atlas_rain=1, zp_data=[1.9857499999999995, nan, nan, 2.1739999999999995, 1.1509999999999998, 1.3462500000000013, 1.4019999999999992, nan, nan, nan, nan, nan, 1.6399999999999997, 0.85025, 1.0319999999999991, 1.0239999999999991, 1.1312499999999996, nan, nan, nan, 0.8644999999999987, 0.5327499999999992, 0.35825000000000173, 0.7557499999999999, 1.0379999999999994, nan, nan, 0.6655000000000006, 0.27149999999999963, 0.11749999999999972, 0.10800000000000054, 0.23100000000000165, nan], zp_timestamp='2026-04-12T17:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:38:56.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:38:56.207 [DEBUG] [Thread-194725] [transport.py] [_log()] starting thread (client mode): 0xae52c520
2026-04-12T19:38:56.207 [DEBUG] [Thread-194725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:38:56.222 [DEBUG] [Thread-194725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:38:56.222 [INFO] [Thread-194725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:38:56.230 [DEBUG] [Thread-194725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:38:56.230 [DEBUG] [Thread-194725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] client lang: <none>
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] server lang: <none>
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] kex follows: False
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] Compression: none
2026-04-12T19:38:56.231 [DEBUG] [Thread-194725] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:38:56.289 [DEBUG] [Thread-194725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:38:56.290 [DEBUG] [Thread-194725] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:38:56.290 [DEBUG] [Thread-194725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:38:56.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:38:56.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:38:56.346 [DEBUG] [Thread-194725] [transport.py] [_log()] userauth is OK
2026-04-12T19:38:56.346 [DEBUG] [Thread-194725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:38:56.346 [DEBUG] [Thread-194725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:38:56.346 [DEBUG] [Thread-194725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:38:56.346 [DEBUG] [Thread-194725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:38:56.369 [INFO] [Thread-194725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:38:56.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:38:56.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:38:57.189 [DEBUG] [Thread-194725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:38:57.190 [DEBUG] [Thread-194725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:38:57.238 [DEBUG] [Thread-194725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:38:57.238 [DEBUG] [Thread-194725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:38:57.247 [DEBUG] [Thread-194725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:38:57.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:38:57.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:38:57.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:38:57.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:38:57.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:38:57.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:38:57.283 [DEBUG] [Thread-194725] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:38:57.982 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:38:57.983 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:39:02.272 [DEBUG] [Thread-194727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:39:05.511 [DEBUG] [Thread-194728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:39:20.590 [DEBUG] [Thread-194729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:39:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:39:27.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:39:27.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:39:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 39, 11), 3.17185, 80.8193, 0.0, 10.8173, 12.3694, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:39:28.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:39:11
2026-04-12T19:39:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:39:29.160 [DEBUG] [Thread-194730] [transport.py] [_log()] starting thread (client mode): 0xae536b30
2026-04-12T19:39:29.160 [DEBUG] [Thread-194730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:39:29.178 [DEBUG] [Thread-194730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:39:29.178 [INFO] [Thread-194730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:39:29.181 [DEBUG] [Thread-194730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:39:29.181 [DEBUG] [Thread-194730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:39:29.181 [DEBUG] [Thread-194730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] client lang: <none>
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] server lang: <none>
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] kex follows: False
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] Compression: none
2026-04-12T19:39:29.182 [DEBUG] [Thread-194730] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:39:29.207 [DEBUG] [Thread-194730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:39:29.210 [DEBUG] [Thread-194730] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:39:29.211 [DEBUG] [Thread-194730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:39:29.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:39:29.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:39:29.248 [DEBUG] [Thread-194730] [transport.py] [_log()] userauth is OK
2026-04-12T19:39:29.248 [DEBUG] [Thread-194730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:39:29.248 [DEBUG] [Thread-194730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:39:29.248 [DEBUG] [Thread-194730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:39:29.248 [DEBUG] [Thread-194730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:39:29.268 [INFO] [Thread-194730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:39:29.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:39:29.898 [DEBUG] [Thread-194730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:39:29.898 [DEBUG] [Thread-194730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:39:29.899 [DEBUG] [Thread-194730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:39:29.939 [DEBUG] [Thread-194730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:39:29.939 [DEBUG] [Thread-194730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:39:29.942 [DEBUG] [Thread-194730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:39:29.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:39:29.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:39:29.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:39:29.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:39:29.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:39:29.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:39:29.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:39:29.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:39:29.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:39:29.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.735525 -999.00  +12.60   4.48     84  +10.00 1 2 1 2 1     0    0 2.01 -21.13 .N.SW 4.5 4.5 232.5 9.5 13.9 -12.0 13.8 -10.2 13.4 -12.0 13.7 -14.5
2026-04-12T19:39:29.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:39:29.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:39:29.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.735525
2026-04-12T19:39:29.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:39:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:39:29.965 [DEBUG] [Thread-194730] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:39:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:39:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:39:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:39:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:39:11', tmtdew=3.17185, humidity=80.8193, cloud=0.0, wind=10.8173, temperature=12.3694, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:39:11', seeing=0.91, atlas_timestamp='2026-04-12T17:39:09.360', atlas_cloud=2, atlas_rain=1, zp_data=[1.9857499999999995, nan, nan, 2.1739999999999995, 1.1509999999999998, 1.3462500000000013, 1.4019999999999992, nan, nan, nan, nan, nan, 1.6399999999999997, 0.85025, 1.0319999999999991, 1.0239999999999991, 1.1312499999999996, nan, nan, nan, 0.8644999999999987, 0.5327499999999992, 0.35825000000000173, 0.7557499999999999, 1.0379999999999994, nan, nan, 0.6655000000000006, 0.27149999999999963, 0.11749999999999972, 0.10800000000000054, 0.23100000000000165, nan], zp_timestamp='2026-04-12T17:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:39:30.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:39:30.057 [DEBUG] [Thread-194733] [transport.py] [_log()] starting thread (client mode): 0xae5b3670
2026-04-12T19:39:30.057 [DEBUG] [Thread-194733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:39:30.072 [DEBUG] [Thread-194733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:39:30.072 [INFO] [Thread-194733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] client lang: <none>
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] server lang: <none>
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] kex follows: False
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:39:30.080 [DEBUG] [Thread-194733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:39:30.081 [DEBUG] [Thread-194733] [transport.py] [_log()] Compression: none
2026-04-12T19:39:30.081 [DEBUG] [Thread-194733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:39:30.136 [DEBUG] [Thread-194733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:39:30.137 [DEBUG] [Thread-194733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:39:30.137 [DEBUG] [Thread-194733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:39:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:39:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:39:30.193 [DEBUG] [Thread-194733] [transport.py] [_log()] userauth is OK
2026-04-12T19:39:30.193 [DEBUG] [Thread-194733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:39:30.193 [DEBUG] [Thread-194733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:39:30.193 [DEBUG] [Thread-194733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:39:30.193 [DEBUG] [Thread-194733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:39:30.214 [INFO] [Thread-194733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:39:30.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:39:30.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:39:31.030 [DEBUG] [Thread-194733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:39:31.030 [DEBUG] [Thread-194733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:39:31.077 [DEBUG] [Thread-194733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:39:31.077 [DEBUG] [Thread-194733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:39:31.086 [DEBUG] [Thread-194733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:39:31.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:39:31.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:39:31.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:39:31.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:39:31.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:39:31.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:39:31.119 [DEBUG] [Thread-194733] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:39:35.622 [DEBUG] [Thread-194735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:39:50.710 [DEBUG] [Thread-194736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:39:58.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:39:58.194 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:40:01.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:40:01.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:40:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:40:02.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 39, 46), 3.01569, 81.805, 0.0, 12.0341, 12.6387, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:40:02.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:39:46
2026-04-12T19:40:02.573 [DEBUG] [Thread-194737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:40:02.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:40:03.055 [DEBUG] [Thread-194738] [transport.py] [_log()] starting thread (client mode): 0xae52d6f0
2026-04-12T19:40:03.055 [DEBUG] [Thread-194738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:40:03.061 [DEBUG] [Thread-194738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:40:03.061 [INFO] [Thread-194738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:40:03.064 [DEBUG] [Thread-194738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] client lang: <none>
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] server lang: <none>
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] kex follows: False
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] Compression: none
2026-04-12T19:40:03.065 [DEBUG] [Thread-194738] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:40:03.090 [DEBUG] [Thread-194738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:40:03.094 [DEBUG] [Thread-194738] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:40:03.094 [DEBUG] [Thread-194738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:40:03.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:40:03.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:40:03.098 [DEBUG] [Thread-194738] [transport.py] [_log()] userauth is OK
2026-04-12T19:40:03.098 [DEBUG] [Thread-194738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:40:03.098 [DEBUG] [Thread-194738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:40:03.098 [DEBUG] [Thread-194738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:40:03.098 [DEBUG] [Thread-194738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:40:03.121 [INFO] [Thread-194738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:40:03.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:40:03.779 [DEBUG] [Thread-194738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:40:03.779 [DEBUG] [Thread-194738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:40:03.779 [DEBUG] [Thread-194738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:40:03.820 [DEBUG] [Thread-194738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:40:03.820 [DEBUG] [Thread-194738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:40:03.822 [DEBUG] [Thread-194738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:40:03.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:40:03.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:40:03.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:40:03.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:40:03.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:40:03.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:40:03.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:40:03.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:40:03.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:40:03.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.735872 -999.00  +12.60   4.76     84  +10.00 1 2 1 2 1     0    0 2.14 -18.71 ZN..W 4.8 4.8 211.4 9.9 13.9 -12.1 13.8 -10.2 13.5 -11.9 13.7 -14.7
2026-04-12T19:40:03.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:40:03.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:40:03.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.735872
2026-04-12T19:40:03.850 [DEBUG] [Thread-194738] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:40:03.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:40:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:40:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:40:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:40:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:40:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:39:46', tmtdew=3.01569, humidity=81.805, cloud=0.0, wind=12.0341, temperature=12.6387, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:39:47', seeing=0.85, atlas_timestamp='2026-04-12T17:39:39.341', atlas_cloud=2, atlas_rain=1, zp_data=[1.9857499999999995, nan, nan, 2.1739999999999995, 1.1509999999999998, 1.3462500000000013, 1.4019999999999992, nan, nan, nan, nan, nan, 1.6399999999999997, 0.85025, 1.0319999999999991, 1.0239999999999991, 1.1312499999999996, nan, nan, nan, 0.8644999999999987, 0.5327499999999992, 0.35825000000000173, 0.7557499999999999, 1.0379999999999994, nan, nan, 0.6655000000000006, 0.27149999999999963, 0.11749999999999972, 0.10800000000000054, 0.23100000000000165, nan], zp_timestamp='2026-04-12T17:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:40:03.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:40:03.949 [DEBUG] [Thread-194741] [transport.py] [_log()] starting thread (client mode): 0xae536650
2026-04-12T19:40:03.950 [DEBUG] [Thread-194741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:40:03.968 [DEBUG] [Thread-194741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:40:03.968 [INFO] [Thread-194741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] client lang: <none>
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] server lang: <none>
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] kex follows: False
2026-04-12T19:40:03.976 [DEBUG] [Thread-194741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:40:03.977 [DEBUG] [Thread-194741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:40:03.977 [DEBUG] [Thread-194741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:40:03.977 [DEBUG] [Thread-194741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:40:03.977 [DEBUG] [Thread-194741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:40:03.977 [DEBUG] [Thread-194741] [transport.py] [_log()] Compression: none
2026-04-12T19:40:03.977 [DEBUG] [Thread-194741] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:40:04.032 [DEBUG] [Thread-194741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:40:04.032 [DEBUG] [Thread-194741] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:40:04.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:40:04.032 [DEBUG] [Thread-194741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:40:04.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:40:04.089 [DEBUG] [Thread-194741] [transport.py] [_log()] userauth is OK
2026-04-12T19:40:04.089 [DEBUG] [Thread-194741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:40:04.089 [DEBUG] [Thread-194741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:40:04.089 [DEBUG] [Thread-194741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:40:04.089 [DEBUG] [Thread-194741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:40:04.106 [INFO] [Thread-194741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:40:04.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:40:04.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:40:04.944 [DEBUG] [Thread-194741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:40:04.944 [DEBUG] [Thread-194741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:40:04.996 [DEBUG] [Thread-194741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:40:04.996 [DEBUG] [Thread-194741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:40:05.005 [DEBUG] [Thread-194741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:40:05.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:40:05.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:40:05.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:40:05.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:40:05.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:40:05.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:40:05.045 [DEBUG] [Thread-194741] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:40:05.738 [DEBUG] [Thread-194743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:40:20.789 [DEBUG] [Thread-194744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:40:35.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:40:35.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:40:35.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:40:35.812 [DEBUG] [Thread-194745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:40:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 40, 22), 3.10558, 81.4191, 0.0, 11.8228, 12.4525, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:40:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:40:22
2026-04-12T19:40:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:40:37.020 [DEBUG] [Thread-194746] [transport.py] [_log()] starting thread (client mode): 0xae5f3130
2026-04-12T19:40:37.020 [DEBUG] [Thread-194746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:40:37.030 [DEBUG] [Thread-194746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:40:37.030 [INFO] [Thread-194746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:40:37.034 [DEBUG] [Thread-194746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] client lang: <none>
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] server lang: <none>
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] kex follows: False
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:40:37.035 [DEBUG] [Thread-194746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:40:37.036 [DEBUG] [Thread-194746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:40:37.036 [DEBUG] [Thread-194746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:40:37.036 [DEBUG] [Thread-194746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:40:37.036 [DEBUG] [Thread-194746] [transport.py] [_log()] Compression: none
2026-04-12T19:40:37.036 [DEBUG] [Thread-194746] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:40:37.063 [DEBUG] [Thread-194746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:40:37.066 [DEBUG] [Thread-194746] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:40:37.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:40:37.068 [DEBUG] [Thread-194746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:40:37.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:40:37.071 [DEBUG] [Thread-194746] [transport.py] [_log()] userauth is OK
2026-04-12T19:40:37.071 [DEBUG] [Thread-194746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:40:37.071 [DEBUG] [Thread-194746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:40:37.071 [DEBUG] [Thread-194746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:40:37.071 [DEBUG] [Thread-194746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:40:37.089 [INFO] [Thread-194746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:40:37.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:40:37.688 [DEBUG] [Thread-194746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:40:37.688 [DEBUG] [Thread-194746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:40:37.688 [DEBUG] [Thread-194746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:40:37.728 [DEBUG] [Thread-194746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:40:37.728 [DEBUG] [Thread-194746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:40:37.731 [DEBUG] [Thread-194746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:40:37.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:40:37.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:40:37.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:40:37.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:40:37.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:40:37.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:40:37.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:40:37.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:40:37.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:40:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.736218 -999.00  +12.60   4.18     84  +10.00 1 2 1 2 1     0    0 2.04 -20.20 ZN..W 4.2 4.2 214.5 9.0 13.9 -12.5 13.8 -10.4 13.4 -12.1 13.7 -15.0
2026-04-12T19:40:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:40:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:40:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.736218
2026-04-12T19:40:37.760 [DEBUG] [Thread-194746] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:40:37.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:40:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:40:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:40:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:40:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:40:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:40:22', tmtdew=3.10558, humidity=81.4191, cloud=0.0, wind=11.8228, temperature=12.4525, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:40:22', seeing=0.98, atlas_timestamp='2026-04-12T17:40:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[1.9857499999999995, nan, nan, 2.1739999999999995, 1.1509999999999998, 1.3462500000000013, 1.4019999999999992, nan, nan, nan, nan, nan, 1.6399999999999997, 0.85025, 1.0319999999999991, 1.0239999999999991, 1.1312499999999996, nan, nan, nan, 0.8644999999999987, 0.5327499999999992, 0.35825000000000173, 0.7557499999999999, 1.0379999999999994, nan, nan, 0.6655000000000006, 0.27149999999999963, 0.11749999999999972, 0.10800000000000054, 0.23100000000000165, nan], zp_timestamp='2026-04-12T17:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:40:37.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:40:37.856 [DEBUG] [Thread-194749] [transport.py] [_log()] starting thread (client mode): 0xae5f24d0
2026-04-12T19:40:37.856 [DEBUG] [Thread-194749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:40:37.870 [DEBUG] [Thread-194749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:40:37.870 [INFO] [Thread-194749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] client lang: <none>
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] server lang: <none>
2026-04-12T19:40:37.877 [DEBUG] [Thread-194749] [transport.py] [_log()] kex follows: False
2026-04-12T19:40:37.878 [DEBUG] [Thread-194749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:40:37.878 [DEBUG] [Thread-194749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:40:37.878 [DEBUG] [Thread-194749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:40:37.878 [DEBUG] [Thread-194749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:40:37.878 [DEBUG] [Thread-194749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:40:37.878 [DEBUG] [Thread-194749] [transport.py] [_log()] Compression: none
2026-04-12T19:40:37.878 [DEBUG] [Thread-194749] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:40:37.937 [DEBUG] [Thread-194749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:40:37.937 [DEBUG] [Thread-194749] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:40:37.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:40:37.938 [DEBUG] [Thread-194749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:40:37.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:40:37.993 [DEBUG] [Thread-194749] [transport.py] [_log()] userauth is OK
2026-04-12T19:40:37.993 [DEBUG] [Thread-194749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:40:37.993 [DEBUG] [Thread-194749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:40:37.993 [DEBUG] [Thread-194749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:40:37.993 [DEBUG] [Thread-194749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:40:38.012 [INFO] [Thread-194749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:40:38.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:40:38.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:40:38.830 [DEBUG] [Thread-194749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:40:38.830 [DEBUG] [Thread-194749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:40:38.878 [DEBUG] [Thread-194749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:40:38.878 [DEBUG] [Thread-194749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:40:38.886 [DEBUG] [Thread-194749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:40:38.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:40:38.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:40:38.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:40:38.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:40:38.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:40:38.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:40:38.920 [DEBUG] [Thread-194749] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:40:50.841 [DEBUG] [Thread-194751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:40:58.397 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:40:58.399 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:41:02.801 [DEBUG] [Thread-194752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:41:05.923 [DEBUG] [Thread-194753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:41:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:41:08.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:41:08.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:41:10.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 40, 57), 3.11045, 81.3861, 0.0, 9.10548, 12.4029, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:41:10.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:40:57
2026-04-12T19:41:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:41:10.803 [DEBUG] [Thread-194754] [transport.py] [_log()] starting thread (client mode): 0xae536b30
2026-04-12T19:41:10.803 [DEBUG] [Thread-194754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:41:10.823 [DEBUG] [Thread-194754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:41:10.823 [INFO] [Thread-194754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] client lang: <none>
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] server lang: <none>
2026-04-12T19:41:10.825 [DEBUG] [Thread-194754] [transport.py] [_log()] kex follows: False
2026-04-12T19:41:10.826 [DEBUG] [Thread-194754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:41:10.826 [DEBUG] [Thread-194754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:41:10.826 [DEBUG] [Thread-194754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:41:10.826 [DEBUG] [Thread-194754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:41:10.826 [DEBUG] [Thread-194754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:41:10.826 [DEBUG] [Thread-194754] [transport.py] [_log()] Compression: none
2026-04-12T19:41:10.826 [DEBUG] [Thread-194754] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:41:10.844 [DEBUG] [Thread-194754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:41:10.844 [DEBUG] [Thread-194754] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:41:10.844 [DEBUG] [Thread-194754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:41:10.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:41:10.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:41:10.888 [DEBUG] [Thread-194754] [transport.py] [_log()] userauth is OK
2026-04-12T19:41:10.888 [DEBUG] [Thread-194754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:41:10.888 [DEBUG] [Thread-194754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:41:10.888 [DEBUG] [Thread-194754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:41:10.888 [DEBUG] [Thread-194754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:41:10.903 [INFO] [Thread-194754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:41:10.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:41:11.552 [DEBUG] [Thread-194754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:41:11.552 [DEBUG] [Thread-194754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:41:11.552 [DEBUG] [Thread-194754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:41:11.593 [DEBUG] [Thread-194754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:41:11.593 [DEBUG] [Thread-194754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:41:11.595 [DEBUG] [Thread-194754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:41:11.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:41:11.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:41:11.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:41:11.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:41:11.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:41:11.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:41:11.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:41:11.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:41:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:41:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.736566 -999.00  +12.60   3.54     84  +10.00 1 2 1 2 1     0    0 2.14 -17.19 ZN..W 3.5 3.5 249.2 9.4 13.9 -12.9 13.8 -10.9 13.5 -12.1 13.7 -15.2
2026-04-12T19:41:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:41:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:41:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.736566
2026-04-12T19:41:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:41:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:41:11.614 [DEBUG] [Thread-194754] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:41:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:41:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:41:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:41:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:40:57', tmtdew=3.11045, humidity=81.3861, cloud=0.0, wind=9.10548, temperature=12.4029, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:40:58', seeing=0.86, atlas_timestamp='2026-04-12T17:40:39.302', atlas_cloud=2, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:41:11.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:41:11.699 [DEBUG] [Thread-194757] [transport.py] [_log()] starting thread (client mode): 0xae52e0e0
2026-04-12T19:41:11.699 [DEBUG] [Thread-194757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:41:11.714 [DEBUG] [Thread-194757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:41:11.714 [INFO] [Thread-194757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] client lang: <none>
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] server lang: <none>
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] kex follows: False
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] Compression: none
2026-04-12T19:41:11.722 [DEBUG] [Thread-194757] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:41:11.779 [DEBUG] [Thread-194757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:41:11.780 [DEBUG] [Thread-194757] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:41:11.780 [DEBUG] [Thread-194757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:41:11.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:41:11.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:41:11.837 [DEBUG] [Thread-194757] [transport.py] [_log()] userauth is OK
2026-04-12T19:41:11.837 [DEBUG] [Thread-194757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:41:11.837 [DEBUG] [Thread-194757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:41:11.837 [DEBUG] [Thread-194757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:41:11.837 [DEBUG] [Thread-194757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:41:11.851 [INFO] [Thread-194757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:41:11.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:41:11.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:41:12.672 [DEBUG] [Thread-194757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:41:12.672 [DEBUG] [Thread-194757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:41:12.720 [DEBUG] [Thread-194757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:41:12.720 [DEBUG] [Thread-194757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:41:12.728 [DEBUG] [Thread-194757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:41:12.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:41:12.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:41:12.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:41:12.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:41:12.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:41:12.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:41:12.760 [DEBUG] [Thread-194757] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:41:20.945 [DEBUG] [Thread-194759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:41:35.981 [DEBUG] [Thread-194760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:41:42.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:41:42.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:41:42.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:41:44.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 41, 33), 3.02769, 81.7391, 0.0, 11.2226, 12.639, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:41:44.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:41:33
2026-04-12T19:41:44.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:41:44.609 [DEBUG] [Thread-194761] [transport.py] [_log()] starting thread (client mode): 0xae50ad10
2026-04-12T19:41:44.609 [DEBUG] [Thread-194761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:41:44.631 [DEBUG] [Thread-194761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:41:44.631 [INFO] [Thread-194761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] client lang: <none>
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] server lang: <none>
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] kex follows: False
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] Compression: none
2026-04-12T19:41:44.635 [DEBUG] [Thread-194761] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:41:44.650 [DEBUG] [Thread-194761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:41:44.650 [DEBUG] [Thread-194761] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:41:44.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:41:44.651 [DEBUG] [Thread-194761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:41:44.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:41:44.652 [DEBUG] [Thread-194761] [transport.py] [_log()] userauth is OK
2026-04-12T19:41:44.652 [DEBUG] [Thread-194761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:41:44.652 [DEBUG] [Thread-194761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:41:44.652 [DEBUG] [Thread-194761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:41:44.652 [DEBUG] [Thread-194761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:41:44.682 [INFO] [Thread-194761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:41:44.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:41:45.309 [DEBUG] [Thread-194761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:41:45.309 [DEBUG] [Thread-194761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:41:45.310 [DEBUG] [Thread-194761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:41:45.350 [DEBUG] [Thread-194761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:41:45.350 [DEBUG] [Thread-194761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:41:45.353 [DEBUG] [Thread-194761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:41:45.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:41:45.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:41:45.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:41:45.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:41:45.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:41:45.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:41:45.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:41:45.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:41:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:41:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.736913 -999.00  +12.60   4.20     84  +10.00 1 2 1 2 1     0    0 2.20 -17.76 ZN.SW 4.2 4.2 223.7 7.2 13.9 -13.4 13.8 -11.0 13.4 -12.1 13.7 -14.8
2026-04-12T19:41:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:41:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:41:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.736913
2026-04-12T19:41:45.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:41:45.374 [DEBUG] [Thread-194761] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:41:45.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:41:45.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:41:45.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:41:45.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:41:45.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:41:33', tmtdew=3.02769, humidity=81.7391, cloud=0.0, wind=11.2226, temperature=12.639, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:41:33', seeing=0.83, atlas_timestamp='2026-04-12T17:41:09.283', atlas_cloud=2, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:41:45.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:41:45.466 [DEBUG] [Thread-194764] [transport.py] [_log()] starting thread (client mode): 0xae50ad40
2026-04-12T19:41:45.466 [DEBUG] [Thread-194764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:41:45.482 [DEBUG] [Thread-194764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:41:45.482 [INFO] [Thread-194764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] client lang: <none>
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] server lang: <none>
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] kex follows: False
2026-04-12T19:41:45.490 [DEBUG] [Thread-194764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:41:45.491 [DEBUG] [Thread-194764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:41:45.491 [DEBUG] [Thread-194764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:41:45.491 [DEBUG] [Thread-194764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:41:45.491 [DEBUG] [Thread-194764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:41:45.491 [DEBUG] [Thread-194764] [transport.py] [_log()] Compression: none
2026-04-12T19:41:45.491 [DEBUG] [Thread-194764] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:41:45.547 [DEBUG] [Thread-194764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:41:45.547 [DEBUG] [Thread-194764] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:41:45.547 [DEBUG] [Thread-194764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:41:45.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:41:45.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:41:45.609 [DEBUG] [Thread-194764] [transport.py] [_log()] userauth is OK
2026-04-12T19:41:45.609 [DEBUG] [Thread-194764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:41:45.609 [DEBUG] [Thread-194764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:41:45.609 [DEBUG] [Thread-194764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:41:45.609 [DEBUG] [Thread-194764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:41:45.625 [INFO] [Thread-194764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:41:45.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:41:45.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:41:46.462 [DEBUG] [Thread-194764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:41:46.462 [DEBUG] [Thread-194764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:41:46.510 [DEBUG] [Thread-194764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:41:46.510 [DEBUG] [Thread-194764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:41:46.518 [DEBUG] [Thread-194764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:41:46.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:41:46.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:41:46.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:41:46.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:41:46.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:41:46.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:41:46.550 [DEBUG] [Thread-194764] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:41:51.007 [DEBUG] [Thread-194766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:41:58.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:41:58.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:42:02.977 [DEBUG] [Thread-194767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:42:06.040 [DEBUG] [Thread-194768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:42:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:42:16.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:42:16.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:42:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 42, 8), 3.07674, 81.3031, 0.0, 8.73504, 12.4026, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:42:17.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:42:08
2026-04-12T19:42:18.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:42:18.364 [DEBUG] [Thread-194769] [transport.py] [_log()] starting thread (client mode): 0xb0f6c220
2026-04-12T19:42:18.364 [DEBUG] [Thread-194769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:42:18.386 [DEBUG] [Thread-194769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:42:18.386 [INFO] [Thread-194769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] client lang: <none>
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] server lang: <none>
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] kex follows: False
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] Compression: none
2026-04-12T19:42:18.389 [DEBUG] [Thread-194769] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:42:18.405 [DEBUG] [Thread-194769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:42:18.405 [DEBUG] [Thread-194769] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:42:18.405 [DEBUG] [Thread-194769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:42:18.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:42:18.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:42:18.406 [DEBUG] [Thread-194769] [transport.py] [_log()] userauth is OK
2026-04-12T19:42:18.406 [DEBUG] [Thread-194769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:42:18.406 [DEBUG] [Thread-194769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:42:18.406 [DEBUG] [Thread-194769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:42:18.406 [DEBUG] [Thread-194769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:42:18.415 [INFO] [Thread-194769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:42:18.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:42:19.061 [DEBUG] [Thread-194769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:42:19.061 [DEBUG] [Thread-194769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:42:19.061 [DEBUG] [Thread-194769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:42:19.101 [DEBUG] [Thread-194769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:42:19.101 [DEBUG] [Thread-194769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:42:19.104 [DEBUG] [Thread-194769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:42:19.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:42:19.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:42:19.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:42:19.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:42:19.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:42:19.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:42:19.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.737260 -999.00  +12.60   5.12     84  +10.10 1 2 1 2 1     0    0 2.15 -16.34 ZN.SW 5.1 5.1 215.0 6.4 13.9 -13.3 13.8 -10.8 13.5 -11.9 13.7 -14.8
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.737260
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:42:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:42:08', tmtdew=3.07674, humidity=81.3031, cloud=0.0, wind=8.73504, temperature=12.4026, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:42:09', seeing=0.89, atlas_timestamp='2026-04-12T17:41:39.264', atlas_cloud=2, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:42:19.124 [DEBUG] [Thread-194769] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:42:19.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:42:19.206 [DEBUG] [Thread-194772] [transport.py] [_log()] starting thread (client mode): 0xae5f36d0
2026-04-12T19:42:19.206 [DEBUG] [Thread-194772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:42:19.220 [DEBUG] [Thread-194772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:42:19.220 [INFO] [Thread-194772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] client lang: <none>
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] server lang: <none>
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] kex follows: False
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] Compression: none
2026-04-12T19:42:19.228 [DEBUG] [Thread-194772] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:42:19.284 [DEBUG] [Thread-194772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:42:19.284 [DEBUG] [Thread-194772] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:42:19.284 [DEBUG] [Thread-194772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:42:19.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:42:19.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:42:19.346 [DEBUG] [Thread-194772] [transport.py] [_log()] userauth is OK
2026-04-12T19:42:19.346 [DEBUG] [Thread-194772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:42:19.346 [DEBUG] [Thread-194772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:42:19.346 [DEBUG] [Thread-194772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:42:19.346 [DEBUG] [Thread-194772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:42:19.360 [INFO] [Thread-194772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:42:19.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:42:19.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:42:20.199 [DEBUG] [Thread-194772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:42:20.199 [DEBUG] [Thread-194772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:42:20.249 [DEBUG] [Thread-194772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:42:20.249 [DEBUG] [Thread-194772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:42:20.258 [DEBUG] [Thread-194772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:42:20.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:42:20.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:42:20.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:42:20.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:42:20.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:42:20.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:42:20.293 [DEBUG] [Thread-194772] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:42:21.061 [DEBUG] [Thread-194774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:42:36.107 [DEBUG] [Thread-194775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:42:50.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:42:50.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:42:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:42:51.134 [DEBUG] [Thread-194776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:42:51.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 42, 44), 3.02775, 81.7388, 0.0, 9.45864, 12.6388, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:42:51.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:42:44
2026-04-12T19:42:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:42:52.159 [DEBUG] [Thread-194777] [transport.py] [_log()] starting thread (client mode): 0xae5347c0
2026-04-12T19:42:52.159 [DEBUG] [Thread-194777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:42:52.179 [DEBUG] [Thread-194777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:42:52.179 [INFO] [Thread-194777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] client lang: <none>
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] server lang: <none>
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] kex follows: False
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] Compression: none
2026-04-12T19:42:52.182 [DEBUG] [Thread-194777] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:42:52.200 [DEBUG] [Thread-194777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:42:52.201 [DEBUG] [Thread-194777] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:42:52.201 [DEBUG] [Thread-194777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:42:52.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:42:52.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:42:52.244 [DEBUG] [Thread-194777] [transport.py] [_log()] userauth is OK
2026-04-12T19:42:52.245 [DEBUG] [Thread-194777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:42:52.245 [DEBUG] [Thread-194777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:42:52.245 [DEBUG] [Thread-194777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:42:52.245 [DEBUG] [Thread-194777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:42:52.270 [INFO] [Thread-194777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:42:52.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:42:52.905 [DEBUG] [Thread-194777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:42:52.905 [DEBUG] [Thread-194777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:42:52.905 [DEBUG] [Thread-194777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:42:52.945 [DEBUG] [Thread-194777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:42:52.945 [DEBUG] [Thread-194777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:42:52.948 [DEBUG] [Thread-194777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:42:52.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:42:52.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:42:52.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:42:52.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:42:52.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:42:52.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:42:52.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:42:52.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:42:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:42:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.737955 -999.00  +12.60   4.21     85  +10.20 1 3 1 2 1     0    0 2.21 -16.65 ZNE.W 4.2 4.2 217.5 8.1 13.9 -10.4 13.9 -7.4 13.5 -9.3 13.7 -13.0
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.737955
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:42:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:42:44', tmtdew=3.02775, humidity=81.7388, cloud=0.0, wind=9.45864, temperature=12.6388, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:42:44', seeing=0.97, atlas_timestamp='2026-04-12T17:42:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:42:52.969 [DEBUG] [Thread-194777] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:42:53.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:42:53.059 [DEBUG] [Thread-194780] [transport.py] [_log()] starting thread (client mode): 0xae5e4fa0
2026-04-12T19:42:53.059 [DEBUG] [Thread-194780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:42:53.073 [DEBUG] [Thread-194780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:42:53.073 [INFO] [Thread-194780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:42:53.080 [DEBUG] [Thread-194780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:42:53.080 [DEBUG] [Thread-194780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:42:53.080 [DEBUG] [Thread-194780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:42:53.080 [DEBUG] [Thread-194780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] client lang: <none>
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] server lang: <none>
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] kex follows: False
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] Compression: none
2026-04-12T19:42:53.081 [DEBUG] [Thread-194780] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:42:53.140 [DEBUG] [Thread-194780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:42:53.140 [DEBUG] [Thread-194780] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:42:53.140 [DEBUG] [Thread-194780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:42:53.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:42:53.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:42:53.197 [DEBUG] [Thread-194780] [transport.py] [_log()] userauth is OK
2026-04-12T19:42:53.197 [DEBUG] [Thread-194780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:42:53.197 [DEBUG] [Thread-194780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:42:53.197 [DEBUG] [Thread-194780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:42:53.197 [DEBUG] [Thread-194780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:42:53.213 [INFO] [Thread-194780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:42:53.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:42:53.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:42:54.027 [DEBUG] [Thread-194780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:42:54.027 [DEBUG] [Thread-194780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:42:54.078 [DEBUG] [Thread-194780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:42:54.078 [DEBUG] [Thread-194780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:42:54.089 [DEBUG] [Thread-194780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:42:54.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:42:54.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:42:54.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:42:54.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:42:54.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:42:54.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:42:54.142 [DEBUG] [Thread-194780] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:42:58.812 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:42:58.813 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:03.457 [DEBUG] [Thread-194782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:06.160 [DEBUG] [Thread-194783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:21.285 [DEBUG] [Thread-194784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:43:24.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:43:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:43:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 42, 44), 3.02775, 81.7388, 0.0, 9.45864, 12.6388, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:43:25.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:42:44
2026-04-12T19:43:25.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:43:26.169 [DEBUG] [Thread-194785] [transport.py] [_log()] starting thread (client mode): 0xae509960
2026-04-12T19:43:26.169 [DEBUG] [Thread-194785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:43:26.179 [DEBUG] [Thread-194785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:43:26.179 [INFO] [Thread-194785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:43:26.183 [DEBUG] [Thread-194785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:43:26.183 [DEBUG] [Thread-194785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] client lang: <none>
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] server lang: <none>
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] kex follows: False
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:43:26.184 [DEBUG] [Thread-194785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:43:26.185 [DEBUG] [Thread-194785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:43:26.185 [DEBUG] [Thread-194785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:43:26.185 [DEBUG] [Thread-194785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:43:26.185 [DEBUG] [Thread-194785] [transport.py] [_log()] Compression: none
2026-04-12T19:43:26.185 [DEBUG] [Thread-194785] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:43:26.236 [DEBUG] [Thread-194785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:43:26.241 [DEBUG] [Thread-194785] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:43:26.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:43:26.243 [DEBUG] [Thread-194785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:43:26.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:43:26.246 [DEBUG] [Thread-194785] [transport.py] [_log()] userauth is OK
2026-04-12T19:43:26.247 [DEBUG] [Thread-194785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:43:26.247 [DEBUG] [Thread-194785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:43:26.247 [DEBUG] [Thread-194785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:43:26.247 [DEBUG] [Thread-194785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:43:26.272 [INFO] [Thread-194785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:43:26.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:43:26.899 [DEBUG] [Thread-194785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:43:26.900 [DEBUG] [Thread-194785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:43:26.901 [DEBUG] [Thread-194785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:43:26.941 [DEBUG] [Thread-194785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:43:26.941 [DEBUG] [Thread-194785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:43:26.944 [DEBUG] [Thread-194785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:43:26.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:43:26.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:43:26.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:43:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:43:26.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:43:26.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:43:26.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:43:26.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:43:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:43:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.738302 -999.00  +12.60   7.86     86  +10.40 1 3 1 2 1     0    0 2.18 -16.48 ZNE.W 7.9 7.9 192.0 8.7 13.9 -7.8 13.8 -6.3 13.5 -7.3 13.8 -10.2
2026-04-12T19:43:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:43:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:43:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.738302
2026-04-12T19:43:26.975 [DEBUG] [Thread-194785] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:43:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:43:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:43:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:43:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:43:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:43:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:42:44', tmtdew=3.02775, humidity=81.7388, cloud=0.0, wind=9.45864, temperature=12.6388, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:43:20', seeing=0.97, atlas_timestamp='2026-04-12T17:43:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:43:27.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:43:27.080 [DEBUG] [Thread-194788] [transport.py] [_log()] starting thread (client mode): 0xb0f6c2b0
2026-04-12T19:43:27.081 [DEBUG] [Thread-194788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:43:27.096 [DEBUG] [Thread-194788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:43:27.096 [INFO] [Thread-194788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:43:27.103 [DEBUG] [Thread-194788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] client lang: <none>
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] server lang: <none>
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] kex follows: False
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:43:27.104 [DEBUG] [Thread-194788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:43:27.105 [DEBUG] [Thread-194788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:43:27.105 [DEBUG] [Thread-194788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:43:27.105 [DEBUG] [Thread-194788] [transport.py] [_log()] Compression: none
2026-04-12T19:43:27.105 [DEBUG] [Thread-194788] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:43:27.161 [DEBUG] [Thread-194788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:43:27.161 [DEBUG] [Thread-194788] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:43:27.161 [DEBUG] [Thread-194788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:43:27.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:43:27.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:43:27.218 [DEBUG] [Thread-194788] [transport.py] [_log()] userauth is OK
2026-04-12T19:43:27.218 [DEBUG] [Thread-194788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:43:27.218 [DEBUG] [Thread-194788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:43:27.218 [DEBUG] [Thread-194788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:43:27.218 [DEBUG] [Thread-194788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:43:27.234 [INFO] [Thread-194788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:43:27.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:43:27.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:43:28.109 [DEBUG] [Thread-194788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:43:28.109 [DEBUG] [Thread-194788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:43:28.159 [DEBUG] [Thread-194788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:43:28.159 [DEBUG] [Thread-194788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:43:28.167 [DEBUG] [Thread-194788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:43:28.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:43:28.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:43:28.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:43:28.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:43:28.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:43:28.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:43:28.203 [DEBUG] [Thread-194788] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:43:36.317 [DEBUG] [Thread-194790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:51.420 [DEBUG] [Thread-194791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:43:58.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:43:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:43:59.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:59.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:43:59.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 43, 19), 2.99686, 81.9691, 0.0, 10.2175, 12.4693, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:43:59.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:43:19
2026-04-12T19:43:59.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:44:00.090 [DEBUG] [Thread-194792] [transport.py] [_log()] starting thread (client mode): 0xae5183d0
2026-04-12T19:44:00.090 [DEBUG] [Thread-194792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:44:00.110 [DEBUG] [Thread-194792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:44:00.110 [INFO] [Thread-194792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] client lang: <none>
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] server lang: <none>
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] kex follows: False
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:44:00.113 [DEBUG] [Thread-194792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:44:00.114 [DEBUG] [Thread-194792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:44:00.114 [DEBUG] [Thread-194792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:44:00.114 [DEBUG] [Thread-194792] [transport.py] [_log()] Compression: none
2026-04-12T19:44:00.114 [DEBUG] [Thread-194792] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:44:00.131 [DEBUG] [Thread-194792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:44:00.131 [DEBUG] [Thread-194792] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:44:00.132 [DEBUG] [Thread-194792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:44:00.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:44:00.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:44:00.133 [DEBUG] [Thread-194792] [transport.py] [_log()] userauth is OK
2026-04-12T19:44:00.133 [DEBUG] [Thread-194792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:44:00.133 [DEBUG] [Thread-194792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:44:00.133 [DEBUG] [Thread-194792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:44:00.133 [DEBUG] [Thread-194792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:44:00.150 [INFO] [Thread-194792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:44:00.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:44:00.792 [DEBUG] [Thread-194792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:44:00.792 [DEBUG] [Thread-194792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:44:00.804 [DEBUG] [Thread-194792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:44:00.832 [DEBUG] [Thread-194792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:44:00.832 [DEBUG] [Thread-194792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:44:00.835 [DEBUG] [Thread-194792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:44:00.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:44:00.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:44:00.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:44:00.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:44:00.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:44:00.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:44:00.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:44:00.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:44:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:44:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.738649 -999.00  +12.60   6.89     87  +10.60 1 3 1 2 1     0    0 2.05 -19.59 ZNE.W 6.9 6.9 204.8 9.5 14.0 -6.5 13.8 -6.1 13.6 -6.1 13.8 -8.2
2026-04-12T19:44:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:44:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:44:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.738649
2026-04-12T19:44:00.863 [DEBUG] [Thread-194792] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:44:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:44:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:44:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:44:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:44:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:44:00.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:43:19', tmtdew=2.99686, humidity=81.9691, cloud=0.0, wind=10.2175, temperature=12.4693, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:43:55', seeing=0.97, atlas_timestamp='2026-04-12T17:43:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:44:00.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:44:00.964 [DEBUG] [Thread-194795] [transport.py] [_log()] starting thread (client mode): 0xb0fcdb40
2026-04-12T19:44:00.964 [DEBUG] [Thread-194795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:44:00.979 [DEBUG] [Thread-194795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:44:00.979 [INFO] [Thread-194795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:44:00.986 [DEBUG] [Thread-194795] [transport.py] [_log()] client lang: <none>
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] server lang: <none>
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] kex follows: False
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] Compression: none
2026-04-12T19:44:00.987 [DEBUG] [Thread-194795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:44:01.041 [DEBUG] [Thread-194795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:44:01.041 [DEBUG] [Thread-194795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:44:01.041 [DEBUG] [Thread-194795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:44:01.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:44:01.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:44:01.098 [DEBUG] [Thread-194795] [transport.py] [_log()] userauth is OK
2026-04-12T19:44:01.098 [DEBUG] [Thread-194795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:44:01.098 [DEBUG] [Thread-194795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:44:01.098 [DEBUG] [Thread-194795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:44:01.098 [DEBUG] [Thread-194795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:44:01.114 [INFO] [Thread-194795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:44:01.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:44:01.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:44:01.953 [DEBUG] [Thread-194795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:44:01.953 [DEBUG] [Thread-194795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:44:01.999 [DEBUG] [Thread-194795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:44:01.999 [DEBUG] [Thread-194795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:44:02.008 [DEBUG] [Thread-194795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:44:02.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:44:02.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:44:02.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:44:02.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:44:02.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:44:02.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:44:02.044 [DEBUG] [Thread-194795] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:44:03.625 [DEBUG] [Thread-194797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:44:06.449 [DEBUG] [Thread-194798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:44:21.485 [DEBUG] [Thread-194799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:44:32.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:44:32.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:44:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:44:33.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 43, 55), 2.78938, 83.2841, 0.0, 8.39988, 12.4027, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:44:33.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:43:55
2026-04-12T19:44:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:44:34.005 [DEBUG] [Thread-194800] [transport.py] [_log()] starting thread (client mode): 0xae519ed0
2026-04-12T19:44:34.005 [DEBUG] [Thread-194800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:44:34.020 [DEBUG] [Thread-194800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:44:34.020 [INFO] [Thread-194800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] client lang: <none>
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] server lang: <none>
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] kex follows: False
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:44:34.022 [DEBUG] [Thread-194800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:44:34.023 [DEBUG] [Thread-194800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:44:34.023 [DEBUG] [Thread-194800] [transport.py] [_log()] Compression: none
2026-04-12T19:44:34.023 [DEBUG] [Thread-194800] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:44:34.031 [DEBUG] [Thread-194800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:44:34.031 [DEBUG] [Thread-194800] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:44:34.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:44:34.032 [DEBUG] [Thread-194800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:44:34.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:44:34.032 [DEBUG] [Thread-194800] [transport.py] [_log()] userauth is OK
2026-04-12T19:44:34.032 [DEBUG] [Thread-194800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:44:34.032 [DEBUG] [Thread-194800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:44:34.032 [DEBUG] [Thread-194800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:44:34.032 [DEBUG] [Thread-194800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:44:34.042 [INFO] [Thread-194800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:44:34.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:44:34.679 [DEBUG] [Thread-194800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:44:34.679 [DEBUG] [Thread-194800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:44:34.679 [DEBUG] [Thread-194800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:44:34.719 [DEBUG] [Thread-194800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:44:34.719 [DEBUG] [Thread-194800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:44:34.721 [DEBUG] [Thread-194800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:44:34.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:44:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:44:34.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:44:34.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:44:34.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:44:34.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:44:34.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:44:34.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:44:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:44:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.738997 -999.00  +12.50   6.77     88  +10.70 1 3 1 3 1     0    0 1.92 -23.12 .N..W 6.8 6.8 195.6 9.9 13.9 -7.3 13.8 -6.7 13.6 -6.5 13.8 -7.2
2026-04-12T19:44:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:44:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:44:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.738997
2026-04-12T19:44:34.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:44:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:44:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:44:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:44:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:44:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:43:55', tmtdew=2.78938, humidity=83.2841, cloud=0.0, wind=8.39988, temperature=12.4027, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:44:31', seeing=0.97, atlas_timestamp='2026-04-12T17:44:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:44:34.746 [DEBUG] [Thread-194800] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:44:34.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:44:34.831 [DEBUG] [Thread-194803] [transport.py] [_log()] starting thread (client mode): 0xae51aaa0
2026-04-12T19:44:34.831 [DEBUG] [Thread-194803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:44:34.846 [DEBUG] [Thread-194803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:44:34.846 [INFO] [Thread-194803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] client lang: <none>
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] server lang: <none>
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] kex follows: False
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] Compression: none
2026-04-12T19:44:34.855 [DEBUG] [Thread-194803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:44:34.909 [DEBUG] [Thread-194803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:44:34.909 [DEBUG] [Thread-194803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:44:34.910 [DEBUG] [Thread-194803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:44:34.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:44:34.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:44:34.966 [DEBUG] [Thread-194803] [transport.py] [_log()] userauth is OK
2026-04-12T19:44:34.967 [DEBUG] [Thread-194803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:44:34.967 [DEBUG] [Thread-194803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:44:34.967 [DEBUG] [Thread-194803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:44:34.967 [DEBUG] [Thread-194803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:44:34.981 [INFO] [Thread-194803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:44:34.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:44:34.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:44:35.815 [DEBUG] [Thread-194803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:44:35.815 [DEBUG] [Thread-194803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:44:35.870 [DEBUG] [Thread-194803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:44:35.870 [DEBUG] [Thread-194803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:44:35.879 [DEBUG] [Thread-194803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:44:35.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:44:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:44:35.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:44:35.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:44:35.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:44:35.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:44:35.912 [DEBUG] [Thread-194803] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:44:36.511 [DEBUG] [Thread-194805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:44:51.560 [DEBUG] [Thread-194806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:44:59.223 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:44:59.226 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:45:03.923 [DEBUG] [Thread-194807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:45:05.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:45:05.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:45:05.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:45:06.588 [DEBUG] [Thread-194808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:45:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 44, 30), 2.73561, 83.5827, 0.0, 7.88832, 12.4028, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:45:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:44:30
2026-04-12T19:45:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:45:07.887 [DEBUG] [Thread-194809] [transport.py] [_log()] starting thread (client mode): 0xae5e6ec0
2026-04-12T19:45:07.888 [DEBUG] [Thread-194809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:45:07.902 [DEBUG] [Thread-194809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:45:07.903 [INFO] [Thread-194809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] client lang: <none>
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] server lang: <none>
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] kex follows: False
2026-04-12T19:45:07.907 [DEBUG] [Thread-194809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:45:07.908 [DEBUG] [Thread-194809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:45:07.908 [DEBUG] [Thread-194809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:45:07.908 [DEBUG] [Thread-194809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:45:07.908 [DEBUG] [Thread-194809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:45:07.908 [DEBUG] [Thread-194809] [transport.py] [_log()] Compression: none
2026-04-12T19:45:07.908 [DEBUG] [Thread-194809] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:45:07.932 [DEBUG] [Thread-194809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:45:07.933 [DEBUG] [Thread-194809] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:45:07.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:45:07.936 [DEBUG] [Thread-194809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:45:07.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:45:07.940 [DEBUG] [Thread-194809] [transport.py] [_log()] userauth is OK
2026-04-12T19:45:07.940 [DEBUG] [Thread-194809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:45:07.940 [DEBUG] [Thread-194809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:45:07.940 [DEBUG] [Thread-194809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:45:07.940 [DEBUG] [Thread-194809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:45:07.953 [INFO] [Thread-194809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:45:07.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:45:08.500 [DEBUG] [Thread-194809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:45:08.500 [DEBUG] [Thread-194809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:45:08.501 [DEBUG] [Thread-194809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:45:08.541 [DEBUG] [Thread-194809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:45:08.541 [DEBUG] [Thread-194809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:45:08.544 [DEBUG] [Thread-194809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:45:08.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:45:08.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:45:08.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:45:08.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:45:08.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:45:08.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:45:08.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:45:08.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:45:08.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:45:08.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.739344 -999.00  +12.50   4.92     89  +10.80 1 3 1 3 1     0    0 1.78 -26.29 .N..W 4.9 4.9 204.6 9.6 13.9 -6.3 13.8 -5.0 13.6 -5.9 13.8 -7.9
2026-04-12T19:45:08.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:45:08.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:45:08.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.739344
2026-04-12T19:45:08.571 [DEBUG] [Thread-194809] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:45:08.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:45:08.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:45:08.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:45:08.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:45:08.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:45:08.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:44:30', tmtdew=2.73561, humidity=83.5827, cloud=0.0, wind=7.88832, temperature=12.4028, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:44:31', seeing=0.97, atlas_timestamp='2026-04-12T17:44:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:45:08.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:45:08.667 [DEBUG] [Thread-194812] [transport.py] [_log()] starting thread (client mode): 0xb0fcc610
2026-04-12T19:45:08.667 [DEBUG] [Thread-194812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:45:08.682 [DEBUG] [Thread-194812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:45:08.682 [INFO] [Thread-194812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:45:08.690 [DEBUG] [Thread-194812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:45:08.690 [DEBUG] [Thread-194812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:45:08.690 [DEBUG] [Thread-194812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:45:08.690 [DEBUG] [Thread-194812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:08.690 [DEBUG] [Thread-194812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:08.690 [DEBUG] [Thread-194812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] client lang: <none>
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] server lang: <none>
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] kex follows: False
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:45:08.691 [DEBUG] [Thread-194812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:45:08.692 [DEBUG] [Thread-194812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:45:08.692 [DEBUG] [Thread-194812] [transport.py] [_log()] Compression: none
2026-04-12T19:45:08.692 [DEBUG] [Thread-194812] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:45:08.747 [DEBUG] [Thread-194812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:45:08.747 [DEBUG] [Thread-194812] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:45:08.748 [DEBUG] [Thread-194812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:45:08.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:45:08.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:45:08.803 [DEBUG] [Thread-194812] [transport.py] [_log()] userauth is OK
2026-04-12T19:45:08.803 [DEBUG] [Thread-194812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:45:08.804 [DEBUG] [Thread-194812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:45:08.804 [DEBUG] [Thread-194812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:45:08.804 [DEBUG] [Thread-194812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:45:08.823 [INFO] [Thread-194812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:45:08.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:45:08.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:45:09.661 [DEBUG] [Thread-194812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:45:09.662 [DEBUG] [Thread-194812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:45:09.710 [DEBUG] [Thread-194812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:45:09.711 [DEBUG] [Thread-194812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:45:09.719 [DEBUG] [Thread-194812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:45:09.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:45:09.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:45:09.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:45:09.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:45:09.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:45:09.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:45:09.755 [DEBUG] [Thread-194812] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:45:21.614 [DEBUG] [Thread-194814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:45:36.709 [DEBUG] [Thread-194815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:45:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:45:39.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:45:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:45:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 45, 6), 2.66798, 83.9646, 0.0, 8.0118, 12.4364, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:45:41.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:45:06
2026-04-12T19:45:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:45:41.675 [DEBUG] [Thread-194816] [transport.py] [_log()] starting thread (client mode): 0xae50be50
2026-04-12T19:45:41.675 [DEBUG] [Thread-194816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:45:41.676 [DEBUG] [Thread-194816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:45:41.676 [INFO] [Thread-194816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:45:41.680 [DEBUG] [Thread-194816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] client lang: <none>
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] server lang: <none>
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] kex follows: False
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:45:41.681 [DEBUG] [Thread-194816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:45:41.682 [DEBUG] [Thread-194816] [transport.py] [_log()] Compression: none
2026-04-12T19:45:41.682 [DEBUG] [Thread-194816] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:45:41.708 [DEBUG] [Thread-194816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:45:41.711 [DEBUG] [Thread-194816] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:45:41.712 [DEBUG] [Thread-194816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:45:41.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:45:41.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:45:41.753 [DEBUG] [Thread-194816] [transport.py] [_log()] userauth is OK
2026-04-12T19:45:41.753 [DEBUG] [Thread-194816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:45:41.753 [DEBUG] [Thread-194816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:45:41.753 [DEBUG] [Thread-194816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:45:41.753 [DEBUG] [Thread-194816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:45:41.771 [INFO] [Thread-194816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:45:41.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:45:42.372 [DEBUG] [Thread-194816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:45:42.372 [DEBUG] [Thread-194816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:45:42.374 [DEBUG] [Thread-194816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:45:42.413 [DEBUG] [Thread-194816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:45:42.413 [DEBUG] [Thread-194816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:45:42.415 [DEBUG] [Thread-194816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:45:42.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:45:42.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:45:42.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:45:42.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:45:42.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:45:42.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:45:42.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:45:42.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:45:42.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:45:42.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.739691 -999.00  +12.50   3.51     89  +10.80 1 3 1 3 1     0    0 1.68 -30.74 .N.SW 3.5 3.5 207.8 8.3 14.0 -4.9 13.8 -4.2 13.6 -4.6 13.8 -6.1
2026-04-12T19:45:42.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:45:42.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:45:42.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.739691
2026-04-12T19:45:42.444 [DEBUG] [Thread-194816] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:45:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:45:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:45:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:45:42.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:45:42.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:45:42.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:45:06', tmtdew=2.66798, humidity=83.9646, cloud=0.0, wind=8.0118, temperature=12.4364, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:45:06', seeing=0.97, atlas_timestamp='2026-04-12T17:45:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:45:42.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:45:42.566 [DEBUG] [Thread-194819] [transport.py] [_log()] starting thread (client mode): 0xae509810
2026-04-12T19:45:42.566 [DEBUG] [Thread-194819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:45:42.585 [DEBUG] [Thread-194819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:45:42.585 [INFO] [Thread-194819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] client lang: <none>
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] server lang: <none>
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] kex follows: False
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:45:42.593 [DEBUG] [Thread-194819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:45:42.595 [DEBUG] [Thread-194819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:45:42.595 [DEBUG] [Thread-194819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:45:42.595 [DEBUG] [Thread-194819] [transport.py] [_log()] Compression: none
2026-04-12T19:45:42.595 [DEBUG] [Thread-194819] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:45:42.656 [DEBUG] [Thread-194819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:45:42.657 [DEBUG] [Thread-194819] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:45:42.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:45:42.658 [DEBUG] [Thread-194819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:45:42.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:45:42.715 [DEBUG] [Thread-194819] [transport.py] [_log()] userauth is OK
2026-04-12T19:45:42.715 [DEBUG] [Thread-194819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:45:42.715 [DEBUG] [Thread-194819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:45:42.716 [DEBUG] [Thread-194819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:45:42.716 [DEBUG] [Thread-194819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:45:42.738 [INFO] [Thread-194819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:45:42.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:45:42.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:45:43.556 [DEBUG] [Thread-194819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:45:43.556 [DEBUG] [Thread-194819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:45:43.604 [DEBUG] [Thread-194819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:45:43.604 [DEBUG] [Thread-194819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:45:43.613 [DEBUG] [Thread-194819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:45:43.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:45:43.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:45:43.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:45:43.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:45:43.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:45:43.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:45:43.649 [DEBUG] [Thread-194819] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:45:51.744 [DEBUG] [Thread-194821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:45:59.431 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:45:59.432 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:46:04.365 [DEBUG] [Thread-194822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:46:06.815 [DEBUG] [Thread-194823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:46:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:46:13.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:46:13.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:46:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 45, 41), 2.57699, 84.2607, 0.0, 9.42336, 12.7727, 0, 1, 0, 2, 0, 0),)
2026-04-12T19:46:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:45:41
2026-04-12T19:46:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:46:15.525 [DEBUG] [Thread-194824] [transport.py] [_log()] starting thread (client mode): 0xae5e6110
2026-04-12T19:46:15.525 [DEBUG] [Thread-194824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:46:15.536 [DEBUG] [Thread-194824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:46:15.536 [INFO] [Thread-194824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:46:15.540 [DEBUG] [Thread-194824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:46:15.540 [DEBUG] [Thread-194824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] client lang: <none>
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] server lang: <none>
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] kex follows: False
2026-04-12T19:46:15.541 [DEBUG] [Thread-194824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:46:15.542 [DEBUG] [Thread-194824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:46:15.542 [DEBUG] [Thread-194824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:46:15.542 [DEBUG] [Thread-194824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:46:15.543 [DEBUG] [Thread-194824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:46:15.543 [DEBUG] [Thread-194824] [transport.py] [_log()] Compression: none
2026-04-12T19:46:15.543 [DEBUG] [Thread-194824] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:46:15.559 [DEBUG] [Thread-194824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:46:15.559 [DEBUG] [Thread-194824] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:46:15.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:46:15.561 [DEBUG] [Thread-194824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:46:15.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:46:15.563 [DEBUG] [Thread-194824] [transport.py] [_log()] userauth is OK
2026-04-12T19:46:15.563 [DEBUG] [Thread-194824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:46:15.563 [DEBUG] [Thread-194824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:46:15.563 [DEBUG] [Thread-194824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:46:15.564 [DEBUG] [Thread-194824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:46:15.589 [INFO] [Thread-194824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:46:15.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:46:16.164 [DEBUG] [Thread-194824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:46:16.165 [DEBUG] [Thread-194824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:46:16.165 [DEBUG] [Thread-194824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:46:16.206 [DEBUG] [Thread-194824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:46:16.206 [DEBUG] [Thread-194824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:46:16.209 [DEBUG] [Thread-194824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:46:16.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:46:16.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:46:16.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:46:16.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:46:16.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:46:16.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:46:16.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:46:16.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:46:16.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:46:16.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.740385 -999.00  +12.50   8.99     90  +10.90 1 3 1 3 1     0    0 1.40 -37.24 .N..W 9.0 9.0 203.6 11.2 14.1 -6.6 13.8 -7.3 13.6 -5.7 13.9 -5.3
2026-04-12T19:46:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:46:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:46:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.740385
2026-04-12T19:46:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:46:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:46:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:46:16.244 [DEBUG] [Thread-194824] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:46:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:46:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:46:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:45:41', tmtdew=2.57699, humidity=84.2607, cloud=0.0, wind=9.42336, temperature=12.7727, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:45:42', seeing=0.97, atlas_timestamp='2026-04-12T17:46:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[0.7552499999999993, 1.1422500000000007, nan, 0.6204999999999989, 0.26099999999999923, 0.3752500000000012, 0.8554999999999993, 0.6372500000000008, 0.47949999999999804, nan, 1.77325, 0.5750000000000002, 0.17499999999999893, 0.24375000000000036, 0.5299999999999994, 1.450499999999999, 1.0172499999999998, nan, 1.209999999999999, 0.7567499999999994, 0.13099999999999845, 0.021749999999999048, 0.03725000000000023, nan, nan, nan, nan, nan, 0.1410000000000018, 0.05000000000000071, 0.06800000000000139, 0.5025000000000022, nan], zp_timestamp='2026-04-12T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:46:16.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:46:16.349 [DEBUG] [Thread-194827] [transport.py] [_log()] starting thread (client mode): 0xae519f90
2026-04-12T19:46:16.349 [DEBUG] [Thread-194827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:46:16.368 [DEBUG] [Thread-194827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:46:16.368 [INFO] [Thread-194827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:46:16.376 [DEBUG] [Thread-194827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] client lang: <none>
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] server lang: <none>
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] kex follows: False
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] Compression: none
2026-04-12T19:46:16.377 [DEBUG] [Thread-194827] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:46:16.436 [DEBUG] [Thread-194827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:46:16.437 [DEBUG] [Thread-194827] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:46:16.437 [DEBUG] [Thread-194827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:46:16.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:46:16.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:46:16.492 [DEBUG] [Thread-194827] [transport.py] [_log()] userauth is OK
2026-04-12T19:46:16.493 [DEBUG] [Thread-194827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:46:16.493 [DEBUG] [Thread-194827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:46:16.493 [DEBUG] [Thread-194827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:46:16.493 [DEBUG] [Thread-194827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:46:16.511 [INFO] [Thread-194827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:46:16.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:46:16.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:46:17.348 [DEBUG] [Thread-194827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:46:17.348 [DEBUG] [Thread-194827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:46:17.397 [DEBUG] [Thread-194827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:46:17.397 [DEBUG] [Thread-194827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:46:17.407 [DEBUG] [Thread-194827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:46:17.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:46:17.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:46:17.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:46:17.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:46:17.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:46:17.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:46:17.444 [DEBUG] [Thread-194827] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:46:21.852 [DEBUG] [Thread-194829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:46:36.916 [DEBUG] [Thread-194830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:46:47.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:46:47.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:46:47.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:46:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 46, 17), 2.21223, 86.0618, 0.0, 9.21132, 12.4367, 1, 1, 0, 2, 0, 0),)
2026-04-12T19:46:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:46:17
2026-04-12T19:46:49.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:46:49.271 [DEBUG] [Thread-194831] [transport.py] [_log()] starting thread (client mode): 0xae518fa0
2026-04-12T19:46:49.271 [DEBUG] [Thread-194831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:46:49.282 [DEBUG] [Thread-194831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:46:49.282 [INFO] [Thread-194831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:46:49.286 [DEBUG] [Thread-194831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:46:49.286 [DEBUG] [Thread-194831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:46:49.286 [DEBUG] [Thread-194831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:46:49.286 [DEBUG] [Thread-194831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] client lang: <none>
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] server lang: <none>
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] kex follows: False
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:46:49.287 [DEBUG] [Thread-194831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:46:49.288 [DEBUG] [Thread-194831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:46:49.288 [DEBUG] [Thread-194831] [transport.py] [_log()] Compression: none
2026-04-12T19:46:49.288 [DEBUG] [Thread-194831] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:46:49.306 [DEBUG] [Thread-194831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:46:49.307 [DEBUG] [Thread-194831] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:46:49.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:46:49.308 [DEBUG] [Thread-194831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:46:49.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:46:49.349 [DEBUG] [Thread-194831] [transport.py] [_log()] userauth is OK
2026-04-12T19:46:49.349 [DEBUG] [Thread-194831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:46:49.349 [DEBUG] [Thread-194831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:46:49.349 [DEBUG] [Thread-194831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:46:49.349 [DEBUG] [Thread-194831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:46:49.375 [INFO] [Thread-194831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:46:49.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:46:50.101 [DEBUG] [Thread-194831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:46:50.101 [DEBUG] [Thread-194831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:46:50.102 [DEBUG] [Thread-194831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:46:50.142 [DEBUG] [Thread-194831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:46:50.142 [DEBUG] [Thread-194831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:46:50.145 [DEBUG] [Thread-194831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:46:50.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:46:50.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:46:50.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:46:50.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:46:50.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:46:50.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:46:50.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:46:50.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:46:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:46:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.740385 -999.00  +12.50   8.99     90  +10.90 1 3 1 3 1     0    0 1.40 -37.24 .N..W 9.0 9.0 203.6 11.2 14.1 -6.6 13.8 -7.3 13.6 -5.7 13.9 -5.3
2026-04-12T19:46:50.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:46:50.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:46:50.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.740385
2026-04-12T19:46:50.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:46:50.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:46:50.171 [DEBUG] [Thread-194831] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:46:50.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:46:50.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:46:50.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:46:50.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:46:17', tmtdew=2.21223, humidity=86.0618, cloud=0.0, wind=9.21132, temperature=12.4367, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:46:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:46:50.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:46:50.276 [DEBUG] [Thread-194834] [transport.py] [_log()] starting thread (client mode): 0xae5e6dd0
2026-04-12T19:46:50.276 [DEBUG] [Thread-194834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:46:50.290 [DEBUG] [Thread-194834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:46:50.290 [INFO] [Thread-194834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:46:50.298 [DEBUG] [Thread-194834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:46:50.298 [DEBUG] [Thread-194834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:46:50.298 [DEBUG] [Thread-194834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:46:50.299 [DEBUG] [Thread-194834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:50.299 [DEBUG] [Thread-194834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:46:50.299 [DEBUG] [Thread-194834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:50.299 [DEBUG] [Thread-194834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:46:50.299 [DEBUG] [Thread-194834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:46:50.299 [DEBUG] [Thread-194834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:46:50.299 [DEBUG] [Thread-194834] [transport.py] [_log()] client lang: <none>
2026-04-12T19:46:50.300 [DEBUG] [Thread-194834] [transport.py] [_log()] server lang: <none>
2026-04-12T19:46:50.300 [DEBUG] [Thread-194834] [transport.py] [_log()] kex follows: False
2026-04-12T19:46:50.300 [DEBUG] [Thread-194834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:46:50.300 [DEBUG] [Thread-194834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:46:50.300 [DEBUG] [Thread-194834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:46:50.300 [DEBUG] [Thread-194834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:46:50.300 [DEBUG] [Thread-194834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:46:50.309 [DEBUG] [Thread-194834] [transport.py] [_log()] Compression: none
2026-04-12T19:46:50.309 [DEBUG] [Thread-194834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:46:50.360 [DEBUG] [Thread-194834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:46:50.361 [DEBUG] [Thread-194834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:46:50.361 [DEBUG] [Thread-194834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:46:50.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:46:50.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:46:50.416 [DEBUG] [Thread-194834] [transport.py] [_log()] userauth is OK
2026-04-12T19:46:50.416 [DEBUG] [Thread-194834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:46:50.416 [DEBUG] [Thread-194834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:46:50.417 [DEBUG] [Thread-194834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:46:50.417 [DEBUG] [Thread-194834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:46:50.435 [INFO] [Thread-194834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:46:50.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:46:50.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:46:51.256 [DEBUG] [Thread-194834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:46:51.256 [DEBUG] [Thread-194834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:46:51.304 [DEBUG] [Thread-194834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:46:51.304 [DEBUG] [Thread-194834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:46:51.313 [DEBUG] [Thread-194834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:46:51.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:46:51.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:46:51.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:46:51.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:46:51.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:46:51.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:46:51.359 [DEBUG] [Thread-194834] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:46:51.955 [DEBUG] [Thread-194836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:46:59.636 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:46:59.637 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:47:04.455 [DEBUG] [Thread-194837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:47:07.020 [DEBUG] [Thread-194838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:47:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:47:21.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:47:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:47:22.057 [DEBUG] [Thread-194839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:47:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 46, 52), 2.26989, 86.019, 0.0, 12.2105, 12.906, 1, 1, 0, 2, 0, 0),)
2026-04-12T19:47:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:46:52
2026-04-12T19:47:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:47:23.227 [DEBUG] [Thread-194840] [transport.py] [_log()] starting thread (client mode): 0xae5a65f0
2026-04-12T19:47:23.227 [DEBUG] [Thread-194840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:47:23.249 [DEBUG] [Thread-194840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:47:23.250 [INFO] [Thread-194840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] client lang: <none>
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] server lang: <none>
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] kex follows: False
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] Compression: none
2026-04-12T19:47:23.253 [DEBUG] [Thread-194840] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:47:23.269 [DEBUG] [Thread-194840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:47:23.269 [DEBUG] [Thread-194840] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:47:23.270 [DEBUG] [Thread-194840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:47:23.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:47:23.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:47:23.272 [DEBUG] [Thread-194840] [transport.py] [_log()] userauth is OK
2026-04-12T19:47:23.272 [DEBUG] [Thread-194840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:47:23.272 [DEBUG] [Thread-194840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:47:23.273 [DEBUG] [Thread-194840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:47:23.273 [DEBUG] [Thread-194840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:47:23.291 [INFO] [Thread-194840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:47:23.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:47:24.099 [DEBUG] [Thread-194840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:47:24.100 [DEBUG] [Thread-194840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:47:24.100 [DEBUG] [Thread-194840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:47:24.141 [DEBUG] [Thread-194840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:47:24.142 [DEBUG] [Thread-194840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:47:24.145 [DEBUG] [Thread-194840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:47:24.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:47:24.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:47:24.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:47:24.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:47:24.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:47:24.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:47:24.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:47:24.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:47:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:47:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.740733 -999.00  +12.50   6.08     90  +10.90 1 3 1 3 1     0    0 1.37 -39.22 z.ES. 6.1 6.1 197.2 10.8 14.1 -7.6 13.9 -7.8 13.6 -6.5 13.9 -6.6
2026-04-12T19:47:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:47:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:47:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.740733
2026-04-12T19:47:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:47:24.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:47:24.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:47:24.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:47:24.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:47:24.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:46:52', tmtdew=2.26989, humidity=86.019, cloud=0.0, wind=12.2105, temperature=12.906, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:46:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:47:24.171 [DEBUG] [Thread-194840] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:47:24.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:47:24.266 [DEBUG] [Thread-194843] [transport.py] [_log()] starting thread (client mode): 0xae5f0760
2026-04-12T19:47:24.266 [DEBUG] [Thread-194843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:47:24.281 [DEBUG] [Thread-194843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:47:24.281 [INFO] [Thread-194843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:47:24.291 [DEBUG] [Thread-194843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:47:24.291 [DEBUG] [Thread-194843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:47:24.291 [DEBUG] [Thread-194843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:47:24.291 [DEBUG] [Thread-194843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] client lang: <none>
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] server lang: <none>
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] kex follows: False
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] Compression: none
2026-04-12T19:47:24.292 [DEBUG] [Thread-194843] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:47:24.356 [DEBUG] [Thread-194843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:47:24.357 [DEBUG] [Thread-194843] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:47:24.358 [DEBUG] [Thread-194843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:47:24.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:47:24.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:47:24.412 [DEBUG] [Thread-194843] [transport.py] [_log()] userauth is OK
2026-04-12T19:47:24.413 [DEBUG] [Thread-194843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:47:24.413 [DEBUG] [Thread-194843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:47:24.413 [DEBUG] [Thread-194843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:47:24.413 [DEBUG] [Thread-194843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:47:24.432 [INFO] [Thread-194843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:47:24.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:47:24.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:47:25.273 [DEBUG] [Thread-194843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:47:25.273 [DEBUG] [Thread-194843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:47:25.321 [DEBUG] [Thread-194843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:47:25.322 [DEBUG] [Thread-194843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:47:25.330 [DEBUG] [Thread-194843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:47:25.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:47:25.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:47:25.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:47:25.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:47:25.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:47:25.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:47:25.368 [DEBUG] [Thread-194843] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:47:37.093 [DEBUG] [Thread-194845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:47:52.152 [DEBUG] [Thread-194846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:47:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:47:55.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:47:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:47:56.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 47, 28), 1.95711, 87.9575, 0.0, 10.782, 12.5032, 1, 1, 0, 2, 0, 0),)
2026-04-12T19:47:56.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:47:28
2026-04-12T19:47:57.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:47:57.210 [DEBUG] [Thread-194847] [transport.py] [_log()] starting thread (client mode): 0xae5a74f0
2026-04-12T19:47:57.210 [DEBUG] [Thread-194847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:47:57.232 [DEBUG] [Thread-194847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:47:57.232 [INFO] [Thread-194847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:47:57.235 [DEBUG] [Thread-194847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:47:57.245 [DEBUG] [Thread-194847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:47:57.245 [DEBUG] [Thread-194847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:47:57.245 [DEBUG] [Thread-194847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:57.245 [DEBUG] [Thread-194847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:57.245 [DEBUG] [Thread-194847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] client lang: <none>
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] server lang: <none>
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] kex follows: False
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:47:57.246 [DEBUG] [Thread-194847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:47:57.247 [DEBUG] [Thread-194847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:47:57.247 [DEBUG] [Thread-194847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:47:57.247 [DEBUG] [Thread-194847] [transport.py] [_log()] Compression: none
2026-04-12T19:47:57.247 [DEBUG] [Thread-194847] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:47:57.266 [DEBUG] [Thread-194847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:47:57.267 [DEBUG] [Thread-194847] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:47:57.267 [DEBUG] [Thread-194847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:47:57.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:47:57.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:47:57.270 [DEBUG] [Thread-194847] [transport.py] [_log()] userauth is OK
2026-04-12T19:47:57.270 [DEBUG] [Thread-194847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:47:57.270 [DEBUG] [Thread-194847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:47:57.270 [DEBUG] [Thread-194847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:47:57.271 [DEBUG] [Thread-194847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:47:57.307 [INFO] [Thread-194847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:47:57.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:47:58.051 [DEBUG] [Thread-194847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:47:58.051 [DEBUG] [Thread-194847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:47:58.052 [DEBUG] [Thread-194847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:47:58.093 [DEBUG] [Thread-194847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:47:58.093 [DEBUG] [Thread-194847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:47:58.096 [DEBUG] [Thread-194847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:47:58.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:47:58.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:47:58.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:47:58.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:47:58.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:47:58.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:47:58.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:47:58.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:47:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:47:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.741080 -999.00  +12.50   9.94     90  +11.00 1 3 1 3 1     0    0 0.95 -48.96 Z.... 9.9 9.9 188.2 12.7 14.0 -10.0 13.8 -9.0 13.6 -8.7 13.9 -8.6
2026-04-12T19:47:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:47:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:47:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.741080
2026-04-12T19:47:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:47:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:47:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:47:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:47:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:47:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:47:28', tmtdew=1.95711, humidity=87.9575, cloud=0.0, wind=10.782, temperature=12.5032, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:47:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:47:58.121 [DEBUG] [Thread-194847] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:47:58.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:47:58.217 [DEBUG] [Thread-194850] [transport.py] [_log()] starting thread (client mode): 0xae5e6140
2026-04-12T19:47:58.217 [DEBUG] [Thread-194850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:47:58.232 [DEBUG] [Thread-194850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:47:58.232 [INFO] [Thread-194850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] client lang: <none>
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] server lang: <none>
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] kex follows: False
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:47:58.244 [DEBUG] [Thread-194850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:47:58.245 [DEBUG] [Thread-194850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:47:58.245 [DEBUG] [Thread-194850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:47:58.245 [DEBUG] [Thread-194850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:47:58.245 [DEBUG] [Thread-194850] [transport.py] [_log()] Compression: none
2026-04-12T19:47:58.245 [DEBUG] [Thread-194850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:47:58.311 [DEBUG] [Thread-194850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:47:58.312 [DEBUG] [Thread-194850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:47:58.312 [DEBUG] [Thread-194850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:47:58.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:47:58.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:47:58.369 [DEBUG] [Thread-194850] [transport.py] [_log()] userauth is OK
2026-04-12T19:47:58.369 [DEBUG] [Thread-194850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:47:58.369 [DEBUG] [Thread-194850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:47:58.369 [DEBUG] [Thread-194850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:47:58.369 [DEBUG] [Thread-194850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:47:58.389 [INFO] [Thread-194850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:47:58.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:47:58.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:47:59.218 [DEBUG] [Thread-194850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:47:59.218 [DEBUG] [Thread-194850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:47:59.266 [DEBUG] [Thread-194850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:47:59.266 [DEBUG] [Thread-194850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:47:59.276 [DEBUG] [Thread-194850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:47:59.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:47: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')
2026-04-12T19:47:59.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:47:59.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:47:59.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:47:59.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:47:59.322 [DEBUG] [Thread-194850] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:47:59.843 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:47:59.844 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:48:04.535 [DEBUG] [Thread-194852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:48:07.189 [DEBUG] [Thread-194853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:48:22.245 [DEBUG] [Thread-194854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:48:29.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:48:29.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:48:29.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:48:30.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 48, 3), 1.92326, 88.1565, 0.0, 10.976, 12.5364, 1, 1, 0, 2, 0, 0),)
2026-04-12T19:48:30.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:48:03
2026-04-12T19:48:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:48:31.171 [DEBUG] [Thread-194855] [transport.py] [_log()] starting thread (client mode): 0xae5a7820
2026-04-12T19:48:31.171 [DEBUG] [Thread-194855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:48:31.194 [DEBUG] [Thread-194855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:48:31.194 [INFO] [Thread-194855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:48:31.197 [DEBUG] [Thread-194855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:48:31.197 [DEBUG] [Thread-194855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] client lang: <none>
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] server lang: <none>
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] kex follows: False
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:48:31.198 [DEBUG] [Thread-194855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:48:31.199 [DEBUG] [Thread-194855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:48:31.199 [DEBUG] [Thread-194855] [transport.py] [_log()] Compression: none
2026-04-12T19:48:31.199 [DEBUG] [Thread-194855] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:48:31.216 [DEBUG] [Thread-194855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:48:31.217 [DEBUG] [Thread-194855] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:48:31.217 [DEBUG] [Thread-194855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:48:31.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:48:31.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:48:31.220 [DEBUG] [Thread-194855] [transport.py] [_log()] userauth is OK
2026-04-12T19:48:31.220 [DEBUG] [Thread-194855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:48:31.220 [DEBUG] [Thread-194855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:48:31.220 [DEBUG] [Thread-194855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:48:31.220 [DEBUG] [Thread-194855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:48:31.256 [INFO] [Thread-194855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:48:31.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:48:32.043 [DEBUG] [Thread-194855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:48:32.043 [DEBUG] [Thread-194855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:48:32.044 [DEBUG] [Thread-194855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:48:32.084 [DEBUG] [Thread-194855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:48:32.084 [DEBUG] [Thread-194855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:48:32.087 [DEBUG] [Thread-194855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:48:32.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:48:32.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:48:32.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:48:32.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:48:32.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:48:32.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:48:32.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:48:32.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:48:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:48:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.741427 -999.00  +12.40   8.38     91  +11.00 1 3 1 3 1     0    0 0.78 -55.82 Z.... 8.4 8.4 197.6 11.9 14.0 -7.0 13.8 -5.8 13.6 -6.6 13.9 -8.9
2026-04-12T19:48:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:48:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:48:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.741427
2026-04-12T19:48:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:48:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:48:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:48:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:48:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:48:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:48:03', tmtdew=1.92326, humidity=88.1565, cloud=0.0, wind=10.976, temperature=12.5364, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:47:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:48:32.118 [DEBUG] [Thread-194855] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:48:32.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:48:32.222 [DEBUG] [Thread-194858] [transport.py] [_log()] starting thread (client mode): 0xae5e7f10
2026-04-12T19:48:32.222 [DEBUG] [Thread-194858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:48:32.238 [DEBUG] [Thread-194858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:48:32.239 [INFO] [Thread-194858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:48:32.246 [DEBUG] [Thread-194858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:48:32.247 [DEBUG] [Thread-194858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:48:32.247 [DEBUG] [Thread-194858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:48:32.247 [DEBUG] [Thread-194858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:48:32.247 [DEBUG] [Thread-194858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:48:32.247 [DEBUG] [Thread-194858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] client lang: <none>
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] server lang: <none>
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] kex follows: False
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] Compression: none
2026-04-12T19:48:32.248 [DEBUG] [Thread-194858] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:48:32.305 [DEBUG] [Thread-194858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:48:32.305 [DEBUG] [Thread-194858] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:48:32.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:48:32.306 [DEBUG] [Thread-194858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:48:32.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:48:32.361 [DEBUG] [Thread-194858] [transport.py] [_log()] userauth is OK
2026-04-12T19:48:32.361 [DEBUG] [Thread-194858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:48:32.361 [DEBUG] [Thread-194858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:48:32.361 [DEBUG] [Thread-194858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:48:32.362 [DEBUG] [Thread-194858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:48:32.380 [INFO] [Thread-194858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:48:32.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:48:32.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:48:33.221 [DEBUG] [Thread-194858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:48:33.221 [DEBUG] [Thread-194858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:48:33.269 [DEBUG] [Thread-194858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:48:33.269 [DEBUG] [Thread-194858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:48:33.281 [DEBUG] [Thread-194858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:48:33.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:48:33.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:48:33.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:48:33.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:48:33.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:48:33.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:48:33.314 [DEBUG] [Thread-194858] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:48:37.282 [DEBUG] [Thread-194860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:48:52.343 [DEBUG] [Thread-194861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:49:00.051 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:49:00.053 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:49:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:49:03.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:49:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:49:04.606 [DEBUG] [Thread-194862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:49:04.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 48, 38), 1.92543, 88.0098, 0.0, 10.6582, 12.8736, 1, 1, 0, 2, 0, 0),)
2026-04-12T19:49:04.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:48:38
2026-04-12T19:49:05.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:49:05.208 [DEBUG] [Thread-194863] [transport.py] [_log()] starting thread (client mode): 0xb0f6efe0
2026-04-12T19:49:05.208 [DEBUG] [Thread-194863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:49:05.228 [DEBUG] [Thread-194863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:49:05.228 [INFO] [Thread-194863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] client lang: <none>
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] server lang: <none>
2026-04-12T19:49:05.231 [DEBUG] [Thread-194863] [transport.py] [_log()] kex follows: False
2026-04-12T19:49:05.232 [DEBUG] [Thread-194863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:49:05.232 [DEBUG] [Thread-194863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:49:05.232 [DEBUG] [Thread-194863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:49:05.232 [DEBUG] [Thread-194863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:49:05.232 [DEBUG] [Thread-194863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:49:05.232 [DEBUG] [Thread-194863] [transport.py] [_log()] Compression: none
2026-04-12T19:49:05.232 [DEBUG] [Thread-194863] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:49:05.249 [DEBUG] [Thread-194863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:49:05.250 [DEBUG] [Thread-194863] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:49:05.250 [DEBUG] [Thread-194863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:49:05.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:49:05.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:49:05.252 [DEBUG] [Thread-194863] [transport.py] [_log()] userauth is OK
2026-04-12T19:49:05.252 [DEBUG] [Thread-194863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:49:05.252 [DEBUG] [Thread-194863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:49:05.252 [DEBUG] [Thread-194863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:49:05.252 [DEBUG] [Thread-194863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:49:05.275 [INFO] [Thread-194863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:49:05.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:49:06.088 [DEBUG] [Thread-194863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:49:06.088 [DEBUG] [Thread-194863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:49:06.088 [DEBUG] [Thread-194863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:49:06.129 [DEBUG] [Thread-194863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:49:06.129 [DEBUG] [Thread-194863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:49:06.133 [DEBUG] [Thread-194863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:49:06.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:49:06.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:49:06.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:49:06.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:49:06.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:49:06.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:49:06.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:49:06.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:49:06.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:49:06.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.741774 -999.00  +12.40  10.14     91  +11.00 1 3 1 3 1     0    0 0.78 -56.29 Z..s. 10.1 10.1 196.4 13.6 14.1 -7.1 13.9 -7.6 13.6 -5.7 13.9 -6.4
2026-04-12T19:49:06.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:49:06.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:49:06.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.741774
2026-04-12T19:49:06.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:49:06.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:49:06.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:49:06.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:49:06.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:49:06.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:48:38', tmtdew=1.92543, humidity=88.0098, cloud=0.0, wind=10.6582, temperature=12.8736, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:48:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:49:06.159 [DEBUG] [Thread-194863] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:49:06.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:49:06.255 [DEBUG] [Thread-194866] [transport.py] [_log()] starting thread (client mode): 0xae509b70
2026-04-12T19:49:06.256 [DEBUG] [Thread-194866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:49:06.271 [DEBUG] [Thread-194866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:49:06.271 [INFO] [Thread-194866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:49:06.282 [DEBUG] [Thread-194866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] client lang: <none>
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] server lang: <none>
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] kex follows: False
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] Compression: none
2026-04-12T19:49:06.283 [DEBUG] [Thread-194866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:49:06.345 [DEBUG] [Thread-194866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:49:06.346 [DEBUG] [Thread-194866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:49:06.346 [DEBUG] [Thread-194866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:49:06.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:49:06.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:49:06.409 [DEBUG] [Thread-194866] [transport.py] [_log()] userauth is OK
2026-04-12T19:49:06.409 [DEBUG] [Thread-194866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:49:06.410 [DEBUG] [Thread-194866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:49:06.410 [DEBUG] [Thread-194866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:49:06.410 [DEBUG] [Thread-194866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:49:06.437 [INFO] [Thread-194866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:49:06.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:49:06.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:49:07.304 [DEBUG] [Thread-194866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:49:07.304 [DEBUG] [Thread-194866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:49:07.352 [DEBUG] [Thread-194866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:49:07.352 [DEBUG] [Thread-194866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:49:07.362 [DEBUG] [Thread-194866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:49:07.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:49:07.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:49:07.383 [DEBUG] [Thread-194868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:49: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') -> 00000000
2026-04-12T19:49:07.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:49:07.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:49:07.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:49:07.406 [DEBUG] [Thread-194866] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:49:22.440 [DEBUG] [Thread-194869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:49:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:49:37.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:49:37.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:49:37.479 [DEBUG] [Thread-194870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:49:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 49, 14), 1.57548, 90.2205, 0.0, 9.84708, 12.4037, 1, 2, 0, 2, 0, 0),)
2026-04-12T19:49:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:49:14
2026-04-12T19:49:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:49:39.237 [DEBUG] [Thread-194871] [transport.py] [_log()] starting thread (client mode): 0xae51ad40
2026-04-12T19:49:39.237 [DEBUG] [Thread-194871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:49:39.258 [DEBUG] [Thread-194871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:49:39.258 [INFO] [Thread-194871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] client lang: <none>
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] server lang: <none>
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] kex follows: False
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:49:39.261 [DEBUG] [Thread-194871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:49:39.262 [DEBUG] [Thread-194871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:49:39.262 [DEBUG] [Thread-194871] [transport.py] [_log()] Compression: none
2026-04-12T19:49:39.262 [DEBUG] [Thread-194871] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:49:39.279 [DEBUG] [Thread-194871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:49:39.279 [DEBUG] [Thread-194871] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:49:39.280 [DEBUG] [Thread-194871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:49:39.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:49:39.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:49:39.282 [DEBUG] [Thread-194871] [transport.py] [_log()] userauth is OK
2026-04-12T19:49:39.282 [DEBUG] [Thread-194871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:49:39.282 [DEBUG] [Thread-194871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:49:39.282 [DEBUG] [Thread-194871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:49:39.282 [DEBUG] [Thread-194871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:49:39.317 [INFO] [Thread-194871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:49:39.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:49:40.137 [DEBUG] [Thread-194871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:49:40.137 [DEBUG] [Thread-194871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:49:40.138 [DEBUG] [Thread-194871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:49:40.178 [DEBUG] [Thread-194871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:49:40.179 [DEBUG] [Thread-194871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:49:40.182 [DEBUG] [Thread-194871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:49:40.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:49:40.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:49:40.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:49:40.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:49:40.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:49:40.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:49:40.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:49:40.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:49:40.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:49:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.742121 -999.00  +12.40   7.19     91  +11.00 1 3 1 3 1     0    0 0.41 -62.84 ----- 7.2 7.2 195.0 9.3 14.0 -8.5 13.9 -8.3 13.7 -7.2 13.9 -7.9
2026-04-12T19:49:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:49:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:49:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.742121
2026-04-12T19:49:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:49:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:49:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:49:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:49:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:49:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:49:14', tmtdew=1.57548, humidity=90.2205, cloud=0.0, wind=9.84708, temperature=12.4037, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:48:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:49:40.207 [DEBUG] [Thread-194871] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:49:40.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:49:40.297 [DEBUG] [Thread-194874] [transport.py] [_log()] starting thread (client mode): 0xae5a6770
2026-04-12T19:49:40.297 [DEBUG] [Thread-194874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:49:40.312 [DEBUG] [Thread-194874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:49:40.313 [INFO] [Thread-194874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:49:40.320 [DEBUG] [Thread-194874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:49:40.320 [DEBUG] [Thread-194874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] client lang: <none>
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] server lang: <none>
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] kex follows: False
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] Compression: none
2026-04-12T19:49:40.321 [DEBUG] [Thread-194874] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:49:40.377 [DEBUG] [Thread-194874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:49:40.378 [DEBUG] [Thread-194874] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:49:40.378 [DEBUG] [Thread-194874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:49:40.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:49:40.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:49:40.433 [DEBUG] [Thread-194874] [transport.py] [_log()] userauth is OK
2026-04-12T19:49:40.434 [DEBUG] [Thread-194874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:49:40.434 [DEBUG] [Thread-194874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:49:40.434 [DEBUG] [Thread-194874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:49:40.434 [DEBUG] [Thread-194874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:49:40.453 [INFO] [Thread-194874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:49:40.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:49:40.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:49:41.284 [DEBUG] [Thread-194874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:49:41.285 [DEBUG] [Thread-194874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:49:41.333 [DEBUG] [Thread-194874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:49:41.333 [DEBUG] [Thread-194874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:49:41.343 [DEBUG] [Thread-194874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:49:41.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:49:41.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:49:41.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:49:41.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:49:41.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:49:41.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:49:41.389 [DEBUG] [Thread-194874] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:49:52.511 [DEBUG] [Thread-194876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:50:00.258 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:50:00.259 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:50:04.677 [DEBUG] [Thread-194877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:50:07.573 [DEBUG] [Thread-194878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:50:11.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:50:11.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:50:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:50:12.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 49, 49), 1.75045, 89.0383, 0.0, 9.45864, 12.8739, 1, 1, 0, 2, 0, 0),)
2026-04-12T19:50:12.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:49:49
2026-04-12T19:50:13.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:50:13.304 [DEBUG] [Thread-194879] [transport.py] [_log()] starting thread (client mode): 0xae5f2680
2026-04-12T19:50:13.305 [DEBUG] [Thread-194879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:50:13.325 [DEBUG] [Thread-194879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:50:13.325 [INFO] [Thread-194879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:50:13.328 [DEBUG] [Thread-194879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] client lang: <none>
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] server lang: <none>
2026-04-12T19:50:13.329 [DEBUG] [Thread-194879] [transport.py] [_log()] kex follows: False
2026-04-12T19:50:13.330 [DEBUG] [Thread-194879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:50:13.330 [DEBUG] [Thread-194879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:50:13.330 [DEBUG] [Thread-194879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:50:13.330 [DEBUG] [Thread-194879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:50:13.330 [DEBUG] [Thread-194879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:50:13.330 [DEBUG] [Thread-194879] [transport.py] [_log()] Compression: none
2026-04-12T19:50:13.330 [DEBUG] [Thread-194879] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:50:13.348 [DEBUG] [Thread-194879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:50:13.349 [DEBUG] [Thread-194879] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:50:13.349 [DEBUG] [Thread-194879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:50:13.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:50:13.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:50:13.353 [DEBUG] [Thread-194879] [transport.py] [_log()] userauth is OK
2026-04-12T19:50:13.353 [DEBUG] [Thread-194879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:50:13.354 [DEBUG] [Thread-194879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:50:13.354 [DEBUG] [Thread-194879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:50:13.354 [DEBUG] [Thread-194879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:50:13.389 [INFO] [Thread-194879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:50:13.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:50:14.782 [DEBUG] [Thread-194879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:50:14.782 [DEBUG] [Thread-194879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:50:14.783 [DEBUG] [Thread-194879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:50:14.824 [DEBUG] [Thread-194879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:50:14.824 [DEBUG] [Thread-194879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:50:14.827 [DEBUG] [Thread-194879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:50:14.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:50:14.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:50:14.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:50:14.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:50:14.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:50:14.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:50:14.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:50:14.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:50:14.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:50:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.742469 -999.00  +12.40   7.77     91  +11.00 1 3 1 3 1     0    0 0.25 -69.66 ----- 7.8 7.8 181.8 10.9 14.1 -10.1 13.8 -8.8 13.6 -8.1 13.9 -8.9
2026-04-12T19:50:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:50:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:50:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.742469
2026-04-12T19:50:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:50:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:50:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:50:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:50:14.879 [DEBUG] [Thread-194879] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:50:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:50:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:49:49', tmtdew=1.75045, humidity=89.0383, cloud=0.0, wind=9.45864, temperature=12.8739, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:49:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:50:14.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:50:14.974 [DEBUG] [Thread-194882] [transport.py] [_log()] starting thread (client mode): 0xae5f1240
2026-04-12T19:50:14.974 [DEBUG] [Thread-194882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:50:14.988 [DEBUG] [Thread-194882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:50:14.988 [INFO] [Thread-194882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] client lang: <none>
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] server lang: <none>
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] kex follows: False
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:50:14.996 [DEBUG] [Thread-194882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:50:14.997 [DEBUG] [Thread-194882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:50:14.997 [DEBUG] [Thread-194882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:50:14.997 [DEBUG] [Thread-194882] [transport.py] [_log()] Compression: none
2026-04-12T19:50:14.997 [DEBUG] [Thread-194882] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:50:15.054 [DEBUG] [Thread-194882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:50:15.054 [DEBUG] [Thread-194882] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:50:15.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:50:15.055 [DEBUG] [Thread-194882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:50:15.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:50:15.109 [DEBUG] [Thread-194882] [transport.py] [_log()] userauth is OK
2026-04-12T19:50:15.110 [DEBUG] [Thread-194882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:50:15.110 [DEBUG] [Thread-194882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:50:15.110 [DEBUG] [Thread-194882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:50:15.110 [DEBUG] [Thread-194882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:50:15.129 [INFO] [Thread-194882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:50:15.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:50:15.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:50:15.949 [DEBUG] [Thread-194882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:50:15.949 [DEBUG] [Thread-194882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:50:15.997 [DEBUG] [Thread-194882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:50:15.997 [DEBUG] [Thread-194882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:50:16.007 [DEBUG] [Thread-194882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:50:16.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:50:16.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:50:16.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:50:16.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:50:16.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:50:16.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:50:16.044 [DEBUG] [Thread-194882] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:50:22.610 [DEBUG] [Thread-194884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:50:37.661 [DEBUG] [Thread-194885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:50:46.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:50:46.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:50:46.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:50:47.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 50, 25), 1.4556, 91.1352, 0.0, 10.5174, 12.437, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:50:47.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:50:25
2026-04-12T19:50:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:50:47.879 [DEBUG] [Thread-194886] [transport.py] [_log()] starting thread (client mode): 0xae5e7280
2026-04-12T19:50:47.879 [DEBUG] [Thread-194886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:50:47.901 [DEBUG] [Thread-194886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:50:47.901 [INFO] [Thread-194886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:50:47.905 [DEBUG] [Thread-194886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:50:47.905 [DEBUG] [Thread-194886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:50:47.905 [DEBUG] [Thread-194886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:50:47.905 [DEBUG] [Thread-194886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:47.905 [DEBUG] [Thread-194886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:47.905 [DEBUG] [Thread-194886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] client lang: <none>
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] server lang: <none>
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] kex follows: False
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] Compression: none
2026-04-12T19:50:47.906 [DEBUG] [Thread-194886] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:50:47.924 [DEBUG] [Thread-194886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:50:47.925 [DEBUG] [Thread-194886] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:50:47.925 [DEBUG] [Thread-194886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:50:47.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:50:47.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:50:47.928 [DEBUG] [Thread-194886] [transport.py] [_log()] userauth is OK
2026-04-12T19:50:47.928 [DEBUG] [Thread-194886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:50:47.928 [DEBUG] [Thread-194886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:50:47.928 [DEBUG] [Thread-194886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:50:47.928 [DEBUG] [Thread-194886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:50:47.950 [INFO] [Thread-194886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:50:47.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:50:48.712 [DEBUG] [Thread-194886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:50:48.712 [DEBUG] [Thread-194886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:50:48.712 [DEBUG] [Thread-194886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:50:48.754 [DEBUG] [Thread-194886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:50:48.754 [DEBUG] [Thread-194886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:50:48.757 [DEBUG] [Thread-194886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:50:48.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:50:48.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:50:48.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:50:48.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:50:48.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:50:48.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:50:48.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:50:48.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:50:48.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:50:48.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.743163 -999.00  +12.30   8.23     92  +11.00 1 3 1 3 1     0    0 0.17 -71.00 ZnE.. 8.2 8.2 193.2 10.7 14.0 -7.4 13.8 -7.1 13.7 -6.5 13.9 -7.0
2026-04-12T19:50:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:50:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:50:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.743163
2026-04-12T19:50:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:50:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:50:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:50:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:50:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:50:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:50:25', tmtdew=1.4556, humidity=91.1352, cloud=0.0, wind=10.5174, temperature=12.437, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:50:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:50:48.782 [DEBUG] [Thread-194886] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:50:48.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:50:48.885 [DEBUG] [Thread-194889] [transport.py] [_log()] starting thread (client mode): 0xae5a44c0
2026-04-12T19:50:48.885 [DEBUG] [Thread-194889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:50:48.900 [DEBUG] [Thread-194889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:50:48.900 [INFO] [Thread-194889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:50:48.907 [DEBUG] [Thread-194889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] client lang: <none>
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] server lang: <none>
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] kex follows: False
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:50:48.908 [DEBUG] [Thread-194889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:50:48.909 [DEBUG] [Thread-194889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:50:48.909 [DEBUG] [Thread-194889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:50:48.909 [DEBUG] [Thread-194889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:50:48.909 [DEBUG] [Thread-194889] [transport.py] [_log()] Compression: none
2026-04-12T19:50:48.909 [DEBUG] [Thread-194889] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:50:48.965 [DEBUG] [Thread-194889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:50:48.966 [DEBUG] [Thread-194889] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:50:48.967 [DEBUG] [Thread-194889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:50:48.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:50:48.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:50:49.024 [DEBUG] [Thread-194889] [transport.py] [_log()] userauth is OK
2026-04-12T19:50:49.024 [DEBUG] [Thread-194889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:50:49.024 [DEBUG] [Thread-194889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:50:49.025 [DEBUG] [Thread-194889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:50:49.025 [DEBUG] [Thread-194889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:50:49.047 [INFO] [Thread-194889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:50:49.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:50:49.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:50:49.899 [DEBUG] [Thread-194889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:50:49.900 [DEBUG] [Thread-194889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:50:49.947 [DEBUG] [Thread-194889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:50:49.948 [DEBUG] [Thread-194889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:50:49.956 [DEBUG] [Thread-194889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:50:49.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:50:49.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:50:49.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:50:49.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:50:49.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:50:49.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:50:49.987 [DEBUG] [Thread-194889] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:50:52.702 [DEBUG] [Thread-194891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:00.463 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:00.465 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:04.757 [DEBUG] [Thread-194892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:07.752 [DEBUG] [Thread-194893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:51:20.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:51:20.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:51:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 51), 1.32463, 91.8177, 0.0, 11.2583, 12.3705, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:51:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:51:00
2026-04-12T19:51:21.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:51:21.895 [DEBUG] [Thread-194894] [transport.py] [_log()] starting thread (client mode): 0xae5192d0
2026-04-12T19:51:21.896 [DEBUG] [Thread-194894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:51:21.916 [DEBUG] [Thread-194894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:51:21.916 [INFO] [Thread-194894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] client lang: <none>
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] server lang: <none>
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] kex follows: False
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] Compression: none
2026-04-12T19:51:21.919 [DEBUG] [Thread-194894] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:51:21.936 [DEBUG] [Thread-194894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:51:21.936 [DEBUG] [Thread-194894] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:51:21.937 [DEBUG] [Thread-194894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:51:21.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:51:21.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:51:21.981 [DEBUG] [Thread-194894] [transport.py] [_log()] userauth is OK
2026-04-12T19:51:21.981 [DEBUG] [Thread-194894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:51:21.982 [DEBUG] [Thread-194894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:51:21.982 [DEBUG] [Thread-194894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:51:21.982 [DEBUG] [Thread-194894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:51:22.013 [INFO] [Thread-194894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:51:22.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:51:22.787 [DEBUG] [Thread-194896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:22.836 [DEBUG] [Thread-194894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:51:22.836 [DEBUG] [Thread-194894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:51:22.837 [DEBUG] [Thread-194894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:51:22.877 [DEBUG] [Thread-194894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:51:22.877 [DEBUG] [Thread-194894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:51:22.881 [DEBUG] [Thread-194894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:51:22.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:51:22.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:51:22.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:51:22.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:51:22.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:51:22.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:51:22.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:51:22.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:51:22.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:51:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.743510 -999.00  +12.30   8.64     92  +11.10 1 3 1 3 1     0    0 0.03 -75.02 .N... 8.6 8.6 208.8 11.1 14.0 -7.2 13.8 -6.2 13.7 -6.5 14.0 -7.1
2026-04-12T19:51:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:51:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:51:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.743510
2026-04-12T19:51:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:51:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:51:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:51:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:51:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:51:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:51:00', tmtdew=1.32463, humidity=91.8177, cloud=0.0, wind=11.2583, temperature=12.3705, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:50:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:51:22.908 [DEBUG] [Thread-194894] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:51:22.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:51:22.999 [DEBUG] [Thread-194898] [transport.py] [_log()] starting thread (client mode): 0xae5b2920
2026-04-12T19:51:22.999 [DEBUG] [Thread-194898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:51:23.013 [DEBUG] [Thread-194898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:51:23.014 [INFO] [Thread-194898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:51:23.021 [DEBUG] [Thread-194898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] client lang: <none>
2026-04-12T19:51:23.022 [DEBUG] [Thread-194898] [transport.py] [_log()] server lang: <none>
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] kex follows: False
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] Compression: none
2026-04-12T19:51:23.023 [DEBUG] [Thread-194898] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:51:23.083 [DEBUG] [Thread-194898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:51:23.084 [DEBUG] [Thread-194898] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:51:23.084 [DEBUG] [Thread-194898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:51:23.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:51:23.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:51:23.142 [DEBUG] [Thread-194898] [transport.py] [_log()] userauth is OK
2026-04-12T19:51:23.143 [DEBUG] [Thread-194898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:51:23.143 [DEBUG] [Thread-194898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:51:23.144 [DEBUG] [Thread-194898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:51:23.144 [DEBUG] [Thread-194898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:51:23.163 [INFO] [Thread-194898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:51:23.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:51:23.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:51:23.998 [DEBUG] [Thread-194898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:51:23.998 [DEBUG] [Thread-194898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:51:24.046 [DEBUG] [Thread-194898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:51:24.046 [DEBUG] [Thread-194898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:51:24.056 [DEBUG] [Thread-194898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:51:24.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:51:24.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:51:24.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:51:24.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:51:24.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:51:24.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:51:24.091 [DEBUG] [Thread-194898] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:51:37.821 [DEBUG] [Thread-194900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:52.869 [DEBUG] [Thread-194901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:51:54.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:51:54.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:51:54.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:51:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 51, 35), 1.58243, 90.0334, 0.0, 13.9392, 12.841, 1, 2, 0, 2, 0, 0),)
2026-04-12T19:51:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:51:35
2026-04-12T19:51:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:51:55.911 [DEBUG] [Thread-194902] [transport.py] [_log()] starting thread (client mode): 0xb0f6d120
2026-04-12T19:51:55.912 [DEBUG] [Thread-194902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:51:55.928 [DEBUG] [Thread-194902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:51:55.928 [INFO] [Thread-194902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:51:55.931 [DEBUG] [Thread-194902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:51:55.931 [DEBUG] [Thread-194902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] client lang: <none>
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] server lang: <none>
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] kex follows: False
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] Compression: none
2026-04-12T19:51:55.932 [DEBUG] [Thread-194902] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:51:55.956 [DEBUG] [Thread-194902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:51:55.957 [DEBUG] [Thread-194902] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:51:55.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:51:55.958 [DEBUG] [Thread-194902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:51:55.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:51:55.968 [DEBUG] [Thread-194902] [transport.py] [_log()] userauth is OK
2026-04-12T19:51:55.969 [DEBUG] [Thread-194902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:51:55.969 [DEBUG] [Thread-194902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:51:55.969 [DEBUG] [Thread-194902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:51:55.969 [DEBUG] [Thread-194902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:51:55.992 [INFO] [Thread-194902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:51:55.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:51:56.793 [DEBUG] [Thread-194902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:51:56.793 [DEBUG] [Thread-194902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:51:56.793 [DEBUG] [Thread-194902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:51:56.834 [DEBUG] [Thread-194902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:51:56.834 [DEBUG] [Thread-194902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:51:56.837 [DEBUG] [Thread-194902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:51:56.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:51:56.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:51:56.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:51:56.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:51:56.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:51:56.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:51:56.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:51:56.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:51:56.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:51:56.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.743858 -999.00  +12.30   8.51     92  +11.00 1 3 1 3 1     0    0 -0.01 -76.76 ..... 8.5 8.5 210.4 10.7 14.0 -7.1 13.8 -5.7 13.7 -6.6 14.0 -7.1
2026-04-12T19:51:56.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:51:56.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:51:56.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.743858
2026-04-12T19:51:56.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:51:56.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:51:56.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:51:56.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:51:56.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:51:56.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:51:35', tmtdew=1.58243, humidity=90.0334, cloud=0.0, wind=13.9392, temperature=12.841, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:51:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:51:56.858 [DEBUG] [Thread-194902] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:51:56.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:51:56.959 [DEBUG] [Thread-194905] [transport.py] [_log()] starting thread (client mode): 0xb0f41150
2026-04-12T19:51:56.959 [DEBUG] [Thread-194905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:51:56.973 [DEBUG] [Thread-194905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:51:56.973 [INFO] [Thread-194905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:51:56.983 [DEBUG] [Thread-194905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:51:56.983 [DEBUG] [Thread-194905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:51:56.983 [DEBUG] [Thread-194905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:51:56.983 [DEBUG] [Thread-194905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:56.983 [DEBUG] [Thread-194905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:51:56.983 [DEBUG] [Thread-194905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] client lang: <none>
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] server lang: <none>
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] kex follows: False
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:51:56.984 [DEBUG] [Thread-194905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:51:56.985 [DEBUG] [Thread-194905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:51:56.985 [DEBUG] [Thread-194905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:51:56.985 [DEBUG] [Thread-194905] [transport.py] [_log()] Compression: none
2026-04-12T19:51:56.985 [DEBUG] [Thread-194905] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:51:57.053 [DEBUG] [Thread-194905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:51:57.054 [DEBUG] [Thread-194905] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:51:57.054 [DEBUG] [Thread-194905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:51:57.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:51:57.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:51:57.114 [DEBUG] [Thread-194905] [transport.py] [_log()] userauth is OK
2026-04-12T19:51:57.114 [DEBUG] [Thread-194905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:51:57.114 [DEBUG] [Thread-194905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:51:57.114 [DEBUG] [Thread-194905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:51:57.114 [DEBUG] [Thread-194905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:51:57.145 [INFO] [Thread-194905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:51:57.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:51:57.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:51:57.973 [DEBUG] [Thread-194905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:51:57.973 [DEBUG] [Thread-194905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:51:58.022 [DEBUG] [Thread-194905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:51:58.023 [DEBUG] [Thread-194905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:51:58.031 [DEBUG] [Thread-194905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:51:58.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:51:58.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:51:58.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:51:58.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:51:58.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:51:58.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:51:58.064 [DEBUG] [Thread-194905] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:52:00.669 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:52:00.670 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:52:04.826 [DEBUG] [Thread-194907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:52:07.902 [DEBUG] [Thread-194908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:52:22.955 [DEBUG] [Thread-194909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:52:28.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:52:28.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:52:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:52:29.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 52, 11), 1.17397, 92.6163, 0.0, 12.1403, 12.2709, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:52:29.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:52:11
2026-04-12T19:52:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:52:29.902 [DEBUG] [Thread-194910] [transport.py] [_log()] starting thread (client mode): 0xae5f1d80
2026-04-12T19:52:29.902 [DEBUG] [Thread-194910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:52:29.924 [DEBUG] [Thread-194910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:52:29.924 [INFO] [Thread-194910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] client lang: <none>
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] server lang: <none>
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] kex follows: False
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:52:29.927 [DEBUG] [Thread-194910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:52:29.928 [DEBUG] [Thread-194910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:52:29.928 [DEBUG] [Thread-194910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:52:29.928 [DEBUG] [Thread-194910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:52:29.928 [DEBUG] [Thread-194910] [transport.py] [_log()] Compression: none
2026-04-12T19:52:29.928 [DEBUG] [Thread-194910] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:52:29.945 [DEBUG] [Thread-194910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:52:29.946 [DEBUG] [Thread-194910] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:52:29.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:52:29.947 [DEBUG] [Thread-194910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:52:29.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:52:29.949 [DEBUG] [Thread-194910] [transport.py] [_log()] userauth is OK
2026-04-12T19:52:29.949 [DEBUG] [Thread-194910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:52:29.949 [DEBUG] [Thread-194910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:52:29.950 [DEBUG] [Thread-194910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:52:29.950 [DEBUG] [Thread-194910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:52:29.974 [INFO] [Thread-194910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:52:29.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:52:30.753 [DEBUG] [Thread-194910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:52:30.753 [DEBUG] [Thread-194910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:52:30.754 [DEBUG] [Thread-194910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:52:30.794 [DEBUG] [Thread-194910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:52:30.794 [DEBUG] [Thread-194910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:52:30.796 [DEBUG] [Thread-194910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:52:30.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:52:30.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:52:30.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:52:30.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:52:30.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:52:30.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:52:30.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:52:30.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:52:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:52:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.744205 -999.00  +12.30  10.48     92  +11.10 1 3 1 3 1     0    0 -0.23 -80.50 ..... 10.5 10.5 186.2 11.7 14.0 -9.0 13.8 -9.7 13.7 -6.8 14.0 -6.4
2026-04-12T19:52:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:52:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:52:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.744205
2026-04-12T19:52:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:52:30.818 [DEBUG] [Thread-194910] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:52:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:52:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:52:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:52:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:52:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:52:11', tmtdew=1.17397, humidity=92.6163, cloud=0.0, wind=12.1403, temperature=12.2709, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:51:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5422499999999992, nan, nan, nan, 2.1985, 1.394499999999999, 0.6522499999999987, 1.605999999999998, 0.9937499999999986, 1.1952500000000006, nan, nan, nan, nan, nan, 1.1944999999999997, 0.5070000000000006, 0.6290000000000013, nan, nan], zp_timestamp='2026-04-12T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:52:30.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:52:30.903 [DEBUG] [Thread-194913] [transport.py] [_log()] starting thread (client mode): 0xb0f6d6f0
2026-04-12T19:52:30.903 [DEBUG] [Thread-194913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:52:30.918 [DEBUG] [Thread-194913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:52:30.918 [INFO] [Thread-194913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] client lang: <none>
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] server lang: <none>
2026-04-12T19:52:30.926 [DEBUG] [Thread-194913] [transport.py] [_log()] kex follows: False
2026-04-12T19:52:30.927 [DEBUG] [Thread-194913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:52:30.927 [DEBUG] [Thread-194913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:52:30.927 [DEBUG] [Thread-194913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:52:30.927 [DEBUG] [Thread-194913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:52:30.927 [DEBUG] [Thread-194913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:52:30.927 [DEBUG] [Thread-194913] [transport.py] [_log()] Compression: none
2026-04-12T19:52:30.927 [DEBUG] [Thread-194913] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:52:30.987 [DEBUG] [Thread-194913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:52:30.988 [DEBUG] [Thread-194913] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:52:30.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:52:30.989 [DEBUG] [Thread-194913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:52:30.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:52:31.046 [DEBUG] [Thread-194913] [transport.py] [_log()] userauth is OK
2026-04-12T19:52:31.047 [DEBUG] [Thread-194913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:52:31.047 [DEBUG] [Thread-194913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:52:31.047 [DEBUG] [Thread-194913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:52:31.047 [DEBUG] [Thread-194913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:52:31.071 [INFO] [Thread-194913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:52:31.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:52:31.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:52:31.887 [DEBUG] [Thread-194913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:52:31.887 [DEBUG] [Thread-194913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:52:31.935 [DEBUG] [Thread-194913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:52:31.935 [DEBUG] [Thread-194913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:52:31.944 [DEBUG] [Thread-194913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:52:31.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:52:31.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:52:31.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:52:31.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:52:31.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:52:31.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:52:31.983 [DEBUG] [Thread-194913] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:52:37.991 [DEBUG] [Thread-194915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:52:53.040 [DEBUG] [Thread-194916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:53:00.872 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:53:00.873 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:53:02.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:53:02.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:53:02.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:53:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 52, 46), 1.50811, 90.4648, 0.0, 14.6801, 12.6422, 1, 2, 0, 2, 0, 0),)
2026-04-12T19:53:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:52:46
2026-04-12T19:53:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:53:03.804 [DEBUG] [Thread-194917] [transport.py] [_log()] starting thread (client mode): 0xb0f6e2f0
2026-04-12T19:53:03.805 [DEBUG] [Thread-194917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:53:03.817 [DEBUG] [Thread-194917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:53:03.817 [INFO] [Thread-194917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:53:03.828 [DEBUG] [Thread-194917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:53:03.828 [DEBUG] [Thread-194917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] client lang: <none>
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] server lang: <none>
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] kex follows: False
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:53:03.829 [DEBUG] [Thread-194917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:53:03.830 [DEBUG] [Thread-194917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:53:03.830 [DEBUG] [Thread-194917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:53:03.830 [DEBUG] [Thread-194917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:53:03.830 [DEBUG] [Thread-194917] [transport.py] [_log()] Compression: none
2026-04-12T19:53:03.830 [DEBUG] [Thread-194917] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:53:03.841 [DEBUG] [Thread-194917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:53:03.841 [DEBUG] [Thread-194917] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:53:03.842 [DEBUG] [Thread-194917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:53:03.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:53:03.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:53:03.844 [DEBUG] [Thread-194917] [transport.py] [_log()] userauth is OK
2026-04-12T19:53:03.844 [DEBUG] [Thread-194917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:53:03.844 [DEBUG] [Thread-194917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:53:03.844 [DEBUG] [Thread-194917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:53:03.844 [DEBUG] [Thread-194917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:53:03.869 [INFO] [Thread-194917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:53:03.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:53:04.699 [DEBUG] [Thread-194917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:53:04.699 [DEBUG] [Thread-194917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:53:04.699 [DEBUG] [Thread-194917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:53:04.740 [DEBUG] [Thread-194917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:53:04.740 [DEBUG] [Thread-194917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:53:04.744 [DEBUG] [Thread-194917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:53:04.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:53:04.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:53:04.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:53:04.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:53:04.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:53:04.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:53:04.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:53:04.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:53:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:53:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.744552 -999.00  +12.30   7.52     92  +11.10 1 3 1 3 1     0    0 -0.34 -84.07 z.... 7.5 7.5 195.6 12.0 -999.0 -999.0 13.8 -5.4 13.7 -5.9 14.0 -9.6
2026-04-12T19:53:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:53:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:53:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.744552
2026-04-12T19:53:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:53:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:53:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:53:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:53:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:53:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:52:46', tmtdew=1.50811, humidity=90.4648, cloud=0.0, wind=14.6801, temperature=12.6422, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:52:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[1.1032499999999992, 1.3567500000000008, 1.3022500000000008, 1.4004999999999992, 1.9405000000000001, 1.9987500000000011, 1.654, 1.6612500000000008, 1.3504999999999994, 1.8630000000000004, nan, 1.338, nan, 2.08425, 2.3259999999999996, 2.4449999999999994, 1.9932499999999997, nan, nan, nan, nan, 1.494749999999999, 2.1587500000000004, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-04-12T17:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:53:04.776 [DEBUG] [Thread-194917] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:53:04.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:53:04.869 [DEBUG] [Thread-194920] [transport.py] [_log()] starting thread (client mode): 0xae5a57e0
2026-04-12T19:53:04.869 [DEBUG] [Thread-194920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:53:04.878 [DEBUG] [Thread-194921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:53:04.884 [DEBUG] [Thread-194920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:53:04.884 [INFO] [Thread-194920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] client lang: <none>
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] server lang: <none>
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] kex follows: False
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] Compression: none
2026-04-12T19:53:04.892 [DEBUG] [Thread-194920] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:53:04.951 [DEBUG] [Thread-194920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:53:04.951 [DEBUG] [Thread-194920] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:53:04.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:53:04.952 [DEBUG] [Thread-194920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:53:04.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:53:05.006 [DEBUG] [Thread-194920] [transport.py] [_log()] userauth is OK
2026-04-12T19:53:05.007 [DEBUG] [Thread-194920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:53:05.007 [DEBUG] [Thread-194920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:53:05.007 [DEBUG] [Thread-194920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:53:05.007 [DEBUG] [Thread-194920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:53:05.027 [INFO] [Thread-194920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:53:05.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:53:05.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:53:05.837 [DEBUG] [Thread-194920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:53:05.838 [DEBUG] [Thread-194920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:53:05.885 [DEBUG] [Thread-194920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:53:05.885 [DEBUG] [Thread-194920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:53:05.894 [DEBUG] [Thread-194920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:53:05.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:53:05.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:53:05.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:53:05.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:53:05.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:53:05.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:53:05.930 [DEBUG] [Thread-194920] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:53:08.079 [DEBUG] [Thread-194923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:53:23.130 [DEBUG] [Thread-194924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:53:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:53:35.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:53:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:53:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 53, 22), 1.08214, 92.8652, 0.0, 11.6111, 12.2378, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:53:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:53:22
2026-04-12T19:53:37.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:53:37.755 [DEBUG] [Thread-194925] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1c0
2026-04-12T19:53:37.755 [DEBUG] [Thread-194925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:53:37.776 [DEBUG] [Thread-194925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:53:37.777 [INFO] [Thread-194925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] client lang: <none>
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] server lang: <none>
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] kex follows: False
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:53:37.786 [DEBUG] [Thread-194925] [transport.py] [_log()] Compression: none
2026-04-12T19:53:37.787 [DEBUG] [Thread-194925] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:53:37.807 [DEBUG] [Thread-194925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:53:37.808 [DEBUG] [Thread-194925] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:53:37.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:53:37.809 [DEBUG] [Thread-194925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:53:37.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:53:37.811 [DEBUG] [Thread-194925] [transport.py] [_log()] userauth is OK
2026-04-12T19:53:37.811 [DEBUG] [Thread-194925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:53:37.811 [DEBUG] [Thread-194925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:53:37.811 [DEBUG] [Thread-194925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:53:37.811 [DEBUG] [Thread-194925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:53:37.846 [INFO] [Thread-194925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:53:37.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:53:38.164 [DEBUG] [Thread-194927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:53:38.637 [DEBUG] [Thread-194925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:53:38.637 [DEBUG] [Thread-194925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:53:38.638 [DEBUG] [Thread-194925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:53:38.677 [DEBUG] [Thread-194925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:53:38.678 [DEBUG] [Thread-194925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:53:38.680 [DEBUG] [Thread-194925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:53:38.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:53:38.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:53:38.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:53:38.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:53:38.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:53:38.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:53:38.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:53:38.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:53:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:53:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.744899 -999.00  +12.30   6.44     92  +11.10 1 3 1 3 1     0    0 -0.27 -80.38 z.... 6.4 6.4 205.6 10.2 14.1 -6.8 13.8 -5.6 13.7 -5.9 14.0 -5.9
2026-04-12T19:53:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:53:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:53:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.744899
2026-04-12T19:53:38.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:53:38.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:53:38.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:53:38.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:53:38.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:53:38.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:53:22', tmtdew=1.08214, humidity=92.8652, cloud=0.0, wind=11.6111, temperature=12.2378, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:52:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[1.1032499999999992, 1.3567500000000008, 1.3022500000000008, 1.4004999999999992, 1.9405000000000001, 1.9987500000000011, 1.654, 1.6612500000000008, 1.3504999999999994, 1.8630000000000004, nan, 1.338, nan, 2.08425, 2.3259999999999996, 2.4449999999999994, 1.9932499999999997, nan, nan, nan, nan, 1.494749999999999, 2.1587500000000004, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-04-12T17:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:53:38.706 [DEBUG] [Thread-194925] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:53:38.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:53:38.799 [DEBUG] [Thread-194929] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-12T19:53:38.799 [DEBUG] [Thread-194929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:53:38.815 [DEBUG] [Thread-194929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:53:38.815 [INFO] [Thread-194929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:53:38.823 [DEBUG] [Thread-194929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:53:38.823 [DEBUG] [Thread-194929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:53:38.823 [DEBUG] [Thread-194929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:53:38.823 [DEBUG] [Thread-194929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:38.823 [DEBUG] [Thread-194929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] client lang: <none>
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] server lang: <none>
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] kex follows: False
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:53:38.824 [DEBUG] [Thread-194929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:53:38.825 [DEBUG] [Thread-194929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:53:38.825 [DEBUG] [Thread-194929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:53:38.825 [DEBUG] [Thread-194929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:53:38.825 [DEBUG] [Thread-194929] [transport.py] [_log()] Compression: none
2026-04-12T19:53:38.825 [DEBUG] [Thread-194929] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:53:38.883 [DEBUG] [Thread-194929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:53:38.884 [DEBUG] [Thread-194929] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:53:38.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:53:38.886 [DEBUG] [Thread-194929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:53:38.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:53:38.943 [DEBUG] [Thread-194929] [transport.py] [_log()] userauth is OK
2026-04-12T19:53:38.943 [DEBUG] [Thread-194929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:53:38.943 [DEBUG] [Thread-194929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:53:38.944 [DEBUG] [Thread-194929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:53:38.944 [DEBUG] [Thread-194929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:53:38.965 [INFO] [Thread-194929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:53:38.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:53:38.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:53:39.765 [DEBUG] [Thread-194929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:53:39.774 [DEBUG] [Thread-194929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:53:39.815 [DEBUG] [Thread-194929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:53:39.815 [DEBUG] [Thread-194929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:53:39.826 [DEBUG] [Thread-194929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:53:39.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:53:39.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:53:39.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:53:39.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:53:39.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:53:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:53:39.863 [DEBUG] [Thread-194929] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:53:53.199 [DEBUG] [Thread-194931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:54:01.075 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:54:01.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:54:04.956 [DEBUG] [Thread-194932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:54:08.257 [DEBUG] [Thread-194933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:54:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:54:09.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:54:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:54:11.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 53, 57), 1.00753, 93.5144, 0.0, 12.5107, 12.2544, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:54:11.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:53:57
2026-04-12T19:54:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:54:11.694 [DEBUG] [Thread-194934] [transport.py] [_log()] starting thread (client mode): 0xb0f8e4d0
2026-04-12T19:54:11.695 [DEBUG] [Thread-194934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:54:11.713 [DEBUG] [Thread-194934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:54:11.713 [INFO] [Thread-194934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] client lang: <none>
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] server lang: <none>
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] kex follows: False
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] Compression: none
2026-04-12T19:54:11.717 [DEBUG] [Thread-194934] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:54:11.738 [DEBUG] [Thread-194934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:54:11.738 [DEBUG] [Thread-194934] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:54:11.739 [DEBUG] [Thread-194934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:54:11.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:54:11.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:54:11.741 [DEBUG] [Thread-194934] [transport.py] [_log()] userauth is OK
2026-04-12T19:54:11.741 [DEBUG] [Thread-194934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:54:11.741 [DEBUG] [Thread-194934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:54:11.741 [DEBUG] [Thread-194934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:54:11.741 [DEBUG] [Thread-194934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:54:11.776 [INFO] [Thread-194934] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:54:11.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:54:12.533 [DEBUG] [Thread-194934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:54:12.533 [DEBUG] [Thread-194934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:54:12.534 [DEBUG] [Thread-194934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:54:12.574 [DEBUG] [Thread-194934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:54:12.574 [DEBUG] [Thread-194934] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:54:12.578 [DEBUG] [Thread-194934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:54:12.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:54:12.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:54:12.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:54:12.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:54:12.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:54:12.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:54:12.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:54:12.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:54:12.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:54:12.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.745246 -999.00  +12.30   6.62     92  +11.10 1 3 1 3 1     0    0 -0.27 -78.97 ----- 6.6 6.6 208.2 9.4 14.1 -7.3 13.9 -7.1 13.7 -5.5 14.0 -5.7
2026-04-12T19:54:12.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:54:12.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:54:12.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.745246
2026-04-12T19:54:12.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:54:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:54:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:54:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:54:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:54:12.604 [DEBUG] [Thread-194934] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:54:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:53:57', tmtdew=1.00753, humidity=93.5144, cloud=0.0, wind=12.5107, temperature=12.2544, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:53:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[1.1032499999999992, 1.3567500000000008, 1.3022500000000008, 1.4004999999999992, 1.9405000000000001, 1.9987500000000011, 1.654, 1.6612500000000008, 1.3504999999999994, 1.8630000000000004, nan, 1.338, nan, 2.08425, 2.3259999999999996, 2.4449999999999994, 1.9932499999999997, nan, nan, nan, nan, 1.494749999999999, 2.1587500000000004, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-04-12T17:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:54:12.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:54:12.698 [DEBUG] [Thread-194937] [transport.py] [_log()] starting thread (client mode): 0xb0f8f6a0
2026-04-12T19:54:12.698 [DEBUG] [Thread-194937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:54:12.711 [DEBUG] [Thread-194937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:54:12.711 [INFO] [Thread-194937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:54:12.719 [DEBUG] [Thread-194937] [transport.py] [_log()] client lang: <none>
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] server lang: <none>
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] kex follows: False
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] Compression: none
2026-04-12T19:54:12.720 [DEBUG] [Thread-194937] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:54:12.779 [DEBUG] [Thread-194937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:54:12.779 [DEBUG] [Thread-194937] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:54:12.780 [DEBUG] [Thread-194937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:54:12.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:54:12.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:54:12.835 [DEBUG] [Thread-194937] [transport.py] [_log()] userauth is OK
2026-04-12T19:54:12.835 [DEBUG] [Thread-194937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:54:12.835 [DEBUG] [Thread-194937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:54:12.835 [DEBUG] [Thread-194937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:54:12.836 [DEBUG] [Thread-194937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:54:12.853 [INFO] [Thread-194937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:54:12.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:54:12.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:54:13.652 [DEBUG] [Thread-194937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:54:13.653 [DEBUG] [Thread-194937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:54:13.701 [DEBUG] [Thread-194937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:54:13.701 [DEBUG] [Thread-194937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:54:13.711 [DEBUG] [Thread-194937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:54:13.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:54:13.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:54:13.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:54:13.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:54:13.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:54:13.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:54:13.747 [DEBUG] [Thread-194937] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:54:23.295 [DEBUG] [Thread-194939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:54:38.348 [DEBUG] [Thread-194940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:54:43.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:54:43.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:54:43.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:54:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 54, 32), 0.990545, 93.614, 0.0, 11.6993, 12.2047, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:54:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:54:32
2026-04-12T19:54:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:54:45.585 [DEBUG] [Thread-194941] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-12T19:54:45.585 [DEBUG] [Thread-194941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:54:45.604 [DEBUG] [Thread-194941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:54:45.605 [INFO] [Thread-194941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] client lang: <none>
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] server lang: <none>
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] kex follows: False
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:54:45.608 [DEBUG] [Thread-194941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:54:45.609 [DEBUG] [Thread-194941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:54:45.609 [DEBUG] [Thread-194941] [transport.py] [_log()] Compression: none
2026-04-12T19:54:45.609 [DEBUG] [Thread-194941] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:54:45.626 [DEBUG] [Thread-194941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:54:45.627 [DEBUG] [Thread-194941] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:54:45.627 [DEBUG] [Thread-194941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:54:45.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:54:45.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:54:45.629 [DEBUG] [Thread-194941] [transport.py] [_log()] userauth is OK
2026-04-12T19:54:45.629 [DEBUG] [Thread-194941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:54:45.629 [DEBUG] [Thread-194941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:54:45.629 [DEBUG] [Thread-194941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:54:45.629 [DEBUG] [Thread-194941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:54:45.655 [INFO] [Thread-194941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:54:45.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:54:46.442 [DEBUG] [Thread-194941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:54:46.442 [DEBUG] [Thread-194941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:54:46.443 [DEBUG] [Thread-194941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:54:46.483 [DEBUG] [Thread-194941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:54:46.483 [DEBUG] [Thread-194941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:54:46.486 [DEBUG] [Thread-194941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:54:46.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:54:46.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:54:46.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:54:46.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:54:46.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:54:46.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:54:46.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:54:46.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:54:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:54:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.745941 -999.00  +12.30   6.23     92  +11.10 1 2 1 3 1     0    0 -0.27 -77.70 Z.... 6.2 6.2 197.8 8.6 14.1 -12.3 13.8 -11.5 13.7 -9.7 14.0 -11.8
2026-04-12T19:54:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:54:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:54:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.745941
2026-04-12T19:54:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:54:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:54:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:54:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:54:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T19:54:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:54:32', tmtdew=0.990545, humidity=93.614, cloud=0.0, wind=11.6993, temperature=12.2047, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:54:09.302', atlas_cloud=2, atlas_rain=1, zp_data=[1.1032499999999992, 1.3567500000000008, 1.3022500000000008, 1.4004999999999992, 1.9405000000000001, 1.9987500000000011, 1.654, 1.6612500000000008, 1.3504999999999994, 1.8630000000000004, nan, 1.338, nan, 2.08425, 2.3259999999999996, 2.4449999999999994, 1.9932499999999997, nan, nan, nan, nan, 1.494749999999999, 2.1587500000000004, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-04-12T17:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:54:46.511 [DEBUG] [Thread-194941] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:54:46.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:54:46.616 [DEBUG] [Thread-194944] [transport.py] [_log()] starting thread (client mode): 0xb0f6e770
2026-04-12T19:54:46.617 [DEBUG] [Thread-194944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:54:46.631 [DEBUG] [Thread-194944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:54:46.631 [INFO] [Thread-194944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:54:46.640 [DEBUG] [Thread-194944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:54:46.640 [DEBUG] [Thread-194944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:54:46.641 [DEBUG] [Thread-194944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:54:46.641 [DEBUG] [Thread-194944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:46.641 [DEBUG] [Thread-194944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:54:46.641 [DEBUG] [Thread-194944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:46.641 [DEBUG] [Thread-194944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:54:46.641 [DEBUG] [Thread-194944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:54:46.641 [DEBUG] [Thread-194944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] client lang: <none>
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] server lang: <none>
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] kex follows: False
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] Compression: none
2026-04-12T19:54:46.642 [DEBUG] [Thread-194944] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:54:46.699 [DEBUG] [Thread-194944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:54:46.700 [DEBUG] [Thread-194944] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:54:46.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:54:46.701 [DEBUG] [Thread-194944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:54:46.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:54:46.756 [DEBUG] [Thread-194944] [transport.py] [_log()] userauth is OK
2026-04-12T19:54:46.756 [DEBUG] [Thread-194944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:54:46.756 [DEBUG] [Thread-194944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:54:46.757 [DEBUG] [Thread-194944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:54:46.757 [DEBUG] [Thread-194944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:54:46.776 [INFO] [Thread-194944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:54:46.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:54:46.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:54:47.642 [DEBUG] [Thread-194944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:54:47.642 [DEBUG] [Thread-194944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:54:47.694 [DEBUG] [Thread-194944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:54:47.694 [DEBUG] [Thread-194944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:54:47.708 [DEBUG] [Thread-194944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:54:47.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:54:47.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:54:47.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:54:47.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:54:47.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:54:47.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:54:47.751 [DEBUG] [Thread-194944] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:54:53.385 [DEBUG] [Thread-194946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:01.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:01.282 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:05.039 [DEBUG] [Thread-194947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:08.437 [DEBUG] [Thread-194948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:17.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:55:17.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:55:17.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:55:19.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 55, 8), 0.97636, 93.6969, 0.0, 11.0466, 12.1549, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:55:19.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:55:08
2026-04-12T19:55:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:55:19.612 [DEBUG] [Thread-194949] [transport.py] [_log()] starting thread (client mode): 0xae51b850
2026-04-12T19:55:19.612 [DEBUG] [Thread-194949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:55:19.633 [DEBUG] [Thread-194949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:55:19.633 [INFO] [Thread-194949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] client lang: <none>
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] server lang: <none>
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] kex follows: False
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:55:19.636 [DEBUG] [Thread-194949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:55:19.637 [DEBUG] [Thread-194949] [transport.py] [_log()] Compression: none
2026-04-12T19:55:19.637 [DEBUG] [Thread-194949] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:55:19.653 [DEBUG] [Thread-194949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:55:19.653 [DEBUG] [Thread-194949] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:55:19.654 [DEBUG] [Thread-194949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:55:19.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:55:19.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:55:19.656 [DEBUG] [Thread-194949] [transport.py] [_log()] userauth is OK
2026-04-12T19:55:19.656 [DEBUG] [Thread-194949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:55:19.656 [DEBUG] [Thread-194949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:55:19.656 [DEBUG] [Thread-194949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:55:19.656 [DEBUG] [Thread-194949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:55:19.681 [INFO] [Thread-194949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:55:19.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:55:20.773 [DEBUG] [Thread-194949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:55:20.773 [DEBUG] [Thread-194949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:55:20.774 [DEBUG] [Thread-194949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:55:20.813 [DEBUG] [Thread-194949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:55:20.814 [DEBUG] [Thread-194949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:55:20.816 [DEBUG] [Thread-194949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:55:20.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:55:20.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:55:20.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:55:20.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:55:20.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:55:20.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:55:20.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:55:20.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:55:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:55:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.746288 -999.00  +12.30   7.98     92  +11.10 1 3 1 3 1     0    0 -0.26 -78.61 Z.... 8.0 8.0 194.8 8.9 14.1 -10.7 13.8 -9.6 13.7 -9.7 13.9 -11.6
2026-04-12T19:55:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:55:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:55:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.746288
2026-04-12T19:55:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:55:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:55:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:55:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:55:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:55:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:55:08', tmtdew=0.97636, humidity=93.6969, cloud=0.0, wind=11.0466, temperature=12.1549, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:54:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[1.1032499999999992, 1.3567500000000008, 1.3022500000000008, 1.4004999999999992, 1.9405000000000001, 1.9987500000000011, 1.654, 1.6612500000000008, 1.3504999999999994, 1.8630000000000004, nan, 1.338, nan, 2.08425, 2.3259999999999996, 2.4449999999999994, 1.9932499999999997, nan, nan, nan, nan, 1.494749999999999, 2.1587500000000004, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-04-12T17:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:55:20.845 [DEBUG] [Thread-194949] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:55:20.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:55:20.935 [DEBUG] [Thread-194952] [transport.py] [_log()] starting thread (client mode): 0xb0fcc610
2026-04-12T19:55:20.935 [DEBUG] [Thread-194952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:55:20.949 [DEBUG] [Thread-194952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:55:20.949 [INFO] [Thread-194952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] client lang: <none>
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] server lang: <none>
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] kex follows: False
2026-04-12T19:55:20.957 [DEBUG] [Thread-194952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:55:20.958 [DEBUG] [Thread-194952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:55:20.958 [DEBUG] [Thread-194952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:55:20.958 [DEBUG] [Thread-194952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:55:20.958 [DEBUG] [Thread-194952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:55:20.958 [DEBUG] [Thread-194952] [transport.py] [_log()] Compression: none
2026-04-12T19:55:20.958 [DEBUG] [Thread-194952] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:55:21.014 [DEBUG] [Thread-194952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:55:21.014 [DEBUG] [Thread-194952] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:55:21.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:55:21.015 [DEBUG] [Thread-194952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:55:21.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:55:21.071 [DEBUG] [Thread-194952] [transport.py] [_log()] userauth is OK
2026-04-12T19:55:21.071 [DEBUG] [Thread-194952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:55:21.072 [DEBUG] [Thread-194952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:55:21.072 [DEBUG] [Thread-194952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:55:21.072 [DEBUG] [Thread-194952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:55:21.090 [INFO] [Thread-194952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:55:21.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:55:21.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:55:21.872 [DEBUG] [Thread-194952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:55:21.873 [DEBUG] [Thread-194952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:55:21.921 [DEBUG] [Thread-194952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:55:21.921 [DEBUG] [Thread-194952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:55:21.930 [DEBUG] [Thread-194952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:55:21.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:55:21.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:55:21.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:55:21.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:55:21.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:55:21.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:55:21.967 [DEBUG] [Thread-194952] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:55:23.484 [DEBUG] [Thread-194954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:38.544 [DEBUG] [Thread-194955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:55:51.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:55:51.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:55:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 55, 43), 1.32663, 91.5597, 0.0, 8.78832, 12.6426, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:55:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:55:43
2026-04-12T19:55:53.581 [DEBUG] [Thread-194956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:55:53.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:55:53.860 [DEBUG] [Thread-194957] [transport.py] [_log()] starting thread (client mode): 0xb0fccc70
2026-04-12T19:55:53.860 [DEBUG] [Thread-194957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:55:53.879 [DEBUG] [Thread-194957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:55:53.879 [INFO] [Thread-194957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:55:53.882 [DEBUG] [Thread-194957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] client lang: <none>
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] server lang: <none>
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] kex follows: False
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] Compression: none
2026-04-12T19:55:53.883 [DEBUG] [Thread-194957] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:55:53.898 [DEBUG] [Thread-194957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:55:53.899 [DEBUG] [Thread-194957] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:55:53.899 [DEBUG] [Thread-194957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:55:53.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:55:53.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:55:53.901 [DEBUG] [Thread-194957] [transport.py] [_log()] userauth is OK
2026-04-12T19:55:53.902 [DEBUG] [Thread-194957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:55:53.902 [DEBUG] [Thread-194957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:55:53.902 [DEBUG] [Thread-194957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:55:53.902 [DEBUG] [Thread-194957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:55:53.929 [INFO] [Thread-194957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:55:53.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:55:54.702 [DEBUG] [Thread-194957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:55:54.703 [DEBUG] [Thread-194957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:55:54.703 [DEBUG] [Thread-194957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:55:54.743 [DEBUG] [Thread-194957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:55:54.743 [DEBUG] [Thread-194957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:55:54.747 [DEBUG] [Thread-194957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:55:54.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:55:54.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:55:54.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:55:54.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:55:54.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:55:54.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:55:54.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:55:54.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:55:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:55:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.746635 -999.00  +12.30   8.40     92  +11.10 1 3 1 3 1     0    0 -0.52 -84.13 ZN.s. 8.4 8.4 198.4 9.2 14.0 -6.1 13.8 -7.0 13.7 -6.4 13.9 -8.5
2026-04-12T19:55:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:55:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:55:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.746635
2026-04-12T19:55:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:55:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:55:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:55:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:55:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:55:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:55:43', tmtdew=1.32663, humidity=91.5597, cloud=0.0, wind=8.78832, temperature=12.6426, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:55:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:55:54.773 [DEBUG] [Thread-194957] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:55:54.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:55:54.867 [DEBUG] [Thread-194960] [transport.py] [_log()] starting thread (client mode): 0xae51b520
2026-04-12T19:55:54.867 [DEBUG] [Thread-194960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:55:54.881 [DEBUG] [Thread-194960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:55:54.881 [INFO] [Thread-194960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:55:54.888 [DEBUG] [Thread-194960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] client lang: <none>
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] server lang: <none>
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] kex follows: False
2026-04-12T19:55:54.889 [DEBUG] [Thread-194960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:55:54.890 [DEBUG] [Thread-194960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:55:54.890 [DEBUG] [Thread-194960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:55:54.890 [DEBUG] [Thread-194960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:55:54.890 [DEBUG] [Thread-194960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:55:54.890 [DEBUG] [Thread-194960] [transport.py] [_log()] Compression: none
2026-04-12T19:55:54.890 [DEBUG] [Thread-194960] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:55:54.947 [DEBUG] [Thread-194960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:55:54.948 [DEBUG] [Thread-194960] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:55:54.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:55:54.949 [DEBUG] [Thread-194960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:55:54.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:55:55.003 [DEBUG] [Thread-194960] [transport.py] [_log()] userauth is OK
2026-04-12T19:55:55.004 [DEBUG] [Thread-194960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:55:55.004 [DEBUG] [Thread-194960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:55:55.004 [DEBUG] [Thread-194960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:55:55.004 [DEBUG] [Thread-194960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:55:55.032 [INFO] [Thread-194960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:55:55.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:55:55.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:55:55.860 [DEBUG] [Thread-194960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:55:55.860 [DEBUG] [Thread-194960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:55:55.908 [DEBUG] [Thread-194960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:55:55.908 [DEBUG] [Thread-194960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:55:55.918 [DEBUG] [Thread-194960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:55:55.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:55:55.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:55:55.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:55:55.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:55:55.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:55:55.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:55:55.957 [DEBUG] [Thread-194960] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:56:01.494 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:56:01.495 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:56:05.121 [DEBUG] [Thread-194962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:56:08.619 [DEBUG] [Thread-194963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:56:23.675 [DEBUG] [Thread-194964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:56:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:56:25.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:56:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:56:27.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 56, 19), 0.89405, 93.8959, 0.0, 8.38224, 12.2047, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:56:27.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:56:19
2026-04-12T19:56:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:56:27.786 [DEBUG] [Thread-194965] [transport.py] [_log()] starting thread (client mode): 0xb0f8c8b0
2026-04-12T19:56:27.786 [DEBUG] [Thread-194965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:56:27.805 [DEBUG] [Thread-194965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:56:27.805 [INFO] [Thread-194965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:56:27.808 [DEBUG] [Thread-194965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:56:27.808 [DEBUG] [Thread-194965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:56:27.808 [DEBUG] [Thread-194965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] client lang: <none>
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] server lang: <none>
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] kex follows: False
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] Compression: none
2026-04-12T19:56:27.809 [DEBUG] [Thread-194965] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:56:27.826 [DEBUG] [Thread-194965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:56:27.827 [DEBUG] [Thread-194965] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:56:27.827 [DEBUG] [Thread-194965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:56:27.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:56:27.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:56:27.830 [DEBUG] [Thread-194965] [transport.py] [_log()] userauth is OK
2026-04-12T19:56:27.830 [DEBUG] [Thread-194965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:56:27.830 [DEBUG] [Thread-194965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:56:27.830 [DEBUG] [Thread-194965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:56:27.830 [DEBUG] [Thread-194965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:56:27.854 [INFO] [Thread-194965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:56:27.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:56:28.627 [DEBUG] [Thread-194965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:56:28.627 [DEBUG] [Thread-194965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:56:28.628 [DEBUG] [Thread-194965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:56:28.668 [DEBUG] [Thread-194965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:56:28.668 [DEBUG] [Thread-194965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:56:28.672 [DEBUG] [Thread-194965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:56:28.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:56:28.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:56:28.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:56:28.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:56:28.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:56:28.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:56:28.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:56:28.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:56:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:56:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.746982 -999.00  +12.30   4.44     92  +11.20 1 3 1 3 1     0    0 -0.40 -80.09 zN.s. 4.4 4.4 216.6 6.4 14.1 -7.8 13.8 -7.2 13.7 -8.6 14.0 -7.6
2026-04-12T19:56:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:56:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:56:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.746982
2026-04-12T19:56:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:56:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:56:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:56:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:56:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:56:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:56:19', tmtdew=0.89405, humidity=93.8959, cloud=0.0, wind=8.38224, temperature=12.2047, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:55:39.245', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:56:28.699 [DEBUG] [Thread-194965] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:56:28.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:56:28.806 [DEBUG] [Thread-194968] [transport.py] [_log()] starting thread (client mode): 0xb0f8f250
2026-04-12T19:56:28.806 [DEBUG] [Thread-194968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:56:28.821 [DEBUG] [Thread-194968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:56:28.822 [INFO] [Thread-194968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:56:28.829 [DEBUG] [Thread-194968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:56:28.830 [DEBUG] [Thread-194968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:56:28.830 [DEBUG] [Thread-194968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:56:28.830 [DEBUG] [Thread-194968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:56:28.830 [DEBUG] [Thread-194968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:56:28.830 [DEBUG] [Thread-194968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:56:28.830 [DEBUG] [Thread-194968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] client lang: <none>
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] server lang: <none>
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] kex follows: False
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] Compression: none
2026-04-12T19:56:28.831 [DEBUG] [Thread-194968] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:56:28.887 [DEBUG] [Thread-194968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:56:28.887 [DEBUG] [Thread-194968] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:56:28.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:56:28.888 [DEBUG] [Thread-194968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:56:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:56:28.943 [DEBUG] [Thread-194968] [transport.py] [_log()] userauth is OK
2026-04-12T19:56:28.944 [DEBUG] [Thread-194968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:56:28.944 [DEBUG] [Thread-194968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:56:28.944 [DEBUG] [Thread-194968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:56:28.944 [DEBUG] [Thread-194968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:56:28.967 [INFO] [Thread-194968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:56:28.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:56:28.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:56:29.842 [DEBUG] [Thread-194968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:56:29.842 [DEBUG] [Thread-194968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:56:29.890 [DEBUG] [Thread-194968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:56:29.890 [DEBUG] [Thread-194968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:56:29.899 [DEBUG] [Thread-194968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:56:29.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:56:29.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:56:29.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:56:29.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:56:29.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:56:29.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:56:29.936 [DEBUG] [Thread-194968] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:56:38.711 [DEBUG] [Thread-194970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:56:53.764 [DEBUG] [Thread-194971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:56:59.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:56:59.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:56:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:57:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 56, 19), 0.89405, 93.8959, 0.0, 8.38224, 12.2047, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:57:01.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:56:19
2026-04-12T19:57:01.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:57:01.728 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:57:01.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:57:01.772 [DEBUG] [Thread-194972] [transport.py] [_log()] starting thread (client mode): 0xb0f8f070
2026-04-12T19:57:01.772 [DEBUG] [Thread-194972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:57:01.793 [DEBUG] [Thread-194972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:57:01.793 [INFO] [Thread-194972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:57:01.796 [DEBUG] [Thread-194972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] client lang: <none>
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] server lang: <none>
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] kex follows: False
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] Compression: none
2026-04-12T19:57:01.797 [DEBUG] [Thread-194972] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:57:01.814 [DEBUG] [Thread-194972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:57:01.814 [DEBUG] [Thread-194972] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:57:01.815 [DEBUG] [Thread-194972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:57:01.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:57:01.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:57:01.817 [DEBUG] [Thread-194972] [transport.py] [_log()] userauth is OK
2026-04-12T19:57:01.817 [DEBUG] [Thread-194972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:57:01.817 [DEBUG] [Thread-194972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:57:01.817 [DEBUG] [Thread-194972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:57:01.817 [DEBUG] [Thread-194972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:57:01.850 [INFO] [Thread-194972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:57:01.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:57:02.613 [DEBUG] [Thread-194972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:57:02.613 [DEBUG] [Thread-194972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:57:02.614 [DEBUG] [Thread-194972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:57:02.654 [DEBUG] [Thread-194972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:57:02.654 [DEBUG] [Thread-194972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:57:02.658 [DEBUG] [Thread-194972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:57:02.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:57:02.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:57:02.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:57:02.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:57:02.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:57:02.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:57:02.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:57:02.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:57:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:57:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.747330 -999.00  +12.30   5.07     92  +11.20 1 3 1 3 1     0    0 -0.59 -85.53 zN.s. 5.1 5.1 212.7 5.8 14.1 -6.3 13.9 -5.5 13.7 -6.5 14.0 -7.5
2026-04-12T19:57:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:57:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:57:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.747330
2026-04-12T19:57:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:57:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:57:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:57:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:57:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:57:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:56:19', tmtdew=0.89405, humidity=93.8959, cloud=0.0, wind=8.38224, temperature=12.2047, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:56:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:57:02.690 [DEBUG] [Thread-194972] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:57:02.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:57:02.782 [DEBUG] [Thread-194975] [transport.py] [_log()] starting thread (client mode): 0xae5b0910
2026-04-12T19:57:02.782 [DEBUG] [Thread-194975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:57:02.796 [DEBUG] [Thread-194975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:57:02.796 [INFO] [Thread-194975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:57:02.804 [DEBUG] [Thread-194975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:57:02.804 [DEBUG] [Thread-194975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:57:02.804 [DEBUG] [Thread-194975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:57:02.804 [DEBUG] [Thread-194975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:02.804 [DEBUG] [Thread-194975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:02.804 [DEBUG] [Thread-194975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:02.804 [DEBUG] [Thread-194975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] client lang: <none>
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] server lang: <none>
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] kex follows: False
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:57:02.805 [DEBUG] [Thread-194975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:57:02.806 [DEBUG] [Thread-194975] [transport.py] [_log()] Compression: none
2026-04-12T19:57:02.806 [DEBUG] [Thread-194975] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:57:02.864 [DEBUG] [Thread-194975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:57:02.864 [DEBUG] [Thread-194975] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:57:02.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:57:02.866 [DEBUG] [Thread-194975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:57:02.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:57:02.919 [DEBUG] [Thread-194975] [transport.py] [_log()] userauth is OK
2026-04-12T19:57:02.919 [DEBUG] [Thread-194975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:57:02.919 [DEBUG] [Thread-194975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:57:02.919 [DEBUG] [Thread-194975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:57:02.919 [DEBUG] [Thread-194975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:57:02.934 [INFO] [Thread-194975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:57:02.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:57:02.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:57:03.738 [DEBUG] [Thread-194975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:57:03.738 [DEBUG] [Thread-194975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:57:03.785 [DEBUG] [Thread-194975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:57:03.786 [DEBUG] [Thread-194975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:57:03.794 [DEBUG] [Thread-194975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:57:03.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:57:03.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:57:03.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:57:03.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:57:03.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:57:03.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:57:03.846 [DEBUG] [Thread-194975] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:57:05.186 [DEBUG] [Thread-194977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:57:08.800 [DEBUG] [Thread-194978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:57:23.852 [DEBUG] [Thread-194979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:57:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:57:33.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:57: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
2026-04-12T19:57:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 56, 54), 1.25569, 91.9909, 0.0, 11.1168, 12.6427, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:57:35.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:56:54
2026-04-12T19:57:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:57:35.938 [DEBUG] [Thread-194980] [transport.py] [_log()] starting thread (client mode): 0xb0f8e7d0
2026-04-12T19:57:35.938 [DEBUG] [Thread-194980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:57:35.958 [DEBUG] [Thread-194980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:57:35.958 [INFO] [Thread-194980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:35.959 [DEBUG] [Thread-194980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] client lang: <none>
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] server lang: <none>
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] kex follows: False
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] Compression: none
2026-04-12T19:57:35.960 [DEBUG] [Thread-194980] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:57:35.971 [DEBUG] [Thread-194980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:57:35.972 [DEBUG] [Thread-194980] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:57:35.972 [DEBUG] [Thread-194980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:57:35.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:57:35.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:57:35.974 [DEBUG] [Thread-194980] [transport.py] [_log()] userauth is OK
2026-04-12T19:57:35.974 [DEBUG] [Thread-194980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:57:35.974 [DEBUG] [Thread-194980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:57:35.974 [DEBUG] [Thread-194980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:57:35.975 [DEBUG] [Thread-194980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:57:35.994 [INFO] [Thread-194980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:57:35.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:57:36.738 [DEBUG] [Thread-194980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:57:36.739 [DEBUG] [Thread-194980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:57:36.739 [DEBUG] [Thread-194980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:57:36.780 [DEBUG] [Thread-194980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:57:36.780 [DEBUG] [Thread-194980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:57:36.783 [DEBUG] [Thread-194980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:57:36.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:57:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:57:36.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:57:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:57:36.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:57:36.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:57:36.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:57:36.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:57:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:57:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.747677 -999.00  +12.30   5.18     92  +11.20 1 3 1 3 1     0    0 -0.64 -85.98 ....W 5.2 5.2 197.4 7.6 14.1 -5.1 13.9 -5.2 13.7 -5.3 14.0 -5.7
2026-04-12T19:57:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:57:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:57:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.747677
2026-04-12T19:57:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:57:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:57:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:57:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:57:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:57:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:56:54', tmtdew=1.25569, humidity=91.9909, cloud=0.0, wind=11.1168, temperature=12.6427, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:56:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:57:36.807 [DEBUG] [Thread-194980] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:57:36.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:57:36.902 [DEBUG] [Thread-194983] [transport.py] [_log()] starting thread (client mode): 0xb0f8d5a0
2026-04-12T19:57:36.902 [DEBUG] [Thread-194983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:57:36.917 [DEBUG] [Thread-194983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:57:36.917 [INFO] [Thread-194983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:57:36.926 [DEBUG] [Thread-194983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:57:36.926 [DEBUG] [Thread-194983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:57:36.926 [DEBUG] [Thread-194983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:57:36.926 [DEBUG] [Thread-194983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] client lang: <none>
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] server lang: <none>
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] kex follows: False
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] Compression: none
2026-04-12T19:57:36.927 [DEBUG] [Thread-194983] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:57:36.987 [DEBUG] [Thread-194983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:57:36.988 [DEBUG] [Thread-194983] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:57:36.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:57:36.988 [DEBUG] [Thread-194983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:57:36.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:57:37.045 [DEBUG] [Thread-194983] [transport.py] [_log()] userauth is OK
2026-04-12T19:57:37.045 [DEBUG] [Thread-194983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:57:37.046 [DEBUG] [Thread-194983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:57:37.046 [DEBUG] [Thread-194983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:57:37.046 [DEBUG] [Thread-194983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:57:37.063 [INFO] [Thread-194983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:57:37.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:57:37.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:57:37.869 [DEBUG] [Thread-194983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:57:37.870 [DEBUG] [Thread-194983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:57:37.918 [DEBUG] [Thread-194983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:57:37.918 [DEBUG] [Thread-194983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:57:37.926 [DEBUG] [Thread-194983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:57:37.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:57:37.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:57:37.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:57:37.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:57:37.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:57:37.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:57:37.960 [DEBUG] [Thread-194983] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:57:38.890 [DEBUG] [Thread-194985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:57:53.942 [DEBUG] [Thread-194986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:58:01.947 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:58:01.948 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:58:05.252 [DEBUG] [Thread-194987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:58:07.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:58:07.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:58:07.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:58:08.979 [DEBUG] [Thread-194988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:58:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 57, 30), 0.86409, 94.5784, 0.0, 8.78796, 12.2048, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:58:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:57:30
2026-04-12T19:58:09.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:58:09.945 [DEBUG] [Thread-194989] [transport.py] [_log()] starting thread (client mode): 0xae5183d0
2026-04-12T19:58:09.945 [DEBUG] [Thread-194989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:58:09.964 [DEBUG] [Thread-194989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:58:09.964 [INFO] [Thread-194989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:58:09.967 [DEBUG] [Thread-194989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:58:09.967 [DEBUG] [Thread-194989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] client lang: <none>
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] server lang: <none>
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] kex follows: False
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] Compression: none
2026-04-12T19:58:09.968 [DEBUG] [Thread-194989] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:58:09.978 [DEBUG] [Thread-194989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:58:09.978 [DEBUG] [Thread-194989] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:58:09.979 [DEBUG] [Thread-194989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:58:09.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:58:09.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:58:09.980 [DEBUG] [Thread-194989] [transport.py] [_log()] userauth is OK
2026-04-12T19:58:09.980 [DEBUG] [Thread-194989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:58:09.980 [DEBUG] [Thread-194989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:58:09.980 [DEBUG] [Thread-194989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:58:09.980 [DEBUG] [Thread-194989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:58:10.008 [INFO] [Thread-194989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:58:10.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:58:10.773 [DEBUG] [Thread-194989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:58:10.773 [DEBUG] [Thread-194989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:58:10.774 [DEBUG] [Thread-194989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:58:10.814 [DEBUG] [Thread-194989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:58:10.814 [DEBUG] [Thread-194989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:58:10.817 [DEBUG] [Thread-194989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:58:10.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:58:10.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:58:10.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:58:10.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:58:10.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:58:10.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:58:10.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:58:10.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:58:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:58:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.748024 -999.00  +12.30   6.29     93  +11.20 1 3 1 3 1     0    0 -0.67 -86.19 ..... 6.3 6.3 187.8 7.0 14.1 -6.2 14.0 -5.6 13.8 -6.5 14.0 -6.2
2026-04-12T19:58:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:58:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:58:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.748024
2026-04-12T19:58:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:58:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:58:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:58:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:58:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:58:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:57:30', tmtdew=0.86409, humidity=94.5784, cloud=0.0, wind=8.78796, temperature=12.2048, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:57:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:58:10.836 [DEBUG] [Thread-194989] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:58:10.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:58:10.929 [DEBUG] [Thread-194992] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa30
2026-04-12T19:58:10.929 [DEBUG] [Thread-194992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:58:10.944 [DEBUG] [Thread-194992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:58:10.944 [INFO] [Thread-194992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:58:10.951 [DEBUG] [Thread-194992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:58:10.951 [DEBUG] [Thread-194992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:58:10.951 [DEBUG] [Thread-194992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] client lang: <none>
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] server lang: <none>
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] kex follows: False
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] Compression: none
2026-04-12T19:58:10.952 [DEBUG] [Thread-194992] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:58:11.010 [DEBUG] [Thread-194992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:58:11.011 [DEBUG] [Thread-194992] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:58:11.011 [DEBUG] [Thread-194992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:58:11.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:58:11.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:58:11.067 [DEBUG] [Thread-194992] [transport.py] [_log()] userauth is OK
2026-04-12T19:58:11.067 [DEBUG] [Thread-194992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:58:11.067 [DEBUG] [Thread-194992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:58:11.067 [DEBUG] [Thread-194992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:58:11.068 [DEBUG] [Thread-194992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:58:11.085 [INFO] [Thread-194992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:58:11.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:58:11.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:58:11.926 [DEBUG] [Thread-194992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:58:11.926 [DEBUG] [Thread-194992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:58:11.974 [DEBUG] [Thread-194992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:58:11.974 [DEBUG] [Thread-194992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:58:11.984 [DEBUG] [Thread-194992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:58:11.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:58:11.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:58:12.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:58:12.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:58:12.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:58:12.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:58:12.021 [DEBUG] [Thread-194992] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:58:24.018 [DEBUG] [Thread-194994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:58:39.079 [DEBUG] [Thread-194995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:58:42.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:58:42.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:58:42.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:58:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 58, 5), 0.85837, 94.6116, 0.0, 8.78796, 12.1716, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:58:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:58:05
2026-04-12T19:58:43.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:58:43.926 [DEBUG] [Thread-194996] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-12T19:58:43.927 [DEBUG] [Thread-194996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:58:43.947 [DEBUG] [Thread-194996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:58:43.947 [INFO] [Thread-194996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:58:43.957 [DEBUG] [Thread-194996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:58:43.957 [DEBUG] [Thread-194996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:58:43.957 [DEBUG] [Thread-194996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:58:43.957 [DEBUG] [Thread-194996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] client lang: <none>
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] server lang: <none>
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] kex follows: False
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] Compression: none
2026-04-12T19:58:43.958 [DEBUG] [Thread-194996] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:58:43.976 [DEBUG] [Thread-194996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:58:43.977 [DEBUG] [Thread-194996] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:58:43.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:58:43.978 [DEBUG] [Thread-194996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:58:43.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:58:43.980 [DEBUG] [Thread-194996] [transport.py] [_log()] userauth is OK
2026-04-12T19:58:43.980 [DEBUG] [Thread-194996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:58:43.980 [DEBUG] [Thread-194996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:58:43.980 [DEBUG] [Thread-194996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:58:43.980 [DEBUG] [Thread-194996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:58:43.997 [INFO] [Thread-194996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:58:43.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:58:44.771 [DEBUG] [Thread-194996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:58:44.771 [DEBUG] [Thread-194996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:58:44.772 [DEBUG] [Thread-194996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:58:44.812 [DEBUG] [Thread-194996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:58:44.812 [DEBUG] [Thread-194996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:58:44.815 [DEBUG] [Thread-194996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:58:44.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:58:44.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:58:44.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:58:44.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:58:44.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:58:44.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:58:44.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:58:44.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:58:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:58:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.748718 -999.00  +12.30   4.99     92  +11.20 1 3 1 3 1     0    0 -0.78 -88.23 Z...W 5.0 5.0 192.0 6.4 14.2 -4.1 14.0 -3.7 13.8 -3.9 14.1 -4.7
2026-04-12T19:58:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:58:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:58:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.748718
2026-04-12T19:58:44.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:58:44.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:58:44.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:58:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:58:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:58:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:58:05', tmtdew=0.85837, humidity=94.6116, cloud=0.0, wind=8.78796, temperature=12.1716, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:58:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:58:44.837 [DEBUG] [Thread-194996] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:58:44.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:58:44.931 [DEBUG] [Thread-194999] [transport.py] [_log()] starting thread (client mode): 0xae535690
2026-04-12T19:58:44.931 [DEBUG] [Thread-194999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:58:44.945 [DEBUG] [Thread-194999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:58:44.945 [INFO] [Thread-194999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] client lang: <none>
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] server lang: <none>
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] kex follows: False
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:58:44.952 [DEBUG] [Thread-194999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:58:44.953 [DEBUG] [Thread-194999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:58:44.953 [DEBUG] [Thread-194999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:58:44.953 [DEBUG] [Thread-194999] [transport.py] [_log()] Compression: none
2026-04-12T19:58:44.953 [DEBUG] [Thread-194999] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:58:45.009 [DEBUG] [Thread-194999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:58:45.010 [DEBUG] [Thread-194999] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:58:45.010 [DEBUG] [Thread-194999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:58:45.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:58:45.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:58:45.067 [DEBUG] [Thread-194999] [transport.py] [_log()] userauth is OK
2026-04-12T19:58:45.067 [DEBUG] [Thread-194999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:58:45.067 [DEBUG] [Thread-194999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:58:45.067 [DEBUG] [Thread-194999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:58:45.067 [DEBUG] [Thread-194999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:58:45.080 [INFO] [Thread-194999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:58:45.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:58:45.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:58:45.906 [DEBUG] [Thread-194999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:58:45.907 [DEBUG] [Thread-194999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:58:45.954 [DEBUG] [Thread-194999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:58:45.954 [DEBUG] [Thread-194999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:58:45.964 [DEBUG] [Thread-194999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:58:45.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:58:45.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:58:45.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:58:45.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:58:45.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:58:45.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:58:46.001 [DEBUG] [Thread-194999] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:58:54.114 [DEBUG] [Thread-195001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:59:02.175 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:59:02.176 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:59:05.325 [DEBUG] [Thread-195002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:59:09.164 [DEBUG] [Thread-195003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:59:16.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:59:16.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:59:16.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
2026-04-12T19:59:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 58, 41), 1.21046, 92.2563, 0.0, 9.84672, 12.4438, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:59:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:58:41
2026-04-12T19:59:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:59:17.882 [DEBUG] [Thread-195004] [transport.py] [_log()] starting thread (client mode): 0xae5b36d0
2026-04-12T19:59:17.882 [DEBUG] [Thread-195004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:59:17.902 [DEBUG] [Thread-195004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:59:17.903 [INFO] [Thread-195004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] client lang: <none>
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] server lang: <none>
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] kex follows: False
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] Compression: none
2026-04-12T19:59:17.906 [DEBUG] [Thread-195004] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:59:17.923 [DEBUG] [Thread-195004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:59:17.923 [DEBUG] [Thread-195004] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:59:17.924 [DEBUG] [Thread-195004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:59:17.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:59:17.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:59:17.926 [DEBUG] [Thread-195004] [transport.py] [_log()] userauth is OK
2026-04-12T19:59:17.926 [DEBUG] [Thread-195004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:59:17.926 [DEBUG] [Thread-195004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:59:17.926 [DEBUG] [Thread-195004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:59:17.926 [DEBUG] [Thread-195004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:59:17.944 [INFO] [Thread-195004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:59:17.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:59:18.720 [DEBUG] [Thread-195004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:59:18.721 [DEBUG] [Thread-195004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:59:18.721 [DEBUG] [Thread-195004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:59:18.762 [DEBUG] [Thread-195004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:59:18.762 [DEBUG] [Thread-195004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:59:18.765 [DEBUG] [Thread-195004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:59:18.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:59:18.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:59:18.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:59:18.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:59:18.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:59:18.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:59:18.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:59:18.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:59:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:59:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.749066 -999.00  +12.30   5.25     92  +11.20 1 3 1 3 1     0    0 -0.88 -90.12 Z...W 5.2 5.2 203.6 6.8 14.2 -4.3 14.0 -5.5 13.8 -3.8 14.1 -3.7
2026-04-12T19:59:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:59:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:59:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.749066
2026-04-12T19:59:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:59:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:59:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:59:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:59:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:59:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:58:41', tmtdew=1.21046, humidity=92.2563, cloud=0.0, wind=9.84672, temperature=12.4438, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:58:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:59:18.795 [DEBUG] [Thread-195004] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:59:18.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:59:18.889 [DEBUG] [Thread-195007] [transport.py] [_log()] starting thread (client mode): 0xae5b0a30
2026-04-12T19:59:18.889 [DEBUG] [Thread-195007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:59:18.903 [DEBUG] [Thread-195007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:59:18.903 [INFO] [Thread-195007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:59:18.911 [DEBUG] [Thread-195007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] client lang: <none>
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] server lang: <none>
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] kex follows: False
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:59:18.912 [DEBUG] [Thread-195007] [transport.py] [_log()] Compression: none
2026-04-12T19:59:18.913 [DEBUG] [Thread-195007] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:59:18.971 [DEBUG] [Thread-195007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:59:18.971 [DEBUG] [Thread-195007] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:59:18.972 [DEBUG] [Thread-195007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:59:18.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:59:18.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:59:19.028 [DEBUG] [Thread-195007] [transport.py] [_log()] userauth is OK
2026-04-12T19:59:19.028 [DEBUG] [Thread-195007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:59:19.029 [DEBUG] [Thread-195007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:59:19.029 [DEBUG] [Thread-195007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:59:19.029 [DEBUG] [Thread-195007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:59:19.053 [INFO] [Thread-195007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:59:19.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:59:19.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:59:19.874 [DEBUG] [Thread-195007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:59:19.874 [DEBUG] [Thread-195007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:59:19.922 [DEBUG] [Thread-195007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:59:19.922 [DEBUG] [Thread-195007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:59:19.932 [DEBUG] [Thread-195007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:59:19.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:59:19.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:59:19.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:59:19.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:59:19.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:59:19.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:59:19.970 [DEBUG] [Thread-195007] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:59:24.202 [DEBUG] [Thread-195009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:59:39.263 [DEBUG] [Thread-195010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T19:59:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T19:59:49.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T19:59:49.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T19:59:51.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 59, 17), 0.789525, 94.7277, 0.0, 7.51788, 12.1882, 2, 2, 0, 2, 0, 0),)
2026-04-12T19:59:51.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:59:17
2026-04-12T19:59:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T19:59:51.866 [DEBUG] [Thread-195011] [transport.py] [_log()] starting thread (client mode): 0xae5f3be0
2026-04-12T19:59:51.866 [DEBUG] [Thread-195011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:59:51.886 [DEBUG] [Thread-195011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T19:59:51.886 [INFO] [Thread-195011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] client lang: <none>
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] server lang: <none>
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] kex follows: False
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] Compression: none
2026-04-12T19:59:51.889 [DEBUG] [Thread-195011] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:59:51.904 [DEBUG] [Thread-195011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:59:51.904 [DEBUG] [Thread-195011] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:59:51.904 [DEBUG] [Thread-195011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T19:59:51.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T19:59:51.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:59:51.905 [DEBUG] [Thread-195011] [transport.py] [_log()] userauth is OK
2026-04-12T19:59:51.905 [DEBUG] [Thread-195011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:59:51.905 [DEBUG] [Thread-195011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:59:51.905 [DEBUG] [Thread-195011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T19:59:51.905 [DEBUG] [Thread-195011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:59:51.924 [INFO] [Thread-195011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:59:51.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:59:52.715 [DEBUG] [Thread-195011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:59:52.715 [DEBUG] [Thread-195011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:59:52.716 [DEBUG] [Thread-195011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T19:59:52.757 [DEBUG] [Thread-195011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:59:52.757 [DEBUG] [Thread-195011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:59:52.759 [DEBUG] [Thread-195011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:59:52.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:59:52.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T19:59:52.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T19:59:52.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T19:59:52.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:59:52.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T19:59:52.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:59:52.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:59:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T19:59:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.749413 -999.00  +12.30   7.23     92  +11.20 1 3 1 3 1     0    0 -0.98 -92.80 ----- 7.2 7.2 201.8 9.0 14.2 -7.7 13.9 -7.9 13.8 -7.1 14.2 -5.6
2026-04-12T19:59:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T19:59:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T19:59:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.749413
2026-04-12T19:59:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T19:59:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T19:59:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T19:59:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T19:59:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T19:59:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:59:17', tmtdew=0.789525, humidity=94.7277, cloud=0.0, wind=7.51788, temperature=12.1882, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:59:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T19:59:52.790 [DEBUG] [Thread-195011] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:59:52.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T19:59:52.886 [DEBUG] [Thread-195014] [transport.py] [_log()] starting thread (client mode): 0xb0f40760
2026-04-12T19:59:52.887 [DEBUG] [Thread-195014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T19:59:52.903 [DEBUG] [Thread-195014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T19:59:52.903 [INFO] [Thread-195014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T19:59:52.911 [DEBUG] [Thread-195014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T19:59:52.911 [DEBUG] [Thread-195014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T19:59:52.911 [DEBUG] [Thread-195014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T19:59:52.911 [DEBUG] [Thread-195014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:52.911 [DEBUG] [Thread-195014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] client lang: <none>
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] server lang: <none>
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] kex follows: False
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T19:59:52.912 [DEBUG] [Thread-195014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T19:59:52.913 [DEBUG] [Thread-195014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T19:59:52.913 [DEBUG] [Thread-195014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T19:59:52.913 [DEBUG] [Thread-195014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T19:59:52.913 [DEBUG] [Thread-195014] [transport.py] [_log()] Compression: none
2026-04-12T19:59:52.913 [DEBUG] [Thread-195014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T19:59:52.976 [DEBUG] [Thread-195014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T19:59:52.977 [DEBUG] [Thread-195014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T19:59:52.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T19:59:52.979 [DEBUG] [Thread-195014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T19:59:52.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T19:59:53.036 [DEBUG] [Thread-195014] [transport.py] [_log()] userauth is OK
2026-04-12T19:59:53.036 [DEBUG] [Thread-195014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T19:59:53.037 [DEBUG] [Thread-195014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T19:59:53.037 [DEBUG] [Thread-195014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T19:59:53.037 [DEBUG] [Thread-195014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T19:59:53.056 [INFO] [Thread-195014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T19:59:53.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T19:59:53.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T19:59:53.897 [DEBUG] [Thread-195014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T19:59:53.897 [DEBUG] [Thread-195014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T19:59:53.945 [DEBUG] [Thread-195014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T19:59:53.945 [DEBUG] [Thread-195014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T19:59:53.954 [DEBUG] [Thread-195014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T19:59:53.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T19:59:53.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T19:59:53.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T19:59:53.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T19:59:53.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T19:59:53.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T19:59:53.992 [DEBUG] [Thread-195014] [transport.py] [_log()] EOF in transport thread
2026-04-12T19:59:54.301 [DEBUG] [Thread-195016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:02.381 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:02.382 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:05.394 [DEBUG] [Thread-195017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:09.352 [DEBUG] [Thread-195018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:24.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:00:24.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:00:24.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:00:24.388 [DEBUG] [Thread-195019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:25.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 19, 59, 53), 1.14683, 92.6544, 0.0, 7.72992, 12.6097, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:00:25.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 19:59:53
2026-04-12T20:00:25.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:00:25.879 [DEBUG] [Thread-195020] [transport.py] [_log()] starting thread (client mode): 0xb0f41e70
2026-04-12T20:00:25.879 [DEBUG] [Thread-195020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:00:25.900 [DEBUG] [Thread-195020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:00:25.900 [INFO] [Thread-195020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:00:25.904 [DEBUG] [Thread-195020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:00:25.904 [DEBUG] [Thread-195020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:00:25.904 [DEBUG] [Thread-195020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:00:25.904 [DEBUG] [Thread-195020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:00:25.904 [DEBUG] [Thread-195020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:00:25.904 [DEBUG] [Thread-195020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] client lang: <none>
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] server lang: <none>
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] kex follows: False
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] Compression: none
2026-04-12T20:00:25.905 [DEBUG] [Thread-195020] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:00:25.925 [DEBUG] [Thread-195020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:00:25.926 [DEBUG] [Thread-195020] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:00:25.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:00:25.927 [DEBUG] [Thread-195020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:00:25.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:00:25.929 [DEBUG] [Thread-195020] [transport.py] [_log()] userauth is OK
2026-04-12T20:00:25.929 [DEBUG] [Thread-195020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:00:25.929 [DEBUG] [Thread-195020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:00:25.929 [DEBUG] [Thread-195020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:00:25.929 [DEBUG] [Thread-195020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:00:25.953 [INFO] [Thread-195020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:00:25.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:00:27.136 [DEBUG] [Thread-195020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:00:27.136 [DEBUG] [Thread-195020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:00:27.137 [DEBUG] [Thread-195020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:00:27.177 [DEBUG] [Thread-195020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:00:27.178 [DEBUG] [Thread-195020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:00:27.182 [DEBUG] [Thread-195020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:00:27.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:00:27.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:00:27.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:00:27.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:00:27.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:00:27.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:00:27.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:00:27.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:00:27.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:00:27.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.749760 -999.00  +12.30   6.80     92  +11.20 1 3 1 3 1     0    0 -1.07 -95.37 Z...w 6.8 6.8 196.0 9.1 14.2 -7.1 14.0 -6.8 13.8 -7.2 14.1 -8.1
2026-04-12T20:00:27.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:00:27.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:00:27.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.749760
2026-04-12T20:00:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:00:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:00:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:00:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:00:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:00:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T19:59:53', tmtdew=1.14683, humidity=92.6544, cloud=0.0, wind=7.72992, temperature=12.6097, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T17:59:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:00:27.212 [DEBUG] [Thread-195020] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:00:27.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:00:27.310 [DEBUG] [Thread-195023] [transport.py] [_log()] starting thread (client mode): 0xb0f8f760
2026-04-12T20:00:27.311 [DEBUG] [Thread-195023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:00:27.325 [DEBUG] [Thread-195023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:00:27.325 [INFO] [Thread-195023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] client lang: <none>
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] server lang: <none>
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] kex follows: False
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:00:27.332 [DEBUG] [Thread-195023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:00:27.333 [DEBUG] [Thread-195023] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:00:27.333 [DEBUG] [Thread-195023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:00:27.333 [DEBUG] [Thread-195023] [transport.py] [_log()] Compression: none
2026-04-12T20:00:27.333 [DEBUG] [Thread-195023] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:00:27.391 [DEBUG] [Thread-195023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:00:27.392 [DEBUG] [Thread-195023] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:00:27.392 [DEBUG] [Thread-195023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:00:27.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:00:27.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:00:27.447 [DEBUG] [Thread-195023] [transport.py] [_log()] userauth is OK
2026-04-12T20:00:27.447 [DEBUG] [Thread-195023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:00:27.447 [DEBUG] [Thread-195023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:00:27.448 [DEBUG] [Thread-195023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:00:27.448 [DEBUG] [Thread-195023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:00:27.467 [INFO] [Thread-195023] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:00:27.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:00:27.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:00:28.332 [DEBUG] [Thread-195023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:00:28.332 [DEBUG] [Thread-195023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:00:28.381 [DEBUG] [Thread-195023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:00:28.381 [DEBUG] [Thread-195023] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:00:28.390 [DEBUG] [Thread-195023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:00:28.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:00:28.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:00:28.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:00:28.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:00:28.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:00:28.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:00:28.424 [DEBUG] [Thread-195023] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:00:39.422 [DEBUG] [Thread-195025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:54.484 [DEBUG] [Thread-195026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:00:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:00:58.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:00:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:00:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 0, 29), 0.715175, 95.3769, 0.0, 8.06472, 12.1883, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:00:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:00:29
2026-04-12T20:01:00.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:01:00.254 [DEBUG] [Thread-195027] [transport.py] [_log()] starting thread (client mode): 0xae535d20
2026-04-12T20:01:00.254 [DEBUG] [Thread-195027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:01:00.274 [DEBUG] [Thread-195027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:01:00.274 [INFO] [Thread-195027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] client lang: <none>
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] server lang: <none>
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] kex follows: False
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] Compression: none
2026-04-12T20:01:00.277 [DEBUG] [Thread-195027] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:01:00.295 [DEBUG] [Thread-195027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:01:00.295 [DEBUG] [Thread-195027] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:01:00.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:01:00.296 [DEBUG] [Thread-195027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:01:00.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:01:00.298 [DEBUG] [Thread-195027] [transport.py] [_log()] userauth is OK
2026-04-12T20:01:00.298 [DEBUG] [Thread-195027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:01:00.298 [DEBUG] [Thread-195027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:01:00.299 [DEBUG] [Thread-195027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:01:00.299 [DEBUG] [Thread-195027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:01:00.323 [INFO] [Thread-195027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:01:00.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:01:01.098 [DEBUG] [Thread-195027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:01:01.098 [DEBUG] [Thread-195027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:01:01.098 [DEBUG] [Thread-195027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:01:01.139 [DEBUG] [Thread-195027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:01:01.139 [DEBUG] [Thread-195027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:01:01.141 [DEBUG] [Thread-195027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:01:01.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:01:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:01:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:01:01.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:01:01.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:01:01.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:01:01.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.750107 -999.00  +12.30   5.61     93  +11.20 1 3 1 3 1     0    0 -1.30 -100.15 Z...w 5.6 5.6 194.2 7.6 14.2 -5.7 14.1 -5.3 13.8 -5.5 14.2 -6.2
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.750107
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:01:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:00:29', tmtdew=0.715175, humidity=95.3769, cloud=0.0, wind=8.06472, temperature=12.1883, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:00:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:01:01.160 [DEBUG] [Thread-195027] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:01:01.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:01:01.247 [DEBUG] [Thread-195030] [transport.py] [_log()] starting thread (client mode): 0xae5363e0
2026-04-12T20:01:01.247 [DEBUG] [Thread-195030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:01:01.261 [DEBUG] [Thread-195030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:01:01.262 [INFO] [Thread-195030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] client lang: <none>
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] server lang: <none>
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] kex follows: False
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:01:01.269 [DEBUG] [Thread-195030] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:01:01.270 [DEBUG] [Thread-195030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:01:01.270 [DEBUG] [Thread-195030] [transport.py] [_log()] Compression: none
2026-04-12T20:01:01.270 [DEBUG] [Thread-195030] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:01:01.327 [DEBUG] [Thread-195030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:01:01.327 [DEBUG] [Thread-195030] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:01:01.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:01:01.328 [DEBUG] [Thread-195030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:01:01.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:01:01.383 [DEBUG] [Thread-195030] [transport.py] [_log()] userauth is OK
2026-04-12T20:01:01.384 [DEBUG] [Thread-195030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:01:01.384 [DEBUG] [Thread-195030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:01:01.384 [DEBUG] [Thread-195030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:01:01.384 [DEBUG] [Thread-195030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:01:01.398 [INFO] [Thread-195030] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:01:01.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:01:01.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:01:02.235 [DEBUG] [Thread-195030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:01:02.236 [DEBUG] [Thread-195030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:01:02.283 [DEBUG] [Thread-195030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:01:02.283 [DEBUG] [Thread-195030] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:01:02.292 [DEBUG] [Thread-195030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:01:02.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:01:02.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:01:02.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:01:02.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:01:02.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:01:02.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:01:02.329 [DEBUG] [Thread-195030] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:01:02.587 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:01:02.588 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:01:05.459 [DEBUG] [Thread-195032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:01:09.519 [DEBUG] [Thread-195033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:01:24.566 [DEBUG] [Thread-195034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:01:32.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:01:32.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:01:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:01:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 1, 4), 0.70707, 95.4267, 0.0, 7.8354, 12.1883, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:01:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:01:04
2026-04-12T20:01:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:01:34.139 [DEBUG] [Thread-195035] [transport.py] [_log()] starting thread (client mode): 0xb0f8f400
2026-04-12T20:01:34.139 [DEBUG] [Thread-195035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:01:34.159 [DEBUG] [Thread-195035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:01:34.159 [INFO] [Thread-195035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] client lang: <none>
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] server lang: <none>
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] kex follows: False
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] Compression: none
2026-04-12T20:01:34.162 [DEBUG] [Thread-195035] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:01:34.178 [DEBUG] [Thread-195035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:01:34.178 [DEBUG] [Thread-195035] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:01:34.178 [DEBUG] [Thread-195035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:01:34.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:01:34.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:01:34.179 [DEBUG] [Thread-195035] [transport.py] [_log()] userauth is OK
2026-04-12T20:01:34.179 [DEBUG] [Thread-195035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:01:34.179 [DEBUG] [Thread-195035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:01:34.179 [DEBUG] [Thread-195035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:01:34.179 [DEBUG] [Thread-195035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:01:34.188 [INFO] [Thread-195035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:01:34.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:01:34.958 [DEBUG] [Thread-195035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:01:34.959 [DEBUG] [Thread-195035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:01:34.959 [DEBUG] [Thread-195035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:01:34.999 [DEBUG] [Thread-195035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:01:35.000 [DEBUG] [Thread-195035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:01:35.003 [DEBUG] [Thread-195035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:01:35.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:01:35.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:01:35.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:01:35.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:01:35.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:01:35.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:01:35.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.750454 -999.00  +12.30   7.27     93  +11.20 1 3 1 3 1     0    0 -1.15 -95.10 z...W 7.3 7.3 197.0 8.2 14.2 -4.6 14.0 -4.4 13.8 -4.4 14.2 -5.4
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.750454
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:01:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:01:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:01:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:01:04', tmtdew=0.70707, humidity=95.4267, cloud=0.0, wind=7.8354, temperature=12.1883, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:00:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:01:35.021 [DEBUG] [Thread-195035] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:01:35.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:01:35.103 [DEBUG] [Thread-195038] [transport.py] [_log()] starting thread (client mode): 0xb0f6c190
2026-04-12T20:01:35.103 [DEBUG] [Thread-195038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:01:35.117 [DEBUG] [Thread-195038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:01:35.117 [INFO] [Thread-195038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:01:35.125 [DEBUG] [Thread-195038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:01:35.125 [DEBUG] [Thread-195038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:01:35.125 [DEBUG] [Thread-195038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:01:35.125 [DEBUG] [Thread-195038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:35.125 [DEBUG] [Thread-195038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] client lang: <none>
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] server lang: <none>
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] kex follows: False
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:01:35.126 [DEBUG] [Thread-195038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:01:35.127 [DEBUG] [Thread-195038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:01:35.127 [DEBUG] [Thread-195038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:01:35.127 [DEBUG] [Thread-195038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:01:35.127 [DEBUG] [Thread-195038] [transport.py] [_log()] Compression: none
2026-04-12T20:01:35.127 [DEBUG] [Thread-195038] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:01:35.183 [DEBUG] [Thread-195038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:01:35.184 [DEBUG] [Thread-195038] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:01:35.185 [DEBUG] [Thread-195038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:01:35.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:01:35.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:01:35.245 [DEBUG] [Thread-195038] [transport.py] [_log()] userauth is OK
2026-04-12T20:01:35.245 [DEBUG] [Thread-195038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:01:35.245 [DEBUG] [Thread-195038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:01:35.246 [DEBUG] [Thread-195038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:01:35.246 [DEBUG] [Thread-195038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:01:35.273 [INFO] [Thread-195038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:01:35.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:01:35.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:01:36.078 [DEBUG] [Thread-195038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:01:36.079 [DEBUG] [Thread-195038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:01:36.127 [DEBUG] [Thread-195038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:01:36.127 [DEBUG] [Thread-195038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:01:36.136 [DEBUG] [Thread-195038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:01:36.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:01:36.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:01:36.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:01:36.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:01:36.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:01:36.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:01:36.174 [DEBUG] [Thread-195038] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:01:39.606 [DEBUG] [Thread-195040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:01:54.666 [DEBUG] [Thread-195041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:02:02.794 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:02:02.796 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:02:05.531 [DEBUG] [Thread-195042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:02:06.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:02:06.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:02:06.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:02:07.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 1, 40), 1.09282, 92.986, 0.0, 10.3406, 12.6097, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:02:07.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:01:40
2026-04-12T20:02:07.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:02:08.058 [DEBUG] [Thread-195043] [transport.py] [_log()] starting thread (client mode): 0xb0f8eef0
2026-04-12T20:02:08.058 [DEBUG] [Thread-195043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:02:08.078 [DEBUG] [Thread-195043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:02:08.078 [INFO] [Thread-195043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] client lang: <none>
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] server lang: <none>
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] kex follows: False
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:02:08.082 [DEBUG] [Thread-195043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:02:08.083 [DEBUG] [Thread-195043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:02:08.083 [DEBUG] [Thread-195043] [transport.py] [_log()] Compression: none
2026-04-12T20:02:08.083 [DEBUG] [Thread-195043] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:02:08.100 [DEBUG] [Thread-195043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:02:08.101 [DEBUG] [Thread-195043] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:02:08.101 [DEBUG] [Thread-195043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:02:08.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:02:08.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:02:08.103 [DEBUG] [Thread-195043] [transport.py] [_log()] userauth is OK
2026-04-12T20:02:08.103 [DEBUG] [Thread-195043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:02:08.103 [DEBUG] [Thread-195043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:02:08.104 [DEBUG] [Thread-195043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:02:08.104 [DEBUG] [Thread-195043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:02:08.127 [INFO] [Thread-195043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:02:08.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:02:08.937 [DEBUG] [Thread-195043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:02:08.937 [DEBUG] [Thread-195043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:02:08.938 [DEBUG] [Thread-195043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:02:08.978 [DEBUG] [Thread-195043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:02:08.978 [DEBUG] [Thread-195043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:02:08.982 [DEBUG] [Thread-195043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:02:08.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:02:08.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:02:08.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:02:08.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:02:09.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:02:09.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:02:09.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:02:09.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:02:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:02:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.750802 -999.00  +12.30  10.64     93  +11.20 1 2 1 3 1     0    0 -1.12 -93.53 z...W 10.6 10.6 194.2 12.9 14.2 -9.3 13.9 -13.4 13.8 -7.2 14.1 -5.3
2026-04-12T20:02:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:02:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:02:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.750802
2026-04-12T20:02:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:02:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:02:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:02:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:02:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:02:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:01:40', tmtdew=1.09282, humidity=92.986, cloud=0.0, wind=10.3406, temperature=12.6097, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:01:09.293', atlas_cloud=2, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:02:09.016 [DEBUG] [Thread-195043] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:02:09.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:02:09.701 [DEBUG] [Thread-195046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:02:24.756 [DEBUG] [Thread-195047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:02:39.790 [DEBUG] [Thread-195048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:02:54.828 [DEBUG] [Thread-195049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:03:02.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:03:02.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:03:05.603 [DEBUG] [Thread-195050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:03:09.865 [DEBUG] [Thread-195051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:03:24.900 [DEBUG] [Thread-195052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:03:39.939 [DEBUG] [Thread-195053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:03:54.990 [DEBUG] [Thread-195054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:03.202 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:03.203 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:05.678 [DEBUG] [Thread-195055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:10.028 [DEBUG] [Thread-195056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:23.553 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T20:04:25.059 [DEBUG] [Thread-195057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:40.092 [DEBUG] [Thread-195058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:53.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:04:53.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:04:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:04:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 4, 38), 1.04874, 93.2514, 0.0, 10.6582, 12.4771, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:04:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:04:38
2026-04-12T20:04:55.140 [DEBUG] [Thread-195059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:04:55.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:04:55.438 [DEBUG] [Thread-195060] [transport.py] [_log()] starting thread (client mode): 0xb0f6f400
2026-04-12T20:04:55.438 [DEBUG] [Thread-195060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:04:55.452 [DEBUG] [Thread-195060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:04:55.452 [INFO] [Thread-195060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] client lang: <none>
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] server lang: <none>
2026-04-12T20:04:55.458 [DEBUG] [Thread-195060] [transport.py] [_log()] kex follows: False
2026-04-12T20:04:55.459 [DEBUG] [Thread-195060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:04:55.459 [DEBUG] [Thread-195060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:04:55.459 [DEBUG] [Thread-195060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:04:55.459 [DEBUG] [Thread-195060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:04:55.459 [DEBUG] [Thread-195060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:04:55.459 [DEBUG] [Thread-195060] [transport.py] [_log()] Compression: none
2026-04-12T20:04:55.459 [DEBUG] [Thread-195060] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:04:55.490 [DEBUG] [Thread-195060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:04:55.493 [DEBUG] [Thread-195060] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:04:55.494 [DEBUG] [Thread-195060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:04:55.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:04:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:04:55.497 [DEBUG] [Thread-195060] [transport.py] [_log()] userauth is OK
2026-04-12T20:04:55.498 [DEBUG] [Thread-195060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:04:55.498 [DEBUG] [Thread-195060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:04:55.498 [DEBUG] [Thread-195060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:04:55.498 [DEBUG] [Thread-195060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:04:55.518 [INFO] [Thread-195060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:04:55.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:04:56.323 [DEBUG] [Thread-195060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:04:56.323 [DEBUG] [Thread-195060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:04:56.325 [DEBUG] [Thread-195060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:04:56.364 [DEBUG] [Thread-195060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:04:56.365 [DEBUG] [Thread-195060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:04:56.367 [DEBUG] [Thread-195060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:04:56.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:04:56.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:04:56.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:04:56.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:04:56.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:04:56.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:04:56.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:04:56.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:04:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:04:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.752885 -999.00  +12.20   8.29     93  +11.20 1 3 1 3 1     0    0 -1.01 -85.42 ZN.sW 8.3 8.3 199.0 9.8 14.1 -8.9 13.9 -10.2 13.7 -7.6 14.1 -8.3
2026-04-12T20:04:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:04:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:04:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.752885
2026-04-12T20:04:56.402 [DEBUG] [Thread-195060] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:04:56.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:04:56.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:04:56.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:04:56.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:04:56.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:04:56.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:04:38', tmtdew=1.04874, humidity=93.2514, cloud=0.0, wind=10.6582, temperature=12.4771, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:04:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:04:56.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:04:56.517 [DEBUG] [Thread-195063] [transport.py] [_log()] starting thread (client mode): 0xae5b5390
2026-04-12T20:04:56.517 [DEBUG] [Thread-195063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:04:56.532 [DEBUG] [Thread-195063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:04:56.532 [INFO] [Thread-195063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] client lang: <none>
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] server lang: <none>
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] kex follows: False
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] Compression: none
2026-04-12T20:04:56.539 [DEBUG] [Thread-195063] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:04:56.599 [DEBUG] [Thread-195063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:04:56.599 [DEBUG] [Thread-195063] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:04:56.599 [DEBUG] [Thread-195063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:04:56.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:04:56.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:04:56.655 [DEBUG] [Thread-195063] [transport.py] [_log()] userauth is OK
2026-04-12T20:04:56.655 [DEBUG] [Thread-195063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:04:56.655 [DEBUG] [Thread-195063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:04:56.655 [DEBUG] [Thread-195063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:04:56.655 [DEBUG] [Thread-195063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:04:56.672 [INFO] [Thread-195063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:04:56.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:04:56.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:04:57.475 [DEBUG] [Thread-195063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:04:57.475 [DEBUG] [Thread-195063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:04:57.522 [DEBUG] [Thread-195063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:04:57.523 [DEBUG] [Thread-195063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:04:57.531 [DEBUG] [Thread-195063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:04:57.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:04:57.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:04:57.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:04:57.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:04:57.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:04:57.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:04:57.567 [DEBUG] [Thread-195063] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:05:03.417 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:05:03.418 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:05:05.989 [DEBUG] [Thread-195065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:05:10.187 [DEBUG] [Thread-195066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:05:25.284 [DEBUG] [Thread-195067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:05:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:05:27.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:05:27.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:05:28.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 5, 13), 0.56339, 96.192, 0.0, 10.1293, 12.0554, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:05:28.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:05:13
2026-04-12T20:05:29.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:05:29.520 [DEBUG] [Thread-195068] [transport.py] [_log()] starting thread (client mode): 0xae534400
2026-04-12T20:05:29.521 [DEBUG] [Thread-195068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:05:29.531 [DEBUG] [Thread-195068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:05:29.531 [INFO] [Thread-195068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] client lang: <none>
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] server lang: <none>
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] kex follows: False
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:05:29.535 [DEBUG] [Thread-195068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:05:29.536 [DEBUG] [Thread-195068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:05:29.536 [DEBUG] [Thread-195068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:05:29.536 [DEBUG] [Thread-195068] [transport.py] [_log()] Compression: none
2026-04-12T20:05:29.536 [DEBUG] [Thread-195068] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:05:29.551 [DEBUG] [Thread-195068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:05:29.552 [DEBUG] [Thread-195068] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:05:29.553 [DEBUG] [Thread-195068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:05:29.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:05:29.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:05:29.556 [DEBUG] [Thread-195068] [transport.py] [_log()] userauth is OK
2026-04-12T20:05:29.556 [DEBUG] [Thread-195068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:05:29.556 [DEBUG] [Thread-195068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:05:29.556 [DEBUG] [Thread-195068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:05:29.556 [DEBUG] [Thread-195068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:05:29.576 [INFO] [Thread-195068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:05:29.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:05:30.331 [DEBUG] [Thread-195068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:05:30.331 [DEBUG] [Thread-195068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:05:30.332 [DEBUG] [Thread-195068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:05:30.372 [DEBUG] [Thread-195068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:05:30.372 [DEBUG] [Thread-195068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:05:30.375 [DEBUG] [Thread-195068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:05:30.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:05:30.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:05:30.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:05:30.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:05:30.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:05:30.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:05:30.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:05:30.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:05:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:05:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.753232 -999.00  +12.20   9.68     93  +11.10 1 2 1 3 1     0    0 -1.04 -85.82 ....W 9.7 9.7 194.4 10.3 14.1 -11.2 13.9 -11.1 13.7 -10.5 14.1 -11.0
2026-04-12T20:05:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:05:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:05:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.753232
2026-04-12T20:05:30.408 [DEBUG] [Thread-195068] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:05:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:05:30.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:05:30.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:05:30.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:05:30.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:05:30.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:05:13', tmtdew=0.56339, humidity=96.192, cloud=0.0, wind=10.1293, temperature=12.0554, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:04:39.245', atlas_cloud=2, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:05:30.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:05:30.510 [DEBUG] [Thread-195071] [transport.py] [_log()] starting thread (client mode): 0xae5183d0
2026-04-12T20:05:30.511 [DEBUG] [Thread-195071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:05:30.523 [DEBUG] [Thread-195071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:05:30.523 [INFO] [Thread-195071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:05:30.531 [DEBUG] [Thread-195071] [transport.py] [_log()] client lang: <none>
2026-04-12T20:05:30.532 [DEBUG] [Thread-195071] [transport.py] [_log()] server lang: <none>
2026-04-12T20:05:30.532 [DEBUG] [Thread-195071] [transport.py] [_log()] kex follows: False
2026-04-12T20:05:30.532 [DEBUG] [Thread-195071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:05:30.532 [DEBUG] [Thread-195071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:05:30.532 [DEBUG] [Thread-195071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:05:30.533 [DEBUG] [Thread-195071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:05:30.533 [DEBUG] [Thread-195071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:05:30.533 [DEBUG] [Thread-195071] [transport.py] [_log()] Compression: none
2026-04-12T20:05:30.533 [DEBUG] [Thread-195071] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:05:30.586 [DEBUG] [Thread-195071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:05:30.586 [DEBUG] [Thread-195071] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:05:30.586 [DEBUG] [Thread-195071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:05:30.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:05:30.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:05:30.643 [DEBUG] [Thread-195071] [transport.py] [_log()] userauth is OK
2026-04-12T20:05:30.643 [DEBUG] [Thread-195071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:05:30.643 [DEBUG] [Thread-195071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:05:30.643 [DEBUG] [Thread-195071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:05:30.643 [DEBUG] [Thread-195071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:05:30.659 [INFO] [Thread-195071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:05:30.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:05:30.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:05:31.471 [DEBUG] [Thread-195071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:05:31.471 [DEBUG] [Thread-195071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:05:31.518 [DEBUG] [Thread-195071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:05:31.518 [DEBUG] [Thread-195071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:05:31.527 [DEBUG] [Thread-195071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:05:31.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:05:31.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:05:31.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:05:31.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:05:31.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:05:31.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:05:31.560 [DEBUG] [Thread-195071] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:05:40.325 [DEBUG] [Thread-195073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:05:55.472 [DEBUG] [Thread-195074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:06:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:06:01.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:06:01.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:06:02.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 5, 49), 1.0163, 93.4504, 0.0, 11.2226, 12.444, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:06:02.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:05:49
2026-04-12T20:06:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:06:03.511 [DEBUG] [Thread-195075] [transport.py] [_log()] starting thread (client mode): 0xae509990
2026-04-12T20:06:03.511 [DEBUG] [Thread-195075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:06:03.519 [DEBUG] [Thread-195075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:06:03.519 [INFO] [Thread-195075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] client lang: <none>
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] server lang: <none>
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] kex follows: False
2026-04-12T20:06:03.523 [DEBUG] [Thread-195075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:06:03.524 [DEBUG] [Thread-195075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:06:03.524 [DEBUG] [Thread-195075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:06:03.524 [DEBUG] [Thread-195075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:06:03.524 [DEBUG] [Thread-195075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:06:03.524 [DEBUG] [Thread-195075] [transport.py] [_log()] Compression: none
2026-04-12T20:06:03.524 [DEBUG] [Thread-195075] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:06:03.556 [DEBUG] [Thread-195075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:06:03.559 [DEBUG] [Thread-195075] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:06:03.561 [DEBUG] [Thread-195075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:06:03.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:06:03.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:06:03.601 [DEBUG] [Thread-195075] [transport.py] [_log()] userauth is OK
2026-04-12T20:06:03.602 [DEBUG] [Thread-195075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:06:03.602 [DEBUG] [Thread-195075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:06:03.602 [DEBUG] [Thread-195075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:06:03.602 [DEBUG] [Thread-195075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:06:03.621 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:06:03.622 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:06:03.637 [INFO] [Thread-195075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:06:03.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:06:04.468 [DEBUG] [Thread-195075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:06:04.468 [DEBUG] [Thread-195075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:06:04.469 [DEBUG] [Thread-195075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:06:04.508 [DEBUG] [Thread-195075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:06:04.508 [DEBUG] [Thread-195075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:06:04.511 [DEBUG] [Thread-195075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:06:04.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:06:04.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:06:04.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:06:04.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:06:04.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:06:04.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:06:04.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:06:04.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:06:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:06:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.753579 -999.00  +12.20   6.69     93  +11.10 1 3 1 3 1     0    0 -0.92 -81.08 ....W 6.7 6.7 187.4 8.9 14.1 -10.5 13.9 -8.8 13.7 -10.3 14.0 -12.8
2026-04-12T20:06:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:06:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:06:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.753579
2026-04-12T20:06:04.540 [DEBUG] [Thread-195075] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:06:04.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:06:04.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:06:04.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:06:04.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:06:04.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:06:04.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:05:49', tmtdew=1.0163, humidity=93.4504, cloud=0.0, wind=11.2226, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:05:09.226', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:06:04.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:06:04.643 [DEBUG] [Thread-195078] [transport.py] [_log()] starting thread (client mode): 0xae50afb0
2026-04-12T20:06:04.643 [DEBUG] [Thread-195078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:06:04.658 [DEBUG] [Thread-195078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:06:04.658 [INFO] [Thread-195078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:06:04.665 [DEBUG] [Thread-195078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] client lang: <none>
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] server lang: <none>
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] kex follows: False
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] Compression: none
2026-04-12T20:06:04.666 [DEBUG] [Thread-195078] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:06:04.723 [DEBUG] [Thread-195078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:06:04.724 [DEBUG] [Thread-195078] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:06:04.724 [DEBUG] [Thread-195078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:06:04.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:06:04.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:06:04.779 [DEBUG] [Thread-195078] [transport.py] [_log()] userauth is OK
2026-04-12T20:06:04.780 [DEBUG] [Thread-195078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:06:04.780 [DEBUG] [Thread-195078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:06:04.780 [DEBUG] [Thread-195078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:06:04.780 [DEBUG] [Thread-195078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:06:04.798 [INFO] [Thread-195078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:06:04.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:06:04.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:06:05.601 [DEBUG] [Thread-195078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:06:05.602 [DEBUG] [Thread-195078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:06:05.650 [DEBUG] [Thread-195078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:06:05.650 [DEBUG] [Thread-195078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:06:05.659 [DEBUG] [Thread-195078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:06:05.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:06:05.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:06:05.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:06:05.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:06:05.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:06:05.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:06:05.693 [DEBUG] [Thread-195078] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:06:06.266 [DEBUG] [Thread-195080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:06:10.511 [DEBUG] [Thread-195081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:06:25.563 [DEBUG] [Thread-195082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:06:35.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:06:35.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:06:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:06:37.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 6, 24), 0.54988, 96.2749, 0.0, 8.77032, 12.0388, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:06:37.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:06:24
2026-04-12T20:06:37.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:06:37.636 [DEBUG] [Thread-195083] [transport.py] [_log()] starting thread (client mode): 0xae5b03d0
2026-04-12T20:06:37.636 [DEBUG] [Thread-195083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:06:37.644 [DEBUG] [Thread-195083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:06:37.644 [INFO] [Thread-195083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] client lang: <none>
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] server lang: <none>
2026-04-12T20:06:37.649 [DEBUG] [Thread-195083] [transport.py] [_log()] kex follows: False
2026-04-12T20:06:37.650 [DEBUG] [Thread-195083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:06:37.650 [DEBUG] [Thread-195083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:06:37.650 [DEBUG] [Thread-195083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:06:37.650 [DEBUG] [Thread-195083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:06:37.650 [DEBUG] [Thread-195083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:06:37.650 [DEBUG] [Thread-195083] [transport.py] [_log()] Compression: none
2026-04-12T20:06:37.650 [DEBUG] [Thread-195083] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:06:37.681 [DEBUG] [Thread-195083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:06:37.686 [DEBUG] [Thread-195083] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:06:37.687 [DEBUG] [Thread-195083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:06:37.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:06:37.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:06:37.692 [DEBUG] [Thread-195083] [transport.py] [_log()] userauth is OK
2026-04-12T20:06:37.692 [DEBUG] [Thread-195083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:06:37.692 [DEBUG] [Thread-195083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:06:37.692 [DEBUG] [Thread-195083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:06:37.692 [DEBUG] [Thread-195083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:06:37.718 [INFO] [Thread-195083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:06:37.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:06:38.525 [DEBUG] [Thread-195083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:06:38.525 [DEBUG] [Thread-195083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:06:38.526 [DEBUG] [Thread-195083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:06:38.565 [DEBUG] [Thread-195083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:06:38.566 [DEBUG] [Thread-195083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:06:38.568 [DEBUG] [Thread-195083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:06:38.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:06:38.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:06:38.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:06:38.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:06:38.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:06:38.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:06:38.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:06:38.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:06:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:06:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.754274 -999.00  +12.20   5.76     93  +11.10 1 3 1 3 1     0    0 -0.87 -77.90 ZNe.W 5.8 5.8 196.4 7.4 14.1 -5.2 13.9 -5.0 13.7 -5.8 14.0 -6.1
2026-04-12T20:06:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:06:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:06:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.754274
2026-04-12T20:06:38.595 [DEBUG] [Thread-195083] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:06:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:06:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:06:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:06:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:06:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:06:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:06:24', tmtdew=0.54988, humidity=96.2749, cloud=0.0, wind=8.77032, temperature=12.0388, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:06:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:06:38.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:06:38.695 [DEBUG] [Thread-195086] [transport.py] [_log()] starting thread (client mode): 0xb0f6d780
2026-04-12T20:06:38.695 [DEBUG] [Thread-195086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:06:38.710 [DEBUG] [Thread-195086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:06:38.710 [INFO] [Thread-195086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] client lang: <none>
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] server lang: <none>
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] kex follows: False
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:06:38.718 [DEBUG] [Thread-195086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:06:38.719 [DEBUG] [Thread-195086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:06:38.719 [DEBUG] [Thread-195086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:06:38.719 [DEBUG] [Thread-195086] [transport.py] [_log()] Compression: none
2026-04-12T20:06:38.719 [DEBUG] [Thread-195086] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:06:38.778 [DEBUG] [Thread-195086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:06:38.778 [DEBUG] [Thread-195086] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:06:38.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:06:38.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:06:38.779 [DEBUG] [Thread-195086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:06:38.835 [DEBUG] [Thread-195086] [transport.py] [_log()] userauth is OK
2026-04-12T20:06:38.835 [DEBUG] [Thread-195086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:06:38.835 [DEBUG] [Thread-195086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:06:38.835 [DEBUG] [Thread-195086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:06:38.835 [DEBUG] [Thread-195086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:06:38.850 [INFO] [Thread-195086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:06:38.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:06:38.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:06:39.734 [DEBUG] [Thread-195086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:06:39.734 [DEBUG] [Thread-195086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:06:39.781 [DEBUG] [Thread-195086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:06:39.782 [DEBUG] [Thread-195086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:06:39.790 [DEBUG] [Thread-195086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:06:39.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:06:39.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:06:39.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:06:39.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:06:39.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:06:39.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:06:39.823 [DEBUG] [Thread-195086] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:06:40.595 [DEBUG] [Thread-195088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:06:55.662 [DEBUG] [Thread-195089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:07:03.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:07:03.830 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:07:06.483 [DEBUG] [Thread-195090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:07:09.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:07:09.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:07:09.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:07:10.689 [DEBUG] [Thread-195091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:07:11.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 6, 24), 0.54988, 96.2749, 0.0, 8.77032, 12.0388, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:07:11.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:06:24
2026-04-12T20:07:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:07:11.763 [DEBUG] [Thread-195092] [transport.py] [_log()] starting thread (client mode): 0xae51b520
2026-04-12T20:07:11.763 [DEBUG] [Thread-195092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:07:11.779 [DEBUG] [Thread-195092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:07:11.779 [INFO] [Thread-195092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] client lang: <none>
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] server lang: <none>
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] kex follows: False
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:07:11.784 [DEBUG] [Thread-195092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:07:11.785 [DEBUG] [Thread-195092] [transport.py] [_log()] Compression: none
2026-04-12T20:07:11.785 [DEBUG] [Thread-195092] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:07:11.805 [DEBUG] [Thread-195092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:07:11.806 [DEBUG] [Thread-195092] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:07:11.807 [DEBUG] [Thread-195092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:07:11.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:07:11.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:07:11.811 [DEBUG] [Thread-195092] [transport.py] [_log()] userauth is OK
2026-04-12T20:07:11.811 [DEBUG] [Thread-195092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:07:11.811 [DEBUG] [Thread-195092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:07:11.811 [DEBUG] [Thread-195092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:07:11.811 [DEBUG] [Thread-195092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:07:11.837 [INFO] [Thread-195092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:07:11.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:07:12.614 [DEBUG] [Thread-195092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:07:12.614 [DEBUG] [Thread-195092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:07:12.615 [DEBUG] [Thread-195092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:07:12.655 [DEBUG] [Thread-195092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:07:12.655 [DEBUG] [Thread-195092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:07:12.659 [DEBUG] [Thread-195092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:07:12.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:07:12.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:07:12.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:07:12.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:07:12.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:07:12.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:07:12.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:07:12.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:07:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:07:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.754621 -999.00  +12.20   6.30     93  +11.10 1 3 1 3 1     0    0 -0.70 -71.16 ZNe.W 6.3 6.3 207.0 8.0 14.2 -3.6 14.0 -4.0 13.7 -3.9 14.1 -4.5
2026-04-12T20:07:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:07:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:07:12.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.754621
2026-04-12T20:07:12.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:07:12.698 [DEBUG] [Thread-195092] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:07:12.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:07:12.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:07:12.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:07:12.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:07:12.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:06:24', tmtdew=0.54988, humidity=96.2749, cloud=0.0, wind=8.77032, temperature=12.0388, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:06:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:07:12.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:07:12.800 [DEBUG] [Thread-195095] [transport.py] [_log()] starting thread (client mode): 0xb0f8f880
2026-04-12T20:07:12.800 [DEBUG] [Thread-195095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:07:12.814 [DEBUG] [Thread-195095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:07:12.815 [INFO] [Thread-195095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:07:12.822 [DEBUG] [Thread-195095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:07:12.822 [DEBUG] [Thread-195095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:07:12.822 [DEBUG] [Thread-195095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] client lang: <none>
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] server lang: <none>
2026-04-12T20:07:12.823 [DEBUG] [Thread-195095] [transport.py] [_log()] kex follows: False
2026-04-12T20:07:12.824 [DEBUG] [Thread-195095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:07:12.824 [DEBUG] [Thread-195095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:07:12.824 [DEBUG] [Thread-195095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:07:12.824 [DEBUG] [Thread-195095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:07:12.824 [DEBUG] [Thread-195095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:07:12.824 [DEBUG] [Thread-195095] [transport.py] [_log()] Compression: none
2026-04-12T20:07:12.824 [DEBUG] [Thread-195095] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:07:12.879 [DEBUG] [Thread-195095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:07:12.880 [DEBUG] [Thread-195095] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:07:12.881 [DEBUG] [Thread-195095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:07:12.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:07:12.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:07:12.936 [DEBUG] [Thread-195095] [transport.py] [_log()] userauth is OK
2026-04-12T20:07:12.936 [DEBUG] [Thread-195095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:07:12.937 [DEBUG] [Thread-195095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:07:12.937 [DEBUG] [Thread-195095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:07:12.937 [DEBUG] [Thread-195095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:07:12.955 [INFO] [Thread-195095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:07:12.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:07:12.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:07:13.783 [DEBUG] [Thread-195095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:07:13.783 [DEBUG] [Thread-195095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:07:13.831 [DEBUG] [Thread-195095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:07:13.831 [DEBUG] [Thread-195095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:07:13.840 [DEBUG] [Thread-195095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:07:13.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:07:13.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:07:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:07:13.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:07:13.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:07:13.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:07:13.880 [DEBUG] [Thread-195095] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:07:25.722 [DEBUG] [Thread-195097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:07:40.801 [DEBUG] [Thread-195098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:07:43.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:07:43.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:07:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:07:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 7, 35), 0.97278, 93.7157, 0.0, 9.67032, 12.3445, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:07:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:07:35
2026-04-12T20:07:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:07:45.731 [DEBUG] [Thread-195099] [transport.py] [_log()] starting thread (client mode): 0xae534640
2026-04-12T20:07:45.731 [DEBUG] [Thread-195099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:07:45.751 [DEBUG] [Thread-195099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:07:45.751 [INFO] [Thread-195099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] client lang: <none>
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] server lang: <none>
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] kex follows: False
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] Compression: none
2026-04-12T20:07:45.755 [DEBUG] [Thread-195099] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:07:45.773 [DEBUG] [Thread-195099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:07:45.774 [DEBUG] [Thread-195099] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:07:45.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:07:45.775 [DEBUG] [Thread-195099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:07:45.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:07:45.777 [DEBUG] [Thread-195099] [transport.py] [_log()] userauth is OK
2026-04-12T20:07:45.777 [DEBUG] [Thread-195099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:07:45.777 [DEBUG] [Thread-195099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:07:45.778 [DEBUG] [Thread-195099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:07:45.778 [DEBUG] [Thread-195099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:07:45.803 [INFO] [Thread-195099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:07:45.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:07:46.590 [DEBUG] [Thread-195099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:07:46.591 [DEBUG] [Thread-195099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:07:46.591 [DEBUG] [Thread-195099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:07:46.632 [DEBUG] [Thread-195099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:07:46.632 [DEBUG] [Thread-195099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:07:46.636 [DEBUG] [Thread-195099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:07:46.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:07:46.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:07:46.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:07:46.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:07:46.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:07:46.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:07:46.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:07:46.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:07:46.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:07:46.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.754968 -999.00  +12.20   6.52     93  +11.20 1 3 1 3 1     0    0 -0.83 -75.44 ----- 6.5 6.5 195.2 9.0 14.2 -4.5 13.9 -4.7 13.8 -4.0 14.1 -4.1
2026-04-12T20:07:46.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:07:46.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:07:46.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.754968
2026-04-12T20:07:46.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:07:46.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:07:46.662 [DEBUG] [Thread-195099] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:07:46.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:07:46.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:07:46.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:07:46.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:07:35', tmtdew=0.97278, humidity=93.7157, cloud=0.0, wind=9.67032, temperature=12.3445, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:07:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[0.5987499999999999, nan, 0.9172500000000001, 0.7669999999999995, 1.3434999999999997, 0.9102500000000004, 0.3330000000000002, 0.3732500000000023, nan, nan, nan, 1.4930000000000003, nan, nan, 0.4079999999999995, 0.39199999999999946, 0.6632499999999997, nan, 0.8509999999999991, 0.6812499999999986, 1.7959999999999985, nan, 0.46725000000000083, 0.6397500000000003, 1.5639999999999992, 1.4340000000000002, 0.9402499999999998, 0.7484999999999999, 1.6440000000000001, nan, 0.6940000000000008, 1.1380000000000008, 1.763749999999999], zp_timestamp='2026-04-12T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:07:46.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:07:46.750 [DEBUG] [Thread-195102] [transport.py] [_log()] starting thread (client mode): 0xae5363e0
2026-04-12T20:07:46.750 [DEBUG] [Thread-195102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:07:46.764 [DEBUG] [Thread-195102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:07:46.764 [INFO] [Thread-195102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] client lang: <none>
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] server lang: <none>
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] kex follows: False
2026-04-12T20:07:46.772 [DEBUG] [Thread-195102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:07:46.773 [DEBUG] [Thread-195102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:07:46.773 [DEBUG] [Thread-195102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:07:46.773 [DEBUG] [Thread-195102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:07:46.773 [DEBUG] [Thread-195102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:07:46.773 [DEBUG] [Thread-195102] [transport.py] [_log()] Compression: none
2026-04-12T20:07:46.773 [DEBUG] [Thread-195102] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:07:46.836 [DEBUG] [Thread-195102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:07:46.836 [DEBUG] [Thread-195102] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:07:46.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:07:46.838 [DEBUG] [Thread-195102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:07:46.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:07:46.892 [DEBUG] [Thread-195102] [transport.py] [_log()] userauth is OK
2026-04-12T20:07:46.893 [DEBUG] [Thread-195102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:07:46.893 [DEBUG] [Thread-195102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:07:46.893 [DEBUG] [Thread-195102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:07:46.893 [DEBUG] [Thread-195102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:07:46.917 [INFO] [Thread-195102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:07:46.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:07:46.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:07:47.726 [DEBUG] [Thread-195102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:07:47.726 [DEBUG] [Thread-195102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:07:47.775 [DEBUG] [Thread-195102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:07:47.775 [DEBUG] [Thread-195102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:07:47.784 [DEBUG] [Thread-195102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:07:47.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:07:47.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:07:47.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:07:47.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:07:47.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:07:47.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:07:47.822 [DEBUG] [Thread-195102] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:07:55.839 [DEBUG] [Thread-195104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:08:04.034 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:08:04.036 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:08:06.564 [DEBUG] [Thread-195105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:08:10.903 [DEBUG] [Thread-195106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:08:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:08:17.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:08:17.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:08:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 8, 10), 0.53372, 96.3744, 0.0, 8.29404, 12.0223, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:08:19.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:08:10
2026-04-12T20:08:19.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:08:19.668 [DEBUG] [Thread-195107] [transport.py] [_log()] starting thread (client mode): 0xae5f1780
2026-04-12T20:08:19.668 [DEBUG] [Thread-195107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:08:19.689 [DEBUG] [Thread-195107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:08:19.689 [INFO] [Thread-195107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] client lang: <none>
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] server lang: <none>
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] kex follows: False
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] Compression: none
2026-04-12T20:08:19.691 [DEBUG] [Thread-195107] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:08:19.707 [DEBUG] [Thread-195107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:08:19.707 [DEBUG] [Thread-195107] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:08:19.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:08:19.708 [DEBUG] [Thread-195107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:08:19.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:08:19.710 [DEBUG] [Thread-195107] [transport.py] [_log()] userauth is OK
2026-04-12T20:08:19.710 [DEBUG] [Thread-195107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:08:19.710 [DEBUG] [Thread-195107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:08:19.710 [DEBUG] [Thread-195107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:08:19.710 [DEBUG] [Thread-195107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:08:19.743 [INFO] [Thread-195107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:08:19.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:08:20.533 [DEBUG] [Thread-195107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:08:20.533 [DEBUG] [Thread-195107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:08:20.533 [DEBUG] [Thread-195107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:08:20.573 [DEBUG] [Thread-195107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:08:20.573 [DEBUG] [Thread-195107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:08:20.575 [DEBUG] [Thread-195107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:08:20.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:08:20.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:08:20.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:08:20.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:08:20.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:08:20.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:08:20.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:08:20.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.755316 -999.00  +12.20   6.86     93  +11.20 1 3 1 3 1     0    0 -0.67 -68.39 ----- 6.9 6.9 209.6 9.4 14.2 -5.0 14.0 -5.7 13.8 -5.0 14.1 -4.5
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.755316
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:08:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:08:10', tmtdew=0.53372, humidity=96.3744, cloud=0.0, wind=8.29404, temperature=12.0223, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:07:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[2.9312499999999995, nan, 2.94925, nan, 2.4414999999999996, 2.385250000000001, nan, nan, nan, nan, 2.9042499999999993, nan, 2.625, 2.1842499999999987, nan, nan, nan, nan, nan, nan, nan, 2.0817499999999987, nan, nan, nan, nan, nan, nan, nan, 2.302500000000001, nan, nan, nan], zp_timestamp='2026-04-12T18:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:08:20.603 [DEBUG] [Thread-195107] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:08:20.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:08:20.686 [DEBUG] [Thread-195110] [transport.py] [_log()] starting thread (client mode): 0xae5f3610
2026-04-12T20:08:20.686 [DEBUG] [Thread-195110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:08:20.702 [DEBUG] [Thread-195110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:08:20.702 [INFO] [Thread-195110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:08:20.711 [DEBUG] [Thread-195110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:08:20.711 [DEBUG] [Thread-195110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:08:20.711 [DEBUG] [Thread-195110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:08:20.711 [DEBUG] [Thread-195110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:20.711 [DEBUG] [Thread-195110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:20.711 [DEBUG] [Thread-195110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] client lang: <none>
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] server lang: <none>
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] kex follows: False
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] Compression: none
2026-04-12T20:08:20.712 [DEBUG] [Thread-195110] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:08:20.768 [DEBUG] [Thread-195110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:08:20.768 [DEBUG] [Thread-195110] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:08:20.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:08:20.769 [DEBUG] [Thread-195110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:08:20.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:08:20.826 [DEBUG] [Thread-195110] [transport.py] [_log()] userauth is OK
2026-04-12T20:08:20.826 [DEBUG] [Thread-195110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:08:20.826 [DEBUG] [Thread-195110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:08:20.826 [DEBUG] [Thread-195110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:08:20.827 [DEBUG] [Thread-195110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:08:20.849 [INFO] [Thread-195110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:08:20.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:08:20.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:08:21.716 [DEBUG] [Thread-195110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:08:21.717 [DEBUG] [Thread-195110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:08:21.765 [DEBUG] [Thread-195110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:08:21.765 [DEBUG] [Thread-195110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:08:21.774 [DEBUG] [Thread-195110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:08:21.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:08:21.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:08:21.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:08:21.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:08:21.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:08:21.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:08:21.811 [DEBUG] [Thread-195110] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:08:25.940 [DEBUG] [Thread-195112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:08:41.003 [DEBUG] [Thread-195113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:08:51.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:08:51.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:08:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:08:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 8, 10), 0.53372, 96.3744, 0.0, 8.29404, 12.0223, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:08:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:08:10
2026-04-12T20:08:53.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:08:53.760 [DEBUG] [Thread-195114] [transport.py] [_log()] starting thread (client mode): 0xae5f0e80
2026-04-12T20:08:53.760 [DEBUG] [Thread-195114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:08:53.773 [DEBUG] [Thread-195114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:08:53.773 [INFO] [Thread-195114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:08:53.776 [DEBUG] [Thread-195114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:08:53.776 [DEBUG] [Thread-195114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:08:53.776 [DEBUG] [Thread-195114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] client lang: <none>
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] server lang: <none>
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] kex follows: False
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:08:53.777 [DEBUG] [Thread-195114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:08:53.778 [DEBUG] [Thread-195114] [transport.py] [_log()] Compression: none
2026-04-12T20:08:53.778 [DEBUG] [Thread-195114] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:08:53.788 [DEBUG] [Thread-195114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:08:53.788 [DEBUG] [Thread-195114] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:08:53.789 [DEBUG] [Thread-195114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:08:53.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:08:53.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:08:53.792 [DEBUG] [Thread-195114] [transport.py] [_log()] userauth is OK
2026-04-12T20:08:53.792 [DEBUG] [Thread-195114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:08:53.792 [DEBUG] [Thread-195114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:08:53.792 [DEBUG] [Thread-195114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:08:53.792 [DEBUG] [Thread-195114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:08:53.817 [INFO] [Thread-195114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:08:53.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:08:54.590 [DEBUG] [Thread-195114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:08:54.591 [DEBUG] [Thread-195114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:08:54.591 [DEBUG] [Thread-195114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:08:54.631 [DEBUG] [Thread-195114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:08:54.631 [DEBUG] [Thread-195114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:08:54.635 [DEBUG] [Thread-195114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:08:54.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:08:54.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:08:54.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:08:54.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:08:54.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:08:54.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:08:54.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:08:54.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:08:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:08:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.755663 -999.00  +12.20   5.21     93  +11.20 1 3 1 3 1     0    0 -0.51 -64.15 ----- 5.2 5.2 208.0 9.3 14.2 -5.3 14.0 -4.8 13.8 -5.9 14.1 -6.6
2026-04-12T20:08:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:08:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:08:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.755663
2026-04-12T20:08:54.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:08:54.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:08:54.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:08:54.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:08:54.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:08:54.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:08:10', tmtdew=0.53372, humidity=96.3744, cloud=0.0, wind=8.29404, temperature=12.0223, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:08:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[2.9312499999999995, nan, 2.94925, nan, 2.4414999999999996, 2.385250000000001, nan, nan, nan, nan, 2.9042499999999993, nan, 2.625, 2.1842499999999987, nan, nan, nan, nan, nan, nan, nan, 2.0817499999999987, nan, nan, nan, nan, nan, nan, nan, 2.302500000000001, nan, nan, nan], zp_timestamp='2026-04-12T18:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:08:54.664 [DEBUG] [Thread-195114] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:08:54.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:08:54.767 [DEBUG] [Thread-195117] [transport.py] [_log()] starting thread (client mode): 0xae5e4a00
2026-04-12T20:08:54.767 [DEBUG] [Thread-195117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:08:54.782 [DEBUG] [Thread-195117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:08:54.782 [INFO] [Thread-195117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:08:54.790 [DEBUG] [Thread-195117] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:08:54.790 [DEBUG] [Thread-195117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] client lang: <none>
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] server lang: <none>
2026-04-12T20:08:54.791 [DEBUG] [Thread-195117] [transport.py] [_log()] kex follows: False
2026-04-12T20:08:54.792 [DEBUG] [Thread-195117] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:08:54.792 [DEBUG] [Thread-195117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:08:54.792 [DEBUG] [Thread-195117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:08:54.792 [DEBUG] [Thread-195117] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:08:54.792 [DEBUG] [Thread-195117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:08:54.792 [DEBUG] [Thread-195117] [transport.py] [_log()] Compression: none
2026-04-12T20:08:54.792 [DEBUG] [Thread-195117] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:08:54.853 [DEBUG] [Thread-195117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:08:54.853 [DEBUG] [Thread-195117] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:08:54.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:08:54.854 [DEBUG] [Thread-195117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:08:54.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:08:54.912 [DEBUG] [Thread-195117] [transport.py] [_log()] userauth is OK
2026-04-12T20:08:54.912 [DEBUG] [Thread-195117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:08:54.912 [DEBUG] [Thread-195117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:08:54.912 [DEBUG] [Thread-195117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:08:54.913 [DEBUG] [Thread-195117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:08:54.932 [INFO] [Thread-195117] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:08:54.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:08:54.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:08:55.766 [DEBUG] [Thread-195117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:08:55.766 [DEBUG] [Thread-195117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:08:55.814 [DEBUG] [Thread-195117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:08:55.814 [DEBUG] [Thread-195117] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:08:55.824 [DEBUG] [Thread-195117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:08:55.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:08:55.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:08:55.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:08:55.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:08:55.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:08:55.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:08:55.861 [DEBUG] [Thread-195117] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:08:56.040 [DEBUG] [Thread-195119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:04.242 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:04.243 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:06.644 [DEBUG] [Thread-195120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:11.098 [DEBUG] [Thread-195121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:25.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:09:25.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:09:25.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:09:26.145 [DEBUG] [Thread-195122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 8, 46), 0.94075, 93.9147, 0.0, 9.84672, 12.3445, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:09:27.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:08:46
2026-04-12T20:09:27.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:09:27.839 [DEBUG] [Thread-195123] [transport.py] [_log()] starting thread (client mode): 0xae5e6b90
2026-04-12T20:09:27.839 [DEBUG] [Thread-195123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:09:27.859 [DEBUG] [Thread-195123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:09:27.859 [INFO] [Thread-195123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:09:27.862 [DEBUG] [Thread-195123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:09:27.862 [DEBUG] [Thread-195123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:09:27.862 [DEBUG] [Thread-195123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:09:27.862 [DEBUG] [Thread-195123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:09:27.862 [DEBUG] [Thread-195123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] client lang: <none>
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] server lang: <none>
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] kex follows: False
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] Compression: none
2026-04-12T20:09:27.863 [DEBUG] [Thread-195123] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:09:27.879 [DEBUG] [Thread-195123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:09:27.880 [DEBUG] [Thread-195123] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:09:27.880 [DEBUG] [Thread-195123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:09:27.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:09:27.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:09:27.882 [DEBUG] [Thread-195123] [transport.py] [_log()] userauth is OK
2026-04-12T20:09:27.883 [DEBUG] [Thread-195123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:09:27.883 [DEBUG] [Thread-195123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:09:27.883 [DEBUG] [Thread-195123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:09:27.883 [DEBUG] [Thread-195123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:09:27.918 [INFO] [Thread-195123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:09:27.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:09:28.696 [DEBUG] [Thread-195123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:09:28.696 [DEBUG] [Thread-195123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:09:28.697 [DEBUG] [Thread-195123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:09:28.737 [DEBUG] [Thread-195123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:09:28.737 [DEBUG] [Thread-195123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:09:28.739 [DEBUG] [Thread-195123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:09:28.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:09:28.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:09:28.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:09:28.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:09:28.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:09:28.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:09:28.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:09:28.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:09:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:09:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.756010 -999.00  +12.20   4.89     93  +11.20 1 3 1 3 1     0    0 -0.42 -58.98 z...w 4.9 4.9 207.2 6.6 14.2 -6.4 14.0 -7.1 13.8 -5.9 14.2 -5.3
2026-04-12T20:09:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:09:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:09:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.756010
2026-04-12T20:09:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:09:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:09:28.755 [DEBUG] [Thread-195123] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:09:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:09:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:09:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:09:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:08:46', tmtdew=0.94075, humidity=93.9147, cloud=0.0, wind=9.84672, temperature=12.3445, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:08:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[2.9312499999999995, nan, 2.94925, nan, 2.4414999999999996, 2.385250000000001, nan, nan, nan, nan, 2.9042499999999993, nan, 2.625, 2.1842499999999987, nan, nan, nan, nan, nan, nan, nan, 2.0817499999999987, nan, nan, nan, nan, nan, nan, nan, 2.302500000000001, nan, nan, nan], zp_timestamp='2026-04-12T18:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:09:28.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:09:28.846 [DEBUG] [Thread-195126] [transport.py] [_log()] starting thread (client mode): 0xae5e4c40
2026-04-12T20:09:28.846 [DEBUG] [Thread-195126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:09:28.860 [DEBUG] [Thread-195126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:09:28.860 [INFO] [Thread-195126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:09:28.867 [DEBUG] [Thread-195126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:09:28.867 [DEBUG] [Thread-195126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] client lang: <none>
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] server lang: <none>
2026-04-12T20:09:28.868 [DEBUG] [Thread-195126] [transport.py] [_log()] kex follows: False
2026-04-12T20:09:28.869 [DEBUG] [Thread-195126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:09:28.869 [DEBUG] [Thread-195126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:09:28.869 [DEBUG] [Thread-195126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:09:28.869 [DEBUG] [Thread-195126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:09:28.869 [DEBUG] [Thread-195126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:09:28.869 [DEBUG] [Thread-195126] [transport.py] [_log()] Compression: none
2026-04-12T20:09:28.869 [DEBUG] [Thread-195126] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:09:28.927 [DEBUG] [Thread-195126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:09:28.927 [DEBUG] [Thread-195126] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:09:28.928 [DEBUG] [Thread-195126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:09:28.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:09:28.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:09:28.984 [DEBUG] [Thread-195126] [transport.py] [_log()] userauth is OK
2026-04-12T20:09:28.984 [DEBUG] [Thread-195126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:09:28.984 [DEBUG] [Thread-195126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:09:28.984 [DEBUG] [Thread-195126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:09:28.984 [DEBUG] [Thread-195126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:09:29.003 [INFO] [Thread-195126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:09:29.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:09:29.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:09:29.814 [DEBUG] [Thread-195126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:09:29.814 [DEBUG] [Thread-195126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:09:29.862 [DEBUG] [Thread-195126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:09:29.862 [DEBUG] [Thread-195126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:09:29.872 [DEBUG] [Thread-195126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:09:29.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:09:29.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:09:29.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:09:29.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:09:29.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:09:29.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:09:29.909 [DEBUG] [Thread-195126] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:09:41.183 [DEBUG] [Thread-195128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:56.247 [DEBUG] [Thread-195129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:09:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:09:59.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:09:59.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:10:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 9, 22), 0.509925, 96.5237, 0.0, 10.4645, 12.0554, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:10:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:09:22
2026-04-12T20:10:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:10:01.949 [DEBUG] [Thread-195130] [transport.py] [_log()] starting thread (client mode): 0xae50b760
2026-04-12T20:10:01.949 [DEBUG] [Thread-195130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:10:01.959 [DEBUG] [Thread-195130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:10:01.959 [INFO] [Thread-195130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] client lang: <none>
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] server lang: <none>
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] kex follows: False
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] Compression: none
2026-04-12T20:10:01.961 [DEBUG] [Thread-195130] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:10:01.968 [DEBUG] [Thread-195130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:10:01.969 [DEBUG] [Thread-195130] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:10:01.969 [DEBUG] [Thread-195130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:10:01.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:10:01.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:10:01.970 [DEBUG] [Thread-195130] [transport.py] [_log()] userauth is OK
2026-04-12T20:10:01.970 [DEBUG] [Thread-195130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:10:01.970 [DEBUG] [Thread-195130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:10:01.970 [DEBUG] [Thread-195130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:10:01.970 [DEBUG] [Thread-195130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:10:01.987 [INFO] [Thread-195130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:10:01.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:10:02.732 [DEBUG] [Thread-195130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:10:02.732 [DEBUG] [Thread-195130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:10:02.732 [DEBUG] [Thread-195130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:10:02.774 [DEBUG] [Thread-195130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:10:02.774 [DEBUG] [Thread-195130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:10:02.776 [DEBUG] [Thread-195130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:10:02.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:10:02.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:10:02.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:10:02.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:10:02.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:10:02.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:10:02.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:10:02.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.756357 -999.00  +12.20   5.16     93  +11.20 1 3 1 3 1     0    0 -0.60 -64.07 ...S. 5.2 5.2 202.0 7.5 14.2 -9.6 14.0 -8.5 13.8 -9.3 14.2 -9.6
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.756357
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:10:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:09:22', tmtdew=0.509925, humidity=96.5237, cloud=0.0, wind=10.4645, temperature=12.0554, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:09:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[2.9312499999999995, nan, 2.94925, nan, 2.4414999999999996, 2.385250000000001, nan, nan, nan, nan, 2.9042499999999993, nan, 2.625, 2.1842499999999987, nan, nan, nan, nan, nan, nan, nan, 2.0817499999999987, nan, nan, nan, nan, nan, nan, nan, 2.302500000000001, nan, nan, nan], zp_timestamp='2026-04-12T18:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:10:02.799 [DEBUG] [Thread-195130] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:10:02.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:10:02.881 [DEBUG] [Thread-195133] [transport.py] [_log()] starting thread (client mode): 0xae519960
2026-04-12T20:10:02.881 [DEBUG] [Thread-195133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:10:02.896 [DEBUG] [Thread-195133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:10:02.896 [INFO] [Thread-195133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:10:02.904 [DEBUG] [Thread-195133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:10:02.904 [DEBUG] [Thread-195133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:10:02.904 [DEBUG] [Thread-195133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:10:02.904 [DEBUG] [Thread-195133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:02.904 [DEBUG] [Thread-195133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] client lang: <none>
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] server lang: <none>
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] kex follows: False
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] Compression: none
2026-04-12T20:10:02.905 [DEBUG] [Thread-195133] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:10:02.964 [DEBUG] [Thread-195133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:10:02.965 [DEBUG] [Thread-195133] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:10:02.965 [DEBUG] [Thread-195133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:10:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:10:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:10:03.020 [DEBUG] [Thread-195133] [transport.py] [_log()] userauth is OK
2026-04-12T20:10:03.020 [DEBUG] [Thread-195133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:10:03.020 [DEBUG] [Thread-195133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:10:03.020 [DEBUG] [Thread-195133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:10:03.020 [DEBUG] [Thread-195133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:10:03.039 [INFO] [Thread-195133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:10:03.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:10:03.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:10:03.889 [DEBUG] [Thread-195133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:10:03.889 [DEBUG] [Thread-195133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:10:03.937 [DEBUG] [Thread-195133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:10:03.937 [DEBUG] [Thread-195133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:10:03.945 [DEBUG] [Thread-195133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:10:03.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:10:03.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:10:03.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:10:03.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:10:03.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:10:03.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:10:03.978 [DEBUG] [Thread-195133] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:10:04.446 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:10:04.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:10:06.733 [DEBUG] [Thread-195135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:10:11.285 [DEBUG] [Thread-195136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:10:26.339 [DEBUG] [Thread-195137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:10:34.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:10:34.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:10:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:10:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 9, 57), 0.515255, 96.4905, 0.0, 9.10548, 12.0054, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:10:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:09:57
2026-04-12T20:10:35.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:10:36.040 [DEBUG] [Thread-195138] [transport.py] [_log()] starting thread (client mode): 0xae5a4e80
2026-04-12T20:10:36.040 [DEBUG] [Thread-195138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:10:36.055 [DEBUG] [Thread-195138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:10:36.055 [INFO] [Thread-195138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] client lang: <none>
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] server lang: <none>
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] kex follows: False
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:10:36.057 [DEBUG] [Thread-195138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:10:36.058 [DEBUG] [Thread-195138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:10:36.058 [DEBUG] [Thread-195138] [transport.py] [_log()] Compression: none
2026-04-12T20:10:36.058 [DEBUG] [Thread-195138] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:10:36.069 [DEBUG] [Thread-195138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:10:36.069 [DEBUG] [Thread-195138] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:10:36.070 [DEBUG] [Thread-195138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:10:36.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:10:36.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:10:36.071 [DEBUG] [Thread-195138] [transport.py] [_log()] userauth is OK
2026-04-12T20:10:36.071 [DEBUG] [Thread-195138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:10:36.072 [DEBUG] [Thread-195138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:10:36.072 [DEBUG] [Thread-195138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:10:36.072 [DEBUG] [Thread-195138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:10:36.085 [INFO] [Thread-195138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:10:36.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:10:36.883 [DEBUG] [Thread-195138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:10:36.883 [DEBUG] [Thread-195138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:10:36.884 [DEBUG] [Thread-195138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:10:36.924 [DEBUG] [Thread-195138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:10:36.924 [DEBUG] [Thread-195138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:10:36.928 [DEBUG] [Thread-195138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:10:36.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:10:36.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:10:36.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:10:36.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:10:36.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:10:36.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:10:36.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:10:36.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:10:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:10:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.757051 -999.00  +12.20   4.59     93  +11.20 1 3 1 3 1     0    0 -0.48 -58.22 Z...W 4.6 4.6 224.3 7.7 14.2 -4.0 14.1 -3.7 13.8 -3.9 14.1 -5.0
2026-04-12T20:10:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:10:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:10:36.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.757051
2026-04-12T20:10:36.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:09:57', tmtdew=0.515255, humidity=96.4905, cloud=0.0, wind=9.10548, temperature=12.0054, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:10:09.206', atlas_cloud=3, atlas_rain=1, zp_data=[2.9312499999999995, nan, 2.94925, nan, 2.4414999999999996, 2.385250000000001, nan, nan, nan, nan, 2.9042499999999993, nan, 2.625, 2.1842499999999987, nan, nan, nan, nan, nan, nan, nan, 2.0817499999999987, nan, nan, nan, nan, nan, nan, nan, 2.302500000000001, nan, nan, nan], zp_timestamp='2026-04-12T18:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:10:36.963 [DEBUG] [Thread-195138] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:10:37.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:10:37.059 [DEBUG] [Thread-195141] [transport.py] [_log()] starting thread (client mode): 0xb0f6f460
2026-04-12T20:10:37.059 [DEBUG] [Thread-195141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:10:37.074 [DEBUG] [Thread-195141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:10:37.074 [INFO] [Thread-195141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:10:37.081 [DEBUG] [Thread-195141] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] client lang: <none>
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] server lang: <none>
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] kex follows: False
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] Compression: none
2026-04-12T20:10:37.082 [DEBUG] [Thread-195141] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:10:37.145 [DEBUG] [Thread-195141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:10:37.146 [DEBUG] [Thread-195141] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:10:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:10:37.147 [DEBUG] [Thread-195141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:10:37.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:10:37.204 [DEBUG] [Thread-195141] [transport.py] [_log()] userauth is OK
2026-04-12T20:10:37.204 [DEBUG] [Thread-195141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:10:37.205 [DEBUG] [Thread-195141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:10:37.205 [DEBUG] [Thread-195141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:10:37.205 [DEBUG] [Thread-195141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:10:37.223 [INFO] [Thread-195141] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:10:37.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:10:37.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:10:38.042 [DEBUG] [Thread-195141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:10:38.042 [DEBUG] [Thread-195141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:10:38.091 [DEBUG] [Thread-195141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:10:38.091 [DEBUG] [Thread-195141] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:10:38.100 [DEBUG] [Thread-195141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:10:38.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:10:38.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:10:38.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:10:38.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:10:38.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:10:38.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:10:38.133 [DEBUG] [Thread-195141] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:10:41.374 [DEBUG] [Thread-195143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:10:56.437 [DEBUG] [Thread-195144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:11:04.655 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:11:04.656 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:11:06.816 [DEBUG] [Thread-195145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:11:08.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:11:08.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:11:08.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:11:09.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 10, 33), 0.92475, 94.0142, 0.0, 9.38808, 12.3445, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:11:09.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:10:33
2026-04-12T20:11:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:11:10.125 [DEBUG] [Thread-195146] [transport.py] [_log()] starting thread (client mode): 0xae51aaa0
2026-04-12T20:11:10.125 [DEBUG] [Thread-195146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:11:10.151 [DEBUG] [Thread-195146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:11:10.152 [INFO] [Thread-195146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:11:10.153 [DEBUG] [Thread-195146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:11:10.153 [DEBUG] [Thread-195146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:11:10.153 [DEBUG] [Thread-195146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:11:10.153 [DEBUG] [Thread-195146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:10.153 [DEBUG] [Thread-195146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:10.153 [DEBUG] [Thread-195146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:10.153 [DEBUG] [Thread-195146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] client lang: <none>
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] server lang: <none>
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] kex follows: False
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] Compression: none
2026-04-12T20:11:10.154 [DEBUG] [Thread-195146] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:11:10.168 [DEBUG] [Thread-195146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:11:10.169 [DEBUG] [Thread-195146] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:11:10.169 [DEBUG] [Thread-195146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:11:10.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:11:10.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:11:10.171 [DEBUG] [Thread-195146] [transport.py] [_log()] userauth is OK
2026-04-12T20:11:10.171 [DEBUG] [Thread-195146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:11:10.171 [DEBUG] [Thread-195146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:11:10.171 [DEBUG] [Thread-195146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:11:10.171 [DEBUG] [Thread-195146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:11:10.187 [INFO] [Thread-195146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:11:10.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:11:11.004 [DEBUG] [Thread-195146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:11:11.004 [DEBUG] [Thread-195146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:11:11.005 [DEBUG] [Thread-195146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:11:11.045 [DEBUG] [Thread-195146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:11:11.046 [DEBUG] [Thread-195146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:11:11.049 [DEBUG] [Thread-195146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:11:11.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:11:11.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:11:11.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:11:11.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:11:11.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:11:11.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:11:11.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:11:11.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:11:11.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:11:11.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.757399 -999.00  +12.20   6.57     93  +11.20 1 3 1 3 1     0    0 -0.46 -57.70 Z...W 6.6 6.6 204.0 9.7 14.2 -4.5 14.1 -4.4 13.9 -4.0 14.2 -4.0
2026-04-12T20:11:11.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:11:11.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:11:11.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.757399
2026-04-12T20:11:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:11:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:11:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:11:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:11:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:11:11.083 [DEBUG] [Thread-195146] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:11:11.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:10:33', tmtdew=0.92475, humidity=94.0142, cloud=0.0, wind=9.38808, temperature=12.3445, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:10:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:11:11.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:11:11.179 [DEBUG] [Thread-195149] [transport.py] [_log()] starting thread (client mode): 0xae5a45e0
2026-04-12T20:11:11.179 [DEBUG] [Thread-195149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:11:11.192 [DEBUG] [Thread-195149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:11:11.193 [INFO] [Thread-195149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:11:11.200 [DEBUG] [Thread-195149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:11:11.200 [DEBUG] [Thread-195149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] client lang: <none>
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] server lang: <none>
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] kex follows: False
2026-04-12T20:11:11.201 [DEBUG] [Thread-195149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:11:11.202 [DEBUG] [Thread-195149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:11:11.202 [DEBUG] [Thread-195149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:11:11.202 [DEBUG] [Thread-195149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:11:11.202 [DEBUG] [Thread-195149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:11:11.202 [DEBUG] [Thread-195149] [transport.py] [_log()] Compression: none
2026-04-12T20:11:11.202 [DEBUG] [Thread-195149] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:11:11.266 [DEBUG] [Thread-195149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:11:11.266 [DEBUG] [Thread-195149] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:11:11.267 [DEBUG] [Thread-195149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:11:11.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:11:11.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:11:11.323 [DEBUG] [Thread-195149] [transport.py] [_log()] userauth is OK
2026-04-12T20:11:11.324 [DEBUG] [Thread-195149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:11:11.324 [DEBUG] [Thread-195149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:11:11.324 [DEBUG] [Thread-195149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:11:11.324 [DEBUG] [Thread-195149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:11:11.345 [INFO] [Thread-195149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:11:11.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:11:11.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:11:11.482 [DEBUG] [Thread-195151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:11:12.169 [DEBUG] [Thread-195149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:11:12.169 [DEBUG] [Thread-195149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:11:12.217 [DEBUG] [Thread-195149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:11:12.217 [DEBUG] [Thread-195149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:11:12.226 [DEBUG] [Thread-195149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:11:12.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:11:12.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:11:12.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:11:12.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:11:12.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:11:12.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:11:12.261 [DEBUG] [Thread-195149] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:11:26.529 [DEBUG] [Thread-195152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:11:41.562 [DEBUG] [Thread-195153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:11:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:11:42.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:11:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:11:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 11, 9), 0.499575, 96.59, 0.0, 9.14076, 12.0552, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:11:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:11:09
2026-04-12T20:11:43.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:11:44.073 [DEBUG] [Thread-195154] [transport.py] [_log()] starting thread (client mode): 0xae5f2d10
2026-04-12T20:11:44.074 [DEBUG] [Thread-195154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:11:44.093 [DEBUG] [Thread-195154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:11:44.093 [INFO] [Thread-195154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] client lang: <none>
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] server lang: <none>
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] kex follows: False
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] Compression: none
2026-04-12T20:11:44.097 [DEBUG] [Thread-195154] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:11:44.106 [DEBUG] [Thread-195154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:11:44.106 [DEBUG] [Thread-195154] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:11:44.107 [DEBUG] [Thread-195154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:11:44.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:11:44.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:11:44.108 [DEBUG] [Thread-195154] [transport.py] [_log()] userauth is OK
2026-04-12T20:11:44.109 [DEBUG] [Thread-195154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:11:44.109 [DEBUG] [Thread-195154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:11:44.109 [DEBUG] [Thread-195154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:11:44.109 [DEBUG] [Thread-195154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:11:44.127 [INFO] [Thread-195154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:11:44.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:11:44.890 [DEBUG] [Thread-195154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:11:44.890 [DEBUG] [Thread-195154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:11:44.890 [DEBUG] [Thread-195154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:11:44.931 [DEBUG] [Thread-195154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:11:44.931 [DEBUG] [Thread-195154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:11:44.934 [DEBUG] [Thread-195154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:11:44.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:11:44.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:11:44.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:11:44.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:11:44.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:11:44.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:11:44.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:11:44.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.757746 -999.00  +12.20   7.00     93  +11.20 1 3 1 3 1     0    0 -0.43 -56.01 ----- 7.0 7.0 201.8 8.2 14.2 -5.8 14.1 -6.6 13.9 -5.2 14.2 -4.9
2026-04-12T20:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.757746
2026-04-12T20:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:11:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:11:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:11:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:11:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:11:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:11:09', tmtdew=0.499575, humidity=96.59, cloud=0.0, wind=9.14076, temperature=12.0552, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:11:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:11:44.962 [DEBUG] [Thread-195154] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:11:45.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:11:45.055 [DEBUG] [Thread-195157] [transport.py] [_log()] starting thread (client mode): 0xae5f0ee0
2026-04-12T20:11:45.055 [DEBUG] [Thread-195157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:11:45.070 [DEBUG] [Thread-195157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:11:45.070 [INFO] [Thread-195157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:11:45.078 [DEBUG] [Thread-195157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:11:45.078 [DEBUG] [Thread-195157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:11:45.078 [DEBUG] [Thread-195157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:11:45.078 [DEBUG] [Thread-195157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:45.078 [DEBUG] [Thread-195157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:11:45.078 [DEBUG] [Thread-195157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:45.078 [DEBUG] [Thread-195157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] client lang: <none>
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] server lang: <none>
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] kex follows: False
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:11:45.079 [DEBUG] [Thread-195157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:11:45.080 [DEBUG] [Thread-195157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:11:45.080 [DEBUG] [Thread-195157] [transport.py] [_log()] Compression: none
2026-04-12T20:11:45.080 [DEBUG] [Thread-195157] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:11:45.137 [DEBUG] [Thread-195157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:11:45.137 [DEBUG] [Thread-195157] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:11:45.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:11:45.138 [DEBUG] [Thread-195157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:11:45.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:11:45.197 [DEBUG] [Thread-195157] [transport.py] [_log()] userauth is OK
2026-04-12T20:11:45.198 [DEBUG] [Thread-195157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:11:45.198 [DEBUG] [Thread-195157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:11:45.198 [DEBUG] [Thread-195157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:11:45.198 [DEBUG] [Thread-195157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:11:45.216 [INFO] [Thread-195157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:11:45.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:11:45.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:11:46.049 [DEBUG] [Thread-195157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:11:46.049 [DEBUG] [Thread-195157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:11:46.098 [DEBUG] [Thread-195157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:11:46.098 [DEBUG] [Thread-195157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:11:46.107 [DEBUG] [Thread-195157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:11:46.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:11:46.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:11:46.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:11:46.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:11:46.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:11:46.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:11:46.146 [DEBUG] [Thread-195157] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:11:56.599 [DEBUG] [Thread-195159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:12:04.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:12:04.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:12:06.891 [DEBUG] [Thread-195160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:12:11.651 [DEBUG] [Thread-195161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:12:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:12:16.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:12:16.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:12:17.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 11, 45), 0.8883, 94.2463, 0.0, 11.399, 12.4772, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:12:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:11:45
2026-04-12T20:12:17.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:12:17.981 [DEBUG] [Thread-195162] [transport.py] [_log()] starting thread (client mode): 0xae5e7100
2026-04-12T20:12:17.981 [DEBUG] [Thread-195162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:12:18.002 [DEBUG] [Thread-195162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:12:18.002 [INFO] [Thread-195162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:12:18.005 [DEBUG] [Thread-195162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] client lang: <none>
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] server lang: <none>
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] kex follows: False
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] Compression: none
2026-04-12T20:12:18.006 [DEBUG] [Thread-195162] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:12:18.025 [DEBUG] [Thread-195162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:12:18.025 [DEBUG] [Thread-195162] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:12:18.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:12:18.026 [DEBUG] [Thread-195162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:12:18.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:12:18.029 [DEBUG] [Thread-195162] [transport.py] [_log()] userauth is OK
2026-04-12T20:12:18.029 [DEBUG] [Thread-195162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:12:18.029 [DEBUG] [Thread-195162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:12:18.029 [DEBUG] [Thread-195162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:12:18.029 [DEBUG] [Thread-195162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:12:18.054 [INFO] [Thread-195162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:12:18.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:12:18.875 [DEBUG] [Thread-195162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:12:18.875 [DEBUG] [Thread-195162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:12:18.875 [DEBUG] [Thread-195162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:12:18.916 [DEBUG] [Thread-195162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:12:18.917 [DEBUG] [Thread-195162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:12:18.920 [DEBUG] [Thread-195162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:12:18.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:12:18.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:12:18.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:12:18.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:12:18.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:12:18.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:12:18.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:12:18.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:12:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:12:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.758093 -999.00  +12.20   4.04     93  +11.20 1 3 1 3 1     0    0 -0.16 -46.22 ----- 4.0 4.0 188.2 6.3 14.3 -9.2 14.1 -8.6 13.9 -8.1 14.2 -7.6
2026-04-12T20:12:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:12:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:12:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.758093
2026-04-12T20:12:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:12:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:12:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:12:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:12:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:12:18.953 [DEBUG] [Thread-195162] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:12:18.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:11:45', tmtdew=0.8883, humidity=94.2463, cloud=0.0, wind=11.399, temperature=12.4772, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:11:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:12:19.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:12:19.050 [DEBUG] [Thread-195165] [transport.py] [_log()] starting thread (client mode): 0xae5e4a00
2026-04-12T20:12:19.050 [DEBUG] [Thread-195165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:12:19.064 [DEBUG] [Thread-195165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:12:19.064 [INFO] [Thread-195165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:12:19.072 [DEBUG] [Thread-195165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] client lang: <none>
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] server lang: <none>
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] kex follows: False
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] Compression: none
2026-04-12T20:12:19.073 [DEBUG] [Thread-195165] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:12:19.132 [DEBUG] [Thread-195165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:12:19.132 [DEBUG] [Thread-195165] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:12:19.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:12:19.133 [DEBUG] [Thread-195165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:12:19.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:12:19.188 [DEBUG] [Thread-195165] [transport.py] [_log()] userauth is OK
2026-04-12T20:12:19.189 [DEBUG] [Thread-195165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:12:19.189 [DEBUG] [Thread-195165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:12:19.189 [DEBUG] [Thread-195165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:12:19.189 [DEBUG] [Thread-195165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:12:19.207 [INFO] [Thread-195165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:12:19.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:12:19.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:12:20.038 [DEBUG] [Thread-195165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:12:20.038 [DEBUG] [Thread-195165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:12:20.086 [DEBUG] [Thread-195165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:12:20.086 [DEBUG] [Thread-195165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:12:20.095 [DEBUG] [Thread-195165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:12:20.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:12:20.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:12:20.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:12:20.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:12:20.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:12:20.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:12:20.137 [DEBUG] [Thread-195165] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:12:26.690 [DEBUG] [Thread-195167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:12:41.751 [DEBUG] [Thread-195168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:12:50.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:12:50.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:12:50.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:12:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 12, 20), 0.494045, 96.6232, 0.0, 8.50572, 12.072, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:12:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:12:20
2026-04-12T20:12:51.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:12:52.010 [DEBUG] [Thread-195169] [transport.py] [_log()] starting thread (client mode): 0xae5e6fb0
2026-04-12T20:12:52.010 [DEBUG] [Thread-195169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:12:52.031 [DEBUG] [Thread-195169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:12:52.031 [INFO] [Thread-195169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] client lang: <none>
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] server lang: <none>
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] kex follows: False
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:12:52.034 [DEBUG] [Thread-195169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:12:52.035 [DEBUG] [Thread-195169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:12:52.035 [DEBUG] [Thread-195169] [transport.py] [_log()] Compression: none
2026-04-12T20:12:52.035 [DEBUG] [Thread-195169] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:12:52.053 [DEBUG] [Thread-195169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:12:52.053 [DEBUG] [Thread-195169] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:12:52.054 [DEBUG] [Thread-195169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:12:52.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:12:52.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:12:52.054 [DEBUG] [Thread-195169] [transport.py] [_log()] userauth is OK
2026-04-12T20:12:52.054 [DEBUG] [Thread-195169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:12:52.054 [DEBUG] [Thread-195169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:12:52.055 [DEBUG] [Thread-195169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:12:52.055 [DEBUG] [Thread-195169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:12:52.070 [INFO] [Thread-195169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:12:52.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:12:52.801 [DEBUG] [Thread-195169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:12:52.801 [DEBUG] [Thread-195169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:12:52.802 [DEBUG] [Thread-195169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:12:52.842 [DEBUG] [Thread-195169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:12:52.842 [DEBUG] [Thread-195169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:12:52.846 [DEBUG] [Thread-195169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:12:52.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:12:52.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:12:52.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:12:52.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:12:52.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:12:52.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:12:52.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:12:52.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:12:52.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:12:52.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.758440 -999.00  +12.30   6.68     93  +11.30 1 3 1 3 1     0    0 -0.05 -41.74 ----- 6.7 6.7 197.7 9.3 14.3 -7.2 14.1 -6.5 13.9 -6.3 14.2 -8.1
2026-04-12T20:12:52.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:12:52.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:12:52.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.758440
2026-04-12T20:12:52.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:12:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:12:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:12:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:12:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:12:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:12:20', tmtdew=0.494045, humidity=96.6232, cloud=0.0, wind=8.50572, temperature=12.072, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:12:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:12:52.873 [DEBUG] [Thread-195169] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:12:52.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:12:52.973 [DEBUG] [Thread-195172] [transport.py] [_log()] starting thread (client mode): 0xb0f6d5a0
2026-04-12T20:12:52.973 [DEBUG] [Thread-195172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:12:52.988 [DEBUG] [Thread-195172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:12:52.988 [INFO] [Thread-195172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:12:52.995 [DEBUG] [Thread-195172] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:12:52.995 [DEBUG] [Thread-195172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] client lang: <none>
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] server lang: <none>
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] kex follows: False
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:12:52.996 [DEBUG] [Thread-195172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:12:52.997 [DEBUG] [Thread-195172] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:12:52.997 [DEBUG] [Thread-195172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:12:52.997 [DEBUG] [Thread-195172] [transport.py] [_log()] Compression: none
2026-04-12T20:12:52.997 [DEBUG] [Thread-195172] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:12:53.059 [DEBUG] [Thread-195172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:12:53.060 [DEBUG] [Thread-195172] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:12:53.061 [DEBUG] [Thread-195172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:12:53.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:12:53.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:12:53.116 [DEBUG] [Thread-195172] [transport.py] [_log()] userauth is OK
2026-04-12T20:12:53.116 [DEBUG] [Thread-195172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:12:53.116 [DEBUG] [Thread-195172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:12:53.116 [DEBUG] [Thread-195172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:12:53.116 [DEBUG] [Thread-195172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:12:53.135 [INFO] [Thread-195172] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:12:53.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:12:53.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:12:53.978 [DEBUG] [Thread-195172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:12:53.978 [DEBUG] [Thread-195172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:12:54.026 [DEBUG] [Thread-195172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:12:54.027 [DEBUG] [Thread-195172] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:12:54.036 [DEBUG] [Thread-195172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:12:54.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:12:54.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:12:54.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:12:54.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:12:54.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:12:54.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:12:54.074 [DEBUG] [Thread-195172] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:12:56.789 [DEBUG] [Thread-195174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:05.069 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:05.071 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:06.986 [DEBUG] [Thread-195175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:11.850 [DEBUG] [Thread-195176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:24.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:13:24.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:13:24.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:13:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 12, 56), 0.488625, 96.6563, 0.0, 8.39988, 12.0054, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:13:25.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:12:56
2026-04-12T20:13:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:13:26.117 [DEBUG] [Thread-195177] [transport.py] [_log()] starting thread (client mode): 0xae5e6dd0
2026-04-12T20:13:26.117 [DEBUG] [Thread-195177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:13:26.137 [DEBUG] [Thread-195177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:13:26.137 [INFO] [Thread-195177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] client lang: <none>
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] server lang: <none>
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] kex follows: False
2026-04-12T20:13:26.139 [DEBUG] [Thread-195177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:13:26.140 [DEBUG] [Thread-195177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:13:26.140 [DEBUG] [Thread-195177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:13:26.140 [DEBUG] [Thread-195177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:13:26.140 [DEBUG] [Thread-195177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:13:26.140 [DEBUG] [Thread-195177] [transport.py] [_log()] Compression: none
2026-04-12T20:13:26.140 [DEBUG] [Thread-195177] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:13:26.149 [DEBUG] [Thread-195177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:13:26.159 [DEBUG] [Thread-195177] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:13:26.160 [DEBUG] [Thread-195177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:13:26.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:13:26.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:13:26.161 [DEBUG] [Thread-195177] [transport.py] [_log()] userauth is OK
2026-04-12T20:13:26.161 [DEBUG] [Thread-195177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:13:26.161 [DEBUG] [Thread-195177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:13:26.161 [DEBUG] [Thread-195177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:13:26.161 [DEBUG] [Thread-195177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:13:26.181 [INFO] [Thread-195177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:13:26.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:13:26.883 [DEBUG] [Thread-195179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:26.951 [DEBUG] [Thread-195177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:13:26.952 [DEBUG] [Thread-195177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:13:26.952 [DEBUG] [Thread-195177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:13:26.993 [DEBUG] [Thread-195177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:13:26.993 [DEBUG] [Thread-195177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:13:26.997 [DEBUG] [Thread-195177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:13:27.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:13:27.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:13:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:13:27.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:13:27.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:13:27.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:13:27.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:13:27.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:13:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:13:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.758788 -999.00  +12.20   6.44     93  +11.20 1 3 1 3 1     0    0 0.04 -37.11 zn..w 6.4 6.4 199.4 8.8 14.3 -5.8 14.1 -6.3 13.8 -5.3 14.2 -6.6
2026-04-12T20:13:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:13:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:13:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.758788
2026-04-12T20:13:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:13:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:13:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:13:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:13:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:13:27.029 [DEBUG] [Thread-195177] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:13:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:12:56', tmtdew=0.488625, humidity=96.6563, cloud=0.0, wind=8.39988, temperature=12.0054, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:12:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:13:27.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:13:27.123 [DEBUG] [Thread-195181] [transport.py] [_log()] starting thread (client mode): 0xb0f40760
2026-04-12T20:13:27.123 [DEBUG] [Thread-195181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:13:27.138 [DEBUG] [Thread-195181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:13:27.138 [INFO] [Thread-195181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] client lang: <none>
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] server lang: <none>
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] kex follows: False
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:13:27.146 [DEBUG] [Thread-195181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:13:27.147 [DEBUG] [Thread-195181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:13:27.147 [DEBUG] [Thread-195181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:13:27.147 [DEBUG] [Thread-195181] [transport.py] [_log()] Compression: none
2026-04-12T20:13:27.147 [DEBUG] [Thread-195181] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:13:27.204 [DEBUG] [Thread-195181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:13:27.205 [DEBUG] [Thread-195181] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:13:27.205 [DEBUG] [Thread-195181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:13:27.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:13:27.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:13:27.260 [DEBUG] [Thread-195181] [transport.py] [_log()] userauth is OK
2026-04-12T20:13:27.261 [DEBUG] [Thread-195181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:13:27.261 [DEBUG] [Thread-195181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:13:27.261 [DEBUG] [Thread-195181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:13:27.261 [DEBUG] [Thread-195181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:13:27.280 [INFO] [Thread-195181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:13:27.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:13:27.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:13:28.112 [DEBUG] [Thread-195181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:13:28.112 [DEBUG] [Thread-195181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:13:28.160 [DEBUG] [Thread-195181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:13:28.160 [DEBUG] [Thread-195181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:13:28.169 [DEBUG] [Thread-195181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:13:28.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:13:28.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:13:28.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:13:28.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:13:28.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:13:28.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:13:28.202 [DEBUG] [Thread-195181] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:13:41.918 [DEBUG] [Thread-195183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:56.972 [DEBUG] [Thread-195184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:13:58.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:13:58.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:13:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:13:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 13, 31), 0.48075, 96.7061, 0.0, 9.2466, 12.022, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:13:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:13:31
2026-04-12T20:13:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:14:00.026 [DEBUG] [Thread-195185] [transport.py] [_log()] starting thread (client mode): 0xb0f400d0
2026-04-12T20:14:00.026 [DEBUG] [Thread-195185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:14:00.045 [DEBUG] [Thread-195185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:14:00.045 [INFO] [Thread-195185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] client lang: <none>
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] server lang: <none>
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] kex follows: False
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:14:00.049 [DEBUG] [Thread-195185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:14:00.050 [DEBUG] [Thread-195185] [transport.py] [_log()] Compression: none
2026-04-12T20:14:00.050 [DEBUG] [Thread-195185] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:14:00.065 [DEBUG] [Thread-195185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:14:00.066 [DEBUG] [Thread-195185] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:14:00.066 [DEBUG] [Thread-195185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:14:00.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:14:00.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:14:00.068 [DEBUG] [Thread-195185] [transport.py] [_log()] userauth is OK
2026-04-12T20:14:00.068 [DEBUG] [Thread-195185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:14:00.068 [DEBUG] [Thread-195185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:14:00.068 [DEBUG] [Thread-195185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:14:00.068 [DEBUG] [Thread-195185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:14:00.092 [INFO] [Thread-195185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:14:00.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:14:00.877 [DEBUG] [Thread-195185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:14:00.878 [DEBUG] [Thread-195185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:14:00.878 [DEBUG] [Thread-195185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:14:00.920 [DEBUG] [Thread-195185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:14:00.920 [DEBUG] [Thread-195185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:14:00.923 [DEBUG] [Thread-195185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:14:00.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:14:00.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:14:00.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:14:00.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:14:00.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:14:00.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:14:00.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:14:00.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:14:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.759135 -999.00  +12.20   6.66     93  +11.10 1 3 1 3 1     0    0 0.31 -29.09 ----- 6.7 6.7 201.6 8.9 14.2 -11.4 14.0 -13.2 13.9 -9.3 14.2 -7.4
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.759135
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:14:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:13:31', tmtdew=0.48075, humidity=96.7061, cloud=0.0, wind=9.2466, temperature=12.022, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:13:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:14:00.947 [DEBUG] [Thread-195185] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:14:01.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:14:01.037 [DEBUG] [Thread-195188] [transport.py] [_log()] starting thread (client mode): 0xb0f6f580
2026-04-12T20:14:01.037 [DEBUG] [Thread-195188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:14:01.051 [DEBUG] [Thread-195188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:14:01.051 [INFO] [Thread-195188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:01.059 [DEBUG] [Thread-195188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] client lang: <none>
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] server lang: <none>
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] kex follows: False
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:14:01.060 [DEBUG] [Thread-195188] [transport.py] [_log()] Compression: none
2026-04-12T20:14:01.061 [DEBUG] [Thread-195188] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:14:01.115 [DEBUG] [Thread-195188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:14:01.116 [DEBUG] [Thread-195188] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:14:01.116 [DEBUG] [Thread-195188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:14:01.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:14:01.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:14:01.172 [DEBUG] [Thread-195188] [transport.py] [_log()] userauth is OK
2026-04-12T20:14:01.173 [DEBUG] [Thread-195188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:14:01.173 [DEBUG] [Thread-195188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:14:01.173 [DEBUG] [Thread-195188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:14:01.173 [DEBUG] [Thread-195188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:14:01.191 [INFO] [Thread-195188] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:14:01.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:14:01.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:14:02.022 [DEBUG] [Thread-195188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:14:02.022 [DEBUG] [Thread-195188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:14:02.070 [DEBUG] [Thread-195188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:14:02.070 [DEBUG] [Thread-195188] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:14:02.080 [DEBUG] [Thread-195188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:14:02.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:14:02.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:14:02.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:14:02.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:14:02.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:14:02.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:14:02.117 [DEBUG] [Thread-195188] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:14:05.274 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:14:05.276 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:14:07.055 [DEBUG] [Thread-195190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:14:12.010 [DEBUG] [Thread-195191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:14:27.074 [DEBUG] [Thread-195192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:14:32.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:14:32.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:14:32.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:14:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 14, 7), 0.485865, 96.6729, 0.0, 7.55316, 11.9888, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:14:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:14:07
2026-04-12T20:14:33.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:14:34.004 [DEBUG] [Thread-195193] [transport.py] [_log()] starting thread (client mode): 0xae519f00
2026-04-12T20:14:34.005 [DEBUG] [Thread-195193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:14:34.024 [DEBUG] [Thread-195193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:14:34.024 [INFO] [Thread-195193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:14:34.028 [DEBUG] [Thread-195193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] client lang: <none>
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] server lang: <none>
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] kex follows: False
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] Compression: none
2026-04-12T20:14:34.029 [DEBUG] [Thread-195193] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:14:34.047 [DEBUG] [Thread-195193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:14:34.047 [DEBUG] [Thread-195193] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:14:34.048 [DEBUG] [Thread-195193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:14:34.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:14:34.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:14:34.050 [DEBUG] [Thread-195193] [transport.py] [_log()] userauth is OK
2026-04-12T20:14:34.050 [DEBUG] [Thread-195193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:14:34.050 [DEBUG] [Thread-195193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:14:34.050 [DEBUG] [Thread-195193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:14:34.050 [DEBUG] [Thread-195193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:14:34.085 [INFO] [Thread-195193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:14:34.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:14:34.880 [DEBUG] [Thread-195193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:14:34.881 [DEBUG] [Thread-195193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:14:34.881 [DEBUG] [Thread-195193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:14:34.922 [DEBUG] [Thread-195193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:14:34.922 [DEBUG] [Thread-195193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:14:34.926 [DEBUG] [Thread-195193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:14:34.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:14:34.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:14:34.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:14:34.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:14:34.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:14:34.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:14:34.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:14:34.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:14:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:14:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.759829 -999.00  +12.10   4.28     93  +11.10 1 2 1 3 1     0    0 0.40 -25.09 Z.eS. 4.3 4.3 198.1 9.7 14.2 -12.3 14.0 -11.0 13.8 -11.2 14.2 -12.4
2026-04-12T20:14:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:14:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:14:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.759829
2026-04-12T20:14:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:14:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:14:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:14:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:14:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:14:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:14:07', tmtdew=0.485865, humidity=96.6729, cloud=0.0, wind=7.55316, temperature=11.9888, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:14:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:14:34.956 [DEBUG] [Thread-195193] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:14:35.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:14:35.052 [DEBUG] [Thread-195196] [transport.py] [_log()] starting thread (client mode): 0xb0f6dcc0
2026-04-12T20:14:35.052 [DEBUG] [Thread-195196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:14:35.071 [DEBUG] [Thread-195196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:14:35.071 [INFO] [Thread-195196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:14:35.080 [DEBUG] [Thread-195196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:14:35.080 [DEBUG] [Thread-195196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:14:35.080 [DEBUG] [Thread-195196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:14:35.080 [DEBUG] [Thread-195196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:35.080 [DEBUG] [Thread-195196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:14:35.080 [DEBUG] [Thread-195196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] client lang: <none>
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] server lang: <none>
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] kex follows: False
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] Compression: none
2026-04-12T20:14:35.081 [DEBUG] [Thread-195196] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:14:35.138 [DEBUG] [Thread-195196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:14:35.138 [DEBUG] [Thread-195196] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:14:35.138 [DEBUG] [Thread-195196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:14:35.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:14:35.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:14:35.200 [DEBUG] [Thread-195196] [transport.py] [_log()] userauth is OK
2026-04-12T20:14:35.200 [DEBUG] [Thread-195196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:14:35.200 [DEBUG] [Thread-195196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:14:35.200 [DEBUG] [Thread-195196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:14:35.201 [DEBUG] [Thread-195196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:14:35.218 [INFO] [Thread-195196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:14:35.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:14:35.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:14:36.070 [DEBUG] [Thread-195196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:14:36.070 [DEBUG] [Thread-195196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:14:36.118 [DEBUG] [Thread-195196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:14:36.118 [DEBUG] [Thread-195196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:14:36.128 [DEBUG] [Thread-195196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:14:36.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:14:36.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:14:36.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:14:36.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:14:36.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:14:36.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:14:36.164 [DEBUG] [Thread-195196] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:14:42.111 [DEBUG] [Thread-195198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:14:57.170 [DEBUG] [Thread-195199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:15:05.483 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:15:05.484 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:15:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:15:06.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:15:06.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:15:07.121 [DEBUG] [Thread-195200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:15:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 14, 42), 0.8556, 94.4453, 0.0, 10.0231, 12.3445, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:15:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:14:42
2026-04-12T20:15:07.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:15:08.077 [DEBUG] [Thread-195201] [transport.py] [_log()] starting thread (client mode): 0xae5f0ee0
2026-04-12T20:15:08.077 [DEBUG] [Thread-195201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:15:08.097 [DEBUG] [Thread-195201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:15:08.097 [INFO] [Thread-195201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] client lang: <none>
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] server lang: <none>
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] kex follows: False
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:15:08.100 [DEBUG] [Thread-195201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:15:08.101 [DEBUG] [Thread-195201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:15:08.101 [DEBUG] [Thread-195201] [transport.py] [_log()] Compression: none
2026-04-12T20:15:08.101 [DEBUG] [Thread-195201] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:15:08.115 [DEBUG] [Thread-195201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:15:08.116 [DEBUG] [Thread-195201] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:15:08.116 [DEBUG] [Thread-195201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:15:08.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:15:08.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:15:08.118 [DEBUG] [Thread-195201] [transport.py] [_log()] userauth is OK
2026-04-12T20:15:08.118 [DEBUG] [Thread-195201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:15:08.118 [DEBUG] [Thread-195201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:15:08.119 [DEBUG] [Thread-195201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:15:08.119 [DEBUG] [Thread-195201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:15:08.142 [INFO] [Thread-195201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:15:08.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:15:09.203 [DEBUG] [Thread-195201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:15:09.203 [DEBUG] [Thread-195201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:15:09.204 [DEBUG] [Thread-195201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:15:09.244 [DEBUG] [Thread-195201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:15:09.244 [DEBUG] [Thread-195201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:15:09.247 [DEBUG] [Thread-195201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:15:09.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:15:09.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:15:09.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:15:09.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:15:09.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:15:09.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:15:09.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:15:09.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:15:09.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:15:09.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.760176 -999.00  +12.10   4.63     93  +11.10 1 3 1 3 1     0    0 0.46 -22.90 Z.eS. 4.6 4.6 199.1 8.3 14.2 -9.0 14.0 -7.0 13.8 -9.2 14.2 -11.6
2026-04-12T20:15:09.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:15:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:15:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.760176
2026-04-12T20:15:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:15:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:15:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:15:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:15:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:15:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:14:42', tmtdew=0.8556, humidity=94.4453, cloud=0.0, wind=10.0231, temperature=12.3445, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:14:39.206', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:15:09.273 [DEBUG] [Thread-195201] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:15:09.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:15:09.377 [DEBUG] [Thread-195204] [transport.py] [_log()] starting thread (client mode): 0xae52d7e0
2026-04-12T20:15:09.377 [DEBUG] [Thread-195204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:15:09.392 [DEBUG] [Thread-195204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:15:09.392 [INFO] [Thread-195204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:15:09.399 [DEBUG] [Thread-195204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:15:09.399 [DEBUG] [Thread-195204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] client lang: <none>
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] server lang: <none>
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] kex follows: False
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] Compression: none
2026-04-12T20:15:09.400 [DEBUG] [Thread-195204] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:15:09.460 [DEBUG] [Thread-195204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:15:09.461 [DEBUG] [Thread-195204] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:15:09.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:15:09.462 [DEBUG] [Thread-195204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:15:09.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:15:09.517 [DEBUG] [Thread-195204] [transport.py] [_log()] userauth is OK
2026-04-12T20:15:09.517 [DEBUG] [Thread-195204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:15:09.517 [DEBUG] [Thread-195204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:15:09.517 [DEBUG] [Thread-195204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:15:09.518 [DEBUG] [Thread-195204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:15:09.538 [INFO] [Thread-195204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:15:09.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:15:09.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:15:10.353 [DEBUG] [Thread-195204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:15:10.354 [DEBUG] [Thread-195204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:15:10.401 [DEBUG] [Thread-195204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:15:10.401 [DEBUG] [Thread-195204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:15:10.411 [DEBUG] [Thread-195204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:15:10.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:15:10.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:15:10.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:15:10.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:15:10.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:15:10.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:15:10.449 [DEBUG] [Thread-195204] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:15:12.206 [DEBUG] [Thread-195206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:15:27.256 [DEBUG] [Thread-195207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:15:40.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:15:40.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:15:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:15:41.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 15, 17), 0.482915, 96.6895, 0.0, 8.02944, 11.9391, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:15:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:15:17
2026-04-12T20:15:42.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:15:42.293 [DEBUG] [Thread-195208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:15:42.363 [DEBUG] [Thread-195209] [transport.py] [_log()] starting thread (client mode): 0xae5f31f0
2026-04-12T20:15:42.363 [DEBUG] [Thread-195209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:15:42.384 [DEBUG] [Thread-195209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:15:42.384 [INFO] [Thread-195209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:15:42.387 [DEBUG] [Thread-195209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:15:42.387 [DEBUG] [Thread-195209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:15:42.387 [DEBUG] [Thread-195209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:15:42.387 [DEBUG] [Thread-195209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:42.387 [DEBUG] [Thread-195209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] client lang: <none>
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] server lang: <none>
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] kex follows: False
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] Compression: none
2026-04-12T20:15:42.388 [DEBUG] [Thread-195209] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:15:42.415 [DEBUG] [Thread-195209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:15:42.415 [DEBUG] [Thread-195209] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:15:42.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:15:42.416 [DEBUG] [Thread-195209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:15:42.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:15:42.419 [DEBUG] [Thread-195209] [transport.py] [_log()] userauth is OK
2026-04-12T20:15:42.419 [DEBUG] [Thread-195209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:15:42.419 [DEBUG] [Thread-195209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:15:42.419 [DEBUG] [Thread-195209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:15:42.419 [DEBUG] [Thread-195209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:15:42.443 [INFO] [Thread-195209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:15:42.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:15:43.233 [DEBUG] [Thread-195209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:15:43.234 [DEBUG] [Thread-195209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:15:43.234 [DEBUG] [Thread-195209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:15:43.275 [DEBUG] [Thread-195209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:15:43.275 [DEBUG] [Thread-195209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:15:43.277 [DEBUG] [Thread-195209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:15:43.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:15:43.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:15:43.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:15:43.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:15:43.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:15:43.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:15:43.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:15:43.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:15:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:15:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.760523 -999.00  +12.20   2.83     93  +11.10 1 3 1 3 1     0    0 0.48 -21.31 Z.eS. 2.8 2.8 200.6 9.0 14.2 -6.3 14.1 -5.9 13.8 -5.6 14.2 -6.8
2026-04-12T20:15:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:15:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:15:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.760523
2026-04-12T20:15:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:15:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:15:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:15:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:15:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:15:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:15:17', tmtdew=0.482915, humidity=96.6895, cloud=0.0, wind=8.02944, temperature=11.9391, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:15:09.187', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:15:43.297 [DEBUG] [Thread-195209] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:15:43.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:15:43.379 [DEBUG] [Thread-195212] [transport.py] [_log()] starting thread (client mode): 0xae5f2fe0
2026-04-12T20:15:43.379 [DEBUG] [Thread-195212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:15:43.394 [DEBUG] [Thread-195212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:15:43.394 [INFO] [Thread-195212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] client lang: <none>
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] server lang: <none>
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] kex follows: False
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:15:43.402 [DEBUG] [Thread-195212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:15:43.403 [DEBUG] [Thread-195212] [transport.py] [_log()] Compression: none
2026-04-12T20:15:43.403 [DEBUG] [Thread-195212] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:15:43.461 [DEBUG] [Thread-195212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:15:43.461 [DEBUG] [Thread-195212] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:15:43.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:15:43.462 [DEBUG] [Thread-195212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:15:43.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:15:43.520 [DEBUG] [Thread-195212] [transport.py] [_log()] userauth is OK
2026-04-12T20:15:43.520 [DEBUG] [Thread-195212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:15:43.520 [DEBUG] [Thread-195212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:15:43.521 [DEBUG] [Thread-195212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:15:43.521 [DEBUG] [Thread-195212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:15:43.545 [INFO] [Thread-195212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:15:43.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:15:43.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:15:44.380 [DEBUG] [Thread-195212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:15:44.390 [DEBUG] [Thread-195212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:15:44.428 [DEBUG] [Thread-195212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:15:44.428 [DEBUG] [Thread-195212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:15:44.437 [DEBUG] [Thread-195212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:15:44.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:15:44.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:15:44.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:15:44.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:15:44.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:15:44.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:15:44.474 [DEBUG] [Thread-195212] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:15:57.329 [DEBUG] [Thread-195214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:16:05.688 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:16:05.689 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:16:07.194 [DEBUG] [Thread-195215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:16:12.381 [DEBUG] [Thread-195216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:16:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:16:14.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:16:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:16:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 15, 53), 0.8395, 94.5448, 0.0, 9.67032, 12.3114, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:16:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:15:53
2026-04-12T20:16:16.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:16:16.312 [DEBUG] [Thread-195217] [transport.py] [_log()] starting thread (client mode): 0xae5a6590
2026-04-12T20:16:16.312 [DEBUG] [Thread-195217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:16:16.335 [DEBUG] [Thread-195217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:16:16.335 [INFO] [Thread-195217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] client lang: <none>
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] server lang: <none>
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] kex follows: False
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] Compression: none
2026-04-12T20:16:16.338 [DEBUG] [Thread-195217] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:16:16.354 [DEBUG] [Thread-195217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:16:16.354 [DEBUG] [Thread-195217] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:16:16.354 [DEBUG] [Thread-195217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:16:16.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:16:16.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:16:16.355 [DEBUG] [Thread-195217] [transport.py] [_log()] userauth is OK
2026-04-12T20:16:16.355 [DEBUG] [Thread-195217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:16:16.355 [DEBUG] [Thread-195217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:16:16.355 [DEBUG] [Thread-195217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:16:16.356 [DEBUG] [Thread-195217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:16:16.369 [INFO] [Thread-195217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:16:16.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:16:17.186 [DEBUG] [Thread-195217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:16:17.187 [DEBUG] [Thread-195217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:16:17.188 [DEBUG] [Thread-195217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:16:17.228 [DEBUG] [Thread-195217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:16:17.228 [DEBUG] [Thread-195217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:16:17.232 [DEBUG] [Thread-195217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:16:17.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:16:17.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:16:17.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:16:17.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:16:17.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:16:17.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:16:17.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:16:17.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:16:17.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:16:17.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.760871 -999.00  +12.10   4.00     93  +11.10 1 3 1 3 1     0    0 0.54 -19.10 ZNe.W 4.0 4.0 226.8 10.2 14.3 -7.9 14.1 -7.8 13.8 -7.4 14.2 -7.0
2026-04-12T20:16:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:16:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:16:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.760871
2026-04-12T20:16:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:16:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:16:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:16:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:16:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:16:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:15:53', tmtdew=0.8395, humidity=94.5448, cloud=0.0, wind=9.67032, temperature=12.3114, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:15:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:16:17.261 [DEBUG] [Thread-195217] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:16:17.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:16:17.355 [DEBUG] [Thread-195220] [transport.py] [_log()] starting thread (client mode): 0xae52c460
2026-04-12T20:16:17.356 [DEBUG] [Thread-195220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:16:17.370 [DEBUG] [Thread-195220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:16:17.371 [INFO] [Thread-195220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:16:17.378 [DEBUG] [Thread-195220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:16:17.378 [DEBUG] [Thread-195220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:16:17.378 [DEBUG] [Thread-195220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] client lang: <none>
2026-04-12T20:16:17.379 [DEBUG] [Thread-195220] [transport.py] [_log()] server lang: <none>
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] kex follows: False
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] Compression: none
2026-04-12T20:16:17.380 [DEBUG] [Thread-195220] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:16:17.437 [DEBUG] [Thread-195220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:16:17.438 [DEBUG] [Thread-195220] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:16:17.438 [DEBUG] [Thread-195220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:16:17.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:16:17.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:16:17.500 [DEBUG] [Thread-195220] [transport.py] [_log()] userauth is OK
2026-04-12T20:16:17.501 [DEBUG] [Thread-195220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:16:17.501 [DEBUG] [Thread-195220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:16:17.501 [DEBUG] [Thread-195220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:16:17.501 [DEBUG] [Thread-195220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:16:17.520 [INFO] [Thread-195220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:16:17.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:16:17.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:16:18.344 [DEBUG] [Thread-195220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:16:18.345 [DEBUG] [Thread-195220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:16:18.393 [DEBUG] [Thread-195220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:16:18.394 [DEBUG] [Thread-195220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:16:18.403 [DEBUG] [Thread-195220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:16:18.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:16:18.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:16:18.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:16:18.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:16:18.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:16:18.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:16:18.440 [DEBUG] [Thread-195220] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:16:27.414 [DEBUG] [Thread-195222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:16:42.466 [DEBUG] [Thread-195223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:16:48.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:16:48.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:16:48.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:16:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 16, 28), 0.46691, 96.789, 0.0, 9.29952, 11.9225, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:16:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:16:28
2026-04-12T20:16:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:16:50.310 [DEBUG] [Thread-195224] [transport.py] [_log()] starting thread (client mode): 0xae5f18a0
2026-04-12T20:16:50.310 [DEBUG] [Thread-195224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:16:50.329 [DEBUG] [Thread-195224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:16:50.329 [INFO] [Thread-195224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] client lang: <none>
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] server lang: <none>
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] kex follows: False
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:16:50.332 [DEBUG] [Thread-195224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:16:50.333 [DEBUG] [Thread-195224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:16:50.333 [DEBUG] [Thread-195224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:16:50.333 [DEBUG] [Thread-195224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:16:50.333 [DEBUG] [Thread-195224] [transport.py] [_log()] Compression: none
2026-04-12T20:16:50.333 [DEBUG] [Thread-195224] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:16:50.349 [DEBUG] [Thread-195224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:16:50.350 [DEBUG] [Thread-195224] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:16:50.350 [DEBUG] [Thread-195224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:16:50.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:16:50.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:16:50.352 [DEBUG] [Thread-195224] [transport.py] [_log()] userauth is OK
2026-04-12T20:16:50.352 [DEBUG] [Thread-195224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:16:50.353 [DEBUG] [Thread-195224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:16:50.353 [DEBUG] [Thread-195224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:16:50.353 [DEBUG] [Thread-195224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:16:50.371 [INFO] [Thread-195224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:16:50.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:16:51.173 [DEBUG] [Thread-195224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:16:51.182 [DEBUG] [Thread-195224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:16:51.183 [DEBUG] [Thread-195224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:16:51.214 [DEBUG] [Thread-195224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:16:51.214 [DEBUG] [Thread-195224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:16:51.216 [DEBUG] [Thread-195224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:16:51.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:16:51.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:16:51.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:16:51.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:16:51.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:16:51.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:16:51.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:16:51.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.761218 -999.00  +12.20   5.77     93  +11.10 1 3 1 3 1     0    0 0.66 -15.18 ----- 5.8 5.8 221.4 7.6 14.3 -8.0 14.1 -8.9 13.8 -7.8 14.2 -8.4
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.761218
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:16:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:16:28', tmtdew=0.46691, humidity=96.789, cloud=0.0, wind=9.29952, temperature=11.9225, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:16:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[2.04725, nan, 2.3172500000000005, 2.1984999999999992, 1.7835, 1.4052500000000006, 1.505, 1.6602500000000004, 1.8244999999999996, 2.5015, 3.1362499999999995, nan, 1.9079999999999995, 1.4802499999999998, 1.479499999999999, 1.628499999999999, 1.7032499999999997, nan, nan, nan, 2.459999999999999, 1.6057499999999987, 1.6252500000000012, 1.7867500000000005, nan, nan, nan, nan, nan, 2.070000000000001, 1.9430000000000014, nan, nan], zp_timestamp='2026-04-12T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:16:51.236 [DEBUG] [Thread-195224] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:16:51.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:16:51.318 [DEBUG] [Thread-195227] [transport.py] [_log()] starting thread (client mode): 0xae5a6980
2026-04-12T20:16:51.318 [DEBUG] [Thread-195227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:16:51.333 [DEBUG] [Thread-195227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:16:51.333 [INFO] [Thread-195227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] client lang: <none>
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] server lang: <none>
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] kex follows: False
2026-04-12T20:16:51.340 [DEBUG] [Thread-195227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:16:51.341 [DEBUG] [Thread-195227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:16:51.341 [DEBUG] [Thread-195227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:16:51.341 [DEBUG] [Thread-195227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:16:51.341 [DEBUG] [Thread-195227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:16:51.341 [DEBUG] [Thread-195227] [transport.py] [_log()] Compression: none
2026-04-12T20:16:51.341 [DEBUG] [Thread-195227] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:16:51.409 [DEBUG] [Thread-195227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:16:51.409 [DEBUG] [Thread-195227] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:16:51.410 [DEBUG] [Thread-195227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:16:51.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:16:51.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:16:51.467 [DEBUG] [Thread-195227] [transport.py] [_log()] userauth is OK
2026-04-12T20:16:51.468 [DEBUG] [Thread-195227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:16:51.468 [DEBUG] [Thread-195227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:16:51.468 [DEBUG] [Thread-195227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:16:51.468 [DEBUG] [Thread-195227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:16:51.486 [INFO] [Thread-195227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:16:51.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:16:51.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:16:52.291 [DEBUG] [Thread-195227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:16:52.291 [DEBUG] [Thread-195227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:16:52.339 [DEBUG] [Thread-195227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:16:52.339 [DEBUG] [Thread-195227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:16:52.348 [DEBUG] [Thread-195227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:16:52.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:16:52.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:16:52.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:16:52.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:16:52.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:16:52.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:16:52.387 [DEBUG] [Thread-195227] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:16:57.502 [DEBUG] [Thread-195229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:05.896 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:05.897 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:07.274 [DEBUG] [Thread-195230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:12.553 [DEBUG] [Thread-195231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:17:22.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:17:22.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:17:23.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 17, 4), 0.469655, 96.7724, 0.0, 10.2168, 11.9391, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:17:23.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:17:04
2026-04-12T20:17:24.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:17:24.204 [DEBUG] [Thread-195232] [transport.py] [_log()] starting thread (client mode): 0xae5b3fa0
2026-04-12T20:17:24.204 [DEBUG] [Thread-195232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:17:24.223 [DEBUG] [Thread-195232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:17:24.223 [INFO] [Thread-195232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] client lang: <none>
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] server lang: <none>
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] kex follows: False
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] Compression: none
2026-04-12T20:17:24.227 [DEBUG] [Thread-195232] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:17:24.243 [DEBUG] [Thread-195232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:17:24.244 [DEBUG] [Thread-195232] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:17:24.244 [DEBUG] [Thread-195232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:17:24.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:17:24.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:17:24.245 [DEBUG] [Thread-195232] [transport.py] [_log()] userauth is OK
2026-04-12T20:17:24.245 [DEBUG] [Thread-195232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:17:24.245 [DEBUG] [Thread-195232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:17:24.246 [DEBUG] [Thread-195232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:17:24.246 [DEBUG] [Thread-195232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:17:24.269 [INFO] [Thread-195232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:17:24.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:17:25.058 [DEBUG] [Thread-195232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:17:25.058 [DEBUG] [Thread-195232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:17:25.059 [DEBUG] [Thread-195232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:17:25.099 [DEBUG] [Thread-195232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:17:25.099 [DEBUG] [Thread-195232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:17:25.102 [DEBUG] [Thread-195232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:17:25.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:17:25.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:17:25.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:17:25.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:17:25.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:17:25.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:17:25.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:17:25.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:17:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:17:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.761565 -999.00  +12.10   6.11     93  +11.10 1 2 1 3 1     0    0 0.69 -14.04 Z...W 6.1 6.1 192.2 7.8 14.2 -10.8 14.0 -10.3 13.8 -10.1 14.2 -11.0
2026-04-12T20:17:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:17:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:17:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.761565
2026-04-12T20:17:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:17:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:17:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:17:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:17:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:17:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:17:04', tmtdew=0.469655, humidity=96.7724, cloud=0.0, wind=10.2168, temperature=11.9391, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:16:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:17:25.128 [DEBUG] [Thread-195232] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:17:25.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:17:25.217 [DEBUG] [Thread-195235] [transport.py] [_log()] starting thread (client mode): 0xae5b2080
2026-04-12T20:17:25.217 [DEBUG] [Thread-195235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:17:25.231 [DEBUG] [Thread-195235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:17:25.231 [INFO] [Thread-195235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:17:25.239 [DEBUG] [Thread-195235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:17:25.239 [DEBUG] [Thread-195235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] client lang: <none>
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] server lang: <none>
2026-04-12T20:17:25.240 [DEBUG] [Thread-195235] [transport.py] [_log()] kex follows: False
2026-04-12T20:17:25.241 [DEBUG] [Thread-195235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:17:25.241 [DEBUG] [Thread-195235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:17:25.241 [DEBUG] [Thread-195235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:17:25.241 [DEBUG] [Thread-195235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:17:25.241 [DEBUG] [Thread-195235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:17:25.241 [DEBUG] [Thread-195235] [transport.py] [_log()] Compression: none
2026-04-12T20:17:25.241 [DEBUG] [Thread-195235] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:17:25.299 [DEBUG] [Thread-195235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:17:25.300 [DEBUG] [Thread-195235] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:17:25.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:17:25.301 [DEBUG] [Thread-195235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:17:25.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:17:25.363 [DEBUG] [Thread-195235] [transport.py] [_log()] userauth is OK
2026-04-12T20:17:25.363 [DEBUG] [Thread-195235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:17:25.364 [DEBUG] [Thread-195235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:17:25.364 [DEBUG] [Thread-195235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:17:25.364 [DEBUG] [Thread-195235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:17:25.383 [INFO] [Thread-195235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:17:25.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:17:25.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:17:26.255 [DEBUG] [Thread-195235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:17:26.255 [DEBUG] [Thread-195235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:17:26.303 [DEBUG] [Thread-195235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:17:26.304 [DEBUG] [Thread-195235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:17:26.313 [DEBUG] [Thread-195235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:17:26.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:17:26.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:17:26.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:17:26.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:17:26.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:17:26.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:17:26.350 [DEBUG] [Thread-195235] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:17:27.591 [DEBUG] [Thread-195237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:42.657 [DEBUG] [Thread-195238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:17:56.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:17: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
2026-04-12T20:17:57.691 [DEBUG] [Thread-195239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:17:57.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 17, 40), 0.83363, 94.578, 0.0, 11.011, 12.2119, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:17:57.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:17:40
2026-04-12T20:17:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:17:58.322 [DEBUG] [Thread-195240] [transport.py] [_log()] starting thread (client mode): 0xae50bfd0
2026-04-12T20:17:58.322 [DEBUG] [Thread-195240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:17:58.343 [DEBUG] [Thread-195240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:17:58.343 [INFO] [Thread-195240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] client lang: <none>
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] server lang: <none>
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] kex follows: False
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] Compression: none
2026-04-12T20:17:58.346 [DEBUG] [Thread-195240] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:17:58.375 [DEBUG] [Thread-195240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:17:58.376 [DEBUG] [Thread-195240] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:17:58.377 [DEBUG] [Thread-195240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:17:58.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:17:58.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:17:58.379 [DEBUG] [Thread-195240] [transport.py] [_log()] userauth is OK
2026-04-12T20:17:58.379 [DEBUG] [Thread-195240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:17:58.379 [DEBUG] [Thread-195240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:17:58.379 [DEBUG] [Thread-195240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:17:58.379 [DEBUG] [Thread-195240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:17:58.403 [INFO] [Thread-195240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:17:58.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:17:58.989 [DEBUG] [Thread-195240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:17:58.990 [DEBUG] [Thread-195240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:17:58.990 [DEBUG] [Thread-195240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:17:59.030 [DEBUG] [Thread-195240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:17:59.030 [DEBUG] [Thread-195240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:17:59.033 [DEBUG] [Thread-195240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:17:59.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:17:59.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:17:59.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:17:59.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:17:59.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:17:59.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:17:59.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:17:59.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:17:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:17:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.762260 -999.00  +12.10   6.40     93  +11.10 1 2 1 3 1     0    0 0.71 -12.46 Z...W 6.4 6.4 203.9 8.4 14.3 -10.7 14.0 -11.4 13.8 -9.2 14.2 -8.0
2026-04-12T20:17:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:17:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:17:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.762260
2026-04-12T20:17:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:17:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:17:59.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:17:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:17:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:17:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:17:40', tmtdew=0.83363, humidity=94.578, cloud=0.0, wind=11.011, temperature=12.2119, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:17:39.264', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:17:59.061 [DEBUG] [Thread-195240] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:17:59.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:17:59.169 [DEBUG] [Thread-195243] [transport.py] [_log()] starting thread (client mode): 0xae5f25f0
2026-04-12T20:17:59.169 [DEBUG] [Thread-195243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:17:59.186 [DEBUG] [Thread-195243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:17:59.187 [INFO] [Thread-195243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:17:59.199 [DEBUG] [Thread-195243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:17:59.199 [DEBUG] [Thread-195243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:17:59.199 [DEBUG] [Thread-195243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] client lang: <none>
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] server lang: <none>
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] kex follows: False
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:17:59.200 [DEBUG] [Thread-195243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:17:59.201 [DEBUG] [Thread-195243] [transport.py] [_log()] Compression: none
2026-04-12T20:17:59.201 [DEBUG] [Thread-195243] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:17:59.255 [DEBUG] [Thread-195243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:17:59.255 [DEBUG] [Thread-195243] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:17:59.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:17:59.257 [DEBUG] [Thread-195243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:17:59.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:17:59.314 [DEBUG] [Thread-195243] [transport.py] [_log()] userauth is OK
2026-04-12T20:17:59.314 [DEBUG] [Thread-195243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:17:59.314 [DEBUG] [Thread-195243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:17:59.314 [DEBUG] [Thread-195243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:17:59.315 [DEBUG] [Thread-195243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:17:59.339 [INFO] [Thread-195243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:17:59.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:17:59.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:18:00.160 [DEBUG] [Thread-195243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:18:00.160 [DEBUG] [Thread-195243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:18:00.208 [DEBUG] [Thread-195243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:18:00.208 [DEBUG] [Thread-195243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:18:00.222 [DEBUG] [Thread-195243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:18:00.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:18:00.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:18: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') -> 00000000
2026-04-12T20:18:00.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:18:00.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:18:00.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:18:00.261 [DEBUG] [Thread-195243] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:18:06.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:18:06.106 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:18:07.348 [DEBUG] [Thread-195245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:18:12.725 [DEBUG] [Thread-195246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:18:27.796 [DEBUG] [Thread-195247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:18:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:18:30.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:18:30.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:18:31.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 18, 15), 0.461705, 96.8221, 0.0, 11.3818, 11.9391, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:18:31.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:18:15
2026-04-12T20:18:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:18:32.179 [DEBUG] [Thread-195248] [transport.py] [_log()] starting thread (client mode): 0xae5f11e0
2026-04-12T20:18:32.179 [DEBUG] [Thread-195248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:18:32.194 [DEBUG] [Thread-195248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:18:32.195 [INFO] [Thread-195248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] client lang: <none>
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] server lang: <none>
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] kex follows: False
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:18:32.198 [DEBUG] [Thread-195248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:18:32.199 [DEBUG] [Thread-195248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:18:32.199 [DEBUG] [Thread-195248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:18:32.199 [DEBUG] [Thread-195248] [transport.py] [_log()] Compression: none
2026-04-12T20:18:32.199 [DEBUG] [Thread-195248] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:18:32.220 [DEBUG] [Thread-195248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:18:32.221 [DEBUG] [Thread-195248] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:18:32.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:18:32.223 [DEBUG] [Thread-195248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:18:32.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:18:32.225 [DEBUG] [Thread-195248] [transport.py] [_log()] userauth is OK
2026-04-12T20:18:32.226 [DEBUG] [Thread-195248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:18:32.226 [DEBUG] [Thread-195248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:18:32.226 [DEBUG] [Thread-195248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:18:32.226 [DEBUG] [Thread-195248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:18:32.262 [INFO] [Thread-195248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:18:32.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:18:32.911 [DEBUG] [Thread-195248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:18:32.911 [DEBUG] [Thread-195248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:18:32.911 [DEBUG] [Thread-195248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:18:32.952 [DEBUG] [Thread-195248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:18:32.952 [DEBUG] [Thread-195248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:18:32.956 [DEBUG] [Thread-195248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:18:32.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:18:32.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:18:32.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:18:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:18:32.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:18:32.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:18:32.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:18:32.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:18:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:18:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.762607 -999.00  +12.10   5.03     93  +11.10 1 2 1 3 1     0    0 0.72 -12.23 Z...W 5.0 5.0 227.1 9.3 14.2 -14.9 14.1 -14.0 13.8 -15.1 14.1 -15.5
2026-04-12T20:18:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:18:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:18:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.762607
2026-04-12T20:18:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:18:32.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:18:32.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:18:32.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:18:32.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:18:32.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:18:15', tmtdew=0.461705, humidity=96.8221, cloud=0.0, wind=11.3818, temperature=11.9391, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:18:09.245', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:18:32.984 [DEBUG] [Thread-195248] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:18:33.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:18:33.078 [DEBUG] [Thread-195251] [transport.py] [_log()] starting thread (client mode): 0xb0f8fa60
2026-04-12T20:18:33.079 [DEBUG] [Thread-195251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:18:33.093 [DEBUG] [Thread-195251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:18:33.093 [INFO] [Thread-195251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:18:33.101 [DEBUG] [Thread-195251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:18:33.101 [DEBUG] [Thread-195251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] client lang: <none>
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] server lang: <none>
2026-04-12T20:18:33.102 [DEBUG] [Thread-195251] [transport.py] [_log()] kex follows: False
2026-04-12T20:18:33.103 [DEBUG] [Thread-195251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:18:33.103 [DEBUG] [Thread-195251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:18:33.103 [DEBUG] [Thread-195251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:18:33.103 [DEBUG] [Thread-195251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:18:33.103 [DEBUG] [Thread-195251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:18:33.103 [DEBUG] [Thread-195251] [transport.py] [_log()] Compression: none
2026-04-12T20:18:33.103 [DEBUG] [Thread-195251] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:18:33.160 [DEBUG] [Thread-195251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:18:33.161 [DEBUG] [Thread-195251] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:18:33.170 [DEBUG] [Thread-195251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:18:33.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:18:33.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:18:33.220 [DEBUG] [Thread-195251] [transport.py] [_log()] userauth is OK
2026-04-12T20:18:33.220 [DEBUG] [Thread-195251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:18:33.220 [DEBUG] [Thread-195251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:18:33.220 [DEBUG] [Thread-195251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:18:33.220 [DEBUG] [Thread-195251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:18:33.247 [INFO] [Thread-195251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:18:33.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:18:33.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:18:34.052 [DEBUG] [Thread-195251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:18:34.052 [DEBUG] [Thread-195251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:18:34.101 [DEBUG] [Thread-195251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:18:34.101 [DEBUG] [Thread-195251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:18:34.110 [DEBUG] [Thread-195251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:18:34.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:18:34.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:18:34.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:18:34.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:18:34.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:18:34.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:18:34.146 [DEBUG] [Thread-195251] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:18:42.834 [DEBUG] [Thread-195253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:18:57.885 [DEBUG] [Thread-195254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:19:04.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:19:04.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:19:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:19:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 18, 50), 0.82248, 94.6443, 0.0, 11.2226, 12.1124, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:19:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:18:50
2026-04-12T20:19:05.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:19:05.962 [DEBUG] [Thread-195255] [transport.py] [_log()] starting thread (client mode): 0xb0f8e650
2026-04-12T20:19:05.962 [DEBUG] [Thread-195255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:19:05.983 [DEBUG] [Thread-195255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:19:05.983 [INFO] [Thread-195255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:19:05.987 [DEBUG] [Thread-195255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] client lang: <none>
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] server lang: <none>
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] kex follows: False
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] Compression: none
2026-04-12T20:19:05.988 [DEBUG] [Thread-195255] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:19:06.008 [DEBUG] [Thread-195255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:19:06.008 [DEBUG] [Thread-195255] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:19:06.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:19:06.010 [DEBUG] [Thread-195255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:19:06.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:19:06.012 [DEBUG] [Thread-195255] [transport.py] [_log()] userauth is OK
2026-04-12T20:19:06.012 [DEBUG] [Thread-195255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:19:06.013 [DEBUG] [Thread-195255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:19:06.013 [DEBUG] [Thread-195255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:19:06.013 [DEBUG] [Thread-195255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:19:06.036 [INFO] [Thread-195255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:19:06.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:19:06.314 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:19:06.315 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:19:06.687 [DEBUG] [Thread-195255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:19:06.687 [DEBUG] [Thread-195255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:19:06.687 [DEBUG] [Thread-195255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:19:06.728 [DEBUG] [Thread-195255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:19:06.729 [DEBUG] [Thread-195255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:19:06.732 [DEBUG] [Thread-195255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:19:06.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:19:06.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:19:06.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:19:06.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:19:06.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:19:06.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:19:06.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:19:06.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:19:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:19:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.762954 -999.00  +12.10   2.73     93  +11.10 1 3 1 3 1     0    0 0.72 -11.85 Z.eSW 2.7 2.7 218.0 8.5 14.2 -10.1 14.0 -10.1 13.7 -9.3 14.1 -12.6
2026-04-12T20:19:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:19:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:19:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.762954
2026-04-12T20:19:06.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:19:06.760 [DEBUG] [Thread-195255] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:19:06.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:19:06.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:19:06.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:19:06.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:19:06.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:18:50', tmtdew=0.82248, humidity=94.6443, cloud=0.0, wind=11.2226, temperature=12.1124, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:18:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:19:06.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:19:06.868 [DEBUG] [Thread-195258] [transport.py] [_log()] starting thread (client mode): 0xae5b3400
2026-04-12T20:19:06.868 [DEBUG] [Thread-195258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:19:06.883 [DEBUG] [Thread-195258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:19:06.883 [INFO] [Thread-195258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:19:06.890 [DEBUG] [Thread-195258] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] client lang: <none>
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] server lang: <none>
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] kex follows: False
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] Compression: none
2026-04-12T20:19:06.891 [DEBUG] [Thread-195258] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:19:06.956 [DEBUG] [Thread-195258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:19:06.956 [DEBUG] [Thread-195258] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:19:06.957 [DEBUG] [Thread-195258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:19:06.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:19:06.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:19:07.011 [DEBUG] [Thread-195258] [transport.py] [_log()] userauth is OK
2026-04-12T20:19:07.011 [DEBUG] [Thread-195258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:19:07.012 [DEBUG] [Thread-195258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:19:07.012 [DEBUG] [Thread-195258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:19:07.012 [DEBUG] [Thread-195258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:19:07.036 [INFO] [Thread-195258] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:19:07.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:19:07.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:19:07.418 [DEBUG] [Thread-195260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:19:07.871 [DEBUG] [Thread-195258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:19:07.872 [DEBUG] [Thread-195258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:19:07.919 [DEBUG] [Thread-195258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:19:07.919 [DEBUG] [Thread-195258] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:19:07.928 [DEBUG] [Thread-195258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:19:07.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:19:07.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:19:07.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:19:07.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:19:07.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:19:07.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:19:07.963 [DEBUG] [Thread-195258] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:19:12.923 [DEBUG] [Thread-195261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:19:27.977 [DEBUG] [Thread-195262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:19:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:19:37.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:19:37.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:19:39.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 19, 26), 0.45085, 96.8885, 0.0, 9.21132, 11.8394, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:19:39.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:19:26
2026-04-12T20:19:39.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:19:39.681 [DEBUG] [Thread-195263] [transport.py] [_log()] starting thread (client mode): 0xae5f0af0
2026-04-12T20:19:39.681 [DEBUG] [Thread-195263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:19:39.700 [DEBUG] [Thread-195263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:19:39.700 [INFO] [Thread-195263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] client lang: <none>
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] server lang: <none>
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] kex follows: False
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] Compression: none
2026-04-12T20:19:39.704 [DEBUG] [Thread-195263] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:19:39.721 [DEBUG] [Thread-195263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:19:39.722 [DEBUG] [Thread-195263] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:19:39.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:19:39.722 [DEBUG] [Thread-195263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:19:39.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:19:39.724 [DEBUG] [Thread-195263] [transport.py] [_log()] userauth is OK
2026-04-12T20:19:39.724 [DEBUG] [Thread-195263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:19:39.724 [DEBUG] [Thread-195263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:19:39.724 [DEBUG] [Thread-195263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:19:39.724 [DEBUG] [Thread-195263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:19:39.738 [INFO] [Thread-195263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:19:39.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:19:40.359 [DEBUG] [Thread-195263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:19:40.360 [DEBUG] [Thread-195263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:19:40.360 [DEBUG] [Thread-195263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:19:40.400 [DEBUG] [Thread-195263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:19:40.401 [DEBUG] [Thread-195263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:19:40.404 [DEBUG] [Thread-195263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:19:40.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:19:40.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:19:40.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:19:40.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:19:40.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:19:40.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:19:40.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:19:40.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:19:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:19:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.763301 -999.00  +12.10   3.85     93  +11.10 1 2 1 3 1     0    0 0.76 -10.75 Z.eSW 3.9 3.9 195.4 6.6 14.2 -12.0 14.0 -11.1 13.8 -12.7 14.0 -13.9
2026-04-12T20:19:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:19:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:19:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.763301
2026-04-12T20:19:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:19:40.433 [DEBUG] [Thread-195263] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:19:40.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:19:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:19:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:19:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:19:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:19:26', tmtdew=0.45085, humidity=96.8885, cloud=0.0, wind=9.21132, temperature=11.8394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:19:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:19:40.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:19:40.538 [DEBUG] [Thread-195266] [transport.py] [_log()] starting thread (client mode): 0xae5379a0
2026-04-12T20:19:40.539 [DEBUG] [Thread-195266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:19:40.553 [DEBUG] [Thread-195266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:19:40.554 [INFO] [Thread-195266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:19:40.570 [DEBUG] [Thread-195266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:19:40.570 [DEBUG] [Thread-195266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:19:40.570 [DEBUG] [Thread-195266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:19:40.570 [DEBUG] [Thread-195266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:40.570 [DEBUG] [Thread-195266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] client lang: <none>
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] server lang: <none>
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] kex follows: False
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:19:40.571 [DEBUG] [Thread-195266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:19:40.572 [DEBUG] [Thread-195266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:19:40.572 [DEBUG] [Thread-195266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:19:40.572 [DEBUG] [Thread-195266] [transport.py] [_log()] Compression: none
2026-04-12T20:19:40.572 [DEBUG] [Thread-195266] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:19:40.618 [DEBUG] [Thread-195266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:19:40.619 [DEBUG] [Thread-195266] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:19:40.619 [DEBUG] [Thread-195266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:19:40.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:19:40.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:19:40.673 [DEBUG] [Thread-195266] [transport.py] [_log()] userauth is OK
2026-04-12T20:19:40.674 [DEBUG] [Thread-195266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:19:40.674 [DEBUG] [Thread-195266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:19:40.674 [DEBUG] [Thread-195266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:19:40.674 [DEBUG] [Thread-195266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:19:40.697 [INFO] [Thread-195266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:19:40.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:19:40.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:19:41.499 [DEBUG] [Thread-195266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:19:41.499 [DEBUG] [Thread-195266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:19:41.547 [DEBUG] [Thread-195266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:19:41.547 [DEBUG] [Thread-195266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:19:41.556 [DEBUG] [Thread-195266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:19:41.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:19:41.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:19:41.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:19:41.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:19:41.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:19:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:19:41.591 [DEBUG] [Thread-195266] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:19:43.010 [DEBUG] [Thread-195268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:19:58.070 [DEBUG] [Thread-195269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:20:06.519 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:20:06.521 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:20:07.486 [DEBUG] [Thread-195270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:20:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:20:11.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:20:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:20:12.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 20, 2), 0.4586, 96.8387, 0.0, 9.38772, 11.8062, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:20:12.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:20:02
2026-04-12T20:20:13.105 [DEBUG] [Thread-195271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:20:13.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:20:13.425 [DEBUG] [Thread-195272] [transport.py] [_log()] starting thread (client mode): 0xae5f1780
2026-04-12T20:20:13.425 [DEBUG] [Thread-195272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:20:13.445 [DEBUG] [Thread-195272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:20:13.445 [INFO] [Thread-195272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] client lang: <none>
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] server lang: <none>
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] kex follows: False
2026-04-12T20:20:13.448 [DEBUG] [Thread-195272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:20:13.449 [DEBUG] [Thread-195272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:20:13.449 [DEBUG] [Thread-195272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:20:13.449 [DEBUG] [Thread-195272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:20:13.449 [DEBUG] [Thread-195272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:20:13.449 [DEBUG] [Thread-195272] [transport.py] [_log()] Compression: none
2026-04-12T20:20:13.449 [DEBUG] [Thread-195272] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:20:13.468 [DEBUG] [Thread-195272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:20:13.468 [DEBUG] [Thread-195272] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:20:13.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:20:13.469 [DEBUG] [Thread-195272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:20:13.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:20:13.471 [DEBUG] [Thread-195272] [transport.py] [_log()] userauth is OK
2026-04-12T20:20:13.471 [DEBUG] [Thread-195272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:20:13.471 [DEBUG] [Thread-195272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:20:13.472 [DEBUG] [Thread-195272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:20:13.472 [DEBUG] [Thread-195272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:20:13.495 [INFO] [Thread-195272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:20:13.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:20:14.313 [DEBUG] [Thread-195272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:20:14.313 [DEBUG] [Thread-195272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:20:14.314 [DEBUG] [Thread-195272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:20:14.354 [DEBUG] [Thread-195272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:20:14.354 [DEBUG] [Thread-195272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:20:14.357 [DEBUG] [Thread-195272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:20:14.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:20:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:20:14.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:20:14.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:20:14.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:20:14.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:20:14.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:20:14.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:20:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:20:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.763649 -999.00  +12.10   6.93     93  +11.10 1 2 1 3 1     0    0 0.77 -10.14 ZN..W 6.9 6.9 216.6 8.8 14.2 -12.5 14.0 -12.3 13.8 -11.5 14.1 -10.5
2026-04-12T20:20:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:20:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:20:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.763649
2026-04-12T20:20:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:20:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:20:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:20:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:20:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:20:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:20:02', tmtdew=0.4586, humidity=96.8387, cloud=0.0, wind=9.38772, temperature=11.8062, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:19:39.274', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:20:14.409 [DEBUG] [Thread-195272] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:20:14.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:20:14.504 [DEBUG] [Thread-195275] [transport.py] [_log()] starting thread (client mode): 0xb0f8e2f0
2026-04-12T20:20:14.504 [DEBUG] [Thread-195275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:20:14.519 [DEBUG] [Thread-195275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:20:14.519 [INFO] [Thread-195275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:20:14.526 [DEBUG] [Thread-195275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] client lang: <none>
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] server lang: <none>
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] kex follows: False
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] Compression: none
2026-04-12T20:20:14.527 [DEBUG] [Thread-195275] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:20:14.584 [DEBUG] [Thread-195275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:20:14.585 [DEBUG] [Thread-195275] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:20:14.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:20:14.586 [DEBUG] [Thread-195275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:20:14.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:20:14.640 [DEBUG] [Thread-195275] [transport.py] [_log()] userauth is OK
2026-04-12T20:20:14.641 [DEBUG] [Thread-195275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:20:14.641 [DEBUG] [Thread-195275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:20:14.641 [DEBUG] [Thread-195275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:20:14.641 [DEBUG] [Thread-195275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:20:14.666 [INFO] [Thread-195275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:20:14.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:20:14.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:20:15.493 [DEBUG] [Thread-195275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:20:15.494 [DEBUG] [Thread-195275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:20:15.542 [DEBUG] [Thread-195275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:20:15.542 [DEBUG] [Thread-195275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:20:15.552 [DEBUG] [Thread-195275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:20:15.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:20:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:20:15.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:20:15.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:20:15.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:20:15.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:20:15.590 [DEBUG] [Thread-195275] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:20:28.141 [DEBUG] [Thread-195277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:20:43.195 [DEBUG] [Thread-195278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:20:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:20:45.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:20:45.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:20:46.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 20, 37), 0.79649, 94.8109, 0.0, 10.1642, 12.2124, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:20:46.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:20:37
2026-04-12T20:20:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:20:47.477 [DEBUG] [Thread-195279] [transport.py] [_log()] starting thread (client mode): 0xb0f8c1c0
2026-04-12T20:20:47.477 [DEBUG] [Thread-195279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:20:47.498 [DEBUG] [Thread-195279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:20:47.498 [INFO] [Thread-195279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:20:47.501 [DEBUG] [Thread-195279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:20:47.501 [DEBUG] [Thread-195279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] client lang: <none>
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] server lang: <none>
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] kex follows: False
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] Compression: none
2026-04-12T20:20:47.502 [DEBUG] [Thread-195279] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:20:47.520 [DEBUG] [Thread-195279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:20:47.520 [DEBUG] [Thread-195279] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:20:47.521 [DEBUG] [Thread-195279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:20:47.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:20:47.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:20:47.523 [DEBUG] [Thread-195279] [transport.py] [_log()] userauth is OK
2026-04-12T20:20:47.523 [DEBUG] [Thread-195279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:20:47.523 [DEBUG] [Thread-195279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:20:47.523 [DEBUG] [Thread-195279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:20:47.523 [DEBUG] [Thread-195279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:20:47.561 [INFO] [Thread-195279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:20:47.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:20:48.214 [DEBUG] [Thread-195279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:20:48.214 [DEBUG] [Thread-195279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:20:48.215 [DEBUG] [Thread-195279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:20:48.255 [DEBUG] [Thread-195279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:20:48.255 [DEBUG] [Thread-195279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:20:48.258 [DEBUG] [Thread-195279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:20:48.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:20:48.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:20:48.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:20:48.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:20:48.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:20:48.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:20:48.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:20:48.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:20:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:20:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.763995 -999.00  +12.10   5.99     93  +11.10 1 2 1 3 1     0    0 0.78 -9.60 ZN..W 6.0 6.0 214.0 7.6 14.1 -12.1 14.0 -11.0 13.8 -12.5 14.1 -14.6
2026-04-12T20:20:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:20:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:20:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.763995
2026-04-12T20:20:48.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:20:48.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:20:48.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:20:48.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:20:48.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:20:48.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:20:37', tmtdew=0.79649, humidity=94.8109, cloud=0.0, wind=10.1642, temperature=12.2124, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:20:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:20:48.286 [DEBUG] [Thread-195279] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:20:48.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:20:48.377 [DEBUG] [Thread-195282] [transport.py] [_log()] starting thread (client mode): 0xb0f8d780
2026-04-12T20:20:48.377 [DEBUG] [Thread-195282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:20:48.391 [DEBUG] [Thread-195282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:20:48.391 [INFO] [Thread-195282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] client lang: <none>
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] server lang: <none>
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] kex follows: False
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:20:48.399 [DEBUG] [Thread-195282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:20:48.400 [DEBUG] [Thread-195282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:20:48.400 [DEBUG] [Thread-195282] [transport.py] [_log()] Compression: none
2026-04-12T20:20:48.400 [DEBUG] [Thread-195282] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:20:48.462 [DEBUG] [Thread-195282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:20:48.462 [DEBUG] [Thread-195282] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:20:48.463 [DEBUG] [Thread-195282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:20:48.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:20:48.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:20:48.522 [DEBUG] [Thread-195282] [transport.py] [_log()] userauth is OK
2026-04-12T20:20:48.523 [DEBUG] [Thread-195282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:20:48.523 [DEBUG] [Thread-195282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:20:48.523 [DEBUG] [Thread-195282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:20:48.523 [DEBUG] [Thread-195282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:20:48.548 [INFO] [Thread-195282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:20:48.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:20:48.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:20:49.406 [DEBUG] [Thread-195282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:20:49.406 [DEBUG] [Thread-195282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:20:49.455 [DEBUG] [Thread-195282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:20:49.456 [DEBUG] [Thread-195282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:20:49.464 [DEBUG] [Thread-195282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:20:49.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:20:49.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:20:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:20:49.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:20:49.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:20:49.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:20:49.503 [DEBUG] [Thread-195282] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:20:58.230 [DEBUG] [Thread-195284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:21:06.727 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:21:06.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:21:07.555 [DEBUG] [Thread-195285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:21:13.273 [DEBUG] [Thread-195286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:21:19.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:21:19.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:21:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:21:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 21, 13), 0.440405, 96.9552, 0.0, 8.69976, 11.8728, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:21:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:21:13
2026-04-12T20:21:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:21:21.346 [DEBUG] [Thread-195287] [transport.py] [_log()] starting thread (client mode): 0xae5f02b0
2026-04-12T20:21:21.346 [DEBUG] [Thread-195287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:21:21.366 [DEBUG] [Thread-195287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:21:21.367 [INFO] [Thread-195287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] client lang: <none>
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] server lang: <none>
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] kex follows: False
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:21:21.370 [DEBUG] [Thread-195287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:21:21.371 [DEBUG] [Thread-195287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:21:21.371 [DEBUG] [Thread-195287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:21:21.371 [DEBUG] [Thread-195287] [transport.py] [_log()] Compression: none
2026-04-12T20:21:21.371 [DEBUG] [Thread-195287] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:21:21.387 [DEBUG] [Thread-195287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:21:21.388 [DEBUG] [Thread-195287] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:21:21.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:21:21.389 [DEBUG] [Thread-195287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:21:21.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:21:21.391 [DEBUG] [Thread-195287] [transport.py] [_log()] userauth is OK
2026-04-12T20:21:21.392 [DEBUG] [Thread-195287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:21:21.392 [DEBUG] [Thread-195287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:21:21.392 [DEBUG] [Thread-195287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:21:21.392 [DEBUG] [Thread-195287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:21:21.411 [INFO] [Thread-195287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:21:21.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:21:22.036 [DEBUG] [Thread-195287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:21:22.036 [DEBUG] [Thread-195287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:21:22.037 [DEBUG] [Thread-195287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:21:22.077 [DEBUG] [Thread-195287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:21:22.077 [DEBUG] [Thread-195287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:21:22.081 [DEBUG] [Thread-195287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:21:22.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:21:22.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:21:22.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:21:22.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:21:22.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:21:22.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:21:22.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:21:22.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:21:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:21:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.764691 -999.00  +12.10   4.77     93  +11.10 1 2 1 3 1     0    0 0.78 -9.11 ZN..W 4.8 4.8 217.3 5.7 14.1 -18.3 13.8 -16.7 13.7 -14.8 14.1 -13.6
2026-04-12T20:21:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:21:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:21:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.764691
2026-04-12T20:21:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:21:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:21:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:21:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:21:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:21:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:21:13', tmtdew=0.440405, humidity=96.9552, cloud=0.0, wind=8.69976, temperature=11.8728, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:21:09.302', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:21:22.110 [DEBUG] [Thread-195287] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:21:22.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:21:22.203 [DEBUG] [Thread-195290] [transport.py] [_log()] starting thread (client mode): 0xae5f2dd0
2026-04-12T20:21:22.203 [DEBUG] [Thread-195290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:21:22.218 [DEBUG] [Thread-195290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:21:22.218 [INFO] [Thread-195290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:21:22.226 [DEBUG] [Thread-195290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:21:22.226 [DEBUG] [Thread-195290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:21:22.227 [DEBUG] [Thread-195290] [transport.py] [_log()] client lang: <none>
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] server lang: <none>
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] kex follows: False
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] Compression: none
2026-04-12T20:21:22.228 [DEBUG] [Thread-195290] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:21:22.284 [DEBUG] [Thread-195290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:21:22.285 [DEBUG] [Thread-195290] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:21:22.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:21:22.286 [DEBUG] [Thread-195290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:21:22.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:21:22.341 [DEBUG] [Thread-195290] [transport.py] [_log()] userauth is OK
2026-04-12T20:21:22.341 [DEBUG] [Thread-195290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:21:22.342 [DEBUG] [Thread-195290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:21:22.342 [DEBUG] [Thread-195290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:21:22.342 [DEBUG] [Thread-195290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:21:22.361 [INFO] [Thread-195290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:21:22.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:21:22.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:21:23.171 [DEBUG] [Thread-195290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:21:23.171 [DEBUG] [Thread-195290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:21:23.219 [DEBUG] [Thread-195290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:21:23.219 [DEBUG] [Thread-195290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:21:23.229 [DEBUG] [Thread-195290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:21:23.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:21:23.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:21:23.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:21:23.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:21:23.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:21:23.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:21:23.273 [DEBUG] [Thread-195290] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:21:28.314 [DEBUG] [Thread-195292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:21:43.367 [DEBUG] [Thread-195293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:21:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:21:53.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:21:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:21:54.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 21, 13), 0.440405, 96.9552, 0.0, 8.69976, 11.8728, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:21:54.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:21:13
2026-04-12T20:21:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:21:55.318 [DEBUG] [Thread-195294] [transport.py] [_log()] starting thread (client mode): 0xb0f8fbe0
2026-04-12T20:21:55.318 [DEBUG] [Thread-195294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:21:55.337 [DEBUG] [Thread-195294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:21:55.337 [INFO] [Thread-195294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] client lang: <none>
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] server lang: <none>
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] kex follows: False
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] Compression: none
2026-04-12T20:21:55.339 [DEBUG] [Thread-195294] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:21:55.351 [DEBUG] [Thread-195294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:21:55.352 [DEBUG] [Thread-195294] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:21:55.352 [DEBUG] [Thread-195294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:21:55.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:21:55.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:21:55.356 [DEBUG] [Thread-195294] [transport.py] [_log()] userauth is OK
2026-04-12T20:21:55.356 [DEBUG] [Thread-195294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:21:55.356 [DEBUG] [Thread-195294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:21:55.356 [DEBUG] [Thread-195294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:21:55.356 [DEBUG] [Thread-195294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:21:55.377 [INFO] [Thread-195294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:21:55.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:21:56.022 [DEBUG] [Thread-195294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:21:56.022 [DEBUG] [Thread-195294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:21:56.023 [DEBUG] [Thread-195294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:21:56.064 [DEBUG] [Thread-195294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:21:56.064 [DEBUG] [Thread-195294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:21:56.068 [DEBUG] [Thread-195294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:21:56.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:21:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:21:56.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:21:56.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:21:56.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:21:56.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:21:56.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:21:56.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:21:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:21:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.765038 -999.00  +12.10   5.61     93  +11.10 1 2 1 3 1     0    0 0.80 -8.88 ZN..W 5.6 5.6 214.8 6.9 14.1 -16.4 13.9 -16.0 13.7 -13.7 14.0 -15.4
2026-04-12T20:21:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:21:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:21:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.765038
2026-04-12T20:21:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:21:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:21:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:21:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:21:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:21:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:21:13', tmtdew=0.440405, humidity=96.9552, cloud=0.0, wind=8.69976, temperature=11.8728, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:21:39.283', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:21:56.099 [DEBUG] [Thread-195294] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:21:56.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:21:56.200 [DEBUG] [Thread-195297] [transport.py] [_log()] starting thread (client mode): 0xae5b3b80
2026-04-12T20:21:56.200 [DEBUG] [Thread-195297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:21:56.214 [DEBUG] [Thread-195297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:21:56.215 [INFO] [Thread-195297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] client lang: <none>
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] server lang: <none>
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] kex follows: False
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] Compression: none
2026-04-12T20:21:56.222 [DEBUG] [Thread-195297] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:21:56.283 [DEBUG] [Thread-195297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:21:56.283 [DEBUG] [Thread-195297] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:21:56.284 [DEBUG] [Thread-195297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:21:56.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:21:56.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:21:56.339 [DEBUG] [Thread-195297] [transport.py] [_log()] userauth is OK
2026-04-12T20:21:56.339 [DEBUG] [Thread-195297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:21:56.339 [DEBUG] [Thread-195297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:21:56.339 [DEBUG] [Thread-195297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:21:56.340 [DEBUG] [Thread-195297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:21:56.358 [INFO] [Thread-195297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:21:56.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:21:56.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:21:57.221 [DEBUG] [Thread-195297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:21:57.221 [DEBUG] [Thread-195297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:21:57.269 [DEBUG] [Thread-195297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:21:57.269 [DEBUG] [Thread-195297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:21:57.278 [DEBUG] [Thread-195297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:21:57.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:21:57.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:21:57.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:21:57.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:21:57.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:21:57.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:21:57.315 [DEBUG] [Thread-195297] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:21:58.401 [DEBUG] [Thread-195299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:22:06.932 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:22:06.934 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:22:07.613 [DEBUG] [Thread-195300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:22:13.453 [DEBUG] [Thread-195301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:22:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:22:27.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:22:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:22:28.491 [DEBUG] [Thread-195302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:22:28.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 21, 48), 0.77011, 94.9765, 0.0, 10.6934, 12.2123, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:22:28.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:21:48
2026-04-12T20:22:29.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:22:29.265 [DEBUG] [Thread-195303] [transport.py] [_log()] starting thread (client mode): 0xae5f2170
2026-04-12T20:22:29.265 [DEBUG] [Thread-195303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:22:29.285 [DEBUG] [Thread-195303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:22:29.285 [INFO] [Thread-195303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] client lang: <none>
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] server lang: <none>
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] kex follows: False
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] Compression: none
2026-04-12T20:22:29.289 [DEBUG] [Thread-195303] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:22:29.305 [DEBUG] [Thread-195303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:22:29.305 [DEBUG] [Thread-195303] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:22:29.306 [DEBUG] [Thread-195303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:22:29.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:22:29.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:22:29.306 [DEBUG] [Thread-195303] [transport.py] [_log()] userauth is OK
2026-04-12T20:22:29.306 [DEBUG] [Thread-195303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:22:29.306 [DEBUG] [Thread-195303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:22:29.306 [DEBUG] [Thread-195303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:22:29.306 [DEBUG] [Thread-195303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:22:29.322 [INFO] [Thread-195303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:22:29.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:22:29.927 [DEBUG] [Thread-195303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:22:29.927 [DEBUG] [Thread-195303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:22:29.928 [DEBUG] [Thread-195303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:22:29.968 [DEBUG] [Thread-195303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:22:29.968 [DEBUG] [Thread-195303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:22:29.971 [DEBUG] [Thread-195303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:22:29.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:22:29.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:22:29.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:22:29.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:22:29.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:22:29.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:22:29.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:22:29.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:22:29.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:22:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.765385 -999.00  +12.10   4.92     93  +11.10 1 2 1 3 1     0    0 0.78 -8.77 ZN..W 4.9 4.9 218.8 6.5 14.1 -19.9 13.8 -19.1 13.7 -16.6 14.0 -17.4
2026-04-12T20:22:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:22:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:22:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.765385
2026-04-12T20:22:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:22:29.995 [DEBUG] [Thread-195303] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:22:29.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:22:29.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:22:29.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:22:29.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:22:29.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:21:48', tmtdew=0.77011, humidity=94.9765, cloud=0.0, wind=10.6934, temperature=12.2123, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:22:09.264', atlas_cloud=2, atlas_rain=1, zp_data=[1.06975, 0.7782500000000008, 0.6972500000000004, 0.843, 1.1725000000000003, 1.8712500000000007, nan, 2.071250000000001, 1.3149999999999995, 0.8864999999999998, 0.47025000000000006, 0.6859999999999999, 1.224000000000001, 2.5642499999999995, nan, nan, 1.6632499999999997, 1.2714999999999996, 0.7434999999999992, 0.7677500000000004, 1.5464999999999982, 2.133749999999999, nan, nan, 2.264499999999999, 1.5695000000000006, 1.1217500000000005, 0.8355000000000006, 1.165, nan, nan, nan, nan], zp_timestamp='2026-04-12T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:22:30.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:22:30.092 [DEBUG] [Thread-195306] [transport.py] [_log()] starting thread (client mode): 0xae5b1720
2026-04-12T20:22:30.092 [DEBUG] [Thread-195306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:22:30.108 [DEBUG] [Thread-195306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:22:30.108 [INFO] [Thread-195306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:22:30.115 [DEBUG] [Thread-195306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] client lang: <none>
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] server lang: <none>
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] kex follows: False
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] Compression: none
2026-04-12T20:22:30.116 [DEBUG] [Thread-195306] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:22:30.180 [DEBUG] [Thread-195306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:22:30.181 [DEBUG] [Thread-195306] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:22:30.182 [DEBUG] [Thread-195306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:22:30.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:22:30.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:22:30.239 [DEBUG] [Thread-195306] [transport.py] [_log()] userauth is OK
2026-04-12T20:22:30.239 [DEBUG] [Thread-195306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:22:30.239 [DEBUG] [Thread-195306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:22:30.240 [DEBUG] [Thread-195306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:22:30.240 [DEBUG] [Thread-195306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:22:30.259 [INFO] [Thread-195306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:22:30.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:22:30.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:22:31.069 [DEBUG] [Thread-195306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:22:31.069 [DEBUG] [Thread-195306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:22:31.116 [DEBUG] [Thread-195306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:22:31.117 [DEBUG] [Thread-195306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:22:31.125 [DEBUG] [Thread-195306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:22:31.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:22:31.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:22:31.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:22:31.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:22:31.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:22:31.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:22:31.161 [DEBUG] [Thread-195306] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:22:43.530 [DEBUG] [Thread-195308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:22:58.594 [DEBUG] [Thread-195309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:23:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:23:01.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:23:01.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:23:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 22, 24), 0.442885, 96.9385, 0.0, 8.82324, 11.8396, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:23:02.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:22:24
2026-04-12T20:23:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:23:03.186 [DEBUG] [Thread-195310] [transport.py] [_log()] starting thread (client mode): 0xb0f8c6d0
2026-04-12T20:23:03.187 [DEBUG] [Thread-195310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:23:03.207 [DEBUG] [Thread-195310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:23:03.207 [INFO] [Thread-195310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] client lang: <none>
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] server lang: <none>
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] kex follows: False
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] Compression: none
2026-04-12T20:23:03.209 [DEBUG] [Thread-195310] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:23:03.218 [DEBUG] [Thread-195310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:23:03.218 [DEBUG] [Thread-195310] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:23:03.219 [DEBUG] [Thread-195310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:23:03.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:23:03.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:23:03.220 [DEBUG] [Thread-195310] [transport.py] [_log()] userauth is OK
2026-04-12T20:23:03.221 [DEBUG] [Thread-195310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:23:03.221 [DEBUG] [Thread-195310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:23:03.221 [DEBUG] [Thread-195310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:23:03.221 [DEBUG] [Thread-195310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:23:03.245 [INFO] [Thread-195310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:23:03.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:23:03.846 [DEBUG] [Thread-195310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:23:03.846 [DEBUG] [Thread-195310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:23:03.847 [DEBUG] [Thread-195310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:23:03.887 [DEBUG] [Thread-195310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:23:03.887 [DEBUG] [Thread-195310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:23:03.890 [DEBUG] [Thread-195310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:23:03.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:23:03.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:23:03.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:23:03.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:23:03.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:23:03.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:23:03.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:23:03.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:23:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:23:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.765732 -999.00  +12.10   4.01     93  +11.10 1 1 1 3 1     0    0 0.80 -8.09 ZNESW 4.0 4.0 197.7 6.1 14.1 -18.6 13.8 -17.0 13.6 -17.7 14.0 -19.5
2026-04-12T20:23:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:23:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:23:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.765732
2026-04-12T20:23:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:23:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:23:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:23:03.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:23:03.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T20:23:03.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:22:24', tmtdew=0.442885, humidity=96.9385, cloud=0.0, wind=8.82324, temperature=11.8396, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:22:39.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.6007499999999997, 1.7572500000000009, 2.076250000000001, 1.7764999999999995, 1.3579999999999997, 1.1612500000000008, 1.242, 1.3032500000000002, nan, 2.338000000000001, 1.757249999999999, 1.7449999999999992, 1.3155000000000001, 1.0592499999999996, 1.1189999999999998, 1.2470000000000008, 2.1422499999999998, nan, 2.3884999999999996, 2.1272499999999983, 1.2609999999999983, 0.9007499999999986, 0.9902500000000005, 1.3547500000000001, 2.3919999999999995, nan, nan, 2.151, 1.338, 1.0485000000000007, 1.418000000000001, nan, nan], zp_timestamp='2026-04-12T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:23:03.918 [DEBUG] [Thread-195310] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:23:04.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:23:04.013 [DEBUG] [Thread-195313] [transport.py] [_log()] starting thread (client mode): 0xae5f3e50
2026-04-12T20:23:04.013 [DEBUG] [Thread-195313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:23:04.028 [DEBUG] [Thread-195313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:23:04.029 [INFO] [Thread-195313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:23:04.036 [DEBUG] [Thread-195313] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:23:04.036 [DEBUG] [Thread-195313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] client lang: <none>
2026-04-12T20:23:04.037 [DEBUG] [Thread-195313] [transport.py] [_log()] server lang: <none>
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] kex follows: False
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] Compression: none
2026-04-12T20:23:04.038 [DEBUG] [Thread-195313] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:23:04.095 [DEBUG] [Thread-195313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:23:04.096 [DEBUG] [Thread-195313] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:23:04.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:23:04.097 [DEBUG] [Thread-195313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:23:04.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:23:04.154 [DEBUG] [Thread-195313] [transport.py] [_log()] userauth is OK
2026-04-12T20:23:04.155 [DEBUG] [Thread-195313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:23:04.155 [DEBUG] [Thread-195313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:23:04.155 [DEBUG] [Thread-195313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:23:04.155 [DEBUG] [Thread-195313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:23:04.178 [INFO] [Thread-195313] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:23:04.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:23:04.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:23:04.988 [DEBUG] [Thread-195313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:23:04.989 [DEBUG] [Thread-195313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:23:05.037 [DEBUG] [Thread-195313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:23:05.037 [DEBUG] [Thread-195313] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:23:05.047 [DEBUG] [Thread-195313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:23:05.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:23:05.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:23:05.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:23:05.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:23:05.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:23:05.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:23:05.084 [DEBUG] [Thread-195313] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:23:07.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:23:07.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:23:07.686 [DEBUG] [Thread-195315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:23:13.635 [DEBUG] [Thread-195316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:23:28.697 [DEBUG] [Thread-195317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:23:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:23:35.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:23:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:23:36.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 22, 24), 0.442885, 96.9385, 0.0, 8.82324, 11.8396, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:23:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:22:24
2026-04-12T20:23:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:23:36.963 [DEBUG] [Thread-195318] [transport.py] [_log()] starting thread (client mode): 0xb0f8d480
2026-04-12T20:23:36.963 [DEBUG] [Thread-195318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:23:36.980 [DEBUG] [Thread-195318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:23:36.980 [INFO] [Thread-195318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] client lang: <none>
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] server lang: <none>
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] kex follows: False
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] Compression: none
2026-04-12T20:23:36.982 [DEBUG] [Thread-195318] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:23:36.996 [DEBUG] [Thread-195318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:23:36.996 [DEBUG] [Thread-195318] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:23:36.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:23:36.996 [DEBUG] [Thread-195318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:23:36.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:23:36.997 [DEBUG] [Thread-195318] [transport.py] [_log()] userauth is OK
2026-04-12T20:23:36.997 [DEBUG] [Thread-195318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:23:36.997 [DEBUG] [Thread-195318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:23:36.997 [DEBUG] [Thread-195318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:23:36.997 [DEBUG] [Thread-195318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:23:37.014 [INFO] [Thread-195318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:23:37.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:23:37.564 [DEBUG] [Thread-195318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:23:37.564 [DEBUG] [Thread-195318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:23:37.565 [DEBUG] [Thread-195318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:23:37.605 [DEBUG] [Thread-195318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:23:37.605 [DEBUG] [Thread-195318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:23:37.607 [DEBUG] [Thread-195318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:23:37.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:23:37.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:23:37.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:23:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:23:37.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:23:37.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:23:37.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:23:37.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:23:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:23:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.766079 -999.00  +12.10   3.35     93  +11.00 1 2 1 3 1     0    0 0.82 -7.65 zNESW 3.4 3.4 210.4 5.7 14.0 -15.0 13.8 -13.6 13.6 -14.2 13.9 -15.9
2026-04-12T20:23:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:23:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:23:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.766079
2026-04-12T20:23:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:23:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:23:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:23:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:23:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:23:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:22:24', tmtdew=0.442885, humidity=96.9385, cloud=0.0, wind=8.82324, temperature=11.8396, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:23:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[1.6007499999999997, 1.7572500000000009, 2.076250000000001, 1.7764999999999995, 1.3579999999999997, 1.1612500000000008, 1.242, 1.3032500000000002, nan, 2.338000000000001, 1.757249999999999, 1.7449999999999992, 1.3155000000000001, 1.0592499999999996, 1.1189999999999998, 1.2470000000000008, 2.1422499999999998, nan, 2.3884999999999996, 2.1272499999999983, 1.2609999999999983, 0.9007499999999986, 0.9902500000000005, 1.3547500000000001, 2.3919999999999995, nan, nan, 2.151, 1.338, 1.0485000000000007, 1.418000000000001, nan, nan], zp_timestamp='2026-04-12T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:23:37.628 [DEBUG] [Thread-195318] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:23:37.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:23:37.723 [DEBUG] [Thread-195321] [transport.py] [_log()] starting thread (client mode): 0xae5b2a40
2026-04-12T20:23:37.723 [DEBUG] [Thread-195321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:23:37.737 [DEBUG] [Thread-195321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:23:37.737 [INFO] [Thread-195321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] client lang: <none>
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] server lang: <none>
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] kex follows: False
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] Compression: none
2026-04-12T20:23:37.745 [DEBUG] [Thread-195321] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:23:37.804 [DEBUG] [Thread-195321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:23:37.805 [DEBUG] [Thread-195321] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:23:37.806 [DEBUG] [Thread-195321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:23:37.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:23:37.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:23:37.860 [DEBUG] [Thread-195321] [transport.py] [_log()] userauth is OK
2026-04-12T20:23:37.860 [DEBUG] [Thread-195321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:23:37.860 [DEBUG] [Thread-195321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:23:37.860 [DEBUG] [Thread-195321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:23:37.860 [DEBUG] [Thread-195321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:23:37.878 [INFO] [Thread-195321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:23:37.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:23:37.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:23:38.713 [DEBUG] [Thread-195321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:23:38.714 [DEBUG] [Thread-195321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:23:38.762 [DEBUG] [Thread-195321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:23:38.762 [DEBUG] [Thread-195321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:23:38.770 [DEBUG] [Thread-195321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:23:38.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:23:38.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:23:38.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:23:38.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:23:38.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:23:38.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:23:38.805 [DEBUG] [Thread-195321] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:23:43.738 [DEBUG] [Thread-195323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:23:58.786 [DEBUG] [Thread-195324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:24:07.353 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:24:07.354 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:24:07.760 [DEBUG] [Thread-195325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:24:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:24:08.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:24:08.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:24:10.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 23, 36), 0.76995, 94.9764, 0.0, 9.59976, 12.1791, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:24:10.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:23:36
2026-04-12T20:24:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:24:10.754 [DEBUG] [Thread-195326] [transport.py] [_log()] starting thread (client mode): 0xae5b14e0
2026-04-12T20:24:10.754 [DEBUG] [Thread-195326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:24:10.766 [DEBUG] [Thread-195326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:24:10.767 [INFO] [Thread-195326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] client lang: <none>
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] server lang: <none>
2026-04-12T20:24:10.769 [DEBUG] [Thread-195326] [transport.py] [_log()] kex follows: False
2026-04-12T20:24:10.770 [DEBUG] [Thread-195326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:24:10.770 [DEBUG] [Thread-195326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:24:10.770 [DEBUG] [Thread-195326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:24:10.770 [DEBUG] [Thread-195326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:24:10.770 [DEBUG] [Thread-195326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:24:10.770 [DEBUG] [Thread-195326] [transport.py] [_log()] Compression: none
2026-04-12T20:24:10.770 [DEBUG] [Thread-195326] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:24:10.784 [DEBUG] [Thread-195326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:24:10.784 [DEBUG] [Thread-195326] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:24:10.784 [DEBUG] [Thread-195326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:24:10.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:24:10.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:24:10.787 [DEBUG] [Thread-195326] [transport.py] [_log()] userauth is OK
2026-04-12T20:24:10.787 [DEBUG] [Thread-195326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:24:10.787 [DEBUG] [Thread-195326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:24:10.787 [DEBUG] [Thread-195326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:24:10.787 [DEBUG] [Thread-195326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:24:10.805 [INFO] [Thread-195326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:24:10.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:24:11.411 [DEBUG] [Thread-195326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:24:11.411 [DEBUG] [Thread-195326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:24:11.411 [DEBUG] [Thread-195326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:24:11.451 [DEBUG] [Thread-195326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:24:11.451 [DEBUG] [Thread-195326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:24:11.454 [DEBUG] [Thread-195326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:24:11.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:24:11.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:24:11.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:24:11.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:24:11.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:24:11.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:24:11.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:24:11.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.766426 -999.00  +12.10   5.77     93  +11.00 1 2 1 3 1     0    0 0.81 -7.19 zNESW 5.8 5.8 219.4 7.3 14.0 -11.8 13.9 -11.5 13.6 -10.1 13.9 -12.3
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.766426
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:24:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:23:36', tmtdew=0.76995, humidity=94.9764, cloud=0.0, wind=9.59976, temperature=12.1791, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:23:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[1.6007499999999997, 1.7572500000000009, 2.076250000000001, 1.7764999999999995, 1.3579999999999997, 1.1612500000000008, 1.242, 1.3032500000000002, nan, 2.338000000000001, 1.757249999999999, 1.7449999999999992, 1.3155000000000001, 1.0592499999999996, 1.1189999999999998, 1.2470000000000008, 2.1422499999999998, nan, 2.3884999999999996, 2.1272499999999983, 1.2609999999999983, 0.9007499999999986, 0.9902500000000005, 1.3547500000000001, 2.3919999999999995, nan, nan, 2.151, 1.338, 1.0485000000000007, 1.418000000000001, nan, nan], zp_timestamp='2026-04-12T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:24:11.468 [DEBUG] [Thread-195326] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:24:11.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:24:11.562 [DEBUG] [Thread-195329] [transport.py] [_log()] starting thread (client mode): 0xae5b3fd0
2026-04-12T20:24:11.563 [DEBUG] [Thread-195329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:24:11.577 [DEBUG] [Thread-195329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:24:11.577 [INFO] [Thread-195329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:24:11.584 [DEBUG] [Thread-195329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:24:11.584 [DEBUG] [Thread-195329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:24:11.584 [DEBUG] [Thread-195329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:24:11.584 [DEBUG] [Thread-195329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:11.584 [DEBUG] [Thread-195329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:11.584 [DEBUG] [Thread-195329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] client lang: <none>
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] server lang: <none>
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] kex follows: False
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] Compression: none
2026-04-12T20:24:11.585 [DEBUG] [Thread-195329] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:24:11.641 [DEBUG] [Thread-195329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:24:11.641 [DEBUG] [Thread-195329] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:24:11.642 [DEBUG] [Thread-195329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:24:11.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:24:11.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:24:11.697 [DEBUG] [Thread-195329] [transport.py] [_log()] userauth is OK
2026-04-12T20:24:11.697 [DEBUG] [Thread-195329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:24:11.697 [DEBUG] [Thread-195329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:24:11.698 [DEBUG] [Thread-195329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:24:11.698 [DEBUG] [Thread-195329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:24:11.719 [INFO] [Thread-195329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:24:11.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:24:11.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:24:12.523 [DEBUG] [Thread-195329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:24:12.523 [DEBUG] [Thread-195329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:24:12.572 [DEBUG] [Thread-195329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:24:12.572 [DEBUG] [Thread-195329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:24:12.582 [DEBUG] [Thread-195329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:24:12.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:24:12.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:24:12.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:24:12.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:24:12.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:24:12.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:24:12.619 [DEBUG] [Thread-195329] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:24:13.832 [DEBUG] [Thread-195331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:24:28.883 [DEBUG] [Thread-195332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:24:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:24:42.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:24:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:24:43.924 [DEBUG] [Thread-195333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:24:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 24, 11), 0.432205, 97.0051, 0.0, 8.55864, 11.8232, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:24:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:24:11
2026-04-12T20:24:44.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:24:44.485 [DEBUG] [Thread-195334] [transport.py] [_log()] starting thread (client mode): 0xae5b3b50
2026-04-12T20:24:44.485 [DEBUG] [Thread-195334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:24:44.504 [DEBUG] [Thread-195334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:24:44.505 [INFO] [Thread-195334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:24:44.505 [DEBUG] [Thread-195334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] client lang: <none>
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] server lang: <none>
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] kex follows: False
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:24:44.506 [DEBUG] [Thread-195334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:24:44.507 [DEBUG] [Thread-195334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:24:44.507 [DEBUG] [Thread-195334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:24:44.507 [DEBUG] [Thread-195334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:24:44.507 [DEBUG] [Thread-195334] [transport.py] [_log()] Compression: none
2026-04-12T20:24:44.507 [DEBUG] [Thread-195334] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:24:44.521 [DEBUG] [Thread-195334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:24:44.522 [DEBUG] [Thread-195334] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:24:44.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:24:44.523 [DEBUG] [Thread-195334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:24:44.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:24:44.526 [DEBUG] [Thread-195334] [transport.py] [_log()] userauth is OK
2026-04-12T20:24:44.526 [DEBUG] [Thread-195334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:24:44.526 [DEBUG] [Thread-195334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:24:44.526 [DEBUG] [Thread-195334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:24:44.526 [DEBUG] [Thread-195334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:24:44.544 [INFO] [Thread-195334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:24:44.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:24:45.152 [DEBUG] [Thread-195334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:24:45.152 [DEBUG] [Thread-195334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:24:45.152 [DEBUG] [Thread-195334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:24:45.193 [DEBUG] [Thread-195334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:24:45.193 [DEBUG] [Thread-195334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:24:45.196 [DEBUG] [Thread-195334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:24:45.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:24:45.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:24:45.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:24:45.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:24:45.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:24:45.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:24:45.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:24:45.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:24:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:24:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.767121 -999.00  +12.00   6.62     93  +11.00 1 2 1 3 1     0    0 0.82 -6.78 zNESW 6.6 6.6 195.2 8.3 14.0 -15.0 13.8 -13.7 13.6 -13.7 13.9 -14.5
2026-04-12T20:24:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:24:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:24:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.767121
2026-04-12T20:24:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:24:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:24:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:24:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:24:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:24:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:24:11', tmtdew=0.432205, humidity=97.0051, cloud=0.0, wind=8.55864, temperature=11.8232, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:24:39.254', atlas_cloud=2, atlas_rain=1, zp_data=[1.6007499999999997, 1.7572500000000009, 2.076250000000001, 1.7764999999999995, 1.3579999999999997, 1.1612500000000008, 1.242, 1.3032500000000002, nan, 2.338000000000001, 1.757249999999999, 1.7449999999999992, 1.3155000000000001, 1.0592499999999996, 1.1189999999999998, 1.2470000000000008, 2.1422499999999998, nan, 2.3884999999999996, 2.1272499999999983, 1.2609999999999983, 0.9007499999999986, 0.9902500000000005, 1.3547500000000001, 2.3919999999999995, nan, nan, 2.151, 1.338, 1.0485000000000007, 1.418000000000001, nan, nan], zp_timestamp='2026-04-12T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:24:45.217 [DEBUG] [Thread-195334] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:24:45.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:24:45.305 [DEBUG] [Thread-195337] [transport.py] [_log()] starting thread (client mode): 0xae51ae90
2026-04-12T20:24:45.306 [DEBUG] [Thread-195337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:24:45.320 [DEBUG] [Thread-195337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:24:45.320 [INFO] [Thread-195337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:24:45.328 [DEBUG] [Thread-195337] [transport.py] [_log()] client lang: <none>
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] server lang: <none>
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] kex follows: False
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] Compression: none
2026-04-12T20:24:45.329 [DEBUG] [Thread-195337] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:24:45.389 [DEBUG] [Thread-195337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:24:45.389 [DEBUG] [Thread-195337] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:24:45.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:24:45.391 [DEBUG] [Thread-195337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:24:45.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:24:45.448 [DEBUG] [Thread-195337] [transport.py] [_log()] userauth is OK
2026-04-12T20:24:45.448 [DEBUG] [Thread-195337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:24:45.448 [DEBUG] [Thread-195337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:24:45.448 [DEBUG] [Thread-195337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:24:45.449 [DEBUG] [Thread-195337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:24:45.468 [INFO] [Thread-195337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:24:45.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:24:45.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:24:46.302 [DEBUG] [Thread-195337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:24:46.302 [DEBUG] [Thread-195337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:24:46.350 [DEBUG] [Thread-195337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:24:46.350 [DEBUG] [Thread-195337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:24:46.359 [DEBUG] [Thread-195337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:24:46.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:24: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')
2026-04-12T20:24: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
2026-04-12T20:24:46.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:24:46.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:24:46.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:24:46.397 [DEBUG] [Thread-195337] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:24:58.960 [DEBUG] [Thread-195339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:25:07.561 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:25:07.563 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:25:07.832 [DEBUG] [Thread-195340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:25:14.022 [DEBUG] [Thread-195341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:25:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:25:16.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:25:16.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:25:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 24, 46), 0.7638, 95.0108, 0.0, 11.0462, 12.0472, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:25:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:24:46
2026-04-12T20:25:18.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:25:18.181 [DEBUG] [Thread-195342] [transport.py] [_log()] starting thread (client mode): 0xae5b3a90
2026-04-12T20:25:18.181 [DEBUG] [Thread-195342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:25:18.201 [DEBUG] [Thread-195342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:25:18.202 [INFO] [Thread-195342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] client lang: <none>
2026-04-12T20:25:18.205 [DEBUG] [Thread-195342] [transport.py] [_log()] server lang: <none>
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] kex follows: False
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] Compression: none
2026-04-12T20:25:18.206 [DEBUG] [Thread-195342] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:25:18.224 [DEBUG] [Thread-195342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:25:18.225 [DEBUG] [Thread-195342] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:25:18.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:25:18.226 [DEBUG] [Thread-195342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:25:18.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:25:18.228 [DEBUG] [Thread-195342] [transport.py] [_log()] userauth is OK
2026-04-12T20:25:18.228 [DEBUG] [Thread-195342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:25:18.228 [DEBUG] [Thread-195342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:25:18.228 [DEBUG] [Thread-195342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:25:18.229 [DEBUG] [Thread-195342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:25:18.252 [INFO] [Thread-195342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:25:18.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:25:19.539 [DEBUG] [Thread-195342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:25:19.539 [DEBUG] [Thread-195342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:25:19.540 [DEBUG] [Thread-195342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:25:19.581 [DEBUG] [Thread-195342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:25:19.581 [DEBUG] [Thread-195342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:25:19.585 [DEBUG] [Thread-195342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:25:19.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:25:19.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:25:19.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:25:19.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:25:19.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:25:19.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:25:19.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:25:19.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:25:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:25:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.767468 -999.00  +12.00   4.54     93  +11.00 1 2 1 3 1     0    0 0.85 -5.83 zNeSW 4.5 4.5 233.0 7.5 14.0 -13.9 13.8 -13.4 13.6 -11.3 13.9 -12.9
2026-04-12T20:25:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:25:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:25:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.767468
2026-04-12T20:25:19.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:25:19.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:25:19.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:25:19.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:25:19.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:25:19.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:24:46', tmtdew=0.7638, humidity=95.0108, cloud=0.0, wind=11.0462, temperature=12.0472, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:25:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[1.6007499999999997, 1.7572500000000009, 2.076250000000001, 1.7764999999999995, 1.3579999999999997, 1.1612500000000008, 1.242, 1.3032500000000002, nan, 2.338000000000001, 1.757249999999999, 1.7449999999999992, 1.3155000000000001, 1.0592499999999996, 1.1189999999999998, 1.2470000000000008, 2.1422499999999998, nan, 2.3884999999999996, 2.1272499999999983, 1.2609999999999983, 0.9007499999999986, 0.9902500000000005, 1.3547500000000001, 2.3919999999999995, nan, nan, 2.151, 1.338, 1.0485000000000007, 1.418000000000001, nan, nan], zp_timestamp='2026-04-12T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:25:19.618 [DEBUG] [Thread-195342] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:25:19.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:25:19.710 [DEBUG] [Thread-195345] [transport.py] [_log()] starting thread (client mode): 0xae5b2740
2026-04-12T20:25:19.711 [DEBUG] [Thread-195345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:25:19.725 [DEBUG] [Thread-195345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:25:19.725 [INFO] [Thread-195345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:25:19.733 [DEBUG] [Thread-195345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] client lang: <none>
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] server lang: <none>
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] kex follows: False
2026-04-12T20:25:19.734 [DEBUG] [Thread-195345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:25:19.735 [DEBUG] [Thread-195345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:25:19.735 [DEBUG] [Thread-195345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:25:19.735 [DEBUG] [Thread-195345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:25:19.735 [DEBUG] [Thread-195345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:25:19.735 [DEBUG] [Thread-195345] [transport.py] [_log()] Compression: none
2026-04-12T20:25:19.735 [DEBUG] [Thread-195345] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:25:19.793 [DEBUG] [Thread-195345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:25:19.794 [DEBUG] [Thread-195345] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:25:19.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:25:19.795 [DEBUG] [Thread-195345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:25:19.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:25:19.853 [DEBUG] [Thread-195345] [transport.py] [_log()] userauth is OK
2026-04-12T20:25:19.853 [DEBUG] [Thread-195345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:25:19.853 [DEBUG] [Thread-195345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:25:19.853 [DEBUG] [Thread-195345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:25:19.853 [DEBUG] [Thread-195345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:25:19.874 [INFO] [Thread-195345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:25:19.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:25:19.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:25:20.768 [DEBUG] [Thread-195345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:25:20.768 [DEBUG] [Thread-195345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:25:20.815 [DEBUG] [Thread-195345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:25:20.816 [DEBUG] [Thread-195345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:25:20.825 [DEBUG] [Thread-195345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:25:20.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:25:20.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:25:20.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:25:20.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:25:20.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:25:20.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:25:20.863 [DEBUG] [Thread-195345] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:25:29.059 [DEBUG] [Thread-195347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:25:44.119 [DEBUG] [Thread-195348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:25:50.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:25:50.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:25:50.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:25:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 25, 22), 0.42944, 97.022, 0.0, 8.24112, 11.7568, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:25:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:25:22
2026-04-12T20:25:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:25:52.779 [DEBUG] [Thread-195349] [transport.py] [_log()] starting thread (client mode): 0xae5b22f0
2026-04-12T20:25:52.779 [DEBUG] [Thread-195349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:25:52.801 [DEBUG] [Thread-195349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:25:52.801 [INFO] [Thread-195349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:25:52.803 [DEBUG] [Thread-195349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:25:52.803 [DEBUG] [Thread-195349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:25:52.804 [DEBUG] [Thread-195349] [transport.py] [_log()] client lang: <none>
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] server lang: <none>
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] kex follows: False
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:25:52.805 [DEBUG] [Thread-195349] [transport.py] [_log()] Compression: none
2026-04-12T20:25:52.806 [DEBUG] [Thread-195349] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:25:52.826 [DEBUG] [Thread-195349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:25:52.827 [DEBUG] [Thread-195349] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:25:52.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:25:52.828 [DEBUG] [Thread-195349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:25:52.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:25:52.831 [DEBUG] [Thread-195349] [transport.py] [_log()] userauth is OK
2026-04-12T20:25:52.831 [DEBUG] [Thread-195349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:25:52.831 [DEBUG] [Thread-195349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:25:52.831 [DEBUG] [Thread-195349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:25:52.831 [DEBUG] [Thread-195349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:25:52.859 [INFO] [Thread-195349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:25:52.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:25:53.621 [DEBUG] [Thread-195349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:25:53.621 [DEBUG] [Thread-195349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:25:53.622 [DEBUG] [Thread-195349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:25:53.663 [DEBUG] [Thread-195349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:25:53.663 [DEBUG] [Thread-195349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:25:53.668 [DEBUG] [Thread-195349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:25:53.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:25:53.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:25:53.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:25:53.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:25:53.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:25:53.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:25:53.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:25:53.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:25:53.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:25:53.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.767468 -999.00  +12.00   4.54     93  +11.00 1 2 1 3 1     0    0 0.85 -5.83 zNeSW 4.5 4.5 233.0 7.5 14.0 -13.9 13.8 -13.4 13.6 -11.3 13.9 -12.9
2026-04-12T20:25:53.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:25:53.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:25:53.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.767468
2026-04-12T20:25:53.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:25:53.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:25:53.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:25:53.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:25:53.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:25:53.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:25:22', tmtdew=0.42944, humidity=97.022, cloud=0.0, wind=8.24112, temperature=11.7568, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:25:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[1.6007499999999997, 1.7572500000000009, 2.076250000000001, 1.7764999999999995, 1.3579999999999997, 1.1612500000000008, 1.242, 1.3032500000000002, nan, 2.338000000000001, 1.757249999999999, 1.7449999999999992, 1.3155000000000001, 1.0592499999999996, 1.1189999999999998, 1.2470000000000008, 2.1422499999999998, nan, 2.3884999999999996, 2.1272499999999983, 1.2609999999999983, 0.9007499999999986, 0.9902500000000005, 1.3547500000000001, 2.3919999999999995, nan, nan, 2.151, 1.338, 1.0485000000000007, 1.418000000000001, nan, nan], zp_timestamp='2026-04-12T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:25:53.699 [DEBUG] [Thread-195349] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:25:53.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:25:53.793 [DEBUG] [Thread-195352] [transport.py] [_log()] starting thread (client mode): 0xb0f6f520
2026-04-12T20:25:53.793 [DEBUG] [Thread-195352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:25:53.808 [DEBUG] [Thread-195352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:25:53.808 [INFO] [Thread-195352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:25:53.816 [DEBUG] [Thread-195352] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:25:53.816 [DEBUG] [Thread-195352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:25:53.816 [DEBUG] [Thread-195352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:25:53.816 [DEBUG] [Thread-195352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:53.816 [DEBUG] [Thread-195352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:25:53.816 [DEBUG] [Thread-195352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:53.816 [DEBUG] [Thread-195352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] client lang: <none>
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] server lang: <none>
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] kex follows: False
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:25:53.817 [DEBUG] [Thread-195352] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:25:53.818 [DEBUG] [Thread-195352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:25:53.818 [DEBUG] [Thread-195352] [transport.py] [_log()] Compression: none
2026-04-12T20:25:53.818 [DEBUG] [Thread-195352] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:25:53.875 [DEBUG] [Thread-195352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:25:53.875 [DEBUG] [Thread-195352] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:25:53.876 [DEBUG] [Thread-195352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:25:53.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:25:53.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:25:53.931 [DEBUG] [Thread-195352] [transport.py] [_log()] userauth is OK
2026-04-12T20:25:53.931 [DEBUG] [Thread-195352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:25:53.931 [DEBUG] [Thread-195352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:25:53.932 [DEBUG] [Thread-195352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:25:53.932 [DEBUG] [Thread-195352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:25:53.951 [INFO] [Thread-195352] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:25:53.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:25:53.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:25:54.795 [DEBUG] [Thread-195352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:25:54.795 [DEBUG] [Thread-195352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:25:54.843 [DEBUG] [Thread-195352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:25:54.843 [DEBUG] [Thread-195352] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:25:54.852 [DEBUG] [Thread-195352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:25:54.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:25:54.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:25:54.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
2026-04-12T20:25:54.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:25:54.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:25:54.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:25:54.889 [DEBUG] [Thread-195352] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:25:59.155 [DEBUG] [Thread-195354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:26:07.767 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:26:07.768 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:26:07.899 [DEBUG] [Thread-195355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:26:14.210 [DEBUG] [Thread-195356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:26:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:26:24.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:26:24.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:26:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 25, 58), 0.418955, 97.0885, 0.0, 8.43516, 11.7735, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:26:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:25:58
2026-04-12T20:26:26.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:26:26.806 [DEBUG] [Thread-195357] [transport.py] [_log()] starting thread (client mode): 0xb0f8d480
2026-04-12T20:26:26.806 [DEBUG] [Thread-195357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:26:26.822 [DEBUG] [Thread-195357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:26:26.822 [INFO] [Thread-195357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] client lang: <none>
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] server lang: <none>
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] kex follows: False
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:26:26.823 [DEBUG] [Thread-195357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:26:26.824 [DEBUG] [Thread-195357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:26:26.824 [DEBUG] [Thread-195357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:26:26.824 [DEBUG] [Thread-195357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:26:26.824 [DEBUG] [Thread-195357] [transport.py] [_log()] Compression: none
2026-04-12T20:26:26.824 [DEBUG] [Thread-195357] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:26:26.837 [DEBUG] [Thread-195357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:26:26.838 [DEBUG] [Thread-195357] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:26:26.838 [DEBUG] [Thread-195357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:26:26.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:26:26.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:26:26.840 [DEBUG] [Thread-195357] [transport.py] [_log()] userauth is OK
2026-04-12T20:26:26.840 [DEBUG] [Thread-195357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:26:26.840 [DEBUG] [Thread-195357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:26:26.840 [DEBUG] [Thread-195357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:26:26.840 [DEBUG] [Thread-195357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:26:26.876 [INFO] [Thread-195357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:26:26.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:26:27.662 [DEBUG] [Thread-195357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:26:27.662 [DEBUG] [Thread-195357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:26:27.663 [DEBUG] [Thread-195357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:26:27.703 [DEBUG] [Thread-195357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:26:27.703 [DEBUG] [Thread-195357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:26:27.706 [DEBUG] [Thread-195357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:26:27.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:26:27.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:26:27.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:26:27.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:26:27.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:26:27.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:26:27.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:26:27.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:26:27.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:26:27.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.767815 -999.00  +12.00   5.74     93  +11.00 1 2 1 3 1     0    0 0.84 -6.06 zNESW 5.7 5.7 203.2 8.3 13.9 -16.3 13.8 -15.6 13.6 -15.0 13.9 -14.7
2026-04-12T20:26:27.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:26:27.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:26:27.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.767815
2026-04-12T20:26:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:26:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:26:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:26:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:26:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:26:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:25:58', tmtdew=0.418955, humidity=97.0885, cloud=0.0, wind=8.43516, temperature=11.7735, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:25:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:26:27.729 [DEBUG] [Thread-195357] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:26:27.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:26:27.825 [DEBUG] [Thread-195360] [transport.py] [_log()] starting thread (client mode): 0xae5b3a90
2026-04-12T20:26:27.825 [DEBUG] [Thread-195360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:26:27.840 [DEBUG] [Thread-195360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:26:27.840 [INFO] [Thread-195360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] client lang: <none>
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] server lang: <none>
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] kex follows: False
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] Compression: none
2026-04-12T20:26:27.848 [DEBUG] [Thread-195360] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:26:27.910 [DEBUG] [Thread-195360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:26:27.911 [DEBUG] [Thread-195360] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:26:27.912 [DEBUG] [Thread-195360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:26:27.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:26:27.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:26:27.969 [DEBUG] [Thread-195360] [transport.py] [_log()] userauth is OK
2026-04-12T20:26:27.969 [DEBUG] [Thread-195360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:26:27.969 [DEBUG] [Thread-195360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:26:27.970 [DEBUG] [Thread-195360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:26:27.970 [DEBUG] [Thread-195360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:26:27.991 [INFO] [Thread-195360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:26:27.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:26:27.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:26:28.824 [DEBUG] [Thread-195360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:26:28.825 [DEBUG] [Thread-195360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:26:28.877 [DEBUG] [Thread-195360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:26:28.878 [DEBUG] [Thread-195360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:26:28.887 [DEBUG] [Thread-195360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:26:28.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:26:28.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:26: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
2026-04-12T20:26:28.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:26:28.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:26:28.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:26:28.926 [DEBUG] [Thread-195360] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:26:29.248 [DEBUG] [Thread-195362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:26:44.314 [DEBUG] [Thread-195363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:26:58.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:26:58.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:26:58.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:26:59.355 [DEBUG] [Thread-195364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:27:00.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 26, 33), 0.73774, 95.1771, 0.0, 11.893, 12.1138, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:27:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:26:33
2026-04-12T20:27:00.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:27:00.833 [DEBUG] [Thread-195365] [transport.py] [_log()] starting thread (client mode): 0xb0f8cb80
2026-04-12T20:27:00.833 [DEBUG] [Thread-195365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:27:00.852 [DEBUG] [Thread-195365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:27:00.852 [INFO] [Thread-195365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] client lang: <none>
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] server lang: <none>
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] kex follows: False
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:27:00.855 [DEBUG] [Thread-195365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:27:00.856 [DEBUG] [Thread-195365] [transport.py] [_log()] Compression: none
2026-04-12T20:27:00.856 [DEBUG] [Thread-195365] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:27:00.872 [DEBUG] [Thread-195365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:27:00.872 [DEBUG] [Thread-195365] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:27:00.872 [DEBUG] [Thread-195365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:27:00.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:27:00.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:27:00.873 [DEBUG] [Thread-195365] [transport.py] [_log()] userauth is OK
2026-04-12T20:27:00.873 [DEBUG] [Thread-195365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:27:00.873 [DEBUG] [Thread-195365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:27:00.873 [DEBUG] [Thread-195365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:27:00.873 [DEBUG] [Thread-195365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:27:00.888 [INFO] [Thread-195365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:27:00.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:27:01.667 [DEBUG] [Thread-195365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:27:01.667 [DEBUG] [Thread-195365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:27:01.667 [DEBUG] [Thread-195365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:27:01.709 [DEBUG] [Thread-195365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:27:01.709 [DEBUG] [Thread-195365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:27:01.713 [DEBUG] [Thread-195365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:27:01.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:27:01.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:27:01.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:27:01.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:27:01.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:27:01.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:27:01.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.768162 -999.00  +12.00   5.23     93  +11.00 1 2 1 3 1     0    0 0.85 -6.30 zNESW 5.2 5.2 205.8 6.2 13.9 -15.0 13.8 -13.7 13.6 -13.6 13.8 -15.1
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.768162
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:27:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:26:33', tmtdew=0.73774, humidity=95.1771, cloud=0.0, wind=11.893, temperature=12.1138, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:26:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:27:01.745 [DEBUG] [Thread-195365] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:27:01.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:27:01.829 [DEBUG] [Thread-195368] [transport.py] [_log()] starting thread (client mode): 0xae5b3fd0
2026-04-12T20:27:01.829 [DEBUG] [Thread-195368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:27:01.844 [DEBUG] [Thread-195368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:27:01.844 [INFO] [Thread-195368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:27:01.852 [DEBUG] [Thread-195368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:27:01.852 [DEBUG] [Thread-195368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:27:01.852 [DEBUG] [Thread-195368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] client lang: <none>
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] server lang: <none>
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] kex follows: False
2026-04-12T20:27:01.853 [DEBUG] [Thread-195368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:27:01.854 [DEBUG] [Thread-195368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:27:01.854 [DEBUG] [Thread-195368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:27:01.854 [DEBUG] [Thread-195368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:27:01.854 [DEBUG] [Thread-195368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:27:01.855 [DEBUG] [Thread-195368] [transport.py] [_log()] Compression: none
2026-04-12T20:27:01.855 [DEBUG] [Thread-195368] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:27:01.907 [DEBUG] [Thread-195368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:27:01.907 [DEBUG] [Thread-195368] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:27:01.908 [DEBUG] [Thread-195368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:27:01.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:27:01.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:27:01.964 [DEBUG] [Thread-195368] [transport.py] [_log()] userauth is OK
2026-04-12T20:27:01.964 [DEBUG] [Thread-195368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:27:01.964 [DEBUG] [Thread-195368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:27:01.964 [DEBUG] [Thread-195368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:27:01.964 [DEBUG] [Thread-195368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:27:01.978 [INFO] [Thread-195368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:27:01.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:27:01.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:27:02.820 [DEBUG] [Thread-195368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:27:02.820 [DEBUG] [Thread-195368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:27:02.868 [DEBUG] [Thread-195368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:27:02.868 [DEBUG] [Thread-195368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:27:02.878 [DEBUG] [Thread-195368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:27:02.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:27:02.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:27:02.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:27:02.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:27:02.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:27:02.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:27:02.915 [DEBUG] [Thread-195368] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:27:07.960 [DEBUG] [Thread-195370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:27:07.973 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:27:07.974 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:27:14.396 [DEBUG] [Thread-195371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:27:29.445 [DEBUG] [Thread-195372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:27:32.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:27:32.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:27:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:27:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 27, 9), 0.416195, 97.1049, 0.0, 9.45828, 11.7402, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:27:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:27:09
2026-04-12T20:27:34.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:27:34.806 [DEBUG] [Thread-195373] [transport.py] [_log()] starting thread (client mode): 0xae50a4a0
2026-04-12T20:27:34.806 [DEBUG] [Thread-195373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:27:34.826 [DEBUG] [Thread-195373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:27:34.826 [INFO] [Thread-195373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:27:34.829 [DEBUG] [Thread-195373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:27:34.829 [DEBUG] [Thread-195373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:27:34.829 [DEBUG] [Thread-195373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:27:34.829 [DEBUG] [Thread-195373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:34.829 [DEBUG] [Thread-195373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:34.829 [DEBUG] [Thread-195373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] client lang: <none>
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] server lang: <none>
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] kex follows: False
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] Compression: none
2026-04-12T20:27:34.830 [DEBUG] [Thread-195373] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:27:34.847 [DEBUG] [Thread-195373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:27:34.847 [DEBUG] [Thread-195373] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:27:34.848 [DEBUG] [Thread-195373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:27:34.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:27:34.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:27:34.849 [DEBUG] [Thread-195373] [transport.py] [_log()] userauth is OK
2026-04-12T20:27:34.850 [DEBUG] [Thread-195373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:27:34.850 [DEBUG] [Thread-195373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:27:34.850 [DEBUG] [Thread-195373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:27:34.850 [DEBUG] [Thread-195373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:27:34.884 [INFO] [Thread-195373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:27:34.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:27:35.672 [DEBUG] [Thread-195373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:27:35.673 [DEBUG] [Thread-195373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:27:35.673 [DEBUG] [Thread-195373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:27:35.713 [DEBUG] [Thread-195373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:27:35.713 [DEBUG] [Thread-195373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:27:35.717 [DEBUG] [Thread-195373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:27:35.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:27:35.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:27:35.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:27:35.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:27:35.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:27:35.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:27:35.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:27:35.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:27:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:27:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.768510 -999.00  +12.00   5.20     93  +11.00 1 2 1 3 1     0    0 0.82 -6.88 zNESW 5.2 5.2 198.0 7.4 13.9 -11.4 13.8 -10.3 13.6 -9.9 13.9 -13.1
2026-04-12T20:27:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:27:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:27:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.768510
2026-04-12T20:27:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:27:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:27:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:27:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:27:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:27:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:27:09', tmtdew=0.416195, humidity=97.1049, cloud=0.0, wind=9.45828, temperature=11.7402, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:26:39.264', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:27:35.747 [DEBUG] [Thread-195373] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:27:35.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:27:35.850 [DEBUG] [Thread-195376] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-12T20:27:35.850 [DEBUG] [Thread-195376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:27:35.870 [DEBUG] [Thread-195376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:27:35.870 [INFO] [Thread-195376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:27:35.880 [DEBUG] [Thread-195376] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:27:35.880 [DEBUG] [Thread-195376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:27:35.880 [DEBUG] [Thread-195376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:27:35.880 [DEBUG] [Thread-195376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] client lang: <none>
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] server lang: <none>
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] kex follows: False
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] Compression: none
2026-04-12T20:27:35.881 [DEBUG] [Thread-195376] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:27:35.941 [DEBUG] [Thread-195376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:27:35.942 [DEBUG] [Thread-195376] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:27:35.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:27:35.943 [DEBUG] [Thread-195376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:27:35.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:27:36.005 [DEBUG] [Thread-195376] [transport.py] [_log()] userauth is OK
2026-04-12T20:27:36.005 [DEBUG] [Thread-195376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:27:36.006 [DEBUG] [Thread-195376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:27:36.006 [DEBUG] [Thread-195376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:27:36.006 [DEBUG] [Thread-195376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:27:36.025 [INFO] [Thread-195376] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:27:36.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:27:36.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:27:36.853 [DEBUG] [Thread-195376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:27:36.853 [DEBUG] [Thread-195376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:27:36.901 [DEBUG] [Thread-195376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:27:36.901 [DEBUG] [Thread-195376] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:27:36.910 [DEBUG] [Thread-195376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:27:36.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:27:36.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:27:36.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:27:36.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:27:36.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:27:36.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:27:36.947 [DEBUG] [Thread-195376] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:27:44.483 [DEBUG] [Thread-195378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:27:59.544 [DEBUG] [Thread-195379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:28:06.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:28:06.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:28:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:28:08.026 [DEBUG] [Thread-195380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:28:08.179 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:28:08.180 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:28:08.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 27, 45), 0.72729, 95.243, 0.0, 12.1046, 12.1135, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:28:08.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:27:45
2026-04-12T20:28:08.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:28:08.813 [DEBUG] [Thread-195381] [transport.py] [_log()] starting thread (client mode): 0xb0f8cfd0
2026-04-12T20:28:08.813 [DEBUG] [Thread-195381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:28:08.833 [DEBUG] [Thread-195381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:28:08.833 [INFO] [Thread-195381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:28:08.836 [DEBUG] [Thread-195381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:28:08.836 [DEBUG] [Thread-195381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] client lang: <none>
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] server lang: <none>
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] kex follows: False
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:28:08.837 [DEBUG] [Thread-195381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:28:08.838 [DEBUG] [Thread-195381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:28:08.838 [DEBUG] [Thread-195381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:28:08.838 [DEBUG] [Thread-195381] [transport.py] [_log()] Compression: none
2026-04-12T20:28:08.838 [DEBUG] [Thread-195381] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:28:08.855 [DEBUG] [Thread-195381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:28:08.855 [DEBUG] [Thread-195381] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:28:08.856 [DEBUG] [Thread-195381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:28:08.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:28:08.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:28:08.858 [DEBUG] [Thread-195381] [transport.py] [_log()] userauth is OK
2026-04-12T20:28:08.859 [DEBUG] [Thread-195381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:28:08.859 [DEBUG] [Thread-195381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:28:08.859 [DEBUG] [Thread-195381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:28:08.859 [DEBUG] [Thread-195381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:28:08.882 [INFO] [Thread-195381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:28:08.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:28:09.670 [DEBUG] [Thread-195381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:28:09.670 [DEBUG] [Thread-195381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:28:09.671 [DEBUG] [Thread-195381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:28:09.711 [DEBUG] [Thread-195381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:28:09.712 [DEBUG] [Thread-195381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:28:09.714 [DEBUG] [Thread-195381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:28:09.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:28:09.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:28:09.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:28:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:28:09.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:28:09.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:28:09.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:28:09.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:28:09.739 [DEBUG] [Thread-195381] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:28:09.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:28:09.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.768857 -999.00  +12.00   6.15     93  +11.00 1 2 1 3 1     0    0 0.81 -6.83 zNESW 6.2 6.2 226.1 7.5 13.9 -13.5 13.8 -13.2 13.6 -10.9 13.9 -10.7
2026-04-12T20:28:09.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:28:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:28:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.768857
2026-04-12T20:28:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:28:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:28:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:28:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:28:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:28:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:27:45', tmtdew=0.72729, humidity=95.243, cloud=0.0, wind=12.1046, temperature=12.1135, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:27:09.245', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:28:09.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:28:09.847 [DEBUG] [Thread-195384] [transport.py] [_log()] starting thread (client mode): 0xae5b0b50
2026-04-12T20:28:09.847 [DEBUG] [Thread-195384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:28:09.862 [DEBUG] [Thread-195384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:28:09.862 [INFO] [Thread-195384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:28:09.869 [DEBUG] [Thread-195384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:28:09.869 [DEBUG] [Thread-195384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:28:09.869 [DEBUG] [Thread-195384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:28:09.869 [DEBUG] [Thread-195384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] client lang: <none>
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] server lang: <none>
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] kex follows: False
2026-04-12T20:28:09.870 [DEBUG] [Thread-195384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:28:09.871 [DEBUG] [Thread-195384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:28:09.871 [DEBUG] [Thread-195384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:28:09.871 [DEBUG] [Thread-195384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:28:09.871 [DEBUG] [Thread-195384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:28:09.871 [DEBUG] [Thread-195384] [transport.py] [_log()] Compression: none
2026-04-12T20:28:09.871 [DEBUG] [Thread-195384] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:28:09.927 [DEBUG] [Thread-195384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:28:09.927 [DEBUG] [Thread-195384] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:28:09.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:28:09.929 [DEBUG] [Thread-195384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:28:09.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:28:09.983 [DEBUG] [Thread-195384] [transport.py] [_log()] userauth is OK
2026-04-12T20:28:09.983 [DEBUG] [Thread-195384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:28:09.983 [DEBUG] [Thread-195384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:28:09.983 [DEBUG] [Thread-195384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:28:09.983 [DEBUG] [Thread-195384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:28:10.000 [INFO] [Thread-195384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:28:10.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:28:10.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:28:10.838 [DEBUG] [Thread-195384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:28:10.838 [DEBUG] [Thread-195384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:28:10.886 [DEBUG] [Thread-195384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:28:10.886 [DEBUG] [Thread-195384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:28:10.895 [DEBUG] [Thread-195384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:28:10.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:28:10.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:28:10.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:28:10.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:28:10.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:28:10.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:28:10.930 [DEBUG] [Thread-195384] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:28:14.576 [DEBUG] [Thread-195386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:28:29.633 [DEBUG] [Thread-195387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:28:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:28:40.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:28:40.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:28:42.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 28, 20), 0.41608, 97.1051, 0.0, 8.69976, 11.7238, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:28:42.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:28:20
2026-04-12T20:28:42.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:28:42.867 [DEBUG] [Thread-195388] [transport.py] [_log()] starting thread (client mode): 0xb0f6c190
2026-04-12T20:28:42.867 [DEBUG] [Thread-195388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:28:42.888 [DEBUG] [Thread-195388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:28:42.888 [INFO] [Thread-195388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:28:42.891 [DEBUG] [Thread-195388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:28:42.891 [DEBUG] [Thread-195388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:28:42.891 [DEBUG] [Thread-195388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:28:42.891 [DEBUG] [Thread-195388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:42.891 [DEBUG] [Thread-195388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] client lang: <none>
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] server lang: <none>
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] kex follows: False
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] Compression: none
2026-04-12T20:28:42.892 [DEBUG] [Thread-195388] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:28:42.912 [DEBUG] [Thread-195388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:28:42.913 [DEBUG] [Thread-195388] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:28:42.913 [DEBUG] [Thread-195388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:28:42.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:28:42.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:28:42.916 [DEBUG] [Thread-195388] [transport.py] [_log()] userauth is OK
2026-04-12T20:28:42.916 [DEBUG] [Thread-195388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:28:42.916 [DEBUG] [Thread-195388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:28:42.916 [DEBUG] [Thread-195388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:28:42.916 [DEBUG] [Thread-195388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:28:42.951 [INFO] [Thread-195388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:28:42.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:28:43.736 [DEBUG] [Thread-195388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:28:43.736 [DEBUG] [Thread-195388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:28:43.736 [DEBUG] [Thread-195388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:28:43.777 [DEBUG] [Thread-195388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:28:43.777 [DEBUG] [Thread-195388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:28:43.780 [DEBUG] [Thread-195388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:28:43.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:28:43.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:28:43.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:28:43.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:28:43.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:28:43.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:28:43.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:28:43.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:28:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:28:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.769551 -999.00  +12.00   3.89     93  +11.00 1 2 1 3 1     0    0 0.83 -5.95 .nESW 3.9 3.9 248.3 5.8 13.9 -19.9 13.8 -18.9 13.6 -17.2 13.8 -16.8
2026-04-12T20:28:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:28:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:28:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.769551
2026-04-12T20:28:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:28:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:28:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:28:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:28:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:28:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:28:20', tmtdew=0.41608, humidity=97.1051, cloud=0.0, wind=8.69976, temperature=11.7238, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:28:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:28:43.809 [DEBUG] [Thread-195388] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:28:43.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:28:43.904 [DEBUG] [Thread-195391] [transport.py] [_log()] starting thread (client mode): 0xae5e4a00
2026-04-12T20:28:43.904 [DEBUG] [Thread-195391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:28:43.918 [DEBUG] [Thread-195391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:28:43.918 [INFO] [Thread-195391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:28:43.926 [DEBUG] [Thread-195391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] client lang: <none>
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] server lang: <none>
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] kex follows: False
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] Compression: none
2026-04-12T20:28:43.927 [DEBUG] [Thread-195391] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:28:43.984 [DEBUG] [Thread-195391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:28:43.984 [DEBUG] [Thread-195391] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:28:43.984 [DEBUG] [Thread-195391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:28:43.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:28:43.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:28:44.040 [DEBUG] [Thread-195391] [transport.py] [_log()] userauth is OK
2026-04-12T20:28:44.040 [DEBUG] [Thread-195391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:28:44.040 [DEBUG] [Thread-195391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:28:44.040 [DEBUG] [Thread-195391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:28:44.040 [DEBUG] [Thread-195391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:28:44.058 [INFO] [Thread-195391] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:28:44.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:28:44.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:28:44.673 [DEBUG] [Thread-195393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:28:44.881 [DEBUG] [Thread-195391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:28:44.881 [DEBUG] [Thread-195391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:28:44.929 [DEBUG] [Thread-195391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:28:44.929 [DEBUG] [Thread-195391] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:28:44.938 [DEBUG] [Thread-195391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:28:44.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:28: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')
2026-04-12T20:28:44.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:28:44.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:28:44.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:28:44.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:28:44.975 [DEBUG] [Thread-195391] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:28:59.723 [DEBUG] [Thread-195394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:29:08.096 [DEBUG] [Thread-195395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:29:08.388 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:29:08.389 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:29:14.767 [DEBUG] [Thread-195396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:29:14.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:29:14.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:29:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:29:16.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 28, 56), 0.41345, 97.1217, 0.0, 8.15292, 11.7238, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:29:16.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:28:56
2026-04-12T20:29:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:29:16.853 [DEBUG] [Thread-195397] [transport.py] [_log()] starting thread (client mode): 0xae5a7340
2026-04-12T20:29:16.853 [DEBUG] [Thread-195397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:29:16.874 [DEBUG] [Thread-195397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:29:16.874 [INFO] [Thread-195397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:29:16.878 [DEBUG] [Thread-195397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:29:16.878 [DEBUG] [Thread-195397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:29:16.878 [DEBUG] [Thread-195397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:29:16.878 [DEBUG] [Thread-195397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] client lang: <none>
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] server lang: <none>
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] kex follows: False
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:29:16.879 [DEBUG] [Thread-195397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:29:16.880 [DEBUG] [Thread-195397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:29:16.880 [DEBUG] [Thread-195397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:29:16.880 [DEBUG] [Thread-195397] [transport.py] [_log()] Compression: none
2026-04-12T20:29:16.880 [DEBUG] [Thread-195397] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:29:16.898 [DEBUG] [Thread-195397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:29:16.899 [DEBUG] [Thread-195397] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:29:16.900 [DEBUG] [Thread-195397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:29:16.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:29:16.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:29:16.902 [DEBUG] [Thread-195397] [transport.py] [_log()] userauth is OK
2026-04-12T20:29:16.902 [DEBUG] [Thread-195397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:29:16.902 [DEBUG] [Thread-195397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:29:16.902 [DEBUG] [Thread-195397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:29:16.902 [DEBUG] [Thread-195397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:29:16.937 [INFO] [Thread-195397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:29:16.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:29:17.742 [DEBUG] [Thread-195397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:29:17.742 [DEBUG] [Thread-195397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:29:17.743 [DEBUG] [Thread-195397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:29:17.784 [DEBUG] [Thread-195397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:29:17.784 [DEBUG] [Thread-195397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:29:17.787 [DEBUG] [Thread-195397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:29:17.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:29:17.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:29:17.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:29:17.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:29:17.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:29:17.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:29:17.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:29:17.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:29:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:29:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.769898 -999.00  +12.00   7.08     93  +11.00 1 2 1 3 1     0    0 0.83 -6.02 .nESW 7.1 7.1 206.4 8.0 13.9 -17.7 13.7 -16.3 13.5 -14.7 13.8 -17.2
2026-04-12T20:29:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:29:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:29:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.769898
2026-04-12T20:29:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:29:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:29:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:29:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:29:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:29:17.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:28:56', tmtdew=0.41345, humidity=97.1217, cloud=0.0, wind=8.15292, temperature=11.7238, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:28:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:29:17.812 [DEBUG] [Thread-195397] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:29:17.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:29:17.901 [DEBUG] [Thread-195400] [transport.py] [_log()] starting thread (client mode): 0xb0f8cfd0
2026-04-12T20:29:17.902 [DEBUG] [Thread-195400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:29:17.916 [DEBUG] [Thread-195400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:29:17.916 [INFO] [Thread-195400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:17.924 [DEBUG] [Thread-195400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] client lang: <none>
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] server lang: <none>
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] kex follows: False
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:29:17.925 [DEBUG] [Thread-195400] [transport.py] [_log()] Compression: none
2026-04-12T20:29:17.926 [DEBUG] [Thread-195400] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:29:17.980 [DEBUG] [Thread-195400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:29:17.981 [DEBUG] [Thread-195400] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:29:17.981 [DEBUG] [Thread-195400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:29:17.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:29:17.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:29:18.037 [DEBUG] [Thread-195400] [transport.py] [_log()] userauth is OK
2026-04-12T20:29:18.038 [DEBUG] [Thread-195400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:29:18.038 [DEBUG] [Thread-195400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:29:18.038 [DEBUG] [Thread-195400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:29:18.038 [DEBUG] [Thread-195400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:29:18.056 [INFO] [Thread-195400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:29:18.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:29:18.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:29:18.903 [DEBUG] [Thread-195400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:29:18.903 [DEBUG] [Thread-195400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:29:18.951 [DEBUG] [Thread-195400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:29:18.951 [DEBUG] [Thread-195400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:29:18.960 [DEBUG] [Thread-195400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:29:18.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:29:18.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:29:18.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:29:18.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:29:18.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:29:18.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:29:18.997 [DEBUG] [Thread-195400] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:29:29.806 [DEBUG] [Thread-195402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:29:44.868 [DEBUG] [Thread-195403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:29:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:29:49.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:29:49.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:29:50.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 29, 31), 0.405695, 97.1716, 0.0, 8.85852, 11.757, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:29:50.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:29:31
2026-04-12T20:29:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:29:50.819 [DEBUG] [Thread-195404] [transport.py] [_log()] starting thread (client mode): 0xae5b3160
2026-04-12T20:29:50.819 [DEBUG] [Thread-195404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:29:50.839 [DEBUG] [Thread-195404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:29:50.839 [INFO] [Thread-195404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] client lang: <none>
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] server lang: <none>
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] kex follows: False
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:29:50.842 [DEBUG] [Thread-195404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:29:50.843 [DEBUG] [Thread-195404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:29:50.843 [DEBUG] [Thread-195404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:29:50.843 [DEBUG] [Thread-195404] [transport.py] [_log()] Compression: none
2026-04-12T20:29:50.843 [DEBUG] [Thread-195404] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:29:50.858 [DEBUG] [Thread-195404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:29:50.859 [DEBUG] [Thread-195404] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:29:50.859 [DEBUG] [Thread-195404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:29:50.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:29:50.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:29:50.861 [DEBUG] [Thread-195404] [transport.py] [_log()] userauth is OK
2026-04-12T20:29:50.862 [DEBUG] [Thread-195404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:29:50.862 [DEBUG] [Thread-195404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:29:50.862 [DEBUG] [Thread-195404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:29:50.862 [DEBUG] [Thread-195404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:29:50.897 [INFO] [Thread-195404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:29:50.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:29:51.699 [DEBUG] [Thread-195404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:29:51.699 [DEBUG] [Thread-195404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:29:51.699 [DEBUG] [Thread-195404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:29:51.740 [DEBUG] [Thread-195404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:29:51.740 [DEBUG] [Thread-195404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:29:51.744 [DEBUG] [Thread-195404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:29:51.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:29:51.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:29:51.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:29:51.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:29:51.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:29:51.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:29:51.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:29:51.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:29:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:29:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.770246 -999.00  +12.00   6.11     93  +11.00 1 2 1 3 1     0    0 0.88 -5.69 .NESW 6.1 6.1 195.0 7.7 13.9 -19.7 13.7 -19.1 13.4 -17.0 13.8 -17.1
2026-04-12T20:29:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:29:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:29:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.770246
2026-04-12T20:29:51.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:29:51.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:29:51.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:29:51.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:29:51.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:29:51.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:29:31', tmtdew=0.405695, humidity=97.1716, cloud=0.0, wind=8.85852, temperature=11.757, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:29:09.254', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:29:51.774 [DEBUG] [Thread-195404] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:29:51.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:29:51.878 [DEBUG] [Thread-195407] [transport.py] [_log()] starting thread (client mode): 0xb0f414e0
2026-04-12T20:29:51.879 [DEBUG] [Thread-195407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:29:51.893 [DEBUG] [Thread-195407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:29:51.893 [INFO] [Thread-195407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:29:51.900 [DEBUG] [Thread-195407] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:29:51.900 [DEBUG] [Thread-195407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] client lang: <none>
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] server lang: <none>
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] kex follows: False
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] Compression: none
2026-04-12T20:29:51.901 [DEBUG] [Thread-195407] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:29:51.959 [DEBUG] [Thread-195407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:29:51.959 [DEBUG] [Thread-195407] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:29:51.960 [DEBUG] [Thread-195407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:29:51.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:29:51.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:29:52.015 [DEBUG] [Thread-195407] [transport.py] [_log()] userauth is OK
2026-04-12T20:29:52.015 [DEBUG] [Thread-195407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:29:52.015 [DEBUG] [Thread-195407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:29:52.016 [DEBUG] [Thread-195407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:29:52.016 [DEBUG] [Thread-195407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:29:52.035 [INFO] [Thread-195407] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:29:52.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:29:52.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:29:52.841 [DEBUG] [Thread-195407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:29:52.842 [DEBUG] [Thread-195407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:29:52.890 [DEBUG] [Thread-195407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:29:52.890 [DEBUG] [Thread-195407] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:29:52.900 [DEBUG] [Thread-195407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:29:52.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:29:52.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:29:52.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
2026-04-12T20:29:52.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:29:52.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:29:52.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:29:52.939 [DEBUG] [Thread-195407] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:29:59.904 [DEBUG] [Thread-195409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:30:08.163 [DEBUG] [Thread-195410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:30:08.591 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:30:08.593 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:30:14.958 [DEBUG] [Thread-195411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:30:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:30:22.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:30:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:30:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 30, 7), 0.402995, 97.1882, 0.0, 9.0702, 11.7404, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:30:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:30:07
2026-04-12T20:30:24.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:30:24.684 [DEBUG] [Thread-195412] [transport.py] [_log()] starting thread (client mode): 0xae5193f0
2026-04-12T20:30:24.684 [DEBUG] [Thread-195412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:30:24.705 [DEBUG] [Thread-195412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:30:24.705 [INFO] [Thread-195412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:30:24.708 [DEBUG] [Thread-195412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:30:24.708 [DEBUG] [Thread-195412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:30:24.708 [DEBUG] [Thread-195412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:30:24.708 [DEBUG] [Thread-195412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:30:24.708 [DEBUG] [Thread-195412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] client lang: <none>
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] server lang: <none>
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] kex follows: False
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] Compression: none
2026-04-12T20:30:24.709 [DEBUG] [Thread-195412] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:30:24.728 [DEBUG] [Thread-195412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:30:24.729 [DEBUG] [Thread-195412] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:30:24.729 [DEBUG] [Thread-195412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:30:24.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:30:24.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:30:24.731 [DEBUG] [Thread-195412] [transport.py] [_log()] userauth is OK
2026-04-12T20:30:24.732 [DEBUG] [Thread-195412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:30:24.732 [DEBUG] [Thread-195412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:30:24.732 [DEBUG] [Thread-195412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:30:24.732 [DEBUG] [Thread-195412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:30:24.756 [INFO] [Thread-195412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:30:24.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:30:25.894 [DEBUG] [Thread-195412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:30:25.894 [DEBUG] [Thread-195412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:30:25.894 [DEBUG] [Thread-195412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:30:25.936 [DEBUG] [Thread-195412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:30:25.936 [DEBUG] [Thread-195412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:30:25.940 [DEBUG] [Thread-195412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:30:25.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:30:25.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:30:25.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:30:25.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:30:25.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:30:25.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:30:25.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:30:25.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:30:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:30:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.770593 -999.00  +12.00   5.49     93  +11.00 1 2 1 3 1     0    0 0.86 -5.19 .NESW 5.5 5.5 216.8 8.8 13.8 -18.3 13.7 -17.1 13.4 -17.2 13.8 -18.5
2026-04-12T20:30:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:30:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:30:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.770593
2026-04-12T20:30:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:30:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:30:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:30:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:30:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:30:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:30:07', tmtdew=0.402995, humidity=97.1882, cloud=0.0, wind=9.0702, temperature=11.7404, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:29:39.235', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:30:25.971 [DEBUG] [Thread-195412] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:30:26.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:30:26.053 [DEBUG] [Thread-195415] [transport.py] [_log()] starting thread (client mode): 0xb0f8dba0
2026-04-12T20:30:26.053 [DEBUG] [Thread-195415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:30:26.068 [DEBUG] [Thread-195415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:30:26.068 [INFO] [Thread-195415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:30:26.076 [DEBUG] [Thread-195415] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:30:26.076 [DEBUG] [Thread-195415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:30:26.076 [DEBUG] [Thread-195415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:30:26.076 [DEBUG] [Thread-195415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:30:26.076 [DEBUG] [Thread-195415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:30:26.076 [DEBUG] [Thread-195415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] client lang: <none>
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] server lang: <none>
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] kex follows: False
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:30:26.077 [DEBUG] [Thread-195415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:30:26.078 [DEBUG] [Thread-195415] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:30:26.078 [DEBUG] [Thread-195415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:30:26.078 [DEBUG] [Thread-195415] [transport.py] [_log()] Compression: none
2026-04-12T20:30:26.078 [DEBUG] [Thread-195415] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:30:26.137 [DEBUG] [Thread-195415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:30:26.138 [DEBUG] [Thread-195415] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:30:26.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:30:26.140 [DEBUG] [Thread-195415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:30:26.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:30:26.200 [DEBUG] [Thread-195415] [transport.py] [_log()] userauth is OK
2026-04-12T20:30:26.201 [DEBUG] [Thread-195415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:30:26.201 [DEBUG] [Thread-195415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:30:26.201 [DEBUG] [Thread-195415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:30:26.202 [DEBUG] [Thread-195415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:30:26.231 [INFO] [Thread-195415] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:30:26.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:30:26.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:30:27.069 [DEBUG] [Thread-195415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:30:27.069 [DEBUG] [Thread-195415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:30:27.117 [DEBUG] [Thread-195415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:30:27.117 [DEBUG] [Thread-195415] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:30:27.126 [DEBUG] [Thread-195415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:30:27.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:30:27.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:30:27.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:30:27.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:30:27.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:30:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:30:27.164 [DEBUG] [Thread-195415] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:30:29.992 [DEBUG] [Thread-195417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:30:45.044 [DEBUG] [Thread-195418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:30:57.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:30:57.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:30:57.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:30:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 30, 42), 0.6956, 95.443, 0.0, 10.3054, 12.1142, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:30:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:30:42
2026-04-12T20:30:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:30:59.028 [DEBUG] [Thread-195419] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1f0
2026-04-12T20:30:59.028 [DEBUG] [Thread-195419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:30:59.047 [DEBUG] [Thread-195419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:30:59.047 [INFO] [Thread-195419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] client lang: <none>
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] server lang: <none>
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] kex follows: False
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] Compression: none
2026-04-12T20:30:59.051 [DEBUG] [Thread-195419] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:30:59.069 [DEBUG] [Thread-195419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:30:59.070 [DEBUG] [Thread-195419] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:30:59.070 [DEBUG] [Thread-195419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:30:59.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:30:59.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:30:59.114 [DEBUG] [Thread-195419] [transport.py] [_log()] userauth is OK
2026-04-12T20:30:59.114 [DEBUG] [Thread-195419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:30:59.114 [DEBUG] [Thread-195419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:30:59.114 [DEBUG] [Thread-195419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:30:59.114 [DEBUG] [Thread-195419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:30:59.141 [INFO] [Thread-195419] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:30:59.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:30:59.957 [DEBUG] [Thread-195419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:30:59.957 [DEBUG] [Thread-195419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:30:59.958 [DEBUG] [Thread-195419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:31:00.000 [DEBUG] [Thread-195419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:31:00.000 [DEBUG] [Thread-195419] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:31:00.004 [DEBUG] [Thread-195419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:31:00.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:31:00.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:31:00.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:31:00.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:31:00.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:31:00.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:31:00.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:31:00.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:31:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:31:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.770940 -999.00  +11.90   5.39     93  +11.00 1 2 1 3 1     0    0 0.87 -4.81 .NESW 5.4 5.4 214.2 7.2 13.8 -19.0 13.6 -17.8 13.4 -16.3 13.7 -18.1
2026-04-12T20:31:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:31:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:31:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.770940
2026-04-12T20:31:00.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:31:00.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:31:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:31:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:31:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:31:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:30:42', tmtdew=0.6956, humidity=95.443, cloud=0.0, wind=10.3054, temperature=12.1142, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:30:09.216', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:31:00.033 [DEBUG] [Thread-195419] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:31:00.078 [DEBUG] [Thread-195422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:31:00.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:31:00.126 [DEBUG] [Thread-195423] [transport.py] [_log()] starting thread (client mode): 0xae5e5180
2026-04-12T20:31:00.126 [DEBUG] [Thread-195423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:31:00.141 [DEBUG] [Thread-195423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:31:00.141 [INFO] [Thread-195423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] client lang: <none>
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] server lang: <none>
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] kex follows: False
2026-04-12T20:31:00.149 [DEBUG] [Thread-195423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:31:00.150 [DEBUG] [Thread-195423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:31:00.150 [DEBUG] [Thread-195423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:31:00.150 [DEBUG] [Thread-195423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:31:00.150 [DEBUG] [Thread-195423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:31:00.150 [DEBUG] [Thread-195423] [transport.py] [_log()] Compression: none
2026-04-12T20:31:00.150 [DEBUG] [Thread-195423] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:31:00.208 [DEBUG] [Thread-195423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:31:00.209 [DEBUG] [Thread-195423] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:31:00.209 [DEBUG] [Thread-195423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:31:00.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:31:00.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:31:00.264 [DEBUG] [Thread-195423] [transport.py] [_log()] userauth is OK
2026-04-12T20:31:00.264 [DEBUG] [Thread-195423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:31:00.264 [DEBUG] [Thread-195423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:31:00.264 [DEBUG] [Thread-195423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:31:00.264 [DEBUG] [Thread-195423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:31:00.281 [INFO] [Thread-195423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:31:00.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:31:00.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:31:01.104 [DEBUG] [Thread-195423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:31:01.104 [DEBUG] [Thread-195423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:31:01.152 [DEBUG] [Thread-195423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:31:01.152 [DEBUG] [Thread-195423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:31:01.160 [DEBUG] [Thread-195423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:31:01.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:31:01.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:31:01.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:31:01.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:31:01.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:31:01.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:31:01.195 [DEBUG] [Thread-195423] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:31:08.221 [DEBUG] [Thread-195425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:31:08.799 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:31:08.809 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:31:15.118 [DEBUG] [Thread-195426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:31:30.155 [DEBUG] [Thread-195427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:31:31.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:31:31.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:31:31.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:31:32.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 31, 18), 0.3978, 97.2215, 0.0, 9.22896, 11.7571, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:31:32.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:31:18
2026-04-12T20:31:32.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:31:33.035 [DEBUG] [Thread-195428] [transport.py] [_log()] starting thread (client mode): 0xae5633a0
2026-04-12T20:31:33.035 [DEBUG] [Thread-195428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:31:33.054 [DEBUG] [Thread-195428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:31:33.055 [INFO] [Thread-195428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] client lang: <none>
2026-04-12T20:31:33.058 [DEBUG] [Thread-195428] [transport.py] [_log()] server lang: <none>
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] kex follows: False
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] Compression: none
2026-04-12T20:31:33.059 [DEBUG] [Thread-195428] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:31:33.075 [DEBUG] [Thread-195428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:31:33.075 [DEBUG] [Thread-195428] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:31:33.076 [DEBUG] [Thread-195428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:31:33.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:31:33.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:31:33.079 [DEBUG] [Thread-195428] [transport.py] [_log()] userauth is OK
2026-04-12T20:31:33.079 [DEBUG] [Thread-195428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:31:33.079 [DEBUG] [Thread-195428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:31:33.079 [DEBUG] [Thread-195428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:31:33.079 [DEBUG] [Thread-195428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:31:33.104 [INFO] [Thread-195428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:31:33.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:31:33.879 [DEBUG] [Thread-195428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:31:33.879 [DEBUG] [Thread-195428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:31:33.879 [DEBUG] [Thread-195428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:31:33.920 [DEBUG] [Thread-195428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:31:33.920 [DEBUG] [Thread-195428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:31:33.923 [DEBUG] [Thread-195428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:31:33.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:31:33.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:31:33.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:31:33.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:31:33.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:31:33.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:31:33.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:31:33.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:31:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:31:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.771287 -999.00  +11.90   5.35     93  +10.90 1 2 1 3 1     0    0 0.87 -4.94 .NESW 5.3 5.3 206.4 6.5 13.8 -20.1 13.6 -19.1 13.4 -17.7 13.7 -18.5
2026-04-12T20:31:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:31:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:31:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.771287
2026-04-12T20:31:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:31:18', tmtdew=0.3978, humidity=97.2215, cloud=0.0, wind=9.22896, temperature=11.7571, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:30:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[2.8992499999999994, nan, 2.76325, 2.4834999999999994, 2.5774999999999997, 2.459250000000001, nan, nan, nan, 2.8365, 2.3222499999999995, 2.627, 2.677999999999999, 2.55875, 2.3984999999999985, nan, nan, 2.7595, 2.3454999999999995, 2.6587499999999986, 2.269499999999999, 2.0642499999999986, 2.264750000000001, nan, nan, nan, nan, nan, 2.226, 2.2235000000000014, 2.820500000000001, nan, nan], zp_timestamp='2026-04-12T18:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:31:33.943 [DEBUG] [Thread-195428] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:31:34.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:31:34.037 [DEBUG] [Thread-195431] [transport.py] [_log()] starting thread (client mode): 0xae561570
2026-04-12T20:31:34.037 [DEBUG] [Thread-195431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:31:34.055 [DEBUG] [Thread-195431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:31:34.055 [INFO] [Thread-195431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:31:34.063 [DEBUG] [Thread-195431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] client lang: <none>
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] server lang: <none>
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] kex follows: False
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] Compression: none
2026-04-12T20:31:34.064 [DEBUG] [Thread-195431] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:31:34.121 [DEBUG] [Thread-195431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:31:34.121 [DEBUG] [Thread-195431] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:31:34.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:31:34.122 [DEBUG] [Thread-195431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:31:34.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:31:34.182 [DEBUG] [Thread-195431] [transport.py] [_log()] userauth is OK
2026-04-12T20:31:34.182 [DEBUG] [Thread-195431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:31:34.183 [DEBUG] [Thread-195431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:31:34.183 [DEBUG] [Thread-195431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:31:34.183 [DEBUG] [Thread-195431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:31:34.203 [INFO] [Thread-195431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:31:34.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:31:34.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:31:35.036 [DEBUG] [Thread-195431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:31:35.036 [DEBUG] [Thread-195431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:31:35.084 [DEBUG] [Thread-195431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:31:35.084 [DEBUG] [Thread-195431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:31:35.093 [DEBUG] [Thread-195431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:31:35.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:31:35.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:31:35.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:31:35.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:31:35.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:31:35.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:31:35.131 [DEBUG] [Thread-195431] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:31:45.192 [DEBUG] [Thread-195433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:32:00.248 [DEBUG] [Thread-195434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:32:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:32:05.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:32:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:32:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 31, 53), 0.69483, 95.444, 0.0, 11.5754, 11.9822, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:32:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:31:53
2026-04-12T20:32:06.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:32:06.948 [DEBUG] [Thread-195435] [transport.py] [_log()] starting thread (client mode): 0xae5638b0
2026-04-12T20:32:06.948 [DEBUG] [Thread-195435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:32:06.968 [DEBUG] [Thread-195435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:32:06.968 [INFO] [Thread-195435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] client lang: <none>
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] server lang: <none>
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] kex follows: False
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:32:06.971 [DEBUG] [Thread-195435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:32:06.972 [DEBUG] [Thread-195435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:32:06.972 [DEBUG] [Thread-195435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:32:06.972 [DEBUG] [Thread-195435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:32:06.972 [DEBUG] [Thread-195435] [transport.py] [_log()] Compression: none
2026-04-12T20:32:06.972 [DEBUG] [Thread-195435] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:32:06.991 [DEBUG] [Thread-195435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:32:06.992 [DEBUG] [Thread-195435] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:32:06.992 [DEBUG] [Thread-195435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:32:06.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:32:06.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:32:07.034 [DEBUG] [Thread-195435] [transport.py] [_log()] userauth is OK
2026-04-12T20:32:07.034 [DEBUG] [Thread-195435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:32:07.034 [DEBUG] [Thread-195435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:32:07.034 [DEBUG] [Thread-195435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:32:07.034 [DEBUG] [Thread-195435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:32:07.054 [INFO] [Thread-195435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:32:07.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:32:07.828 [DEBUG] [Thread-195435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:32:07.828 [DEBUG] [Thread-195435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:32:07.828 [DEBUG] [Thread-195435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:32:07.869 [DEBUG] [Thread-195435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:32:07.869 [DEBUG] [Thread-195435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:32:07.872 [DEBUG] [Thread-195435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:32:07.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:32:07.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:32:07.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:32:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:32:07.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:32:07.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:32:07.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:32:07.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:32:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:32:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.771634 -999.00  +11.90   7.55     93  +10.90 1 2 1 3 1     0    0 0.88 -4.51 .NESW 7.5 7.5 205.6 9.0 13.7 -19.9 13.6 -18.7 13.3 -17.0 13.7 -17.7
2026-04-12T20:32:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:32:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:32:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.771634
2026-04-12T20:32:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:32:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:32:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:32:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:32:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:32:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:31:53', tmtdew=0.69483, humidity=95.444, cloud=0.0, wind=11.5754, temperature=11.9822, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:31:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:32:07.900 [DEBUG] [Thread-195435] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:32:07.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:32:08.000 [DEBUG] [Thread-195438] [transport.py] [_log()] starting thread (client mode): 0xae562c20
2026-04-12T20:32:08.000 [DEBUG] [Thread-195438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:32:08.014 [DEBUG] [Thread-195438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:32:08.014 [INFO] [Thread-195438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] client lang: <none>
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] server lang: <none>
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] kex follows: False
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] Compression: none
2026-04-12T20:32:08.022 [DEBUG] [Thread-195438] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:32:08.081 [DEBUG] [Thread-195438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:32:08.081 [DEBUG] [Thread-195438] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:32:08.082 [DEBUG] [Thread-195438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:32:08.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:32:08.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:32:08.138 [DEBUG] [Thread-195438] [transport.py] [_log()] userauth is OK
2026-04-12T20:32:08.138 [DEBUG] [Thread-195438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:32:08.138 [DEBUG] [Thread-195438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:32:08.138 [DEBUG] [Thread-195438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:32:08.138 [DEBUG] [Thread-195438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:32:08.161 [INFO] [Thread-195438] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:32:08.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:32:08.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:32:08.282 [DEBUG] [Thread-195440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:32:08.976 [DEBUG] [Thread-195438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:32:08.976 [DEBUG] [Thread-195438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:32:09.013 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:32:09.015 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:32:09.024 [DEBUG] [Thread-195438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:32:09.024 [DEBUG] [Thread-195438] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:32:09.033 [DEBUG] [Thread-195438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:32:09.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:32:09.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:32:09.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:32:09.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:32:09.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:32:09.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:32:09.071 [DEBUG] [Thread-195438] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:32:15.288 [DEBUG] [Thread-195441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:32:30.338 [DEBUG] [Thread-195442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:32:39.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:32:39.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:32:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:32:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 32, 28), 0.40266, 97.1889, 0.0, 9.10548, 11.6911, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:32:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:32:28
2026-04-12T20:32:40.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:32:41.044 [DEBUG] [Thread-195443] [transport.py] [_log()] starting thread (client mode): 0xae562110
2026-04-12T20:32:41.044 [DEBUG] [Thread-195443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:32:41.062 [DEBUG] [Thread-195443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:32:41.062 [INFO] [Thread-195443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:32:41.065 [DEBUG] [Thread-195443] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:32:41.065 [DEBUG] [Thread-195443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:32:41.065 [DEBUG] [Thread-195443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:32:41.065 [DEBUG] [Thread-195443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:41.065 [DEBUG] [Thread-195443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:41.065 [DEBUG] [Thread-195443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] client lang: <none>
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] server lang: <none>
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] kex follows: False
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] Compression: none
2026-04-12T20:32:41.066 [DEBUG] [Thread-195443] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:32:41.084 [DEBUG] [Thread-195443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:32:41.084 [DEBUG] [Thread-195443] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:32:41.085 [DEBUG] [Thread-195443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:32:41.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:32:41.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:32:41.087 [DEBUG] [Thread-195443] [transport.py] [_log()] userauth is OK
2026-04-12T20:32:41.087 [DEBUG] [Thread-195443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:32:41.087 [DEBUG] [Thread-195443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:32:41.087 [DEBUG] [Thread-195443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:32:41.087 [DEBUG] [Thread-195443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:32:41.111 [INFO] [Thread-195443] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:32:41.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:32:41.915 [DEBUG] [Thread-195443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:32:41.915 [DEBUG] [Thread-195443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:32:41.916 [DEBUG] [Thread-195443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:32:41.956 [DEBUG] [Thread-195443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:32:41.956 [DEBUG] [Thread-195443] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:32:41.959 [DEBUG] [Thread-195443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:32:41.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:32:41.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:32:41.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:32:41.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:32:41.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:32:41.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:32:41.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:32:41.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:32:41.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:32:41.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.772329 -999.00  +11.90   7.00     93  +10.90 1 2 1 3 1     0    0 0.85 -4.67 .NESW 7.0 7.0 216.0 7.9 13.7 -15.3 13.6 -14.4 13.3 -14.8 13.6 -16.4
2026-04-12T20:32:41.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:32:41.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:32:41.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.772329
2026-04-12T20:32:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:32:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:32:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:32:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:32:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:32:41.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:32:28', tmtdew=0.40266, humidity=97.1889, cloud=0.0, wind=9.10548, temperature=11.6911, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:32:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:32:41.986 [DEBUG] [Thread-195443] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:32:42.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:32:42.072 [DEBUG] [Thread-195446] [transport.py] [_log()] starting thread (client mode): 0xae563400
2026-04-12T20:32:42.072 [DEBUG] [Thread-195446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:32:42.088 [DEBUG] [Thread-195446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:32:42.088 [INFO] [Thread-195446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] client lang: <none>
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] server lang: <none>
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] kex follows: False
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:32:42.096 [DEBUG] [Thread-195446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:32:42.097 [DEBUG] [Thread-195446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:32:42.097 [DEBUG] [Thread-195446] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:32:42.097 [DEBUG] [Thread-195446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:32:42.097 [DEBUG] [Thread-195446] [transport.py] [_log()] Compression: none
2026-04-12T20:32:42.097 [DEBUG] [Thread-195446] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:32:42.157 [DEBUG] [Thread-195446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:32:42.157 [DEBUG] [Thread-195446] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:32:42.158 [DEBUG] [Thread-195446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:32:42.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:32:42.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:32:42.215 [DEBUG] [Thread-195446] [transport.py] [_log()] userauth is OK
2026-04-12T20:32:42.216 [DEBUG] [Thread-195446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:32:42.216 [DEBUG] [Thread-195446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:32:42.217 [DEBUG] [Thread-195446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:32:42.217 [DEBUG] [Thread-195446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:32:42.236 [INFO] [Thread-195446] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:32:42.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:32:42.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:32:43.105 [DEBUG] [Thread-195446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:32:43.106 [DEBUG] [Thread-195446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:32:43.153 [DEBUG] [Thread-195446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:32:43.153 [DEBUG] [Thread-195446] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:32:43.162 [DEBUG] [Thread-195446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:32:43.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:32:43.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:32:43.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:32:43.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:32:43.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:32:43.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:32:43.195 [DEBUG] [Thread-195446] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:32:45.374 [DEBUG] [Thread-195448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:00.427 [DEBUG] [Thread-195449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:08.350 [DEBUG] [Thread-195450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:09.220 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:09.221 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:13.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:33:13.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:33:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:33:14.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 33, 5), 0.38709, 97.2887, 0.0, 9.52884, 11.7411, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:33:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:33:05
2026-04-12T20:33:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:33:15.053 [DEBUG] [Thread-195451] [transport.py] [_log()] starting thread (client mode): 0xae5638e0
2026-04-12T20:33:15.053 [DEBUG] [Thread-195451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:33:15.073 [DEBUG] [Thread-195451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:33:15.073 [INFO] [Thread-195451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:33:15.076 [DEBUG] [Thread-195451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:33:15.076 [DEBUG] [Thread-195451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:33:15.076 [DEBUG] [Thread-195451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] client lang: <none>
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] server lang: <none>
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] kex follows: False
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:33:15.077 [DEBUG] [Thread-195451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:33:15.078 [DEBUG] [Thread-195451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:33:15.078 [DEBUG] [Thread-195451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:33:15.078 [DEBUG] [Thread-195451] [transport.py] [_log()] Compression: none
2026-04-12T20:33:15.078 [DEBUG] [Thread-195451] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:33:15.091 [DEBUG] [Thread-195451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:33:15.091 [DEBUG] [Thread-195451] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:33:15.091 [DEBUG] [Thread-195451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:33:15.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:33:15.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:33:15.092 [DEBUG] [Thread-195451] [transport.py] [_log()] userauth is OK
2026-04-12T20:33:15.092 [DEBUG] [Thread-195451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:33:15.092 [DEBUG] [Thread-195451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:33:15.092 [DEBUG] [Thread-195451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:33:15.092 [DEBUG] [Thread-195451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:33:15.115 [INFO] [Thread-195451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:33:15.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:33:15.466 [DEBUG] [Thread-195453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:15.920 [DEBUG] [Thread-195451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:33:15.921 [DEBUG] [Thread-195451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:33:15.921 [DEBUG] [Thread-195451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:33:15.961 [DEBUG] [Thread-195451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:33:15.961 [DEBUG] [Thread-195451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:33:15.964 [DEBUG] [Thread-195451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:33:15.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:33:15.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:33:15.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:33:15.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:33:15.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:33:15.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:33:15.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:33:15.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:33:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:33:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.772676 -999.00  +11.90   5.50     93  +10.90 1 2 1 3 1     0    0 0.90 -4.21 .NESW 5.5 5.5 209.6 7.5 13.7 -10.9 13.6 -10.5 13.4 -12.0 13.7 -14.8
2026-04-12T20:33:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:33:15.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:33:15.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.772676
2026-04-12T20:33:15.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:33:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:33:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:33:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:33:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:33:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:33:05', tmtdew=0.38709, humidity=97.2887, cloud=0.0, wind=9.52884, temperature=11.7411, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:32:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:33:15.992 [DEBUG] [Thread-195451] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:33:16.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:33:16.085 [DEBUG] [Thread-195455] [transport.py] [_log()] starting thread (client mode): 0xae5090f0
2026-04-12T20:33:16.085 [DEBUG] [Thread-195455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:33:16.099 [DEBUG] [Thread-195455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:33:16.099 [INFO] [Thread-195455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] client lang: <none>
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] server lang: <none>
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] kex follows: False
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:33:16.107 [DEBUG] [Thread-195455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:33:16.108 [DEBUG] [Thread-195455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:33:16.108 [DEBUG] [Thread-195455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:33:16.108 [DEBUG] [Thread-195455] [transport.py] [_log()] Compression: none
2026-04-12T20:33:16.108 [DEBUG] [Thread-195455] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:33:16.164 [DEBUG] [Thread-195455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:33:16.165 [DEBUG] [Thread-195455] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:33:16.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:33:16.166 [DEBUG] [Thread-195455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:33:16.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:33:16.220 [DEBUG] [Thread-195455] [transport.py] [_log()] userauth is OK
2026-04-12T20:33:16.220 [DEBUG] [Thread-195455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:33:16.220 [DEBUG] [Thread-195455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:33:16.220 [DEBUG] [Thread-195455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:33:16.220 [DEBUG] [Thread-195455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:33:16.238 [INFO] [Thread-195455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:33:16.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:33:16.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:33:17.070 [DEBUG] [Thread-195455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:33:17.070 [DEBUG] [Thread-195455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:33:17.118 [DEBUG] [Thread-195455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:33:17.119 [DEBUG] [Thread-195455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:33:17.127 [DEBUG] [Thread-195455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:33:17.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:33:17.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:33:17.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:33:17.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:33:17.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:33:17.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:33:17.161 [DEBUG] [Thread-195455] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:33:30.506 [DEBUG] [Thread-195457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:45.559 [DEBUG] [Thread-195458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:33:47.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:33:47.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:33:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:33:48.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 33, 40), 0.68452, 95.5112, 0.0, 11.5049, 12.0491, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:33:48.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:33:40
2026-04-12T20:33:48.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:33:48.980 [DEBUG] [Thread-195459] [transport.py] [_log()] starting thread (client mode): 0xae5e5d80
2026-04-12T20:33:48.980 [DEBUG] [Thread-195459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:33:49.001 [DEBUG] [Thread-195459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:33:49.001 [INFO] [Thread-195459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:33:49.004 [DEBUG] [Thread-195459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:33:49.004 [DEBUG] [Thread-195459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:33:49.004 [DEBUG] [Thread-195459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:33:49.004 [DEBUG] [Thread-195459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] client lang: <none>
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] server lang: <none>
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] kex follows: False
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] Compression: none
2026-04-12T20:33:49.005 [DEBUG] [Thread-195459] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:33:49.022 [DEBUG] [Thread-195459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:33:49.022 [DEBUG] [Thread-195459] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:33:49.023 [DEBUG] [Thread-195459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:33:49.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:33:49.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:33:49.026 [DEBUG] [Thread-195459] [transport.py] [_log()] userauth is OK
2026-04-12T20:33:49.026 [DEBUG] [Thread-195459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:33:49.026 [DEBUG] [Thread-195459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:33:49.026 [DEBUG] [Thread-195459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:33:49.027 [DEBUG] [Thread-195459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:33:49.051 [INFO] [Thread-195459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:33:49.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:33:49.818 [DEBUG] [Thread-195459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:33:49.818 [DEBUG] [Thread-195459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:33:49.819 [DEBUG] [Thread-195459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:33:49.859 [DEBUG] [Thread-195459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:33:49.859 [DEBUG] [Thread-195459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:33:49.862 [DEBUG] [Thread-195459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:33:49.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:33:49.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:33:49.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:33:49.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:33:49.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:33:49.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:33:49.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:33:49.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:33:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:33:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.773023 -999.00  +11.90   4.96     93  +11.00 1 2 1 3 1     0    0 0.89 -3.96 .NESW 5.0 5.0 204.0 7.7 13.7 -12.8 13.6 -12.1 13.3 -11.5 13.7 -11.5
2026-04-12T20:33:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:33:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:33:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.773023
2026-04-12T20:33:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:33:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:33:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:33:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:33:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:33:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:33:40', tmtdew=0.68452, humidity=95.5112, cloud=0.0, wind=11.5049, temperature=12.0491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:33:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:33:49.886 [DEBUG] [Thread-195459] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:33:49.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:33:49.990 [DEBUG] [Thread-195462] [transport.py] [_log()] starting thread (client mode): 0xae5e76a0
2026-04-12T20:33:49.990 [DEBUG] [Thread-195462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:33:50.005 [DEBUG] [Thread-195462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:33:50.005 [INFO] [Thread-195462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:33:50.013 [DEBUG] [Thread-195462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:33:50.013 [DEBUG] [Thread-195462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:33:50.013 [DEBUG] [Thread-195462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:33:50.013 [DEBUG] [Thread-195462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:50.013 [DEBUG] [Thread-195462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:33:50.013 [DEBUG] [Thread-195462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] client lang: <none>
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] server lang: <none>
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] kex follows: False
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] Compression: none
2026-04-12T20:33:50.014 [DEBUG] [Thread-195462] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:33:50.073 [DEBUG] [Thread-195462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:33:50.073 [DEBUG] [Thread-195462] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:33:50.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:33:50.075 [DEBUG] [Thread-195462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:33:50.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:33:50.129 [DEBUG] [Thread-195462] [transport.py] [_log()] userauth is OK
2026-04-12T20:33:50.129 [DEBUG] [Thread-195462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:33:50.129 [DEBUG] [Thread-195462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:33:50.130 [DEBUG] [Thread-195462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:33:50.130 [DEBUG] [Thread-195462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:33:50.148 [INFO] [Thread-195462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:33:50.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:33:50.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:33:50.999 [DEBUG] [Thread-195462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:33:50.999 [DEBUG] [Thread-195462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:33:51.046 [DEBUG] [Thread-195462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:33:51.047 [DEBUG] [Thread-195462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:33:51.055 [DEBUG] [Thread-195462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:33:51.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:33:51.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:33:51.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:33:51.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:33:51.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:33:51.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:33:51.092 [DEBUG] [Thread-195462] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:34:00.597 [DEBUG] [Thread-195464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:34:08.406 [DEBUG] [Thread-195465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:34:09.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:34:09.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:34:15.650 [DEBUG] [Thread-195466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:34:21.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:34:21.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:34:21.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:34:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 33, 40), 0.68452, 95.5112, 0.0, 11.5049, 12.0491, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:34:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:33:40
2026-04-12T20:34:22.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:34:22.906 [DEBUG] [Thread-195467] [transport.py] [_log()] starting thread (client mode): 0xae5e66b0
2026-04-12T20:34:22.907 [DEBUG] [Thread-195467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:34:22.926 [DEBUG] [Thread-195467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:34:22.926 [INFO] [Thread-195467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:34:22.929 [DEBUG] [Thread-195467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] client lang: <none>
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] server lang: <none>
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] kex follows: False
2026-04-12T20:34:22.930 [DEBUG] [Thread-195467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:34:22.931 [DEBUG] [Thread-195467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:34:22.931 [DEBUG] [Thread-195467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:34:22.931 [DEBUG] [Thread-195467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:34:22.931 [DEBUG] [Thread-195467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:34:22.931 [DEBUG] [Thread-195467] [transport.py] [_log()] Compression: none
2026-04-12T20:34:22.931 [DEBUG] [Thread-195467] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:34:22.950 [DEBUG] [Thread-195467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:34:22.951 [DEBUG] [Thread-195467] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:34:22.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:34:22.952 [DEBUG] [Thread-195467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:34:22.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:34:22.954 [DEBUG] [Thread-195467] [transport.py] [_log()] userauth is OK
2026-04-12T20:34:22.954 [DEBUG] [Thread-195467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:34:22.954 [DEBUG] [Thread-195467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:34:22.955 [DEBUG] [Thread-195467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:34:22.955 [DEBUG] [Thread-195467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:34:22.978 [INFO] [Thread-195467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:34:22.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:34:23.752 [DEBUG] [Thread-195467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:34:23.752 [DEBUG] [Thread-195467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:34:23.752 [DEBUG] [Thread-195467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:34:23.794 [DEBUG] [Thread-195467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:34:23.794 [DEBUG] [Thread-195467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:34:23.799 [DEBUG] [Thread-195467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:34:23.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:34:23.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:34:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:34:23.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:34:23.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:34:23.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:34:23.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:34:23.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:34:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:34:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.773370 -999.00  +11.90   4.67     93  +10.90 1 2 1 3 1     0    0 0.91 -3.31 .NESW 4.7 4.7 216.4 7.3 13.7 -15.8 13.6 -15.0 13.3 -14.2 13.7 -14.7
2026-04-12T20:34:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:34:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:34:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.773370
2026-04-12T20:34:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:34:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:34:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:34:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:34:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:34:23.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:33:40', tmtdew=0.68452, humidity=95.5112, cloud=0.0, wind=11.5049, temperature=12.0491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:33:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:34:23.834 [DEBUG] [Thread-195467] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:34:23.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:34:23.936 [DEBUG] [Thread-195470] [transport.py] [_log()] starting thread (client mode): 0xae562a40
2026-04-12T20:34:23.937 [DEBUG] [Thread-195470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:34:23.951 [DEBUG] [Thread-195470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:34:23.951 [INFO] [Thread-195470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:34:23.958 [DEBUG] [Thread-195470] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] client lang: <none>
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] server lang: <none>
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] kex follows: False
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] Compression: none
2026-04-12T20:34:23.959 [DEBUG] [Thread-195470] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:34:24.018 [DEBUG] [Thread-195470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:34:24.019 [DEBUG] [Thread-195470] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:34:24.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:34:24.020 [DEBUG] [Thread-195470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:34:24.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:34:24.078 [DEBUG] [Thread-195470] [transport.py] [_log()] userauth is OK
2026-04-12T20:34:24.078 [DEBUG] [Thread-195470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:34:24.078 [DEBUG] [Thread-195470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:34:24.078 [DEBUG] [Thread-195470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:34:24.078 [DEBUG] [Thread-195470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:34:24.096 [INFO] [Thread-195470] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:34:24.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:34:24.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:34:24.923 [DEBUG] [Thread-195470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:34:24.923 [DEBUG] [Thread-195470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:34:24.971 [DEBUG] [Thread-195470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:34:24.971 [DEBUG] [Thread-195470] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:34:24.981 [DEBUG] [Thread-195470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:34:24.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:34:24.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:34:25.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
2026-04-12T20:34:25.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:34:25.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:34:25.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:34:25.019 [DEBUG] [Thread-195470] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:34:30.697 [DEBUG] [Thread-195472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:34:45.755 [DEBUG] [Thread-195473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:34:55.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:34:55.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:34:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:34:56.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 34, 15), 0.38965, 97.2721, 0.0, 9.40536, 11.7245, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:34:56.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:34:15
2026-04-12T20:34:56.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:34:56.905 [DEBUG] [Thread-195474] [transport.py] [_log()] starting thread (client mode): 0xae562620
2026-04-12T20:34:56.905 [DEBUG] [Thread-195474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:34:56.926 [DEBUG] [Thread-195474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:34:56.926 [INFO] [Thread-195474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] client lang: <none>
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] server lang: <none>
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] kex follows: False
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] Compression: none
2026-04-12T20:34:56.929 [DEBUG] [Thread-195474] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:34:56.942 [DEBUG] [Thread-195474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:34:56.943 [DEBUG] [Thread-195474] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:34:56.943 [DEBUG] [Thread-195474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:34:56.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:34:56.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:34:56.944 [DEBUG] [Thread-195474] [transport.py] [_log()] userauth is OK
2026-04-12T20:34:56.944 [DEBUG] [Thread-195474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:34:56.944 [DEBUG] [Thread-195474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:34:56.944 [DEBUG] [Thread-195474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:34:56.944 [DEBUG] [Thread-195474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:34:56.956 [INFO] [Thread-195474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:34:56.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:34:57.706 [DEBUG] [Thread-195474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:34:57.706 [DEBUG] [Thread-195474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:34:57.706 [DEBUG] [Thread-195474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:34:57.746 [DEBUG] [Thread-195474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:34:57.747 [DEBUG] [Thread-195474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:34:57.749 [DEBUG] [Thread-195474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:34:57.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:34:57.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:34:57.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:34:57.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:34:57.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:34:57.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:34:57.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:34:57.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:34:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:34:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.773718 -999.00  +11.90   3.15     93  +11.00 1 2 1 3 1     0    0 0.89 -3.54 ...SW 3.1 3.1 214.6 6.7 13.7 -16.7 13.6 -16.1 13.3 -15.1 13.6 -15.1
2026-04-12T20:34:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:34:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:34:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.773718
2026-04-12T20:34:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:34:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:34:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:34:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:34:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:34:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:34:15', tmtdew=0.38965, humidity=97.2721, cloud=0.0, wind=9.40536, temperature=11.7245, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:34:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:34:57.783 [DEBUG] [Thread-195474] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:34:57.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:34:57.893 [DEBUG] [Thread-195477] [transport.py] [_log()] starting thread (client mode): 0xae5e5b70
2026-04-12T20:34:57.893 [DEBUG] [Thread-195477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:34:57.907 [DEBUG] [Thread-195477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:34:57.907 [INFO] [Thread-195477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:34:57.915 [DEBUG] [Thread-195477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:34:57.915 [DEBUG] [Thread-195477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:34:57.915 [DEBUG] [Thread-195477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:34:57.915 [DEBUG] [Thread-195477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:57.915 [DEBUG] [Thread-195477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:34:57.915 [DEBUG] [Thread-195477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] client lang: <none>
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] server lang: <none>
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] kex follows: False
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:34:57.916 [DEBUG] [Thread-195477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:34:57.917 [DEBUG] [Thread-195477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:34:57.917 [DEBUG] [Thread-195477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:34:57.917 [DEBUG] [Thread-195477] [transport.py] [_log()] Compression: none
2026-04-12T20:34:57.917 [DEBUG] [Thread-195477] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:34:57.974 [DEBUG] [Thread-195477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:34:57.974 [DEBUG] [Thread-195477] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:34:57.975 [DEBUG] [Thread-195477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:34:57.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:34:57.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:34:58.030 [DEBUG] [Thread-195477] [transport.py] [_log()] userauth is OK
2026-04-12T20:34:58.030 [DEBUG] [Thread-195477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:34:58.030 [DEBUG] [Thread-195477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:34:58.030 [DEBUG] [Thread-195477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:34:58.031 [DEBUG] [Thread-195477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:34:58.052 [INFO] [Thread-195477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:34:58.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:34:58.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:34:58.896 [DEBUG] [Thread-195477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:34:58.897 [DEBUG] [Thread-195477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:34:58.944 [DEBUG] [Thread-195477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:34:58.944 [DEBUG] [Thread-195477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:34:58.953 [DEBUG] [Thread-195477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:34:58.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:34:58.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:34:58.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:34:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:34:58.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:34:58.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:34:58.990 [DEBUG] [Thread-195477] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:35:00.790 [DEBUG] [Thread-195479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:35:08.465 [DEBUG] [Thread-195480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:35:09.635 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:35:09.636 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:35:15.831 [DEBUG] [Thread-195481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:35:28.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:35:28.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:35:28.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:35:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 34, 51), 0.66387, 95.6437, 0.0, 11.7518, 12.1153, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:35:30.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:34:51
2026-04-12T20:35:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:35:30.868 [DEBUG] [Thread-195482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:35:30.875 [DEBUG] [Thread-195483] [transport.py] [_log()] starting thread (client mode): 0xae5e45b0
2026-04-12T20:35:30.875 [DEBUG] [Thread-195483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:35:30.889 [DEBUG] [Thread-195483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:35:30.889 [INFO] [Thread-195483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] client lang: <none>
2026-04-12T20:35:30.892 [DEBUG] [Thread-195483] [transport.py] [_log()] server lang: <none>
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] kex follows: False
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] Compression: none
2026-04-12T20:35:30.893 [DEBUG] [Thread-195483] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:35:30.912 [DEBUG] [Thread-195483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:35:30.913 [DEBUG] [Thread-195483] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:35:30.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:35:30.914 [DEBUG] [Thread-195483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:35:30.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:35:30.917 [DEBUG] [Thread-195483] [transport.py] [_log()] userauth is OK
2026-04-12T20:35:30.917 [DEBUG] [Thread-195483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:35:30.917 [DEBUG] [Thread-195483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:35:30.917 [DEBUG] [Thread-195483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:35:30.918 [DEBUG] [Thread-195483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:35:30.942 [INFO] [Thread-195483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:35:30.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:35:31.745 [DEBUG] [Thread-195483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:35:31.745 [DEBUG] [Thread-195483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:35:31.746 [DEBUG] [Thread-195483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:35:31.787 [DEBUG] [Thread-195483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:35:31.787 [DEBUG] [Thread-195483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:35:31.791 [DEBUG] [Thread-195483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:35:31.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:35:31.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:35:31.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:35:31.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:35:31.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:35:31.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:35:31.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:35:31.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:35:31.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:35:31.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.774065 -999.00  +11.90   7.31     93  +10.90 1 2 1 3 1     0    0 0.90 -3.43 ...SW 7.3 7.3 197.0 9.7 13.7 -19.4 13.5 -17.9 13.3 -15.0 13.6 -16.5
2026-04-12T20:35:31.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:35:31.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:35:31.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.774065
2026-04-12T20:35:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:35:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:35:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:35:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:35:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:35:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:34:51', tmtdew=0.66387, humidity=95.6437, cloud=0.0, wind=11.7518, temperature=12.1153, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:34:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:35:31.822 [DEBUG] [Thread-195483] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:35:31.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:35:31.916 [DEBUG] [Thread-195486] [transport.py] [_log()] starting thread (client mode): 0xae51b400
2026-04-12T20:35:31.916 [DEBUG] [Thread-195486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:35:31.932 [DEBUG] [Thread-195486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:35:31.932 [INFO] [Thread-195486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:35:31.940 [DEBUG] [Thread-195486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] client lang: <none>
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] server lang: <none>
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] kex follows: False
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] Compression: none
2026-04-12T20:35:31.941 [DEBUG] [Thread-195486] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:35:31.999 [DEBUG] [Thread-195486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:35:32.000 [DEBUG] [Thread-195486] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:35:32.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:35:32.001 [DEBUG] [Thread-195486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:35:32.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:35:32.056 [DEBUG] [Thread-195486] [transport.py] [_log()] userauth is OK
2026-04-12T20:35:32.057 [DEBUG] [Thread-195486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:35:32.057 [DEBUG] [Thread-195486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:35:32.057 [DEBUG] [Thread-195486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:35:32.057 [DEBUG] [Thread-195486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:35:32.077 [INFO] [Thread-195486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:35:32.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:35:32.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:35:32.899 [DEBUG] [Thread-195486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:35:32.899 [DEBUG] [Thread-195486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:35:32.947 [DEBUG] [Thread-195486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:35:32.947 [DEBUG] [Thread-195486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:35:32.957 [DEBUG] [Thread-195486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:35:32.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:35:32.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:35:32.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:35:32.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:35:32.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:35:32.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:35:32.994 [DEBUG] [Thread-195486] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:35:45.901 [DEBUG] [Thread-195488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:36:00.954 [DEBUG] [Thread-195489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:36:03.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:36:03.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:36:03.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:36:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 35, 26), 0.329115, 97.3388, 0.0, 9.1584, 11.6747, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:36:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:35:26
2026-04-12T20:36:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:36:04.990 [DEBUG] [Thread-195490] [transport.py] [_log()] starting thread (client mode): 0xae5613c0
2026-04-12T20:36:04.990 [DEBUG] [Thread-195490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:36:05.008 [DEBUG] [Thread-195490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:36:05.008 [INFO] [Thread-195490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] client lang: <none>
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] server lang: <none>
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] kex follows: False
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] Compression: none
2026-04-12T20:36:05.010 [DEBUG] [Thread-195490] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:36:05.021 [DEBUG] [Thread-195490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:36:05.021 [DEBUG] [Thread-195490] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:36:05.022 [DEBUG] [Thread-195490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:36:05.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:36:05.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:36:05.022 [DEBUG] [Thread-195490] [transport.py] [_log()] userauth is OK
2026-04-12T20:36:05.022 [DEBUG] [Thread-195490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:36:05.022 [DEBUG] [Thread-195490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:36:05.022 [DEBUG] [Thread-195490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:36:05.022 [DEBUG] [Thread-195490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:36:05.031 [INFO] [Thread-195490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:36:05.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:36:05.812 [DEBUG] [Thread-195490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:36:05.812 [DEBUG] [Thread-195490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:36:05.813 [DEBUG] [Thread-195490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:36:05.853 [DEBUG] [Thread-195490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:36:05.853 [DEBUG] [Thread-195490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:36:05.855 [DEBUG] [Thread-195490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:36:05.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:36:05.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:36:05.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:36:05.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:36:05.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:36:05.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:36:05.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.774759 -999.00  +11.90   3.61     93  +10.90 1 2 1 3 1     0    0 0.92 -2.92 .NESW 3.6 3.6 191.5 8.2 13.7 -15.6 13.5 -15.4 13.2 -14.7 13.6 -17.3
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.774759
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:35:26', tmtdew=0.329115, humidity=97.3388, cloud=0.0, wind=9.1584, temperature=11.6747, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:35:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:36:05.874 [DEBUG] [Thread-195490] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:36:05.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:36:05.957 [DEBUG] [Thread-195493] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T20:36:05.957 [DEBUG] [Thread-195493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:36:05.970 [DEBUG] [Thread-195493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:36:05.971 [INFO] [Thread-195493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] client lang: <none>
2026-04-12T20:36:05.978 [DEBUG] [Thread-195493] [transport.py] [_log()] server lang: <none>
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] kex follows: False
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] Compression: none
2026-04-12T20:36:05.979 [DEBUG] [Thread-195493] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:36:06.038 [DEBUG] [Thread-195493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:36:06.038 [DEBUG] [Thread-195493] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:36:06.038 [DEBUG] [Thread-195493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:36:06.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:36:06.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:36:06.099 [DEBUG] [Thread-195493] [transport.py] [_log()] userauth is OK
2026-04-12T20:36:06.099 [DEBUG] [Thread-195493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:36:06.099 [DEBUG] [Thread-195493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:36:06.099 [DEBUG] [Thread-195493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:36:06.099 [DEBUG] [Thread-195493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:36:06.113 [INFO] [Thread-195493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:36:06.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:36:06.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:36:06.952 [DEBUG] [Thread-195493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:36:06.953 [DEBUG] [Thread-195493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:36:07.001 [DEBUG] [Thread-195493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:36:07.001 [DEBUG] [Thread-195493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:36:07.011 [DEBUG] [Thread-195493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:36:07.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:36: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')
2026-04-12T20:36:07.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:36:07.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:36:07.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:36:07.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:36:07.049 [DEBUG] [Thread-195493] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:36:08.531 [DEBUG] [Thread-195495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:36:09.849 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:36:09.850 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:36:15.992 [DEBUG] [Thread-195496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:36:31.044 [DEBUG] [Thread-195497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:36:37.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:36:37.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:36:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:36:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 36, 2), 0.331665, 97.3222, 0.0, 9.12312, 11.6581, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:36:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:36:02
2026-04-12T20:36:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:36:38.895 [DEBUG] [Thread-195498] [transport.py] [_log()] starting thread (client mode): 0xae51b130
2026-04-12T20:36:38.895 [DEBUG] [Thread-195498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:36:38.913 [DEBUG] [Thread-195498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:36:38.913 [INFO] [Thread-195498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] client lang: <none>
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] server lang: <none>
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] kex follows: False
2026-04-12T20:36:38.917 [DEBUG] [Thread-195498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:36:38.918 [DEBUG] [Thread-195498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:36:38.918 [DEBUG] [Thread-195498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:36:38.918 [DEBUG] [Thread-195498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:36:38.918 [DEBUG] [Thread-195498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:36:38.918 [DEBUG] [Thread-195498] [transport.py] [_log()] Compression: none
2026-04-12T20:36:38.918 [DEBUG] [Thread-195498] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:36:38.935 [DEBUG] [Thread-195498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:36:38.936 [DEBUG] [Thread-195498] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:36:38.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:36:38.937 [DEBUG] [Thread-195498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:36:38.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:36:38.939 [DEBUG] [Thread-195498] [transport.py] [_log()] userauth is OK
2026-04-12T20:36:38.939 [DEBUG] [Thread-195498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:36:38.939 [DEBUG] [Thread-195498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:36:38.939 [DEBUG] [Thread-195498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:36:38.939 [DEBUG] [Thread-195498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:36:38.962 [INFO] [Thread-195498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:36:38.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:36:39.728 [DEBUG] [Thread-195498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:36:39.728 [DEBUG] [Thread-195498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:36:39.729 [DEBUG] [Thread-195498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:36:39.770 [DEBUG] [Thread-195498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:36:39.770 [DEBUG] [Thread-195498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:36:39.773 [DEBUG] [Thread-195498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:36:39.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:36:39.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:36:39.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:36:39.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:36:39.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:36:39.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:36:39.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:36:39.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:36:39.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:36:39.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.775106 -999.00  +11.90   3.15     93  +10.90 1 2 1 3 1     0    0 0.95 -2.28 .NESW 3.1 3.1 250.7 10.7 13.6 -18.8 13.5 -17.5 13.2 -15.0 13.6 -14.7
2026-04-12T20:36:39.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:36:39.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:36:39.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.775106
2026-04-12T20:36:39.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:36:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:36:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:36:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:36:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:36:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:36:02', tmtdew=0.331665, humidity=97.3222, cloud=0.0, wind=9.12312, temperature=11.6581, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:36:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:36:39.796 [DEBUG] [Thread-195498] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:36:39.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:36:39.890 [DEBUG] [Thread-195501] [transport.py] [_log()] starting thread (client mode): 0xb0f6cd30
2026-04-12T20:36:39.890 [DEBUG] [Thread-195501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:36:39.904 [DEBUG] [Thread-195501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:36:39.904 [INFO] [Thread-195501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] client lang: <none>
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] server lang: <none>
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] kex follows: False
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:36:39.912 [DEBUG] [Thread-195501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:36:39.913 [DEBUG] [Thread-195501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:36:39.913 [DEBUG] [Thread-195501] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:36:39.913 [DEBUG] [Thread-195501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:36:39.913 [DEBUG] [Thread-195501] [transport.py] [_log()] Compression: none
2026-04-12T20:36:39.913 [DEBUG] [Thread-195501] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:36:39.971 [DEBUG] [Thread-195501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:36:39.972 [DEBUG] [Thread-195501] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:36:39.972 [DEBUG] [Thread-195501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:36:39.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:36:39.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:36:40.028 [DEBUG] [Thread-195501] [transport.py] [_log()] userauth is OK
2026-04-12T20:36:40.028 [DEBUG] [Thread-195501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:36:40.028 [DEBUG] [Thread-195501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:36:40.028 [DEBUG] [Thread-195501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:36:40.028 [DEBUG] [Thread-195501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:36:40.047 [INFO] [Thread-195501] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:36:40.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:36:40.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:36:40.872 [DEBUG] [Thread-195501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:36:40.872 [DEBUG] [Thread-195501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:36:40.919 [DEBUG] [Thread-195501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:36:40.920 [DEBUG] [Thread-195501] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:36:40.928 [DEBUG] [Thread-195501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:36:40.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:36:40.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:36:40.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:36:40.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:36:40.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:36:40.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:36:40.967 [DEBUG] [Thread-195501] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:36:46.075 [DEBUG] [Thread-195503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:01.116 [DEBUG] [Thread-195504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:08.587 [DEBUG] [Thread-195505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:10.057 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:10.058 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:37:10.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:37:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:37:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 36, 37), 0.66846, 95.611, 0.0, 9.1764, 11.983, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:37:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:36:37
2026-04-12T20:37:12.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:37:12.726 [DEBUG] [Thread-195506] [transport.py] [_log()] starting thread (client mode): 0xae5602b0
2026-04-12T20:37:12.726 [DEBUG] [Thread-195506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:37:12.746 [DEBUG] [Thread-195506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:37:12.746 [INFO] [Thread-195506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] client lang: <none>
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] server lang: <none>
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] kex follows: False
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:37:12.749 [DEBUG] [Thread-195506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:37:12.750 [DEBUG] [Thread-195506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:37:12.750 [DEBUG] [Thread-195506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:37:12.750 [DEBUG] [Thread-195506] [transport.py] [_log()] Compression: none
2026-04-12T20:37:12.750 [DEBUG] [Thread-195506] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:37:12.769 [DEBUG] [Thread-195506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:37:12.769 [DEBUG] [Thread-195506] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:37:12.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:37:12.771 [DEBUG] [Thread-195506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:37:12.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:37:12.773 [DEBUG] [Thread-195506] [transport.py] [_log()] userauth is OK
2026-04-12T20:37:12.773 [DEBUG] [Thread-195506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:37:12.773 [DEBUG] [Thread-195506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:37:12.773 [DEBUG] [Thread-195506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:37:12.773 [DEBUG] [Thread-195506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:37:12.798 [INFO] [Thread-195506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:37:12.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:37:13.593 [DEBUG] [Thread-195506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:37:13.593 [DEBUG] [Thread-195506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:37:13.594 [DEBUG] [Thread-195506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:37:13.634 [DEBUG] [Thread-195506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:37:13.634 [DEBUG] [Thread-195506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:37:13.638 [DEBUG] [Thread-195506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:37:13.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:37:13.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:37:13.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:37:13.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:37:13.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:37:13.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:37:13.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:37:13.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:37:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:37:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.775454 -999.00  +11.90   5.49     93  +10.90 1 2 1 3 1     0    0 0.94 -2.09 .NESW 5.5 5.5 212.6 8.7 13.6 -17.2 13.4 -15.8 13.2 -14.8 13.6 -17.3
2026-04-12T20:37:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:37:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:37:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.775454
2026-04-12T20:37:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:37:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:37:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:37:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:37:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:37:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:36:37', tmtdew=0.66846, humidity=95.611, cloud=0.0, wind=9.1764, temperature=11.983, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:36:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:37:13.667 [DEBUG] [Thread-195506] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:37:13.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:37:13.770 [DEBUG] [Thread-195509] [transport.py] [_log()] starting thread (client mode): 0xae5a5d50
2026-04-12T20:37:13.770 [DEBUG] [Thread-195509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:37:13.787 [DEBUG] [Thread-195509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:37:13.787 [INFO] [Thread-195509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] client lang: <none>
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] server lang: <none>
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] kex follows: False
2026-04-12T20:37:13.794 [DEBUG] [Thread-195509] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:37:13.795 [DEBUG] [Thread-195509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:37:13.795 [DEBUG] [Thread-195509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:37:13.795 [DEBUG] [Thread-195509] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:37:13.795 [DEBUG] [Thread-195509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:37:13.795 [DEBUG] [Thread-195509] [transport.py] [_log()] Compression: none
2026-04-12T20:37:13.795 [DEBUG] [Thread-195509] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:37:13.852 [DEBUG] [Thread-195509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:37:13.852 [DEBUG] [Thread-195509] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:37:13.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:37:13.853 [DEBUG] [Thread-195509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:37:13.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:37:13.908 [DEBUG] [Thread-195509] [transport.py] [_log()] userauth is OK
2026-04-12T20:37:13.909 [DEBUG] [Thread-195509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:37:13.909 [DEBUG] [Thread-195509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:37:13.909 [DEBUG] [Thread-195509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:37:13.909 [DEBUG] [Thread-195509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:37:13.928 [INFO] [Thread-195509] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:37:13.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:37:13.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:37:14.756 [DEBUG] [Thread-195509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:37:14.757 [DEBUG] [Thread-195509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:37:14.809 [DEBUG] [Thread-195509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:37:14.809 [DEBUG] [Thread-195509] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:37:14.818 [DEBUG] [Thread-195509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:37:14.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:37:14.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:37:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:37:14.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:37:14.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:37:14.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:37:14.855 [DEBUG] [Thread-195509] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:37:16.148 [DEBUG] [Thread-195511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:31.197 [DEBUG] [Thread-195512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:44.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:37:44.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:37:44.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:37:46.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 37, 13), 0.326465, 97.3551, 0.0, 9.2466, 11.658, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:37:46.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:37:13
2026-04-12T20:37:46.232 [DEBUG] [Thread-195513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:37:46.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:37:46.647 [DEBUG] [Thread-195514] [transport.py] [_log()] starting thread (client mode): 0xae5a7bb0
2026-04-12T20:37:46.647 [DEBUG] [Thread-195514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:37:46.663 [DEBUG] [Thread-195514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:37:46.663 [INFO] [Thread-195514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] client lang: <none>
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] server lang: <none>
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] kex follows: False
2026-04-12T20:37:46.665 [DEBUG] [Thread-195514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:37:46.666 [DEBUG] [Thread-195514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:37:46.666 [DEBUG] [Thread-195514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:37:46.666 [DEBUG] [Thread-195514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:37:46.666 [DEBUG] [Thread-195514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:37:46.666 [DEBUG] [Thread-195514] [transport.py] [_log()] Compression: none
2026-04-12T20:37:46.666 [DEBUG] [Thread-195514] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:37:46.684 [DEBUG] [Thread-195514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:37:46.685 [DEBUG] [Thread-195514] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:37:46.685 [DEBUG] [Thread-195514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:37:46.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:37:46.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:37:46.687 [DEBUG] [Thread-195514] [transport.py] [_log()] userauth is OK
2026-04-12T20:37:46.687 [DEBUG] [Thread-195514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:37:46.687 [DEBUG] [Thread-195514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:37:46.688 [DEBUG] [Thread-195514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:37:46.688 [DEBUG] [Thread-195514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:37:46.711 [INFO] [Thread-195514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:37:46.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:37:47.509 [DEBUG] [Thread-195514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:37:47.509 [DEBUG] [Thread-195514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:37:47.509 [DEBUG] [Thread-195514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:37:47.550 [DEBUG] [Thread-195514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:37:47.550 [DEBUG] [Thread-195514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:37:47.554 [DEBUG] [Thread-195514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:37:47.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:37:47.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:37:47.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:37:47.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:37:47.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:37:47.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:37:47.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:37:47.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:37:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:37:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.775800 -999.00  +11.90   8.19     93  +10.90 1 2 1 3 1     0    0 0.95 -1.54 .NESW 8.2 8.2 201.8 9.0 13.6 -16.2 13.4 -15.6 13.2 -15.7 13.5 -17.4
2026-04-12T20:37:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:37:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:37:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.775800
2026-04-12T20:37:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:37:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:37:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:37:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:37:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:37:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:37:13', tmtdew=0.326465, humidity=97.3551, cloud=0.0, wind=9.2466, temperature=11.658, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:37:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[2.6602499999999996, nan, 2.652750000000001, 2.4834999999999994, 2.3309999999999995, 2.5042500000000008, nan, 2.281250000000001, nan, 1.8450000000000006, 1.835749999999999, 1.9815000000000005, 2.053, 1.8537499999999998, 2.1599999999999993, 1.5264999999999986, 1.7932499999999996, 0.9104999999999999, 1.0154999999999994, 1.0662499999999993, 1.1689999999999987, 1.0357499999999984, 1.196250000000001, 1.0437500000000002, 0.911999999999999, 0.8215000000000003, 0.9942500000000001, 1.1455000000000002, 1.4130000000000003, 1.152000000000001, 1.1935000000000011, 1.0715000000000003, 0.8517499999999991], zp_timestamp='2026-04-12T18:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:37:47.582 [DEBUG] [Thread-195514] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:37:47.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:37:47.679 [DEBUG] [Thread-195517] [transport.py] [_log()] starting thread (client mode): 0xae5a7610
2026-04-12T20:37:47.679 [DEBUG] [Thread-195517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:37:47.694 [DEBUG] [Thread-195517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:37:47.694 [INFO] [Thread-195517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:37:47.701 [DEBUG] [Thread-195517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:37:47.701 [DEBUG] [Thread-195517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:37:47.701 [DEBUG] [Thread-195517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:37:47.701 [DEBUG] [Thread-195517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:47.701 [DEBUG] [Thread-195517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:37:47.701 [DEBUG] [Thread-195517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:47.701 [DEBUG] [Thread-195517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] client lang: <none>
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] server lang: <none>
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] kex follows: False
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] Compression: none
2026-04-12T20:37:47.702 [DEBUG] [Thread-195517] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:37:47.761 [DEBUG] [Thread-195517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:37:47.762 [DEBUG] [Thread-195517] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:37:47.762 [DEBUG] [Thread-195517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:37:47.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:37:47.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:37:47.817 [DEBUG] [Thread-195517] [transport.py] [_log()] userauth is OK
2026-04-12T20:37:47.817 [DEBUG] [Thread-195517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:37:47.818 [DEBUG] [Thread-195517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:37:47.818 [DEBUG] [Thread-195517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:37:47.818 [DEBUG] [Thread-195517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:37:47.844 [INFO] [Thread-195517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:37:47.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:37:47.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:37:48.672 [DEBUG] [Thread-195517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:37:48.672 [DEBUG] [Thread-195517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:37:48.720 [DEBUG] [Thread-195517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:37:48.720 [DEBUG] [Thread-195517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:37:48.729 [DEBUG] [Thread-195517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:37:48.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:37:48.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:37:48.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:37:48.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:37:48.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:37:48.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:37:48.767 [DEBUG] [Thread-195517] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:38:01.267 [DEBUG] [Thread-195519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:38:08.656 [DEBUG] [Thread-195520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:38:10.263 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:38:10.265 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:38:16.318 [DEBUG] [Thread-195521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:38:18.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:38:18.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:38:18.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:38:20.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 37, 48), 0.65293, 95.7103, 0.0, 8.36496, 12.016, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:38:20.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:37:48
2026-04-12T20:38:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:38:20.643 [DEBUG] [Thread-195522] [transport.py] [_log()] starting thread (client mode): 0xae5343d0
2026-04-12T20:38:20.643 [DEBUG] [Thread-195522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:38:20.665 [DEBUG] [Thread-195522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:38:20.665 [INFO] [Thread-195522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:38:20.668 [DEBUG] [Thread-195522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] client lang: <none>
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] server lang: <none>
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] kex follows: False
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] Compression: none
2026-04-12T20:38:20.669 [DEBUG] [Thread-195522] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:38:20.687 [DEBUG] [Thread-195522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:38:20.688 [DEBUG] [Thread-195522] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:38:20.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:38:20.688 [DEBUG] [Thread-195522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:38:20.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:38:20.691 [DEBUG] [Thread-195522] [transport.py] [_log()] userauth is OK
2026-04-12T20:38:20.692 [DEBUG] [Thread-195522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:38:20.692 [DEBUG] [Thread-195522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:38:20.692 [DEBUG] [Thread-195522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:38:20.692 [DEBUG] [Thread-195522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:38:20.730 [INFO] [Thread-195522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:38:20.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:38:21.529 [DEBUG] [Thread-195522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:38:21.529 [DEBUG] [Thread-195522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:38:21.530 [DEBUG] [Thread-195522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:38:21.570 [DEBUG] [Thread-195522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:38:21.570 [DEBUG] [Thread-195522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:38:21.573 [DEBUG] [Thread-195522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:38:21.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:38:21.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:38:21.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:38:21.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:38:21.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:38:21.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:38:21.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:38:21.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:38:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:38:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.776148 -999.00  +11.80   5.26     93  +10.90 1 2 1 3 1     0    0 0.95 -1.56 .NESW 5.3 5.3 207.7 9.1 13.6 -14.2 13.4 -13.5 13.2 -13.8 13.5 -15.3
2026-04-12T20:38:21.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:38:21.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:38:21.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.776148
2026-04-12T20:38:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:38:21.600 [DEBUG] [Thread-195522] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:38:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:38:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:38:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:38:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:38:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:37:48', tmtdew=0.65293, humidity=95.7103, cloud=0.0, wind=8.36496, temperature=12.016, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:37:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6752499999999992, nan, nan, nan, nan, nan, nan, nan, 2.767999999999999, nan, 2.496999999999998, 2.274749999999999, nan, nan, nan, 2.7664999999999997, 2.6807499999999997, nan, 2.4450000000000003, 2.107500000000001, 3.1000000000000014, nan, nan], zp_timestamp='2026-04-12T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:38:21.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:38:21.695 [DEBUG] [Thread-195525] [transport.py] [_log()] starting thread (client mode): 0xb0f6e2f0
2026-04-12T20:38:21.695 [DEBUG] [Thread-195525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:38:21.709 [DEBUG] [Thread-195525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:38:21.709 [INFO] [Thread-195525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] client lang: <none>
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] server lang: <none>
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] kex follows: False
2026-04-12T20:38:21.717 [DEBUG] [Thread-195525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:38:21.718 [DEBUG] [Thread-195525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:38:21.718 [DEBUG] [Thread-195525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:38:21.718 [DEBUG] [Thread-195525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:38:21.718 [DEBUG] [Thread-195525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:38:21.718 [DEBUG] [Thread-195525] [transport.py] [_log()] Compression: none
2026-04-12T20:38:21.718 [DEBUG] [Thread-195525] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:38:21.775 [DEBUG] [Thread-195525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:38:21.776 [DEBUG] [Thread-195525] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:38:21.777 [DEBUG] [Thread-195525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:38:21.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:38:21.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:38:21.836 [DEBUG] [Thread-195525] [transport.py] [_log()] userauth is OK
2026-04-12T20:38:21.837 [DEBUG] [Thread-195525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:38:21.837 [DEBUG] [Thread-195525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:38:21.837 [DEBUG] [Thread-195525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:38:21.837 [DEBUG] [Thread-195525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:38:21.855 [INFO] [Thread-195525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:38:21.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:38:21.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:38:22.703 [DEBUG] [Thread-195525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:38:22.703 [DEBUG] [Thread-195525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:38:22.751 [DEBUG] [Thread-195525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:38:22.751 [DEBUG] [Thread-195525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:38:22.760 [DEBUG] [Thread-195525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:38:22.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:38:22.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:38:22.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:38:22.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:38:22.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:38:22.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:38:22.793 [DEBUG] [Thread-195525] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:38:31.357 [DEBUG] [Thread-195527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:38:46.421 [DEBUG] [Thread-195528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:38:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:38:52.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:38:52.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:38:54.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 38, 24), 0.326465, 97.3551, 0.0, 11.0819, 11.658, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:38:54.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:38:24
2026-04-12T20:38:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:38:54.616 [DEBUG] [Thread-195529] [transport.py] [_log()] starting thread (client mode): 0xb0f6f790
2026-04-12T20:38:54.616 [DEBUG] [Thread-195529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:38:54.639 [DEBUG] [Thread-195529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:38:54.639 [INFO] [Thread-195529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] client lang: <none>
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] server lang: <none>
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] kex follows: False
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:38:54.642 [DEBUG] [Thread-195529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:38:54.643 [DEBUG] [Thread-195529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:38:54.643 [DEBUG] [Thread-195529] [transport.py] [_log()] Compression: none
2026-04-12T20:38:54.643 [DEBUG] [Thread-195529] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:38:54.660 [DEBUG] [Thread-195529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:38:54.661 [DEBUG] [Thread-195529] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:38:54.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:38:54.662 [DEBUG] [Thread-195529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:38:54.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:38:54.665 [DEBUG] [Thread-195529] [transport.py] [_log()] userauth is OK
2026-04-12T20:38:54.665 [DEBUG] [Thread-195529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:38:54.665 [DEBUG] [Thread-195529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:38:54.665 [DEBUG] [Thread-195529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:38:54.666 [DEBUG] [Thread-195529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:38:54.701 [INFO] [Thread-195529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:38:54.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:38:55.301 [DEBUG] [Thread-195529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:38:55.301 [DEBUG] [Thread-195529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:38:55.302 [DEBUG] [Thread-195529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:38:55.343 [DEBUG] [Thread-195529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:38:55.343 [DEBUG] [Thread-195529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:38:55.347 [DEBUG] [Thread-195529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:38:55.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:38:55.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:38:55.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:38:55.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:38:55.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:38:55.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:38:55.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:38:55.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:38:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:38:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.776495 -999.00  +11.80   6.51     93  +10.90 1 2 1 3 1     0    0 0.95 -1.83 .NESW 6.5 6.5 203.0 8.8 13.6 -16.3 13.4 -15.6 13.2 -14.5 13.4 -15.5
2026-04-12T20:38:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:38:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:38:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.776495
2026-04-12T20:38:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:38:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:38:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:38:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:38:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:38:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:38:24', tmtdew=0.326465, humidity=97.3551, cloud=0.0, wind=11.0819, temperature=11.658, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:38:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6752499999999992, nan, nan, nan, nan, nan, nan, nan, 2.767999999999999, nan, 2.496999999999998, 2.274749999999999, nan, nan, nan, 2.7664999999999997, 2.6807499999999997, nan, 2.4450000000000003, 2.107500000000001, 3.1000000000000014, nan, nan], zp_timestamp='2026-04-12T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:38:55.379 [DEBUG] [Thread-195529] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:38:55.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:38:55.463 [DEBUG] [Thread-195532] [transport.py] [_log()] starting thread (client mode): 0xae5a5840
2026-04-12T20:38:55.463 [DEBUG] [Thread-195532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:38:55.478 [DEBUG] [Thread-195532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:38:55.478 [INFO] [Thread-195532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:38:55.486 [DEBUG] [Thread-195532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:38:55.487 [DEBUG] [Thread-195532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] client lang: <none>
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] server lang: <none>
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] kex follows: False
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] Compression: none
2026-04-12T20:38:55.488 [DEBUG] [Thread-195532] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:38:55.547 [DEBUG] [Thread-195532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:38:55.548 [DEBUG] [Thread-195532] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:38:55.548 [DEBUG] [Thread-195532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:38:55.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:38:55.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:38:55.604 [DEBUG] [Thread-195532] [transport.py] [_log()] userauth is OK
2026-04-12T20:38:55.604 [DEBUG] [Thread-195532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:38:55.605 [DEBUG] [Thread-195532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:38:55.605 [DEBUG] [Thread-195532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:38:55.605 [DEBUG] [Thread-195532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:38:55.624 [INFO] [Thread-195532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:38:55.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:38:55.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:38:56.466 [DEBUG] [Thread-195532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:38:56.467 [DEBUG] [Thread-195532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:38:56.515 [DEBUG] [Thread-195532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:38:56.515 [DEBUG] [Thread-195532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:38:56.524 [DEBUG] [Thread-195532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:38:56.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:38:56.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:38:56.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:38:56.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:38:56.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:38:56.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:38:56.558 [DEBUG] [Thread-195532] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:39:01.453 [DEBUG] [Thread-195534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:39:08.720 [DEBUG] [Thread-195535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:39:10.472 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:39:10.473 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:39:16.503 [DEBUG] [Thread-195536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:39:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:39:26.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:39:26.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:39:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 38, 59), 0.3738, 97.372, 0.0, 9.84636, 11.6582, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:39:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:38:59
2026-04-12T20:39:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:39:28.435 [DEBUG] [Thread-195537] [transport.py] [_log()] starting thread (client mode): 0xae5e61a0
2026-04-12T20:39:28.435 [DEBUG] [Thread-195537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:39:28.455 [DEBUG] [Thread-195537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:39:28.455 [INFO] [Thread-195537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:39:28.458 [DEBUG] [Thread-195537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] client lang: <none>
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] server lang: <none>
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] kex follows: False
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:39:28.459 [DEBUG] [Thread-195537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:39:28.460 [DEBUG] [Thread-195537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:39:28.460 [DEBUG] [Thread-195537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:39:28.460 [DEBUG] [Thread-195537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:39:28.460 [DEBUG] [Thread-195537] [transport.py] [_log()] Compression: none
2026-04-12T20:39:28.460 [DEBUG] [Thread-195537] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:39:28.479 [DEBUG] [Thread-195537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:39:28.480 [DEBUG] [Thread-195537] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:39:28.480 [DEBUG] [Thread-195537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:39:28.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:39:28.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:39:28.482 [DEBUG] [Thread-195537] [transport.py] [_log()] userauth is OK
2026-04-12T20:39:28.483 [DEBUG] [Thread-195537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:39:28.483 [DEBUG] [Thread-195537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:39:28.483 [DEBUG] [Thread-195537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:39:28.483 [DEBUG] [Thread-195537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:39:28.518 [INFO] [Thread-195537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:39:28.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:39:29.157 [DEBUG] [Thread-195537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:39:29.158 [DEBUG] [Thread-195537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:39:29.158 [DEBUG] [Thread-195537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:39:29.199 [DEBUG] [Thread-195537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:39:29.199 [DEBUG] [Thread-195537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:39:29.202 [DEBUG] [Thread-195537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:39:29.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:39:29.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:39:29.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:39:29.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:39:29.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:39:29.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:39:29.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:39:29.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:39:29.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:39:29.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.777190 -999.00  +11.90   5.39     94  +10.90 1 2 1 3 1     0    0 0.93 -2.37 .NESW 5.4 5.4 211.8 6.8 13.6 -15.1 13.4 -14.7 13.2 -12.8 13.5 -13.0
2026-04-12T20:39:29.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:39:29.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:39:29.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.777190
2026-04-12T20:39:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:39:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:39:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:39:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:39:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:39:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:38:59', tmtdew=0.3738, humidity=97.372, cloud=0.0, wind=9.84636, temperature=11.6582, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:39:09.216', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6752499999999992, nan, nan, nan, nan, nan, nan, nan, 2.767999999999999, nan, 2.496999999999998, 2.274749999999999, nan, nan, nan, 2.7664999999999997, 2.6807499999999997, nan, 2.4450000000000003, 2.107500000000001, 3.1000000000000014, nan, nan], zp_timestamp='2026-04-12T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:39:29.227 [DEBUG] [Thread-195537] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:39:29.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:39:29.320 [DEBUG] [Thread-195540] [transport.py] [_log()] starting thread (client mode): 0xae537dc0
2026-04-12T20:39:29.321 [DEBUG] [Thread-195540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:39:29.335 [DEBUG] [Thread-195540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:39:29.335 [INFO] [Thread-195540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] client lang: <none>
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] server lang: <none>
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] kex follows: False
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:39:29.343 [DEBUG] [Thread-195540] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:39:29.344 [DEBUG] [Thread-195540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:39:29.344 [DEBUG] [Thread-195540] [transport.py] [_log()] Compression: none
2026-04-12T20:39:29.344 [DEBUG] [Thread-195540] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:39:29.404 [DEBUG] [Thread-195540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:39:29.404 [DEBUG] [Thread-195540] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:39:29.405 [DEBUG] [Thread-195540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:39:29.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:39:29.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:39:29.462 [DEBUG] [Thread-195540] [transport.py] [_log()] userauth is OK
2026-04-12T20:39:29.463 [DEBUG] [Thread-195540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:39:29.463 [DEBUG] [Thread-195540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:39:29.463 [DEBUG] [Thread-195540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:39:29.463 [DEBUG] [Thread-195540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:39:29.482 [INFO] [Thread-195540] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:39:29.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:39:29.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:39:30.307 [DEBUG] [Thread-195540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:39:30.307 [DEBUG] [Thread-195540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:39:30.355 [DEBUG] [Thread-195540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:39:30.355 [DEBUG] [Thread-195540] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:39:30.364 [DEBUG] [Thread-195540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:39:30.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:39:30.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:39:30.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:39:30.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:39:30.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:39:30.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:39:30.400 [DEBUG] [Thread-195540] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:39:31.540 [DEBUG] [Thread-195542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:39:46.591 [DEBUG] [Thread-195543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:40:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:40:00.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:40:00.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:40:01.629 [DEBUG] [Thread-195544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:40:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 39, 35), 0.62675, 95.8772, 0.0, 11.8224, 12.0499, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:40:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:39:35
2026-04-12T20:40:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:40:02.176 [DEBUG] [Thread-195545] [transport.py] [_log()] starting thread (client mode): 0xae5f02b0
2026-04-12T20:40:02.176 [DEBUG] [Thread-195545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:40:02.195 [DEBUG] [Thread-195545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:40:02.195 [INFO] [Thread-195545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] client lang: <none>
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] server lang: <none>
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] kex follows: False
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] Compression: none
2026-04-12T20:40:02.198 [DEBUG] [Thread-195545] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:40:02.216 [DEBUG] [Thread-195545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:40:02.217 [DEBUG] [Thread-195545] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:40:02.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:40:02.218 [DEBUG] [Thread-195545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:40:02.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:40:02.220 [DEBUG] [Thread-195545] [transport.py] [_log()] userauth is OK
2026-04-12T20:40:02.220 [DEBUG] [Thread-195545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:40:02.220 [DEBUG] [Thread-195545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:40:02.221 [DEBUG] [Thread-195545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:40:02.221 [DEBUG] [Thread-195545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:40:02.244 [INFO] [Thread-195545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:40:02.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:40:02.891 [DEBUG] [Thread-195545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:40:02.891 [DEBUG] [Thread-195545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:40:02.892 [DEBUG] [Thread-195545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:40:02.932 [DEBUG] [Thread-195545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:40:02.932 [DEBUG] [Thread-195545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:40:02.936 [DEBUG] [Thread-195545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:40:02.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:40:02.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:40:02.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:40:02.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:40:02.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:40:02.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:40:02.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:40:02.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:40:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:40:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.777537 -999.00  +11.80   7.88     94  +10.90 1 2 1 3 1     0    0 0.91 -2.62 .NESW 7.9 7.9 197.8 10.0 13.6 -13.7 13.4 -13.2 13.2 -13.2 13.5 -14.8
2026-04-12T20:40:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:40:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:40:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.777537
2026-04-12T20:40:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:40:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:40:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:40:02.962 [DEBUG] [Thread-195545] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:40:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:40:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:40:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:39:35', tmtdew=0.62675, humidity=95.8772, cloud=0.0, wind=11.8224, temperature=12.0499, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:39:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6752499999999992, nan, nan, nan, nan, nan, nan, nan, 2.767999999999999, nan, 2.496999999999998, 2.274749999999999, nan, nan, nan, 2.7664999999999997, 2.6807499999999997, nan, 2.4450000000000003, 2.107500000000001, 3.1000000000000014, nan, nan], zp_timestamp='2026-04-12T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:40:03.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:40:03.055 [DEBUG] [Thread-195548] [transport.py] [_log()] starting thread (client mode): 0xae5f09d0
2026-04-12T20:40:03.055 [DEBUG] [Thread-195548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:40:03.070 [DEBUG] [Thread-195548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:40:03.070 [INFO] [Thread-195548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:40:03.077 [DEBUG] [Thread-195548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] client lang: <none>
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] server lang: <none>
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] kex follows: False
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] Compression: none
2026-04-12T20:40:03.078 [DEBUG] [Thread-195548] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:40:03.136 [DEBUG] [Thread-195548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:40:03.137 [DEBUG] [Thread-195548] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:40:03.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:40:03.138 [DEBUG] [Thread-195548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:40:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:40:03.192 [DEBUG] [Thread-195548] [transport.py] [_log()] userauth is OK
2026-04-12T20:40:03.192 [DEBUG] [Thread-195548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:40:03.192 [DEBUG] [Thread-195548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:40:03.192 [DEBUG] [Thread-195548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:40:03.192 [DEBUG] [Thread-195548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:40:03.211 [INFO] [Thread-195548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:40:03.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:40:03.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:40:04.043 [DEBUG] [Thread-195548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:40:04.043 [DEBUG] [Thread-195548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:40:04.091 [DEBUG] [Thread-195548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:40:04.091 [DEBUG] [Thread-195548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:40:04.100 [DEBUG] [Thread-195548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:40:04.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:40: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')
2026-04-12T20:40:04.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:40:04.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:40:04.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:40:04.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:40:04.137 [DEBUG] [Thread-195548] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:40:08.786 [DEBUG] [Thread-195550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:40:10.677 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:40:10.678 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:40:16.665 [DEBUG] [Thread-195551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:40:31.717 [DEBUG] [Thread-195552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:40:34.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:40:34.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:40:34.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:40:35.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 40, 11), 0.363305, 97.4386, 0.0, 9.56412, 11.6584, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:40:35.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:40:11
2026-04-12T20:40:35.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:40:36.007 [DEBUG] [Thread-195553] [transport.py] [_log()] starting thread (client mode): 0xb0f425c0
2026-04-12T20:40:36.007 [DEBUG] [Thread-195553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:40:36.026 [DEBUG] [Thread-195553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:40:36.026 [INFO] [Thread-195553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:40:36.029 [DEBUG] [Thread-195553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] client lang: <none>
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] server lang: <none>
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] kex follows: False
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] Compression: none
2026-04-12T20:40:36.030 [DEBUG] [Thread-195553] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:40:36.048 [DEBUG] [Thread-195553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:40:36.049 [DEBUG] [Thread-195553] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:40:36.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:40:36.050 [DEBUG] [Thread-195553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:40:36.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:40:36.052 [DEBUG] [Thread-195553] [transport.py] [_log()] userauth is OK
2026-04-12T20:40:36.052 [DEBUG] [Thread-195553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:40:36.052 [DEBUG] [Thread-195553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:40:36.052 [DEBUG] [Thread-195553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:40:36.053 [DEBUG] [Thread-195553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:40:36.076 [INFO] [Thread-195553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:40:36.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:40:36.729 [DEBUG] [Thread-195553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:40:36.729 [DEBUG] [Thread-195553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:40:36.729 [DEBUG] [Thread-195553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:40:36.770 [DEBUG] [Thread-195553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:40:36.770 [DEBUG] [Thread-195553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:40:36.774 [DEBUG] [Thread-195553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:40:36.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:40:36.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:40:36.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:40:36.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:40:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:40:36.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:40:36.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:40:36.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:40:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:40:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.777884 -999.00  +11.80   5.68     94  +10.90 1 2 1 3 1     0    0 0.90 -3.01 .NESW 5.7 5.7 216.6 9.6 13.6 -13.7 13.4 -13.3 13.2 -12.7 13.5 -13.0
2026-04-12T20:40:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:40:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:40:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.777884
2026-04-12T20:40:36.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:40:36.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:40:36.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:40:36.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:40:36.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:40:36.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:40:11', tmtdew=0.363305, humidity=97.4386, cloud=0.0, wind=9.56412, temperature=11.6584, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:40:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6752499999999992, nan, nan, nan, nan, nan, nan, nan, 2.767999999999999, nan, 2.496999999999998, 2.274749999999999, nan, nan, nan, 2.7664999999999997, 2.6807499999999997, nan, 2.4450000000000003, 2.107500000000001, 3.1000000000000014, nan, nan], zp_timestamp='2026-04-12T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:40:36.804 [DEBUG] [Thread-195553] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:40:36.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:40:36.909 [DEBUG] [Thread-195556] [transport.py] [_log()] starting thread (client mode): 0xae563550
2026-04-12T20:40:36.909 [DEBUG] [Thread-195556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:40:36.924 [DEBUG] [Thread-195556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:40:36.924 [INFO] [Thread-195556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:40:36.932 [DEBUG] [Thread-195556] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:40:36.932 [DEBUG] [Thread-195556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:40:36.932 [DEBUG] [Thread-195556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:40:36.932 [DEBUG] [Thread-195556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:36.932 [DEBUG] [Thread-195556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:40:36.932 [DEBUG] [Thread-195556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:36.932 [DEBUG] [Thread-195556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] client lang: <none>
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] server lang: <none>
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] kex follows: False
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:40:36.933 [DEBUG] [Thread-195556] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:40:36.934 [DEBUG] [Thread-195556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:40:36.934 [DEBUG] [Thread-195556] [transport.py] [_log()] Compression: none
2026-04-12T20:40:36.934 [DEBUG] [Thread-195556] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:40:36.989 [DEBUG] [Thread-195556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:40:36.999 [DEBUG] [Thread-195556] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:40:36.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:40:37.000 [DEBUG] [Thread-195556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:40:37.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:40:37.045 [DEBUG] [Thread-195556] [transport.py] [_log()] userauth is OK
2026-04-12T20:40:37.045 [DEBUG] [Thread-195556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:40:37.046 [DEBUG] [Thread-195556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:40:37.046 [DEBUG] [Thread-195556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:40:37.046 [DEBUG] [Thread-195556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:40:37.065 [INFO] [Thread-195556] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:40:37.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:40:37.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:40:37.899 [DEBUG] [Thread-195556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:40:37.899 [DEBUG] [Thread-195556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:40:37.947 [DEBUG] [Thread-195556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:40:37.947 [DEBUG] [Thread-195556] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:40:37.956 [DEBUG] [Thread-195556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:40:37.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:40:37.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:40:37.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:40:37.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:40:37.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:40:37.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:40:37.987 [DEBUG] [Thread-195556] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:40:46.750 [DEBUG] [Thread-195558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:41:01.797 [DEBUG] [Thread-195559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:41:07.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:41:07.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:41: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
2026-04-12T20:41:08.869 [DEBUG] [Thread-195560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:41:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 40, 46), 0.62152, 95.9104, 0.0, 11.9988, 12.0499, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:41:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:40:46
2026-04-12T20:41:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:41:09.892 [DEBUG] [Thread-195561] [transport.py] [_log()] starting thread (client mode): 0xae5a7940
2026-04-12T20:41:09.892 [DEBUG] [Thread-195561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:41:09.912 [DEBUG] [Thread-195561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:41:09.913 [INFO] [Thread-195561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:41:09.916 [DEBUG] [Thread-195561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:41:09.916 [DEBUG] [Thread-195561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:41:09.916 [DEBUG] [Thread-195561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:41:09.916 [DEBUG] [Thread-195561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:09.916 [DEBUG] [Thread-195561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:09.916 [DEBUG] [Thread-195561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:09.916 [DEBUG] [Thread-195561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] client lang: <none>
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] server lang: <none>
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] kex follows: False
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] Compression: none
2026-04-12T20:41:09.917 [DEBUG] [Thread-195561] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:41:09.936 [DEBUG] [Thread-195561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:41:09.937 [DEBUG] [Thread-195561] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:41:09.938 [DEBUG] [Thread-195561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:41:09.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:41:09.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:41:09.940 [DEBUG] [Thread-195561] [transport.py] [_log()] userauth is OK
2026-04-12T20:41:09.940 [DEBUG] [Thread-195561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:41:09.940 [DEBUG] [Thread-195561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:41:09.941 [DEBUG] [Thread-195561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:41:09.941 [DEBUG] [Thread-195561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:41:09.958 [INFO] [Thread-195561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:41:09.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:41:10.607 [DEBUG] [Thread-195561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:41:10.607 [DEBUG] [Thread-195561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:41:10.608 [DEBUG] [Thread-195561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:41:10.648 [DEBUG] [Thread-195561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:41:10.648 [DEBUG] [Thread-195561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:41:10.652 [DEBUG] [Thread-195561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:41:10.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:41:10.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:41:10.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:41:10.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:41:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:41:10.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:41:10.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:41:10.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:41:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:41:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.778231 -999.00  +11.80   6.13     94  +10.90 1 2 1 3 1     0    0 0.89 -3.46 ....W 6.1 6.1 219.8 10.4 13.6 -14.0 13.4 -13.6 13.1 -11.9 13.5 -12.5
2026-04-12T20:41:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:41:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:41:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.778231
2026-04-12T20:41:10.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:41:10.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:41:10.677 [DEBUG] [Thread-195561] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:41:10.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:41:10.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:41:10.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:41:10.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:40:46', tmtdew=0.62152, humidity=95.9104, cloud=0.0, wind=11.9988, temperature=12.0499, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:40:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:41:10.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:41:10.770 [DEBUG] [Thread-195564] [transport.py] [_log()] starting thread (client mode): 0xae5608e0
2026-04-12T20:41:10.770 [DEBUG] [Thread-195564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:41:10.785 [DEBUG] [Thread-195564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:41:10.785 [INFO] [Thread-195564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] client lang: <none>
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] server lang: <none>
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] kex follows: False
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:41:10.793 [DEBUG] [Thread-195564] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:41:10.794 [DEBUG] [Thread-195564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:41:10.794 [DEBUG] [Thread-195564] [transport.py] [_log()] Compression: none
2026-04-12T20:41:10.794 [DEBUG] [Thread-195564] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:41:10.859 [DEBUG] [Thread-195564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:41:10.860 [DEBUG] [Thread-195564] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:41:10.860 [DEBUG] [Thread-195564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:41:10.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:41:10.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:41:10.884 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:41:10.886 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:41:10.917 [DEBUG] [Thread-195564] [transport.py] [_log()] userauth is OK
2026-04-12T20:41:10.917 [DEBUG] [Thread-195564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:41:10.918 [DEBUG] [Thread-195564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:41:10.918 [DEBUG] [Thread-195564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:41:10.918 [DEBUG] [Thread-195564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:41:10.937 [INFO] [Thread-195564] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:41:10.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:41:10.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:41:11.759 [DEBUG] [Thread-195564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:41:11.759 [DEBUG] [Thread-195564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:41:11.807 [DEBUG] [Thread-195564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:41:11.808 [DEBUG] [Thread-195564] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:41:11.816 [DEBUG] [Thread-195564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:41:11.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:41:11.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:41:11.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:41:11.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:41:11.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:41:11.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:41:11.851 [DEBUG] [Thread-195564] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:41:16.832 [DEBUG] [Thread-195566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:41:31.910 [DEBUG] [Thread-195567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:41:41.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:41:41.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:41:41.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:41:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 41, 21), 0.310725, 97.4554, 0.0, 9.98748, 11.6751, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:41:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:41:21
2026-04-12T20:41:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:41:43.702 [DEBUG] [Thread-195568] [transport.py] [_log()] starting thread (client mode): 0xae5f3c70
2026-04-12T20:41:43.702 [DEBUG] [Thread-195568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:41:43.722 [DEBUG] [Thread-195568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:41:43.722 [INFO] [Thread-195568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:41:43.725 [DEBUG] [Thread-195568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] client lang: <none>
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] server lang: <none>
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] kex follows: False
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:41:43.726 [DEBUG] [Thread-195568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:41:43.727 [DEBUG] [Thread-195568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:41:43.727 [DEBUG] [Thread-195568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:41:43.727 [DEBUG] [Thread-195568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:41:43.727 [DEBUG] [Thread-195568] [transport.py] [_log()] Compression: none
2026-04-12T20:41:43.727 [DEBUG] [Thread-195568] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:41:43.747 [DEBUG] [Thread-195568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:41:43.748 [DEBUG] [Thread-195568] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:41:43.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:41:43.749 [DEBUG] [Thread-195568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:41:43.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:41:43.751 [DEBUG] [Thread-195568] [transport.py] [_log()] userauth is OK
2026-04-12T20:41:43.752 [DEBUG] [Thread-195568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:41:43.752 [DEBUG] [Thread-195568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:41:43.752 [DEBUG] [Thread-195568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:41:43.752 [DEBUG] [Thread-195568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:41:43.786 [INFO] [Thread-195568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:41:43.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:41:44.414 [DEBUG] [Thread-195568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:41:44.415 [DEBUG] [Thread-195568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:41:44.415 [DEBUG] [Thread-195568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:41:44.456 [DEBUG] [Thread-195568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:41:44.456 [DEBUG] [Thread-195568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:41:44.460 [DEBUG] [Thread-195568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:41:44.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:41:44.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:41:44.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:41:44.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:41:44.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:41:44.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:41:44.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:41:44.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:41:44.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:41:44.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.778579 -999.00  +11.80   5.59     94  +10.90 1 2 1 3 1     0    0 0.88 -3.70 .NEsW 5.6 5.6 223.8 8.5 13.6 -14.0 13.4 -13.8 13.2 -13.1 13.5 -15.1
2026-04-12T20:41:44.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:41:44.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:41:44.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.778579
2026-04-12T20:41:44.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:41:44.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:41:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:41:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:41:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:41:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:41:21', tmtdew=0.310725, humidity=97.4554, cloud=0.0, wind=9.98748, temperature=11.6751, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:41:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:41:44.487 [DEBUG] [Thread-195568] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:41:44.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:41:44.584 [DEBUG] [Thread-195571] [transport.py] [_log()] starting thread (client mode): 0xae5343d0
2026-04-12T20:41:44.584 [DEBUG] [Thread-195571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:41:44.598 [DEBUG] [Thread-195571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:41:44.598 [INFO] [Thread-195571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] client lang: <none>
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] server lang: <none>
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] kex follows: False
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:41:44.606 [DEBUG] [Thread-195571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:41:44.607 [DEBUG] [Thread-195571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:41:44.607 [DEBUG] [Thread-195571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:41:44.607 [DEBUG] [Thread-195571] [transport.py] [_log()] Compression: none
2026-04-12T20:41:44.607 [DEBUG] [Thread-195571] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:41:44.667 [DEBUG] [Thread-195571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:41:44.668 [DEBUG] [Thread-195571] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:41:44.668 [DEBUG] [Thread-195571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:41:44.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:41:44.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:41:44.725 [DEBUG] [Thread-195571] [transport.py] [_log()] userauth is OK
2026-04-12T20:41:44.725 [DEBUG] [Thread-195571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:41:44.725 [DEBUG] [Thread-195571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:41:44.725 [DEBUG] [Thread-195571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:41:44.726 [DEBUG] [Thread-195571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:41:44.745 [INFO] [Thread-195571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:41:44.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:41:44.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:41:45.567 [DEBUG] [Thread-195571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:41:45.567 [DEBUG] [Thread-195571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:41:45.615 [DEBUG] [Thread-195571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:41:45.615 [DEBUG] [Thread-195571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:41:45.623 [DEBUG] [Thread-195571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:41:45.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:41:45.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:41:45.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:41:45.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:41:45.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:41:45.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:41:45.655 [DEBUG] [Thread-195571] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:41:46.946 [DEBUG] [Thread-195573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:02.001 [DEBUG] [Thread-195574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:08.928 [DEBUG] [Thread-195575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:11.090 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:11.091 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:15.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:42:15.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:42:15.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:42:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 41, 57), 0.36318, 97.439, 0.0, 9.5112, 11.692, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:42:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:41:57
2026-04-12T20:42:17.045 [DEBUG] [Thread-195576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:42:17.477 [DEBUG] [Thread-195577] [transport.py] [_log()] starting thread (client mode): 0xae534760
2026-04-12T20:42:17.477 [DEBUG] [Thread-195577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:42:17.498 [DEBUG] [Thread-195577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:42:17.498 [INFO] [Thread-195577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:42:17.500 [DEBUG] [Thread-195577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] client lang: <none>
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] server lang: <none>
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] kex follows: False
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] Compression: none
2026-04-12T20:42:17.501 [DEBUG] [Thread-195577] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:42:17.519 [DEBUG] [Thread-195577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:42:17.529 [DEBUG] [Thread-195577] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:42:17.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:42:17.530 [DEBUG] [Thread-195577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:42:17.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:42:17.532 [DEBUG] [Thread-195577] [transport.py] [_log()] userauth is OK
2026-04-12T20:42:17.532 [DEBUG] [Thread-195577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:42:17.533 [DEBUG] [Thread-195577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:42:17.533 [DEBUG] [Thread-195577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:42:17.533 [DEBUG] [Thread-195577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:42:17.558 [INFO] [Thread-195577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:42:17.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:42:18.207 [DEBUG] [Thread-195577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:42:18.207 [DEBUG] [Thread-195577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:42:18.208 [DEBUG] [Thread-195577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:42:18.248 [DEBUG] [Thread-195577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:42:18.248 [DEBUG] [Thread-195577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:42:18.260 [DEBUG] [Thread-195577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:42:18.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:42:18.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:42:18.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:42:18.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:42:18.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:42:18.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:42:18.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:42:18.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:42:18.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:42:18.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.778926 -999.00  +11.90   4.80     94  +10.90 1 2 1 3 1     0    0 0.85 -4.14 .NEsW 4.8 4.8 231.6 8.6 13.6 -14.8 13.4 -13.3 13.2 -13.4 13.5 -14.1
2026-04-12T20:42:18.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:42:18.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:42:18.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.778926
2026-04-12T20:42:18.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:42:18.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:42:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:42:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:42:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:42:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:41:57', tmtdew=0.36318, humidity=97.439, cloud=0.0, wind=9.5112, temperature=11.692, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:41:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:42:18.288 [DEBUG] [Thread-195577] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:42:18.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:42:18.395 [DEBUG] [Thread-195580] [transport.py] [_log()] starting thread (client mode): 0xae5a4eb0
2026-04-12T20:42:18.395 [DEBUG] [Thread-195580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:42:18.409 [DEBUG] [Thread-195580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:42:18.410 [INFO] [Thread-195580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:42:18.417 [DEBUG] [Thread-195580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:42:18.417 [DEBUG] [Thread-195580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] client lang: <none>
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] server lang: <none>
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] kex follows: False
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] Compression: none
2026-04-12T20:42:18.418 [DEBUG] [Thread-195580] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:42:18.474 [DEBUG] [Thread-195580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:42:18.475 [DEBUG] [Thread-195580] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:42:18.476 [DEBUG] [Thread-195580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:42:18.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:42:18.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:42:18.531 [DEBUG] [Thread-195580] [transport.py] [_log()] userauth is OK
2026-04-12T20:42:18.531 [DEBUG] [Thread-195580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:42:18.531 [DEBUG] [Thread-195580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:42:18.531 [DEBUG] [Thread-195580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:42:18.531 [DEBUG] [Thread-195580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:42:18.549 [INFO] [Thread-195580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:42:18.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:42:18.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:42:19.378 [DEBUG] [Thread-195580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:42:19.379 [DEBUG] [Thread-195580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:42:19.426 [DEBUG] [Thread-195580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:42:19.426 [DEBUG] [Thread-195580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:42:19.438 [DEBUG] [Thread-195580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:42:19.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:42:19.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:42:19.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:42:19.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:42:19.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:42:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:42:19.475 [DEBUG] [Thread-195580] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:42:32.084 [DEBUG] [Thread-195582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:47.145 [DEBUG] [Thread-195583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:42:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:42:49.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:42:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:42:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 42, 32), 0.61605, 95.9443, 0.0, 13.1983, 12.0172, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:42:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:42:32
2026-04-12T20:42:51.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:42:51.385 [DEBUG] [Thread-195584] [transport.py] [_log()] starting thread (client mode): 0xb0f8d810
2026-04-12T20:42:51.386 [DEBUG] [Thread-195584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:42:51.396 [DEBUG] [Thread-195584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:42:51.397 [INFO] [Thread-195584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:42:51.400 [DEBUG] [Thread-195584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:42:51.400 [DEBUG] [Thread-195584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:42:51.400 [DEBUG] [Thread-195584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:42:51.400 [DEBUG] [Thread-195584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:51.400 [DEBUG] [Thread-195584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:51.400 [DEBUG] [Thread-195584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] client lang: <none>
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] server lang: <none>
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] kex follows: False
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] Compression: none
2026-04-12T20:42:51.401 [DEBUG] [Thread-195584] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:42:51.421 [DEBUG] [Thread-195584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:42:51.421 [DEBUG] [Thread-195584] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:42:51.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:42:51.423 [DEBUG] [Thread-195584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:42:51.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:42:51.466 [DEBUG] [Thread-195584] [transport.py] [_log()] userauth is OK
2026-04-12T20:42:51.466 [DEBUG] [Thread-195584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:42:51.467 [DEBUG] [Thread-195584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:42:51.467 [DEBUG] [Thread-195584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:42:51.467 [DEBUG] [Thread-195584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:42:51.503 [INFO] [Thread-195584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:42:51.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:42:52.143 [DEBUG] [Thread-195584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:42:52.143 [DEBUG] [Thread-195584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:42:52.143 [DEBUG] [Thread-195584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:42:52.184 [DEBUG] [Thread-195584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:42:52.184 [DEBUG] [Thread-195584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:42:52.188 [DEBUG] [Thread-195584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:42:52.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:42:52.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:42:52.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:42:52.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:42:52.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:42:52.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:42:52.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:42:52.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:42:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:42:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.779620 -999.00  +11.80   5.02     94  +10.90 1 2 1 3 1     0    0 0.83 -4.91 .n..W 5.0 5.0 244.7 9.2 13.6 -13.2 13.4 -12.7 13.1 -12.5 13.4 -13.7
2026-04-12T20:42:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:42:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:42:52.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.779620
2026-04-12T20:42:52.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:42:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:42:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:42:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:42:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:42:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:42:32', tmtdew=0.61605, humidity=95.9443, cloud=0.0, wind=13.1983, temperature=12.0172, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:42:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:42:52.215 [DEBUG] [Thread-195584] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:42:52.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:42:52.304 [DEBUG] [Thread-195587] [transport.py] [_log()] starting thread (client mode): 0xae5f31c0
2026-04-12T20:42:52.304 [DEBUG] [Thread-195587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:42:52.318 [DEBUG] [Thread-195587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:42:52.318 [INFO] [Thread-195587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:42:52.326 [DEBUG] [Thread-195587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:42:52.326 [DEBUG] [Thread-195587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:42:52.326 [DEBUG] [Thread-195587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:42:52.326 [DEBUG] [Thread-195587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:52.326 [DEBUG] [Thread-195587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] client lang: <none>
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] server lang: <none>
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] kex follows: False
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] Compression: none
2026-04-12T20:42:52.327 [DEBUG] [Thread-195587] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:42:52.390 [DEBUG] [Thread-195587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:42:52.390 [DEBUG] [Thread-195587] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:42:52.391 [DEBUG] [Thread-195587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:42:52.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:42:52.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:42:52.447 [DEBUG] [Thread-195587] [transport.py] [_log()] userauth is OK
2026-04-12T20:42:52.447 [DEBUG] [Thread-195587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:42:52.448 [DEBUG] [Thread-195587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:42:52.448 [DEBUG] [Thread-195587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:42:52.448 [DEBUG] [Thread-195587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:42:52.466 [INFO] [Thread-195587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:42:52.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:42:52.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:42:53.307 [DEBUG] [Thread-195587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:42:53.307 [DEBUG] [Thread-195587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:42:53.355 [DEBUG] [Thread-195587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:42:53.355 [DEBUG] [Thread-195587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:42:53.365 [DEBUG] [Thread-195587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:42:53.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:42:53.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:42:53.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:42:53.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:42:53.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:42:53.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:42:53.407 [DEBUG] [Thread-195587] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:43:02.184 [DEBUG] [Thread-195589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:43:08.994 [DEBUG] [Thread-195590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:43:11.297 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:43:11.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:43:17.233 [DEBUG] [Thread-195591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:43:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:43:23.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:43:23.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:43:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 43, 8), 0.363095, 97.4391, 0.0, 11.3641, 11.6255, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:43:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:43:08
2026-04-12T20:43:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:43:25.247 [DEBUG] [Thread-195592] [transport.py] [_log()] starting thread (client mode): 0xb0f8ebc0
2026-04-12T20:43:25.247 [DEBUG] [Thread-195592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:43:25.267 [DEBUG] [Thread-195592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:43:25.267 [INFO] [Thread-195592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] client lang: <none>
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] server lang: <none>
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] kex follows: False
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] Compression: none
2026-04-12T20:43:25.269 [DEBUG] [Thread-195592] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:43:25.282 [DEBUG] [Thread-195592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:43:25.283 [DEBUG] [Thread-195592] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:43:25.283 [DEBUG] [Thread-195592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:43:25.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:43:25.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:43:25.285 [DEBUG] [Thread-195592] [transport.py] [_log()] userauth is OK
2026-04-12T20:43:25.285 [DEBUG] [Thread-195592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:43:25.286 [DEBUG] [Thread-195592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:43:25.286 [DEBUG] [Thread-195592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:43:25.286 [DEBUG] [Thread-195592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:43:25.303 [INFO] [Thread-195592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:43:25.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:43:25.896 [DEBUG] [Thread-195592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:43:25.896 [DEBUG] [Thread-195592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:43:25.897 [DEBUG] [Thread-195592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:43:25.937 [DEBUG] [Thread-195592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:43:25.937 [DEBUG] [Thread-195592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:43:25.940 [DEBUG] [Thread-195592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:43:25.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:43:25.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:43:25.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:43:25.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:43:25.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:43:25.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:43:25.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:43:25.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:43:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:43:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.779967 -999.00  +11.80   5.93     94  +10.90 1 2 1 3 1     0    0 0.83 -5.02 ..eSW 5.9 5.9 209.6 9.5 13.6 -13.0 13.4 -12.6 13.2 -12.9 13.5 -13.2
2026-04-12T20:43:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:43:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:43:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.779967
2026-04-12T20:43:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:43:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:43:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:43:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:43:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:43:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:43:08', tmtdew=0.363095, humidity=97.4391, cloud=0.0, wind=11.3641, temperature=11.6255, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:43:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:43:25.961 [DEBUG] [Thread-195592] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:43:26.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:43:26.056 [DEBUG] [Thread-195595] [transport.py] [_log()] starting thread (client mode): 0xb0f8c820
2026-04-12T20:43:26.056 [DEBUG] [Thread-195595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:43:26.071 [DEBUG] [Thread-195595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:43:26.071 [INFO] [Thread-195595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] client lang: <none>
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] server lang: <none>
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] kex follows: False
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:43:26.079 [DEBUG] [Thread-195595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:43:26.080 [DEBUG] [Thread-195595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:43:26.080 [DEBUG] [Thread-195595] [transport.py] [_log()] Compression: none
2026-04-12T20:43:26.080 [DEBUG] [Thread-195595] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:43:26.134 [DEBUG] [Thread-195595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:43:26.134 [DEBUG] [Thread-195595] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:43:26.135 [DEBUG] [Thread-195595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:43:26.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:43:26.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:43:26.192 [DEBUG] [Thread-195595] [transport.py] [_log()] userauth is OK
2026-04-12T20:43:26.192 [DEBUG] [Thread-195595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:43:26.192 [DEBUG] [Thread-195595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:43:26.193 [DEBUG] [Thread-195595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:43:26.193 [DEBUG] [Thread-195595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:43:26.211 [INFO] [Thread-195595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:43:26.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:43:26.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:43:27.051 [DEBUG] [Thread-195595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:43:27.051 [DEBUG] [Thread-195595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:43:27.102 [DEBUG] [Thread-195595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:43:27.102 [DEBUG] [Thread-195595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:43:27.115 [DEBUG] [Thread-195595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:43:27.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:43:27.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:43:27.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:43:27.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:43:27.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:43:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:43:27.150 [DEBUG] [Thread-195595] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:43:32.271 [DEBUG] [Thread-195597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:43:47.312 [DEBUG] [Thread-195598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:43:57.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:43:57.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:43:57.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:43:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 43, 43), 0.6057, 96.0109, 0.0, 11.399, 12.0506, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:43:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:43:43
2026-04-12T20:43:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:43:58.960 [DEBUG] [Thread-195599] [transport.py] [_log()] starting thread (client mode): 0xb0f8d3f0
2026-04-12T20:43:58.960 [DEBUG] [Thread-195599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:43:58.978 [DEBUG] [Thread-195599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:43:58.979 [INFO] [Thread-195599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:43:58.980 [DEBUG] [Thread-195599] [transport.py] [_log()] client lang: <none>
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] server lang: <none>
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] kex follows: False
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] Compression: none
2026-04-12T20:43:58.981 [DEBUG] [Thread-195599] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:43:58.989 [DEBUG] [Thread-195599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:43:58.989 [DEBUG] [Thread-195599] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:43:58.990 [DEBUG] [Thread-195599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:43:58.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:43:58.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:43:58.991 [DEBUG] [Thread-195599] [transport.py] [_log()] userauth is OK
2026-04-12T20:43:58.992 [DEBUG] [Thread-195599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:43:58.992 [DEBUG] [Thread-195599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:43:58.992 [DEBUG] [Thread-195599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:43:58.992 [DEBUG] [Thread-195599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:43:59.009 [INFO] [Thread-195599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:43:59.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:43:59.632 [DEBUG] [Thread-195599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:43:59.632 [DEBUG] [Thread-195599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:43:59.632 [DEBUG] [Thread-195599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:43:59.673 [DEBUG] [Thread-195599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:43:59.673 [DEBUG] [Thread-195599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:43:59.677 [DEBUG] [Thread-195599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:43:59.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:43:59.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:43:59.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:43:59.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:43:59.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:43:59.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:43:59.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:43:59.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:43:59.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:43:59.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.780315 -999.00  +11.80   3.66     94  +10.90 1 2 1 3 1     0    0 0.81 -5.49 ..eSW 3.7 3.7 212.0 6.0 13.6 -12.9 13.4 -13.2 13.2 -12.2 13.5 -13.1
2026-04-12T20:43:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:43:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:43:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.780315
2026-04-12T20:43:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:43:59.710 [DEBUG] [Thread-195599] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:43:59.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:43:59.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:43:59.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:43:59.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:43:59.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:43:43', tmtdew=0.6057, humidity=96.0109, cloud=0.0, wind=11.399, temperature=12.0506, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:43:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:43:59.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:43:59.802 [DEBUG] [Thread-195602] [transport.py] [_log()] starting thread (client mode): 0xb0f8e950
2026-04-12T20:43:59.802 [DEBUG] [Thread-195602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:43:59.816 [DEBUG] [Thread-195602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:43:59.816 [INFO] [Thread-195602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] client lang: <none>
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] server lang: <none>
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] kex follows: False
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:43:59.824 [DEBUG] [Thread-195602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:43:59.825 [DEBUG] [Thread-195602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:43:59.825 [DEBUG] [Thread-195602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:43:59.825 [DEBUG] [Thread-195602] [transport.py] [_log()] Compression: none
2026-04-12T20:43:59.825 [DEBUG] [Thread-195602] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:43:59.886 [DEBUG] [Thread-195602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:43:59.886 [DEBUG] [Thread-195602] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:43:59.887 [DEBUG] [Thread-195602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:43:59.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:43:59.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:43:59.944 [DEBUG] [Thread-195602] [transport.py] [_log()] userauth is OK
2026-04-12T20:43:59.944 [DEBUG] [Thread-195602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:43:59.944 [DEBUG] [Thread-195602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:43:59.944 [DEBUG] [Thread-195602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:43:59.944 [DEBUG] [Thread-195602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:43:59.962 [INFO] [Thread-195602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:43:59.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:43:59.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:44:00.796 [DEBUG] [Thread-195602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:44:00.796 [DEBUG] [Thread-195602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:44:00.846 [DEBUG] [Thread-195602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:44:00.846 [DEBUG] [Thread-195602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:44:00.855 [DEBUG] [Thread-195602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:44:00.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:44:00.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:44:00.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:44:00.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:44:00.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:44:00.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:44:00.889 [DEBUG] [Thread-195602] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:44:02.352 [DEBUG] [Thread-195604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:44:09.051 [DEBUG] [Thread-195605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:44:11.501 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:44:11.503 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:44:17.405 [DEBUG] [Thread-195606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:44:30.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:44:30.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:44:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:44:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 44, 19), 0.35022, 97.5221, 0.0, 9.70524, 11.6753, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:44:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:44:19
2026-04-12T20:44:32.446 [DEBUG] [Thread-195607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:44:32.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:44:32.767 [DEBUG] [Thread-195608] [transport.py] [_log()] starting thread (client mode): 0xae5b0190
2026-04-12T20:44:32.767 [DEBUG] [Thread-195608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:44:32.787 [DEBUG] [Thread-195608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:44:32.787 [INFO] [Thread-195608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:44:32.790 [DEBUG] [Thread-195608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] client lang: <none>
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] server lang: <none>
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] kex follows: False
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] Compression: none
2026-04-12T20:44:32.791 [DEBUG] [Thread-195608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:44:32.807 [DEBUG] [Thread-195608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:44:32.808 [DEBUG] [Thread-195608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:44:32.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:44:32.809 [DEBUG] [Thread-195608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:44:32.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:44:32.811 [DEBUG] [Thread-195608] [transport.py] [_log()] userauth is OK
2026-04-12T20:44:32.811 [DEBUG] [Thread-195608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:44:32.811 [DEBUG] [Thread-195608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:44:32.811 [DEBUG] [Thread-195608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:44:32.811 [DEBUG] [Thread-195608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:44:32.830 [INFO] [Thread-195608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:44:32.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:44:33.414 [DEBUG] [Thread-195608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:44:33.414 [DEBUG] [Thread-195608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:44:33.415 [DEBUG] [Thread-195608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:44:33.455 [DEBUG] [Thread-195608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:44:33.455 [DEBUG] [Thread-195608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:44:33.457 [DEBUG] [Thread-195608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:44:33.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:44:33.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:44:33.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:44:33.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:44:33.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:44:33.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:44:33.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:44:33.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:44:33.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:44:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.780662 -999.00  +11.80   6.08     94  +10.90 1 2 1 3 1     0    0 0.81 -5.57 ...Sw 6.1 6.1 196.8 7.7 13.6 -13.5 13.4 -14.3 13.2 -13.0 13.5 -14.1
2026-04-12T20:44:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:44:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:44:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.780662
2026-04-12T20:44:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:44:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:44:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:44:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:44:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:44:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:44:19', tmtdew=0.35022, humidity=97.5221, cloud=0.0, wind=9.70524, temperature=11.6753, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:44:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:44:33.482 [DEBUG] [Thread-195608] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:44:33.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:44:33.579 [DEBUG] [Thread-195611] [transport.py] [_log()] starting thread (client mode): 0xae5347c0
2026-04-12T20:44:33.579 [DEBUG] [Thread-195611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:44:33.597 [DEBUG] [Thread-195611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:44:33.597 [INFO] [Thread-195611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:44:33.605 [DEBUG] [Thread-195611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:44:33.605 [DEBUG] [Thread-195611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:44:33.606 [DEBUG] [Thread-195611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:44:33.606 [DEBUG] [Thread-195611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:44:33.606 [DEBUG] [Thread-195611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:44:33.606 [DEBUG] [Thread-195611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] client lang: <none>
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] server lang: <none>
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] kex follows: False
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:44:33.607 [DEBUG] [Thread-195611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:44:33.608 [DEBUG] [Thread-195611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:44:33.608 [DEBUG] [Thread-195611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:44:33.608 [DEBUG] [Thread-195611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:44:33.608 [DEBUG] [Thread-195611] [transport.py] [_log()] Compression: none
2026-04-12T20:44:33.608 [DEBUG] [Thread-195611] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:44:33.664 [DEBUG] [Thread-195611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:44:33.664 [DEBUG] [Thread-195611] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:44:33.665 [DEBUG] [Thread-195611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:44:33.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:44:33.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:44:33.720 [DEBUG] [Thread-195611] [transport.py] [_log()] userauth is OK
2026-04-12T20:44:33.720 [DEBUG] [Thread-195611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:44:33.720 [DEBUG] [Thread-195611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:44:33.720 [DEBUG] [Thread-195611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:44:33.720 [DEBUG] [Thread-195611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:44:33.741 [INFO] [Thread-195611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:44:33.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:44:33.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:44:34.557 [DEBUG] [Thread-195611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:44:34.558 [DEBUG] [Thread-195611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:44:34.605 [DEBUG] [Thread-195611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:44:34.606 [DEBUG] [Thread-195611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:44:34.614 [DEBUG] [Thread-195611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:44:34.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:44:34.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:44:34.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:44:34.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:44:34.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:44:34.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:44:34.649 [DEBUG] [Thread-195611] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:44:47.484 [DEBUG] [Thread-195613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:45:02.542 [DEBUG] [Thread-195614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:45:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:45:04.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:45:04.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:45:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 44, 55), 0.35022, 97.5221, 0.0, 9.423, 11.6753, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:45:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:44:55
2026-04-12T20:45:06.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:45:06.567 [DEBUG] [Thread-195615] [transport.py] [_log()] starting thread (client mode): 0xae5f3be0
2026-04-12T20:45:06.567 [DEBUG] [Thread-195615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:45:06.579 [DEBUG] [Thread-195615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:45:06.579 [INFO] [Thread-195615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:45:06.581 [DEBUG] [Thread-195615] [transport.py] [_log()] client lang: <none>
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] server lang: <none>
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] kex follows: False
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] Compression: none
2026-04-12T20:45:06.582 [DEBUG] [Thread-195615] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:45:06.589 [DEBUG] [Thread-195615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:45:06.589 [DEBUG] [Thread-195615] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:45:06.590 [DEBUG] [Thread-195615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:45:06.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:45:06.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:45:06.591 [DEBUG] [Thread-195615] [transport.py] [_log()] userauth is OK
2026-04-12T20:45:06.591 [DEBUG] [Thread-195615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:45:06.591 [DEBUG] [Thread-195615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:45:06.591 [DEBUG] [Thread-195615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:45:06.591 [DEBUG] [Thread-195615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:45:06.602 [INFO] [Thread-195615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:45:06.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:45:07.327 [DEBUG] [Thread-195615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:45:07.327 [DEBUG] [Thread-195615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:45:07.328 [DEBUG] [Thread-195615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:45:07.367 [DEBUG] [Thread-195615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:45:07.368 [DEBUG] [Thread-195615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:45:07.370 [DEBUG] [Thread-195615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:45:07.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:45:07.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:45:07.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:45:07.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:45:07.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:45:07.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:45:07.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:45:07.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:45:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:45:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.781009 -999.00  +11.80   4.49     94  +10.90 1 2 1 3 1     0    0 0.78 -6.47 ...sW 4.5 4.5 220.3 7.5 13.6 -15.1 13.4 -13.1 13.1 -13.5 13.5 -15.3
2026-04-12T20:45:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:45:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:45:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.781009
2026-04-12T20:45:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:45:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:45:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:45:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:45:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:45:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:44:55', tmtdew=0.35022, humidity=97.5221, cloud=0.0, wind=9.423, temperature=11.6753, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:44:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:45:07.388 [DEBUG] [Thread-195615] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:45:07.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:45:07.480 [DEBUG] [Thread-195618] [transport.py] [_log()] starting thread (client mode): 0xae5b24a0
2026-04-12T20:45:07.480 [DEBUG] [Thread-195618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:45:07.497 [DEBUG] [Thread-195618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:45:07.497 [INFO] [Thread-195618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] client lang: <none>
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] server lang: <none>
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] kex follows: False
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:45:07.505 [DEBUG] [Thread-195618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:45:07.506 [DEBUG] [Thread-195618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:45:07.506 [DEBUG] [Thread-195618] [transport.py] [_log()] Compression: none
2026-04-12T20:45:07.506 [DEBUG] [Thread-195618] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:45:07.567 [DEBUG] [Thread-195618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:45:07.568 [DEBUG] [Thread-195618] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:45:07.568 [DEBUG] [Thread-195618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:45:07.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:45:07.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:45:07.625 [DEBUG] [Thread-195618] [transport.py] [_log()] userauth is OK
2026-04-12T20:45:07.625 [DEBUG] [Thread-195618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:45:07.625 [DEBUG] [Thread-195618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:45:07.625 [DEBUG] [Thread-195618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:45:07.625 [DEBUG] [Thread-195618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:45:07.646 [INFO] [Thread-195618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:45:07.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:45:07.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:45:08.467 [DEBUG] [Thread-195618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:45:08.467 [DEBUG] [Thread-195618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:45:08.515 [DEBUG] [Thread-195618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:45:08.515 [DEBUG] [Thread-195618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:45:08.524 [DEBUG] [Thread-195618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:45:08.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:45:08.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:45:08.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:45:08.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:45:08.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:45:08.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:45:08.559 [DEBUG] [Thread-195618] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:45:09.117 [DEBUG] [Thread-195620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:45:11.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:45:11.713 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:45:17.570 [DEBUG] [Thread-195621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:45:32.617 [DEBUG] [Thread-195622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:45:38.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:45:38.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:45:38.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:45:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 45, 30), 0.352755, 97.5056, 0.0, 8.84088, 11.6588, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:45:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:45:30
2026-04-12T20:45:40.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:45:40.417 [DEBUG] [Thread-195623] [transport.py] [_log()] starting thread (client mode): 0xae5a4ac0
2026-04-12T20:45:40.417 [DEBUG] [Thread-195623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:45:40.436 [DEBUG] [Thread-195623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:45:40.436 [INFO] [Thread-195623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:45:40.439 [DEBUG] [Thread-195623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:45:40.439 [DEBUG] [Thread-195623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] client lang: <none>
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] server lang: <none>
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] kex follows: False
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:45:40.440 [DEBUG] [Thread-195623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:45:40.441 [DEBUG] [Thread-195623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:45:40.441 [DEBUG] [Thread-195623] [transport.py] [_log()] Compression: none
2026-04-12T20:45:40.441 [DEBUG] [Thread-195623] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:45:40.459 [DEBUG] [Thread-195623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:45:40.460 [DEBUG] [Thread-195623] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:45:40.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:45:40.461 [DEBUG] [Thread-195623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:45:40.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:45:40.463 [DEBUG] [Thread-195623] [transport.py] [_log()] userauth is OK
2026-04-12T20:45:40.463 [DEBUG] [Thread-195623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:45:40.463 [DEBUG] [Thread-195623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:45:40.463 [DEBUG] [Thread-195623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:45:40.463 [DEBUG] [Thread-195623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:45:40.487 [INFO] [Thread-195623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:45:40.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:45:41.154 [DEBUG] [Thread-195623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:45:41.155 [DEBUG] [Thread-195623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:45:41.155 [DEBUG] [Thread-195623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:45:41.196 [DEBUG] [Thread-195623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:45:41.196 [DEBUG] [Thread-195623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:45:41.199 [DEBUG] [Thread-195623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:45:41.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:45:41.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:45:41.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:45:41.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:45:41.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:45:41.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:45:41.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:45:41.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:45:41.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:45:41.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.781356 -999.00  +11.80   4.85     94  +10.90 1 2 1 3 1     0    0 0.78 -6.40 ...sW 4.8 4.8 216.4 7.7 13.6 -13.4 13.3 -13.1 13.2 -13.0 13.5 -14.3
2026-04-12T20:45:41.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:45:41.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:45:41.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.781356
2026-04-12T20:45:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:45:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:45:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:45:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:45:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:45:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:45:30', tmtdew=0.352755, humidity=97.5056, cloud=0.0, wind=8.84088, temperature=11.6588, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:45:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:45:41.221 [DEBUG] [Thread-195623] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:45:41.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:45:41.315 [DEBUG] [Thread-195626] [transport.py] [_log()] starting thread (client mode): 0xae5a5ab0
2026-04-12T20:45:41.315 [DEBUG] [Thread-195626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:45:41.329 [DEBUG] [Thread-195626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:45:41.330 [INFO] [Thread-195626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:45:41.337 [DEBUG] [Thread-195626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:45:41.337 [DEBUG] [Thread-195626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] client lang: <none>
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] server lang: <none>
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] kex follows: False
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:45:41.338 [DEBUG] [Thread-195626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:45:41.339 [DEBUG] [Thread-195626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:45:41.339 [DEBUG] [Thread-195626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:45:41.339 [DEBUG] [Thread-195626] [transport.py] [_log()] Compression: none
2026-04-12T20:45:41.339 [DEBUG] [Thread-195626] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:45:41.398 [DEBUG] [Thread-195626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:45:41.398 [DEBUG] [Thread-195626] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:45:41.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:45:41.399 [DEBUG] [Thread-195626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:45:41.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:45:41.459 [DEBUG] [Thread-195626] [transport.py] [_log()] userauth is OK
2026-04-12T20:45:41.459 [DEBUG] [Thread-195626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:45:41.459 [DEBUG] [Thread-195626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:45:41.459 [DEBUG] [Thread-195626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:45:41.459 [DEBUG] [Thread-195626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:45:41.479 [INFO] [Thread-195626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:45:41.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:45:41.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:45:42.332 [DEBUG] [Thread-195626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:45:42.332 [DEBUG] [Thread-195626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:45:42.380 [DEBUG] [Thread-195626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:45:42.380 [DEBUG] [Thread-195626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:45:42.389 [DEBUG] [Thread-195626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:45:42.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:45:42.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:45: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
2026-04-12T20:45:42.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:45:42.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:45:42.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:45:42.426 [DEBUG] [Thread-195626] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:45:47.657 [DEBUG] [Thread-195628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:02.710 [DEBUG] [Thread-195629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:09.173 [DEBUG] [Thread-195630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:11.917 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:11.918 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:46:12.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:46:12.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:46:13.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 46, 5), 0.35543, 97.489, 0.0, 9.45828, 11.6754, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:46:13.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:46:05
2026-04-12T20:46:14.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:46:14.262 [DEBUG] [Thread-195631] [transport.py] [_log()] starting thread (client mode): 0xb0f8d3f0
2026-04-12T20:46:14.262 [DEBUG] [Thread-195631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:46:14.283 [DEBUG] [Thread-195631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:46:14.283 [INFO] [Thread-195631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] client lang: <none>
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] server lang: <none>
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] kex follows: False
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] Compression: none
2026-04-12T20:46:14.287 [DEBUG] [Thread-195631] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:46:14.311 [DEBUG] [Thread-195631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:46:14.312 [DEBUG] [Thread-195631] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:46:14.313 [DEBUG] [Thread-195631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:46:14.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:46:14.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:46:14.314 [DEBUG] [Thread-195631] [transport.py] [_log()] userauth is OK
2026-04-12T20:46:14.315 [DEBUG] [Thread-195631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:46:14.315 [DEBUG] [Thread-195631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:46:14.315 [DEBUG] [Thread-195631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:46:14.315 [DEBUG] [Thread-195631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:46:14.340 [INFO] [Thread-195631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:46:14.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:46:15.093 [DEBUG] [Thread-195631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:46:15.093 [DEBUG] [Thread-195631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:46:15.094 [DEBUG] [Thread-195631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:46:15.134 [DEBUG] [Thread-195631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:46:15.134 [DEBUG] [Thread-195631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:46:15.138 [DEBUG] [Thread-195631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:46:15.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:46:15.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:46:15.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:46:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:46:15.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:46:15.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:46:15.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:46:15.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:46:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:46:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.782051 -999.00  +11.80   3.64     94  +10.90 1 2 1 3 1     0    0 0.78 -6.37 ....w 3.6 3.6 209.6 7.7 13.5 -13.7 13.3 -13.0 13.2 -12.6 13.5 -13.2
2026-04-12T20:46:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:46:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:46:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.782051
2026-04-12T20:46:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:46:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:46:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:46:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:46:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:46:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:46:05', tmtdew=0.35543, humidity=97.489, cloud=0.0, wind=9.45828, temperature=11.6754, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:46:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:46:15.165 [DEBUG] [Thread-195631] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:46:15.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:46:15.257 [DEBUG] [Thread-195634] [transport.py] [_log()] starting thread (client mode): 0xae5b1ab0
2026-04-12T20:46:15.257 [DEBUG] [Thread-195634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:46:15.273 [DEBUG] [Thread-195634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:46:15.273 [INFO] [Thread-195634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:46:15.280 [DEBUG] [Thread-195634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] client lang: <none>
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] server lang: <none>
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] kex follows: False
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] Compression: none
2026-04-12T20:46:15.281 [DEBUG] [Thread-195634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:46:15.337 [DEBUG] [Thread-195634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:46:15.338 [DEBUG] [Thread-195634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:46:15.338 [DEBUG] [Thread-195634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:46:15.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:46:15.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:46:15.394 [DEBUG] [Thread-195634] [transport.py] [_log()] userauth is OK
2026-04-12T20:46:15.395 [DEBUG] [Thread-195634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:46:15.395 [DEBUG] [Thread-195634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:46:15.395 [DEBUG] [Thread-195634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:46:15.395 [DEBUG] [Thread-195634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:46:15.414 [INFO] [Thread-195634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:46:15.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:46:15.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:46:16.242 [DEBUG] [Thread-195634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:46:16.242 [DEBUG] [Thread-195634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:46:16.290 [DEBUG] [Thread-195634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:46:16.290 [DEBUG] [Thread-195634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:46:16.300 [DEBUG] [Thread-195634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:46:16.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:46:16.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:46:16.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:46:16.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:46:16.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:46:16.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:46:16.338 [DEBUG] [Thread-195634] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:46:17.748 [DEBUG] [Thread-195636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:32.796 [DEBUG] [Thread-195637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:46.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:46:46.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:46:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:46:47.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 46, 5), 0.35543, 97.489, 0.0, 9.45828, 11.6754, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:46:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:46:05
2026-04-12T20:46:47.831 [DEBUG] [Thread-195638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:46:48.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:46:48.205 [DEBUG] [Thread-195639] [transport.py] [_log()] starting thread (client mode): 0xae5347c0
2026-04-12T20:46:48.205 [DEBUG] [Thread-195639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:46:48.225 [DEBUG] [Thread-195639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:46:48.225 [INFO] [Thread-195639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:48.229 [DEBUG] [Thread-195639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] client lang: <none>
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] server lang: <none>
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] kex follows: False
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:46:48.230 [DEBUG] [Thread-195639] [transport.py] [_log()] Compression: none
2026-04-12T20:46:48.231 [DEBUG] [Thread-195639] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:46:48.249 [DEBUG] [Thread-195639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:46:48.250 [DEBUG] [Thread-195639] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:46:48.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:46:48.251 [DEBUG] [Thread-195639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:46:48.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:46:48.253 [DEBUG] [Thread-195639] [transport.py] [_log()] userauth is OK
2026-04-12T20:46:48.253 [DEBUG] [Thread-195639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:46:48.253 [DEBUG] [Thread-195639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:46:48.253 [DEBUG] [Thread-195639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:46:48.253 [DEBUG] [Thread-195639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:46:48.276 [INFO] [Thread-195639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:46:48.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:46:49.057 [DEBUG] [Thread-195639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:46:49.057 [DEBUG] [Thread-195639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:46:49.058 [DEBUG] [Thread-195639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:46:49.098 [DEBUG] [Thread-195639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:46:49.099 [DEBUG] [Thread-195639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:46:49.102 [DEBUG] [Thread-195639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:46:49.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:46:49.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:46:49.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:46:49.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:46:49.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:46:49.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:46:49.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:46:49.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:46:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:46:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.782051 -999.00  +11.80   3.64     94  +10.90 1 2 1 3 1     0    0 0.78 -6.37 ....w 3.6 3.6 209.6 7.7 13.5 -13.7 13.3 -13.0 13.2 -12.6 13.5 -13.2
2026-04-12T20:46:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:46:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:46:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.782051
2026-04-12T20:46:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:46:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:46:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:46:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:46:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:46:49.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:46:05', tmtdew=0.35543, humidity=97.489, cloud=0.0, wind=9.45828, temperature=11.6754, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:46:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4857499999999995, nan, nan, nan, nan, nan, nan, 3.0705, 2.988999999999999, 2.195249999999999, 2.410499999999999, 2.084249999999999, 2.3042500000000006, 2.7487500000000002, nan, 2.4955, 2.5207500000000005, 2.032, 1.6109999999999998, 1.4680000000000009, 1.793000000000001, 1.9605000000000006, nan], zp_timestamp='2026-04-12T18:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:46:49.132 [DEBUG] [Thread-195639] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:46:49.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:46:49.235 [DEBUG] [Thread-195642] [transport.py] [_log()] starting thread (client mode): 0xae5b2e00
2026-04-12T20:46:49.235 [DEBUG] [Thread-195642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:46:49.250 [DEBUG] [Thread-195642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:46:49.250 [INFO] [Thread-195642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:46:49.258 [DEBUG] [Thread-195642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:46:49.258 [DEBUG] [Thread-195642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:46:49.258 [DEBUG] [Thread-195642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:46:49.258 [DEBUG] [Thread-195642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:49.258 [DEBUG] [Thread-195642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:46:49.258 [DEBUG] [Thread-195642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:49.258 [DEBUG] [Thread-195642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] client lang: <none>
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] server lang: <none>
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] kex follows: False
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] Compression: none
2026-04-12T20:46:49.259 [DEBUG] [Thread-195642] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:46:49.323 [DEBUG] [Thread-195642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:46:49.323 [DEBUG] [Thread-195642] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:46:49.324 [DEBUG] [Thread-195642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:46:49.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:46:49.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:46:49.382 [DEBUG] [Thread-195642] [transport.py] [_log()] userauth is OK
2026-04-12T20:46:49.383 [DEBUG] [Thread-195642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:46:49.383 [DEBUG] [Thread-195642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:46:49.383 [DEBUG] [Thread-195642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:46:49.383 [DEBUG] [Thread-195642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:46:49.402 [INFO] [Thread-195642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:46:49.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:46:49.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:46:50.263 [DEBUG] [Thread-195642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:46:50.264 [DEBUG] [Thread-195642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:46:50.312 [DEBUG] [Thread-195642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:46:50.312 [DEBUG] [Thread-195642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:46:50.323 [DEBUG] [Thread-195642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:46:50.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:46:50.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:46:50.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:46:50.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:46:50.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:46:50.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:46:50.360 [DEBUG] [Thread-195642] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:47:02.865 [DEBUG] [Thread-195644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:47:09.252 [DEBUG] [Thread-195645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:47:12.125 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:47:12.126 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:47:17.899 [DEBUG] [Thread-195646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:47:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:47:20.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:47:20.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:47:21.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 46, 41), 0.61553, 95.9451, 0.0, 10.6934, 11.9182, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:47:21.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:46:41
2026-04-12T20:47:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:47:22.421 [DEBUG] [Thread-195647] [transport.py] [_log()] starting thread (client mode): 0xb0f41bd0
2026-04-12T20:47:22.421 [DEBUG] [Thread-195647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:47:22.442 [DEBUG] [Thread-195647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:47:22.442 [INFO] [Thread-195647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] client lang: <none>
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] server lang: <none>
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] kex follows: False
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] Compression: none
2026-04-12T20:47:22.445 [DEBUG] [Thread-195647] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:47:22.465 [DEBUG] [Thread-195647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:47:22.466 [DEBUG] [Thread-195647] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:47:22.467 [DEBUG] [Thread-195647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:47:22.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:47:22.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:47:22.469 [DEBUG] [Thread-195647] [transport.py] [_log()] userauth is OK
2026-04-12T20:47:22.469 [DEBUG] [Thread-195647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:47:22.469 [DEBUG] [Thread-195647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:47:22.469 [DEBUG] [Thread-195647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:47:22.469 [DEBUG] [Thread-195647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:47:22.489 [INFO] [Thread-195647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:47:22.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:47:23.285 [DEBUG] [Thread-195647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:47:23.285 [DEBUG] [Thread-195647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:47:23.294 [DEBUG] [Thread-195647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:47:23.326 [DEBUG] [Thread-195647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:47:23.326 [DEBUG] [Thread-195647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:47:23.329 [DEBUG] [Thread-195647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:47:23.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:47:23.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:47:23.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:47:23.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:47:23.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:47:23.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:47:23.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:47:23.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:47:23.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:47:23.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.782398 -999.00  +11.80   4.90     94  +10.90 1 2 1 3 1     0    0 0.78 -5.77 ....w 4.9 4.9 217.0 8.3 13.6 -13.1 13.4 -12.7 13.1 -12.2 13.4 -13.2
2026-04-12T20:47:23.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:47:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:47:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.782398
2026-04-12T20:47:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:47:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:47:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:47:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:47:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:47:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:46:41', tmtdew=0.61553, humidity=95.9451, cloud=0.0, wind=10.6934, temperature=11.9182, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:46:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:47:23.352 [DEBUG] [Thread-195647] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:47:23.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:47:23.447 [DEBUG] [Thread-195650] [transport.py] [_log()] starting thread (client mode): 0xb0f6c730
2026-04-12T20:47:23.447 [DEBUG] [Thread-195650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:47:23.461 [DEBUG] [Thread-195650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:47:23.462 [INFO] [Thread-195650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:47:23.469 [DEBUG] [Thread-195650] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:47:23.469 [DEBUG] [Thread-195650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:47:23.469 [DEBUG] [Thread-195650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:47:23.469 [DEBUG] [Thread-195650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:23.469 [DEBUG] [Thread-195650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:23.469 [DEBUG] [Thread-195650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:23.469 [DEBUG] [Thread-195650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] client lang: <none>
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] server lang: <none>
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] kex follows: False
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:47:23.470 [DEBUG] [Thread-195650] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:47:23.471 [DEBUG] [Thread-195650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:47:23.471 [DEBUG] [Thread-195650] [transport.py] [_log()] Compression: none
2026-04-12T20:47:23.471 [DEBUG] [Thread-195650] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:47:23.526 [DEBUG] [Thread-195650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:47:23.526 [DEBUG] [Thread-195650] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:47:23.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:47:23.528 [DEBUG] [Thread-195650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:47:23.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:47:23.582 [DEBUG] [Thread-195650] [transport.py] [_log()] userauth is OK
2026-04-12T20:47:23.582 [DEBUG] [Thread-195650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:47:23.582 [DEBUG] [Thread-195650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:47:23.583 [DEBUG] [Thread-195650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:47:23.583 [DEBUG] [Thread-195650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:47:23.603 [INFO] [Thread-195650] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:47:23.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:47:23.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:47:24.430 [DEBUG] [Thread-195650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:47:24.430 [DEBUG] [Thread-195650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:47:24.478 [DEBUG] [Thread-195650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:47:24.478 [DEBUG] [Thread-195650] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:47:24.491 [DEBUG] [Thread-195650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:47:24.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:47:24.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:47: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
2026-04-12T20:47:24.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:47:24.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:47:24.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:47:24.533 [DEBUG] [Thread-195650] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:47:32.930 [DEBUG] [Thread-195652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:47:47.992 [DEBUG] [Thread-195653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:47:54.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:47:54.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:47:54.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:47:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 47, 16), 0.344855, 97.5554, 0.0, 9.38772, 11.6423, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:47:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:47:16
2026-04-12T20:47:56.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:47:56.448 [DEBUG] [Thread-195654] [transport.py] [_log()] starting thread (client mode): 0xb0f6c220
2026-04-12T20:47:56.449 [DEBUG] [Thread-195654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:47:56.469 [DEBUG] [Thread-195654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:47:56.469 [INFO] [Thread-195654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:47:56.472 [DEBUG] [Thread-195654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:47:56.472 [DEBUG] [Thread-195654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:47:56.472 [DEBUG] [Thread-195654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:47:56.472 [DEBUG] [Thread-195654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:56.472 [DEBUG] [Thread-195654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:56.472 [DEBUG] [Thread-195654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:56.472 [DEBUG] [Thread-195654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] client lang: <none>
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] server lang: <none>
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] kex follows: False
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] Compression: none
2026-04-12T20:47:56.473 [DEBUG] [Thread-195654] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:47:56.490 [DEBUG] [Thread-195654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:47:56.491 [DEBUG] [Thread-195654] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:47:56.491 [DEBUG] [Thread-195654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:47:56.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:47:56.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:47:56.493 [DEBUG] [Thread-195654] [transport.py] [_log()] userauth is OK
2026-04-12T20:47:56.493 [DEBUG] [Thread-195654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:47:56.494 [DEBUG] [Thread-195654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:47:56.494 [DEBUG] [Thread-195654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:47:56.494 [DEBUG] [Thread-195654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:47:56.518 [INFO] [Thread-195654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:47:56.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:47:57.320 [DEBUG] [Thread-195654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:47:57.320 [DEBUG] [Thread-195654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:47:57.321 [DEBUG] [Thread-195654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:47:57.362 [DEBUG] [Thread-195654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:47:57.362 [DEBUG] [Thread-195654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:47:57.365 [DEBUG] [Thread-195654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:47:57.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:47:57.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:47:57.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:47:57.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:47:57.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:47:57.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:47:57.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:47:57.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:47:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:47:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.782745 -999.00  +11.80   6.75     94  +10.90 1 3 1 3 1     0    0 0.78 -5.87 ..e.w 6.8 6.8 208.8 8.9 13.6 -12.5 13.4 -9.3 13.1 -9.3 13.4 -10.3
2026-04-12T20:47:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:47:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:47:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.782745
2026-04-12T20:47:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:47:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:47:57.390 [DEBUG] [Thread-195654] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:47:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:47:57.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:47:57.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:47:57.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:47:16', tmtdew=0.344855, humidity=97.5554, cloud=0.0, wind=9.38772, temperature=11.6423, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:47:09.168', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:47:57.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:47:57.477 [DEBUG] [Thread-195657] [transport.py] [_log()] starting thread (client mode): 0xae5b3160
2026-04-12T20:47:57.477 [DEBUG] [Thread-195657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:47:57.491 [DEBUG] [Thread-195657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:47:57.491 [INFO] [Thread-195657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:47:57.499 [DEBUG] [Thread-195657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:47:57.499 [DEBUG] [Thread-195657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:47:57.499 [DEBUG] [Thread-195657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] client lang: <none>
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] server lang: <none>
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] kex follows: False
2026-04-12T20:47:57.500 [DEBUG] [Thread-195657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:47:57.501 [DEBUG] [Thread-195657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:47:57.501 [DEBUG] [Thread-195657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:47:57.501 [DEBUG] [Thread-195657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:47:57.501 [DEBUG] [Thread-195657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:47:57.501 [DEBUG] [Thread-195657] [transport.py] [_log()] Compression: none
2026-04-12T20:47:57.501 [DEBUG] [Thread-195657] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:47:57.560 [DEBUG] [Thread-195657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:47:57.560 [DEBUG] [Thread-195657] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:47:57.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:47:57.562 [DEBUG] [Thread-195657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:47:57.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:47:57.619 [DEBUG] [Thread-195657] [transport.py] [_log()] userauth is OK
2026-04-12T20:47:57.619 [DEBUG] [Thread-195657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:47:57.619 [DEBUG] [Thread-195657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:47:57.619 [DEBUG] [Thread-195657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:47:57.620 [DEBUG] [Thread-195657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:47:57.647 [INFO] [Thread-195657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:47:57.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:47:57.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:47:58.468 [DEBUG] [Thread-195657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:47:58.468 [DEBUG] [Thread-195657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:47:58.516 [DEBUG] [Thread-195657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:47:58.516 [DEBUG] [Thread-195657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:47:58.525 [DEBUG] [Thread-195657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:47:58.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:47:58.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:47:58.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:47:58.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:47:58.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:47:58.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:47:58.558 [DEBUG] [Thread-195657] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:48:03.029 [DEBUG] [Thread-195659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:48:09.325 [DEBUG] [Thread-195660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:48:12.334 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:48:12.335 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:48:18.083 [DEBUG] [Thread-195661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:48:28.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:48:28.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:48:28.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:48:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 47, 52), 0.58436, 96.1442, 0.0, 11.5049, 11.9515, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:48:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:47:52
2026-04-12T20:48:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:48:30.486 [DEBUG] [Thread-195662] [transport.py] [_log()] starting thread (client mode): 0xae5092a0
2026-04-12T20:48:30.486 [DEBUG] [Thread-195662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:48:30.505 [DEBUG] [Thread-195662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:48:30.505 [INFO] [Thread-195662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:48:30.508 [DEBUG] [Thread-195662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:48:30.508 [DEBUG] [Thread-195662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:48:30.508 [DEBUG] [Thread-195662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:48:30.508 [DEBUG] [Thread-195662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:48:30.508 [DEBUG] [Thread-195662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:48:30.508 [DEBUG] [Thread-195662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:48:30.508 [DEBUG] [Thread-195662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] client lang: <none>
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] server lang: <none>
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] kex follows: False
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] Compression: none
2026-04-12T20:48:30.509 [DEBUG] [Thread-195662] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:48:30.525 [DEBUG] [Thread-195662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:48:30.526 [DEBUG] [Thread-195662] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:48:30.526 [DEBUG] [Thread-195662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:48:30.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:48:30.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:48:30.528 [DEBUG] [Thread-195662] [transport.py] [_log()] userauth is OK
2026-04-12T20:48:30.529 [DEBUG] [Thread-195662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:48:30.529 [DEBUG] [Thread-195662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:48:30.529 [DEBUG] [Thread-195662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:48:30.529 [DEBUG] [Thread-195662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:48:30.550 [INFO] [Thread-195662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:48:30.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:48:31.368 [DEBUG] [Thread-195662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:48:31.369 [DEBUG] [Thread-195662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:48:31.369 [DEBUG] [Thread-195662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:48:31.410 [DEBUG] [Thread-195662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:48:31.410 [DEBUG] [Thread-195662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:48:31.414 [DEBUG] [Thread-195662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:48:31.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:48:31.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:48:31.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:48:31.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:48:31.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:48:31.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:48:31.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:48:31.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:48:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:48:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.783092 -999.00  +11.80   4.95     94  +10.90 1 3 1 3 1     0    0 0.79 -5.95 ....w 5.0 5.0 206.9 6.2 13.6 -9.8 13.4 -8.9 13.2 -8.7 13.5 -9.0
2026-04-12T20:48:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:48:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:48:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.783092
2026-04-12T20:48:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:48:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:48:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:48:31.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:48:31.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:48:31.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:47:52', tmtdew=0.58436, humidity=96.1442, cloud=0.0, wind=11.5049, temperature=11.9515, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:47:39.149', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:48:31.442 [DEBUG] [Thread-195662] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:48:31.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:48:31.535 [DEBUG] [Thread-195665] [transport.py] [_log()] starting thread (client mode): 0xae50b430
2026-04-12T20:48:31.535 [DEBUG] [Thread-195665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:48:31.550 [DEBUG] [Thread-195665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:48:31.550 [INFO] [Thread-195665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:48:31.559 [DEBUG] [Thread-195665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:48:31.560 [DEBUG] [Thread-195665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] client lang: <none>
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] server lang: <none>
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] kex follows: False
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:48:31.561 [DEBUG] [Thread-195665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:48:31.562 [DEBUG] [Thread-195665] [transport.py] [_log()] Compression: none
2026-04-12T20:48:31.562 [DEBUG] [Thread-195665] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:48:31.617 [DEBUG] [Thread-195665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:48:31.618 [DEBUG] [Thread-195665] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:48:31.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:48:31.619 [DEBUG] [Thread-195665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:48:31.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:48:31.678 [DEBUG] [Thread-195665] [transport.py] [_log()] userauth is OK
2026-04-12T20:48:31.678 [DEBUG] [Thread-195665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:48:31.678 [DEBUG] [Thread-195665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:48:31.678 [DEBUG] [Thread-195665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:48:31.678 [DEBUG] [Thread-195665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:48:31.700 [INFO] [Thread-195665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:48:31.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:48:31.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:48:32.587 [DEBUG] [Thread-195665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:48:32.588 [DEBUG] [Thread-195665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:48:32.636 [DEBUG] [Thread-195665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:48:32.636 [DEBUG] [Thread-195665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:48:32.645 [DEBUG] [Thread-195665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:48:32.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:48:32.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:48:32.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:48:32.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:48:32.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:48:32.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:48:32.683 [DEBUG] [Thread-195665] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:48:33.118 [DEBUG] [Thread-195667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:48:48.171 [DEBUG] [Thread-195668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:49:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:49:02.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:49:02.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:49:03.209 [DEBUG] [Thread-195669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:49:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 48, 27), 0.344845, 97.5555, 0.0, 9.88164, 11.6423, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:49:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:48:27
2026-04-12T20:49:04.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:49:04.610 [DEBUG] [Thread-195670] [transport.py] [_log()] starting thread (client mode): 0xae534760
2026-04-12T20:49:04.610 [DEBUG] [Thread-195670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:49:04.631 [DEBUG] [Thread-195670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:49:04.631 [INFO] [Thread-195670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:49:04.634 [DEBUG] [Thread-195670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:49:04.634 [DEBUG] [Thread-195670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:49:04.634 [DEBUG] [Thread-195670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:49:04.634 [DEBUG] [Thread-195670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:04.634 [DEBUG] [Thread-195670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:04.634 [DEBUG] [Thread-195670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] client lang: <none>
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] server lang: <none>
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] kex follows: False
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] Compression: none
2026-04-12T20:49:04.635 [DEBUG] [Thread-195670] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:49:04.654 [DEBUG] [Thread-195670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:49:04.654 [DEBUG] [Thread-195670] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:49:04.655 [DEBUG] [Thread-195670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:49:04.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:49:04.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:49:04.657 [DEBUG] [Thread-195670] [transport.py] [_log()] userauth is OK
2026-04-12T20:49:04.657 [DEBUG] [Thread-195670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:49:04.658 [DEBUG] [Thread-195670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:49:04.658 [DEBUG] [Thread-195670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:49:04.658 [DEBUG] [Thread-195670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:49:04.681 [INFO] [Thread-195670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:49:04.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:49:05.441 [DEBUG] [Thread-195670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:49:05.442 [DEBUG] [Thread-195670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:49:05.442 [DEBUG] [Thread-195670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:49:05.483 [DEBUG] [Thread-195670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:49:05.483 [DEBUG] [Thread-195670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:49:05.486 [DEBUG] [Thread-195670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:49:05.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:49:05.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:49:05.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:49:05.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:49:05.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:49:05.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:49:05.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:49:05.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.783440 -999.00  +11.80   6.55     94  +10.90 1 3 1 3 1     0    0 0.77 -6.17 ....w 6.5 6.5 199.8 9.2 13.6 -9.6 13.4 -9.7 13.2 -9.5 13.5 -10.0
2026-04-12T20:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.783440
2026-04-12T20:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:49:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:49:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:49:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:49:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:49:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:48:27', tmtdew=0.344845, humidity=97.5555, cloud=0.0, wind=9.88164, temperature=11.6423, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:48:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:49:05.512 [DEBUG] [Thread-195670] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:49:05.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:49:05.605 [DEBUG] [Thread-195673] [transport.py] [_log()] starting thread (client mode): 0xae5a7340
2026-04-12T20:49:05.605 [DEBUG] [Thread-195673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:49:05.619 [DEBUG] [Thread-195673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:49:05.619 [INFO] [Thread-195673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:49:05.627 [DEBUG] [Thread-195673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] client lang: <none>
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] server lang: <none>
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] kex follows: False
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] Compression: none
2026-04-12T20:49:05.628 [DEBUG] [Thread-195673] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:49:05.684 [DEBUG] [Thread-195673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:49:05.684 [DEBUG] [Thread-195673] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:49:05.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:49:05.685 [DEBUG] [Thread-195673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:49:05.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:49:05.740 [DEBUG] [Thread-195673] [transport.py] [_log()] userauth is OK
2026-04-12T20:49:05.740 [DEBUG] [Thread-195673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:49:05.741 [DEBUG] [Thread-195673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:49:05.741 [DEBUG] [Thread-195673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:49:05.741 [DEBUG] [Thread-195673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:49:05.759 [INFO] [Thread-195673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:49:05.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:49:05.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:49:06.593 [DEBUG] [Thread-195673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:49:06.593 [DEBUG] [Thread-195673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:49:06.641 [DEBUG] [Thread-195673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:49:06.642 [DEBUG] [Thread-195673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:49:06.651 [DEBUG] [Thread-195673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:49:06.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:49:06.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:49:06.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:49:06.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:49:06.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:49:06.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:49:06.687 [DEBUG] [Thread-195673] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:49:09.382 [DEBUG] [Thread-195675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:49:12.552 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:49:12.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:49:18.247 [DEBUG] [Thread-195676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:49:33.302 [DEBUG] [Thread-195677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:49:36.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:49:36.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:49:36.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:49:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 49, 3), 0.34224, 97.5721, 0.0, 9.08784, 11.6423, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:49:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:49:03
2026-04-12T20:49:38.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:49:38.556 [DEBUG] [Thread-195678] [transport.py] [_log()] starting thread (client mode): 0xae5b0760
2026-04-12T20:49:38.556 [DEBUG] [Thread-195678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:49:38.577 [DEBUG] [Thread-195678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:49:38.577 [INFO] [Thread-195678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:49:38.580 [DEBUG] [Thread-195678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] client lang: <none>
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] server lang: <none>
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] kex follows: False
2026-04-12T20:49:38.581 [DEBUG] [Thread-195678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:49:38.582 [DEBUG] [Thread-195678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:49:38.582 [DEBUG] [Thread-195678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:49:38.582 [DEBUG] [Thread-195678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:49:38.582 [DEBUG] [Thread-195678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:49:38.582 [DEBUG] [Thread-195678] [transport.py] [_log()] Compression: none
2026-04-12T20:49:38.582 [DEBUG] [Thread-195678] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:49:38.602 [DEBUG] [Thread-195678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:49:38.602 [DEBUG] [Thread-195678] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:49:38.603 [DEBUG] [Thread-195678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:49:38.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:49:38.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:49:38.605 [DEBUG] [Thread-195678] [transport.py] [_log()] userauth is OK
2026-04-12T20:49:38.605 [DEBUG] [Thread-195678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:49:38.605 [DEBUG] [Thread-195678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:49:38.605 [DEBUG] [Thread-195678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:49:38.606 [DEBUG] [Thread-195678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:49:38.623 [INFO] [Thread-195678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:49:38.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:49:39.421 [DEBUG] [Thread-195678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:49:39.421 [DEBUG] [Thread-195678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:49:39.422 [DEBUG] [Thread-195678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:49:39.462 [DEBUG] [Thread-195678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:49:39.462 [DEBUG] [Thread-195678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:49:39.466 [DEBUG] [Thread-195678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:49:39.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:49:39.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:49:39.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:49:39.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:49:39.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:49:39.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:49:39.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:49:39.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:49:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:49:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.783787 -999.00  +11.80   4.30     94  +10.90 1 3 1 3 1     0    0 0.78 -6.46 ----- 4.3 4.3 230.4 9.7 13.6 -10.6 13.4 -10.3 13.2 -10.0 13.5 -10.3
2026-04-12T20:49:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:49:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:49:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.783787
2026-04-12T20:49:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:49:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:49:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:49:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:49:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:49:39.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:49:03', tmtdew=0.34224, humidity=97.5721, cloud=0.0, wind=9.08784, temperature=11.6423, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:48:39.197', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:49:39.492 [DEBUG] [Thread-195678] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:49:39.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:49:39.585 [DEBUG] [Thread-195681] [transport.py] [_log()] starting thread (client mode): 0xb0f6fee0
2026-04-12T20:49:39.586 [DEBUG] [Thread-195681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:49:39.601 [DEBUG] [Thread-195681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:49:39.601 [INFO] [Thread-195681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:49:39.609 [DEBUG] [Thread-195681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:49:39.609 [DEBUG] [Thread-195681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:49:39.609 [DEBUG] [Thread-195681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:49:39.609 [DEBUG] [Thread-195681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:39.609 [DEBUG] [Thread-195681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:49:39.609 [DEBUG] [Thread-195681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] client lang: <none>
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] server lang: <none>
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] kex follows: False
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] Compression: none
2026-04-12T20:49:39.610 [DEBUG] [Thread-195681] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:49:39.668 [DEBUG] [Thread-195681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:49:39.669 [DEBUG] [Thread-195681] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:49:39.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:49:39.670 [DEBUG] [Thread-195681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:49:39.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:49:39.725 [DEBUG] [Thread-195681] [transport.py] [_log()] userauth is OK
2026-04-12T20:49:39.725 [DEBUG] [Thread-195681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:49:39.725 [DEBUG] [Thread-195681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:49:39.725 [DEBUG] [Thread-195681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:49:39.725 [DEBUG] [Thread-195681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:49:39.749 [INFO] [Thread-195681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:49:39.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:49:39.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:49:40.609 [DEBUG] [Thread-195681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:49:40.609 [DEBUG] [Thread-195681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:49:40.657 [DEBUG] [Thread-195681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:49:40.657 [DEBUG] [Thread-195681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:49:40.667 [DEBUG] [Thread-195681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:49:40.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:49:40.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:49:40.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:49:40.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:49:40.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:49:40.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:49:40.704 [DEBUG] [Thread-195681] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:49:48.333 [DEBUG] [Thread-195683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:03.377 [DEBUG] [Thread-195684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:09.464 [DEBUG] [Thread-195685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:10.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:50:10.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:50:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:50:11.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 49, 38), 0.57915, 96.1774, 0.0, 10.6934, 11.9515, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:50:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:49:38
2026-04-12T20:50:12.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:50:12.514 [DEBUG] [Thread-195686] [transport.py] [_log()] starting thread (client mode): 0xb0f40bb0
2026-04-12T20:50:12.514 [DEBUG] [Thread-195686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:50:12.535 [DEBUG] [Thread-195686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:50:12.535 [INFO] [Thread-195686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:50:12.538 [DEBUG] [Thread-195686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] client lang: <none>
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] server lang: <none>
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] kex follows: False
2026-04-12T20:50:12.539 [DEBUG] [Thread-195686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:50:12.540 [DEBUG] [Thread-195686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:50:12.540 [DEBUG] [Thread-195686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:50:12.540 [DEBUG] [Thread-195686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:50:12.540 [DEBUG] [Thread-195686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:50:12.540 [DEBUG] [Thread-195686] [transport.py] [_log()] Compression: none
2026-04-12T20:50:12.540 [DEBUG] [Thread-195686] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:50:12.559 [DEBUG] [Thread-195686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:50:12.559 [DEBUG] [Thread-195686] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:50:12.560 [DEBUG] [Thread-195686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:50:12.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:50:12.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:50:12.562 [DEBUG] [Thread-195686] [transport.py] [_log()] userauth is OK
2026-04-12T20:50:12.562 [DEBUG] [Thread-195686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:50:12.562 [DEBUG] [Thread-195686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:50:12.562 [DEBUG] [Thread-195686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:50:12.562 [DEBUG] [Thread-195686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:50:12.581 [INFO] [Thread-195686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:50:12.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:50:12.760 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:12.762 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:13.827 [DEBUG] [Thread-195686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:50:13.828 [DEBUG] [Thread-195686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:50:13.828 [DEBUG] [Thread-195686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:50:13.869 [DEBUG] [Thread-195686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:50:13.869 [DEBUG] [Thread-195686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:50:13.873 [DEBUG] [Thread-195686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:50:13.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:50:13.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:50:13.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:50:13.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:50:13.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:50:13.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:50:13.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:50:13.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:50:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:50:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.784134 -999.00  +11.80   6.54     94  +10.90 1 3 1 3 1     0    0 0.77 -6.33 ----- 6.5 6.5 214.7 8.6 13.6 -10.9 13.4 -9.4 13.2 -9.6 13.5 -10.5
2026-04-12T20:50:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:50:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:50:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.784134
2026-04-12T20:50:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:50:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:50:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:50:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:50:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:50:13.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:49:38', tmtdew=0.57915, humidity=96.1774, cloud=0.0, wind=10.6934, temperature=11.9515, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:49:09.178', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:50:13.897 [DEBUG] [Thread-195686] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:50:13.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:50:13.990 [DEBUG] [Thread-195689] [transport.py] [_log()] starting thread (client mode): 0xae537eb0
2026-04-12T20:50:13.990 [DEBUG] [Thread-195689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:50:14.005 [DEBUG] [Thread-195689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:50:14.005 [INFO] [Thread-195689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:14.013 [DEBUG] [Thread-195689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] client lang: <none>
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] server lang: <none>
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] kex follows: False
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:50:14.014 [DEBUG] [Thread-195689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:50:14.015 [DEBUG] [Thread-195689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:50:14.015 [DEBUG] [Thread-195689] [transport.py] [_log()] Compression: none
2026-04-12T20:50:14.015 [DEBUG] [Thread-195689] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:50:14.073 [DEBUG] [Thread-195689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:50:14.073 [DEBUG] [Thread-195689] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:50:14.074 [DEBUG] [Thread-195689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:50:14.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:50:14.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:50:14.129 [DEBUG] [Thread-195689] [transport.py] [_log()] userauth is OK
2026-04-12T20:50:14.129 [DEBUG] [Thread-195689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:50:14.129 [DEBUG] [Thread-195689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:50:14.129 [DEBUG] [Thread-195689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:50:14.129 [DEBUG] [Thread-195689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:50:14.148 [INFO] [Thread-195689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:50:14.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:50:14.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:50:14.964 [DEBUG] [Thread-195689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:50:14.964 [DEBUG] [Thread-195689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:50:15.012 [DEBUG] [Thread-195689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:50:15.013 [DEBUG] [Thread-195689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:50:15.022 [DEBUG] [Thread-195689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:50:15.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:50:15.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:50:15.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:50:15.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:50:15.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:50:15.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:50:15.062 [DEBUG] [Thread-195689] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:50:18.419 [DEBUG] [Thread-195691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:33.475 [DEBUG] [Thread-195692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:45.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:50:45.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:50:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:50:46.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 50, 14), 0.34471, 97.5556, 0.0, 9.19368, 11.6092, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:50:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:50:14
2026-04-12T20:50:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:50:46.865 [DEBUG] [Thread-195693] [transport.py] [_log()] starting thread (client mode): 0xb0f6fee0
2026-04-12T20:50:46.865 [DEBUG] [Thread-195693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:50:46.885 [DEBUG] [Thread-195693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:50:46.886 [INFO] [Thread-195693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] client lang: <none>
2026-04-12T20:50:46.889 [DEBUG] [Thread-195693] [transport.py] [_log()] server lang: <none>
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] kex follows: False
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] Compression: none
2026-04-12T20:50:46.890 [DEBUG] [Thread-195693] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:50:46.911 [DEBUG] [Thread-195693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:50:46.912 [DEBUG] [Thread-195693] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:50:46.912 [DEBUG] [Thread-195693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:50:46.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:50:46.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:50:46.915 [DEBUG] [Thread-195693] [transport.py] [_log()] userauth is OK
2026-04-12T20:50:46.915 [DEBUG] [Thread-195693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:50:46.915 [DEBUG] [Thread-195693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:50:46.915 [DEBUG] [Thread-195693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:50:46.915 [DEBUG] [Thread-195693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:50:46.939 [INFO] [Thread-195693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:50:46.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:50:47.723 [DEBUG] [Thread-195693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:50:47.723 [DEBUG] [Thread-195693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:50:47.723 [DEBUG] [Thread-195693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:50:47.764 [DEBUG] [Thread-195693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:50:47.765 [DEBUG] [Thread-195693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:50:47.768 [DEBUG] [Thread-195693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:50:47.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:50:47.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:50:47.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:50:47.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:50:47.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:50:47.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:50:47.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:50:47.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:50:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:50:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.784828 -999.00  +11.80   6.61     94  +10.90 1 3 1 3 1     0    0 0.75 -6.43 ----- 6.6 6.6 214.4 9.6 13.7 -9.9 13.4 -10.4 13.2 -9.7 13.5 -10.0
2026-04-12T20:50:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:50:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:50:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.784828
2026-04-12T20:50:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:50:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:50:47.791 [DEBUG] [Thread-195693] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:50:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:50:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:50:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:50:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:50:14', tmtdew=0.34471, humidity=97.5556, cloud=0.0, wind=9.19368, temperature=11.6092, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:50:09.139', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:50:47.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:50:47.890 [DEBUG] [Thread-195696] [transport.py] [_log()] starting thread (client mode): 0xae5a5e40
2026-04-12T20:50:47.890 [DEBUG] [Thread-195696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:50:47.905 [DEBUG] [Thread-195696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:50:47.906 [INFO] [Thread-195696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:50:47.913 [DEBUG] [Thread-195696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:50:47.913 [DEBUG] [Thread-195696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:50:47.913 [DEBUG] [Thread-195696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:50:47.913 [DEBUG] [Thread-195696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:47.913 [DEBUG] [Thread-195696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:50:47.913 [DEBUG] [Thread-195696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] client lang: <none>
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] server lang: <none>
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] kex follows: False
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:50:47.914 [DEBUG] [Thread-195696] [transport.py] [_log()] Compression: none
2026-04-12T20:50:47.915 [DEBUG] [Thread-195696] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:50:47.972 [DEBUG] [Thread-195696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:50:47.973 [DEBUG] [Thread-195696] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:50:47.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:50:47.974 [DEBUG] [Thread-195696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:50:47.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:50:48.029 [DEBUG] [Thread-195696] [transport.py] [_log()] userauth is OK
2026-04-12T20:50:48.030 [DEBUG] [Thread-195696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:50:48.030 [DEBUG] [Thread-195696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:50:48.030 [DEBUG] [Thread-195696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:50:48.030 [DEBUG] [Thread-195696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:50:48.050 [INFO] [Thread-195696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:50:48.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:50:48.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:50:48.511 [DEBUG] [Thread-195698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:50:48.887 [DEBUG] [Thread-195696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:50:48.887 [DEBUG] [Thread-195696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:50:48.935 [DEBUG] [Thread-195696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:50:48.935 [DEBUG] [Thread-195696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:50:48.944 [DEBUG] [Thread-195696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:50:48.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:50:48.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:50:48.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:50:48.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:50:48.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:50:48.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:50:48.980 [DEBUG] [Thread-195696] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:51:03.567 [DEBUG] [Thread-195699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:51:09.531 [DEBUG] [Thread-195700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:51:12.969 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:51:12.970 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:51:18.606 [DEBUG] [Thread-195701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:51:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:51:19.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:51:19.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:51:20.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 50, 49), 0.56919, 96.2439, 0.0, 11.399, 12.0843, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:51:20.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:50:49
2026-04-12T20:51:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:51:20.860 [DEBUG] [Thread-195702] [transport.py] [_log()] starting thread (client mode): 0xae5b0e50
2026-04-12T20:51:20.860 [DEBUG] [Thread-195702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:51:20.880 [DEBUG] [Thread-195702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:51:20.880 [INFO] [Thread-195702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:51:20.883 [DEBUG] [Thread-195702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] client lang: <none>
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] server lang: <none>
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] kex follows: False
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:51:20.884 [DEBUG] [Thread-195702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:51:20.885 [DEBUG] [Thread-195702] [transport.py] [_log()] Compression: none
2026-04-12T20:51:20.885 [DEBUG] [Thread-195702] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:51:20.901 [DEBUG] [Thread-195702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:51:20.901 [DEBUG] [Thread-195702] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:51:20.902 [DEBUG] [Thread-195702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:51:20.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:51:20.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:51:20.946 [DEBUG] [Thread-195702] [transport.py] [_log()] userauth is OK
2026-04-12T20:51:20.946 [DEBUG] [Thread-195702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:51:20.946 [DEBUG] [Thread-195702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:51:20.946 [DEBUG] [Thread-195702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:51:20.946 [DEBUG] [Thread-195702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:51:20.970 [INFO] [Thread-195702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:51:20.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:51:21.801 [DEBUG] [Thread-195702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:51:21.801 [DEBUG] [Thread-195702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:51:21.801 [DEBUG] [Thread-195702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:51:21.842 [DEBUG] [Thread-195702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:51:21.843 [DEBUG] [Thread-195702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:51:21.846 [DEBUG] [Thread-195702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:51:21.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:51:21.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:51:21.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:51:21.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:51:21.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:51:21.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:51:21.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:51:21.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:51:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:51:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.785176 -999.00  +11.80   2.76     94  +10.90 1 3 1 3 1     0    0 0.75 -6.67 ----- 2.8 2.8 204.4 10.3 13.6 -11.0 13.4 -10.2 13.2 -10.1 13.5 -10.7
2026-04-12T20:51:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:51:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:51:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.785176
2026-04-12T20:51:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:51:21.874 [DEBUG] [Thread-195702] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:51:21.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:51:21.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:50:49', tmtdew=0.56919, humidity=96.2439, cloud=0.0, wind=11.399, temperature=12.0843, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:50:39.206', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:51:21.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:51:21.971 [DEBUG] [Thread-195705] [transport.py] [_log()] starting thread (client mode): 0xae509c90
2026-04-12T20:51:21.971 [DEBUG] [Thread-195705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:51:21.986 [DEBUG] [Thread-195705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:51:21.987 [INFO] [Thread-195705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:51:21.994 [DEBUG] [Thread-195705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] client lang: <none>
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] server lang: <none>
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] kex follows: False
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:51:21.995 [DEBUG] [Thread-195705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:51:21.996 [DEBUG] [Thread-195705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:51:21.996 [DEBUG] [Thread-195705] [transport.py] [_log()] Compression: none
2026-04-12T20:51:21.996 [DEBUG] [Thread-195705] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:51:22.055 [DEBUG] [Thread-195705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:51:22.055 [DEBUG] [Thread-195705] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:51:22.056 [DEBUG] [Thread-195705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:51:22.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:51:22.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:51:22.116 [DEBUG] [Thread-195705] [transport.py] [_log()] userauth is OK
2026-04-12T20:51:22.116 [DEBUG] [Thread-195705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:51:22.116 [DEBUG] [Thread-195705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:51:22.116 [DEBUG] [Thread-195705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:51:22.116 [DEBUG] [Thread-195705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:51:22.134 [INFO] [Thread-195705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:51:22.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:51:22.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:51:22.955 [DEBUG] [Thread-195705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:51:22.955 [DEBUG] [Thread-195705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:51:23.003 [DEBUG] [Thread-195705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:51:23.003 [DEBUG] [Thread-195705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:51:23.012 [DEBUG] [Thread-195705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:51:23.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:51:23.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:51:23.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:51:23.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:51:23.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:51:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:51:23.053 [DEBUG] [Thread-195705] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:51:33.639 [DEBUG] [Thread-195707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:51:48.690 [DEBUG] [Thread-195708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:51:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:51:53.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:51:53.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:51:54.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 51, 24), 0.339625, 97.5888, 0.0, 9.35244, 11.6424, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:51:54.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:51:24
2026-04-12T20:51:54.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:51:54.916 [DEBUG] [Thread-195709] [transport.py] [_log()] starting thread (client mode): 0xb0f6f3d0
2026-04-12T20:51:54.916 [DEBUG] [Thread-195709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:51:54.939 [DEBUG] [Thread-195709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:51:54.939 [INFO] [Thread-195709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:51:54.942 [DEBUG] [Thread-195709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] client lang: <none>
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] server lang: <none>
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] kex follows: False
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] Compression: none
2026-04-12T20:51:54.943 [DEBUG] [Thread-195709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:51:54.960 [DEBUG] [Thread-195709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:51:54.961 [DEBUG] [Thread-195709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:51:54.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:51:54.962 [DEBUG] [Thread-195709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:51:54.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:51:54.964 [DEBUG] [Thread-195709] [transport.py] [_log()] userauth is OK
2026-04-12T20:51:54.964 [DEBUG] [Thread-195709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:51:54.964 [DEBUG] [Thread-195709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:51:54.964 [DEBUG] [Thread-195709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:51:54.965 [DEBUG] [Thread-195709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:51:55.001 [INFO] [Thread-195709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:51:55.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:51:55.878 [DEBUG] [Thread-195709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:51:55.878 [DEBUG] [Thread-195709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:51:55.879 [DEBUG] [Thread-195709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:51:55.919 [DEBUG] [Thread-195709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:51:55.919 [DEBUG] [Thread-195709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:51:55.923 [DEBUG] [Thread-195709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:51:55.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:51:55.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:51:55.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:51:55.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:51:55.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:51:55.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:51:55.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:51:55.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:51:55.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:51:55.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.785523 -999.00  +11.80   4.38     94  +10.90 1 3 1 3 1     0    0 0.76 -6.72 ----- 4.4 4.4 235.1 7.1 13.6 -11.0 13.4 -9.5 13.2 -9.4 13.5 -10.6
2026-04-12T20:51:55.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:51:55.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:51:55.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.785523
2026-04-12T20:51:55.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:51:55.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:51:55.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:51:55.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:51:55.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:51:55.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:51:24', tmtdew=0.339625, humidity=97.5888, cloud=0.0, wind=9.35244, temperature=11.6424, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:51:09.187', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:51:55.950 [DEBUG] [Thread-195709] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:51:56.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:51:56.044 [DEBUG] [Thread-195712] [transport.py] [_log()] starting thread (client mode): 0xae5e4df0
2026-04-12T20:51:56.044 [DEBUG] [Thread-195712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:51:56.058 [DEBUG] [Thread-195712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:51:56.058 [INFO] [Thread-195712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:51:56.069 [DEBUG] [Thread-195712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:51:56.069 [DEBUG] [Thread-195712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:51:56.069 [DEBUG] [Thread-195712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:51:56.069 [DEBUG] [Thread-195712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:56.069 [DEBUG] [Thread-195712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] client lang: <none>
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] server lang: <none>
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] kex follows: False
2026-04-12T20:51:56.070 [DEBUG] [Thread-195712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:51:56.071 [DEBUG] [Thread-195712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:51:56.071 [DEBUG] [Thread-195712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:51:56.071 [DEBUG] [Thread-195712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:51:56.071 [DEBUG] [Thread-195712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:51:56.071 [DEBUG] [Thread-195712] [transport.py] [_log()] Compression: none
2026-04-12T20:51:56.071 [DEBUG] [Thread-195712] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:51:56.135 [DEBUG] [Thread-195712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:51:56.135 [DEBUG] [Thread-195712] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:51:56.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:51:56.136 [DEBUG] [Thread-195712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:51:56.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:51:56.190 [DEBUG] [Thread-195712] [transport.py] [_log()] userauth is OK
2026-04-12T20:51:56.191 [DEBUG] [Thread-195712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:51:56.191 [DEBUG] [Thread-195712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:51:56.191 [DEBUG] [Thread-195712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:51:56.191 [DEBUG] [Thread-195712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:51:56.209 [INFO] [Thread-195712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:51:56.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:51:56.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:51:57.014 [DEBUG] [Thread-195712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:51:57.014 [DEBUG] [Thread-195712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:51:57.062 [DEBUG] [Thread-195712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:51:57.062 [DEBUG] [Thread-195712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:51:57.072 [DEBUG] [Thread-195712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:51:57.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:51:57.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:51:57.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:51:57.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:51:57.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:51:57.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:51:57.111 [DEBUG] [Thread-195712] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:52:03.728 [DEBUG] [Thread-195714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:52:09.601 [DEBUG] [Thread-195715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:52:13.173 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:52:13.175 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:52:18.779 [DEBUG] [Thread-195716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:52:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:52:27.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:52:27.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:52:28.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 51, 24), 0.339625, 97.5888, 0.0, 9.35244, 11.6424, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:52:28.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:51:24
2026-04-12T20:52:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:52:28.989 [DEBUG] [Thread-195717] [transport.py] [_log()] starting thread (client mode): 0xb0f8c910
2026-04-12T20:52:28.989 [DEBUG] [Thread-195717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:52:29.008 [DEBUG] [Thread-195717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:52:29.008 [INFO] [Thread-195717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] client lang: <none>
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] server lang: <none>
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] kex follows: False
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:52:29.012 [DEBUG] [Thread-195717] [transport.py] [_log()] Compression: none
2026-04-12T20:52:29.013 [DEBUG] [Thread-195717] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:52:29.030 [DEBUG] [Thread-195717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:52:29.030 [DEBUG] [Thread-195717] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:52:29.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:52:29.031 [DEBUG] [Thread-195717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:52:29.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:52:29.033 [DEBUG] [Thread-195717] [transport.py] [_log()] userauth is OK
2026-04-12T20:52:29.033 [DEBUG] [Thread-195717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:52:29.033 [DEBUG] [Thread-195717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:52:29.033 [DEBUG] [Thread-195717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:52:29.034 [DEBUG] [Thread-195717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:52:29.057 [INFO] [Thread-195717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:52:29.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:52:29.870 [DEBUG] [Thread-195717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:52:29.871 [DEBUG] [Thread-195717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:52:29.871 [DEBUG] [Thread-195717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:52:29.911 [DEBUG] [Thread-195717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:52:29.911 [DEBUG] [Thread-195717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:52:29.915 [DEBUG] [Thread-195717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:52:29.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:52:29.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:52:29.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:52:29.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:52:29.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:52:29.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:52:29.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:52:29.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:52:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:52:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.785870 -999.00  +11.80  10.04     94  +11.00 1 3 1 3 1     0    0 0.75 -6.73 ----- 10.0 10.0 204.8 11.6 13.6 -9.8 13.5 -10.8 13.2 -10.8 13.6 -11.0
2026-04-12T20:52:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:52:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:52:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.785870
2026-04-12T20:52:29.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:52:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:52:29.941 [DEBUG] [Thread-195717] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:52:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:52:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:52:29.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:52:29.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:51:24', tmtdew=0.339625, humidity=97.5888, cloud=0.0, wind=9.35244, temperature=11.6424, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:51:39.168', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 4.234249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.26175, 1.8795000000000002, 1.915, 1.8050000000000006, 2.7490000000000014, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:52:30.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:52:30.044 [DEBUG] [Thread-195720] [transport.py] [_log()] starting thread (client mode): 0xae5a4070
2026-04-12T20:52:30.044 [DEBUG] [Thread-195720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:52:30.059 [DEBUG] [Thread-195720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:52:30.059 [INFO] [Thread-195720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] client lang: <none>
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] server lang: <none>
2026-04-12T20:52:30.066 [DEBUG] [Thread-195720] [transport.py] [_log()] kex follows: False
2026-04-12T20:52:30.067 [DEBUG] [Thread-195720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:52:30.067 [DEBUG] [Thread-195720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:52:30.067 [DEBUG] [Thread-195720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:52:30.067 [DEBUG] [Thread-195720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:52:30.067 [DEBUG] [Thread-195720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:52:30.067 [DEBUG] [Thread-195720] [transport.py] [_log()] Compression: none
2026-04-12T20:52:30.067 [DEBUG] [Thread-195720] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:52:30.127 [DEBUG] [Thread-195720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:52:30.127 [DEBUG] [Thread-195720] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:52:30.128 [DEBUG] [Thread-195720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:52:30.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:52:30.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:52:30.182 [DEBUG] [Thread-195720] [transport.py] [_log()] userauth is OK
2026-04-12T20:52:30.183 [DEBUG] [Thread-195720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:52:30.183 [DEBUG] [Thread-195720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:52:30.183 [DEBUG] [Thread-195720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:52:30.183 [DEBUG] [Thread-195720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:52:30.202 [INFO] [Thread-195720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:52:30.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:52:30.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:52:30.998 [DEBUG] [Thread-195720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:52:30.999 [DEBUG] [Thread-195720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:52:31.046 [DEBUG] [Thread-195720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:52:31.046 [DEBUG] [Thread-195720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:52:31.056 [DEBUG] [Thread-195720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:52:31.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:52:31.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:52:31.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:52:31.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:52:31.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:52:31.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:52:31.096 [DEBUG] [Thread-195720] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:52:33.816 [DEBUG] [Thread-195722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:52:48.862 [DEBUG] [Thread-195723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:53:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:53:01.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:53:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:53:02.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 52, 35), 0.56871, 96.2439, 0.0, 12.5986, 11.9516, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:53:02.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:52:35
2026-04-12T20:53:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:53:02.938 [DEBUG] [Thread-195724] [transport.py] [_log()] starting thread (client mode): 0xb0f6c760
2026-04-12T20:53:02.938 [DEBUG] [Thread-195724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:53:02.959 [DEBUG] [Thread-195724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:53:02.959 [INFO] [Thread-195724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:53:02.961 [DEBUG] [Thread-195724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:53:02.961 [DEBUG] [Thread-195724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:53:02.961 [DEBUG] [Thread-195724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:53:02.961 [DEBUG] [Thread-195724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:02.961 [DEBUG] [Thread-195724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:02.961 [DEBUG] [Thread-195724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] client lang: <none>
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] server lang: <none>
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] kex follows: False
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:53:02.962 [DEBUG] [Thread-195724] [transport.py] [_log()] Compression: none
2026-04-12T20:53:02.963 [DEBUG] [Thread-195724] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:53:02.976 [DEBUG] [Thread-195724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:53:02.977 [DEBUG] [Thread-195724] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:53:02.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:53:02.978 [DEBUG] [Thread-195724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:53:02.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:53:02.980 [DEBUG] [Thread-195724] [transport.py] [_log()] userauth is OK
2026-04-12T20:53:02.980 [DEBUG] [Thread-195724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:53:02.980 [DEBUG] [Thread-195724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:53:02.980 [DEBUG] [Thread-195724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:53:02.980 [DEBUG] [Thread-195724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:53:03.004 [INFO] [Thread-195724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:53:03.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:53:03.788 [DEBUG] [Thread-195724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:53:03.788 [DEBUG] [Thread-195724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:53:03.789 [DEBUG] [Thread-195724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:53:03.829 [DEBUG] [Thread-195724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:53:03.829 [DEBUG] [Thread-195724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:53:03.833 [DEBUG] [Thread-195724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:53:03.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:53:03.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:53:03.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:53:03.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:53:03.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:53:03.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:53:03.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:53:03.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:53:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:53:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.786217 -999.00  +11.80   4.84     94  +10.90 1 3 1 3 1     0    0 0.73 -7.29 ----- 4.8 4.8 237.3 10.2 13.6 -11.5 13.5 -7.6 13.2 -7.9 13.6 -8.8
2026-04-12T20:53:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:53:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:53:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.786217
2026-04-12T20:53:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:53:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:53:03.860 [DEBUG] [Thread-195724] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:53:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:53:03.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:53:03.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:53:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:52:35', tmtdew=0.56871, humidity=96.2439, cloud=0.0, wind=12.5986, temperature=11.9516, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:52:09.149', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:53:03.898 [DEBUG] [Thread-195727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:53:03.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:53:03.954 [DEBUG] [Thread-195728] [transport.py] [_log()] starting thread (client mode): 0xae5b3a30
2026-04-12T20:53:03.954 [DEBUG] [Thread-195728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:53:03.968 [DEBUG] [Thread-195728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:53:03.968 [INFO] [Thread-195728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:53:03.977 [DEBUG] [Thread-195728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:53:03.977 [DEBUG] [Thread-195728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:53:03.977 [DEBUG] [Thread-195728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:53:03.977 [DEBUG] [Thread-195728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:03.977 [DEBUG] [Thread-195728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:03.977 [DEBUG] [Thread-195728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] client lang: <none>
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] server lang: <none>
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] kex follows: False
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:53:03.978 [DEBUG] [Thread-195728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:53:03.979 [DEBUG] [Thread-195728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:53:03.979 [DEBUG] [Thread-195728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:53:03.979 [DEBUG] [Thread-195728] [transport.py] [_log()] Compression: none
2026-04-12T20:53:03.979 [DEBUG] [Thread-195728] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:53:04.040 [DEBUG] [Thread-195728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:53:04.041 [DEBUG] [Thread-195728] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:53:04.042 [DEBUG] [Thread-195728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:53:04.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:53:04.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:53:04.099 [DEBUG] [Thread-195728] [transport.py] [_log()] userauth is OK
2026-04-12T20:53:04.099 [DEBUG] [Thread-195728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:53:04.100 [DEBUG] [Thread-195728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:53:04.100 [DEBUG] [Thread-195728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:53:04.100 [DEBUG] [Thread-195728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:53:04.120 [INFO] [Thread-195728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:53:04.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:53:04.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:53:04.933 [DEBUG] [Thread-195728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:53:04.934 [DEBUG] [Thread-195728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:53:04.982 [DEBUG] [Thread-195728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:53:04.983 [DEBUG] [Thread-195728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:53:04.992 [DEBUG] [Thread-195728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:53:05.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:53:05.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:53:05.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:53:05.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:53:05.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:53:05.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:53:05.028 [DEBUG] [Thread-195728] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:53:09.658 [DEBUG] [Thread-195730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:53:13.380 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:53:13.381 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:53:18.937 [DEBUG] [Thread-195731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:53:33.973 [DEBUG] [Thread-195732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:53:35.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:53:35.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:53:35.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:53:36.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 53, 11), 0.337015, 97.6054, 0.0, 11.4876, 11.6424, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:53:36.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:53:11
2026-04-12T20:53:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:53:36.941 [DEBUG] [Thread-195733] [transport.py] [_log()] starting thread (client mode): 0xb0f8d780
2026-04-12T20:53:36.941 [DEBUG] [Thread-195733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:53:36.962 [DEBUG] [Thread-195733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:53:36.962 [INFO] [Thread-195733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] client lang: <none>
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] server lang: <none>
2026-04-12T20:53:36.966 [DEBUG] [Thread-195733] [transport.py] [_log()] kex follows: False
2026-04-12T20:53:36.967 [DEBUG] [Thread-195733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:53:36.967 [DEBUG] [Thread-195733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:53:36.967 [DEBUG] [Thread-195733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:53:36.967 [DEBUG] [Thread-195733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:53:36.967 [DEBUG] [Thread-195733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:53:36.967 [DEBUG] [Thread-195733] [transport.py] [_log()] Compression: none
2026-04-12T20:53:36.967 [DEBUG] [Thread-195733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:53:36.986 [DEBUG] [Thread-195733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:53:36.987 [DEBUG] [Thread-195733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:53:36.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:53:36.988 [DEBUG] [Thread-195733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:53:36.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:53:36.990 [DEBUG] [Thread-195733] [transport.py] [_log()] userauth is OK
2026-04-12T20:53:36.990 [DEBUG] [Thread-195733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:53:36.990 [DEBUG] [Thread-195733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:53:36.990 [DEBUG] [Thread-195733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:53:36.990 [DEBUG] [Thread-195733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:53:37.013 [INFO] [Thread-195733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:53:37.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:53:37.826 [DEBUG] [Thread-195733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:53:37.826 [DEBUG] [Thread-195733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:53:37.826 [DEBUG] [Thread-195733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:53:37.868 [DEBUG] [Thread-195733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:53:37.868 [DEBUG] [Thread-195733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:53:37.871 [DEBUG] [Thread-195733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:53:37.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:53:37.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:53:37.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:53:37.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:53:37.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:53:37.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:53:37.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:53:37.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:53:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:53:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.786564 -999.00  +11.80   6.85     94  +10.90 1 3 1 3 1     0    0 0.69 -8.05 ----- 6.8 6.8 216.2 8.5 13.7 -8.1 13.5 -8.3 13.2 -8.2 13.5 -8.4
2026-04-12T20:53:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:53:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:53:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.786564
2026-04-12T20:53:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:53:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:53:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:53:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:53:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:53:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:53:11', tmtdew=0.337015, humidity=97.6054, cloud=0.0, wind=11.4876, temperature=11.6424, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:52:39.130', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:53:37.895 [DEBUG] [Thread-195733] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:53:37.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:53:37.993 [DEBUG] [Thread-195736] [transport.py] [_log()] starting thread (client mode): 0xae5622f0
2026-04-12T20:53:37.993 [DEBUG] [Thread-195736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:53:38.008 [DEBUG] [Thread-195736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:53:38.008 [INFO] [Thread-195736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:53:38.015 [DEBUG] [Thread-195736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:53:38.015 [DEBUG] [Thread-195736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] client lang: <none>
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] server lang: <none>
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] kex follows: False
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:53:38.016 [DEBUG] [Thread-195736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:53:38.017 [DEBUG] [Thread-195736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:53:38.017 [DEBUG] [Thread-195736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:53:38.017 [DEBUG] [Thread-195736] [transport.py] [_log()] Compression: none
2026-04-12T20:53:38.017 [DEBUG] [Thread-195736] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:53:38.074 [DEBUG] [Thread-195736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:53:38.075 [DEBUG] [Thread-195736] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:53:38.075 [DEBUG] [Thread-195736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:53:38.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:53:38.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:53:38.131 [DEBUG] [Thread-195736] [transport.py] [_log()] userauth is OK
2026-04-12T20:53:38.132 [DEBUG] [Thread-195736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:53:38.132 [DEBUG] [Thread-195736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:53:38.132 [DEBUG] [Thread-195736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:53:38.132 [DEBUG] [Thread-195736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:53:38.150 [INFO] [Thread-195736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:53:38.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:53:38.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:53:39.025 [DEBUG] [Thread-195736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:53:39.025 [DEBUG] [Thread-195736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:53:39.073 [DEBUG] [Thread-195736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:53:39.073 [DEBUG] [Thread-195736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:53:39.083 [DEBUG] [Thread-195736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:53:39.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:53:39.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:53:39.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:53:39.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:53:39.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:53:39.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:53:39.120 [DEBUG] [Thread-195736] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:53:49.007 [DEBUG] [Thread-195738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:54:04.058 [DEBUG] [Thread-195739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:54:09.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:54:09.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:54:09.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:54:09.722 [DEBUG] [Thread-195740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:54:10.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 53, 46), 0.57355, 96.2108, 0.0, 13.163, 11.8521, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:54:10.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:53:46
2026-04-12T20:54:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:54:10.980 [DEBUG] [Thread-195741] [transport.py] [_log()] starting thread (client mode): 0xae51a5f0
2026-04-12T20:54:10.980 [DEBUG] [Thread-195741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:54:10.994 [DEBUG] [Thread-195741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:54:10.994 [INFO] [Thread-195741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] client lang: <none>
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] server lang: <none>
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] kex follows: False
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] Compression: none
2026-04-12T20:54:10.998 [DEBUG] [Thread-195741] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:54:11.015 [DEBUG] [Thread-195741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:54:11.016 [DEBUG] [Thread-195741] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:54:11.016 [DEBUG] [Thread-195741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:54:11.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:54:11.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:54:11.018 [DEBUG] [Thread-195741] [transport.py] [_log()] userauth is OK
2026-04-12T20:54:11.018 [DEBUG] [Thread-195741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:54:11.019 [DEBUG] [Thread-195741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:54:11.019 [DEBUG] [Thread-195741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:54:11.019 [DEBUG] [Thread-195741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:54:11.044 [INFO] [Thread-195741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:54:11.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:54:11.794 [DEBUG] [Thread-195741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:54:11.794 [DEBUG] [Thread-195741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:54:11.795 [DEBUG] [Thread-195741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:54:11.835 [DEBUG] [Thread-195741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:54:11.835 [DEBUG] [Thread-195741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:54:11.839 [DEBUG] [Thread-195741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:54:11.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:54:11.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:54:11.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:54:11.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:54:11.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:54:11.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:54:11.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:54:11.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:54:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:54:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.786912 -999.00  +11.80   4.74     94  +10.90 1 3 1 3 1     0    0 0.67 -8.88 ----- 4.7 4.7 204.2 5.7 13.7 -9.3 13.5 -7.8 13.2 -7.9 13.6 -9.5
2026-04-12T20:54:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:54:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:54:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.786912
2026-04-12T20:54:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:54:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:54:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:54:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:54:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:54:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:53:46', tmtdew=0.57355, humidity=96.2108, cloud=0.0, wind=13.163, temperature=11.8521, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:53:09.197', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:54:11.865 [DEBUG] [Thread-195741] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:54:11.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:54:11.961 [DEBUG] [Thread-195744] [transport.py] [_log()] starting thread (client mode): 0xae50acb0
2026-04-12T20:54:11.961 [DEBUG] [Thread-195744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:54:11.976 [DEBUG] [Thread-195744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:54:11.977 [INFO] [Thread-195744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:54:11.985 [DEBUG] [Thread-195744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:54:11.985 [DEBUG] [Thread-195744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] client lang: <none>
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] server lang: <none>
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] kex follows: False
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] Compression: none
2026-04-12T20:54:11.986 [DEBUG] [Thread-195744] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:54:12.042 [DEBUG] [Thread-195744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:54:12.043 [DEBUG] [Thread-195744] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:54:12.043 [DEBUG] [Thread-195744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:54:12.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:54:12.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:54:12.100 [DEBUG] [Thread-195744] [transport.py] [_log()] userauth is OK
2026-04-12T20:54:12.100 [DEBUG] [Thread-195744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:54:12.100 [DEBUG] [Thread-195744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:54:12.101 [DEBUG] [Thread-195744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:54:12.101 [DEBUG] [Thread-195744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:54:12.125 [INFO] [Thread-195744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:54:12.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:54:12.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:54:12.968 [DEBUG] [Thread-195744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:54:12.968 [DEBUG] [Thread-195744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:54:13.016 [DEBUG] [Thread-195744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:54:13.017 [DEBUG] [Thread-195744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:54:13.026 [DEBUG] [Thread-195744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:54:13.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:54:13.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:54:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:54:13.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:54:13.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:54:13.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:54:13.062 [DEBUG] [Thread-195744] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:54:13.585 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:54:13.586 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:54:19.096 [DEBUG] [Thread-195746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:54:34.154 [DEBUG] [Thread-195747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:54:43.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:54:43.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:54:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:54:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 54, 21), 0.32932, 97.6551, 0.0, 10.4285, 11.6756, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:54:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:54:21
2026-04-12T20:54:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:54:44.887 [DEBUG] [Thread-195748] [transport.py] [_log()] starting thread (client mode): 0xae563b20
2026-04-12T20:54:44.887 [DEBUG] [Thread-195748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:54:44.906 [DEBUG] [Thread-195748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:54:44.906 [INFO] [Thread-195748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] client lang: <none>
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] server lang: <none>
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] kex follows: False
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] Compression: none
2026-04-12T20:54:44.909 [DEBUG] [Thread-195748] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:54:44.925 [DEBUG] [Thread-195748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:54:44.926 [DEBUG] [Thread-195748] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:54:44.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:54:44.927 [DEBUG] [Thread-195748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:54:44.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:54:44.929 [DEBUG] [Thread-195748] [transport.py] [_log()] userauth is OK
2026-04-12T20:54:44.929 [DEBUG] [Thread-195748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:54:44.929 [DEBUG] [Thread-195748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:54:44.930 [DEBUG] [Thread-195748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:54:44.930 [DEBUG] [Thread-195748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:54:44.953 [INFO] [Thread-195748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:54:44.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:54:45.728 [DEBUG] [Thread-195748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:54:45.728 [DEBUG] [Thread-195748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:54:45.729 [DEBUG] [Thread-195748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:54:45.769 [DEBUG] [Thread-195748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:54:45.770 [DEBUG] [Thread-195748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:54:45.773 [DEBUG] [Thread-195748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:54:45.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:54:45.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:54:45.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:54:45.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:54:45.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:54:45.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:54:45.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:54:45.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:54:45.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:54:45.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.787606 -999.00  +11.80   5.11     94  +10.90 1 3 1 3 1     0    0 0.66 -9.00 ----- 5.1 5.1 216.8 8.0 13.7 -12.5 13.5 -10.8 13.2 -9.7 13.6 -10.6
2026-04-12T20:54:45.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:54:45.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:54:45.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.787606
2026-04-12T20:54:45.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:54:45.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:54:45.800 [DEBUG] [Thread-195748] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:54:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:54:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:54:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:54:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:54:21', tmtdew=0.32932, humidity=97.6551, cloud=0.0, wind=10.4285, temperature=11.6756, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:54:09.158', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:54:45.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:54:45.893 [DEBUG] [Thread-195751] [transport.py] [_log()] starting thread (client mode): 0xae562f50
2026-04-12T20:54:45.893 [DEBUG] [Thread-195751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:54:45.908 [DEBUG] [Thread-195751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:54:45.908 [INFO] [Thread-195751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:54:45.915 [DEBUG] [Thread-195751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] client lang: <none>
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] server lang: <none>
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] kex follows: False
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] Compression: none
2026-04-12T20:54:45.916 [DEBUG] [Thread-195751] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:54:45.972 [DEBUG] [Thread-195751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:54:45.972 [DEBUG] [Thread-195751] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:54:45.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:54:45.974 [DEBUG] [Thread-195751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:54:45.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:54:46.028 [DEBUG] [Thread-195751] [transport.py] [_log()] userauth is OK
2026-04-12T20:54:46.029 [DEBUG] [Thread-195751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:54:46.029 [DEBUG] [Thread-195751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:54:46.029 [DEBUG] [Thread-195751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:54:46.029 [DEBUG] [Thread-195751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:54:46.047 [INFO] [Thread-195751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:54:46.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:54:46.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:54:46.862 [DEBUG] [Thread-195751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:54:46.862 [DEBUG] [Thread-195751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:54:46.910 [DEBUG] [Thread-195751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:54:46.910 [DEBUG] [Thread-195751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:54:46.919 [DEBUG] [Thread-195751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:54:46.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:54:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:54:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:54:46.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:54:46.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:54:46.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:54:46.956 [DEBUG] [Thread-195751] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:54:49.192 [DEBUG] [Thread-195753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:04.247 [DEBUG] [Thread-195754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:09.798 [DEBUG] [Thread-195755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:13.791 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:13.792 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:55:16.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:55:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:55:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 54, 57), 0.32406, 97.6883, 0.0, 10.499, 11.659, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:55:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:54:57
2026-04-12T20:55:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:55:18.793 [DEBUG] [Thread-195756] [transport.py] [_log()] starting thread (client mode): 0xae5637c0
2026-04-12T20:55:18.793 [DEBUG] [Thread-195756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:55:18.813 [DEBUG] [Thread-195756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:55:18.814 [INFO] [Thread-195756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:55:18.815 [DEBUG] [Thread-195756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:55:18.815 [DEBUG] [Thread-195756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:55:18.815 [DEBUG] [Thread-195756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:55:18.815 [DEBUG] [Thread-195756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:18.815 [DEBUG] [Thread-195756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:18.815 [DEBUG] [Thread-195756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] client lang: <none>
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] server lang: <none>
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] kex follows: False
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] Compression: none
2026-04-12T20:55:18.816 [DEBUG] [Thread-195756] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:55:18.835 [DEBUG] [Thread-195756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:55:18.836 [DEBUG] [Thread-195756] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:55:18.836 [DEBUG] [Thread-195756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:55:18.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:55:18.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:55:18.838 [DEBUG] [Thread-195756] [transport.py] [_log()] userauth is OK
2026-04-12T20:55:18.838 [DEBUG] [Thread-195756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:55:18.838 [DEBUG] [Thread-195756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:55:18.839 [DEBUG] [Thread-195756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:55:18.839 [DEBUG] [Thread-195756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:55:18.862 [INFO] [Thread-195756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:55:18.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:55:19.287 [DEBUG] [Thread-195758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:20.025 [DEBUG] [Thread-195756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:55:20.025 [DEBUG] [Thread-195756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:55:20.025 [DEBUG] [Thread-195756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:55:20.066 [DEBUG] [Thread-195756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:55:20.066 [DEBUG] [Thread-195756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:55:20.079 [DEBUG] [Thread-195756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:55:20.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:55:20.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:55:20.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:55:20.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:55:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:55:20.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:55:20.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:55:20.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:55:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:55:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.787953 -999.00  +11.80   4.81     94  +10.90 1 3 1 3 1     0    0 0.66 -8.87 ----- 4.8 4.8 209.2 8.4 13.7 -11.9 13.4 -12.9 13.2 -11.4 13.6 -12.5
2026-04-12T20:55:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:55:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:55:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.787953
2026-04-12T20:55:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:55:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:55:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:55:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:55:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:55:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:54:57', tmtdew=0.32406, humidity=97.6883, cloud=0.0, wind=10.499, temperature=11.659, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:54:39.139', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:55:20.108 [DEBUG] [Thread-195756] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:55:20.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:55:20.201 [DEBUG] [Thread-195760] [transport.py] [_log()] starting thread (client mode): 0xae563640
2026-04-12T20:55:20.201 [DEBUG] [Thread-195760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:55:20.216 [DEBUG] [Thread-195760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:55:20.217 [INFO] [Thread-195760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:55:20.228 [DEBUG] [Thread-195760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:55:20.228 [DEBUG] [Thread-195760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:55:20.228 [DEBUG] [Thread-195760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:55:20.228 [DEBUG] [Thread-195760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] client lang: <none>
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] server lang: <none>
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] kex follows: False
2026-04-12T20:55:20.229 [DEBUG] [Thread-195760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:55:20.230 [DEBUG] [Thread-195760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:55:20.230 [DEBUG] [Thread-195760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:55:20.230 [DEBUG] [Thread-195760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:55:20.230 [DEBUG] [Thread-195760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:55:20.230 [DEBUG] [Thread-195760] [transport.py] [_log()] Compression: none
2026-04-12T20:55:20.231 [DEBUG] [Thread-195760] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:55:20.291 [DEBUG] [Thread-195760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:55:20.291 [DEBUG] [Thread-195760] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:55:20.292 [DEBUG] [Thread-195760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:55:20.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:55:20.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:55:20.349 [DEBUG] [Thread-195760] [transport.py] [_log()] userauth is OK
2026-04-12T20:55:20.349 [DEBUG] [Thread-195760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:55:20.349 [DEBUG] [Thread-195760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:55:20.350 [DEBUG] [Thread-195760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:55:20.350 [DEBUG] [Thread-195760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:55:20.368 [INFO] [Thread-195760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:55:20.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:55:20.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:55:21.236 [DEBUG] [Thread-195760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:55:21.236 [DEBUG] [Thread-195760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:55:21.284 [DEBUG] [Thread-195760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:55:21.285 [DEBUG] [Thread-195760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:55:21.294 [DEBUG] [Thread-195760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:55:21.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:55:21.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:55:21.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:55:21.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:55:21.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:55:21.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:55:21.338 [DEBUG] [Thread-195760] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:55:34.326 [DEBUG] [Thread-195762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:49.378 [DEBUG] [Thread-195763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:55:51.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:55:51.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:55:51.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:55:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 55, 32), 0.55829, 96.3103, 0.0, 12.9514, 11.9517, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:55:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:55:32
2026-04-12T20:55:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:55:53.112 [DEBUG] [Thread-195764] [transport.py] [_log()] starting thread (client mode): 0xae50a9b0
2026-04-12T20:55:53.112 [DEBUG] [Thread-195764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:55:53.132 [DEBUG] [Thread-195764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:55:53.132 [INFO] [Thread-195764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:55:53.135 [DEBUG] [Thread-195764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:55:53.135 [DEBUG] [Thread-195764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:55:53.135 [DEBUG] [Thread-195764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] client lang: <none>
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] server lang: <none>
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] kex follows: False
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:55:53.136 [DEBUG] [Thread-195764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:55:53.137 [DEBUG] [Thread-195764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:55:53.137 [DEBUG] [Thread-195764] [transport.py] [_log()] Compression: none
2026-04-12T20:55:53.137 [DEBUG] [Thread-195764] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:55:53.154 [DEBUG] [Thread-195764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:55:53.154 [DEBUG] [Thread-195764] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:55:53.155 [DEBUG] [Thread-195764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:55:53.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:55:53.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:55:53.156 [DEBUG] [Thread-195764] [transport.py] [_log()] userauth is OK
2026-04-12T20:55:53.157 [DEBUG] [Thread-195764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:55:53.157 [DEBUG] [Thread-195764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:55:53.157 [DEBUG] [Thread-195764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:55:53.157 [DEBUG] [Thread-195764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:55:53.180 [INFO] [Thread-195764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:55:53.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:55:53.955 [DEBUG] [Thread-195764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:55:53.955 [DEBUG] [Thread-195764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:55:53.955 [DEBUG] [Thread-195764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:55:53.996 [DEBUG] [Thread-195764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:55:53.996 [DEBUG] [Thread-195764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:55:53.999 [DEBUG] [Thread-195764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:55:54.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:55:54.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:55:54.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:55:54.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:55:54.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:55:54.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:55:54.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:55:54.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:55:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:55:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.788300 -999.00  +11.80   5.65     94  +10.90 1 3 1 3 1     0    0 0.64 -9.32 ----- 5.7 5.7 232.4 8.5 13.7 -14.3 13.4 -17.1 13.2 -14.4 13.5 -15.6
2026-04-12T20:55:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:55:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:55:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.788300
2026-04-12T20:55:54.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:55:54.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:55:54.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:55:54.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:55:54.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:55:54.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:55:32', tmtdew=0.55829, humidity=96.3103, cloud=0.0, wind=12.9514, temperature=11.9517, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:55:09.120', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:55:54.024 [DEBUG] [Thread-195764] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:55:54.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:55:54.120 [DEBUG] [Thread-195767] [transport.py] [_log()] starting thread (client mode): 0xae509ea0
2026-04-12T20:55:54.120 [DEBUG] [Thread-195767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:55:54.135 [DEBUG] [Thread-195767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:55:54.135 [INFO] [Thread-195767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] client lang: <none>
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] server lang: <none>
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] kex follows: False
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:55:54.145 [DEBUG] [Thread-195767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:55:54.146 [DEBUG] [Thread-195767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:55:54.146 [DEBUG] [Thread-195767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:55:54.146 [DEBUG] [Thread-195767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:55:54.146 [DEBUG] [Thread-195767] [transport.py] [_log()] Compression: none
2026-04-12T20:55:54.146 [DEBUG] [Thread-195767] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:55:54.203 [DEBUG] [Thread-195767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:55:54.204 [DEBUG] [Thread-195767] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:55:54.204 [DEBUG] [Thread-195767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:55:54.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:55:54.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:55:54.266 [DEBUG] [Thread-195767] [transport.py] [_log()] userauth is OK
2026-04-12T20:55:54.267 [DEBUG] [Thread-195767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:55:54.267 [DEBUG] [Thread-195767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:55:54.267 [DEBUG] [Thread-195767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:55:54.267 [DEBUG] [Thread-195767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:55:54.289 [INFO] [Thread-195767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:55:54.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:55:54.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:55:55.131 [DEBUG] [Thread-195767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:55:55.131 [DEBUG] [Thread-195767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:55:55.182 [DEBUG] [Thread-195767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:55:55.182 [DEBUG] [Thread-195767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:55:55.196 [DEBUG] [Thread-195767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:55:55.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:55:55.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:55:55.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:55:55.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:55:55.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:55:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:55:55.235 [DEBUG] [Thread-195767] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:56:04.409 [DEBUG] [Thread-195769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:56:09.867 [DEBUG] [Thread-195770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:56:13.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:56:13.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:56:19.462 [DEBUG] [Thread-195771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:56:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:56:25.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:56:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:56:26.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 56, 8), 0.329085, 97.6552, 0.0, 11.6464, 11.6093, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:56:26.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:56:08
2026-04-12T20:56:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:56:27.145 [DEBUG] [Thread-195772] [transport.py] [_log()] starting thread (client mode): 0xae50acb0
2026-04-12T20:56:27.146 [DEBUG] [Thread-195772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:56:27.168 [DEBUG] [Thread-195772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:56:27.169 [INFO] [Thread-195772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:56:27.172 [DEBUG] [Thread-195772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:56:27.172 [DEBUG] [Thread-195772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:56:27.172 [DEBUG] [Thread-195772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:56:27.172 [DEBUG] [Thread-195772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] client lang: <none>
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] server lang: <none>
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] kex follows: False
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:56:27.173 [DEBUG] [Thread-195772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:56:27.174 [DEBUG] [Thread-195772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:56:27.174 [DEBUG] [Thread-195772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:56:27.174 [DEBUG] [Thread-195772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:56:27.174 [DEBUG] [Thread-195772] [transport.py] [_log()] Compression: none
2026-04-12T20:56:27.174 [DEBUG] [Thread-195772] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:56:27.192 [DEBUG] [Thread-195772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:56:27.193 [DEBUG] [Thread-195772] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:56:27.194 [DEBUG] [Thread-195772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:56:27.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:56:27.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:56:27.195 [DEBUG] [Thread-195772] [transport.py] [_log()] userauth is OK
2026-04-12T20:56:27.196 [DEBUG] [Thread-195772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:56:27.196 [DEBUG] [Thread-195772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:56:27.196 [DEBUG] [Thread-195772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:56:27.196 [DEBUG] [Thread-195772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:56:27.221 [INFO] [Thread-195772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:56:27.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:56:27.992 [DEBUG] [Thread-195772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:56:27.992 [DEBUG] [Thread-195772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:56:27.993 [DEBUG] [Thread-195772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:56:28.035 [DEBUG] [Thread-195772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:56:28.035 [DEBUG] [Thread-195772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:56:28.037 [DEBUG] [Thread-195772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:56:28.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:56:28.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:56:28.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:56:28.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:56:28.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:56:28.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:56:28.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:56:28.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:56:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:56:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.788648 -999.00  +11.80   4.49     94  +10.90 1 3 1 3 1     0    0 0.61 -9.82 ----- 4.5 4.5 205.4 7.2 13.6 -19.4 13.4 -18.5 13.2 -17.4 13.5 -18.8
2026-04-12T20:56:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:56:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:56:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.788648
2026-04-12T20:56:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:56:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:56:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:56:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:56:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T20:56:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:56:08', tmtdew=0.329085, humidity=97.6552, cloud=0.0, wind=11.6464, temperature=11.6093, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:55:39.187', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:56:28.061 [DEBUG] [Thread-195772] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:56:28.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:56:28.149 [DEBUG] [Thread-195775] [transport.py] [_log()] starting thread (client mode): 0xae561000
2026-04-12T20:56:28.149 [DEBUG] [Thread-195775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:56:28.163 [DEBUG] [Thread-195775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:56:28.163 [INFO] [Thread-195775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] client lang: <none>
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] server lang: <none>
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] kex follows: False
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:56:28.170 [DEBUG] [Thread-195775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:56:28.171 [DEBUG] [Thread-195775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:56:28.171 [DEBUG] [Thread-195775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:56:28.171 [DEBUG] [Thread-195775] [transport.py] [_log()] Compression: none
2026-04-12T20:56:28.171 [DEBUG] [Thread-195775] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:56:28.233 [DEBUG] [Thread-195775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:56:28.233 [DEBUG] [Thread-195775] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:56:28.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:56:28.234 [DEBUG] [Thread-195775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:56:28.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:56:28.289 [DEBUG] [Thread-195775] [transport.py] [_log()] userauth is OK
2026-04-12T20:56:28.290 [DEBUG] [Thread-195775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:56:28.290 [DEBUG] [Thread-195775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:56:28.290 [DEBUG] [Thread-195775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:56:28.290 [DEBUG] [Thread-195775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:56:28.314 [INFO] [Thread-195775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:56:28.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:56:28.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:56:29.148 [DEBUG] [Thread-195775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:56:29.148 [DEBUG] [Thread-195775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:56:29.196 [DEBUG] [Thread-195775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:56:29.196 [DEBUG] [Thread-195775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:56:29.206 [DEBUG] [Thread-195775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:56:29.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:56:29.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:56:29.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:56:29.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:56:29.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:56:29.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:56:29.242 [DEBUG] [Thread-195775] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:56:34.494 [DEBUG] [Thread-195777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:56:49.535 [DEBUG] [Thread-195778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:56:59.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:56:59.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:56:59.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:57:00.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 56, 43), 0.55285, 96.3435, 0.0, 13.2336, 11.8854, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:57:00.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:56:43
2026-04-12T20:57:00.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:57:01.068 [DEBUG] [Thread-195779] [transport.py] [_log()] starting thread (client mode): 0xae5616c0
2026-04-12T20:57:01.068 [DEBUG] [Thread-195779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:57:01.088 [DEBUG] [Thread-195779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:57:01.088 [INFO] [Thread-195779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:57:01.091 [DEBUG] [Thread-195779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:57:01.091 [DEBUG] [Thread-195779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:57:01.091 [DEBUG] [Thread-195779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:57:01.091 [DEBUG] [Thread-195779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] client lang: <none>
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] server lang: <none>
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] kex follows: False
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] Compression: none
2026-04-12T20:57:01.092 [DEBUG] [Thread-195779] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:57:01.112 [DEBUG] [Thread-195779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:57:01.112 [DEBUG] [Thread-195779] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:57:01.113 [DEBUG] [Thread-195779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:57:01.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:57:01.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:57:01.115 [DEBUG] [Thread-195779] [transport.py] [_log()] userauth is OK
2026-04-12T20:57:01.115 [DEBUG] [Thread-195779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:57:01.115 [DEBUG] [Thread-195779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:57:01.115 [DEBUG] [Thread-195779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:57:01.115 [DEBUG] [Thread-195779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:57:01.134 [INFO] [Thread-195779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:57:01.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:57:01.924 [DEBUG] [Thread-195779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:57:01.925 [DEBUG] [Thread-195779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:57:01.925 [DEBUG] [Thread-195779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:57:01.966 [DEBUG] [Thread-195779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:57:01.966 [DEBUG] [Thread-195779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:57:01.969 [DEBUG] [Thread-195779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:57:01.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:57:01.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:57:01.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:57:01.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:57:01.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:57:01.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:57:01.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.788995 -999.00  +11.70   8.55     94  +10.90 1 2 1 3 1     0    0 0.65 -9.53 .NESW 8.6 8.6 222.3 12.2 13.6 -20.5 13.4 -14.7 13.2 -14.8 13.5 -17.9
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.788995
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:57:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:57:01.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:57:01.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:57:01.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:56:43', tmtdew=0.55285, humidity=96.3435, cloud=0.0, wind=13.2336, temperature=11.8854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:56:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:57:01.991 [DEBUG] [Thread-195779] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:57:02.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:57:02.073 [DEBUG] [Thread-195782] [transport.py] [_log()] starting thread (client mode): 0xae5616f0
2026-04-12T20:57:02.073 [DEBUG] [Thread-195782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:57:02.092 [DEBUG] [Thread-195782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:57:02.092 [INFO] [Thread-195782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:57:02.100 [DEBUG] [Thread-195782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:57:02.100 [DEBUG] [Thread-195782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:57:02.100 [DEBUG] [Thread-195782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:57:02.100 [DEBUG] [Thread-195782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:02.100 [DEBUG] [Thread-195782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] client lang: <none>
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] server lang: <none>
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] kex follows: False
2026-04-12T20:57:02.101 [DEBUG] [Thread-195782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:57:02.102 [DEBUG] [Thread-195782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:57:02.102 [DEBUG] [Thread-195782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:57:02.102 [DEBUG] [Thread-195782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:57:02.102 [DEBUG] [Thread-195782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:57:02.102 [DEBUG] [Thread-195782] [transport.py] [_log()] Compression: none
2026-04-12T20:57:02.102 [DEBUG] [Thread-195782] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:57:02.158 [DEBUG] [Thread-195782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:57:02.158 [DEBUG] [Thread-195782] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:57:02.159 [DEBUG] [Thread-195782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:57:02.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:57:02.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:57:02.214 [DEBUG] [Thread-195782] [transport.py] [_log()] userauth is OK
2026-04-12T20:57:02.215 [DEBUG] [Thread-195782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:57:02.215 [DEBUG] [Thread-195782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:57:02.215 [DEBUG] [Thread-195782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:57:02.215 [DEBUG] [Thread-195782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:57:02.234 [INFO] [Thread-195782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:57:02.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:57:02.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:57:03.079 [DEBUG] [Thread-195782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:57:03.079 [DEBUG] [Thread-195782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:57:03.128 [DEBUG] [Thread-195782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:57:03.128 [DEBUG] [Thread-195782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:57:03.138 [DEBUG] [Thread-195782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:57:03.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:57:03.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:57:03.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:57:03.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:57:03.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:57:03.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:57:03.174 [DEBUG] [Thread-195782] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:57:04.585 [DEBUG] [Thread-195784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:57:09.935 [DEBUG] [Thread-195785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:57:14.204 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:57:14.206 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:57:19.635 [DEBUG] [Thread-195786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:57:33.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:57:33.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:57:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:57:34.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 57, 19), 0.32637, 97.6717, 0.0, 10.0051, 11.5761, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:57:34.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:57:19
2026-04-12T20:57:34.676 [DEBUG] [Thread-195787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:57:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:57:34.938 [DEBUG] [Thread-195788] [transport.py] [_log()] starting thread (client mode): 0xae563730
2026-04-12T20:57:34.938 [DEBUG] [Thread-195788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:57:34.958 [DEBUG] [Thread-195788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:57:34.958 [INFO] [Thread-195788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] client lang: <none>
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] server lang: <none>
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] kex follows: False
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] Compression: none
2026-04-12T20:57:34.961 [DEBUG] [Thread-195788] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:57:34.978 [DEBUG] [Thread-195788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:57:34.978 [DEBUG] [Thread-195788] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:57:34.979 [DEBUG] [Thread-195788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:57:34.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:57:34.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:57:34.980 [DEBUG] [Thread-195788] [transport.py] [_log()] userauth is OK
2026-04-12T20:57:34.980 [DEBUG] [Thread-195788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:57:34.980 [DEBUG] [Thread-195788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:57:34.981 [DEBUG] [Thread-195788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:57:34.981 [DEBUG] [Thread-195788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:57:35.004 [INFO] [Thread-195788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:57:35.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:57:35.750 [DEBUG] [Thread-195788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:57:35.750 [DEBUG] [Thread-195788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:57:35.750 [DEBUG] [Thread-195788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:57:35.791 [DEBUG] [Thread-195788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:57:35.791 [DEBUG] [Thread-195788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:57:35.795 [DEBUG] [Thread-195788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:57:35.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:57:35.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:57:35.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:57:35.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:57:35.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:57:35.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:57:35.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:57:35.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:57:35.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:57:35.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.789342 -999.00  +11.70   6.65     94  +10.90 1 2 1 3 1     0    0 0.67 -8.80 .NESW 6.7 6.7 217.7 9.3 13.5 -15.0 13.4 -17.0 13.2 -15.5 13.5 -16.1
2026-04-12T20:57:35.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:57:35.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:57:35.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.789342
2026-04-12T20:57:35.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:57:35.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:57:35.820 [DEBUG] [Thread-195788] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:57:35.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:57:35.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:57:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:57:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:57:19', tmtdew=0.32637, humidity=97.6717, cloud=0.0, wind=10.0051, temperature=11.5761, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:56:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:57:35.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:57:35.911 [DEBUG] [Thread-195791] [transport.py] [_log()] starting thread (client mode): 0xae508670
2026-04-12T20:57:35.911 [DEBUG] [Thread-195791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:57:35.932 [DEBUG] [Thread-195791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:57:35.932 [INFO] [Thread-195791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] client lang: <none>
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] server lang: <none>
2026-04-12T20:57:35.940 [DEBUG] [Thread-195791] [transport.py] [_log()] kex follows: False
2026-04-12T20:57:35.941 [DEBUG] [Thread-195791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:57:35.941 [DEBUG] [Thread-195791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:57:35.941 [DEBUG] [Thread-195791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:57:35.941 [DEBUG] [Thread-195791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:57:35.941 [DEBUG] [Thread-195791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:57:35.941 [DEBUG] [Thread-195791] [transport.py] [_log()] Compression: none
2026-04-12T20:57:35.941 [DEBUG] [Thread-195791] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:57:35.999 [DEBUG] [Thread-195791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:57:35.999 [DEBUG] [Thread-195791] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:57:36.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:57:36.000 [DEBUG] [Thread-195791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:57:36.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:57:36.054 [DEBUG] [Thread-195791] [transport.py] [_log()] userauth is OK
2026-04-12T20:57:36.054 [DEBUG] [Thread-195791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:57:36.055 [DEBUG] [Thread-195791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:57:36.055 [DEBUG] [Thread-195791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:57:36.055 [DEBUG] [Thread-195791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:57:36.074 [INFO] [Thread-195791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:57:36.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:57:36.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:57:36.902 [DEBUG] [Thread-195791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:57:36.903 [DEBUG] [Thread-195791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:57:36.951 [DEBUG] [Thread-195791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:57:36.952 [DEBUG] [Thread-195791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:57:36.961 [DEBUG] [Thread-195791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:57:36.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:57:36.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:57:36.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:57:36.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:57:36.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:57:36.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:57:36.998 [DEBUG] [Thread-195791] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:57:49.711 [DEBUG] [Thread-195793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:58:04.755 [DEBUG] [Thread-195794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:58:07.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:58:07.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:58:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:58:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 57, 54), 0.32631, 97.6718, 0.0, 10.4108, 11.5595, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:58:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:57:54
2026-04-12T20:58:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:58:08.775 [DEBUG] [Thread-195795] [transport.py] [_log()] starting thread (client mode): 0xae50a2c0
2026-04-12T20:58:08.775 [DEBUG] [Thread-195795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:58:08.796 [DEBUG] [Thread-195795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:58:08.796 [INFO] [Thread-195795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] client lang: <none>
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] server lang: <none>
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] kex follows: False
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] Compression: none
2026-04-12T20:58:08.799 [DEBUG] [Thread-195795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:58:08.815 [DEBUG] [Thread-195795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:58:08.816 [DEBUG] [Thread-195795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:58:08.817 [DEBUG] [Thread-195795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:58:08.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:58:08.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:58:08.819 [DEBUG] [Thread-195795] [transport.py] [_log()] userauth is OK
2026-04-12T20:58:08.819 [DEBUG] [Thread-195795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:58:08.819 [DEBUG] [Thread-195795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:58:08.819 [DEBUG] [Thread-195795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:58:08.819 [DEBUG] [Thread-195795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:58:08.838 [INFO] [Thread-195795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:58:08.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:58:09.658 [DEBUG] [Thread-195795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:58:09.658 [DEBUG] [Thread-195795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:58:09.659 [DEBUG] [Thread-195795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:58:09.699 [DEBUG] [Thread-195795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:58:09.699 [DEBUG] [Thread-195795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:58:09.702 [DEBUG] [Thread-195795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:58:09.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:58:09.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:58:09.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:58:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:58:09.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:58:09.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:58:09.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:58:09.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:58:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:58:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.789689 -999.00  +11.70   6.31     94  +10.90 1 2 1 3 1     0    0 0.63 -9.28 .NESW 6.3 6.3 214.7 10.3 13.5 -19.1 13.3 -15.0 13.1 -14.3 13.4 -16.6
2026-04-12T20:58:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:58:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:58:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.789689
2026-04-12T20:58:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:58:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:58:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:58:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:58:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:58:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:57:54', tmtdew=0.32631, humidity=97.6718, cloud=0.0, wind=10.4108, temperature=11.5595, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:57:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:58:09.725 [DEBUG] [Thread-195795] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:58:09.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:58:09.821 [DEBUG] [Thread-195798] [transport.py] [_log()] starting thread (client mode): 0xae50abc0
2026-04-12T20:58:09.821 [DEBUG] [Thread-195798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:58:09.835 [DEBUG] [Thread-195798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:58:09.835 [INFO] [Thread-195798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:58:09.843 [DEBUG] [Thread-195798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:58:09.843 [DEBUG] [Thread-195798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:58:09.843 [DEBUG] [Thread-195798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:58:09.843 [DEBUG] [Thread-195798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:09.843 [DEBUG] [Thread-195798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:09.843 [DEBUG] [Thread-195798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] client lang: <none>
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] server lang: <none>
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] kex follows: False
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] Compression: none
2026-04-12T20:58:09.844 [DEBUG] [Thread-195798] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:58:09.902 [DEBUG] [Thread-195798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:58:09.903 [DEBUG] [Thread-195798] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:58:09.903 [DEBUG] [Thread-195798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:58:09.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:58:09.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:58:09.958 [DEBUG] [Thread-195798] [transport.py] [_log()] userauth is OK
2026-04-12T20:58:09.958 [DEBUG] [Thread-195798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:58:09.958 [DEBUG] [Thread-195798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:58:09.958 [DEBUG] [Thread-195798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:58:09.958 [DEBUG] [Thread-195798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:58:09.974 [INFO] [Thread-195798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:58:09.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:58:09.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:58:10.004 [DEBUG] [Thread-195800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:58:10.798 [DEBUG] [Thread-195798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:58:10.798 [DEBUG] [Thread-195798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:58:10.846 [DEBUG] [Thread-195798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:58:10.846 [DEBUG] [Thread-195798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:58:10.854 [DEBUG] [Thread-195798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:58:10.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:58:10.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:58:10.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
2026-04-12T20:58:10.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:58:10.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:58:10.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:58:10.889 [DEBUG] [Thread-195798] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:58:14.411 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:58:14.412 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:58:19.791 [DEBUG] [Thread-195801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:58:34.839 [DEBUG] [Thread-195802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:58:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:58:40.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:58:40.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:58:42.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 58, 30), 0.32123, 97.7049, 0.0, 10.1815, 11.5927, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:58:42.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:58:30
2026-04-12T20:58:42.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:58:42.768 [DEBUG] [Thread-195803] [transport.py] [_log()] starting thread (client mode): 0xae5627a0
2026-04-12T20:58:42.769 [DEBUG] [Thread-195803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:58:42.788 [DEBUG] [Thread-195803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:58:42.788 [INFO] [Thread-195803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:58:42.791 [DEBUG] [Thread-195803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] client lang: <none>
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] server lang: <none>
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] kex follows: False
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] Compression: none
2026-04-12T20:58:42.792 [DEBUG] [Thread-195803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:58:42.808 [DEBUG] [Thread-195803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:58:42.809 [DEBUG] [Thread-195803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:58:42.809 [DEBUG] [Thread-195803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:58:42.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:58:42.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:58:42.854 [DEBUG] [Thread-195803] [transport.py] [_log()] userauth is OK
2026-04-12T20:58:42.855 [DEBUG] [Thread-195803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:58:42.855 [DEBUG] [Thread-195803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:58:42.855 [DEBUG] [Thread-195803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:58:42.855 [DEBUG] [Thread-195803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:58:42.875 [INFO] [Thread-195803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:58:42.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:58:43.663 [DEBUG] [Thread-195803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:58:43.664 [DEBUG] [Thread-195803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:58:43.664 [DEBUG] [Thread-195803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:58:43.705 [DEBUG] [Thread-195803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:58:43.705 [DEBUG] [Thread-195803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:58:43.709 [DEBUG] [Thread-195803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:58:43.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:58:43.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:58:43.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:58:43.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:58:43.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:58:43.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:58:43.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:58:43.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:58:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:58:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.790384 -999.00  +11.70   4.72     94  +10.90 1 2 1 3 1     0    0 0.64 -8.67 .NESW 4.7 4.7 201.8 6.7 13.5 -13.7 13.3 -16.4 13.1 -15.5 13.4 -17.0
2026-04-12T20:58:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:58:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:58:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.790384
2026-04-12T20:58:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:58:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:58:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:58:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:58:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:58:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:58:30', tmtdew=0.32123, humidity=97.7049, cloud=0.0, wind=10.1815, temperature=11.5927, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:58:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:58:43.736 [DEBUG] [Thread-195803] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:58:43.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:58:43.824 [DEBUG] [Thread-195806] [transport.py] [_log()] starting thread (client mode): 0xb0f41900
2026-04-12T20:58:43.824 [DEBUG] [Thread-195806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:58:43.839 [DEBUG] [Thread-195806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:58:43.839 [INFO] [Thread-195806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:58:43.847 [DEBUG] [Thread-195806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] client lang: <none>
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] server lang: <none>
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] kex follows: False
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:58:43.848 [DEBUG] [Thread-195806] [transport.py] [_log()] Compression: none
2026-04-12T20:58:43.849 [DEBUG] [Thread-195806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:58:43.907 [DEBUG] [Thread-195806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:58:43.908 [DEBUG] [Thread-195806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:58:43.908 [DEBUG] [Thread-195806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:58:43.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:58:43.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:58:43.963 [DEBUG] [Thread-195806] [transport.py] [_log()] userauth is OK
2026-04-12T20:58:43.964 [DEBUG] [Thread-195806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:58:43.964 [DEBUG] [Thread-195806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:58:43.964 [DEBUG] [Thread-195806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:58:43.964 [DEBUG] [Thread-195806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:58:43.983 [INFO] [Thread-195806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:58:43.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:58:43.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:58:44.800 [DEBUG] [Thread-195806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:58:44.801 [DEBUG] [Thread-195806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:58:44.848 [DEBUG] [Thread-195806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:58:44.848 [DEBUG] [Thread-195806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:58:44.857 [DEBUG] [Thread-195806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:58:44.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:58:44.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:58:44.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:58:44.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:58:44.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:58:44.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:58:44.894 [DEBUG] [Thread-195806] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:58:49.872 [DEBUG] [Thread-195808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:04.924 [DEBUG] [Thread-195809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:10.061 [DEBUG] [Thread-195810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:14.618 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:14.619 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:59:14.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:59:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:59:16.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 59, 5), 0.318745, 97.7215, 0.0, 10.3756, 11.6258, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:59:16.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:59:05
2026-04-12T20:59:16.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:59:16.785 [DEBUG] [Thread-195811] [transport.py] [_log()] starting thread (client mode): 0xb0f6db70
2026-04-12T20:59:16.785 [DEBUG] [Thread-195811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:59:16.808 [DEBUG] [Thread-195811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:59:16.808 [INFO] [Thread-195811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:59:16.812 [DEBUG] [Thread-195811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:59:16.812 [DEBUG] [Thread-195811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:59:16.812 [DEBUG] [Thread-195811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:59:16.812 [DEBUG] [Thread-195811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] client lang: <none>
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] server lang: <none>
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] kex follows: False
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:59:16.813 [DEBUG] [Thread-195811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:59:16.814 [DEBUG] [Thread-195811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:59:16.814 [DEBUG] [Thread-195811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:59:16.814 [DEBUG] [Thread-195811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:59:16.814 [DEBUG] [Thread-195811] [transport.py] [_log()] Compression: none
2026-04-12T20:59:16.814 [DEBUG] [Thread-195811] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:59:16.831 [DEBUG] [Thread-195811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:59:16.831 [DEBUG] [Thread-195811] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:59:16.832 [DEBUG] [Thread-195811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:59:16.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:59:16.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:59:16.834 [DEBUG] [Thread-195811] [transport.py] [_log()] userauth is OK
2026-04-12T20:59:16.834 [DEBUG] [Thread-195811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:59:16.834 [DEBUG] [Thread-195811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:59:16.834 [DEBUG] [Thread-195811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:59:16.835 [DEBUG] [Thread-195811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:59:16.869 [INFO] [Thread-195811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:59:16.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:59:17.670 [DEBUG] [Thread-195811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:59:17.670 [DEBUG] [Thread-195811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:59:17.670 [DEBUG] [Thread-195811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:59:17.711 [DEBUG] [Thread-195811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:59:17.711 [DEBUG] [Thread-195811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:59:17.714 [DEBUG] [Thread-195811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:59:17.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:59:17.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:59:17.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:59:17.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:59:17.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:59:17.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:59:17.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:59:17.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:59:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:59:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.790731 -999.00  +11.70   6.17     94  +10.90 1 2 1 3 1     0    0 0.66 -8.73 .NESW 6.2 6.2 199.1 7.1 13.4 -16.7 13.3 -15.8 13.1 -15.7 13.3 -17.5
2026-04-12T20:59:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:59:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:59:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.790731
2026-04-12T20:59:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:59:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:59:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:59:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:59:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:59:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:59:05', tmtdew=0.318745, humidity=97.7215, cloud=0.0, wind=10.3756, temperature=11.6258, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:58:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:59:17.735 [DEBUG] [Thread-195811] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:59:17.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:59:17.824 [DEBUG] [Thread-195814] [transport.py] [_log()] starting thread (client mode): 0xae50a110
2026-04-12T20:59:17.824 [DEBUG] [Thread-195814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:59:17.838 [DEBUG] [Thread-195814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:59:17.838 [INFO] [Thread-195814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] client lang: <none>
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] server lang: <none>
2026-04-12T20:59:17.846 [DEBUG] [Thread-195814] [transport.py] [_log()] kex follows: False
2026-04-12T20:59:17.847 [DEBUG] [Thread-195814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:59:17.847 [DEBUG] [Thread-195814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:59:17.847 [DEBUG] [Thread-195814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:59:17.847 [DEBUG] [Thread-195814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:59:17.847 [DEBUG] [Thread-195814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:59:17.847 [DEBUG] [Thread-195814] [transport.py] [_log()] Compression: none
2026-04-12T20:59:17.847 [DEBUG] [Thread-195814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:59:17.902 [DEBUG] [Thread-195814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:59:17.903 [DEBUG] [Thread-195814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:59:17.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:59:17.904 [DEBUG] [Thread-195814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:59:17.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:59:17.960 [DEBUG] [Thread-195814] [transport.py] [_log()] userauth is OK
2026-04-12T20:59:17.960 [DEBUG] [Thread-195814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:59:17.961 [DEBUG] [Thread-195814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:59:17.961 [DEBUG] [Thread-195814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:59:17.961 [DEBUG] [Thread-195814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:59:17.984 [INFO] [Thread-195814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:59:17.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:59:17.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:59:18.801 [DEBUG] [Thread-195814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:59:18.801 [DEBUG] [Thread-195814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:59:18.848 [DEBUG] [Thread-195814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:59:18.849 [DEBUG] [Thread-195814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:59:18.857 [DEBUG] [Thread-195814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:59:18.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:59:18.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:59:18.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:59:18.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:59:18.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:59:18.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:59:18.893 [DEBUG] [Thread-195814] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:59:19.961 [DEBUG] [Thread-195816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:35.017 [DEBUG] [Thread-195817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:48.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T20:59:48.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T20:59:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T20:59:50.056 [DEBUG] [Thread-195818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T20:59:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 59, 41), 0.53727, 96.443, 0.0, 13.41, 11.8854, 2, 2, 0, 2, 0, 0),)
2026-04-12T20:59:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:59:41
2026-04-12T20:59:50.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T20:59:50.707 [DEBUG] [Thread-195819] [transport.py] [_log()] starting thread (client mode): 0xae5a5540
2026-04-12T20:59:50.707 [DEBUG] [Thread-195819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:59:50.727 [DEBUG] [Thread-195819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T20:59:50.727 [INFO] [Thread-195819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T20:59:50.730 [DEBUG] [Thread-195819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:59:50.730 [DEBUG] [Thread-195819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T20:59:50.730 [DEBUG] [Thread-195819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:59:50.730 [DEBUG] [Thread-195819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:50.730 [DEBUG] [Thread-195819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] client lang: <none>
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] server lang: <none>
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] kex follows: False
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:59:50.731 [DEBUG] [Thread-195819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:59:50.732 [DEBUG] [Thread-195819] [transport.py] [_log()] Compression: none
2026-04-12T20:59:50.732 [DEBUG] [Thread-195819] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:59:50.751 [DEBUG] [Thread-195819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:59:50.752 [DEBUG] [Thread-195819] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:59:50.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T20:59:50.753 [DEBUG] [Thread-195819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T20:59:50.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:59:50.755 [DEBUG] [Thread-195819] [transport.py] [_log()] userauth is OK
2026-04-12T20:59:50.756 [DEBUG] [Thread-195819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:59:50.756 [DEBUG] [Thread-195819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:59:50.756 [DEBUG] [Thread-195819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T20:59:50.756 [DEBUG] [Thread-195819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:59:50.779 [INFO] [Thread-195819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:59:50.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:59:51.555 [DEBUG] [Thread-195819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:59:51.555 [DEBUG] [Thread-195819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:59:51.556 [DEBUG] [Thread-195819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T20:59:51.596 [DEBUG] [Thread-195819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:59:51.596 [DEBUG] [Thread-195819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:59:51.599 [DEBUG] [Thread-195819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:59:51.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:59:51.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T20:59:51.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T20:59:51.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T20:59:51.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:59:51.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T20:59:51.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:59:51.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:59:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T20:59:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.791078 -999.00  +11.70   5.21     94  +10.90 1 2 1 3 1     0    0 0.64 -8.89 .NESW 5.2 5.2 203.1 7.2 13.4 -16.0 13.3 -17.1 13.1 -15.4 13.4 -15.8
2026-04-12T20:59:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T20:59:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T20:59:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.791078
2026-04-12T20:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T20:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T20:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T20:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T20:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T20:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:59:41', tmtdew=0.53727, humidity=96.443, cloud=0.0, wind=13.41, temperature=11.8854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:59:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T20:59:51.628 [DEBUG] [Thread-195819] [transport.py] [_log()] EOF in transport thread
2026-04-12T20:59:51.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T20:59:51.722 [DEBUG] [Thread-195822] [transport.py] [_log()] starting thread (client mode): 0xae5a4a60
2026-04-12T20:59:51.722 [DEBUG] [Thread-195822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T20:59:51.738 [DEBUG] [Thread-195822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T20:59:51.738 [INFO] [Thread-195822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T20:59:51.746 [DEBUG] [Thread-195822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] client lang: <none>
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] server lang: <none>
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] kex follows: False
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] Compression: none
2026-04-12T20:59:51.747 [DEBUG] [Thread-195822] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T20:59:51.804 [DEBUG] [Thread-195822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T20:59:51.804 [DEBUG] [Thread-195822] [transport.py] [_log()] Switch to new keys ...
2026-04-12T20:59:51.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T20:59:51.805 [DEBUG] [Thread-195822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T20:59:51.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T20:59:51.860 [DEBUG] [Thread-195822] [transport.py] [_log()] userauth is OK
2026-04-12T20:59:51.860 [DEBUG] [Thread-195822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T20:59:51.860 [DEBUG] [Thread-195822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T20:59:51.860 [DEBUG] [Thread-195822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T20:59:51.860 [DEBUG] [Thread-195822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T20:59:51.879 [INFO] [Thread-195822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T20:59:51.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T20:59:51.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T20:59:52.707 [DEBUG] [Thread-195822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T20:59:52.708 [DEBUG] [Thread-195822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T20:59:52.756 [DEBUG] [Thread-195822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T20:59:52.756 [DEBUG] [Thread-195822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T20:59:52.766 [DEBUG] [Thread-195822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T20:59:52.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T20:59:52.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T20:59:52.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T20:59:52.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T20:59:52.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T20:59:52.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T20:59:52.803 [DEBUG] [Thread-195822] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:00:05.089 [DEBUG] [Thread-195824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:00:10.131 [DEBUG] [Thread-195825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:00:14.823 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:00:14.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:00:20.139 [DEBUG] [Thread-195826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:00:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:00:22.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:00:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:00:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 20, 59, 41), 0.53727, 96.443, 0.0, 13.41, 11.8854, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:00:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 20:59:41
2026-04-12T21:00:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:00:24.764 [DEBUG] [Thread-195827] [transport.py] [_log()] starting thread (client mode): 0xae563f10
2026-04-12T21:00:24.765 [DEBUG] [Thread-195827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:00:24.785 [DEBUG] [Thread-195827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:00:24.785 [INFO] [Thread-195827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:00:24.788 [DEBUG] [Thread-195827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:00:24.788 [DEBUG] [Thread-195827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:00:24.788 [DEBUG] [Thread-195827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:00:24.788 [DEBUG] [Thread-195827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:00:24.788 [DEBUG] [Thread-195827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:00:24.788 [DEBUG] [Thread-195827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] client lang: <none>
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] server lang: <none>
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] kex follows: False
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:00:24.789 [DEBUG] [Thread-195827] [transport.py] [_log()] Compression: none
2026-04-12T21:00:24.790 [DEBUG] [Thread-195827] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:00:24.808 [DEBUG] [Thread-195827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:00:24.809 [DEBUG] [Thread-195827] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:00:24.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:00:24.810 [DEBUG] [Thread-195827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:00:24.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:00:24.854 [DEBUG] [Thread-195827] [transport.py] [_log()] userauth is OK
2026-04-12T21:00:24.855 [DEBUG] [Thread-195827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:00:24.855 [DEBUG] [Thread-195827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:00:24.855 [DEBUG] [Thread-195827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:00:24.855 [DEBUG] [Thread-195827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:00:24.881 [INFO] [Thread-195827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:00:24.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:00:25.942 [DEBUG] [Thread-195827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:00:25.942 [DEBUG] [Thread-195827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:00:25.943 [DEBUG] [Thread-195827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:00:25.983 [DEBUG] [Thread-195827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:00:25.983 [DEBUG] [Thread-195827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:00:25.987 [DEBUG] [Thread-195827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:00:25.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:00:26.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:00:26.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:00:26.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:00:26.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:00:26.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:00:26.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:00:26.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:00:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:00:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.791425 -999.00  +11.70   4.06     94  +10.90 1 2 1 3 1     0    0 0.65 -8.76 .NESW 4.1 4.1 222.7 12.4 13.5 -18.3 13.2 -18.7 13.0 -17.2 13.4 -18.0
2026-04-12T21:00:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:00:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:00:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.791425
2026-04-12T21:00:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:00:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:00:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:00:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:00:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:00:26.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T20:59:41', tmtdew=0.53727, humidity=96.443, cloud=0.0, wind=13.41, temperature=11.8854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T18:59:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:00:26.017 [DEBUG] [Thread-195827] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:00:26.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:00:26.111 [DEBUG] [Thread-195830] [transport.py] [_log()] starting thread (client mode): 0xae508be0
2026-04-12T21:00:26.111 [DEBUG] [Thread-195830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:00:26.125 [DEBUG] [Thread-195830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:00:26.125 [INFO] [Thread-195830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:00:26.133 [DEBUG] [Thread-195830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:00:26.133 [DEBUG] [Thread-195830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:00:26.133 [DEBUG] [Thread-195830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:00:26.133 [DEBUG] [Thread-195830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] client lang: <none>
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] server lang: <none>
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] kex follows: False
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:00:26.134 [DEBUG] [Thread-195830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:00:26.135 [DEBUG] [Thread-195830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:00:26.135 [DEBUG] [Thread-195830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:00:26.135 [DEBUG] [Thread-195830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:00:26.135 [DEBUG] [Thread-195830] [transport.py] [_log()] Compression: none
2026-04-12T21:00:26.135 [DEBUG] [Thread-195830] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:00:26.193 [DEBUG] [Thread-195830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:00:26.194 [DEBUG] [Thread-195830] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:00:26.194 [DEBUG] [Thread-195830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:00:26.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:00:26.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:00:26.252 [DEBUG] [Thread-195830] [transport.py] [_log()] userauth is OK
2026-04-12T21:00:26.253 [DEBUG] [Thread-195830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:00:26.253 [DEBUG] [Thread-195830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:00:26.253 [DEBUG] [Thread-195830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:00:26.253 [DEBUG] [Thread-195830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:00:26.273 [INFO] [Thread-195830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:00:26.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:00:26.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:00:27.087 [DEBUG] [Thread-195830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:00:27.087 [DEBUG] [Thread-195830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:00:27.135 [DEBUG] [Thread-195830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:00:27.136 [DEBUG] [Thread-195830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:00:27.145 [DEBUG] [Thread-195830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:00:27.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:00:27.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:00:27.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:00:27.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:00:27.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:00:27.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:00:27.182 [DEBUG] [Thread-195830] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:00:35.177 [DEBUG] [Thread-195832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:00:50.233 [DEBUG] [Thread-195833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:00:57.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:00:57.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:00:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:00:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 0, 16), 0.31863, 97.7215, 0.0, 9.44064, 11.5927, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:00:58.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:00:16
2026-04-12T21:00:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:00:59.092 [DEBUG] [Thread-195834] [transport.py] [_log()] starting thread (client mode): 0xae5f08e0
2026-04-12T21:00:59.092 [DEBUG] [Thread-195834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:00:59.111 [DEBUG] [Thread-195834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:00:59.111 [INFO] [Thread-195834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] client lang: <none>
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] server lang: <none>
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] kex follows: False
2026-04-12T21:00:59.114 [DEBUG] [Thread-195834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:00:59.115 [DEBUG] [Thread-195834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:00:59.115 [DEBUG] [Thread-195834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:00:59.115 [DEBUG] [Thread-195834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:00:59.115 [DEBUG] [Thread-195834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:00:59.115 [DEBUG] [Thread-195834] [transport.py] [_log()] Compression: none
2026-04-12T21:00:59.115 [DEBUG] [Thread-195834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:00:59.131 [DEBUG] [Thread-195834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:00:59.131 [DEBUG] [Thread-195834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:00:59.132 [DEBUG] [Thread-195834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:00:59.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:00:59.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:00:59.134 [DEBUG] [Thread-195834] [transport.py] [_log()] userauth is OK
2026-04-12T21:00:59.134 [DEBUG] [Thread-195834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:00:59.134 [DEBUG] [Thread-195834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:00:59.134 [DEBUG] [Thread-195834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:00:59.135 [DEBUG] [Thread-195834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:00:59.159 [INFO] [Thread-195834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:00:59.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:00:59.948 [DEBUG] [Thread-195834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:00:59.949 [DEBUG] [Thread-195834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:00:59.949 [DEBUG] [Thread-195834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:00:59.990 [DEBUG] [Thread-195834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:00:59.990 [DEBUG] [Thread-195834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:00:59.994 [DEBUG] [Thread-195834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:01:00.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:01:00.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:01:00.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:01:00.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:01:00.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:01:00.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:01:00.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:01:00.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:01:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:01:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.791772 -999.00  +11.70   5.34     94  +10.80 1 2 1 3 1     0    0 0.66 -7.97 .NESW 5.3 5.3 221.6 9.4 13.4 -20.0 13.2 -17.8 13.0 -17.2 13.3 -18.2
2026-04-12T21:01:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:01:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:01:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.791772
2026-04-12T21:01:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:01:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:01:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:01:00.021 [DEBUG] [Thread-195834] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:01:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:01:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:01:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:00:16', tmtdew=0.31863, humidity=97.7215, cloud=0.0, wind=9.44064, temperature=11.5927, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:00:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:01:00.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:01:00.114 [DEBUG] [Thread-195837] [transport.py] [_log()] starting thread (client mode): 0xb0f40e80
2026-04-12T21:01:00.114 [DEBUG] [Thread-195837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:01:00.129 [DEBUG] [Thread-195837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:01:00.129 [INFO] [Thread-195837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] client lang: <none>
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] server lang: <none>
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] kex follows: False
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:01:00.137 [DEBUG] [Thread-195837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:01:00.138 [DEBUG] [Thread-195837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:01:00.138 [DEBUG] [Thread-195837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:01:00.138 [DEBUG] [Thread-195837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:01:00.138 [DEBUG] [Thread-195837] [transport.py] [_log()] Compression: none
2026-04-12T21:01:00.138 [DEBUG] [Thread-195837] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:01:00.197 [DEBUG] [Thread-195837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:01:00.198 [DEBUG] [Thread-195837] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:01:00.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:01:00.199 [DEBUG] [Thread-195837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:01:00.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:01:00.257 [DEBUG] [Thread-195837] [transport.py] [_log()] userauth is OK
2026-04-12T21:01:00.257 [DEBUG] [Thread-195837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:01:00.258 [DEBUG] [Thread-195837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:01:00.258 [DEBUG] [Thread-195837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:01:00.258 [DEBUG] [Thread-195837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:01:00.282 [INFO] [Thread-195837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:01:00.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:01:00.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:01:01.098 [DEBUG] [Thread-195837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:01:01.098 [DEBUG] [Thread-195837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:01:01.146 [DEBUG] [Thread-195837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:01:01.147 [DEBUG] [Thread-195837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:01:01.155 [DEBUG] [Thread-195837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:01:01.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:01: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')
2026-04-12T21:01:01.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:01:01.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:01:01.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:01:01.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:01:01.190 [DEBUG] [Thread-195837] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:01:05.272 [DEBUG] [Thread-195839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:01:10.200 [DEBUG] [Thread-195840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:01:15.031 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:01:15.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:01:20.324 [DEBUG] [Thread-195841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:01:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:01:31.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:01:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:01:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 0, 52), 0.54223, 96.4099, 0.0, 10.4465, 11.819, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:01:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:00:52
2026-04-12T21:01:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:01:33.095 [DEBUG] [Thread-195842] [transport.py] [_log()] starting thread (client mode): 0xb0f6ca30
2026-04-12T21:01:33.095 [DEBUG] [Thread-195842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:01:33.115 [DEBUG] [Thread-195842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:01:33.116 [INFO] [Thread-195842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:01:33.119 [DEBUG] [Thread-195842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:01:33.119 [DEBUG] [Thread-195842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:01:33.119 [DEBUG] [Thread-195842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:01:33.119 [DEBUG] [Thread-195842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:01:33.119 [DEBUG] [Thread-195842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:01:33.119 [DEBUG] [Thread-195842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:01:33.119 [DEBUG] [Thread-195842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] client lang: <none>
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] server lang: <none>
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] kex follows: False
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] Compression: none
2026-04-12T21:01:33.120 [DEBUG] [Thread-195842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:01:33.138 [DEBUG] [Thread-195842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:01:33.139 [DEBUG] [Thread-195842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:01:33.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:01:33.140 [DEBUG] [Thread-195842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:01:33.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:01:33.142 [DEBUG] [Thread-195842] [transport.py] [_log()] userauth is OK
2026-04-12T21:01:33.142 [DEBUG] [Thread-195842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:01:33.142 [DEBUG] [Thread-195842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:01:33.142 [DEBUG] [Thread-195842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:01:33.142 [DEBUG] [Thread-195842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:01:33.166 [INFO] [Thread-195842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:01:33.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:01:33.978 [DEBUG] [Thread-195842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:01:33.978 [DEBUG] [Thread-195842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:01:33.979 [DEBUG] [Thread-195842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:01:34.019 [DEBUG] [Thread-195842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:01:34.019 [DEBUG] [Thread-195842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:01:34.022 [DEBUG] [Thread-195842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:01:34.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:01:34.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:01:34.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:01:34.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:01:34.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:01:34.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:01:34.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:01:34.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:01:34.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:01:34.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.792120 -999.00  +11.70   6.40     94  +10.90 1 2 1 3 1     0    0 0.68 -7.63 .NESW 6.4 6.4 211.4 7.3 13.4 -19.4 13.2 -18.7 12.9 -17.6 13.3 -20.2
2026-04-12T21:01:34.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.792120
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:01:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:00:52', tmtdew=0.54223, humidity=96.4099, cloud=0.0, wind=10.4465, temperature=11.819, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:00:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.78925, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3855000000000004, 2.0165000000000006, 1.9280000000000008, 2.5115000000000007, nan, nan], zp_timestamp='2026-04-12T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:01:34.041 [DEBUG] [Thread-195842] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:01:34.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:01:34.127 [DEBUG] [Thread-195845] [transport.py] [_log()] starting thread (client mode): 0xae5b1a50
2026-04-12T21:01:34.127 [DEBUG] [Thread-195845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:01:34.141 [DEBUG] [Thread-195845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:01:34.141 [INFO] [Thread-195845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] client lang: <none>
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] server lang: <none>
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] kex follows: False
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:01:34.150 [DEBUG] [Thread-195845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:01:34.151 [DEBUG] [Thread-195845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:01:34.151 [DEBUG] [Thread-195845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:01:34.151 [DEBUG] [Thread-195845] [transport.py] [_log()] Compression: none
2026-04-12T21:01:34.151 [DEBUG] [Thread-195845] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:01:34.208 [DEBUG] [Thread-195845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:01:34.209 [DEBUG] [Thread-195845] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:01:34.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:01:34.210 [DEBUG] [Thread-195845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:01:34.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:01:34.265 [DEBUG] [Thread-195845] [transport.py] [_log()] userauth is OK
2026-04-12T21:01:34.265 [DEBUG] [Thread-195845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:01:34.265 [DEBUG] [Thread-195845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:01:34.265 [DEBUG] [Thread-195845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:01:34.265 [DEBUG] [Thread-195845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:01:34.285 [INFO] [Thread-195845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:01:34.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:01:34.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:01:35.103 [DEBUG] [Thread-195845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:01:35.104 [DEBUG] [Thread-195845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:01:35.152 [DEBUG] [Thread-195845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:01:35.152 [DEBUG] [Thread-195845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:01:35.161 [DEBUG] [Thread-195845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:01:35.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:01:35.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:01:35.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:01:35.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:01:35.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:01:35.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:01:35.199 [DEBUG] [Thread-195845] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:01:35.361 [DEBUG] [Thread-195847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:01:50.415 [DEBUG] [Thread-195848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:02:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:02:05.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:02:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:02:05.452 [DEBUG] [Thread-195849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:02:06.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 1, 28), 0.313495, 97.7547, 0.0, 8.25876, 11.5593, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:02:06.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:01:28
2026-04-12T21:02:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:02:07.058 [DEBUG] [Thread-195850] [transport.py] [_log()] starting thread (client mode): 0xae51ae30
2026-04-12T21:02:07.058 [DEBUG] [Thread-195850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:02:07.078 [DEBUG] [Thread-195850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:02:07.078 [INFO] [Thread-195850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] client lang: <none>
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] server lang: <none>
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] kex follows: False
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:02:07.081 [DEBUG] [Thread-195850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:02:07.082 [DEBUG] [Thread-195850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:02:07.082 [DEBUG] [Thread-195850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:02:07.082 [DEBUG] [Thread-195850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:02:07.082 [DEBUG] [Thread-195850] [transport.py] [_log()] Compression: none
2026-04-12T21:02:07.082 [DEBUG] [Thread-195850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:02:07.098 [DEBUG] [Thread-195850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:02:07.099 [DEBUG] [Thread-195850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:02:07.100 [DEBUG] [Thread-195850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:02:07.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:02:07.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:02:07.102 [DEBUG] [Thread-195850] [transport.py] [_log()] userauth is OK
2026-04-12T21:02:07.102 [DEBUG] [Thread-195850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:02:07.102 [DEBUG] [Thread-195850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:02:07.102 [DEBUG] [Thread-195850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:02:07.102 [DEBUG] [Thread-195850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:02:07.120 [INFO] [Thread-195850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:02:07.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:02:07.966 [DEBUG] [Thread-195850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:02:07.966 [DEBUG] [Thread-195850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:02:07.967 [DEBUG] [Thread-195850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:02:08.007 [DEBUG] [Thread-195850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:02:08.007 [DEBUG] [Thread-195850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:02:08.009 [DEBUG] [Thread-195850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:02:08.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:02:08.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:02:08.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:02:08.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:02:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:02:08.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:02:08.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:02:08.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.792467 -999.00  +11.70   5.93     94  +10.80 1 2 1 3 1     0    0 0.67 -7.42 .NESW 5.9 5.9 224.2 8.9 13.3 -20.3 13.2 -19.0 12.9 -17.5 13.3 -19.0
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.792467
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:02:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:01:28', tmtdew=0.313495, humidity=97.7547, cloud=0.0, wind=8.25876, temperature=11.5593, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:01:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:02:08.030 [DEBUG] [Thread-195850] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:02:08.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:02:08.122 [DEBUG] [Thread-195853] [transport.py] [_log()] starting thread (client mode): 0xae535d20
2026-04-12T21:02:08.122 [DEBUG] [Thread-195853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:02:08.138 [DEBUG] [Thread-195853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:02:08.138 [INFO] [Thread-195853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] client lang: <none>
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] server lang: <none>
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] kex follows: False
2026-04-12T21:02:08.146 [DEBUG] [Thread-195853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:02:08.147 [DEBUG] [Thread-195853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:02:08.147 [DEBUG] [Thread-195853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:02:08.147 [DEBUG] [Thread-195853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:02:08.147 [DEBUG] [Thread-195853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:02:08.147 [DEBUG] [Thread-195853] [transport.py] [_log()] Compression: none
2026-04-12T21:02:08.147 [DEBUG] [Thread-195853] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:02:08.206 [DEBUG] [Thread-195853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:02:08.207 [DEBUG] [Thread-195853] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:02:08.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:02:08.208 [DEBUG] [Thread-195853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:02:08.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:02:08.265 [DEBUG] [Thread-195853] [transport.py] [_log()] userauth is OK
2026-04-12T21:02:08.266 [DEBUG] [Thread-195853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:02:08.266 [DEBUG] [Thread-195853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:02:08.266 [DEBUG] [Thread-195853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:02:08.266 [DEBUG] [Thread-195853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:02:08.285 [INFO] [Thread-195853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:02:08.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:02:08.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:02:09.135 [DEBUG] [Thread-195853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:02:09.136 [DEBUG] [Thread-195853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:02:09.184 [DEBUG] [Thread-195853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:02:09.184 [DEBUG] [Thread-195853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:02:09.193 [DEBUG] [Thread-195853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:02:09.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:02:09.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')
2026-04-12T21:02:09.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:02:09.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:02:09.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:02:09.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:02:09.231 [DEBUG] [Thread-195853] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:02:10.274 [DEBUG] [Thread-195855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:02:15.236 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:02:15.237 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:02:20.486 [DEBUG] [Thread-195856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:02:35.551 [DEBUG] [Thread-195857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:02:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:02:39.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:02:39.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:02:40.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 2, 4), 0.3109, 97.7713, 0.0, 8.04708, 11.5593, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:02:40.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:02:04
2026-04-12T21:02:40.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:02:41.097 [DEBUG] [Thread-195858] [transport.py] [_log()] starting thread (client mode): 0xae535780
2026-04-12T21:02:41.097 [DEBUG] [Thread-195858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:02:41.118 [DEBUG] [Thread-195858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:02:41.118 [INFO] [Thread-195858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] client lang: <none>
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] server lang: <none>
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] kex follows: False
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] Compression: none
2026-04-12T21:02:41.121 [DEBUG] [Thread-195858] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:02:41.139 [DEBUG] [Thread-195858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:02:41.139 [DEBUG] [Thread-195858] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:02:41.140 [DEBUG] [Thread-195858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:02:41.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:02:41.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:02:41.142 [DEBUG] [Thread-195858] [transport.py] [_log()] userauth is OK
2026-04-12T21:02:41.142 [DEBUG] [Thread-195858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:02:41.143 [DEBUG] [Thread-195858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:02:41.143 [DEBUG] [Thread-195858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:02:41.143 [DEBUG] [Thread-195858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:02:41.173 [INFO] [Thread-195858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:02:41.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:02:41.983 [DEBUG] [Thread-195858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:02:41.984 [DEBUG] [Thread-195858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:02:41.984 [DEBUG] [Thread-195858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:02:42.024 [DEBUG] [Thread-195858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:02:42.025 [DEBUG] [Thread-195858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:02:42.028 [DEBUG] [Thread-195858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:02:42.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:02:42.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:02:42.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:02:42.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:02:42.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:02:42.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:02:42.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:02:42.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:02:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:02:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.793162 -999.00  +11.70   4.26     94  +10.80 1 2 1 3 1     0    0 0.70 -6.97 .NESW 4.3 4.3 205.4 7.6 13.2 -21.2 13.1 -19.9 12.9 -18.5 13.2 -20.2
2026-04-12T21:02:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:02:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:02:42.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.793162
2026-04-12T21:02:42.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:02:42.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:02:42.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:02:42.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:02:42.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:02:42.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:02:04', tmtdew=0.3109, humidity=97.7713, cloud=0.0, wind=8.04708, temperature=11.5593, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:02:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:02:42.054 [DEBUG] [Thread-195858] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:02:42.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:02:42.149 [DEBUG] [Thread-195861] [transport.py] [_log()] starting thread (client mode): 0xae535fc0
2026-04-12T21:02:42.149 [DEBUG] [Thread-195861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:02:42.165 [DEBUG] [Thread-195861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:02:42.165 [INFO] [Thread-195861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:02:42.174 [DEBUG] [Thread-195861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:02:42.174 [DEBUG] [Thread-195861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:02:42.175 [DEBUG] [Thread-195861] [transport.py] [_log()] client lang: <none>
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] server lang: <none>
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] kex follows: False
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:02:42.176 [DEBUG] [Thread-195861] [transport.py] [_log()] Compression: none
2026-04-12T21:02:42.177 [DEBUG] [Thread-195861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:02:42.235 [DEBUG] [Thread-195861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:02:42.235 [DEBUG] [Thread-195861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:02:42.236 [DEBUG] [Thread-195861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:02:42.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:02:42.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:02:42.297 [DEBUG] [Thread-195861] [transport.py] [_log()] userauth is OK
2026-04-12T21:02:42.297 [DEBUG] [Thread-195861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:02:42.297 [DEBUG] [Thread-195861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:02:42.297 [DEBUG] [Thread-195861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:02:42.297 [DEBUG] [Thread-195861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:02:42.321 [INFO] [Thread-195861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:02:42.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:02:42.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:02:43.133 [DEBUG] [Thread-195861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:02:43.134 [DEBUG] [Thread-195861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:02:43.181 [DEBUG] [Thread-195861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:02:43.182 [DEBUG] [Thread-195861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:02:43.191 [DEBUG] [Thread-195861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:02:43.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:02:43.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:02:43.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:02:43.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:02:43.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:02:43.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:02:43.227 [DEBUG] [Thread-195861] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:02:50.587 [DEBUG] [Thread-195863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:05.638 [DEBUG] [Thread-195864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:10.337 [DEBUG] [Thread-195865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:13.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:03:13.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:03:13.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:03:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 2, 39), 0.52169, 96.5425, 0.0, 10.5876, 11.8854, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:03:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:02:39
2026-04-12T21:03:14.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:03:15.069 [DEBUG] [Thread-195866] [transport.py] [_log()] starting thread (client mode): 0xb0f428f0
2026-04-12T21:03:15.069 [DEBUG] [Thread-195866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:03:15.090 [DEBUG] [Thread-195866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:03:15.091 [INFO] [Thread-195866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:03:15.094 [DEBUG] [Thread-195866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:03:15.094 [DEBUG] [Thread-195866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:03:15.094 [DEBUG] [Thread-195866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:03:15.094 [DEBUG] [Thread-195866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:15.094 [DEBUG] [Thread-195866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:15.094 [DEBUG] [Thread-195866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] client lang: <none>
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] server lang: <none>
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] kex follows: False
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:03:15.095 [DEBUG] [Thread-195866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:03:15.096 [DEBUG] [Thread-195866] [transport.py] [_log()] Compression: none
2026-04-12T21:03:15.096 [DEBUG] [Thread-195866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:03:15.113 [DEBUG] [Thread-195866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:03:15.114 [DEBUG] [Thread-195866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:03:15.114 [DEBUG] [Thread-195866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:03:15.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:03:15.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:03:15.116 [DEBUG] [Thread-195866] [transport.py] [_log()] userauth is OK
2026-04-12T21:03:15.116 [DEBUG] [Thread-195866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:03:15.116 [DEBUG] [Thread-195866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:03:15.116 [DEBUG] [Thread-195866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:03:15.116 [DEBUG] [Thread-195866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:03:15.133 [INFO] [Thread-195866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:03:15.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:03:15.437 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:15.439 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:15.923 [DEBUG] [Thread-195866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:03:15.923 [DEBUG] [Thread-195866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:03:15.924 [DEBUG] [Thread-195866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:03:15.964 [DEBUG] [Thread-195866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:03:15.964 [DEBUG] [Thread-195866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:03:15.967 [DEBUG] [Thread-195866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:03:15.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:03:15.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:03:15.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:03:15.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:03:15.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:03:15.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:03:15.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:03:15.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:03:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:03:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.793509 -999.00  +11.70   5.03     94  +10.80 1 2 1 3 1     0    0 0.72 -6.18 .NESW 5.0 5.0 216.7 8.1 13.2 -21.0 13.1 -21.2 12.8 -18.5 13.2 -20.3
2026-04-12T21:03:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:03:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:03:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.793509
2026-04-12T21:03:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:03:15.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:03:15.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:03:15.993 [DEBUG] [Thread-195866] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:03:15.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:03:15.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:03:15.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:02:39', tmtdew=0.52169, humidity=96.5425, cloud=0.0, wind=10.5876, temperature=11.8854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:02:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:03:16.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:03:16.087 [DEBUG] [Thread-195869] [transport.py] [_log()] starting thread (client mode): 0xb0f6e590
2026-04-12T21:03:16.088 [DEBUG] [Thread-195869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:03:16.102 [DEBUG] [Thread-195869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:03:16.102 [INFO] [Thread-195869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] client lang: <none>
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] server lang: <none>
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] kex follows: False
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:03:16.110 [DEBUG] [Thread-195869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:03:16.111 [DEBUG] [Thread-195869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:03:16.111 [DEBUG] [Thread-195869] [transport.py] [_log()] Compression: none
2026-04-12T21:03:16.111 [DEBUG] [Thread-195869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:03:16.170 [DEBUG] [Thread-195869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:03:16.170 [DEBUG] [Thread-195869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:03:16.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:03:16.172 [DEBUG] [Thread-195869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:03:16.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:03:16.226 [DEBUG] [Thread-195869] [transport.py] [_log()] userauth is OK
2026-04-12T21:03:16.226 [DEBUG] [Thread-195869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:03:16.227 [DEBUG] [Thread-195869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:03:16.227 [DEBUG] [Thread-195869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:03:16.227 [DEBUG] [Thread-195869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:03:16.245 [INFO] [Thread-195869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:03:16.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:03:16.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:03:17.054 [DEBUG] [Thread-195869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:03:17.054 [DEBUG] [Thread-195869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:03:17.102 [DEBUG] [Thread-195869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:03:17.102 [DEBUG] [Thread-195869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:03:17.112 [DEBUG] [Thread-195869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:03:17.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:03:17.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:03:17.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:03:17.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:03:17.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:03:17.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:03:17.148 [DEBUG] [Thread-195869] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:03:20.669 [DEBUG] [Thread-195871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:35.721 [DEBUG] [Thread-195872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:03:47.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:03:47.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:03:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 3, 14), 0.310845, 97.7713, 0.0, 8.75268, 11.5427, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:03:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:03:14
2026-04-12T21:03:48.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:03:48.952 [DEBUG] [Thread-195873] [transport.py] [_log()] starting thread (client mode): 0xae5b3d00
2026-04-12T21:03:48.952 [DEBUG] [Thread-195873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:03:48.970 [DEBUG] [Thread-195873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:03:48.970 [INFO] [Thread-195873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:03:48.973 [DEBUG] [Thread-195873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:03:48.973 [DEBUG] [Thread-195873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:03:48.973 [DEBUG] [Thread-195873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:03:48.973 [DEBUG] [Thread-195873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:48.973 [DEBUG] [Thread-195873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:48.973 [DEBUG] [Thread-195873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] client lang: <none>
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] server lang: <none>
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] kex follows: False
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] Compression: none
2026-04-12T21:03:48.974 [DEBUG] [Thread-195873] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:03:48.983 [DEBUG] [Thread-195873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:03:48.984 [DEBUG] [Thread-195873] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:03:48.984 [DEBUG] [Thread-195873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:03:48.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:03:48.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:03:48.987 [DEBUG] [Thread-195873] [transport.py] [_log()] userauth is OK
2026-04-12T21:03:48.987 [DEBUG] [Thread-195873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:03:48.987 [DEBUG] [Thread-195873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:03:48.987 [DEBUG] [Thread-195873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:03:48.987 [DEBUG] [Thread-195873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:03:49.013 [INFO] [Thread-195873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:03:49.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:03:49.810 [DEBUG] [Thread-195873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:03:49.811 [DEBUG] [Thread-195873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:03:49.811 [DEBUG] [Thread-195873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:03:49.852 [DEBUG] [Thread-195873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:03:49.852 [DEBUG] [Thread-195873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:03:49.856 [DEBUG] [Thread-195873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:03:49.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:03:49.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:03:49.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:03:49.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:03:49.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:03:49.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:03:49.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:03:49.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:03:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:03:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.793856 -999.00  +11.70   6.47     94  +10.80 1 2 1 3 1     0    0 0.72 -5.81 .NESW 6.5 6.5 210.6 11.4 13.2 -22.3 13.1 -21.3 12.8 -19.2 13.1 -21.2
2026-04-12T21:03:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:03:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:03:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.793856
2026-04-12T21:03:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:03:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:03:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:03:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:03:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:03:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:03:14', tmtdew=0.310845, humidity=97.7713, cloud=0.0, wind=8.75268, temperature=11.5427, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:03:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:03:49.877 [DEBUG] [Thread-195873] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:03:49.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:03:49.975 [DEBUG] [Thread-195876] [transport.py] [_log()] starting thread (client mode): 0xae5b33d0
2026-04-12T21:03:49.975 [DEBUG] [Thread-195876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:03:49.989 [DEBUG] [Thread-195876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:03:49.990 [INFO] [Thread-195876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:03:49.997 [DEBUG] [Thread-195876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:03:49.997 [DEBUG] [Thread-195876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] client lang: <none>
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] server lang: <none>
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] kex follows: False
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:03:49.998 [DEBUG] [Thread-195876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:03:49.999 [DEBUG] [Thread-195876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:03:49.999 [DEBUG] [Thread-195876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:03:49.999 [DEBUG] [Thread-195876] [transport.py] [_log()] Compression: none
2026-04-12T21:03:49.999 [DEBUG] [Thread-195876] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:03:50.056 [DEBUG] [Thread-195876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:03:50.057 [DEBUG] [Thread-195876] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:03:50.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:03:50.058 [DEBUG] [Thread-195876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:03:50.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:03:50.114 [DEBUG] [Thread-195876] [transport.py] [_log()] userauth is OK
2026-04-12T21:03:50.115 [DEBUG] [Thread-195876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:03:50.115 [DEBUG] [Thread-195876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:03:50.115 [DEBUG] [Thread-195876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:03:50.115 [DEBUG] [Thread-195876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:03:50.134 [INFO] [Thread-195876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:03:50.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:03:50.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:03:50.760 [DEBUG] [Thread-195878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:03:50.951 [DEBUG] [Thread-195876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:03:50.951 [DEBUG] [Thread-195876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:03:51.001 [DEBUG] [Thread-195876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:03:51.002 [DEBUG] [Thread-195876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:03:51.013 [DEBUG] [Thread-195876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:03:51.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:03:51.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:03: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
2026-04-12T21:03:51.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:03:51.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:03:51.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:03:51.050 [DEBUG] [Thread-195876] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:04:05.822 [DEBUG] [Thread-195879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:04:10.415 [DEBUG] [Thread-195880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:04:15.644 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:04:15.645 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:04:20.856 [DEBUG] [Thread-195881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:04:21.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:04:21.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:04:21.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:04:22.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 3, 50), 0.52666, 96.5094, 0.0, 10.2348, 11.8191, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:04:22.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:03:50
2026-04-12T21:04:22.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:04:22.900 [DEBUG] [Thread-195882] [transport.py] [_log()] starting thread (client mode): 0xae5359c0
2026-04-12T21:04:22.900 [DEBUG] [Thread-195882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:04:22.920 [DEBUG] [Thread-195882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:04:22.920 [INFO] [Thread-195882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:04:22.923 [DEBUG] [Thread-195882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:04:22.923 [DEBUG] [Thread-195882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] client lang: <none>
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] server lang: <none>
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] kex follows: False
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] Compression: none
2026-04-12T21:04:22.924 [DEBUG] [Thread-195882] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:04:22.941 [DEBUG] [Thread-195882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:04:22.941 [DEBUG] [Thread-195882] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:04:22.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:04:22.942 [DEBUG] [Thread-195882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:04:22.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:04:22.944 [DEBUG] [Thread-195882] [transport.py] [_log()] userauth is OK
2026-04-12T21:04:22.944 [DEBUG] [Thread-195882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:04:22.944 [DEBUG] [Thread-195882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:04:22.944 [DEBUG] [Thread-195882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:04:22.944 [DEBUG] [Thread-195882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:04:22.968 [INFO] [Thread-195882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:04:22.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:04:23.765 [DEBUG] [Thread-195882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:04:23.765 [DEBUG] [Thread-195882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:04:23.766 [DEBUG] [Thread-195882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:04:23.806 [DEBUG] [Thread-195882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:04:23.806 [DEBUG] [Thread-195882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:04:23.809 [DEBUG] [Thread-195882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:04:23.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:04:23.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:04:23.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:04:23.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:04:23.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:04:23.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:04:23.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:04:23.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:04:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:04:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.794203 -999.00  +11.70   3.36     94  +10.80 1 2 1 3 1     0    0 0.72 -5.57 .NESW 3.4 3.4 211.6 10.5 13.2 -22.6 13.0 -20.6 12.8 -19.0 13.1 -21.3
2026-04-12T21:04:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:04:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:04:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.794203
2026-04-12T21:04:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:04:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:04:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:04:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:04:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:04:23.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:03:50', tmtdew=0.52666, humidity=96.5094, cloud=0.0, wind=10.2348, temperature=11.8191, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:03:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:04:23.833 [DEBUG] [Thread-195882] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:04:23.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:04:23.929 [DEBUG] [Thread-195885] [transport.py] [_log()] starting thread (client mode): 0xae5a5840
2026-04-12T21:04:23.929 [DEBUG] [Thread-195885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:04:23.945 [DEBUG] [Thread-195885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:04:23.945 [INFO] [Thread-195885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:04:23.953 [DEBUG] [Thread-195885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] client lang: <none>
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] server lang: <none>
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] kex follows: False
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] Compression: none
2026-04-12T21:04:23.954 [DEBUG] [Thread-195885] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:04:24.016 [DEBUG] [Thread-195885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:04:24.016 [DEBUG] [Thread-195885] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:04:24.017 [DEBUG] [Thread-195885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:04:24.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:04:24.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:04:24.075 [DEBUG] [Thread-195885] [transport.py] [_log()] userauth is OK
2026-04-12T21:04:24.075 [DEBUG] [Thread-195885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:04:24.075 [DEBUG] [Thread-195885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:04:24.075 [DEBUG] [Thread-195885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:04:24.075 [DEBUG] [Thread-195885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:04:24.097 [INFO] [Thread-195885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:04:24.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:04:24.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:04:24.937 [DEBUG] [Thread-195885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:04:24.937 [DEBUG] [Thread-195885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:04:24.984 [DEBUG] [Thread-195885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:04:24.985 [DEBUG] [Thread-195885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:04:24.993 [DEBUG] [Thread-195885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:04:25.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:04:25.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:04: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') -> 00000000
2026-04-12T21:04:25.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:04:25.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:04:25.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:04:25.028 [DEBUG] [Thread-195885] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:04:35.888 [DEBUG] [Thread-195887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:04:50.940 [DEBUG] [Thread-195888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:04:55.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:04:55.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:04:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:04:56.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 4, 25), 0.315705, 97.7381, 0.0, 8.59392, 11.4432, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:04:56.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:04:25
2026-04-12T21:04:56.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:04:56.881 [DEBUG] [Thread-195889] [transport.py] [_log()] starting thread (client mode): 0xae5b3340
2026-04-12T21:04:56.881 [DEBUG] [Thread-195889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:04:56.897 [DEBUG] [Thread-195889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:04:56.897 [INFO] [Thread-195889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:04:56.900 [DEBUG] [Thread-195889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] client lang: <none>
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] server lang: <none>
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] kex follows: False
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] Compression: none
2026-04-12T21:04:56.901 [DEBUG] [Thread-195889] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:04:56.920 [DEBUG] [Thread-195889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:04:56.920 [DEBUG] [Thread-195889] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:04:56.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:04:56.921 [DEBUG] [Thread-195889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:04:56.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:04:56.962 [DEBUG] [Thread-195889] [transport.py] [_log()] userauth is OK
2026-04-12T21:04:56.962 [DEBUG] [Thread-195889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:04:56.963 [DEBUG] [Thread-195889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:04:56.963 [DEBUG] [Thread-195889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:04:56.963 [DEBUG] [Thread-195889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:04:56.996 [INFO] [Thread-195889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:04:56.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:04:57.769 [DEBUG] [Thread-195889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:04:57.769 [DEBUG] [Thread-195889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:04:57.770 [DEBUG] [Thread-195889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:04:57.811 [DEBUG] [Thread-195889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:04:57.811 [DEBUG] [Thread-195889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:04:57.814 [DEBUG] [Thread-195889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:04:57.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:04:57.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:04:57.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:04:57.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:04:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:04:57.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:04:57.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:04:57.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:04:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:04:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.794550 -999.00  +11.70   4.36     94  +10.80 1 2 1 3 1     0    0 0.73 -5.31 .NESW 4.4 4.4 199.6 11.3 13.2 -22.2 13.0 -21.2 12.7 -19.3 13.1 -21.3
2026-04-12T21:04:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:04:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:04:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.794550
2026-04-12T21:04:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:04:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:04:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:04:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:04:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:04:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:04:25', tmtdew=0.315705, humidity=97.7381, cloud=0.0, wind=8.59392, temperature=11.4432, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:04:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:04:57.838 [DEBUG] [Thread-195889] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:04:57.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:04:57.929 [DEBUG] [Thread-195892] [transport.py] [_log()] starting thread (client mode): 0xb0f8f1f0
2026-04-12T21:04:57.929 [DEBUG] [Thread-195892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:04:57.943 [DEBUG] [Thread-195892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:04:57.944 [INFO] [Thread-195892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] client lang: <none>
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] server lang: <none>
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] kex follows: False
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:04:57.951 [DEBUG] [Thread-195892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:04:57.952 [DEBUG] [Thread-195892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:04:57.952 [DEBUG] [Thread-195892] [transport.py] [_log()] Compression: none
2026-04-12T21:04:57.952 [DEBUG] [Thread-195892] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:04:58.010 [DEBUG] [Thread-195892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:04:58.011 [DEBUG] [Thread-195892] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:04:58.011 [DEBUG] [Thread-195892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:04:58.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:04:58.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:04:58.067 [DEBUG] [Thread-195892] [transport.py] [_log()] userauth is OK
2026-04-12T21:04:58.067 [DEBUG] [Thread-195892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:04:58.067 [DEBUG] [Thread-195892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:04:58.067 [DEBUG] [Thread-195892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:04:58.067 [DEBUG] [Thread-195892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:04:58.086 [INFO] [Thread-195892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:04:58.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:04:58.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:04:58.905 [DEBUG] [Thread-195892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:04:58.915 [DEBUG] [Thread-195892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:04:58.954 [DEBUG] [Thread-195892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:04:58.954 [DEBUG] [Thread-195892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:04:58.963 [DEBUG] [Thread-195892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:04:58.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:04:58.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:04:58.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:04:58.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:04:58.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:04:58.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:04:58.999 [DEBUG] [Thread-195892] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:05:05.972 [DEBUG] [Thread-195894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:05:10.481 [DEBUG] [Thread-195895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:05:15.851 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:05:15.853 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:05:21.025 [DEBUG] [Thread-195896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:05:29.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:05:29.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:05:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:05:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 5), 0.305605, 97.8044, 0.0, 8.02944, 11.5261, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:05:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:05:00
2026-04-12T21:05:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:05:30.826 [DEBUG] [Thread-195897] [transport.py] [_log()] starting thread (client mode): 0xae5b30a0
2026-04-12T21:05:30.827 [DEBUG] [Thread-195897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:05:30.839 [DEBUG] [Thread-195897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:05:30.839 [INFO] [Thread-195897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] client lang: <none>
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] server lang: <none>
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] kex follows: False
2026-04-12T21:05:30.841 [DEBUG] [Thread-195897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:05:30.842 [DEBUG] [Thread-195897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:05:30.842 [DEBUG] [Thread-195897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:05:30.842 [DEBUG] [Thread-195897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:05:30.842 [DEBUG] [Thread-195897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:05:30.842 [DEBUG] [Thread-195897] [transport.py] [_log()] Compression: none
2026-04-12T21:05:30.842 [DEBUG] [Thread-195897] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:05:30.852 [DEBUG] [Thread-195897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:05:30.852 [DEBUG] [Thread-195897] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:05:30.852 [DEBUG] [Thread-195897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:05:30.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:05:30.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:05:30.854 [DEBUG] [Thread-195897] [transport.py] [_log()] userauth is OK
2026-04-12T21:05:30.854 [DEBUG] [Thread-195897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:05:30.854 [DEBUG] [Thread-195897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:05:30.854 [DEBUG] [Thread-195897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:05:30.854 [DEBUG] [Thread-195897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:05:30.874 [INFO] [Thread-195897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:05:30.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:05:31.632 [DEBUG] [Thread-195897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:05:31.632 [DEBUG] [Thread-195897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:05:31.632 [DEBUG] [Thread-195897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:05:31.673 [DEBUG] [Thread-195897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:05:31.673 [DEBUG] [Thread-195897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:05:31.676 [DEBUG] [Thread-195897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:05:31.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:05:31.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:05:31.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:05:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:05:31.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:05:31.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:05:31.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:05:31.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:05:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:05:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.794898 -999.00  +11.70   4.96     94  +10.80 1 2 1 3 1     0    0 0.74 -5.02 .NESW 5.0 5.0 217.8 7.5 13.1 -22.5 13.0 -21.2 12.7 -19.5 13.0 -21.3
2026-04-12T21:05:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:05:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:05:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.794898
2026-04-12T21:05:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:05:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:05:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:05:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:05:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:05:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:05:00', tmtdew=0.305605, humidity=97.8044, cloud=0.0, wind=8.02944, temperature=11.5261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:04:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:05:31.705 [DEBUG] [Thread-195897] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:05:31.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:05:31.799 [DEBUG] [Thread-195900] [transport.py] [_log()] starting thread (client mode): 0xb0f8e7a0
2026-04-12T21:05:31.799 [DEBUG] [Thread-195900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:05:31.815 [DEBUG] [Thread-195900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:05:31.815 [INFO] [Thread-195900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:05:31.823 [DEBUG] [Thread-195900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:05:31.823 [DEBUG] [Thread-195900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:05:31.823 [DEBUG] [Thread-195900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] client lang: <none>
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] server lang: <none>
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] kex follows: False
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] Compression: none
2026-04-12T21:05:31.824 [DEBUG] [Thread-195900] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:05:31.883 [DEBUG] [Thread-195900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:05:31.884 [DEBUG] [Thread-195900] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:05:31.885 [DEBUG] [Thread-195900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:05:31.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:05:31.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:05:31.940 [DEBUG] [Thread-195900] [transport.py] [_log()] userauth is OK
2026-04-12T21:05:31.940 [DEBUG] [Thread-195900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:05:31.940 [DEBUG] [Thread-195900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:05:31.940 [DEBUG] [Thread-195900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:05:31.940 [DEBUG] [Thread-195900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:05:31.959 [INFO] [Thread-195900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:05:31.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:05:31.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:05:32.776 [DEBUG] [Thread-195900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:05:32.776 [DEBUG] [Thread-195900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:05:32.824 [DEBUG] [Thread-195900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:05:32.824 [DEBUG] [Thread-195900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:05:32.834 [DEBUG] [Thread-195900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:05:32.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:05:32.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:05:32.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:05:32.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:05:32.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:05:32.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:05:32.873 [DEBUG] [Thread-195900] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:05:36.065 [DEBUG] [Thread-195902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:05:51.116 [DEBUG] [Thread-195903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:06:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:06:02.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:06:02.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:06:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 5, 36), 0.52126, 96.5425, 0.0, 10.2348, 11.7527, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:06:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:05:36
2026-04-12T21:06:04.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:06:04.709 [DEBUG] [Thread-195904] [transport.py] [_log()] starting thread (client mode): 0xb0f8f9d0
2026-04-12T21:06:04.709 [DEBUG] [Thread-195904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:06:04.730 [DEBUG] [Thread-195904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:06:04.731 [INFO] [Thread-195904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] client lang: <none>
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] server lang: <none>
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] kex follows: False
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] Compression: none
2026-04-12T21:06:04.734 [DEBUG] [Thread-195904] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:06:04.751 [DEBUG] [Thread-195904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:06:04.752 [DEBUG] [Thread-195904] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:06:04.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:06:04.753 [DEBUG] [Thread-195904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:06:04.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:06:04.755 [DEBUG] [Thread-195904] [transport.py] [_log()] userauth is OK
2026-04-12T21:06:04.755 [DEBUG] [Thread-195904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:06:04.756 [DEBUG] [Thread-195904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:06:04.756 [DEBUG] [Thread-195904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:06:04.756 [DEBUG] [Thread-195904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:06:04.780 [INFO] [Thread-195904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:06:04.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:06:05.587 [DEBUG] [Thread-195904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:06:05.587 [DEBUG] [Thread-195904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:06:05.588 [DEBUG] [Thread-195904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:06:05.628 [DEBUG] [Thread-195904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:06:05.628 [DEBUG] [Thread-195904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:06:05.632 [DEBUG] [Thread-195904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:06:05.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:06:05.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:06:05.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:06:05.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:06:05.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:06:05.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:06:05.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:06:05.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:06:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:06:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.795592 -999.00  +11.70   4.80     94  +10.80 1 2 1 3 1     0    0 0.76 -4.03 .NESW 4.8 4.8 215.6 11.7 13.1 -22.3 12.9 -21.1 12.6 -19.3 13.0 -21.3
2026-04-12T21:06:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:06:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:06:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.795592
2026-04-12T21:06:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:06:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:06:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:06:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:06:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:06:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:05:36', tmtdew=0.52126, humidity=96.5425, cloud=0.0, wind=10.2348, temperature=11.7527, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:05:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:06:05.653 [DEBUG] [Thread-195904] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:06:05.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:06:05.742 [DEBUG] [Thread-195907] [transport.py] [_log()] starting thread (client mode): 0xae5b3be0
2026-04-12T21:06:05.742 [DEBUG] [Thread-195907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:06:05.760 [DEBUG] [Thread-195907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:06:05.760 [INFO] [Thread-195907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] client lang: <none>
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] server lang: <none>
2026-04-12T21:06:05.768 [DEBUG] [Thread-195907] [transport.py] [_log()] kex follows: False
2026-04-12T21:06:05.769 [DEBUG] [Thread-195907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:06:05.769 [DEBUG] [Thread-195907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:06:05.769 [DEBUG] [Thread-195907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:06:05.769 [DEBUG] [Thread-195907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:06:05.769 [DEBUG] [Thread-195907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:06:05.769 [DEBUG] [Thread-195907] [transport.py] [_log()] Compression: none
2026-04-12T21:06:05.769 [DEBUG] [Thread-195907] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:06:05.834 [DEBUG] [Thread-195907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:06:05.834 [DEBUG] [Thread-195907] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:06:05.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:06:05.836 [DEBUG] [Thread-195907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:06:05.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:06:05.895 [DEBUG] [Thread-195907] [transport.py] [_log()] userauth is OK
2026-04-12T21:06:05.895 [DEBUG] [Thread-195907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:06:05.896 [DEBUG] [Thread-195907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:06:05.896 [DEBUG] [Thread-195907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:06:05.896 [DEBUG] [Thread-195907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:06:05.915 [INFO] [Thread-195907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:06:05.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:06:05.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:06:06.156 [DEBUG] [Thread-195909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:06:06.718 [DEBUG] [Thread-195907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:06:06.718 [DEBUG] [Thread-195907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:06:06.766 [DEBUG] [Thread-195907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:06:06.767 [DEBUG] [Thread-195907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:06:06.776 [DEBUG] [Thread-195907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:06:06.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:06:06.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:06:06.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:06:06.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:06:06.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:06:06.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:06:06.814 [DEBUG] [Thread-195907] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:06:10.549 [DEBUG] [Thread-195910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:06:16.061 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:06:16.062 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:06:21.213 [DEBUG] [Thread-195911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:06:36.246 [DEBUG] [Thread-195912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:06:36.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:06:36.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:06:36.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:06:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 6, 12), 0.30545, 97.8044, 0.0, 8.85852, 11.4764, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:06:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:06:12
2026-04-12T21:06:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:06:38.712 [DEBUG] [Thread-195913] [transport.py] [_log()] starting thread (client mode): 0xae5b36d0
2026-04-12T21:06:38.712 [DEBUG] [Thread-195913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:06:38.732 [DEBUG] [Thread-195913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:06:38.732 [INFO] [Thread-195913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] client lang: <none>
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] server lang: <none>
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] kex follows: False
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] Compression: none
2026-04-12T21:06:38.735 [DEBUG] [Thread-195913] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:06:38.752 [DEBUG] [Thread-195913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:06:38.753 [DEBUG] [Thread-195913] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:06:38.753 [DEBUG] [Thread-195913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:06:38.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:06:38.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:06:38.756 [DEBUG] [Thread-195913] [transport.py] [_log()] userauth is OK
2026-04-12T21:06:38.756 [DEBUG] [Thread-195913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:06:38.756 [DEBUG] [Thread-195913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:06:38.756 [DEBUG] [Thread-195913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:06:38.756 [DEBUG] [Thread-195913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:06:38.781 [INFO] [Thread-195913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:06:38.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:06:39.572 [DEBUG] [Thread-195913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:06:39.572 [DEBUG] [Thread-195913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:06:39.572 [DEBUG] [Thread-195913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:06:39.613 [DEBUG] [Thread-195913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:06:39.613 [DEBUG] [Thread-195913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:06:39.615 [DEBUG] [Thread-195913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:06:39.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:06:39.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:06:39.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:06:39.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:06:39.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:06:39.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:06:39.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:06:39.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:06:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:06:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.795939 -999.00  +11.70   5.46     94  +10.80 1 2 1 3 1     0    0 0.77 -3.40 .NESW 5.5 5.5 223.2 8.6 13.0 -21.3 12.9 -20.8 12.6 -19.1 13.0 -20.6
2026-04-12T21:06:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:06:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:06:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.795939
2026-04-12T21:06:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:06:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:06:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:06:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:06:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:06:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:06:12', tmtdew=0.30545, humidity=97.8044, cloud=0.0, wind=8.85852, temperature=11.4764, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:06:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:06:39.640 [DEBUG] [Thread-195913] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:06:39.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:06:39.736 [DEBUG] [Thread-195916] [transport.py] [_log()] starting thread (client mode): 0xae5b2ef0
2026-04-12T21:06:39.736 [DEBUG] [Thread-195916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:06:39.750 [DEBUG] [Thread-195916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:06:39.750 [INFO] [Thread-195916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:06:39.758 [DEBUG] [Thread-195916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:06:39.758 [DEBUG] [Thread-195916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:06:39.758 [DEBUG] [Thread-195916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] client lang: <none>
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] server lang: <none>
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] kex follows: False
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] Compression: none
2026-04-12T21:06:39.759 [DEBUG] [Thread-195916] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:06:39.816 [DEBUG] [Thread-195916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:06:39.817 [DEBUG] [Thread-195916] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:06:39.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:06:39.818 [DEBUG] [Thread-195916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:06:39.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:06:39.873 [DEBUG] [Thread-195916] [transport.py] [_log()] userauth is OK
2026-04-12T21:06:39.873 [DEBUG] [Thread-195916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:06:39.873 [DEBUG] [Thread-195916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:06:39.873 [DEBUG] [Thread-195916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:06:39.873 [DEBUG] [Thread-195916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:06:39.892 [INFO] [Thread-195916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:06:39.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:06:39.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:06:40.694 [DEBUG] [Thread-195916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:06:40.694 [DEBUG] [Thread-195916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:06:40.742 [DEBUG] [Thread-195916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:06:40.742 [DEBUG] [Thread-195916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:06:40.752 [DEBUG] [Thread-195916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:06:40.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:06:40.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:06: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
2026-04-12T21:06:40.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:06:40.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:06:40.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:06:40.789 [DEBUG] [Thread-195916] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:06:51.282 [DEBUG] [Thread-195918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:07:06.340 [DEBUG] [Thread-195919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:07:10.605 [DEBUG] [Thread-195920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:07:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:07:10.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:07:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:07:12.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 6, 47), 0.50593, 96.642, 0.0, 9.5292, 11.8191, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:07:12.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:06:47
2026-04-12T21:07:12.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:07:12.648 [DEBUG] [Thread-195921] [transport.py] [_log()] starting thread (client mode): 0xae534760
2026-04-12T21:07:12.648 [DEBUG] [Thread-195921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:07:12.671 [DEBUG] [Thread-195921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:07:12.672 [INFO] [Thread-195921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:07:12.675 [DEBUG] [Thread-195921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:07:12.676 [DEBUG] [Thread-195921] [transport.py] [_log()] client lang: <none>
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] server lang: <none>
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] kex follows: False
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] Compression: none
2026-04-12T21:07:12.677 [DEBUG] [Thread-195921] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:07:12.698 [DEBUG] [Thread-195921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:07:12.698 [DEBUG] [Thread-195921] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:07:12.699 [DEBUG] [Thread-195921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:07:12.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:07:12.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:07:12.742 [DEBUG] [Thread-195921] [transport.py] [_log()] userauth is OK
2026-04-12T21:07:12.743 [DEBUG] [Thread-195921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:07:12.743 [DEBUG] [Thread-195921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:07:12.743 [DEBUG] [Thread-195921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:07:12.743 [DEBUG] [Thread-195921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:07:12.775 [INFO] [Thread-195921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:07:12.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:07:13.584 [DEBUG] [Thread-195921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:07:13.584 [DEBUG] [Thread-195921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:07:13.585 [DEBUG] [Thread-195921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:07:13.625 [DEBUG] [Thread-195921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:07:13.625 [DEBUG] [Thread-195921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:07:13.628 [DEBUG] [Thread-195921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:07:13.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:07:13.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:07:13.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:07:13.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:07:13.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:07:13.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:07:13.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:07:13.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:07:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:07:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.796286 -999.00  +11.70   5.98     94  +10.80 1 2 1 3 1     0    0 0.80 -2.80 .NESW 6.0 6.0 201.2 7.7 13.0 -21.8 12.9 -20.4 12.7 -18.7 12.9 -20.8
2026-04-12T21:07:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:07:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:07:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.796286
2026-04-12T21:07:13.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:07:13.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:07:13.649 [DEBUG] [Thread-195921] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:07:13.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:07:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:07:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:07:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:06:47', tmtdew=0.50593, humidity=96.642, cloud=0.0, wind=9.5292, temperature=11.8191, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:06:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:07:13.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:07:13.748 [DEBUG] [Thread-195924] [transport.py] [_log()] starting thread (client mode): 0xae5a4490
2026-04-12T21:07:13.748 [DEBUG] [Thread-195924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:07:13.762 [DEBUG] [Thread-195924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:07:13.763 [INFO] [Thread-195924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:07:13.770 [DEBUG] [Thread-195924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:07:13.770 [DEBUG] [Thread-195924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:07:13.771 [DEBUG] [Thread-195924] [transport.py] [_log()] client lang: <none>
2026-04-12T21:07:13.772 [DEBUG] [Thread-195924] [transport.py] [_log()] server lang: <none>
2026-04-12T21:07:13.772 [DEBUG] [Thread-195924] [transport.py] [_log()] kex follows: False
2026-04-12T21:07:13.772 [DEBUG] [Thread-195924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:07:13.772 [DEBUG] [Thread-195924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:07:13.772 [DEBUG] [Thread-195924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:07:13.772 [DEBUG] [Thread-195924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:07:13.772 [DEBUG] [Thread-195924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:07:13.773 [DEBUG] [Thread-195924] [transport.py] [_log()] Compression: none
2026-04-12T21:07:13.773 [DEBUG] [Thread-195924] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:07:13.829 [DEBUG] [Thread-195924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:07:13.830 [DEBUG] [Thread-195924] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:07:13.831 [DEBUG] [Thread-195924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:07:13.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:07:13.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:07:13.888 [DEBUG] [Thread-195924] [transport.py] [_log()] userauth is OK
2026-04-12T21:07:13.889 [DEBUG] [Thread-195924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:07:13.889 [DEBUG] [Thread-195924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:07:13.889 [DEBUG] [Thread-195924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:07:13.889 [DEBUG] [Thread-195924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:07:13.908 [INFO] [Thread-195924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:07:13.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:07:13.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:07:14.721 [DEBUG] [Thread-195924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:07:14.721 [DEBUG] [Thread-195924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:07:14.769 [DEBUG] [Thread-195924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:07:14.769 [DEBUG] [Thread-195924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:07:14.778 [DEBUG] [Thread-195924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:07:14.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:07:14.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:07:14.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:07:14.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:07:14.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:07:14.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:07:14.816 [DEBUG] [Thread-195924] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:07:16.269 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:07:16.270 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:07:21.377 [DEBUG] [Thread-195926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:07:36.430 [DEBUG] [Thread-195927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:07:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:07:44.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:07:44.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:07:46.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 7, 23), 0.3055, 97.8044, 0.0, 8.20584, 11.493, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:07:46.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:07:23
2026-04-12T21:07:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:07:46.658 [DEBUG] [Thread-195928] [transport.py] [_log()] starting thread (client mode): 0xae5b0ac0
2026-04-12T21:07:46.658 [DEBUG] [Thread-195928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:07:46.668 [DEBUG] [Thread-195928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:07:46.668 [INFO] [Thread-195928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:07:46.669 [DEBUG] [Thread-195928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:07:46.669 [DEBUG] [Thread-195928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:07:46.669 [DEBUG] [Thread-195928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:07:46.669 [DEBUG] [Thread-195928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:46.669 [DEBUG] [Thread-195928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:46.669 [DEBUG] [Thread-195928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:46.669 [DEBUG] [Thread-195928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] client lang: <none>
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] server lang: <none>
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] kex follows: False
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] Compression: none
2026-04-12T21:07:46.670 [DEBUG] [Thread-195928] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:07:46.678 [DEBUG] [Thread-195928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:07:46.679 [DEBUG] [Thread-195928] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:07:46.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:07:46.679 [DEBUG] [Thread-195928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:07:46.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:07:46.680 [DEBUG] [Thread-195928] [transport.py] [_log()] userauth is OK
2026-04-12T21:07:46.680 [DEBUG] [Thread-195928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:07:46.680 [DEBUG] [Thread-195928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:07:46.680 [DEBUG] [Thread-195928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:07:46.680 [DEBUG] [Thread-195928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:07:46.693 [INFO] [Thread-195928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:07:46.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:07:47.481 [DEBUG] [Thread-195928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:07:47.481 [DEBUG] [Thread-195928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:07:47.482 [DEBUG] [Thread-195928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:07:47.522 [DEBUG] [Thread-195928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:07:47.522 [DEBUG] [Thread-195928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:07:47.526 [DEBUG] [Thread-195928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:07:47.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:07:47.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:07:47.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:07:47.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:07:47.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:07:47.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:07:47.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:07:47.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:07:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:07:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.796634 -999.00  +11.70   4.00     94  +10.80 1 2 1 3 1     0    0 0.81 -2.28 .NESW 4.0 4.0 225.9 8.5 13.0 -20.3 12.9 -19.7 12.7 -18.3 13.0 -20.3
2026-04-12T21:07:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:07:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:07:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.796634
2026-04-12T21:07:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:07:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:07:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:07:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:07:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:07:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:07:23', tmtdew=0.3055, humidity=97.8044, cloud=0.0, wind=8.20584, temperature=11.493, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:07:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2822499999999994, nan, nan, nan, nan, nan, nan, 1.9764999999999997, 1.626999999999999, nan, 1.4559999999999986, 1.5767499999999988, nan, 2.0447500000000005, nan, 1.8075, 1.6197499999999998, 1.5175, 1.5125000000000002, 1.3810000000000011, 1.9240000000000013, 1.9220000000000006, 2.1877499999999994], zp_timestamp='2026-04-12T19:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:07:47.554 [DEBUG] [Thread-195928] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:07:47.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:07:47.647 [DEBUG] [Thread-195931] [transport.py] [_log()] starting thread (client mode): 0xae5b13f0
2026-04-12T21:07:47.647 [DEBUG] [Thread-195931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:07:47.662 [DEBUG] [Thread-195931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:07:47.662 [INFO] [Thread-195931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] client lang: <none>
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] server lang: <none>
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] kex follows: False
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] Compression: none
2026-04-12T21:07:47.670 [DEBUG] [Thread-195931] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:07:47.727 [DEBUG] [Thread-195931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:07:47.728 [DEBUG] [Thread-195931] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:07:47.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:07:47.728 [DEBUG] [Thread-195931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:07:47.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:07:47.784 [DEBUG] [Thread-195931] [transport.py] [_log()] userauth is OK
2026-04-12T21:07:47.785 [DEBUG] [Thread-195931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:07:47.785 [DEBUG] [Thread-195931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:07:47.785 [DEBUG] [Thread-195931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:07:47.785 [DEBUG] [Thread-195931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:07:47.803 [INFO] [Thread-195931] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:07:47.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:07:47.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:07:48.639 [DEBUG] [Thread-195931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:07:48.639 [DEBUG] [Thread-195931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:07:48.687 [DEBUG] [Thread-195931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:07:48.688 [DEBUG] [Thread-195931] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:07:48.697 [DEBUG] [Thread-195931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:07:48.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:07: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')
2026-04-12T21:07:48.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:07:48.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:07:48.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:07:48.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:07:48.739 [DEBUG] [Thread-195931] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:07:51.468 [DEBUG] [Thread-195933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:06.526 [DEBUG] [Thread-195934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:10.666 [DEBUG] [Thread-195935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:16.474 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:16.476 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:18.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:08:18.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:08:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:08:20.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 7, 58), 0.30804, 97.7879, 0.0, 8.59392, 11.4764, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:08:20.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:07:58
2026-04-12T21:08:20.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:08:20.544 [DEBUG] [Thread-195936] [transport.py] [_log()] starting thread (client mode): 0xb0f42ef0
2026-04-12T21:08:20.544 [DEBUG] [Thread-195936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:08:20.564 [DEBUG] [Thread-195936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:08:20.564 [INFO] [Thread-195936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:08:20.567 [DEBUG] [Thread-195936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] client lang: <none>
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] server lang: <none>
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] kex follows: False
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] Compression: none
2026-04-12T21:08:20.568 [DEBUG] [Thread-195936] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:08:20.583 [DEBUG] [Thread-195936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:08:20.583 [DEBUG] [Thread-195936] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:08:20.584 [DEBUG] [Thread-195936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:08:20.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:08:20.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:08:20.586 [DEBUG] [Thread-195936] [transport.py] [_log()] userauth is OK
2026-04-12T21:08:20.586 [DEBUG] [Thread-195936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:08:20.586 [DEBUG] [Thread-195936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:08:20.586 [DEBUG] [Thread-195936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:08:20.586 [DEBUG] [Thread-195936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:08:20.619 [INFO] [Thread-195936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:08:20.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:08:21.236 [DEBUG] [Thread-195936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:08:21.236 [DEBUG] [Thread-195936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:08:21.237 [DEBUG] [Thread-195936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:08:21.277 [DEBUG] [Thread-195936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:08:21.277 [DEBUG] [Thread-195936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:08:21.280 [DEBUG] [Thread-195936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:08:21.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:08:21.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:08:21.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:08:21.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:08:21.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:08:21.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:08:21.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:08:21.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:08:21.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:08:21.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.796981 -999.00  +11.70   4.74     94  +10.80 1 2 1 3 1     0    0 0.85 -1.78 .NESW 4.7 4.7 205.4 7.7 13.0 -20.0 12.9 -17.8 12.7 -16.0 12.9 -17.5
2026-04-12T21:08:21.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:08:21.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:08:21.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.796981
2026-04-12T21:08:21.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:08:21.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:08:21.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:08:21.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:08:21.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:08:21.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:07:58', tmtdew=0.30804, humidity=97.7879, cloud=0.0, wind=8.59392, temperature=11.4764, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:07:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 3.4444999999999997, nan, nan, nan, nan, nan, nan, 2.8832499999999994, 3.0469999999999997, 3.4245, nan, nan, nan, nan, 2.1295, 1.3679999999999994, 1.3287499999999985, 1.5874999999999986, 1.350249999999999, 1.4882500000000007, 1.8892500000000005, nan, 0.4900000000000002, 0.5607499999999996, 0.4485000000000001, 0.3905000000000003, 0.28500000000000103, 0.5320000000000009, 0.5685000000000002, 0.6222499999999993], zp_timestamp='2026-04-12T19:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:08:21.306 [DEBUG] [Thread-195936] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:08:21.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:08:21.399 [DEBUG] [Thread-195939] [transport.py] [_log()] starting thread (client mode): 0xb0f42620
2026-04-12T21:08:21.399 [DEBUG] [Thread-195939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:08:21.414 [DEBUG] [Thread-195939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:08:21.414 [INFO] [Thread-195939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:08:21.422 [DEBUG] [Thread-195939] [transport.py] [_log()] client lang: <none>
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] server lang: <none>
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] kex follows: False
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] Compression: none
2026-04-12T21:08:21.423 [DEBUG] [Thread-195939] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:08:21.489 [DEBUG] [Thread-195939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:08:21.489 [DEBUG] [Thread-195939] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:08:21.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:08:21.490 [DEBUG] [Thread-195939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:08:21.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:08:21.545 [DEBUG] [Thread-195939] [transport.py] [_log()] userauth is OK
2026-04-12T21:08:21.546 [DEBUG] [Thread-195939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:08:21.546 [DEBUG] [Thread-195939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:08:21.546 [DEBUG] [Thread-195939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:08:21.546 [DEBUG] [Thread-195939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:08:21.563 [DEBUG] [Thread-195941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:21.566 [INFO] [Thread-195939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:08:21.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:08:21.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:08:22.402 [DEBUG] [Thread-195939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:08:22.403 [DEBUG] [Thread-195939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:08:22.451 [DEBUG] [Thread-195939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:08:22.451 [DEBUG] [Thread-195939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:08:22.460 [DEBUG] [Thread-195939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:08:22.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:08:22.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:08:22.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:08:22.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:08:22.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:08:22.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:08:22.497 [DEBUG] [Thread-195939] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:08:36.614 [DEBUG] [Thread-195942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:51.651 [DEBUG] [Thread-195943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:08:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:08:52.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:08:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:08:53.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 8, 34), 0.51618, 96.5757, 0.0, 11.646, 11.7859, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:08:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:08:34
2026-04-12T21:08:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:08:54.301 [DEBUG] [Thread-195944] [transport.py] [_log()] starting thread (client mode): 0xb0f8f3d0
2026-04-12T21:08:54.301 [DEBUG] [Thread-195944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:08:54.321 [DEBUG] [Thread-195944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:08:54.321 [INFO] [Thread-195944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] client lang: <none>
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] server lang: <none>
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] kex follows: False
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] Compression: none
2026-04-12T21:08:54.324 [DEBUG] [Thread-195944] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:08:54.341 [DEBUG] [Thread-195944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:08:54.342 [DEBUG] [Thread-195944] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:08:54.342 [DEBUG] [Thread-195944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:08:54.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:08:54.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:08:54.344 [DEBUG] [Thread-195944] [transport.py] [_log()] userauth is OK
2026-04-12T21:08:54.344 [DEBUG] [Thread-195944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:08:54.345 [DEBUG] [Thread-195944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:08:54.345 [DEBUG] [Thread-195944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:08:54.345 [DEBUG] [Thread-195944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:08:54.364 [INFO] [Thread-195944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:08:54.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:08:55.035 [DEBUG] [Thread-195944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:08:55.036 [DEBUG] [Thread-195944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:08:55.036 [DEBUG] [Thread-195944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:08:55.077 [DEBUG] [Thread-195944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:08:55.077 [DEBUG] [Thread-195944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:08:55.080 [DEBUG] [Thread-195944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:08:55.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:08:55.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:08:55.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:08:55.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:08:55.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:08:55.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:08:55.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:08:55.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:08:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:08:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.797328 -999.00  +11.70   4.31     94  +10.80 1 2 1 3 1     0    0 0.83 -1.75 .NESW 4.3 4.3 227.4 8.1 13.0 -20.2 12.9 -19.5 12.6 -17.3 12.9 -18.2
2026-04-12T21:08:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:08:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:08:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.797328
2026-04-12T21:08:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:08:55.103 [DEBUG] [Thread-195944] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:08:55.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:08:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:08:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:08:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:08:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:08:34', tmtdew=0.51618, humidity=96.5757, cloud=0.0, wind=11.646, temperature=11.7859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:08:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 3.4444999999999997, nan, nan, nan, nan, nan, nan, 2.8832499999999994, 3.0469999999999997, 3.4245, nan, nan, nan, nan, 2.1295, 1.3679999999999994, 1.3287499999999985, 1.5874999999999986, 1.350249999999999, 1.4882500000000007, 1.8892500000000005, nan, 0.4900000000000002, 0.5607499999999996, 0.4485000000000001, 0.3905000000000003, 0.28500000000000103, 0.5320000000000009, 0.5685000000000002, 0.6222499999999993], zp_timestamp='2026-04-12T19:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:08:55.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:08:55.201 [DEBUG] [Thread-195947] [transport.py] [_log()] starting thread (client mode): 0xb0f415a0
2026-04-12T21:08:55.201 [DEBUG] [Thread-195947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:08:55.218 [DEBUG] [Thread-195947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:08:55.218 [INFO] [Thread-195947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:08:55.228 [DEBUG] [Thread-195947] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:08:55.228 [DEBUG] [Thread-195947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:08:55.228 [DEBUG] [Thread-195947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:08:55.228 [DEBUG] [Thread-195947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] client lang: <none>
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] server lang: <none>
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] kex follows: False
2026-04-12T21:08:55.229 [DEBUG] [Thread-195947] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:08:55.230 [DEBUG] [Thread-195947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:08:55.230 [DEBUG] [Thread-195947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:08:55.230 [DEBUG] [Thread-195947] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:08:55.230 [DEBUG] [Thread-195947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:08:55.230 [DEBUG] [Thread-195947] [transport.py] [_log()] Compression: none
2026-04-12T21:08:55.230 [DEBUG] [Thread-195947] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:08:55.285 [DEBUG] [Thread-195947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:08:55.286 [DEBUG] [Thread-195947] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:08:55.286 [DEBUG] [Thread-195947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:08:55.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:08:55.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:08:55.342 [DEBUG] [Thread-195947] [transport.py] [_log()] userauth is OK
2026-04-12T21:08:55.343 [DEBUG] [Thread-195947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:08:55.343 [DEBUG] [Thread-195947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:08:55.343 [DEBUG] [Thread-195947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:08:55.343 [DEBUG] [Thread-195947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:08:55.364 [INFO] [Thread-195947] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:08:55.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:08:55.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:08:56.174 [DEBUG] [Thread-195947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:08:56.174 [DEBUG] [Thread-195947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:08:56.222 [DEBUG] [Thread-195947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:08:56.223 [DEBUG] [Thread-195947] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:08:56.232 [DEBUG] [Thread-195947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:08:56.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:08:56.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:08:56.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:08:56.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:08:56.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:08:56.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:08:56.269 [DEBUG] [Thread-195947] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:09:06.687 [DEBUG] [Thread-195949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:09:10.730 [DEBUG] [Thread-195950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:09:16.680 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:09:16.681 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:09:21.746 [DEBUG] [Thread-195951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:09:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:09:26.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:09:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:09:27.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 9, 9), 0.29779, 97.8542, 0.0, 8.87616, 11.5095, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:09:27.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:09:09
2026-04-12T21:09:28.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:09:28.204 [DEBUG] [Thread-195952] [transport.py] [_log()] starting thread (client mode): 0xae5a6890
2026-04-12T21:09:28.204 [DEBUG] [Thread-195952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:09:28.224 [DEBUG] [Thread-195952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:09:28.224 [INFO] [Thread-195952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:09:28.227 [DEBUG] [Thread-195952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] client lang: <none>
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] server lang: <none>
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] kex follows: False
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:09:28.228 [DEBUG] [Thread-195952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:09:28.229 [DEBUG] [Thread-195952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:09:28.229 [DEBUG] [Thread-195952] [transport.py] [_log()] Compression: none
2026-04-12T21:09:28.229 [DEBUG] [Thread-195952] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:09:28.246 [DEBUG] [Thread-195952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:09:28.246 [DEBUG] [Thread-195952] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:09:28.247 [DEBUG] [Thread-195952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:09:28.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:09:28.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:09:28.249 [DEBUG] [Thread-195952] [transport.py] [_log()] userauth is OK
2026-04-12T21:09:28.249 [DEBUG] [Thread-195952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:09:28.249 [DEBUG] [Thread-195952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:09:28.249 [DEBUG] [Thread-195952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:09:28.249 [DEBUG] [Thread-195952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:09:28.274 [INFO] [Thread-195952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:09:28.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:09:28.906 [DEBUG] [Thread-195952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:09:28.906 [DEBUG] [Thread-195952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:09:28.907 [DEBUG] [Thread-195952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:09:28.947 [DEBUG] [Thread-195952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:09:28.947 [DEBUG] [Thread-195952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:09:28.950 [DEBUG] [Thread-195952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:09:28.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:09:28.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:09:28.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:09:28.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:09:28.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:09:28.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:09:28.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:09:28.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:09:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:09:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.798022 -999.00  +11.60   5.51     94  +10.80 1 2 1 3 1     0    0 0.81 -2.11 .NESW 5.5 5.5 220.6 8.8 13.0 -16.4 12.9 -14.0 12.7 -13.7 12.9 -16.0
2026-04-12T21:09:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:09:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:09:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.798022
2026-04-12T21:09:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:09:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:09:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:09:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:09:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:09:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:09:09', tmtdew=0.29779, humidity=97.8542, cloud=0.0, wind=8.87616, temperature=11.5095, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:09:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 3.4444999999999997, nan, nan, nan, nan, nan, nan, 2.8832499999999994, 3.0469999999999997, 3.4245, nan, nan, nan, nan, 2.1295, 1.3679999999999994, 1.3287499999999985, 1.5874999999999986, 1.350249999999999, 1.4882500000000007, 1.8892500000000005, nan, 0.4900000000000002, 0.5607499999999996, 0.4485000000000001, 0.3905000000000003, 0.28500000000000103, 0.5320000000000009, 0.5685000000000002, 0.6222499999999993], zp_timestamp='2026-04-12T19:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:09:28.976 [DEBUG] [Thread-195952] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:09:29.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:09:29.073 [DEBUG] [Thread-195955] [transport.py] [_log()] starting thread (client mode): 0xae5b3460
2026-04-12T21:09:29.073 [DEBUG] [Thread-195955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:09:29.088 [DEBUG] [Thread-195955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:09:29.088 [INFO] [Thread-195955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] client lang: <none>
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] server lang: <none>
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] kex follows: False
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] Compression: none
2026-04-12T21:09:29.098 [DEBUG] [Thread-195955] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:09:29.153 [DEBUG] [Thread-195955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:09:29.154 [DEBUG] [Thread-195955] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:09:29.155 [DEBUG] [Thread-195955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:09:29.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:09:29.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:09:29.210 [DEBUG] [Thread-195955] [transport.py] [_log()] userauth is OK
2026-04-12T21:09:29.210 [DEBUG] [Thread-195955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:09:29.211 [DEBUG] [Thread-195955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:09:29.211 [DEBUG] [Thread-195955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:09:29.211 [DEBUG] [Thread-195955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:09:29.234 [INFO] [Thread-195955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:09:29.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:09:29.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:09:30.049 [DEBUG] [Thread-195955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:09:30.050 [DEBUG] [Thread-195955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:09:30.098 [DEBUG] [Thread-195955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:09:30.098 [DEBUG] [Thread-195955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:09:30.107 [DEBUG] [Thread-195955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:09:30.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:09:30.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:09:30.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:09:30.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:09:30.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:09:30.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:09:30.144 [DEBUG] [Thread-195955] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:09:36.787 [DEBUG] [Thread-195957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:09:51.832 [DEBUG] [Thread-195958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:10:00.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:10:00.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:10:00.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:10:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 9, 44), 0.50064, 96.6752, 0.0, 11.6107, 11.7859, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:10:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:09:44
2026-04-12T21:10:01.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:10:01.964 [DEBUG] [Thread-195959] [transport.py] [_log()] starting thread (client mode): 0xae508be0
2026-04-12T21:10:01.964 [DEBUG] [Thread-195959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:10:01.986 [DEBUG] [Thread-195959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:10:01.987 [INFO] [Thread-195959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:10:01.990 [DEBUG] [Thread-195959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:10:01.990 [DEBUG] [Thread-195959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:10:01.990 [DEBUG] [Thread-195959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] client lang: <none>
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] server lang: <none>
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] kex follows: False
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:10:01.991 [DEBUG] [Thread-195959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:10:01.992 [DEBUG] [Thread-195959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:10:01.992 [DEBUG] [Thread-195959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:10:01.992 [DEBUG] [Thread-195959] [transport.py] [_log()] Compression: none
2026-04-12T21:10:01.992 [DEBUG] [Thread-195959] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:10:02.011 [DEBUG] [Thread-195959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:10:02.012 [DEBUG] [Thread-195959] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:10:02.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:10:02.013 [DEBUG] [Thread-195959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:10:02.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:10:02.015 [DEBUG] [Thread-195959] [transport.py] [_log()] userauth is OK
2026-04-12T21:10:02.016 [DEBUG] [Thread-195959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:10:02.016 [DEBUG] [Thread-195959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:10:02.016 [DEBUG] [Thread-195959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:10:02.016 [DEBUG] [Thread-195959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:10:02.039 [INFO] [Thread-195959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:10:02.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:10:02.698 [DEBUG] [Thread-195959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:10:02.698 [DEBUG] [Thread-195959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:10:02.698 [DEBUG] [Thread-195959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:10:02.739 [DEBUG] [Thread-195959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:10:02.739 [DEBUG] [Thread-195959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:10:02.743 [DEBUG] [Thread-195959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:10:02.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:10:02.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:10:02.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:10:02.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:10:02.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:10:02.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:10:02.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:10:02.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:10:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:10:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.798370 -999.00  +11.70   7.19     94  +10.80 1 2 1 3 1     0    0 0.82 -2.03 .nesW 7.2 7.2 211.0 8.8 13.0 -13.7 12.9 -11.2 12.7 -11.2 12.9 -12.1
2026-04-12T21:10:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:10:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:10:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.798370
2026-04-12T21:10:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:10:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:10:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:10:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:10:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:10:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:09:44', tmtdew=0.50064, humidity=96.6752, cloud=0.0, wind=11.6107, temperature=11.7859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:09:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 3.4444999999999997, nan, nan, nan, nan, nan, nan, 2.8832499999999994, 3.0469999999999997, 3.4245, nan, nan, nan, nan, 2.1295, 1.3679999999999994, 1.3287499999999985, 1.5874999999999986, 1.350249999999999, 1.4882500000000007, 1.8892500000000005, nan, 0.4900000000000002, 0.5607499999999996, 0.4485000000000001, 0.3905000000000003, 0.28500000000000103, 0.5320000000000009, 0.5685000000000002, 0.6222499999999993], zp_timestamp='2026-04-12T19:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:10:02.775 [DEBUG] [Thread-195959] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:10:02.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:10:02.878 [DEBUG] [Thread-195962] [transport.py] [_log()] starting thread (client mode): 0xae5090f0
2026-04-12T21:10:02.878 [DEBUG] [Thread-195962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:10:02.892 [DEBUG] [Thread-195962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:10:02.892 [INFO] [Thread-195962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] client lang: <none>
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] server lang: <none>
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] kex follows: False
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:10:02.900 [DEBUG] [Thread-195962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:10:02.901 [DEBUG] [Thread-195962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:10:02.901 [DEBUG] [Thread-195962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:10:02.901 [DEBUG] [Thread-195962] [transport.py] [_log()] Compression: none
2026-04-12T21:10:02.901 [DEBUG] [Thread-195962] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:10:02.959 [DEBUG] [Thread-195962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:10:02.960 [DEBUG] [Thread-195962] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:10:02.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:10:02.961 [DEBUG] [Thread-195962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:10:02.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:10:03.019 [DEBUG] [Thread-195962] [transport.py] [_log()] userauth is OK
2026-04-12T21:10:03.019 [DEBUG] [Thread-195962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:10:03.019 [DEBUG] [Thread-195962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:10:03.019 [DEBUG] [Thread-195962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:10:03.019 [DEBUG] [Thread-195962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:10:03.038 [INFO] [Thread-195962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:10:03.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:10:03.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:10:03.882 [DEBUG] [Thread-195962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:10:03.882 [DEBUG] [Thread-195962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:10:03.930 [DEBUG] [Thread-195962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:10:03.930 [DEBUG] [Thread-195962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:10:03.939 [DEBUG] [Thread-195962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:10:03.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:10:03.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:10:03.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:10:03.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:10:03.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:10:03.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:10:03.977 [DEBUG] [Thread-195962] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:10:06.869 [DEBUG] [Thread-195964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:10:10.798 [DEBUG] [Thread-195965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:10:16.884 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:10:16.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:10:21.920 [DEBUG] [Thread-195966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:10:33.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:10:33.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:10:33.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:10:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 10, 20), 0.295245, 97.8708, 0.0, 8.99964, 11.5261, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:10:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:10:20
2026-04-12T21:10:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:10:35.889 [DEBUG] [Thread-195967] [transport.py] [_log()] starting thread (client mode): 0xae5376d0
2026-04-12T21:10:35.889 [DEBUG] [Thread-195967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:10:35.909 [DEBUG] [Thread-195967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:10:35.909 [INFO] [Thread-195967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:10:35.911 [DEBUG] [Thread-195967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:10:35.911 [DEBUG] [Thread-195967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] client lang: <none>
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] server lang: <none>
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] kex follows: False
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] Compression: none
2026-04-12T21:10:35.912 [DEBUG] [Thread-195967] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:10:35.925 [DEBUG] [Thread-195967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:10:35.926 [DEBUG] [Thread-195967] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:10:35.926 [DEBUG] [Thread-195967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:10:35.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:10:35.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:10:35.928 [DEBUG] [Thread-195967] [transport.py] [_log()] userauth is OK
2026-04-12T21:10:35.928 [DEBUG] [Thread-195967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:10:35.929 [DEBUG] [Thread-195967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:10:35.929 [DEBUG] [Thread-195967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:10:35.929 [DEBUG] [Thread-195967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:10:35.953 [INFO] [Thread-195967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:10:35.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:10:36.590 [DEBUG] [Thread-195967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:10:36.591 [DEBUG] [Thread-195967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:10:36.591 [DEBUG] [Thread-195967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:10:36.631 [DEBUG] [Thread-195967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:10:36.631 [DEBUG] [Thread-195967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:10:36.634 [DEBUG] [Thread-195967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:10:36.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:10:36.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:10:36.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:10:36.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:10:36.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:10:36.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:10:36.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:10:36.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:10:36.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:10:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.798717 -999.00  +11.60   7.17     94  +10.80 1 2 1 3 1     0    0 0.81 -2.31 .nesW 7.2 7.2 206.6 7.6 13.0 -12.1 12.9 -11.5 12.7 -11.1 13.0 -12.7
2026-04-12T21:10:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:10:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:10:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.798717
2026-04-12T21:10:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:10:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:10:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:10:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:10:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:10:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:10:20', tmtdew=0.295245, humidity=97.8708, cloud=0.0, wind=8.99964, temperature=11.5261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:10:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 3.4444999999999997, nan, nan, nan, nan, nan, nan, 2.8832499999999994, 3.0469999999999997, 3.4245, nan, nan, nan, nan, 2.1295, 1.3679999999999994, 1.3287499999999985, 1.5874999999999986, 1.350249999999999, 1.4882500000000007, 1.8892500000000005, nan, 0.4900000000000002, 0.5607499999999996, 0.4485000000000001, 0.3905000000000003, 0.28500000000000103, 0.5320000000000009, 0.5685000000000002, 0.6222499999999993], zp_timestamp='2026-04-12T19:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:10:36.658 [DEBUG] [Thread-195967] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:10:36.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:10:36.749 [DEBUG] [Thread-195970] [transport.py] [_log()] starting thread (client mode): 0xae5a6890
2026-04-12T21:10:36.749 [DEBUG] [Thread-195970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:10:36.764 [DEBUG] [Thread-195970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:10:36.765 [INFO] [Thread-195970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:10:36.772 [DEBUG] [Thread-195970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:10:36.773 [DEBUG] [Thread-195970] [transport.py] [_log()] client lang: <none>
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] server lang: <none>
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] kex follows: False
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:10:36.774 [DEBUG] [Thread-195970] [transport.py] [_log()] Compression: none
2026-04-12T21:10:36.775 [DEBUG] [Thread-195970] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:10:36.832 [DEBUG] [Thread-195970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:10:36.832 [DEBUG] [Thread-195970] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:10:36.833 [DEBUG] [Thread-195970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:10:36.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:10:36.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:10:36.891 [DEBUG] [Thread-195970] [transport.py] [_log()] userauth is OK
2026-04-12T21:10:36.891 [DEBUG] [Thread-195970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:10:36.892 [DEBUG] [Thread-195970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:10:36.892 [DEBUG] [Thread-195970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:10:36.892 [DEBUG] [Thread-195970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:10:36.910 [INFO] [Thread-195970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:10:36.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:10:36.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:10:36.956 [DEBUG] [Thread-195972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:10:37.706 [DEBUG] [Thread-195970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:10:37.706 [DEBUG] [Thread-195970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:10:37.755 [DEBUG] [Thread-195970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:10:37.756 [DEBUG] [Thread-195970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:10:37.766 [DEBUG] [Thread-195970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:10:37.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:10:37.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:10:37.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:10:37.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:10:37.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:10:37.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:10:37.805 [DEBUG] [Thread-195970] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:10:52.010 [DEBUG] [Thread-195973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:11:07.050 [DEBUG] [Thread-195974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:11:07.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:11:07.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:11:07.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:11:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 10, 56), 0.300425, 97.8376, 0.0, 8.92908, 11.5261, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:11:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:10:56
2026-04-12T21:11:09.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:11:09.766 [DEBUG] [Thread-195975] [transport.py] [_log()] starting thread (client mode): 0xae5a44c0
2026-04-12T21:11:09.766 [DEBUG] [Thread-195975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:11:09.784 [DEBUG] [Thread-195975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:11:09.785 [INFO] [Thread-195975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] client lang: <none>
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] server lang: <none>
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] kex follows: False
2026-04-12T21:11:09.788 [DEBUG] [Thread-195975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:11:09.789 [DEBUG] [Thread-195975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:11:09.789 [DEBUG] [Thread-195975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:11:09.789 [DEBUG] [Thread-195975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:11:09.789 [DEBUG] [Thread-195975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:11:09.789 [DEBUG] [Thread-195975] [transport.py] [_log()] Compression: none
2026-04-12T21:11:09.789 [DEBUG] [Thread-195975] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:11:09.806 [DEBUG] [Thread-195975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:11:09.807 [DEBUG] [Thread-195975] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:11:09.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:11:09.808 [DEBUG] [Thread-195975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:11:09.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:11:09.810 [DEBUG] [Thread-195975] [transport.py] [_log()] userauth is OK
2026-04-12T21:11:09.810 [DEBUG] [Thread-195975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:11:09.810 [DEBUG] [Thread-195975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:11:09.810 [DEBUG] [Thread-195975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:11:09.811 [DEBUG] [Thread-195975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:11:09.835 [INFO] [Thread-195975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:11:09.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:11:10.503 [DEBUG] [Thread-195975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:11:10.503 [DEBUG] [Thread-195975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:11:10.504 [DEBUG] [Thread-195975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:11:10.544 [DEBUG] [Thread-195975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:11:10.544 [DEBUG] [Thread-195975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:11:10.548 [DEBUG] [Thread-195975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:11:10.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:11:10.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:11:10.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:11:10.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:11:10.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:11:10.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:11:10.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:11:10.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:11:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:11:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.799064 -999.00  +11.70   5.15     94  +10.80 1 3 1 3 1     0    0 0.81 -2.21 .n.sW 5.2 5.2 197.3 6.9 13.1 -11.6 12.9 -9.4 12.7 -9.2 13.0 -10.3
2026-04-12T21:11:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:11:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:11:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.799064
2026-04-12T21:11:10.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:11:10.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:11:10.572 [DEBUG] [Thread-195975] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:11:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:11:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:11:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:11:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:10:56', tmtdew=0.300425, humidity=97.8376, cloud=0.0, wind=8.92908, temperature=11.5261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:10:39.130', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:11:10.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:11:10.660 [DEBUG] [Thread-195978] [transport.py] [_log()] starting thread (client mode): 0xae535030
2026-04-12T21:11:10.660 [DEBUG] [Thread-195978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:11:10.675 [DEBUG] [Thread-195978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:11:10.675 [INFO] [Thread-195978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:11:10.683 [DEBUG] [Thread-195978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:11:10.683 [DEBUG] [Thread-195978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:11:10.683 [DEBUG] [Thread-195978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:11:10.683 [DEBUG] [Thread-195978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:10.683 [DEBUG] [Thread-195978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:10.683 [DEBUG] [Thread-195978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] client lang: <none>
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] server lang: <none>
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] kex follows: False
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:11:10.684 [DEBUG] [Thread-195978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:11:10.685 [DEBUG] [Thread-195978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:11:10.685 [DEBUG] [Thread-195978] [transport.py] [_log()] Compression: none
2026-04-12T21:11:10.685 [DEBUG] [Thread-195978] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:11:10.740 [DEBUG] [Thread-195978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:11:10.740 [DEBUG] [Thread-195978] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:11:10.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:11:10.741 [DEBUG] [Thread-195978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:11:10.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:11:10.795 [DEBUG] [Thread-195978] [transport.py] [_log()] userauth is OK
2026-04-12T21:11:10.795 [DEBUG] [Thread-195978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:11:10.796 [DEBUG] [Thread-195978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:11:10.796 [DEBUG] [Thread-195978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:11:10.796 [DEBUG] [Thread-195978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:11:10.815 [INFO] [Thread-195978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:11:10.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:11:10.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:11:10.881 [DEBUG] [Thread-195980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:11:11.605 [DEBUG] [Thread-195978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:11:11.605 [DEBUG] [Thread-195978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:11:11.654 [DEBUG] [Thread-195978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:11:11.654 [DEBUG] [Thread-195978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:11:11.663 [DEBUG] [Thread-195978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:11:11.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:11:11.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:11:11.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:11:11.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:11:11.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:11:11.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:11:11.700 [DEBUG] [Thread-195978] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:11:17.088 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:11:17.089 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:11:22.087 [DEBUG] [Thread-195981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:11:37.140 [DEBUG] [Thread-195982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:11:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:11:41.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:11:41.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:11:42.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 11, 31), 0.29266, 97.8874, 0.0, 8.38224, 11.5261, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:11:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:11:31
2026-04-12T21:11:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:11:43.522 [DEBUG] [Thread-195983] [transport.py] [_log()] starting thread (client mode): 0xb0f6f5b0
2026-04-12T21:11:43.522 [DEBUG] [Thread-195983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:11:43.543 [DEBUG] [Thread-195983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:11:43.543 [INFO] [Thread-195983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:11:43.546 [DEBUG] [Thread-195983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:11:43.546 [DEBUG] [Thread-195983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:11:43.546 [DEBUG] [Thread-195983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:11:43.546 [DEBUG] [Thread-195983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:43.546 [DEBUG] [Thread-195983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] client lang: <none>
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] server lang: <none>
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] kex follows: False
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:11:43.547 [DEBUG] [Thread-195983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:11:43.548 [DEBUG] [Thread-195983] [transport.py] [_log()] Compression: none
2026-04-12T21:11:43.548 [DEBUG] [Thread-195983] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:11:43.562 [DEBUG] [Thread-195983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:11:43.562 [DEBUG] [Thread-195983] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:11:43.563 [DEBUG] [Thread-195983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:11:43.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:11:43.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:11:43.565 [DEBUG] [Thread-195983] [transport.py] [_log()] userauth is OK
2026-04-12T21:11:43.565 [DEBUG] [Thread-195983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:11:43.565 [DEBUG] [Thread-195983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:11:43.565 [DEBUG] [Thread-195983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:11:43.566 [DEBUG] [Thread-195983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:11:43.601 [INFO] [Thread-195983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:11:43.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:11:44.202 [DEBUG] [Thread-195983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:11:44.202 [DEBUG] [Thread-195983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:11:44.203 [DEBUG] [Thread-195983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:11:44.243 [DEBUG] [Thread-195983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:11:44.243 [DEBUG] [Thread-195983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:11:44.247 [DEBUG] [Thread-195983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:11:44.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:11:44.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:11:44.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:11:44.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:11:44.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:11:44.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:11:44.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:11:44.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:11:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:11:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.799411 -999.00  +11.70   6.38     94  +10.80 1 3 1 3 1     0    0 0.82 -2.02 ----- 6.4 6.4 197.9 7.2 13.1 -10.7 13.0 -11.3 12.7 -11.3 13.0 -12.1
2026-04-12T21:11:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:11:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:11:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.799411
2026-04-12T21:11:44.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:11:44.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:11:44.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:11:44.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:11:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:11:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:11:31', tmtdew=0.29266, humidity=97.8874, cloud=0.0, wind=8.38224, temperature=11.5261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:11:09.110', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:11:44.274 [DEBUG] [Thread-195983] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:11:44.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:11:44.370 [DEBUG] [Thread-195986] [transport.py] [_log()] starting thread (client mode): 0xb0f41060
2026-04-12T21:11:44.370 [DEBUG] [Thread-195986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:11:44.385 [DEBUG] [Thread-195986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:11:44.385 [INFO] [Thread-195986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] client lang: <none>
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] server lang: <none>
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] kex follows: False
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:11:44.394 [DEBUG] [Thread-195986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:11:44.395 [DEBUG] [Thread-195986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:11:44.395 [DEBUG] [Thread-195986] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:11:44.395 [DEBUG] [Thread-195986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:11:44.395 [DEBUG] [Thread-195986] [transport.py] [_log()] Compression: none
2026-04-12T21:11:44.395 [DEBUG] [Thread-195986] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:11:44.453 [DEBUG] [Thread-195986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:11:44.454 [DEBUG] [Thread-195986] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:11:44.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:11:44.455 [DEBUG] [Thread-195986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:11:44.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:11:44.512 [DEBUG] [Thread-195986] [transport.py] [_log()] userauth is OK
2026-04-12T21:11:44.512 [DEBUG] [Thread-195986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:11:44.512 [DEBUG] [Thread-195986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:11:44.512 [DEBUG] [Thread-195986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:11:44.512 [DEBUG] [Thread-195986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:11:44.531 [INFO] [Thread-195986] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:11:44.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:11:44.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:11:45.342 [DEBUG] [Thread-195986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:11:45.342 [DEBUG] [Thread-195986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:11:45.391 [DEBUG] [Thread-195986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:11:45.391 [DEBUG] [Thread-195986] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:11:45.400 [DEBUG] [Thread-195986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:11:45.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:11:45.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:11:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:11:45.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:11:45.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:11:45.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:11:45.435 [DEBUG] [Thread-195986] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:11:52.179 [DEBUG] [Thread-195988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:07.232 [DEBUG] [Thread-195989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:10.963 [DEBUG] [Thread-195990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:15.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:12:15.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:12:15.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:12:16.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 12, 7), 0.292755, 97.8874, 0.0, 8.982, 11.5593, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:12:16.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:12:07
2026-04-12T21:12:17.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:12:17.255 [DEBUG] [Thread-195991] [transport.py] [_log()] starting thread (client mode): 0xae535e10
2026-04-12T21:12:17.255 [DEBUG] [Thread-195991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:12:17.275 [DEBUG] [Thread-195991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:12:17.275 [INFO] [Thread-195991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] client lang: <none>
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] server lang: <none>
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] kex follows: False
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] Compression: none
2026-04-12T21:12:17.278 [DEBUG] [Thread-195991] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:12:17.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:17.293 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:17.296 [DEBUG] [Thread-195991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:12:17.296 [DEBUG] [Thread-195991] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:12:17.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:12:17.297 [DEBUG] [Thread-195991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:12:17.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:12:17.300 [DEBUG] [Thread-195991] [transport.py] [_log()] userauth is OK
2026-04-12T21:12:17.300 [DEBUG] [Thread-195991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:12:17.300 [DEBUG] [Thread-195991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:12:17.300 [DEBUG] [Thread-195991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:12:17.300 [DEBUG] [Thread-195991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:12:17.323 [INFO] [Thread-195991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:12:17.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:12:17.977 [DEBUG] [Thread-195991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:12:17.977 [DEBUG] [Thread-195991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:12:17.978 [DEBUG] [Thread-195991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:12:18.018 [DEBUG] [Thread-195991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:12:18.018 [DEBUG] [Thread-195991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:12:18.020 [DEBUG] [Thread-195991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:12:18.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:12:18.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:12:18.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:12:18.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:12:18.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:12:18.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:12:18.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:12:18.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:12:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:12:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.799758 -999.00  +11.70   5.68     94  +10.80 1 3 1 3 1     0    0 0.83 -1.77 ----- 5.7 5.7 215.0 7.7 13.1 -11.9 13.0 -10.3 12.8 -10.0 13.0 -11.1
2026-04-12T21:12:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.799758
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:12:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:12:07', tmtdew=0.292755, humidity=97.8874, cloud=0.0, wind=8.982, temperature=11.5593, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:11:39.091', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:12:18.043 [DEBUG] [Thread-195991] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:12:18.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:12:18.135 [DEBUG] [Thread-195994] [transport.py] [_log()] starting thread (client mode): 0xae5e60b0
2026-04-12T21:12:18.135 [DEBUG] [Thread-195994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:12:18.149 [DEBUG] [Thread-195994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:12:18.149 [INFO] [Thread-195994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:12:18.156 [DEBUG] [Thread-195994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] client lang: <none>
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] server lang: <none>
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] kex follows: False
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] Compression: none
2026-04-12T21:12:18.157 [DEBUG] [Thread-195994] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:12:18.216 [DEBUG] [Thread-195994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:12:18.216 [DEBUG] [Thread-195994] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:12:18.217 [DEBUG] [Thread-195994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:12:18.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:12:18.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:12:18.272 [DEBUG] [Thread-195994] [transport.py] [_log()] userauth is OK
2026-04-12T21:12:18.272 [DEBUG] [Thread-195994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:12:18.272 [DEBUG] [Thread-195994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:12:18.272 [DEBUG] [Thread-195994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:12:18.272 [DEBUG] [Thread-195994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:12:18.291 [INFO] [Thread-195994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:12:18.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:12:18.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:12:19.122 [DEBUG] [Thread-195994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:12:19.122 [DEBUG] [Thread-195994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:12:19.169 [DEBUG] [Thread-195994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:12:19.169 [DEBUG] [Thread-195994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:12:19.178 [DEBUG] [Thread-195994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:12:19.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:12:19.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:12:19.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:12:19.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:12:19.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:12:19.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:12:19.212 [DEBUG] [Thread-195994] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:12:22.271 [DEBUG] [Thread-195996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:37.323 [DEBUG] [Thread-195997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:12:49.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:12:49.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:12:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 12, 42), 0.49047, 96.7423, 0.0, 9.59976, 11.8859, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:12:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:12:42
2026-04-12T21:12:50.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:12:51.043 [DEBUG] [Thread-195998] [transport.py] [_log()] starting thread (client mode): 0xae5e6170
2026-04-12T21:12:51.043 [DEBUG] [Thread-195998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:12:51.065 [DEBUG] [Thread-195998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:12:51.065 [INFO] [Thread-195998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:12:51.068 [DEBUG] [Thread-195998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] client lang: <none>
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] server lang: <none>
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] kex follows: False
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] Compression: none
2026-04-12T21:12:51.069 [DEBUG] [Thread-195998] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:12:51.086 [DEBUG] [Thread-195998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:12:51.086 [DEBUG] [Thread-195998] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:12:51.087 [DEBUG] [Thread-195998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:12:51.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:12:51.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:12:51.089 [DEBUG] [Thread-195998] [transport.py] [_log()] userauth is OK
2026-04-12T21:12:51.089 [DEBUG] [Thread-195998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:12:51.089 [DEBUG] [Thread-195998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:12:51.089 [DEBUG] [Thread-195998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:12:51.089 [DEBUG] [Thread-195998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:12:51.107 [INFO] [Thread-195998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:12:51.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:12:51.773 [DEBUG] [Thread-195998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:12:51.774 [DEBUG] [Thread-195998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:12:51.774 [DEBUG] [Thread-195998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:12:51.816 [DEBUG] [Thread-195998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:12:51.816 [DEBUG] [Thread-195998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:12:51.819 [DEBUG] [Thread-195998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:12:51.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:12:51.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:12:51.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:12:51.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:12:51.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:12:51.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:12:51.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:12:51.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:12:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:12:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.800453 -999.00  +11.70   4.31     94  +10.90 1 3 1 3 1     0    0 0.83 -1.36 ----- 4.3 4.3 197.6 6.6 13.2 -10.5 13.1 -8.2 12.8 -8.3 13.1 -9.3
2026-04-12T21:12:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:12:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:12:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.800453
2026-04-12T21:12:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:12:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:12:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:12:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:12:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:12:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:12:42', tmtdew=0.49047, humidity=96.7423, cloud=0.0, wind=9.59976, temperature=11.8859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:12:39.139', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:12:51.843 [DEBUG] [Thread-195998] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:12:51.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:12:51.953 [DEBUG] [Thread-196001] [transport.py] [_log()] starting thread (client mode): 0xae5b2b00
2026-04-12T21:12:51.953 [DEBUG] [Thread-196001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:12:51.967 [DEBUG] [Thread-196001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:12:51.967 [INFO] [Thread-196001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:12:51.975 [DEBUG] [Thread-196001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] client lang: <none>
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] server lang: <none>
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] kex follows: False
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:12:51.976 [DEBUG] [Thread-196001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:12:51.977 [DEBUG] [Thread-196001] [transport.py] [_log()] Compression: none
2026-04-12T21:12:51.977 [DEBUG] [Thread-196001] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:12:52.032 [DEBUG] [Thread-196001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:12:52.033 [DEBUG] [Thread-196001] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:12:52.033 [DEBUG] [Thread-196001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:12:52.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:12:52.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:12:52.088 [DEBUG] [Thread-196001] [transport.py] [_log()] userauth is OK
2026-04-12T21:12:52.088 [DEBUG] [Thread-196001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:12:52.088 [DEBUG] [Thread-196001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:12:52.089 [DEBUG] [Thread-196001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:12:52.089 [DEBUG] [Thread-196001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:12:52.111 [INFO] [Thread-196001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:12:52.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:12:52.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:12:52.359 [DEBUG] [Thread-196003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:12:52.968 [DEBUG] [Thread-196001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:12:52.968 [DEBUG] [Thread-196001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:12:53.016 [DEBUG] [Thread-196001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:12:53.017 [DEBUG] [Thread-196001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:12:53.025 [DEBUG] [Thread-196001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:12:53.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:12:53.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:12:53.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:12:53.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:12:53.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:12:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:12:53.059 [DEBUG] [Thread-196001] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:13:07.399 [DEBUG] [Thread-196004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:13:11.031 [DEBUG] [Thread-196005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:13:17.501 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:13:17.502 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:13:22.439 [DEBUG] [Thread-196006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:13:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:13:23.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:13:23.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:13:24.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 12, 42), 0.49047, 96.7423, 0.0, 9.59976, 11.8859, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:13:24.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:12:42
2026-04-12T21:13:24.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:13:24.877 [DEBUG] [Thread-196007] [transport.py] [_log()] starting thread (client mode): 0xae5e7220
2026-04-12T21:13:24.878 [DEBUG] [Thread-196007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:13:24.897 [DEBUG] [Thread-196007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:13:24.897 [INFO] [Thread-196007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] client lang: <none>
2026-04-12T21:13:24.901 [DEBUG] [Thread-196007] [transport.py] [_log()] server lang: <none>
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] kex follows: False
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] Compression: none
2026-04-12T21:13:24.902 [DEBUG] [Thread-196007] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:13:24.918 [DEBUG] [Thread-196007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:13:24.919 [DEBUG] [Thread-196007] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:13:24.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:13:24.920 [DEBUG] [Thread-196007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:13:24.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:13:24.922 [DEBUG] [Thread-196007] [transport.py] [_log()] userauth is OK
2026-04-12T21:13:24.922 [DEBUG] [Thread-196007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:13:24.923 [DEBUG] [Thread-196007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:13:24.923 [DEBUG] [Thread-196007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:13:24.923 [DEBUG] [Thread-196007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:13:24.963 [INFO] [Thread-196007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:13:24.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:13:25.594 [DEBUG] [Thread-196007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:13:25.594 [DEBUG] [Thread-196007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:13:25.595 [DEBUG] [Thread-196007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:13:25.635 [DEBUG] [Thread-196007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:13:25.635 [DEBUG] [Thread-196007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:13:25.638 [DEBUG] [Thread-196007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:13:25.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:13:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:13:25.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:13:25.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:13:25.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:13:25.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:13:25.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:13:25.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:13:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:13:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.800800 -999.00  +11.70   6.72     94  +10.90 1 3 1 3 1     0    0 0.82 -1.55 ----- 6.7 6.7 200.8 8.1 13.2 -8.7 13.1 -10.6 12.8 -10.2 13.1 -10.1
2026-04-12T21:13:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:13:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:13:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.800800
2026-04-12T21:13:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:13:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:13:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:13:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:13:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:13:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:12:42', tmtdew=0.49047, humidity=96.7423, cloud=0.0, wind=9.59976, temperature=11.8859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:13:09.120', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:13:25.665 [DEBUG] [Thread-196007] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:13:25.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:13:25.753 [DEBUG] [Thread-196010] [transport.py] [_log()] starting thread (client mode): 0xb0f8cd90
2026-04-12T21:13:25.753 [DEBUG] [Thread-196010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:13:25.768 [DEBUG] [Thread-196010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:13:25.769 [INFO] [Thread-196010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:13:25.777 [DEBUG] [Thread-196010] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:13:25.777 [DEBUG] [Thread-196010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:13:25.777 [DEBUG] [Thread-196010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:13:25.777 [DEBUG] [Thread-196010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:25.777 [DEBUG] [Thread-196010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:25.777 [DEBUG] [Thread-196010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] client lang: <none>
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] server lang: <none>
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] kex follows: False
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] Compression: none
2026-04-12T21:13:25.778 [DEBUG] [Thread-196010] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:13:25.841 [DEBUG] [Thread-196010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:13:25.841 [DEBUG] [Thread-196010] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:13:25.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:13:25.842 [DEBUG] [Thread-196010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:13:25.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:13:25.901 [DEBUG] [Thread-196010] [transport.py] [_log()] userauth is OK
2026-04-12T21:13:25.901 [DEBUG] [Thread-196010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:13:25.901 [DEBUG] [Thread-196010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:13:25.902 [DEBUG] [Thread-196010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:13:25.902 [DEBUG] [Thread-196010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:13:25.921 [INFO] [Thread-196010] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:13:25.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:13:25.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:13:26.806 [DEBUG] [Thread-196010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:13:26.806 [DEBUG] [Thread-196010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:13:26.854 [DEBUG] [Thread-196010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:13:26.854 [DEBUG] [Thread-196010] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:13:26.863 [DEBUG] [Thread-196010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:13:26.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:13:26.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:13:26.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:13:26.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:13:26.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:13:26.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:13:26.900 [DEBUG] [Thread-196010] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:13:37.476 [DEBUG] [Thread-196012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:13:52.529 [DEBUG] [Thread-196013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:13:56.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:13:56.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:13:56.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:13:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 13, 17), 0.23761, 97.9209, 0.0, 8.11764, 11.5927, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:13:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:13:17
2026-04-12T21:13:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:13:58.796 [DEBUG] [Thread-196014] [transport.py] [_log()] starting thread (client mode): 0xb0f6f5b0
2026-04-12T21:13:58.796 [DEBUG] [Thread-196014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:13:58.817 [DEBUG] [Thread-196014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:13:58.817 [INFO] [Thread-196014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:13:58.820 [DEBUG] [Thread-196014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] client lang: <none>
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] server lang: <none>
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] kex follows: False
2026-04-12T21:13:58.821 [DEBUG] [Thread-196014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:13:58.822 [DEBUG] [Thread-196014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:13:58.822 [DEBUG] [Thread-196014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:13:58.822 [DEBUG] [Thread-196014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:13:58.822 [DEBUG] [Thread-196014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:13:58.822 [DEBUG] [Thread-196014] [transport.py] [_log()] Compression: none
2026-04-12T21:13:58.822 [DEBUG] [Thread-196014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:13:58.835 [DEBUG] [Thread-196014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:13:58.835 [DEBUG] [Thread-196014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:13:58.836 [DEBUG] [Thread-196014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:13:58.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:13:58.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:13:58.838 [DEBUG] [Thread-196014] [transport.py] [_log()] userauth is OK
2026-04-12T21:13:58.839 [DEBUG] [Thread-196014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:13:58.839 [DEBUG] [Thread-196014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:13:58.839 [DEBUG] [Thread-196014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:13:58.839 [DEBUG] [Thread-196014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:13:58.860 [INFO] [Thread-196014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:13:58.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:13:59.494 [DEBUG] [Thread-196014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:13:59.494 [DEBUG] [Thread-196014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:13:59.495 [DEBUG] [Thread-196014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:13:59.535 [DEBUG] [Thread-196014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:13:59.535 [DEBUG] [Thread-196014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:13:59.539 [DEBUG] [Thread-196014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:13:59.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:13:59.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:13:59.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:13:59.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:13:59.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:13:59.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:13:59.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:13:59.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:13:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:13:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.801147 -999.00  +11.70   5.56     94  +10.90 1 3 1 3 1     0    0 0.81 -2.01 ----- 5.6 5.6 200.6 7.5 13.2 -11.7 13.1 -11.7 12.8 -11.4 13.1 -12.1
2026-04-12T21:13:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:13:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:13:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.801147
2026-04-12T21:13:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:13:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:13:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:13:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:13:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:13:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:13:17', tmtdew=0.23761, humidity=97.9209, cloud=0.0, wind=8.11764, temperature=11.5927, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:13:39.101', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:13:59.563 [DEBUG] [Thread-196014] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:13:59.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:13:59.656 [DEBUG] [Thread-196017] [transport.py] [_log()] starting thread (client mode): 0xb0f8e080
2026-04-12T21:13:59.656 [DEBUG] [Thread-196017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:13:59.671 [DEBUG] [Thread-196017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:13:59.671 [INFO] [Thread-196017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:13:59.678 [DEBUG] [Thread-196017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] client lang: <none>
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] server lang: <none>
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] kex follows: False
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:13:59.679 [DEBUG] [Thread-196017] [transport.py] [_log()] Compression: none
2026-04-12T21:13:59.680 [DEBUG] [Thread-196017] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:13:59.737 [DEBUG] [Thread-196017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:13:59.738 [DEBUG] [Thread-196017] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:13:59.739 [DEBUG] [Thread-196017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:13:59.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:13:59.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:13:59.793 [DEBUG] [Thread-196017] [transport.py] [_log()] userauth is OK
2026-04-12T21:13:59.793 [DEBUG] [Thread-196017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:13:59.793 [DEBUG] [Thread-196017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:13:59.793 [DEBUG] [Thread-196017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:13:59.794 [DEBUG] [Thread-196017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:13:59.817 [INFO] [Thread-196017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:13:59.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:13:59.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:14:00.639 [DEBUG] [Thread-196017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:14:00.639 [DEBUG] [Thread-196017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:14:00.687 [DEBUG] [Thread-196017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:14:00.687 [DEBUG] [Thread-196017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:14:00.696 [DEBUG] [Thread-196017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:14:00.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:14:00.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:14:00.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:14:00.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:14:00.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:14:00.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:14:00.733 [DEBUG] [Thread-196017] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:14:07.569 [DEBUG] [Thread-196019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:14:11.105 [DEBUG] [Thread-196020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:14:17.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:14:17.713 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:14:22.624 [DEBUG] [Thread-196021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:14:30.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:14:30.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:14:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:14:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 13, 53), 0.48512, 96.7753, 0.0, 9.0, 11.8195, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:14:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:13:53
2026-04-12T21:14:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:14:32.645 [DEBUG] [Thread-196022] [transport.py] [_log()] starting thread (client mode): 0xae509810
2026-04-12T21:14:32.645 [DEBUG] [Thread-196022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:14:32.665 [DEBUG] [Thread-196022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:14:32.666 [INFO] [Thread-196022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:14:32.668 [DEBUG] [Thread-196022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:14:32.668 [DEBUG] [Thread-196022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:14:32.668 [DEBUG] [Thread-196022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:14:32.668 [DEBUG] [Thread-196022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] client lang: <none>
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] server lang: <none>
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] kex follows: False
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:14:32.669 [DEBUG] [Thread-196022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:14:32.670 [DEBUG] [Thread-196022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:14:32.670 [DEBUG] [Thread-196022] [transport.py] [_log()] Compression: none
2026-04-12T21:14:32.670 [DEBUG] [Thread-196022] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:14:32.682 [DEBUG] [Thread-196022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:14:32.682 [DEBUG] [Thread-196022] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:14:32.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:14:32.683 [DEBUG] [Thread-196022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:14:32.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:14:32.685 [DEBUG] [Thread-196022] [transport.py] [_log()] userauth is OK
2026-04-12T21:14:32.685 [DEBUG] [Thread-196022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:14:32.685 [DEBUG] [Thread-196022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:14:32.686 [DEBUG] [Thread-196022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:14:32.686 [DEBUG] [Thread-196022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:14:32.711 [INFO] [Thread-196022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:14:32.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:14:33.280 [DEBUG] [Thread-196022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:14:33.280 [DEBUG] [Thread-196022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:14:33.280 [DEBUG] [Thread-196022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:14:33.322 [DEBUG] [Thread-196022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:14:33.322 [DEBUG] [Thread-196022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:14:33.325 [DEBUG] [Thread-196022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:14:33.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:14:33.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:14:33.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:14:33.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:14:33.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:14:33.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:14:33.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:14:33.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:14:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:14:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.801495 -999.00  +11.70   6.77     94  +10.80 1 3 1 3 1     0    0 0.81 -1.90 ----- 6.8 6.8 204.4 8.8 13.2 -11.8 13.1 -11.2 12.8 -11.6 13.1 -12.5
2026-04-12T21:14:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:14:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:14:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.801495
2026-04-12T21:14:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:14:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:14:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:14:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:14:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:14:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:13:53', tmtdew=0.48512, humidity=96.7753, cloud=0.0, wind=9.0, temperature=11.8195, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:14:09.168', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:14:33.350 [DEBUG] [Thread-196022] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:14:33.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:14:33.443 [DEBUG] [Thread-196025] [transport.py] [_log()] starting thread (client mode): 0xae50b760
2026-04-12T21:14:33.443 [DEBUG] [Thread-196025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:14:33.460 [DEBUG] [Thread-196025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:14:33.460 [INFO] [Thread-196025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:14:33.467 [DEBUG] [Thread-196025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:14:33.467 [DEBUG] [Thread-196025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:14:33.467 [DEBUG] [Thread-196025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:14:33.467 [DEBUG] [Thread-196025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:14:33.467 [DEBUG] [Thread-196025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] client lang: <none>
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] server lang: <none>
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] kex follows: False
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] Compression: none
2026-04-12T21:14:33.468 [DEBUG] [Thread-196025] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:14:33.525 [DEBUG] [Thread-196025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:14:33.525 [DEBUG] [Thread-196025] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:14:33.526 [DEBUG] [Thread-196025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:14:33.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:14:33.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:14:33.581 [DEBUG] [Thread-196025] [transport.py] [_log()] userauth is OK
2026-04-12T21:14:33.581 [DEBUG] [Thread-196025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:14:33.581 [DEBUG] [Thread-196025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:14:33.581 [DEBUG] [Thread-196025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:14:33.581 [DEBUG] [Thread-196025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:14:33.599 [INFO] [Thread-196025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:14:33.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:14:33.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:14:34.461 [DEBUG] [Thread-196025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:14:34.461 [DEBUG] [Thread-196025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:14:34.508 [DEBUG] [Thread-196025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:14:34.508 [DEBUG] [Thread-196025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:14:34.517 [DEBUG] [Thread-196025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:14:34.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:14: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')
2026-04-12T21:14:34.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:14:34.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:14:34.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:14:34.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:14:34.549 [DEBUG] [Thread-196025] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:14:37.663 [DEBUG] [Thread-196027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:14:52.719 [DEBUG] [Thread-196028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:15:04.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:15:04.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:15:04.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:15:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 14, 28), 0.28753, 97.9208, 0.0, 7.97652, 11.5595, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:15:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:14:28
2026-04-12T21:15:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:15:06.442 [DEBUG] [Thread-196029] [transport.py] [_log()] starting thread (client mode): 0xb0f42860
2026-04-12T21:15:06.442 [DEBUG] [Thread-196029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:15:06.462 [DEBUG] [Thread-196029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:15:06.462 [INFO] [Thread-196029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] client lang: <none>
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] server lang: <none>
2026-04-12T21:15:06.464 [DEBUG] [Thread-196029] [transport.py] [_log()] kex follows: False
2026-04-12T21:15:06.465 [DEBUG] [Thread-196029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:15:06.465 [DEBUG] [Thread-196029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:15:06.465 [DEBUG] [Thread-196029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:15:06.465 [DEBUG] [Thread-196029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:15:06.465 [DEBUG] [Thread-196029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:15:06.465 [DEBUG] [Thread-196029] [transport.py] [_log()] Compression: none
2026-04-12T21:15:06.465 [DEBUG] [Thread-196029] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:15:06.477 [DEBUG] [Thread-196029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:15:06.477 [DEBUG] [Thread-196029] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:15:06.478 [DEBUG] [Thread-196029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:15:06.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:15:06.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:15:06.481 [DEBUG] [Thread-196029] [transport.py] [_log()] userauth is OK
2026-04-12T21:15:06.481 [DEBUG] [Thread-196029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:15:06.481 [DEBUG] [Thread-196029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:15:06.481 [DEBUG] [Thread-196029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:15:06.481 [DEBUG] [Thread-196029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:15:06.500 [INFO] [Thread-196029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:15:06.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:15:07.329 [DEBUG] [Thread-196029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:15:07.330 [DEBUG] [Thread-196029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:15:07.330 [DEBUG] [Thread-196029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:15:07.371 [DEBUG] [Thread-196029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:15:07.371 [DEBUG] [Thread-196029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:15:07.375 [DEBUG] [Thread-196029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:15:07.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:15:07.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:15:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:15:07.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:15:07.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:15:07.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:15:07.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:15:07.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:15:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:15:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.801842 -999.00  +11.70   5.50     94  +10.80 1 3 1 3 1     0    0 0.81 -1.74 ----- 5.5 5.5 201.6 8.8 13.2 -11.2 13.1 -10.8 12.9 -10.7 13.1 -11.7
2026-04-12T21:15:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:15:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:15:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.801842
2026-04-12T21:15:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:15:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:15:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:15:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:15:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:15:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:14:28', tmtdew=0.28753, humidity=97.9208, cloud=0.0, wind=7.97652, temperature=11.5595, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:14:39.149', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:15:07.435 [DEBUG] [Thread-196029] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:15:07.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:15:07.530 [DEBUG] [Thread-196032] [transport.py] [_log()] starting thread (client mode): 0xb0f41c90
2026-04-12T21:15:07.530 [DEBUG] [Thread-196032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:15:07.545 [DEBUG] [Thread-196032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:15:07.545 [INFO] [Thread-196032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:15:07.553 [DEBUG] [Thread-196032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:15:07.554 [DEBUG] [Thread-196032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:15:07.554 [DEBUG] [Thread-196032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:15:07.554 [DEBUG] [Thread-196032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:07.554 [DEBUG] [Thread-196032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:07.554 [DEBUG] [Thread-196032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:07.554 [DEBUG] [Thread-196032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:07.554 [DEBUG] [Thread-196032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] client lang: <none>
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] server lang: <none>
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] kex follows: False
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:15:07.555 [DEBUG] [Thread-196032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:15:07.556 [DEBUG] [Thread-196032] [transport.py] [_log()] Compression: none
2026-04-12T21:15:07.556 [DEBUG] [Thread-196032] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:15:07.616 [DEBUG] [Thread-196032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:15:07.617 [DEBUG] [Thread-196032] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:15:07.617 [DEBUG] [Thread-196032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:15:07.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:15:07.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:15:07.674 [DEBUG] [Thread-196032] [transport.py] [_log()] userauth is OK
2026-04-12T21:15:07.674 [DEBUG] [Thread-196032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:15:07.674 [DEBUG] [Thread-196032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:15:07.675 [DEBUG] [Thread-196032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:15:07.675 [DEBUG] [Thread-196032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:15:07.704 [INFO] [Thread-196032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:15:07.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:15:07.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:15:07.756 [DEBUG] [Thread-196034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:15:08.529 [DEBUG] [Thread-196032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:15:08.530 [DEBUG] [Thread-196032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:15:08.577 [DEBUG] [Thread-196032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:15:08.577 [DEBUG] [Thread-196032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:15:08.586 [DEBUG] [Thread-196032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:15:08.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:15:08.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:15:08.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:15:08.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:15:08.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:15:08.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:15:08.623 [DEBUG] [Thread-196032] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:15:11.171 [DEBUG] [Thread-196035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:15:17.936 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:15:17.938 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:15:22.817 [DEBUG] [Thread-196036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:15:37.852 [DEBUG] [Thread-196037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:15:38.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:15:38.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:15:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:15:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 15, 4), 0.29252, 97.8876, 0.0, 9.0702, 11.4931, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:15:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:15:04
2026-04-12T21:15:40.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:15:40.469 [DEBUG] [Thread-196038] [transport.py] [_log()] starting thread (client mode): 0xae534520
2026-04-12T21:15:40.470 [DEBUG] [Thread-196038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:15:40.489 [DEBUG] [Thread-196038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:15:40.489 [INFO] [Thread-196038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] client lang: <none>
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] server lang: <none>
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] kex follows: False
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] Compression: none
2026-04-12T21:15:40.493 [DEBUG] [Thread-196038] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:15:40.508 [DEBUG] [Thread-196038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:15:40.509 [DEBUG] [Thread-196038] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:15:40.509 [DEBUG] [Thread-196038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:15:40.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:15:40.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:15:40.511 [DEBUG] [Thread-196038] [transport.py] [_log()] userauth is OK
2026-04-12T21:15:40.511 [DEBUG] [Thread-196038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:15:40.511 [DEBUG] [Thread-196038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:15:40.512 [DEBUG] [Thread-196038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:15:40.512 [DEBUG] [Thread-196038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:15:40.529 [INFO] [Thread-196038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:15:40.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:15:41.145 [DEBUG] [Thread-196038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:15:41.145 [DEBUG] [Thread-196038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:15:41.146 [DEBUG] [Thread-196038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:15:41.186 [DEBUG] [Thread-196038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:15:41.186 [DEBUG] [Thread-196038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:15:41.189 [DEBUG] [Thread-196038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:15:41.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:15:41.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:15:41.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:15:41.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:15:41.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:15:41.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:15:41.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:15:41.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:15:41.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:15:41.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.802188 -999.00  +11.70   8.09     94  +10.80 1 3 1 3 1     0    0 0.82 -1.43 ----- 8.1 8.1 209.6 10.8 13.2 -10.5 13.1 -10.8 12.8 -10.6 13.1 -11.2
2026-04-12T21:15:41.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:15:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:15:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.802188
2026-04-12T21:15:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:15:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:15:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:15:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:15:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:15:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:15:04', tmtdew=0.29252, humidity=97.8876, cloud=0.0, wind=9.0702, temperature=11.4931, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:15:09.043', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:15:41.208 [DEBUG] [Thread-196038] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:15:41.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:15:41.302 [DEBUG] [Thread-196041] [transport.py] [_log()] starting thread (client mode): 0xae5f3490
2026-04-12T21:15:41.302 [DEBUG] [Thread-196041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:15:41.321 [DEBUG] [Thread-196041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:15:41.321 [INFO] [Thread-196041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:15:41.328 [DEBUG] [Thread-196041] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] client lang: <none>
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] server lang: <none>
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] kex follows: False
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:15:41.329 [DEBUG] [Thread-196041] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:15:41.330 [DEBUG] [Thread-196041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:15:41.330 [DEBUG] [Thread-196041] [transport.py] [_log()] Compression: none
2026-04-12T21:15:41.330 [DEBUG] [Thread-196041] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:15:41.387 [DEBUG] [Thread-196041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:15:41.387 [DEBUG] [Thread-196041] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:15:41.388 [DEBUG] [Thread-196041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:15:41.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:15:41.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:15:41.443 [DEBUG] [Thread-196041] [transport.py] [_log()] userauth is OK
2026-04-12T21:15:41.443 [DEBUG] [Thread-196041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:15:41.443 [DEBUG] [Thread-196041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:15:41.443 [DEBUG] [Thread-196041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:15:41.443 [DEBUG] [Thread-196041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:15:41.462 [INFO] [Thread-196041] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:15:41.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:15:41.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:15:42.295 [DEBUG] [Thread-196041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:15:42.295 [DEBUG] [Thread-196041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:15:42.343 [DEBUG] [Thread-196041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:15:42.343 [DEBUG] [Thread-196041] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:15:42.352 [DEBUG] [Thread-196041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:15:42.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:15:42.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:15:42.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:15:42.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:15:42.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:15:42.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:15:42.389 [DEBUG] [Thread-196041] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:15:52.887 [DEBUG] [Thread-196043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:16:07.937 [DEBUG] [Thread-196044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:16:11.238 [DEBUG] [Thread-196045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:16:12.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:16:12.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:16:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:16:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 15, 39), 0.48035, 96.8084, 0.0, 10.6582, 11.9521, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:16:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:15:39
2026-04-12T21:16:14.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:16:14.189 [DEBUG] [Thread-196046] [transport.py] [_log()] starting thread (client mode): 0xae5639a0
2026-04-12T21:16:14.190 [DEBUG] [Thread-196046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:16:14.208 [DEBUG] [Thread-196046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:16:14.208 [INFO] [Thread-196046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:16:14.211 [DEBUG] [Thread-196046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] client lang: <none>
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] server lang: <none>
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] kex follows: False
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] Compression: none
2026-04-12T21:16:14.212 [DEBUG] [Thread-196046] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:16:14.229 [DEBUG] [Thread-196046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:16:14.229 [DEBUG] [Thread-196046] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:16:14.230 [DEBUG] [Thread-196046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:16:14.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:16:14.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:16:14.232 [DEBUG] [Thread-196046] [transport.py] [_log()] userauth is OK
2026-04-12T21:16:14.232 [DEBUG] [Thread-196046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:16:14.232 [DEBUG] [Thread-196046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:16:14.232 [DEBUG] [Thread-196046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:16:14.232 [DEBUG] [Thread-196046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:16:14.256 [INFO] [Thread-196046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:16:14.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:16:14.904 [DEBUG] [Thread-196046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:16:14.904 [DEBUG] [Thread-196046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:16:14.904 [DEBUG] [Thread-196046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:16:14.945 [DEBUG] [Thread-196046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:16:14.945 [DEBUG] [Thread-196046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:16:14.949 [DEBUG] [Thread-196046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:16:14.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:16:14.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:16:14.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:16:14.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:16:14.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:16:14.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:16:14.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:16:14.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:16:14.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:16:14.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.802536 -999.00  +11.60   9.65     94  +10.80 1 3 1 3 1     0    0 0.83 -1.53 ----- 9.7 9.7 205.8 11.5 13.3 -10.6 13.1 -10.4 12.9 -10.7 13.2 -11.0
2026-04-12T21:16:14.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:16:14.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:16:14.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.802536
2026-04-12T21:16:14.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:16:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:16:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:16:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:16:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:16:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:15:39', tmtdew=0.48035, humidity=96.8084, cloud=0.0, wind=10.6582, temperature=11.9521, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:15:39.110', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:16:14.975 [DEBUG] [Thread-196046] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:16:15.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:16:15.070 [DEBUG] [Thread-196049] [transport.py] [_log()] starting thread (client mode): 0xae5e5ba0
2026-04-12T21:16:15.070 [DEBUG] [Thread-196049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:16:15.085 [DEBUG] [Thread-196049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:16:15.085 [INFO] [Thread-196049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:16:15.101 [DEBUG] [Thread-196049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:16:15.101 [DEBUG] [Thread-196049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:16:15.101 [DEBUG] [Thread-196049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] client lang: <none>
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] server lang: <none>
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] kex follows: False
2026-04-12T21:16:15.102 [DEBUG] [Thread-196049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:16:15.103 [DEBUG] [Thread-196049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:16:15.103 [DEBUG] [Thread-196049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:16:15.103 [DEBUG] [Thread-196049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:16:15.103 [DEBUG] [Thread-196049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:16:15.103 [DEBUG] [Thread-196049] [transport.py] [_log()] Compression: none
2026-04-12T21:16:15.103 [DEBUG] [Thread-196049] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:16:15.151 [DEBUG] [Thread-196049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:16:15.152 [DEBUG] [Thread-196049] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:16:15.152 [DEBUG] [Thread-196049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:16:15.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:16:15.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:16:15.207 [DEBUG] [Thread-196049] [transport.py] [_log()] userauth is OK
2026-04-12T21:16:15.207 [DEBUG] [Thread-196049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:16:15.207 [DEBUG] [Thread-196049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:16:15.207 [DEBUG] [Thread-196049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:16:15.207 [DEBUG] [Thread-196049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:16:15.226 [INFO] [Thread-196049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:16:15.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:16:15.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:16:16.063 [DEBUG] [Thread-196049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:16:16.064 [DEBUG] [Thread-196049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:16:16.112 [DEBUG] [Thread-196049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:16:16.112 [DEBUG] [Thread-196049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:16:16.121 [DEBUG] [Thread-196049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:16:16.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:16:16.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:16:16.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:16:16.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:16:16.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:16:16.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:16:16.167 [DEBUG] [Thread-196049] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:16:18.140 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:16:18.141 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:16:22.976 [DEBUG] [Thread-196051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:16:38.030 [DEBUG] [Thread-196052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:16:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:16:46.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:16:46.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:16:47.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 16, 15), 0.23496, 97.9373, 0.0, 9.9882, 11.5094, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:16:47.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:16:15
2026-04-12T21:16:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:16:48.001 [DEBUG] [Thread-196053] [transport.py] [_log()] starting thread (client mode): 0xae5e60b0
2026-04-12T21:16:48.002 [DEBUG] [Thread-196053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:16:48.022 [DEBUG] [Thread-196053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:16:48.022 [INFO] [Thread-196053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] client lang: <none>
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] server lang: <none>
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] kex follows: False
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] Compression: none
2026-04-12T21:16:48.025 [DEBUG] [Thread-196053] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:16:48.043 [DEBUG] [Thread-196053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:16:48.043 [DEBUG] [Thread-196053] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:16:48.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:16:48.044 [DEBUG] [Thread-196053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:16:48.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:16:48.046 [DEBUG] [Thread-196053] [transport.py] [_log()] userauth is OK
2026-04-12T21:16:48.047 [DEBUG] [Thread-196053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:16:48.047 [DEBUG] [Thread-196053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:16:48.047 [DEBUG] [Thread-196053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:16:48.047 [DEBUG] [Thread-196053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:16:48.084 [INFO] [Thread-196053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:16:48.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:16:48.727 [DEBUG] [Thread-196053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:16:48.727 [DEBUG] [Thread-196053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:16:48.727 [DEBUG] [Thread-196053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:16:48.768 [DEBUG] [Thread-196053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:16:48.768 [DEBUG] [Thread-196053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:16:48.771 [DEBUG] [Thread-196053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:16:48.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:16:48.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:16:48.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:16:48.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:16:48.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:16:48.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:16:48.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:16:48.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:16:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:16:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.803231 -999.00  +11.60   9.15     94  +10.80 1 3 1 3 1     0    0 0.81 -2.00 ----- 9.2 9.2 190.0 10.2 13.2 -11.7 13.1 -10.9 12.9 -11.0 13.2 -11.6
2026-04-12T21:16:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:16:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:16:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.803231
2026-04-12T21:16:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:16:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:16:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:16:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:16:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:16:48.797 [DEBUG] [Thread-196053] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:16:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:16:15', tmtdew=0.23496, humidity=97.9373, cloud=0.0, wind=9.9882, temperature=11.5094, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:16:39.158', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:16:48.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:16:48.890 [DEBUG] [Thread-196056] [transport.py] [_log()] starting thread (client mode): 0xae5601c0
2026-04-12T21:16:48.890 [DEBUG] [Thread-196056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:16:48.905 [DEBUG] [Thread-196056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:16:48.905 [INFO] [Thread-196056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:16:48.913 [DEBUG] [Thread-196056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:16:48.913 [DEBUG] [Thread-196056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:16:48.913 [DEBUG] [Thread-196056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] client lang: <none>
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] server lang: <none>
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] kex follows: False
2026-04-12T21:16:48.914 [DEBUG] [Thread-196056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:16:48.915 [DEBUG] [Thread-196056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:16:48.915 [DEBUG] [Thread-196056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:16:48.915 [DEBUG] [Thread-196056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:16:48.915 [DEBUG] [Thread-196056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:16:48.915 [DEBUG] [Thread-196056] [transport.py] [_log()] Compression: none
2026-04-12T21:16:48.915 [DEBUG] [Thread-196056] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:16:48.972 [DEBUG] [Thread-196056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:16:48.972 [DEBUG] [Thread-196056] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:16:48.973 [DEBUG] [Thread-196056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:16:48.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:16:48.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:16:49.028 [DEBUG] [Thread-196056] [transport.py] [_log()] userauth is OK
2026-04-12T21:16:49.028 [DEBUG] [Thread-196056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:16:49.028 [DEBUG] [Thread-196056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:16:49.028 [DEBUG] [Thread-196056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:16:49.028 [DEBUG] [Thread-196056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:16:49.051 [INFO] [Thread-196056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:16:49.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:16:49.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:16:49.905 [DEBUG] [Thread-196056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:16:49.906 [DEBUG] [Thread-196056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:16:49.954 [DEBUG] [Thread-196056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:16:49.954 [DEBUG] [Thread-196056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:16:49.964 [DEBUG] [Thread-196056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:16:49.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:16:49.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:16:49.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:16:49.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:16:49.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:16:49.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:16:50.000 [DEBUG] [Thread-196056] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:16:53.068 [DEBUG] [Thread-196058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:08.125 [DEBUG] [Thread-196059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:11.307 [DEBUG] [Thread-196060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:18.348 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:18.349 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:19.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:17:19.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:17:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:17:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 16, 50), 0.49531, 96.7087, 0.0, 10.4818, 11.7529, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:17:21.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:16:50
2026-04-12T21:17:21.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:17:21.896 [DEBUG] [Thread-196061] [transport.py] [_log()] starting thread (client mode): 0xae5632b0
2026-04-12T21:17:21.896 [DEBUG] [Thread-196061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:17:21.921 [DEBUG] [Thread-196061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:17:21.921 [INFO] [Thread-196061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] client lang: <none>
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] server lang: <none>
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] kex follows: False
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] Compression: none
2026-04-12T21:17:21.922 [DEBUG] [Thread-196061] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:17:21.931 [DEBUG] [Thread-196061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:17:21.931 [DEBUG] [Thread-196061] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:17:21.932 [DEBUG] [Thread-196061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:17:21.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:17:21.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:17:21.933 [DEBUG] [Thread-196061] [transport.py] [_log()] userauth is OK
2026-04-12T21:17:21.934 [DEBUG] [Thread-196061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:17:21.934 [DEBUG] [Thread-196061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:17:21.934 [DEBUG] [Thread-196061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:17:21.934 [DEBUG] [Thread-196061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:17:21.952 [INFO] [Thread-196061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:17:21.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:17:22.594 [DEBUG] [Thread-196061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:17:22.594 [DEBUG] [Thread-196061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:17:22.595 [DEBUG] [Thread-196061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:17:22.635 [DEBUG] [Thread-196061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:17:22.635 [DEBUG] [Thread-196061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:17:22.639 [DEBUG] [Thread-196061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:17:22.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:17:22.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:17:22.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:17:22.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:17:22.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:17:22.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:17:22.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:17:22.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:17:22.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:17:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.803578 -999.00  +11.60   8.09     94  +10.80 1 3 1 3 1     0    0 0.80 -2.20 ----- 8.1 8.1 205.4 9.0 13.3 -11.1 13.2 -9.1 12.9 -11.0 13.2 -10.4
2026-04-12T21:17:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:17:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:17:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.803578
2026-04-12T21:17:22.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:17:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:17:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:17:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:17:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:17:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:16:50', tmtdew=0.49531, humidity=96.7087, cloud=0.0, wind=10.4818, temperature=11.7529, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:17:09.139', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:17:22.669 [DEBUG] [Thread-196061] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:17:22.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:17:22.754 [DEBUG] [Thread-196064] [transport.py] [_log()] starting thread (client mode): 0xae562830
2026-04-12T21:17:22.754 [DEBUG] [Thread-196064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:17:22.767 [DEBUG] [Thread-196064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:17:22.767 [INFO] [Thread-196064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] client lang: <none>
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] server lang: <none>
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] kex follows: False
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] Compression: none
2026-04-12T21:17:22.775 [DEBUG] [Thread-196064] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:17:22.833 [DEBUG] [Thread-196064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:17:22.834 [DEBUG] [Thread-196064] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:17:22.834 [DEBUG] [Thread-196064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:17:22.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:17:22.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:17:22.891 [DEBUG] [Thread-196064] [transport.py] [_log()] userauth is OK
2026-04-12T21:17:22.891 [DEBUG] [Thread-196064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:17:22.891 [DEBUG] [Thread-196064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:17:22.891 [DEBUG] [Thread-196064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:17:22.891 [DEBUG] [Thread-196064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:17:22.905 [INFO] [Thread-196064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:17:22.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:17:22.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:17:23.160 [DEBUG] [Thread-196066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:23.716 [DEBUG] [Thread-196064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:17:23.717 [DEBUG] [Thread-196064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:17:23.765 [DEBUG] [Thread-196064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:17:23.765 [DEBUG] [Thread-196064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:17:23.775 [DEBUG] [Thread-196064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:17:23.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:17:23.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:17:23.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:17:23.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:17:23.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:17:23.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:17:23.811 [DEBUG] [Thread-196064] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:17:38.219 [DEBUG] [Thread-196067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:53.258 [DEBUG] [Thread-196068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:17:53.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:17:53.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:17:53.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:17:55.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 17, 26), 0.23746, 97.9207, 0.0, 9.22896, 11.4762, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:17:55.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:17:26
2026-04-12T21:17:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:17:55.636 [DEBUG] [Thread-196069] [transport.py] [_log()] starting thread (client mode): 0xae5e6fb0
2026-04-12T21:17:55.636 [DEBUG] [Thread-196069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:17:55.655 [DEBUG] [Thread-196069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:17:55.655 [INFO] [Thread-196069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] client lang: <none>
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] server lang: <none>
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] kex follows: False
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] Compression: none
2026-04-12T21:17:55.656 [DEBUG] [Thread-196069] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:17:55.664 [DEBUG] [Thread-196069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:17:55.665 [DEBUG] [Thread-196069] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:17:55.665 [DEBUG] [Thread-196069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:17:55.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:17:55.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:17:55.667 [DEBUG] [Thread-196069] [transport.py] [_log()] userauth is OK
2026-04-12T21:17:55.667 [DEBUG] [Thread-196069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:17:55.667 [DEBUG] [Thread-196069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:17:55.667 [DEBUG] [Thread-196069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:17:55.667 [DEBUG] [Thread-196069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:17:55.694 [INFO] [Thread-196069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:17:55.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:17:56.298 [DEBUG] [Thread-196069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:17:56.298 [DEBUG] [Thread-196069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:17:56.299 [DEBUG] [Thread-196069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:17:56.339 [DEBUG] [Thread-196069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:17:56.340 [DEBUG] [Thread-196069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:17:56.343 [DEBUG] [Thread-196069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:17:56.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:17:56.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:17:56.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:17:56.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:17:56.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:17:56.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:17:56.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:17:56.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:17:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:17:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.803925 -999.00  +11.60   5.93     94  +10.80 1 3 1 3 1     0    0 0.77 -2.45 ----- 5.9 5.9 189.0 7.8 13.3 -9.4 13.1 -9.7 12.9 -9.3 13.2 -9.6
2026-04-12T21:17:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:17:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:17:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.803925
2026-04-12T21:17:56.368 [DEBUG] [Thread-196069] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:17:56.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:17:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:17:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:17:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:17:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:17:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:17:26', tmtdew=0.23746, humidity=97.9207, cloud=0.0, wind=9.22896, temperature=11.4762, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:17:39.120', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:17:56.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:17:56.478 [DEBUG] [Thread-196072] [transport.py] [_log()] starting thread (client mode): 0xae5e4a30
2026-04-12T21:17:56.478 [DEBUG] [Thread-196072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:17:56.493 [DEBUG] [Thread-196072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:17:56.493 [INFO] [Thread-196072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:17:56.500 [DEBUG] [Thread-196072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:17:56.500 [DEBUG] [Thread-196072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:17:56.500 [DEBUG] [Thread-196072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:17:56.500 [DEBUG] [Thread-196072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] client lang: <none>
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] server lang: <none>
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] kex follows: False
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] Compression: none
2026-04-12T21:17:56.501 [DEBUG] [Thread-196072] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:17:56.563 [DEBUG] [Thread-196072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:17:56.564 [DEBUG] [Thread-196072] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:17:56.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:17:56.565 [DEBUG] [Thread-196072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:17:56.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:17:56.620 [DEBUG] [Thread-196072] [transport.py] [_log()] userauth is OK
2026-04-12T21:17:56.620 [DEBUG] [Thread-196072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:17:56.621 [DEBUG] [Thread-196072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:17:56.621 [DEBUG] [Thread-196072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:17:56.621 [DEBUG] [Thread-196072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:17:56.639 [INFO] [Thread-196072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:17:56.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:17:56.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:17:57.473 [DEBUG] [Thread-196072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:17:57.473 [DEBUG] [Thread-196072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:17:57.521 [DEBUG] [Thread-196072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:17:57.521 [DEBUG] [Thread-196072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:17:57.530 [DEBUG] [Thread-196072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:17:57.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:17:57.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:17:57.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:17:57.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:17:57.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:17:57.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:17:57.567 [DEBUG] [Thread-196072] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:18:08.297 [DEBUG] [Thread-196074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:18:11.385 [DEBUG] [Thread-196075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:18:18.555 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:18:18.556 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:18:23.347 [DEBUG] [Thread-196076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:18:27.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:18:27.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:18:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:18:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 18, 1), 0.23995, 97.9041, 0.0, 9.31716, 11.4431, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:18:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:18:01
2026-04-12T21:18:29.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:18:29.425 [DEBUG] [Thread-196077] [transport.py] [_log()] starting thread (client mode): 0xae5e6740
2026-04-12T21:18:29.425 [DEBUG] [Thread-196077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:18:29.439 [DEBUG] [Thread-196077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:18:29.439 [INFO] [Thread-196077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] client lang: <none>
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] server lang: <none>
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] kex follows: False
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:18:29.442 [DEBUG] [Thread-196077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:18:29.443 [DEBUG] [Thread-196077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:18:29.443 [DEBUG] [Thread-196077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:18:29.443 [DEBUG] [Thread-196077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:18:29.443 [DEBUG] [Thread-196077] [transport.py] [_log()] Compression: none
2026-04-12T21:18:29.443 [DEBUG] [Thread-196077] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:18:29.459 [DEBUG] [Thread-196077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:18:29.460 [DEBUG] [Thread-196077] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:18:29.460 [DEBUG] [Thread-196077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:18:29.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:18:29.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:18:29.462 [DEBUG] [Thread-196077] [transport.py] [_log()] userauth is OK
2026-04-12T21:18:29.462 [DEBUG] [Thread-196077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:18:29.462 [DEBUG] [Thread-196077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:18:29.462 [DEBUG] [Thread-196077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:18:29.462 [DEBUG] [Thread-196077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:18:29.483 [INFO] [Thread-196077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:18:29.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:18:30.118 [DEBUG] [Thread-196077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:18:30.118 [DEBUG] [Thread-196077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:18:30.119 [DEBUG] [Thread-196077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:18:30.159 [DEBUG] [Thread-196077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:18:30.159 [DEBUG] [Thread-196077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:18:30.163 [DEBUG] [Thread-196077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:18:30.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:18:30.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:18:30.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:18:30.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:18:30.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:18:30.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:18:30.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:18:30.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:18:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:18:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.804272 -999.00  +11.60   6.15     94  +10.80 1 3 1 3 1     0    0 0.78 -2.64 ----- 6.2 6.2 204.1 7.8 13.3 -10.6 13.1 -9.7 12.9 -9.4 13.2 -11.4
2026-04-12T21:18:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:18:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:18:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.804272
2026-04-12T21:18:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:18:01', tmtdew=0.23995, humidity=97.9041, cloud=0.0, wind=9.31716, temperature=11.4431, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:18:09.101', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:18:30.184 [DEBUG] [Thread-196077] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:18:30.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:18:30.278 [DEBUG] [Thread-196080] [transport.py] [_log()] starting thread (client mode): 0xb0f6f8e0
2026-04-12T21:18:30.278 [DEBUG] [Thread-196080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:18:30.293 [DEBUG] [Thread-196080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:18:30.293 [INFO] [Thread-196080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:18:30.300 [DEBUG] [Thread-196080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:18:30.300 [DEBUG] [Thread-196080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:18:30.300 [DEBUG] [Thread-196080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:18:30.300 [DEBUG] [Thread-196080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:18:30.300 [DEBUG] [Thread-196080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:18:30.300 [DEBUG] [Thread-196080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:18:30.300 [DEBUG] [Thread-196080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] client lang: <none>
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] server lang: <none>
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] kex follows: False
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] Compression: none
2026-04-12T21:18:30.301 [DEBUG] [Thread-196080] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:18:30.359 [DEBUG] [Thread-196080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:18:30.360 [DEBUG] [Thread-196080] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:18:30.360 [DEBUG] [Thread-196080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:18:30.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:18:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:18:30.416 [DEBUG] [Thread-196080] [transport.py] [_log()] userauth is OK
2026-04-12T21:18:30.416 [DEBUG] [Thread-196080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:18:30.416 [DEBUG] [Thread-196080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:18:30.416 [DEBUG] [Thread-196080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:18:30.416 [DEBUG] [Thread-196080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:18:30.436 [INFO] [Thread-196080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:18:30.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:18:30.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:18:31.296 [DEBUG] [Thread-196080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:18:31.296 [DEBUG] [Thread-196080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:18:31.344 [DEBUG] [Thread-196080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:18:31.344 [DEBUG] [Thread-196080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:18:31.354 [DEBUG] [Thread-196080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:18:31.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:18:31.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:18:31.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:18:31.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:18:31.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:18:31.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:18:31.391 [DEBUG] [Thread-196080] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:18:38.384 [DEBUG] [Thread-196082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:18:53.448 [DEBUG] [Thread-196083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:19:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:19:01.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:19:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:19:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 18, 37), 0.47981, 96.8081, 0.0, 11.3638, 11.7529, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:19:02.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:18:37
2026-04-12T21:19:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:19:03.154 [DEBUG] [Thread-196084] [transport.py] [_log()] starting thread (client mode): 0xae5e6620
2026-04-12T21:19:03.154 [DEBUG] [Thread-196084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:19:03.173 [DEBUG] [Thread-196084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:19:03.173 [INFO] [Thread-196084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] client lang: <none>
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] server lang: <none>
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] kex follows: False
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] Compression: none
2026-04-12T21:19:03.176 [DEBUG] [Thread-196084] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:19:03.184 [DEBUG] [Thread-196084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:19:03.185 [DEBUG] [Thread-196084] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:19:03.185 [DEBUG] [Thread-196084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:19:03.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:19:03.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:19:03.186 [DEBUG] [Thread-196084] [transport.py] [_log()] userauth is OK
2026-04-12T21:19:03.187 [DEBUG] [Thread-196084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:19:03.187 [DEBUG] [Thread-196084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:19:03.187 [DEBUG] [Thread-196084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:19:03.187 [DEBUG] [Thread-196084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:19:03.223 [INFO] [Thread-196084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:19:03.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:19:03.800 [DEBUG] [Thread-196084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:19:03.801 [DEBUG] [Thread-196084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:19:03.801 [DEBUG] [Thread-196084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:19:03.841 [DEBUG] [Thread-196084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:19:03.841 [DEBUG] [Thread-196084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:19:03.844 [DEBUG] [Thread-196084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:19:03.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:19:03.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:19:03.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:19:03.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:19:03.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:19:03.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:19:03.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:19:03.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:19:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:19:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.804620 -999.00  +11.60   6.11     94  +10.80 1 3 1 3 1     0    0 0.78 -2.65 ----- 6.1 6.1 199.7 7.0 13.3 -12.2 13.2 -11.4 12.9 -10.8 13.2 -12.6
2026-04-12T21:19:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:19:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:19:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.804620
2026-04-12T21:19:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:19:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:19:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:19:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:19:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:19:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:18:37', tmtdew=0.47981, humidity=96.8081, cloud=0.0, wind=11.3638, temperature=11.7529, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:18:39.168', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:19:03.874 [DEBUG] [Thread-196084] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:19:03.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:19:03.977 [DEBUG] [Thread-196087] [transport.py] [_log()] starting thread (client mode): 0xae5e58a0
2026-04-12T21:19:03.978 [DEBUG] [Thread-196087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:19:03.992 [DEBUG] [Thread-196087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:19:03.992 [INFO] [Thread-196087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:19:04.001 [DEBUG] [Thread-196087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:19:04.001 [DEBUG] [Thread-196087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] client lang: <none>
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] server lang: <none>
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] kex follows: False
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] Compression: none
2026-04-12T21:19:04.002 [DEBUG] [Thread-196087] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:19:04.056 [DEBUG] [Thread-196087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:19:04.057 [DEBUG] [Thread-196087] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:19:04.058 [DEBUG] [Thread-196087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:19:04.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:19:04.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:19:04.113 [DEBUG] [Thread-196087] [transport.py] [_log()] userauth is OK
2026-04-12T21:19:04.113 [DEBUG] [Thread-196087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:19:04.113 [DEBUG] [Thread-196087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:19:04.113 [DEBUG] [Thread-196087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:19:04.114 [DEBUG] [Thread-196087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:19:04.131 [INFO] [Thread-196087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:19:04.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:19:04.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:19:04.927 [DEBUG] [Thread-196087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:19:04.927 [DEBUG] [Thread-196087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:19:04.975 [DEBUG] [Thread-196087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:19:04.975 [DEBUG] [Thread-196087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:19:04.984 [DEBUG] [Thread-196087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:19:04.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:19:04.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:19:05.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:19:05.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:19:05.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:19:05.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:19:05.025 [DEBUG] [Thread-196087] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:19:08.484 [DEBUG] [Thread-196089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:19:11.464 [DEBUG] [Thread-196090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:19:18.765 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:19:18.766 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:19:23.533 [DEBUG] [Thread-196091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:19:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:19:35.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:19:35.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:19:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 19, 12), 0.28225, 97.9538, 0.0, 9.29952, 11.4596, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:19:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:19:12
2026-04-12T21:19:36.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:19:36.904 [DEBUG] [Thread-196092] [transport.py] [_log()] starting thread (client mode): 0xb0f8f8e0
2026-04-12T21:19:36.904 [DEBUG] [Thread-196092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:19:36.925 [DEBUG] [Thread-196092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:19:36.926 [INFO] [Thread-196092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:19:36.929 [DEBUG] [Thread-196092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:19:36.929 [DEBUG] [Thread-196092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:19:36.929 [DEBUG] [Thread-196092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:19:36.929 [DEBUG] [Thread-196092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:36.929 [DEBUG] [Thread-196092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:36.929 [DEBUG] [Thread-196092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:36.929 [DEBUG] [Thread-196092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] client lang: <none>
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] server lang: <none>
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] kex follows: False
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:19:36.930 [DEBUG] [Thread-196092] [transport.py] [_log()] Compression: none
2026-04-12T21:19:36.931 [DEBUG] [Thread-196092] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:19:36.950 [DEBUG] [Thread-196092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:19:36.950 [DEBUG] [Thread-196092] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:19:36.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:19:36.951 [DEBUG] [Thread-196092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:19:36.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:19:36.953 [DEBUG] [Thread-196092] [transport.py] [_log()] userauth is OK
2026-04-12T21:19:36.954 [DEBUG] [Thread-196092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:19:36.954 [DEBUG] [Thread-196092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:19:36.954 [DEBUG] [Thread-196092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:19:36.954 [DEBUG] [Thread-196092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:19:36.990 [INFO] [Thread-196092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:19:36.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:19:37.569 [DEBUG] [Thread-196092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:19:37.569 [DEBUG] [Thread-196092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:19:37.569 [DEBUG] [Thread-196092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:19:37.610 [DEBUG] [Thread-196092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:19:37.610 [DEBUG] [Thread-196092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:19:37.612 [DEBUG] [Thread-196092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:19:37.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:19:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:19:37.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:19:37.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:19:37.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:19:37.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:19:37.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:19:37.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:19:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:19:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.804967 -999.00  +11.60   5.16     94  +10.80 1 3 1 3 1     0    0 0.77 -2.84 ----- 5.2 5.2 214.0 7.9 13.3 -14.6 13.2 -13.3 12.9 -12.5 13.2 -14.8
2026-04-12T21:19:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:19:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:19:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.804967
2026-04-12T21:19:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:19:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:19:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:19:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:19:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:19:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:19:12', tmtdew=0.28225, humidity=97.9538, cloud=0.0, wind=9.29952, temperature=11.4596, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:19:09.149', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:19:37.630 [DEBUG] [Thread-196092] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:19:37.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:19:37.725 [DEBUG] [Thread-196095] [transport.py] [_log()] starting thread (client mode): 0xb0f8ffd0
2026-04-12T21:19:37.725 [DEBUG] [Thread-196095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:19:37.739 [DEBUG] [Thread-196095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:19:37.740 [INFO] [Thread-196095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] client lang: <none>
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] server lang: <none>
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] kex follows: False
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] Compression: none
2026-04-12T21:19:37.747 [DEBUG] [Thread-196095] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:19:37.804 [DEBUG] [Thread-196095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:19:37.804 [DEBUG] [Thread-196095] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:19:37.805 [DEBUG] [Thread-196095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:19:37.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:19:37.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:19:37.860 [DEBUG] [Thread-196095] [transport.py] [_log()] userauth is OK
2026-04-12T21:19:37.861 [DEBUG] [Thread-196095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:19:37.861 [DEBUG] [Thread-196095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:19:37.861 [DEBUG] [Thread-196095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:19:37.861 [DEBUG] [Thread-196095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:19:37.883 [INFO] [Thread-196095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21: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
2026-04-12T21:19:37.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:19:38.570 [DEBUG] [Thread-196097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:19:38.721 [DEBUG] [Thread-196095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:19:38.721 [DEBUG] [Thread-196095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:19:38.769 [DEBUG] [Thread-196095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:19:38.769 [DEBUG] [Thread-196095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:19:38.778 [DEBUG] [Thread-196095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:19:38.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:19:38.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:19:38.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:19:38.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:19:38.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:19:38.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:19:38.815 [DEBUG] [Thread-196095] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:19:53.626 [DEBUG] [Thread-196098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:20:08.664 [DEBUG] [Thread-196099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:20:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:20:08.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:20:08.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:20:10.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 19, 48), 0.46939, 96.8744, 0.0, 11.5402, 11.7197, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:20:10.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:19:48
2026-04-12T21:20:10.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:20:10.663 [DEBUG] [Thread-196100] [transport.py] [_log()] starting thread (client mode): 0xb0f8f0d0
2026-04-12T21:20:10.663 [DEBUG] [Thread-196100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:20:10.679 [DEBUG] [Thread-196100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:20:10.679 [INFO] [Thread-196100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:20:10.680 [DEBUG] [Thread-196100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:20:10.680 [DEBUG] [Thread-196100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] client lang: <none>
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] server lang: <none>
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] kex follows: False
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] Compression: none
2026-04-12T21:20:10.681 [DEBUG] [Thread-196100] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:20:10.690 [DEBUG] [Thread-196100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:20:10.690 [DEBUG] [Thread-196100] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:20:10.691 [DEBUG] [Thread-196100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:20:10.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:20:10.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:20:10.693 [DEBUG] [Thread-196100] [transport.py] [_log()] userauth is OK
2026-04-12T21:20:10.693 [DEBUG] [Thread-196100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:20:10.693 [DEBUG] [Thread-196100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:20:10.693 [DEBUG] [Thread-196100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:20:10.693 [DEBUG] [Thread-196100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:20:10.716 [INFO] [Thread-196100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:20:10.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:20:11.280 [DEBUG] [Thread-196100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:20:11.280 [DEBUG] [Thread-196100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:20:11.281 [DEBUG] [Thread-196100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:20:11.321 [DEBUG] [Thread-196100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:20:11.321 [DEBUG] [Thread-196100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:20:11.324 [DEBUG] [Thread-196100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:20:11.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:20:11.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:20:11.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:20:11.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:20:11.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:20:11.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:20:11.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:20:11.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:20:11.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:20:11.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.805314 -999.00  +11.60   5.36     94  +10.70 1 3 1 3 1     0    0 0.78 -2.65 ----- 5.4 5.4 199.4 8.7 13.2 -15.4 13.1 -15.6 12.9 -14.2 13.2 -14.8
2026-04-12T21:20:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:20:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:20:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.805314
2026-04-12T21:20:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:20:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:20:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:20:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:20:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T21:20:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:19:48', tmtdew=0.46939, humidity=96.8744, cloud=0.0, wind=11.5402, temperature=11.7197, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:19:39.130', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:20:11.342 [DEBUG] [Thread-196100] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:20:11.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:20:11.435 [DEBUG] [Thread-196103] [transport.py] [_log()] starting thread (client mode): 0xae5e6f80
2026-04-12T21:20:11.436 [DEBUG] [Thread-196103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:20:11.450 [DEBUG] [Thread-196103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:20:11.450 [INFO] [Thread-196103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:20:11.457 [DEBUG] [Thread-196103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] client lang: <none>
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] server lang: <none>
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] kex follows: False
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] Compression: none
2026-04-12T21:20:11.458 [DEBUG] [Thread-196103] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:20:11.517 [DEBUG] [Thread-196103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:20:11.517 [DEBUG] [Thread-196103] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:20:11.517 [DEBUG] [Thread-196103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:20:11.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:20:11.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:20:11.524 [DEBUG] [Thread-196105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:20:11.573 [DEBUG] [Thread-196103] [transport.py] [_log()] userauth is OK
2026-04-12T21:20:11.573 [DEBUG] [Thread-196103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:20:11.573 [DEBUG] [Thread-196103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:20:11.573 [DEBUG] [Thread-196103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:20:11.573 [DEBUG] [Thread-196103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:20:11.586 [INFO] [Thread-196103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:20:11.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:20:11.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:20:12.375 [DEBUG] [Thread-196103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:20:12.376 [DEBUG] [Thread-196103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:20:12.424 [DEBUG] [Thread-196103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:20:12.424 [DEBUG] [Thread-196103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:20:12.433 [DEBUG] [Thread-196103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:20:12.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:20:12.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:20:12.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:20:12.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:20:12.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:20:12.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:20:12.469 [DEBUG] [Thread-196103] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:20:18.969 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:20:18.971 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:20:23.700 [DEBUG] [Thread-196106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:20:38.753 [DEBUG] [Thread-196107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:20:42.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:20:42.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:20:42.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:20:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 20, 23), 0.28225, 97.9538, 0.0, 10.7644, 11.4596, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:20:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:20:23
2026-04-12T21:20:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:20:44.324 [DEBUG] [Thread-196108] [transport.py] [_log()] starting thread (client mode): 0xb0f6f8e0
2026-04-12T21:20:44.324 [DEBUG] [Thread-196108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:20:44.340 [DEBUG] [Thread-196108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:20:44.340 [INFO] [Thread-196108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] client lang: <none>
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] server lang: <none>
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] kex follows: False
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] Compression: none
2026-04-12T21:20:44.344 [DEBUG] [Thread-196108] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:20:44.361 [DEBUG] [Thread-196108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:20:44.362 [DEBUG] [Thread-196108] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:20:44.362 [DEBUG] [Thread-196108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:20:44.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:20:44.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:20:44.364 [DEBUG] [Thread-196108] [transport.py] [_log()] userauth is OK
2026-04-12T21:20:44.364 [DEBUG] [Thread-196108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:20:44.364 [DEBUG] [Thread-196108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:20:44.365 [DEBUG] [Thread-196108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:20:44.365 [DEBUG] [Thread-196108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:20:44.382 [INFO] [Thread-196108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:20:44.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:20:45.014 [DEBUG] [Thread-196108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:20:45.014 [DEBUG] [Thread-196108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:20:45.014 [DEBUG] [Thread-196108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:20:45.055 [DEBUG] [Thread-196108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:20:45.055 [DEBUG] [Thread-196108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:20:45.058 [DEBUG] [Thread-196108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:20:45.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:20:45.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:20:45.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:20:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:20:45.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:20:45.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:20:45.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:20:45.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:20:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:20:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.806008 -999.00  +11.60   4.85     94  +10.70 1 2 1 3 1     0    0 0.79 -2.30 ...SW 4.8 4.8 189.6 6.4 13.2 -18.4 13.1 -17.5 12.8 -16.4 13.1 -18.7
2026-04-12T21:20:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:20:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:20:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.806008
2026-04-12T21:20:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:20:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:20:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:20:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:20:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:20:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:20:23', tmtdew=0.28225, humidity=97.9538, cloud=0.0, wind=10.7644, temperature=11.4596, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:20:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:20:45.086 [DEBUG] [Thread-196108] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:20:45.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:20:45.179 [DEBUG] [Thread-196111] [transport.py] [_log()] starting thread (client mode): 0xb0f6fb50
2026-04-12T21:20:45.179 [DEBUG] [Thread-196111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:20:45.193 [DEBUG] [Thread-196111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:20:45.194 [INFO] [Thread-196111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:20:45.201 [DEBUG] [Thread-196111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:20:45.201 [DEBUG] [Thread-196111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] client lang: <none>
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] server lang: <none>
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] kex follows: False
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] Compression: none
2026-04-12T21:20:45.202 [DEBUG] [Thread-196111] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:20:45.262 [DEBUG] [Thread-196111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:20:45.262 [DEBUG] [Thread-196111] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:20:45.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:20:45.263 [DEBUG] [Thread-196111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:20:45.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:20:45.318 [DEBUG] [Thread-196111] [transport.py] [_log()] userauth is OK
2026-04-12T21:20:45.318 [DEBUG] [Thread-196111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:20:45.318 [DEBUG] [Thread-196111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:20:45.319 [DEBUG] [Thread-196111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:20:45.319 [DEBUG] [Thread-196111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:20:45.338 [INFO] [Thread-196111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:20:45.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:20:45.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:20:46.146 [DEBUG] [Thread-196111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:20:46.146 [DEBUG] [Thread-196111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:20:46.195 [DEBUG] [Thread-196111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:20:46.195 [DEBUG] [Thread-196111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:20:46.205 [DEBUG] [Thread-196111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:20:46.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:20:46.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:20:46.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:20:46.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:20:46.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:20:46.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:20:46.241 [DEBUG] [Thread-196111] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:20:53.789 [DEBUG] [Thread-196113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:08.838 [DEBUG] [Thread-196114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:11.580 [DEBUG] [Thread-196115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:16.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:21:16.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:21:16.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:21:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 20, 59), 0.28216, 97.9538, 0.0, 8.66448, 11.4264, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:21:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:20:59
2026-04-12T21:21:17.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:21:18.067 [DEBUG] [Thread-196116] [transport.py] [_log()] starting thread (client mode): 0xae535540
2026-04-12T21:21:18.067 [DEBUG] [Thread-196116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:21:18.086 [DEBUG] [Thread-196116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:21:18.086 [INFO] [Thread-196116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:21:18.089 [DEBUG] [Thread-196116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:21:18.089 [DEBUG] [Thread-196116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:21:18.089 [DEBUG] [Thread-196116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] client lang: <none>
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] server lang: <none>
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] kex follows: False
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] Compression: none
2026-04-12T21:21:18.090 [DEBUG] [Thread-196116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:21:18.115 [DEBUG] [Thread-196116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:21:18.116 [DEBUG] [Thread-196116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:21:18.116 [DEBUG] [Thread-196116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:21:18.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:21:18.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:21:18.118 [DEBUG] [Thread-196116] [transport.py] [_log()] userauth is OK
2026-04-12T21:21:18.119 [DEBUG] [Thread-196116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:21:18.119 [DEBUG] [Thread-196116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:21:18.119 [DEBUG] [Thread-196116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:21:18.119 [DEBUG] [Thread-196116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:21:18.141 [INFO] [Thread-196116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:21:18.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:21:18.717 [DEBUG] [Thread-196116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:21:18.717 [DEBUG] [Thread-196116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:21:18.718 [DEBUG] [Thread-196116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:21:18.758 [DEBUG] [Thread-196116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:21:18.758 [DEBUG] [Thread-196116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:21:18.762 [DEBUG] [Thread-196116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:21:18.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:21:18.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:21:18.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:21:18.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:21:18.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:21:18.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:21:18.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:21:18.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:21:18.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:21:18.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.806355 -999.00  +11.60   4.67     94  +10.70 1 2 1 3 1     0    0 0.81 -2.21 ...sw 4.7 4.7 203.1 7.6 13.2 -18.4 13.1 -18.0 12.8 -17.6 13.2 -16.8
2026-04-12T21:21:18.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:21:18.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:21:18.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.806355
2026-04-12T21:21:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:21:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:21:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:21:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:21:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:21:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:20:59', tmtdew=0.28216, humidity=97.9538, cloud=0.0, wind=8.66448, temperature=11.4264, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:21:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:21:18.794 [DEBUG] [Thread-196116] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:21:18.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:21:18.891 [DEBUG] [Thread-196119] [transport.py] [_log()] starting thread (client mode): 0xae509540
2026-04-12T21:21:18.891 [DEBUG] [Thread-196119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:21:18.906 [DEBUG] [Thread-196119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:21:18.906 [INFO] [Thread-196119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:21:18.914 [DEBUG] [Thread-196119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:21:18.914 [DEBUG] [Thread-196119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:21:18.914 [DEBUG] [Thread-196119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:21:18.914 [DEBUG] [Thread-196119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:18.914 [DEBUG] [Thread-196119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:18.914 [DEBUG] [Thread-196119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] client lang: <none>
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] server lang: <none>
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] kex follows: False
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:21:18.915 [DEBUG] [Thread-196119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:21:18.916 [DEBUG] [Thread-196119] [transport.py] [_log()] Compression: none
2026-04-12T21:21:18.916 [DEBUG] [Thread-196119] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:21:18.974 [DEBUG] [Thread-196119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:21:18.975 [DEBUG] [Thread-196119] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:21:18.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:21:18.976 [DEBUG] [Thread-196119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:21:18.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:21:19.030 [DEBUG] [Thread-196119] [transport.py] [_log()] userauth is OK
2026-04-12T21:21:19.030 [DEBUG] [Thread-196119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:21:19.030 [DEBUG] [Thread-196119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:21:19.030 [DEBUG] [Thread-196119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:21:19.030 [DEBUG] [Thread-196119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:21:19.054 [INFO] [Thread-196119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:21:19.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:21:19.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:21:19.174 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:19.176 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:19.861 [DEBUG] [Thread-196119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:21:19.862 [DEBUG] [Thread-196119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:21:19.909 [DEBUG] [Thread-196119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:21:19.910 [DEBUG] [Thread-196119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:21:19.918 [DEBUG] [Thread-196119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:21:19.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:21: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')
2026-04-12T21:21:19.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:21:19.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:21:19.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:21:19.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:21:19.953 [DEBUG] [Thread-196119] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:21:23.877 [DEBUG] [Thread-196121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:38.922 [DEBUG] [Thread-196122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:21:49.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:21:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:21:51.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 21, 34), 0.46414, 96.9075, 0.0, 10.7993, 11.6865, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:21:51.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:21:34
2026-04-12T21:21:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:21:51.990 [DEBUG] [Thread-196123] [transport.py] [_log()] starting thread (client mode): 0xb0f6e8c0
2026-04-12T21:21:51.990 [DEBUG] [Thread-196123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:21:52.009 [DEBUG] [Thread-196123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:21:52.009 [INFO] [Thread-196123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] client lang: <none>
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] server lang: <none>
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] kex follows: False
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] Compression: none
2026-04-12T21:21:52.013 [DEBUG] [Thread-196123] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:21:52.028 [DEBUG] [Thread-196123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:21:52.029 [DEBUG] [Thread-196123] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:21:52.030 [DEBUG] [Thread-196123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:21:52.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:21:52.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:21:52.031 [DEBUG] [Thread-196123] [transport.py] [_log()] userauth is OK
2026-04-12T21:21:52.032 [DEBUG] [Thread-196123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:21:52.032 [DEBUG] [Thread-196123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:21:52.032 [DEBUG] [Thread-196123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:21:52.032 [DEBUG] [Thread-196123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:21:52.070 [INFO] [Thread-196123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:21:52.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:21:52.813 [DEBUG] [Thread-196123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:21:52.813 [DEBUG] [Thread-196123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:21:52.814 [DEBUG] [Thread-196123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:21:52.854 [DEBUG] [Thread-196123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:21:52.854 [DEBUG] [Thread-196123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:21:52.857 [DEBUG] [Thread-196123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:21:52.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:21:52.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:21:52.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:21:52.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:21:52.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:21:52.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:21:52.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:21:52.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:21:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:21:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.806355 -999.00  +11.60   4.67     94  +10.70 1 2 1 3 1     0    0 0.81 -2.21 ...sw 4.7 4.7 203.1 7.6 13.2 -18.4 13.1 -18.0 12.8 -17.6 13.2 -16.8
2026-04-12T21:21:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:21:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:21:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.806355
2026-04-12T21:21:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:21:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:21:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:21:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:21:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:21:52.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:21:34', tmtdew=0.46414, humidity=96.9075, cloud=0.0, wind=10.7993, temperature=11.6865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:21:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:21:52.880 [DEBUG] [Thread-196123] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:21:52.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:21:52.984 [DEBUG] [Thread-196126] [transport.py] [_log()] starting thread (client mode): 0xae5e58a0
2026-04-12T21:21:52.984 [DEBUG] [Thread-196126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:21:52.998 [DEBUG] [Thread-196126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:21:52.999 [INFO] [Thread-196126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:21:53.006 [DEBUG] [Thread-196126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:21:53.007 [DEBUG] [Thread-196126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:21:53.007 [DEBUG] [Thread-196126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:21:53.007 [DEBUG] [Thread-196126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:53.007 [DEBUG] [Thread-196126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:21:53.007 [DEBUG] [Thread-196126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:53.007 [DEBUG] [Thread-196126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:21:53.007 [DEBUG] [Thread-196126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] client lang: <none>
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] server lang: <none>
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] kex follows: False
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:21:53.008 [DEBUG] [Thread-196126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:21:53.009 [DEBUG] [Thread-196126] [transport.py] [_log()] Compression: none
2026-04-12T21:21:53.009 [DEBUG] [Thread-196126] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:21:53.066 [DEBUG] [Thread-196126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:21:53.067 [DEBUG] [Thread-196126] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:21:53.068 [DEBUG] [Thread-196126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:21:53.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:21:53.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:21:53.129 [DEBUG] [Thread-196126] [transport.py] [_log()] userauth is OK
2026-04-12T21:21:53.129 [DEBUG] [Thread-196126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:21:53.129 [DEBUG] [Thread-196126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:21:53.129 [DEBUG] [Thread-196126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:21:53.130 [DEBUG] [Thread-196126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:21:53.155 [INFO] [Thread-196126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:21:53.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:21:53.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:21:53.969 [DEBUG] [Thread-196128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:21:53.971 [DEBUG] [Thread-196126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:21:53.971 [DEBUG] [Thread-196126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:21:54.017 [DEBUG] [Thread-196126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:21:54.017 [DEBUG] [Thread-196126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:21:54.026 [DEBUG] [Thread-196126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:21:54.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:21:54.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:21:54.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:21:54.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:21:54.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:21:54.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:21:54.063 [DEBUG] [Thread-196126] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:22:09.027 [DEBUG] [Thread-196129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:22:11.636 [DEBUG] [Thread-196130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:22:19.375 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:22:19.377 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:22:24.066 [DEBUG] [Thread-196131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:22:24.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:22:24.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:22:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:22:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 22, 10), 0.28212, 97.9538, 0.0, 9.28188, 11.4098, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:22:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:22:10
2026-04-12T21:22:25.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:22:25.889 [DEBUG] [Thread-196132] [transport.py] [_log()] starting thread (client mode): 0xb0f6ce50
2026-04-12T21:22:25.889 [DEBUG] [Thread-196132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:22:25.908 [DEBUG] [Thread-196132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:22:25.908 [INFO] [Thread-196132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] client lang: <none>
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] server lang: <none>
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] kex follows: False
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:22:25.909 [DEBUG] [Thread-196132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:22:25.910 [DEBUG] [Thread-196132] [transport.py] [_log()] Compression: none
2026-04-12T21:22:25.910 [DEBUG] [Thread-196132] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:22:25.923 [DEBUG] [Thread-196132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:22:25.923 [DEBUG] [Thread-196132] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:22:25.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:22:25.925 [DEBUG] [Thread-196132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:22:25.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:22:25.926 [DEBUG] [Thread-196132] [transport.py] [_log()] userauth is OK
2026-04-12T21:22:25.927 [DEBUG] [Thread-196132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:22:25.927 [DEBUG] [Thread-196132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:22:25.927 [DEBUG] [Thread-196132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:22:25.927 [DEBUG] [Thread-196132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:22:25.951 [INFO] [Thread-196132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:22:25.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:22:26.759 [DEBUG] [Thread-196132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:22:26.759 [DEBUG] [Thread-196132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:22:26.760 [DEBUG] [Thread-196132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:22:26.800 [DEBUG] [Thread-196132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:22:26.800 [DEBUG] [Thread-196132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:22:26.804 [DEBUG] [Thread-196132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:22:26.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:22:26.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:22:26.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:22:26.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:22:26.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:22:26.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:22:26.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:22:26.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:22:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:22:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.806703 -999.00  +11.60   5.52     94  +10.70 1 2 1 3 1     0    0 0.80 -1.89 ...sw 5.5 5.5 220.2 10.1 13.2 -17.0 13.1 -15.4 12.8 -14.9 13.1 -17.5
2026-04-12T21:22:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:22:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:22:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.806703
2026-04-12T21:22:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:22:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:22:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:22:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:22:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:22:26.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:22:10', tmtdew=0.28212, humidity=97.9538, cloud=0.0, wind=9.28188, temperature=11.4098, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:21:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:22:26.828 [DEBUG] [Thread-196132] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:22:26.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:22:26.925 [DEBUG] [Thread-196135] [transport.py] [_log()] starting thread (client mode): 0xae5e6ec0
2026-04-12T21:22:26.925 [DEBUG] [Thread-196135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:22:26.944 [DEBUG] [Thread-196135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:22:26.944 [INFO] [Thread-196135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] client lang: <none>
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] server lang: <none>
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] kex follows: False
2026-04-12T21:22:26.952 [DEBUG] [Thread-196135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:22:26.953 [DEBUG] [Thread-196135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:22:26.953 [DEBUG] [Thread-196135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:22:26.953 [DEBUG] [Thread-196135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:22:26.953 [DEBUG] [Thread-196135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:22:26.953 [DEBUG] [Thread-196135] [transport.py] [_log()] Compression: none
2026-04-12T21:22:26.953 [DEBUG] [Thread-196135] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:22:27.010 [DEBUG] [Thread-196135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:22:27.010 [DEBUG] [Thread-196135] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:22:27.010 [DEBUG] [Thread-196135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:22:27.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:22:27.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:22:27.067 [DEBUG] [Thread-196135] [transport.py] [_log()] userauth is OK
2026-04-12T21:22:27.067 [DEBUG] [Thread-196135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:22:27.067 [DEBUG] [Thread-196135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:22:27.068 [DEBUG] [Thread-196135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:22:27.068 [DEBUG] [Thread-196135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:22:27.086 [INFO] [Thread-196135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:22:27.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:22:27.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:22:27.931 [DEBUG] [Thread-196135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:22:27.931 [DEBUG] [Thread-196135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:22:27.979 [DEBUG] [Thread-196135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:22:27.980 [DEBUG] [Thread-196135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:22:27.988 [DEBUG] [Thread-196135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:22:27.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:22:27.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:22:28.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:22:28.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:22:28.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:22:28.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:22:28.022 [DEBUG] [Thread-196135] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:22:39.101 [DEBUG] [Thread-196137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:22:54.161 [DEBUG] [Thread-196138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:22:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:22:58.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:22:58.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:22:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 22, 45), 0.45899, 96.9406, 0.0, 11.7871, 11.6865, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:22:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:22:45
2026-04-12T21:22:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:22:59.853 [DEBUG] [Thread-196139] [transport.py] [_log()] starting thread (client mode): 0xae535fc0
2026-04-12T21:22:59.854 [DEBUG] [Thread-196139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:22:59.874 [DEBUG] [Thread-196139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:22:59.874 [INFO] [Thread-196139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:22:59.875 [DEBUG] [Thread-196139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] client lang: <none>
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] server lang: <none>
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] kex follows: False
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:22:59.876 [DEBUG] [Thread-196139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:22:59.877 [DEBUG] [Thread-196139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:22:59.877 [DEBUG] [Thread-196139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:22:59.877 [DEBUG] [Thread-196139] [transport.py] [_log()] Compression: none
2026-04-12T21:22:59.877 [DEBUG] [Thread-196139] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:22:59.890 [DEBUG] [Thread-196139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:22:59.891 [DEBUG] [Thread-196139] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:22:59.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:22:59.892 [DEBUG] [Thread-196139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:22:59.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:22:59.894 [DEBUG] [Thread-196139] [transport.py] [_log()] userauth is OK
2026-04-12T21:22:59.894 [DEBUG] [Thread-196139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:22:59.894 [DEBUG] [Thread-196139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:22:59.894 [DEBUG] [Thread-196139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:22:59.895 [DEBUG] [Thread-196139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:22:59.912 [INFO] [Thread-196139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:22:59.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:23:00.753 [DEBUG] [Thread-196139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:23:00.754 [DEBUG] [Thread-196139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:23:00.755 [DEBUG] [Thread-196139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:23:00.794 [DEBUG] [Thread-196139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:23:00.794 [DEBUG] [Thread-196139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:23:00.797 [DEBUG] [Thread-196139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:23:00.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:23:00.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:23:00.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:23:00.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:23:00.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:23:00.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:23:00.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.807050 -999.00  +11.60   6.59     94  +10.70 1 2 1 3 1     0    0 0.81 -1.68 ....W 6.6 6.6 198.2 10.4 13.2 -18.8 13.1 -17.8 12.8 -16.8 13.1 -18.9
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.807050
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:23:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:23:00.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:22:45', tmtdew=0.45899, humidity=96.9406, cloud=0.0, wind=11.7871, temperature=11.6865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:22:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:23:00.811 [DEBUG] [Thread-196139] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:23:00.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:23:00.893 [DEBUG] [Thread-196142] [transport.py] [_log()] starting thread (client mode): 0xae536c20
2026-04-12T21:23:00.893 [DEBUG] [Thread-196142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:23:00.908 [DEBUG] [Thread-196142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:23:00.908 [INFO] [Thread-196142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:23:00.916 [DEBUG] [Thread-196142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:23:00.916 [DEBUG] [Thread-196142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:23:00.916 [DEBUG] [Thread-196142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:23:00.916 [DEBUG] [Thread-196142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:23:00.916 [DEBUG] [Thread-196142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:23:00.916 [DEBUG] [Thread-196142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] client lang: <none>
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] server lang: <none>
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] kex follows: False
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] Compression: none
2026-04-12T21:23:00.917 [DEBUG] [Thread-196142] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:23:00.980 [DEBUG] [Thread-196142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:23:00.981 [DEBUG] [Thread-196142] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:23:00.981 [DEBUG] [Thread-196142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:23:00.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:23:00.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:23:01.039 [DEBUG] [Thread-196142] [transport.py] [_log()] userauth is OK
2026-04-12T21:23:01.040 [DEBUG] [Thread-196142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:23:01.040 [DEBUG] [Thread-196142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:23:01.040 [DEBUG] [Thread-196142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:23:01.040 [DEBUG] [Thread-196142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:23:01.061 [INFO] [Thread-196142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:23:01.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:23:01.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:23:01.903 [DEBUG] [Thread-196142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:23:01.903 [DEBUG] [Thread-196142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:23:01.951 [DEBUG] [Thread-196142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:23:01.951 [DEBUG] [Thread-196142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:23:01.961 [DEBUG] [Thread-196142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:23:01.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:23:01.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:23:01.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:23:01.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:23:01.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:23:01.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:23:01.998 [DEBUG] [Thread-196142] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:23:09.202 [DEBUG] [Thread-196144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:23:11.703 [DEBUG] [Thread-196145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:23:19.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:23:19.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:23:24.266 [DEBUG] [Thread-196146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:23:32.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:23:32.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:23:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:23:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 23, 20), 0.274335, 98.0035, 0.0, 9.44064, 11.3432, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:23:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:23:20
2026-04-12T21:23:33.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:23:33.834 [DEBUG] [Thread-196147] [transport.py] [_log()] starting thread (client mode): 0xb0f8d870
2026-04-12T21:23:33.834 [DEBUG] [Thread-196147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:23:33.855 [DEBUG] [Thread-196147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:23:33.855 [INFO] [Thread-196147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:23:33.858 [DEBUG] [Thread-196147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] client lang: <none>
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] server lang: <none>
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] kex follows: False
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] Compression: none
2026-04-12T21:23:33.859 [DEBUG] [Thread-196147] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:23:33.875 [DEBUG] [Thread-196147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:23:33.875 [DEBUG] [Thread-196147] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:23:33.876 [DEBUG] [Thread-196147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:23:33.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:23:33.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:23:33.877 [DEBUG] [Thread-196147] [transport.py] [_log()] userauth is OK
2026-04-12T21:23:33.878 [DEBUG] [Thread-196147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:23:33.878 [DEBUG] [Thread-196147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:23:33.878 [DEBUG] [Thread-196147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:23:33.878 [DEBUG] [Thread-196147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:23:33.910 [INFO] [Thread-196147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:23:33.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:23:34.719 [DEBUG] [Thread-196147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:23:34.720 [DEBUG] [Thread-196147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:23:34.720 [DEBUG] [Thread-196147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:23:34.761 [DEBUG] [Thread-196147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:23:34.761 [DEBUG] [Thread-196147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:23:34.764 [DEBUG] [Thread-196147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:23:34.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:23:34.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:23:34.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:23:34.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:23:34.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:23:34.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:23:34.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:23:34.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:23:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:23:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.807397 -999.00  +11.50   5.58     94  +10.70 1 2 1 3 1     0    0 0.80 -1.32 ....W 5.6 5.6 210.2 7.6 13.2 -18.3 13.1 -17.8 12.7 -16.7 13.1 -18.7
2026-04-12T21:23:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:23:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:23:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.807397
2026-04-12T21:23:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:23:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:23:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:23:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:23:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:23:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:23:20', tmtdew=0.274335, humidity=98.0035, cloud=0.0, wind=9.44064, temperature=11.3432, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:22:39.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:23:34.789 [DEBUG] [Thread-196147] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:23:34.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:23:34.885 [DEBUG] [Thread-196150] [transport.py] [_log()] starting thread (client mode): 0xae509390
2026-04-12T21:23:34.885 [DEBUG] [Thread-196150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:23:34.901 [DEBUG] [Thread-196150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:23:34.901 [INFO] [Thread-196150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:23:34.909 [DEBUG] [Thread-196150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:23:34.909 [DEBUG] [Thread-196150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:23:34.909 [DEBUG] [Thread-196150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:23:34.909 [DEBUG] [Thread-196150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] client lang: <none>
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] server lang: <none>
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] kex follows: False
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:23:34.910 [DEBUG] [Thread-196150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:23:34.911 [DEBUG] [Thread-196150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:23:34.911 [DEBUG] [Thread-196150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:23:34.911 [DEBUG] [Thread-196150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:23:34.911 [DEBUG] [Thread-196150] [transport.py] [_log()] Compression: none
2026-04-12T21:23:34.911 [DEBUG] [Thread-196150] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:23:34.967 [DEBUG] [Thread-196150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:23:34.968 [DEBUG] [Thread-196150] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:23:34.968 [DEBUG] [Thread-196150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:23:34.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:23:34.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:23:35.024 [DEBUG] [Thread-196150] [transport.py] [_log()] userauth is OK
2026-04-12T21:23:35.024 [DEBUG] [Thread-196150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:23:35.024 [DEBUG] [Thread-196150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:23:35.024 [DEBUG] [Thread-196150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:23:35.024 [DEBUG] [Thread-196150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:23:35.044 [INFO] [Thread-196150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:23:35.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:23:35.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:23:35.865 [DEBUG] [Thread-196150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:23:35.865 [DEBUG] [Thread-196150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:23:35.912 [DEBUG] [Thread-196150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:23:35.912 [DEBUG] [Thread-196150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:23:35.921 [DEBUG] [Thread-196150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:23:35.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:23:35.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:23:35.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:23:35.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:23:35.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:23:35.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:23:35.955 [DEBUG] [Thread-196150] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:23:39.300 [DEBUG] [Thread-196152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:23:54.355 [DEBUG] [Thread-196153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:24:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:24:05.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:24:05.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:24:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 23, 56), 0.276955, 97.9869, 0.0, 9.19368, 11.4098, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:24:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:23:56
2026-04-12T21:24:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:24:07.833 [DEBUG] [Thread-196154] [transport.py] [_log()] starting thread (client mode): 0xae5a51b0
2026-04-12T21:24:07.833 [DEBUG] [Thread-196154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:24:07.853 [DEBUG] [Thread-196154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:24:07.853 [INFO] [Thread-196154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:24:07.857 [DEBUG] [Thread-196154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] client lang: <none>
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] server lang: <none>
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] kex follows: False
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] Compression: none
2026-04-12T21:24:07.858 [DEBUG] [Thread-196154] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:24:07.871 [DEBUG] [Thread-196154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:24:07.872 [DEBUG] [Thread-196154] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:24:07.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:24:07.872 [DEBUG] [Thread-196154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:24:07.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:24:07.873 [DEBUG] [Thread-196154] [transport.py] [_log()] userauth is OK
2026-04-12T21:24:07.873 [DEBUG] [Thread-196154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:24:07.873 [DEBUG] [Thread-196154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:24:07.873 [DEBUG] [Thread-196154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:24:07.873 [DEBUG] [Thread-196154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:24:07.887 [INFO] [Thread-196154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:24:07.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:24:08.669 [DEBUG] [Thread-196154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:24:08.669 [DEBUG] [Thread-196154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:24:08.669 [DEBUG] [Thread-196154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:24:08.710 [DEBUG] [Thread-196154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:24:08.710 [DEBUG] [Thread-196154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:24:08.713 [DEBUG] [Thread-196154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:24:08.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:24:08.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:24:08.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:24:08.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:24:08.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:24:08.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:24:08.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:24:08.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:24:08.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:24:08.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.807744 -999.00  +11.50   5.10     94  +10.70 1 2 1 3 1     0    0 0.80 -1.32 ..esW 5.1 5.1 205.1 9.0 13.2 -19.0 13.0 -18.1 12.8 -16.7 13.1 -18.5
2026-04-12T21:24:08.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:24:08.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:24:08.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.807744
2026-04-12T21:24:08.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:24:08.740 [DEBUG] [Thread-196154] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:24:08.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:24:08.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:24:08.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:24:08.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:24:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:23:56', tmtdew=0.276955, humidity=97.9869, cloud=0.0, wind=9.19368, temperature=11.4098, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:23:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:24:08.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:24:08.836 [DEBUG] [Thread-196157] [transport.py] [_log()] starting thread (client mode): 0xb0f8d480
2026-04-12T21:24:08.836 [DEBUG] [Thread-196157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:24:08.851 [DEBUG] [Thread-196157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:24:08.851 [INFO] [Thread-196157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] client lang: <none>
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] server lang: <none>
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] kex follows: False
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:24:08.860 [DEBUG] [Thread-196157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:24:08.861 [DEBUG] [Thread-196157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:24:08.861 [DEBUG] [Thread-196157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:24:08.861 [DEBUG] [Thread-196157] [transport.py] [_log()] Compression: none
2026-04-12T21:24:08.861 [DEBUG] [Thread-196157] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:24:08.915 [DEBUG] [Thread-196157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:24:08.916 [DEBUG] [Thread-196157] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:24:08.917 [DEBUG] [Thread-196157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:24:08.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:24:08.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:24:08.972 [DEBUG] [Thread-196157] [transport.py] [_log()] userauth is OK
2026-04-12T21:24:08.973 [DEBUG] [Thread-196157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:24:08.973 [DEBUG] [Thread-196157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:24:08.973 [DEBUG] [Thread-196157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:24:08.973 [DEBUG] [Thread-196157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:24:08.992 [INFO] [Thread-196157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:24:08.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:24:08.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:24:09.392 [DEBUG] [Thread-196159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:24:09.844 [DEBUG] [Thread-196157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:24:09.845 [DEBUG] [Thread-196157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:24:09.892 [DEBUG] [Thread-196157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:24:09.893 [DEBUG] [Thread-196157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:24:09.902 [DEBUG] [Thread-196157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:24:09.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:24:09.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:24:09.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:24:09.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:24:09.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:24:09.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:24:09.941 [DEBUG] [Thread-196157] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:24:11.782 [DEBUG] [Thread-196160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:24:19.785 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:24:19.787 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:24:24.444 [DEBUG] [Thread-196161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:24:39.486 [DEBUG] [Thread-196162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:24:39.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:24:39.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:24:39.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:24:41.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 24, 32), 0.279495, 97.9703, 0.0, 9.2466, 11.3932, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:24:41.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:24:32
2026-04-12T21:24:41.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:24:41.739 [DEBUG] [Thread-196163] [transport.py] [_log()] starting thread (client mode): 0xae5a4070
2026-04-12T21:24:41.739 [DEBUG] [Thread-196163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:24:41.760 [DEBUG] [Thread-196163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:24:41.760 [INFO] [Thread-196163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:24:41.764 [DEBUG] [Thread-196163] [transport.py] [_log()] client lang: <none>
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] server lang: <none>
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] kex follows: False
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] Compression: none
2026-04-12T21:24:41.765 [DEBUG] [Thread-196163] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:24:41.786 [DEBUG] [Thread-196163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:24:41.786 [DEBUG] [Thread-196163] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:24:41.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:24:41.787 [DEBUG] [Thread-196163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:24:41.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:24:41.790 [DEBUG] [Thread-196163] [transport.py] [_log()] userauth is OK
2026-04-12T21:24:41.790 [DEBUG] [Thread-196163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:24:41.790 [DEBUG] [Thread-196163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:24:41.790 [DEBUG] [Thread-196163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:24:41.790 [DEBUG] [Thread-196163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:24:41.814 [INFO] [Thread-196163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:24:41.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:24:42.606 [DEBUG] [Thread-196163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:24:42.606 [DEBUG] [Thread-196163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:24:42.606 [DEBUG] [Thread-196163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:24:42.647 [DEBUG] [Thread-196163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:24:42.647 [DEBUG] [Thread-196163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:24:42.650 [DEBUG] [Thread-196163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:24:42.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:24:42.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:24:42.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:24:42.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:24:42.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:24:42.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:24:42.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:24:42.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:24:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:24:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.808092 -999.00  +11.50   6.05     94  +10.70 1 2 1 3 1     0    0 0.79 -1.72 ..esW 6.0 6.0 208.0 6.7 13.1 -19.5 13.0 -17.8 12.8 -16.7 13.0 -19.8
2026-04-12T21:24:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:24:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:24:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.808092
2026-04-12T21:24:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:24:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:24:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:24:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:24:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:24:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:24:32', tmtdew=0.279495, humidity=97.9703, cloud=0.0, wind=9.2466, temperature=11.3932, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:23:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:24:42.676 [DEBUG] [Thread-196163] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:24:42.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:24:42.770 [DEBUG] [Thread-196166] [transport.py] [_log()] starting thread (client mode): 0xae535fc0
2026-04-12T21:24:42.770 [DEBUG] [Thread-196166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:24:42.784 [DEBUG] [Thread-196166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:24:42.785 [INFO] [Thread-196166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:24:42.792 [DEBUG] [Thread-196166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:24:42.792 [DEBUG] [Thread-196166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:24:42.792 [DEBUG] [Thread-196166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:24:42.792 [DEBUG] [Thread-196166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] client lang: <none>
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] server lang: <none>
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] kex follows: False
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] Compression: none
2026-04-12T21:24:42.793 [DEBUG] [Thread-196166] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:24:42.851 [DEBUG] [Thread-196166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:24:42.852 [DEBUG] [Thread-196166] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:24:42.853 [DEBUG] [Thread-196166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:24:42.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:24:42.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:24:42.907 [DEBUG] [Thread-196166] [transport.py] [_log()] userauth is OK
2026-04-12T21:24:42.907 [DEBUG] [Thread-196166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:24:42.908 [DEBUG] [Thread-196166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:24:42.908 [DEBUG] [Thread-196166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:24:42.908 [DEBUG] [Thread-196166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:24:42.927 [INFO] [Thread-196166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:24:42.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:24:42.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:24:43.752 [DEBUG] [Thread-196166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:24:43.753 [DEBUG] [Thread-196166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:24:43.800 [DEBUG] [Thread-196166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:24:43.800 [DEBUG] [Thread-196166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:24:43.810 [DEBUG] [Thread-196166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:24:43.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:24:43.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:24:43.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:24:43.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:24:43.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:24:43.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:24:43.849 [DEBUG] [Thread-196166] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:24:54.523 [DEBUG] [Thread-196168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:25:09.577 [DEBUG] [Thread-196169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:25:11.865 [DEBUG] [Thread-196170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:25:13.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:25:13.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:25:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:25:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 25, 7), 0.276825, 97.9869, 0.0, 9.44064, 11.3601, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:25:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:25:07
2026-04-12T21:25:15.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:25:15.719 [DEBUG] [Thread-196171] [transport.py] [_log()] starting thread (client mode): 0xae509540
2026-04-12T21:25:15.719 [DEBUG] [Thread-196171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:25:15.742 [DEBUG] [Thread-196171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:25:15.742 [INFO] [Thread-196171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:25:15.745 [DEBUG] [Thread-196171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] client lang: <none>
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] server lang: <none>
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] kex follows: False
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] Compression: none
2026-04-12T21:25:15.746 [DEBUG] [Thread-196171] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:25:15.764 [DEBUG] [Thread-196171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:25:15.765 [DEBUG] [Thread-196171] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:25:15.765 [DEBUG] [Thread-196171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:25:15.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:25:15.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:25:15.767 [DEBUG] [Thread-196171] [transport.py] [_log()] userauth is OK
2026-04-12T21:25:15.767 [DEBUG] [Thread-196171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:25:15.767 [DEBUG] [Thread-196171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:25:15.768 [DEBUG] [Thread-196171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:25:15.768 [DEBUG] [Thread-196171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:25:15.785 [INFO] [Thread-196171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:25:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:25:16.848 [DEBUG] [Thread-196171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:25:16.848 [DEBUG] [Thread-196171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:25:16.848 [DEBUG] [Thread-196171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:25:16.889 [DEBUG] [Thread-196171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:25:16.889 [DEBUG] [Thread-196171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:25:16.893 [DEBUG] [Thread-196171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:25:16.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:25:16.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:25:16.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:25:16.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:25:16.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:25:16.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:25:16.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:25:16.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:25:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:25:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.808786 -999.00  +11.50   7.50     94  +10.70 1 2 1 3 1     0    0 0.78 -2.27 .N.s. 7.5 7.5 208.2 8.6 13.1 -16.3 12.9 -16.5 12.7 -15.6 13.0 -17.2
2026-04-12T21:25:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:25:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:25:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.808786
2026-04-12T21:25:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:25:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:25:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:25:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:25:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:25:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:25:07', tmtdew=0.276825, humidity=97.9869, cloud=0.0, wind=9.44064, temperature=11.3601, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:24:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:25:16.924 [DEBUG] [Thread-196171] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:25:17.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:25:17.020 [DEBUG] [Thread-196174] [transport.py] [_log()] starting thread (client mode): 0xae5a6860
2026-04-12T21:25:17.020 [DEBUG] [Thread-196174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:25:17.035 [DEBUG] [Thread-196174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:25:17.036 [INFO] [Thread-196174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:25:17.043 [DEBUG] [Thread-196174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:25:17.043 [DEBUG] [Thread-196174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:25:17.043 [DEBUG] [Thread-196174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:25:17.043 [DEBUG] [Thread-196174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] client lang: <none>
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] server lang: <none>
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] kex follows: False
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] Compression: none
2026-04-12T21:25:17.044 [DEBUG] [Thread-196174] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:25:17.103 [DEBUG] [Thread-196174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:25:17.104 [DEBUG] [Thread-196174] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:25:17.104 [DEBUG] [Thread-196174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:25:17.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:25:17.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:25:17.159 [DEBUG] [Thread-196174] [transport.py] [_log()] userauth is OK
2026-04-12T21:25:17.159 [DEBUG] [Thread-196174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:25:17.160 [DEBUG] [Thread-196174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:25:17.160 [DEBUG] [Thread-196174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:25:17.160 [DEBUG] [Thread-196174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:25:17.184 [INFO] [Thread-196174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:25:17.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:25:17.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:25:18.006 [DEBUG] [Thread-196174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:25:18.006 [DEBUG] [Thread-196174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:25:18.054 [DEBUG] [Thread-196174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:25:18.054 [DEBUG] [Thread-196174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:25:18.064 [DEBUG] [Thread-196174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:25:18.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:25:18.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:25:18.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:25:18.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:25:18.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:25:18.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:25:18.101 [DEBUG] [Thread-196174] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:25:19.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:25:19.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:25:24.614 [DEBUG] [Thread-196176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:25:39.666 [DEBUG] [Thread-196177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:25:48.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:25:48.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:25:48.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:25:49.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 25, 7), 0.276825, 97.9869, 0.0, 9.44064, 11.3601, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:25:49.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:25:07
2026-04-12T21:25:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:25:50.000 [DEBUG] [Thread-196178] [transport.py] [_log()] starting thread (client mode): 0xae560c40
2026-04-12T21:25:50.000 [DEBUG] [Thread-196178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:25:50.020 [DEBUG] [Thread-196178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:25:50.021 [INFO] [Thread-196178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:50.024 [DEBUG] [Thread-196178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] client lang: <none>
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] server lang: <none>
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] kex follows: False
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] Compression: none
2026-04-12T21:25:50.025 [DEBUG] [Thread-196178] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:25:50.044 [DEBUG] [Thread-196178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:25:50.045 [DEBUG] [Thread-196178] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:25:50.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:25:50.046 [DEBUG] [Thread-196178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:25:50.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:25:50.048 [DEBUG] [Thread-196178] [transport.py] [_log()] userauth is OK
2026-04-12T21:25:50.048 [DEBUG] [Thread-196178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:25:50.049 [DEBUG] [Thread-196178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:25:50.049 [DEBUG] [Thread-196178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:25:50.049 [DEBUG] [Thread-196178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:25:50.074 [INFO] [Thread-196178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:25:50.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:25:50.867 [DEBUG] [Thread-196178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:25:50.867 [DEBUG] [Thread-196178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:25:50.868 [DEBUG] [Thread-196178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:25:50.908 [DEBUG] [Thread-196178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:25:50.908 [DEBUG] [Thread-196178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:25:50.912 [DEBUG] [Thread-196178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:25:50.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:25:50.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:25:50.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:25:50.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:25:50.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:25:50.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:25:50.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:25:50.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:25:50.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:25:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.809133 -999.00  +11.50   5.91     94  +10.70 1 2 1 3 1     0    0 0.78 -2.22 .N.s. 5.9 5.9 208.1 6.6 13.1 -18.8 12.9 -17.0 12.7 -16.2 13.0 -18.1
2026-04-12T21:25:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:25:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:25:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.809133
2026-04-12T21:25:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:25:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:25:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:25:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:25:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:25:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:25:07', tmtdew=0.276825, humidity=97.9869, cloud=0.0, wind=9.44064, temperature=11.3601, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:25:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.60975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3707499999999984, nan, nan, nan, nan, nan, 2.26, 1.8925, 1.5395000000000012, 2.3660000000000014, nan, nan], zp_timestamp='2026-04-12T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:25:50.941 [DEBUG] [Thread-196178] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:25:51.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:25:51.035 [DEBUG] [Thread-196181] [transport.py] [_log()] starting thread (client mode): 0xae5b21a0
2026-04-12T21:25:51.035 [DEBUG] [Thread-196181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:25:51.049 [DEBUG] [Thread-196181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:25:51.049 [INFO] [Thread-196181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] client lang: <none>
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] server lang: <none>
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] kex follows: False
2026-04-12T21:25:51.057 [DEBUG] [Thread-196181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:25:51.058 [DEBUG] [Thread-196181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:25:51.058 [DEBUG] [Thread-196181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:25:51.058 [DEBUG] [Thread-196181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:25:51.058 [DEBUG] [Thread-196181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:25:51.058 [DEBUG] [Thread-196181] [transport.py] [_log()] Compression: none
2026-04-12T21:25:51.058 [DEBUG] [Thread-196181] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:25:51.115 [DEBUG] [Thread-196181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:25:51.116 [DEBUG] [Thread-196181] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:25:51.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:25:51.117 [DEBUG] [Thread-196181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:25:51.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:25:51.171 [DEBUG] [Thread-196181] [transport.py] [_log()] userauth is OK
2026-04-12T21:25:51.171 [DEBUG] [Thread-196181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:25:51.172 [DEBUG] [Thread-196181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:25:51.172 [DEBUG] [Thread-196181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:25:51.172 [DEBUG] [Thread-196181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:25:51.190 [INFO] [Thread-196181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:25:51.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:25:51.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:25:51.967 [DEBUG] [Thread-196181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:25:51.968 [DEBUG] [Thread-196181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:25:52.015 [DEBUG] [Thread-196181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:25:52.016 [DEBUG] [Thread-196181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:25:52.024 [DEBUG] [Thread-196181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:25:52.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:25:52.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:25:52.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:25:52.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:25:52.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:25:52.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:25:52.058 [DEBUG] [Thread-196181] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:25:54.702 [DEBUG] [Thread-196183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:09.762 [DEBUG] [Thread-196184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:11.923 [DEBUG] [Thread-196185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:20.196 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:20.198 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:22.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:26:22.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:26:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:26:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 25, 42), 0.45374, 96.9738, 0.0, 10.764, 11.6533, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:26:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:25:42
2026-04-12T21:26:24.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:26:24.210 [DEBUG] [Thread-196186] [transport.py] [_log()] starting thread (client mode): 0xae560250
2026-04-12T21:26:24.210 [DEBUG] [Thread-196186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:26:24.231 [DEBUG] [Thread-196186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:26:24.232 [INFO] [Thread-196186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] client lang: <none>
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] server lang: <none>
2026-04-12T21:26:24.235 [DEBUG] [Thread-196186] [transport.py] [_log()] kex follows: False
2026-04-12T21:26:24.236 [DEBUG] [Thread-196186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:26:24.236 [DEBUG] [Thread-196186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:26:24.236 [DEBUG] [Thread-196186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:26:24.236 [DEBUG] [Thread-196186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:26:24.236 [DEBUG] [Thread-196186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:26:24.236 [DEBUG] [Thread-196186] [transport.py] [_log()] Compression: none
2026-04-12T21:26:24.236 [DEBUG] [Thread-196186] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:26:24.253 [DEBUG] [Thread-196186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:26:24.254 [DEBUG] [Thread-196186] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:26:24.254 [DEBUG] [Thread-196186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:26:24.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:26:24.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:26:24.256 [DEBUG] [Thread-196186] [transport.py] [_log()] userauth is OK
2026-04-12T21:26:24.257 [DEBUG] [Thread-196186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:26:24.257 [DEBUG] [Thread-196186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:26:24.257 [DEBUG] [Thread-196186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:26:24.257 [DEBUG] [Thread-196186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:26:24.293 [INFO] [Thread-196186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:26:24.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:26:24.799 [DEBUG] [Thread-196188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:25.076 [DEBUG] [Thread-196186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:26:25.076 [DEBUG] [Thread-196186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:26:25.076 [DEBUG] [Thread-196186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:26:25.117 [DEBUG] [Thread-196186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:26:25.117 [DEBUG] [Thread-196186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:26:25.120 [DEBUG] [Thread-196186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:26:25.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:26:25.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:26:25.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:26:25.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:26:25.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:26:25.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:26:25.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:26:25.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:26:25.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:26:25.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.809480 -999.00  +11.50   7.11     94  +10.70 1 2 1 3 1     0    0 0.77 -2.31 .N.s. 7.1 7.1 205.6 8.3 13.1 -19.5 13.0 -18.0 12.7 -16.8 13.0 -18.1
2026-04-12T21:26:25.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:26:25.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:26:25.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.809480
2026-04-12T21:26:25.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:26:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:26:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:26:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:26:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:26:25.148 [DEBUG] [Thread-196186] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:26:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:25:42', tmtdew=0.45374, humidity=96.9738, cloud=0.0, wind=10.764, temperature=11.6533, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:25:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:26:25.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:26:25.241 [DEBUG] [Thread-196190] [transport.py] [_log()] starting thread (client mode): 0xae5e6500
2026-04-12T21:26:25.241 [DEBUG] [Thread-196190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:26:25.261 [DEBUG] [Thread-196190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:26:25.262 [INFO] [Thread-196190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] client lang: <none>
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] server lang: <none>
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] kex follows: False
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:26:25.269 [DEBUG] [Thread-196190] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:26:25.270 [DEBUG] [Thread-196190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:26:25.270 [DEBUG] [Thread-196190] [transport.py] [_log()] Compression: none
2026-04-12T21:26:25.270 [DEBUG] [Thread-196190] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:26:25.327 [DEBUG] [Thread-196190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:26:25.328 [DEBUG] [Thread-196190] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:26:25.328 [DEBUG] [Thread-196190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:26:25.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:26:25.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:26:25.383 [DEBUG] [Thread-196190] [transport.py] [_log()] userauth is OK
2026-04-12T21:26:25.383 [DEBUG] [Thread-196190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:26:25.383 [DEBUG] [Thread-196190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:26:25.383 [DEBUG] [Thread-196190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:26:25.383 [DEBUG] [Thread-196190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:26:25.401 [INFO] [Thread-196190] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:26:25.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:26:25.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:26:26.224 [DEBUG] [Thread-196190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:26:26.224 [DEBUG] [Thread-196190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:26:26.272 [DEBUG] [Thread-196190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:26:26.272 [DEBUG] [Thread-196190] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:26:26.281 [DEBUG] [Thread-196190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:26:26.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:26:26.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:26:26.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:26:26.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:26:26.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:26:26.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:26:26.318 [DEBUG] [Thread-196190] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:26:39.836 [DEBUG] [Thread-196192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:54.899 [DEBUG] [Thread-196193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:26:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:26:56.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:26:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:26:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 26, 18), 0.27925, 97.9707, 0.0, 9.31716, 11.2772, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:26:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:26:18
2026-04-12T21:26:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:26:58.194 [DEBUG] [Thread-196194] [transport.py] [_log()] starting thread (client mode): 0xae561b70
2026-04-12T21:26:58.194 [DEBUG] [Thread-196194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:26:58.214 [DEBUG] [Thread-196194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:26:58.215 [INFO] [Thread-196194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] client lang: <none>
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] server lang: <none>
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] kex follows: False
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:26:58.218 [DEBUG] [Thread-196194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:26:58.219 [DEBUG] [Thread-196194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:26:58.219 [DEBUG] [Thread-196194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:26:58.219 [DEBUG] [Thread-196194] [transport.py] [_log()] Compression: none
2026-04-12T21:26:58.219 [DEBUG] [Thread-196194] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:26:58.237 [DEBUG] [Thread-196194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:26:58.237 [DEBUG] [Thread-196194] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:26:58.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:26:58.238 [DEBUG] [Thread-196194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:26:58.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:26:58.240 [DEBUG] [Thread-196194] [transport.py] [_log()] userauth is OK
2026-04-12T21:26:58.241 [DEBUG] [Thread-196194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:26:58.241 [DEBUG] [Thread-196194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:26:58.241 [DEBUG] [Thread-196194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:26:58.241 [DEBUG] [Thread-196194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:26:58.276 [INFO] [Thread-196194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:26:58.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:26:59.059 [DEBUG] [Thread-196194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:26:59.059 [DEBUG] [Thread-196194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:26:59.060 [DEBUG] [Thread-196194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:26:59.100 [DEBUG] [Thread-196194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:26:59.100 [DEBUG] [Thread-196194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:26:59.103 [DEBUG] [Thread-196194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:26:59.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:26:59.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:26:59.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:26:59.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:26:59.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:26:59.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:26:59.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:26:59.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:26:59.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:26:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.809828 -999.00  +11.50   4.30     94  +10.70 1 2 1 3 1     0    0 0.76 -2.24 z.ESw 4.3 4.3 201.4 7.6 13.1 -19.0 12.9 -17.3 12.7 -16.3 12.9 -17.5
2026-04-12T21:26:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:26:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:26:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.809828
2026-04-12T21:26:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:26:59.139 [DEBUG] [Thread-196194] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:26:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:26:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:26:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:26:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:26:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:26:18', tmtdew=0.27925, humidity=97.9707, cloud=0.0, wind=9.31716, temperature=11.2772, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:26:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:26:59.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:26:59.234 [DEBUG] [Thread-196197] [transport.py] [_log()] starting thread (client mode): 0xae562680
2026-04-12T21:26:59.234 [DEBUG] [Thread-196197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:26:59.249 [DEBUG] [Thread-196197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:26:59.249 [INFO] [Thread-196197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:26:59.257 [DEBUG] [Thread-196197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:26:59.257 [DEBUG] [Thread-196197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:26:59.257 [DEBUG] [Thread-196197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:26:59.257 [DEBUG] [Thread-196197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:59.257 [DEBUG] [Thread-196197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:26:59.257 [DEBUG] [Thread-196197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:59.257 [DEBUG] [Thread-196197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] client lang: <none>
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] server lang: <none>
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] kex follows: False
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:26:59.258 [DEBUG] [Thread-196197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:26:59.259 [DEBUG] [Thread-196197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:26:59.259 [DEBUG] [Thread-196197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:26:59.259 [DEBUG] [Thread-196197] [transport.py] [_log()] Compression: none
2026-04-12T21:26:59.259 [DEBUG] [Thread-196197] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:26:59.316 [DEBUG] [Thread-196197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:26:59.317 [DEBUG] [Thread-196197] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:26:59.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:26:59.319 [DEBUG] [Thread-196197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:26:59.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:26:59.376 [DEBUG] [Thread-196197] [transport.py] [_log()] userauth is OK
2026-04-12T21:26:59.376 [DEBUG] [Thread-196197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:26:59.376 [DEBUG] [Thread-196197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:26:59.376 [DEBUG] [Thread-196197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:26:59.377 [DEBUG] [Thread-196197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:26:59.398 [INFO] [Thread-196197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:26:59.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:26:59.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:27:00.237 [DEBUG] [Thread-196197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:27:00.238 [DEBUG] [Thread-196197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:27:00.286 [DEBUG] [Thread-196197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:27:00.286 [DEBUG] [Thread-196197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:27:00.295 [DEBUG] [Thread-196197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:27:00.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:27:00.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:27:00.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:27:00.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:27:00.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:27:00.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:27:00.332 [DEBUG] [Thread-196197] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:27:09.935 [DEBUG] [Thread-196199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:27:11.987 [DEBUG] [Thread-196200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:27:20.405 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:27:20.406 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:27:24.977 [DEBUG] [Thread-196201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:27:30.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:27:30.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:27: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
2026-04-12T21:27:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 26, 54), 0.221785, 98.0204, 0.0, 9.19368, 11.3766, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:27:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:26:54
2026-04-12T21:27:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:27:32.202 [DEBUG] [Thread-196202] [transport.py] [_log()] starting thread (client mode): 0xae5b0160
2026-04-12T21:27:32.202 [DEBUG] [Thread-196202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:27:32.216 [DEBUG] [Thread-196202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:27:32.217 [INFO] [Thread-196202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:27:32.219 [DEBUG] [Thread-196202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] client lang: <none>
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] server lang: <none>
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] kex follows: False
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:27:32.220 [DEBUG] [Thread-196202] [transport.py] [_log()] Compression: none
2026-04-12T21:27:32.221 [DEBUG] [Thread-196202] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:27:32.237 [DEBUG] [Thread-196202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:27:32.237 [DEBUG] [Thread-196202] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:27:32.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:27:32.238 [DEBUG] [Thread-196202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:27:32.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:27:32.240 [DEBUG] [Thread-196202] [transport.py] [_log()] userauth is OK
2026-04-12T21:27:32.240 [DEBUG] [Thread-196202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:27:32.240 [DEBUG] [Thread-196202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:27:32.240 [DEBUG] [Thread-196202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:27:32.240 [DEBUG] [Thread-196202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:27:32.258 [INFO] [Thread-196202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:27:32.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:27:33.039 [DEBUG] [Thread-196202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:27:33.039 [DEBUG] [Thread-196202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:27:33.040 [DEBUG] [Thread-196202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:27:33.080 [DEBUG] [Thread-196202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:27:33.080 [DEBUG] [Thread-196202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:27:33.083 [DEBUG] [Thread-196202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:27:33.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:27:33.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:27:33.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:27:33.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:27:33.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:27:33.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:27:33.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:27:33.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:27:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:27:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.810175 -999.00  +11.50   5.10     94  +10.70 1 2 1 3 1     0    0 0.77 -2.60 z.ESw 5.1 5.1 205.2 7.6 13.0 -17.3 12.9 -16.5 12.7 -15.8 12.9 -18.1
2026-04-12T21:27:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:27:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:27:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.810175
2026-04-12T21:27:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:27:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:27:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:27:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:27:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:27:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:26:54', tmtdew=0.221785, humidity=98.0204, cloud=0.0, wind=9.19368, temperature=11.3766, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:26:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:27:33.113 [DEBUG] [Thread-196202] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:27:33.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:27:33.206 [DEBUG] [Thread-196205] [transport.py] [_log()] starting thread (client mode): 0xae5b1300
2026-04-12T21:27:33.206 [DEBUG] [Thread-196205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:27:33.221 [DEBUG] [Thread-196205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:27:33.222 [INFO] [Thread-196205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:27:33.238 [DEBUG] [Thread-196205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:27:33.238 [DEBUG] [Thread-196205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:27:33.238 [DEBUG] [Thread-196205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] client lang: <none>
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] server lang: <none>
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] kex follows: False
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:27:33.239 [DEBUG] [Thread-196205] [transport.py] [_log()] Compression: none
2026-04-12T21:27:33.240 [DEBUG] [Thread-196205] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:27:33.289 [DEBUG] [Thread-196205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:27:33.289 [DEBUG] [Thread-196205] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:27:33.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:27:33.291 [DEBUG] [Thread-196205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:27:33.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:27:33.344 [DEBUG] [Thread-196205] [transport.py] [_log()] userauth is OK
2026-04-12T21:27:33.344 [DEBUG] [Thread-196205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:27:33.344 [DEBUG] [Thread-196205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:27:33.344 [DEBUG] [Thread-196205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:27:33.344 [DEBUG] [Thread-196205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:27:33.362 [INFO] [Thread-196205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:27:33.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:27:33.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:27:34.180 [DEBUG] [Thread-196205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:27:34.180 [DEBUG] [Thread-196205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:27:34.228 [DEBUG] [Thread-196205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:27:34.229 [DEBUG] [Thread-196205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:27:34.237 [DEBUG] [Thread-196205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:27:34.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:27:34.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:27:34.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:27:34.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:27:34.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:27:34.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:27:34.271 [DEBUG] [Thread-196205] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:27:40.014 [DEBUG] [Thread-196207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:27:55.061 [DEBUG] [Thread-196208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:28:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:28:04.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:28:04.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:28:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 27, 30), 0.21654, 98.0539, 0.0, 9.05256, 11.3603, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:28:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:27:30
2026-04-12T21:28:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:28:06.180 [DEBUG] [Thread-196209] [transport.py] [_log()] starting thread (client mode): 0xa795af20
2026-04-12T21:28:06.180 [DEBUG] [Thread-196209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:28:06.200 [DEBUG] [Thread-196209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:28:06.200 [INFO] [Thread-196209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] client lang: <none>
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] server lang: <none>
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] kex follows: False
2026-04-12T21:28:06.203 [DEBUG] [Thread-196209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:28:06.204 [DEBUG] [Thread-196209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:28:06.204 [DEBUG] [Thread-196209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:28:06.204 [DEBUG] [Thread-196209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:28:06.204 [DEBUG] [Thread-196209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:28:06.204 [DEBUG] [Thread-196209] [transport.py] [_log()] Compression: none
2026-04-12T21:28:06.204 [DEBUG] [Thread-196209] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:28:06.220 [DEBUG] [Thread-196209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:28:06.221 [DEBUG] [Thread-196209] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:28:06.221 [DEBUG] [Thread-196209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:28:06.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:28:06.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:28:06.223 [DEBUG] [Thread-196209] [transport.py] [_log()] userauth is OK
2026-04-12T21:28:06.223 [DEBUG] [Thread-196209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:28:06.224 [DEBUG] [Thread-196209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:28:06.224 [DEBUG] [Thread-196209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:28:06.224 [DEBUG] [Thread-196209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:28:06.259 [INFO] [Thread-196209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:28:06.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:28:07.059 [DEBUG] [Thread-196209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:28:07.059 [DEBUG] [Thread-196209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:28:07.060 [DEBUG] [Thread-196209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:28:07.100 [DEBUG] [Thread-196209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:28:07.100 [DEBUG] [Thread-196209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:28:07.104 [DEBUG] [Thread-196209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:28:07.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:28:07.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:28:07.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:28:07.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:28:07.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:28:07.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:28:07.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:28:07.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:28:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:28:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.810522 -999.00  +11.50   4.31     94  +10.70 1 2 1 3 1     0    0 0.77 -3.15 ..e.w 4.3 4.3 228.2 7.2 13.1 -19.6 12.9 -17.6 12.7 -17.0 12.9 -18.1
2026-04-12T21:28:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:28:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:28:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.810522
2026-04-12T21:28:07.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:28:07.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:28:07.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:28:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:28:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:28:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:27:30', tmtdew=0.21654, humidity=98.0539, cloud=0.0, wind=9.05256, temperature=11.3603, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:27:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:28:07.131 [DEBUG] [Thread-196209] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:28:07.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:28:07.221 [DEBUG] [Thread-196212] [transport.py] [_log()] starting thread (client mode): 0xa795bac0
2026-04-12T21:28:07.221 [DEBUG] [Thread-196212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:28:07.236 [DEBUG] [Thread-196212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:28:07.236 [INFO] [Thread-196212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:28:07.243 [DEBUG] [Thread-196212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:28:07.244 [DEBUG] [Thread-196212] [transport.py] [_log()] client lang: <none>
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] server lang: <none>
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] kex follows: False
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:28:07.245 [DEBUG] [Thread-196212] [transport.py] [_log()] Compression: none
2026-04-12T21:28:07.246 [DEBUG] [Thread-196212] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:28:07.302 [DEBUG] [Thread-196212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:28:07.303 [DEBUG] [Thread-196212] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:28:07.303 [DEBUG] [Thread-196212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:28:07.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:28:07.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:28:07.361 [DEBUG] [Thread-196212] [transport.py] [_log()] userauth is OK
2026-04-12T21:28:07.362 [DEBUG] [Thread-196212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:28:07.362 [DEBUG] [Thread-196212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:28:07.362 [DEBUG] [Thread-196212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:28:07.362 [DEBUG] [Thread-196212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:28:07.380 [INFO] [Thread-196212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:28:07.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:28:07.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:28:08.212 [DEBUG] [Thread-196212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:28:08.213 [DEBUG] [Thread-196212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:28:08.261 [DEBUG] [Thread-196212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:28:08.261 [DEBUG] [Thread-196212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:28:08.270 [DEBUG] [Thread-196212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:28:08.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:28:08.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:28:08.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:28:08.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:28:08.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:28:08.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:28:08.309 [DEBUG] [Thread-196212] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:28:10.095 [DEBUG] [Thread-196214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:28:12.042 [DEBUG] [Thread-196215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:28:20.615 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:28:20.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:28:25.155 [DEBUG] [Thread-196216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:28:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:28:38.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:28:38.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:28:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 28, 5), 0.221605, 98.0208, 0.0, 9.1584, 11.3271, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:28:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:28:05
2026-04-12T21:28:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:28:40.147 [DEBUG] [Thread-196217] [transport.py] [_log()] starting thread (client mode): 0xa7958130
2026-04-12T21:28:40.147 [DEBUG] [Thread-196217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:28:40.167 [DEBUG] [Thread-196217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:28:40.167 [INFO] [Thread-196217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:28:40.170 [DEBUG] [Thread-196217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] client lang: <none>
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] server lang: <none>
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] kex follows: False
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] Compression: none
2026-04-12T21:28:40.171 [DEBUG] [Thread-196217] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:28:40.188 [DEBUG] [Thread-196217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:28:40.188 [DEBUG] [Thread-196217] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:28:40.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:28:40.189 [DEBUG] [Thread-196217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:28:40.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:28:40.191 [DEBUG] [Thread-196219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:28:40.192 [DEBUG] [Thread-196217] [transport.py] [_log()] userauth is OK
2026-04-12T21:28:40.192 [DEBUG] [Thread-196217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:28:40.192 [DEBUG] [Thread-196217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:28:40.192 [DEBUG] [Thread-196217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:28:40.192 [DEBUG] [Thread-196217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:28:40.228 [INFO] [Thread-196217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:28:40.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:28:41.016 [DEBUG] [Thread-196217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:28:41.016 [DEBUG] [Thread-196217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:28:41.017 [DEBUG] [Thread-196217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:28:41.057 [DEBUG] [Thread-196217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:28:41.057 [DEBUG] [Thread-196217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:28:41.061 [DEBUG] [Thread-196217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:28:41.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:28:41.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:28:41.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:28:41.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:28:41.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:28:41.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:28:41.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:28:41.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:28:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:28:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.811216 -999.00  +11.50   7.96     94  +10.60 1 2 1 3 1     0    0 0.74 -3.52 ....w 8.0 8.0 206.6 9.6 13.0 -18.5 12.9 -16.9 12.6 -15.8 12.9 -17.7
2026-04-12T21:28:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:28:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:28:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.811216
2026-04-12T21:28:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:28:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:28:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:28:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:28:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:28:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:28:05', tmtdew=0.221605, humidity=98.0208, cloud=0.0, wind=9.1584, temperature=11.3271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:28:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:28:41.089 [DEBUG] [Thread-196217] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:28:41.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:28:41.182 [DEBUG] [Thread-196221] [transport.py] [_log()] starting thread (client mode): 0xa79592a0
2026-04-12T21:28:41.183 [DEBUG] [Thread-196221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:28:41.202 [DEBUG] [Thread-196221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:28:41.202 [INFO] [Thread-196221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] client lang: <none>
2026-04-12T21:28:41.210 [DEBUG] [Thread-196221] [transport.py] [_log()] server lang: <none>
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] kex follows: False
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] Compression: none
2026-04-12T21:28:41.211 [DEBUG] [Thread-196221] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:28:41.270 [DEBUG] [Thread-196221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:28:41.271 [DEBUG] [Thread-196221] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:28:41.272 [DEBUG] [Thread-196221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:28:41.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:28:41.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:28:41.326 [DEBUG] [Thread-196221] [transport.py] [_log()] userauth is OK
2026-04-12T21:28:41.327 [DEBUG] [Thread-196221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:28:41.327 [DEBUG] [Thread-196221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:28:41.327 [DEBUG] [Thread-196221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:28:41.327 [DEBUG] [Thread-196221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:28:41.353 [INFO] [Thread-196221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:28:41.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:28:41.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:28:42.215 [DEBUG] [Thread-196221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:28:42.215 [DEBUG] [Thread-196221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:28:42.263 [DEBUG] [Thread-196221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:28:42.263 [DEBUG] [Thread-196221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:28:42.273 [DEBUG] [Thread-196221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:28:42.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:28:42.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:28: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
2026-04-12T21:28:42.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:28:42.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:28:42.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:28:42.310 [DEBUG] [Thread-196221] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:28:55.227 [DEBUG] [Thread-196223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:29:10.285 [DEBUG] [Thread-196224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:29:12.111 [DEBUG] [Thread-196225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:29:12.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:29:12.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:29:12.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:29:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 28, 41), 0.44838, 97.0089, 0.0, 9.21168, 11.6877, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:29:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:28:41
2026-04-12T21:29:13.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:29:14.120 [DEBUG] [Thread-196226] [transport.py] [_log()] starting thread (client mode): 0xa795ac20
2026-04-12T21:29:14.120 [DEBUG] [Thread-196226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:29:14.140 [DEBUG] [Thread-196226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:29:14.141 [INFO] [Thread-196226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:29:14.144 [DEBUG] [Thread-196226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:29:14.144 [DEBUG] [Thread-196226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:29:14.144 [DEBUG] [Thread-196226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:29:14.144 [DEBUG] [Thread-196226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:14.144 [DEBUG] [Thread-196226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] client lang: <none>
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] server lang: <none>
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] kex follows: False
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:29:14.145 [DEBUG] [Thread-196226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:29:14.146 [DEBUG] [Thread-196226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:29:14.146 [DEBUG] [Thread-196226] [transport.py] [_log()] Compression: none
2026-04-12T21:29:14.146 [DEBUG] [Thread-196226] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:29:14.165 [DEBUG] [Thread-196226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:29:14.166 [DEBUG] [Thread-196226] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:29:14.166 [DEBUG] [Thread-196226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:29:14.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:29:14.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:29:14.168 [DEBUG] [Thread-196226] [transport.py] [_log()] userauth is OK
2026-04-12T21:29:14.169 [DEBUG] [Thread-196226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:29:14.169 [DEBUG] [Thread-196226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:29:14.169 [DEBUG] [Thread-196226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:29:14.169 [DEBUG] [Thread-196226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:29:14.192 [INFO] [Thread-196226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:29:14.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:29:14.960 [DEBUG] [Thread-196226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:29:14.960 [DEBUG] [Thread-196226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:29:14.960 [DEBUG] [Thread-196226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:29:15.001 [DEBUG] [Thread-196226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:29:15.001 [DEBUG] [Thread-196226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:29:15.005 [DEBUG] [Thread-196226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:29:15.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:29:15.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:29:15.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:29:15.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:29:15.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:29:15.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:29:15.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:29:15.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:29:15.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:29:15.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.811564 -999.00  +11.50   4.43     94  +10.60 1 2 1 3 1     0    0 0.76 -3.24 ..EsW 4.4 4.4 211.6 5.7 13.0 -17.5 12.8 -16.2 12.6 -15.9 12.9 -17.3
2026-04-12T21:29:15.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:29:15.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:29:15.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.811564
2026-04-12T21:29:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:29:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:29:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:29:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:29:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:29:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:28:41', tmtdew=0.44838, humidity=97.0089, cloud=0.0, wind=9.21168, temperature=11.6877, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:28:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:29:15.033 [DEBUG] [Thread-196226] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:29:15.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:29:15.126 [DEBUG] [Thread-196229] [transport.py] [_log()] starting thread (client mode): 0xa795a320
2026-04-12T21:29:15.126 [DEBUG] [Thread-196229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:29:15.141 [DEBUG] [Thread-196229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:29:15.141 [INFO] [Thread-196229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:29:15.148 [DEBUG] [Thread-196229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] client lang: <none>
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] server lang: <none>
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] kex follows: False
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:29:15.149 [DEBUG] [Thread-196229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:29:15.150 [DEBUG] [Thread-196229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:29:15.150 [DEBUG] [Thread-196229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:29:15.150 [DEBUG] [Thread-196229] [transport.py] [_log()] Compression: none
2026-04-12T21:29:15.150 [DEBUG] [Thread-196229] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:29:15.208 [DEBUG] [Thread-196229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:29:15.208 [DEBUG] [Thread-196229] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:29:15.209 [DEBUG] [Thread-196229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:29:15.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:29:15.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:29:15.264 [DEBUG] [Thread-196229] [transport.py] [_log()] userauth is OK
2026-04-12T21:29:15.265 [DEBUG] [Thread-196229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:29:15.265 [DEBUG] [Thread-196229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:29:15.265 [DEBUG] [Thread-196229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:29:15.265 [DEBUG] [Thread-196229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:29:15.284 [INFO] [Thread-196229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:29:15.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:29:15.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:29:16.071 [DEBUG] [Thread-196229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:29:16.071 [DEBUG] [Thread-196229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:29:16.120 [DEBUG] [Thread-196229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:29:16.120 [DEBUG] [Thread-196229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:29:16.130 [DEBUG] [Thread-196229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:29:16.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:29:16.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:29:16.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:29:16.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:29:16.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:29:16.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:29:16.167 [DEBUG] [Thread-196229] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:29:20.823 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:29:20.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:29:25.325 [DEBUG] [Thread-196231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:29:40.378 [DEBUG] [Thread-196232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:29:46.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:29:46.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:29:46.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:29:47.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 29, 17), 0.279165, 97.9713, 0.0, 9.38772, 11.2775, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:29:47.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:29:17
2026-04-12T21:29:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:29:48.004 [DEBUG] [Thread-196233] [transport.py] [_log()] starting thread (client mode): 0xa7958340
2026-04-12T21:29:48.004 [DEBUG] [Thread-196233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:29:48.026 [DEBUG] [Thread-196233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:29:48.026 [INFO] [Thread-196233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:29:48.027 [DEBUG] [Thread-196233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] client lang: <none>
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] server lang: <none>
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] kex follows: False
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] Compression: none
2026-04-12T21:29:48.028 [DEBUG] [Thread-196233] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:29:48.045 [DEBUG] [Thread-196233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:29:48.045 [DEBUG] [Thread-196233] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:29:48.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:29:48.046 [DEBUG] [Thread-196233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:29:48.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:29:48.049 [DEBUG] [Thread-196233] [transport.py] [_log()] userauth is OK
2026-04-12T21:29:48.049 [DEBUG] [Thread-196233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:29:48.049 [DEBUG] [Thread-196233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:29:48.049 [DEBUG] [Thread-196233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:29:48.049 [DEBUG] [Thread-196233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:29:48.075 [INFO] [Thread-196233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:29:48.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:29:48.875 [DEBUG] [Thread-196233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:29:48.875 [DEBUG] [Thread-196233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:29:48.875 [DEBUG] [Thread-196233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:29:48.916 [DEBUG] [Thread-196233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:29:48.916 [DEBUG] [Thread-196233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:29:48.919 [DEBUG] [Thread-196233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:29:48.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:29:48.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:29:48.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:29:48.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:29:48.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:29:48.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:29:48.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:29:48.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:29:48.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:29:48.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.811911 -999.00  +11.50   5.30     94  +10.70 1 2 1 3 1     0    0 0.75 -3.70 ..... 5.3 5.3 194.7 7.9 13.0 -17.6 12.9 -16.1 12.6 -15.4 12.9 -17.0
2026-04-12T21:29:48.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:29:48.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:29:48.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.811911
2026-04-12T21:29:48.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:29:48.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:29:48.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:29:48.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:29:48.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:29:48.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:29:17', tmtdew=0.279165, humidity=97.9713, cloud=0.0, wind=9.38772, temperature=11.2775, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:29:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:29:48.945 [DEBUG] [Thread-196233] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:29:49.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:29:49.038 [DEBUG] [Thread-196236] [transport.py] [_log()] starting thread (client mode): 0xae5b2140
2026-04-12T21:29:49.038 [DEBUG] [Thread-196236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:29:49.053 [DEBUG] [Thread-196236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:29:49.053 [INFO] [Thread-196236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] client lang: <none>
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] server lang: <none>
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] kex follows: False
2026-04-12T21:29:49.061 [DEBUG] [Thread-196236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:29:49.062 [DEBUG] [Thread-196236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:29:49.062 [DEBUG] [Thread-196236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:29:49.062 [DEBUG] [Thread-196236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:29:49.062 [DEBUG] [Thread-196236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:29:49.062 [DEBUG] [Thread-196236] [transport.py] [_log()] Compression: none
2026-04-12T21:29:49.062 [DEBUG] [Thread-196236] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:29:49.126 [DEBUG] [Thread-196236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:29:49.126 [DEBUG] [Thread-196236] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:29:49.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:29:49.127 [DEBUG] [Thread-196236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:29:49.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:29:49.181 [DEBUG] [Thread-196236] [transport.py] [_log()] userauth is OK
2026-04-12T21:29:49.182 [DEBUG] [Thread-196236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:29:49.182 [DEBUG] [Thread-196236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:29:49.182 [DEBUG] [Thread-196236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:29:49.182 [DEBUG] [Thread-196236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:29:49.200 [INFO] [Thread-196236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:29:49.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:29:49.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:29:50.045 [DEBUG] [Thread-196236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:29:50.045 [DEBUG] [Thread-196236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:29:50.093 [DEBUG] [Thread-196236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:29:50.093 [DEBUG] [Thread-196236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:29:50.102 [DEBUG] [Thread-196236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:29:50.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:29:50.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:29:50.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:29:50.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:29:50.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:29:50.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:29:50.139 [DEBUG] [Thread-196236] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:29:55.415 [DEBUG] [Thread-196238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:10.461 [DEBUG] [Thread-196239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:12.170 [DEBUG] [Thread-196240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:30:20.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:30:20.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:30:21.030 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:21.031 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:21.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 29, 52), 0.41747, 97.2083, 0.0, 12.0341, 11.7211, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:30:21.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:29:52
2026-04-12T21:30:21.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:30:22.039 [DEBUG] [Thread-196241] [transport.py] [_log()] starting thread (client mode): 0xa7959ba0
2026-04-12T21:30:22.039 [DEBUG] [Thread-196241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:30:22.060 [DEBUG] [Thread-196241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:30:22.061 [INFO] [Thread-196241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:22.064 [DEBUG] [Thread-196241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] client lang: <none>
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] server lang: <none>
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] kex follows: False
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] Compression: none
2026-04-12T21:30:22.065 [DEBUG] [Thread-196241] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:30:22.085 [DEBUG] [Thread-196241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:30:22.085 [DEBUG] [Thread-196241] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:30:22.086 [DEBUG] [Thread-196241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:30:22.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:30:22.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:30:22.088 [DEBUG] [Thread-196241] [transport.py] [_log()] userauth is OK
2026-04-12T21:30:22.088 [DEBUG] [Thread-196241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:30:22.088 [DEBUG] [Thread-196241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:30:22.088 [DEBUG] [Thread-196241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:30:22.088 [DEBUG] [Thread-196241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:30:22.124 [INFO] [Thread-196241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:30:22.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:30:23.292 [DEBUG] [Thread-196241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:30:23.292 [DEBUG] [Thread-196241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:30:23.292 [DEBUG] [Thread-196241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:30:23.335 [DEBUG] [Thread-196241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:30:23.335 [DEBUG] [Thread-196241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:30:23.337 [DEBUG] [Thread-196241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:30:23.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:30:23.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:30:23.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:30:23.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:30:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:30:23.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:30:23.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.812258 -999.00  +11.50   5.95     94  +10.70 1 2 1 3 1     0    0 0.73 -4.09 ..... 6.0 6.0 204.6 8.6 13.0 -17.7 12.8 -16.1 12.7 -15.3 12.9 -16.8
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.812258
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:30:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:30:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:29:52', tmtdew=0.41747, humidity=97.2083, cloud=0.0, wind=12.0341, temperature=11.7211, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:29:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:30:23.356 [DEBUG] [Thread-196241] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:30:23.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:30:23.442 [DEBUG] [Thread-196244] [transport.py] [_log()] starting thread (client mode): 0xa795a9b0
2026-04-12T21:30:23.442 [DEBUG] [Thread-196244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:30:23.457 [DEBUG] [Thread-196244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:30:23.457 [INFO] [Thread-196244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] client lang: <none>
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] server lang: <none>
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] kex follows: False
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] Compression: none
2026-04-12T21:30:23.465 [DEBUG] [Thread-196244] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:30:23.520 [DEBUG] [Thread-196244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:30:23.521 [DEBUG] [Thread-196244] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:30:23.521 [DEBUG] [Thread-196244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:30:23.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:30:23.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:30:23.579 [DEBUG] [Thread-196244] [transport.py] [_log()] userauth is OK
2026-04-12T21:30:23.579 [DEBUG] [Thread-196244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:30:23.579 [DEBUG] [Thread-196244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:30:23.579 [DEBUG] [Thread-196244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:30:23.579 [DEBUG] [Thread-196244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:30:23.601 [INFO] [Thread-196244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:30:23.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:30:23.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:30:24.421 [DEBUG] [Thread-196244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:30:24.421 [DEBUG] [Thread-196244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:30:24.469 [DEBUG] [Thread-196244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:30:24.469 [DEBUG] [Thread-196244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:30:24.478 [DEBUG] [Thread-196244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:30:24.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:30:24.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:30:24.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:30:24.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:30:24.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:30:24.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:30:24.516 [DEBUG] [Thread-196244] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:30:25.500 [DEBUG] [Thread-196246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:40.554 [DEBUG] [Thread-196247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:54.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:30:54.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:30:54.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:30:55.591 [DEBUG] [Thread-196248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:30:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 30, 27), 0.266485, 98.0545, 0.0, 9.47592, 11.3772, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:30:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:30:27
2026-04-12T21:30:56.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:30:56.290 [DEBUG] [Thread-196249] [transport.py] [_log()] starting thread (client mode): 0xa79595a0
2026-04-12T21:30:56.290 [DEBUG] [Thread-196249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:30:56.310 [DEBUG] [Thread-196249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:30:56.310 [INFO] [Thread-196249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:30:56.313 [DEBUG] [Thread-196249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:30:56.313 [DEBUG] [Thread-196249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] client lang: <none>
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] server lang: <none>
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] kex follows: False
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] Compression: none
2026-04-12T21:30:56.314 [DEBUG] [Thread-196249] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:30:56.332 [DEBUG] [Thread-196249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:30:56.333 [DEBUG] [Thread-196249] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:30:56.333 [DEBUG] [Thread-196249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:30:56.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:30:56.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:30:56.335 [DEBUG] [Thread-196249] [transport.py] [_log()] userauth is OK
2026-04-12T21:30:56.335 [DEBUG] [Thread-196249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:30:56.335 [DEBUG] [Thread-196249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:30:56.335 [DEBUG] [Thread-196249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:30:56.335 [DEBUG] [Thread-196249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:30:56.358 [INFO] [Thread-196249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:30:56.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:30:57.079 [DEBUG] [Thread-196249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:30:57.079 [DEBUG] [Thread-196249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:30:57.079 [DEBUG] [Thread-196249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:30:57.119 [DEBUG] [Thread-196249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:30:57.120 [DEBUG] [Thread-196249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:30:57.122 [DEBUG] [Thread-196249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:30:57.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:30:57.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:30:57.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:30:57.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:30:57.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:30:57.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:30:57.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:30:57.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:30:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:30:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.812605 -999.00  +11.50   6.88     94  +10.60 1 2 1 3 1     0    0 0.73 -3.83 ..esw 6.9 6.9 207.2 7.7 13.0 -20.0 12.9 -18.1 12.6 -17.2 12.9 -18.0
2026-04-12T21:30:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:30:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:30:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.812605
2026-04-12T21:30:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:30:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:30:57.141 [DEBUG] [Thread-196249] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:30:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:30:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:30:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:30:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:30:27', tmtdew=0.266485, humidity=98.0545, cloud=0.0, wind=9.47592, temperature=11.3772, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:30:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:30:57.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:30:57.226 [DEBUG] [Thread-196252] [transport.py] [_log()] starting thread (client mode): 0xae5a45e0
2026-04-12T21:30:57.226 [DEBUG] [Thread-196252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:30:57.241 [DEBUG] [Thread-196252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:30:57.241 [INFO] [Thread-196252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:30:57.249 [DEBUG] [Thread-196252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:30:57.249 [DEBUG] [Thread-196252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:30:57.249 [DEBUG] [Thread-196252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:30:57.249 [DEBUG] [Thread-196252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:57.249 [DEBUG] [Thread-196252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] client lang: <none>
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] server lang: <none>
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] kex follows: False
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:30:57.250 [DEBUG] [Thread-196252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:30:57.251 [DEBUG] [Thread-196252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:30:57.251 [DEBUG] [Thread-196252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:30:57.251 [DEBUG] [Thread-196252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:30:57.251 [DEBUG] [Thread-196252] [transport.py] [_log()] Compression: none
2026-04-12T21:30:57.251 [DEBUG] [Thread-196252] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:30:57.309 [DEBUG] [Thread-196252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:30:57.309 [DEBUG] [Thread-196252] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:30:57.310 [DEBUG] [Thread-196252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:30:57.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:30:57.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:30:57.364 [DEBUG] [Thread-196252] [transport.py] [_log()] userauth is OK
2026-04-12T21:30:57.365 [DEBUG] [Thread-196252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:30:57.365 [DEBUG] [Thread-196252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:30:57.365 [DEBUG] [Thread-196252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:30:57.365 [DEBUG] [Thread-196252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:30:57.384 [INFO] [Thread-196252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:30:57.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:30:57.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:30:58.205 [DEBUG] [Thread-196252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:30:58.205 [DEBUG] [Thread-196252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:30:58.253 [DEBUG] [Thread-196252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:30:58.253 [DEBUG] [Thread-196252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:30:58.263 [DEBUG] [Thread-196252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:30:58.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:30:58.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:30: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') -> 00000000
2026-04-12T21:30:58.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:30:58.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:30:58.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:30:58.300 [DEBUG] [Thread-196252] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:31:10.626 [DEBUG] [Thread-196254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:31:12.229 [DEBUG] [Thread-196255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:31:21.236 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:31:21.237 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:31:25.677 [DEBUG] [Thread-196256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:31:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:31:28.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:31:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:31:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 31, 2), 0.27151, 98.0214, 0.0, 9.7758, 11.3275, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:31:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:31:02
2026-04-12T21:31:29.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:31:30.112 [DEBUG] [Thread-196257] [transport.py] [_log()] starting thread (client mode): 0xa795bf10
2026-04-12T21:31:30.112 [DEBUG] [Thread-196257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:31:30.130 [DEBUG] [Thread-196257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:31:30.131 [INFO] [Thread-196257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:31:30.132 [DEBUG] [Thread-196257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:31:30.132 [DEBUG] [Thread-196257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:31:30.132 [DEBUG] [Thread-196257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] client lang: <none>
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] server lang: <none>
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] kex follows: False
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] Compression: none
2026-04-12T21:31:30.133 [DEBUG] [Thread-196257] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:31:30.141 [DEBUG] [Thread-196257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:31:30.142 [DEBUG] [Thread-196257] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:31:30.142 [DEBUG] [Thread-196257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:31:30.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:31:30.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:31:30.144 [DEBUG] [Thread-196257] [transport.py] [_log()] userauth is OK
2026-04-12T21:31:30.144 [DEBUG] [Thread-196257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:31:30.144 [DEBUG] [Thread-196257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:31:30.144 [DEBUG] [Thread-196257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:31:30.144 [DEBUG] [Thread-196257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:31:30.179 [INFO] [Thread-196257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:31:30.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:31:30.945 [DEBUG] [Thread-196257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:31:30.945 [DEBUG] [Thread-196257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:31:30.945 [DEBUG] [Thread-196257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:31:30.986 [DEBUG] [Thread-196257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:31:30.986 [DEBUG] [Thread-196257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:31:30.989 [DEBUG] [Thread-196257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:31:31.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:31:31.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:31:31.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:31:31.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:31:31.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:31:31.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:31:31.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:31:31.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:31:31.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:31:31.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.812953 -999.00  +11.50   6.05     94  +10.60 1 2 1 3 1     0    0 0.74 -3.31 ..esw 6.0 6.0 203.4 7.2 13.0 -18.8 12.8 -17.2 12.6 -16.6 12.9 -18.2
2026-04-12T21:31:31.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:31:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:31:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.812953
2026-04-12T21:31:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:31:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:31:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:31:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:31:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:31:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:31:02', tmtdew=0.27151, humidity=98.0214, cloud=0.0, wind=9.7758, temperature=11.3275, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:30:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4392499999999995, nan, 3.2989999999999995, nan, nan, nan, nan, 3.0275, nan, nan, 3.4449999999999985, 1.808749999999998, nan, nan, nan, 2.6475, 1.7612500000000004, 1.9849999999999994, 1.1520000000000001, 0.9010000000000007, 1.1145000000000014, 1.4700000000000006, nan], zp_timestamp='2026-04-12T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:31:31.017 [DEBUG] [Thread-196257] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:31:31.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:31:40.714 [DEBUG] [Thread-196260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:31:55.769 [DEBUG] [Thread-196261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:32:10.800 [DEBUG] [Thread-196262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:32:12.308 [DEBUG] [Thread-196263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:32:21.443 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:32:21.445 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:32:25.833 [DEBUG] [Thread-196264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:32:40.869 [DEBUG] [Thread-196265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:32:55.904 [DEBUG] [Thread-196266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:33:10.943 [DEBUG] [Thread-196267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:33:12.392 [DEBUG] [Thread-196268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:33:21.657 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:33:21.659 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:33:25.981 [DEBUG] [Thread-196269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:33:41.018 [DEBUG] [Thread-196270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:33:45.217 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T21:33:56.056 [DEBUG] [Thread-196271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:34:11.089 [DEBUG] [Thread-196272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:34:12.461 [DEBUG] [Thread-196273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:34:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:34:15.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:34:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:34:16.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 33, 59), 0.263885, 98.0705, 0.0, 9.12312, 11.3271, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:34:16.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:33:59
2026-04-12T21:34:16.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:34:17.031 [DEBUG] [Thread-196274] [transport.py] [_log()] starting thread (client mode): 0xa79598d0
2026-04-12T21:34:17.031 [DEBUG] [Thread-196274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:34:17.050 [DEBUG] [Thread-196274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:34:17.050 [INFO] [Thread-196274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:34:17.052 [DEBUG] [Thread-196274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:34:17.052 [DEBUG] [Thread-196274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:34:17.052 [DEBUG] [Thread-196274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:34:17.052 [DEBUG] [Thread-196274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:17.052 [DEBUG] [Thread-196274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] client lang: <none>
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] server lang: <none>
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] kex follows: False
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] Compression: none
2026-04-12T21:34:17.053 [DEBUG] [Thread-196274] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:34:17.067 [DEBUG] [Thread-196274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:34:17.067 [DEBUG] [Thread-196274] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:34:17.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:34:17.069 [DEBUG] [Thread-196274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:34:17.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:34:17.071 [DEBUG] [Thread-196274] [transport.py] [_log()] userauth is OK
2026-04-12T21:34:17.071 [DEBUG] [Thread-196274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:34:17.072 [DEBUG] [Thread-196274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:34:17.072 [DEBUG] [Thread-196274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:34:17.072 [DEBUG] [Thread-196274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:34:17.097 [INFO] [Thread-196274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:34:17.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:34:17.755 [DEBUG] [Thread-196274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:34:17.755 [DEBUG] [Thread-196274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:34:17.755 [DEBUG] [Thread-196274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:34:17.796 [DEBUG] [Thread-196274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:34:17.797 [DEBUG] [Thread-196274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:34:17.799 [DEBUG] [Thread-196274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:34:17.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:34:17.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:34:17.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:34:17.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:34:17.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:34:17.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:34:17.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:34:17.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:34:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:34:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.815036 -999.00  +11.50   6.77     94  +10.60 1 2 1 3 1     0    0 0.84 -0.64 ...sW 6.8 6.8 202.2 8.7 13.0 -21.1 12.8 -17.6 12.5 -17.1 12.8 -17.7
2026-04-12T21:34:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:34:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:34:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.815036
2026-04-12T21:34:17.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:34:17.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:34:17.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:34:17.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:34:17.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:34:17.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:33:59', tmtdew=0.263885, humidity=98.0705, cloud=0.0, wind=9.12312, temperature=11.3271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:33:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.4997499999999997, 2.1735000000000007, 1.5540000000000003, 1.1805000000000012, 1.633000000000001, nan, nan], zp_timestamp='2026-04-12T19:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:34:17.819 [DEBUG] [Thread-196274] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:34:17.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:34:17.910 [DEBUG] [Thread-196277] [transport.py] [_log()] starting thread (client mode): 0xae5b3970
2026-04-12T21:34:17.910 [DEBUG] [Thread-196277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:34:17.925 [DEBUG] [Thread-196277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:34:17.925 [INFO] [Thread-196277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:34:17.933 [DEBUG] [Thread-196277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] client lang: <none>
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] server lang: <none>
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] kex follows: False
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] Compression: none
2026-04-12T21:34:17.934 [DEBUG] [Thread-196277] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:34:17.991 [DEBUG] [Thread-196277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:34:17.992 [DEBUG] [Thread-196277] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:34:17.992 [DEBUG] [Thread-196277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:34:17.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:34:17.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:34:18.049 [DEBUG] [Thread-196277] [transport.py] [_log()] userauth is OK
2026-04-12T21:34:18.049 [DEBUG] [Thread-196277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:34:18.049 [DEBUG] [Thread-196277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:34:18.050 [DEBUG] [Thread-196277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:34:18.050 [DEBUG] [Thread-196277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:34:18.068 [INFO] [Thread-196277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:34:18.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:34:18.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:34:18.890 [DEBUG] [Thread-196277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:34:18.890 [DEBUG] [Thread-196277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:34:18.938 [DEBUG] [Thread-196277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:34:18.938 [DEBUG] [Thread-196277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:34:18.948 [DEBUG] [Thread-196277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:34:18.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:34:18.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:34:18.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:34:18.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:34:18.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:34:18.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:34:18.984 [DEBUG] [Thread-196277] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:34:21.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:34:21.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:34:26.125 [DEBUG] [Thread-196279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:34:41.177 [DEBUG] [Thread-196280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:34:49.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:34:49.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:34:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:34:50.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 34, 34), 0.4227, 97.1741, 0.0, 10.3759, 11.6873, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:34:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:34:34
2026-04-12T21:34:50.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:34:50.925 [DEBUG] [Thread-196281] [transport.py] [_log()] starting thread (client mode): 0xa795b2e0
2026-04-12T21:34:50.925 [DEBUG] [Thread-196281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:34:50.945 [DEBUG] [Thread-196281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:34:50.945 [INFO] [Thread-196281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] client lang: <none>
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] server lang: <none>
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] kex follows: False
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] Compression: none
2026-04-12T21:34:50.948 [DEBUG] [Thread-196281] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:34:50.965 [DEBUG] [Thread-196281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:34:50.966 [DEBUG] [Thread-196281] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:34:50.966 [DEBUG] [Thread-196281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:34:50.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:34:50.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:34:50.969 [DEBUG] [Thread-196281] [transport.py] [_log()] userauth is OK
2026-04-12T21:34:50.969 [DEBUG] [Thread-196281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:34:50.969 [DEBUG] [Thread-196281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:34:50.970 [DEBUG] [Thread-196281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:34:50.970 [DEBUG] [Thread-196281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:34:50.988 [INFO] [Thread-196281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:34:50.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:34:51.611 [DEBUG] [Thread-196281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:34:51.611 [DEBUG] [Thread-196281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:34:51.612 [DEBUG] [Thread-196281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:34:51.652 [DEBUG] [Thread-196281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:34:51.652 [DEBUG] [Thread-196281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:34:51.656 [DEBUG] [Thread-196281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:34:51.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:34:51.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:34:51.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:34:51.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:34:51.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:34:51.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:34:51.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:34:51.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:34:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:34:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.815383 -999.00  +11.50   5.36     94  +10.60 1 2 1 3 1     0    0 0.84 -0.16 ...SW 5.4 5.4 210.9 8.5 12.9 -18.9 12.8 -18.3 12.5 -17.5 12.8 -19.0
2026-04-12T21:34:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:34:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:34:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.815383
2026-04-12T21:34:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:34:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:34:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:34:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:34:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:34:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:34:34', tmtdew=0.4227, humidity=97.1741, cloud=0.0, wind=10.3759, temperature=11.6873, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:34:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.4997499999999997, 2.1735000000000007, 1.5540000000000003, 1.1805000000000012, 1.633000000000001, nan, nan], zp_timestamp='2026-04-12T19:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:34:51.683 [DEBUG] [Thread-196281] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:34:51.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:34:51.783 [DEBUG] [Thread-196284] [transport.py] [_log()] starting thread (client mode): 0xa7958bb0
2026-04-12T21:34:51.783 [DEBUG] [Thread-196284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:34:51.799 [DEBUG] [Thread-196284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:34:51.799 [INFO] [Thread-196284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] client lang: <none>
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] server lang: <none>
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] kex follows: False
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:34:51.806 [DEBUG] [Thread-196284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:34:51.807 [DEBUG] [Thread-196284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:34:51.807 [DEBUG] [Thread-196284] [transport.py] [_log()] Compression: none
2026-04-12T21:34:51.807 [DEBUG] [Thread-196284] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:34:51.863 [DEBUG] [Thread-196284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:34:51.864 [DEBUG] [Thread-196284] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:34:51.865 [DEBUG] [Thread-196284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:34:51.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:34:51.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:34:51.918 [DEBUG] [Thread-196284] [transport.py] [_log()] userauth is OK
2026-04-12T21:34:51.919 [DEBUG] [Thread-196284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:34:51.919 [DEBUG] [Thread-196284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:34:51.919 [DEBUG] [Thread-196284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:34:51.919 [DEBUG] [Thread-196284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:34:51.938 [INFO] [Thread-196284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:34:51.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:34:51.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:34:52.792 [DEBUG] [Thread-196284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:34:52.792 [DEBUG] [Thread-196284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:34:52.840 [DEBUG] [Thread-196284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:34:52.840 [DEBUG] [Thread-196284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:34:52.850 [DEBUG] [Thread-196284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:34:52.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:34: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')
2026-04-12T21:34:52.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:34:52.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:34:52.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:34:52.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:34:52.886 [DEBUG] [Thread-196284] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:34:56.216 [DEBUG] [Thread-196286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:11.271 [DEBUG] [Thread-196287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:12.568 [DEBUG] [Thread-196288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:22.072 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:22.074 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:35:22.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:35:22.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:35:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 35, 10), 0.263905, 98.0703, 0.0, 9.49356, 11.327, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:35:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:35:10
2026-04-12T21:35:24.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:35:24.710 [DEBUG] [Thread-196289] [transport.py] [_log()] starting thread (client mode): 0xae5081c0
2026-04-12T21:35:24.710 [DEBUG] [Thread-196289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:35:24.730 [DEBUG] [Thread-196289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:35:24.730 [INFO] [Thread-196289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:35:24.733 [DEBUG] [Thread-196289] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:35:24.733 [DEBUG] [Thread-196289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] client lang: <none>
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] server lang: <none>
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] kex follows: False
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] Compression: none
2026-04-12T21:35:24.734 [DEBUG] [Thread-196289] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:35:24.751 [DEBUG] [Thread-196289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:35:24.752 [DEBUG] [Thread-196289] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:35:24.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:35:24.753 [DEBUG] [Thread-196289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:35:24.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:35:24.755 [DEBUG] [Thread-196289] [transport.py] [_log()] userauth is OK
2026-04-12T21:35:24.755 [DEBUG] [Thread-196289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:35:24.755 [DEBUG] [Thread-196289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:35:24.755 [DEBUG] [Thread-196289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:35:24.755 [DEBUG] [Thread-196289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:35:24.777 [INFO] [Thread-196289] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:35:24.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:35:25.402 [DEBUG] [Thread-196289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:35:25.402 [DEBUG] [Thread-196289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:35:25.402 [DEBUG] [Thread-196289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:35:25.443 [DEBUG] [Thread-196289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:35:25.444 [DEBUG] [Thread-196289] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:35:25.447 [DEBUG] [Thread-196289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:35:25.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:35:25.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:35:25.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:35:25.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:35:25.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:35:25.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:35:25.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:35:25.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:35:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:35:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.816077 -999.00  +11.50   5.99     94  +10.60 1 2 1 3 1     0    0 0.88 0.72 ..e.. 6.0 6.0 229.4 7.7 12.9 -18.7 12.8 -17.0 12.5 -15.9 12.8 -17.1
2026-04-12T21:35:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:35:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:35:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.816077
2026-04-12T21:35:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:35:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:35:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:35:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:35:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:35:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:35:10', tmtdew=0.263905, humidity=98.0703, cloud=0.0, wind=9.49356, temperature=11.327, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:35:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:35:25.473 [DEBUG] [Thread-196289] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:35:25.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:35:25.565 [DEBUG] [Thread-196292] [transport.py] [_log()] starting thread (client mode): 0xae508b80
2026-04-12T21:35:25.565 [DEBUG] [Thread-196292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:35:25.580 [DEBUG] [Thread-196292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:35:25.581 [INFO] [Thread-196292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:35:25.588 [DEBUG] [Thread-196292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:35:25.588 [DEBUG] [Thread-196292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:35:25.588 [DEBUG] [Thread-196292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] client lang: <none>
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] server lang: <none>
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] kex follows: False
2026-04-12T21:35:25.589 [DEBUG] [Thread-196292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:35:25.590 [DEBUG] [Thread-196292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:35:25.590 [DEBUG] [Thread-196292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:35:25.590 [DEBUG] [Thread-196292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:35:25.590 [DEBUG] [Thread-196292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:35:25.590 [DEBUG] [Thread-196292] [transport.py] [_log()] Compression: none
2026-04-12T21:35:25.590 [DEBUG] [Thread-196292] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:35:25.646 [DEBUG] [Thread-196292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:35:25.647 [DEBUG] [Thread-196292] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:35:25.648 [DEBUG] [Thread-196292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:35:25.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:35:25.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:35:25.706 [DEBUG] [Thread-196292] [transport.py] [_log()] userauth is OK
2026-04-12T21:35:25.707 [DEBUG] [Thread-196292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:35:25.707 [DEBUG] [Thread-196292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:35:25.707 [DEBUG] [Thread-196292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:35:25.707 [DEBUG] [Thread-196292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:35:25.726 [INFO] [Thread-196292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:35:25.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:35:25.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:35:26.310 [DEBUG] [Thread-196294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:26.549 [DEBUG] [Thread-196292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:35:26.549 [DEBUG] [Thread-196292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:35:26.597 [DEBUG] [Thread-196292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:35:26.597 [DEBUG] [Thread-196292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:35:26.607 [DEBUG] [Thread-196292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:35:26.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:35:26.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:35:26.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:35:26.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:35:26.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:35:26.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:35:26.643 [DEBUG] [Thread-196292] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:35:41.362 [DEBUG] [Thread-196295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:56.398 [DEBUG] [Thread-196296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:35:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:35:56.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:35:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:35:57.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 35, 45), 0.42773, 97.1406, 0.0, 11.4343, 11.6208, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:35:57.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:35:45
2026-04-12T21:35:58.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:35:58.450 [DEBUG] [Thread-196297] [transport.py] [_log()] starting thread (client mode): 0xae509ea0
2026-04-12T21:35:58.451 [DEBUG] [Thread-196297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:35:58.470 [DEBUG] [Thread-196297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:35:58.471 [INFO] [Thread-196297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:35:58.474 [DEBUG] [Thread-196297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:35:58.474 [DEBUG] [Thread-196297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:35:58.474 [DEBUG] [Thread-196297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] client lang: <none>
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] server lang: <none>
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] kex follows: False
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] Compression: none
2026-04-12T21:35:58.475 [DEBUG] [Thread-196297] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:35:58.493 [DEBUG] [Thread-196297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:35:58.494 [DEBUG] [Thread-196297] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:35:58.495 [DEBUG] [Thread-196297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:35:58.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:35:58.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:35:58.497 [DEBUG] [Thread-196297] [transport.py] [_log()] userauth is OK
2026-04-12T21:35:58.497 [DEBUG] [Thread-196297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:35:58.497 [DEBUG] [Thread-196297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:35:58.497 [DEBUG] [Thread-196297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:35:58.497 [DEBUG] [Thread-196297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:35:58.518 [INFO] [Thread-196297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:35:58.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:35:59.114 [DEBUG] [Thread-196297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:35:59.114 [DEBUG] [Thread-196297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:35:59.114 [DEBUG] [Thread-196297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:35:59.155 [DEBUG] [Thread-196297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:35:59.155 [DEBUG] [Thread-196297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:35:59.158 [DEBUG] [Thread-196297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:35:59.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:35:59.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:35:59.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:35:59.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:35:59.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:35:59.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:35:59.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:35:59.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:35:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:35:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.816425 -999.00  +11.50   3.09     94  +10.60 1 2 1 3 1     0    0 0.88 1.09 ..e.. 3.1 3.1 189.8 6.7 12.9 -20.3 12.7 -17.3 12.5 -16.4 12.8 -17.7
2026-04-12T21:35:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:35:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:35:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.816425
2026-04-12T21:35:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:35:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:35:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:35:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:35:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:35:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:35:45', tmtdew=0.42773, humidity=97.1406, cloud=0.0, wind=11.4343, temperature=11.6208, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:35:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:35:59.185 [DEBUG] [Thread-196297] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:35:59.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:35:59.278 [DEBUG] [Thread-196300] [transport.py] [_log()] starting thread (client mode): 0xa795b160
2026-04-12T21:35:59.278 [DEBUG] [Thread-196300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:35:59.293 [DEBUG] [Thread-196300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:35:59.293 [INFO] [Thread-196300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:35:59.300 [DEBUG] [Thread-196300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] client lang: <none>
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] server lang: <none>
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] kex follows: False
2026-04-12T21:35:59.301 [DEBUG] [Thread-196300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:35:59.302 [DEBUG] [Thread-196300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:35:59.302 [DEBUG] [Thread-196300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:35:59.302 [DEBUG] [Thread-196300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:35:59.302 [DEBUG] [Thread-196300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:35:59.302 [DEBUG] [Thread-196300] [transport.py] [_log()] Compression: none
2026-04-12T21:35:59.302 [DEBUG] [Thread-196300] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:35:59.360 [DEBUG] [Thread-196300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:35:59.361 [DEBUG] [Thread-196300] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:35:59.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:35:59.362 [DEBUG] [Thread-196300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:35:59.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:35:59.420 [DEBUG] [Thread-196300] [transport.py] [_log()] userauth is OK
2026-04-12T21:35:59.421 [DEBUG] [Thread-196300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:35:59.421 [DEBUG] [Thread-196300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:35:59.421 [DEBUG] [Thread-196300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:35:59.421 [DEBUG] [Thread-196300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:35:59.440 [INFO] [Thread-196300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:35:59.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:35:59.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:36:00.315 [DEBUG] [Thread-196300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:36:00.319 [DEBUG] [Thread-196300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:36:00.365 [DEBUG] [Thread-196300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:36:00.365 [DEBUG] [Thread-196300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:36:00.375 [DEBUG] [Thread-196300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:36:00.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:36:00.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:36:00.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:36:00.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:36:00.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:36:00.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:36:00.410 [DEBUG] [Thread-196300] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:36:11.434 [DEBUG] [Thread-196302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:36:12.664 [DEBUG] [Thread-196303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:36:22.274 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:36:22.276 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:36:26.484 [DEBUG] [Thread-196304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:36:30.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:36:30.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:36:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:36:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 36, 21), 0.26143, 98.0868, 0.0, 9.01728, 11.3601, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:36:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:36:21
2026-04-12T21:36:32.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:36:32.221 [DEBUG] [Thread-196305] [transport.py] [_log()] starting thread (client mode): 0xae5b3910
2026-04-12T21:36:32.221 [DEBUG] [Thread-196305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:36:32.242 [DEBUG] [Thread-196305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:36:32.243 [INFO] [Thread-196305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] client lang: <none>
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] server lang: <none>
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] kex follows: False
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] Compression: none
2026-04-12T21:36:32.246 [DEBUG] [Thread-196305] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:36:32.264 [DEBUG] [Thread-196305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:36:32.264 [DEBUG] [Thread-196305] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:36:32.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:36:32.265 [DEBUG] [Thread-196305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:36:32.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:36:32.267 [DEBUG] [Thread-196305] [transport.py] [_log()] userauth is OK
2026-04-12T21:36:32.267 [DEBUG] [Thread-196305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:36:32.267 [DEBUG] [Thread-196305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:36:32.267 [DEBUG] [Thread-196305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:36:32.267 [DEBUG] [Thread-196305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:36:32.311 [INFO] [Thread-196305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:36:32.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:36:32.943 [DEBUG] [Thread-196305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:36:32.943 [DEBUG] [Thread-196305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:36:32.944 [DEBUG] [Thread-196305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:36:32.984 [DEBUG] [Thread-196305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:36:32.984 [DEBUG] [Thread-196305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:36:32.988 [DEBUG] [Thread-196305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:36:33.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:36:33.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:36:33.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:36:33.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:36:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:36:33.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:36:33.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:36:33.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:36:33.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:36:33.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.816772 -999.00  +11.50   6.26     94  +10.60 1 2 1 3 1     0    0 0.89 1.13 ..eSw 6.3 6.3 217.6 7.0 12.9 -22.0 12.8 -20.0 12.5 -18.7 12.8 -20.0
2026-04-12T21:36:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:36:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:36:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.816772
2026-04-12T21:36:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:36:33.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:36:33.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:36:33.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:36:33.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:36:33.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:36:21', tmtdew=0.26143, humidity=98.0868, cloud=0.0, wind=9.01728, temperature=11.3601, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:36:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:36:33.017 [DEBUG] [Thread-196305] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:36:33.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:36:33.113 [DEBUG] [Thread-196308] [transport.py] [_log()] starting thread (client mode): 0xa7958c70
2026-04-12T21:36:33.113 [DEBUG] [Thread-196308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:36:33.130 [DEBUG] [Thread-196308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:36:33.130 [INFO] [Thread-196308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:36:33.138 [DEBUG] [Thread-196308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:36:33.138 [DEBUG] [Thread-196308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] client lang: <none>
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] server lang: <none>
2026-04-12T21:36:33.139 [DEBUG] [Thread-196308] [transport.py] [_log()] kex follows: False
2026-04-12T21:36:33.140 [DEBUG] [Thread-196308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:36:33.140 [DEBUG] [Thread-196308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:36:33.140 [DEBUG] [Thread-196308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:36:33.140 [DEBUG] [Thread-196308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:36:33.140 [DEBUG] [Thread-196308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:36:33.140 [DEBUG] [Thread-196308] [transport.py] [_log()] Compression: none
2026-04-12T21:36:33.140 [DEBUG] [Thread-196308] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:36:33.197 [DEBUG] [Thread-196308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:36:33.197 [DEBUG] [Thread-196308] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:36:33.197 [DEBUG] [Thread-196308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:36:33.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:36:33.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:36:33.256 [DEBUG] [Thread-196308] [transport.py] [_log()] userauth is OK
2026-04-12T21:36:33.256 [DEBUG] [Thread-196308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:36:33.256 [DEBUG] [Thread-196308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:36:33.256 [DEBUG] [Thread-196308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:36:33.257 [DEBUG] [Thread-196308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:36:33.275 [INFO] [Thread-196308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:36:33.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:36:33.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:36:34.069 [DEBUG] [Thread-196308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:36:34.069 [DEBUG] [Thread-196308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:36:34.118 [DEBUG] [Thread-196308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:36:34.118 [DEBUG] [Thread-196308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:36:34.127 [DEBUG] [Thread-196308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:36:34.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:36:34.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:36:34.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:36:34.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:36:34.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:36:34.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:36:34.161 [DEBUG] [Thread-196308] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:36:41.522 [DEBUG] [Thread-196310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:36:56.577 [DEBUG] [Thread-196311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:37:04.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:37:04.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:37:04.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:37:05.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 36, 57), 0.26388, 98.0702, 0.0, 8.29404, 11.3103, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:37:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:36:57
2026-04-12T21:37:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:37:06.029 [DEBUG] [Thread-196312] [transport.py] [_log()] starting thread (client mode): 0xae534400
2026-04-12T21:37:06.030 [DEBUG] [Thread-196312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:37:06.049 [DEBUG] [Thread-196312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:37:06.049 [INFO] [Thread-196312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] client lang: <none>
2026-04-12T21:37:06.053 [DEBUG] [Thread-196312] [transport.py] [_log()] server lang: <none>
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] kex follows: False
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] Compression: none
2026-04-12T21:37:06.054 [DEBUG] [Thread-196312] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:37:06.074 [DEBUG] [Thread-196312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:37:06.074 [DEBUG] [Thread-196312] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:37:06.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:37:06.075 [DEBUG] [Thread-196312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:37:06.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:37:06.078 [DEBUG] [Thread-196312] [transport.py] [_log()] userauth is OK
2026-04-12T21:37:06.078 [DEBUG] [Thread-196312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:37:06.078 [DEBUG] [Thread-196312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:37:06.078 [DEBUG] [Thread-196312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:37:06.078 [DEBUG] [Thread-196312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:37:06.103 [INFO] [Thread-196312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:37:06.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:37:06.710 [DEBUG] [Thread-196312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:37:06.710 [DEBUG] [Thread-196312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:37:06.711 [DEBUG] [Thread-196312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:37:06.751 [DEBUG] [Thread-196312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:37:06.752 [DEBUG] [Thread-196312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:37:06.756 [DEBUG] [Thread-196312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:37:06.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:37:06.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:37:06.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:37:06.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:37:06.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:37:06.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:37:06.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:37:06.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:37:06.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:37:06.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.817119 -999.00  +11.50   4.18     94  +10.60 1 2 1 3 1     0    0 0.90 1.59 .neSW 4.2 4.2 250.7 7.5 12.9 -22.4 12.7 -21.1 12.5 -19.3 12.8 -21.1
2026-04-12T21:37:06.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:37:06.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:37:06.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.817119
2026-04-12T21:37:06.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:37:06.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:37:06.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:37:06.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:37:06.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:37:06.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:36:57', tmtdew=0.26388, humidity=98.0702, cloud=0.0, wind=8.29404, temperature=11.3103, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:36:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:37:06.782 [DEBUG] [Thread-196312] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:37:06.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:37:06.870 [DEBUG] [Thread-196315] [transport.py] [_log()] starting thread (client mode): 0xb0f8c490
2026-04-12T21:37:06.870 [DEBUG] [Thread-196315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:37:06.885 [DEBUG] [Thread-196315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:37:06.885 [INFO] [Thread-196315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:37:06.892 [DEBUG] [Thread-196315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:37:06.893 [DEBUG] [Thread-196315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] client lang: <none>
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] server lang: <none>
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] kex follows: False
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:37:06.894 [DEBUG] [Thread-196315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:37:06.895 [DEBUG] [Thread-196315] [transport.py] [_log()] Compression: none
2026-04-12T21:37:06.895 [DEBUG] [Thread-196315] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:37:06.954 [DEBUG] [Thread-196315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:37:06.955 [DEBUG] [Thread-196315] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:37:06.955 [DEBUG] [Thread-196315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:37:06.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:37:06.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:37:07.010 [DEBUG] [Thread-196315] [transport.py] [_log()] userauth is OK
2026-04-12T21:37:07.010 [DEBUG] [Thread-196315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:37:07.010 [DEBUG] [Thread-196315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:37:07.010 [DEBUG] [Thread-196315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:37:07.010 [DEBUG] [Thread-196315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:37:07.029 [INFO] [Thread-196315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:37:07.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:37:07.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:37:07.824 [DEBUG] [Thread-196315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:37:07.824 [DEBUG] [Thread-196315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:37:07.871 [DEBUG] [Thread-196315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:37:07.872 [DEBUG] [Thread-196315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:37:07.880 [DEBUG] [Thread-196315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:37:07.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:37:07.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:37:07.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:37:07.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:37:07.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:37:07.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:37:07.914 [DEBUG] [Thread-196315] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:37:11.621 [DEBUG] [Thread-196317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:37:12.753 [DEBUG] [Thread-196318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:37:22.478 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:37:22.480 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:37:26.672 [DEBUG] [Thread-196319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:37:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:37:37.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:37:37.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:37:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 36, 57), 0.26388, 98.0702, 0.0, 8.29404, 11.3103, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:37:39.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:36:57
2026-04-12T21:37:39.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:37:39.778 [DEBUG] [Thread-196320] [transport.py] [_log()] starting thread (client mode): 0xae50ba60
2026-04-12T21:37:39.778 [DEBUG] [Thread-196320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:37:39.798 [DEBUG] [Thread-196320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:37:39.799 [INFO] [Thread-196320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] client lang: <none>
2026-04-12T21:37:39.802 [DEBUG] [Thread-196320] [transport.py] [_log()] server lang: <none>
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] kex follows: False
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] Compression: none
2026-04-12T21:37:39.803 [DEBUG] [Thread-196320] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:37:39.821 [DEBUG] [Thread-196320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:37:39.822 [DEBUG] [Thread-196320] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:37:39.823 [DEBUG] [Thread-196320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:37:39.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:37:39.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:37:39.825 [DEBUG] [Thread-196320] [transport.py] [_log()] userauth is OK
2026-04-12T21:37:39.825 [DEBUG] [Thread-196320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:37:39.825 [DEBUG] [Thread-196320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:37:39.826 [DEBUG] [Thread-196320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:37:39.826 [DEBUG] [Thread-196320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:37:39.850 [INFO] [Thread-196320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:37:39.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:37:40.493 [DEBUG] [Thread-196320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:37:40.493 [DEBUG] [Thread-196320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:37:40.493 [DEBUG] [Thread-196320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:37:40.534 [DEBUG] [Thread-196320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:37:40.535 [DEBUG] [Thread-196320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:37:40.538 [DEBUG] [Thread-196320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:37:40.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:37:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:37:40.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:37:40.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:37:40.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:37:40.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:37:40.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:37:40.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:37:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:37:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.817466 -999.00  +11.50   6.08     94  +10.60 1 2 1 3 1     0    0 0.92 2.32 .neSW 6.1 6.1 227.0 8.9 12.8 -22.4 12.7 -21.3 12.4 -19.5 12.8 -21.3
2026-04-12T21:37:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:37:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:37:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.817466
2026-04-12T21:37:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:37:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:37:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:37:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:37:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:37:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:36:57', tmtdew=0.26388, humidity=98.0702, cloud=0.0, wind=8.29404, temperature=11.3103, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:37:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:37:40.567 [DEBUG] [Thread-196320] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:37:40.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:37:40.660 [DEBUG] [Thread-196323] [transport.py] [_log()] starting thread (client mode): 0xae5b1900
2026-04-12T21:37:40.660 [DEBUG] [Thread-196323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:37:40.674 [DEBUG] [Thread-196323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:37:40.674 [INFO] [Thread-196323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:37:40.682 [DEBUG] [Thread-196323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:37:40.682 [DEBUG] [Thread-196323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:37:40.682 [DEBUG] [Thread-196323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] client lang: <none>
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] server lang: <none>
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] kex follows: False
2026-04-12T21:37:40.683 [DEBUG] [Thread-196323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:37:40.684 [DEBUG] [Thread-196323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:37:40.684 [DEBUG] [Thread-196323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:37:40.684 [DEBUG] [Thread-196323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:37:40.684 [DEBUG] [Thread-196323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:37:40.684 [DEBUG] [Thread-196323] [transport.py] [_log()] Compression: none
2026-04-12T21:37:40.684 [DEBUG] [Thread-196323] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:37:40.743 [DEBUG] [Thread-196323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:37:40.743 [DEBUG] [Thread-196323] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:37:40.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:37:40.745 [DEBUG] [Thread-196323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:37:40.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:37:40.800 [DEBUG] [Thread-196323] [transport.py] [_log()] userauth is OK
2026-04-12T21:37:40.800 [DEBUG] [Thread-196323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:37:40.800 [DEBUG] [Thread-196323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:37:40.800 [DEBUG] [Thread-196323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:37:40.801 [DEBUG] [Thread-196323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:37:40.824 [INFO] [Thread-196323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:37:40.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:37:40.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:37:41.673 [DEBUG] [Thread-196323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:37:41.673 [DEBUG] [Thread-196323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:37:41.711 [DEBUG] [Thread-196325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:37:41.721 [DEBUG] [Thread-196323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:37:41.721 [DEBUG] [Thread-196323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:37:41.730 [DEBUG] [Thread-196323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:37:41.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:37:41.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:37:41.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:37:41.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:37:41.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:37:41.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:37:41.765 [DEBUG] [Thread-196323] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:37:56.777 [DEBUG] [Thread-196326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:38:11.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:38:11.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:38:11.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:38:11.815 [DEBUG] [Thread-196327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:38:12.809 [DEBUG] [Thread-196328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:38:13.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 37, 32), 0.41758, 97.2066, 0.0, 7.62408, 11.6537, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:38:13.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:37:32
2026-04-12T21:38:13.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:38:13.617 [DEBUG] [Thread-196329] [transport.py] [_log()] starting thread (client mode): 0xb0f8f1c0
2026-04-12T21:38:13.617 [DEBUG] [Thread-196329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:38:13.639 [DEBUG] [Thread-196329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:38:13.639 [INFO] [Thread-196329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:38:13.642 [DEBUG] [Thread-196329] [transport.py] [_log()] client lang: <none>
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] server lang: <none>
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] kex follows: False
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] Compression: none
2026-04-12T21:38:13.643 [DEBUG] [Thread-196329] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:38:13.660 [DEBUG] [Thread-196329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:38:13.660 [DEBUG] [Thread-196329] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:38:13.661 [DEBUG] [Thread-196329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:38:13.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:38:13.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:38:13.663 [DEBUG] [Thread-196329] [transport.py] [_log()] userauth is OK
2026-04-12T21:38:13.663 [DEBUG] [Thread-196329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:38:13.663 [DEBUG] [Thread-196329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:38:13.663 [DEBUG] [Thread-196329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:38:13.663 [DEBUG] [Thread-196329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:38:13.688 [INFO] [Thread-196329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:38:13.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:38:14.325 [DEBUG] [Thread-196329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:38:14.325 [DEBUG] [Thread-196329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:38:14.326 [DEBUG] [Thread-196329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:38:14.366 [DEBUG] [Thread-196329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:38:14.366 [DEBUG] [Thread-196329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:38:14.369 [DEBUG] [Thread-196329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:38:14.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:38:14.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:38:14.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:38:14.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:38:14.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:38:14.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:38:14.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:38:14.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:38:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:38:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.817813 -999.00  +11.50   3.88     94  +10.60 1 2 1 3 1     0    0 0.93 2.81 .neSW 3.9 3.9 206.7 5.8 12.8 -22.6 12.7 -20.9 12.4 -19.1 12.7 -21.1
2026-04-12T21:38:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:38:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:38:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.817813
2026-04-12T21:38:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:38:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:38:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:38:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:38:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:38:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:37:32', tmtdew=0.41758, humidity=97.2066, cloud=0.0, wind=7.62408, temperature=11.6537, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:37:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:38:14.395 [DEBUG] [Thread-196329] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:38:14.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:38:14.488 [DEBUG] [Thread-196332] [transport.py] [_log()] starting thread (client mode): 0xae508f70
2026-04-12T21:38:14.488 [DEBUG] [Thread-196332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:38:14.503 [DEBUG] [Thread-196332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:38:14.503 [INFO] [Thread-196332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:38:14.511 [DEBUG] [Thread-196332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:38:14.511 [DEBUG] [Thread-196332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] client lang: <none>
2026-04-12T21:38:14.512 [DEBUG] [Thread-196332] [transport.py] [_log()] server lang: <none>
2026-04-12T21:38:14.513 [DEBUG] [Thread-196332] [transport.py] [_log()] kex follows: False
2026-04-12T21:38:14.513 [DEBUG] [Thread-196332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:38:14.513 [DEBUG] [Thread-196332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:38:14.513 [DEBUG] [Thread-196332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:38:14.513 [DEBUG] [Thread-196332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:38:14.513 [DEBUG] [Thread-196332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:38:14.513 [DEBUG] [Thread-196332] [transport.py] [_log()] Compression: none
2026-04-12T21:38:14.514 [DEBUG] [Thread-196332] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:38:14.572 [DEBUG] [Thread-196332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:38:14.572 [DEBUG] [Thread-196332] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:38:14.573 [DEBUG] [Thread-196332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:38:14.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:38:14.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:38:14.627 [DEBUG] [Thread-196332] [transport.py] [_log()] userauth is OK
2026-04-12T21:38:14.627 [DEBUG] [Thread-196332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:38:14.628 [DEBUG] [Thread-196332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:38:14.628 [DEBUG] [Thread-196332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:38:14.628 [DEBUG] [Thread-196332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:38:14.647 [INFO] [Thread-196332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:38:14.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:38:14.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:38:15.521 [DEBUG] [Thread-196332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:38:15.522 [DEBUG] [Thread-196332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:38:15.570 [DEBUG] [Thread-196332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:38:15.570 [DEBUG] [Thread-196332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:38:15.579 [DEBUG] [Thread-196332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:38:15.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:38:15.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:38:15.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:38:15.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:38:15.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:38:15.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:38:15.616 [DEBUG] [Thread-196332] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:38:22.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:38:22.686 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:38:26.848 [DEBUG] [Thread-196334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:38:41.908 [DEBUG] [Thread-196335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:38:45.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:38:45.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:38:45.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
2026-04-12T21:38:46.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 38, 9), 0.21132, 98.0867, 0.0, 8.84088, 11.2603, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:38:46.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:38:09
2026-04-12T21:38:47.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:38:47.522 [DEBUG] [Thread-196336] [transport.py] [_log()] starting thread (client mode): 0xa7958f70
2026-04-12T21:38:47.522 [DEBUG] [Thread-196336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:38:47.541 [DEBUG] [Thread-196336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:38:47.541 [INFO] [Thread-196336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:38:47.544 [DEBUG] [Thread-196336] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:38:47.544 [DEBUG] [Thread-196336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] client lang: <none>
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] server lang: <none>
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] kex follows: False
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] Compression: none
2026-04-12T21:38:47.545 [DEBUG] [Thread-196336] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:38:47.560 [DEBUG] [Thread-196336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:38:47.560 [DEBUG] [Thread-196336] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:38:47.560 [DEBUG] [Thread-196336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:38:47.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:38:47.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:38:47.561 [DEBUG] [Thread-196336] [transport.py] [_log()] userauth is OK
2026-04-12T21:38:47.561 [DEBUG] [Thread-196336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:38:47.561 [DEBUG] [Thread-196336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:38:47.561 [DEBUG] [Thread-196336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:38:47.561 [DEBUG] [Thread-196336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:38:47.576 [INFO] [Thread-196336] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:38:47.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:38:48.201 [DEBUG] [Thread-196336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:38:48.201 [DEBUG] [Thread-196336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:38:48.202 [DEBUG] [Thread-196336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:38:48.242 [DEBUG] [Thread-196336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:38:48.242 [DEBUG] [Thread-196336] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:38:48.245 [DEBUG] [Thread-196336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:38:48.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:38:48.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:38:48.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:38:48.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:38:48.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:38:48.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:38:48.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:38:48.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:38:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:38:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.818508 -999.00  +11.40   5.70     94  +10.60 1 2 1 3 1     0    0 0.94 3.01 .NESW 5.7 5.7 209.7 6.7 12.8 -22.7 12.6 -21.4 12.4 -19.6 12.7 -21.6
2026-04-12T21:38:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:38:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:38:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.818508
2026-04-12T21:38:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:38:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:38:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:38:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:38:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:38:48.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:38:09', tmtdew=0.21132, humidity=98.0867, cloud=0.0, wind=8.84088, temperature=11.2603, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:38:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:38:48.274 [DEBUG] [Thread-196336] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:38:48.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:38:48.367 [DEBUG] [Thread-196339] [transport.py] [_log()] starting thread (client mode): 0xae508460
2026-04-12T21:38:48.367 [DEBUG] [Thread-196339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:38:48.381 [DEBUG] [Thread-196339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:38:48.381 [INFO] [Thread-196339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] client lang: <none>
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] server lang: <none>
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] kex follows: False
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] Compression: none
2026-04-12T21:38:48.389 [DEBUG] [Thread-196339] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:38:48.451 [DEBUG] [Thread-196339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:38:48.451 [DEBUG] [Thread-196339] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:38:48.452 [DEBUG] [Thread-196339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:38:48.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:38:48.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:38:48.514 [DEBUG] [Thread-196339] [transport.py] [_log()] userauth is OK
2026-04-12T21:38:48.514 [DEBUG] [Thread-196339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:38:48.515 [DEBUG] [Thread-196339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:38:48.515 [DEBUG] [Thread-196339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:38:48.515 [DEBUG] [Thread-196339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:38:48.533 [INFO] [Thread-196339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:38:48.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:38:48.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:38:49.399 [DEBUG] [Thread-196339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:38:49.400 [DEBUG] [Thread-196339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:38:49.447 [DEBUG] [Thread-196339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:38:49.447 [DEBUG] [Thread-196339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:38:49.457 [DEBUG] [Thread-196339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:38:49.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:38:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:38:49.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:38:49.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:38:49.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:38:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:38:49.494 [DEBUG] [Thread-196339] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:38:56.948 [DEBUG] [Thread-196341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:39:12.002 [DEBUG] [Thread-196342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:39:12.878 [DEBUG] [Thread-196343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:39:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:39:19.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:39:19.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:39:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 38, 44), 0.43275, 97.1077, 0.0, 9.45864, 11.5878, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:39:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:38:44
2026-04-12T21:39:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:39:21.349 [DEBUG] [Thread-196344] [transport.py] [_log()] starting thread (client mode): 0xae535540
2026-04-12T21:39:21.349 [DEBUG] [Thread-196344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:39:21.368 [DEBUG] [Thread-196344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:39:21.368 [INFO] [Thread-196344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:39:21.369 [DEBUG] [Thread-196344] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] client lang: <none>
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] server lang: <none>
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] kex follows: False
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] Compression: none
2026-04-12T21:39:21.370 [DEBUG] [Thread-196344] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:39:21.379 [DEBUG] [Thread-196344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:39:21.379 [DEBUG] [Thread-196344] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:39:21.380 [DEBUG] [Thread-196344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:39:21.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:39:21.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:39:21.381 [DEBUG] [Thread-196344] [transport.py] [_log()] userauth is OK
2026-04-12T21:39:21.381 [DEBUG] [Thread-196344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:39:21.381 [DEBUG] [Thread-196344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:39:21.382 [DEBUG] [Thread-196344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:39:21.382 [DEBUG] [Thread-196344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:39:21.399 [INFO] [Thread-196344] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:39:21.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:39:22.021 [DEBUG] [Thread-196344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:39:22.022 [DEBUG] [Thread-196344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:39:22.022 [DEBUG] [Thread-196344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:39:22.063 [DEBUG] [Thread-196344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:39:22.063 [DEBUG] [Thread-196344] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:39:22.067 [DEBUG] [Thread-196344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:39:22.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:39:22.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:39:22.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:39:22.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:39:22.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:39:22.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:39:22.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:39:22.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:39:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:39:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.818855 -999.00  +11.40   4.72     94  +10.50 1 2 1 3 1     0    0 0.91 2.37 .NESW 4.7 4.7 239.4 7.1 12.8 -22.5 12.7 -21.5 12.3 -19.6 12.7 -21.5
2026-04-12T21:39:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:39:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:39:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.818855
2026-04-12T21:39:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:39:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:39:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:39:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:39:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:39:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:38:44', tmtdew=0.43275, humidity=97.1077, cloud=0.0, wind=9.45864, temperature=11.5878, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:39:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:39:22.092 [DEBUG] [Thread-196344] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:39:22.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:39:22.184 [DEBUG] [Thread-196347] [transport.py] [_log()] starting thread (client mode): 0xa79581f0
2026-04-12T21:39:22.184 [DEBUG] [Thread-196347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:39:22.198 [DEBUG] [Thread-196347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:39:22.198 [INFO] [Thread-196347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:39:22.206 [DEBUG] [Thread-196347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:39:22.206 [DEBUG] [Thread-196347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] client lang: <none>
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] server lang: <none>
2026-04-12T21:39:22.207 [DEBUG] [Thread-196347] [transport.py] [_log()] kex follows: False
2026-04-12T21:39:22.208 [DEBUG] [Thread-196347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:39:22.208 [DEBUG] [Thread-196347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:39:22.208 [DEBUG] [Thread-196347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:39:22.208 [DEBUG] [Thread-196347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:39:22.208 [DEBUG] [Thread-196347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:39:22.208 [DEBUG] [Thread-196347] [transport.py] [_log()] Compression: none
2026-04-12T21:39:22.208 [DEBUG] [Thread-196347] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:39:22.265 [DEBUG] [Thread-196347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:39:22.265 [DEBUG] [Thread-196347] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:39:22.266 [DEBUG] [Thread-196347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:39:22.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:39:22.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:39:22.321 [DEBUG] [Thread-196347] [transport.py] [_log()] userauth is OK
2026-04-12T21:39:22.321 [DEBUG] [Thread-196347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:39:22.322 [DEBUG] [Thread-196347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:39:22.322 [DEBUG] [Thread-196347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:39:22.322 [DEBUG] [Thread-196347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:39:22.341 [INFO] [Thread-196347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:39:22.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:39:22.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:39:22.892 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:39:22.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:39:23.133 [DEBUG] [Thread-196347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:39:23.133 [DEBUG] [Thread-196347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:39:23.181 [DEBUG] [Thread-196347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:39:23.181 [DEBUG] [Thread-196347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:39:23.191 [DEBUG] [Thread-196347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:39:23.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:39:23.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:39:23.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:39:23.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:39:23.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:39:23.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:39:23.228 [DEBUG] [Thread-196347] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:39:27.041 [DEBUG] [Thread-196349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:39:42.093 [DEBUG] [Thread-196350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:39:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:39:53.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:39:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:39:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 39, 20), 0.261185, 98.087, 0.0, 8.15292, 11.2273, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:39:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:39:20
2026-04-12T21:39:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:39:55.059 [DEBUG] [Thread-196351] [transport.py] [_log()] starting thread (client mode): 0xb0f6c040
2026-04-12T21:39:55.059 [DEBUG] [Thread-196351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:39:55.076 [DEBUG] [Thread-196351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:39:55.076 [INFO] [Thread-196351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] client lang: <none>
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] server lang: <none>
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] kex follows: False
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] Compression: none
2026-04-12T21:39:55.079 [DEBUG] [Thread-196351] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:39:55.095 [DEBUG] [Thread-196351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:39:55.095 [DEBUG] [Thread-196351] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:39:55.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:39:55.097 [DEBUG] [Thread-196351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:39:55.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:39:55.099 [DEBUG] [Thread-196351] [transport.py] [_log()] userauth is OK
2026-04-12T21:39:55.099 [DEBUG] [Thread-196351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:39:55.100 [DEBUG] [Thread-196351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:39:55.100 [DEBUG] [Thread-196351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:39:55.100 [DEBUG] [Thread-196351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:39:55.123 [INFO] [Thread-196351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:39:55.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:39:55.728 [DEBUG] [Thread-196351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:39:55.729 [DEBUG] [Thread-196351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:39:55.729 [DEBUG] [Thread-196351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:39:55.769 [DEBUG] [Thread-196351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:39:55.770 [DEBUG] [Thread-196351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:39:55.772 [DEBUG] [Thread-196351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:39:55.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:39:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:39:55.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:39:55.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:39:55.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:39:55.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:39:55.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:39:55.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:39:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:39:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.819203 -999.00  +11.40   5.58     94  +10.50 1 2 1 3 1     0    0 0.92 2.15 .NESw 5.6 5.6 225.5 7.1 12.7 -22.5 12.6 -21.3 12.3 -19.6 -999.0 -999.0
2026-04-12T21:39:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:39:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:39:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.819203
2026-04-12T21:39:55.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:39:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:39:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:39:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:39:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:39:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:39:20', tmtdew=0.261185, humidity=98.087, cloud=0.0, wind=8.15292, temperature=11.2273, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:39:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:39:55.793 [DEBUG] [Thread-196351] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:39:55.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:39:55.888 [DEBUG] [Thread-196354] [transport.py] [_log()] starting thread (client mode): 0xae5e58a0
2026-04-12T21:39:55.889 [DEBUG] [Thread-196354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:39:55.903 [DEBUG] [Thread-196354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:39:55.903 [INFO] [Thread-196354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] client lang: <none>
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] server lang: <none>
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] kex follows: False
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:39:55.911 [DEBUG] [Thread-196354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:39:55.912 [DEBUG] [Thread-196354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:39:55.912 [DEBUG] [Thread-196354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:39:55.912 [DEBUG] [Thread-196354] [transport.py] [_log()] Compression: none
2026-04-12T21:39:55.912 [DEBUG] [Thread-196354] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:39:55.968 [DEBUG] [Thread-196354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:39:55.969 [DEBUG] [Thread-196354] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:39:55.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:39:55.970 [DEBUG] [Thread-196354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:39:55.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:39:56.024 [DEBUG] [Thread-196354] [transport.py] [_log()] userauth is OK
2026-04-12T21:39:56.025 [DEBUG] [Thread-196354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:39:56.025 [DEBUG] [Thread-196354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:39:56.025 [DEBUG] [Thread-196354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:39:56.025 [DEBUG] [Thread-196354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:39:56.043 [INFO] [Thread-196354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:39:56.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:39:56.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:39:56.880 [DEBUG] [Thread-196354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:39:56.880 [DEBUG] [Thread-196354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:39:56.933 [DEBUG] [Thread-196354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:39:56.933 [DEBUG] [Thread-196354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:39:56.942 [DEBUG] [Thread-196354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:39:56.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:39:56.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:39:56.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:39:56.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:39:56.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:39:56.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:39:56.978 [DEBUG] [Thread-196354] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:39:57.134 [DEBUG] [Thread-196356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:40:12.197 [DEBUG] [Thread-196357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:40:12.958 [DEBUG] [Thread-196358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:40:23.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:40:23.106 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:40:26.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:40:26.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:40:27.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:40:27.237 [DEBUG] [Thread-196359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:40:28.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 39, 55), 0.261105, 98.0873, 0.0, 8.2764, 11.2109, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:40:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:39:55
2026-04-12T21:40:28.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:40:28.808 [DEBUG] [Thread-196360] [transport.py] [_log()] starting thread (client mode): 0xae535e10
2026-04-12T21:40:28.808 [DEBUG] [Thread-196360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:40:28.825 [DEBUG] [Thread-196360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:40:28.825 [INFO] [Thread-196360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] client lang: <none>
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] server lang: <none>
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] kex follows: False
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] Compression: none
2026-04-12T21:40:28.828 [DEBUG] [Thread-196360] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:40:28.837 [DEBUG] [Thread-196360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:40:28.837 [DEBUG] [Thread-196360] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:40:28.838 [DEBUG] [Thread-196360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:40:28.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:40:28.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:40:28.839 [DEBUG] [Thread-196360] [transport.py] [_log()] userauth is OK
2026-04-12T21:40:28.839 [DEBUG] [Thread-196360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:40:28.839 [DEBUG] [Thread-196360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:40:28.839 [DEBUG] [Thread-196360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:40:28.839 [DEBUG] [Thread-196360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:40:28.859 [INFO] [Thread-196360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:40:28.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:40:29.447 [DEBUG] [Thread-196360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:40:29.447 [DEBUG] [Thread-196360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:40:29.447 [DEBUG] [Thread-196360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:40:29.488 [DEBUG] [Thread-196360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:40:29.488 [DEBUG] [Thread-196360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:40:29.492 [DEBUG] [Thread-196360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:40:29.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:40:29.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:40:29.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:40:29.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:40:29.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:40:29.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:40:29.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:40:29.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:40:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:40:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.819549 -999.00  +11.40   3.68     94  +10.50 1 2 1 3 1     0    0 0.93 2.41 .NESw 3.7 3.7 258.3 7.6 12.7 -22.7 12.6 -21.4 12.3 -19.6 12.6 -21.5
2026-04-12T21:40:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:40:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:40:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.819549
2026-04-12T21:40:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:40:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:40:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:40:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:40:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:40:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:39:55', tmtdew=0.261105, humidity=98.0873, cloud=0.0, wind=8.2764, temperature=11.2109, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:40:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:40:29.517 [DEBUG] [Thread-196360] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:40:29.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:40:29.610 [DEBUG] [Thread-196363] [transport.py] [_log()] starting thread (client mode): 0xae5377f0
2026-04-12T21:40:29.610 [DEBUG] [Thread-196363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:40:29.626 [DEBUG] [Thread-196363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:40:29.626 [INFO] [Thread-196363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] client lang: <none>
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] server lang: <none>
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] kex follows: False
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:40:29.634 [DEBUG] [Thread-196363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:40:29.635 [DEBUG] [Thread-196363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:40:29.635 [DEBUG] [Thread-196363] [transport.py] [_log()] Compression: none
2026-04-12T21:40:29.635 [DEBUG] [Thread-196363] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:40:29.692 [DEBUG] [Thread-196363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:40:29.692 [DEBUG] [Thread-196363] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:40:29.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:40:29.693 [DEBUG] [Thread-196363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:40:29.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:40:29.751 [DEBUG] [Thread-196363] [transport.py] [_log()] userauth is OK
2026-04-12T21:40:29.752 [DEBUG] [Thread-196363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:40:29.752 [DEBUG] [Thread-196363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:40:29.752 [DEBUG] [Thread-196363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:40:29.752 [DEBUG] [Thread-196363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:40:29.772 [INFO] [Thread-196363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:40:29.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:40:29.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:40:30.630 [DEBUG] [Thread-196363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:40:30.630 [DEBUG] [Thread-196363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:40:30.678 [DEBUG] [Thread-196363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:40:30.678 [DEBUG] [Thread-196363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:40:30.687 [DEBUG] [Thread-196363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:40:30.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:40:30.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:40:30.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:40:30.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:40:30.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:40:30.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:40:30.724 [DEBUG] [Thread-196363] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:40:42.272 [DEBUG] [Thread-196365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:40:57.324 [DEBUG] [Thread-196366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:41:00.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:41:00.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:41:00.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:41:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 40, 31), 0.261105, 98.0873, 0.0, 9.01728, 11.2109, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:41:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:40:31
2026-04-12T21:41:02.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:41:02.682 [DEBUG] [Thread-196367] [transport.py] [_log()] starting thread (client mode): 0xa795a710
2026-04-12T21:41:02.682 [DEBUG] [Thread-196367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:41:02.703 [DEBUG] [Thread-196367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:41:02.703 [INFO] [Thread-196367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:41:02.704 [DEBUG] [Thread-196367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] client lang: <none>
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] server lang: <none>
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] kex follows: False
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:41:02.705 [DEBUG] [Thread-196367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:41:02.706 [DEBUG] [Thread-196367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:41:02.706 [DEBUG] [Thread-196367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:41:02.706 [DEBUG] [Thread-196367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:41:02.706 [DEBUG] [Thread-196367] [transport.py] [_log()] Compression: none
2026-04-12T21:41:02.706 [DEBUG] [Thread-196367] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:41:02.717 [DEBUG] [Thread-196367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:41:02.718 [DEBUG] [Thread-196367] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:41:02.719 [DEBUG] [Thread-196367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:41:02.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:41:02.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:41:02.721 [DEBUG] [Thread-196367] [transport.py] [_log()] userauth is OK
2026-04-12T21:41:02.721 [DEBUG] [Thread-196367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:41:02.721 [DEBUG] [Thread-196367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:41:02.721 [DEBUG] [Thread-196367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:41:02.721 [DEBUG] [Thread-196367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:41:02.740 [INFO] [Thread-196367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:41:02.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:41:03.408 [DEBUG] [Thread-196367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:41:03.409 [DEBUG] [Thread-196367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:41:03.409 [DEBUG] [Thread-196367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:41:03.450 [DEBUG] [Thread-196367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:41:03.450 [DEBUG] [Thread-196367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:41:03.454 [DEBUG] [Thread-196367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:41:03.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:41:03.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:41:03.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:41:03.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:41:03.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:41:03.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:41:03.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:41:03.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:41:03.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:41:03.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.819897 -999.00  +11.40   6.06     94  +10.50 1 2 1 3 1     0    0 0.94 2.35 .NESW 6.1 6.1 214.8 6.7 12.7 -22.5 12.6 -21.3 12.3 -19.5 12.6 -21.4
2026-04-12T21:41:03.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:41:03.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:41:03.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.819897
2026-04-12T21:41:03.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:41:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:41:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:41:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:41:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:41:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:40:31', tmtdew=0.261105, humidity=98.0873, cloud=0.0, wind=9.01728, temperature=11.2109, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:40:39.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.8402499999999993, nan, nan, nan, nan, nan, nan, 2.3679999999999994, nan, nan, nan, nan, nan, nan, nan, nan, 1.9552500000000004, 1.3795000000000002, 1.734, 1.3600000000000012, 2.045000000000001, nan, nan], zp_timestamp='2026-04-12T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:41:03.476 [DEBUG] [Thread-196367] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:41:03.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:41:03.569 [DEBUG] [Thread-196370] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-12T21:41:03.569 [DEBUG] [Thread-196370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:41:03.584 [DEBUG] [Thread-196370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:41:03.584 [INFO] [Thread-196370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:41:03.592 [DEBUG] [Thread-196370] [transport.py] [_log()] client lang: <none>
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] server lang: <none>
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] kex follows: False
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] Compression: none
2026-04-12T21:41:03.593 [DEBUG] [Thread-196370] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:41:03.650 [DEBUG] [Thread-196370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:41:03.651 [DEBUG] [Thread-196370] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:41:03.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:41:03.652 [DEBUG] [Thread-196370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:41:03.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:41:03.706 [DEBUG] [Thread-196370] [transport.py] [_log()] userauth is OK
2026-04-12T21:41:03.706 [DEBUG] [Thread-196370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:41:03.707 [DEBUG] [Thread-196370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:41:03.707 [DEBUG] [Thread-196370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:41:03.707 [DEBUG] [Thread-196370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:41:03.730 [INFO] [Thread-196370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:41:03.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:41:03.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:41:04.557 [DEBUG] [Thread-196370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:41:04.557 [DEBUG] [Thread-196370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:41:04.605 [DEBUG] [Thread-196370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:41:04.605 [DEBUG] [Thread-196370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:41:04.614 [DEBUG] [Thread-196370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:41:04.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:41:04.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:41:04.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:41:04.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:41:04.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:41:04.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:41:04.651 [DEBUG] [Thread-196370] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:41:12.362 [DEBUG] [Thread-196372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:41:13.024 [DEBUG] [Thread-196373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:41:23.312 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:41:23.313 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:41:27.421 [DEBUG] [Thread-196374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:41:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:41:34.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:41:34.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:41:35.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 41, 6), 0.258465, 98.1041, 0.0, 8.96436, 11.1945, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:41:35.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:41:06
2026-04-12T21:41:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:41:36.477 [DEBUG] [Thread-196375] [transport.py] [_log()] starting thread (client mode): 0xb0f41ff0
2026-04-12T21:41:36.478 [DEBUG] [Thread-196375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:41:36.499 [DEBUG] [Thread-196375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:41:36.499 [INFO] [Thread-196375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:41:36.503 [DEBUG] [Thread-196375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] client lang: <none>
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] server lang: <none>
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] kex follows: False
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] Compression: none
2026-04-12T21:41:36.504 [DEBUG] [Thread-196375] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:41:36.524 [DEBUG] [Thread-196375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:41:36.524 [DEBUG] [Thread-196375] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:41:36.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:41:36.525 [DEBUG] [Thread-196375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:41:36.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:41:36.527 [DEBUG] [Thread-196375] [transport.py] [_log()] userauth is OK
2026-04-12T21:41:36.527 [DEBUG] [Thread-196375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:41:36.528 [DEBUG] [Thread-196375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:41:36.528 [DEBUG] [Thread-196375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:41:36.528 [DEBUG] [Thread-196375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:41:36.553 [INFO] [Thread-196375] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:41:36.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:41:37.331 [DEBUG] [Thread-196375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:41:37.331 [DEBUG] [Thread-196375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:41:37.332 [DEBUG] [Thread-196375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:41:37.372 [DEBUG] [Thread-196375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:41:37.372 [DEBUG] [Thread-196375] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:41:37.375 [DEBUG] [Thread-196375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:41:37.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:41:37.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:41:37.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:41:37.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:41:37.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:41:37.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:41:37.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:41:37.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:41:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:41:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.819897 -999.00  +11.40   6.06     94  +10.50 1 2 1 3 1     0    0 0.94 2.35 .NESW 6.1 6.1 214.8 6.7 12.7 -22.5 12.6 -21.3 12.3 -19.5 12.6 -21.4
2026-04-12T21:41:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:41:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:41:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.819897
2026-04-12T21:41:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:41:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:41:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:41:37.402 [DEBUG] [Thread-196375] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:41:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:41:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:41:37.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:41:06', tmtdew=0.258465, humidity=98.1041, cloud=0.0, wind=8.96436, temperature=11.1945, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:40:39.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:41:37.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:41:37.496 [DEBUG] [Thread-196378] [transport.py] [_log()] starting thread (client mode): 0xae50a2c0
2026-04-12T21:41:37.496 [DEBUG] [Thread-196378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:41:37.511 [DEBUG] [Thread-196378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:41:37.511 [INFO] [Thread-196378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] client lang: <none>
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] server lang: <none>
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] kex follows: False
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:41:37.519 [DEBUG] [Thread-196378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:41:37.520 [DEBUG] [Thread-196378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:41:37.520 [DEBUG] [Thread-196378] [transport.py] [_log()] Compression: none
2026-04-12T21:41:37.520 [DEBUG] [Thread-196378] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:41:37.577 [DEBUG] [Thread-196378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:41:37.578 [DEBUG] [Thread-196378] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:41:37.578 [DEBUG] [Thread-196378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:41:37.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:41:37.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:41:37.633 [DEBUG] [Thread-196378] [transport.py] [_log()] userauth is OK
2026-04-12T21:41:37.634 [DEBUG] [Thread-196378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:41:37.634 [DEBUG] [Thread-196378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:41:37.634 [DEBUG] [Thread-196378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:41:37.634 [DEBUG] [Thread-196378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:41:37.658 [INFO] [Thread-196378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:41:37.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:41:37.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:41:38.484 [DEBUG] [Thread-196378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:41:38.485 [DEBUG] [Thread-196378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:41:38.533 [DEBUG] [Thread-196378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:41:38.533 [DEBUG] [Thread-196378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:41:38.542 [DEBUG] [Thread-196378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:41:38.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:41:38.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:41:38.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:41:38.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:41:38.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:41:38.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:41:38.577 [DEBUG] [Thread-196378] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:41:42.457 [DEBUG] [Thread-196380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:41:57.510 [DEBUG] [Thread-196381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:42:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:42:08.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:42:08.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:42:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 41, 42), 0.42696, 97.1419, 0.0, 11.4343, 11.3894, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:42:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:41:42
2026-04-12T21:42:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:42:10.425 [DEBUG] [Thread-196382] [transport.py] [_log()] starting thread (client mode): 0xb0f6e680
2026-04-12T21:42:10.425 [DEBUG] [Thread-196382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:42:10.446 [DEBUG] [Thread-196382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:42:10.447 [INFO] [Thread-196382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] client lang: <none>
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] server lang: <none>
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] kex follows: False
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:42:10.450 [DEBUG] [Thread-196382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:42:10.451 [DEBUG] [Thread-196382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:42:10.451 [DEBUG] [Thread-196382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:42:10.451 [DEBUG] [Thread-196382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:42:10.451 [DEBUG] [Thread-196382] [transport.py] [_log()] Compression: none
2026-04-12T21:42:10.451 [DEBUG] [Thread-196382] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:42:10.467 [DEBUG] [Thread-196382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:42:10.467 [DEBUG] [Thread-196382] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:42:10.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:42:10.468 [DEBUG] [Thread-196382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:42:10.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:42:10.470 [DEBUG] [Thread-196382] [transport.py] [_log()] userauth is OK
2026-04-12T21:42:10.470 [DEBUG] [Thread-196382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:42:10.470 [DEBUG] [Thread-196382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:42:10.470 [DEBUG] [Thread-196382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:42:10.470 [DEBUG] [Thread-196382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:42:10.494 [INFO] [Thread-196382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:42:10.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:42:11.294 [DEBUG] [Thread-196382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:42:11.295 [DEBUG] [Thread-196382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:42:11.295 [DEBUG] [Thread-196382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:42:11.336 [DEBUG] [Thread-196382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:42:11.336 [DEBUG] [Thread-196382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:42:11.340 [DEBUG] [Thread-196382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:42:11.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:42:11.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:42:11.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:42:11.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:42:11.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:42:11.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:42:11.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:42:11.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:42:11.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:42:11.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.820244 -999.00  +11.40   7.14     94  +10.50 1 2 1 3 1     0    0 0.96 2.90 .NESW 7.1 7.1 219.4 8.6 12.7 -22.5 12.5 -21.3 12.3 -19.5 12.6 -21.4
2026-04-12T21:42:11.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:42:11.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:42:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.820244
2026-04-12T21:42:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:42:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:42:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:42:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:42:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:42:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:41:42', tmtdew=0.42696, humidity=97.1419, cloud=0.0, wind=11.4343, temperature=11.3894, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:41:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:42:11.368 [DEBUG] [Thread-196382] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:42:11.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:42:11.479 [DEBUG] [Thread-196385] [transport.py] [_log()] starting thread (client mode): 0xb0f6e290
2026-04-12T21:42:11.480 [DEBUG] [Thread-196385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:42:11.495 [DEBUG] [Thread-196385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:42:11.495 [INFO] [Thread-196385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:42:11.502 [DEBUG] [Thread-196385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] client lang: <none>
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] server lang: <none>
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] kex follows: False
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] Compression: none
2026-04-12T21:42:11.503 [DEBUG] [Thread-196385] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:42:11.561 [DEBUG] [Thread-196385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:42:11.561 [DEBUG] [Thread-196385] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:42:11.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:42:11.563 [DEBUG] [Thread-196385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:42:11.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:42:11.616 [DEBUG] [Thread-196385] [transport.py] [_log()] userauth is OK
2026-04-12T21:42:11.616 [DEBUG] [Thread-196385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:42:11.617 [DEBUG] [Thread-196385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:42:11.617 [DEBUG] [Thread-196385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:42:11.617 [DEBUG] [Thread-196385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:42:11.639 [INFO] [Thread-196385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:42:11.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:42:11.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:42:12.460 [DEBUG] [Thread-196385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:42:12.461 [DEBUG] [Thread-196385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:42:12.509 [DEBUG] [Thread-196385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:42:12.509 [DEBUG] [Thread-196385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:42:12.519 [DEBUG] [Thread-196385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:42:12.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:42:12.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:42:12.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:42:12.547 [DEBUG] [Thread-196387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:42:12.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:42:12.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:42:12.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:42:12.557 [DEBUG] [Thread-196385] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:42:13.106 [DEBUG] [Thread-196388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:42:23.516 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:42:23.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:42:27.597 [DEBUG] [Thread-196389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:42:42.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:42:42.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:42:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:42:42.631 [DEBUG] [Thread-196390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:42:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 42, 17), 0.25326, 98.1374, 0.0, 8.96436, 11.178, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:42:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:42:17
2026-04-12T21:42:44.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:42:44.364 [DEBUG] [Thread-196391] [transport.py] [_log()] starting thread (client mode): 0xb0f6fee0
2026-04-12T21:42:44.364 [DEBUG] [Thread-196391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:42:44.385 [DEBUG] [Thread-196391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:42:44.385 [INFO] [Thread-196391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:42:44.388 [DEBUG] [Thread-196391] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:42:44.388 [DEBUG] [Thread-196391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:42:44.388 [DEBUG] [Thread-196391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:42:44.388 [DEBUG] [Thread-196391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] client lang: <none>
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] server lang: <none>
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] kex follows: False
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:42:44.389 [DEBUG] [Thread-196391] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:42:44.390 [DEBUG] [Thread-196391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:42:44.390 [DEBUG] [Thread-196391] [transport.py] [_log()] Compression: none
2026-04-12T21:42:44.390 [DEBUG] [Thread-196391] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:42:44.408 [DEBUG] [Thread-196391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:42:44.408 [DEBUG] [Thread-196391] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:42:44.409 [DEBUG] [Thread-196391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:42:44.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:42:44.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:42:44.411 [DEBUG] [Thread-196391] [transport.py] [_log()] userauth is OK
2026-04-12T21:42:44.411 [DEBUG] [Thread-196391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:42:44.411 [DEBUG] [Thread-196391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:42:44.411 [DEBUG] [Thread-196391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:42:44.411 [DEBUG] [Thread-196391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:42:44.431 [INFO] [Thread-196391] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:42:44.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:42:45.227 [DEBUG] [Thread-196391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:42:45.227 [DEBUG] [Thread-196391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:42:45.228 [DEBUG] [Thread-196391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:42:45.268 [DEBUG] [Thread-196391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:42:45.268 [DEBUG] [Thread-196391] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:42:45.271 [DEBUG] [Thread-196391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:42:45.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:42:45.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:42:45.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:42:45.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:42:45.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:42:45.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:42:45.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:42:45.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:42:45.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:42:45.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.820591 -999.00  +11.40   4.71     94  +10.50 1 2 1 3 1     0    0 0.96 3.21 .nESw 4.7 4.7 206.8 9.3 12.7 -22.6 12.5 -21.2 12.2 -19.5 12.6 -21.5
2026-04-12T21:42:45.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:42:45.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:42:45.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.820591
2026-04-12T21:42:45.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:42:45.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:42:45.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:42:45.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:42:45.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:42:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:42:17', tmtdew=0.25326, humidity=98.1374, cloud=0.0, wind=8.96436, temperature=11.178, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:41:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:42:45.297 [DEBUG] [Thread-196391] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:42:45.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:42:45.401 [DEBUG] [Thread-196394] [transport.py] [_log()] starting thread (client mode): 0xb0f8db40
2026-04-12T21:42:45.401 [DEBUG] [Thread-196394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:42:45.415 [DEBUG] [Thread-196394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:42:45.416 [INFO] [Thread-196394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:42:45.423 [DEBUG] [Thread-196394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:42:45.423 [DEBUG] [Thread-196394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:42:45.423 [DEBUG] [Thread-196394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:42:45.423 [DEBUG] [Thread-196394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:45.423 [DEBUG] [Thread-196394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:42:45.423 [DEBUG] [Thread-196394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] client lang: <none>
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] server lang: <none>
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] kex follows: False
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:42:45.424 [DEBUG] [Thread-196394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:42:45.425 [DEBUG] [Thread-196394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:42:45.425 [DEBUG] [Thread-196394] [transport.py] [_log()] Compression: none
2026-04-12T21:42:45.425 [DEBUG] [Thread-196394] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:42:45.483 [DEBUG] [Thread-196394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:42:45.483 [DEBUG] [Thread-196394] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:42:45.484 [DEBUG] [Thread-196394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:42:45.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:42:45.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:42:45.539 [DEBUG] [Thread-196394] [transport.py] [_log()] userauth is OK
2026-04-12T21:42:45.539 [DEBUG] [Thread-196394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:42:45.539 [DEBUG] [Thread-196394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:42:45.539 [DEBUG] [Thread-196394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:42:45.539 [DEBUG] [Thread-196394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:42:45.561 [INFO] [Thread-196394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:42:45.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:42:45.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:42:46.370 [DEBUG] [Thread-196394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:42:46.370 [DEBUG] [Thread-196394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:42:46.417 [DEBUG] [Thread-196394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:42:46.418 [DEBUG] [Thread-196394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:42:46.426 [DEBUG] [Thread-196394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:42:46.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:42:46.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:42:46.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:42:46.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:42:46.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:42:46.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:42:46.460 [DEBUG] [Thread-196394] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:42:57.666 [DEBUG] [Thread-196396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:43:12.719 [DEBUG] [Thread-196397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:43:13.173 [DEBUG] [Thread-196398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:43:16.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:43:16.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:43:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:43:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 42, 53), 0.42177, 97.1753, 0.0, 10.7993, 11.3896, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:43:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:42:53
2026-04-12T21:43:18.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:43:18.320 [DEBUG] [Thread-196399] [transport.py] [_log()] starting thread (client mode): 0xb0f6c700
2026-04-12T21:43:18.320 [DEBUG] [Thread-196399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:43:18.341 [DEBUG] [Thread-196399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:43:18.341 [INFO] [Thread-196399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:43:18.342 [DEBUG] [Thread-196399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:43:18.342 [DEBUG] [Thread-196399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:43:18.342 [DEBUG] [Thread-196399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] client lang: <none>
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] server lang: <none>
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] kex follows: False
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:43:18.343 [DEBUG] [Thread-196399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:43:18.344 [DEBUG] [Thread-196399] [transport.py] [_log()] Compression: none
2026-04-12T21:43:18.344 [DEBUG] [Thread-196399] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:43:18.355 [DEBUG] [Thread-196399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:43:18.356 [DEBUG] [Thread-196399] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:43:18.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:43:18.358 [DEBUG] [Thread-196399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:43:18.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:43:18.360 [DEBUG] [Thread-196399] [transport.py] [_log()] userauth is OK
2026-04-12T21:43:18.360 [DEBUG] [Thread-196399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:43:18.360 [DEBUG] [Thread-196399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:43:18.361 [DEBUG] [Thread-196399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:43:18.361 [DEBUG] [Thread-196399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:43:18.378 [INFO] [Thread-196399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:43:18.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:43:19.140 [DEBUG] [Thread-196399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:43:19.140 [DEBUG] [Thread-196399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:43:19.141 [DEBUG] [Thread-196399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:43:19.181 [DEBUG] [Thread-196399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:43:19.182 [DEBUG] [Thread-196399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:43:19.185 [DEBUG] [Thread-196399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:43:19.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:43:19.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:43:19.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:43:19.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:43:19.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:43:19.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:43:19.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:43:19.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:43:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:43:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.821285 -999.00  +11.40   6.01     93  +10.40 1 1 1 3 1     0    0 0.99 4.53 ZNESW 6.0 6.0 232.0 8.0 12.6 -22.4 12.5 -21.2 12.2 -19.4 12.5 -21.4
2026-04-12T21:43:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:43:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:43:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.821285
2026-04-12T21:43:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T21:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:42:53', tmtdew=0.42177, humidity=97.1753, cloud=0.0, wind=10.7993, temperature=11.3896, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:42:39.024', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:43:19.212 [DEBUG] [Thread-196399] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:43:19.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:43:19.304 [DEBUG] [Thread-196402] [transport.py] [_log()] starting thread (client mode): 0xae5e4e20
2026-04-12T21:43:19.305 [DEBUG] [Thread-196402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:43:19.319 [DEBUG] [Thread-196402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:43:19.320 [INFO] [Thread-196402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:43:19.327 [DEBUG] [Thread-196402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] client lang: <none>
2026-04-12T21:43:19.328 [DEBUG] [Thread-196402] [transport.py] [_log()] server lang: <none>
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] kex follows: False
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] Compression: none
2026-04-12T21:43:19.329 [DEBUG] [Thread-196402] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:43:19.387 [DEBUG] [Thread-196402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:43:19.387 [DEBUG] [Thread-196402] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:43:19.388 [DEBUG] [Thread-196402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:43:19.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:43:19.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:43:19.443 [DEBUG] [Thread-196402] [transport.py] [_log()] userauth is OK
2026-04-12T21:43:19.443 [DEBUG] [Thread-196402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:43:19.444 [DEBUG] [Thread-196402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:43:19.444 [DEBUG] [Thread-196402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:43:19.444 [DEBUG] [Thread-196402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:43:19.462 [INFO] [Thread-196402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:43:19.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:43:19.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:43:20.260 [DEBUG] [Thread-196402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:43:20.260 [DEBUG] [Thread-196402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:43:20.308 [DEBUG] [Thread-196402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:43:20.309 [DEBUG] [Thread-196402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:43:20.317 [DEBUG] [Thread-196402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:43:20.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:43:20.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:43:20.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:43:20.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:43:20.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:43:20.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:43:20.352 [DEBUG] [Thread-196402] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:43:23.725 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:43:23.726 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:43:27.758 [DEBUG] [Thread-196404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:43:42.811 [DEBUG] [Thread-196405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:43:50.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:43:50.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:43:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:43:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 43, 28), 0.258255, 98.1044, 0.0, 9.37008, 11.1283, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:43:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:43:28
2026-04-12T21:43:52.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:43:52.164 [DEBUG] [Thread-196406] [transport.py] [_log()] starting thread (client mode): 0xae536830
2026-04-12T21:43:52.164 [DEBUG] [Thread-196406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:43:52.182 [DEBUG] [Thread-196406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:43:52.182 [INFO] [Thread-196406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] client lang: <none>
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] server lang: <none>
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] kex follows: False
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] Compression: none
2026-04-12T21:43:52.186 [DEBUG] [Thread-196406] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:43:52.202 [DEBUG] [Thread-196406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:43:52.203 [DEBUG] [Thread-196406] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:43:52.203 [DEBUG] [Thread-196406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:43:52.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:43:52.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:43:52.205 [DEBUG] [Thread-196406] [transport.py] [_log()] userauth is OK
2026-04-12T21:43:52.206 [DEBUG] [Thread-196406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:43:52.206 [DEBUG] [Thread-196406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:43:52.206 [DEBUG] [Thread-196406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:43:52.206 [DEBUG] [Thread-196406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:43:52.225 [INFO] [Thread-196406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:43:52.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:43:53.009 [DEBUG] [Thread-196406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:43:53.009 [DEBUG] [Thread-196406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:43:53.010 [DEBUG] [Thread-196406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:43:53.050 [DEBUG] [Thread-196406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:43:53.050 [DEBUG] [Thread-196406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:43:53.054 [DEBUG] [Thread-196406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:43:53.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:43:53.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:43:53.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:43:53.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:43:53.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:43:53.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:43:53.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.821633 -999.00  +11.40   2.40     93  +10.40 1 2 1 3 1     0    0 1.00 4.83 ZnESW 2.4 2.4 192.3 9.3 12.6 -22.4 12.5 -21.1 12.2 -19.4 12.5 -21.3
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.821633
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:43:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:43:28', tmtdew=0.258255, humidity=98.1044, cloud=0.0, wind=9.37008, temperature=11.1283, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:43:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:43:53.073 [DEBUG] [Thread-196406] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:43:53.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:43:53.160 [DEBUG] [Thread-196409] [transport.py] [_log()] starting thread (client mode): 0xae535780
2026-04-12T21:43:53.160 [DEBUG] [Thread-196409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:43:53.174 [DEBUG] [Thread-196409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:43:53.174 [INFO] [Thread-196409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:43:53.182 [DEBUG] [Thread-196409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] client lang: <none>
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] server lang: <none>
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] kex follows: False
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:43:53.183 [DEBUG] [Thread-196409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:43:53.184 [DEBUG] [Thread-196409] [transport.py] [_log()] Compression: none
2026-04-12T21:43:53.184 [DEBUG] [Thread-196409] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:43:53.240 [DEBUG] [Thread-196409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:43:53.240 [DEBUG] [Thread-196409] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:43:53.240 [DEBUG] [Thread-196409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:43:53.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:43:53.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:43:53.298 [DEBUG] [Thread-196409] [transport.py] [_log()] userauth is OK
2026-04-12T21:43:53.298 [DEBUG] [Thread-196409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:43:53.299 [DEBUG] [Thread-196409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:43:53.299 [DEBUG] [Thread-196409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:43:53.299 [DEBUG] [Thread-196409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:43:53.323 [INFO] [Thread-196409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:43:53.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:43:53.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:43:54.123 [DEBUG] [Thread-196409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:43:54.123 [DEBUG] [Thread-196409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:43:54.171 [DEBUG] [Thread-196409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:43:54.171 [DEBUG] [Thread-196409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:43:54.181 [DEBUG] [Thread-196409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:43:54.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:43:54.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:43:54.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:43:54.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:43:54.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:43:54.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:43:54.218 [DEBUG] [Thread-196409] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:43:57.849 [DEBUG] [Thread-196411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:12.909 [DEBUG] [Thread-196412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:13.255 [DEBUG] [Thread-196413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:23.926 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:23.927 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:44:24.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:44:24.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:44:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 44, 3), 0.260785, 98.0878, 0.0, 9.1584, 11.1117, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:44:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:44:03
2026-04-12T21:44:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:44:26.105 [DEBUG] [Thread-196414] [transport.py] [_log()] starting thread (client mode): 0xae5e6fb0
2026-04-12T21:44:26.106 [DEBUG] [Thread-196414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:44:26.127 [DEBUG] [Thread-196414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:44:26.128 [INFO] [Thread-196414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:44:26.130 [DEBUG] [Thread-196414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] client lang: <none>
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] server lang: <none>
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] kex follows: False
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] Compression: none
2026-04-12T21:44:26.131 [DEBUG] [Thread-196414] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:44:26.154 [DEBUG] [Thread-196414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:44:26.154 [DEBUG] [Thread-196414] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:44:26.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:44:26.165 [DEBUG] [Thread-196414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:44:26.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:44:26.167 [DEBUG] [Thread-196414] [transport.py] [_log()] userauth is OK
2026-04-12T21:44:26.167 [DEBUG] [Thread-196414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:44:26.167 [DEBUG] [Thread-196414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:44:26.168 [DEBUG] [Thread-196414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:44:26.168 [DEBUG] [Thread-196414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:44:26.188 [INFO] [Thread-196414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:44:26.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:44:27.008 [DEBUG] [Thread-196414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:44:27.008 [DEBUG] [Thread-196414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:44:27.008 [DEBUG] [Thread-196414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:44:27.049 [DEBUG] [Thread-196414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:44:27.049 [DEBUG] [Thread-196414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:44:27.052 [DEBUG] [Thread-196414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:44:27.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:44:27.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:44:27.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:44:27.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:44:27.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:44:27.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:44:27.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:44:27.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:44:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:44:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.821980 -999.00  +11.40   6.62     93  +10.40 1 2 1 3 1     0    0 1.04 5.22 ZnESW 6.6 6.6 214.7 8.4 12.6 -22.3 12.5 -21.3 12.2 -19.3 12.5 -21.2
2026-04-12T21:44:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:44:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:44:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.821980
2026-04-12T21:44:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:44:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:44:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:44:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:44:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:44:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:44:03', tmtdew=0.260785, humidity=98.0878, cloud=0.0, wind=9.1584, temperature=11.1117, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:43:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:44:27.079 [DEBUG] [Thread-196414] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:44:27.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:44:27.172 [DEBUG] [Thread-196417] [transport.py] [_log()] starting thread (client mode): 0xb0f6dfc0
2026-04-12T21:44:27.172 [DEBUG] [Thread-196417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:44:27.187 [DEBUG] [Thread-196417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:44:27.187 [INFO] [Thread-196417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:44:27.195 [DEBUG] [Thread-196417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:44:27.195 [DEBUG] [Thread-196417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:44:27.195 [DEBUG] [Thread-196417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:44:27.195 [DEBUG] [Thread-196417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] client lang: <none>
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] server lang: <none>
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] kex follows: False
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:44:27.196 [DEBUG] [Thread-196417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:44:27.197 [DEBUG] [Thread-196417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:44:27.197 [DEBUG] [Thread-196417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:44:27.197 [DEBUG] [Thread-196417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:44:27.197 [DEBUG] [Thread-196417] [transport.py] [_log()] Compression: none
2026-04-12T21:44:27.197 [DEBUG] [Thread-196417] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:44:27.254 [DEBUG] [Thread-196417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:44:27.255 [DEBUG] [Thread-196417] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:44:27.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:44:27.256 [DEBUG] [Thread-196417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:44:27.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:44:27.313 [DEBUG] [Thread-196417] [transport.py] [_log()] userauth is OK
2026-04-12T21:44:27.314 [DEBUG] [Thread-196417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:44:27.314 [DEBUG] [Thread-196417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:44:27.314 [DEBUG] [Thread-196417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:44:27.314 [DEBUG] [Thread-196417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:44:27.334 [INFO] [Thread-196417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:44:27.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:44:27.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:44:27.949 [DEBUG] [Thread-196419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:28.173 [DEBUG] [Thread-196417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:44:28.173 [DEBUG] [Thread-196417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:44:28.222 [DEBUG] [Thread-196417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:44:28.222 [DEBUG] [Thread-196417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:44:28.231 [DEBUG] [Thread-196417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:44:28.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:44:28.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:44:28.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:44:28.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:44:28.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:44:28.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:44:28.265 [DEBUG] [Thread-196417] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:44:42.999 [DEBUG] [Thread-196420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:58.031 [DEBUG] [Thread-196421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:44:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:44:58.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:44:58.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:44:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 44, 39), 0.37044, 97.5067, 0.0, 10.4465, 11.3562, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:44:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:44:39
2026-04-12T21:44:59.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:45:00.073 [DEBUG] [Thread-196422] [transport.py] [_log()] starting thread (client mode): 0xb0f8e560
2026-04-12T21:45:00.073 [DEBUG] [Thread-196422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:45:00.092 [DEBUG] [Thread-196422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:45:00.092 [INFO] [Thread-196422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] client lang: <none>
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] server lang: <none>
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] kex follows: False
2026-04-12T21:45:00.095 [DEBUG] [Thread-196422] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:45:00.096 [DEBUG] [Thread-196422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:45:00.096 [DEBUG] [Thread-196422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:45:00.096 [DEBUG] [Thread-196422] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:45:00.096 [DEBUG] [Thread-196422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:45:00.096 [DEBUG] [Thread-196422] [transport.py] [_log()] Compression: none
2026-04-12T21:45:00.096 [DEBUG] [Thread-196422] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:45:00.113 [DEBUG] [Thread-196422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:45:00.114 [DEBUG] [Thread-196422] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:45:00.114 [DEBUG] [Thread-196422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:45:00.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:45:00.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:45:00.117 [DEBUG] [Thread-196422] [transport.py] [_log()] userauth is OK
2026-04-12T21:45:00.117 [DEBUG] [Thread-196422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:45:00.117 [DEBUG] [Thread-196422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:45:00.117 [DEBUG] [Thread-196422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:45:00.117 [DEBUG] [Thread-196422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:45:00.140 [INFO] [Thread-196422] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:45:00.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:45:00.933 [DEBUG] [Thread-196422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:45:00.933 [DEBUG] [Thread-196422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:45:00.933 [DEBUG] [Thread-196422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:45:00.973 [DEBUG] [Thread-196422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:45:00.974 [DEBUG] [Thread-196422] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:45:00.976 [DEBUG] [Thread-196422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:45:00.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:45:00.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:45:00.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:45:00.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:45:00.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:45:00.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:45:00.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.822327 -999.00  +11.40   5.91     93  +10.40 1 2 1 3 1     0    0 1.04 5.61 .nESW 5.9 5.9 215.9 9.1 12.6 -22.3 12.5 -21.2 12.2 -19.3 12.5 -21.3
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.822327
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:45:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:44:39', tmtdew=0.37044, humidity=97.5067, cloud=0.0, wind=10.4465, temperature=11.3562, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:44:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:45:00.996 [DEBUG] [Thread-196422] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:45:01.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:45:01.091 [DEBUG] [Thread-196425] [transport.py] [_log()] starting thread (client mode): 0xb0f6eb00
2026-04-12T21:45:01.091 [DEBUG] [Thread-196425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:45:01.108 [DEBUG] [Thread-196425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:45:01.108 [INFO] [Thread-196425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:45:01.115 [DEBUG] [Thread-196425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:45:01.115 [DEBUG] [Thread-196425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] client lang: <none>
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] server lang: <none>
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] kex follows: False
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:45:01.116 [DEBUG] [Thread-196425] [transport.py] [_log()] Compression: none
2026-04-12T21:45:01.118 [DEBUG] [Thread-196425] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:45:01.171 [DEBUG] [Thread-196425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:45:01.171 [DEBUG] [Thread-196425] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:45:01.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:45:01.172 [DEBUG] [Thread-196425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:45:01.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:45:01.230 [DEBUG] [Thread-196425] [transport.py] [_log()] userauth is OK
2026-04-12T21:45:01.230 [DEBUG] [Thread-196425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:45:01.230 [DEBUG] [Thread-196425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:45:01.230 [DEBUG] [Thread-196425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:45:01.230 [DEBUG] [Thread-196425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:45:01.248 [INFO] [Thread-196425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:45:01.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:45:01.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:45:02.060 [DEBUG] [Thread-196425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:45:02.061 [DEBUG] [Thread-196425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:45:02.112 [DEBUG] [Thread-196425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:45:02.112 [DEBUG] [Thread-196425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:45:02.121 [DEBUG] [Thread-196425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:45:02.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:45:02.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:45:02.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:45:02.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:45:02.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:45:02.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:45:02.155 [DEBUG] [Thread-196425] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:45:13.066 [DEBUG] [Thread-196427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:45:13.333 [DEBUG] [Thread-196428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:45:24.132 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:45:24.133 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:45:28.131 [DEBUG] [Thread-196429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:45:32.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:45:32.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:45:32.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:45:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 45, 15), 0.250595, 98.1544, 0.0, 9.38772, 11.1617, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:45:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:45:15
2026-04-12T21:45:33.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:45:33.975 [DEBUG] [Thread-196430] [transport.py] [_log()] starting thread (client mode): 0xb0f41900
2026-04-12T21:45:33.976 [DEBUG] [Thread-196430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:45:33.998 [DEBUG] [Thread-196430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:45:33.998 [INFO] [Thread-196430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:45:34.002 [DEBUG] [Thread-196430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] client lang: <none>
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] server lang: <none>
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] kex follows: False
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] Compression: none
2026-04-12T21:45:34.003 [DEBUG] [Thread-196430] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:45:34.023 [DEBUG] [Thread-196430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:45:34.023 [DEBUG] [Thread-196430] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:45:34.024 [DEBUG] [Thread-196430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:45:34.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:45:34.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:45:34.025 [DEBUG] [Thread-196430] [transport.py] [_log()] userauth is OK
2026-04-12T21:45:34.026 [DEBUG] [Thread-196430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:45:34.026 [DEBUG] [Thread-196430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:45:34.026 [DEBUG] [Thread-196430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:45:34.026 [DEBUG] [Thread-196430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:45:34.043 [INFO] [Thread-196430] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:45:34.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:45:34.798 [DEBUG] [Thread-196430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:45:34.798 [DEBUG] [Thread-196430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:45:34.798 [DEBUG] [Thread-196430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:45:34.839 [DEBUG] [Thread-196430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:45:34.839 [DEBUG] [Thread-196430] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:45:34.842 [DEBUG] [Thread-196430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:45:34.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:45:34.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:45:34.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:45:34.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:45:34.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:45:34.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:45:34.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:45:34.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:45:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:45:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.822674 -999.00  +11.40   4.67     93  +10.40 1 2 1 3 1     0    0 1.05 6.10 ZnEsw 4.7 4.7 207.0 7.5 12.5 -22.3 12.4 -21.2 12.2 -19.2 12.5 -21.2
2026-04-12T21:45:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:45:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:45:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.822674
2026-04-12T21:45:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:45:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:45:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:45:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:45:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:45:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:45:15', tmtdew=0.250595, humidity=98.1544, cloud=0.0, wind=9.38772, temperature=11.1617, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:44:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:45:34.867 [DEBUG] [Thread-196430] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:45:34.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:45:34.953 [DEBUG] [Thread-196433] [transport.py] [_log()] starting thread (client mode): 0xae50add0
2026-04-12T21:45:34.953 [DEBUG] [Thread-196433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:45:34.968 [DEBUG] [Thread-196433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:45:34.968 [INFO] [Thread-196433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:45:34.975 [DEBUG] [Thread-196433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] client lang: <none>
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] server lang: <none>
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] kex follows: False
2026-04-12T21:45:34.976 [DEBUG] [Thread-196433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:45:34.977 [DEBUG] [Thread-196433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:45:34.977 [DEBUG] [Thread-196433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:45:34.977 [DEBUG] [Thread-196433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:45:34.977 [DEBUG] [Thread-196433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:45:34.977 [DEBUG] [Thread-196433] [transport.py] [_log()] Compression: none
2026-04-12T21:45:34.977 [DEBUG] [Thread-196433] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:45:35.037 [DEBUG] [Thread-196433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:45:35.038 [DEBUG] [Thread-196433] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:45:35.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:45:35.039 [DEBUG] [Thread-196433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:45:35.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:45:35.100 [DEBUG] [Thread-196433] [transport.py] [_log()] userauth is OK
2026-04-12T21:45:35.101 [DEBUG] [Thread-196433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:45:35.101 [DEBUG] [Thread-196433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:45:35.101 [DEBUG] [Thread-196433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:45:35.101 [DEBUG] [Thread-196433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:45:35.120 [INFO] [Thread-196433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:45:35.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:45:35.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:45:35.955 [DEBUG] [Thread-196433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:45:35.955 [DEBUG] [Thread-196433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:45:36.003 [DEBUG] [Thread-196433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:45:36.003 [DEBUG] [Thread-196433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:45:36.013 [DEBUG] [Thread-196433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:45:36.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:45:36.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:45:36.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:45:36.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:45:36.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:45:36.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:45:36.051 [DEBUG] [Thread-196433] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:45:43.170 [DEBUG] [Thread-196435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:45:58.222 [DEBUG] [Thread-196436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:46:06.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:46:06.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:46:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:46:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 45, 51), 0.40609, 97.2757, 0.0, 11.3285, 11.3238, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:46:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:45:51
2026-04-12T21:46:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:46:07.867 [DEBUG] [Thread-196437] [transport.py] [_log()] starting thread (client mode): 0xae509c90
2026-04-12T21:46:07.867 [DEBUG] [Thread-196437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:46:07.880 [DEBUG] [Thread-196437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:46:07.880 [INFO] [Thread-196437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] client lang: <none>
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] server lang: <none>
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] kex follows: False
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] Compression: none
2026-04-12T21:46:07.884 [DEBUG] [Thread-196437] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:46:07.900 [DEBUG] [Thread-196437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:46:07.901 [DEBUG] [Thread-196437] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:46:07.901 [DEBUG] [Thread-196437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:46:07.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:46:07.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:46:07.903 [DEBUG] [Thread-196437] [transport.py] [_log()] userauth is OK
2026-04-12T21:46:07.903 [DEBUG] [Thread-196437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:46:07.903 [DEBUG] [Thread-196437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:46:07.903 [DEBUG] [Thread-196437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:46:07.903 [DEBUG] [Thread-196437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:46:07.917 [INFO] [Thread-196437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:46:07.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:46:08.720 [DEBUG] [Thread-196437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:46:08.721 [DEBUG] [Thread-196437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:46:08.721 [DEBUG] [Thread-196437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:46:08.762 [DEBUG] [Thread-196437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:46:08.762 [DEBUG] [Thread-196437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:46:08.765 [DEBUG] [Thread-196437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:46:08.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:46:08.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:46:08.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:46:08.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:46:08.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:46:08.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:46:08.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:46:08.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:46:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:46:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.823021 -999.00  +11.40   5.41     93  +10.40 1 2 1 3 1     0    0 1.10 7.08 ZnEsw 5.4 5.4 211.0 7.0 12.5 -22.3 12.4 -21.3 12.2 -19.3 12.5 -21.3
2026-04-12T21:46:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:46:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:46:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.823021
2026-04-12T21:46:08.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:46:08.791 [DEBUG] [Thread-196437] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:46:08.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:45:51', tmtdew=0.40609, humidity=97.2757, cloud=0.0, wind=11.3285, temperature=11.3238, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:45:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:46:08.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:46:08.885 [DEBUG] [Thread-196440] [transport.py] [_log()] starting thread (client mode): 0xb0f8cc10
2026-04-12T21:46:08.885 [DEBUG] [Thread-196440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:46:08.900 [DEBUG] [Thread-196440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:46:08.900 [INFO] [Thread-196440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:46:08.908 [DEBUG] [Thread-196440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:46:08.909 [DEBUG] [Thread-196440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:46:08.909 [DEBUG] [Thread-196440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:46:08.909 [DEBUG] [Thread-196440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:08.909 [DEBUG] [Thread-196440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:08.909 [DEBUG] [Thread-196440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:08.909 [DEBUG] [Thread-196440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:08.909 [DEBUG] [Thread-196440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] client lang: <none>
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] server lang: <none>
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] kex follows: False
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] Compression: none
2026-04-12T21:46:08.910 [DEBUG] [Thread-196440] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:46:08.967 [DEBUG] [Thread-196440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:46:08.968 [DEBUG] [Thread-196440] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:46:08.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:46:08.969 [DEBUG] [Thread-196440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:46:08.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:46:09.024 [DEBUG] [Thread-196440] [transport.py] [_log()] userauth is OK
2026-04-12T21:46:09.024 [DEBUG] [Thread-196440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:46:09.024 [DEBUG] [Thread-196440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:46:09.024 [DEBUG] [Thread-196440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:46:09.024 [DEBUG] [Thread-196440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:46:09.043 [INFO] [Thread-196440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:46:09.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:46:09.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:46:09.854 [DEBUG] [Thread-196440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:46:09.854 [DEBUG] [Thread-196440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:46:09.906 [DEBUG] [Thread-196440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:46:09.906 [DEBUG] [Thread-196440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:46:09.915 [DEBUG] [Thread-196440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:46:09.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:46:09.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:46:09.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:46:09.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:46:09.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:46:09.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:46:09.952 [DEBUG] [Thread-196440] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:46:13.262 [DEBUG] [Thread-196442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:46:13.392 [DEBUG] [Thread-196443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:46:24.339 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:46:24.340 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:46:28.315 [DEBUG] [Thread-196444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:46:39.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:46:39.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21: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
2026-04-12T21:46:41.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 46, 26), 0.25554, 98.1217, 0.0, 8.91144, 11.1122, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:46:41.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:46:26
2026-04-12T21:46:41.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:46:41.785 [DEBUG] [Thread-196445] [transport.py] [_log()] starting thread (client mode): 0xb0f8c4c0
2026-04-12T21:46:41.785 [DEBUG] [Thread-196445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:46:41.803 [DEBUG] [Thread-196445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:46:41.803 [INFO] [Thread-196445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:46:41.806 [DEBUG] [Thread-196445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:46:41.806 [DEBUG] [Thread-196445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:46:41.806 [DEBUG] [Thread-196445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:46:41.806 [DEBUG] [Thread-196445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:41.806 [DEBUG] [Thread-196445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] client lang: <none>
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] server lang: <none>
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] kex follows: False
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] Compression: none
2026-04-12T21:46:41.807 [DEBUG] [Thread-196445] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:46:41.824 [DEBUG] [Thread-196445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:46:41.824 [DEBUG] [Thread-196445] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:46:41.825 [DEBUG] [Thread-196445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:46:41.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:46:41.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:46:41.827 [DEBUG] [Thread-196445] [transport.py] [_log()] userauth is OK
2026-04-12T21:46:41.827 [DEBUG] [Thread-196445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:46:41.827 [DEBUG] [Thread-196445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:46:41.828 [DEBUG] [Thread-196445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:46:41.828 [DEBUG] [Thread-196445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:46:41.851 [INFO] [Thread-196445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:46:41.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:46:42.613 [DEBUG] [Thread-196445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:46:42.613 [DEBUG] [Thread-196445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:46:42.614 [DEBUG] [Thread-196445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:46:42.654 [DEBUG] [Thread-196445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:46:42.654 [DEBUG] [Thread-196445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:46:42.658 [DEBUG] [Thread-196445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:46:42.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:46:42.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:46:42.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:46:42.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:46:42.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:46:42.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:46:42.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:46:42.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:46:42.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:46:42.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.823716 -999.00  +11.40   4.46     93  +10.40 1 2 1 3 1     0    0 1.10 7.37 ..EsW 4.5 4.5 234.5 8.0 12.5 -22.3 12.4 -21.1 12.2 -19.4 12.4 -21.3
2026-04-12T21:46:42.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:46:42.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:46:42.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.823716
2026-04-12T21:46:42.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:46:42.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:46:42.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:46:42.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:46:42.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:46:42.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:46:26', tmtdew=0.25554, humidity=98.1217, cloud=0.0, wind=8.91144, temperature=11.1122, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:46:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:46:42.685 [DEBUG] [Thread-196445] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:46:42.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:46:42.784 [DEBUG] [Thread-196448] [transport.py] [_log()] starting thread (client mode): 0xb0f6eda0
2026-04-12T21:46:42.784 [DEBUG] [Thread-196448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:46:42.799 [DEBUG] [Thread-196448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:46:42.799 [INFO] [Thread-196448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:46:42.806 [DEBUG] [Thread-196448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:46:42.806 [DEBUG] [Thread-196448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:46:42.806 [DEBUG] [Thread-196448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] client lang: <none>
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] server lang: <none>
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] kex follows: False
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] Compression: none
2026-04-12T21:46:42.807 [DEBUG] [Thread-196448] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:46:42.867 [DEBUG] [Thread-196448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:46:42.867 [DEBUG] [Thread-196448] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:46:42.868 [DEBUG] [Thread-196448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:46:42.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:46:42.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:46:42.923 [DEBUG] [Thread-196448] [transport.py] [_log()] userauth is OK
2026-04-12T21:46:42.923 [DEBUG] [Thread-196448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:46:42.923 [DEBUG] [Thread-196448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:46:42.923 [DEBUG] [Thread-196448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:46:42.923 [DEBUG] [Thread-196448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:46:42.942 [INFO] [Thread-196448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:46:42.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:46:42.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:46:43.356 [DEBUG] [Thread-196450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:46:43.771 [DEBUG] [Thread-196448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:46:43.772 [DEBUG] [Thread-196448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:46:43.819 [DEBUG] [Thread-196448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:46:43.820 [DEBUG] [Thread-196448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:46:43.829 [DEBUG] [Thread-196448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:46:43.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:46:43.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:46:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:46:43.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:46:43.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:46:43.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:46:43.865 [DEBUG] [Thread-196448] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:46:58.408 [DEBUG] [Thread-196451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:47:13.443 [DEBUG] [Thread-196452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:47:13.449 [DEBUG] [Thread-196453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:47:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:47:13.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:47:13.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:47:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 47, 2), 0.25305, 98.1383, 0.0, 8.87616, 11.1454, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:47:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:47:02
2026-04-12T21:47:15.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:47:15.736 [DEBUG] [Thread-196454] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T21:47:15.736 [DEBUG] [Thread-196454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:47:15.759 [DEBUG] [Thread-196454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:47:15.759 [INFO] [Thread-196454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] client lang: <none>
2026-04-12T21:47:15.762 [DEBUG] [Thread-196454] [transport.py] [_log()] server lang: <none>
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] kex follows: False
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] Compression: none
2026-04-12T21:47:15.763 [DEBUG] [Thread-196454] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:47:15.781 [DEBUG] [Thread-196454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:47:15.782 [DEBUG] [Thread-196454] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:47:15.782 [DEBUG] [Thread-196454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:47:15.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:47:15.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:47:15.784 [DEBUG] [Thread-196454] [transport.py] [_log()] userauth is OK
2026-04-12T21:47:15.784 [DEBUG] [Thread-196454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:47:15.785 [DEBUG] [Thread-196454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:47:15.785 [DEBUG] [Thread-196454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:47:15.785 [DEBUG] [Thread-196454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:47:15.808 [INFO] [Thread-196454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:47:15.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:47:16.592 [DEBUG] [Thread-196454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:47:16.593 [DEBUG] [Thread-196454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:47:16.593 [DEBUG] [Thread-196454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:47:16.634 [DEBUG] [Thread-196454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:47:16.634 [DEBUG] [Thread-196454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:47:16.637 [DEBUG] [Thread-196454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:47:16.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:47:16.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:47:16.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:47:16.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:47:16.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:47:16.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:47:16.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:47:16.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:47:16.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:47:16.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.824063 -999.00  +11.40   5.41     93  +10.40 1 2 1 3 1     0    0 1.13 8.31 ..EsW 5.4 5.4 211.0 8.3 12.5 -22.4 12.4 -21.3 12.2 -19.3 12.4 -21.1
2026-04-12T21:47:16.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:47:16.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:47:16.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.824063
2026-04-12T21:47:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:47:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:47:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:47:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:47:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:47:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:47:02', tmtdew=0.25305, humidity=98.1383, cloud=0.0, wind=8.87616, temperature=11.1454, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:46:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.4132499999999997, 2.789999999999999, 3.3125, nan, nan, nan, nan, 2.7344999999999997, 2.8939999999999992, nan, 3.358999999999999, nan, nan, nan, nan, 0.8130000000000015, 0.6117499999999998, 0.5985000000000005, 0.6420000000000003, 0.4820000000000011, 1.0570000000000013, 1.1080000000000005, 1.1072499999999987], zp_timestamp='2026-04-12T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:47:16.660 [DEBUG] [Thread-196454] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:47:16.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:47:16.752 [DEBUG] [Thread-196457] [transport.py] [_log()] starting thread (client mode): 0xae5a4520
2026-04-12T21:47:16.752 [DEBUG] [Thread-196457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:47:16.767 [DEBUG] [Thread-196457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:47:16.767 [INFO] [Thread-196457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:47:16.775 [DEBUG] [Thread-196457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:47:16.775 [DEBUG] [Thread-196457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:47:16.775 [DEBUG] [Thread-196457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] client lang: <none>
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] server lang: <none>
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] kex follows: False
2026-04-12T21:47:16.776 [DEBUG] [Thread-196457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:47:16.777 [DEBUG] [Thread-196457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:47:16.777 [DEBUG] [Thread-196457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:47:16.777 [DEBUG] [Thread-196457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:47:16.777 [DEBUG] [Thread-196457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:47:16.777 [DEBUG] [Thread-196457] [transport.py] [_log()] Compression: none
2026-04-12T21:47:16.777 [DEBUG] [Thread-196457] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:47:16.835 [DEBUG] [Thread-196457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:47:16.836 [DEBUG] [Thread-196457] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:47:16.837 [DEBUG] [Thread-196457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:47:16.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:47:16.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:47:16.894 [DEBUG] [Thread-196457] [transport.py] [_log()] userauth is OK
2026-04-12T21:47:16.895 [DEBUG] [Thread-196457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:47:16.895 [DEBUG] [Thread-196457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:47:16.895 [DEBUG] [Thread-196457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:47:16.895 [DEBUG] [Thread-196457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:47:16.913 [INFO] [Thread-196457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:47:16.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:47:16.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:47:17.721 [DEBUG] [Thread-196457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:47:17.721 [DEBUG] [Thread-196457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:47:17.768 [DEBUG] [Thread-196457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:47:17.769 [DEBUG] [Thread-196457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:47:17.777 [DEBUG] [Thread-196457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:47:17.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:47:17.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:47:17.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:47:17.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:47:17.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:47:17.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:47:17.811 [DEBUG] [Thread-196457] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:47:24.547 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:47:24.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:47:28.477 [DEBUG] [Thread-196459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:47:43.532 [DEBUG] [Thread-196460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:47:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:47:47.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:47:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:47:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 47, 38), 0.41096, 97.2441, 0.0, 8.75304, 11.3248, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:47:49.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:47:38
2026-04-12T21:47:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:47:49.726 [DEBUG] [Thread-196461] [transport.py] [_log()] starting thread (client mode): 0xb0f8cee0
2026-04-12T21:47:49.727 [DEBUG] [Thread-196461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:47:49.749 [DEBUG] [Thread-196461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:47:49.749 [INFO] [Thread-196461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] client lang: <none>
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] server lang: <none>
2026-04-12T21:47:49.752 [DEBUG] [Thread-196461] [transport.py] [_log()] kex follows: False
2026-04-12T21:47:49.753 [DEBUG] [Thread-196461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:47:49.753 [DEBUG] [Thread-196461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:47:49.753 [DEBUG] [Thread-196461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:47:49.753 [DEBUG] [Thread-196461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:47:49.753 [DEBUG] [Thread-196461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:47:49.753 [DEBUG] [Thread-196461] [transport.py] [_log()] Compression: none
2026-04-12T21:47:49.753 [DEBUG] [Thread-196461] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:47:49.770 [DEBUG] [Thread-196461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:47:49.771 [DEBUG] [Thread-196461] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:47:49.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:47:49.772 [DEBUG] [Thread-196461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:47:49.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:47:49.775 [DEBUG] [Thread-196461] [transport.py] [_log()] userauth is OK
2026-04-12T21:47:49.775 [DEBUG] [Thread-196461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:47:49.775 [DEBUG] [Thread-196461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:47:49.775 [DEBUG] [Thread-196461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:47:49.775 [DEBUG] [Thread-196461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:47:49.799 [INFO] [Thread-196461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:47:49.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:47:50.567 [DEBUG] [Thread-196461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:47:50.567 [DEBUG] [Thread-196461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:47:50.567 [DEBUG] [Thread-196461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:47:50.608 [DEBUG] [Thread-196461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:47:50.608 [DEBUG] [Thread-196461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:47:50.612 [DEBUG] [Thread-196461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:47:50.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:47:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:47:50.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:47:50.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:47:50.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:47:50.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:47:50.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:47:50.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:47:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:47:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.824410 -999.00  +11.40   5.36     93  +10.40 1 2 1 3 1     0    0 1.13 8.28 ..Esw 5.4 5.4 209.8 6.4 12.5 -22.2 12.4 -21.1 12.1 -19.3 12.4 -21.1
2026-04-12T21:47:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:47:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:47:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.824410
2026-04-12T21:47:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:47:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:47:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:47:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:47:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:47:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:47:38', tmtdew=0.41096, humidity=97.2441, cloud=0.0, wind=8.75304, temperature=11.3248, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:47:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.52325, 1.8789999999999996, 2.9844999999999997, nan, nan, nan, nan, 2.7485, 2.586999999999999, nan, 2.5679999999999987, 1.8107499999999987, nan, nan, nan, 0.4035000000000002, 0.41575000000000006, 0.37950000000000017, 0.40949999999999953, 0.35600000000000165, 1.1160000000000014, 1.3130000000000006, 1.3272499999999994], zp_timestamp='2026-04-12T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:47:50.643 [DEBUG] [Thread-196461] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:47:50.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:47:50.745 [DEBUG] [Thread-196464] [transport.py] [_log()] starting thread (client mode): 0xae536c20
2026-04-12T21:47:50.745 [DEBUG] [Thread-196464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:47:50.760 [DEBUG] [Thread-196464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:47:50.760 [INFO] [Thread-196464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:47:50.767 [DEBUG] [Thread-196464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:47:50.767 [DEBUG] [Thread-196464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:47:50.767 [DEBUG] [Thread-196464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:47:50.767 [DEBUG] [Thread-196464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] client lang: <none>
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] server lang: <none>
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] kex follows: False
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] Compression: none
2026-04-12T21:47:50.768 [DEBUG] [Thread-196464] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:47:50.825 [DEBUG] [Thread-196464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:47:50.826 [DEBUG] [Thread-196464] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:47:50.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:47:50.827 [DEBUG] [Thread-196464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:47:50.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:47:50.885 [DEBUG] [Thread-196464] [transport.py] [_log()] userauth is OK
2026-04-12T21:47:50.886 [DEBUG] [Thread-196464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:47:50.886 [DEBUG] [Thread-196464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:47:50.886 [DEBUG] [Thread-196464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:47:50.886 [DEBUG] [Thread-196464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:47:50.906 [INFO] [Thread-196464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:47:50.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:47:50.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:47:51.735 [DEBUG] [Thread-196464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:47:51.736 [DEBUG] [Thread-196464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:47:51.783 [DEBUG] [Thread-196464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:47:51.783 [DEBUG] [Thread-196464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:47:51.793 [DEBUG] [Thread-196464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:47:51.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:47:51.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:47:51.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:47:51.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:47:51.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:47:51.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:47:51.829 [DEBUG] [Thread-196464] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:47:58.568 [DEBUG] [Thread-196466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:13.525 [DEBUG] [Thread-196467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:13.635 [DEBUG] [Thread-196468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:48:21.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:48:21.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:48:23.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 48, 13), 0.247785, 98.1718, 0.0, 8.57628, 11.1124, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:48:23.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:48:13
2026-04-12T21:48:23.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:48:23.649 [DEBUG] [Thread-196469] [transport.py] [_log()] starting thread (client mode): 0xae5b2770
2026-04-12T21:48:23.649 [DEBUG] [Thread-196469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:48:23.672 [DEBUG] [Thread-196469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:48:23.673 [INFO] [Thread-196469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:48:23.676 [DEBUG] [Thread-196469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] client lang: <none>
2026-04-12T21:48:23.677 [DEBUG] [Thread-196469] [transport.py] [_log()] server lang: <none>
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] kex follows: False
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] Compression: none
2026-04-12T21:48:23.678 [DEBUG] [Thread-196469] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:48:23.700 [DEBUG] [Thread-196469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:48:23.701 [DEBUG] [Thread-196469] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:48:23.702 [DEBUG] [Thread-196469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:48:23.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:48:23.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:48:23.704 [DEBUG] [Thread-196469] [transport.py] [_log()] userauth is OK
2026-04-12T21:48:23.704 [DEBUG] [Thread-196469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:48:23.704 [DEBUG] [Thread-196469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:48:23.704 [DEBUG] [Thread-196469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:48:23.704 [DEBUG] [Thread-196469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:48:23.741 [INFO] [Thread-196469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:48:23.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:48:24.559 [DEBUG] [Thread-196469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:48:24.559 [DEBUG] [Thread-196469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:48:24.559 [DEBUG] [Thread-196469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:48:24.601 [DEBUG] [Thread-196469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:48:24.601 [DEBUG] [Thread-196469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:48:24.604 [DEBUG] [Thread-196469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:48:24.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:48:24.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:48:24.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:48:24.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:48:24.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:48:24.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:48:24.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:48:24.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:48:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:48:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.824758 -999.00  +11.40   3.27     93  +10.40 1 2 1 3 1     0    0 1.13 8.42 znEsw 3.3 3.3 249.6 10.3 12.5 -22.5 12.4 -21.1 12.1 -19.3 12.4 -21.3
2026-04-12T21:48:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:48:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:48:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.824758
2026-04-12T21:48:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:48:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:48:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:48:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:48:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:48:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:48:13', tmtdew=0.247785, humidity=98.1718, cloud=0.0, wind=8.57628, temperature=11.1124, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:47:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.52325, 1.8789999999999996, 2.9844999999999997, nan, nan, nan, nan, 2.7485, 2.586999999999999, nan, 2.5679999999999987, 1.8107499999999987, nan, nan, nan, 0.4035000000000002, 0.41575000000000006, 0.37950000000000017, 0.40949999999999953, 0.35600000000000165, 1.1160000000000014, 1.3130000000000006, 1.3272499999999994], zp_timestamp='2026-04-12T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:48:24.631 [DEBUG] [Thread-196469] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:48:24.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:48:24.729 [DEBUG] [Thread-196472] [transport.py] [_log()] starting thread (client mode): 0xae5a59c0
2026-04-12T21:48:24.729 [DEBUG] [Thread-196472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:48:24.743 [DEBUG] [Thread-196472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:48:24.743 [INFO] [Thread-196472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] client lang: <none>
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] server lang: <none>
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] kex follows: False
2026-04-12T21:48:24.751 [DEBUG] [Thread-196472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:48:24.752 [DEBUG] [Thread-196472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:48:24.752 [DEBUG] [Thread-196472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:48:24.752 [DEBUG] [Thread-196472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:48:24.752 [DEBUG] [Thread-196472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:48:24.752 [DEBUG] [Thread-196472] [transport.py] [_log()] Compression: none
2026-04-12T21:48:24.752 [DEBUG] [Thread-196472] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:48:24.755 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:24.756 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:24.808 [DEBUG] [Thread-196472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:48:24.808 [DEBUG] [Thread-196472] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:48:24.809 [DEBUG] [Thread-196472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:48:24.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:48:24.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:48:24.865 [DEBUG] [Thread-196472] [transport.py] [_log()] userauth is OK
2026-04-12T21:48:24.865 [DEBUG] [Thread-196472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:48:24.865 [DEBUG] [Thread-196472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:48:24.865 [DEBUG] [Thread-196472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:48:24.866 [DEBUG] [Thread-196472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:48:24.883 [INFO] [Thread-196472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:48:24.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:48:24.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:48:25.706 [DEBUG] [Thread-196472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:48:25.706 [DEBUG] [Thread-196472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:48:25.754 [DEBUG] [Thread-196472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:48:25.754 [DEBUG] [Thread-196472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:48:25.770 [DEBUG] [Thread-196472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:48:25.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:48:25.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:48:25.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:48:25.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:48:25.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:48:25.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:48:25.807 [DEBUG] [Thread-196472] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:48:28.674 [DEBUG] [Thread-196474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:43.728 [DEBUG] [Thread-196475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:48:55.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:48:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:48:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 48, 49), 0.40069, 97.3111, 0.0, 10.8346, 11.3584, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:48:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:48:49
2026-04-12T21:48:57.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:48:57.689 [DEBUG] [Thread-196476] [transport.py] [_log()] starting thread (client mode): 0xae5b1cf0
2026-04-12T21:48:57.689 [DEBUG] [Thread-196476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:48:57.709 [DEBUG] [Thread-196476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:48:57.709 [INFO] [Thread-196476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:48:57.712 [DEBUG] [Thread-196476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] client lang: <none>
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] server lang: <none>
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] kex follows: False
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] Compression: none
2026-04-12T21:48:57.713 [DEBUG] [Thread-196476] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:48:57.727 [DEBUG] [Thread-196476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:48:57.728 [DEBUG] [Thread-196476] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:48:57.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:48:57.728 [DEBUG] [Thread-196476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:48:57.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:48:57.730 [DEBUG] [Thread-196476] [transport.py] [_log()] userauth is OK
2026-04-12T21:48:57.730 [DEBUG] [Thread-196476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:48:57.730 [DEBUG] [Thread-196476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:48:57.731 [DEBUG] [Thread-196476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:48:57.731 [DEBUG] [Thread-196476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:48:57.752 [INFO] [Thread-196476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:48:57.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:48:58.523 [DEBUG] [Thread-196476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:48:58.523 [DEBUG] [Thread-196476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:48:58.524 [DEBUG] [Thread-196476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:48:58.564 [DEBUG] [Thread-196476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:48:58.565 [DEBUG] [Thread-196476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:48:58.568 [DEBUG] [Thread-196476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:48:58.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:48:58.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:48:58.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:48:58.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:48:58.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:48:58.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:48:58.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:48:58.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:48:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:48:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.825105 -999.00  +11.40   3.84     93  +10.40 1 2 1 3 1     0    0 1.14 8.43 znEsw 3.8 3.8 235.7 7.0 12.5 -22.3 12.4 -21.1 12.2 -19.3 12.4 -21.2
2026-04-12T21:48:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:48:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:48:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.825105
2026-04-12T21:48:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:48:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:48:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:48:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:48:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:48:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:48:49', tmtdew=0.40069, humidity=97.3111, cloud=0.0, wind=10.8346, temperature=11.3584, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:48:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.52325, 1.8789999999999996, 2.9844999999999997, nan, nan, nan, nan, 2.7485, 2.586999999999999, nan, 2.5679999999999987, 1.8107499999999987, nan, nan, nan, 0.4035000000000002, 0.41575000000000006, 0.37950000000000017, 0.40949999999999953, 0.35600000000000165, 1.1160000000000014, 1.3130000000000006, 1.3272499999999994], zp_timestamp='2026-04-12T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:48:58.596 [DEBUG] [Thread-196476] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:48:58.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:48:58.699 [DEBUG] [Thread-196479] [transport.py] [_log()] starting thread (client mode): 0xae5a5cc0
2026-04-12T21:48:58.699 [DEBUG] [Thread-196479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:48:58.713 [DEBUG] [Thread-196479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:48:58.713 [INFO] [Thread-196479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:48:58.720 [DEBUG] [Thread-196479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] client lang: <none>
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] server lang: <none>
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] kex follows: False
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:48:58.721 [DEBUG] [Thread-196479] [transport.py] [_log()] Compression: none
2026-04-12T21:48:58.722 [DEBUG] [Thread-196479] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:48:58.766 [DEBUG] [Thread-196481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:48:58.785 [DEBUG] [Thread-196479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:48:58.785 [DEBUG] [Thread-196479] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:48:58.786 [DEBUG] [Thread-196479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:48:58.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:48:58.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:48:58.840 [DEBUG] [Thread-196479] [transport.py] [_log()] userauth is OK
2026-04-12T21:48:58.841 [DEBUG] [Thread-196479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:48:58.841 [DEBUG] [Thread-196479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:48:58.841 [DEBUG] [Thread-196479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:48:58.841 [DEBUG] [Thread-196479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:48:58.863 [INFO] [Thread-196479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:48:58.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:48:58.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:48:59.682 [DEBUG] [Thread-196479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:48:59.682 [DEBUG] [Thread-196479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:48:59.730 [DEBUG] [Thread-196479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:48:59.730 [DEBUG] [Thread-196479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:48:59.740 [DEBUG] [Thread-196479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:48:59.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:48:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:48:59.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:48:59.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:48:59.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:48:59.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:48:59.796 [DEBUG] [Thread-196479] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:49:13.593 [DEBUG] [Thread-196482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:49:13.817 [DEBUG] [Thread-196483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:49:24.961 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:49:24.963 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:49:28.853 [DEBUG] [Thread-196484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:49:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:49:29.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:49:29.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:49:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 48, 49), 0.40069, 97.3111, 0.0, 10.8346, 11.3584, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:49:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:48:49
2026-04-12T21:49:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:49:31.637 [DEBUG] [Thread-196485] [transport.py] [_log()] starting thread (client mode): 0xae50b670
2026-04-12T21:49:31.637 [DEBUG] [Thread-196485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:49:31.649 [DEBUG] [Thread-196485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:49:31.649 [INFO] [Thread-196485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] client lang: <none>
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] server lang: <none>
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] kex follows: False
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] Compression: none
2026-04-12T21:49:31.651 [DEBUG] [Thread-196485] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:49:31.669 [DEBUG] [Thread-196485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:49:31.669 [DEBUG] [Thread-196485] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:49:31.670 [DEBUG] [Thread-196485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:49:31.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:49:31.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:49:31.671 [DEBUG] [Thread-196485] [transport.py] [_log()] userauth is OK
2026-04-12T21:49:31.671 [DEBUG] [Thread-196485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:49:31.672 [DEBUG] [Thread-196485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:49:31.672 [DEBUG] [Thread-196485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:49:31.672 [DEBUG] [Thread-196485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:49:31.696 [INFO] [Thread-196485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:49:31.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:49:32.463 [DEBUG] [Thread-196485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:49:32.463 [DEBUG] [Thread-196485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:49:32.463 [DEBUG] [Thread-196485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:49:32.504 [DEBUG] [Thread-196485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:49:32.504 [DEBUG] [Thread-196485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:49:32.508 [DEBUG] [Thread-196485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:49:32.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:49:32.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:49:32.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:49:32.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:49:32.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:49:32.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:49:32.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:49:32.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:49:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:49:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.825452 -999.00  +11.40   4.79     93  +10.40 1 2 1 3 1     0    0 1.16 8.51 z.ESW 4.8 4.8 214.9 7.4 12.5 -22.3 12.4 -21.1 12.1 -19.3 12.4 -21.4
2026-04-12T21:49:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:49:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:49:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.825452
2026-04-12T21:49:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:49:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:49:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:49:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:49:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:49:32.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:48:49', tmtdew=0.40069, humidity=97.3111, cloud=0.0, wind=10.8346, temperature=11.3584, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:48:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.52325, 1.8789999999999996, 2.9844999999999997, nan, nan, nan, nan, 2.7485, 2.586999999999999, nan, 2.5679999999999987, 1.8107499999999987, nan, nan, nan, 0.4035000000000002, 0.41575000000000006, 0.37950000000000017, 0.40949999999999953, 0.35600000000000165, 1.1160000000000014, 1.3130000000000006, 1.3272499999999994], zp_timestamp='2026-04-12T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:49:32.529 [DEBUG] [Thread-196485] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:49:32.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:49:32.622 [DEBUG] [Thread-196488] [transport.py] [_log()] starting thread (client mode): 0xae5b3460
2026-04-12T21:49:32.622 [DEBUG] [Thread-196488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:49:32.636 [DEBUG] [Thread-196488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:49:32.636 [INFO] [Thread-196488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] client lang: <none>
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] server lang: <none>
2026-04-12T21:49:32.644 [DEBUG] [Thread-196488] [transport.py] [_log()] kex follows: False
2026-04-12T21:49:32.645 [DEBUG] [Thread-196488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:49:32.645 [DEBUG] [Thread-196488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:49:32.645 [DEBUG] [Thread-196488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:49:32.645 [DEBUG] [Thread-196488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:49:32.645 [DEBUG] [Thread-196488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:49:32.645 [DEBUG] [Thread-196488] [transport.py] [_log()] Compression: none
2026-04-12T21:49:32.645 [DEBUG] [Thread-196488] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:49:32.708 [DEBUG] [Thread-196488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:49:32.708 [DEBUG] [Thread-196488] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:49:32.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:49:32.709 [DEBUG] [Thread-196488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:49:32.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:49:32.766 [DEBUG] [Thread-196488] [transport.py] [_log()] userauth is OK
2026-04-12T21:49:32.767 [DEBUG] [Thread-196488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:49:32.767 [DEBUG] [Thread-196488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:49:32.768 [DEBUG] [Thread-196488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:49:32.768 [DEBUG] [Thread-196488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:49:32.789 [INFO] [Thread-196488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:49:32.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:49:32.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:49:33.661 [DEBUG] [Thread-196488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:49:33.661 [DEBUG] [Thread-196488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:49:33.708 [DEBUG] [Thread-196488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:49:33.709 [DEBUG] [Thread-196488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:49:33.717 [DEBUG] [Thread-196488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:49:33.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:49:33.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:49:33.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:49:33.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:49:33.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:49:33.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:49:33.751 [DEBUG] [Thread-196488] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:49:43.890 [DEBUG] [Thread-196490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:49:58.944 [DEBUG] [Thread-196491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:50:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:50:03.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:50:03.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:50:05.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 49, 24), 0.24529, 98.1887, 0.0, 9.38772, 11.1624, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:50:05.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:49:24
2026-04-12T21:50:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:50:05.664 [DEBUG] [Thread-196492] [transport.py] [_log()] starting thread (client mode): 0xae536740
2026-04-12T21:50:05.664 [DEBUG] [Thread-196492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:50:05.685 [DEBUG] [Thread-196492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:50:05.685 [INFO] [Thread-196492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] client lang: <none>
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] server lang: <none>
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] kex follows: False
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] Compression: none
2026-04-12T21:50:05.688 [DEBUG] [Thread-196492] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:50:05.705 [DEBUG] [Thread-196492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:50:05.706 [DEBUG] [Thread-196492] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:50:05.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:50:05.706 [DEBUG] [Thread-196492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:50:05.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:50:05.709 [DEBUG] [Thread-196492] [transport.py] [_log()] userauth is OK
2026-04-12T21:50:05.709 [DEBUG] [Thread-196492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:50:05.709 [DEBUG] [Thread-196492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:50:05.709 [DEBUG] [Thread-196492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:50:05.709 [DEBUG] [Thread-196492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:50:05.727 [INFO] [Thread-196492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:50:05.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:50:06.849 [DEBUG] [Thread-196492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:50:06.850 [DEBUG] [Thread-196492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:50:06.850 [DEBUG] [Thread-196492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:50:06.891 [DEBUG] [Thread-196492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:50:06.891 [DEBUG] [Thread-196492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:50:06.894 [DEBUG] [Thread-196492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:50:06.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:50:06.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:50:06.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:50:06.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:50:06.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:50:06.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:50:06.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:50:06.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:50:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:50:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.826146 -999.00  +11.40   5.29     93  +10.30 1 2 1 3 1     0    0 1.19 9.51 ..E.. 5.3 5.3 199.2 6.3 12.5 -22.3 12.4 -21.1 12.1 -19.2 12.4 -21.0
2026-04-12T21:50:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:50:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:50:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.826146
2026-04-12T21:50:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:50:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:50:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:50:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:50:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:50:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:49:24', tmtdew=0.24529, humidity=98.1887, cloud=0.0, wind=9.38772, temperature=11.1624, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:49:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.52325, 1.8789999999999996, 2.9844999999999997, nan, nan, nan, nan, 2.7485, 2.586999999999999, nan, 2.5679999999999987, 1.8107499999999987, nan, nan, nan, 0.4035000000000002, 0.41575000000000006, 0.37950000000000017, 0.40949999999999953, 0.35600000000000165, 1.1160000000000014, 1.3130000000000006, 1.3272499999999994], zp_timestamp='2026-04-12T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:50:06.946 [DEBUG] [Thread-196492] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:50:07.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:50:07.040 [DEBUG] [Thread-196495] [transport.py] [_log()] starting thread (client mode): 0xae5a4d30
2026-04-12T21:50:07.040 [DEBUG] [Thread-196495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:50:07.058 [DEBUG] [Thread-196495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:50:07.059 [INFO] [Thread-196495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:50:07.066 [DEBUG] [Thread-196495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:50:07.067 [DEBUG] [Thread-196495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] client lang: <none>
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] server lang: <none>
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] kex follows: False
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:50:07.068 [DEBUG] [Thread-196495] [transport.py] [_log()] Compression: none
2026-04-12T21:50:07.069 [DEBUG] [Thread-196495] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:50:07.130 [DEBUG] [Thread-196495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:50:07.131 [DEBUG] [Thread-196495] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:50:07.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:50:07.132 [DEBUG] [Thread-196495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:50:07.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:50:07.188 [DEBUG] [Thread-196495] [transport.py] [_log()] userauth is OK
2026-04-12T21:50:07.189 [DEBUG] [Thread-196495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:50:07.189 [DEBUG] [Thread-196495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:50:07.189 [DEBUG] [Thread-196495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:50:07.189 [DEBUG] [Thread-196495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:50:07.207 [INFO] [Thread-196495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:50:07.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:50:07.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:50:08.043 [DEBUG] [Thread-196495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:50:08.043 [DEBUG] [Thread-196495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:50:08.093 [DEBUG] [Thread-196495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:50:08.093 [DEBUG] [Thread-196495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:50:08.102 [DEBUG] [Thread-196495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:50:08.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:50:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:50:08.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:50:08.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:50:08.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:50:08.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:50:08.135 [DEBUG] [Thread-196495] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:50:13.650 [DEBUG] [Thread-196497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:50:13.985 [DEBUG] [Thread-196498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:50:25.170 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:50:25.172 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:50:29.038 [DEBUG] [Thread-196499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:50:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:50:38.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:50:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:50:39.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 49, 24), 0.24529, 98.1887, 0.0, 9.38772, 11.1624, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:50:39.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:49:24
2026-04-12T21:50:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:50:40.096 [DEBUG] [Thread-196500] [transport.py] [_log()] starting thread (client mode): 0xae534b50
2026-04-12T21:50:40.097 [DEBUG] [Thread-196500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:50:40.116 [DEBUG] [Thread-196500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:50:40.117 [INFO] [Thread-196500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:50:40.119 [DEBUG] [Thread-196500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] client lang: <none>
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] server lang: <none>
2026-04-12T21:50:40.120 [DEBUG] [Thread-196500] [transport.py] [_log()] kex follows: False
2026-04-12T21:50:40.121 [DEBUG] [Thread-196500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:50:40.121 [DEBUG] [Thread-196500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:50:40.121 [DEBUG] [Thread-196500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:50:40.121 [DEBUG] [Thread-196500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:50:40.121 [DEBUG] [Thread-196500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:50:40.121 [DEBUG] [Thread-196500] [transport.py] [_log()] Compression: none
2026-04-12T21:50:40.121 [DEBUG] [Thread-196500] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:50:40.136 [DEBUG] [Thread-196500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:50:40.137 [DEBUG] [Thread-196500] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:50:40.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:50:40.138 [DEBUG] [Thread-196500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:50:40.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:50:40.140 [DEBUG] [Thread-196500] [transport.py] [_log()] userauth is OK
2026-04-12T21:50:40.140 [DEBUG] [Thread-196500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:50:40.140 [DEBUG] [Thread-196500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:50:40.140 [DEBUG] [Thread-196500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:50:40.141 [DEBUG] [Thread-196500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:50:40.160 [INFO] [Thread-196500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:50:40.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:50:40.915 [DEBUG] [Thread-196500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:50:40.915 [DEBUG] [Thread-196500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:50:40.915 [DEBUG] [Thread-196500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:50:40.956 [DEBUG] [Thread-196500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:50:40.956 [DEBUG] [Thread-196500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:50:40.959 [DEBUG] [Thread-196500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:50:40.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:50:40.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:50:40.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:50:40.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:50:40.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:50:40.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:50:40.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:50:40.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:50:40.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:50:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.826493 -999.00  +11.40   5.70     92  +10.30 1 2 1 3 1     0    0 1.24 10.73 ZnEsw 5.7 5.7 213.0 7.3 12.5 -22.3 12.4 -21.1 12.1 -19.1 12.4 -21.1
2026-04-12T21:50:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:50:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:50:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.826493
2026-04-12T21:50:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:50:40.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:50:40.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:50:40.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:50:40.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:50:40.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:49:24', tmtdew=0.24529, humidity=98.1887, cloud=0.0, wind=9.38772, temperature=11.1624, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:50:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:50:40.986 [DEBUG] [Thread-196500] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:50:41.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:50:41.074 [DEBUG] [Thread-196503] [transport.py] [_log()] starting thread (client mode): 0xae5e6fb0
2026-04-12T21:50:41.074 [DEBUG] [Thread-196503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:50:41.091 [DEBUG] [Thread-196503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:50:41.091 [INFO] [Thread-196503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] client lang: <none>
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] server lang: <none>
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] kex follows: False
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:50:41.099 [DEBUG] [Thread-196503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:50:41.100 [DEBUG] [Thread-196503] [transport.py] [_log()] Compression: none
2026-04-12T21:50:41.100 [DEBUG] [Thread-196503] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:50:41.159 [DEBUG] [Thread-196503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:50:41.160 [DEBUG] [Thread-196503] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:50:41.161 [DEBUG] [Thread-196503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:50:41.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:50:41.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:50:41.215 [DEBUG] [Thread-196503] [transport.py] [_log()] userauth is OK
2026-04-12T21:50:41.216 [DEBUG] [Thread-196503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:50:41.216 [DEBUG] [Thread-196503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:50:41.216 [DEBUG] [Thread-196503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:50:41.216 [DEBUG] [Thread-196503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:50:41.234 [INFO] [Thread-196503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:50:41.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:50:41.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:50:42.050 [DEBUG] [Thread-196503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:50:42.050 [DEBUG] [Thread-196503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:50:42.097 [DEBUG] [Thread-196503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:50:42.097 [DEBUG] [Thread-196503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:50:42.106 [DEBUG] [Thread-196503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:50:42.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:50:42.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:50:42.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:50:42.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:50:42.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:50:42.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:50:42.142 [DEBUG] [Thread-196503] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:50:44.077 [DEBUG] [Thread-196505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:50:59.139 [DEBUG] [Thread-196506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:51:12.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:51:12.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:51:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:51:13.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 50, 35), 0.41594, 97.212, 0.0, 10.9404, 11.3255, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:51:13.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:50:35
2026-04-12T21:51:13.733 [DEBUG] [Thread-196507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:51:13.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:51:14.055 [DEBUG] [Thread-196508] [transport.py] [_log()] starting thread (client mode): 0xae5a63e0
2026-04-12T21:51:14.055 [DEBUG] [Thread-196508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:51:14.075 [DEBUG] [Thread-196508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:51:14.076 [INFO] [Thread-196508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:51:14.078 [DEBUG] [Thread-196508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] client lang: <none>
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] server lang: <none>
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] kex follows: False
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:51:14.079 [DEBUG] [Thread-196508] [transport.py] [_log()] Compression: none
2026-04-12T21:51:14.080 [DEBUG] [Thread-196508] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:51:14.097 [DEBUG] [Thread-196508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:51:14.098 [DEBUG] [Thread-196508] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:51:14.098 [DEBUG] [Thread-196508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:51:14.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:51:14.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:51:14.140 [DEBUG] [Thread-196508] [transport.py] [_log()] userauth is OK
2026-04-12T21:51:14.140 [DEBUG] [Thread-196508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:51:14.140 [DEBUG] [Thread-196508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:51:14.140 [DEBUG] [Thread-196508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:51:14.141 [DEBUG] [Thread-196508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:51:14.173 [DEBUG] [Thread-196510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:51:14.176 [INFO] [Thread-196508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:51:14.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:51:14.935 [DEBUG] [Thread-196508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:51:14.935 [DEBUG] [Thread-196508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:51:14.936 [DEBUG] [Thread-196508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:51:14.976 [DEBUG] [Thread-196508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:51:14.976 [DEBUG] [Thread-196508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:51:14.979 [DEBUG] [Thread-196508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:51:14.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:51:14.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:51:14.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:51:14.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:51:14.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:51:15.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:51:15.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:51:15.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:51:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:51:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.826841 -999.00  +11.40   4.44     92  +10.30 1 2 1 3 1     0    0 1.26 11.40 ZnEsw 4.4 4.4 208.8 7.5 12.5 -22.4 12.3 -21.0 12.1 -19.3 12.4 -21.1
2026-04-12T21:51:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:51:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:51:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.826841
2026-04-12T21:51:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:51:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:51:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:51:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:51:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:51:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:50:35', tmtdew=0.41594, humidity=97.212, cloud=0.0, wind=10.9404, temperature=11.3255, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:50:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:51:15.004 [DEBUG] [Thread-196508] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:51:15.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:51:15.108 [DEBUG] [Thread-196512] [transport.py] [_log()] starting thread (client mode): 0xae5a5cc0
2026-04-12T21:51:15.109 [DEBUG] [Thread-196512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:51:15.123 [DEBUG] [Thread-196512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:51:15.123 [INFO] [Thread-196512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:51:15.130 [DEBUG] [Thread-196512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] client lang: <none>
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] server lang: <none>
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] kex follows: False
2026-04-12T21:51:15.131 [DEBUG] [Thread-196512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:51:15.132 [DEBUG] [Thread-196512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:51:15.132 [DEBUG] [Thread-196512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:51:15.132 [DEBUG] [Thread-196512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:51:15.132 [DEBUG] [Thread-196512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:51:15.132 [DEBUG] [Thread-196512] [transport.py] [_log()] Compression: none
2026-04-12T21:51:15.132 [DEBUG] [Thread-196512] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:51:15.190 [DEBUG] [Thread-196512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:51:15.190 [DEBUG] [Thread-196512] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:51:15.191 [DEBUG] [Thread-196512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:51:15.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:51:15.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:51:15.246 [DEBUG] [Thread-196512] [transport.py] [_log()] userauth is OK
2026-04-12T21:51:15.247 [DEBUG] [Thread-196512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:51:15.247 [DEBUG] [Thread-196512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:51:15.247 [DEBUG] [Thread-196512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:51:15.247 [DEBUG] [Thread-196512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:51:15.269 [INFO] [Thread-196512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:51:15.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:51:15.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:51:16.075 [DEBUG] [Thread-196512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:51:16.076 [DEBUG] [Thread-196512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:51:16.124 [DEBUG] [Thread-196512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:51:16.124 [DEBUG] [Thread-196512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:51:16.132 [DEBUG] [Thread-196512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:51:16.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:51:16.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:51:16.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:51:16.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:51:16.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:51:16.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:51:16.166 [DEBUG] [Thread-196512] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:51:25.375 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:51:25.376 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:51:29.205 [DEBUG] [Thread-196514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:51:44.253 [DEBUG] [Thread-196515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:51:46.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:51:46.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:51:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:51:47.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 51, 11), 0.24515, 98.1891, 0.0, 9.29952, 11.1294, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:51:47.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:51:11
2026-04-12T21:51:47.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:51:48.097 [DEBUG] [Thread-196516] [transport.py] [_log()] starting thread (client mode): 0xae5e6f50
2026-04-12T21:51:48.097 [DEBUG] [Thread-196516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:51:48.119 [DEBUG] [Thread-196516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:51:48.119 [INFO] [Thread-196516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] client lang: <none>
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] server lang: <none>
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] kex follows: False
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] Compression: none
2026-04-12T21:51:48.122 [DEBUG] [Thread-196516] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:51:48.139 [DEBUG] [Thread-196516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:51:48.139 [DEBUG] [Thread-196516] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:51:48.140 [DEBUG] [Thread-196516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:51:48.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:51:48.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:51:48.142 [DEBUG] [Thread-196516] [transport.py] [_log()] userauth is OK
2026-04-12T21:51:48.142 [DEBUG] [Thread-196516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:51:48.142 [DEBUG] [Thread-196516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:51:48.142 [DEBUG] [Thread-196516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:51:48.142 [DEBUG] [Thread-196516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:51:48.159 [INFO] [Thread-196516] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:51:48.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:51:48.909 [DEBUG] [Thread-196516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:51:48.910 [DEBUG] [Thread-196516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:51:48.910 [DEBUG] [Thread-196516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:51:48.951 [DEBUG] [Thread-196516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:51:48.952 [DEBUG] [Thread-196516] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:51:48.956 [DEBUG] [Thread-196516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:51:48.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:51:48.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:51:48.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:51:48.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:51:48.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:51:48.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:51:48.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:51:48.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:51:48.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:51:48.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.827188 -999.00  +11.40   5.34     92  +10.30 1 2 1 3 1     0    0 1.29 12.07 ..Esw 5.3 5.3 199.4 6.4 12.4 -22.3 12.3 -21.1 12.1 -19.2 12.4 -21.1
2026-04-12T21:51:48.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:51:48.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:51:48.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.827188
2026-04-12T21:51:48.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:51:48.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:51:48.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:51:48.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:51:48.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:51:48.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:51:11', tmtdew=0.24515, humidity=98.1891, cloud=0.0, wind=9.29952, temperature=11.1294, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:51:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:51:48.984 [DEBUG] [Thread-196516] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:51:49.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:51:49.081 [DEBUG] [Thread-196519] [transport.py] [_log()] starting thread (client mode): 0xa79584c0
2026-04-12T21:51:49.081 [DEBUG] [Thread-196519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:51:49.097 [DEBUG] [Thread-196519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:51:49.098 [INFO] [Thread-196519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:51:49.105 [DEBUG] [Thread-196519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:51:49.106 [DEBUG] [Thread-196519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:51:49.106 [DEBUG] [Thread-196519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:51:49.106 [DEBUG] [Thread-196519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:49.106 [DEBUG] [Thread-196519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:51:49.106 [DEBUG] [Thread-196519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] client lang: <none>
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] server lang: <none>
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] kex follows: False
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] Compression: none
2026-04-12T21:51:49.107 [DEBUG] [Thread-196519] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:51:49.166 [DEBUG] [Thread-196519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:51:49.167 [DEBUG] [Thread-196519] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:51:49.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:51:49.168 [DEBUG] [Thread-196519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:51:49.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:51:49.229 [DEBUG] [Thread-196519] [transport.py] [_log()] userauth is OK
2026-04-12T21:51:49.229 [DEBUG] [Thread-196519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:51:49.230 [DEBUG] [Thread-196519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:51:49.230 [DEBUG] [Thread-196519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:51:49.230 [DEBUG] [Thread-196519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:51:49.252 [INFO] [Thread-196519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:51:49.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:51:49.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:51:50.105 [DEBUG] [Thread-196519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:51:50.105 [DEBUG] [Thread-196519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:51:50.153 [DEBUG] [Thread-196519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:51:50.153 [DEBUG] [Thread-196519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:51:50.163 [DEBUG] [Thread-196519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:51:50.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:51:50.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:51:50.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:51:50.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:51:50.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:51:50.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:51:50.200 [DEBUG] [Thread-196519] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:51:59.289 [DEBUG] [Thread-196521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:52:13.807 [DEBUG] [Thread-196522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:52:14.343 [DEBUG] [Thread-196523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:52:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:52:20.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:52:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:52:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 51, 46), 0.39528, 97.3451, 0.0, 10.129, 11.2926, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:52:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:51:46
2026-04-12T21:52:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:52:22.153 [DEBUG] [Thread-196524] [transport.py] [_log()] starting thread (client mode): 0xae562d40
2026-04-12T21:52:22.153 [DEBUG] [Thread-196524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:52:22.173 [DEBUG] [Thread-196524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:52:22.173 [INFO] [Thread-196524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:52:22.176 [DEBUG] [Thread-196524] [transport.py] [_log()] client lang: <none>
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] server lang: <none>
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] kex follows: False
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] Compression: none
2026-04-12T21:52:22.177 [DEBUG] [Thread-196524] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:52:22.187 [DEBUG] [Thread-196524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:52:22.187 [DEBUG] [Thread-196524] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:52:22.187 [DEBUG] [Thread-196524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:52:22.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:52:22.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:52:22.189 [DEBUG] [Thread-196524] [transport.py] [_log()] userauth is OK
2026-04-12T21:52:22.189 [DEBUG] [Thread-196524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:52:22.189 [DEBUG] [Thread-196524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:52:22.189 [DEBUG] [Thread-196524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:52:22.189 [DEBUG] [Thread-196524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:52:22.203 [INFO] [Thread-196524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:52:22.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:52:22.966 [DEBUG] [Thread-196524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:52:22.966 [DEBUG] [Thread-196524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:52:22.967 [DEBUG] [Thread-196524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:52:23.007 [DEBUG] [Thread-196524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:52:23.007 [DEBUG] [Thread-196524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:52:23.011 [DEBUG] [Thread-196524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:52:23.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:52:23.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:52:23.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:52:23.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:52:23.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:52:23.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:52:23.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:52:23.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:52:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:52:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.827536 -999.00  +11.40   3.95     92  +10.30 1 2 1 3 1     0    0 1.30 12.38 .nEsW 4.0 4.0 214.9 5.8 12.5 -22.3 12.3 -21.4 12.1 -19.2 12.4 -21.2
2026-04-12T21:52:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:52:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:52:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.827536
2026-04-12T21:52:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:52:23.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:52:23.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:52:23.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:52:23.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:52:23.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:51:46', tmtdew=0.39528, humidity=97.3451, cloud=0.0, wind=10.129, temperature=11.2926, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:51:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:52:23.040 [DEBUG] [Thread-196524] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:52:23.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:52:23.133 [DEBUG] [Thread-196527] [transport.py] [_log()] starting thread (client mode): 0xae562ec0
2026-04-12T21:52:23.133 [DEBUG] [Thread-196527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:52:23.147 [DEBUG] [Thread-196527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:52:23.147 [INFO] [Thread-196527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:23.155 [DEBUG] [Thread-196527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] client lang: <none>
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] server lang: <none>
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] kex follows: False
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:52:23.156 [DEBUG] [Thread-196527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:52:23.157 [DEBUG] [Thread-196527] [transport.py] [_log()] Compression: none
2026-04-12T21:52:23.157 [DEBUG] [Thread-196527] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:52:23.214 [DEBUG] [Thread-196527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:52:23.215 [DEBUG] [Thread-196527] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:52:23.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:52:23.216 [DEBUG] [Thread-196527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:52:23.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:52:23.270 [DEBUG] [Thread-196527] [transport.py] [_log()] userauth is OK
2026-04-12T21:52:23.270 [DEBUG] [Thread-196527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:52:23.270 [DEBUG] [Thread-196527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:52:23.271 [DEBUG] [Thread-196527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:52:23.271 [DEBUG] [Thread-196527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:52:23.288 [INFO] [Thread-196527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:52:23.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:52:23.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:52:24.111 [DEBUG] [Thread-196527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:52:24.112 [DEBUG] [Thread-196527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:52:24.160 [DEBUG] [Thread-196527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:52:24.160 [DEBUG] [Thread-196527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:52:24.169 [DEBUG] [Thread-196527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:52:24.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:52:24.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:52:24.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:52:24.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:52:24.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:52:24.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:52:24.206 [DEBUG] [Thread-196527] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:52:25.583 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:52:25.584 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:52:29.382 [DEBUG] [Thread-196529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:52:44.435 [DEBUG] [Thread-196530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:52:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:52:54.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:52: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
2026-04-12T21:52:55.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 52, 22), 0.24509, 98.1893, 0.0, 8.55864, 11.113, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:52:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:52:22
2026-04-12T21:52:55.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:52:56.041 [DEBUG] [Thread-196531] [transport.py] [_log()] starting thread (client mode): 0xae5e53f0
2026-04-12T21:52:56.041 [DEBUG] [Thread-196531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:52:56.062 [DEBUG] [Thread-196531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:52:56.062 [INFO] [Thread-196531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] client lang: <none>
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] server lang: <none>
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] kex follows: False
2026-04-12T21:52:56.065 [DEBUG] [Thread-196531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:52:56.066 [DEBUG] [Thread-196531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:52:56.066 [DEBUG] [Thread-196531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:52:56.066 [DEBUG] [Thread-196531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:52:56.066 [DEBUG] [Thread-196531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:52:56.066 [DEBUG] [Thread-196531] [transport.py] [_log()] Compression: none
2026-04-12T21:52:56.066 [DEBUG] [Thread-196531] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:52:56.083 [DEBUG] [Thread-196531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:52:56.084 [DEBUG] [Thread-196531] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:52:56.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:52:56.085 [DEBUG] [Thread-196531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:52:56.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:52:56.087 [DEBUG] [Thread-196531] [transport.py] [_log()] userauth is OK
2026-04-12T21:52:56.087 [DEBUG] [Thread-196531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:52:56.088 [DEBUG] [Thread-196531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:52:56.088 [DEBUG] [Thread-196531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:52:56.088 [DEBUG] [Thread-196531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:52:56.111 [INFO] [Thread-196531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:52:56.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:52:56.891 [DEBUG] [Thread-196531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:52:56.891 [DEBUG] [Thread-196531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:52:56.892 [DEBUG] [Thread-196531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:52:56.932 [DEBUG] [Thread-196531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:52:56.932 [DEBUG] [Thread-196531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:52:56.936 [DEBUG] [Thread-196531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:52:56.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:52:56.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:52:56.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:52:56.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:52:56.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:52:56.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:52:56.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:52:56.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:52:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:52:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.827883 -999.00  +11.40   3.74     92  +10.30 1 2 1 3 1     0    0 1.39 14.30 .nEsW 3.7 3.7 224.0 7.4 12.4 -22.3 12.4 -21.1 12.1 -19.3 12.4 -21.1
2026-04-12T21:52:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:52:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:52:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.827883
2026-04-12T21:52:56.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:52:56.967 [DEBUG] [Thread-196531] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:52:56.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:52:56.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:52:56.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:52:56.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:52:56.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:52:22', tmtdew=0.24509, humidity=98.1893, cloud=0.0, wind=8.55864, temperature=11.113, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:52:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:52:57.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:52:57.063 [DEBUG] [Thread-196534] [transport.py] [_log()] starting thread (client mode): 0xae5e7d30
2026-04-12T21:52:57.064 [DEBUG] [Thread-196534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:52:57.078 [DEBUG] [Thread-196534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:52:57.078 [INFO] [Thread-196534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:52:57.095 [DEBUG] [Thread-196534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:52:57.095 [DEBUG] [Thread-196534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] client lang: <none>
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] server lang: <none>
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] kex follows: False
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:52:57.096 [DEBUG] [Thread-196534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:52:57.097 [DEBUG] [Thread-196534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:52:57.097 [DEBUG] [Thread-196534] [transport.py] [_log()] Compression: none
2026-04-12T21:52:57.097 [DEBUG] [Thread-196534] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:52:57.146 [DEBUG] [Thread-196534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:52:57.146 [DEBUG] [Thread-196534] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:52:57.147 [DEBUG] [Thread-196534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:52:57.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:52:57.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:52:57.201 [DEBUG] [Thread-196534] [transport.py] [_log()] userauth is OK
2026-04-12T21:52:57.202 [DEBUG] [Thread-196534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:52:57.202 [DEBUG] [Thread-196534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:52:57.202 [DEBUG] [Thread-196534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:52:57.202 [DEBUG] [Thread-196534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:52:57.221 [INFO] [Thread-196534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:52:57.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:52:57.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:52:58.022 [DEBUG] [Thread-196534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:52:58.022 [DEBUG] [Thread-196534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:52:58.071 [DEBUG] [Thread-196534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:52:58.071 [DEBUG] [Thread-196534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:52:58.080 [DEBUG] [Thread-196534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:52:58.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:52:58.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:52:58.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:52:58.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:52:58.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:52:58.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:52:58.113 [DEBUG] [Thread-196534] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:52:59.471 [DEBUG] [Thread-196536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:53:13.893 [DEBUG] [Thread-196537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:53:14.524 [DEBUG] [Thread-196538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:53:25.789 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:53:25.790 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:53:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:53:28.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:53:28.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:53:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 52, 57), 0.25271, 98.1395, 0.0, 8.4528, 11.0798, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:53:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:52:57
2026-04-12T21:53:29.557 [DEBUG] [Thread-196539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:53:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:53:29.984 [DEBUG] [Thread-196540] [transport.py] [_log()] starting thread (client mode): 0xae536aa0
2026-04-12T21:53:29.984 [DEBUG] [Thread-196540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:53:30.005 [DEBUG] [Thread-196540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:53:30.005 [INFO] [Thread-196540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] client lang: <none>
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] server lang: <none>
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] kex follows: False
2026-04-12T21:53:30.009 [DEBUG] [Thread-196540] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:53:30.010 [DEBUG] [Thread-196540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:53:30.010 [DEBUG] [Thread-196540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:53:30.010 [DEBUG] [Thread-196540] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:53:30.010 [DEBUG] [Thread-196540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:53:30.010 [DEBUG] [Thread-196540] [transport.py] [_log()] Compression: none
2026-04-12T21:53:30.010 [DEBUG] [Thread-196540] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:53:30.027 [DEBUG] [Thread-196540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:53:30.027 [DEBUG] [Thread-196540] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:53:30.028 [DEBUG] [Thread-196540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:53:30.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:53:30.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:53:30.030 [DEBUG] [Thread-196540] [transport.py] [_log()] userauth is OK
2026-04-12T21:53:30.030 [DEBUG] [Thread-196540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:53:30.030 [DEBUG] [Thread-196540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:53:30.030 [DEBUG] [Thread-196540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:53:30.030 [DEBUG] [Thread-196540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:53:30.052 [INFO] [Thread-196540] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:53:30.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:53:30.712 [DEBUG] [Thread-196540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:53:30.713 [DEBUG] [Thread-196540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:53:30.713 [DEBUG] [Thread-196540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:53:30.753 [DEBUG] [Thread-196540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:53:30.753 [DEBUG] [Thread-196540] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:53:30.757 [DEBUG] [Thread-196540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:53:30.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:53:30.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:53:30.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:53:30.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:53:30.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:53:30.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:53:30.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:53:30.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:53:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:53:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.828577 -999.00  +11.50   4.47     92  +10.30 1 2 1 3 1     0    0 1.44 16.66 ..Es. 4.5 4.5 239.4 6.3 12.4 -22.3 12.4 -21.1 12.1 -19.4 12.3 -21.2
2026-04-12T21:53:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:53:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:53:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.828577
2026-04-12T21:53:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:53:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:53:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:53:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:53:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:53:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:52:57', tmtdew=0.25271, humidity=98.1395, cloud=0.0, wind=8.4528, temperature=11.0798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:53:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:53:30.785 [DEBUG] [Thread-196540] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:53:30.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:53:30.881 [DEBUG] [Thread-196543] [transport.py] [_log()] starting thread (client mode): 0xae5379a0
2026-04-12T21:53:30.881 [DEBUG] [Thread-196543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:53:30.900 [DEBUG] [Thread-196543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:53:30.900 [INFO] [Thread-196543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] client lang: <none>
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] server lang: <none>
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] kex follows: False
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] Compression: none
2026-04-12T21:53:30.908 [DEBUG] [Thread-196543] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:53:30.965 [DEBUG] [Thread-196543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:53:30.965 [DEBUG] [Thread-196543] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:53:30.966 [DEBUG] [Thread-196543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:53:30.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:53:30.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:53:31.021 [DEBUG] [Thread-196543] [transport.py] [_log()] userauth is OK
2026-04-12T21:53:31.022 [DEBUG] [Thread-196543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:53:31.022 [DEBUG] [Thread-196543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:53:31.022 [DEBUG] [Thread-196543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:53:31.022 [DEBUG] [Thread-196543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:53:31.040 [INFO] [Thread-196543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:53:31.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:53:31.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:53:31.927 [DEBUG] [Thread-196543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:53:31.927 [DEBUG] [Thread-196543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:53:31.975 [DEBUG] [Thread-196543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:53:31.975 [DEBUG] [Thread-196543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:53:31.985 [DEBUG] [Thread-196543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:53:31.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:53:31.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:53:32.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:53:32.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:53:32.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:53:32.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:53:32.022 [DEBUG] [Thread-196543] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:53:44.595 [DEBUG] [Thread-196545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:53:59.648 [DEBUG] [Thread-196546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:54:02.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:54:02.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:54:02.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:54:03.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 53, 33), 0.38495, 97.4119, 0.0, 10.4112, 11.2929, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:54:03.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:53:33
2026-04-12T21:54:03.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:54:03.963 [DEBUG] [Thread-196547] [transport.py] [_log()] starting thread (client mode): 0xae5603d0
2026-04-12T21:54:03.963 [DEBUG] [Thread-196547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:54:03.983 [DEBUG] [Thread-196547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:54:03.984 [INFO] [Thread-196547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] client lang: <none>
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] server lang: <none>
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] kex follows: False
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] Compression: none
2026-04-12T21:54:03.987 [DEBUG] [Thread-196547] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:54:04.006 [DEBUG] [Thread-196547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:54:04.007 [DEBUG] [Thread-196547] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:54:04.007 [DEBUG] [Thread-196547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:54:04.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:54:04.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:54:04.009 [DEBUG] [Thread-196547] [transport.py] [_log()] userauth is OK
2026-04-12T21:54:04.009 [DEBUG] [Thread-196547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:54:04.010 [DEBUG] [Thread-196547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:54:04.010 [DEBUG] [Thread-196547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:54:04.010 [DEBUG] [Thread-196547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:54:04.033 [INFO] [Thread-196547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:54:04.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:54:04.676 [DEBUG] [Thread-196547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:54:04.676 [DEBUG] [Thread-196547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:54:04.677 [DEBUG] [Thread-196547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:54:04.717 [DEBUG] [Thread-196547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:54:04.717 [DEBUG] [Thread-196547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:54:04.721 [DEBUG] [Thread-196547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:54:04.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:54:04.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:54:04.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:54:04.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:54:04.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:54:04.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:54:04.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:54:04.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:54:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:54:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.828924 -999.00  +11.40   7.03     92  +10.30 1 2 1 3 1     0    0 1.43 16.06 .nE.w 7.0 7.0 208.2 8.1 12.4 -22.3 12.3 -21.3 12.0 -19.3 12.3 -21.1
2026-04-12T21:54:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:54:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:54:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.828924
2026-04-12T21:54:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:54:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:54:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:54:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:54:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:54:04.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:53:33', tmtdew=0.38495, humidity=97.4119, cloud=0.0, wind=10.4112, temperature=11.2929, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:53:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:54:04.750 [DEBUG] [Thread-196547] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:54:04.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:54:04.843 [DEBUG] [Thread-196550] [transport.py] [_log()] starting thread (client mode): 0xae536ad0
2026-04-12T21:54:04.844 [DEBUG] [Thread-196550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:54:04.859 [DEBUG] [Thread-196550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:54:04.859 [INFO] [Thread-196550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] client lang: <none>
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] server lang: <none>
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] kex follows: False
2026-04-12T21:54:04.866 [DEBUG] [Thread-196550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:54:04.867 [DEBUG] [Thread-196550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:54:04.867 [DEBUG] [Thread-196550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:54:04.867 [DEBUG] [Thread-196550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:54:04.867 [DEBUG] [Thread-196550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:54:04.867 [DEBUG] [Thread-196550] [transport.py] [_log()] Compression: none
2026-04-12T21:54:04.867 [DEBUG] [Thread-196550] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:54:04.923 [DEBUG] [Thread-196550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:54:04.923 [DEBUG] [Thread-196550] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:54:04.923 [DEBUG] [Thread-196550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:54:04.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:54:04.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:54:04.980 [DEBUG] [Thread-196550] [transport.py] [_log()] userauth is OK
2026-04-12T21:54:04.980 [DEBUG] [Thread-196550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:54:04.980 [DEBUG] [Thread-196550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:54:04.980 [DEBUG] [Thread-196550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:54:04.980 [DEBUG] [Thread-196550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:54:04.998 [INFO] [Thread-196550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:54:04.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:54:04.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:54:05.811 [DEBUG] [Thread-196550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:54:05.811 [DEBUG] [Thread-196550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:54:05.859 [DEBUG] [Thread-196550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:54:05.859 [DEBUG] [Thread-196550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:54:05.869 [DEBUG] [Thread-196550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:54:05.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:54:05.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:54:05.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
2026-04-12T21:54:05.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:54:05.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:54:05.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:54:05.906 [DEBUG] [Thread-196550] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:54:13.982 [DEBUG] [Thread-196552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:54:14.683 [DEBUG] [Thread-196553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:54:25.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:54:25.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:54:29.737 [DEBUG] [Thread-196554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:54:35.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:54:35.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:54:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:54:37.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 54, 8), 0.247525, 98.1728, 0.0, 9.21132, 11.1133, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:54:37.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:54:08
2026-04-12T21:54:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:54:37.792 [DEBUG] [Thread-196555] [transport.py] [_log()] starting thread (client mode): 0xae534430
2026-04-12T21:54:37.792 [DEBUG] [Thread-196555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:54:37.811 [DEBUG] [Thread-196555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:54:37.811 [INFO] [Thread-196555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] client lang: <none>
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] server lang: <none>
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] kex follows: False
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] Compression: none
2026-04-12T21:54:37.815 [DEBUG] [Thread-196555] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:54:37.832 [DEBUG] [Thread-196555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:54:37.833 [DEBUG] [Thread-196555] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:54:37.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:54:37.834 [DEBUG] [Thread-196555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:54:37.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:54:37.836 [DEBUG] [Thread-196555] [transport.py] [_log()] userauth is OK
2026-04-12T21:54:37.836 [DEBUG] [Thread-196555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:54:37.836 [DEBUG] [Thread-196555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:54:37.836 [DEBUG] [Thread-196555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:54:37.836 [DEBUG] [Thread-196555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:54:37.856 [INFO] [Thread-196555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:54:37.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:54:38.525 [DEBUG] [Thread-196555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:54:38.525 [DEBUG] [Thread-196555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:54:38.525 [DEBUG] [Thread-196555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:54:38.567 [DEBUG] [Thread-196555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:54:38.567 [DEBUG] [Thread-196555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:54:38.569 [DEBUG] [Thread-196555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:54:38.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:54:38.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:54:38.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:54:38.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:54:38.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:54:38.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:54:38.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:54:38.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:54:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:54:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.829271 -999.00  +11.40   6.95     92  +10.30 1 2 1 3 1     0    0 1.45 16.37 .nEsw 7.0 7.0 219.6 7.7 12.4 -22.3 12.3 -21.2 12.0 -19.3 12.3 -21.2
2026-04-12T21:54:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:54:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:54:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.829271
2026-04-12T21:54:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:54:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:54:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:54:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:54:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:54:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:54:08', tmtdew=0.247525, humidity=98.1728, cloud=0.0, wind=9.21132, temperature=11.1133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:54:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:54:38.595 [DEBUG] [Thread-196555] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:54:38.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:54:38.688 [DEBUG] [Thread-196558] [transport.py] [_log()] starting thread (client mode): 0xae5626e0
2026-04-12T21:54:38.688 [DEBUG] [Thread-196558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:54:38.703 [DEBUG] [Thread-196558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:54:38.703 [INFO] [Thread-196558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:54:38.712 [DEBUG] [Thread-196558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:54:38.712 [DEBUG] [Thread-196558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:54:38.712 [DEBUG] [Thread-196558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:54:38.712 [DEBUG] [Thread-196558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:38.712 [DEBUG] [Thread-196558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] client lang: <none>
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] server lang: <none>
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] kex follows: False
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:54:38.713 [DEBUG] [Thread-196558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:54:38.714 [DEBUG] [Thread-196558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:54:38.714 [DEBUG] [Thread-196558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:54:38.714 [DEBUG] [Thread-196558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:54:38.714 [DEBUG] [Thread-196558] [transport.py] [_log()] Compression: none
2026-04-12T21:54:38.714 [DEBUG] [Thread-196558] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:54:38.773 [DEBUG] [Thread-196558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:54:38.774 [DEBUG] [Thread-196558] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:54:38.774 [DEBUG] [Thread-196558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:54:38.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:54:38.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:54:38.832 [DEBUG] [Thread-196558] [transport.py] [_log()] userauth is OK
2026-04-12T21:54:38.833 [DEBUG] [Thread-196558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:54:38.833 [DEBUG] [Thread-196558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:54:38.834 [DEBUG] [Thread-196558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:54:38.834 [DEBUG] [Thread-196558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:54:38.852 [INFO] [Thread-196558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:54:38.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:54:38.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:54:39.672 [DEBUG] [Thread-196558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:54:39.673 [DEBUG] [Thread-196558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:54:39.721 [DEBUG] [Thread-196558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:54:39.721 [DEBUG] [Thread-196558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:54:39.730 [DEBUG] [Thread-196558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:54:39.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:54:39.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:54:39.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:54:39.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:54:39.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:54:39.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:54:39.767 [DEBUG] [Thread-196558] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:54:44.773 [DEBUG] [Thread-196560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:54:59.825 [DEBUG] [Thread-196561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:55:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:55:09.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:55:09.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:55:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 54, 44), 0.38478, 97.4121, 0.0, 10.7287, 11.2267, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:55:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:54:44
2026-04-12T21:55:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:55:11.582 [DEBUG] [Thread-196562] [transport.py] [_log()] starting thread (client mode): 0xa795b8e0
2026-04-12T21:55:11.582 [DEBUG] [Thread-196562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:55:11.602 [DEBUG] [Thread-196562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:55:11.603 [INFO] [Thread-196562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] client lang: <none>
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] server lang: <none>
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] kex follows: False
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] Compression: none
2026-04-12T21:55:11.606 [DEBUG] [Thread-196562] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:55:11.623 [DEBUG] [Thread-196562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:55:11.623 [DEBUG] [Thread-196562] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:55:11.624 [DEBUG] [Thread-196562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:55:11.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:55:11.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:55:11.626 [DEBUG] [Thread-196562] [transport.py] [_log()] userauth is OK
2026-04-12T21:55:11.626 [DEBUG] [Thread-196562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:55:11.626 [DEBUG] [Thread-196562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:55:11.626 [DEBUG] [Thread-196562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:55:11.626 [DEBUG] [Thread-196562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:55:11.650 [INFO] [Thread-196562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:55:11.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:55:12.723 [DEBUG] [Thread-196562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:55:12.723 [DEBUG] [Thread-196562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:55:12.723 [DEBUG] [Thread-196562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:55:12.764 [DEBUG] [Thread-196562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:55:12.764 [DEBUG] [Thread-196562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:55:12.767 [DEBUG] [Thread-196562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:55:12.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:55:12.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:55:12.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:55:12.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:55:12.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:55:12.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:55:12.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:55:12.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:55:12.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:55:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.829619 -999.00  +11.40   2.43     92  +10.30 1 2 1 3 1     0    0 1.45 15.55 .nEsw 2.4 2.4 224.2 6.6 12.4 -22.4 12.2 -21.1 12.0 -19.2 12.3 -21.2
2026-04-12T21:55:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:55:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:55:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.829619
2026-04-12T21:55:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:55:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:55:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:55:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:55:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:55:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:54:44', tmtdew=0.38478, humidity=97.4121, cloud=0.0, wind=10.7287, temperature=11.2267, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:54:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:55:12.796 [DEBUG] [Thread-196562] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:55:12.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:55:12.895 [DEBUG] [Thread-196565] [transport.py] [_log()] starting thread (client mode): 0xa795abc0
2026-04-12T21:55:12.895 [DEBUG] [Thread-196565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:55:12.914 [DEBUG] [Thread-196565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:55:12.915 [INFO] [Thread-196565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:55:12.922 [DEBUG] [Thread-196565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:55:12.922 [DEBUG] [Thread-196565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:55:12.922 [DEBUG] [Thread-196565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] client lang: <none>
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] server lang: <none>
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] kex follows: False
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:55:12.923 [DEBUG] [Thread-196565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:55:12.924 [DEBUG] [Thread-196565] [transport.py] [_log()] Compression: none
2026-04-12T21:55:12.924 [DEBUG] [Thread-196565] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:55:12.981 [DEBUG] [Thread-196565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:55:12.981 [DEBUG] [Thread-196565] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:55:12.982 [DEBUG] [Thread-196565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:55:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:55:12.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:55:13.044 [DEBUG] [Thread-196565] [transport.py] [_log()] userauth is OK
2026-04-12T21:55:13.044 [DEBUG] [Thread-196565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:55:13.044 [DEBUG] [Thread-196565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:55:13.044 [DEBUG] [Thread-196565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:55:13.044 [DEBUG] [Thread-196565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:55:13.063 [INFO] [Thread-196565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:55:13.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:55:13.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:55:13.952 [DEBUG] [Thread-196565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:55:13.952 [DEBUG] [Thread-196565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:55:14.000 [DEBUG] [Thread-196565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:55:14.000 [DEBUG] [Thread-196565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:55:14.009 [DEBUG] [Thread-196565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:55:14.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:55:14.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:55:14.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:55:14.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:55:14.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:55:14.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:55:14.042 [DEBUG] [Thread-196565] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:55:14.078 [DEBUG] [Thread-196567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:55:14.864 [DEBUG] [Thread-196568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:55:26.203 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:55:26.204 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:55:29.916 [DEBUG] [Thread-196569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:55:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:55:44.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:55:44.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:55:44.953 [DEBUG] [Thread-196570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:55:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 55, 19), 0.24506, 98.1895, 0.0, 8.982, 11.1631, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:55:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:55:19
2026-04-12T21:55:45.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:55:45.903 [DEBUG] [Thread-196571] [transport.py] [_log()] starting thread (client mode): 0xa795a140
2026-04-12T21:55:45.903 [DEBUG] [Thread-196571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:55:45.925 [DEBUG] [Thread-196571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:55:45.925 [INFO] [Thread-196571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:55:45.928 [DEBUG] [Thread-196571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:55:45.928 [DEBUG] [Thread-196571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] client lang: <none>
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] server lang: <none>
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] kex follows: False
2026-04-12T21:55:45.929 [DEBUG] [Thread-196571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:55:45.930 [DEBUG] [Thread-196571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:55:45.930 [DEBUG] [Thread-196571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:55:45.930 [DEBUG] [Thread-196571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:55:45.930 [DEBUG] [Thread-196571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:55:45.930 [DEBUG] [Thread-196571] [transport.py] [_log()] Compression: none
2026-04-12T21:55:45.930 [DEBUG] [Thread-196571] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:55:45.948 [DEBUG] [Thread-196571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:55:45.949 [DEBUG] [Thread-196571] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:55:45.950 [DEBUG] [Thread-196571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:55:45.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:55:45.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:55:45.951 [DEBUG] [Thread-196571] [transport.py] [_log()] userauth is OK
2026-04-12T21:55:45.952 [DEBUG] [Thread-196571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:55:45.952 [DEBUG] [Thread-196571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:55:45.952 [DEBUG] [Thread-196571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:55:45.952 [DEBUG] [Thread-196571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:55:45.988 [INFO] [Thread-196571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:55:45.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:55:46.584 [DEBUG] [Thread-196571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:55:46.585 [DEBUG] [Thread-196571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:55:46.585 [DEBUG] [Thread-196571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:55:46.625 [DEBUG] [Thread-196571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:55:46.625 [DEBUG] [Thread-196571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:55:46.629 [DEBUG] [Thread-196571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:55:46.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:55:46.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:55:46.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:55:46.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:55:46.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:55:46.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:55:46.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:55:46.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:55:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:55:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.829965 -999.00  +11.40   5.67     92  +10.30 1 2 1 3 1     0    0 1.49 16.86 .nEsw 5.7 5.7 223.6 9.0 12.4 -22.3 12.3 -21.1 12.0 -19.2 12.3 -21.3
2026-04-12T21:55:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:55:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:55:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.829965
2026-04-12T21:55:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:55:46.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:55:46.655 [DEBUG] [Thread-196571] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:55:46.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:55:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:55:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:55:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:55:19', tmtdew=0.24506, humidity=98.1895, cloud=0.0, wind=8.982, temperature=11.1631, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:55:08.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3332499999999996, 2.0090000000000003, 2.9509999999999996, nan, nan, nan, nan, 2.5435, 2.6099999999999994, nan, 3.2234999999999996, 1.8177499999999984, nan, nan, nan, 0.24249999999999972, 0.2732500000000009, 0.26750000000000007, 0.2635000000000005, 0.1880000000000006, 0.9735000000000014, 0.9425000000000008, 1.1332499999999994], zp_timestamp='2026-04-12T19:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:55:46.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:55:46.741 [DEBUG] [Thread-196574] [transport.py] [_log()] starting thread (client mode): 0xa79583d0
2026-04-12T21:55:46.741 [DEBUG] [Thread-196574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:55:46.756 [DEBUG] [Thread-196574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:55:46.756 [INFO] [Thread-196574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] client lang: <none>
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] server lang: <none>
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] kex follows: False
2026-04-12T21:55:46.764 [DEBUG] [Thread-196574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:55:46.765 [DEBUG] [Thread-196574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:55:46.765 [DEBUG] [Thread-196574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:55:46.765 [DEBUG] [Thread-196574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:55:46.765 [DEBUG] [Thread-196574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:55:46.765 [DEBUG] [Thread-196574] [transport.py] [_log()] Compression: none
2026-04-12T21:55:46.765 [DEBUG] [Thread-196574] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:55:46.824 [DEBUG] [Thread-196574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:55:46.824 [DEBUG] [Thread-196574] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:55:46.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:55:46.825 [DEBUG] [Thread-196574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:55:46.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:55:46.879 [DEBUG] [Thread-196574] [transport.py] [_log()] userauth is OK
2026-04-12T21:55:46.880 [DEBUG] [Thread-196574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:55:46.889 [DEBUG] [Thread-196574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:55:46.889 [DEBUG] [Thread-196574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:55:46.889 [DEBUG] [Thread-196574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:55:46.909 [INFO] [Thread-196574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:55:46.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:55:46.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:55:47.781 [DEBUG] [Thread-196574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:55:47.781 [DEBUG] [Thread-196574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:55:47.830 [DEBUG] [Thread-196574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:55:47.830 [DEBUG] [Thread-196574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:55:47.838 [DEBUG] [Thread-196574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:55:47.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:55:47.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:55:47.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:55:47.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:55:47.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:55:47.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:55:47.870 [DEBUG] [Thread-196574] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:55:59.991 [DEBUG] [Thread-196576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:56:14.154 [DEBUG] [Thread-196577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:56:15.043 [DEBUG] [Thread-196578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:56:17.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:56:17.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:56:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:56:19.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 55, 55), 0.25262, 98.1398, 0.0, 9.28188, 11.1134, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:56:19.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:55:55
2026-04-12T21:56:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:56:19.762 [DEBUG] [Thread-196579] [transport.py] [_log()] starting thread (client mode): 0xae535630
2026-04-12T21:56:19.762 [DEBUG] [Thread-196579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:56:19.784 [DEBUG] [Thread-196579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:56:19.785 [INFO] [Thread-196579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:56:19.786 [DEBUG] [Thread-196579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:56:19.786 [DEBUG] [Thread-196579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:56:19.786 [DEBUG] [Thread-196579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] client lang: <none>
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] server lang: <none>
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] kex follows: False
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:56:19.787 [DEBUG] [Thread-196579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:56:19.788 [DEBUG] [Thread-196579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:56:19.788 [DEBUG] [Thread-196579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:56:19.788 [DEBUG] [Thread-196579] [transport.py] [_log()] Compression: none
2026-04-12T21:56:19.788 [DEBUG] [Thread-196579] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:56:19.807 [DEBUG] [Thread-196579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:56:19.807 [DEBUG] [Thread-196579] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:56:19.808 [DEBUG] [Thread-196579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:56:19.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:56:19.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:56:19.810 [DEBUG] [Thread-196579] [transport.py] [_log()] userauth is OK
2026-04-12T21:56:19.810 [DEBUG] [Thread-196579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:56:19.810 [DEBUG] [Thread-196579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:56:19.810 [DEBUG] [Thread-196579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:56:19.810 [DEBUG] [Thread-196579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:56:19.849 [INFO] [Thread-196579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:56:19.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:56:20.513 [DEBUG] [Thread-196579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:56:20.514 [DEBUG] [Thread-196579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:56:20.515 [DEBUG] [Thread-196579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:56:20.554 [DEBUG] [Thread-196579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:56:20.555 [DEBUG] [Thread-196579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:56:20.558 [DEBUG] [Thread-196579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:56:20.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:56:20.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:56:20.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:56:20.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:56:20.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:56:20.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:56:20.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:56:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:56:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:56:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.830313 -999.00  +11.40   4.18     92  +10.30 1 2 1 3 1     0    0 1.45 15.69 .nEsw 4.2 4.2 216.5 7.3 12.4 -22.3 12.3 -21.1 12.1 -19.3 12.3 -21.3
2026-04-12T21:56:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:56:20.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:56:20.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.830313
2026-04-12T21:56:20.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:56:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:56:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:56:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:56:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:56:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:55:55', tmtdew=0.25262, humidity=98.1398, cloud=0.0, wind=9.28188, temperature=11.1134, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:55:39.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:56:20.587 [DEBUG] [Thread-196579] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:56:20.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:56:20.696 [DEBUG] [Thread-196582] [transport.py] [_log()] starting thread (client mode): 0xae5623e0
2026-04-12T21:56:20.697 [DEBUG] [Thread-196582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:56:20.711 [DEBUG] [Thread-196582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:56:20.712 [INFO] [Thread-196582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:56:20.719 [DEBUG] [Thread-196582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:56:20.719 [DEBUG] [Thread-196582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] client lang: <none>
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] server lang: <none>
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] kex follows: False
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] Compression: none
2026-04-12T21:56:20.720 [DEBUG] [Thread-196582] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:56:20.779 [DEBUG] [Thread-196582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:56:20.779 [DEBUG] [Thread-196582] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:56:20.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:56:20.781 [DEBUG] [Thread-196582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:56:20.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:56:20.834 [DEBUG] [Thread-196582] [transport.py] [_log()] userauth is OK
2026-04-12T21:56:20.835 [DEBUG] [Thread-196582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:56:20.835 [DEBUG] [Thread-196582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:56:20.835 [DEBUG] [Thread-196582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:56:20.835 [DEBUG] [Thread-196582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:56:20.854 [INFO] [Thread-196582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:56:20.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:56:20.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:56:21.672 [DEBUG] [Thread-196582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:56:21.672 [DEBUG] [Thread-196582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:56:21.720 [DEBUG] [Thread-196582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:56:21.720 [DEBUG] [Thread-196582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:56:21.729 [DEBUG] [Thread-196582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:56:21.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:56:21.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:56:21.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:56:21.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:56:21.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:56:21.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:56:21.766 [DEBUG] [Thread-196582] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:56:26.409 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:56:26.410 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:56:30.083 [DEBUG] [Thread-196584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:56:45.150 [DEBUG] [Thread-196585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:56:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:56:51.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:56:51.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:56:53.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 56, 31), 0.247605, 98.173, 0.0, 8.87616, 11.1632, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:56:53.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:56:31
2026-04-12T21:56:53.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:56:53.637 [DEBUG] [Thread-196586] [transport.py] [_log()] starting thread (client mode): 0xae561330
2026-04-12T21:56:53.637 [DEBUG] [Thread-196586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:56:53.657 [DEBUG] [Thread-196586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:56:53.657 [INFO] [Thread-196586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:56:53.660 [DEBUG] [Thread-196586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:56:53.660 [DEBUG] [Thread-196586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] client lang: <none>
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] server lang: <none>
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] kex follows: False
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] Compression: none
2026-04-12T21:56:53.661 [DEBUG] [Thread-196586] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:56:53.680 [DEBUG] [Thread-196586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:56:53.681 [DEBUG] [Thread-196586] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:56:53.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:56:53.682 [DEBUG] [Thread-196586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:56:53.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:56:53.684 [DEBUG] [Thread-196586] [transport.py] [_log()] userauth is OK
2026-04-12T21:56:53.684 [DEBUG] [Thread-196586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:56:53.684 [DEBUG] [Thread-196586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:56:53.684 [DEBUG] [Thread-196586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:56:53.685 [DEBUG] [Thread-196586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:56:53.700 [INFO] [Thread-196586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:56:53.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:56:54.330 [DEBUG] [Thread-196586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:56:54.330 [DEBUG] [Thread-196586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:56:54.331 [DEBUG] [Thread-196586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:56:54.371 [DEBUG] [Thread-196586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:56:54.371 [DEBUG] [Thread-196586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:56:54.375 [DEBUG] [Thread-196586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:56:54.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:56:54.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:56:54.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:56:54.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:56:54.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:56:54.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:56:54.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:56:54.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:56:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:56:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.831008 -999.00  +11.50   5.25     92  +10.30 1 2 1 3 1     0    0 1.55 18.84 .nE.w 5.2 5.2 211.2 9.0 12.4 -22.3 12.3 -21.1 12.0 -19.2 12.3 -21.2
2026-04-12T21:56:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:56:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:56:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.831008
2026-04-12T21:56:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:56:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:56:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:56:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:56:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:56:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:56:31', tmtdew=0.247605, humidity=98.173, cloud=0.0, wind=8.87616, temperature=11.1632, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:56:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:56:54.402 [DEBUG] [Thread-196586] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:56:54.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:56:54.499 [DEBUG] [Thread-196589] [transport.py] [_log()] starting thread (client mode): 0xae5b3b80
2026-04-12T21:56:54.500 [DEBUG] [Thread-196589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:56:54.514 [DEBUG] [Thread-196589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:56:54.515 [INFO] [Thread-196589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:56:54.523 [DEBUG] [Thread-196589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:56:54.523 [DEBUG] [Thread-196589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:56:54.523 [DEBUG] [Thread-196589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:56:54.523 [DEBUG] [Thread-196589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:54.523 [DEBUG] [Thread-196589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] client lang: <none>
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] server lang: <none>
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] kex follows: False
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] Compression: none
2026-04-12T21:56:54.524 [DEBUG] [Thread-196589] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:56:54.582 [DEBUG] [Thread-196589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:56:54.583 [DEBUG] [Thread-196589] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:56:54.583 [DEBUG] [Thread-196589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:56:54.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:56:54.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:56:54.639 [DEBUG] [Thread-196589] [transport.py] [_log()] userauth is OK
2026-04-12T21:56:54.639 [DEBUG] [Thread-196589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:56:54.639 [DEBUG] [Thread-196589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:56:54.639 [DEBUG] [Thread-196589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:56:54.640 [DEBUG] [Thread-196589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:56:54.658 [INFO] [Thread-196589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:56:54.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:56:54.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:56:55.474 [DEBUG] [Thread-196589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:56:55.474 [DEBUG] [Thread-196589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:56:55.522 [DEBUG] [Thread-196589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:56:55.522 [DEBUG] [Thread-196589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:56:55.531 [DEBUG] [Thread-196589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:56:55.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:56:55.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:56:55.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:56:55.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:56:55.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:56:55.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:56:55.571 [DEBUG] [Thread-196589] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:57:00.187 [DEBUG] [Thread-196591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:57:14.212 [DEBUG] [Thread-196592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:57:15.241 [DEBUG] [Thread-196593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:57:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:57:25.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:57:25.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:57:26.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:57:26.618 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:57:26.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 57, 6), 0.24493, 98.1896, 0.0, 8.73504, 11.1134, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:57:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:57:06
2026-04-12T21:57:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:57:27.414 [DEBUG] [Thread-196594] [transport.py] [_log()] starting thread (client mode): 0xae5343d0
2026-04-12T21:57:27.414 [DEBUG] [Thread-196594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:57:27.434 [DEBUG] [Thread-196594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:57:27.434 [INFO] [Thread-196594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:57:27.437 [DEBUG] [Thread-196594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:57:27.437 [DEBUG] [Thread-196594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] client lang: <none>
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] server lang: <none>
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] kex follows: False
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:57:27.438 [DEBUG] [Thread-196594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:57:27.439 [DEBUG] [Thread-196594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:57:27.439 [DEBUG] [Thread-196594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:57:27.439 [DEBUG] [Thread-196594] [transport.py] [_log()] Compression: none
2026-04-12T21:57:27.439 [DEBUG] [Thread-196594] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:57:27.457 [DEBUG] [Thread-196594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:57:27.458 [DEBUG] [Thread-196594] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:57:27.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:57:27.459 [DEBUG] [Thread-196594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:57:27.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:57:27.461 [DEBUG] [Thread-196594] [transport.py] [_log()] userauth is OK
2026-04-12T21:57:27.462 [DEBUG] [Thread-196594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:57:27.462 [DEBUG] [Thread-196594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:57:27.462 [DEBUG] [Thread-196594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:57:27.462 [DEBUG] [Thread-196594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:57:27.486 [INFO] [Thread-196594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:57:27.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:57:28.122 [DEBUG] [Thread-196594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:57:28.122 [DEBUG] [Thread-196594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:57:28.123 [DEBUG] [Thread-196594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:57:28.163 [DEBUG] [Thread-196594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:57:28.164 [DEBUG] [Thread-196594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:57:28.166 [DEBUG] [Thread-196594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:57:28.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:57:28.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:57:28.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:57:28.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:57:28.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:57:28.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:57:28.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:57:28.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:57:28.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:57:28.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.831355 -999.00  +11.50   4.98     93  +10.40 1 2 1 3 1     0    0 1.57 18.38 .nE.w 5.0 5.0 189.9 8.5 12.4 -22.3 12.2 -21.1 12.0 -19.2 12.3 -21.0
2026-04-12T21:57:28.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:57:28.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:57:28.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.831355
2026-04-12T21:57:28.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:57:28.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:57:28.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:57:28.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:57:28.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:57:28.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:57:06', tmtdew=0.24493, humidity=98.1896, cloud=0.0, wind=8.73504, temperature=11.1134, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:57:09.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:57:28.187 [DEBUG] [Thread-196594] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:57:28.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:57:28.282 [DEBUG] [Thread-196597] [transport.py] [_log()] starting thread (client mode): 0xa7958e20
2026-04-12T21:57:28.282 [DEBUG] [Thread-196597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:57:28.302 [DEBUG] [Thread-196597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:57:28.302 [INFO] [Thread-196597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:57:28.310 [DEBUG] [Thread-196597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:57:28.310 [DEBUG] [Thread-196597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] client lang: <none>
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] server lang: <none>
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] kex follows: False
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] Compression: none
2026-04-12T21:57:28.311 [DEBUG] [Thread-196597] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:57:28.374 [DEBUG] [Thread-196597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:57:28.374 [DEBUG] [Thread-196597] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:57:28.375 [DEBUG] [Thread-196597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:57:28.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:57:28.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:57:28.430 [DEBUG] [Thread-196597] [transport.py] [_log()] userauth is OK
2026-04-12T21:57:28.430 [DEBUG] [Thread-196597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:57:28.430 [DEBUG] [Thread-196597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:57:28.431 [DEBUG] [Thread-196597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:57:28.431 [DEBUG] [Thread-196597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:57:28.456 [INFO] [Thread-196597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:57:28.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:57:28.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:57:29.296 [DEBUG] [Thread-196597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:57:29.296 [DEBUG] [Thread-196597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:57:29.344 [DEBUG] [Thread-196597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:57:29.344 [DEBUG] [Thread-196597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:57:29.353 [DEBUG] [Thread-196597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:57:29.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:57: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')
2026-04-12T21:57:29.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:57:29.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:57:29.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:57:29.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:57:29.388 [DEBUG] [Thread-196597] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:57:30.281 [DEBUG] [Thread-196599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:57:45.331 [DEBUG] [Thread-196600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:57:59.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:57:59.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:57:59.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:58:00.369 [DEBUG] [Thread-196601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:58:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 57, 42), 0.3848, 97.4124, 0.0, 10.8346, 11.26, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:58:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:57:42
2026-04-12T21:58:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:58:01.267 [DEBUG] [Thread-196602] [transport.py] [_log()] starting thread (client mode): 0xa7958fa0
2026-04-12T21:58:01.267 [DEBUG] [Thread-196602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:58:01.287 [DEBUG] [Thread-196602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:58:01.287 [INFO] [Thread-196602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:58:01.290 [DEBUG] [Thread-196602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] client lang: <none>
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] server lang: <none>
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] kex follows: False
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] Compression: none
2026-04-12T21:58:01.291 [DEBUG] [Thread-196602] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:58:01.307 [DEBUG] [Thread-196602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:58:01.308 [DEBUG] [Thread-196602] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:58:01.308 [DEBUG] [Thread-196602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:58:01.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:58:01.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:58:01.352 [DEBUG] [Thread-196602] [transport.py] [_log()] userauth is OK
2026-04-12T21:58:01.352 [DEBUG] [Thread-196602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:58:01.352 [DEBUG] [Thread-196602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:58:01.352 [DEBUG] [Thread-196602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:58:01.353 [DEBUG] [Thread-196602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:58:01.385 [INFO] [Thread-196602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:58:01.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:58:02.045 [DEBUG] [Thread-196602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:58:02.045 [DEBUG] [Thread-196602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:58:02.045 [DEBUG] [Thread-196602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:58:02.086 [DEBUG] [Thread-196602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:58:02.086 [DEBUG] [Thread-196602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:58:02.090 [DEBUG] [Thread-196602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:58:02.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:58:02.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:58:02.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:58:02.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:58:02.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:58:02.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:58:02.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:58:02.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:58:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:58:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.831702 -999.00  +11.50   4.39     93  +10.40 1 2 1 3 1     0    0 1.55 18.33 .nEsW 4.4 4.4 206.6 6.9 12.3 -22.2 12.2 -21.1 12.0 -19.2 12.3 -21.2
2026-04-12T21:58:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:58:02.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:58:02.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.831702
2026-04-12T21:58:02.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:58:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:58:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:58:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:58:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:58:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:57:42', tmtdew=0.3848, humidity=97.4124, cloud=0.0, wind=10.8346, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:57:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:58:02.117 [DEBUG] [Thread-196602] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:58:02.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:58:02.210 [DEBUG] [Thread-196605] [transport.py] [_log()] starting thread (client mode): 0xae5a6ce0
2026-04-12T21:58:02.210 [DEBUG] [Thread-196605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:58:02.225 [DEBUG] [Thread-196605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:58:02.225 [INFO] [Thread-196605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] client lang: <none>
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] server lang: <none>
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] kex follows: False
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] Compression: none
2026-04-12T21:58:02.233 [DEBUG] [Thread-196605] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:58:02.290 [DEBUG] [Thread-196605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:58:02.290 [DEBUG] [Thread-196605] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:58:02.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:58:02.291 [DEBUG] [Thread-196605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:58:02.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:58:02.345 [DEBUG] [Thread-196605] [transport.py] [_log()] userauth is OK
2026-04-12T21:58:02.346 [DEBUG] [Thread-196605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:58:02.346 [DEBUG] [Thread-196605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:58:02.346 [DEBUG] [Thread-196605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:58:02.346 [DEBUG] [Thread-196605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:58:02.369 [INFO] [Thread-196605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:58:02.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:58:02.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:58:03.206 [DEBUG] [Thread-196605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:58:03.206 [DEBUG] [Thread-196605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:58:03.254 [DEBUG] [Thread-196605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:58:03.254 [DEBUG] [Thread-196605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:58:03.264 [DEBUG] [Thread-196605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:58:03.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:58:03.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:58:03.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:58:03.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:58:03.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:58:03.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:58:03.300 [DEBUG] [Thread-196605] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:58:14.286 [DEBUG] [Thread-196607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:58:15.407 [DEBUG] [Thread-196608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:58:26.822 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:58:26.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:58:30.457 [DEBUG] [Thread-196609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:58:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:58:33.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:58:33.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:58:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 58, 17), 0.242325, 98.2063, 0.0, 9.21132, 11.1469, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:58:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:58:17
2026-04-12T21:58:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:58:35.186 [DEBUG] [Thread-196610] [transport.py] [_log()] starting thread (client mode): 0xae5a7940
2026-04-12T21:58:35.187 [DEBUG] [Thread-196610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:58:35.204 [DEBUG] [Thread-196610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:58:35.204 [INFO] [Thread-196610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] client lang: <none>
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] server lang: <none>
2026-04-12T21:58:35.206 [DEBUG] [Thread-196610] [transport.py] [_log()] kex follows: False
2026-04-12T21:58:35.207 [DEBUG] [Thread-196610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:58:35.207 [DEBUG] [Thread-196610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:58:35.207 [DEBUG] [Thread-196610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:58:35.207 [DEBUG] [Thread-196610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:58:35.207 [DEBUG] [Thread-196610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:58:35.207 [DEBUG] [Thread-196610] [transport.py] [_log()] Compression: none
2026-04-12T21:58:35.207 [DEBUG] [Thread-196610] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:58:35.223 [DEBUG] [Thread-196610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:58:35.224 [DEBUG] [Thread-196610] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:58:35.225 [DEBUG] [Thread-196610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:58:35.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:58:35.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:58:35.228 [DEBUG] [Thread-196610] [transport.py] [_log()] userauth is OK
2026-04-12T21:58:35.228 [DEBUG] [Thread-196610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:58:35.228 [DEBUG] [Thread-196610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:58:35.228 [DEBUG] [Thread-196610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:58:35.228 [DEBUG] [Thread-196610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:58:35.252 [INFO] [Thread-196610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:58:35.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:58:35.872 [DEBUG] [Thread-196610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:58:35.872 [DEBUG] [Thread-196610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:58:35.873 [DEBUG] [Thread-196610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:58:35.913 [DEBUG] [Thread-196610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:58:35.913 [DEBUG] [Thread-196610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:58:35.917 [DEBUG] [Thread-196610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:58:35.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:58:35.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:58:35.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:58:35.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:58:35.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:58:35.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:58:35.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:58:35.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:58:35.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:58:35.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.832050 -999.00  +11.50   4.09     93  +10.40 1 2 1 3 1     0    0 1.52 16.97 .nE.W 4.1 4.1 211.6 8.2 12.4 -22.3 12.2 -21.1 12.0 -19.2 12.3 -21.2
2026-04-12T21:58:35.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:58:35.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:58:35.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.832050
2026-04-12T21:58:35.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:58:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:58:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:58:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:58:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:58:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:58:17', tmtdew=0.242325, humidity=98.2063, cloud=0.0, wind=9.21132, temperature=11.1469, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:58:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:58:35.943 [DEBUG] [Thread-196610] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:58:36.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:58:36.046 [DEBUG] [Thread-196613] [transport.py] [_log()] starting thread (client mode): 0xae536740
2026-04-12T21:58:36.046 [DEBUG] [Thread-196613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:58:36.061 [DEBUG] [Thread-196613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:58:36.062 [INFO] [Thread-196613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:58:36.069 [DEBUG] [Thread-196613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] client lang: <none>
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] server lang: <none>
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] kex follows: False
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] Compression: none
2026-04-12T21:58:36.070 [DEBUG] [Thread-196613] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:58:36.129 [DEBUG] [Thread-196613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:58:36.130 [DEBUG] [Thread-196613] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:58:36.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:58:36.131 [DEBUG] [Thread-196613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:58:36.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:58:36.186 [DEBUG] [Thread-196613] [transport.py] [_log()] userauth is OK
2026-04-12T21:58:36.186 [DEBUG] [Thread-196613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:58:36.187 [DEBUG] [Thread-196613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:58:36.187 [DEBUG] [Thread-196613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:58:36.187 [DEBUG] [Thread-196613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:58:36.206 [INFO] [Thread-196613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:58:36.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:58:36.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:58:37.020 [DEBUG] [Thread-196613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:58:37.020 [DEBUG] [Thread-196613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:58:37.068 [DEBUG] [Thread-196613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:58:37.068 [DEBUG] [Thread-196613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:58:37.077 [DEBUG] [Thread-196613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:58:37.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:58:37.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:58:37.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:58:37.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:58:37.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:58:37.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:58:37.115 [DEBUG] [Thread-196613] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:58:45.489 [DEBUG] [Thread-196615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:59:00.543 [DEBUG] [Thread-196616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:59:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:59:07.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:59:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:59:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 58, 53), 0.4002, 97.3123, 0.0, 9.5292, 11.2265, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:59:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:58:53
2026-04-12T21:59:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:59:08.922 [DEBUG] [Thread-196617] [transport.py] [_log()] starting thread (client mode): 0xae5366e0
2026-04-12T21:59:08.922 [DEBUG] [Thread-196617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:59:08.942 [DEBUG] [Thread-196617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:59:08.943 [INFO] [Thread-196617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:59:08.945 [DEBUG] [Thread-196617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:59:08.945 [DEBUG] [Thread-196617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] client lang: <none>
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] server lang: <none>
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] kex follows: False
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] Compression: none
2026-04-12T21:59:08.946 [DEBUG] [Thread-196617] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:59:08.963 [DEBUG] [Thread-196617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:59:08.963 [DEBUG] [Thread-196617] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:59:08.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:59:08.964 [DEBUG] [Thread-196617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:59:08.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:59:08.966 [DEBUG] [Thread-196617] [transport.py] [_log()] userauth is OK
2026-04-12T21:59:08.967 [DEBUG] [Thread-196617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:59:08.967 [DEBUG] [Thread-196617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:59:08.967 [DEBUG] [Thread-196617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:59:08.967 [DEBUG] [Thread-196617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:59:08.987 [INFO] [Thread-196617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:59:08.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:59:09.640 [DEBUG] [Thread-196617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:59:09.640 [DEBUG] [Thread-196617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:59:09.641 [DEBUG] [Thread-196617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:59:09.681 [DEBUG] [Thread-196617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:59:09.681 [DEBUG] [Thread-196617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:59:09.685 [DEBUG] [Thread-196617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:59:09.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:59:09.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:59:09.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:59:09.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:59:09.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:59:09.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:59:09.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:59:09.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.832396 -999.00  +11.50   7.15     93  +10.40 1 2 1 3 1     0    0 1.54 17.58 .nE.W 7.2 7.2 208.4 8.0 12.3 -22.1 12.2 -21.1 12.0 -19.3 12.3 -21.2
2026-04-12T21:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.832396
2026-04-12T21:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:58:53', tmtdew=0.4002, humidity=97.3123, cloud=0.0, wind=9.5292, temperature=11.2265, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:58:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:59:09.712 [DEBUG] [Thread-196617] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:59:09.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:59:09.797 [DEBUG] [Thread-196620] [transport.py] [_log()] starting thread (client mode): 0xae5370a0
2026-04-12T21:59:09.797 [DEBUG] [Thread-196620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:59:09.811 [DEBUG] [Thread-196620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:59:09.811 [INFO] [Thread-196620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:59:09.819 [DEBUG] [Thread-196620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:59:09.819 [DEBUG] [Thread-196620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:59:09.819 [DEBUG] [Thread-196620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] client lang: <none>
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] server lang: <none>
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] kex follows: False
2026-04-12T21:59:09.820 [DEBUG] [Thread-196620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:59:09.821 [DEBUG] [Thread-196620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:59:09.821 [DEBUG] [Thread-196620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:59:09.821 [DEBUG] [Thread-196620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:59:09.821 [DEBUG] [Thread-196620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:59:09.821 [DEBUG] [Thread-196620] [transport.py] [_log()] Compression: none
2026-04-12T21:59:09.821 [DEBUG] [Thread-196620] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:59:09.876 [DEBUG] [Thread-196620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:59:09.877 [DEBUG] [Thread-196620] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:59:09.878 [DEBUG] [Thread-196620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:59:09.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:59:09.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:59:09.935 [DEBUG] [Thread-196620] [transport.py] [_log()] userauth is OK
2026-04-12T21:59:09.935 [DEBUG] [Thread-196620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:59:09.935 [DEBUG] [Thread-196620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:59:09.935 [DEBUG] [Thread-196620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:59:09.935 [DEBUG] [Thread-196620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:59:09.953 [INFO] [Thread-196620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:59:09.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:59:09.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:59:10.771 [DEBUG] [Thread-196620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:59:10.771 [DEBUG] [Thread-196620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:59:10.819 [DEBUG] [Thread-196620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:59:10.819 [DEBUG] [Thread-196620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:59:10.828 [DEBUG] [Thread-196620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:59:10.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:59:10.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:59:10.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:59:10.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:59:10.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:59:10.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:59:10.864 [DEBUG] [Thread-196620] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:59:14.376 [DEBUG] [Thread-196622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:59:15.578 [DEBUG] [Thread-196623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:59:27.028 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:59:27.030 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:59:30.633 [DEBUG] [Thread-196624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T21:59:40.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T21:59:40.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T21:59:40.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T21:59:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 21, 59, 28), 0.2374, 98.2391, 0.0, 8.84088, 11.213, 2, 2, 0, 2, 0, 0),)
2026-04-12T21:59:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 21:59:28
2026-04-12T21:59:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T21:59:42.696 [DEBUG] [Thread-196625] [transport.py] [_log()] starting thread (client mode): 0xae5e6b30
2026-04-12T21:59:42.697 [DEBUG] [Thread-196625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:59:42.718 [DEBUG] [Thread-196625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T21:59:42.718 [INFO] [Thread-196625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T21:59:42.720 [DEBUG] [Thread-196625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] client lang: <none>
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] server lang: <none>
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] kex follows: False
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] Compression: none
2026-04-12T21:59:42.721 [DEBUG] [Thread-196625] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:59:42.730 [DEBUG] [Thread-196625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:59:42.731 [DEBUG] [Thread-196625] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:59:42.731 [DEBUG] [Thread-196625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T21:59:42.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T21:59:42.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:59:42.733 [DEBUG] [Thread-196625] [transport.py] [_log()] userauth is OK
2026-04-12T21:59:42.733 [DEBUG] [Thread-196625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:59:42.734 [DEBUG] [Thread-196625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:59:42.734 [DEBUG] [Thread-196625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T21:59:42.734 [DEBUG] [Thread-196625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:59:42.758 [INFO] [Thread-196625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:59:42.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:59:43.364 [DEBUG] [Thread-196625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:59:43.365 [DEBUG] [Thread-196625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:59:43.365 [DEBUG] [Thread-196625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T21:59:43.405 [DEBUG] [Thread-196625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:59:43.405 [DEBUG] [Thread-196625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:59:43.409 [DEBUG] [Thread-196625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:59:43.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:59:43.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T21:59:43.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T21:59:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T21:59:43.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:59:43.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T21:59:43.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:59:43.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:59:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T21:59:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.832744 -999.00  +11.40   6.00     93  +10.40 1 2 1 3 1     0    0 1.55 18.12 .nE.W 6.0 6.0 209.4 7.6 12.3 -22.2 12.2 -21.1 12.0 -19.3 12.2 -21.2
2026-04-12T21:59:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T21:59:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T21:59:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.832744
2026-04-12T21:59:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T21:59:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T21:59:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T21:59:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T21:59:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T21:59:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T21:59:28', tmtdew=0.2374, humidity=98.2391, cloud=0.0, wind=8.84088, temperature=11.213, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T19:59:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T21:59:43.440 [DEBUG] [Thread-196625] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:59:43.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T21:59:43.528 [DEBUG] [Thread-196628] [transport.py] [_log()] starting thread (client mode): 0xb0f6f790
2026-04-12T21:59:43.528 [DEBUG] [Thread-196628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T21:59:43.543 [DEBUG] [Thread-196628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T21:59:43.543 [INFO] [Thread-196628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T21:59:43.551 [DEBUG] [Thread-196628] [transport.py] [_log()] client lang: <none>
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] server lang: <none>
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] kex follows: False
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] Compression: none
2026-04-12T21:59:43.552 [DEBUG] [Thread-196628] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T21:59:43.609 [DEBUG] [Thread-196628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T21:59:43.610 [DEBUG] [Thread-196628] [transport.py] [_log()] Switch to new keys ...
2026-04-12T21:59:43.610 [DEBUG] [Thread-196628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T21:59:43.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T21:59:43.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T21:59:43.667 [DEBUG] [Thread-196628] [transport.py] [_log()] userauth is OK
2026-04-12T21:59:43.667 [DEBUG] [Thread-196628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T21:59:43.667 [DEBUG] [Thread-196628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T21:59:43.667 [DEBUG] [Thread-196628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T21:59:43.667 [DEBUG] [Thread-196628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T21:59:43.686 [INFO] [Thread-196628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T21:59:43.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T21:59:43.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T21:59:44.517 [DEBUG] [Thread-196628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T21:59:44.517 [DEBUG] [Thread-196628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T21:59:44.566 [DEBUG] [Thread-196628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T21:59:44.566 [DEBUG] [Thread-196628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T21:59:44.575 [DEBUG] [Thread-196628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T21:59:44.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T21:59:44.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T21:59:44.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T21:59:44.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T21:59:44.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T21:59:44.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T21:59:44.609 [DEBUG] [Thread-196628] [transport.py] [_log()] EOF in transport thread
2026-04-12T21:59:45.668 [DEBUG] [Thread-196630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:00.720 [DEBUG] [Thread-196631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:14.445 [DEBUG] [Thread-196632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:14.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:00:14.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:00:14.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:00:15.759 [DEBUG] [Thread-196633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:15.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 0, 4), 0.23996, 98.2225, 0.0, 7.95888, 11.213, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:00:15.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:00:04
2026-04-12T22:00:16.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:00:16.425 [DEBUG] [Thread-196634] [transport.py] [_log()] starting thread (client mode): 0xae5b1cf0
2026-04-12T22:00:16.425 [DEBUG] [Thread-196634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:00:16.445 [DEBUG] [Thread-196634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:00:16.445 [INFO] [Thread-196634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:00:16.447 [DEBUG] [Thread-196634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:00:16.447 [DEBUG] [Thread-196634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:00:16.447 [DEBUG] [Thread-196634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] client lang: <none>
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] server lang: <none>
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] kex follows: False
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:00:16.448 [DEBUG] [Thread-196634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:00:16.449 [DEBUG] [Thread-196634] [transport.py] [_log()] Compression: none
2026-04-12T22:00:16.449 [DEBUG] [Thread-196634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:00:16.461 [DEBUG] [Thread-196634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:00:16.461 [DEBUG] [Thread-196634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:00:16.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:00:16.463 [DEBUG] [Thread-196634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:00:16.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:00:16.464 [DEBUG] [Thread-196634] [transport.py] [_log()] userauth is OK
2026-04-12T22:00:16.465 [DEBUG] [Thread-196634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:00:16.465 [DEBUG] [Thread-196634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:00:16.465 [DEBUG] [Thread-196634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:00:16.465 [DEBUG] [Thread-196634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:00:16.484 [INFO] [Thread-196634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:00:16.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:00:17.079 [DEBUG] [Thread-196634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:00:17.080 [DEBUG] [Thread-196634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:00:17.080 [DEBUG] [Thread-196634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:00:17.120 [DEBUG] [Thread-196634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:00:17.120 [DEBUG] [Thread-196634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:00:17.123 [DEBUG] [Thread-196634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:00:17.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:00:17.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:00:17.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:00:17.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:00:17.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:00:17.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:00:17.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:00:17.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:00:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:00:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.833438 -999.00  +11.40   5.85     93  +10.40 1 2 1 3 1     0    0 1.49 15.69 .nEsW 5.8 5.8 210.4 6.7 12.3 -22.2 12.2 -21.1 11.9 -19.3 12.2 -21.2
2026-04-12T22:00:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:00:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:00:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.833438
2026-04-12T22:00:17.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:00:17.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:00:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:00:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:00:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:00:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:00:04', tmtdew=0.23996, humidity=98.2225, cloud=0.0, wind=7.95888, temperature=11.213, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:00:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:00:17.147 [DEBUG] [Thread-196634] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:00:17.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:00:17.240 [DEBUG] [Thread-196637] [transport.py] [_log()] starting thread (client mode): 0xae5b1870
2026-04-12T22:00:17.240 [DEBUG] [Thread-196637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:00:17.255 [DEBUG] [Thread-196637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:00:17.255 [INFO] [Thread-196637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] client lang: <none>
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] server lang: <none>
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] kex follows: False
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:00:17.263 [DEBUG] [Thread-196637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:00:17.264 [DEBUG] [Thread-196637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:00:17.264 [DEBUG] [Thread-196637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:00:17.264 [DEBUG] [Thread-196637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:00:17.264 [DEBUG] [Thread-196637] [transport.py] [_log()] Compression: none
2026-04-12T22:00:17.264 [DEBUG] [Thread-196637] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:00:17.322 [DEBUG] [Thread-196637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:00:17.322 [DEBUG] [Thread-196637] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:00:17.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:00:17.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:00:17.324 [DEBUG] [Thread-196637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:00:17.377 [DEBUG] [Thread-196637] [transport.py] [_log()] userauth is OK
2026-04-12T22:00:17.377 [DEBUG] [Thread-196637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:00:17.377 [DEBUG] [Thread-196637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:00:17.377 [DEBUG] [Thread-196637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:00:17.377 [DEBUG] [Thread-196637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:00:17.391 [INFO] [Thread-196637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:00:17.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:00:17.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:00:18.284 [DEBUG] [Thread-196637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:00:18.284 [DEBUG] [Thread-196637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:00:18.332 [DEBUG] [Thread-196637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:00:18.332 [DEBUG] [Thread-196637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:00:18.342 [DEBUG] [Thread-196637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:00:18.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:00:18.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:00: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
2026-04-12T22:00:18.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:00:18.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:00:18.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:00:18.380 [DEBUG] [Thread-196637] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:00:27.233 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:27.235 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:30.798 [DEBUG] [Thread-196639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:45.853 [DEBUG] [Thread-196640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:00:48.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:00:48.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:00:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:00:49.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 0, 39), 0.36472, 97.5447, 0.0, 9.74088, 11.4256, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:00:49.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:00:39
2026-04-12T22:00:50.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:00:50.235 [DEBUG] [Thread-196641] [transport.py] [_log()] starting thread (client mode): 0xae509a50
2026-04-12T22:00:50.235 [DEBUG] [Thread-196641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:00:50.254 [DEBUG] [Thread-196641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:00:50.255 [INFO] [Thread-196641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] client lang: <none>
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] server lang: <none>
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] kex follows: False
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] Compression: none
2026-04-12T22:00:50.258 [DEBUG] [Thread-196641] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:00:50.271 [DEBUG] [Thread-196641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:00:50.271 [DEBUG] [Thread-196641] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:00:50.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:00:50.272 [DEBUG] [Thread-196641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:00:50.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:00:50.274 [DEBUG] [Thread-196641] [transport.py] [_log()] userauth is OK
2026-04-12T22:00:50.274 [DEBUG] [Thread-196641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:00:50.275 [DEBUG] [Thread-196641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:00:50.275 [DEBUG] [Thread-196641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:00:50.275 [DEBUG] [Thread-196641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:00:50.299 [INFO] [Thread-196641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:00:50.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:00:50.924 [DEBUG] [Thread-196641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:00:50.924 [DEBUG] [Thread-196641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:00:50.925 [DEBUG] [Thread-196641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:00:50.965 [DEBUG] [Thread-196641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:00:50.965 [DEBUG] [Thread-196641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:00:50.969 [DEBUG] [Thread-196641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:00:50.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:00:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:00:50.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:00:50.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:00:50.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:00:50.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:00:50.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.833785 -999.00  +11.40   6.39     93  +10.40 1 2 1 3 1     0    0 1.46 14.76 .nEsW 6.4 6.4 205.4 7.6 12.3 -22.2 12.2 -21.1 11.9 -19.2 12.2 -21.2
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.833785
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:00:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:00:39', tmtdew=0.36472, humidity=97.5447, cloud=0.0, wind=9.74088, temperature=11.4256, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:00:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:00:50.989 [DEBUG] [Thread-196641] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:00:51.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:00:51.070 [DEBUG] [Thread-196644] [transport.py] [_log()] starting thread (client mode): 0xae508c70
2026-04-12T22:00:51.070 [DEBUG] [Thread-196644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:00:51.084 [DEBUG] [Thread-196644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:00:51.084 [INFO] [Thread-196644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:00:51.092 [DEBUG] [Thread-196644] [transport.py] [_log()] client lang: <none>
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] server lang: <none>
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] kex follows: False
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] Compression: none
2026-04-12T22:00:51.093 [DEBUG] [Thread-196644] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:00:51.148 [DEBUG] [Thread-196644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:00:51.149 [DEBUG] [Thread-196644] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:00:51.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:00:51.150 [DEBUG] [Thread-196644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:00:51.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:00:51.205 [DEBUG] [Thread-196644] [transport.py] [_log()] userauth is OK
2026-04-12T22:00:51.205 [DEBUG] [Thread-196644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:00:51.205 [DEBUG] [Thread-196644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:00:51.205 [DEBUG] [Thread-196644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:00:51.205 [DEBUG] [Thread-196644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:00:51.224 [INFO] [Thread-196644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:00:51.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:00:51.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:00:52.042 [DEBUG] [Thread-196644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:00:52.043 [DEBUG] [Thread-196644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:00:52.091 [DEBUG] [Thread-196644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:00:52.091 [DEBUG] [Thread-196644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:00:52.100 [DEBUG] [Thread-196644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:00:52.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:00:52.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:00:52.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:00:52.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:00:52.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:00:52.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:00:52.137 [DEBUG] [Thread-196644] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:01:00.887 [DEBUG] [Thread-196646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:01:14.505 [DEBUG] [Thread-196647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:01:15.930 [DEBUG] [Thread-196648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:01:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:01:22.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:01:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:01:23.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 1, 15), 0.24007, 98.2227, 0.0, 8.57628, 11.2294, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:01:23.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:01:15
2026-04-12T22:01:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:01:24.004 [DEBUG] [Thread-196649] [transport.py] [_log()] starting thread (client mode): 0xa795aad0
2026-04-12T22:01:24.004 [DEBUG] [Thread-196649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:01:24.024 [DEBUG] [Thread-196649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:01:24.024 [INFO] [Thread-196649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:01:24.027 [DEBUG] [Thread-196649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:01:24.027 [DEBUG] [Thread-196649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] client lang: <none>
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] server lang: <none>
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] kex follows: False
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] Compression: none
2026-04-12T22:01:24.028 [DEBUG] [Thread-196649] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:01:24.043 [DEBUG] [Thread-196649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:01:24.044 [DEBUG] [Thread-196649] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:01:24.044 [DEBUG] [Thread-196649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:01:24.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:01:24.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:01:24.046 [DEBUG] [Thread-196649] [transport.py] [_log()] userauth is OK
2026-04-12T22:01:24.046 [DEBUG] [Thread-196649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:01:24.047 [DEBUG] [Thread-196649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:01:24.047 [DEBUG] [Thread-196649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:01:24.047 [DEBUG] [Thread-196649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:01:24.068 [INFO] [Thread-196649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:01:24.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:01:24.810 [DEBUG] [Thread-196649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:01:24.811 [DEBUG] [Thread-196649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:01:24.811 [DEBUG] [Thread-196649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:01:24.851 [DEBUG] [Thread-196649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:01:24.851 [DEBUG] [Thread-196649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:01:24.855 [DEBUG] [Thread-196649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:01:24.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:01:24.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:01:24.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:01:24.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:01:24.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:01:24.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:01:24.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:01:24.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:01:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:01:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.833785 -999.00  +11.40   6.39     93  +10.40 1 2 1 3 1     0    0 1.46 14.76 .nEsW 6.4 6.4 205.4 7.6 12.3 -22.2 12.2 -21.1 11.9 -19.2 12.2 -21.2
2026-04-12T22:01:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:01:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:01:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.833785
2026-04-12T22:01:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:01:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:01:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:01:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:01:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:01:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:01:15', tmtdew=0.24007, humidity=98.2227, cloud=0.0, wind=8.57628, temperature=11.2294, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:00:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:01:24.878 [DEBUG] [Thread-196649] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:01:24.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:01:24.973 [DEBUG] [Thread-196652] [transport.py] [_log()] starting thread (client mode): 0xa7958f40
2026-04-12T22:01:24.973 [DEBUG] [Thread-196652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:01:24.989 [DEBUG] [Thread-196652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:01:24.989 [INFO] [Thread-196652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:01:24.997 [DEBUG] [Thread-196652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:01:24.997 [DEBUG] [Thread-196652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:01:24.997 [DEBUG] [Thread-196652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:01:24.997 [DEBUG] [Thread-196652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:24.997 [DEBUG] [Thread-196652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:24.997 [DEBUG] [Thread-196652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] client lang: <none>
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] server lang: <none>
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] kex follows: False
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:01:24.998 [DEBUG] [Thread-196652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:01:24.999 [DEBUG] [Thread-196652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:01:24.999 [DEBUG] [Thread-196652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:01:24.999 [DEBUG] [Thread-196652] [transport.py] [_log()] Compression: none
2026-04-12T22:01:24.999 [DEBUG] [Thread-196652] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:01:25.055 [DEBUG] [Thread-196652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:01:25.055 [DEBUG] [Thread-196652] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:01:25.056 [DEBUG] [Thread-196652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:01:25.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:01:25.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:01:25.112 [DEBUG] [Thread-196652] [transport.py] [_log()] userauth is OK
2026-04-12T22:01:25.112 [DEBUG] [Thread-196652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:01:25.112 [DEBUG] [Thread-196652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:01:25.112 [DEBUG] [Thread-196652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:01:25.112 [DEBUG] [Thread-196652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:01:25.131 [INFO] [Thread-196652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:01:25.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:01:25.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:01:25.945 [DEBUG] [Thread-196652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:01:25.945 [DEBUG] [Thread-196652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:01:25.993 [DEBUG] [Thread-196652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:01:25.993 [DEBUG] [Thread-196652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:01:26.002 [DEBUG] [Thread-196652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:01:26.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:01:26.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:01:26.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:01:26.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:01:26.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:01:26.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:01:26.039 [DEBUG] [Thread-196652] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:01:27.439 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:01:27.441 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:01:30.969 [DEBUG] [Thread-196654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:01:46.028 [DEBUG] [Thread-196655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:01:56.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:01:56.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:01:56.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:01:57.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 1, 15), 0.24007, 98.2227, 0.0, 8.57628, 11.2294, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:01:57.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:01:15
2026-04-12T22:01:57.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:01:57.906 [DEBUG] [Thread-196656] [transport.py] [_log()] starting thread (client mode): 0xb0f6c100
2026-04-12T22:01:57.906 [DEBUG] [Thread-196656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:01:57.927 [DEBUG] [Thread-196656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:01:57.927 [INFO] [Thread-196656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:01:57.930 [DEBUG] [Thread-196656] [transport.py] [_log()] client lang: <none>
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] server lang: <none>
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] kex follows: False
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] Compression: none
2026-04-12T22:01:57.931 [DEBUG] [Thread-196656] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:01:57.947 [DEBUG] [Thread-196656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:01:57.947 [DEBUG] [Thread-196656] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:01:57.948 [DEBUG] [Thread-196656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:01:57.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:01:57.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:01:57.949 [DEBUG] [Thread-196656] [transport.py] [_log()] userauth is OK
2026-04-12T22:01:57.950 [DEBUG] [Thread-196656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:01:57.950 [DEBUG] [Thread-196656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:01:57.950 [DEBUG] [Thread-196656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:01:57.950 [DEBUG] [Thread-196656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:01:57.971 [INFO] [Thread-196656] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:01:57.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:01:58.753 [DEBUG] [Thread-196656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:01:58.753 [DEBUG] [Thread-196656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:01:58.753 [DEBUG] [Thread-196656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:01:58.793 [DEBUG] [Thread-196656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:01:58.794 [DEBUG] [Thread-196656] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:01:58.797 [DEBUG] [Thread-196656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:01:58.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:01:58.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:01:58.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:01:58.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:01:58.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:01:58.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:01:58.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:01:58.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:01:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:01:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.834132 -999.00  +11.40   6.13     93  +10.40 1 1 1 3 1     0    0 1.46 14.66 ZNESW 6.1 6.1 213.9 8.2 12.3 -21.9 12.2 -20.8 12.0 -19.0 12.2 -20.9
2026-04-12T22:01:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:01:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:01:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.834132
2026-04-12T22:01:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:01:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:01:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:01:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:01:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T22:01:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:01:15', tmtdew=0.24007, humidity=98.2227, cloud=0.0, wind=8.57628, temperature=11.2294, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:01:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1510000000000007, 3.0177499999999995, nan, 2.3469999999999995, nan, nan, nan, nan, 2.5229999999999997, 2.1839999999999993, nan, 2.8379999999999983, 2.4697499999999986, nan, 3.0067500000000003, nan, 0.2090000000000014, 0.21075000000000088, 0.21450000000000102, 0.22599999999999998, 0.23050000000000104, 0.7155000000000014, 0.9635000000000007, 0.9437500000000005], zp_timestamp='2026-04-12T19:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:01:58.822 [DEBUG] [Thread-196656] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:01:58.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:01:58.926 [DEBUG] [Thread-196659] [transport.py] [_log()] starting thread (client mode): 0xae5b03d0
2026-04-12T22:01:58.926 [DEBUG] [Thread-196659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:01:58.941 [DEBUG] [Thread-196659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:01:58.941 [INFO] [Thread-196659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:01:58.950 [DEBUG] [Thread-196659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:01:58.950 [DEBUG] [Thread-196659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:01:58.950 [DEBUG] [Thread-196659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:01:58.950 [DEBUG] [Thread-196659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:58.950 [DEBUG] [Thread-196659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:01:58.950 [DEBUG] [Thread-196659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] client lang: <none>
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] server lang: <none>
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] kex follows: False
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:01:58.951 [DEBUG] [Thread-196659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:01:58.952 [DEBUG] [Thread-196659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:01:58.952 [DEBUG] [Thread-196659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:01:58.952 [DEBUG] [Thread-196659] [transport.py] [_log()] Compression: none
2026-04-12T22:01:58.952 [DEBUG] [Thread-196659] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:01:59.009 [DEBUG] [Thread-196659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:01:59.010 [DEBUG] [Thread-196659] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:01:59.010 [DEBUG] [Thread-196659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:01:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:01:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:01:59.066 [DEBUG] [Thread-196659] [transport.py] [_log()] userauth is OK
2026-04-12T22:01:59.066 [DEBUG] [Thread-196659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:01:59.066 [DEBUG] [Thread-196659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:01:59.066 [DEBUG] [Thread-196659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:01:59.066 [DEBUG] [Thread-196659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:01:59.089 [INFO] [Thread-196659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:01:59.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:01:59.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:01:59.911 [DEBUG] [Thread-196659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:01:59.911 [DEBUG] [Thread-196659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:01:59.959 [DEBUG] [Thread-196659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:01:59.959 [DEBUG] [Thread-196659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:01:59.968 [DEBUG] [Thread-196659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:01:59.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:01:59.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:01:59.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:01:59.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:01:59.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:01:59.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:02:00.005 [DEBUG] [Thread-196659] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:02:01.062 [DEBUG] [Thread-196661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:02:14.567 [DEBUG] [Thread-196662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:02:16.126 [DEBUG] [Thread-196663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:02:27.656 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:02:27.657 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:02:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:02:30.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:02:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:02:31.167 [DEBUG] [Thread-196664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:02:31.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 1, 50), 0.38014, 97.4453, 0.0, 9.95256, 11.4589, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:02:31.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:01:50
2026-04-12T22:02:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:02:31.885 [DEBUG] [Thread-196665] [transport.py] [_log()] starting thread (client mode): 0xb0f6fc10
2026-04-12T22:02:31.886 [DEBUG] [Thread-196665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:02:31.907 [DEBUG] [Thread-196665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:02:31.908 [INFO] [Thread-196665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] client lang: <none>
2026-04-12T22:02:31.911 [DEBUG] [Thread-196665] [transport.py] [_log()] server lang: <none>
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] kex follows: False
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] Compression: none
2026-04-12T22:02:31.912 [DEBUG] [Thread-196665] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:02:31.936 [DEBUG] [Thread-196665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:02:31.937 [DEBUG] [Thread-196665] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:02:31.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:02:31.938 [DEBUG] [Thread-196665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:02:31.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:02:31.940 [DEBUG] [Thread-196665] [transport.py] [_log()] userauth is OK
2026-04-12T22:02:31.940 [DEBUG] [Thread-196665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:02:31.940 [DEBUG] [Thread-196665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:02:31.940 [DEBUG] [Thread-196665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:02:31.940 [DEBUG] [Thread-196665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:02:31.963 [INFO] [Thread-196665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:02:31.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:02:32.734 [DEBUG] [Thread-196665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:02:32.734 [DEBUG] [Thread-196665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:02:32.734 [DEBUG] [Thread-196665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:02:32.775 [DEBUG] [Thread-196665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:02:32.775 [DEBUG] [Thread-196665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:02:32.778 [DEBUG] [Thread-196665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:02:32.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:02:32.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:02:32.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:02:32.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:02:32.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:02:32.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:02:32.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.834480 -999.00  +11.40   5.27     93  +10.40 1 1 1 3 1     0    0 1.46 14.33 ZNESW 5.3 5.3 205.4 6.3 12.3 -21.8 12.2 -21.0 12.0 -18.8 12.2 -20.7
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.834480
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-12T22:02:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:01:50', tmtdew=0.38014, humidity=97.4453, cloud=0.0, wind=9.95256, temperature=11.4589, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:01:39.072', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.36625, 3.341, 3.0564999999999998, nan, nan, nan, nan, 2.7170000000000005, 1.3259999999999996, nan, 3.116999999999999, 2.3207499999999985, nan, nan, nan, 0.9984999999999999, 0.7737499999999997, 0.7105000000000006, 0.7830000000000004, 0.7410000000000014, 1.3040000000000012, 1.4760000000000009, 1.9957499999999992], zp_timestamp='2026-04-12T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:02:32.797 [DEBUG] [Thread-196665] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:02:32.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:02:32.878 [DEBUG] [Thread-196668] [transport.py] [_log()] starting thread (client mode): 0xae534eb0
2026-04-12T22:02:32.879 [DEBUG] [Thread-196668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:02:32.895 [DEBUG] [Thread-196668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:02:32.895 [INFO] [Thread-196668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:02:32.903 [DEBUG] [Thread-196668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:02:32.903 [DEBUG] [Thread-196668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:02:32.903 [DEBUG] [Thread-196668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:02:32.903 [DEBUG] [Thread-196668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:02:32.903 [DEBUG] [Thread-196668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] client lang: <none>
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] server lang: <none>
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] kex follows: False
2026-04-12T22:02:32.904 [DEBUG] [Thread-196668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:02:32.905 [DEBUG] [Thread-196668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:02:32.905 [DEBUG] [Thread-196668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:02:32.905 [DEBUG] [Thread-196668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:02:32.905 [DEBUG] [Thread-196668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:02:32.905 [DEBUG] [Thread-196668] [transport.py] [_log()] Compression: none
2026-04-12T22:02:32.905 [DEBUG] [Thread-196668] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:02:32.962 [DEBUG] [Thread-196668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:02:32.963 [DEBUG] [Thread-196668] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:02:32.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:02:32.965 [DEBUG] [Thread-196668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:02:32.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:02:33.022 [DEBUG] [Thread-196668] [transport.py] [_log()] userauth is OK
2026-04-12T22:02:33.023 [DEBUG] [Thread-196668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:02:33.023 [DEBUG] [Thread-196668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:02:33.023 [DEBUG] [Thread-196668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:02:33.023 [DEBUG] [Thread-196668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:02:33.042 [INFO] [Thread-196668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:02:33.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:02:33.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:02:33.908 [DEBUG] [Thread-196668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:02:33.908 [DEBUG] [Thread-196668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:02:33.956 [DEBUG] [Thread-196668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:02:33.956 [DEBUG] [Thread-196668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:02:33.966 [DEBUG] [Thread-196668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:02:33.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:02:33.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:02:33.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:02:33.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:02:33.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:02:33.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:02:34.003 [DEBUG] [Thread-196668] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:02:46.204 [DEBUG] [Thread-196670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:03:01.266 [DEBUG] [Thread-196671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:03:04.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:03:04.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:03:04.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
2026-04-12T22:03:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 2, 26), 0.24007, 98.2227, 0.0, 8.57628, 11.2294, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:03:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:02:26
2026-04-12T22:03:05.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:03:05.990 [DEBUG] [Thread-196672] [transport.py] [_log()] starting thread (client mode): 0xae5e6620
2026-04-12T22:03:05.990 [DEBUG] [Thread-196672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:03:06.011 [DEBUG] [Thread-196672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:03:06.012 [INFO] [Thread-196672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:03:06.015 [DEBUG] [Thread-196672] [transport.py] [_log()] client lang: <none>
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] server lang: <none>
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] kex follows: False
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] Compression: none
2026-04-12T22:03:06.016 [DEBUG] [Thread-196672] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:03:06.034 [DEBUG] [Thread-196672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:03:06.034 [DEBUG] [Thread-196672] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:03:06.035 [DEBUG] [Thread-196672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:03:06.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:03:06.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:03:06.037 [DEBUG] [Thread-196672] [transport.py] [_log()] userauth is OK
2026-04-12T22:03:06.038 [DEBUG] [Thread-196672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:03:06.038 [DEBUG] [Thread-196672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:03:06.038 [DEBUG] [Thread-196672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:03:06.038 [DEBUG] [Thread-196672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:03:06.062 [INFO] [Thread-196672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:03:06.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:03:06.859 [DEBUG] [Thread-196672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:03:06.860 [DEBUG] [Thread-196672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:03:06.860 [DEBUG] [Thread-196672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:03:06.901 [DEBUG] [Thread-196672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:03:06.901 [DEBUG] [Thread-196672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:03:06.905 [DEBUG] [Thread-196672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:03:06.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:03:06.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:03:06.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:03:06.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:03:06.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:03:06.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:03:06.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:03:06.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:03:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:03:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.834827 -999.00  +11.40   2.98     93  +10.40 1 2 1 3 1     0    0 1.45 14.18 .nEsW 3.0 3.0 240.4 6.9 12.3 -22.2 12.2 -20.6 11.9 -18.9 12.2 -20.7
2026-04-12T22:03:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:03:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:03:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.834827
2026-04-12T22:03:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:03:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:03:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:03:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:03:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:03:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:02:26', tmtdew=0.24007, humidity=98.2227, cloud=0.0, wind=8.57628, temperature=11.2294, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:02:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.36625, 3.341, 3.0564999999999998, nan, nan, nan, nan, 2.7170000000000005, 1.3259999999999996, nan, 3.116999999999999, 2.3207499999999985, nan, nan, nan, 0.9984999999999999, 0.7737499999999997, 0.7105000000000006, 0.7830000000000004, 0.7410000000000014, 1.3040000000000012, 1.4760000000000009, 1.9957499999999992], zp_timestamp='2026-04-12T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:03:06.934 [DEBUG] [Thread-196672] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:03:07.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:03:07.025 [DEBUG] [Thread-196675] [transport.py] [_log()] starting thread (client mode): 0xb0f6f520
2026-04-12T22:03:07.025 [DEBUG] [Thread-196675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:03:07.039 [DEBUG] [Thread-196675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:03:07.040 [INFO] [Thread-196675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:03:07.047 [DEBUG] [Thread-196675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:03:07.047 [DEBUG] [Thread-196675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] client lang: <none>
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] server lang: <none>
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] kex follows: False
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] Compression: none
2026-04-12T22:03:07.048 [DEBUG] [Thread-196675] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:03:07.104 [DEBUG] [Thread-196675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:03:07.105 [DEBUG] [Thread-196675] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:03:07.106 [DEBUG] [Thread-196675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:03:07.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:03:07.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:03:07.164 [DEBUG] [Thread-196675] [transport.py] [_log()] userauth is OK
2026-04-12T22:03:07.165 [DEBUG] [Thread-196675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:03:07.165 [DEBUG] [Thread-196675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:03:07.165 [DEBUG] [Thread-196675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:03:07.165 [DEBUG] [Thread-196675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:03:07.183 [INFO] [Thread-196675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:03:07.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:03:07.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:03:08.004 [DEBUG] [Thread-196675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:03:08.013 [DEBUG] [Thread-196675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:03:08.051 [DEBUG] [Thread-196675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:03:08.052 [DEBUG] [Thread-196675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:03:08.061 [DEBUG] [Thread-196675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:03:08.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:03:08.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:03:08.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:03:08.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:03:08.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:03:08.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:03:08.094 [DEBUG] [Thread-196675] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:03:14.619 [DEBUG] [Thread-196677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:03:16.303 [DEBUG] [Thread-196678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:03:27.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:03:27.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:03:31.365 [DEBUG] [Thread-196679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:03:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:03:38.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:03:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:03:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 3, 1), 0.23247, 98.2725, 0.0, 8.43516, 11.2792, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:03:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:03:01
2026-04-12T22:03:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:03:40.128 [DEBUG] [Thread-196680] [transport.py] [_log()] starting thread (client mode): 0xb0f41600
2026-04-12T22:03:40.129 [DEBUG] [Thread-196680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:03:40.148 [DEBUG] [Thread-196680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:03:40.148 [INFO] [Thread-196680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] client lang: <none>
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] server lang: <none>
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] kex follows: False
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] Compression: none
2026-04-12T22:03:40.151 [DEBUG] [Thread-196680] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:03:40.160 [DEBUG] [Thread-196680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:03:40.160 [DEBUG] [Thread-196680] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:03:40.161 [DEBUG] [Thread-196680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:03:40.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:03:40.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:03:40.162 [DEBUG] [Thread-196680] [transport.py] [_log()] userauth is OK
2026-04-12T22:03:40.163 [DEBUG] [Thread-196680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:03:40.163 [DEBUG] [Thread-196680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:03:40.163 [DEBUG] [Thread-196680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:03:40.163 [DEBUG] [Thread-196680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:03:40.184 [INFO] [Thread-196680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:03:40.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:03:40.950 [DEBUG] [Thread-196680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:03:40.950 [DEBUG] [Thread-196680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:03:40.950 [DEBUG] [Thread-196680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:03:40.991 [DEBUG] [Thread-196680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:03:40.991 [DEBUG] [Thread-196680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:03:40.994 [DEBUG] [Thread-196680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:03:41.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:03:41.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:03:41.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:03:41.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:03:41.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:03:41.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:03:41.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:03:41.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:03:41.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:03:41.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.835174 -999.00  +11.30   4.39     93  +10.40 1 2 1 3 1     0    0 1.41 12.65 .nEsW 4.4 4.4 205.1 7.5 12.3 -22.2 12.2 -21.2 11.9 -19.2 12.2 -21.1
2026-04-12T22:03:41.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:03:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:03:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.835174
2026-04-12T22:03:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:03:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:03:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:03:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:03:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:03:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:03:01', tmtdew=0.23247, humidity=98.2725, cloud=0.0, wind=8.43516, temperature=11.2792, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:02:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.36625, 3.341, 3.0564999999999998, nan, nan, nan, nan, 2.7170000000000005, 1.3259999999999996, nan, 3.116999999999999, 2.3207499999999985, nan, nan, nan, 0.9984999999999999, 0.7737499999999997, 0.7105000000000006, 0.7830000000000004, 0.7410000000000014, 1.3040000000000012, 1.4760000000000009, 1.9957499999999992], zp_timestamp='2026-04-12T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:03:41.021 [DEBUG] [Thread-196680] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:03:41.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:03:41.113 [DEBUG] [Thread-196683] [transport.py] [_log()] starting thread (client mode): 0xb0f6fdc0
2026-04-12T22:03:41.113 [DEBUG] [Thread-196683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:03:41.133 [DEBUG] [Thread-196683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:03:41.133 [INFO] [Thread-196683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:03:41.141 [DEBUG] [Thread-196683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:03:41.141 [DEBUG] [Thread-196683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:03:41.141 [DEBUG] [Thread-196683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:03:41.141 [DEBUG] [Thread-196683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] client lang: <none>
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] server lang: <none>
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] kex follows: False
2026-04-12T22:03:41.142 [DEBUG] [Thread-196683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:03:41.143 [DEBUG] [Thread-196683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:03:41.143 [DEBUG] [Thread-196683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:03:41.143 [DEBUG] [Thread-196683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:03:41.143 [DEBUG] [Thread-196683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:03:41.143 [DEBUG] [Thread-196683] [transport.py] [_log()] Compression: none
2026-04-12T22:03:41.143 [DEBUG] [Thread-196683] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:03:41.203 [DEBUG] [Thread-196683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:03:41.203 [DEBUG] [Thread-196683] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:03:41.204 [DEBUG] [Thread-196683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:03:41.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:03:41.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:03:41.259 [DEBUG] [Thread-196683] [transport.py] [_log()] userauth is OK
2026-04-12T22:03:41.260 [DEBUG] [Thread-196683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:03:41.260 [DEBUG] [Thread-196683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:03:41.260 [DEBUG] [Thread-196683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:03:41.260 [DEBUG] [Thread-196683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:03:41.279 [INFO] [Thread-196683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:03:41.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:03:42.094 [DEBUG] [Thread-196683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:03:42.094 [DEBUG] [Thread-196683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:03:42.142 [DEBUG] [Thread-196683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:03:42.142 [DEBUG] [Thread-196683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:03:42.152 [DEBUG] [Thread-196683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:03:42.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:03:42.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:03:42.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:03:42.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:03:42.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:03:42.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:03:42.189 [DEBUG] [Thread-196683] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:03:46.401 [DEBUG] [Thread-196685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:04:01.463 [DEBUG] [Thread-196686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:04:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:04:12.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:04:12.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:04:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 3, 37), 0.36992, 97.5119, 0.0, 10.1642, 11.4922, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:04:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:03:37
2026-04-12T22:04:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:04:14.043 [DEBUG] [Thread-196687] [transport.py] [_log()] starting thread (client mode): 0xb0f41150
2026-04-12T22:04:14.043 [DEBUG] [Thread-196687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:04:14.063 [DEBUG] [Thread-196687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:04:14.063 [INFO] [Thread-196687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:04:14.067 [DEBUG] [Thread-196687] [transport.py] [_log()] client lang: <none>
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] server lang: <none>
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] kex follows: False
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] Compression: none
2026-04-12T22:04:14.068 [DEBUG] [Thread-196687] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:04:14.086 [DEBUG] [Thread-196687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:04:14.087 [DEBUG] [Thread-196687] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:04:14.087 [DEBUG] [Thread-196687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:04:14.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:04:14.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:04:14.129 [DEBUG] [Thread-196687] [transport.py] [_log()] userauth is OK
2026-04-12T22:04:14.129 [DEBUG] [Thread-196687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:04:14.129 [DEBUG] [Thread-196687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:04:14.129 [DEBUG] [Thread-196687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:04:14.129 [DEBUG] [Thread-196687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:04:14.161 [INFO] [Thread-196687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:04:14.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:04:14.694 [DEBUG] [Thread-196689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:04:14.965 [DEBUG] [Thread-196687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:04:14.965 [DEBUG] [Thread-196687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:04:14.965 [DEBUG] [Thread-196687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:04:15.006 [DEBUG] [Thread-196687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:04:15.006 [DEBUG] [Thread-196687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:04:15.010 [DEBUG] [Thread-196687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:04:15.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:04:15.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:04:15.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:04:15.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:04:15.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:04:15.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:04:15.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:04:15.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:04:15.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:04:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.835868 -999.00  +11.30   5.49     93  +10.40 1 2 1 3 1     0    0 1.32 10.02 .NEsW 5.5 5.5 217.2 8.0 12.2 -21.8 12.2 -20.8 11.9 -19.1 12.2 -20.9
2026-04-12T22:04:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:04:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:04:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.835868
2026-04-12T22:04:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:04:15.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:04:15.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:04:15.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:04:15.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:04:15.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:03:37', tmtdew=0.36992, humidity=97.5119, cloud=0.0, wind=10.1642, temperature=11.4922, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:03:38.995', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.36625, 3.341, 3.0564999999999998, nan, nan, nan, nan, 2.7170000000000005, 1.3259999999999996, nan, 3.116999999999999, 2.3207499999999985, nan, nan, nan, 0.9984999999999999, 0.7737499999999997, 0.7105000000000006, 0.7830000000000004, 0.7410000000000014, 1.3040000000000012, 1.4760000000000009, 1.9957499999999992], zp_timestamp='2026-04-12T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:04:15.036 [DEBUG] [Thread-196687] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:04:15.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:04:16.497 [DEBUG] [Thread-196691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:04:28.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:04:28.065 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:04:31.551 [DEBUG] [Thread-196692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:04:46.587 [DEBUG] [Thread-196693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:05:01.631 [DEBUG] [Thread-196694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:05:14.752 [DEBUG] [Thread-196695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:05:16.666 [DEBUG] [Thread-196696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:05:28.271 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:05:28.273 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:05:31.707 [DEBUG] [Thread-196697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:05:46.746 [DEBUG] [Thread-196698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:01.783 [DEBUG] [Thread-196699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:14.816 [DEBUG] [Thread-196700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:16.818 [DEBUG] [Thread-196701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:27.199 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T22:06:28.476 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:28.477 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:31.855 [DEBUG] [Thread-196702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:46.890 [DEBUG] [Thread-196703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:06:57.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:06:57.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:06:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:06:58.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 6, 35), 0.36969, 97.5121, 0.0, 9.38808, 11.3928, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:06:58.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:06:35
2026-04-12T22:06:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:06:59.080 [DEBUG] [Thread-196704] [transport.py] [_log()] starting thread (client mode): 0xae509b70
2026-04-12T22:06:59.080 [DEBUG] [Thread-196704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:06:59.101 [DEBUG] [Thread-196704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:06:59.101 [INFO] [Thread-196704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:06:59.112 [DEBUG] [Thread-196704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] client lang: <none>
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] server lang: <none>
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] kex follows: False
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:06:59.113 [DEBUG] [Thread-196704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:06:59.114 [DEBUG] [Thread-196704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:06:59.114 [DEBUG] [Thread-196704] [transport.py] [_log()] Compression: none
2026-04-12T22:06:59.114 [DEBUG] [Thread-196704] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:06:59.132 [DEBUG] [Thread-196704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:06:59.132 [DEBUG] [Thread-196704] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:06:59.133 [DEBUG] [Thread-196704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:06:59.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:06:59.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:06:59.135 [DEBUG] [Thread-196704] [transport.py] [_log()] userauth is OK
2026-04-12T22:06:59.135 [DEBUG] [Thread-196704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:06:59.136 [DEBUG] [Thread-196704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:06:59.136 [DEBUG] [Thread-196704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:06:59.136 [DEBUG] [Thread-196704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:06:59.160 [INFO] [Thread-196704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:06:59.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:06:59.918 [DEBUG] [Thread-196704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:06:59.919 [DEBUG] [Thread-196704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:06:59.919 [DEBUG] [Thread-196704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:06:59.960 [DEBUG] [Thread-196704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:06:59.960 [DEBUG] [Thread-196704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:06:59.964 [DEBUG] [Thread-196704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:06:59.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:06:59.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:06:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:06:59.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:06:59.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:06:59.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:06:59.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:06:59.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:06:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:06:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.837604 -999.00  +11.30   5.30     94  +10.40 1 2 1 3 1     0    0 1.13 4.04 .NEsW 5.3 5.3 212.0 6.5 12.2 -22.2 12.2 -21.0 11.9 -19.1 12.2 -21.1
2026-04-12T22:06:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:06:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:06:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.837604
2026-04-12T22:06:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:06:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:06:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:06:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:06:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:06:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:06:35', tmtdew=0.36969, humidity=97.5121, cloud=0.0, wind=9.38808, temperature=11.3928, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:06:08.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:06:59.986 [DEBUG] [Thread-196704] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:07:00.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:07:00.082 [DEBUG] [Thread-196707] [transport.py] [_log()] starting thread (client mode): 0xb0f8f0d0
2026-04-12T22:07:00.083 [DEBUG] [Thread-196707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:07:00.103 [DEBUG] [Thread-196707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:07:00.103 [INFO] [Thread-196707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:07:00.111 [DEBUG] [Thread-196707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:07:00.112 [DEBUG] [Thread-196707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:07:00.112 [DEBUG] [Thread-196707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:07:00.112 [DEBUG] [Thread-196707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:07:00.112 [DEBUG] [Thread-196707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:07:00.112 [DEBUG] [Thread-196707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] client lang: <none>
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] server lang: <none>
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] kex follows: False
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] Compression: none
2026-04-12T22:07:00.113 [DEBUG] [Thread-196707] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:07:00.171 [DEBUG] [Thread-196707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:07:00.172 [DEBUG] [Thread-196707] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:07:00.173 [DEBUG] [Thread-196707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:07:00.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:07:00.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:07:00.231 [DEBUG] [Thread-196707] [transport.py] [_log()] userauth is OK
2026-04-12T22:07:00.231 [DEBUG] [Thread-196707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:07:00.231 [DEBUG] [Thread-196707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:07:00.231 [DEBUG] [Thread-196707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:07:00.231 [DEBUG] [Thread-196707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:07:00.250 [INFO] [Thread-196707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:07:00.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:07:00.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:07:01.062 [DEBUG] [Thread-196707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:07:01.062 [DEBUG] [Thread-196707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:07:01.110 [DEBUG] [Thread-196707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:07:01.110 [DEBUG] [Thread-196707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:07:01.118 [DEBUG] [Thread-196707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:07:01.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:07:01.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:07:01.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:07:01.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:07:01.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:07:01.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:07:01.166 [DEBUG] [Thread-196707] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:07:01.928 [DEBUG] [Thread-196709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:07:14.874 [DEBUG] [Thread-196710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:07:16.986 [DEBUG] [Thread-196711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:07:28.683 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:07:28.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:07:31.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:07:31.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:07:31.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:07:32.024 [DEBUG] [Thread-196712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:07:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 7, 10), 0.242455, 98.2063, 0.0, 8.52336, 11.1133, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:07:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:07:10
2026-04-12T22:07:32.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:07:33.048 [DEBUG] [Thread-196713] [transport.py] [_log()] starting thread (client mode): 0xb0f42170
2026-04-12T22:07:33.048 [DEBUG] [Thread-196713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:07:33.068 [DEBUG] [Thread-196713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:07:33.068 [INFO] [Thread-196713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] client lang: <none>
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] server lang: <none>
2026-04-12T22:07:33.071 [DEBUG] [Thread-196713] [transport.py] [_log()] kex follows: False
2026-04-12T22:07:33.072 [DEBUG] [Thread-196713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:07:33.072 [DEBUG] [Thread-196713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:07:33.072 [DEBUG] [Thread-196713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:07:33.072 [DEBUG] [Thread-196713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:07:33.072 [DEBUG] [Thread-196713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:07:33.072 [DEBUG] [Thread-196713] [transport.py] [_log()] Compression: none
2026-04-12T22:07:33.072 [DEBUG] [Thread-196713] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:07:33.088 [DEBUG] [Thread-196713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:07:33.088 [DEBUG] [Thread-196713] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:07:33.089 [DEBUG] [Thread-196713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:07:33.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:07:33.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:07:33.091 [DEBUG] [Thread-196713] [transport.py] [_log()] userauth is OK
2026-04-12T22:07:33.091 [DEBUG] [Thread-196713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:07:33.091 [DEBUG] [Thread-196713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:07:33.091 [DEBUG] [Thread-196713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:07:33.091 [DEBUG] [Thread-196713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:07:33.104 [INFO] [Thread-196713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:07:33.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:07:33.850 [DEBUG] [Thread-196713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:07:33.850 [DEBUG] [Thread-196713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:07:33.850 [DEBUG] [Thread-196713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:07:33.892 [DEBUG] [Thread-196713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:07:33.892 [DEBUG] [Thread-196713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:07:33.895 [DEBUG] [Thread-196713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:07:33.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:07:33.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:07:33.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:07:33.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:07:33.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:07:33.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:07:33.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:07:33.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:07:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:07:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.838299 -999.00  +11.30   5.47     94  +10.40 1 2 1 3 1     0    0 1.07 2.19 .nESW 5.5 5.5 217.4 6.4 12.2 -22.1 12.2 -21.1 11.9 -19.2 12.2 -21.1
2026-04-12T22:07:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:07:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:07:33.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.838299
2026-04-12T22:07:33.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:07:33.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:07:33.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:07:33.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:07:33.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:07:33.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:07:10', tmtdew=0.242455, humidity=98.2063, cloud=0.0, wind=8.52336, temperature=11.1133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:07:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:07:33.922 [DEBUG] [Thread-196713] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:07:34.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:07:34.017 [DEBUG] [Thread-196716] [transport.py] [_log()] starting thread (client mode): 0xb0f8c4c0
2026-04-12T22:07:34.017 [DEBUG] [Thread-196716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:07:34.031 [DEBUG] [Thread-196716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:07:34.031 [INFO] [Thread-196716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:07:34.039 [DEBUG] [Thread-196716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:07:34.039 [DEBUG] [Thread-196716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:07:34.039 [DEBUG] [Thread-196716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:07:34.039 [DEBUG] [Thread-196716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:07:34.039 [DEBUG] [Thread-196716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] client lang: <none>
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] server lang: <none>
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] kex follows: False
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:07:34.040 [DEBUG] [Thread-196716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:07:34.041 [DEBUG] [Thread-196716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:07:34.041 [DEBUG] [Thread-196716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:07:34.041 [DEBUG] [Thread-196716] [transport.py] [_log()] Compression: none
2026-04-12T22:07:34.041 [DEBUG] [Thread-196716] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:07:34.097 [DEBUG] [Thread-196716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:07:34.098 [DEBUG] [Thread-196716] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:07:34.098 [DEBUG] [Thread-196716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:07:34.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:07:34.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:07:34.154 [DEBUG] [Thread-196716] [transport.py] [_log()] userauth is OK
2026-04-12T22:07:34.154 [DEBUG] [Thread-196716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:07:34.154 [DEBUG] [Thread-196716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:07:34.154 [DEBUG] [Thread-196716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:07:34.154 [DEBUG] [Thread-196716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:07:34.171 [INFO] [Thread-196716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:07:34.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:07:34.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:07:35.015 [DEBUG] [Thread-196716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:07:35.015 [DEBUG] [Thread-196716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:07:35.063 [DEBUG] [Thread-196716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:07:35.063 [DEBUG] [Thread-196716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:07:35.073 [DEBUG] [Thread-196716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:07:35.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:07:35.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:07:35.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:07:35.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:07:35.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:07:35.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:07:35.109 [DEBUG] [Thread-196716] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:07:47.061 [DEBUG] [Thread-196718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:08:02.115 [DEBUG] [Thread-196719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:08:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:08:05.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:08:05.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:08:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 7, 45), 0.38491, 97.4127, 0.0, 10.4818, 11.3265, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:08:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:07:45
2026-04-12T22:08:06.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:08:06.903 [DEBUG] [Thread-196720] [transport.py] [_log()] starting thread (client mode): 0xb0f8f1c0
2026-04-12T22:08:06.903 [DEBUG] [Thread-196720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:08:06.920 [DEBUG] [Thread-196720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:08:06.920 [INFO] [Thread-196720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] client lang: <none>
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] server lang: <none>
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] kex follows: False
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:08:06.923 [DEBUG] [Thread-196720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:08:06.924 [DEBUG] [Thread-196720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:08:06.924 [DEBUG] [Thread-196720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:08:06.924 [DEBUG] [Thread-196720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:08:06.924 [DEBUG] [Thread-196720] [transport.py] [_log()] Compression: none
2026-04-12T22:08:06.924 [DEBUG] [Thread-196720] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:08:06.941 [DEBUG] [Thread-196720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:08:06.941 [DEBUG] [Thread-196720] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:08:06.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:08:06.942 [DEBUG] [Thread-196720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:08:06.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:08:06.944 [DEBUG] [Thread-196720] [transport.py] [_log()] userauth is OK
2026-04-12T22:08:06.944 [DEBUG] [Thread-196720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:08:06.944 [DEBUG] [Thread-196720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:08:06.944 [DEBUG] [Thread-196720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:08:06.945 [DEBUG] [Thread-196720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:08:06.980 [INFO] [Thread-196720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:08:06.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:08:07.788 [DEBUG] [Thread-196720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:08:07.788 [DEBUG] [Thread-196720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:08:07.788 [DEBUG] [Thread-196720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:08:07.829 [DEBUG] [Thread-196720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:08:07.829 [DEBUG] [Thread-196720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:08:07.832 [DEBUG] [Thread-196720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:08:07.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:08:07.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:08:07.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:08:07.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:08:07.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:08:07.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:08:07.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:08:07.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:08:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:08:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.838646 -999.00  +11.30   3.57     94  +10.40 1 2 1 3 1     0    0 1.05 1.07 .nESW 3.6 3.6 208.1 6.1 12.2 -22.2 12.2 -21.2 11.9 -19.3 12.1 -21.0
2026-04-12T22:08:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:08:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:08:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.838646
2026-04-12T22:08:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:08:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:08:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:08:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:08:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:08:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:07:45', tmtdew=0.38491, humidity=97.4127, cloud=0.0, wind=10.4818, temperature=11.3265, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:07:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:08:07.859 [DEBUG] [Thread-196720] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:08:07.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:08:07.958 [DEBUG] [Thread-196723] [transport.py] [_log()] starting thread (client mode): 0xae534ee0
2026-04-12T22:08:07.958 [DEBUG] [Thread-196723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:08:07.973 [DEBUG] [Thread-196723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:08:07.973 [INFO] [Thread-196723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:08:07.980 [DEBUG] [Thread-196723] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:08:07.980 [DEBUG] [Thread-196723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:08:07.980 [DEBUG] [Thread-196723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] client lang: <none>
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] server lang: <none>
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] kex follows: False
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:08:07.981 [DEBUG] [Thread-196723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:08:07.982 [DEBUG] [Thread-196723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:08:07.982 [DEBUG] [Thread-196723] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:08:07.982 [DEBUG] [Thread-196723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:08:07.982 [DEBUG] [Thread-196723] [transport.py] [_log()] Compression: none
2026-04-12T22:08:07.982 [DEBUG] [Thread-196723] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:08:08.042 [DEBUG] [Thread-196723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:08:08.043 [DEBUG] [Thread-196723] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:08:08.044 [DEBUG] [Thread-196723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:08:08.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:08:08.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:08:08.101 [DEBUG] [Thread-196723] [transport.py] [_log()] userauth is OK
2026-04-12T22:08:08.101 [DEBUG] [Thread-196723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:08:08.102 [DEBUG] [Thread-196723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:08:08.102 [DEBUG] [Thread-196723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:08:08.102 [DEBUG] [Thread-196723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:08:08.125 [INFO] [Thread-196723] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:08:08.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:08:08.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:08:08.939 [DEBUG] [Thread-196723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:08:08.939 [DEBUG] [Thread-196723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:08:08.990 [DEBUG] [Thread-196723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:08:08.990 [DEBUG] [Thread-196723] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:08:08.999 [DEBUG] [Thread-196723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:08:09.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:08:09.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:08:09.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:08:09.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:08:09.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:08:09.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:08:09.036 [DEBUG] [Thread-196723] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:08:14.935 [DEBUG] [Thread-196725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:08:17.155 [DEBUG] [Thread-196726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:08:28.888 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:08:28.890 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:08:32.205 [DEBUG] [Thread-196727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:08:39.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:08:39.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:08:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:08:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 8, 21), 0.237295, 98.2395, 0.0, 8.82324, 11.1467, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:08:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:08:21
2026-04-12T22:08:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:08:40.879 [DEBUG] [Thread-196728] [transport.py] [_log()] starting thread (client mode): 0xae50afe0
2026-04-12T22:08:40.880 [DEBUG] [Thread-196728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:08:40.892 [DEBUG] [Thread-196728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:08:40.893 [INFO] [Thread-196728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:08:40.895 [DEBUG] [Thread-196728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] client lang: <none>
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] server lang: <none>
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] kex follows: False
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] Compression: none
2026-04-12T22:08:40.896 [DEBUG] [Thread-196728] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:08:40.914 [DEBUG] [Thread-196728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:08:40.915 [DEBUG] [Thread-196728] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:08:40.915 [DEBUG] [Thread-196728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:08:40.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:08:40.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:08:40.917 [DEBUG] [Thread-196728] [transport.py] [_log()] userauth is OK
2026-04-12T22:08:40.917 [DEBUG] [Thread-196728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:08:40.917 [DEBUG] [Thread-196728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:08:40.917 [DEBUG] [Thread-196728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:08:40.918 [DEBUG] [Thread-196728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:08:40.943 [INFO] [Thread-196728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:08:40.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:08:41.725 [DEBUG] [Thread-196728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:08:41.725 [DEBUG] [Thread-196728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:08:41.726 [DEBUG] [Thread-196728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:08:41.766 [DEBUG] [Thread-196728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:08:41.766 [DEBUG] [Thread-196728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:08:41.769 [DEBUG] [Thread-196728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:08:41.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:08:41.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:08:41.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:08:41.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:08:41.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:08:41.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:08:41.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:08:41.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:08:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:08:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.838993 -999.00  +11.30   6.34     94  +10.40 1 2 1 3 1     0    0 1.01 0.18 .ne.. 6.3 6.3 223.1 8.6 12.2 -21.6 12.2 -20.8 11.8 -18.9 12.2 -20.8
2026-04-12T22:08:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:08:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:08:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.838993
2026-04-12T22:08:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:08:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:08:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:08:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:08:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:08:41.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:08:21', tmtdew=0.237295, humidity=98.2395, cloud=0.0, wind=8.82324, temperature=11.1467, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:08:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:08:41.797 [DEBUG] [Thread-196728] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:08:41.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:08:41.889 [DEBUG] [Thread-196731] [transport.py] [_log()] starting thread (client mode): 0xb0f41c90
2026-04-12T22:08:41.889 [DEBUG] [Thread-196731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:08:41.905 [DEBUG] [Thread-196731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:08:41.905 [INFO] [Thread-196731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:08:41.913 [DEBUG] [Thread-196731] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:08:41.913 [DEBUG] [Thread-196731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:08:41.913 [DEBUG] [Thread-196731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:08:41.913 [DEBUG] [Thread-196731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:41.913 [DEBUG] [Thread-196731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:08:41.913 [DEBUG] [Thread-196731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:41.913 [DEBUG] [Thread-196731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] client lang: <none>
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] server lang: <none>
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] kex follows: False
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] Compression: none
2026-04-12T22:08:41.914 [DEBUG] [Thread-196731] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:08:41.973 [DEBUG] [Thread-196731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:08:41.973 [DEBUG] [Thread-196731] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:08:41.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:08:41.974 [DEBUG] [Thread-196731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:08:41.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:08:42.029 [DEBUG] [Thread-196731] [transport.py] [_log()] userauth is OK
2026-04-12T22:08:42.029 [DEBUG] [Thread-196731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:08:42.029 [DEBUG] [Thread-196731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:08:42.029 [DEBUG] [Thread-196731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:08:42.029 [DEBUG] [Thread-196731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:08:42.048 [INFO] [Thread-196731] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:08:42.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:08:42.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:08:42.875 [DEBUG] [Thread-196731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:08:42.876 [DEBUG] [Thread-196731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:08:42.923 [DEBUG] [Thread-196731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:08:42.923 [DEBUG] [Thread-196731] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:08:42.932 [DEBUG] [Thread-196731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:08:42.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:08:42.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:08:42.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:08:42.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:08:42.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:08:42.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:08:42.967 [DEBUG] [Thread-196731] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:08:47.242 [DEBUG] [Thread-196733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:02.311 [DEBUG] [Thread-196734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:12.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:09:12.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:09:12.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:09:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 8, 56), 0.237325, 98.2395, 0.0, 8.75268, 11.1133, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:09:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:08:56
2026-04-12T22:09:14.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:09:14.865 [DEBUG] [Thread-196735] [transport.py] [_log()] starting thread (client mode): 0xb0f8d780
2026-04-12T22:09:14.865 [DEBUG] [Thread-196735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:09:14.882 [DEBUG] [Thread-196735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:09:14.882 [INFO] [Thread-196735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] client lang: <none>
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] server lang: <none>
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] kex follows: False
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] Compression: none
2026-04-12T22:09:14.885 [DEBUG] [Thread-196735] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:09:14.903 [DEBUG] [Thread-196735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:09:14.904 [DEBUG] [Thread-196735] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:09:14.904 [DEBUG] [Thread-196735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:09:14.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:09:14.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:09:14.906 [DEBUG] [Thread-196735] [transport.py] [_log()] userauth is OK
2026-04-12T22:09:14.906 [DEBUG] [Thread-196735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:09:14.906 [DEBUG] [Thread-196735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:09:14.906 [DEBUG] [Thread-196735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:09:14.906 [DEBUG] [Thread-196735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:09:14.942 [INFO] [Thread-196735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:09:14.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:09:15.001 [DEBUG] [Thread-196737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:15.697 [DEBUG] [Thread-196735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:09:15.698 [DEBUG] [Thread-196735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:09:15.699 [DEBUG] [Thread-196735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:09:15.738 [DEBUG] [Thread-196735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:09:15.738 [DEBUG] [Thread-196735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:09:15.742 [DEBUG] [Thread-196735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:09:15.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:09:15.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:09:15.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:09:15.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:09:15.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:09:15.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:09:15.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:09:15.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:09:15.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:09:15.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.839340 -999.00  +11.40   4.69     94  +10.40 1 2 1 3 1     0    0 0.98 -0.85 .NEsW 4.7 4.7 214.4 6.9 12.2 -18.2 12.2 -19.8 11.8 -16.4 12.2 -19.2
2026-04-12T22:09:15.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:09:15.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:09:15.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.839340
2026-04-12T22:09:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:09:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:09:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:09:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:09:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:09:15.771 [DEBUG] [Thread-196735] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:09:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:08:56', tmtdew=0.237325, humidity=98.2395, cloud=0.0, wind=8.75268, temperature=11.1133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:08:38.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:09:15.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:09:15.865 [DEBUG] [Thread-196739] [transport.py] [_log()] starting thread (client mode): 0xb0f42860
2026-04-12T22:09:15.865 [DEBUG] [Thread-196739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:09:15.879 [DEBUG] [Thread-196739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:09:15.880 [INFO] [Thread-196739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:09:15.887 [DEBUG] [Thread-196739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:09:15.888 [DEBUG] [Thread-196739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:09:15.888 [DEBUG] [Thread-196739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:09:15.888 [DEBUG] [Thread-196739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:15.888 [DEBUG] [Thread-196739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:15.888 [DEBUG] [Thread-196739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:15.888 [DEBUG] [Thread-196739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:15.888 [DEBUG] [Thread-196739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] client lang: <none>
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] server lang: <none>
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] kex follows: False
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] Compression: none
2026-04-12T22:09:15.889 [DEBUG] [Thread-196739] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:09:15.947 [DEBUG] [Thread-196739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:09:15.948 [DEBUG] [Thread-196739] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:09:15.948 [DEBUG] [Thread-196739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:09:15.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:09:15.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:09:16.004 [DEBUG] [Thread-196739] [transport.py] [_log()] userauth is OK
2026-04-12T22:09:16.004 [DEBUG] [Thread-196739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:09:16.004 [DEBUG] [Thread-196739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:09:16.004 [DEBUG] [Thread-196739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:09:16.004 [DEBUG] [Thread-196739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:09:16.023 [INFO] [Thread-196739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:09:16.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:09:16.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:09:16.852 [DEBUG] [Thread-196739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:09:16.853 [DEBUG] [Thread-196739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:09:16.902 [DEBUG] [Thread-196739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:09:16.902 [DEBUG] [Thread-196739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:09:16.911 [DEBUG] [Thread-196739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:09:16.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:09:16.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:09:16.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:09:16.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:09:16.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:09:16.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:09:16.949 [DEBUG] [Thread-196739] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:09:17.349 [DEBUG] [Thread-196741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:29.095 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:29.097 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:32.400 [DEBUG] [Thread-196742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:09:46.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:09:47.437 [DEBUG] [Thread-196743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:09:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 9, 31), 0.23736, 98.2395, 0.0, 9.63468, 11.1299, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:09:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:09:31
2026-04-12T22:09:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:09:48.803 [DEBUG] [Thread-196744] [transport.py] [_log()] starting thread (client mode): 0xb0f8f670
2026-04-12T22:09:48.804 [DEBUG] [Thread-196744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:09:48.824 [DEBUG] [Thread-196744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:09:48.824 [INFO] [Thread-196744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] client lang: <none>
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] server lang: <none>
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] kex follows: False
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] Compression: none
2026-04-12T22:09:48.827 [DEBUG] [Thread-196744] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:09:48.837 [DEBUG] [Thread-196744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:09:48.837 [DEBUG] [Thread-196744] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:09:48.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:09:48.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:09:48.838 [DEBUG] [Thread-196744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:09:48.838 [DEBUG] [Thread-196744] [transport.py] [_log()] userauth is OK
2026-04-12T22:09:48.838 [DEBUG] [Thread-196744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:09:48.838 [DEBUG] [Thread-196744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:09:48.838 [DEBUG] [Thread-196744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:09:48.838 [DEBUG] [Thread-196744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:09:48.852 [INFO] [Thread-196744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:09:48.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:09:49.667 [DEBUG] [Thread-196744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:09:49.667 [DEBUG] [Thread-196744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:09:49.668 [DEBUG] [Thread-196744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:09:49.708 [DEBUG] [Thread-196744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:09:49.708 [DEBUG] [Thread-196744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:09:49.711 [DEBUG] [Thread-196744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:09:49.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:09:49.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:09:49.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:09:49.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:09:49.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:09:49.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:09:49.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:09:49.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:09:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:09:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.839688 -999.00  +11.40   4.08     94  +10.40 1 2 1 3 1     0    0 0.97 -1.77 .NEsW 4.1 4.1 203.8 6.9 12.2 -20.5 12.1 -17.2 11.9 -16.8 12.2 -17.7
2026-04-12T22:09:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:09:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:09:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.839688
2026-04-12T22:09:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:09:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:09:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:09:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:09:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:09:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:09:31', tmtdew=0.23736, humidity=98.2395, cloud=0.0, wind=9.63468, temperature=11.1299, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:09:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:09:49.739 [DEBUG] [Thread-196744] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:09:49.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:09:49.832 [DEBUG] [Thread-196747] [transport.py] [_log()] starting thread (client mode): 0xae5e5ba0
2026-04-12T22:09:49.832 [DEBUG] [Thread-196747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:09:49.847 [DEBUG] [Thread-196747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:09:49.848 [INFO] [Thread-196747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:09:49.856 [DEBUG] [Thread-196747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:09:49.856 [DEBUG] [Thread-196747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:09:49.856 [DEBUG] [Thread-196747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:09:49.856 [DEBUG] [Thread-196747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:49.856 [DEBUG] [Thread-196747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] client lang: <none>
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] server lang: <none>
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] kex follows: False
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:09:49.857 [DEBUG] [Thread-196747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:09:49.858 [DEBUG] [Thread-196747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:09:49.858 [DEBUG] [Thread-196747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:09:49.858 [DEBUG] [Thread-196747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:09:49.858 [DEBUG] [Thread-196747] [transport.py] [_log()] Compression: none
2026-04-12T22:09:49.858 [DEBUG] [Thread-196747] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:09:49.917 [DEBUG] [Thread-196747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:09:49.918 [DEBUG] [Thread-196747] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:09:49.919 [DEBUG] [Thread-196747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:09:49.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:09:49.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:09:49.979 [DEBUG] [Thread-196747] [transport.py] [_log()] userauth is OK
2026-04-12T22:09:49.979 [DEBUG] [Thread-196747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:09:49.979 [DEBUG] [Thread-196747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:09:49.980 [DEBUG] [Thread-196747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:09:49.980 [DEBUG] [Thread-196747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:09:50.005 [INFO] [Thread-196747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:09:50.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:09:50.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:09:50.821 [DEBUG] [Thread-196747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:09:50.821 [DEBUG] [Thread-196747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:09:50.870 [DEBUG] [Thread-196747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:09:50.870 [DEBUG] [Thread-196747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:09:50.879 [DEBUG] [Thread-196747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:09:50.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:09: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')
2026-04-12T22:09:50.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:09:50.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:09:50.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:09:50.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:09:50.922 [DEBUG] [Thread-196747] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:10:02.474 [DEBUG] [Thread-196749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:10:15.057 [DEBUG] [Thread-196750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:10:17.526 [DEBUG] [Thread-196751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:10:20.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:10:20.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:10:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:10:22.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 10, 7), 0.234765, 98.2561, 0.0, 9.45828, 11.1133, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:10:22.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:10:07
2026-04-12T22:10:22.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:10:22.748 [DEBUG] [Thread-196752] [transport.py] [_log()] starting thread (client mode): 0xb0f6f880
2026-04-12T22:10:22.748 [DEBUG] [Thread-196752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:10:22.768 [DEBUG] [Thread-196752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:10:22.768 [INFO] [Thread-196752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:10:22.771 [DEBUG] [Thread-196752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] client lang: <none>
2026-04-12T22:10:22.772 [DEBUG] [Thread-196752] [transport.py] [_log()] server lang: <none>
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] kex follows: False
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] Compression: none
2026-04-12T22:10:22.773 [DEBUG] [Thread-196752] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:10:22.793 [DEBUG] [Thread-196752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:10:22.794 [DEBUG] [Thread-196752] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:10:22.795 [DEBUG] [Thread-196752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:10:22.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:10:22.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:10:22.798 [DEBUG] [Thread-196752] [transport.py] [_log()] userauth is OK
2026-04-12T22:10:22.798 [DEBUG] [Thread-196752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:10:22.798 [DEBUG] [Thread-196752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:10:22.798 [DEBUG] [Thread-196752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:10:22.798 [DEBUG] [Thread-196752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:10:22.834 [INFO] [Thread-196752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:10:22.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:10:23.477 [DEBUG] [Thread-196752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:10:23.477 [DEBUG] [Thread-196752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:10:23.478 [DEBUG] [Thread-196752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:10:23.519 [DEBUG] [Thread-196752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:10:23.519 [DEBUG] [Thread-196752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:10:23.522 [DEBUG] [Thread-196752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:10:23.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:10:23.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:10:23.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:10:23.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:10:23.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:10:23.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:10:23.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:10:23.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:10:23.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:10:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.840035 -999.00  +11.30   5.50     94  +10.40 1 2 1 3 1     0    0 0.92 -2.82 .NEsw 5.5 5.5 206.7 8.3 12.2 -22.2 12.2 -20.7 11.9 -19.1 12.1 -21.0
2026-04-12T22:10:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:10:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:10:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.840035
2026-04-12T22:10:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:10:23.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:10:23.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:10:23.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:10:23.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:10:23.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:10:07', tmtdew=0.234765, humidity=98.2561, cloud=0.0, wind=9.45828, temperature=11.1133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:09:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:10:23.548 [DEBUG] [Thread-196752] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:10:23.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:10:23.637 [DEBUG] [Thread-196755] [transport.py] [_log()] starting thread (client mode): 0xae50afe0
2026-04-12T22:10:23.637 [DEBUG] [Thread-196755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:10:23.652 [DEBUG] [Thread-196755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:10:23.652 [INFO] [Thread-196755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:10:23.659 [DEBUG] [Thread-196755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:10:23.659 [DEBUG] [Thread-196755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:10:23.659 [DEBUG] [Thread-196755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:10:23.659 [DEBUG] [Thread-196755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] client lang: <none>
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] server lang: <none>
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] kex follows: False
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:10:23.660 [DEBUG] [Thread-196755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:10:23.661 [DEBUG] [Thread-196755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:10:23.661 [DEBUG] [Thread-196755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:10:23.661 [DEBUG] [Thread-196755] [transport.py] [_log()] Compression: none
2026-04-12T22:10:23.661 [DEBUG] [Thread-196755] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:10:23.717 [DEBUG] [Thread-196755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:10:23.718 [DEBUG] [Thread-196755] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:10:23.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:10:23.718 [DEBUG] [Thread-196755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:10:23.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:10:23.778 [DEBUG] [Thread-196755] [transport.py] [_log()] userauth is OK
2026-04-12T22:10:23.778 [DEBUG] [Thread-196755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:10:23.778 [DEBUG] [Thread-196755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:10:23.779 [DEBUG] [Thread-196755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:10:23.779 [DEBUG] [Thread-196755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:10:23.801 [INFO] [Thread-196755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:10:23.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:10:23.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:10:24.622 [DEBUG] [Thread-196755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:10:24.623 [DEBUG] [Thread-196755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:10:24.670 [DEBUG] [Thread-196755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:10:24.670 [DEBUG] [Thread-196755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:10:24.679 [DEBUG] [Thread-196755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:10:24.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:10:24.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:10:24.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:10:24.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:10:24.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:10:24.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:10:24.717 [DEBUG] [Thread-196755] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:10:29.302 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:10:29.303 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:10:32.560 [DEBUG] [Thread-196757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:10:47.615 [DEBUG] [Thread-196758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:10:54.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:10:54.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:10:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:10:55.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 10, 42), 0.37963, 97.4459, 0.0, 11.7871, 11.2603, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:10:55.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:10:42
2026-04-12T22:10:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:10:56.472 [DEBUG] [Thread-196759] [transport.py] [_log()] starting thread (client mode): 0xae509540
2026-04-12T22:10:56.472 [DEBUG] [Thread-196759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:10:56.492 [DEBUG] [Thread-196759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:10:56.492 [INFO] [Thread-196759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:10:56.495 [DEBUG] [Thread-196759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:10:56.495 [DEBUG] [Thread-196759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:10:56.495 [DEBUG] [Thread-196759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:10:56.495 [DEBUG] [Thread-196759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:56.495 [DEBUG] [Thread-196759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:56.495 [DEBUG] [Thread-196759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] client lang: <none>
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] server lang: <none>
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] kex follows: False
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] Compression: none
2026-04-12T22:10:56.496 [DEBUG] [Thread-196759] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:10:56.514 [DEBUG] [Thread-196759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:10:56.514 [DEBUG] [Thread-196759] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:10:56.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:10:56.516 [DEBUG] [Thread-196759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:10:56.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:10:56.518 [DEBUG] [Thread-196759] [transport.py] [_log()] userauth is OK
2026-04-12T22:10:56.518 [DEBUG] [Thread-196759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:10:56.518 [DEBUG] [Thread-196759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:10:56.518 [DEBUG] [Thread-196759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:10:56.518 [DEBUG] [Thread-196759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:10:56.541 [INFO] [Thread-196759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:10:56.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:10:57.151 [DEBUG] [Thread-196759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:10:57.151 [DEBUG] [Thread-196759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:10:57.151 [DEBUG] [Thread-196759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:10:57.192 [DEBUG] [Thread-196759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:10:57.192 [DEBUG] [Thread-196759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:10:57.195 [DEBUG] [Thread-196759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:10:57.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:10:57.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:10:57.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:10:57.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:10:57.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:10:57.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:10:57.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:10:57.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:10:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:10:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.840729 -999.00  +11.30   3.16     94  +10.40 1 2 1 3 1     0    0 0.88 -4.24 ..esw 3.2 3.2 180.2 6.7 12.2 -22.2 12.2 -21.1 11.8 -19.3 12.2 -21.1
2026-04-12T22:10:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:10:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:10:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.840729
2026-04-12T22:10:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:10:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:10:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:10:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:10:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:10:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:10:42', tmtdew=0.37963, humidity=97.4459, cloud=0.0, wind=11.7871, temperature=11.2603, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:10:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1042500000000004, nan, nan, nan, nan, nan, nan, 3.0285, 2.8804999999999996, nan, 1.9559999999999986, nan, nan, nan, nan, 1.7424999999999997, 1.7287499999999998, 1.6725000000000003, 1.5385000000000009, 1.2705000000000002, 2.198500000000001, nan, nan], zp_timestamp='2026-04-12T20:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:10:57.221 [DEBUG] [Thread-196759] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:10:57.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:10:57.319 [DEBUG] [Thread-196762] [transport.py] [_log()] starting thread (client mode): 0xae50a3b0
2026-04-12T22:10:57.319 [DEBUG] [Thread-196762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:10:57.334 [DEBUG] [Thread-196762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:10:57.334 [INFO] [Thread-196762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:10:57.343 [DEBUG] [Thread-196762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] client lang: <none>
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] server lang: <none>
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] kex follows: False
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] Compression: none
2026-04-12T22:10:57.344 [DEBUG] [Thread-196762] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:10:57.405 [DEBUG] [Thread-196762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:10:57.405 [DEBUG] [Thread-196762] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:10:57.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:10:57.407 [DEBUG] [Thread-196762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:10:57.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:10:57.462 [DEBUG] [Thread-196762] [transport.py] [_log()] userauth is OK
2026-04-12T22:10:57.462 [DEBUG] [Thread-196762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:10:57.462 [DEBUG] [Thread-196762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:10:57.462 [DEBUG] [Thread-196762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:10:57.462 [DEBUG] [Thread-196762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:10:57.481 [INFO] [Thread-196762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:10:57.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:10:57.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:10:58.289 [DEBUG] [Thread-196762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:10:58.289 [DEBUG] [Thread-196762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:10:58.337 [DEBUG] [Thread-196762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:10:58.337 [DEBUG] [Thread-196762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:10:58.347 [DEBUG] [Thread-196762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:10:58.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:10:58.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:10:58.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:10:58.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:10:58.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:10:58.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:10:58.386 [DEBUG] [Thread-196762] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:11:02.651 [DEBUG] [Thread-196764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:11:15.115 [DEBUG] [Thread-196765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:11:17.692 [DEBUG] [Thread-196766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:11:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:11:28.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:11:28.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:11:29.507 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:11:29.508 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:11:29.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 11, 17), 0.232235, 98.2727, 0.0, 8.541, 11.0799, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:11:29.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:11:17
2026-04-12T22:11:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:11:30.209 [DEBUG] [Thread-196767] [transport.py] [_log()] starting thread (client mode): 0xb0f8fc10
2026-04-12T22:11:30.209 [DEBUG] [Thread-196767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:11:30.229 [DEBUG] [Thread-196767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:11:30.229 [INFO] [Thread-196767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] client lang: <none>
2026-04-12T22:11:30.233 [DEBUG] [Thread-196767] [transport.py] [_log()] server lang: <none>
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] kex follows: False
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] Compression: none
2026-04-12T22:11:30.234 [DEBUG] [Thread-196767] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:11:30.254 [DEBUG] [Thread-196767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:11:30.255 [DEBUG] [Thread-196767] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:11:30.255 [DEBUG] [Thread-196767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:11:30.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:11:30.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:11:30.257 [DEBUG] [Thread-196767] [transport.py] [_log()] userauth is OK
2026-04-12T22:11:30.258 [DEBUG] [Thread-196767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:11:30.258 [DEBUG] [Thread-196767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:11:30.258 [DEBUG] [Thread-196767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:11:30.258 [DEBUG] [Thread-196767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:11:30.281 [INFO] [Thread-196767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:11:30.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:11:30.922 [DEBUG] [Thread-196767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:11:30.922 [DEBUG] [Thread-196767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:11:30.922 [DEBUG] [Thread-196767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:11:30.963 [DEBUG] [Thread-196767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:11:30.963 [DEBUG] [Thread-196767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:11:30.966 [DEBUG] [Thread-196767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:11:30.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:11:30.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:11:30.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:11:30.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:11:30.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:11:30.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:11:30.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:11:30.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:11:30.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:11:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.841077 -999.00  +11.30   3.25     93  +10.30 1 2 1 3 1     0    0 0.86 -4.77 ..esw 3.2 3.2 207.0 7.0 12.2 -22.2 12.1 -21.1 11.8 -19.2 12.2 -21.1
2026-04-12T22:11:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:11:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:11:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.841077
2026-04-12T22:11:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:11:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:11:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:11:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:11:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:11:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:11:17', tmtdew=0.232235, humidity=98.2727, cloud=0.0, wind=8.541, temperature=11.0799, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:11:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:11:30.991 [DEBUG] [Thread-196767] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:11:31.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:11:31.095 [DEBUG] [Thread-196770] [transport.py] [_log()] starting thread (client mode): 0xae5e4fa0
2026-04-12T22:11:31.095 [DEBUG] [Thread-196770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:11:31.111 [DEBUG] [Thread-196770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:11:31.111 [INFO] [Thread-196770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:11:31.119 [DEBUG] [Thread-196770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:11:31.119 [DEBUG] [Thread-196770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:11:31.119 [DEBUG] [Thread-196770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:11:31.119 [DEBUG] [Thread-196770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:11:31.119 [DEBUG] [Thread-196770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] client lang: <none>
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] server lang: <none>
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] kex follows: False
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] Compression: none
2026-04-12T22:11:31.120 [DEBUG] [Thread-196770] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:11:31.181 [DEBUG] [Thread-196770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:11:31.182 [DEBUG] [Thread-196770] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:11:31.182 [DEBUG] [Thread-196770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:11:31.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:11:31.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:11:31.236 [DEBUG] [Thread-196770] [transport.py] [_log()] userauth is OK
2026-04-12T22:11:31.237 [DEBUG] [Thread-196770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:11:31.237 [DEBUG] [Thread-196770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:11:31.237 [DEBUG] [Thread-196770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:11:31.237 [DEBUG] [Thread-196770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:11:31.260 [INFO] [Thread-196770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:11:31.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:11:31.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:11:32.093 [DEBUG] [Thread-196770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:11:32.094 [DEBUG] [Thread-196770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:11:32.142 [DEBUG] [Thread-196770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:11:32.142 [DEBUG] [Thread-196770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:11:32.151 [DEBUG] [Thread-196770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:11:32.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:11:32.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:11:32.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:11:32.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:11:32.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:11:32.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:11:32.188 [DEBUG] [Thread-196770] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:11:32.726 [DEBUG] [Thread-196772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:11:47.780 [DEBUG] [Thread-196773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:12:02.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:12:02.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:12:02.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:12:02.817 [DEBUG] [Thread-196774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:12:03.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 11, 53), 0.37464, 97.4791, 0.0, 11.6813, 11.3266, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:12:03.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:11:53
2026-04-12T22:12:03.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:12:04.040 [DEBUG] [Thread-196775] [transport.py] [_log()] starting thread (client mode): 0xae509810
2026-04-12T22:12:04.040 [DEBUG] [Thread-196775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:12:04.060 [DEBUG] [Thread-196775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:12:04.060 [INFO] [Thread-196775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:12:04.063 [DEBUG] [Thread-196775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:12:04.063 [DEBUG] [Thread-196775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:12:04.063 [DEBUG] [Thread-196775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:12:04.063 [DEBUG] [Thread-196775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] client lang: <none>
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] server lang: <none>
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] kex follows: False
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] Compression: none
2026-04-12T22:12:04.064 [DEBUG] [Thread-196775] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:12:04.082 [DEBUG] [Thread-196775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:12:04.082 [DEBUG] [Thread-196775] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:12:04.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:12:04.083 [DEBUG] [Thread-196775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:12:04.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:12:04.085 [DEBUG] [Thread-196775] [transport.py] [_log()] userauth is OK
2026-04-12T22:12:04.085 [DEBUG] [Thread-196775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:12:04.085 [DEBUG] [Thread-196775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:12:04.086 [DEBUG] [Thread-196775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:12:04.086 [DEBUG] [Thread-196775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:12:04.121 [INFO] [Thread-196775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:12:04.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:12:04.753 [DEBUG] [Thread-196775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:12:04.754 [DEBUG] [Thread-196775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:12:04.754 [DEBUG] [Thread-196775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:12:04.795 [DEBUG] [Thread-196775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:12:04.795 [DEBUG] [Thread-196775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:12:04.799 [DEBUG] [Thread-196775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:12:04.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:12:04.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:12:04.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:12:04.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:12:04.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:12:04.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:12:04.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:12:04.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:12:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:12:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.841424 -999.00  +11.30   3.74     93  +10.30 1 2 1 3 1     0    0 0.86 -5.07 .nE.. 3.7 3.7 198.7 6.9 12.2 -22.3 12.1 -21.1 11.9 -19.3 12.1 -21.1
2026-04-12T22:12:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:12:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:12:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.841424
2026-04-12T22:12:04.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:12:04.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:12:04.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:12:04.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:12:04.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:12:04.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:11:53', tmtdew=0.37464, humidity=97.4791, cloud=0.0, wind=11.6813, temperature=11.3266, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:11:39.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:12:04.826 [DEBUG] [Thread-196775] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:12:04.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:12:04.922 [DEBUG] [Thread-196778] [transport.py] [_log()] starting thread (client mode): 0xae5e7b20
2026-04-12T22:12:04.922 [DEBUG] [Thread-196778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:12:04.938 [DEBUG] [Thread-196778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:12:04.938 [INFO] [Thread-196778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:12:04.947 [DEBUG] [Thread-196778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:12:04.947 [DEBUG] [Thread-196778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:12:04.947 [DEBUG] [Thread-196778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] client lang: <none>
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] server lang: <none>
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] kex follows: False
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] Compression: none
2026-04-12T22:12:04.948 [DEBUG] [Thread-196778] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:12:05.005 [DEBUG] [Thread-196778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:12:05.005 [DEBUG] [Thread-196778] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:12:05.006 [DEBUG] [Thread-196778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:12:05.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:12:05.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:12:05.066 [DEBUG] [Thread-196778] [transport.py] [_log()] userauth is OK
2026-04-12T22:12:05.067 [DEBUG] [Thread-196778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:12:05.067 [DEBUG] [Thread-196778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:12:05.067 [DEBUG] [Thread-196778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:12:05.067 [DEBUG] [Thread-196778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:12:05.086 [INFO] [Thread-196778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:12:05.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:12:05.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:12:05.915 [DEBUG] [Thread-196778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:12:05.915 [DEBUG] [Thread-196778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:12:05.963 [DEBUG] [Thread-196778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:12:05.964 [DEBUG] [Thread-196778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:12:05.973 [DEBUG] [Thread-196778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:12:05.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:12:05.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:12:05.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:12:06.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:12:06.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:12:06.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:12:06.009 [DEBUG] [Thread-196778] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:12:15.194 [DEBUG] [Thread-196780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:12:17.852 [DEBUG] [Thread-196781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:12:29.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:12:29.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:12:32.906 [DEBUG] [Thread-196782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:12:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:12:36.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:12:36.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:12:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 12, 28), 0.18732, 98.2396, 0.0, 8.52336, 11.0633, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:12:37.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:12:28
2026-04-12T22:12:37.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:12:37.839 [DEBUG] [Thread-196783] [transport.py] [_log()] starting thread (client mode): 0xae561c90
2026-04-12T22:12:37.839 [DEBUG] [Thread-196783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:12:37.859 [DEBUG] [Thread-196783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:12:37.859 [INFO] [Thread-196783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:12:37.862 [DEBUG] [Thread-196783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:12:37.862 [DEBUG] [Thread-196783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] client lang: <none>
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] server lang: <none>
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] kex follows: False
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] Compression: none
2026-04-12T22:12:37.863 [DEBUG] [Thread-196783] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:12:37.879 [DEBUG] [Thread-196783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:12:37.880 [DEBUG] [Thread-196783] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:12:37.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:12:37.880 [DEBUG] [Thread-196783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:12:37.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:12:37.882 [DEBUG] [Thread-196783] [transport.py] [_log()] userauth is OK
2026-04-12T22:12:37.882 [DEBUG] [Thread-196783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:12:37.882 [DEBUG] [Thread-196783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:12:37.882 [DEBUG] [Thread-196783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:12:37.882 [DEBUG] [Thread-196783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:12:37.895 [INFO] [Thread-196783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:12:37.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:12:38.520 [DEBUG] [Thread-196783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:12:38.520 [DEBUG] [Thread-196783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:12:38.521 [DEBUG] [Thread-196783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:12:38.562 [DEBUG] [Thread-196783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:12:38.562 [DEBUG] [Thread-196783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:12:38.565 [DEBUG] [Thread-196783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:12:38.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:12:38.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:12:38.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:12:38.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:12:38.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:12:38.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:12:38.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:12:38.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:12:38.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:12:38.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.841771 -999.00  +11.30   5.77     93  +10.30 1 2 1 3 1     0    0 0.83 -5.44 .NE.w 5.8 5.8 200.0 7.2 12.2 -22.3 12.1 -21.2 11.8 -19.2 12.1 -21.3
2026-04-12T22:12:38.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:12:38.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:12:38.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.841771
2026-04-12T22:12:38.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:12:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:12:38.593 [DEBUG] [Thread-196783] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:12:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:12:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:12:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:12:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:12:28', tmtdew=0.18732, humidity=98.2396, cloud=0.0, wind=8.52336, temperature=11.0633, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:12:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:12:38.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:12:38.703 [DEBUG] [Thread-196786] [transport.py] [_log()] starting thread (client mode): 0xb0f8f0d0
2026-04-12T22:12:38.703 [DEBUG] [Thread-196786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:12:38.718 [DEBUG] [Thread-196786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:12:38.718 [INFO] [Thread-196786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] client lang: <none>
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] server lang: <none>
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] kex follows: False
2026-04-12T22:12:38.726 [DEBUG] [Thread-196786] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:12:38.727 [DEBUG] [Thread-196786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:12:38.727 [DEBUG] [Thread-196786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:12:38.727 [DEBUG] [Thread-196786] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:12:38.727 [DEBUG] [Thread-196786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:12:38.727 [DEBUG] [Thread-196786] [transport.py] [_log()] Compression: none
2026-04-12T22:12:38.727 [DEBUG] [Thread-196786] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:12:38.784 [DEBUG] [Thread-196786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:12:38.784 [DEBUG] [Thread-196786] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:12:38.785 [DEBUG] [Thread-196786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:12:38.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:12:38.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:12:38.844 [DEBUG] [Thread-196786] [transport.py] [_log()] userauth is OK
2026-04-12T22:12:38.845 [DEBUG] [Thread-196786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:12:38.845 [DEBUG] [Thread-196786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:12:38.845 [DEBUG] [Thread-196786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:12:38.845 [DEBUG] [Thread-196786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:12:38.871 [INFO] [Thread-196786] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:12:38.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:12:38.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:12:39.691 [DEBUG] [Thread-196786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:12:39.692 [DEBUG] [Thread-196786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:12:39.741 [DEBUG] [Thread-196786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:12:39.741 [DEBUG] [Thread-196786] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:12:39.750 [DEBUG] [Thread-196786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:12:39.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:12:39.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:12:39.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:12:39.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:12:39.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:12:39.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:12:39.790 [DEBUG] [Thread-196786] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:12:47.944 [DEBUG] [Thread-196788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:13:02.991 [DEBUG] [Thread-196789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:13:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:13:09.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:13:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:13:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 12, 28), 0.18732, 98.2396, 0.0, 8.52336, 11.0633, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:13:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:12:28
2026-04-12T22:13:11.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:13:11.672 [DEBUG] [Thread-196790] [transport.py] [_log()] starting thread (client mode): 0xb0f8d150
2026-04-12T22:13:11.672 [DEBUG] [Thread-196790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:13:11.685 [DEBUG] [Thread-196790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:13:11.685 [INFO] [Thread-196790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] client lang: <none>
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] server lang: <none>
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] kex follows: False
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] Compression: none
2026-04-12T22:13:11.689 [DEBUG] [Thread-196790] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:13:11.707 [DEBUG] [Thread-196790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:13:11.708 [DEBUG] [Thread-196790] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:13:11.708 [DEBUG] [Thread-196790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:13:11.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:13:11.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:13:11.711 [DEBUG] [Thread-196790] [transport.py] [_log()] userauth is OK
2026-04-12T22:13:11.711 [DEBUG] [Thread-196790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:13:11.711 [DEBUG] [Thread-196790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:13:11.711 [DEBUG] [Thread-196790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:13:11.711 [DEBUG] [Thread-196790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:13:11.736 [INFO] [Thread-196790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:13:11.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:13:12.424 [DEBUG] [Thread-196790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:13:12.424 [DEBUG] [Thread-196790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:13:12.425 [DEBUG] [Thread-196790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:13:12.465 [DEBUG] [Thread-196790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:13:12.465 [DEBUG] [Thread-196790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:13:12.468 [DEBUG] [Thread-196790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:13:12.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:13:12.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:13:12.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:13:12.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:13:12.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:13:12.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:13:12.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:13:12.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:13:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:13:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.842118 -999.00  +11.30   5.34     93  +10.30 1 2 1 3 1     0    0 0.86 -5.51 .NE.w 5.3 5.3 206.2 7.1 12.2 -22.3 12.1 -21.2 11.9 -19.4 12.1 -21.1
2026-04-12T22:13:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:13:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:13:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.842118
2026-04-12T22:13:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:13:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:13:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:13:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:13:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:13:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:12:28', tmtdew=0.18732, humidity=98.2396, cloud=0.0, wind=8.52336, temperature=11.0633, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:12:38.995', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:13:12.491 [DEBUG] [Thread-196790] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:13:12.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:13:12.589 [DEBUG] [Thread-196793] [transport.py] [_log()] starting thread (client mode): 0xb0f8d780
2026-04-12T22:13:12.589 [DEBUG] [Thread-196793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:13:12.604 [DEBUG] [Thread-196793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:13:12.604 [INFO] [Thread-196793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:13:12.612 [DEBUG] [Thread-196793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:13:12.612 [DEBUG] [Thread-196793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:13:12.612 [DEBUG] [Thread-196793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] client lang: <none>
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] server lang: <none>
2026-04-12T22:13:12.613 [DEBUG] [Thread-196793] [transport.py] [_log()] kex follows: False
2026-04-12T22:13:12.614 [DEBUG] [Thread-196793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:13:12.614 [DEBUG] [Thread-196793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:13:12.614 [DEBUG] [Thread-196793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:13:12.614 [DEBUG] [Thread-196793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:13:12.614 [DEBUG] [Thread-196793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:13:12.614 [DEBUG] [Thread-196793] [transport.py] [_log()] Compression: none
2026-04-12T22:13:12.614 [DEBUG] [Thread-196793] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:13:12.672 [DEBUG] [Thread-196793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:13:12.673 [DEBUG] [Thread-196793] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:13:12.674 [DEBUG] [Thread-196793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:13:12.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:13:12.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:13:12.732 [DEBUG] [Thread-196793] [transport.py] [_log()] userauth is OK
2026-04-12T22:13:12.732 [DEBUG] [Thread-196793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:13:12.732 [DEBUG] [Thread-196793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:13:12.733 [DEBUG] [Thread-196793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:13:12.733 [DEBUG] [Thread-196793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:13:12.751 [INFO] [Thread-196793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:13:12.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:13:12.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:13:13.555 [DEBUG] [Thread-196793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:13:13.555 [DEBUG] [Thread-196793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:13:13.603 [DEBUG] [Thread-196793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:13:13.603 [DEBUG] [Thread-196793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:13:13.612 [DEBUG] [Thread-196793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:13:13.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:13:13.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:13:13.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:13:13.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:13:13.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:13:13.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:13:13.649 [DEBUG] [Thread-196793] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:13:15.251 [DEBUG] [Thread-196795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:13:18.028 [DEBUG] [Thread-196796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:13:29.917 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:13:29.918 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:13:33.077 [DEBUG] [Thread-196797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:13:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:13:43.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:13:43.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:13:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 13, 4), 0.192335, 98.2064, 0.0, 9.14076, 11.0136, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:13:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:13:04
2026-04-12T22:13:45.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:13:45.519 [DEBUG] [Thread-196798] [transport.py] [_log()] starting thread (client mode): 0xae5b19c0
2026-04-12T22:13:45.519 [DEBUG] [Thread-196798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:13:45.539 [DEBUG] [Thread-196798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:13:45.539 [INFO] [Thread-196798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:13:45.543 [DEBUG] [Thread-196798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:13:45.543 [DEBUG] [Thread-196798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:13:45.543 [DEBUG] [Thread-196798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:13:45.543 [DEBUG] [Thread-196798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:45.543 [DEBUG] [Thread-196798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:45.543 [DEBUG] [Thread-196798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:45.543 [DEBUG] [Thread-196798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] client lang: <none>
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] server lang: <none>
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] kex follows: False
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] Compression: none
2026-04-12T22:13:45.544 [DEBUG] [Thread-196798] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:13:45.564 [DEBUG] [Thread-196798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:13:45.565 [DEBUG] [Thread-196798] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:13:45.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:13:45.566 [DEBUG] [Thread-196798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:13:45.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:13:45.608 [DEBUG] [Thread-196798] [transport.py] [_log()] userauth is OK
2026-04-12T22:13:45.609 [DEBUG] [Thread-196798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:13:45.609 [DEBUG] [Thread-196798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:13:45.609 [DEBUG] [Thread-196798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:13:45.609 [DEBUG] [Thread-196798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:13:45.640 [INFO] [Thread-196798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:13:45.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:13:46.270 [DEBUG] [Thread-196798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:13:46.270 [DEBUG] [Thread-196798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:13:46.270 [DEBUG] [Thread-196798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:13:46.311 [DEBUG] [Thread-196798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:13:46.311 [DEBUG] [Thread-196798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:13:46.315 [DEBUG] [Thread-196798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:13:46.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:13:46.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:13:46.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:13:46.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:13:46.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:13:46.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:13:46.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:13:46.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:13:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:13:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.842465 -999.00  +11.30   5.13     93  +10.30 1 2 1 3 1     0    0 0.83 -6.17 .NE.W 5.1 5.1 204.8 7.9 12.2 -22.3 12.1 -21.2 11.8 -19.2 12.1 -21.1
2026-04-12T22:13:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:13:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:13:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.842465
2026-04-12T22:13:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:13:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:13:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:13:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:13:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:13:46.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:13:04', tmtdew=0.192335, humidity=98.2064, cloud=0.0, wind=9.14076, temperature=11.0136, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:13:08.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:13:46.345 [DEBUG] [Thread-196798] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:13:46.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:13:46.439 [DEBUG] [Thread-196801] [transport.py] [_log()] starting thread (client mode): 0xae5b1d50
2026-04-12T22:13:46.439 [DEBUG] [Thread-196801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:13:46.453 [DEBUG] [Thread-196801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:13:46.453 [INFO] [Thread-196801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:13:46.461 [DEBUG] [Thread-196801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] client lang: <none>
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] server lang: <none>
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] kex follows: False
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:13:46.462 [DEBUG] [Thread-196801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:13:46.463 [DEBUG] [Thread-196801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:13:46.463 [DEBUG] [Thread-196801] [transport.py] [_log()] Compression: none
2026-04-12T22:13:46.463 [DEBUG] [Thread-196801] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:13:46.521 [DEBUG] [Thread-196801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:13:46.522 [DEBUG] [Thread-196801] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:13:46.522 [DEBUG] [Thread-196801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:13:46.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:13:46.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:13:46.579 [DEBUG] [Thread-196801] [transport.py] [_log()] userauth is OK
2026-04-12T22:13:46.579 [DEBUG] [Thread-196801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:13:46.580 [DEBUG] [Thread-196801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:13:46.580 [DEBUG] [Thread-196801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:13:46.580 [DEBUG] [Thread-196801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:13:46.598 [INFO] [Thread-196801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:13:46.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:13:46.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:13:47.423 [DEBUG] [Thread-196801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:13:47.424 [DEBUG] [Thread-196801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:13:47.474 [DEBUG] [Thread-196801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:13:47.474 [DEBUG] [Thread-196801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:13:47.488 [DEBUG] [Thread-196801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:13:47.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:13:47.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:13:47.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:13:47.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:13:47.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:13:47.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:13:47.536 [DEBUG] [Thread-196801] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:13:48.114 [DEBUG] [Thread-196803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:03.156 [DEBUG] [Thread-196804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:15.332 [DEBUG] [Thread-196805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:14:17.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:14:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:14:18.196 [DEBUG] [Thread-196806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:18.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 13, 39), 0.38445, 97.4128, 0.0, 10.9757, 11.1276, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:14:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:13:39
2026-04-12T22:14:19.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:14:19.439 [DEBUG] [Thread-196807] [transport.py] [_log()] starting thread (client mode): 0xae535cc0
2026-04-12T22:14:19.439 [DEBUG] [Thread-196807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:14:19.459 [DEBUG] [Thread-196807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:14:19.459 [INFO] [Thread-196807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:14:19.462 [DEBUG] [Thread-196807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] client lang: <none>
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] server lang: <none>
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] kex follows: False
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] Compression: none
2026-04-12T22:14:19.463 [DEBUG] [Thread-196807] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:14:19.487 [DEBUG] [Thread-196807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:14:19.488 [DEBUG] [Thread-196807] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:14:19.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:14:19.489 [DEBUG] [Thread-196807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:14:19.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:14:19.533 [DEBUG] [Thread-196807] [transport.py] [_log()] userauth is OK
2026-04-12T22:14:19.533 [DEBUG] [Thread-196807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:14:19.534 [DEBUG] [Thread-196807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:14:19.534 [DEBUG] [Thread-196807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:14:19.534 [DEBUG] [Thread-196807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:14:19.555 [INFO] [Thread-196807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:14:19.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:14:20.186 [DEBUG] [Thread-196807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:14:20.186 [DEBUG] [Thread-196807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:14:20.187 [DEBUG] [Thread-196807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:14:20.227 [DEBUG] [Thread-196807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:14:20.227 [DEBUG] [Thread-196807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:14:20.231 [DEBUG] [Thread-196807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:14:20.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:14:20.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:14:20.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:14:20.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:14:20.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:14:20.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:14:20.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:14:20.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:14:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:14:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.843159 -999.00  +11.30   3.82     93  +10.30 1 2 1 3 1     0    0 0.82 -6.60 ..... 3.8 3.8 206.8 7.4 12.2 -22.2 12.1 -21.2 11.8 -19.3 12.1 -21.3
2026-04-12T22:14:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:14:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:14:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.843159
2026-04-12T22:14:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:14:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:14:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:14:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:14:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:14:20.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:13:39', tmtdew=0.38445, humidity=97.4128, cloud=0.0, wind=10.9757, temperature=11.1276, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:14:08.938', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:14:20.261 [DEBUG] [Thread-196807] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:14:20.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:14:20.354 [DEBUG] [Thread-196810] [transport.py] [_log()] starting thread (client mode): 0xb0f411e0
2026-04-12T22:14:20.354 [DEBUG] [Thread-196810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:14:20.369 [DEBUG] [Thread-196810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:14:20.370 [INFO] [Thread-196810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:14:20.379 [DEBUG] [Thread-196810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:14:20.379 [DEBUG] [Thread-196810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:14:20.379 [DEBUG] [Thread-196810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:14:20.379 [DEBUG] [Thread-196810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] client lang: <none>
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] server lang: <none>
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] kex follows: False
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:14:20.380 [DEBUG] [Thread-196810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:14:20.381 [DEBUG] [Thread-196810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:14:20.381 [DEBUG] [Thread-196810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:14:20.381 [DEBUG] [Thread-196810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:14:20.381 [DEBUG] [Thread-196810] [transport.py] [_log()] Compression: none
2026-04-12T22:14:20.381 [DEBUG] [Thread-196810] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:14:20.442 [DEBUG] [Thread-196810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:14:20.442 [DEBUG] [Thread-196810] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:14:20.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:14:20.444 [DEBUG] [Thread-196810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:14:20.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:14:20.507 [DEBUG] [Thread-196810] [transport.py] [_log()] userauth is OK
2026-04-12T22:14:20.507 [DEBUG] [Thread-196810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:14:20.508 [DEBUG] [Thread-196810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:14:20.508 [DEBUG] [Thread-196810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:14:20.508 [DEBUG] [Thread-196810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:14:20.527 [INFO] [Thread-196810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:14:20.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:14:20.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:14:21.333 [DEBUG] [Thread-196810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:14:21.333 [DEBUG] [Thread-196810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:14:21.383 [DEBUG] [Thread-196810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:14:21.383 [DEBUG] [Thread-196810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:14:21.393 [DEBUG] [Thread-196810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:14:21.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:14:21.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:14:21.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:14:21.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:14:21.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:14:21.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:14:21.426 [DEBUG] [Thread-196810] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:14:30.126 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:30.127 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:33.233 [DEBUG] [Thread-196812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:48.286 [DEBUG] [Thread-196813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:14:51.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:14:51.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:14: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
2026-04-12T22:14:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 14, 15), 0.242335, 98.2064, 0.0, 8.43516, 11.0636, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:14:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:14:15
2026-04-12T22:14:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:14:53.327 [DEBUG] [Thread-196814] [transport.py] [_log()] starting thread (client mode): 0xb0f41a50
2026-04-12T22:14:53.327 [DEBUG] [Thread-196814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:14:53.348 [DEBUG] [Thread-196814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:14:53.349 [INFO] [Thread-196814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] client lang: <none>
2026-04-12T22:14:53.353 [DEBUG] [Thread-196814] [transport.py] [_log()] server lang: <none>
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] kex follows: False
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] Compression: none
2026-04-12T22:14:53.354 [DEBUG] [Thread-196814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:14:53.375 [DEBUG] [Thread-196814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:14:53.375 [DEBUG] [Thread-196814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:14:53.376 [DEBUG] [Thread-196814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:14:53.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:14:53.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:14:53.378 [DEBUG] [Thread-196814] [transport.py] [_log()] userauth is OK
2026-04-12T22:14:53.378 [DEBUG] [Thread-196814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:14:53.378 [DEBUG] [Thread-196814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:14:53.379 [DEBUG] [Thread-196814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:14:53.379 [DEBUG] [Thread-196814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:14:53.402 [INFO] [Thread-196814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:14:53.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:14:54.041 [DEBUG] [Thread-196814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:14:54.042 [DEBUG] [Thread-196814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:14:54.042 [DEBUG] [Thread-196814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:14:54.083 [DEBUG] [Thread-196814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:14:54.083 [DEBUG] [Thread-196814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:14:54.086 [DEBUG] [Thread-196814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:14:54.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:14:54.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:14:54.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:14:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:14:54.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:14:54.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:14:54.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:14:54.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:14:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:14:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.843507 -999.00  +11.30   2.97     93  +10.30 1 2 1 3 1     0    0 0.82 -6.44 .NEsW 3.0 3.0 248.0 6.0 12.2 -22.4 12.1 -21.1 11.8 -19.2 12.1 -21.2
2026-04-12T22:14:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:14:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:14:54.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.843507
2026-04-12T22:14:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:14:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:14:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:14:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:14:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:14:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:14:15', tmtdew=0.242335, humidity=98.2064, cloud=0.0, wind=8.43516, temperature=11.0636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:14:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:14:54.111 [DEBUG] [Thread-196814] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:14:54.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:14:54.216 [DEBUG] [Thread-196817] [transport.py] [_log()] starting thread (client mode): 0xb0f8c4c0
2026-04-12T22:14:54.217 [DEBUG] [Thread-196817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:14:54.230 [DEBUG] [Thread-196817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:14:54.231 [INFO] [Thread-196817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:14:54.238 [DEBUG] [Thread-196817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] client lang: <none>
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] server lang: <none>
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] kex follows: False
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:14:54.239 [DEBUG] [Thread-196817] [transport.py] [_log()] Compression: none
2026-04-12T22:14:54.240 [DEBUG] [Thread-196817] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:14:54.305 [DEBUG] [Thread-196817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:14:54.305 [DEBUG] [Thread-196817] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:14:54.306 [DEBUG] [Thread-196817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:14:54.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:14:54.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:14:54.362 [DEBUG] [Thread-196817] [transport.py] [_log()] userauth is OK
2026-04-12T22:14:54.362 [DEBUG] [Thread-196817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:14:54.362 [DEBUG] [Thread-196817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:14:54.362 [DEBUG] [Thread-196817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:14:54.363 [DEBUG] [Thread-196817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:14:54.382 [INFO] [Thread-196817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:14:54.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:14:54.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:14:55.218 [DEBUG] [Thread-196817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:14:55.219 [DEBUG] [Thread-196817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:14:55.266 [DEBUG] [Thread-196817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:14:55.266 [DEBUG] [Thread-196817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:14:55.275 [DEBUG] [Thread-196817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:14:55.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:14:55.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:14:55.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:14:55.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:14:55.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:14:55.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:14:55.312 [DEBUG] [Thread-196817] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:15:03.325 [DEBUG] [Thread-196819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:15:15.406 [DEBUG] [Thread-196820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:15:18.388 [DEBUG] [Thread-196821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:15:25.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:15:25.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:15:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:15:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 14, 50), 0.37443, 97.4792, 0.0, 11.4343, 11.2271, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:15:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:14:50
2026-04-12T22:15:26.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:15:27.065 [DEBUG] [Thread-196822] [transport.py] [_log()] starting thread (client mode): 0xae563a90
2026-04-12T22:15:27.066 [DEBUG] [Thread-196822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:15:27.080 [DEBUG] [Thread-196822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:15:27.080 [INFO] [Thread-196822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] client lang: <none>
2026-04-12T22:15:27.082 [DEBUG] [Thread-196822] [transport.py] [_log()] server lang: <none>
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] kex follows: False
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] Compression: none
2026-04-12T22:15:27.083 [DEBUG] [Thread-196822] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:15:27.098 [DEBUG] [Thread-196822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:15:27.099 [DEBUG] [Thread-196822] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:15:27.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:15:27.100 [DEBUG] [Thread-196822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:15:27.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:15:27.102 [DEBUG] [Thread-196822] [transport.py] [_log()] userauth is OK
2026-04-12T22:15:27.102 [DEBUG] [Thread-196822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:15:27.102 [DEBUG] [Thread-196822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:15:27.103 [DEBUG] [Thread-196822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:15:27.103 [DEBUG] [Thread-196822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:15:27.127 [INFO] [Thread-196822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:15:27.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:15:27.741 [DEBUG] [Thread-196822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:15:27.741 [DEBUG] [Thread-196822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:15:27.742 [DEBUG] [Thread-196822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:15:27.782 [DEBUG] [Thread-196822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:15:27.783 [DEBUG] [Thread-196822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:15:27.785 [DEBUG] [Thread-196822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:15:27.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:15:27.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:15:27.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:15:27.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:15:27.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:15:27.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:15:27.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:15:27.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.843854 -999.00  +11.30   3.98     93  +10.20 1 2 1 3 1     0    0 0.81 -6.30 .NEsW 4.0 4.0 202.1 6.5 12.2 -22.3 12.1 -21.2 11.8 -19.2 12.1 -21.2
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.843854
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:15:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:14:50', tmtdew=0.37443, humidity=97.4792, cloud=0.0, wind=11.4343, temperature=11.2271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:15:08.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:15:27.803 [DEBUG] [Thread-196822] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:15:27.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:15:27.895 [DEBUG] [Thread-196825] [transport.py] [_log()] starting thread (client mode): 0xae50a890
2026-04-12T22:15:27.895 [DEBUG] [Thread-196825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:15:27.909 [DEBUG] [Thread-196825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:15:27.909 [INFO] [Thread-196825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] client lang: <none>
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] server lang: <none>
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] kex follows: False
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] Compression: none
2026-04-12T22:15:27.917 [DEBUG] [Thread-196825] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:15:27.976 [DEBUG] [Thread-196825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:15:27.977 [DEBUG] [Thread-196825] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:15:27.977 [DEBUG] [Thread-196825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:15:27.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:15:27.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:15:28.033 [DEBUG] [Thread-196825] [transport.py] [_log()] userauth is OK
2026-04-12T22:15:28.033 [DEBUG] [Thread-196825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:15:28.033 [DEBUG] [Thread-196825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:15:28.033 [DEBUG] [Thread-196825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:15:28.034 [DEBUG] [Thread-196825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:15:28.053 [INFO] [Thread-196825] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:15:28.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:15:28.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:15:28.862 [DEBUG] [Thread-196825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:15:28.863 [DEBUG] [Thread-196825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:15:28.911 [DEBUG] [Thread-196825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:15:28.911 [DEBUG] [Thread-196825] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:15:28.920 [DEBUG] [Thread-196825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:15:28.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:15:28.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:15:28.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:15:28.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:15:28.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:15:28.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:15:28.953 [DEBUG] [Thread-196825] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:15:30.332 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:15:30.334 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:15:33.427 [DEBUG] [Thread-196827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:15:48.468 [DEBUG] [Thread-196828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:15:58.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:15:58.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:15:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:16:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 15, 26), 0.23445, 98.2562, 0.0, 8.69976, 10.9141, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:16:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:15:26
2026-04-12T22:16:00.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:16:00.795 [DEBUG] [Thread-196829] [transport.py] [_log()] starting thread (client mode): 0xae5b2b00
2026-04-12T22:16:00.795 [DEBUG] [Thread-196829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:16:00.807 [DEBUG] [Thread-196829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:16:00.807 [INFO] [Thread-196829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:16:00.810 [DEBUG] [Thread-196829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] client lang: <none>
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] server lang: <none>
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] kex follows: False
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] Compression: none
2026-04-12T22:16:00.811 [DEBUG] [Thread-196829] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:16:00.827 [DEBUG] [Thread-196829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:16:00.827 [DEBUG] [Thread-196829] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:16:00.827 [DEBUG] [Thread-196829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:16:00.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:16:00.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:16:00.829 [DEBUG] [Thread-196829] [transport.py] [_log()] userauth is OK
2026-04-12T22:16:00.829 [DEBUG] [Thread-196829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:16:00.829 [DEBUG] [Thread-196829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:16:00.829 [DEBUG] [Thread-196829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:16:00.829 [DEBUG] [Thread-196829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:16:00.847 [INFO] [Thread-196829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:16:00.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:16:01.427 [DEBUG] [Thread-196829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:16:01.427 [DEBUG] [Thread-196829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:16:01.427 [DEBUG] [Thread-196829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:16:01.467 [DEBUG] [Thread-196829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:16:01.467 [DEBUG] [Thread-196829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:16:01.469 [DEBUG] [Thread-196829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:16:01.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:16:01.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:16:01.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:16:01.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:16:01.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:16:01.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:16:01.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:16:01.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:16:01.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:16:01.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.844202 -999.00  +11.30   4.36     93  +10.20 1 2 1 3 1     0    0 0.81 -6.57 .NE.W 4.4 4.4 218.0 6.3 12.2 -22.4 12.1 -21.3 11.8 -19.5 12.1 -21.3
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.844202
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:16:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:15:26', tmtdew=0.23445, humidity=98.2562, cloud=0.0, wind=8.69976, temperature=10.9141, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:15:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:16:01.489 [DEBUG] [Thread-196829] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:16:01.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:16:01.582 [DEBUG] [Thread-196832] [transport.py] [_log()] starting thread (client mode): 0xae537250
2026-04-12T22:16:01.582 [DEBUG] [Thread-196832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:16:01.597 [DEBUG] [Thread-196832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:16:01.597 [INFO] [Thread-196832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:16:01.604 [DEBUG] [Thread-196832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:16:01.604 [DEBUG] [Thread-196832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:16:01.604 [DEBUG] [Thread-196832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:16:01.604 [DEBUG] [Thread-196832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:01.604 [DEBUG] [Thread-196832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:01.604 [DEBUG] [Thread-196832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] client lang: <none>
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] server lang: <none>
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] kex follows: False
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] Compression: none
2026-04-12T22:16:01.605 [DEBUG] [Thread-196832] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:16:01.663 [DEBUG] [Thread-196832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:16:01.664 [DEBUG] [Thread-196832] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:16:01.664 [DEBUG] [Thread-196832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:16:01.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:16:01.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:16:01.720 [DEBUG] [Thread-196832] [transport.py] [_log()] userauth is OK
2026-04-12T22:16:01.720 [DEBUG] [Thread-196832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:16:01.720 [DEBUG] [Thread-196832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:16:01.720 [DEBUG] [Thread-196832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:16:01.720 [DEBUG] [Thread-196832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:16:01.740 [INFO] [Thread-196832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:16:01.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:16:01.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:16:02.599 [DEBUG] [Thread-196832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:16:02.600 [DEBUG] [Thread-196832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:16:02.650 [DEBUG] [Thread-196832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:16:02.650 [DEBUG] [Thread-196832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:16:02.665 [DEBUG] [Thread-196832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:16:02.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:16:02.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:16:02.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:16:02.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:16:02.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:16:02.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:16:02.707 [DEBUG] [Thread-196832] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:16:03.506 [DEBUG] [Thread-196834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:16:15.484 [DEBUG] [Thread-196835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:16:18.559 [DEBUG] [Thread-196836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:16:30.538 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:16:30.540 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:16:32.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:16:32.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:16:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:16:33.594 [DEBUG] [Thread-196837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:16:33.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 16, 1), 0.239665, 98.223, 0.0, 8.8938, 10.9638, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:16:33.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:16:01
2026-04-12T22:16:34.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:16:34.480 [DEBUG] [Thread-196838] [transport.py] [_log()] starting thread (client mode): 0xae5b1390
2026-04-12T22:16:34.481 [DEBUG] [Thread-196838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:16:34.499 [DEBUG] [Thread-196838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:16:34.499 [INFO] [Thread-196838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:16:34.500 [DEBUG] [Thread-196838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:16:34.500 [DEBUG] [Thread-196838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:16:34.500 [DEBUG] [Thread-196838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:16:34.500 [DEBUG] [Thread-196838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:34.500 [DEBUG] [Thread-196838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:34.500 [DEBUG] [Thread-196838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] client lang: <none>
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] server lang: <none>
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] kex follows: False
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] Compression: none
2026-04-12T22:16:34.501 [DEBUG] [Thread-196838] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:16:34.518 [DEBUG] [Thread-196838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:16:34.519 [DEBUG] [Thread-196838] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:16:34.519 [DEBUG] [Thread-196838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:16:34.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:16:34.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:16:34.520 [DEBUG] [Thread-196838] [transport.py] [_log()] userauth is OK
2026-04-12T22:16:34.520 [DEBUG] [Thread-196838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:16:34.520 [DEBUG] [Thread-196838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:16:34.520 [DEBUG] [Thread-196838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:16:34.520 [DEBUG] [Thread-196838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:16:34.529 [INFO] [Thread-196838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:16:34.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:16:35.103 [DEBUG] [Thread-196838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:16:35.103 [DEBUG] [Thread-196838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:16:35.103 [DEBUG] [Thread-196838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:16:35.145 [DEBUG] [Thread-196838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:16:35.145 [DEBUG] [Thread-196838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:16:35.148 [DEBUG] [Thread-196838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:16:35.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:16:35.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:16:35.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:16:35.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:16:35.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:16:35.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:16:35.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:16:35.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:16:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:16:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.844549 -999.00  +11.30   3.22     93  +10.20 1 2 1 3 1     0    0 0.85 -5.93 .NE.W 3.2 3.2 204.1 6.0 12.2 -22.2 12.2 -21.3 11.8 -19.3 12.1 -21.2
2026-04-12T22:16:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:16:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:16:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.844549
2026-04-12T22:16:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:16:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:16:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:16:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:16:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:16:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:16:01', tmtdew=0.239665, humidity=98.223, cloud=0.0, wind=8.8938, temperature=10.9638, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:16:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:16:35.174 [DEBUG] [Thread-196838] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:16:35.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:16:35.277 [DEBUG] [Thread-196841] [transport.py] [_log()] starting thread (client mode): 0xae561a80
2026-04-12T22:16:35.277 [DEBUG] [Thread-196841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:16:35.296 [DEBUG] [Thread-196841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:16:35.296 [INFO] [Thread-196841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:16:35.304 [DEBUG] [Thread-196841] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:16:35.304 [DEBUG] [Thread-196841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:16:35.304 [DEBUG] [Thread-196841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:16:35.304 [DEBUG] [Thread-196841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] client lang: <none>
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] server lang: <none>
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] kex follows: False
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] Compression: none
2026-04-12T22:16:35.305 [DEBUG] [Thread-196841] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:16:35.364 [DEBUG] [Thread-196841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:16:35.364 [DEBUG] [Thread-196841] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:16:35.365 [DEBUG] [Thread-196841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:16:35.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:16:35.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:16:35.420 [DEBUG] [Thread-196841] [transport.py] [_log()] userauth is OK
2026-04-12T22:16:35.420 [DEBUG] [Thread-196841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:16:35.421 [DEBUG] [Thread-196841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:16:35.421 [DEBUG] [Thread-196841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:16:35.421 [DEBUG] [Thread-196841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:16:35.439 [INFO] [Thread-196841] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:16:35.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:16:35.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:16:36.291 [DEBUG] [Thread-196841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:16:36.292 [DEBUG] [Thread-196841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:16:36.344 [DEBUG] [Thread-196841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:16:36.344 [DEBUG] [Thread-196841] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:16:36.353 [DEBUG] [Thread-196841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:16:36.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:16:36.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:16:36.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:16:36.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:16:36.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:16:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:16:36.389 [DEBUG] [Thread-196841] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:16:48.628 [DEBUG] [Thread-196843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:17:03.677 [DEBUG] [Thread-196844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:17:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:17:06.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:17:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:17:07.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 16, 37), 0.38934, 97.3797, 0.0, 10.8346, 11.0281, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:17:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:16:37
2026-04-12T22:17:08.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:17:08.248 [DEBUG] [Thread-196845] [transport.py] [_log()] starting thread (client mode): 0xb0f8fc10
2026-04-12T22:17:08.248 [DEBUG] [Thread-196845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:17:08.268 [DEBUG] [Thread-196845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:17:08.268 [INFO] [Thread-196845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:17:08.271 [DEBUG] [Thread-196845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] client lang: <none>
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] server lang: <none>
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] kex follows: False
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] Compression: none
2026-04-12T22:17:08.272 [DEBUG] [Thread-196845] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:17:08.289 [DEBUG] [Thread-196845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:17:08.290 [DEBUG] [Thread-196845] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:17:08.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:17:08.291 [DEBUG] [Thread-196845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:17:08.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:17:08.293 [DEBUG] [Thread-196845] [transport.py] [_log()] userauth is OK
2026-04-12T22:17:08.293 [DEBUG] [Thread-196845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:17:08.294 [DEBUG] [Thread-196845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:17:08.294 [DEBUG] [Thread-196845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:17:08.294 [DEBUG] [Thread-196845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:17:08.312 [INFO] [Thread-196845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:17:08.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:17:08.882 [DEBUG] [Thread-196845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:17:08.883 [DEBUG] [Thread-196845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:17:08.883 [DEBUG] [Thread-196845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:17:08.924 [DEBUG] [Thread-196845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:17:08.924 [DEBUG] [Thread-196845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:17:08.926 [DEBUG] [Thread-196845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:17:08.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:17:08.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:17:08.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:17:08.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:17:08.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:17:08.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:17:08.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:17:08.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:17:08.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:17:08.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.844896 -999.00  +11.30   3.33     92  +10.20 1 2 1 3 1     0    0 0.82 -6.20 .NE.W 3.3 3.3 238.5 6.2 12.2 -22.3 12.1 -21.2 11.8 -19.4 12.1 -21.2
2026-04-12T22:17:08.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:17:08.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:17:08.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.844896
2026-04-12T22:17:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:17:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:17:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:17:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:17:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:17:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:16:37', tmtdew=0.38934, humidity=97.3797, cloud=0.0, wind=10.8346, temperature=11.0281, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:16:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1942499999999994, nan, nan, nan, nan, nan, nan, 2.8715, nan, nan, 1.855999999999998, nan, nan, nan, nan, 2.7835, nan, nan, nan, 1.9670000000000014, 2.6290000000000013, nan, nan], zp_timestamp='2026-04-12T20:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:17:08.952 [DEBUG] [Thread-196845] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:17:09.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:17:09.048 [DEBUG] [Thread-196848] [transport.py] [_log()] starting thread (client mode): 0xa7958f40
2026-04-12T22:17:09.048 [DEBUG] [Thread-196848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:17:09.063 [DEBUG] [Thread-196848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:17:09.063 [INFO] [Thread-196848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:17:09.080 [DEBUG] [Thread-196848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] client lang: <none>
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] server lang: <none>
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] kex follows: False
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] Compression: none
2026-04-12T22:17:09.081 [DEBUG] [Thread-196848] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:17:09.131 [DEBUG] [Thread-196848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:17:09.132 [DEBUG] [Thread-196848] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:17:09.132 [DEBUG] [Thread-196848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:17:09.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:17:09.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:17:09.188 [DEBUG] [Thread-196848] [transport.py] [_log()] userauth is OK
2026-04-12T22:17:09.188 [DEBUG] [Thread-196848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:17:09.188 [DEBUG] [Thread-196848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:17:09.188 [DEBUG] [Thread-196848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:17:09.188 [DEBUG] [Thread-196848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:17:09.208 [INFO] [Thread-196848] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:17:09.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:17:09.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:17:10.045 [DEBUG] [Thread-196848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:17:10.046 [DEBUG] [Thread-196848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:17:10.093 [DEBUG] [Thread-196848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:17:10.093 [DEBUG] [Thread-196848] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:17:10.102 [DEBUG] [Thread-196848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:17:10.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:17:10.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:17:10.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:17:10.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:17:10.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:17:10.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:17:10.138 [DEBUG] [Thread-196848] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:17:15.561 [DEBUG] [Thread-196850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:17:18.714 [DEBUG] [Thread-196851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:17:30.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:17:30.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:17:33.767 [DEBUG] [Thread-196852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:17:40.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:17:40.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:17:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:17:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 17, 12), 0.234555, 98.2562, 0.0, 9.17604, 11.0138, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:17:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:17:12
2026-04-12T22:17:41.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:17:42.027 [DEBUG] [Thread-196853] [transport.py] [_log()] starting thread (client mode): 0xae5b3160
2026-04-12T22:17:42.027 [DEBUG] [Thread-196853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:17:42.047 [DEBUG] [Thread-196853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:17:42.047 [INFO] [Thread-196853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] client lang: <none>
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] server lang: <none>
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] kex follows: False
2026-04-12T22:17:42.050 [DEBUG] [Thread-196853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:17:42.051 [DEBUG] [Thread-196853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:17:42.051 [DEBUG] [Thread-196853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:17:42.051 [DEBUG] [Thread-196853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:17:42.051 [DEBUG] [Thread-196853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:17:42.051 [DEBUG] [Thread-196853] [transport.py] [_log()] Compression: none
2026-04-12T22:17:42.051 [DEBUG] [Thread-196853] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:17:42.067 [DEBUG] [Thread-196853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:17:42.068 [DEBUG] [Thread-196853] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:17:42.068 [DEBUG] [Thread-196853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:17:42.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:17:42.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:17:42.113 [DEBUG] [Thread-196853] [transport.py] [_log()] userauth is OK
2026-04-12T22:17:42.113 [DEBUG] [Thread-196853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:17:42.113 [DEBUG] [Thread-196853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:17:42.113 [DEBUG] [Thread-196853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:17:42.113 [DEBUG] [Thread-196853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:17:42.133 [INFO] [Thread-196853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:17:42.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:17:42.838 [DEBUG] [Thread-196853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:17:42.839 [DEBUG] [Thread-196853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:17:42.839 [DEBUG] [Thread-196853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:17:42.880 [DEBUG] [Thread-196853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:17:42.881 [DEBUG] [Thread-196853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:17:42.884 [DEBUG] [Thread-196853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:17:42.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:17:42.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:17:42.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:17:42.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:17:42.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:17:42.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:17:42.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:17:42.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:17:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:17:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.844896 -999.00  +11.30   3.33     92  +10.20 1 2 1 3 1     0    0 0.82 -6.20 .NE.W 3.3 3.3 238.5 6.2 12.2 -22.3 12.1 -21.2 11.8 -19.4 12.1 -21.2
2026-04-12T22:17:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:17:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:17:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.844896
2026-04-12T22:17:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:17:42.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:17:42.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:17:42.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:17:42.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:17:42.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:17:12', tmtdew=0.234555, humidity=98.2562, cloud=0.0, wind=9.17604, temperature=11.0138, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:16:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9452499999999997, 3.098, nan, nan, nan, nan, nan, 2.8069999999999995, nan, nan, 2.5719999999999983, nan, nan, nan, nan, 2.7515, 2.2567500000000003, 1.939, 1.742, 1.762500000000001, 2.6770000000000014, nan, nan], zp_timestamp='2026-04-12T20:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:17:42.906 [DEBUG] [Thread-196853] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:17:42.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:17:43.000 [DEBUG] [Thread-196856] [transport.py] [_log()] starting thread (client mode): 0xae5e4a30
2026-04-12T22:17:43.000 [DEBUG] [Thread-196856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:17:43.017 [DEBUG] [Thread-196856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:17:43.018 [INFO] [Thread-196856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:17:43.025 [DEBUG] [Thread-196856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:17:43.025 [DEBUG] [Thread-196856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:17:43.025 [DEBUG] [Thread-196856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] client lang: <none>
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] server lang: <none>
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] kex follows: False
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] Compression: none
2026-04-12T22:17:43.026 [DEBUG] [Thread-196856] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:17:43.082 [DEBUG] [Thread-196856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:17:43.083 [DEBUG] [Thread-196856] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:17:43.083 [DEBUG] [Thread-196856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:17:43.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:17:43.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:17:43.139 [DEBUG] [Thread-196856] [transport.py] [_log()] userauth is OK
2026-04-12T22:17:43.139 [DEBUG] [Thread-196856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:17:43.139 [DEBUG] [Thread-196856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:17:43.139 [DEBUG] [Thread-196856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:17:43.139 [DEBUG] [Thread-196856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:17:43.163 [INFO] [Thread-196856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:17:43.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:17:43.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:17:43.988 [DEBUG] [Thread-196856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:17:43.988 [DEBUG] [Thread-196856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:17:44.036 [DEBUG] [Thread-196856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:17:44.036 [DEBUG] [Thread-196856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:17:44.045 [DEBUG] [Thread-196856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:17:44.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:17:44.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:17:44.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:17:44.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:17:44.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:17:44.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:17:44.081 [DEBUG] [Thread-196856] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:17:48.805 [DEBUG] [Thread-196858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:03.867 [DEBUG] [Thread-196859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:14.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:18:14.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:18:14.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:18:15.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 17, 48), 0.36917, 97.5124, 0.0, 11.3638, 11.1608, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:18:15.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:17:48
2026-04-12T22:18:15.638 [DEBUG] [Thread-196860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:15.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:18:15.898 [DEBUG] [Thread-196861] [transport.py] [_log()] starting thread (client mode): 0xae534520
2026-04-12T22:18:15.899 [DEBUG] [Thread-196861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:18:15.910 [DEBUG] [Thread-196861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:18:15.910 [INFO] [Thread-196861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:18:15.914 [DEBUG] [Thread-196861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:18:15.914 [DEBUG] [Thread-196861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] client lang: <none>
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] server lang: <none>
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] kex follows: False
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:18:15.915 [DEBUG] [Thread-196861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:18:15.916 [DEBUG] [Thread-196861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:18:15.916 [DEBUG] [Thread-196861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:18:15.916 [DEBUG] [Thread-196861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:18:15.916 [DEBUG] [Thread-196861] [transport.py] [_log()] Compression: none
2026-04-12T22:18:15.916 [DEBUG] [Thread-196861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:18:15.936 [DEBUG] [Thread-196861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:18:15.936 [DEBUG] [Thread-196861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:18:15.937 [DEBUG] [Thread-196861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:18:15.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:18:15.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:18:15.980 [DEBUG] [Thread-196861] [transport.py] [_log()] userauth is OK
2026-04-12T22:18:15.980 [DEBUG] [Thread-196861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:18:15.980 [DEBUG] [Thread-196861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:18:15.980 [DEBUG] [Thread-196861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:18:15.980 [DEBUG] [Thread-196861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:18:16.009 [INFO] [Thread-196861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:18:16.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:18:16.765 [DEBUG] [Thread-196861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:18:16.766 [DEBUG] [Thread-196861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:18:16.766 [DEBUG] [Thread-196861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:18:16.807 [DEBUG] [Thread-196861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:18:16.807 [DEBUG] [Thread-196861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:18:16.811 [DEBUG] [Thread-196861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:18:16.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:18:16.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:18:16.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:18:16.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:18:16.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:18:16.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:18:16.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:18:16.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:18:16.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:18:16.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.845590 -999.00  +11.30   4.00     92  +10.20 1 2 1 3 1     0    0 0.85 -5.66 .NEsW 4.0 4.0 222.9 5.2 12.2 -22.4 12.1 -21.2 11.8 -19.3 12.1 -21.2
2026-04-12T22:18:16.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:18:16.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:18:16.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.845590
2026-04-12T22:18:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:18:16.843 [DEBUG] [Thread-196861] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:18:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:18:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:18:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:18:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:18:16.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:17:48', tmtdew=0.36917, humidity=97.5124, cloud=0.0, wind=11.3638, temperature=11.1608, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:17:38.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9452499999999997, 3.098, nan, nan, nan, nan, nan, 2.8069999999999995, nan, nan, 2.5719999999999983, nan, nan, nan, nan, 2.7515, 2.2567500000000003, 1.939, 1.742, 1.762500000000001, 2.6770000000000014, nan, nan], zp_timestamp='2026-04-12T20:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:18:16.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:18:16.941 [DEBUG] [Thread-196864] [transport.py] [_log()] starting thread (client mode): 0xae535690
2026-04-12T22:18:16.941 [DEBUG] [Thread-196864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:18:16.958 [DEBUG] [Thread-196864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:18:16.958 [INFO] [Thread-196864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] client lang: <none>
2026-04-12T22:18:16.968 [DEBUG] [Thread-196864] [transport.py] [_log()] server lang: <none>
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] kex follows: False
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] Compression: none
2026-04-12T22:18:16.969 [DEBUG] [Thread-196864] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:18:17.026 [DEBUG] [Thread-196864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:18:17.027 [DEBUG] [Thread-196864] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:18:17.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:18:17.037 [DEBUG] [Thread-196864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:18:17.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:18:17.082 [DEBUG] [Thread-196864] [transport.py] [_log()] userauth is OK
2026-04-12T22:18:17.082 [DEBUG] [Thread-196864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:18:17.082 [DEBUG] [Thread-196864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:18:17.083 [DEBUG] [Thread-196864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:18:17.083 [DEBUG] [Thread-196864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:18:17.102 [INFO] [Thread-196864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:18:17.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:18:17.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:18:17.951 [DEBUG] [Thread-196864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:18:17.951 [DEBUG] [Thread-196864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:18:18.000 [DEBUG] [Thread-196864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:18:18.001 [DEBUG] [Thread-196864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:18:18.010 [DEBUG] [Thread-196864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:18:18.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:18:18.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:18:18.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:18:18.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:18:18.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:18:18.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:18:18.043 [DEBUG] [Thread-196864] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:18:18.906 [DEBUG] [Thread-196866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:30.951 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:30.953 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:33.957 [DEBUG] [Thread-196867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:48.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:18:48.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:18: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
2026-04-12T22:18:48.992 [DEBUG] [Thread-196868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:18:49.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 18, 23), 0.23956, 98.223, 0.0, 8.82324, 10.9641, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:18:49.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:18:23
2026-04-12T22:18:49.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:18:49.878 [DEBUG] [Thread-196869] [transport.py] [_log()] starting thread (client mode): 0xae534760
2026-04-12T22:18:49.878 [DEBUG] [Thread-196869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:18:49.897 [DEBUG] [Thread-196869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:18:49.897 [INFO] [Thread-196869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] client lang: <none>
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] server lang: <none>
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] kex follows: False
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] Compression: none
2026-04-12T22:18:49.899 [DEBUG] [Thread-196869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:18:49.910 [DEBUG] [Thread-196869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:18:49.910 [DEBUG] [Thread-196869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:18:49.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:18:49.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:18:49.912 [DEBUG] [Thread-196869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:18:49.912 [DEBUG] [Thread-196869] [transport.py] [_log()] userauth is OK
2026-04-12T22:18:49.912 [DEBUG] [Thread-196869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:18:49.912 [DEBUG] [Thread-196869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:18:49.912 [DEBUG] [Thread-196869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:18:49.912 [DEBUG] [Thread-196869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:18:49.930 [INFO] [Thread-196869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:18:49.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:18:50.726 [DEBUG] [Thread-196869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:18:50.726 [DEBUG] [Thread-196869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:18:50.726 [DEBUG] [Thread-196869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:18:50.767 [DEBUG] [Thread-196869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:18:50.767 [DEBUG] [Thread-196869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:18:50.770 [DEBUG] [Thread-196869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:18:50.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:18:50.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:18:50.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:18:50.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:18:50.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:18:50.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:18:50.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:18:50.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:18:50.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:18:50.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.845938 -999.00  +11.30   5.74     92  +10.20 1 2 1 3 1     0    0 0.86 -5.38 .NE.W 5.7 5.7 210.6 6.3 12.2 -22.3 12.1 -21.2 11.8 -19.4 12.1 -21.2
2026-04-12T22:18:50.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:18:50.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:18:50.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.845938
2026-04-12T22:18:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:18:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:18:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:18:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:18:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:18:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:18:23', tmtdew=0.23956, humidity=98.223, cloud=0.0, wind=8.82324, temperature=10.9641, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:18:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9452499999999997, 3.098, nan, nan, nan, nan, nan, 2.8069999999999995, nan, nan, 2.5719999999999983, nan, nan, nan, nan, 2.7515, 2.2567500000000003, 1.939, 1.742, 1.762500000000001, 2.6770000000000014, nan, nan], zp_timestamp='2026-04-12T20:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:18:50.793 [DEBUG] [Thread-196869] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:18:50.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:18:50.888 [DEBUG] [Thread-196872] [transport.py] [_log()] starting thread (client mode): 0xa795ae00
2026-04-12T22:18:50.888 [DEBUG] [Thread-196872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:18:50.903 [DEBUG] [Thread-196872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:18:50.903 [INFO] [Thread-196872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:18:50.911 [DEBUG] [Thread-196872] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:18:50.912 [DEBUG] [Thread-196872] [transport.py] [_log()] client lang: <none>
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] server lang: <none>
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] kex follows: False
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:18:50.913 [DEBUG] [Thread-196872] [transport.py] [_log()] Compression: none
2026-04-12T22:18:50.914 [DEBUG] [Thread-196872] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:18:50.970 [DEBUG] [Thread-196872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:18:50.970 [DEBUG] [Thread-196872] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:18:50.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:18:50.971 [DEBUG] [Thread-196872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:18:50.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:18:51.027 [DEBUG] [Thread-196872] [transport.py] [_log()] userauth is OK
2026-04-12T22:18:51.027 [DEBUG] [Thread-196872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:18:51.027 [DEBUG] [Thread-196872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:18:51.027 [DEBUG] [Thread-196872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:18:51.027 [DEBUG] [Thread-196872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:18:51.045 [INFO] [Thread-196872] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:18:51.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:18:51.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:18:51.858 [DEBUG] [Thread-196872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:18:51.858 [DEBUG] [Thread-196872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:18:51.906 [DEBUG] [Thread-196872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:18:51.906 [DEBUG] [Thread-196872] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:18:51.915 [DEBUG] [Thread-196872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:18:51.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:18:51.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:18:51.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:18:51.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:18:51.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:18:51.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:18:51.952 [DEBUG] [Thread-196872] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:19:04.026 [DEBUG] [Thread-196874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:19:15.709 [DEBUG] [Thread-196875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:19:19.079 [DEBUG] [Thread-196876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:19:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:19:21.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:19:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:19:23.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 18, 59), 0.23704, 98.2396, 0.0, 9.37008, 10.9807, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:19:23.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:18:59
2026-04-12T22:19:23.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:19:23.791 [DEBUG] [Thread-196877] [transport.py] [_log()] starting thread (client mode): 0xa79592d0
2026-04-12T22:19:23.792 [DEBUG] [Thread-196877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:19:23.813 [DEBUG] [Thread-196877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:19:23.813 [INFO] [Thread-196877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:19:23.816 [DEBUG] [Thread-196877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:19:23.816 [DEBUG] [Thread-196877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:19:23.816 [DEBUG] [Thread-196877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] client lang: <none>
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] server lang: <none>
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] kex follows: False
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:19:23.817 [DEBUG] [Thread-196877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:19:23.818 [DEBUG] [Thread-196877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:19:23.818 [DEBUG] [Thread-196877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:19:23.818 [DEBUG] [Thread-196877] [transport.py] [_log()] Compression: none
2026-04-12T22:19:23.818 [DEBUG] [Thread-196877] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:19:23.837 [DEBUG] [Thread-196877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:19:23.837 [DEBUG] [Thread-196877] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:19:23.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:19:23.838 [DEBUG] [Thread-196877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:19:23.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:19:23.841 [DEBUG] [Thread-196877] [transport.py] [_log()] userauth is OK
2026-04-12T22:19:23.841 [DEBUG] [Thread-196877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:19:23.841 [DEBUG] [Thread-196877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:19:23.841 [DEBUG] [Thread-196877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:19:23.841 [DEBUG] [Thread-196877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:19:23.863 [INFO] [Thread-196877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:19:23.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:19:24.643 [DEBUG] [Thread-196877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:19:24.643 [DEBUG] [Thread-196877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:19:24.643 [DEBUG] [Thread-196877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:19:24.684 [DEBUG] [Thread-196877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:19:24.684 [DEBUG] [Thread-196877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:19:24.688 [DEBUG] [Thread-196877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:19:24.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:19:24.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:19:24.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:19:24.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:19:24.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:19:24.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:19:24.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:19:24.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:19:24.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:19:24.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.846285 -999.00  +11.30   4.56     92  +10.20 1 2 1 3 1     0    0 0.87 -5.01 .nE.w 4.6 4.6 207.8 6.2 12.2 -22.4 12.1 -21.2 11.8 -19.3 12.1 -21.2
2026-04-12T22:19:24.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:19:24.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:19:24.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.846285
2026-04-12T22:19:24.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:19:24.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:19:24.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:19:24.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:19:24.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:19:24.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:18:59', tmtdew=0.23704, humidity=98.2396, cloud=0.0, wind=9.37008, temperature=10.9807, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:18:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9452499999999997, 3.098, nan, nan, nan, nan, nan, 2.8069999999999995, nan, nan, 2.5719999999999983, nan, nan, nan, nan, 2.7515, 2.2567500000000003, 1.939, 1.742, 1.762500000000001, 2.6770000000000014, nan, nan], zp_timestamp='2026-04-12T20:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:19:24.717 [DEBUG] [Thread-196877] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:19:24.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:19:24.810 [DEBUG] [Thread-196880] [transport.py] [_log()] starting thread (client mode): 0xa795aa10
2026-04-12T22:19:24.810 [DEBUG] [Thread-196880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:19:24.825 [DEBUG] [Thread-196880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:19:24.825 [INFO] [Thread-196880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:19:24.833 [DEBUG] [Thread-196880] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:19:24.834 [DEBUG] [Thread-196880] [transport.py] [_log()] client lang: <none>
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] server lang: <none>
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] kex follows: False
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] Compression: none
2026-04-12T22:19:24.835 [DEBUG] [Thread-196880] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:19:24.893 [DEBUG] [Thread-196880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:19:24.894 [DEBUG] [Thread-196880] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:19:24.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:19:24.895 [DEBUG] [Thread-196880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:19:24.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:19:24.949 [DEBUG] [Thread-196880] [transport.py] [_log()] userauth is OK
2026-04-12T22:19:24.949 [DEBUG] [Thread-196880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:19:24.950 [DEBUG] [Thread-196880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:19:24.950 [DEBUG] [Thread-196880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:19:24.950 [DEBUG] [Thread-196880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:19:24.968 [INFO] [Thread-196880] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:19:24.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:19:24.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:19:25.780 [DEBUG] [Thread-196880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:19:25.780 [DEBUG] [Thread-196880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:19:25.828 [DEBUG] [Thread-196880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:19:25.828 [DEBUG] [Thread-196880] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:19:25.838 [DEBUG] [Thread-196880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:19:25.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:19:25.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:19:25.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:19:25.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:19:25.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:19:25.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:19:25.875 [DEBUG] [Thread-196880] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:19:31.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:19:31.164 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:19:34.116 [DEBUG] [Thread-196882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:19:49.174 [DEBUG] [Thread-196883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:19:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:19:55.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:19:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:19:57.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 19, 34), 0.36406, 97.5455, 0.0, 11.646, 11.1608, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:19:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:19:34
2026-04-12T22:19:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:19:57.752 [DEBUG] [Thread-196884] [transport.py] [_log()] starting thread (client mode): 0xa7959e10
2026-04-12T22:19:57.752 [DEBUG] [Thread-196884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:19:57.776 [DEBUG] [Thread-196884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:19:57.776 [INFO] [Thread-196884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:19:57.779 [DEBUG] [Thread-196884] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] client lang: <none>
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] server lang: <none>
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] kex follows: False
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] Compression: none
2026-04-12T22:19:57.780 [DEBUG] [Thread-196884] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:19:57.800 [DEBUG] [Thread-196884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:19:57.800 [DEBUG] [Thread-196884] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:19:57.801 [DEBUG] [Thread-196884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:19:57.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:19:57.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:19:57.803 [DEBUG] [Thread-196884] [transport.py] [_log()] userauth is OK
2026-04-12T22:19:57.803 [DEBUG] [Thread-196884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:19:57.803 [DEBUG] [Thread-196884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:19:57.803 [DEBUG] [Thread-196884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:19:57.803 [DEBUG] [Thread-196884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:19:57.826 [INFO] [Thread-196884] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:19:57.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:19:58.589 [DEBUG] [Thread-196884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:19:58.589 [DEBUG] [Thread-196884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:19:58.590 [DEBUG] [Thread-196884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:19:58.630 [DEBUG] [Thread-196884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:19:58.630 [DEBUG] [Thread-196884] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:19:58.634 [DEBUG] [Thread-196884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:19:58.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:19:58.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:19:58.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:19:58.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:19:58.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:19:58.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:19:58.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:19:58.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:19:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:19:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.846632 -999.00  +11.30   4.67     92  +10.20 1 2 1 3 1     0    0 0.88 -4.71 .nE.w 4.7 4.7 211.8 6.6 12.2 -22.3 12.1 -21.2 11.8 -19.3 12.1 -21.2
2026-04-12T22:19:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:19:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:19:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.846632
2026-04-12T22:19:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:19:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:19:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:19:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:19:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:19:58.662 [DEBUG] [Thread-196884] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:19:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:19:34', tmtdew=0.36406, humidity=97.5455, cloud=0.0, wind=11.646, temperature=11.1608, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:19:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9452499999999997, 3.098, nan, nan, nan, nan, nan, 2.8069999999999995, nan, nan, 2.5719999999999983, nan, nan, nan, nan, 2.7515, 2.2567500000000003, 1.939, 1.742, 1.762500000000001, 2.6770000000000014, nan, nan], zp_timestamp='2026-04-12T20:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:19:58.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:19:58.749 [DEBUG] [Thread-196887] [transport.py] [_log()] starting thread (client mode): 0xae534df0
2026-04-12T22:19:58.749 [DEBUG] [Thread-196887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:19:58.763 [DEBUG] [Thread-196887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:19:58.763 [INFO] [Thread-196887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:19:58.771 [DEBUG] [Thread-196887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:19:58.772 [DEBUG] [Thread-196887] [transport.py] [_log()] client lang: <none>
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] server lang: <none>
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] kex follows: False
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] Compression: none
2026-04-12T22:19:58.773 [DEBUG] [Thread-196887] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:19:58.829 [DEBUG] [Thread-196887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:19:58.829 [DEBUG] [Thread-196887] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:19:58.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:19:58.831 [DEBUG] [Thread-196887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:19:58.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:19:58.885 [DEBUG] [Thread-196887] [transport.py] [_log()] userauth is OK
2026-04-12T22:19:58.885 [DEBUG] [Thread-196887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:19:58.885 [DEBUG] [Thread-196887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:19:58.885 [DEBUG] [Thread-196887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:19:58.885 [DEBUG] [Thread-196887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:19:58.904 [INFO] [Thread-196887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:19:58.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:19:58.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:19:59.718 [DEBUG] [Thread-196887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:19:59.718 [DEBUG] [Thread-196887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:19:59.766 [DEBUG] [Thread-196887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:19:59.766 [DEBUG] [Thread-196887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:19:59.775 [DEBUG] [Thread-196887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:19:59.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:19:59.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:19:59.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:19:59.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:19:59.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:19:59.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:19:59.813 [DEBUG] [Thread-196887] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:20:04.212 [DEBUG] [Thread-196889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:20:15.773 [DEBUG] [Thread-196890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:20:19.268 [DEBUG] [Thread-196891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:20:29.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:20:29.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:20:29.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:20:31.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 20, 9), 0.231995, 98.2728, 0.0, 9.0702, 11.0138, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:20:31.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:20:09
2026-04-12T22:20:31.367 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:20:31.368 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:20:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:20:31.670 [DEBUG] [Thread-196892] [transport.py] [_log()] starting thread (client mode): 0xa795abf0
2026-04-12T22:20:31.670 [DEBUG] [Thread-196892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:20:31.689 [DEBUG] [Thread-196892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:20:31.689 [INFO] [Thread-196892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:20:31.692 [DEBUG] [Thread-196892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] client lang: <none>
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] server lang: <none>
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] kex follows: False
2026-04-12T22:20:31.693 [DEBUG] [Thread-196892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:20:31.694 [DEBUG] [Thread-196892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:20:31.694 [DEBUG] [Thread-196892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:20:31.694 [DEBUG] [Thread-196892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:20:31.694 [DEBUG] [Thread-196892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:20:31.694 [DEBUG] [Thread-196892] [transport.py] [_log()] Compression: none
2026-04-12T22:20:31.694 [DEBUG] [Thread-196892] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:20:31.713 [DEBUG] [Thread-196892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:20:31.714 [DEBUG] [Thread-196892] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:20:31.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:20:31.715 [DEBUG] [Thread-196892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:20:31.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:20:31.717 [DEBUG] [Thread-196892] [transport.py] [_log()] userauth is OK
2026-04-12T22:20:31.717 [DEBUG] [Thread-196892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:20:31.718 [DEBUG] [Thread-196892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:20:31.718 [DEBUG] [Thread-196892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:20:31.718 [DEBUG] [Thread-196892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:20:31.741 [INFO] [Thread-196892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:20:31.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:20:32.901 [DEBUG] [Thread-196892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:20:32.902 [DEBUG] [Thread-196892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:20:32.902 [DEBUG] [Thread-196892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:20:32.943 [DEBUG] [Thread-196892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:20:32.943 [DEBUG] [Thread-196892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:20:32.947 [DEBUG] [Thread-196892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:20:32.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:20:32.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:20:32.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:20:32.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:20:32.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:20:32.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:20:32.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:20:32.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:20:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:20:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.846979 -999.00  +11.30   5.03     92  +10.20 1 2 1 3 1     0    0 0.92 -3.85 .NE.w 5.0 5.0 213.2 8.0 12.2 -22.3 12.0 -21.5 11.8 -19.3 12.0 -21.0
2026-04-12T22:20:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:20:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:20:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.846979
2026-04-12T22:20:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:20:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:20:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:20:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:20:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:20:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:20:09', tmtdew=0.231995, humidity=98.2728, cloud=0.0, wind=9.0702, temperature=11.0138, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:19:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.845249999999999, 3.069, nan, nan, nan, nan, nan, 2.6189999999999998, 2.563999999999999, nan, 2.847999999999999, nan, nan, nan, nan, 2.3465, 1.8897500000000003, 1.6775000000000002, 1.1749999999999998, 1.1860000000000008, 2.436000000000001, nan, nan], zp_timestamp='2026-04-12T20:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:20:32.983 [DEBUG] [Thread-196892] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:20:33.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:20:34.306 [DEBUG] [Thread-196895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:20:49.361 [DEBUG] [Thread-196896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:21:04.397 [DEBUG] [Thread-196897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:21:15.830 [DEBUG] [Thread-196898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:21:19.429 [DEBUG] [Thread-196899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:21:31.574 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:21:31.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:21:34.461 [DEBUG] [Thread-196900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:21:49.497 [DEBUG] [Thread-196901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:22:04.537 [DEBUG] [Thread-196902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:22:15.889 [DEBUG] [Thread-196903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:22:19.573 [DEBUG] [Thread-196904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:22:31.794 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:22:31.796 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:22:34.610 [DEBUG] [Thread-196905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:22:46.143 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T22:22:49.647 [DEBUG] [Thread-196906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:04.684 [DEBUG] [Thread-196907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:15.966 [DEBUG] [Thread-196908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:16.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:23:16.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:23:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:23:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 23, 7), 0.224485, 98.3228, 0.0, 9.21132, 11.1135, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:23:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:23:07
2026-04-12T22:23:17.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:23:18.023 [DEBUG] [Thread-196909] [transport.py] [_log()] starting thread (client mode): 0xa795a650
2026-04-12T22:23:18.023 [DEBUG] [Thread-196909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:23:18.042 [DEBUG] [Thread-196909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:23:18.043 [INFO] [Thread-196909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] client lang: <none>
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] server lang: <none>
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] kex follows: False
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] Compression: none
2026-04-12T22:23:18.046 [DEBUG] [Thread-196909] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:23:18.062 [DEBUG] [Thread-196909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:23:18.062 [DEBUG] [Thread-196909] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:23:18.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:23:18.063 [DEBUG] [Thread-196909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:23:18.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:23:18.064 [DEBUG] [Thread-196909] [transport.py] [_log()] userauth is OK
2026-04-12T22:23:18.064 [DEBUG] [Thread-196909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:23:18.064 [DEBUG] [Thread-196909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:23:18.064 [DEBUG] [Thread-196909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:23:18.064 [DEBUG] [Thread-196909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:23:18.086 [INFO] [Thread-196909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:23:18.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:23:18.882 [DEBUG] [Thread-196909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:23:18.882 [DEBUG] [Thread-196909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:23:18.883 [DEBUG] [Thread-196909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:23:18.923 [DEBUG] [Thread-196909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:23:18.923 [DEBUG] [Thread-196909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:23:18.926 [DEBUG] [Thread-196909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:23:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:23:18.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:23:18.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:23:18.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:23:18.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:23:18.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:23:18.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:23:18.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:23:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:23:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.849062 -999.00  +11.30   5.03     93  +10.20 1 2 1 3 1     0    0 1.02 -0.03 .NE.. 5.0 5.0 212.6 6.2 12.1 -21.8 12.0 -20.7 11.8 -19.1 12.0 -21.0
2026-04-12T22:23:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:23:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:23:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.849062
2026-04-12T22:23:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:23:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:23:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:23:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:23:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:23:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:23:07', tmtdew=0.224485, humidity=98.3228, cloud=0.0, wind=9.21132, temperature=11.1135, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:22:38.957', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.845249999999999, 3.069, nan, nan, nan, nan, nan, 2.6189999999999998, 2.563999999999999, nan, 2.847999999999999, nan, nan, nan, nan, 2.3465, 1.8897500000000003, 1.6775000000000002, 1.1749999999999998, 1.1860000000000008, 2.436000000000001, nan, nan], zp_timestamp='2026-04-12T20:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:23:18.951 [DEBUG] [Thread-196909] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:23:19.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:23:19.038 [DEBUG] [Thread-196912] [transport.py] [_log()] starting thread (client mode): 0xa795a560
2026-04-12T22:23:19.038 [DEBUG] [Thread-196912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:23:19.053 [DEBUG] [Thread-196912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:23:19.053 [INFO] [Thread-196912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:23:19.061 [DEBUG] [Thread-196912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:23:19.061 [DEBUG] [Thread-196912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:23:19.061 [DEBUG] [Thread-196912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] client lang: <none>
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] server lang: <none>
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] kex follows: False
2026-04-12T22:23:19.062 [DEBUG] [Thread-196912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:23:19.063 [DEBUG] [Thread-196912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:23:19.063 [DEBUG] [Thread-196912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:23:19.063 [DEBUG] [Thread-196912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:23:19.063 [DEBUG] [Thread-196912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:23:19.063 [DEBUG] [Thread-196912] [transport.py] [_log()] Compression: none
2026-04-12T22:23:19.063 [DEBUG] [Thread-196912] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:23:19.122 [DEBUG] [Thread-196912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:23:19.123 [DEBUG] [Thread-196912] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:23:19.123 [DEBUG] [Thread-196912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:23:19.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:23:19.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:23:19.177 [DEBUG] [Thread-196912] [transport.py] [_log()] userauth is OK
2026-04-12T22:23:19.178 [DEBUG] [Thread-196912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:23:19.178 [DEBUG] [Thread-196912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:23:19.178 [DEBUG] [Thread-196912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:23:19.178 [DEBUG] [Thread-196912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:23:19.201 [INFO] [Thread-196912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:23:19.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:23:19.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:23:19.718 [DEBUG] [Thread-196914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:20.035 [DEBUG] [Thread-196912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:23:20.035 [DEBUG] [Thread-196912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:23:20.083 [DEBUG] [Thread-196912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:23:20.083 [DEBUG] [Thread-196912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:23:20.092 [DEBUG] [Thread-196912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:23:20.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:23:20.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:23:20.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:23:20.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:23:20.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:23:20.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:23:20.129 [DEBUG] [Thread-196912] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:23:32.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:32.002 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:34.773 [DEBUG] [Thread-196915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:49.809 [DEBUG] [Thread-196916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:23:50.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:23:50.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:23: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
2026-04-12T22:23:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 23, 43), 0.35913, 97.5792, 0.0, 10.5876, 11.2938, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:23:51.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:23:43
2026-04-12T22:23:52.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:23:52.184 [DEBUG] [Thread-196917] [transport.py] [_log()] starting thread (client mode): 0xb0f8e0b0
2026-04-12T22:23:52.184 [DEBUG] [Thread-196917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:23:52.205 [DEBUG] [Thread-196917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:23:52.205 [INFO] [Thread-196917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] client lang: <none>
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] server lang: <none>
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] kex follows: False
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] Compression: none
2026-04-12T22:23:52.208 [DEBUG] [Thread-196917] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:23:52.225 [DEBUG] [Thread-196917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:23:52.226 [DEBUG] [Thread-196917] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:23:52.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:23:52.227 [DEBUG] [Thread-196917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:23:52.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:23:52.228 [DEBUG] [Thread-196917] [transport.py] [_log()] userauth is OK
2026-04-12T22:23:52.228 [DEBUG] [Thread-196917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:23:52.228 [DEBUG] [Thread-196917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:23:52.228 [DEBUG] [Thread-196917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:23:52.228 [DEBUG] [Thread-196917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:23:52.242 [INFO] [Thread-196917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:23:52.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:23:53.049 [DEBUG] [Thread-196917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:23:53.050 [DEBUG] [Thread-196917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:23:53.059 [DEBUG] [Thread-196917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:23:53.091 [DEBUG] [Thread-196917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:23:53.092 [DEBUG] [Thread-196917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:23:53.095 [DEBUG] [Thread-196917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:23:53.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:23:53.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:23:53.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:23:53.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:23:53.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:23:53.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:23:53.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:23:53.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:23:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:23:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.849410 -999.00  +11.30   5.41     93  +10.20 1 2 1 3 1     0    0 1.05 1.27 .NE.. 5.4 5.4 208.8 6.3 12.2 -22.3 12.1 -21.2 11.7 -19.3 12.0 -21.2
2026-04-12T22:23:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:23:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:23:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.849410
2026-04-12T22:23:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:23:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:23:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:23:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:23:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:23:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:23:43', tmtdew=0.35913, humidity=97.5792, cloud=0.0, wind=10.5876, temperature=11.2938, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:23:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.845249999999999, 3.069, nan, nan, nan, nan, nan, 2.6189999999999998, 2.563999999999999, nan, 2.847999999999999, nan, nan, nan, nan, 2.3465, 1.8897500000000003, 1.6775000000000002, 1.1749999999999998, 1.1860000000000008, 2.436000000000001, nan, nan], zp_timestamp='2026-04-12T20:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:23:53.123 [DEBUG] [Thread-196917] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:23:53.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:23:53.215 [DEBUG] [Thread-196920] [transport.py] [_log()] starting thread (client mode): 0xb0f8ff40
2026-04-12T22:23:53.215 [DEBUG] [Thread-196920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:23:53.233 [DEBUG] [Thread-196920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:23:53.234 [INFO] [Thread-196920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] client lang: <none>
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] server lang: <none>
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] kex follows: False
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] Compression: none
2026-04-12T22:23:53.245 [DEBUG] [Thread-196920] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:23:53.301 [DEBUG] [Thread-196920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:23:53.302 [DEBUG] [Thread-196920] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:23:53.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:23:53.303 [DEBUG] [Thread-196920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:23:53.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:23:53.357 [DEBUG] [Thread-196920] [transport.py] [_log()] userauth is OK
2026-04-12T22:23:53.357 [DEBUG] [Thread-196920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:23:53.357 [DEBUG] [Thread-196920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:23:53.357 [DEBUG] [Thread-196920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:23:53.357 [DEBUG] [Thread-196920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:23:53.379 [INFO] [Thread-196920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:23:53.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:23:53.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:23:54.191 [DEBUG] [Thread-196920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:23:54.191 [DEBUG] [Thread-196920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:23:54.239 [DEBUG] [Thread-196920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:23:54.239 [DEBUG] [Thread-196920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:23:54.249 [DEBUG] [Thread-196920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:23:54.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:23:54.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:23:54.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:23:54.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:23:54.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:23:54.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:23:54.286 [DEBUG] [Thread-196920] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:24:04.847 [DEBUG] [Thread-196922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:24:16.034 [DEBUG] [Thread-196923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:24:19.899 [DEBUG] [Thread-196924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:24:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:24:24.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:24:24.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:24:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 23, 43), 0.35913, 97.5792, 0.0, 10.5876, 11.2938, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:24:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:23:43
2026-04-12T22:24:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:24:26.234 [DEBUG] [Thread-196925] [transport.py] [_log()] starting thread (client mode): 0xae5b2a10
2026-04-12T22:24:26.235 [DEBUG] [Thread-196925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:24:26.255 [DEBUG] [Thread-196925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:24:26.255 [INFO] [Thread-196925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:24:26.258 [DEBUG] [Thread-196925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] client lang: <none>
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] server lang: <none>
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] kex follows: False
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] Compression: none
2026-04-12T22:24:26.259 [DEBUG] [Thread-196925] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:24:26.276 [DEBUG] [Thread-196925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:24:26.277 [DEBUG] [Thread-196925] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:24:26.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:24:26.278 [DEBUG] [Thread-196925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:24:26.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:24:26.280 [DEBUG] [Thread-196925] [transport.py] [_log()] userauth is OK
2026-04-12T22:24:26.280 [DEBUG] [Thread-196925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:24:26.281 [DEBUG] [Thread-196925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:24:26.281 [DEBUG] [Thread-196925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:24:26.281 [DEBUG] [Thread-196925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:24:26.306 [INFO] [Thread-196925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:24:26.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:24:27.094 [DEBUG] [Thread-196925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:24:27.094 [DEBUG] [Thread-196925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:24:27.094 [DEBUG] [Thread-196925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:24:27.135 [DEBUG] [Thread-196925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:24:27.135 [DEBUG] [Thread-196925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:24:27.138 [DEBUG] [Thread-196925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:24:27.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:24:27.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:24:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:24:27.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:24:27.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:24:27.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:24:27.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:24:27.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:24:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:24:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.849757 -999.00  +11.30   4.03     93  +10.20 1 2 1 3 1     0    0 1.09 2.38 .NE.. 4.0 4.0 216.2 6.1 12.1 -22.4 12.0 -21.2 11.7 -19.3 12.0 -21.3
2026-04-12T22:24:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:24:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:24:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.849757
2026-04-12T22:24:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:24:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:24:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:24:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:24:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:24:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:23:43', tmtdew=0.35913, humidity=97.5792, cloud=0.0, wind=10.5876, temperature=11.2938, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:23:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.845249999999999, 3.069, nan, nan, nan, nan, nan, 2.6189999999999998, 2.563999999999999, nan, 2.847999999999999, nan, nan, nan, nan, 2.3465, 1.8897500000000003, 1.6775000000000002, 1.1749999999999998, 1.1860000000000008, 2.436000000000001, nan, nan], zp_timestamp='2026-04-12T20:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:24:27.167 [DEBUG] [Thread-196925] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:24:27.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:24:27.261 [DEBUG] [Thread-196928] [transport.py] [_log()] starting thread (client mode): 0xae5b37c0
2026-04-12T22:24:27.261 [DEBUG] [Thread-196928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:24:27.276 [DEBUG] [Thread-196928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:24:27.276 [INFO] [Thread-196928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] client lang: <none>
2026-04-12T22:24:27.284 [DEBUG] [Thread-196928] [transport.py] [_log()] server lang: <none>
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] kex follows: False
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] Compression: none
2026-04-12T22:24:27.285 [DEBUG] [Thread-196928] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:24:27.340 [DEBUG] [Thread-196928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:24:27.341 [DEBUG] [Thread-196928] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:24:27.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:24:27.342 [DEBUG] [Thread-196928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:24:27.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:24:27.397 [DEBUG] [Thread-196928] [transport.py] [_log()] userauth is OK
2026-04-12T22:24:27.397 [DEBUG] [Thread-196928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:24:27.397 [DEBUG] [Thread-196928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:24:27.397 [DEBUG] [Thread-196928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:24:27.398 [DEBUG] [Thread-196928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:24:27.416 [INFO] [Thread-196928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:24:27.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:24:27.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:24:28.218 [DEBUG] [Thread-196928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:24:28.218 [DEBUG] [Thread-196928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:24:28.267 [DEBUG] [Thread-196928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:24:28.267 [DEBUG] [Thread-196928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:24:28.276 [DEBUG] [Thread-196928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:24:28.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:24:28.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:24:28.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:24:28.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:24:28.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:24:28.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:24:28.313 [DEBUG] [Thread-196928] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:24:32.206 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:24:32.208 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:24:34.943 [DEBUG] [Thread-196930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:24:49.993 [DEBUG] [Thread-196931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:24:58.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:24:58.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:24:58.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:24:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 24, 18), 0.232165, 98.273, 0.0, 8.982, 11.1135, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:24:59.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:24:18
2026-04-12T22:25:00.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:25:00.243 [DEBUG] [Thread-196932] [transport.py] [_log()] starting thread (client mode): 0xa795ba90
2026-04-12T22:25:00.243 [DEBUG] [Thread-196932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:25:00.262 [DEBUG] [Thread-196932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:25:00.263 [INFO] [Thread-196932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] client lang: <none>
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] server lang: <none>
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] kex follows: False
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] Compression: none
2026-04-12T22:25:00.266 [DEBUG] [Thread-196932] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:25:00.280 [DEBUG] [Thread-196932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:25:00.280 [DEBUG] [Thread-196932] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:25:00.281 [DEBUG] [Thread-196932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:25:00.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:25:00.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:25:00.283 [DEBUG] [Thread-196932] [transport.py] [_log()] userauth is OK
2026-04-12T22:25:00.283 [DEBUG] [Thread-196932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:25:00.283 [DEBUG] [Thread-196932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:25:00.283 [DEBUG] [Thread-196932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:25:00.283 [DEBUG] [Thread-196932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:25:00.308 [INFO] [Thread-196932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:25:00.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:25:01.066 [DEBUG] [Thread-196932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:25:01.066 [DEBUG] [Thread-196932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:25:01.066 [DEBUG] [Thread-196932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:25:01.107 [DEBUG] [Thread-196932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:25:01.107 [DEBUG] [Thread-196932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:25:01.109 [DEBUG] [Thread-196932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:25:01.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:25:01.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:25:01.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:25:01.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:25:01.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:25:01.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:25:01.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:25:01.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:25:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:25:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.850104 -999.00  +11.30   4.95     93  +10.20 1 2 1 3 1     0    0 1.14 3.24 .NE.. 5.0 5.0 207.2 8.5 12.1 -22.3 12.0 -21.2 11.7 -19.2 12.0 -21.2
2026-04-12T22:25:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:25:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:25:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.850104
2026-04-12T22:25:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:25:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:25:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:25:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:25:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:25:01.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:24:18', tmtdew=0.232165, humidity=98.273, cloud=0.0, wind=8.982, temperature=11.1135, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:24:08.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.845249999999999, 3.069, nan, nan, nan, nan, nan, 2.6189999999999998, 2.563999999999999, nan, 2.847999999999999, nan, nan, nan, nan, 2.3465, 1.8897500000000003, 1.6775000000000002, 1.1749999999999998, 1.1860000000000008, 2.436000000000001, nan, nan], zp_timestamp='2026-04-12T20:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:25:01.127 [DEBUG] [Thread-196932] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:25:01.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:25:01.222 [DEBUG] [Thread-196935] [transport.py] [_log()] starting thread (client mode): 0xa7958310
2026-04-12T22:25:01.222 [DEBUG] [Thread-196935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:25:01.237 [DEBUG] [Thread-196935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:25:01.238 [INFO] [Thread-196935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:25:01.245 [DEBUG] [Thread-196935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] client lang: <none>
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] server lang: <none>
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] kex follows: False
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] Compression: none
2026-04-12T22:25:01.246 [DEBUG] [Thread-196935] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:25:01.304 [DEBUG] [Thread-196935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:25:01.305 [DEBUG] [Thread-196935] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:25:01.305 [DEBUG] [Thread-196935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:25:01.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:25:01.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:25:01.360 [DEBUG] [Thread-196935] [transport.py] [_log()] userauth is OK
2026-04-12T22:25:01.360 [DEBUG] [Thread-196935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:25:01.360 [DEBUG] [Thread-196935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:25:01.361 [DEBUG] [Thread-196935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:25:01.361 [DEBUG] [Thread-196935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:25:01.379 [INFO] [Thread-196935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:25:01.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:25:01.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:25:02.225 [DEBUG] [Thread-196935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:25:02.225 [DEBUG] [Thread-196935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:25:02.273 [DEBUG] [Thread-196935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:25:02.273 [DEBUG] [Thread-196935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:25:02.282 [DEBUG] [Thread-196935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:25:02.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:25:02.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:25:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:25:02.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:25:02.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:25:02.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:25:02.319 [DEBUG] [Thread-196935] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:25:05.035 [DEBUG] [Thread-196937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:25:16.097 [DEBUG] [Thread-196938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:25:20.093 [DEBUG] [Thread-196939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:25:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:25:32.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:25:32.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:25:32.413 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:25:32.415 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:25:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 24, 54), 0.37431, 97.4804, 0.0, 10.4818, 11.2611, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:25:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:24:54
2026-04-12T22:25:34.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:25:34.247 [DEBUG] [Thread-196940] [transport.py] [_log()] starting thread (client mode): 0xae5b27a0
2026-04-12T22:25:34.247 [DEBUG] [Thread-196940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:25:34.267 [DEBUG] [Thread-196940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:25:34.267 [INFO] [Thread-196940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:25:34.270 [DEBUG] [Thread-196940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] client lang: <none>
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] server lang: <none>
2026-04-12T22:25:34.271 [DEBUG] [Thread-196940] [transport.py] [_log()] kex follows: False
2026-04-12T22:25:34.272 [DEBUG] [Thread-196940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:25:34.272 [DEBUG] [Thread-196940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:25:34.272 [DEBUG] [Thread-196940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:25:34.272 [DEBUG] [Thread-196940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:25:34.272 [DEBUG] [Thread-196940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:25:34.272 [DEBUG] [Thread-196940] [transport.py] [_log()] Compression: none
2026-04-12T22:25:34.272 [DEBUG] [Thread-196940] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:25:34.291 [DEBUG] [Thread-196940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:25:34.292 [DEBUG] [Thread-196940] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:25:34.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:25:34.294 [DEBUG] [Thread-196940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:25:34.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:25:34.296 [DEBUG] [Thread-196940] [transport.py] [_log()] userauth is OK
2026-04-12T22:25:34.296 [DEBUG] [Thread-196940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:25:34.296 [DEBUG] [Thread-196940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:25:34.296 [DEBUG] [Thread-196940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:25:34.297 [DEBUG] [Thread-196940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:25:34.317 [INFO] [Thread-196940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:25:34.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:25:35.094 [DEBUG] [Thread-196940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:25:35.094 [DEBUG] [Thread-196940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:25:35.095 [DEBUG] [Thread-196940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:25:35.129 [DEBUG] [Thread-196942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:25:35.135 [DEBUG] [Thread-196940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:25:35.136 [DEBUG] [Thread-196940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:25:35.139 [DEBUG] [Thread-196940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:25:35.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:25:35.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:25:35.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:25:35.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:25:35.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:25:35.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:25:35.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:25:35.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:25:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:25:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.850798 -999.00  +11.20   4.63     93  +10.20 1 2 1 3 1     0    0 1.12 3.80 .nE.. 4.6 4.6 230.2 7.0 12.1 -21.9 12.0 -21.1 11.7 -18.8 12.0 -20.7
2026-04-12T22:25:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:25:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:25:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.850798
2026-04-12T22:25:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:25:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:25:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:25:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:25:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:25:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:24:54', tmtdew=0.37431, humidity=97.4804, cloud=0.0, wind=10.4818, temperature=11.2611, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:25:08.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.845249999999999, 3.069, nan, nan, nan, nan, nan, 2.6189999999999998, 2.563999999999999, nan, 2.847999999999999, nan, nan, nan, nan, 2.3465, 1.8897500000000003, 1.6775000000000002, 1.1749999999999998, 1.1860000000000008, 2.436000000000001, nan, nan], zp_timestamp='2026-04-12T20:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:25:35.165 [DEBUG] [Thread-196940] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:25:35.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:25:35.258 [DEBUG] [Thread-196944] [transport.py] [_log()] starting thread (client mode): 0xae561f90
2026-04-12T22:25:35.258 [DEBUG] [Thread-196944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:25:35.272 [DEBUG] [Thread-196944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:25:35.273 [INFO] [Thread-196944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:25:35.281 [DEBUG] [Thread-196944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:25:35.282 [DEBUG] [Thread-196944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:25:35.282 [DEBUG] [Thread-196944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:25:35.282 [DEBUG] [Thread-196944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:35.282 [DEBUG] [Thread-196944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:25:35.282 [DEBUG] [Thread-196944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] client lang: <none>
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] server lang: <none>
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] kex follows: False
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] Compression: none
2026-04-12T22:25:35.283 [DEBUG] [Thread-196944] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:25:35.340 [DEBUG] [Thread-196944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:25:35.340 [DEBUG] [Thread-196944] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:25:35.341 [DEBUG] [Thread-196944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:25:35.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:25:35.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:25:35.396 [DEBUG] [Thread-196944] [transport.py] [_log()] userauth is OK
2026-04-12T22:25:35.396 [DEBUG] [Thread-196944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:25:35.397 [DEBUG] [Thread-196944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:25:35.397 [DEBUG] [Thread-196944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:25:35.397 [DEBUG] [Thread-196944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:25:35.415 [INFO] [Thread-196944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:25:35.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:25:35.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:25:36.257 [DEBUG] [Thread-196944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:25:36.257 [DEBUG] [Thread-196944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:25:36.305 [DEBUG] [Thread-196944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:25:36.305 [DEBUG] [Thread-196944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:25:36.315 [DEBUG] [Thread-196944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:25:36.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:25: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')
2026-04-12T22:25:36.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:25:36.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:25:36.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:25:36.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:25:36.352 [DEBUG] [Thread-196944] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:25:50.169 [DEBUG] [Thread-196946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:26:05.232 [DEBUG] [Thread-196947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:26:06.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:26:06.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:26:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:26:07.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 25, 29), 0.23972, 98.2236, 0.0, 8.87616, 11.0805, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:26:07.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:25:29
2026-04-12T22:26:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:26:08.268 [DEBUG] [Thread-196948] [transport.py] [_log()] starting thread (client mode): 0xa795b130
2026-04-12T22:26:08.268 [DEBUG] [Thread-196948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:26:08.289 [DEBUG] [Thread-196948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:26:08.289 [INFO] [Thread-196948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] client lang: <none>
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] server lang: <none>
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] kex follows: False
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] Compression: none
2026-04-12T22:26:08.291 [DEBUG] [Thread-196948] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:26:08.300 [DEBUG] [Thread-196948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:26:08.300 [DEBUG] [Thread-196948] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:26:08.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:26:08.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:26:08.302 [DEBUG] [Thread-196948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:26:08.302 [DEBUG] [Thread-196948] [transport.py] [_log()] userauth is OK
2026-04-12T22:26:08.302 [DEBUG] [Thread-196948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:26:08.302 [DEBUG] [Thread-196948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:26:08.303 [DEBUG] [Thread-196948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:26:08.303 [DEBUG] [Thread-196948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:26:08.329 [INFO] [Thread-196948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:26:08.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:26:09.069 [DEBUG] [Thread-196948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:26:09.069 [DEBUG] [Thread-196948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:26:09.070 [DEBUG] [Thread-196948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:26:09.110 [DEBUG] [Thread-196948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:26:09.111 [DEBUG] [Thread-196948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:26:09.113 [DEBUG] [Thread-196948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:26:09.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:26:09.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:26:09.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:26:09.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:26:09.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:26:09.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:26:09.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:26:09.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:26:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:26:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.851146 -999.00  +11.20   5.50     93  +10.30 1 2 1 3 1     0    0 1.14 3.86 .nE.. 5.5 5.5 208.5 7.0 12.1 -22.0 12.0 -21.4 11.7 -19.2 12.0 -21.1
2026-04-12T22:26:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:26:09.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:26:09.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.851146
2026-04-12T22:26:09.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:26:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:26:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:26:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:26:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:26:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:25:29', tmtdew=0.23972, humidity=98.2236, cloud=0.0, wind=8.87616, temperature=11.0805, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:25:39.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.845249999999999, 3.069, nan, nan, nan, nan, nan, 2.6189999999999998, 2.563999999999999, nan, 2.847999999999999, nan, nan, nan, nan, 2.3465, 1.8897500000000003, 1.6775000000000002, 1.1749999999999998, 1.1860000000000008, 2.436000000000001, nan, nan], zp_timestamp='2026-04-12T20:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:26:09.138 [DEBUG] [Thread-196948] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:26:09.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:26:09.231 [DEBUG] [Thread-196951] [transport.py] [_log()] starting thread (client mode): 0xae5361a0
2026-04-12T22:26:09.231 [DEBUG] [Thread-196951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:26:09.246 [DEBUG] [Thread-196951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:26:09.246 [INFO] [Thread-196951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:26:09.254 [DEBUG] [Thread-196951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:26:09.254 [DEBUG] [Thread-196951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:26:09.254 [DEBUG] [Thread-196951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:26:09.254 [DEBUG] [Thread-196951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:09.254 [DEBUG] [Thread-196951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:09.254 [DEBUG] [Thread-196951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] client lang: <none>
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] server lang: <none>
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] kex follows: False
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:26:09.255 [DEBUG] [Thread-196951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:26:09.256 [DEBUG] [Thread-196951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:26:09.256 [DEBUG] [Thread-196951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:26:09.256 [DEBUG] [Thread-196951] [transport.py] [_log()] Compression: none
2026-04-12T22:26:09.256 [DEBUG] [Thread-196951] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:26:09.313 [DEBUG] [Thread-196951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:26:09.314 [DEBUG] [Thread-196951] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:26:09.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:26:09.316 [DEBUG] [Thread-196951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:26:09.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:26:09.377 [DEBUG] [Thread-196951] [transport.py] [_log()] userauth is OK
2026-04-12T22:26:09.377 [DEBUG] [Thread-196951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:26:09.378 [DEBUG] [Thread-196951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:26:09.378 [DEBUG] [Thread-196951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:26:09.378 [DEBUG] [Thread-196951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:26:09.397 [INFO] [Thread-196951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:26:09.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:26:09.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:26:10.218 [DEBUG] [Thread-196951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:26:10.218 [DEBUG] [Thread-196951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:26:10.266 [DEBUG] [Thread-196951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:26:10.267 [DEBUG] [Thread-196951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:26:10.276 [DEBUG] [Thread-196951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:26:10.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:26:10.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:26: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
2026-04-12T22:26:10.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:26:10.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:26:10.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:26:10.314 [DEBUG] [Thread-196951] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:26:16.155 [DEBUG] [Thread-196953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:26:20.269 [DEBUG] [Thread-196954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:26:32.620 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:26:32.622 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:26:35.313 [DEBUG] [Thread-196955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:26:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:26:40.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:26:40.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:26:41.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 26, 5), 0.234635, 98.2568, 0.0, 8.99964, 11.0971, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:26:41.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:26:05
2026-04-12T22:26:42.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:26:42.362 [DEBUG] [Thread-196956] [transport.py] [_log()] starting thread (client mode): 0xae5a7070
2026-04-12T22:26:42.362 [DEBUG] [Thread-196956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:26:42.377 [DEBUG] [Thread-196956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:26:42.377 [INFO] [Thread-196956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:26:42.380 [DEBUG] [Thread-196956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] client lang: <none>
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] server lang: <none>
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] kex follows: False
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] Compression: none
2026-04-12T22:26:42.381 [DEBUG] [Thread-196956] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:26:42.397 [DEBUG] [Thread-196956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:26:42.397 [DEBUG] [Thread-196956] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:26:42.398 [DEBUG] [Thread-196956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:26:42.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:26:42.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:26:42.398 [DEBUG] [Thread-196956] [transport.py] [_log()] userauth is OK
2026-04-12T22:26:42.398 [DEBUG] [Thread-196956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:26:42.398 [DEBUG] [Thread-196956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:26:42.398 [DEBUG] [Thread-196956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:26:42.398 [DEBUG] [Thread-196956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:26:42.408 [INFO] [Thread-196956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:26:42.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:26:43.176 [DEBUG] [Thread-196956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:26:43.176 [DEBUG] [Thread-196956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:26:43.176 [DEBUG] [Thread-196956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:26:43.217 [DEBUG] [Thread-196956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:26:43.217 [DEBUG] [Thread-196956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:26:43.221 [DEBUG] [Thread-196956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:26:43.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:26:43.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:26:43.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:26:43.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:26:43.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:26:43.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:26:43.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:26:43.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:26:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:26:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.851493 -999.00  +11.20   5.80     93  +10.30 1 2 1 3 1     0    0 1.16 4.64 .NE.. 5.8 5.8 223.4 7.0 12.1 -22.0 12.0 -20.7 11.7 -19.0 12.0 -20.8
2026-04-12T22:26:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:26:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:26:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.851493
2026-04-12T22:26:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:26:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:26:43.248 [DEBUG] [Thread-196956] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:26:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:26:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:26:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:26:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:26:05', tmtdew=0.234635, humidity=98.2568, cloud=0.0, wind=8.99964, temperature=11.0971, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:26:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:26:43.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:26:43.342 [DEBUG] [Thread-196959] [transport.py] [_log()] starting thread (client mode): 0xae5a64a0
2026-04-12T22:26:43.342 [DEBUG] [Thread-196959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:26:43.356 [DEBUG] [Thread-196959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:26:43.357 [INFO] [Thread-196959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] client lang: <none>
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] server lang: <none>
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] kex follows: False
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:26:43.364 [DEBUG] [Thread-196959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:26:43.365 [DEBUG] [Thread-196959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:26:43.365 [DEBUG] [Thread-196959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:26:43.365 [DEBUG] [Thread-196959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:26:43.365 [DEBUG] [Thread-196959] [transport.py] [_log()] Compression: none
2026-04-12T22:26:43.365 [DEBUG] [Thread-196959] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:26:43.423 [DEBUG] [Thread-196959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:26:43.423 [DEBUG] [Thread-196959] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:26:43.424 [DEBUG] [Thread-196959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:26:43.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:26:43.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:26:43.479 [DEBUG] [Thread-196959] [transport.py] [_log()] userauth is OK
2026-04-12T22:26:43.479 [DEBUG] [Thread-196959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:26:43.479 [DEBUG] [Thread-196959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:26:43.479 [DEBUG] [Thread-196959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:26:43.479 [DEBUG] [Thread-196959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:26:43.497 [INFO] [Thread-196959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:26:43.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:26:43.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:26:44.327 [DEBUG] [Thread-196959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:26:44.327 [DEBUG] [Thread-196959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:26:44.375 [DEBUG] [Thread-196959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:26:44.375 [DEBUG] [Thread-196959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:26:44.385 [DEBUG] [Thread-196959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:26:44.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:26:44.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:26: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') -> 00000000
2026-04-12T22:26:44.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:26:44.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:26:44.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:26:44.423 [DEBUG] [Thread-196959] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:26:50.350 [DEBUG] [Thread-196961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:05.409 [DEBUG] [Thread-196962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:27:14.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:27:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:27:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 26, 41), 0.36931, 97.5141, 0.0, 10.0937, 11.3609, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:27:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:26:41
2026-04-12T22:27:16.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:27:16.215 [DEBUG] [Thread-196963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:16.305 [DEBUG] [Thread-196964] [transport.py] [_log()] starting thread (client mode): 0xb0f8d2a0
2026-04-12T22:27:16.305 [DEBUG] [Thread-196964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:27:16.327 [DEBUG] [Thread-196964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:27:16.327 [INFO] [Thread-196964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:27:16.330 [DEBUG] [Thread-196964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] client lang: <none>
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] server lang: <none>
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] kex follows: False
2026-04-12T22:27:16.331 [DEBUG] [Thread-196964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:27:16.332 [DEBUG] [Thread-196964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:27:16.332 [DEBUG] [Thread-196964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:27:16.332 [DEBUG] [Thread-196964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:27:16.332 [DEBUG] [Thread-196964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:27:16.332 [DEBUG] [Thread-196964] [transport.py] [_log()] Compression: none
2026-04-12T22:27:16.332 [DEBUG] [Thread-196964] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:27:16.349 [DEBUG] [Thread-196964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:27:16.349 [DEBUG] [Thread-196964] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:27:16.350 [DEBUG] [Thread-196964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:27:16.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:27:16.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:27:16.352 [DEBUG] [Thread-196964] [transport.py] [_log()] userauth is OK
2026-04-12T22:27:16.353 [DEBUG] [Thread-196964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:27:16.353 [DEBUG] [Thread-196964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:27:16.353 [DEBUG] [Thread-196964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:27:16.353 [DEBUG] [Thread-196964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:27:16.377 [INFO] [Thread-196964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:27:16.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:27:17.047 [DEBUG] [Thread-196964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:27:17.048 [DEBUG] [Thread-196964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:27:17.048 [DEBUG] [Thread-196964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:27:17.089 [DEBUG] [Thread-196964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:27:17.089 [DEBUG] [Thread-196964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:27:17.093 [DEBUG] [Thread-196964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:27:17.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:27:17.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:27:17.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:27:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:27:17.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:27:17.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:27:17.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.851840 -999.00  +11.20   4.38     93  +10.30 1 2 1 3 1     0    0 1.17 5.08 .NE.. 4.4 4.4 198.6 6.4 12.1 -21.9 11.9 -21.0 11.7 -19.3 12.0 -21.1
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.851840
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:27:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:26:41', tmtdew=0.36931, humidity=97.5141, cloud=0.0, wind=10.0937, temperature=11.3609, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:26:38.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:27:17.112 [DEBUG] [Thread-196964] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:27:17.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:27:17.201 [DEBUG] [Thread-196967] [transport.py] [_log()] starting thread (client mode): 0xb0f8e620
2026-04-12T22:27:17.201 [DEBUG] [Thread-196967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:27:17.221 [DEBUG] [Thread-196967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:27:17.222 [INFO] [Thread-196967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:27:17.229 [DEBUG] [Thread-196967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:27:17.229 [DEBUG] [Thread-196967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:27:17.229 [DEBUG] [Thread-196967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] client lang: <none>
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] server lang: <none>
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] kex follows: False
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] Compression: none
2026-04-12T22:27:17.230 [DEBUG] [Thread-196967] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:27:17.287 [DEBUG] [Thread-196967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:27:17.287 [DEBUG] [Thread-196967] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:27:17.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:27:17.289 [DEBUG] [Thread-196967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:27:17.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:27:17.342 [DEBUG] [Thread-196967] [transport.py] [_log()] userauth is OK
2026-04-12T22:27:17.343 [DEBUG] [Thread-196967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:27:17.343 [DEBUG] [Thread-196967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:27:17.343 [DEBUG] [Thread-196967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:27:17.343 [DEBUG] [Thread-196967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:27:17.362 [INFO] [Thread-196967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:27:17.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:27:17.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:27:18.194 [DEBUG] [Thread-196967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:27:18.195 [DEBUG] [Thread-196967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:27:18.243 [DEBUG] [Thread-196967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:27:18.244 [DEBUG] [Thread-196967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:27:18.253 [DEBUG] [Thread-196967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:27:18.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:27:18.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:27:18.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:27:18.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:27:18.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:27:18.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:27:18.290 [DEBUG] [Thread-196967] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:27:20.445 [DEBUG] [Thread-196969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:32.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:32.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:35.502 [DEBUG] [Thread-196970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:48.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:27:48.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:27:48.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:27:49.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 27, 16), 0.234625, 98.2573, 0.0, 7.99416, 11.0806, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:27:49.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:27:16
2026-04-12T22:27:49.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:27:50.119 [DEBUG] [Thread-196971] [transport.py] [_log()] starting thread (client mode): 0xae50b6d0
2026-04-12T22:27:50.119 [DEBUG] [Thread-196971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:27:50.140 [DEBUG] [Thread-196971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:27:50.140 [INFO] [Thread-196971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] client lang: <none>
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] server lang: <none>
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] kex follows: False
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:27:50.143 [DEBUG] [Thread-196971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:27:50.144 [DEBUG] [Thread-196971] [transport.py] [_log()] Compression: none
2026-04-12T22:27:50.144 [DEBUG] [Thread-196971] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:27:50.163 [DEBUG] [Thread-196971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:27:50.164 [DEBUG] [Thread-196971] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:27:50.165 [DEBUG] [Thread-196971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:27:50.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:27:50.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:27:50.167 [DEBUG] [Thread-196971] [transport.py] [_log()] userauth is OK
2026-04-12T22:27:50.167 [DEBUG] [Thread-196971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:27:50.167 [DEBUG] [Thread-196971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:27:50.167 [DEBUG] [Thread-196971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:27:50.167 [DEBUG] [Thread-196971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:27:50.192 [INFO] [Thread-196971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:27:50.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:27:50.540 [DEBUG] [Thread-196973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:27:50.823 [DEBUG] [Thread-196971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:27:50.823 [DEBUG] [Thread-196971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:27:50.824 [DEBUG] [Thread-196971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:27:50.864 [DEBUG] [Thread-196971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:27:50.864 [DEBUG] [Thread-196971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:27:50.868 [DEBUG] [Thread-196971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:27:50.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:27:50.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:27:50.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:27:50.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:27:50.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:27:50.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:27:50.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:27:50.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:27:50.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:27:50.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.852187 -999.00  +11.20   6.00     93  +10.20 1 2 1 3 1     0    0 1.23 6.18 .NE.. 6.0 6.0 218.6 7.6 12.1 -22.4 12.0 -21.2 11.7 -19.2 11.9 -21.2
2026-04-12T22:27:50.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:27:50.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:27:50.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.852187
2026-04-12T22:27:50.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:27:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:27:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:27:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:27:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:27:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:27:16', tmtdew=0.234625, humidity=98.2573, cloud=0.0, wind=7.99416, temperature=11.0806, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:27:08.957', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:27:50.897 [DEBUG] [Thread-196971] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:27:50.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:27:50.987 [DEBUG] [Thread-196975] [transport.py] [_log()] starting thread (client mode): 0xae50afe0
2026-04-12T22:27:50.987 [DEBUG] [Thread-196975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:27:51.003 [DEBUG] [Thread-196975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:27:51.003 [INFO] [Thread-196975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:27:51.011 [DEBUG] [Thread-196975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] client lang: <none>
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] server lang: <none>
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] kex follows: False
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] Compression: none
2026-04-12T22:27:51.012 [DEBUG] [Thread-196975] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:27:51.069 [DEBUG] [Thread-196975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:27:51.070 [DEBUG] [Thread-196975] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:27:51.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:27:51.071 [DEBUG] [Thread-196975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:27:51.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:27:51.126 [DEBUG] [Thread-196975] [transport.py] [_log()] userauth is OK
2026-04-12T22:27:51.126 [DEBUG] [Thread-196975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:27:51.127 [DEBUG] [Thread-196975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:27:51.127 [DEBUG] [Thread-196975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:27:51.127 [DEBUG] [Thread-196975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:27:51.147 [INFO] [Thread-196975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:27:51.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:27:51.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:27:51.992 [DEBUG] [Thread-196975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:27:51.993 [DEBUG] [Thread-196975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:27:52.040 [DEBUG] [Thread-196975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:27:52.040 [DEBUG] [Thread-196975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:27:52.050 [DEBUG] [Thread-196975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:27:52.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:27:52.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:27:52.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
2026-04-12T22:27:52.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:27:52.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:27:52.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:27:52.087 [DEBUG] [Thread-196975] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:28:05.580 [DEBUG] [Thread-196977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:28:16.274 [DEBUG] [Thread-196978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:28:20.640 [DEBUG] [Thread-196979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:28:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:28:22.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:28:22.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:28:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 27, 52), 0.36904, 97.5146, 0.0, 10.4112, 11.2617, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:28:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:27:52
2026-04-12T22:28:23.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:28:24.023 [DEBUG] [Thread-196980] [transport.py] [_log()] starting thread (client mode): 0xae5a51e0
2026-04-12T22:28:24.023 [DEBUG] [Thread-196980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:28:24.043 [DEBUG] [Thread-196980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:28:24.044 [INFO] [Thread-196980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] client lang: <none>
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] server lang: <none>
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] kex follows: False
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] Compression: none
2026-04-12T22:28:24.047 [DEBUG] [Thread-196980] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:28:24.064 [DEBUG] [Thread-196980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:28:24.064 [DEBUG] [Thread-196980] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:28:24.065 [DEBUG] [Thread-196980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:28:24.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:28:24.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:28:24.067 [DEBUG] [Thread-196980] [transport.py] [_log()] userauth is OK
2026-04-12T22:28:24.067 [DEBUG] [Thread-196980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:28:24.068 [DEBUG] [Thread-196980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:28:24.068 [DEBUG] [Thread-196980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:28:24.068 [DEBUG] [Thread-196980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:28:24.092 [INFO] [Thread-196980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:28:24.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:28:24.680 [DEBUG] [Thread-196980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:28:24.680 [DEBUG] [Thread-196980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:28:24.680 [DEBUG] [Thread-196980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:28:24.721 [DEBUG] [Thread-196980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:28:24.721 [DEBUG] [Thread-196980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:28:24.724 [DEBUG] [Thread-196980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:28:24.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:28:24.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:28:24.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:28:24.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:28:24.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:28:24.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:28:24.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:28:24.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:28:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:28:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.852535 -999.00  +11.20   5.66     93  +10.20 1 2 1 3 1     0    0 1.24 6.59 .NE.w 5.7 5.7 209.8 7.2 12.1 -22.5 11.9 -21.6 11.7 -19.3 11.9 -21.3
2026-04-12T22:28:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:28:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:28:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.852535
2026-04-12T22:28:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:28:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:28:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:28:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:28:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:28:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:27:52', tmtdew=0.36904, humidity=97.5146, cloud=0.0, wind=10.4112, temperature=11.2617, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:27:39.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:28:24.747 [DEBUG] [Thread-196980] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:28:24.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:28:24.842 [DEBUG] [Thread-196983] [transport.py] [_log()] starting thread (client mode): 0xb0f40610
2026-04-12T22:28:24.842 [DEBUG] [Thread-196983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:28:24.855 [DEBUG] [Thread-196983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:28:24.855 [INFO] [Thread-196983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] client lang: <none>
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] server lang: <none>
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] kex follows: False
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:28:24.863 [DEBUG] [Thread-196983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:28:24.864 [DEBUG] [Thread-196983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:28:24.864 [DEBUG] [Thread-196983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:28:24.864 [DEBUG] [Thread-196983] [transport.py] [_log()] Compression: none
2026-04-12T22:28:24.864 [DEBUG] [Thread-196983] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:28:24.920 [DEBUG] [Thread-196983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:28:24.920 [DEBUG] [Thread-196983] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:28:24.921 [DEBUG] [Thread-196983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:28:24.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:28:24.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:28:24.984 [DEBUG] [Thread-196983] [transport.py] [_log()] userauth is OK
2026-04-12T22:28:24.984 [DEBUG] [Thread-196983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:28:24.985 [DEBUG] [Thread-196983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:28:24.985 [DEBUG] [Thread-196983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:28:24.985 [DEBUG] [Thread-196983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:28:25.002 [INFO] [Thread-196983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:28:25.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:28:25.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:28:26.050 [DEBUG] [Thread-196983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:28:26.050 [DEBUG] [Thread-196983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:28:26.098 [DEBUG] [Thread-196983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:28:26.098 [DEBUG] [Thread-196983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:28:26.111 [DEBUG] [Thread-196983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:28:26.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:28:26.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:28:26.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:28:26.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:28:26.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:28:26.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:28:26.148 [DEBUG] [Thread-196983] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:28:33.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:28:33.034 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:28:35.679 [DEBUG] [Thread-196985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:28:50.739 [DEBUG] [Thread-196986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:28:56.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:28:56.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:28:56.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:28:57.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 28, 27), 0.23469, 98.2571, 0.0, 8.75268, 11.0971, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:28:57.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:28:27
2026-04-12T22:28:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:28:58.006 [DEBUG] [Thread-196987] [transport.py] [_log()] starting thread (client mode): 0xae50a890
2026-04-12T22:28:58.006 [DEBUG] [Thread-196987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:28:58.026 [DEBUG] [Thread-196987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:28:58.026 [INFO] [Thread-196987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:58.029 [DEBUG] [Thread-196987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] client lang: <none>
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] server lang: <none>
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] kex follows: False
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] Compression: none
2026-04-12T22:28:58.030 [DEBUG] [Thread-196987] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:28:58.049 [DEBUG] [Thread-196987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:28:58.050 [DEBUG] [Thread-196987] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:28:58.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:28:58.051 [DEBUG] [Thread-196987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:28:58.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:28:58.054 [DEBUG] [Thread-196987] [transport.py] [_log()] userauth is OK
2026-04-12T22:28:58.054 [DEBUG] [Thread-196987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:28:58.054 [DEBUG] [Thread-196987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:28:58.054 [DEBUG] [Thread-196987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:28:58.054 [DEBUG] [Thread-196987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:28:58.072 [INFO] [Thread-196987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:28:58.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:28:58.686 [DEBUG] [Thread-196987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:28:58.686 [DEBUG] [Thread-196987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:28:58.687 [DEBUG] [Thread-196987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:28:58.727 [DEBUG] [Thread-196987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:28:58.727 [DEBUG] [Thread-196987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:28:58.731 [DEBUG] [Thread-196987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:28:58.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:28:58.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:28:58.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:28:58.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:28:58.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:28:58.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:28:58.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:28:58.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:28:58.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:28:58.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.853229 -999.00  +11.20   5.69     94  +10.20 1 2 1 3 1     0    0 1.22 6.98 .NEsw 5.7 5.7 215.2 7.7 12.1 -22.5 11.9 -21.2 11.6 -19.3 12.0 -21.5
2026-04-12T22:28:58.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:28:58.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:28:58.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.853229
2026-04-12T22:28:58.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:28:58.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:28:58.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:28:58.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:28:58.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:28:58.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:28:27', tmtdew=0.23469, humidity=98.2571, cloud=0.0, wind=8.75268, temperature=11.0971, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:28:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:28:58.758 [DEBUG] [Thread-196987] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:28:58.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:28:58.854 [DEBUG] [Thread-196990] [transport.py] [_log()] starting thread (client mode): 0xb0f41b70
2026-04-12T22:28:58.854 [DEBUG] [Thread-196990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:28:58.871 [DEBUG] [Thread-196990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:28:58.871 [INFO] [Thread-196990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:28:58.879 [DEBUG] [Thread-196990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:28:58.879 [DEBUG] [Thread-196990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] client lang: <none>
2026-04-12T22:28:58.880 [DEBUG] [Thread-196990] [transport.py] [_log()] server lang: <none>
2026-04-12T22:28:58.881 [DEBUG] [Thread-196990] [transport.py] [_log()] kex follows: False
2026-04-12T22:28:58.881 [DEBUG] [Thread-196990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:28:58.881 [DEBUG] [Thread-196990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:28:58.881 [DEBUG] [Thread-196990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:28:58.881 [DEBUG] [Thread-196990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:28:58.881 [DEBUG] [Thread-196990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:28:58.881 [DEBUG] [Thread-196990] [transport.py] [_log()] Compression: none
2026-04-12T22:28:58.882 [DEBUG] [Thread-196990] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:28:58.937 [DEBUG] [Thread-196990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:28:58.938 [DEBUG] [Thread-196990] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:28:58.939 [DEBUG] [Thread-196990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:28:58.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:28:58.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:28:58.993 [DEBUG] [Thread-196990] [transport.py] [_log()] userauth is OK
2026-04-12T22:28:58.994 [DEBUG] [Thread-196990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:28:58.994 [DEBUG] [Thread-196990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:28:58.994 [DEBUG] [Thread-196990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:28:58.994 [DEBUG] [Thread-196990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:28:59.021 [INFO] [Thread-196990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:28:59.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:28:59.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:28:59.836 [DEBUG] [Thread-196990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:28:59.836 [DEBUG] [Thread-196990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:28:59.884 [DEBUG] [Thread-196990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:28:59.885 [DEBUG] [Thread-196990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:28:59.894 [DEBUG] [Thread-196990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:28:59.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:28:59.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:28:59.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:28:59.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:28:59.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:28:59.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:28:59.932 [DEBUG] [Thread-196990] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:29:05.776 [DEBUG] [Thread-196992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:29:16.336 [DEBUG] [Thread-196993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:29:20.828 [DEBUG] [Thread-196994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:29:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:29:29.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:29:29.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:29:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 29, 3), 0.234585, 98.2571, 0.0, 8.68212, 11.0473, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:29:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:29:03
2026-04-12T22:29:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:29:31.745 [DEBUG] [Thread-196995] [transport.py] [_log()] starting thread (client mode): 0xa7958310
2026-04-12T22:29:31.745 [DEBUG] [Thread-196995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:29:31.767 [DEBUG] [Thread-196995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:29:31.767 [INFO] [Thread-196995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] client lang: <none>
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] server lang: <none>
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] kex follows: False
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] Compression: none
2026-04-12T22:29:31.771 [DEBUG] [Thread-196995] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:29:31.786 [DEBUG] [Thread-196995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:29:31.786 [DEBUG] [Thread-196995] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:29:31.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:29:31.787 [DEBUG] [Thread-196995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:29:31.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:29:31.790 [DEBUG] [Thread-196995] [transport.py] [_log()] userauth is OK
2026-04-12T22:29:31.790 [DEBUG] [Thread-196995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:29:31.790 [DEBUG] [Thread-196995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:29:31.790 [DEBUG] [Thread-196995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:29:31.790 [DEBUG] [Thread-196995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:29:31.813 [INFO] [Thread-196995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:29:31.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:29:32.393 [DEBUG] [Thread-196995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:29:32.393 [DEBUG] [Thread-196995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:29:32.394 [DEBUG] [Thread-196995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:29:32.434 [DEBUG] [Thread-196995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:29:32.434 [DEBUG] [Thread-196995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:29:32.438 [DEBUG] [Thread-196995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:29:32.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:29:32.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:29:32.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:29:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:29:32.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:29:32.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:29:32.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:29:32.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:29:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:29:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.853576 -999.00  +11.10   4.88     94  +10.20 1 2 1 3 1     0    0 1.20 6.01 .NEsw 4.9 4.9 224.3 7.6 12.1 -22.1 11.9 -20.7 11.6 -19.0 11.9 -20.9
2026-04-12T22:29:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:29:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:29:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.853576
2026-04-12T22:29:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:29:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:29:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:29:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:29:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:29:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:29:03', tmtdew=0.234585, humidity=98.2571, cloud=0.0, wind=8.68212, temperature=11.0473, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:29:08.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:29:32.466 [DEBUG] [Thread-196995] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:29:32.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:29:32.560 [DEBUG] [Thread-196998] [transport.py] [_log()] starting thread (client mode): 0xb0f6f430
2026-04-12T22:29:32.560 [DEBUG] [Thread-196998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:29:32.579 [DEBUG] [Thread-196998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:29:32.579 [INFO] [Thread-196998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:29:32.587 [DEBUG] [Thread-196998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:29:32.587 [DEBUG] [Thread-196998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:29:32.587 [DEBUG] [Thread-196998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:29:32.587 [DEBUG] [Thread-196998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] client lang: <none>
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] server lang: <none>
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] kex follows: False
2026-04-12T22:29:32.588 [DEBUG] [Thread-196998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:29:32.589 [DEBUG] [Thread-196998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:29:32.589 [DEBUG] [Thread-196998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:29:32.589 [DEBUG] [Thread-196998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:29:32.589 [DEBUG] [Thread-196998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:29:32.589 [DEBUG] [Thread-196998] [transport.py] [_log()] Compression: none
2026-04-12T22:29:32.589 [DEBUG] [Thread-196998] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:29:32.648 [DEBUG] [Thread-196998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:29:32.649 [DEBUG] [Thread-196998] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:29:32.650 [DEBUG] [Thread-196998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:29:32.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:29:32.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:29:32.704 [DEBUG] [Thread-196998] [transport.py] [_log()] userauth is OK
2026-04-12T22:29:32.705 [DEBUG] [Thread-196998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:29:32.705 [DEBUG] [Thread-196998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:29:32.705 [DEBUG] [Thread-196998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:29:32.705 [DEBUG] [Thread-196998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:29:32.726 [INFO] [Thread-196998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:29:32.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:29:32.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:29:33.241 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:29:33.243 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:29:33.544 [DEBUG] [Thread-196998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:29:33.544 [DEBUG] [Thread-196998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:29:33.596 [DEBUG] [Thread-196998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:29:33.596 [DEBUG] [Thread-196998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:29:33.609 [DEBUG] [Thread-196998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:29:33.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:29:33.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:29:33.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:29:33.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:29:33.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:29:33.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:29:33.647 [DEBUG] [Thread-196998] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:29:35.866 [DEBUG] [Thread-197000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:29:50.915 [DEBUG] [Thread-197001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:30:03.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:30:03.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:30:03.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
2026-04-12T22:30:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 29, 38), 0.36903, 97.5138, 0.0, 9.21168, 11.1949, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:30:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:29:38
2026-04-12T22:30:05.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:30:05.540 [DEBUG] [Thread-197002] [transport.py] [_log()] starting thread (client mode): 0xae562bf0
2026-04-12T22:30:05.540 [DEBUG] [Thread-197002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:30:05.561 [DEBUG] [Thread-197002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:30:05.561 [INFO] [Thread-197002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] client lang: <none>
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] server lang: <none>
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] kex follows: False
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] Compression: none
2026-04-12T22:30:05.565 [DEBUG] [Thread-197002] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:30:05.582 [DEBUG] [Thread-197002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:30:05.583 [DEBUG] [Thread-197002] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:30:05.583 [DEBUG] [Thread-197002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:30:05.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:30:05.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:30:05.585 [DEBUG] [Thread-197002] [transport.py] [_log()] userauth is OK
2026-04-12T22:30:05.585 [DEBUG] [Thread-197002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:30:05.585 [DEBUG] [Thread-197002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:30:05.585 [DEBUG] [Thread-197002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:30:05.585 [DEBUG] [Thread-197002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:30:05.608 [INFO] [Thread-197002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:30:05.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:30:05.950 [DEBUG] [Thread-197004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:30:06.539 [DEBUG] [Thread-197002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:30:06.539 [DEBUG] [Thread-197002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:30:06.540 [DEBUG] [Thread-197002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:30:06.580 [DEBUG] [Thread-197002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:30:06.580 [DEBUG] [Thread-197002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:30:06.584 [DEBUG] [Thread-197002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:30:06.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:30:06.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:30:06.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:30:06.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:30:06.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:30:06.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:30:06.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:30:06.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:30:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:30:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.853923 -999.00  +11.10   5.15     94  +10.20 1 2 1 3 1     0    0 1.18 5.82 .ne.. 5.2 5.2 213.8 8.0 12.1 -22.1 11.9 -21.0 11.7 -19.0 11.9 -21.2
2026-04-12T22:30:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:30:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:30:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.853923
2026-04-12T22:30:06.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:30:06.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:30:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:30:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:30:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:30:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:29:38', tmtdew=0.36903, humidity=97.5138, cloud=0.0, wind=9.21168, temperature=11.1949, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:29:38.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:30:06.611 [DEBUG] [Thread-197002] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:30:06.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:30:06.703 [DEBUG] [Thread-197006] [transport.py] [_log()] starting thread (client mode): 0xae562260
2026-04-12T22:30:06.703 [DEBUG] [Thread-197006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:30:06.718 [DEBUG] [Thread-197006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:30:06.718 [INFO] [Thread-197006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:30:06.726 [DEBUG] [Thread-197006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:30:06.726 [DEBUG] [Thread-197006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:30:06.726 [DEBUG] [Thread-197006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:30:06.726 [DEBUG] [Thread-197006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:06.726 [DEBUG] [Thread-197006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] client lang: <none>
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] server lang: <none>
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] kex follows: False
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] Compression: none
2026-04-12T22:30:06.727 [DEBUG] [Thread-197006] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:30:06.788 [DEBUG] [Thread-197006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:30:06.789 [DEBUG] [Thread-197006] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:30:06.789 [DEBUG] [Thread-197006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:30:06.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:30:06.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:30:06.846 [DEBUG] [Thread-197006] [transport.py] [_log()] userauth is OK
2026-04-12T22:30:06.847 [DEBUG] [Thread-197006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:30:06.847 [DEBUG] [Thread-197006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:30:06.847 [DEBUG] [Thread-197006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:30:06.847 [DEBUG] [Thread-197006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:30:06.869 [INFO] [Thread-197006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:30:06.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:30:06.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:30:07.693 [DEBUG] [Thread-197006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:30:07.693 [DEBUG] [Thread-197006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:30:07.741 [DEBUG] [Thread-197006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:30:07.742 [DEBUG] [Thread-197006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:30:07.750 [DEBUG] [Thread-197006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:30:07.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:30:07.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:30:07.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:30:07.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:30:07.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:30:07.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:30:07.784 [DEBUG] [Thread-197006] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:30:16.405 [DEBUG] [Thread-197008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:30:20.985 [DEBUG] [Thread-197009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:30:33.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:30:33.450 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:30:36.050 [DEBUG] [Thread-197010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:30:37.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:30:37.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:30:37.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:30:39.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 30, 13), 0.237035, 98.2403, 0.0, 9.26424, 10.9809, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:30:39.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:30:13
2026-04-12T22:30:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:30:39.684 [DEBUG] [Thread-197011] [transport.py] [_log()] starting thread (client mode): 0xae5a5c90
2026-04-12T22:30:39.684 [DEBUG] [Thread-197011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:30:39.706 [DEBUG] [Thread-197011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:30:39.706 [INFO] [Thread-197011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:30:39.709 [DEBUG] [Thread-197011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:30:39.709 [DEBUG] [Thread-197011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:30:39.709 [DEBUG] [Thread-197011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:30:39.709 [DEBUG] [Thread-197011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] client lang: <none>
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] server lang: <none>
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] kex follows: False
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] Compression: none
2026-04-12T22:30:39.710 [DEBUG] [Thread-197011] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:30:39.728 [DEBUG] [Thread-197011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:30:39.728 [DEBUG] [Thread-197011] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:30:39.729 [DEBUG] [Thread-197011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:30:39.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:30:39.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:30:39.731 [DEBUG] [Thread-197011] [transport.py] [_log()] userauth is OK
2026-04-12T22:30:39.731 [DEBUG] [Thread-197011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:30:39.731 [DEBUG] [Thread-197011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:30:39.732 [DEBUG] [Thread-197011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:30:39.732 [DEBUG] [Thread-197011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:30:39.754 [INFO] [Thread-197011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:30:39.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:30:40.380 [DEBUG] [Thread-197011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:30:40.381 [DEBUG] [Thread-197011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:30:40.381 [DEBUG] [Thread-197011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:30:40.422 [DEBUG] [Thread-197011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:30:40.422 [DEBUG] [Thread-197011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:30:40.426 [DEBUG] [Thread-197011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:30:40.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:30:40.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:30:40.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:30:40.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:30:40.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:30:40.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:30:40.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:30:40.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:30:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:30:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.854271 -999.00  +11.10   5.64     94  +10.20 1 2 1 3 1     0    0 1.18 6.20 .NEsw 5.6 5.6 205.4 7.0 12.0 -22.3 11.9 -21.1 11.6 -19.3 11.9 -21.1
2026-04-12T22:30:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:30:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:30:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.854271
2026-04-12T22:30:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:30:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:30:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:30:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:30:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:30:40.454 [DEBUG] [Thread-197011] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:30:40.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:30:13', tmtdew=0.237035, humidity=98.2403, cloud=0.0, wind=9.26424, temperature=10.9809, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:30:09.014', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:30:40.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:30:40.546 [DEBUG] [Thread-197014] [transport.py] [_log()] starting thread (client mode): 0xae563520
2026-04-12T22:30:40.546 [DEBUG] [Thread-197014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:30:40.561 [DEBUG] [Thread-197014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:30:40.561 [INFO] [Thread-197014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:30:40.569 [DEBUG] [Thread-197014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] client lang: <none>
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] server lang: <none>
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] kex follows: False
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] Compression: none
2026-04-12T22:30:40.570 [DEBUG] [Thread-197014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:30:40.627 [DEBUG] [Thread-197014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:30:40.628 [DEBUG] [Thread-197014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:30:40.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:30:40.629 [DEBUG] [Thread-197014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:30:40.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:30:40.684 [DEBUG] [Thread-197014] [transport.py] [_log()] userauth is OK
2026-04-12T22:30:40.684 [DEBUG] [Thread-197014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:30:40.684 [DEBUG] [Thread-197014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:30:40.684 [DEBUG] [Thread-197014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:30:40.684 [DEBUG] [Thread-197014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:30:40.703 [INFO] [Thread-197014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:30:40.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:30:40.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:30:41.524 [DEBUG] [Thread-197014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:30:41.525 [DEBUG] [Thread-197014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:30:41.573 [DEBUG] [Thread-197014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:30:41.573 [DEBUG] [Thread-197014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:30:41.583 [DEBUG] [Thread-197014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:30:41.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:30:41.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:30:41.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:30:41.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:30:41.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:30:41.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:30:41.620 [DEBUG] [Thread-197014] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:30:51.088 [DEBUG] [Thread-197016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:31:06.140 [DEBUG] [Thread-197017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:31:11.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:31:11.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:31:11.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:31:12.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 30, 49), 0.38422, 97.4148, 0.0, 11.9988, 11.1621, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:31:12.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:30:49
2026-04-12T22:31:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:31:13.437 [DEBUG] [Thread-197018] [transport.py] [_log()] starting thread (client mode): 0xae5e6230
2026-04-12T22:31:13.437 [DEBUG] [Thread-197018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:31:13.456 [DEBUG] [Thread-197018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:31:13.456 [INFO] [Thread-197018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:31:13.459 [DEBUG] [Thread-197018] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:31:13.459 [DEBUG] [Thread-197018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:31:13.459 [DEBUG] [Thread-197018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] client lang: <none>
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] server lang: <none>
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] kex follows: False
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] Compression: none
2026-04-12T22:31:13.460 [DEBUG] [Thread-197018] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:31:13.478 [DEBUG] [Thread-197018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:31:13.478 [DEBUG] [Thread-197018] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:31:13.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:31:13.479 [DEBUG] [Thread-197018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:31:13.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:31:13.482 [DEBUG] [Thread-197018] [transport.py] [_log()] userauth is OK
2026-04-12T22:31:13.482 [DEBUG] [Thread-197018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:31:13.482 [DEBUG] [Thread-197018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:31:13.482 [DEBUG] [Thread-197018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:31:13.482 [DEBUG] [Thread-197018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:31:13.501 [INFO] [Thread-197018] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:31:13.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:31:14.144 [DEBUG] [Thread-197018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:31:14.144 [DEBUG] [Thread-197018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:31:14.145 [DEBUG] [Thread-197018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:31:14.185 [DEBUG] [Thread-197018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:31:14.185 [DEBUG] [Thread-197018] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:31:14.189 [DEBUG] [Thread-197018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:31:14.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:31:14.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:31:14.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:31:14.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:31:14.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:31:14.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:31:14.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:31:14.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:31:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:31:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.854618 -999.00  +11.10   4.98     94  +10.20 1 2 1 3 1     0    0 1.17 6.02 .NEsw 5.0 5.0 215.8 6.0 12.1 -22.3 11.9 -21.3 11.7 -19.2 11.9 -21.3
2026-04-12T22:31:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:31:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:31:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.854618
2026-04-12T22:31:14.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:31:14.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:31:14.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:31:14.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:31:14.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:31:14.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:30:49', tmtdew=0.38422, humidity=97.4148, cloud=0.0, wind=11.9988, temperature=11.1621, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:30:38.995', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:31:14.216 [DEBUG] [Thread-197018] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:31:14.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:31:14.309 [DEBUG] [Thread-197021] [transport.py] [_log()] starting thread (client mode): 0xb0f6f4f0
2026-04-12T22:31:14.309 [DEBUG] [Thread-197021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:31:14.324 [DEBUG] [Thread-197021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:31:14.324 [INFO] [Thread-197021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:31:14.331 [DEBUG] [Thread-197021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:31:14.332 [DEBUG] [Thread-197021] [transport.py] [_log()] client lang: <none>
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] server lang: <none>
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] kex follows: False
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] Compression: none
2026-04-12T22:31:14.333 [DEBUG] [Thread-197021] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:31:14.392 [DEBUG] [Thread-197021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:31:14.392 [DEBUG] [Thread-197021] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:31:14.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:31:14.393 [DEBUG] [Thread-197021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:31:14.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:31:14.451 [DEBUG] [Thread-197021] [transport.py] [_log()] userauth is OK
2026-04-12T22:31:14.451 [DEBUG] [Thread-197021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:31:14.451 [DEBUG] [Thread-197021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:31:14.452 [DEBUG] [Thread-197021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:31:14.452 [DEBUG] [Thread-197021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:31:14.470 [INFO] [Thread-197021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:31:14.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:31:14.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:31:15.296 [DEBUG] [Thread-197021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:31:15.296 [DEBUG] [Thread-197021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:31:15.344 [DEBUG] [Thread-197021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:31:15.344 [DEBUG] [Thread-197021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:31:15.352 [DEBUG] [Thread-197021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:31:15.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:31:15.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:31:15.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:31:15.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:31:15.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:31:15.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:31:15.389 [DEBUG] [Thread-197021] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:31:16.461 [DEBUG] [Thread-197023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:31:21.174 [DEBUG] [Thread-197024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:31:33.655 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:31:33.656 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:31:36.235 [DEBUG] [Thread-197025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:31:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:31:45.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:31:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:31:46.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 31, 24), 0.23948, 98.224, 0.0, 9.56412, 10.9479, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:31:46.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:31:24
2026-04-12T22:31:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:31:47.229 [DEBUG] [Thread-197026] [transport.py] [_log()] starting thread (client mode): 0xae5e7100
2026-04-12T22:31:47.229 [DEBUG] [Thread-197026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:31:47.249 [DEBUG] [Thread-197026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:31:47.249 [INFO] [Thread-197026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:31:47.252 [DEBUG] [Thread-197026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:31:47.252 [DEBUG] [Thread-197026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] client lang: <none>
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] server lang: <none>
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] kex follows: False
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:31:47.253 [DEBUG] [Thread-197026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:31:47.254 [DEBUG] [Thread-197026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:31:47.254 [DEBUG] [Thread-197026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:31:47.254 [DEBUG] [Thread-197026] [transport.py] [_log()] Compression: none
2026-04-12T22:31:47.254 [DEBUG] [Thread-197026] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:31:47.273 [DEBUG] [Thread-197026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:31:47.273 [DEBUG] [Thread-197026] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:31:47.274 [DEBUG] [Thread-197026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:31:47.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:31:47.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:31:47.276 [DEBUG] [Thread-197026] [transport.py] [_log()] userauth is OK
2026-04-12T22:31:47.277 [DEBUG] [Thread-197026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:31:47.277 [DEBUG] [Thread-197026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:31:47.277 [DEBUG] [Thread-197026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:31:47.277 [DEBUG] [Thread-197026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:31:47.311 [INFO] [Thread-197026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:31:47.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:31:47.966 [DEBUG] [Thread-197026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:31:47.966 [DEBUG] [Thread-197026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:31:47.966 [DEBUG] [Thread-197026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:31:48.006 [DEBUG] [Thread-197026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:31:48.006 [DEBUG] [Thread-197026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:31:48.008 [DEBUG] [Thread-197026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:31:48.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:31:48.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:31:48.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:31:48.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:31:48.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:31:48.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:31:48.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:31:48.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:31:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:31:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.854965 -999.00  +11.10   5.98     94  +10.20 1 2 1 3 1     0    0 1.17 4.88 .NES. 6.0 6.0 204.0 7.6 12.0 -22.2 11.9 -21.2 11.6 -19.1 11.9 -21.2
2026-04-12T22:31:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:31:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:31:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.854965
2026-04-12T22:31:48.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:31:48.039 [DEBUG] [Thread-197026] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:31:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:31:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:31:48.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:31:48.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:31:48.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:31:24', tmtdew=0.23948, humidity=98.224, cloud=0.0, wind=9.56412, temperature=10.9479, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:31:08.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:31:48.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:31:48.137 [DEBUG] [Thread-197029] [transport.py] [_log()] starting thread (client mode): 0xae5a58a0
2026-04-12T22:31:48.137 [DEBUG] [Thread-197029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:31:48.151 [DEBUG] [Thread-197029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:31:48.151 [INFO] [Thread-197029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:31:48.167 [DEBUG] [Thread-197029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:31:48.167 [DEBUG] [Thread-197029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:31:48.167 [DEBUG] [Thread-197029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:31:48.167 [DEBUG] [Thread-197029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:48.167 [DEBUG] [Thread-197029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] client lang: <none>
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] server lang: <none>
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] kex follows: False
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] Compression: none
2026-04-12T22:31:48.168 [DEBUG] [Thread-197029] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:31:48.221 [DEBUG] [Thread-197029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:31:48.222 [DEBUG] [Thread-197029] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:31:48.222 [DEBUG] [Thread-197029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:31:48.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:31:48.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:31:48.284 [DEBUG] [Thread-197029] [transport.py] [_log()] userauth is OK
2026-04-12T22:31:48.285 [DEBUG] [Thread-197029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:31:48.285 [DEBUG] [Thread-197029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:31:48.285 [DEBUG] [Thread-197029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:31:48.285 [DEBUG] [Thread-197029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:31:48.307 [INFO] [Thread-197029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:31:48.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:31:48.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:31:49.190 [DEBUG] [Thread-197029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:31:49.190 [DEBUG] [Thread-197029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:31:49.238 [DEBUG] [Thread-197029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:31:49.239 [DEBUG] [Thread-197029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:31:49.248 [DEBUG] [Thread-197029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:31:49.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:31:49.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:31:49.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:31:49.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:31:49.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:31:49.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:31:49.281 [DEBUG] [Thread-197029] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:31:51.271 [DEBUG] [Thread-197031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:06.325 [DEBUG] [Thread-197032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:16.529 [DEBUG] [Thread-197033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:32:19.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:32:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:32:20.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 31, 24), 0.23948, 98.224, 0.0, 9.56412, 10.9479, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:32:20.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:31:24
2026-04-12T22:32:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:32:21.290 [DEBUG] [Thread-197034] [transport.py] [_log()] starting thread (client mode): 0xae5612a0
2026-04-12T22:32:21.291 [DEBUG] [Thread-197034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:32:21.310 [DEBUG] [Thread-197034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:32:21.310 [INFO] [Thread-197034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] client lang: <none>
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] server lang: <none>
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] kex follows: False
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:32:21.311 [DEBUG] [Thread-197034] [transport.py] [_log()] Compression: none
2026-04-12T22:32:21.312 [DEBUG] [Thread-197034] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:32:21.329 [DEBUG] [Thread-197034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:32:21.330 [DEBUG] [Thread-197034] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:32:21.330 [DEBUG] [Thread-197034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:32:21.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:32:21.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:32:21.332 [DEBUG] [Thread-197034] [transport.py] [_log()] userauth is OK
2026-04-12T22:32:21.333 [DEBUG] [Thread-197034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:32:21.333 [DEBUG] [Thread-197034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:32:21.333 [DEBUG] [Thread-197034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:32:21.333 [DEBUG] [Thread-197034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:32:21.356 [INFO] [Thread-197034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:32:21.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:32:21.366 [DEBUG] [Thread-197036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:21.981 [DEBUG] [Thread-197034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:32:21.981 [DEBUG] [Thread-197034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:32:21.982 [DEBUG] [Thread-197034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:32:22.022 [DEBUG] [Thread-197034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:32:22.022 [DEBUG] [Thread-197034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:32:22.025 [DEBUG] [Thread-197034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:32:22.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:32:22.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:32:22.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:32:22.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:32:22.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:32:22.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:32:22.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:32:22.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:32:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:32:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.855659 -999.00  +11.10   5.45     94  +10.20 1 2 1 3 1     0    0 1.11 3.67 .NESw 5.5 5.5 213.1 7.8 12.0 -22.3 11.9 -21.2 11.6 -19.2 11.9 -21.3
2026-04-12T22:32:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:32:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:32:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.855659
2026-04-12T22:32:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:32:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:32:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:32:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:32:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:32:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:31:24', tmtdew=0.23948, humidity=98.224, cloud=0.0, wind=9.56412, temperature=10.9479, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:32:08.938', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852500000000001, 3.0212499999999993, 3.26, nan, nan, nan, nan, nan, 2.8674999999999997, nan, nan, 3.1144999999999987, nan, nan, nan, nan, 2.2915, 2.0017499999999995, 1.5785, 0.9915000000000003, 1.2055000000000007, 2.0330000000000013, nan, nan], zp_timestamp='2026-04-12T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:32:22.052 [DEBUG] [Thread-197034] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:32:22.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:32:22.145 [DEBUG] [Thread-197038] [transport.py] [_log()] starting thread (client mode): 0xa7948a90
2026-04-12T22:32:22.145 [DEBUG] [Thread-197038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:32:22.160 [DEBUG] [Thread-197038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:32:22.160 [INFO] [Thread-197038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:32:22.167 [DEBUG] [Thread-197038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] client lang: <none>
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] server lang: <none>
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] kex follows: False
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:32:22.168 [DEBUG] [Thread-197038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:32:22.169 [DEBUG] [Thread-197038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:32:22.169 [DEBUG] [Thread-197038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:32:22.169 [DEBUG] [Thread-197038] [transport.py] [_log()] Compression: none
2026-04-12T22:32:22.169 [DEBUG] [Thread-197038] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:32:22.226 [DEBUG] [Thread-197038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:32:22.227 [DEBUG] [Thread-197038] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:32:22.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:32:22.228 [DEBUG] [Thread-197038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:32:22.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:32:22.282 [DEBUG] [Thread-197038] [transport.py] [_log()] userauth is OK
2026-04-12T22:32:22.282 [DEBUG] [Thread-197038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:32:22.283 [DEBUG] [Thread-197038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:32:22.283 [DEBUG] [Thread-197038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:32:22.283 [DEBUG] [Thread-197038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:32:22.301 [INFO] [Thread-197038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:32:22.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:32:22.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:32:23.128 [DEBUG] [Thread-197038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:32:23.129 [DEBUG] [Thread-197038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:32:23.177 [DEBUG] [Thread-197038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:32:23.177 [DEBUG] [Thread-197038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:32:23.186 [DEBUG] [Thread-197038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:32:23.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:32:23.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:32:23.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:32:23.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:32:23.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:32:23.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:32:23.223 [DEBUG] [Thread-197038] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:32:33.873 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:33.874 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:36.406 [DEBUG] [Thread-197040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:51.460 [DEBUG] [Thread-197041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:32:53.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:32:53.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:32:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:32:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 32, 35), 0.37901, 97.4476, 0.0, 9.7056, 11.0955, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:32:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:32:35
2026-04-12T22:32:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:32:55.079 [DEBUG] [Thread-197042] [transport.py] [_log()] starting thread (client mode): 0xae5e6c50
2026-04-12T22:32:55.080 [DEBUG] [Thread-197042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:32:55.093 [DEBUG] [Thread-197042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:32:55.093 [INFO] [Thread-197042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:55.096 [DEBUG] [Thread-197042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] client lang: <none>
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] server lang: <none>
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] kex follows: False
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] Compression: none
2026-04-12T22:32:55.097 [DEBUG] [Thread-197042] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:32:55.119 [DEBUG] [Thread-197042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:32:55.120 [DEBUG] [Thread-197042] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:32:55.120 [DEBUG] [Thread-197042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:32:55.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:32:55.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:32:55.122 [DEBUG] [Thread-197042] [transport.py] [_log()] userauth is OK
2026-04-12T22:32:55.122 [DEBUG] [Thread-197042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:32:55.122 [DEBUG] [Thread-197042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:32:55.122 [DEBUG] [Thread-197042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:32:55.122 [DEBUG] [Thread-197042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:32:55.145 [INFO] [Thread-197042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:32:55.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:32:55.791 [DEBUG] [Thread-197042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:32:55.791 [DEBUG] [Thread-197042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:32:55.791 [DEBUG] [Thread-197042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:32:55.832 [DEBUG] [Thread-197042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:32:55.833 [DEBUG] [Thread-197042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:32:55.836 [DEBUG] [Thread-197042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:32:55.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:32:55.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:32:55.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:32:55.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:32:55.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:32:55.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:32:55.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:32:55.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:32:55.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:32:55.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.856007 -999.00  +11.10   4.18     94  +10.20 1 2 1 3 1     0    0 1.09 2.79 .NESw 4.2 4.2 191.0 7.3 12.0 -22.2 11.9 -21.2 11.6 -19.2 11.9 -21.2
2026-04-12T22:32:55.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:32:55.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:32:55.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.856007
2026-04-12T22:32:55.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:32:55.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:32:55.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:32:55.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:32:55.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:32:55.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:32:35', tmtdew=0.37901, humidity=97.4476, cloud=0.0, wind=9.7056, temperature=11.0955, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:32:39.005', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8000000000000007, 2.9932499999999997, 3.4964999999999993, nan, nan, nan, nan, nan, 3.1194999999999995, nan, nan, 3.4639999999999986, 2.835749999999999, nan, nan, nan, 2.0825000000000005, 2.63825, 1.7175000000000002, 1.9850000000000003, 1.1685000000000016, 2.5710000000000006, nan, nan], zp_timestamp='2026-04-12T20:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:32:55.861 [DEBUG] [Thread-197042] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:32:55.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:32:55.958 [DEBUG] [Thread-197045] [transport.py] [_log()] starting thread (client mode): 0xa794bdc0
2026-04-12T22:32:55.958 [DEBUG] [Thread-197045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:32:55.974 [DEBUG] [Thread-197045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:32:55.974 [INFO] [Thread-197045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:32:55.981 [DEBUG] [Thread-197045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] client lang: <none>
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] server lang: <none>
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] kex follows: False
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] Compression: none
2026-04-12T22:32:55.982 [DEBUG] [Thread-197045] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:32:56.042 [DEBUG] [Thread-197045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:32:56.043 [DEBUG] [Thread-197045] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:32:56.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:32:56.044 [DEBUG] [Thread-197045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:32:56.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:32:56.097 [DEBUG] [Thread-197045] [transport.py] [_log()] userauth is OK
2026-04-12T22:32:56.097 [DEBUG] [Thread-197045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:32:56.097 [DEBUG] [Thread-197045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:32:56.097 [DEBUG] [Thread-197045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:32:56.097 [DEBUG] [Thread-197045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:32:56.111 [INFO] [Thread-197045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:32:56.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:32:56.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:32:56.976 [DEBUG] [Thread-197045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:32:56.977 [DEBUG] [Thread-197045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:32:57.025 [DEBUG] [Thread-197045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:32:57.025 [DEBUG] [Thread-197045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:32:57.034 [DEBUG] [Thread-197045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:32:57.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:32:57.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:32:57.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:32:57.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:32:57.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:32:57.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:32:57.071 [DEBUG] [Thread-197045] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:33:06.497 [DEBUG] [Thread-197047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:33:16.596 [DEBUG] [Thread-197048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:33:21.553 [DEBUG] [Thread-197049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:33:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:33:27.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:33:27.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:33:28.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 33, 11), 0.234425, 98.2572, 0.0, 8.15292, 10.9811, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:33:28.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:33:11
2026-04-12T22:33:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:33:28.876 [DEBUG] [Thread-197050] [transport.py] [_log()] starting thread (client mode): 0xae5e5d50
2026-04-12T22:33:28.876 [DEBUG] [Thread-197050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:33:28.895 [DEBUG] [Thread-197050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:33:28.895 [INFO] [Thread-197050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] client lang: <none>
2026-04-12T22:33:28.896 [DEBUG] [Thread-197050] [transport.py] [_log()] server lang: <none>
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] kex follows: False
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] Compression: none
2026-04-12T22:33:28.897 [DEBUG] [Thread-197050] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:33:28.913 [DEBUG] [Thread-197050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:33:28.914 [DEBUG] [Thread-197050] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:33:28.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:33:28.915 [DEBUG] [Thread-197050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:33:28.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:33:28.917 [DEBUG] [Thread-197050] [transport.py] [_log()] userauth is OK
2026-04-12T22:33:28.917 [DEBUG] [Thread-197050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:33:28.917 [DEBUG] [Thread-197050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:33:28.917 [DEBUG] [Thread-197050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:33:28.917 [DEBUG] [Thread-197050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:33:28.935 [INFO] [Thread-197050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:33:28.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:33:29.556 [DEBUG] [Thread-197050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:33:29.556 [DEBUG] [Thread-197050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:33:29.556 [DEBUG] [Thread-197050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:33:29.597 [DEBUG] [Thread-197050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:33:29.597 [DEBUG] [Thread-197050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:33:29.600 [DEBUG] [Thread-197050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:33:29.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:33:29.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:33:29.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:33:29.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:33:29.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:33:29.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:33:29.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:33:29.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:33:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:33:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.856354 -999.00  +11.10   4.47     94  +10.20 1 2 1 3 1     0    0 1.05 1.87 .NEs. 4.5 4.5 210.0 7.5 12.0 -22.2 11.9 -21.2 11.6 -19.2 11.9 -21.2
2026-04-12T22:33:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:33:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:33:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.856354
2026-04-12T22:33:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:33:29.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:33:29.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:33:29.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:33:29.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:33:29.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:33:11', tmtdew=0.234425, humidity=98.2572, cloud=0.0, wind=8.15292, temperature=10.9811, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:33:08.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8000000000000007, 2.9932499999999997, 3.4964999999999993, nan, nan, nan, nan, nan, 3.1194999999999995, nan, nan, 3.4639999999999986, 2.835749999999999, nan, nan, nan, 2.0825000000000005, 2.63825, 1.7175000000000002, 1.9850000000000003, 1.1685000000000016, 2.5710000000000006, nan, nan], zp_timestamp='2026-04-12T20:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:33:29.628 [DEBUG] [Thread-197050] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:33:29.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:33:29.721 [DEBUG] [Thread-197053] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1c0
2026-04-12T22:33:29.721 [DEBUG] [Thread-197053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:33:29.736 [DEBUG] [Thread-197053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:33:29.736 [INFO] [Thread-197053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:33:29.743 [DEBUG] [Thread-197053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:33:29.743 [DEBUG] [Thread-197053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:33:29.743 [DEBUG] [Thread-197053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] client lang: <none>
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] server lang: <none>
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] kex follows: False
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] Compression: none
2026-04-12T22:33:29.744 [DEBUG] [Thread-197053] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:33:29.803 [DEBUG] [Thread-197053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:33:29.803 [DEBUG] [Thread-197053] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:33:29.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:33:29.804 [DEBUG] [Thread-197053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:33:29.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:33:29.863 [DEBUG] [Thread-197053] [transport.py] [_log()] userauth is OK
2026-04-12T22:33:29.864 [DEBUG] [Thread-197053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:33:29.864 [DEBUG] [Thread-197053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:33:29.864 [DEBUG] [Thread-197053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:33:29.864 [DEBUG] [Thread-197053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:33:29.882 [INFO] [Thread-197053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:33:29.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:33:29.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:33:30.722 [DEBUG] [Thread-197053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:33:30.723 [DEBUG] [Thread-197053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:33:30.770 [DEBUG] [Thread-197053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:33:30.770 [DEBUG] [Thread-197053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:33:30.780 [DEBUG] [Thread-197053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:33:30.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:33:30.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:33:30.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:33:30.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:33:30.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:33:30.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:33:30.815 [DEBUG] [Thread-197053] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:33:34.079 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:33:34.080 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:33:36.592 [DEBUG] [Thread-197055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:33:51.643 [DEBUG] [Thread-197056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:34:00.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:34:00.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:34:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:34:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 33, 46), 0.35883, 97.5808, 0.0, 10.4112, 11.2616, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:34:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:33:46
2026-04-12T22:34:02.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:34:02.587 [DEBUG] [Thread-197057] [transport.py] [_log()] starting thread (client mode): 0xae5e4280
2026-04-12T22:34:02.587 [DEBUG] [Thread-197057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:34:02.602 [DEBUG] [Thread-197057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:34:02.602 [INFO] [Thread-197057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:34:02.605 [DEBUG] [Thread-197057] [transport.py] [_log()] client lang: <none>
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] server lang: <none>
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] kex follows: False
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] Compression: none
2026-04-12T22:34:02.606 [DEBUG] [Thread-197057] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:34:02.623 [DEBUG] [Thread-197057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:34:02.624 [DEBUG] [Thread-197057] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:34:02.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:34:02.625 [DEBUG] [Thread-197057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:34:02.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:34:02.627 [DEBUG] [Thread-197057] [transport.py] [_log()] userauth is OK
2026-04-12T22:34:02.627 [DEBUG] [Thread-197057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:34:02.627 [DEBUG] [Thread-197057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:34:02.627 [DEBUG] [Thread-197057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:34:02.627 [DEBUG] [Thread-197057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:34:02.652 [INFO] [Thread-197057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:34:02.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:34:03.231 [DEBUG] [Thread-197057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:34:03.232 [DEBUG] [Thread-197057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:34:03.232 [DEBUG] [Thread-197057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:34:03.271 [DEBUG] [Thread-197057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:34:03.272 [DEBUG] [Thread-197057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:34:03.273 [DEBUG] [Thread-197057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:34:03.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:34:03.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:34:03.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:34:03.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:34:03.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:34:03.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:34:03.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.856701 -999.00  +11.10   5.76     94  +10.20 1 2 1 3 1     0    0 1.00 0.89 .nEs. 5.8 5.8 196.6 8.7 12.0 -22.0 11.9 -20.8 11.6 -19.2 11.9 -21.1
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.856701
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:34:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:33:46', tmtdew=0.35883, humidity=97.5808, cloud=0.0, wind=10.4112, temperature=11.2616, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:33:38.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8000000000000007, 2.9932499999999997, 3.4964999999999993, nan, nan, nan, nan, nan, 3.1194999999999995, nan, nan, 3.4639999999999986, 2.835749999999999, nan, nan, nan, 2.0825000000000005, 2.63825, 1.7175000000000002, 1.9850000000000003, 1.1685000000000016, 2.5710000000000006, nan, nan], zp_timestamp='2026-04-12T20:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:34:03.283 [DEBUG] [Thread-197057] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:34:03.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:34:03.364 [DEBUG] [Thread-197060] [transport.py] [_log()] starting thread (client mode): 0xb0f40cd0
2026-04-12T22:34:03.364 [DEBUG] [Thread-197060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:34:03.379 [DEBUG] [Thread-197060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:34:03.379 [INFO] [Thread-197060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] client lang: <none>
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] server lang: <none>
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] kex follows: False
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] Compression: none
2026-04-12T22:34:03.387 [DEBUG] [Thread-197060] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:34:03.448 [DEBUG] [Thread-197060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:34:03.449 [DEBUG] [Thread-197060] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:34:03.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:34:03.450 [DEBUG] [Thread-197060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:34:03.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:34:03.505 [DEBUG] [Thread-197060] [transport.py] [_log()] userauth is OK
2026-04-12T22:34:03.505 [DEBUG] [Thread-197060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:34:03.505 [DEBUG] [Thread-197060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:34:03.505 [DEBUG] [Thread-197060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:34:03.505 [DEBUG] [Thread-197060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:34:03.524 [INFO] [Thread-197060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:34:03.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:34:03.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:34:04.370 [DEBUG] [Thread-197060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:34:04.370 [DEBUG] [Thread-197060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:34:04.418 [DEBUG] [Thread-197060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:34:04.418 [DEBUG] [Thread-197060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:34:04.428 [DEBUG] [Thread-197060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:34:04.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:34:04.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:34:04.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:34:04.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:34:04.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:34:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:34:04.465 [DEBUG] [Thread-197060] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:34:06.677 [DEBUG] [Thread-197062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:34:16.653 [DEBUG] [Thread-197063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:34:21.729 [DEBUG] [Thread-197064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:34:34.287 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:34:34.288 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:34:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:34:34.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:34:34.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:34:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 34, 22), 0.229415, 98.2902, 0.0, 8.982, 10.9641, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:34:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:34:22
2026-04-12T22:34:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:34:36.304 [DEBUG] [Thread-197065] [transport.py] [_log()] starting thread (client mode): 0xae5e68c0
2026-04-12T22:34:36.304 [DEBUG] [Thread-197065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:34:36.324 [DEBUG] [Thread-197065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:34:36.324 [INFO] [Thread-197065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:34:36.327 [DEBUG] [Thread-197065] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:34:36.327 [DEBUG] [Thread-197065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] client lang: <none>
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] server lang: <none>
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] kex follows: False
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:34:36.328 [DEBUG] [Thread-197065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:34:36.329 [DEBUG] [Thread-197065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:34:36.329 [DEBUG] [Thread-197065] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:34:36.329 [DEBUG] [Thread-197065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:34:36.329 [DEBUG] [Thread-197065] [transport.py] [_log()] Compression: none
2026-04-12T22:34:36.329 [DEBUG] [Thread-197065] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:34:36.346 [DEBUG] [Thread-197065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:34:36.347 [DEBUG] [Thread-197065] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:34:36.347 [DEBUG] [Thread-197065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:34:36.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:34:36.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:34:36.349 [DEBUG] [Thread-197065] [transport.py] [_log()] userauth is OK
2026-04-12T22:34:36.349 [DEBUG] [Thread-197065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:34:36.349 [DEBUG] [Thread-197065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:34:36.350 [DEBUG] [Thread-197065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:34:36.350 [DEBUG] [Thread-197065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:34:36.385 [INFO] [Thread-197065] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:34:36.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:34:36.765 [DEBUG] [Thread-197067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:34:37.131 [DEBUG] [Thread-197065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:34:37.131 [DEBUG] [Thread-197065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:34:37.131 [DEBUG] [Thread-197065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:34:37.172 [DEBUG] [Thread-197065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:34:37.172 [DEBUG] [Thread-197065] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:34:37.175 [DEBUG] [Thread-197065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:34:37.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:34:37.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:34:37.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:34:37.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:34:37.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:34:37.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:34:37.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:34:37.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:34:37.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:34:37.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.857048 -999.00  +11.10   4.74     94  +10.20 1 2 1 3 1     0    0 0.98 -0.16 .nEs. 4.7 4.7 216.2 6.7 12.0 -22.3 11.9 -21.2 11.6 -19.2 11.8 -21.3
2026-04-12T22:34:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:34:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:34:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.857048
2026-04-12T22:34:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:34:37.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:34:37.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:34:37.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:34:37.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:34:37.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:34:22', tmtdew=0.229415, humidity=98.2902, cloud=0.0, wind=8.982, temperature=10.9641, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:34:08.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8000000000000007, 2.9932499999999997, 3.4964999999999993, nan, nan, nan, nan, nan, 3.1194999999999995, nan, nan, 3.4639999999999986, 2.835749999999999, nan, nan, nan, 2.0825000000000005, 2.63825, 1.7175000000000002, 1.9850000000000003, 1.1685000000000016, 2.5710000000000006, nan, nan], zp_timestamp='2026-04-12T20:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:34:37.203 [DEBUG] [Thread-197065] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:34:37.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:34:37.297 [DEBUG] [Thread-197069] [transport.py] [_log()] starting thread (client mode): 0xa794bf40
2026-04-12T22:34:37.297 [DEBUG] [Thread-197069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:34:37.311 [DEBUG] [Thread-197069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:34:37.311 [INFO] [Thread-197069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] client lang: <none>
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] server lang: <none>
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] kex follows: False
2026-04-12T22:34:37.319 [DEBUG] [Thread-197069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:34:37.320 [DEBUG] [Thread-197069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:34:37.320 [DEBUG] [Thread-197069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:34:37.320 [DEBUG] [Thread-197069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:34:37.320 [DEBUG] [Thread-197069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:34:37.320 [DEBUG] [Thread-197069] [transport.py] [_log()] Compression: none
2026-04-12T22:34:37.320 [DEBUG] [Thread-197069] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:34:37.378 [DEBUG] [Thread-197069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:34:37.378 [DEBUG] [Thread-197069] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:34:37.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:34:37.380 [DEBUG] [Thread-197069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:34:37.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:34:37.434 [DEBUG] [Thread-197069] [transport.py] [_log()] userauth is OK
2026-04-12T22:34:37.434 [DEBUG] [Thread-197069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:34:37.435 [DEBUG] [Thread-197069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:34:37.435 [DEBUG] [Thread-197069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:34:37.435 [DEBUG] [Thread-197069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:34:37.453 [INFO] [Thread-197069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:34:37.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:34:37.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:34:38.279 [DEBUG] [Thread-197069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:34:38.279 [DEBUG] [Thread-197069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:34:38.327 [DEBUG] [Thread-197069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:34:38.327 [DEBUG] [Thread-197069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:34:38.336 [DEBUG] [Thread-197069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:34:38.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:34:38.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:34:38.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:34:38.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:34:38.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:34:38.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:34:38.373 [DEBUG] [Thread-197069] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:34:51.806 [DEBUG] [Thread-197071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:35:06.869 [DEBUG] [Thread-197072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:35:08.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:35:08.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:35:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:35:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 34, 57), 0.232005, 98.2736, 0.0, 8.59392, 10.9807, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:35:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:34:57
2026-04-12T22:35:10.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:35:10.192 [DEBUG] [Thread-197073] [transport.py] [_log()] starting thread (client mode): 0xae50acb0
2026-04-12T22:35:10.192 [DEBUG] [Thread-197073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:35:10.213 [DEBUG] [Thread-197073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:35:10.213 [INFO] [Thread-197073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:10.216 [DEBUG] [Thread-197073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] client lang: <none>
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] server lang: <none>
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] kex follows: False
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] Compression: none
2026-04-12T22:35:10.217 [DEBUG] [Thread-197073] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:35:10.237 [DEBUG] [Thread-197073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:35:10.238 [DEBUG] [Thread-197073] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:35:10.239 [DEBUG] [Thread-197073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:35:10.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:35:10.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:35:10.242 [DEBUG] [Thread-197073] [transport.py] [_log()] userauth is OK
2026-04-12T22:35:10.242 [DEBUG] [Thread-197073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:35:10.242 [DEBUG] [Thread-197073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:35:10.242 [DEBUG] [Thread-197073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:35:10.242 [DEBUG] [Thread-197073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:35:10.263 [INFO] [Thread-197073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:35:10.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:35:11.439 [DEBUG] [Thread-197073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:35:11.440 [DEBUG] [Thread-197073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:35:11.440 [DEBUG] [Thread-197073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:35:11.480 [DEBUG] [Thread-197073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:35:11.481 [DEBUG] [Thread-197073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:35:11.484 [DEBUG] [Thread-197073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:35:11.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:35:11.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:35:11.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:35:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:35:11.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:35:11.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:35:11.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:35:11.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:35:11.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:35:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.857048 -999.00  +11.10   4.74     94  +10.20 1 2 1 3 1     0    0 0.98 -0.16 .nEs. 4.7 4.7 216.2 6.7 12.0 -22.3 11.9 -21.2 11.6 -19.2 11.8 -21.3
2026-04-12T22:35:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:35:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:35:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.857048
2026-04-12T22:35:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:35:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:35:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:35:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:35:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:35:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:34:57', tmtdew=0.232005, humidity=98.2736, cloud=0.0, wind=8.59392, temperature=10.9807, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:34:08.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8000000000000007, 2.9932499999999997, 3.4964999999999993, nan, nan, nan, nan, nan, 3.1194999999999995, nan, nan, 3.4639999999999986, 2.835749999999999, nan, nan, nan, 2.0825000000000005, 2.63825, 1.7175000000000002, 1.9850000000000003, 1.1685000000000016, 2.5710000000000006, nan, nan], zp_timestamp='2026-04-12T20:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:35:11.539 [DEBUG] [Thread-197073] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:35:11.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:35:11.633 [DEBUG] [Thread-197076] [transport.py] [_log()] starting thread (client mode): 0xae50a470
2026-04-12T22:35:11.633 [DEBUG] [Thread-197076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:35:11.647 [DEBUG] [Thread-197076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:35:11.647 [INFO] [Thread-197076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:35:11.655 [DEBUG] [Thread-197076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] client lang: <none>
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] server lang: <none>
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] kex follows: False
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] Compression: none
2026-04-12T22:35:11.656 [DEBUG] [Thread-197076] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:35:11.714 [DEBUG] [Thread-197076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:35:11.715 [DEBUG] [Thread-197076] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:35:11.716 [DEBUG] [Thread-197076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:35:11.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:35:11.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:35:11.771 [DEBUG] [Thread-197076] [transport.py] [_log()] userauth is OK
2026-04-12T22:35:11.772 [DEBUG] [Thread-197076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:35:11.772 [DEBUG] [Thread-197076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:35:11.772 [DEBUG] [Thread-197076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:35:11.772 [DEBUG] [Thread-197076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:35:11.791 [INFO] [Thread-197076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:35:11.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:35:11.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:35:12.621 [DEBUG] [Thread-197076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:35:12.621 [DEBUG] [Thread-197076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:35:12.670 [DEBUG] [Thread-197076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:35:12.670 [DEBUG] [Thread-197076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:35:12.679 [DEBUG] [Thread-197076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:35:12.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:35:12.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:35:12.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:35:12.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:35:12.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:35:12.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:35:12.713 [DEBUG] [Thread-197076] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:35:16.705 [DEBUG] [Thread-197078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:35:21.910 [DEBUG] [Thread-197079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:35:34.492 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:35:34.493 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:35:36.961 [DEBUG] [Thread-197080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:35:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:35:42.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:35:42.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:35:43.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 35, 33), 0.36374, 97.5485, 0.0, 10.6934, 11.229, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:35:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:35:33
2026-04-12T22:35:44.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:35:44.536 [DEBUG] [Thread-197081] [transport.py] [_log()] starting thread (client mode): 0xb0f8fa00
2026-04-12T22:35:44.536 [DEBUG] [Thread-197081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:35:44.557 [DEBUG] [Thread-197081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:35:44.557 [INFO] [Thread-197081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] client lang: <none>
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] server lang: <none>
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] kex follows: False
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:35:44.560 [DEBUG] [Thread-197081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:35:44.561 [DEBUG] [Thread-197081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:35:44.561 [DEBUG] [Thread-197081] [transport.py] [_log()] Compression: none
2026-04-12T22:35:44.561 [DEBUG] [Thread-197081] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:35:44.578 [DEBUG] [Thread-197081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:35:44.578 [DEBUG] [Thread-197081] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:35:44.579 [DEBUG] [Thread-197081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:35:44.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:35:44.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:35:44.581 [DEBUG] [Thread-197081] [transport.py] [_log()] userauth is OK
2026-04-12T22:35:44.581 [DEBUG] [Thread-197081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:35:44.582 [DEBUG] [Thread-197081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:35:44.582 [DEBUG] [Thread-197081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:35:44.582 [DEBUG] [Thread-197081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:35:44.618 [INFO] [Thread-197081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:35:44.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:35:45.423 [DEBUG] [Thread-197081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:35:45.423 [DEBUG] [Thread-197081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:35:45.423 [DEBUG] [Thread-197081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:35:45.464 [DEBUG] [Thread-197081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:35:45.465 [DEBUG] [Thread-197081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:35:45.468 [DEBUG] [Thread-197081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:35:45.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:35:45.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:35:45.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:35:45.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:35:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:35:45.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:35:45.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:35:45.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:35:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:35:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.857395 -999.00  +11.00   5.46     94  +10.10 1 2 1 3 1     0    0 0.95 -1.21 .NEs. 5.5 5.5 212.8 8.0 12.0 -22.3 11.8 -21.2 11.6 -19.2 11.9 -21.3
2026-04-12T22:35:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:35:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:35:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.857395
2026-04-12T22:35:45.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:35:45.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:35:45.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:35:45.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:35:45.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:35:45.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:35:33', tmtdew=0.36374, humidity=97.5485, cloud=0.0, wind=10.6934, temperature=11.229, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:34:38.928', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1590000000000007, nan, 3.34, nan, nan, nan, nan, nan, 2.9364999999999997, nan, nan, 3.576999999999999, 2.8207499999999985, nan, nan, nan, 2.6625000000000005, nan, 2.0365, 2.343, 1.3270000000000017, 2.522500000000001, nan, nan], zp_timestamp='2026-04-12T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:35:45.496 [DEBUG] [Thread-197081] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:35:45.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:35:45.593 [DEBUG] [Thread-197084] [transport.py] [_log()] starting thread (client mode): 0xa794bf70
2026-04-12T22:35:45.593 [DEBUG] [Thread-197084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:35:45.607 [DEBUG] [Thread-197084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:35:45.607 [INFO] [Thread-197084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:35:45.615 [DEBUG] [Thread-197084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:35:45.615 [DEBUG] [Thread-197084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:35:45.615 [DEBUG] [Thread-197084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:35:45.615 [DEBUG] [Thread-197084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] client lang: <none>
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] server lang: <none>
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] kex follows: False
2026-04-12T22:35:45.616 [DEBUG] [Thread-197084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:35:45.617 [DEBUG] [Thread-197084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:35:45.617 [DEBUG] [Thread-197084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:35:45.617 [DEBUG] [Thread-197084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:35:45.617 [DEBUG] [Thread-197084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:35:45.617 [DEBUG] [Thread-197084] [transport.py] [_log()] Compression: none
2026-04-12T22:35:45.617 [DEBUG] [Thread-197084] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:35:45.673 [DEBUG] [Thread-197084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:35:45.673 [DEBUG] [Thread-197084] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:35:45.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:35:45.674 [DEBUG] [Thread-197084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:35:45.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:35:45.728 [DEBUG] [Thread-197084] [transport.py] [_log()] userauth is OK
2026-04-12T22:35:45.728 [DEBUG] [Thread-197084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:35:45.728 [DEBUG] [Thread-197084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:35:45.728 [DEBUG] [Thread-197084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:35:45.728 [DEBUG] [Thread-197084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:35:45.748 [INFO] [Thread-197084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:35:45.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:35:45.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:35:46.666 [DEBUG] [Thread-197084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:35:46.666 [DEBUG] [Thread-197084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:35:46.714 [DEBUG] [Thread-197084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:35:46.714 [DEBUG] [Thread-197084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:35:46.723 [DEBUG] [Thread-197084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:35:46.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:35:46.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:35:46.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:35:46.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:35:46.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:35:46.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:35:46.760 [DEBUG] [Thread-197084] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:35:51.997 [DEBUG] [Thread-197086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:07.052 [DEBUG] [Thread-197087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:16.762 [DEBUG] [Thread-197088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:36:16.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:36:16.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:36:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 36, 8), 0.23697, 98.2412, 0.0, 9.3348, 10.9646, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:36:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:36:08
2026-04-12T22:36:18.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:36:18.542 [DEBUG] [Thread-197089] [transport.py] [_log()] starting thread (client mode): 0xb0f6fb50
2026-04-12T22:36:18.542 [DEBUG] [Thread-197089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:36:18.563 [DEBUG] [Thread-197089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:36:18.563 [INFO] [Thread-197089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] client lang: <none>
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] server lang: <none>
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] kex follows: False
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:36:18.564 [DEBUG] [Thread-197089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:36:18.565 [DEBUG] [Thread-197089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:36:18.565 [DEBUG] [Thread-197089] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:36:18.565 [DEBUG] [Thread-197089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:36:18.565 [DEBUG] [Thread-197089] [transport.py] [_log()] Compression: none
2026-04-12T22:36:18.565 [DEBUG] [Thread-197089] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:36:18.578 [DEBUG] [Thread-197089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:36:18.578 [DEBUG] [Thread-197089] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:36:18.579 [DEBUG] [Thread-197089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:36:18.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:36:18.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:36:18.581 [DEBUG] [Thread-197089] [transport.py] [_log()] userauth is OK
2026-04-12T22:36:18.581 [DEBUG] [Thread-197089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:36:18.581 [DEBUG] [Thread-197089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:36:18.581 [DEBUG] [Thread-197089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:36:18.581 [DEBUG] [Thread-197089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:36:18.602 [INFO] [Thread-197089] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:36:18.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:36:19.410 [DEBUG] [Thread-197089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:36:19.410 [DEBUG] [Thread-197089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:36:19.411 [DEBUG] [Thread-197089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:36:19.451 [DEBUG] [Thread-197089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:36:19.452 [DEBUG] [Thread-197089] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:36:19.456 [DEBUG] [Thread-197089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:36:19.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:36:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:36:19.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:36:19.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:36:19.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:36:19.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:36:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:36:19.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:36:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:36:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.858090 -999.00  +11.00   6.39     94  +10.10 1 2 1 3 1     0    0 0.90 -3.07 ..E.W 6.4 6.4 198.0 7.5 12.0 -21.8 11.8 -20.6 11.6 -19.1 11.8 -20.8
2026-04-12T22:36:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:36:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:36:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.858090
2026-04-12T22:36:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:36:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:36:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:36:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:36:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:36:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:36:08', tmtdew=0.23697, humidity=98.2412, cloud=0.0, wind=9.3348, temperature=10.9646, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:35:38.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1590000000000007, nan, 3.34, nan, nan, nan, nan, nan, 2.9364999999999997, nan, nan, 3.576999999999999, 2.8207499999999985, nan, nan, nan, 2.6625000000000005, nan, 2.0365, 2.343, 1.3270000000000017, 2.522500000000001, nan, nan], zp_timestamp='2026-04-12T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:36:19.482 [DEBUG] [Thread-197089] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:36:19.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:36:19.577 [DEBUG] [Thread-197092] [transport.py] [_log()] starting thread (client mode): 0xb0f41060
2026-04-12T22:36:19.577 [DEBUG] [Thread-197092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:36:19.592 [DEBUG] [Thread-197092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:36:19.592 [INFO] [Thread-197092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:36:19.600 [DEBUG] [Thread-197092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:36:19.600 [DEBUG] [Thread-197092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:36:19.600 [DEBUG] [Thread-197092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] client lang: <none>
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] server lang: <none>
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] kex follows: False
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:36:19.601 [DEBUG] [Thread-197092] [transport.py] [_log()] Compression: none
2026-04-12T22:36:19.602 [DEBUG] [Thread-197092] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:36:19.661 [DEBUG] [Thread-197092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:36:19.661 [DEBUG] [Thread-197092] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:36:19.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:36:19.663 [DEBUG] [Thread-197092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:36:19.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:36:19.717 [DEBUG] [Thread-197092] [transport.py] [_log()] userauth is OK
2026-04-12T22:36:19.718 [DEBUG] [Thread-197092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:36:19.718 [DEBUG] [Thread-197092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:36:19.718 [DEBUG] [Thread-197092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:36:19.718 [DEBUG] [Thread-197092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:36:19.736 [INFO] [Thread-197092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:36:19.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:36:19.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:36:20.554 [DEBUG] [Thread-197092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:36:20.555 [DEBUG] [Thread-197092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:36:20.602 [DEBUG] [Thread-197092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:36:20.602 [DEBUG] [Thread-197092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:36:20.611 [DEBUG] [Thread-197092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:36:20.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:36:20.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:36:20.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:36:20.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:36:20.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:36:20.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:36:20.648 [DEBUG] [Thread-197092] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:36:22.092 [DEBUG] [Thread-197094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:34.697 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:34.698 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:37.148 [DEBUG] [Thread-197095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:50.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:36:50.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:36:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:36:51.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 36, 44), 0.38403, 97.4161, 0.0, 10.7993, 11.1628, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:36:51.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:36:44
2026-04-12T22:36:52.184 [DEBUG] [Thread-197096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:36:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:36:52.469 [DEBUG] [Thread-197097] [transport.py] [_log()] starting thread (client mode): 0xae5a6ef0
2026-04-12T22:36:52.469 [DEBUG] [Thread-197097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:36:52.490 [DEBUG] [Thread-197097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:36:52.490 [INFO] [Thread-197097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:36:52.493 [DEBUG] [Thread-197097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] client lang: <none>
2026-04-12T22:36:52.494 [DEBUG] [Thread-197097] [transport.py] [_log()] server lang: <none>
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] kex follows: False
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] Compression: none
2026-04-12T22:36:52.495 [DEBUG] [Thread-197097] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:36:52.512 [DEBUG] [Thread-197097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:36:52.512 [DEBUG] [Thread-197097] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:36:52.512 [DEBUG] [Thread-197097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:36:52.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:36:52.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:36:52.513 [DEBUG] [Thread-197097] [transport.py] [_log()] userauth is OK
2026-04-12T22:36:52.513 [DEBUG] [Thread-197097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:36:52.513 [DEBUG] [Thread-197097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:36:52.513 [DEBUG] [Thread-197097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:36:52.513 [DEBUG] [Thread-197097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:36:52.529 [INFO] [Thread-197097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:36:52.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:36:53.285 [DEBUG] [Thread-197097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:36:53.285 [DEBUG] [Thread-197097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:36:53.286 [DEBUG] [Thread-197097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:36:53.326 [DEBUG] [Thread-197097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:36:53.326 [DEBUG] [Thread-197097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:36:53.330 [DEBUG] [Thread-197097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:36:53.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:36:53.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:36:53.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:36:53.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:36:53.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:36:53.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:36:53.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:36:53.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:36:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:36:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.858437 -999.00  +11.00   5.57     94  +10.10 1 2 1 3 1     0    0 0.87 -3.87 .nEs. 5.6 5.6 203.2 7.6 11.9 -22.2 11.8 -21.4 11.6 -19.2 11.8 -21.1
2026-04-12T22:36:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:36:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:36:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.858437
2026-04-12T22:36:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:36:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:36:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:36:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:36:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:36:53.348 [DEBUG] [Thread-197097] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:36:53.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:36:44', tmtdew=0.38403, humidity=97.4161, cloud=0.0, wind=10.7993, temperature=11.1628, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:36:08.957', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1590000000000007, nan, 3.34, nan, nan, nan, nan, nan, 2.9364999999999997, nan, nan, 3.576999999999999, 2.8207499999999985, nan, nan, nan, 2.6625000000000005, nan, 2.0365, 2.343, 1.3270000000000017, 2.522500000000001, nan, nan], zp_timestamp='2026-04-12T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:36:53.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:36:53.443 [DEBUG] [Thread-197100] [transport.py] [_log()] starting thread (client mode): 0xae5a6620
2026-04-12T22:36:53.443 [DEBUG] [Thread-197100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:36:53.458 [DEBUG] [Thread-197100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:36:53.458 [INFO] [Thread-197100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:36:53.465 [DEBUG] [Thread-197100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] client lang: <none>
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] server lang: <none>
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] kex follows: False
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] Compression: none
2026-04-12T22:36:53.466 [DEBUG] [Thread-197100] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:36:53.526 [DEBUG] [Thread-197100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:36:53.527 [DEBUG] [Thread-197100] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:36:53.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:36:53.528 [DEBUG] [Thread-197100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:36:53.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:36:53.582 [DEBUG] [Thread-197100] [transport.py] [_log()] userauth is OK
2026-04-12T22:36:53.582 [DEBUG] [Thread-197100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:36:53.582 [DEBUG] [Thread-197100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:36:53.582 [DEBUG] [Thread-197100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:36:53.583 [DEBUG] [Thread-197100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:36:53.607 [INFO] [Thread-197100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:36:53.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:36:53.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:36:54.442 [DEBUG] [Thread-197100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:36:54.442 [DEBUG] [Thread-197100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:36:54.491 [DEBUG] [Thread-197100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:36:54.491 [DEBUG] [Thread-197100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:36:54.500 [DEBUG] [Thread-197100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:36:54.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:36:54.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:36:54.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:36:54.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:36:54.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:36:54.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:36:54.538 [DEBUG] [Thread-197100] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:37:07.224 [DEBUG] [Thread-197102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:37:16.844 [DEBUG] [Thread-197103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:37:22.275 [DEBUG] [Thread-197104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:37:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:37:24.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:37:24.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:37:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 36, 44), 0.38403, 97.4161, 0.0, 10.7993, 11.1628, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:37:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:36:44
2026-04-12T22:37:26.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:37:26.343 [DEBUG] [Thread-197105] [transport.py] [_log()] starting thread (client mode): 0xb0f8d5a0
2026-04-12T22:37:26.343 [DEBUG] [Thread-197105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:37:26.359 [DEBUG] [Thread-197105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:37:26.359 [INFO] [Thread-197105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:37:26.361 [DEBUG] [Thread-197105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] client lang: <none>
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] server lang: <none>
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] kex follows: False
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] Compression: none
2026-04-12T22:37:26.362 [DEBUG] [Thread-197105] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:37:26.381 [DEBUG] [Thread-197105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:37:26.381 [DEBUG] [Thread-197105] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:37:26.382 [DEBUG] [Thread-197105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:37:26.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:37:26.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:37:26.384 [DEBUG] [Thread-197105] [transport.py] [_log()] userauth is OK
2026-04-12T22:37:26.384 [DEBUG] [Thread-197105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:37:26.384 [DEBUG] [Thread-197105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:37:26.384 [DEBUG] [Thread-197105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:37:26.384 [DEBUG] [Thread-197105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:37:26.409 [INFO] [Thread-197105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:37:26.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:37:27.159 [DEBUG] [Thread-197105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:37:27.159 [DEBUG] [Thread-197105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:37:27.159 [DEBUG] [Thread-197105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:37:27.200 [DEBUG] [Thread-197105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:37:27.201 [DEBUG] [Thread-197105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:37:27.204 [DEBUG] [Thread-197105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:37:27.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:37:27.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:37:27.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:37:27.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:37:27.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:37:27.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:37:27.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:37:27.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:37:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:37:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.858784 -999.00  +11.00   4.17     94  +10.10 1 2 1 3 1     0    0 0.81 -5.22 .nEs. 4.2 4.2 206.2 7.8 12.0 -22.2 11.8 -21.1 11.6 -19.3 11.8 -21.3
2026-04-12T22:37:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:37:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:37:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.858784
2026-04-12T22:37:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:37:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:37:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:37:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:37:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:37:27.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:36:44', tmtdew=0.38403, humidity=97.4161, cloud=0.0, wind=10.7993, temperature=11.1628, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:36:38.938', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1590000000000007, nan, 3.34, nan, nan, nan, nan, nan, 2.9364999999999997, nan, nan, 3.576999999999999, 2.8207499999999985, nan, nan, nan, 2.6625000000000005, nan, 2.0365, 2.343, 1.3270000000000017, 2.522500000000001, nan, nan], zp_timestamp='2026-04-12T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:37:27.229 [DEBUG] [Thread-197105] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:37:27.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:37:27.321 [DEBUG] [Thread-197108] [transport.py] [_log()] starting thread (client mode): 0xae5085b0
2026-04-12T22:37:27.322 [DEBUG] [Thread-197108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:37:27.337 [DEBUG] [Thread-197108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:37:27.337 [INFO] [Thread-197108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:37:27.344 [DEBUG] [Thread-197108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] client lang: <none>
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] server lang: <none>
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] kex follows: False
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] Compression: none
2026-04-12T22:37:27.345 [DEBUG] [Thread-197108] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:37:27.402 [DEBUG] [Thread-197108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:37:27.402 [DEBUG] [Thread-197108] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:37:27.403 [DEBUG] [Thread-197108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:37:27.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:37:27.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:37:27.459 [DEBUG] [Thread-197108] [transport.py] [_log()] userauth is OK
2026-04-12T22:37:27.459 [DEBUG] [Thread-197108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:37:27.459 [DEBUG] [Thread-197108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:37:27.459 [DEBUG] [Thread-197108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:37:27.459 [DEBUG] [Thread-197108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:37:27.478 [INFO] [Thread-197108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:37:27.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:37:27.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:37:28.317 [DEBUG] [Thread-197108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:37:28.317 [DEBUG] [Thread-197108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:37:28.365 [DEBUG] [Thread-197108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:37:28.365 [DEBUG] [Thread-197108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:37:28.375 [DEBUG] [Thread-197108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:37:28.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:37:28.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:37:28.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:37:28.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:37:28.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:37:28.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:37:28.412 [DEBUG] [Thread-197108] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:37:34.903 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:37:34.905 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:37:37.314 [DEBUG] [Thread-197110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:37:52.365 [DEBUG] [Thread-197111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:37:58.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:37:58.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:37:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:37:59.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 37, 19), 0.234415, 98.2578, 0.0, 8.78796, 10.9646, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:37:59.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:37:19
2026-04-12T22:38:00.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:38:00.289 [DEBUG] [Thread-197112] [transport.py] [_log()] starting thread (client mode): 0xae50bf10
2026-04-12T22:38:00.289 [DEBUG] [Thread-197112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:38:00.308 [DEBUG] [Thread-197112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:38:00.309 [INFO] [Thread-197112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] client lang: <none>
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] server lang: <none>
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] kex follows: False
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:38:00.312 [DEBUG] [Thread-197112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:38:00.313 [DEBUG] [Thread-197112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:38:00.313 [DEBUG] [Thread-197112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:38:00.313 [DEBUG] [Thread-197112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:38:00.313 [DEBUG] [Thread-197112] [transport.py] [_log()] Compression: none
2026-04-12T22:38:00.313 [DEBUG] [Thread-197112] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:38:00.330 [DEBUG] [Thread-197112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:38:00.331 [DEBUG] [Thread-197112] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:38:00.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:38:00.332 [DEBUG] [Thread-197112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:38:00.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:38:00.334 [DEBUG] [Thread-197112] [transport.py] [_log()] userauth is OK
2026-04-12T22:38:00.334 [DEBUG] [Thread-197112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:38:00.335 [DEBUG] [Thread-197112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:38:00.335 [DEBUG] [Thread-197112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:38:00.335 [DEBUG] [Thread-197112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:38:00.367 [INFO] [Thread-197112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:38:00.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:38:01.152 [DEBUG] [Thread-197112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:38:01.152 [DEBUG] [Thread-197112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:38:01.153 [DEBUG] [Thread-197112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:38:01.193 [DEBUG] [Thread-197112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:38:01.193 [DEBUG] [Thread-197112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:38:01.197 [DEBUG] [Thread-197112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:38:01.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:38:01.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:38:01.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:38:01.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:38:01.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:38:01.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:38:01.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:38:01.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:38:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:38:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.859132 -999.00  +11.00   5.99     94  +10.10 1 2 1 3 1     0    0 0.81 -5.81 .nEs. 6.0 6.0 208.6 7.0 12.0 -22.2 11.8 -21.1 11.6 -19.2 11.8 -21.3
2026-04-12T22:38:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:38:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:38:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.859132
2026-04-12T22:38:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:38:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:38:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:38:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:38:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:38:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:37:19', tmtdew=0.234415, humidity=98.2578, cloud=0.0, wind=8.78796, temperature=10.9646, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:37:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1590000000000007, nan, 3.34, nan, nan, nan, nan, nan, 2.9364999999999997, nan, nan, 3.576999999999999, 2.8207499999999985, nan, nan, nan, 2.6625000000000005, nan, 2.0365, 2.343, 1.3270000000000017, 2.522500000000001, nan, nan], zp_timestamp='2026-04-12T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:38:01.220 [DEBUG] [Thread-197112] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:38:01.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:38:01.334 [DEBUG] [Thread-197115] [transport.py] [_log()] starting thread (client mode): 0xae5361a0
2026-04-12T22:38:01.334 [DEBUG] [Thread-197115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:38:01.349 [DEBUG] [Thread-197115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:38:01.349 [INFO] [Thread-197115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:38:01.357 [DEBUG] [Thread-197115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:38:01.357 [DEBUG] [Thread-197115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:38:01.357 [DEBUG] [Thread-197115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:38:01.357 [DEBUG] [Thread-197115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:38:01.357 [DEBUG] [Thread-197115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:38:01.357 [DEBUG] [Thread-197115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] client lang: <none>
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] server lang: <none>
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] kex follows: False
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] Compression: none
2026-04-12T22:38:01.358 [DEBUG] [Thread-197115] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:38:01.415 [DEBUG] [Thread-197115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:38:01.415 [DEBUG] [Thread-197115] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:38:01.416 [DEBUG] [Thread-197115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:38:01.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:38:01.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:38:01.471 [DEBUG] [Thread-197115] [transport.py] [_log()] userauth is OK
2026-04-12T22:38:01.471 [DEBUG] [Thread-197115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:38:01.471 [DEBUG] [Thread-197115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:38:01.471 [DEBUG] [Thread-197115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:38:01.472 [DEBUG] [Thread-197115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:38:01.491 [INFO] [Thread-197115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:38:01.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:38:01.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:38:02.338 [DEBUG] [Thread-197115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:38:02.338 [DEBUG] [Thread-197115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:38:02.386 [DEBUG] [Thread-197115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:38:02.386 [DEBUG] [Thread-197115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:38:02.396 [DEBUG] [Thread-197115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:38:02.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:38:02.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')
2026-04-12T22:38:02.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:38:02.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:38:02.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:38:02.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:38:02.434 [DEBUG] [Thread-197115] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:38:07.401 [DEBUG] [Thread-197117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:38:16.924 [DEBUG] [Thread-197118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:38:22.451 [DEBUG] [Thread-197119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:38:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:38:32.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:38: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
2026-04-12T22:38:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 37, 55), 0.23692, 98.2413, 0.0, 8.982, 10.948, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:38:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:37:55
2026-04-12T22:38:34.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:38:34.252 [DEBUG] [Thread-197120] [transport.py] [_log()] starting thread (client mode): 0xae562a10
2026-04-12T22:38:34.252 [DEBUG] [Thread-197120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:38:34.272 [DEBUG] [Thread-197120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:38:34.272 [INFO] [Thread-197120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:38:34.275 [DEBUG] [Thread-197120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:38:34.275 [DEBUG] [Thread-197120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] client lang: <none>
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] server lang: <none>
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] kex follows: False
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:38:34.276 [DEBUG] [Thread-197120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:38:34.277 [DEBUG] [Thread-197120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:38:34.277 [DEBUG] [Thread-197120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:38:34.277 [DEBUG] [Thread-197120] [transport.py] [_log()] Compression: none
2026-04-12T22:38:34.277 [DEBUG] [Thread-197120] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:38:34.295 [DEBUG] [Thread-197120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:38:34.295 [DEBUG] [Thread-197120] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:38:34.296 [DEBUG] [Thread-197120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:38:34.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:38:34.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:38:34.297 [DEBUG] [Thread-197120] [transport.py] [_log()] userauth is OK
2026-04-12T22:38:34.297 [DEBUG] [Thread-197120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:38:34.298 [DEBUG] [Thread-197120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:38:34.298 [DEBUG] [Thread-197120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:38:34.298 [DEBUG] [Thread-197120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:38:34.315 [INFO] [Thread-197120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:38:34.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:38:35.086 [DEBUG] [Thread-197120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:38:35.086 [DEBUG] [Thread-197120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:38:35.087 [DEBUG] [Thread-197120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:38:35.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:38:35.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:38:35.127 [DEBUG] [Thread-197120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:38:35.128 [DEBUG] [Thread-197120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:38:35.131 [DEBUG] [Thread-197120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:38:35.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:38:35.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:38:35.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:38:35.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:38:35.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:38:35.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:38:35.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:38:35.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:38:35.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:38:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.859479 -999.00  +11.00   4.08     94  +10.10 1 2 1 3 1     0    0 0.77 -6.59 ..eS. 4.1 4.1 196.3 6.8 12.0 -22.2 11.8 -21.0 11.5 -19.2 11.8 -21.2
2026-04-12T22:38:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:38:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:38:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.859479
2026-04-12T22:38:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:38:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:38:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:38:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:38:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:38:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:37:55', tmtdew=0.23692, humidity=98.2413, cloud=0.0, wind=8.982, temperature=10.948, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:37:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1590000000000007, nan, 3.34, nan, nan, nan, nan, nan, 2.9364999999999997, nan, nan, 3.576999999999999, 2.8207499999999985, nan, nan, nan, 2.6625000000000005, nan, 2.0365, 2.343, 1.3270000000000017, 2.522500000000001, nan, nan], zp_timestamp='2026-04-12T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:38:35.158 [DEBUG] [Thread-197120] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:38:35.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:38:37.489 [DEBUG] [Thread-197123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:38:52.539 [DEBUG] [Thread-197124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:39:07.577 [DEBUG] [Thread-197125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:39:16.999 [DEBUG] [Thread-197126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:39:22.614 [DEBUG] [Thread-197127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:39:35.318 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:39:35.320 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:39:37.651 [DEBUG] [Thread-197128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:39:52.689 [DEBUG] [Thread-197129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:40:07.725 [DEBUG] [Thread-197130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:40:17.087 [DEBUG] [Thread-197131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:40:22.758 [DEBUG] [Thread-197132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:40:35.525 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:40:35.527 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:40:37.792 [DEBUG] [Thread-197133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:40:47.487 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T22:40:52.830 [DEBUG] [Thread-197134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:07.866 [DEBUG] [Thread-197135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:17.156 [DEBUG] [Thread-197136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:17.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:41:17.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:41:17.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:41:18.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 40, 51), 0.3686, 97.5161, 0.0, 11.5402, 11.1631, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:41:18.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:40:51
2026-04-12T22:41:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:41:19.290 [DEBUG] [Thread-197137] [transport.py] [_log()] starting thread (client mode): 0xae5e6560
2026-04-12T22:41:19.290 [DEBUG] [Thread-197137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:41:19.310 [DEBUG] [Thread-197137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:41:19.310 [INFO] [Thread-197137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:41:19.313 [DEBUG] [Thread-197137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] client lang: <none>
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] server lang: <none>
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] kex follows: False
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] Compression: none
2026-04-12T22:41:19.314 [DEBUG] [Thread-197137] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:41:19.335 [DEBUG] [Thread-197137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:41:19.335 [DEBUG] [Thread-197137] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:41:19.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:41:19.337 [DEBUG] [Thread-197137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:41:19.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:41:19.339 [DEBUG] [Thread-197137] [transport.py] [_log()] userauth is OK
2026-04-12T22:41:19.339 [DEBUG] [Thread-197137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:41:19.339 [DEBUG] [Thread-197137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:41:19.339 [DEBUG] [Thread-197137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:41:19.339 [DEBUG] [Thread-197137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:41:19.366 [INFO] [Thread-197137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:41:19.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:41:20.132 [DEBUG] [Thread-197137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:41:20.132 [DEBUG] [Thread-197137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:41:20.133 [DEBUG] [Thread-197137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:41:20.173 [DEBUG] [Thread-197137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:41:20.173 [DEBUG] [Thread-197137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:41:20.177 [DEBUG] [Thread-197137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:41:20.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:41:20.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:41:20.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:41:20.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:41:20.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:41:20.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:41:20.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:41:20.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:41:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:41:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.861562 -999.00  +11.00   2.90     94  +10.20 1 2 1 3 1     0    0 0.64 -11.18 ..Esw 2.9 2.9 229.9 6.8 11.9 -22.2 11.8 -21.1 11.6 -19.1 11.8 -21.0
2026-04-12T22:41:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:41:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:41:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.861562
2026-04-12T22:41:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:41:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:41:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:41:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:41:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:41:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:40:51', tmtdew=0.3686, humidity=97.5161, cloud=0.0, wind=11.5402, temperature=11.1631, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:40:38.957', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.1590000000000007, nan, 3.34, nan, nan, nan, nan, nan, 2.9364999999999997, nan, nan, 3.576999999999999, 2.8207499999999985, nan, nan, nan, 2.6625000000000005, nan, 2.0365, 2.343, 1.3270000000000017, 2.522500000000001, nan, nan], zp_timestamp='2026-04-12T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:41:20.203 [DEBUG] [Thread-197137] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:41:20.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:41:20.297 [DEBUG] [Thread-197140] [transport.py] [_log()] starting thread (client mode): 0xb0f437f0
2026-04-12T22:41:20.297 [DEBUG] [Thread-197140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:41:20.312 [DEBUG] [Thread-197140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:41:20.312 [INFO] [Thread-197140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:41:20.319 [DEBUG] [Thread-197140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:41:20.319 [DEBUG] [Thread-197140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:41:20.319 [DEBUG] [Thread-197140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:41:20.319 [DEBUG] [Thread-197140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:20.319 [DEBUG] [Thread-197140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:20.319 [DEBUG] [Thread-197140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] client lang: <none>
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] server lang: <none>
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] kex follows: False
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] Compression: none
2026-04-12T22:41:20.320 [DEBUG] [Thread-197140] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:41:20.377 [DEBUG] [Thread-197140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:41:20.377 [DEBUG] [Thread-197140] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:41:20.378 [DEBUG] [Thread-197140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:41:20.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:41:20.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:41:20.434 [DEBUG] [Thread-197140] [transport.py] [_log()] userauth is OK
2026-04-12T22:41:20.434 [DEBUG] [Thread-197140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:41:20.434 [DEBUG] [Thread-197140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:41:20.434 [DEBUG] [Thread-197140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:41:20.434 [DEBUG] [Thread-197140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:41:20.448 [INFO] [Thread-197140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:41:20.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:41:20.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:41:21.280 [DEBUG] [Thread-197140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:41:21.280 [DEBUG] [Thread-197140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:41:21.328 [DEBUG] [Thread-197140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:41:21.328 [DEBUG] [Thread-197140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:41:21.338 [DEBUG] [Thread-197140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:41:21.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:41:21.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:41:21.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:41:21.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:41:21.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:41:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:41:21.375 [DEBUG] [Thread-197140] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:41:22.901 [DEBUG] [Thread-197142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:35.741 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:35.742 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:37.954 [DEBUG] [Thread-197143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:41:51.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:41:51.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:41:52.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 41, 27), 0.186755, 98.2415, 0.0, 9.21132, 10.8818, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:41:52.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:41:27
2026-04-12T22:41:52.990 [DEBUG] [Thread-197144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:41:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:41:53.204 [DEBUG] [Thread-197145] [transport.py] [_log()] starting thread (client mode): 0xb0f6de40
2026-04-12T22:41:53.204 [DEBUG] [Thread-197145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:41:53.224 [DEBUG] [Thread-197145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:41:53.224 [INFO] [Thread-197145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:41:53.227 [DEBUG] [Thread-197145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:41:53.227 [DEBUG] [Thread-197145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:41:53.227 [DEBUG] [Thread-197145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:41:53.227 [DEBUG] [Thread-197145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:53.227 [DEBUG] [Thread-197145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:53.227 [DEBUG] [Thread-197145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:53.227 [DEBUG] [Thread-197145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] client lang: <none>
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] server lang: <none>
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] kex follows: False
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] Compression: none
2026-04-12T22:41:53.228 [DEBUG] [Thread-197145] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:41:53.246 [DEBUG] [Thread-197145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:41:53.246 [DEBUG] [Thread-197145] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:41:53.247 [DEBUG] [Thread-197145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:41:53.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:41:53.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:41:53.249 [DEBUG] [Thread-197145] [transport.py] [_log()] userauth is OK
2026-04-12T22:41:53.249 [DEBUG] [Thread-197145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:41:53.249 [DEBUG] [Thread-197145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:41:53.249 [DEBUG] [Thread-197145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:41:53.250 [DEBUG] [Thread-197145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:41:53.273 [INFO] [Thread-197145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:41:53.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:41:54.077 [DEBUG] [Thread-197145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:41:54.077 [DEBUG] [Thread-197145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:41:54.077 [DEBUG] [Thread-197145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:41:54.118 [DEBUG] [Thread-197145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:41:54.119 [DEBUG] [Thread-197145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:41:54.123 [DEBUG] [Thread-197145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:41:54.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:41:54.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:41:54.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:41:54.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:41:54.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:41:54.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:41:54.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:41:54.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:41:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:41:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.861909 -999.00  +11.00   5.05     94  +10.20 1 2 1 3 1     0    0 0.58 -13.22 ..Esw 5.0 5.0 211.6 7.6 11.9 -22.2 11.8 -21.1 11.5 -19.1 11.8 -21.1
2026-04-12T22:41:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:41:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:41:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.861909
2026-04-12T22:41:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:41:54.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:41:54.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:41:54.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:41:54.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:41:54.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:41:27', tmtdew=0.186755, humidity=98.2415, cloud=0.0, wind=9.21132, temperature=10.8818, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:41:08.938', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:41:54.151 [DEBUG] [Thread-197145] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:41:54.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:41:54.243 [DEBUG] [Thread-197148] [transport.py] [_log()] starting thread (client mode): 0xb0f8fa00
2026-04-12T22:41:54.243 [DEBUG] [Thread-197148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:41:54.257 [DEBUG] [Thread-197148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:41:54.257 [INFO] [Thread-197148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:41:54.265 [DEBUG] [Thread-197148] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:41:54.265 [DEBUG] [Thread-197148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:41:54.265 [DEBUG] [Thread-197148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:41:54.265 [DEBUG] [Thread-197148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:54.265 [DEBUG] [Thread-197148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:41:54.265 [DEBUG] [Thread-197148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] client lang: <none>
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] server lang: <none>
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] kex follows: False
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] Compression: none
2026-04-12T22:41:54.266 [DEBUG] [Thread-197148] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:41:54.323 [DEBUG] [Thread-197148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:41:54.323 [DEBUG] [Thread-197148] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:41:54.324 [DEBUG] [Thread-197148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:41:54.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:41:54.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:41:54.379 [DEBUG] [Thread-197148] [transport.py] [_log()] userauth is OK
2026-04-12T22:41:54.380 [DEBUG] [Thread-197148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:41:54.380 [DEBUG] [Thread-197148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:41:54.380 [DEBUG] [Thread-197148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:41:54.380 [DEBUG] [Thread-197148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:41:54.399 [INFO] [Thread-197148] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:41:54.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:41:54.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:41:55.229 [DEBUG] [Thread-197148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:41:55.229 [DEBUG] [Thread-197148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:41:55.277 [DEBUG] [Thread-197148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:41:55.277 [DEBUG] [Thread-197148] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:41:55.287 [DEBUG] [Thread-197148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:41:55.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:41:55.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:41:55.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:41:55.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:41:55.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:41:55.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:41:55.323 [DEBUG] [Thread-197148] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:42:08.029 [DEBUG] [Thread-197150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:42:17.239 [DEBUG] [Thread-197151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:42:23.079 [DEBUG] [Thread-197152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:42:25.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:42:25.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:42:25.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:42:26.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 42, 2), 0.186725, 98.2419, 0.0, 9.52884, 10.8987, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:42:26.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:42:02
2026-04-12T22:42:27.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:42:27.206 [DEBUG] [Thread-197153] [transport.py] [_log()] starting thread (client mode): 0xae561b10
2026-04-12T22:42:27.206 [DEBUG] [Thread-197153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:42:27.226 [DEBUG] [Thread-197153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:42:27.226 [INFO] [Thread-197153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:42:27.229 [DEBUG] [Thread-197153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:42:27.229 [DEBUG] [Thread-197153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:42:27.229 [DEBUG] [Thread-197153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:42:27.229 [DEBUG] [Thread-197153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] client lang: <none>
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] server lang: <none>
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] kex follows: False
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] Compression: none
2026-04-12T22:42:27.230 [DEBUG] [Thread-197153] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:42:27.246 [DEBUG] [Thread-197153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:42:27.247 [DEBUG] [Thread-197153] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:42:27.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:42:27.248 [DEBUG] [Thread-197153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:42:27.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:42:27.249 [DEBUG] [Thread-197153] [transport.py] [_log()] userauth is OK
2026-04-12T22:42:27.250 [DEBUG] [Thread-197153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:42:27.250 [DEBUG] [Thread-197153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:42:27.250 [DEBUG] [Thread-197153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:42:27.250 [DEBUG] [Thread-197153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:42:27.273 [INFO] [Thread-197153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:42:27.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:42:28.042 [DEBUG] [Thread-197153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:42:28.042 [DEBUG] [Thread-197153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:42:28.043 [DEBUG] [Thread-197153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:42:28.084 [DEBUG] [Thread-197153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:42:28.084 [DEBUG] [Thread-197153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:42:28.087 [DEBUG] [Thread-197153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:42:28.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:42:28.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:42:28.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:42:28.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:42:28.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:42:28.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:42:28.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:42:28.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:42:28.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:42:28.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.862256 -999.00  +11.00   3.07     94  +10.20 1 2 1 3 1     0    0 0.57 -13.23 .nEs. 3.1 3.1 250.4 8.1 11.9 -22.1 11.8 -21.1 11.5 -19.2 11.8 -21.0
2026-04-12T22:42:28.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:42:28.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:42:28.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.862256
2026-04-12T22:42:28.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:42:28.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:42:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:42:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:42:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:42:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:42:02', tmtdew=0.186725, humidity=98.2419, cloud=0.0, wind=9.52884, temperature=10.8987, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:41:38.918', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:42:28.111 [DEBUG] [Thread-197153] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:42:28.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:42:28.203 [DEBUG] [Thread-197156] [transport.py] [_log()] starting thread (client mode): 0xae5631c0
2026-04-12T22:42:28.203 [DEBUG] [Thread-197156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:42:28.217 [DEBUG] [Thread-197156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:42:28.218 [INFO] [Thread-197156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] client lang: <none>
2026-04-12T22:42:28.225 [DEBUG] [Thread-197156] [transport.py] [_log()] server lang: <none>
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] kex follows: False
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] Compression: none
2026-04-12T22:42:28.226 [DEBUG] [Thread-197156] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:42:28.282 [DEBUG] [Thread-197156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:42:28.283 [DEBUG] [Thread-197156] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:42:28.283 [DEBUG] [Thread-197156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:42:28.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:42:28.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:42:28.339 [DEBUG] [Thread-197156] [transport.py] [_log()] userauth is OK
2026-04-12T22:42:28.339 [DEBUG] [Thread-197156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:42:28.339 [DEBUG] [Thread-197156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:42:28.339 [DEBUG] [Thread-197156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:42:28.339 [DEBUG] [Thread-197156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:42:28.359 [INFO] [Thread-197156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:42:28.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:42:28.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:42:29.266 [DEBUG] [Thread-197156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:42:29.267 [DEBUG] [Thread-197156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:42:29.315 [DEBUG] [Thread-197156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:42:29.315 [DEBUG] [Thread-197156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:42:29.324 [DEBUG] [Thread-197156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:42:29.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:42:29.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:42:29.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:42:29.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:42:29.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:42:29.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:42:29.361 [DEBUG] [Thread-197156] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:42:35.948 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:42:35.950 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:42:38.114 [DEBUG] [Thread-197158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:42:53.165 [DEBUG] [Thread-197159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:42:59.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:42:59.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:42:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:43:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 42, 38), 0.36834, 97.517, 0.0, 10.5876, 11.0974, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:43:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:42:38
2026-04-12T22:43:01.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:43:01.176 [DEBUG] [Thread-197160] [transport.py] [_log()] starting thread (client mode): 0xa7949360
2026-04-12T22:43:01.176 [DEBUG] [Thread-197160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:43:01.188 [DEBUG] [Thread-197160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:43:01.189 [INFO] [Thread-197160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] client lang: <none>
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] server lang: <none>
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] kex follows: False
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] Compression: none
2026-04-12T22:43:01.192 [DEBUG] [Thread-197160] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:43:01.206 [DEBUG] [Thread-197160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:43:01.206 [DEBUG] [Thread-197160] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:43:01.207 [DEBUG] [Thread-197160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:43:01.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:43:01.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:43:01.208 [DEBUG] [Thread-197160] [transport.py] [_log()] userauth is OK
2026-04-12T22:43:01.208 [DEBUG] [Thread-197160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:43:01.208 [DEBUG] [Thread-197160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:43:01.208 [DEBUG] [Thread-197160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:43:01.208 [DEBUG] [Thread-197160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:43:01.221 [INFO] [Thread-197160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:43:01.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:43:01.967 [DEBUG] [Thread-197160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:43:01.967 [DEBUG] [Thread-197160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:43:01.967 [DEBUG] [Thread-197160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:43:02.008 [DEBUG] [Thread-197160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:43:02.008 [DEBUG] [Thread-197160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:43:02.011 [DEBUG] [Thread-197160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:43:02.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:43:02.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:43:02.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:43:02.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:43:02.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:43:02.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:43:02.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:43:02.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:43:02.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:43:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.862951 -999.00  +11.00   3.90     94  +10.10 1 2 1 3 1     0    0 0.54 -13.82 .ne.. 3.9 3.9 215.3 6.5 11.9 -22.3 11.9 -20.9 11.5 -19.1 11.8 -21.0
2026-04-12T22:43:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:43:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:43:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.862951
2026-04-12T22:43:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:43:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:43:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:43:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:43:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:43:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:42:38', tmtdew=0.36834, humidity=97.517, cloud=0.0, wind=10.5876, temperature=11.0974, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:42:38.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:43:02.040 [DEBUG] [Thread-197160] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:43:02.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:43:02.124 [DEBUG] [Thread-197163] [transport.py] [_log()] starting thread (client mode): 0xae5362c0
2026-04-12T22:43:02.124 [DEBUG] [Thread-197163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:43:02.139 [DEBUG] [Thread-197163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:43:02.139 [INFO] [Thread-197163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:43:02.147 [DEBUG] [Thread-197163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:43:02.147 [DEBUG] [Thread-197163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:43:02.147 [DEBUG] [Thread-197163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:43:02.147 [DEBUG] [Thread-197163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:02.147 [DEBUG] [Thread-197163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:02.147 [DEBUG] [Thread-197163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:02.147 [DEBUG] [Thread-197163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] client lang: <none>
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] server lang: <none>
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] kex follows: False
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:43:02.148 [DEBUG] [Thread-197163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:43:02.149 [DEBUG] [Thread-197163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:43:02.149 [DEBUG] [Thread-197163] [transport.py] [_log()] Compression: none
2026-04-12T22:43:02.149 [DEBUG] [Thread-197163] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:43:02.205 [DEBUG] [Thread-197163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:43:02.206 [DEBUG] [Thread-197163] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:43:02.207 [DEBUG] [Thread-197163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:43:02.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:43:02.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:43:02.264 [DEBUG] [Thread-197163] [transport.py] [_log()] userauth is OK
2026-04-12T22:43:02.265 [DEBUG] [Thread-197163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:43:02.265 [DEBUG] [Thread-197163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:43:02.265 [DEBUG] [Thread-197163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:43:02.265 [DEBUG] [Thread-197163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:43:02.287 [INFO] [Thread-197163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:43:02.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:43:02.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:43:03.140 [DEBUG] [Thread-197163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:43:03.141 [DEBUG] [Thread-197163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:43:03.188 [DEBUG] [Thread-197163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:43:03.188 [DEBUG] [Thread-197163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:43:03.197 [DEBUG] [Thread-197163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:43:03.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:43:03.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:43:03.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:43:03.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:43:03.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:43:03.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:43:03.234 [DEBUG] [Thread-197163] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:43:08.204 [DEBUG] [Thread-197165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:43:17.314 [DEBUG] [Thread-197166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:43:23.255 [DEBUG] [Thread-197167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:43:33.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:43:33.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:43:33.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:43:34.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 43, 13), 0.23401, 98.2588, 0.0, 10.0228, 10.8491, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:43:34.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:43:13
2026-04-12T22:43:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:43:35.068 [DEBUG] [Thread-197168] [transport.py] [_log()] starting thread (client mode): 0xae5355a0
2026-04-12T22:43:35.068 [DEBUG] [Thread-197168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:43:35.088 [DEBUG] [Thread-197168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:43:35.088 [INFO] [Thread-197168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:43:35.091 [DEBUG] [Thread-197168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] client lang: <none>
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] server lang: <none>
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] kex follows: False
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] Compression: none
2026-04-12T22:43:35.092 [DEBUG] [Thread-197168] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:43:35.107 [DEBUG] [Thread-197168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:43:35.108 [DEBUG] [Thread-197168] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:43:35.108 [DEBUG] [Thread-197168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:43:35.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:43:35.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:43:35.111 [DEBUG] [Thread-197168] [transport.py] [_log()] userauth is OK
2026-04-12T22:43:35.111 [DEBUG] [Thread-197168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:43:35.111 [DEBUG] [Thread-197168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:43:35.111 [DEBUG] [Thread-197168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:43:35.111 [DEBUG] [Thread-197168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:43:35.135 [INFO] [Thread-197168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:43:35.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:43:35.856 [DEBUG] [Thread-197168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:43:35.857 [DEBUG] [Thread-197168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:43:35.857 [DEBUG] [Thread-197168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:43:35.898 [DEBUG] [Thread-197168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:43:35.898 [DEBUG] [Thread-197168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:43:35.902 [DEBUG] [Thread-197168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:43:35.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:43:35.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:43:35.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:43:35.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:43:35.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:43:35.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:43:35.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:43:35.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:43:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:43:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.863298 -999.00  +11.10   4.57     94  +10.20 1 2 1 3 1     0    0 0.52 -14.50 .NEs. 4.6 4.6 210.6 5.6 12.0 -22.1 11.8 -21.4 11.5 -19.2 11.8 -21.1
2026-04-12T22:43:35.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:43:35.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:43:35.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.863298
2026-04-12T22:43:35.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:43:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:43:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:43:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:43:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:43:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:43:13', tmtdew=0.23401, humidity=98.2588, cloud=0.0, wind=10.0228, temperature=10.8491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:43:08.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:43:35.931 [DEBUG] [Thread-197168] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:43:36.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:43:36.032 [DEBUG] [Thread-197171] [transport.py] [_log()] starting thread (client mode): 0xb0f6ebc0
2026-04-12T22:43:36.032 [DEBUG] [Thread-197171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:43:36.047 [DEBUG] [Thread-197171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:43:36.047 [INFO] [Thread-197171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:43:36.055 [DEBUG] [Thread-197171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:43:36.055 [DEBUG] [Thread-197171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:43:36.055 [DEBUG] [Thread-197171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:43:36.055 [DEBUG] [Thread-197171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:36.055 [DEBUG] [Thread-197171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] client lang: <none>
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] server lang: <none>
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] kex follows: False
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:43:36.056 [DEBUG] [Thread-197171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:43:36.057 [DEBUG] [Thread-197171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:43:36.057 [DEBUG] [Thread-197171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:43:36.057 [DEBUG] [Thread-197171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:43:36.057 [DEBUG] [Thread-197171] [transport.py] [_log()] Compression: none
2026-04-12T22:43:36.057 [DEBUG] [Thread-197171] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:43:36.112 [DEBUG] [Thread-197171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:43:36.112 [DEBUG] [Thread-197171] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:43:36.113 [DEBUG] [Thread-197171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:43:36.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:43:36.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:43:36.161 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:43:36.163 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:43:36.168 [DEBUG] [Thread-197171] [transport.py] [_log()] userauth is OK
2026-04-12T22:43:36.169 [DEBUG] [Thread-197171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:43:36.169 [DEBUG] [Thread-197171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:43:36.169 [DEBUG] [Thread-197171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:43:36.169 [DEBUG] [Thread-197171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:43:36.188 [INFO] [Thread-197171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:43:36.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:43:36.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:43:36.988 [DEBUG] [Thread-197171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:43:36.989 [DEBUG] [Thread-197171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:43:37.037 [DEBUG] [Thread-197171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:43:37.037 [DEBUG] [Thread-197171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:43:37.047 [DEBUG] [Thread-197171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:43:37.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:43:37.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:43:37.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:43:37.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:43:37.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:43:37.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:43:37.083 [DEBUG] [Thread-197171] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:43:38.295 [DEBUG] [Thread-197173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:43:53.348 [DEBUG] [Thread-197174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:44:07.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:44:07.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:44:07.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:44:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 43, 48), 0.36802, 97.5177, 0.0, 11.5754, 10.9983, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:44:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:43:48
2026-04-12T22:44:08.384 [DEBUG] [Thread-197175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:44:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:44:08.902 [DEBUG] [Thread-197176] [transport.py] [_log()] starting thread (client mode): 0xae534460
2026-04-12T22:44:08.902 [DEBUG] [Thread-197176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:44:08.923 [DEBUG] [Thread-197176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:44:08.923 [INFO] [Thread-197176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] client lang: <none>
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] server lang: <none>
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] kex follows: False
2026-04-12T22:44:08.926 [DEBUG] [Thread-197176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:44:08.927 [DEBUG] [Thread-197176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:44:08.927 [DEBUG] [Thread-197176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:44:08.927 [DEBUG] [Thread-197176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:44:08.927 [DEBUG] [Thread-197176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:44:08.927 [DEBUG] [Thread-197176] [transport.py] [_log()] Compression: none
2026-04-12T22:44:08.927 [DEBUG] [Thread-197176] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:44:08.948 [DEBUG] [Thread-197176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:44:08.948 [DEBUG] [Thread-197176] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:44:08.949 [DEBUG] [Thread-197176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:44:08.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:44:08.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:44:08.951 [DEBUG] [Thread-197176] [transport.py] [_log()] userauth is OK
2026-04-12T22:44:08.951 [DEBUG] [Thread-197176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:44:08.951 [DEBUG] [Thread-197176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:44:08.951 [DEBUG] [Thread-197176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:44:08.951 [DEBUG] [Thread-197176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:44:08.977 [INFO] [Thread-197176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:44:08.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:44:09.581 [DEBUG] [Thread-197176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:44:09.581 [DEBUG] [Thread-197176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:44:09.582 [DEBUG] [Thread-197176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:44:09.622 [DEBUG] [Thread-197176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:44:09.623 [DEBUG] [Thread-197176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:44:09.626 [DEBUG] [Thread-197176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:44:09.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:44:09.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:44:09.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:44:09.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:44:09.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:44:09.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:44:09.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:44:09.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:44:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:44:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.863645 -999.00  +11.10   3.56     94  +10.20 1 2 1 3 1     0    0 0.48 -15.91 .NEs. 3.6 3.6 276.4 10.6 11.9 -22.1 -999.0 -999.0 11.6 -19.0 11.8 -21.1
2026-04-12T22:44:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:44:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:44:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.863645
2026-04-12T22:44:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:44:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:44:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:44:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:44:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:44:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:43:48', tmtdew=0.36802, humidity=97.5177, cloud=0.0, wind=11.5754, temperature=10.9983, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:43:38.928', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:44:09.653 [DEBUG] [Thread-197176] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:44:09.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:44:09.746 [DEBUG] [Thread-197179] [transport.py] [_log()] starting thread (client mode): 0xa7949600
2026-04-12T22:44:09.746 [DEBUG] [Thread-197179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:44:09.760 [DEBUG] [Thread-197179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:44:09.761 [INFO] [Thread-197179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:44:09.768 [DEBUG] [Thread-197179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:44:09.768 [DEBUG] [Thread-197179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:44:09.768 [DEBUG] [Thread-197179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] client lang: <none>
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] server lang: <none>
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] kex follows: False
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] Compression: none
2026-04-12T22:44:09.769 [DEBUG] [Thread-197179] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:44:09.829 [DEBUG] [Thread-197179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:44:09.829 [DEBUG] [Thread-197179] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:44:09.830 [DEBUG] [Thread-197179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:44:09.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:44:09.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:44:09.885 [DEBUG] [Thread-197179] [transport.py] [_log()] userauth is OK
2026-04-12T22:44:09.885 [DEBUG] [Thread-197179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:44:09.885 [DEBUG] [Thread-197179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:44:09.885 [DEBUG] [Thread-197179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:44:09.885 [DEBUG] [Thread-197179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:44:09.904 [INFO] [Thread-197179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:44:09.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:44:09.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:44:10.714 [DEBUG] [Thread-197179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:44:10.714 [DEBUG] [Thread-197179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:44:10.762 [DEBUG] [Thread-197179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:44:10.762 [DEBUG] [Thread-197179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:44:10.771 [DEBUG] [Thread-197179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:44:10.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:44:10.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:44:10.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:44:10.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:44:10.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:44:10.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:44:10.807 [DEBUG] [Thread-197179] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:44:17.396 [DEBUG] [Thread-197181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:44:23.419 [DEBUG] [Thread-197182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:44:36.365 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:44:36.366 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:44:38.466 [DEBUG] [Thread-197183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:44:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:44:40.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:44:40.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:44:42.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 44, 24), 0.23397, 98.2591, 0.0, 10.111, 10.8493, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:44:42.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:44:24
2026-04-12T22:44:42.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:44:42.752 [DEBUG] [Thread-197184] [transport.py] [_log()] starting thread (client mode): 0xa795b0a0
2026-04-12T22:44:42.752 [DEBUG] [Thread-197184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:44:42.775 [DEBUG] [Thread-197184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:44:42.776 [INFO] [Thread-197184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] client lang: <none>
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] server lang: <none>
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] kex follows: False
2026-04-12T22:44:42.779 [DEBUG] [Thread-197184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:44:42.780 [DEBUG] [Thread-197184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:44:42.780 [DEBUG] [Thread-197184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:44:42.780 [DEBUG] [Thread-197184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:44:42.780 [DEBUG] [Thread-197184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:44:42.780 [DEBUG] [Thread-197184] [transport.py] [_log()] Compression: none
2026-04-12T22:44:42.780 [DEBUG] [Thread-197184] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:44:42.798 [DEBUG] [Thread-197184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:44:42.799 [DEBUG] [Thread-197184] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:44:42.800 [DEBUG] [Thread-197184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:44:42.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:44:42.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:44:42.802 [DEBUG] [Thread-197184] [transport.py] [_log()] userauth is OK
2026-04-12T22:44:42.802 [DEBUG] [Thread-197184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:44:42.802 [DEBUG] [Thread-197184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:44:42.802 [DEBUG] [Thread-197184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:44:42.802 [DEBUG] [Thread-197184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:44:42.836 [INFO] [Thread-197184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:44:42.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:44:43.481 [DEBUG] [Thread-197184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:44:43.481 [DEBUG] [Thread-197184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:44:43.481 [DEBUG] [Thread-197184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:44:43.522 [DEBUG] [Thread-197184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:44:43.522 [DEBUG] [Thread-197184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:44:43.526 [DEBUG] [Thread-197184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:44:43.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:44:43.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:44:43.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:44:43.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:44:43.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:44:43.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:44:43.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:44:43.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:44:43.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:44:43.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.863992 -999.00  +11.10   5.60     94  +10.20 1 2 1 3 1     0    0 0.46 -16.70 .NESw 5.6 5.6 207.2 7.2 11.9 -22.1 11.8 -21.0 11.5 -19.1 11.8 -21.0
2026-04-12T22:44:43.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:44:43.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:44:43.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.863992
2026-04-12T22:44:43.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:44:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:44:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:44:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:44:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:44:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:44:24', tmtdew=0.23397, humidity=98.2591, cloud=0.0, wind=10.111, temperature=10.8493, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:44:08.909', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:44:43.554 [DEBUG] [Thread-197184] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:44:43.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:44:43.647 [DEBUG] [Thread-197187] [transport.py] [_log()] starting thread (client mode): 0xa79582e0
2026-04-12T22:44:43.647 [DEBUG] [Thread-197187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:44:43.662 [DEBUG] [Thread-197187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:44:43.662 [INFO] [Thread-197187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:44:43.670 [DEBUG] [Thread-197187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:44:43.671 [DEBUG] [Thread-197187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:44:43.671 [DEBUG] [Thread-197187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:44:43.671 [DEBUG] [Thread-197187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:43.671 [DEBUG] [Thread-197187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:44:43.671 [DEBUG] [Thread-197187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:43.671 [DEBUG] [Thread-197187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] client lang: <none>
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] server lang: <none>
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] kex follows: False
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] Compression: none
2026-04-12T22:44:43.672 [DEBUG] [Thread-197187] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:44:43.728 [DEBUG] [Thread-197187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:44:43.729 [DEBUG] [Thread-197187] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:44:43.729 [DEBUG] [Thread-197187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:44:43.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:44:43.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:44:43.784 [DEBUG] [Thread-197187] [transport.py] [_log()] userauth is OK
2026-04-12T22:44:43.784 [DEBUG] [Thread-197187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:44:43.785 [DEBUG] [Thread-197187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:44:43.785 [DEBUG] [Thread-197187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:44:43.785 [DEBUG] [Thread-197187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:44:43.809 [INFO] [Thread-197187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:44:43.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:44:43.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:44:44.689 [DEBUG] [Thread-197187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:44:44.690 [DEBUG] [Thread-197187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:44:44.740 [DEBUG] [Thread-197187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:44:44.740 [DEBUG] [Thread-197187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:44:44.748 [DEBUG] [Thread-197187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:44:44.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:44:44.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:44:44.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:44:44.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:44:44.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:44:44.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:44:44.781 [DEBUG] [Thread-197187] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:44:53.505 [DEBUG] [Thread-197189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:45:08.558 [DEBUG] [Thread-197190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:45:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:45:14.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:45:14.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:45:16.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 44, 59), 0.241595, 98.2094, 0.0, 9.47592, 10.8327, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:45:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:44:59
2026-04-12T22:45:16.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:45:16.618 [DEBUG] [Thread-197191] [transport.py] [_log()] starting thread (client mode): 0xa7958370
2026-04-12T22:45:16.618 [DEBUG] [Thread-197191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:45:16.639 [DEBUG] [Thread-197191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:45:16.639 [INFO] [Thread-197191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] client lang: <none>
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] server lang: <none>
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] kex follows: False
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] Compression: none
2026-04-12T22:45:16.642 [DEBUG] [Thread-197191] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:45:16.662 [DEBUG] [Thread-197191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:45:16.663 [DEBUG] [Thread-197191] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:45:16.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:45:16.664 [DEBUG] [Thread-197191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:45:16.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:45:16.666 [DEBUG] [Thread-197191] [transport.py] [_log()] userauth is OK
2026-04-12T22:45:16.666 [DEBUG] [Thread-197191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:45:16.666 [DEBUG] [Thread-197191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:45:16.666 [DEBUG] [Thread-197191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:45:16.666 [DEBUG] [Thread-197191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:45:16.701 [INFO] [Thread-197191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:45:16.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:45:17.370 [DEBUG] [Thread-197191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:45:17.371 [DEBUG] [Thread-197191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:45:17.371 [DEBUG] [Thread-197191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:45:17.411 [DEBUG] [Thread-197191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:45:17.411 [DEBUG] [Thread-197191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:45:17.413 [DEBUG] [Thread-197191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:45:17.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:45:17.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:45:17.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:45:17.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:45:17.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:45:17.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:45:17.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:45:17.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:45:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:45:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.864340 -999.00  +11.10   5.98     94  +10.20 1 2 1 3 1     0    0 0.46 -16.24 .NE.. 6.0 6.0 222.8 7.1 11.9 -22.1 11.8 -21.1 11.5 -19.1 11.8 -21.1
2026-04-12T22:45:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:45:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:45:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.864340
2026-04-12T22:45:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:45:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:45:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:45:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:45:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:45:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:44:59', tmtdew=0.241595, humidity=98.2094, cloud=0.0, wind=9.47592, temperature=10.8327, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:44:38.976', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:45:17.432 [DEBUG] [Thread-197191] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:45:17.453 [DEBUG] [Thread-197194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:45:17.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:45:17.513 [DEBUG] [Thread-197195] [transport.py] [_log()] starting thread (client mode): 0xae5b1240
2026-04-12T22:45:17.513 [DEBUG] [Thread-197195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:45:17.528 [DEBUG] [Thread-197195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:45:17.528 [INFO] [Thread-197195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:45:17.536 [DEBUG] [Thread-197195] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:45:17.536 [DEBUG] [Thread-197195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:45:17.536 [DEBUG] [Thread-197195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:45:17.536 [DEBUG] [Thread-197195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:17.536 [DEBUG] [Thread-197195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:17.536 [DEBUG] [Thread-197195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:17.536 [DEBUG] [Thread-197195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] client lang: <none>
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] server lang: <none>
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] kex follows: False
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] Compression: none
2026-04-12T22:45:17.537 [DEBUG] [Thread-197195] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:45:17.593 [DEBUG] [Thread-197195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:45:17.594 [DEBUG] [Thread-197195] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:45:17.594 [DEBUG] [Thread-197195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:45:17.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:45:17.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:45:17.657 [DEBUG] [Thread-197195] [transport.py] [_log()] userauth is OK
2026-04-12T22:45:17.657 [DEBUG] [Thread-197195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:45:17.657 [DEBUG] [Thread-197195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:45:17.657 [DEBUG] [Thread-197195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:45:17.657 [DEBUG] [Thread-197195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:45:17.676 [INFO] [Thread-197195] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:45:17.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:45:17.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:45:18.518 [DEBUG] [Thread-197195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:45:18.518 [DEBUG] [Thread-197195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:45:18.570 [DEBUG] [Thread-197195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:45:18.570 [DEBUG] [Thread-197195] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:45:18.579 [DEBUG] [Thread-197195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:45:18.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:45:18.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:45:18.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:45:18.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:45:18.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:45:18.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:45:18.616 [DEBUG] [Thread-197195] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:45:23.595 [DEBUG] [Thread-197197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:45:36.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:45:36.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:45:38.647 [DEBUG] [Thread-197198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:45:48.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:45:48.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:45:48.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:45:49.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 45, 35), 0.37303, 97.4847, 0.0, 13.1983, 10.9653, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:45:49.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:45:35
2026-04-12T22:45:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:45:50.453 [DEBUG] [Thread-197199] [transport.py] [_log()] starting thread (client mode): 0xa7958190
2026-04-12T22:45:50.454 [DEBUG] [Thread-197199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:45:50.472 [DEBUG] [Thread-197199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:45:50.472 [INFO] [Thread-197199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] client lang: <none>
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] server lang: <none>
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] kex follows: False
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] Compression: none
2026-04-12T22:45:50.476 [DEBUG] [Thread-197199] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:45:50.494 [DEBUG] [Thread-197199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:45:50.495 [DEBUG] [Thread-197199] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:45:50.495 [DEBUG] [Thread-197199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:45:50.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:45:50.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:45:50.498 [DEBUG] [Thread-197199] [transport.py] [_log()] userauth is OK
2026-04-12T22:45:50.498 [DEBUG] [Thread-197199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:45:50.498 [DEBUG] [Thread-197199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:45:50.498 [DEBUG] [Thread-197199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:45:50.498 [DEBUG] [Thread-197199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:45:50.520 [INFO] [Thread-197199] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:45:50.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:45:51.170 [DEBUG] [Thread-197199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:45:51.180 [DEBUG] [Thread-197199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:45:51.181 [DEBUG] [Thread-197199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:45:51.212 [DEBUG] [Thread-197199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:45:51.212 [DEBUG] [Thread-197199] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:45:51.216 [DEBUG] [Thread-197199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:45:51.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:45:51.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:45:51.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:45:51.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:45:51.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:45:51.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:45:51.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:45:51.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.864686 -999.00  +11.10   5.54     94  +10.10 1 2 1 3 1     0    0 0.48 -16.06 .NE.. 5.5 5.5 211.4 8.4 11.9 -22.1 11.8 -20.9 11.5 -19.1 -999.0 -999.0
2026-04-12T22:45:51.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:45:51.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:45:51.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.864686
2026-04-12T22:45:51.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:45:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:45:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:45:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:45:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:45:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:45:35', tmtdew=0.37303, humidity=97.4847, cloud=0.0, wind=13.1983, temperature=10.9653, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:45:08.870', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:45:51.245 [DEBUG] [Thread-197199] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:45:51.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:45:51.351 [DEBUG] [Thread-197202] [transport.py] [_log()] starting thread (client mode): 0xa7959c60
2026-04-12T22:45:51.351 [DEBUG] [Thread-197202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:45:51.365 [DEBUG] [Thread-197202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:45:51.365 [INFO] [Thread-197202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:45:51.373 [DEBUG] [Thread-197202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:45:51.373 [DEBUG] [Thread-197202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:45:51.373 [DEBUG] [Thread-197202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:45:51.373 [DEBUG] [Thread-197202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:51.373 [DEBUG] [Thread-197202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:45:51.373 [DEBUG] [Thread-197202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] client lang: <none>
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] server lang: <none>
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] kex follows: False
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:45:51.374 [DEBUG] [Thread-197202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:45:51.375 [DEBUG] [Thread-197202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:45:51.375 [DEBUG] [Thread-197202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:45:51.375 [DEBUG] [Thread-197202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:45:51.375 [DEBUG] [Thread-197202] [transport.py] [_log()] Compression: none
2026-04-12T22:45:51.375 [DEBUG] [Thread-197202] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:45:51.435 [DEBUG] [Thread-197202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:45:51.436 [DEBUG] [Thread-197202] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:45:51.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:45:51.437 [DEBUG] [Thread-197202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:45:51.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:45:51.493 [DEBUG] [Thread-197202] [transport.py] [_log()] userauth is OK
2026-04-12T22:45:51.493 [DEBUG] [Thread-197202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:45:51.494 [DEBUG] [Thread-197202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:45:51.494 [DEBUG] [Thread-197202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:45:51.494 [DEBUG] [Thread-197202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:45:51.512 [INFO] [Thread-197202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:45:51.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:45:51.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:45:52.405 [DEBUG] [Thread-197202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:45:52.405 [DEBUG] [Thread-197202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:45:52.453 [DEBUG] [Thread-197202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:45:52.453 [DEBUG] [Thread-197202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:45:52.462 [DEBUG] [Thread-197202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:45:52.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:45:52.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:45:52.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:45:52.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:45:52.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:45:52.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:45:52.498 [DEBUG] [Thread-197202] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:45:53.685 [DEBUG] [Thread-197204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:08.738 [DEBUG] [Thread-197205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:17.525 [DEBUG] [Thread-197206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:22.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:46:22.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:46:22.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:46:23.776 [DEBUG] [Thread-197207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 46, 10), 0.181445, 98.2755, 0.0, 10.0051, 10.7992, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:46:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:46:10
2026-04-12T22:46:24.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:46:24.348 [DEBUG] [Thread-197208] [transport.py] [_log()] starting thread (client mode): 0xae5b3fd0
2026-04-12T22:46:24.348 [DEBUG] [Thread-197208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:46:24.370 [DEBUG] [Thread-197208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:46:24.370 [INFO] [Thread-197208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:46:24.373 [DEBUG] [Thread-197208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:46:24.373 [DEBUG] [Thread-197208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:46:24.373 [DEBUG] [Thread-197208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:46:24.373 [DEBUG] [Thread-197208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] client lang: <none>
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] server lang: <none>
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] kex follows: False
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:46:24.374 [DEBUG] [Thread-197208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:46:24.375 [DEBUG] [Thread-197208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:46:24.375 [DEBUG] [Thread-197208] [transport.py] [_log()] Compression: none
2026-04-12T22:46:24.375 [DEBUG] [Thread-197208] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:46:24.393 [DEBUG] [Thread-197208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:46:24.394 [DEBUG] [Thread-197208] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:46:24.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:46:24.395 [DEBUG] [Thread-197208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:46:24.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:46:24.397 [DEBUG] [Thread-197208] [transport.py] [_log()] userauth is OK
2026-04-12T22:46:24.397 [DEBUG] [Thread-197208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:46:24.398 [DEBUG] [Thread-197208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:46:24.398 [DEBUG] [Thread-197208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:46:24.398 [DEBUG] [Thread-197208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:46:24.421 [INFO] [Thread-197208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:46:24.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:46:25.050 [DEBUG] [Thread-197208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:46:25.050 [DEBUG] [Thread-197208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:46:25.050 [DEBUG] [Thread-197208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:46:25.091 [DEBUG] [Thread-197208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:46:25.091 [DEBUG] [Thread-197208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:46:25.095 [DEBUG] [Thread-197208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:46:25.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:46:25.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:46:25.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:46:25.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:46:25.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:46:25.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:46:25.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:46:25.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:46:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:46:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.865381 -999.00  +11.00   5.94     94  +10.10 1 2 1 3 1     0    0 0.49 -15.08 .NE.. 5.9 5.9 251.8 10.2 11.9 -22.1 11.8 -21.0 11.5 -19.1 11.8 -21.1
2026-04-12T22:46:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:46:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:46:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.865381
2026-04-12T22:46:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:46:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:46:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:46:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:46:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:46:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:46:10', tmtdew=0.181445, humidity=98.2755, cloud=0.0, wind=10.0051, temperature=10.7992, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:46:08.918', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:46:25.122 [DEBUG] [Thread-197208] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:46:25.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:46:25.213 [DEBUG] [Thread-197211] [transport.py] [_log()] starting thread (client mode): 0xae5b1a50
2026-04-12T22:46:25.214 [DEBUG] [Thread-197211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:46:25.228 [DEBUG] [Thread-197211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:46:25.228 [INFO] [Thread-197211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:46:25.236 [DEBUG] [Thread-197211] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:46:25.236 [DEBUG] [Thread-197211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:46:25.236 [DEBUG] [Thread-197211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:46:25.236 [DEBUG] [Thread-197211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:25.236 [DEBUG] [Thread-197211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] client lang: <none>
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] server lang: <none>
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] kex follows: False
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] Compression: none
2026-04-12T22:46:25.237 [DEBUG] [Thread-197211] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:46:25.293 [DEBUG] [Thread-197211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:46:25.294 [DEBUG] [Thread-197211] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:46:25.295 [DEBUG] [Thread-197211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:46:25.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:46:25.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:46:25.349 [DEBUG] [Thread-197211] [transport.py] [_log()] userauth is OK
2026-04-12T22:46:25.350 [DEBUG] [Thread-197211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:46:25.350 [DEBUG] [Thread-197211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:46:25.350 [DEBUG] [Thread-197211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:46:25.350 [DEBUG] [Thread-197211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:46:25.368 [INFO] [Thread-197211] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:46:25.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:46:25.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:46:26.208 [DEBUG] [Thread-197211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:46:26.208 [DEBUG] [Thread-197211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:46:26.256 [DEBUG] [Thread-197211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:46:26.256 [DEBUG] [Thread-197211] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:46:26.265 [DEBUG] [Thread-197211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:46:26.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:46:26.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:46:26.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:46:26.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:46:26.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:46:26.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:46:26.303 [DEBUG] [Thread-197211] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:46:36.784 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:36.785 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:38.811 [DEBUG] [Thread-197213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:53.860 [DEBUG] [Thread-197214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:46:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:46:56.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:46:56.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:46:57.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 46, 46), 0.36798, 97.5184, 0.0, 11.4343, 11.0319, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:46:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:46:46
2026-04-12T22:46:58.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:46:58.200 [DEBUG] [Thread-197215] [transport.py] [_log()] starting thread (client mode): 0xae5b2d70
2026-04-12T22:46:58.200 [DEBUG] [Thread-197215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:46:58.220 [DEBUG] [Thread-197215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:46:58.220 [INFO] [Thread-197215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:46:58.223 [DEBUG] [Thread-197215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:46:58.223 [DEBUG] [Thread-197215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:46:58.223 [DEBUG] [Thread-197215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:46:58.223 [DEBUG] [Thread-197215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:58.223 [DEBUG] [Thread-197215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:58.223 [DEBUG] [Thread-197215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] client lang: <none>
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] server lang: <none>
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] kex follows: False
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] Compression: none
2026-04-12T22:46:58.224 [DEBUG] [Thread-197215] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:46:58.242 [DEBUG] [Thread-197215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:46:58.242 [DEBUG] [Thread-197215] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:46:58.243 [DEBUG] [Thread-197215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:46:58.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:46:58.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:46:58.245 [DEBUG] [Thread-197215] [transport.py] [_log()] userauth is OK
2026-04-12T22:46:58.245 [DEBUG] [Thread-197215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:46:58.246 [DEBUG] [Thread-197215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:46:58.246 [DEBUG] [Thread-197215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:46:58.246 [DEBUG] [Thread-197215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:46:58.270 [INFO] [Thread-197215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:46:58.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:46:58.856 [DEBUG] [Thread-197215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:46:58.857 [DEBUG] [Thread-197215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:46:58.857 [DEBUG] [Thread-197215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:46:58.898 [DEBUG] [Thread-197215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:46:58.899 [DEBUG] [Thread-197215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:46:58.902 [DEBUG] [Thread-197215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:46:58.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:46:58.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:46:58.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:46:58.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:46:58.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:46:58.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:46:58.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:46:58.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:46:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:46:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.865729 -999.00  +11.10   3.03     93  +10.10 1 2 1 3 1     0    0 0.54 -13.79 .NEsw 3.0 3.0 213.4 6.6 11.9 -22.1 11.7 -21.0 11.5 -19.1 11.8 -21.1
2026-04-12T22:46:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:46:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:46:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.865729
2026-04-12T22:46:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:46:58.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:46:58.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:46:58.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:46:58.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:46:58.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:46:46', tmtdew=0.36798, humidity=97.5184, cloud=0.0, wind=11.4343, temperature=11.0319, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:46:38.986', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6682499999999996, nan, nan, nan, nan, nan, nan, 2.5934999999999997, nan, nan, 2.1674999999999986, nan, nan, nan, nan, 2.2504999999999997, nan, 2.1315, 1.1530000000000005, 1.2280000000000006, 2.5585000000000004, nan, nan], zp_timestamp='2026-04-12T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:46:58.933 [DEBUG] [Thread-197215] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:46:59.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:46:59.028 [DEBUG] [Thread-197218] [transport.py] [_log()] starting thread (client mode): 0xa7958df0
2026-04-12T22:46:59.028 [DEBUG] [Thread-197218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:46:59.044 [DEBUG] [Thread-197218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:46:59.044 [INFO] [Thread-197218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:46:59.052 [DEBUG] [Thread-197218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:46:59.052 [DEBUG] [Thread-197218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:46:59.052 [DEBUG] [Thread-197218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:46:59.052 [DEBUG] [Thread-197218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:59.052 [DEBUG] [Thread-197218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:46:59.052 [DEBUG] [Thread-197218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] client lang: <none>
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] server lang: <none>
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] kex follows: False
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:46:59.053 [DEBUG] [Thread-197218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:46:59.054 [DEBUG] [Thread-197218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:46:59.054 [DEBUG] [Thread-197218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:46:59.054 [DEBUG] [Thread-197218] [transport.py] [_log()] Compression: none
2026-04-12T22:46:59.054 [DEBUG] [Thread-197218] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:46:59.109 [DEBUG] [Thread-197218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:46:59.110 [DEBUG] [Thread-197218] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:46:59.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:46:59.111 [DEBUG] [Thread-197218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:46:59.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:46:59.165 [DEBUG] [Thread-197218] [transport.py] [_log()] userauth is OK
2026-04-12T22:46:59.166 [DEBUG] [Thread-197218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:46:59.166 [DEBUG] [Thread-197218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:46:59.167 [DEBUG] [Thread-197218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:46:59.167 [DEBUG] [Thread-197218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:46:59.186 [INFO] [Thread-197218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:46:59.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:46:59.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:47:00.049 [DEBUG] [Thread-197218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:47:00.049 [DEBUG] [Thread-197218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:47:00.097 [DEBUG] [Thread-197218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:47:00.097 [DEBUG] [Thread-197218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:47:00.106 [DEBUG] [Thread-197218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:47:00.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:47:00.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:47:00.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:47:00.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:47:00.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:47:00.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:47:00.143 [DEBUG] [Thread-197218] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:47:08.898 [DEBUG] [Thread-197220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:47:17.599 [DEBUG] [Thread-197221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:47:23.951 [DEBUG] [Thread-197222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:47:30.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:47:30.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:47:30.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:47:31.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 47, 22), 0.228915, 98.2924, 0.0, 11.8933, 10.8326, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:47:31.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:47:22
2026-04-12T22:47:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:47:31.966 [DEBUG] [Thread-197223] [transport.py] [_log()] starting thread (client mode): 0xa795a200
2026-04-12T22:47:31.967 [DEBUG] [Thread-197223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:47:31.987 [DEBUG] [Thread-197223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:47:31.987 [INFO] [Thread-197223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] client lang: <none>
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] server lang: <none>
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] kex follows: False
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] Compression: none
2026-04-12T22:47:31.990 [DEBUG] [Thread-197223] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:47:32.009 [DEBUG] [Thread-197223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:47:32.009 [DEBUG] [Thread-197223] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:47:32.010 [DEBUG] [Thread-197223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:47:32.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:47:32.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:47:32.012 [DEBUG] [Thread-197223] [transport.py] [_log()] userauth is OK
2026-04-12T22:47:32.012 [DEBUG] [Thread-197223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:47:32.012 [DEBUG] [Thread-197223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:47:32.012 [DEBUG] [Thread-197223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:47:32.013 [DEBUG] [Thread-197223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:47:32.037 [INFO] [Thread-197223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:47:32.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:47:32.650 [DEBUG] [Thread-197223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:47:32.651 [DEBUG] [Thread-197223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:47:32.651 [DEBUG] [Thread-197223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:47:32.692 [DEBUG] [Thread-197223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:47:32.692 [DEBUG] [Thread-197223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:47:32.695 [DEBUG] [Thread-197223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:47:32.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:47:32.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:47:32.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:47:32.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:47:32.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:47:32.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:47:32.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:47:32.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:47:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:47:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.866076 -999.00  +11.00   4.23     93  +10.10 1 2 1 3 1     0    0 0.57 -12.99 .NEsw 4.2 4.2 219.0 6.9 11.9 -22.1 11.8 -21.0 11.5 -19.2 11.8 -21.0
2026-04-12T22:47:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:47:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:47:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.866076
2026-04-12T22:47:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:47:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:47:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:47:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:47:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:47:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:47:22', tmtdew=0.228915, humidity=98.2924, cloud=0.0, wind=11.8933, temperature=10.8326, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:47:08.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3389999999999995, nan, nan, nan, nan, nan, 2.731, nan, nan, 2.8629999999999987, 2.694749999999999, nan, nan, nan, 2.4665, nan, nan, 2.2030000000000003, 1.740000000000001, 2.9395000000000007, nan, nan], zp_timestamp='2026-04-12T20:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:47:32.725 [DEBUG] [Thread-197223] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:47:32.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:47:32.822 [DEBUG] [Thread-197226] [transport.py] [_log()] starting thread (client mode): 0xa795bd30
2026-04-12T22:47:32.822 [DEBUG] [Thread-197226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:47:32.840 [DEBUG] [Thread-197226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:47:32.841 [INFO] [Thread-197226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:47:32.852 [DEBUG] [Thread-197226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:47:32.852 [DEBUG] [Thread-197226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:47:32.852 [DEBUG] [Thread-197226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] client lang: <none>
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] server lang: <none>
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] kex follows: False
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] Compression: none
2026-04-12T22:47:32.853 [DEBUG] [Thread-197226] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:47:32.905 [DEBUG] [Thread-197226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:47:32.906 [DEBUG] [Thread-197226] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:47:32.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:47:32.907 [DEBUG] [Thread-197226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:47:32.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:47:32.962 [DEBUG] [Thread-197226] [transport.py] [_log()] userauth is OK
2026-04-12T22:47:32.962 [DEBUG] [Thread-197226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:47:32.962 [DEBUG] [Thread-197226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:47:32.962 [DEBUG] [Thread-197226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:47:32.962 [DEBUG] [Thread-197226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:47:32.981 [INFO] [Thread-197226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:47:32.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:47:32.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:47:33.787 [DEBUG] [Thread-197226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:47:33.787 [DEBUG] [Thread-197226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:47:33.835 [DEBUG] [Thread-197226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:47:33.835 [DEBUG] [Thread-197226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:47:33.844 [DEBUG] [Thread-197226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:47:33.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:47:33.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:47:33.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:47:33.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:47:33.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:47:33.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:47:33.878 [DEBUG] [Thread-197226] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:47:36.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:47:36.990 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:47:38.988 [DEBUG] [Thread-197228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:47:54.051 [DEBUG] [Thread-197229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:48:03.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:48:03.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:48:03.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:48:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 47, 57), 0.181405, 98.276, 0.0, 9.75816, 10.8161, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:48:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:47:57
2026-04-12T22:48:05.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:48:05.725 [DEBUG] [Thread-197230] [transport.py] [_log()] starting thread (client mode): 0xae5b36a0
2026-04-12T22:48:05.726 [DEBUG] [Thread-197230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:48:05.745 [DEBUG] [Thread-197230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:48:05.745 [INFO] [Thread-197230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:48:05.748 [DEBUG] [Thread-197230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:48:05.748 [DEBUG] [Thread-197230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] client lang: <none>
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] server lang: <none>
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] kex follows: False
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:48:05.749 [DEBUG] [Thread-197230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:48:05.750 [DEBUG] [Thread-197230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:48:05.750 [DEBUG] [Thread-197230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:48:05.750 [DEBUG] [Thread-197230] [transport.py] [_log()] Compression: none
2026-04-12T22:48:05.750 [DEBUG] [Thread-197230] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:48:05.769 [DEBUG] [Thread-197230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:48:05.770 [DEBUG] [Thread-197230] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:48:05.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:48:05.772 [DEBUG] [Thread-197230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:48:05.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:48:05.774 [DEBUG] [Thread-197230] [transport.py] [_log()] userauth is OK
2026-04-12T22:48:05.774 [DEBUG] [Thread-197230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:48:05.775 [DEBUG] [Thread-197230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:48:05.775 [DEBUG] [Thread-197230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:48:05.775 [DEBUG] [Thread-197230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:48:05.807 [INFO] [Thread-197230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:48:05.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:48:06.445 [DEBUG] [Thread-197230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:48:06.445 [DEBUG] [Thread-197230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:48:06.446 [DEBUG] [Thread-197230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:48:06.486 [DEBUG] [Thread-197230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:48:06.486 [DEBUG] [Thread-197230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:48:06.489 [DEBUG] [Thread-197230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:48:06.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:48:06.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:48:06.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:48:06.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:48:06.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:48:06.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:48:06.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:48:06.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:48:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:48:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.866423 -999.00  +11.00   7.42     93  +10.00 1 2 1 3 1     0    0 0.55 -13.03 .NE.. 7.4 7.4 224.0 8.9 11.9 -22.1 11.8 -20.9 11.5 -19.2 11.8 -20.9
2026-04-12T22:48:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:48:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:48:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.866423
2026-04-12T22:48:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:48:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:48:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:48:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:48:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:48:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:47:57', tmtdew=0.181405, humidity=98.276, cloud=0.0, wind=9.75816, temperature=10.8161, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:47:38.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3389999999999995, nan, nan, nan, nan, nan, 2.731, nan, nan, 2.8629999999999987, 2.694749999999999, nan, nan, nan, 2.4665, nan, nan, 2.2030000000000003, 1.740000000000001, 2.9395000000000007, nan, nan], zp_timestamp='2026-04-12T20:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:48:06.514 [DEBUG] [Thread-197230] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:48:06.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:48:06.608 [DEBUG] [Thread-197233] [transport.py] [_log()] starting thread (client mode): 0xae5b1870
2026-04-12T22:48:06.608 [DEBUG] [Thread-197233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:48:06.624 [DEBUG] [Thread-197233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:48:06.624 [INFO] [Thread-197233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:48:06.632 [DEBUG] [Thread-197233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:48:06.633 [DEBUG] [Thread-197233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:48:06.633 [DEBUG] [Thread-197233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:48:06.633 [DEBUG] [Thread-197233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:06.633 [DEBUG] [Thread-197233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:06.633 [DEBUG] [Thread-197233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:06.633 [DEBUG] [Thread-197233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:06.633 [DEBUG] [Thread-197233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] client lang: <none>
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] server lang: <none>
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] kex follows: False
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:48:06.634 [DEBUG] [Thread-197233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:48:06.635 [DEBUG] [Thread-197233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:48:06.635 [DEBUG] [Thread-197233] [transport.py] [_log()] Compression: none
2026-04-12T22:48:06.635 [DEBUG] [Thread-197233] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:48:06.690 [DEBUG] [Thread-197233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:48:06.690 [DEBUG] [Thread-197233] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:48:06.691 [DEBUG] [Thread-197233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:48:06.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:48:06.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:48:06.746 [DEBUG] [Thread-197233] [transport.py] [_log()] userauth is OK
2026-04-12T22:48:06.746 [DEBUG] [Thread-197233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:48:06.746 [DEBUG] [Thread-197233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:48:06.747 [DEBUG] [Thread-197233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:48:06.747 [DEBUG] [Thread-197233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:48:06.768 [INFO] [Thread-197233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:48:06.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:48:06.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:48:07.614 [DEBUG] [Thread-197233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:48:07.614 [DEBUG] [Thread-197233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:48:07.662 [DEBUG] [Thread-197233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:48:07.663 [DEBUG] [Thread-197233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:48:07.672 [DEBUG] [Thread-197233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:48:07.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:48:07.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:48:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:48:07.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:48:07.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:48:07.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:48:07.706 [DEBUG] [Thread-197233] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:48:09.088 [DEBUG] [Thread-197235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:48:17.665 [DEBUG] [Thread-197236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:48:24.150 [DEBUG] [Thread-197237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:48:37.194 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:48:37.196 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:48:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:48:37.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:48:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:48:38.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 47, 57), 0.181405, 98.276, 0.0, 9.75816, 10.8161, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:48:38.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:47:57
2026-04-12T22:48:39.188 [DEBUG] [Thread-197238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:48:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:48:39.542 [DEBUG] [Thread-197239] [transport.py] [_log()] starting thread (client mode): 0xae5b23b0
2026-04-12T22:48:39.542 [DEBUG] [Thread-197239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:48:39.558 [DEBUG] [Thread-197239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:48:39.558 [INFO] [Thread-197239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:48:39.561 [DEBUG] [Thread-197239] [transport.py] [_log()] client lang: <none>
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] server lang: <none>
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] kex follows: False
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] Compression: none
2026-04-12T22:48:39.562 [DEBUG] [Thread-197239] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:48:39.579 [DEBUG] [Thread-197239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:48:39.580 [DEBUG] [Thread-197239] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:48:39.582 [DEBUG] [Thread-197239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:48:39.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:48:39.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:48:39.584 [DEBUG] [Thread-197239] [transport.py] [_log()] userauth is OK
2026-04-12T22:48:39.584 [DEBUG] [Thread-197239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:48:39.584 [DEBUG] [Thread-197239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:48:39.584 [DEBUG] [Thread-197239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:48:39.584 [DEBUG] [Thread-197239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:48:39.603 [INFO] [Thread-197239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:48:39.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:48:40.192 [DEBUG] [Thread-197239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:48:40.192 [DEBUG] [Thread-197239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:48:40.192 [DEBUG] [Thread-197239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:48:40.233 [DEBUG] [Thread-197239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:48:40.233 [DEBUG] [Thread-197239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:48:40.236 [DEBUG] [Thread-197239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:48:40.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:48:40.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:48:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:48:40.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:48:40.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:48:40.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:48:40.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:48:40.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:48:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:48:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.866770 -999.00  +11.00   6.10     93  +10.00 1 2 1 3 1     0    0 0.61 -10.57 .NE.. 6.1 6.1 213.5 7.8 11.9 -22.2 11.8 -21.1 11.5 -19.0 11.8 -21.1
2026-04-12T22:48:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:48:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:48:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.866770
2026-04-12T22:48:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:48:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:48:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:48:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:48:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:48:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:47:57', tmtdew=0.181405, humidity=98.276, cloud=0.0, wind=9.75816, temperature=10.8161, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:48:08.928', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3389999999999995, nan, nan, nan, nan, nan, 2.731, nan, nan, 2.8629999999999987, 2.694749999999999, nan, nan, nan, 2.4665, nan, nan, 2.2030000000000003, 1.740000000000001, 2.9395000000000007, nan, nan], zp_timestamp='2026-04-12T20:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:48:40.263 [DEBUG] [Thread-197239] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:48:40.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:48:40.356 [DEBUG] [Thread-197242] [transport.py] [_log()] starting thread (client mode): 0xae5b2950
2026-04-12T22:48:40.356 [DEBUG] [Thread-197242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:48:40.371 [DEBUG] [Thread-197242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:48:40.371 [INFO] [Thread-197242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:48:40.379 [DEBUG] [Thread-197242] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:48:40.379 [DEBUG] [Thread-197242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:48:40.379 [DEBUG] [Thread-197242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:48:40.379 [DEBUG] [Thread-197242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:40.379 [DEBUG] [Thread-197242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] client lang: <none>
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] server lang: <none>
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] kex follows: False
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] Compression: none
2026-04-12T22:48:40.380 [DEBUG] [Thread-197242] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:48:40.438 [DEBUG] [Thread-197242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:48:40.439 [DEBUG] [Thread-197242] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:48:40.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:48:40.440 [DEBUG] [Thread-197242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:48:40.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:48:40.497 [DEBUG] [Thread-197242] [transport.py] [_log()] userauth is OK
2026-04-12T22:48:40.498 [DEBUG] [Thread-197242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:48:40.498 [DEBUG] [Thread-197242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:48:40.498 [DEBUG] [Thread-197242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:48:40.498 [DEBUG] [Thread-197242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:48:40.516 [INFO] [Thread-197242] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:48:40.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:48:40.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:48:41.294 [DEBUG] [Thread-197242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:48:41.295 [DEBUG] [Thread-197242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:48:41.344 [DEBUG] [Thread-197242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:48:41.345 [DEBUG] [Thread-197242] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:48:41.354 [DEBUG] [Thread-197242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:48:41.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:48:41.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:48:41.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:48:41.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:48:41.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:48:41.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:48:41.394 [DEBUG] [Thread-197242] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:48:54.222 [DEBUG] [Thread-197244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:49:09.273 [DEBUG] [Thread-197245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:49:11.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:49:11.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:49:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:49:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 48, 32), 0.36267, 97.552, 0.0, 12.1752, 10.9658, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:49:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:48:32
2026-04-12T22:49:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:49:13.355 [DEBUG] [Thread-197246] [transport.py] [_log()] starting thread (client mode): 0xa795b820
2026-04-12T22:49:13.355 [DEBUG] [Thread-197246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:49:13.375 [DEBUG] [Thread-197246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:49:13.376 [INFO] [Thread-197246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] client lang: <none>
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] server lang: <none>
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] kex follows: False
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] Compression: none
2026-04-12T22:49:13.377 [DEBUG] [Thread-197246] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:49:13.387 [DEBUG] [Thread-197246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:49:13.388 [DEBUG] [Thread-197246] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:49:13.388 [DEBUG] [Thread-197246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:49:13.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:49:13.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:49:13.390 [DEBUG] [Thread-197246] [transport.py] [_log()] userauth is OK
2026-04-12T22:49:13.390 [DEBUG] [Thread-197246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:49:13.390 [DEBUG] [Thread-197246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:49:13.390 [DEBUG] [Thread-197246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:49:13.390 [DEBUG] [Thread-197246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:49:13.409 [INFO] [Thread-197246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:49:13.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:49:14.005 [DEBUG] [Thread-197246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:49:14.006 [DEBUG] [Thread-197246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:49:14.006 [DEBUG] [Thread-197246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:49:14.047 [DEBUG] [Thread-197246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:49:14.047 [DEBUG] [Thread-197246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:49:14.049 [DEBUG] [Thread-197246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:49:14.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:49:14.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:49:14.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:49:14.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:49:14.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:49:14.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:49:14.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:49:14.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:49:14.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:49:14.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.867117 -999.00  +11.00   5.38     93  +10.00 1 2 1 3 1     0    0 0.66 -9.72 .NEs. 5.4 5.4 234.9 9.7 11.9 -22.1 11.8 -21.0 11.6 -19.1 11.8 -21.1
2026-04-12T22:49:14.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.867117
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:49:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:48:32', tmtdew=0.36267, humidity=97.552, cloud=0.0, wind=12.1752, temperature=10.9658, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:48:38.909', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3389999999999995, nan, nan, nan, nan, nan, 2.731, nan, nan, 2.8629999999999987, 2.694749999999999, nan, nan, nan, 2.4665, nan, nan, 2.2030000000000003, 1.740000000000001, 2.9395000000000007, nan, nan], zp_timestamp='2026-04-12T20:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:49:14.069 [DEBUG] [Thread-197246] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:49:14.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:49:14.151 [DEBUG] [Thread-197249] [transport.py] [_log()] starting thread (client mode): 0xa7958790
2026-04-12T22:49:14.151 [DEBUG] [Thread-197249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:49:14.166 [DEBUG] [Thread-197249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:49:14.167 [INFO] [Thread-197249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:49:14.174 [DEBUG] [Thread-197249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:49:14.174 [DEBUG] [Thread-197249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:49:14.174 [DEBUG] [Thread-197249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:49:14.174 [DEBUG] [Thread-197249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] client lang: <none>
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] server lang: <none>
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] kex follows: False
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] Compression: none
2026-04-12T22:49:14.175 [DEBUG] [Thread-197249] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:49:14.234 [DEBUG] [Thread-197249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:49:14.235 [DEBUG] [Thread-197249] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:49:14.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:49:14.236 [DEBUG] [Thread-197249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:49:14.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:49:14.290 [DEBUG] [Thread-197249] [transport.py] [_log()] userauth is OK
2026-04-12T22:49:14.290 [DEBUG] [Thread-197249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:49:14.290 [DEBUG] [Thread-197249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:49:14.290 [DEBUG] [Thread-197249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:49:14.290 [DEBUG] [Thread-197249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:49:14.309 [INFO] [Thread-197249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:49:14.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:49:14.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:49:15.179 [DEBUG] [Thread-197249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:49:15.180 [DEBUG] [Thread-197249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:49:15.228 [DEBUG] [Thread-197249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:49:15.228 [DEBUG] [Thread-197249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:49:15.237 [DEBUG] [Thread-197249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:49:15.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:49:15.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:49:15.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:49:15.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:49:15.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:49:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:49:15.274 [DEBUG] [Thread-197249] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:49:17.754 [DEBUG] [Thread-197251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:49:24.311 [DEBUG] [Thread-197252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:49:37.400 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:49:37.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:49:39.371 [DEBUG] [Thread-197253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:49:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:49:45.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:49: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
2026-04-12T22:49:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 49, 8), 0.23131, 98.2762, 0.0, 9.84636, 10.783, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:49:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:49:08
2026-04-12T22:49:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:49:47.146 [DEBUG] [Thread-197254] [transport.py] [_log()] starting thread (client mode): 0xa795a2c0
2026-04-12T22:49:47.147 [DEBUG] [Thread-197254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:49:47.166 [DEBUG] [Thread-197254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:49:47.166 [INFO] [Thread-197254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] client lang: <none>
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] server lang: <none>
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] kex follows: False
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] Compression: none
2026-04-12T22:49:47.168 [DEBUG] [Thread-197254] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:49:47.179 [DEBUG] [Thread-197254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:49:47.180 [DEBUG] [Thread-197254] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:49:47.180 [DEBUG] [Thread-197254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:49:47.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:49:47.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:49:47.182 [DEBUG] [Thread-197254] [transport.py] [_log()] userauth is OK
2026-04-12T22:49:47.182 [DEBUG] [Thread-197254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:49:47.182 [DEBUG] [Thread-197254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:49:47.182 [DEBUG] [Thread-197254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:49:47.182 [DEBUG] [Thread-197254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:49:47.200 [INFO] [Thread-197254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:49:47.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:49:47.772 [DEBUG] [Thread-197254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:49:47.772 [DEBUG] [Thread-197254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:49:47.773 [DEBUG] [Thread-197254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:49:47.813 [DEBUG] [Thread-197254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:49:47.813 [DEBUG] [Thread-197254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:49:47.816 [DEBUG] [Thread-197254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:49:47.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:49:47.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:49:47.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:49:47.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:49:47.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:49:47.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:49:47.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:49:47.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.867812 -999.00  +11.10   4.80     92   +9.90 1 2 1 3 1     0    0 0.76 -6.57 ..Es. 4.8 4.8 213.2 8.3 11.9 -22.1 11.8 -21.1 11.5 -19.1 11.7 -21.1
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.867812
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:49:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:49:08', tmtdew=0.23131, humidity=98.2762, cloud=0.0, wind=9.84636, temperature=10.783, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:49:38.957', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3389999999999995, nan, nan, nan, nan, nan, 2.731, nan, nan, 2.8629999999999987, 2.694749999999999, nan, nan, nan, 2.4665, nan, nan, 2.2030000000000003, 1.740000000000001, 2.9395000000000007, nan, nan], zp_timestamp='2026-04-12T20:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:49:47.840 [DEBUG] [Thread-197254] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:49:47.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:49:47.937 [DEBUG] [Thread-197257] [transport.py] [_log()] starting thread (client mode): 0xb0f40cd0
2026-04-12T22:49:47.937 [DEBUG] [Thread-197257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:49:47.952 [DEBUG] [Thread-197257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:49:47.952 [INFO] [Thread-197257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:49:47.959 [DEBUG] [Thread-197257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] client lang: <none>
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] server lang: <none>
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] kex follows: False
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] Compression: none
2026-04-12T22:49:47.960 [DEBUG] [Thread-197257] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:49:48.018 [DEBUG] [Thread-197257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:49:48.019 [DEBUG] [Thread-197257] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:49:48.019 [DEBUG] [Thread-197257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:49:48.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:49:48.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:49:48.074 [DEBUG] [Thread-197257] [transport.py] [_log()] userauth is OK
2026-04-12T22:49:48.074 [DEBUG] [Thread-197257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:49:48.074 [DEBUG] [Thread-197257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:49:48.075 [DEBUG] [Thread-197257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:49:48.075 [DEBUG] [Thread-197257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:49:48.093 [INFO] [Thread-197257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:49:48.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:49:48.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:49:48.905 [DEBUG] [Thread-197257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:49:48.905 [DEBUG] [Thread-197257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:49:48.953 [DEBUG] [Thread-197257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:49:48.953 [DEBUG] [Thread-197257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:49:48.962 [DEBUG] [Thread-197257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:49:48.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:49:48.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:49:48.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:49:48.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:49:48.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:49:48.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:49:49.003 [DEBUG] [Thread-197257] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:49:54.410 [DEBUG] [Thread-197259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:09.463 [DEBUG] [Thread-197260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:17.813 [DEBUG] [Thread-197261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:19.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:50:19.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:50:19.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:50:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 49, 44), 0.36269, 97.5523, 0.0, 12.528, 10.9992, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:50:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:49:44
2026-04-12T22:50:20.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:50:20.802 [DEBUG] [Thread-197262] [transport.py] [_log()] starting thread (client mode): 0xa7958f10
2026-04-12T22:50:20.802 [DEBUG] [Thread-197262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:50:20.823 [DEBUG] [Thread-197262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:50:20.824 [INFO] [Thread-197262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] client lang: <none>
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] server lang: <none>
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] kex follows: False
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] Compression: none
2026-04-12T22:50:20.825 [DEBUG] [Thread-197262] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:50:20.833 [DEBUG] [Thread-197262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:50:20.834 [DEBUG] [Thread-197262] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:50:20.834 [DEBUG] [Thread-197262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:50:20.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:50:20.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:50:20.836 [DEBUG] [Thread-197262] [transport.py] [_log()] userauth is OK
2026-04-12T22:50:20.836 [DEBUG] [Thread-197262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:50:20.836 [DEBUG] [Thread-197262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:50:20.836 [DEBUG] [Thread-197262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:50:20.836 [DEBUG] [Thread-197262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:50:20.860 [INFO] [Thread-197262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:50:20.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:50:21.459 [DEBUG] [Thread-197262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:50:21.459 [DEBUG] [Thread-197262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:50:21.460 [DEBUG] [Thread-197262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:50:21.500 [DEBUG] [Thread-197262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:50:21.501 [DEBUG] [Thread-197262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:50:21.504 [DEBUG] [Thread-197262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:50:21.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:50:21.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:50:21.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:50:21.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:50:21.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:50:21.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:50:21.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:50:21.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:50:21.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:50:21.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.868158 -999.00  +11.10   4.39     92   +9.90 1 2 1 3 1     0    0 0.81 -4.79 ..EsW 4.4 4.4 224.3 7.6 11.9 -22.1 11.8 -21.1 11.5 -19.1 11.7 -20.9
2026-04-12T22:50:21.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:50:21.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:50:21.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.868158
2026-04-12T22:50:21.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:50:21.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:50:21.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:50:21.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:50:21.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:50:21.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:49:44', tmtdew=0.36269, humidity=97.5523, cloud=0.0, wind=12.528, temperature=10.9992, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:50:08.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.3389999999999995, nan, nan, nan, nan, nan, 2.731, nan, nan, 2.8629999999999987, 2.694749999999999, nan, nan, nan, 2.4665, nan, nan, 2.2030000000000003, 1.740000000000001, 2.9395000000000007, nan, nan], zp_timestamp='2026-04-12T20:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:50:21.532 [DEBUG] [Thread-197262] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:50:21.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:50:21.624 [DEBUG] [Thread-197265] [transport.py] [_log()] starting thread (client mode): 0xae563fa0
2026-04-12T22:50:21.624 [DEBUG] [Thread-197265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:50:21.638 [DEBUG] [Thread-197265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:50:21.638 [INFO] [Thread-197265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] client lang: <none>
2026-04-12T22:50:21.646 [DEBUG] [Thread-197265] [transport.py] [_log()] server lang: <none>
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] kex follows: False
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] Compression: none
2026-04-12T22:50:21.647 [DEBUG] [Thread-197265] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:50:21.705 [DEBUG] [Thread-197265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:50:21.706 [DEBUG] [Thread-197265] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:50:21.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:50:21.707 [DEBUG] [Thread-197265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:50:21.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:50:21.762 [DEBUG] [Thread-197265] [transport.py] [_log()] userauth is OK
2026-04-12T22:50:21.762 [DEBUG] [Thread-197265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:50:21.762 [DEBUG] [Thread-197265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:50:21.763 [DEBUG] [Thread-197265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:50:21.763 [DEBUG] [Thread-197265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:50:21.781 [INFO] [Thread-197265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:50:21.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:50:21.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:50:22.600 [DEBUG] [Thread-197265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:50:22.601 [DEBUG] [Thread-197265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:50:22.649 [DEBUG] [Thread-197265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:50:22.649 [DEBUG] [Thread-197265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:50:22.658 [DEBUG] [Thread-197265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:50:22.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:50:22.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:50:22.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:50:22.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:50:22.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:50:22.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:50:22.695 [DEBUG] [Thread-197265] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:50:24.503 [DEBUG] [Thread-197267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:37.606 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:37.608 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:39.556 [DEBUG] [Thread-197268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:50:52.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:50:52.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:50:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 50, 20), 0.18884, 98.2265, 0.0, 10.1992, 10.7334, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:50:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:50:20
2026-04-12T22:50:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:50:54.597 [DEBUG] [Thread-197269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:50:54.607 [DEBUG] [Thread-197270] [transport.py] [_log()] starting thread (client mode): 0xae5a5870
2026-04-12T22:50:54.607 [DEBUG] [Thread-197270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:50:54.629 [DEBUG] [Thread-197270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:50:54.630 [INFO] [Thread-197270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:50:54.633 [DEBUG] [Thread-197270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:50:54.633 [DEBUG] [Thread-197270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:50:54.633 [DEBUG] [Thread-197270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:50:54.633 [DEBUG] [Thread-197270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:54.633 [DEBUG] [Thread-197270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:54.633 [DEBUG] [Thread-197270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] client lang: <none>
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] server lang: <none>
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] kex follows: False
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:50:54.634 [DEBUG] [Thread-197270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:50:54.635 [DEBUG] [Thread-197270] [transport.py] [_log()] Compression: none
2026-04-12T22:50:54.635 [DEBUG] [Thread-197270] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:50:54.651 [DEBUG] [Thread-197270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:50:54.652 [DEBUG] [Thread-197270] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:50:54.652 [DEBUG] [Thread-197270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:50:54.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:50:54.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:50:54.654 [DEBUG] [Thread-197270] [transport.py] [_log()] userauth is OK
2026-04-12T22:50:54.654 [DEBUG] [Thread-197270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:50:54.655 [DEBUG] [Thread-197270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:50:54.655 [DEBUG] [Thread-197270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:50:54.655 [DEBUG] [Thread-197270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:50:54.692 [INFO] [Thread-197270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:50:54.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:50:55.453 [DEBUG] [Thread-197270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:50:55.453 [DEBUG] [Thread-197270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:50:55.453 [DEBUG] [Thread-197270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:50:55.494 [DEBUG] [Thread-197270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:50:55.494 [DEBUG] [Thread-197270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:50:55.496 [DEBUG] [Thread-197270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:50:55.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:50:55.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:50:55.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:50:55.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:50:55.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:50:55.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:50:55.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:50:55.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:50:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:50:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.868158 -999.00  +11.10   4.39     92   +9.90 1 2 1 3 1     0    0 0.81 -4.79 ..EsW 4.4 4.4 224.3 7.6 11.9 -22.1 11.8 -21.1 11.5 -19.1 11.7 -20.9
2026-04-12T22:50:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:50:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:50:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.868158
2026-04-12T22:50:55.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:50:55.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:50:55.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:50:55.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:50:55.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:50:55.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:50:20', tmtdew=0.18884, humidity=98.2265, cloud=0.0, wind=10.1992, temperature=10.7334, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:50:08.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:50:55.514 [DEBUG] [Thread-197270] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:50:55.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:50:55.617 [DEBUG] [Thread-197273] [transport.py] [_log()] starting thread (client mode): 0xae5a4910
2026-04-12T22:50:55.617 [DEBUG] [Thread-197273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:50:55.631 [DEBUG] [Thread-197273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:50:55.631 [INFO] [Thread-197273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:50:55.638 [DEBUG] [Thread-197273] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:50:55.638 [DEBUG] [Thread-197273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:50:55.638 [DEBUG] [Thread-197273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] client lang: <none>
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] server lang: <none>
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] kex follows: False
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] Compression: none
2026-04-12T22:50:55.639 [DEBUG] [Thread-197273] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:50:55.697 [DEBUG] [Thread-197273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:50:55.697 [DEBUG] [Thread-197273] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:50:55.698 [DEBUG] [Thread-197273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:50:55.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:50:55.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:50:55.753 [DEBUG] [Thread-197273] [transport.py] [_log()] userauth is OK
2026-04-12T22:50:55.753 [DEBUG] [Thread-197273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:50:55.753 [DEBUG] [Thread-197273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:50:55.753 [DEBUG] [Thread-197273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:50:55.754 [DEBUG] [Thread-197273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:50:55.772 [INFO] [Thread-197273] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:50:55.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:50:55.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:50:56.587 [DEBUG] [Thread-197273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:50:56.588 [DEBUG] [Thread-197273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:50:56.635 [DEBUG] [Thread-197273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:50:56.636 [DEBUG] [Thread-197273] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:50:56.645 [DEBUG] [Thread-197273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:50:56.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:50: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')
2026-04-12T22:50:56.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:50:56.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:50:56.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:50:56.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:50:56.681 [DEBUG] [Thread-197273] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:51:09.628 [DEBUG] [Thread-197275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:51:17.869 [DEBUG] [Thread-197276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:51:24.684 [DEBUG] [Thread-197277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:51:26.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:51:26.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:51:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:51:28.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 50, 55), 0.231185, 98.2763, 0.0, 11.9639, 10.7834, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:51:28.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:50:55
2026-04-12T22:51:28.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:51:28.622 [DEBUG] [Thread-197278] [transport.py] [_log()] starting thread (client mode): 0xae561ff0
2026-04-12T22:51:28.622 [DEBUG] [Thread-197278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:51:28.642 [DEBUG] [Thread-197278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:51:28.642 [INFO] [Thread-197278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:51:28.645 [DEBUG] [Thread-197278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:51:28.645 [DEBUG] [Thread-197278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] client lang: <none>
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] server lang: <none>
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] kex follows: False
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:51:28.646 [DEBUG] [Thread-197278] [transport.py] [_log()] Compression: none
2026-04-12T22:51:28.647 [DEBUG] [Thread-197278] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:51:28.655 [DEBUG] [Thread-197278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:51:28.655 [DEBUG] [Thread-197278] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:51:28.655 [DEBUG] [Thread-197278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:51:28.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:51:28.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:51:28.657 [DEBUG] [Thread-197278] [transport.py] [_log()] userauth is OK
2026-04-12T22:51:28.657 [DEBUG] [Thread-197278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:51:28.657 [DEBUG] [Thread-197278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:51:28.657 [DEBUG] [Thread-197278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:51:28.657 [DEBUG] [Thread-197278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:51:28.676 [INFO] [Thread-197278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:51:28.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:51:29.457 [DEBUG] [Thread-197278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:51:29.457 [DEBUG] [Thread-197278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:51:29.458 [DEBUG] [Thread-197278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:51:29.498 [DEBUG] [Thread-197278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:51:29.498 [DEBUG] [Thread-197278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:51:29.501 [DEBUG] [Thread-197278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:51:29.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:51:29.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:51:29.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:51:29.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:51:29.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:51:29.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:51:29.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:51:29.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:51:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:51:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.868506 -999.00  +11.10   6.62     92   +9.90 1 2 1 3 1     0    0 0.86 -2.77 .NEs. 6.6 6.6 213.3 8.5 11.9 -22.1 11.7 -21.0 11.4 -19.0 11.8 -21.1
2026-04-12T22:51:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:51:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:51:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.868506
2026-04-12T22:51:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:51:29.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:51:29.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:51:29.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:51:29.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:51:29.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:50:55', tmtdew=0.231185, humidity=98.2763, cloud=0.0, wind=11.9639, temperature=10.7834, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:50:38.918', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:51:29.526 [DEBUG] [Thread-197278] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:51:29.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:51:29.629 [DEBUG] [Thread-197281] [transport.py] [_log()] starting thread (client mode): 0xae561e10
2026-04-12T22:51:29.629 [DEBUG] [Thread-197281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:51:29.644 [DEBUG] [Thread-197281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:51:29.644 [INFO] [Thread-197281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:51:29.651 [DEBUG] [Thread-197281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] client lang: <none>
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] server lang: <none>
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] kex follows: False
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] Compression: none
2026-04-12T22:51:29.652 [DEBUG] [Thread-197281] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:51:29.709 [DEBUG] [Thread-197281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:51:29.710 [DEBUG] [Thread-197281] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:51:29.710 [DEBUG] [Thread-197281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:51:29.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:51:29.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:51:29.765 [DEBUG] [Thread-197281] [transport.py] [_log()] userauth is OK
2026-04-12T22:51:29.765 [DEBUG] [Thread-197281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:51:29.765 [DEBUG] [Thread-197281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:51:29.765 [DEBUG] [Thread-197281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:51:29.766 [DEBUG] [Thread-197281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:51:29.784 [INFO] [Thread-197281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:51:29.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:51:29.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:51:30.628 [DEBUG] [Thread-197281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:51:30.628 [DEBUG] [Thread-197281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:51:30.676 [DEBUG] [Thread-197281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:51:30.676 [DEBUG] [Thread-197281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:51:30.686 [DEBUG] [Thread-197281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:51:30.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:51:30.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:51:30.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:51:30.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:51:30.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:51:30.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:51:30.722 [DEBUG] [Thread-197281] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:51:37.813 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:51:37.814 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:51:39.724 [DEBUG] [Thread-197283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:51:54.787 [DEBUG] [Thread-197284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:52:00.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:52:00.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:52:00.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:52:02.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 51, 31), 0.23114, 98.2764, 0.0, 11.7522, 10.7668, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:52:02.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:51:31
2026-04-12T22:52:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:52:02.568 [DEBUG] [Thread-197285] [transport.py] [_log()] starting thread (client mode): 0xa7959d50
2026-04-12T22:52:02.568 [DEBUG] [Thread-197285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:52:02.588 [DEBUG] [Thread-197285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:52:02.588 [INFO] [Thread-197285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] client lang: <none>
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] server lang: <none>
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] kex follows: False
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:52:02.591 [DEBUG] [Thread-197285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:52:02.592 [DEBUG] [Thread-197285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:52:02.592 [DEBUG] [Thread-197285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:52:02.592 [DEBUG] [Thread-197285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:52:02.592 [DEBUG] [Thread-197285] [transport.py] [_log()] Compression: none
2026-04-12T22:52:02.592 [DEBUG] [Thread-197285] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:52:02.608 [DEBUG] [Thread-197285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:52:02.608 [DEBUG] [Thread-197285] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:52:02.609 [DEBUG] [Thread-197285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:52:02.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:52:02.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:52:02.611 [DEBUG] [Thread-197285] [transport.py] [_log()] userauth is OK
2026-04-12T22:52:02.611 [DEBUG] [Thread-197285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:52:02.612 [DEBUG] [Thread-197285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:52:02.612 [DEBUG] [Thread-197285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:52:02.612 [DEBUG] [Thread-197285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:52:02.631 [INFO] [Thread-197285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:52:02.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:52:03.431 [DEBUG] [Thread-197285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:52:03.432 [DEBUG] [Thread-197285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:52:03.432 [DEBUG] [Thread-197285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:52:03.472 [DEBUG] [Thread-197285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:52:03.472 [DEBUG] [Thread-197285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:52:03.475 [DEBUG] [Thread-197285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:52:03.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:52:03.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:52:03.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:52:03.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:52:03.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:52:03.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:52:03.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:52:03.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:52:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:52:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.868853 -999.00  +11.10   5.75     92   +9.90 1 2 1 3 1     0    0 0.93 -0.91 .NEs. 5.8 5.8 214.8 10.5 11.9 -22.2 11.8 -21.0 11.5 -19.1 11.8 -21.1
2026-04-12T22:52:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:52:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:52:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.868853
2026-04-12T22:52:03.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:52:03.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:52:03.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:52:03.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:52:03.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:52:03.504 [DEBUG] [Thread-197285] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:52:03.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:51:31', tmtdew=0.23114, humidity=98.2764, cloud=0.0, wind=11.7522, temperature=10.7668, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:51:08.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:52:03.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:52:03.597 [DEBUG] [Thread-197288] [transport.py] [_log()] starting thread (client mode): 0xa795a9e0
2026-04-12T22:52:03.597 [DEBUG] [Thread-197288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:52:03.611 [DEBUG] [Thread-197288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:52:03.611 [INFO] [Thread-197288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] client lang: <none>
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] server lang: <none>
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] kex follows: False
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:52:03.619 [DEBUG] [Thread-197288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:52:03.620 [DEBUG] [Thread-197288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:52:03.620 [DEBUG] [Thread-197288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:52:03.620 [DEBUG] [Thread-197288] [transport.py] [_log()] Compression: none
2026-04-12T22:52:03.620 [DEBUG] [Thread-197288] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:52:03.678 [DEBUG] [Thread-197288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:52:03.679 [DEBUG] [Thread-197288] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:52:03.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:52:03.680 [DEBUG] [Thread-197288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:52:03.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:52:03.734 [DEBUG] [Thread-197288] [transport.py] [_log()] userauth is OK
2026-04-12T22:52:03.734 [DEBUG] [Thread-197288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:52:03.734 [DEBUG] [Thread-197288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:52:03.734 [DEBUG] [Thread-197288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:52:03.735 [DEBUG] [Thread-197288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:52:03.753 [INFO] [Thread-197288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:52:03.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:52:03.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:52:04.609 [DEBUG] [Thread-197288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:52:04.609 [DEBUG] [Thread-197288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:52:04.657 [DEBUG] [Thread-197288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:52:04.657 [DEBUG] [Thread-197288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:52:04.666 [DEBUG] [Thread-197288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:52:04.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:52:04.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:52:04.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:52:04.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:52:04.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:52:04.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:52:04.703 [DEBUG] [Thread-197288] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:52:09.823 [DEBUG] [Thread-197290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:52:17.928 [DEBUG] [Thread-197291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:52:24.886 [DEBUG] [Thread-197292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:52:34.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:52:34.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:52:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:52:35.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 52, 7), 0.228545, 98.2931, 0.0, 11.8757, 10.7503, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:52:35.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:52:07
2026-04-12T22:52:36.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:52:36.548 [DEBUG] [Thread-197293] [transport.py] [_log()] starting thread (client mode): 0xae5b2b30
2026-04-12T22:52:36.548 [DEBUG] [Thread-197293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:52:36.569 [DEBUG] [Thread-197293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:52:36.569 [INFO] [Thread-197293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:52:36.571 [DEBUG] [Thread-197293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:52:36.571 [DEBUG] [Thread-197293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] client lang: <none>
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] server lang: <none>
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] kex follows: False
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:52:36.572 [DEBUG] [Thread-197293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:52:36.573 [DEBUG] [Thread-197293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:52:36.573 [DEBUG] [Thread-197293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:52:36.573 [DEBUG] [Thread-197293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:52:36.573 [DEBUG] [Thread-197293] [transport.py] [_log()] Compression: none
2026-04-12T22:52:36.573 [DEBUG] [Thread-197293] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:52:36.586 [DEBUG] [Thread-197293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:52:36.587 [DEBUG] [Thread-197293] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:52:36.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:52:36.587 [DEBUG] [Thread-197293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:52:36.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:52:36.589 [DEBUG] [Thread-197293] [transport.py] [_log()] userauth is OK
2026-04-12T22:52:36.589 [DEBUG] [Thread-197293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:52:36.589 [DEBUG] [Thread-197293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:52:36.589 [DEBUG] [Thread-197293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:52:36.589 [DEBUG] [Thread-197293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:52:36.612 [INFO] [Thread-197293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:52:36.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:52:37.409 [DEBUG] [Thread-197293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:52:37.409 [DEBUG] [Thread-197293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:52:37.409 [DEBUG] [Thread-197293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:52:37.450 [DEBUG] [Thread-197293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:52:37.450 [DEBUG] [Thread-197293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:52:37.454 [DEBUG] [Thread-197293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:52:37.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:52:37.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:52:37.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:52:37.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:52:37.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:52:37.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:52:37.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:52:37.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:52:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:52:37.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.869201 -999.00  +11.10   6.23     92   +9.90 1 2 1 3 1     0    0 0.99 0.93 .ne.. 6.2 6.2 219.6 7.7 11.9 -22.1 11.7 -21.0 11.5 -19.1 11.7 -21.1
2026-04-12T22:52:37.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:52:37.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:52:37.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.869201
2026-04-12T22:52:37.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:52:37.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:52:37.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:52:37.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:52:37.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:52:37.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:52:07', tmtdew=0.228545, humidity=98.2931, cloud=0.0, wind=11.8757, temperature=10.7503, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:51:38.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:52:37.482 [DEBUG] [Thread-197293] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:52:37.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:52:37.572 [DEBUG] [Thread-197296] [transport.py] [_log()] starting thread (client mode): 0xae508460
2026-04-12T22:52:37.572 [DEBUG] [Thread-197296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:52:37.586 [DEBUG] [Thread-197296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:52:37.586 [INFO] [Thread-197296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:52:37.596 [DEBUG] [Thread-197296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:52:37.596 [DEBUG] [Thread-197296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:52:37.596 [DEBUG] [Thread-197296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:52:37.596 [DEBUG] [Thread-197296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:37.596 [DEBUG] [Thread-197296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:52:37.596 [DEBUG] [Thread-197296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:37.596 [DEBUG] [Thread-197296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] client lang: <none>
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] server lang: <none>
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] kex follows: False
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] Compression: none
2026-04-12T22:52:37.597 [DEBUG] [Thread-197296] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:52:37.653 [DEBUG] [Thread-197296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:52:37.653 [DEBUG] [Thread-197296] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:52:37.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:52:37.653 [DEBUG] [Thread-197296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:52:37.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:52:37.709 [DEBUG] [Thread-197296] [transport.py] [_log()] userauth is OK
2026-04-12T22:52:37.709 [DEBUG] [Thread-197296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:52:37.709 [DEBUG] [Thread-197296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:52:37.709 [DEBUG] [Thread-197296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:52:37.709 [DEBUG] [Thread-197296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:52:37.722 [INFO] [Thread-197296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:52:37.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:52:37.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:52:38.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:52:38.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:52:38.561 [DEBUG] [Thread-197296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:52:38.561 [DEBUG] [Thread-197296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:52:38.609 [DEBUG] [Thread-197296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:52:38.609 [DEBUG] [Thread-197296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:52:38.619 [DEBUG] [Thread-197296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:52:38.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:52:38.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:52:38.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:52:38.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:52:38.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:52:38.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:52:38.656 [DEBUG] [Thread-197296] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:52:39.925 [DEBUG] [Thread-197298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:52:54.982 [DEBUG] [Thread-197299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:53:08.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:53:08.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:53:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:53:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 52, 44), 0.36741, 97.5198, 0.0, 11.3285, 10.867, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:53:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:52:44
2026-04-12T22:53:10.017 [DEBUG] [Thread-197300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:53:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:53:10.531 [DEBUG] [Thread-197301] [transport.py] [_log()] starting thread (client mode): 0xae534fd0
2026-04-12T22:53:10.531 [DEBUG] [Thread-197301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:53:10.551 [DEBUG] [Thread-197301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:53:10.551 [INFO] [Thread-197301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] client lang: <none>
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] server lang: <none>
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] kex follows: False
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] Compression: none
2026-04-12T22:53:10.554 [DEBUG] [Thread-197301] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:53:10.572 [DEBUG] [Thread-197301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:53:10.572 [DEBUG] [Thread-197301] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:53:10.572 [DEBUG] [Thread-197301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:53:10.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:53:10.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:53:10.574 [DEBUG] [Thread-197301] [transport.py] [_log()] userauth is OK
2026-04-12T22:53:10.574 [DEBUG] [Thread-197301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:53:10.574 [DEBUG] [Thread-197301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:53:10.574 [DEBUG] [Thread-197301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:53:10.574 [DEBUG] [Thread-197301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:53:10.593 [INFO] [Thread-197301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:53:10.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:53:11.398 [DEBUG] [Thread-197301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:53:11.398 [DEBUG] [Thread-197301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:53:11.398 [DEBUG] [Thread-197301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:53:11.439 [DEBUG] [Thread-197301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:53:11.439 [DEBUG] [Thread-197301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:53:11.443 [DEBUG] [Thread-197301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:53:11.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:53:11.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:53:11.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:53:11.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:53:11.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:53:11.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:53:11.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:53:11.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:53:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:53:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.869548 -999.00  +11.10   6.82     92   +9.90 1 2 1 3 1     0    0 1.04 2.76 .ne.. 6.8 6.8 220.4 8.5 11.9 -22.2 11.8 -21.0 11.5 -19.0 11.8 -20.9
2026-04-12T22:53:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:53:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:53:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.869548
2026-04-12T22:53:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:53:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:53:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:53:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:53:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:53:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:52:44', tmtdew=0.36741, humidity=97.5198, cloud=0.0, wind=11.3285, temperature=10.867, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:52:08.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:53:11.471 [DEBUG] [Thread-197301] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:53:11.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:53:11.565 [DEBUG] [Thread-197304] [transport.py] [_log()] starting thread (client mode): 0xae5b3a90
2026-04-12T22:53:11.565 [DEBUG] [Thread-197304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:53:11.581 [DEBUG] [Thread-197304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:53:11.581 [INFO] [Thread-197304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] client lang: <none>
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] server lang: <none>
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] kex follows: False
2026-04-12T22:53:11.588 [DEBUG] [Thread-197304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:53:11.589 [DEBUG] [Thread-197304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:53:11.589 [DEBUG] [Thread-197304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:53:11.589 [DEBUG] [Thread-197304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:53:11.589 [DEBUG] [Thread-197304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:53:11.589 [DEBUG] [Thread-197304] [transport.py] [_log()] Compression: none
2026-04-12T22:53:11.589 [DEBUG] [Thread-197304] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:53:11.645 [DEBUG] [Thread-197304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:53:11.646 [DEBUG] [Thread-197304] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:53:11.646 [DEBUG] [Thread-197304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:53:11.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:53:11.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:53:11.702 [DEBUG] [Thread-197304] [transport.py] [_log()] userauth is OK
2026-04-12T22:53:11.702 [DEBUG] [Thread-197304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:53:11.702 [DEBUG] [Thread-197304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:53:11.702 [DEBUG] [Thread-197304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:53:11.702 [DEBUG] [Thread-197304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:53:11.725 [INFO] [Thread-197304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:53:11.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:53:11.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:53:12.604 [DEBUG] [Thread-197304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:53:12.605 [DEBUG] [Thread-197304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:53:12.652 [DEBUG] [Thread-197304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:53:12.652 [DEBUG] [Thread-197304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:53:12.662 [DEBUG] [Thread-197304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:53:12.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:53:12.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:53:12.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:53:12.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:53:12.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:53:12.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:53:12.699 [DEBUG] [Thread-197304] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:53:17.985 [DEBUG] [Thread-197306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:53:25.054 [DEBUG] [Thread-197307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:53:38.223 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:53:38.224 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:53:40.108 [DEBUG] [Thread-197308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:53:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:53:42.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:53:42.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:53:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 53, 19), 0.228565, 98.2931, 0.0, 12.0344, 10.7669, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:53:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:53:19
2026-04-12T22:53:44.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:53:44.527 [DEBUG] [Thread-197309] [transport.py] [_log()] starting thread (client mode): 0xa79593f0
2026-04-12T22:53:44.527 [DEBUG] [Thread-197309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:53:44.547 [DEBUG] [Thread-197309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:53:44.547 [INFO] [Thread-197309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:53:44.550 [DEBUG] [Thread-197309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] client lang: <none>
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] server lang: <none>
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] kex follows: False
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:53:44.551 [DEBUG] [Thread-197309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:53:44.552 [DEBUG] [Thread-197309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:53:44.552 [DEBUG] [Thread-197309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:53:44.552 [DEBUG] [Thread-197309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:53:44.552 [DEBUG] [Thread-197309] [transport.py] [_log()] Compression: none
2026-04-12T22:53:44.552 [DEBUG] [Thread-197309] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:53:44.570 [DEBUG] [Thread-197309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:53:44.570 [DEBUG] [Thread-197309] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:53:44.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:53:44.571 [DEBUG] [Thread-197309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:53:44.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:53:44.613 [DEBUG] [Thread-197309] [transport.py] [_log()] userauth is OK
2026-04-12T22:53:44.613 [DEBUG] [Thread-197309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:53:44.613 [DEBUG] [Thread-197309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:53:44.613 [DEBUG] [Thread-197309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:53:44.614 [DEBUG] [Thread-197309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:53:44.645 [INFO] [Thread-197309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:53:44.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:53:45.454 [DEBUG] [Thread-197309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:53:45.455 [DEBUG] [Thread-197309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:53:45.455 [DEBUG] [Thread-197309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:53:45.495 [DEBUG] [Thread-197309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:53:45.495 [DEBUG] [Thread-197309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:53:45.499 [DEBUG] [Thread-197309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:53:45.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:53:45.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:53:45.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:53:45.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:53:45.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:53:45.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:53:45.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:53:45.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:53:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:53:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.870243 -999.00  +11.10   4.78     92   +9.80 1 2 1 3 1     0    0 1.18 6.88 .NE.. 4.8 4.8 229.0 8.9 11.9 -22.1 11.8 -21.1 11.5 -19.0 11.7 -20.9
2026-04-12T22:53:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:53:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:53:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.870243
2026-04-12T22:53:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:53:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:53:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:53:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:53:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:53:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:53:19', tmtdew=0.228565, humidity=98.2931, cloud=0.0, wind=12.0344, temperature=10.7669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:53:08.995', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:53:45.529 [DEBUG] [Thread-197309] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:53:45.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:53:45.621 [DEBUG] [Thread-197312] [transport.py] [_log()] starting thread (client mode): 0xb0f8ef20
2026-04-12T22:53:45.621 [DEBUG] [Thread-197312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:53:45.636 [DEBUG] [Thread-197312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:53:45.636 [INFO] [Thread-197312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:53:45.644 [DEBUG] [Thread-197312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:53:45.644 [DEBUG] [Thread-197312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:53:45.644 [DEBUG] [Thread-197312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:53:45.644 [DEBUG] [Thread-197312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:45.644 [DEBUG] [Thread-197312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:53:45.644 [DEBUG] [Thread-197312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:45.644 [DEBUG] [Thread-197312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] client lang: <none>
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] server lang: <none>
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] kex follows: False
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:53:45.645 [DEBUG] [Thread-197312] [transport.py] [_log()] Compression: none
2026-04-12T22:53:45.646 [DEBUG] [Thread-197312] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:53:45.702 [DEBUG] [Thread-197312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:53:45.702 [DEBUG] [Thread-197312] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:53:45.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:53:45.704 [DEBUG] [Thread-197312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:53:45.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:53:45.763 [DEBUG] [Thread-197312] [transport.py] [_log()] userauth is OK
2026-04-12T22:53:45.763 [DEBUG] [Thread-197312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:53:45.763 [DEBUG] [Thread-197312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:53:45.763 [DEBUG] [Thread-197312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:53:45.763 [DEBUG] [Thread-197312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:53:45.781 [INFO] [Thread-197312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:53:45.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:53:45.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:53:46.620 [DEBUG] [Thread-197312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:53:46.620 [DEBUG] [Thread-197312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:53:46.668 [DEBUG] [Thread-197312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:53:46.668 [DEBUG] [Thread-197312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:53:46.677 [DEBUG] [Thread-197312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:53:46.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:53:46.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:53:46.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:53:46.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:53:46.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:53:46.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:53:46.714 [DEBUG] [Thread-197312] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:53:55.145 [DEBUG] [Thread-197314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:54:10.199 [DEBUG] [Thread-197315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:54:16.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:54:16.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:54:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:54:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 53, 54), 0.36223, 97.5531, 0.0, 12.9161, 10.8339, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:54:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:53:54
2026-04-12T22:54:18.065 [DEBUG] [Thread-197316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:54:18.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:54:18.576 [DEBUG] [Thread-197317] [transport.py] [_log()] starting thread (client mode): 0xae5a4490
2026-04-12T22:54:18.576 [DEBUG] [Thread-197317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:54:18.599 [DEBUG] [Thread-197317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:54:18.599 [INFO] [Thread-197317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:54:18.602 [DEBUG] [Thread-197317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:54:18.602 [DEBUG] [Thread-197317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:54:18.602 [DEBUG] [Thread-197317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:54:18.602 [DEBUG] [Thread-197317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:18.602 [DEBUG] [Thread-197317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] client lang: <none>
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] server lang: <none>
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] kex follows: False
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] Compression: none
2026-04-12T22:54:18.603 [DEBUG] [Thread-197317] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:54:18.619 [DEBUG] [Thread-197317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:54:18.620 [DEBUG] [Thread-197317] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:54:18.620 [DEBUG] [Thread-197317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:54:18.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:54:18.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:54:18.622 [DEBUG] [Thread-197317] [transport.py] [_log()] userauth is OK
2026-04-12T22:54:18.622 [DEBUG] [Thread-197317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:54:18.622 [DEBUG] [Thread-197317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:54:18.622 [DEBUG] [Thread-197317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:54:18.622 [DEBUG] [Thread-197317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:54:18.657 [INFO] [Thread-197317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:54:18.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:54:19.473 [DEBUG] [Thread-197317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:54:19.473 [DEBUG] [Thread-197317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:54:19.474 [DEBUG] [Thread-197317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:54:19.514 [DEBUG] [Thread-197317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:54:19.514 [DEBUG] [Thread-197317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:54:19.516 [DEBUG] [Thread-197317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:54:19.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:54:19.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:54:19.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:54:19.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:54:19.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:54:19.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:54:19.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:54:19.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.870589 -999.00  +11.10   5.05     92   +9.90 1 2 1 3 1     0    0 1.26 9.40 Z.EsW 5.0 5.0 229.9 7.6 11.8 -22.0 11.7 -21.0 11.5 -19.0 11.8 -21.0
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.870589
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:54:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:53:54', tmtdew=0.36223, humidity=97.5531, cloud=0.0, wind=12.9161, temperature=10.8339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:53:38.890', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:54:19.537 [DEBUG] [Thread-197317] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:54:19.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:54:19.617 [DEBUG] [Thread-197320] [transport.py] [_log()] starting thread (client mode): 0xae5a7dc0
2026-04-12T22:54:19.617 [DEBUG] [Thread-197320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:54:19.632 [DEBUG] [Thread-197320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:54:19.632 [INFO] [Thread-197320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] client lang: <none>
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] server lang: <none>
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] kex follows: False
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:54:19.640 [DEBUG] [Thread-197320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:54:19.641 [DEBUG] [Thread-197320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:54:19.641 [DEBUG] [Thread-197320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:54:19.641 [DEBUG] [Thread-197320] [transport.py] [_log()] Compression: none
2026-04-12T22:54:19.641 [DEBUG] [Thread-197320] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:54:19.698 [DEBUG] [Thread-197320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:54:19.699 [DEBUG] [Thread-197320] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:54:19.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:54:19.700 [DEBUG] [Thread-197320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:54:19.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:54:19.754 [DEBUG] [Thread-197320] [transport.py] [_log()] userauth is OK
2026-04-12T22:54:19.754 [DEBUG] [Thread-197320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:54:19.755 [DEBUG] [Thread-197320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:54:19.755 [DEBUG] [Thread-197320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:54:19.755 [DEBUG] [Thread-197320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:54:19.773 [INFO] [Thread-197320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:54:19.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:54:19.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:54:20.603 [DEBUG] [Thread-197320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:54:20.603 [DEBUG] [Thread-197320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:54:20.651 [DEBUG] [Thread-197320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:54:20.651 [DEBUG] [Thread-197320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:54:20.660 [DEBUG] [Thread-197320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:54:20.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:54:20.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:54:20.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:54:20.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:54:20.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:54:20.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:54:20.697 [DEBUG] [Thread-197320] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:54:25.237 [DEBUG] [Thread-197322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:54:38.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:54:38.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:54:40.290 [DEBUG] [Thread-197323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:54:50.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:54:50.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:54: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
2026-04-12T22:54:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 54, 30), 0.23104, 98.2766, 0.0, 10.0051, 10.7338, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:54:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:54:30
2026-04-12T22:54:52.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:54:52.529 [DEBUG] [Thread-197324] [transport.py] [_log()] starting thread (client mode): 0xb0f40580
2026-04-12T22:54:52.529 [DEBUG] [Thread-197324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:54:52.550 [DEBUG] [Thread-197324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:54:52.550 [INFO] [Thread-197324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:54:52.553 [DEBUG] [Thread-197324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:54:52.553 [DEBUG] [Thread-197324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] client lang: <none>
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] server lang: <none>
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] kex follows: False
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] Compression: none
2026-04-12T22:54:52.554 [DEBUG] [Thread-197324] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:54:52.571 [DEBUG] [Thread-197324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:54:52.571 [DEBUG] [Thread-197324] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:54:52.572 [DEBUG] [Thread-197324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:54:52.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:54:52.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:54:52.574 [DEBUG] [Thread-197324] [transport.py] [_log()] userauth is OK
2026-04-12T22:54:52.574 [DEBUG] [Thread-197324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:54:52.574 [DEBUG] [Thread-197324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:54:52.574 [DEBUG] [Thread-197324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:54:52.574 [DEBUG] [Thread-197324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:54:52.600 [INFO] [Thread-197324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:54:52.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:54:53.361 [DEBUG] [Thread-197324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:54:53.361 [DEBUG] [Thread-197324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:54:53.362 [DEBUG] [Thread-197324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:54:53.402 [DEBUG] [Thread-197324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:54:53.402 [DEBUG] [Thread-197324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:54:53.406 [DEBUG] [Thread-197324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:54:53.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:54:53.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:54:53.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:54:53.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:54:53.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:54:53.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:54:53.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:54:53.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:54:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:54:53.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.870937 -999.00  +11.10   4.15     92   +9.90 1 2 1 3 1     0    0 1.30 10.47 ZnE.w 4.2 4.2 228.0 6.7 11.9 -22.0 11.7 -21.0 11.5 -19.0 11.8 -20.9
2026-04-12T22:54:53.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:54:53.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:54:53.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.870937
2026-04-12T22:54:53.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:54:53.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:54:53.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:54:53.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:54:53.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:54:53.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:54:30', tmtdew=0.23104, humidity=98.2766, cloud=0.0, wind=10.0051, temperature=10.7338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:54:08.957', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:54:53.435 [DEBUG] [Thread-197324] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:54:53.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:54:53.530 [DEBUG] [Thread-197327] [transport.py] [_log()] starting thread (client mode): 0xae561f00
2026-04-12T22:54:53.530 [DEBUG] [Thread-197327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:54:53.545 [DEBUG] [Thread-197327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:54:53.545 [INFO] [Thread-197327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:54:53.552 [DEBUG] [Thread-197327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:54:53.553 [DEBUG] [Thread-197327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] client lang: <none>
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] server lang: <none>
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] kex follows: False
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:54:53.554 [DEBUG] [Thread-197327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:54:53.555 [DEBUG] [Thread-197327] [transport.py] [_log()] Compression: none
2026-04-12T22:54:53.555 [DEBUG] [Thread-197327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:54:53.614 [DEBUG] [Thread-197327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:54:53.615 [DEBUG] [Thread-197327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:54:53.624 [DEBUG] [Thread-197327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:54:53.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:54:53.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:54:53.674 [DEBUG] [Thread-197327] [transport.py] [_log()] userauth is OK
2026-04-12T22:54:53.674 [DEBUG] [Thread-197327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:54:53.674 [DEBUG] [Thread-197327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:54:53.674 [DEBUG] [Thread-197327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:54:53.674 [DEBUG] [Thread-197327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:54:53.699 [INFO] [Thread-197327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:54:53.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:54:53.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:54:54.511 [DEBUG] [Thread-197327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:54:54.511 [DEBUG] [Thread-197327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:54:54.559 [DEBUG] [Thread-197327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:54:54.559 [DEBUG] [Thread-197327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:54:54.568 [DEBUG] [Thread-197327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:54:54.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:54:54.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:54:54.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:54:54.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:54:54.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:54:54.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:54:54.608 [DEBUG] [Thread-197327] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:54:55.325 [DEBUG] [Thread-197329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:10.378 [DEBUG] [Thread-197330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:18.154 [DEBUG] [Thread-197331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:55:24.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:55:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:55:25.412 [DEBUG] [Thread-197332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 55, 5), 0.23104, 98.2766, 0.0, 10.1639, 10.7338, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:55:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:55:05
2026-04-12T22:55:26.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:55:26.612 [DEBUG] [Thread-197333] [transport.py] [_log()] starting thread (client mode): 0xae5b1ab0
2026-04-12T22:55:26.612 [DEBUG] [Thread-197333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:55:26.623 [DEBUG] [Thread-197333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:55:26.623 [INFO] [Thread-197333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:55:26.626 [DEBUG] [Thread-197333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:55:26.626 [DEBUG] [Thread-197333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:55:26.626 [DEBUG] [Thread-197333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] client lang: <none>
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] server lang: <none>
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] kex follows: False
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] Compression: none
2026-04-12T22:55:26.627 [DEBUG] [Thread-197333] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:55:26.642 [DEBUG] [Thread-197333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:55:26.643 [DEBUG] [Thread-197333] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:55:26.643 [DEBUG] [Thread-197333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:55:26.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:55:26.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:55:26.645 [DEBUG] [Thread-197333] [transport.py] [_log()] userauth is OK
2026-04-12T22:55:26.645 [DEBUG] [Thread-197333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:55:26.645 [DEBUG] [Thread-197333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:55:26.645 [DEBUG] [Thread-197333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:55:26.645 [DEBUG] [Thread-197333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:55:26.663 [INFO] [Thread-197333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:55:26.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:55:27.666 [DEBUG] [Thread-197333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:55:27.666 [DEBUG] [Thread-197333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:55:27.667 [DEBUG] [Thread-197333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:55:27.708 [DEBUG] [Thread-197333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:55:27.708 [DEBUG] [Thread-197333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:55:27.710 [DEBUG] [Thread-197333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:55:27.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:55:27.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:55:27.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:55:27.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:55:27.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:55:27.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:55:27.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:55:27.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:55:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:55:27.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.871284 -999.00  +11.10   4.56     92   +9.90 1 2 1 3 1     0    0 1.38 12.81 ZnE.w 4.6 4.6 215.8 7.6 11.9 -22.1 11.8 -21.0 11.5 -19.0 11.7 -21.1
2026-04-12T22:55:27.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:55:27.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:55:27.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.871284
2026-04-12T22:55:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:55:27.732 [DEBUG] [Thread-197333] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:55:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:55:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:55:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:55:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:55:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:55:05', tmtdew=0.23104, humidity=98.2766, cloud=0.0, wind=10.1639, temperature=10.7338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:54:38.938', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:55:27.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:55:27.854 [DEBUG] [Thread-197336] [transport.py] [_log()] starting thread (client mode): 0xae5e4820
2026-04-12T22:55:27.854 [DEBUG] [Thread-197336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:55:27.870 [DEBUG] [Thread-197336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:55:27.871 [INFO] [Thread-197336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:55:27.878 [DEBUG] [Thread-197336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] client lang: <none>
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] server lang: <none>
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] kex follows: False
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] Compression: none
2026-04-12T22:55:27.879 [DEBUG] [Thread-197336] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:55:27.937 [DEBUG] [Thread-197336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:55:27.938 [DEBUG] [Thread-197336] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:55:27.938 [DEBUG] [Thread-197336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:55:27.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:55:27.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:55:27.993 [DEBUG] [Thread-197336] [transport.py] [_log()] userauth is OK
2026-04-12T22:55:27.993 [DEBUG] [Thread-197336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:55:27.993 [DEBUG] [Thread-197336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:55:27.993 [DEBUG] [Thread-197336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:55:27.994 [DEBUG] [Thread-197336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:55:28.013 [INFO] [Thread-197336] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:55:28.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:55:28.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:55:28.864 [DEBUG] [Thread-197336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:55:28.864 [DEBUG] [Thread-197336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:55:28.911 [DEBUG] [Thread-197336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:55:28.912 [DEBUG] [Thread-197336] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:55:28.921 [DEBUG] [Thread-197336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:55:28.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:55:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:55:28.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:55:28.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:55:28.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:55:28.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:55:28.954 [DEBUG] [Thread-197336] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:55:38.636 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:38.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:40.450 [DEBUG] [Thread-197338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:55.503 [DEBUG] [Thread-197339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:55:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:55:58.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:55:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:56:00.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 55, 41), 0.3722, 97.487, 0.0, 12.2458, 10.7345, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:56:00.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:55:41
2026-04-12T22:56:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:56:00.809 [DEBUG] [Thread-197340] [transport.py] [_log()] starting thread (client mode): 0xb0f6cbe0
2026-04-12T22:56:00.809 [DEBUG] [Thread-197340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:56:00.831 [DEBUG] [Thread-197340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:56:00.831 [INFO] [Thread-197340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] client lang: <none>
2026-04-12T22:56:00.834 [DEBUG] [Thread-197340] [transport.py] [_log()] server lang: <none>
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] kex follows: False
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] Compression: none
2026-04-12T22:56:00.835 [DEBUG] [Thread-197340] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:56:00.854 [DEBUG] [Thread-197340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:56:00.855 [DEBUG] [Thread-197340] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:56:00.855 [DEBUG] [Thread-197340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:56:00.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:56:00.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:56:00.857 [DEBUG] [Thread-197340] [transport.py] [_log()] userauth is OK
2026-04-12T22:56:00.857 [DEBUG] [Thread-197340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:56:00.857 [DEBUG] [Thread-197340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:56:00.857 [DEBUG] [Thread-197340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:56:00.857 [DEBUG] [Thread-197340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:56:00.873 [INFO] [Thread-197340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:56:00.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:56:01.630 [DEBUG] [Thread-197340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:56:01.630 [DEBUG] [Thread-197340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:56:01.631 [DEBUG] [Thread-197340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:56:01.670 [DEBUG] [Thread-197340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:56:01.670 [DEBUG] [Thread-197340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:56:01.673 [DEBUG] [Thread-197340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:56:01.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:56:01.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:56:01.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:56:01.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:56:01.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:56:01.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:56:01.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:56:01.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.871631 -999.00  +11.10   5.31     92   +9.80 1 2 1 3 1     0    0 1.42 14.28 ZnE.w 5.3 5.3 203.8 6.9 11.9 -22.1 11.8 -21.0 11.5 -19.1 11.8 -21.2
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.871631
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:56:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:55:41', tmtdew=0.3722, humidity=97.487, cloud=0.0, wind=12.2458, temperature=10.7345, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:55:08.918', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.0250000000000004, 2.6732499999999995, 3.2030000000000003, nan, nan, nan, nan, nan, 2.7299999999999995, nan, nan, 2.758499999999998, nan, nan, nan, nan, 1.8575, nan, nan, 2.1015000000000006, 0.9780000000000006, 2.471000000000001, nan, 2.454749999999999], zp_timestamp='2026-04-12T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:56:01.692 [DEBUG] [Thread-197340] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:56:01.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:56:01.804 [DEBUG] [Thread-197343] [transport.py] [_log()] starting thread (client mode): 0xae560730
2026-04-12T22:56:01.804 [DEBUG] [Thread-197343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:56:01.818 [DEBUG] [Thread-197343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:56:01.819 [INFO] [Thread-197343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:56:01.826 [DEBUG] [Thread-197343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:56:01.826 [DEBUG] [Thread-197343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:56:01.826 [DEBUG] [Thread-197343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:56:01.826 [DEBUG] [Thread-197343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:01.826 [DEBUG] [Thread-197343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] client lang: <none>
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] server lang: <none>
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] kex follows: False
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:56:01.827 [DEBUG] [Thread-197343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:56:01.828 [DEBUG] [Thread-197343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:56:01.828 [DEBUG] [Thread-197343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:56:01.828 [DEBUG] [Thread-197343] [transport.py] [_log()] Compression: none
2026-04-12T22:56:01.828 [DEBUG] [Thread-197343] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:56:01.886 [DEBUG] [Thread-197343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:56:01.886 [DEBUG] [Thread-197343] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:56:01.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:56:01.888 [DEBUG] [Thread-197343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:56:01.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:56:01.941 [DEBUG] [Thread-197343] [transport.py] [_log()] userauth is OK
2026-04-12T22:56:01.941 [DEBUG] [Thread-197343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:56:01.941 [DEBUG] [Thread-197343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:56:01.942 [DEBUG] [Thread-197343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:56:01.942 [DEBUG] [Thread-197343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:56:01.965 [INFO] [Thread-197343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:56:01.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:56:01.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:56:02.799 [DEBUG] [Thread-197343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:56:02.799 [DEBUG] [Thread-197343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:56:02.847 [DEBUG] [Thread-197343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:56:02.847 [DEBUG] [Thread-197343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:56:02.857 [DEBUG] [Thread-197343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:56:02.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:56:02.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:56:02.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:56:02.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:56:02.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:56:02.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:56:02.896 [DEBUG] [Thread-197343] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:56:10.539 [DEBUG] [Thread-197345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:56:18.212 [DEBUG] [Thread-197346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:56:25.594 [DEBUG] [Thread-197347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:56:32.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:56:32.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:56:32.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:56:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 56, 16), 0.22852, 98.2932, 0.0, 9.38772, 10.7004, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:56:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:56:16
2026-04-12T22:56:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:56:34.712 [DEBUG] [Thread-197348] [transport.py] [_log()] starting thread (client mode): 0xa794be80
2026-04-12T22:56:34.713 [DEBUG] [Thread-197348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:56:34.733 [DEBUG] [Thread-197348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:56:34.733 [INFO] [Thread-197348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:56:34.736 [DEBUG] [Thread-197348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] client lang: <none>
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] server lang: <none>
2026-04-12T22:56:34.737 [DEBUG] [Thread-197348] [transport.py] [_log()] kex follows: False
2026-04-12T22:56:34.738 [DEBUG] [Thread-197348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:56:34.738 [DEBUG] [Thread-197348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:56:34.738 [DEBUG] [Thread-197348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:56:34.738 [DEBUG] [Thread-197348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:56:34.738 [DEBUG] [Thread-197348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:56:34.738 [DEBUG] [Thread-197348] [transport.py] [_log()] Compression: none
2026-04-12T22:56:34.738 [DEBUG] [Thread-197348] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:56:34.757 [DEBUG] [Thread-197348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:56:34.758 [DEBUG] [Thread-197348] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:56:34.758 [DEBUG] [Thread-197348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:56:34.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:56:34.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:56:34.761 [DEBUG] [Thread-197348] [transport.py] [_log()] userauth is OK
2026-04-12T22:56:34.761 [DEBUG] [Thread-197348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:56:34.761 [DEBUG] [Thread-197348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:56:34.761 [DEBUG] [Thread-197348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:56:34.762 [DEBUG] [Thread-197348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:56:34.783 [INFO] [Thread-197348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:56:34.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:56:35.575 [DEBUG] [Thread-197348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:56:35.575 [DEBUG] [Thread-197348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:56:35.576 [DEBUG] [Thread-197348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:56:35.616 [DEBUG] [Thread-197348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:56:35.616 [DEBUG] [Thread-197348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:56:35.620 [DEBUG] [Thread-197348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:56:35.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:56:35.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:56:35.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:56:35.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:56:35.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:56:35.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:56:35.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:56:35.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:56:35.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:56:35.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.871978 -999.00  +11.10   5.02     92   +9.80 1 2 1 3 1     0    0 1.52 17.19 .NEsw 5.0 5.0 221.5 7.3 11.9 -22.1 11.8 -21.0 11.5 -19.1 11.8 -20.9
2026-04-12T22:56:35.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:56:35.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:56:35.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.871978
2026-04-12T22:56:35.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:56:35.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:56:35.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:56:35.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:56:35.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:56:35.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:56:16', tmtdew=0.22852, humidity=98.2932, cloud=0.0, wind=9.38772, temperature=10.7004, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:55:38.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:56:35.652 [DEBUG] [Thread-197348] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:56:35.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:56:35.744 [DEBUG] [Thread-197351] [transport.py] [_log()] starting thread (client mode): 0xa794a620
2026-04-12T22:56:35.744 [DEBUG] [Thread-197351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:56:35.759 [DEBUG] [Thread-197351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:56:35.759 [INFO] [Thread-197351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] client lang: <none>
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] server lang: <none>
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] kex follows: False
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:56:35.767 [DEBUG] [Thread-197351] [transport.py] [_log()] Compression: none
2026-04-12T22:56:35.768 [DEBUG] [Thread-197351] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:56:35.825 [DEBUG] [Thread-197351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:56:35.826 [DEBUG] [Thread-197351] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:56:35.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:56:35.827 [DEBUG] [Thread-197351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:56:35.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:56:35.881 [DEBUG] [Thread-197351] [transport.py] [_log()] userauth is OK
2026-04-12T22:56:35.882 [DEBUG] [Thread-197351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:56:35.882 [DEBUG] [Thread-197351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:56:35.882 [DEBUG] [Thread-197351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:56:35.882 [DEBUG] [Thread-197351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:56:35.902 [INFO] [Thread-197351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:56:35.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:56:35.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:56:36.706 [DEBUG] [Thread-197351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:56:36.706 [DEBUG] [Thread-197351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:56:36.755 [DEBUG] [Thread-197351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:56:36.756 [DEBUG] [Thread-197351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:56:36.765 [DEBUG] [Thread-197351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:56:36.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:56:36.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:56:36.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:56:36.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:56:36.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:56:36.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:56:36.807 [DEBUG] [Thread-197351] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:56:38.841 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:56:38.842 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:56:40.630 [DEBUG] [Thread-197353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:56:55.692 [DEBUG] [Thread-197354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:57:06.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:57:06.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:57:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:57:08.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 56, 51), 0.36206, 97.5534, 0.0, 10.8346, 10.7677, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:57:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:56:51
2026-04-12T22:57:08.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:57:08.626 [DEBUG] [Thread-197355] [transport.py] [_log()] starting thread (client mode): 0xa795abf0
2026-04-12T22:57:08.626 [DEBUG] [Thread-197355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:57:08.648 [DEBUG] [Thread-197355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:57:08.648 [INFO] [Thread-197355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:08.651 [DEBUG] [Thread-197355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] client lang: <none>
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] server lang: <none>
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] kex follows: False
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] Compression: none
2026-04-12T22:57:08.652 [DEBUG] [Thread-197355] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:57:08.669 [DEBUG] [Thread-197355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:57:08.669 [DEBUG] [Thread-197355] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:57:08.670 [DEBUG] [Thread-197355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:57:08.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:57:08.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:57:08.672 [DEBUG] [Thread-197355] [transport.py] [_log()] userauth is OK
2026-04-12T22:57:08.672 [DEBUG] [Thread-197355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:57:08.672 [DEBUG] [Thread-197355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:57:08.672 [DEBUG] [Thread-197355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:57:08.673 [DEBUG] [Thread-197355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:57:08.696 [INFO] [Thread-197355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:57:08.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:57:09.478 [DEBUG] [Thread-197355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:57:09.478 [DEBUG] [Thread-197355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:57:09.478 [DEBUG] [Thread-197355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:57:09.519 [DEBUG] [Thread-197355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:57:09.519 [DEBUG] [Thread-197355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:57:09.522 [DEBUG] [Thread-197355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:57:09.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:57:09.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:57:09.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:57:09.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:57:09.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:57:09.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:57:09.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:57:09.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:57:09.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:57:09.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.872673 -999.00  +11.10   4.77     92   +9.80 1 2 1 3 1     0    0 1.70 22.83 .NE.. 4.8 4.8 218.6 6.7 11.9 -22.2 11.8 -21.1 11.5 -19.1 11.8 -21.0
2026-04-12T22:57:09.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:57:09.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:57:09.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.872673
2026-04-12T22:57:09.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:57:09.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:57:09.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:57:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:57:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:57:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:56:51', tmtdew=0.36206, humidity=97.5534, cloud=0.0, wind=10.8346, temperature=10.7677, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:56:38.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:57:09.551 [DEBUG] [Thread-197355] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:57:09.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:57:09.644 [DEBUG] [Thread-197358] [transport.py] [_log()] starting thread (client mode): 0xa7959210
2026-04-12T22:57:09.644 [DEBUG] [Thread-197358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:57:09.658 [DEBUG] [Thread-197358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:57:09.659 [INFO] [Thread-197358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:57:09.666 [DEBUG] [Thread-197358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:57:09.666 [DEBUG] [Thread-197358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:57:09.666 [DEBUG] [Thread-197358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:57:09.666 [DEBUG] [Thread-197358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] client lang: <none>
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] server lang: <none>
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] kex follows: False
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:57:09.667 [DEBUG] [Thread-197358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:57:09.668 [DEBUG] [Thread-197358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:57:09.668 [DEBUG] [Thread-197358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:57:09.668 [DEBUG] [Thread-197358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:57:09.668 [DEBUG] [Thread-197358] [transport.py] [_log()] Compression: none
2026-04-12T22:57:09.668 [DEBUG] [Thread-197358] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:57:09.726 [DEBUG] [Thread-197358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:57:09.727 [DEBUG] [Thread-197358] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:57:09.728 [DEBUG] [Thread-197358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:57:09.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:57:09.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:57:09.786 [DEBUG] [Thread-197358] [transport.py] [_log()] userauth is OK
2026-04-12T22:57:09.786 [DEBUG] [Thread-197358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:57:09.787 [DEBUG] [Thread-197358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:57:09.787 [DEBUG] [Thread-197358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:57:09.787 [DEBUG] [Thread-197358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:57:09.811 [INFO] [Thread-197358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:57:09.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:57:09.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:57:10.635 [DEBUG] [Thread-197358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:57:10.636 [DEBUG] [Thread-197358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:57:10.683 [DEBUG] [Thread-197358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:57:10.683 [DEBUG] [Thread-197358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:57:10.692 [DEBUG] [Thread-197358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:57:10.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:57:10.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:57:10.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:57:10.726 [DEBUG] [Thread-197360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:57:10.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:57:10.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:57:10.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:57:10.741 [DEBUG] [Thread-197358] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:57:18.281 [DEBUG] [Thread-197361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:57:25.775 [DEBUG] [Thread-197362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:57:39.046 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:57:39.048 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:57:40.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:57:40.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:57:40.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:57:40.814 [DEBUG] [Thread-197363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:57:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 57, 27), 0.233615, 98.2601, 0.0, 9.2466, 10.7504, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:57:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:57:27
2026-04-12T22:57:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:57:42.592 [DEBUG] [Thread-197364] [transport.py] [_log()] starting thread (client mode): 0xa794ba90
2026-04-12T22:57:42.592 [DEBUG] [Thread-197364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:57:42.608 [DEBUG] [Thread-197364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:57:42.608 [INFO] [Thread-197364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:57:42.611 [DEBUG] [Thread-197364] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:57:42.611 [DEBUG] [Thread-197364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] client lang: <none>
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] server lang: <none>
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] kex follows: False
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] Compression: none
2026-04-12T22:57:42.612 [DEBUG] [Thread-197364] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:57:42.629 [DEBUG] [Thread-197364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:57:42.629 [DEBUG] [Thread-197364] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:57:42.630 [DEBUG] [Thread-197364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:57:42.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:57:42.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:57:42.632 [DEBUG] [Thread-197364] [transport.py] [_log()] userauth is OK
2026-04-12T22:57:42.632 [DEBUG] [Thread-197364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:57:42.632 [DEBUG] [Thread-197364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:57:42.632 [DEBUG] [Thread-197364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:57:42.632 [DEBUG] [Thread-197364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:57:42.650 [INFO] [Thread-197364] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:57:42.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:57:43.366 [DEBUG] [Thread-197364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:57:43.366 [DEBUG] [Thread-197364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:57:43.367 [DEBUG] [Thread-197364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:57:43.407 [DEBUG] [Thread-197364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:57:43.407 [DEBUG] [Thread-197364] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:57:43.411 [DEBUG] [Thread-197364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:57:43.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:57:43.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:57:43.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:57:43.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:57:43.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:57:43.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:57:43.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:57:43.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:57:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:57:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.873020 -999.00  +11.10   4.87     92   +9.90 1 2 1 3 1     0    0 1.76 24.83 .NE.. 4.9 4.9 228.0 7.2 11.9 -22.1 11.8 -21.0 11.4 -19.0 11.8 -20.9
2026-04-12T22:57:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:57:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:57:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.873020
2026-04-12T22:57:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:57:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:57:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:57:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:57:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:57:43.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:57:27', tmtdew=0.233615, humidity=98.2601, cloud=0.0, wind=9.2466, temperature=10.7504, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:57:08.928', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:57:43.439 [DEBUG] [Thread-197364] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:57:43.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:57:43.532 [DEBUG] [Thread-197367] [transport.py] [_log()] starting thread (client mode): 0xa79499c0
2026-04-12T22:57:43.532 [DEBUG] [Thread-197367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:57:43.546 [DEBUG] [Thread-197367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:57:43.547 [INFO] [Thread-197367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:57:43.555 [DEBUG] [Thread-197367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] client lang: <none>
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] server lang: <none>
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] kex follows: False
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:57:43.556 [DEBUG] [Thread-197367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:57:43.557 [DEBUG] [Thread-197367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:57:43.557 [DEBUG] [Thread-197367] [transport.py] [_log()] Compression: none
2026-04-12T22:57:43.557 [DEBUG] [Thread-197367] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:57:43.613 [DEBUG] [Thread-197367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:57:43.614 [DEBUG] [Thread-197367] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:57:43.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:57:43.615 [DEBUG] [Thread-197367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:57:43.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:57:43.669 [DEBUG] [Thread-197367] [transport.py] [_log()] userauth is OK
2026-04-12T22:57:43.669 [DEBUG] [Thread-197367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:57:43.670 [DEBUG] [Thread-197367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:57:43.670 [DEBUG] [Thread-197367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:57:43.670 [DEBUG] [Thread-197367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:57:43.688 [INFO] [Thread-197367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:57:43.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:57:43.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:57:44.501 [DEBUG] [Thread-197367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:57:44.502 [DEBUG] [Thread-197367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:57:44.550 [DEBUG] [Thread-197367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:57:44.550 [DEBUG] [Thread-197367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:57:44.560 [DEBUG] [Thread-197367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:57:44.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:57:44.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:57:44.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:57:44.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:57:44.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:57:44.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:57:44.595 [DEBUG] [Thread-197367] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:57:55.851 [DEBUG] [Thread-197369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:58:10.904 [DEBUG] [Thread-197370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:58:14.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:58:14.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:58:14.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:58:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 58, 2), 0.236085, 98.2436, 0.0, 9.26424, 10.7173, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:58:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:58:02
2026-04-12T22:58:16.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:58:16.424 [DEBUG] [Thread-197371] [transport.py] [_log()] starting thread (client mode): 0xae5a7dc0
2026-04-12T22:58:16.424 [DEBUG] [Thread-197371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:58:16.445 [DEBUG] [Thread-197371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:58:16.445 [INFO] [Thread-197371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] client lang: <none>
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] server lang: <none>
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] kex follows: False
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] Compression: none
2026-04-12T22:58:16.448 [DEBUG] [Thread-197371] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:58:16.466 [DEBUG] [Thread-197371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:58:16.467 [DEBUG] [Thread-197371] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:58:16.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:58:16.468 [DEBUG] [Thread-197371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:58:16.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:58:16.470 [DEBUG] [Thread-197371] [transport.py] [_log()] userauth is OK
2026-04-12T22:58:16.470 [DEBUG] [Thread-197371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:58:16.470 [DEBUG] [Thread-197371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:58:16.470 [DEBUG] [Thread-197371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:58:16.470 [DEBUG] [Thread-197371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:58:16.494 [INFO] [Thread-197371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:58:16.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:58:17.264 [DEBUG] [Thread-197371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:58:17.265 [DEBUG] [Thread-197371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:58:17.265 [DEBUG] [Thread-197371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:58:17.305 [DEBUG] [Thread-197371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:58:17.305 [DEBUG] [Thread-197371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:58:17.309 [DEBUG] [Thread-197371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:58:17.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:58:17.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:58:17.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:58:17.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:58:17.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:58:17.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:58:17.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:58:17.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:58:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:58:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.873367 -999.00  +11.10   5.46     92   +9.80 1 2 1 3 1     0    0 1.78 24.94 .NE.. 5.5 5.5 221.1 7.3 11.8 -22.1 11.7 -21.0 11.5 -19.1 11.8 -21.1
2026-04-12T22:58:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:58:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:58:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.873367
2026-04-12T22:58:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:58:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:58:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:58:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:58:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:58:17.337 [DEBUG] [Thread-197371] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:58:17.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:58:02', tmtdew=0.236085, humidity=98.2436, cloud=0.0, wind=9.26424, temperature=10.7173, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:57:38.909', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:58:17.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:58:17.433 [DEBUG] [Thread-197374] [transport.py] [_log()] starting thread (client mode): 0xb0f6d5a0
2026-04-12T22:58:17.433 [DEBUG] [Thread-197374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:58:17.447 [DEBUG] [Thread-197374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:58:17.447 [INFO] [Thread-197374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:58:17.454 [DEBUG] [Thread-197374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:58:17.454 [DEBUG] [Thread-197374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:58:17.454 [DEBUG] [Thread-197374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:58:17.454 [DEBUG] [Thread-197374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:17.454 [DEBUG] [Thread-197374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:17.454 [DEBUG] [Thread-197374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] client lang: <none>
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] server lang: <none>
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] kex follows: False
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] Compression: none
2026-04-12T22:58:17.455 [DEBUG] [Thread-197374] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:58:17.512 [DEBUG] [Thread-197374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:58:17.512 [DEBUG] [Thread-197374] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:58:17.512 [DEBUG] [Thread-197374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:58:17.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:58:17.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:58:17.568 [DEBUG] [Thread-197374] [transport.py] [_log()] userauth is OK
2026-04-12T22:58:17.568 [DEBUG] [Thread-197374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:58:17.569 [DEBUG] [Thread-197374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:58:17.569 [DEBUG] [Thread-197374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:58:17.569 [DEBUG] [Thread-197374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:58:17.591 [INFO] [Thread-197374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:58:17.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:58:17.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:58:18.338 [DEBUG] [Thread-197376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:58:18.366 [DEBUG] [Thread-197374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:58:18.366 [DEBUG] [Thread-197374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:58:18.414 [DEBUG] [Thread-197374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:58:18.414 [DEBUG] [Thread-197374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:58:18.423 [DEBUG] [Thread-197374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:58:18.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:58:18.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:58:18.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:58:18.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:58:18.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:58:18.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:58:18.460 [DEBUG] [Thread-197374] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:58:25.946 [DEBUG] [Thread-197377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:58:39.254 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:58:39.255 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:58:40.999 [DEBUG] [Thread-197378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:58:48.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:58:48.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:58:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:58:49.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 58, 38), 0.37224, 97.4871, 0.0, 11.1874, 10.7677, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:58:49.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:58:38
2026-04-12T22:58:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:58:50.299 [DEBUG] [Thread-197379] [transport.py] [_log()] starting thread (client mode): 0xae5e7e80
2026-04-12T22:58:50.299 [DEBUG] [Thread-197379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:58:50.318 [DEBUG] [Thread-197379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:58:50.318 [INFO] [Thread-197379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] client lang: <none>
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] server lang: <none>
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] kex follows: False
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] Compression: none
2026-04-12T22:58:50.322 [DEBUG] [Thread-197379] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:58:50.338 [DEBUG] [Thread-197379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:58:50.339 [DEBUG] [Thread-197379] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:58:50.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:58:50.339 [DEBUG] [Thread-197379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:58:50.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:58:50.342 [DEBUG] [Thread-197379] [transport.py] [_log()] userauth is OK
2026-04-12T22:58:50.342 [DEBUG] [Thread-197379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:58:50.342 [DEBUG] [Thread-197379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:58:50.342 [DEBUG] [Thread-197379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:58:50.342 [DEBUG] [Thread-197379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:58:50.359 [INFO] [Thread-197379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:58:50.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:58:51.160 [DEBUG] [Thread-197379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:58:51.161 [DEBUG] [Thread-197379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:58:51.161 [DEBUG] [Thread-197379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:58:51.202 [DEBUG] [Thread-197379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:58:51.202 [DEBUG] [Thread-197379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:58:51.206 [DEBUG] [Thread-197379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:58:51.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:58:51.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:58:51.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:58:51.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:58:51.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:58:51.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:58:51.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:58:51.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:58:51.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:58:51.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.873714 -999.00  +11.10   3.92     92   +9.90 1 2 1 3 1     0    0 1.87 27.38 ..E.. 3.9 3.9 191.6 6.7 11.9 -22.0 11.8 -21.0 11.5 -19.1 11.7 -20.8
2026-04-12T22:58:51.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:58:51.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:58:51.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.873714
2026-04-12T22:58:51.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:58:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:58:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:58:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:58:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:58:51.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:58:38', tmtdew=0.37224, humidity=97.4871, cloud=0.0, wind=11.1874, temperature=10.7677, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:58:08.890', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:58:51.240 [DEBUG] [Thread-197379] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:58:51.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:58:51.339 [DEBUG] [Thread-197382] [transport.py] [_log()] starting thread (client mode): 0xae5e4f10
2026-04-12T22:58:51.339 [DEBUG] [Thread-197382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:58:51.354 [DEBUG] [Thread-197382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:58:51.354 [INFO] [Thread-197382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:58:51.362 [DEBUG] [Thread-197382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] client lang: <none>
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] server lang: <none>
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] kex follows: False
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] Compression: none
2026-04-12T22:58:51.363 [DEBUG] [Thread-197382] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:58:51.425 [DEBUG] [Thread-197382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:58:51.425 [DEBUG] [Thread-197382] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:58:51.426 [DEBUG] [Thread-197382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:58:51.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:58:51.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:58:51.480 [DEBUG] [Thread-197382] [transport.py] [_log()] userauth is OK
2026-04-12T22:58:51.480 [DEBUG] [Thread-197382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:58:51.480 [DEBUG] [Thread-197382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:58:51.480 [DEBUG] [Thread-197382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:58:51.480 [DEBUG] [Thread-197382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:58:51.498 [INFO] [Thread-197382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:58:51.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:58:51.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:58:52.321 [DEBUG] [Thread-197382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:58:52.322 [DEBUG] [Thread-197382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:58:52.369 [DEBUG] [Thread-197382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:58:52.370 [DEBUG] [Thread-197382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:58:52.379 [DEBUG] [Thread-197382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:58:52.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:58:52.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:58:52.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:58:52.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:58:52.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:58:52.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:58:52.415 [DEBUG] [Thread-197382] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:58:56.037 [DEBUG] [Thread-197384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:11.092 [DEBUG] [Thread-197385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:18.396 [DEBUG] [Thread-197386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:59:22.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:59:22.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
2026-04-12T22:59:23.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 59, 13), 0.236155, 98.2436, 0.0, 9.49356, 10.7505, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:59:23.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:59:13
2026-04-12T22:59:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:59:24.226 [DEBUG] [Thread-197387] [transport.py] [_log()] starting thread (client mode): 0xae50a620
2026-04-12T22:59:24.226 [DEBUG] [Thread-197387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:59:24.248 [DEBUG] [Thread-197387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:59:24.248 [INFO] [Thread-197387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:59:24.251 [DEBUG] [Thread-197387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:59:24.251 [DEBUG] [Thread-197387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:59:24.251 [DEBUG] [Thread-197387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] client lang: <none>
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] server lang: <none>
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] kex follows: False
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] Compression: none
2026-04-12T22:59:24.252 [DEBUG] [Thread-197387] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:59:24.269 [DEBUG] [Thread-197387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:59:24.269 [DEBUG] [Thread-197387] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:59:24.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:59:24.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:59:24.271 [DEBUG] [Thread-197387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:59:24.271 [DEBUG] [Thread-197387] [transport.py] [_log()] userauth is OK
2026-04-12T22:59:24.271 [DEBUG] [Thread-197387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:59:24.272 [DEBUG] [Thread-197387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:59:24.272 [DEBUG] [Thread-197387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:59:24.272 [DEBUG] [Thread-197387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:59:24.296 [INFO] [Thread-197387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:59:24.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:59:25.066 [DEBUG] [Thread-197387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:59:25.066 [DEBUG] [Thread-197387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:59:25.067 [DEBUG] [Thread-197387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:59:25.106 [DEBUG] [Thread-197387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:59:25.106 [DEBUG] [Thread-197387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:59:25.109 [DEBUG] [Thread-197387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:59:25.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:59:25.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:59:25.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:59:25.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:59:25.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:59:25.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:59:25.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:59:25.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.874061 -999.00  +11.10   3.20     92   +9.80 1 2 1 3 1     0    0 1.97 29.82 ..e.. 3.2 3.2 229.2 6.3 11.8 -22.0 11.7 -21.0 11.5 -19.1 11.7 -21.1
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.874061
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:59:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:59:13', tmtdew=0.236155, humidity=98.2436, cloud=0.0, wind=9.49356, temperature=10.7505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:58:38.870', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:59:25.129 [DEBUG] [Thread-197387] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:59:25.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:59:25.217 [DEBUG] [Thread-197390] [transport.py] [_log()] starting thread (client mode): 0xae5092a0
2026-04-12T22:59:25.217 [DEBUG] [Thread-197390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:59:25.231 [DEBUG] [Thread-197390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:59:25.231 [INFO] [Thread-197390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:59:25.238 [DEBUG] [Thread-197390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] client lang: <none>
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] server lang: <none>
2026-04-12T22:59:25.239 [DEBUG] [Thread-197390] [transport.py] [_log()] kex follows: False
2026-04-12T22:59:25.240 [DEBUG] [Thread-197390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:59:25.240 [DEBUG] [Thread-197390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:59:25.240 [DEBUG] [Thread-197390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:59:25.240 [DEBUG] [Thread-197390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:59:25.240 [DEBUG] [Thread-197390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:59:25.240 [DEBUG] [Thread-197390] [transport.py] [_log()] Compression: none
2026-04-12T22:59:25.240 [DEBUG] [Thread-197390] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:59:25.296 [DEBUG] [Thread-197390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:59:25.297 [DEBUG] [Thread-197390] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:59:25.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:59:25.298 [DEBUG] [Thread-197390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:59:25.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:59:25.352 [DEBUG] [Thread-197390] [transport.py] [_log()] userauth is OK
2026-04-12T22:59:25.352 [DEBUG] [Thread-197390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:59:25.352 [DEBUG] [Thread-197390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:59:25.352 [DEBUG] [Thread-197390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:59:25.352 [DEBUG] [Thread-197390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:59:25.370 [INFO] [Thread-197390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:59:25.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:59:25.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:59:26.129 [DEBUG] [Thread-197392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:26.204 [DEBUG] [Thread-197390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:59:26.204 [DEBUG] [Thread-197390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:59:26.251 [DEBUG] [Thread-197390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:59:26.252 [DEBUG] [Thread-197390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:59:26.260 [DEBUG] [Thread-197390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:59:26.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:59:26.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T22:59:26.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T22:59:26.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:59:26.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:59:26.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:59:26.294 [DEBUG] [Thread-197390] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:59:39.457 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:39.458 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:41.179 [DEBUG] [Thread-197393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:56.219 [DEBUG] [Thread-197394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T22:59:56.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T22:59:56.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T22:59:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T22:59:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 59, 49), 0.37727, 97.454, 0.0, 12.3516, 10.7346, 2, 2, 0, 2, 0, 0),)
2026-04-12T22:59:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:59:49
2026-04-12T22:59:58.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T22:59:58.256 [DEBUG] [Thread-197395] [transport.py] [_log()] starting thread (client mode): 0xa7948d00
2026-04-12T22:59:58.256 [DEBUG] [Thread-197395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:59:58.277 [DEBUG] [Thread-197395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T22:59:58.278 [INFO] [Thread-197395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] client lang: <none>
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] server lang: <none>
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] kex follows: False
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:59:58.281 [DEBUG] [Thread-197395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:59:58.282 [DEBUG] [Thread-197395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:59:58.282 [DEBUG] [Thread-197395] [transport.py] [_log()] Compression: none
2026-04-12T22:59:58.282 [DEBUG] [Thread-197395] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:59:58.299 [DEBUG] [Thread-197395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:59:58.300 [DEBUG] [Thread-197395] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:59:58.300 [DEBUG] [Thread-197395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T22:59:58.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T22:59:58.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:59:58.302 [DEBUG] [Thread-197395] [transport.py] [_log()] userauth is OK
2026-04-12T22:59:58.302 [DEBUG] [Thread-197395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:59:58.303 [DEBUG] [Thread-197395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:59:58.303 [DEBUG] [Thread-197395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T22:59:58.303 [DEBUG] [Thread-197395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:59:58.323 [INFO] [Thread-197395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:59:58.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T22:59:59.039 [DEBUG] [Thread-197395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T22:59:59.039 [DEBUG] [Thread-197395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T22:59:59.039 [DEBUG] [Thread-197395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T22:59:59.080 [DEBUG] [Thread-197395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T22:59:59.080 [DEBUG] [Thread-197395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T22:59:59.084 [DEBUG] [Thread-197395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T22:59:59.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T22:59:59.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T22:59:59.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T22:59:59.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T22:59:59.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T22:59:59.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T22:59:59.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T22:59:59.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T22:59:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T22:59:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.874409 -999.00  +11.10   5.44     92   +9.80 1 2 1 3 1     0    0 1.97 29.94 ..e.. 5.4 5.4 215.4 6.9 11.8 -22.1 11.7 -21.0 11.5 -19.0 11.8 -20.9
2026-04-12T22:59:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T22:59:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T22:59:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.874409
2026-04-12T22:59:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T22:59:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T22:59:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T22:59:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T22:59:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T22:59:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:59:49', tmtdew=0.37727, humidity=97.454, cloud=0.0, wind=12.3516, temperature=10.7346, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:59:08.938', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T22:59:59.111 [DEBUG] [Thread-197395] [transport.py] [_log()] EOF in transport thread
2026-04-12T22:59:59.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T22:59:59.205 [DEBUG] [Thread-197398] [transport.py] [_log()] starting thread (client mode): 0xae5a7a30
2026-04-12T22:59:59.205 [DEBUG] [Thread-197398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T22:59:59.220 [DEBUG] [Thread-197398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T22:59:59.220 [INFO] [Thread-197398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T22:59:59.228 [DEBUG] [Thread-197398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T22:59:59.228 [DEBUG] [Thread-197398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T22:59:59.228 [DEBUG] [Thread-197398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] client lang: <none>
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] server lang: <none>
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] kex follows: False
2026-04-12T22:59:59.229 [DEBUG] [Thread-197398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T22:59:59.230 [DEBUG] [Thread-197398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T22:59:59.230 [DEBUG] [Thread-197398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T22:59:59.230 [DEBUG] [Thread-197398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T22:59:59.230 [DEBUG] [Thread-197398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T22:59:59.230 [DEBUG] [Thread-197398] [transport.py] [_log()] Compression: none
2026-04-12T22:59:59.230 [DEBUG] [Thread-197398] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T22:59:59.293 [DEBUG] [Thread-197398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T22:59:59.293 [DEBUG] [Thread-197398] [transport.py] [_log()] Switch to new keys ...
2026-04-12T22:59:59.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T22:59:59.294 [DEBUG] [Thread-197398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T22:59:59.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T22:59:59.349 [DEBUG] [Thread-197398] [transport.py] [_log()] userauth is OK
2026-04-12T22:59:59.349 [DEBUG] [Thread-197398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T22:59:59.349 [DEBUG] [Thread-197398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T22:59:59.349 [DEBUG] [Thread-197398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T22:59:59.349 [DEBUG] [Thread-197398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T22:59:59.368 [INFO] [Thread-197398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T22:59:59.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T22:59:59.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:00:00.173 [DEBUG] [Thread-197398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:00:00.173 [DEBUG] [Thread-197398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:00:00.222 [DEBUG] [Thread-197398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:00:00.222 [DEBUG] [Thread-197398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:00:00.231 [DEBUG] [Thread-197398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:00:00.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:00:00.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:00:00.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:00:00.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:00:00.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:00:00.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:00:00.267 [DEBUG] [Thread-197398] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:00:11.256 [DEBUG] [Thread-197400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:00:18.471 [DEBUG] [Thread-197401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:00:26.314 [DEBUG] [Thread-197402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:00:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:00:30.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:00:30.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:00:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 22, 59, 49), 0.37727, 97.454, 0.0, 12.3516, 10.7346, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:00:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 22:59:49
2026-04-12T23:00:32.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:00:32.192 [DEBUG] [Thread-197403] [transport.py] [_log()] starting thread (client mode): 0xb0f6e8c0
2026-04-12T23:00:32.192 [DEBUG] [Thread-197403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:00:32.212 [DEBUG] [Thread-197403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:00:32.212 [INFO] [Thread-197403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:00:32.215 [DEBUG] [Thread-197403] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:00:32.215 [DEBUG] [Thread-197403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:00:32.215 [DEBUG] [Thread-197403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:00:32.215 [DEBUG] [Thread-197403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] client lang: <none>
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] server lang: <none>
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] kex follows: False
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:00:32.216 [DEBUG] [Thread-197403] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:00:32.217 [DEBUG] [Thread-197403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:00:32.217 [DEBUG] [Thread-197403] [transport.py] [_log()] Compression: none
2026-04-12T23:00:32.217 [DEBUG] [Thread-197403] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:00:32.237 [DEBUG] [Thread-197403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:00:32.238 [DEBUG] [Thread-197403] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:00:32.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:00:32.239 [DEBUG] [Thread-197403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:00:32.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:00:32.240 [DEBUG] [Thread-197403] [transport.py] [_log()] userauth is OK
2026-04-12T23:00:32.240 [DEBUG] [Thread-197403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:00:32.240 [DEBUG] [Thread-197403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:00:32.240 [DEBUG] [Thread-197403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:00:32.240 [DEBUG] [Thread-197403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:00:32.275 [INFO] [Thread-197403] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:00:32.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:00:33.089 [DEBUG] [Thread-197403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:00:33.090 [DEBUG] [Thread-197403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:00:33.090 [DEBUG] [Thread-197403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:00:33.130 [DEBUG] [Thread-197403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:00:33.130 [DEBUG] [Thread-197403] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:00:33.133 [DEBUG] [Thread-197403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:00:33.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:00:33.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:00:33.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:00:33.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:00:33.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:00:33.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:00:33.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:00:33.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:00:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:00:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.874756 -999.00  +11.10   3.79     91   +9.80 1 2 1 3 1     0    0 1.86 26.75 ..E.. 3.8 3.8 204.4 6.8 11.8 -22.1 11.7 -21.0 11.5 -19.0 11.8 -20.9
2026-04-12T23:00:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:00:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:00:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.874756
2026-04-12T23:00:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:00:33.152 [DEBUG] [Thread-197403] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:00:33.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:00:33.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:00:33.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:00:33.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:00:33.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T22:59:49', tmtdew=0.37727, humidity=97.454, cloud=0.0, wind=12.3516, temperature=10.7346, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T20:59:38.918', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:00:33.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:00:33.251 [DEBUG] [Thread-197406] [transport.py] [_log()] starting thread (client mode): 0xae5e5330
2026-04-12T23:00:33.251 [DEBUG] [Thread-197406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:00:33.265 [DEBUG] [Thread-197406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:00:33.266 [INFO] [Thread-197406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:00:33.273 [DEBUG] [Thread-197406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:00:33.274 [DEBUG] [Thread-197406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:00:33.274 [DEBUG] [Thread-197406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:00:33.274 [DEBUG] [Thread-197406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:00:33.274 [DEBUG] [Thread-197406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:00:33.274 [DEBUG] [Thread-197406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:00:33.274 [DEBUG] [Thread-197406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] client lang: <none>
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] server lang: <none>
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] kex follows: False
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] Compression: none
2026-04-12T23:00:33.275 [DEBUG] [Thread-197406] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:00:33.332 [DEBUG] [Thread-197406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:00:33.333 [DEBUG] [Thread-197406] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:00:33.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:00:33.334 [DEBUG] [Thread-197406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:00:33.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:00:33.388 [DEBUG] [Thread-197406] [transport.py] [_log()] userauth is OK
2026-04-12T23:00:33.389 [DEBUG] [Thread-197406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:00:33.389 [DEBUG] [Thread-197406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:00:33.389 [DEBUG] [Thread-197406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:00:33.389 [DEBUG] [Thread-197406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:00:33.413 [INFO] [Thread-197406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:00:33.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:00:33.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:00:34.227 [DEBUG] [Thread-197406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:00:34.227 [DEBUG] [Thread-197406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:00:34.279 [DEBUG] [Thread-197406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:00:34.279 [DEBUG] [Thread-197406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:00:34.289 [DEBUG] [Thread-197406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:00:34.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:00:34.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:00:34.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:00:34.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:00:34.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:00:34.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:00:34.331 [DEBUG] [Thread-197406] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:00:39.661 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:00:39.663 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:00:41.349 [DEBUG] [Thread-197408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:00:56.394 [DEBUG] [Thread-197409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:01:04.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:01:04.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:01:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:01:05.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 0, 24), 0.2336, 98.2602, 0.0, 9.75816, 10.7005, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:01:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:00:24
2026-04-12T23:01:06.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:01:06.183 [DEBUG] [Thread-197410] [transport.py] [_log()] starting thread (client mode): 0xae5e5690
2026-04-12T23:01:06.183 [DEBUG] [Thread-197410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:01:06.199 [DEBUG] [Thread-197410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:01:06.199 [INFO] [Thread-197410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:01:06.201 [DEBUG] [Thread-197410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] client lang: <none>
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] server lang: <none>
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] kex follows: False
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] Compression: none
2026-04-12T23:01:06.202 [DEBUG] [Thread-197410] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:01:06.218 [DEBUG] [Thread-197410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:01:06.219 [DEBUG] [Thread-197410] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:01:06.219 [DEBUG] [Thread-197410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:01:06.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:01:06.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:01:06.221 [DEBUG] [Thread-197410] [transport.py] [_log()] userauth is OK
2026-04-12T23:01:06.221 [DEBUG] [Thread-197410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:01:06.221 [DEBUG] [Thread-197410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:01:06.221 [DEBUG] [Thread-197410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:01:06.221 [DEBUG] [Thread-197410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:01:06.240 [INFO] [Thread-197410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:01:06.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:01:07.041 [DEBUG] [Thread-197410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:01:07.041 [DEBUG] [Thread-197410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:01:07.041 [DEBUG] [Thread-197410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:01:07.081 [DEBUG] [Thread-197410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:01:07.082 [DEBUG] [Thread-197410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:01:07.083 [DEBUG] [Thread-197410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:01:07.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:01:07.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:01:07.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:01:07.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:01:07.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:01:07.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:01:07.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.875450 -999.00  +11.10   5.80     91   +9.80 1 2 1 3 1     0    0 2.00 30.87 ..Es. 5.8 5.8 223.1 8.1 11.8 -22.1 11.7 -21.0 11.4 -19.0 11.7 -20.8
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.875450
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:01:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:01:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:00:24', tmtdew=0.2336, humidity=98.2602, cloud=0.0, wind=9.75816, temperature=10.7005, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:00:38.880', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:01:07.102 [DEBUG] [Thread-197410] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:01:07.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:01:07.184 [DEBUG] [Thread-197413] [transport.py] [_log()] starting thread (client mode): 0xb0f42e00
2026-04-12T23:01:07.184 [DEBUG] [Thread-197413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:01:07.199 [DEBUG] [Thread-197413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:01:07.199 [INFO] [Thread-197413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] client lang: <none>
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] server lang: <none>
2026-04-12T23:01:07.206 [DEBUG] [Thread-197413] [transport.py] [_log()] kex follows: False
2026-04-12T23:01:07.207 [DEBUG] [Thread-197413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:01:07.207 [DEBUG] [Thread-197413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:01:07.207 [DEBUG] [Thread-197413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:01:07.207 [DEBUG] [Thread-197413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:01:07.207 [DEBUG] [Thread-197413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:01:07.207 [DEBUG] [Thread-197413] [transport.py] [_log()] Compression: none
2026-04-12T23:01:07.207 [DEBUG] [Thread-197413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:01:07.264 [DEBUG] [Thread-197413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:01:07.265 [DEBUG] [Thread-197413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:01:07.266 [DEBUG] [Thread-197413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:01:07.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:01:07.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:01:07.320 [DEBUG] [Thread-197413] [transport.py] [_log()] userauth is OK
2026-04-12T23:01:07.321 [DEBUG] [Thread-197413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:01:07.321 [DEBUG] [Thread-197413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:01:07.321 [DEBUG] [Thread-197413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:01:07.321 [DEBUG] [Thread-197413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:01:07.339 [INFO] [Thread-197413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:01:07.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:01:07.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:01:08.196 [DEBUG] [Thread-197413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:01:08.196 [DEBUG] [Thread-197413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:01:08.244 [DEBUG] [Thread-197413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:01:08.244 [DEBUG] [Thread-197413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:01:08.253 [DEBUG] [Thread-197413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:01:08.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:01:08.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:01:08.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:01:08.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:01:08.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:01:08.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:01:08.301 [DEBUG] [Thread-197413] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:01:11.430 [DEBUG] [Thread-197415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:01:18.535 [DEBUG] [Thread-197416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:01:26.484 [DEBUG] [Thread-197417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:01:38.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:01:38.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:01:38.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:01:39.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 0, 24), 0.2336, 98.2602, 0.0, 9.75816, 10.7005, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:01:39.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:00:24
2026-04-12T23:01:39.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:01:39.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:01:39.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:01:40.114 [DEBUG] [Thread-197418] [transport.py] [_log()] starting thread (client mode): 0xae5e7a30
2026-04-12T23:01:40.114 [DEBUG] [Thread-197418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:01:40.133 [DEBUG] [Thread-197418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:01:40.134 [INFO] [Thread-197418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:01:40.137 [DEBUG] [Thread-197418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:01:40.137 [DEBUG] [Thread-197418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:01:40.137 [DEBUG] [Thread-197418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:01:40.137 [DEBUG] [Thread-197418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:40.137 [DEBUG] [Thread-197418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] client lang: <none>
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] server lang: <none>
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] kex follows: False
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:01:40.138 [DEBUG] [Thread-197418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:01:40.139 [DEBUG] [Thread-197418] [transport.py] [_log()] Compression: none
2026-04-12T23:01:40.139 [DEBUG] [Thread-197418] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:01:40.161 [DEBUG] [Thread-197418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:01:40.162 [DEBUG] [Thread-197418] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:01:40.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:01:40.163 [DEBUG] [Thread-197418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:01:40.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:01:40.165 [DEBUG] [Thread-197418] [transport.py] [_log()] userauth is OK
2026-04-12T23:01:40.166 [DEBUG] [Thread-197418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:01:40.166 [DEBUG] [Thread-197418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:01:40.166 [DEBUG] [Thread-197418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:01:40.166 [DEBUG] [Thread-197418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:01:40.191 [INFO] [Thread-197418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:01:40.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:01:40.924 [DEBUG] [Thread-197418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:01:40.924 [DEBUG] [Thread-197418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:01:40.925 [DEBUG] [Thread-197418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:01:40.965 [DEBUG] [Thread-197418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:01:40.965 [DEBUG] [Thread-197418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:01:40.968 [DEBUG] [Thread-197418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:01:40.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:01:40.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:01:40.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:01:40.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:01:40.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:01:40.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:01:40.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:01:40.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:01:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:01:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.875798 -999.00  +11.10   5.59     91   +9.80 1 2 1 3 1     0    0 2.01 30.56 ..Es. 5.6 5.6 208.9 7.2 11.9 -22.0 11.7 -21.0 11.5 -19.0 11.8 -20.9
2026-04-12T23:01:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:01:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:01:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.875798
2026-04-12T23:01:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:01:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:01:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:01:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:01:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:01:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:00:24', tmtdew=0.2336, humidity=98.2602, cloud=0.0, wind=9.75816, temperature=10.7005, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:01:08.947', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:01:40.994 [DEBUG] [Thread-197418] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:01:41.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:01:41.088 [DEBUG] [Thread-197421] [transport.py] [_log()] starting thread (client mode): 0xae5a7bb0
2026-04-12T23:01:41.089 [DEBUG] [Thread-197421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:01:41.103 [DEBUG] [Thread-197421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:01:41.103 [INFO] [Thread-197421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:01:41.110 [DEBUG] [Thread-197421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] client lang: <none>
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] server lang: <none>
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] kex follows: False
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] Compression: none
2026-04-12T23:01:41.111 [DEBUG] [Thread-197421] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:01:41.168 [DEBUG] [Thread-197421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:01:41.169 [DEBUG] [Thread-197421] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:01:41.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:01:41.170 [DEBUG] [Thread-197421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:01:41.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:01:41.224 [DEBUG] [Thread-197421] [transport.py] [_log()] userauth is OK
2026-04-12T23:01:41.224 [DEBUG] [Thread-197421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:01:41.224 [DEBUG] [Thread-197421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:01:41.224 [DEBUG] [Thread-197421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:01:41.224 [DEBUG] [Thread-197421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:01:41.248 [INFO] [Thread-197421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:01:41.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:01:41.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:01:41.520 [DEBUG] [Thread-197423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:01:42.063 [DEBUG] [Thread-197421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:01:42.063 [DEBUG] [Thread-197421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:01:42.111 [DEBUG] [Thread-197421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:01:42.111 [DEBUG] [Thread-197421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:01:42.121 [DEBUG] [Thread-197421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:01:42.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:01:42.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:01:42.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:01:42.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:01:42.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:01:42.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:01:42.158 [DEBUG] [Thread-197421] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:01:56.573 [DEBUG] [Thread-197424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:02:11.609 [DEBUG] [Thread-197425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:02:12.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:02:12.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:02:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:02:13.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 1, 35), 0.39263, 97.3545, 0.0, 11.9635, 10.7678, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:02:13.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:01:35
2026-04-12T23:02:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:02:14.036 [DEBUG] [Thread-197426] [transport.py] [_log()] starting thread (client mode): 0xb0f41930
2026-04-12T23:02:14.036 [DEBUG] [Thread-197426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:02:14.057 [DEBUG] [Thread-197426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:02:14.057 [INFO] [Thread-197426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] client lang: <none>
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] server lang: <none>
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] kex follows: False
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] Compression: none
2026-04-12T23:02:14.060 [DEBUG] [Thread-197426] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:02:14.078 [DEBUG] [Thread-197426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:02:14.079 [DEBUG] [Thread-197426] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:02:14.079 [DEBUG] [Thread-197426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:02:14.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:02:14.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:02:14.081 [DEBUG] [Thread-197426] [transport.py] [_log()] userauth is OK
2026-04-12T23:02:14.082 [DEBUG] [Thread-197426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:02:14.082 [DEBUG] [Thread-197426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:02:14.082 [DEBUG] [Thread-197426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:02:14.082 [DEBUG] [Thread-197426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:02:14.118 [INFO] [Thread-197426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:02:14.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:02:14.857 [DEBUG] [Thread-197426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:02:14.857 [DEBUG] [Thread-197426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:02:14.858 [DEBUG] [Thread-197426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:02:14.898 [DEBUG] [Thread-197426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:02:14.898 [DEBUG] [Thread-197426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:02:14.902 [DEBUG] [Thread-197426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:02:14.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:02:14.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:02:14.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:02:14.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:02:14.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:02:14.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:02:14.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:02:14.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:02:14.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:02:14.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.876145 -999.00  +11.10   2.19     91   +9.80 1 2 1 3 1     0    0 1.97 29.31 ..Es. 2.2 2.2 227.8 5.7 11.8 -22.1 11.8 -20.9 11.4 -19.1 11.8 -20.9
2026-04-12T23:02:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:02:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:02:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.876145
2026-04-12T23:02:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:02:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:02:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:02:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:02:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:02:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:01:35', tmtdew=0.39263, humidity=97.3545, cloud=0.0, wind=11.9635, temperature=10.7678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:01:38.928', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.042, nan, 3.0359999999999996, nan, nan, nan, nan, nan, 2.5874999999999995, nan, nan, 1.100999999999999, 2.7762499999999983, nan, nan, nan, 2.2830000000000004, 2.78925, nan, 2.2700000000000005, 2.202000000000001, 2.586000000000001, nan, 2.697749999999999], zp_timestamp='2026-04-12T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:02:14.926 [DEBUG] [Thread-197426] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:02:15.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:02:15.025 [DEBUG] [Thread-197429] [transport.py] [_log()] starting thread (client mode): 0xae5e61a0
2026-04-12T23:02:15.025 [DEBUG] [Thread-197429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:02:15.040 [DEBUG] [Thread-197429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:02:15.040 [INFO] [Thread-197429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:02:15.053 [DEBUG] [Thread-197429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:02:15.053 [DEBUG] [Thread-197429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:02:15.053 [DEBUG] [Thread-197429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:02:15.053 [DEBUG] [Thread-197429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:15.053 [DEBUG] [Thread-197429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] client lang: <none>
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] server lang: <none>
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] kex follows: False
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:02:15.054 [DEBUG] [Thread-197429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:02:15.055 [DEBUG] [Thread-197429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:02:15.055 [DEBUG] [Thread-197429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:02:15.055 [DEBUG] [Thread-197429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:02:15.055 [DEBUG] [Thread-197429] [transport.py] [_log()] Compression: none
2026-04-12T23:02:15.055 [DEBUG] [Thread-197429] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:02:15.113 [DEBUG] [Thread-197429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:02:15.113 [DEBUG] [Thread-197429] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:02:15.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:02:15.115 [DEBUG] [Thread-197429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:02:15.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:02:15.172 [DEBUG] [Thread-197429] [transport.py] [_log()] userauth is OK
2026-04-12T23:02:15.172 [DEBUG] [Thread-197429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:02:15.172 [DEBUG] [Thread-197429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:02:15.172 [DEBUG] [Thread-197429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:02:15.172 [DEBUG] [Thread-197429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:02:15.191 [INFO] [Thread-197429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:02:15.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:02:15.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:02:16.000 [DEBUG] [Thread-197429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:02:16.000 [DEBUG] [Thread-197429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:02:16.050 [DEBUG] [Thread-197429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:02:16.050 [DEBUG] [Thread-197429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:02:16.060 [DEBUG] [Thread-197429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:02:16.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:02:16.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:02:16.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:02:16.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:02:16.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:02:16.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:02:16.097 [DEBUG] [Thread-197429] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:02:18.596 [DEBUG] [Thread-197431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:02:26.642 [DEBUG] [Thread-197432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:02:40.084 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:02:40.085 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:02:41.693 [DEBUG] [Thread-197433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:02:46.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:02:46.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:02: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
2026-04-12T23:02:47.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 2, 10), 0.243765, 98.1938, 0.0, 9.74052, 10.7339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:02:47.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:02:10
2026-04-12T23:02:47.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:02:47.986 [DEBUG] [Thread-197434] [transport.py] [_log()] starting thread (client mode): 0xb0f6f4f0
2026-04-12T23:02:47.986 [DEBUG] [Thread-197434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:02:48.006 [DEBUG] [Thread-197434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:02:48.006 [INFO] [Thread-197434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:02:48.009 [DEBUG] [Thread-197434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] client lang: <none>
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] server lang: <none>
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] kex follows: False
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] Compression: none
2026-04-12T23:02:48.010 [DEBUG] [Thread-197434] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:02:48.028 [DEBUG] [Thread-197434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:02:48.028 [DEBUG] [Thread-197434] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:02:48.029 [DEBUG] [Thread-197434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:02:48.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:02:48.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:02:48.031 [DEBUG] [Thread-197434] [transport.py] [_log()] userauth is OK
2026-04-12T23:02:48.031 [DEBUG] [Thread-197434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:02:48.031 [DEBUG] [Thread-197434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:02:48.031 [DEBUG] [Thread-197434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:02:48.032 [DEBUG] [Thread-197434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:02:48.067 [INFO] [Thread-197434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:02:48.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:02:48.861 [DEBUG] [Thread-197434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:02:48.861 [DEBUG] [Thread-197434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:02:48.862 [DEBUG] [Thread-197434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:02:48.902 [DEBUG] [Thread-197434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:02:48.902 [DEBUG] [Thread-197434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:02:48.906 [DEBUG] [Thread-197434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:02:48.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:02:48.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:02:48.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:02:48.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:02:48.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:02:48.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:02:48.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:02:48.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:02:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:02:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.876492 -999.00  +11.10   5.93     91   +9.80 1 2 1 3 1     0    0 1.99 30.23 ..E.. 5.9 5.9 211.0 7.5 11.8 -22.0 11.7 -21.0 11.5 -19.0 11.7 -20.9
2026-04-12T23:02:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:02:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:02:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.876492
2026-04-12T23:02:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:02:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:02:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:02:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:02:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:02:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:02:10', tmtdew=0.243765, humidity=98.1938, cloud=0.0, wind=9.74052, temperature=10.7339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:02:08.909', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.317, nan, 3.1014999999999997, nan, nan, nan, nan, nan, 2.6674999999999995, nan, 2.453249999999999, 1.7749999999999986, nan, nan, nan, 3.0269999999999992, 2.2424999999999997, 1.4162499999999998, 1.3544999999999998, 1.2095000000000002, 1.402000000000001, 2.469000000000001, 1.8870000000000005, 2.5432499999999987], zp_timestamp='2026-04-12T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:02:48.935 [DEBUG] [Thread-197434] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:02:49.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:02:49.030 [DEBUG] [Thread-197437] [transport.py] [_log()] starting thread (client mode): 0xb0f6e920
2026-04-12T23:02:49.030 [DEBUG] [Thread-197437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:02:49.044 [DEBUG] [Thread-197437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:02:49.044 [INFO] [Thread-197437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:02:49.052 [DEBUG] [Thread-197437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:02:49.052 [DEBUG] [Thread-197437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:02:49.052 [DEBUG] [Thread-197437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:02:49.052 [DEBUG] [Thread-197437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:49.052 [DEBUG] [Thread-197437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:02:49.052 [DEBUG] [Thread-197437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] client lang: <none>
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] server lang: <none>
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] kex follows: False
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] Compression: none
2026-04-12T23:02:49.053 [DEBUG] [Thread-197437] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:02:49.112 [DEBUG] [Thread-197437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:02:49.112 [DEBUG] [Thread-197437] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:02:49.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:02:49.114 [DEBUG] [Thread-197437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:02:49.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:02:49.172 [DEBUG] [Thread-197437] [transport.py] [_log()] userauth is OK
2026-04-12T23:02:49.172 [DEBUG] [Thread-197437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:02:49.172 [DEBUG] [Thread-197437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:02:49.172 [DEBUG] [Thread-197437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:02:49.173 [DEBUG] [Thread-197437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:02:49.191 [INFO] [Thread-197437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:02:49.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:02:49.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:02:50.021 [DEBUG] [Thread-197437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:02:50.022 [DEBUG] [Thread-197437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:02:50.070 [DEBUG] [Thread-197437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:02:50.070 [DEBUG] [Thread-197437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:02:50.079 [DEBUG] [Thread-197437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:02:50.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:02:50.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:02:50.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:02:50.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:02:50.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:02:50.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:02:50.113 [DEBUG] [Thread-197437] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:02:56.730 [DEBUG] [Thread-197439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:11.782 [DEBUG] [Thread-197440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:18.681 [DEBUG] [Thread-197441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:03:20.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:03:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:03:21.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 2, 46), 0.38752, 97.3877, 0.0, 12.4927, 10.7678, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:03:21.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:02:46
2026-04-12T23:03:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:03:21.923 [DEBUG] [Thread-197442] [transport.py] [_log()] starting thread (client mode): 0xb0f42b30
2026-04-12T23:03:21.923 [DEBUG] [Thread-197442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:03:21.945 [DEBUG] [Thread-197442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:03:21.945 [INFO] [Thread-197442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] client lang: <none>
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] server lang: <none>
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] kex follows: False
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:03:21.948 [DEBUG] [Thread-197442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:03:21.949 [DEBUG] [Thread-197442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:03:21.949 [DEBUG] [Thread-197442] [transport.py] [_log()] Compression: none
2026-04-12T23:03:21.949 [DEBUG] [Thread-197442] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:03:21.966 [DEBUG] [Thread-197442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:03:21.967 [DEBUG] [Thread-197442] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:03:21.968 [DEBUG] [Thread-197442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:03:21.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:03:21.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:03:21.970 [DEBUG] [Thread-197442] [transport.py] [_log()] userauth is OK
2026-04-12T23:03:21.971 [DEBUG] [Thread-197442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:03:21.971 [DEBUG] [Thread-197442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:03:21.971 [DEBUG] [Thread-197442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:03:21.971 [DEBUG] [Thread-197442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:03:21.994 [INFO] [Thread-197442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:03:21.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:03:22.753 [DEBUG] [Thread-197442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:03:22.753 [DEBUG] [Thread-197442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:03:22.753 [DEBUG] [Thread-197442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:03:22.794 [DEBUG] [Thread-197442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:03:22.794 [DEBUG] [Thread-197442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:03:22.798 [DEBUG] [Thread-197442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:03:22.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:03:22.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:03:22.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:03:22.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:03:22.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:03:22.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:03:22.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:03:22.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:03:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:03:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.876839 -999.00  +11.10   3.97     91   +9.80 1 2 1 3 1     0    0 1.98 29.32 ..E.. 4.0 4.0 197.3 7.6 11.8 -21.9 11.8 -20.9 11.4 -18.9 11.7 -21.0
2026-04-12T23:03:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:03:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:03:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.876839
2026-04-12T23:03:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:03:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:03:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:03:22.822 [DEBUG] [Thread-197442] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:03:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:03:22.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:03:22.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:02:46', tmtdew=0.38752, humidity=97.3877, cloud=0.0, wind=12.4927, temperature=10.7678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:02:38.890', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.317, nan, 3.1014999999999997, nan, nan, nan, nan, nan, 2.6674999999999995, nan, 2.453249999999999, 1.7749999999999986, nan, nan, nan, 3.0269999999999992, 2.2424999999999997, 1.4162499999999998, 1.3544999999999998, 1.2095000000000002, 1.402000000000001, 2.469000000000001, 1.8870000000000005, 2.5432499999999987], zp_timestamp='2026-04-12T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:03:22.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:03:22.917 [DEBUG] [Thread-197445] [transport.py] [_log()] starting thread (client mode): 0xb0f6f310
2026-04-12T23:03:22.917 [DEBUG] [Thread-197445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:03:22.932 [DEBUG] [Thread-197445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:03:22.932 [INFO] [Thread-197445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:03:22.939 [DEBUG] [Thread-197445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] client lang: <none>
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] server lang: <none>
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] kex follows: False
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] Compression: none
2026-04-12T23:03:22.940 [DEBUG] [Thread-197445] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:03:23.000 [DEBUG] [Thread-197445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:03:23.001 [DEBUG] [Thread-197445] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:03:23.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:03:23.002 [DEBUG] [Thread-197445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:03:23.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:03:23.055 [DEBUG] [Thread-197445] [transport.py] [_log()] userauth is OK
2026-04-12T23:03:23.056 [DEBUG] [Thread-197445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:03:23.056 [DEBUG] [Thread-197445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:03:23.056 [DEBUG] [Thread-197445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:03:23.056 [DEBUG] [Thread-197445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:03:23.075 [INFO] [Thread-197445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:03:23.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:03:23.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:03:23.877 [DEBUG] [Thread-197445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:03:23.877 [DEBUG] [Thread-197445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:03:23.925 [DEBUG] [Thread-197445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:03:23.925 [DEBUG] [Thread-197445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:03:23.935 [DEBUG] [Thread-197445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:03:23.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:03:23.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:03:23.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:03:23.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:03:23.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:03:23.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:03:23.971 [DEBUG] [Thread-197445] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:03:26.819 [DEBUG] [Thread-197447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:40.290 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:40.291 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:41.881 [DEBUG] [Thread-197448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:53.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:03:53.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:03:53.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:03:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 3, 22), 0.24631, 98.1773, 0.0, 9.5994, 10.7339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:03:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:03:22
2026-04-12T23:03:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:03:55.787 [DEBUG] [Thread-197449] [transport.py] [_log()] starting thread (client mode): 0xb0f43c40
2026-04-12T23:03:55.787 [DEBUG] [Thread-197449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:03:55.803 [DEBUG] [Thread-197449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:03:55.803 [INFO] [Thread-197449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] client lang: <none>
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] server lang: <none>
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] kex follows: False
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] Compression: none
2026-04-12T23:03:55.806 [DEBUG] [Thread-197449] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:03:55.822 [DEBUG] [Thread-197449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:03:55.822 [DEBUG] [Thread-197449] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:03:55.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:03:55.823 [DEBUG] [Thread-197449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:03:55.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:03:55.825 [DEBUG] [Thread-197449] [transport.py] [_log()] userauth is OK
2026-04-12T23:03:55.826 [DEBUG] [Thread-197449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:03:55.826 [DEBUG] [Thread-197449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:03:55.826 [DEBUG] [Thread-197449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:03:55.826 [DEBUG] [Thread-197449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:03:55.843 [INFO] [Thread-197449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:03:55.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:03:56.449 [DEBUG] [Thread-197449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:03:56.450 [DEBUG] [Thread-197449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:03:56.450 [DEBUG] [Thread-197449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:03:56.491 [DEBUG] [Thread-197449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:03:56.491 [DEBUG] [Thread-197449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:03:56.495 [DEBUG] [Thread-197449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:03:56.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:03:56.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:03:56.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:03:56.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:03:56.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:03:56.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:03:56.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:03:56.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:03:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:03:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.877186 -999.00  +11.10   5.30     91   +9.80 1 2 1 3 1     0    0 1.92 27.31 ..E.. 5.3 5.3 211.0 9.0 11.8 -22.0 11.7 -20.9 11.4 -19.0 11.7 -20.9
2026-04-12T23:03:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:03:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:03:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.877186
2026-04-12T23:03:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:03:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:03:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:03:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:03:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:03:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:03:22', tmtdew=0.24631, humidity=98.1773, cloud=0.0, wind=9.5994, temperature=10.7339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:03:08.870', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.317, nan, 3.1014999999999997, nan, nan, nan, nan, nan, 2.6674999999999995, nan, 2.453249999999999, 1.7749999999999986, nan, nan, nan, 3.0269999999999992, 2.2424999999999997, 1.4162499999999998, 1.3544999999999998, 1.2095000000000002, 1.402000000000001, 2.469000000000001, 1.8870000000000005, 2.5432499999999987], zp_timestamp='2026-04-12T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:03:56.524 [DEBUG] [Thread-197449] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:03:56.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:03:56.618 [DEBUG] [Thread-197452] [transport.py] [_log()] starting thread (client mode): 0xae5e5090
2026-04-12T23:03:56.618 [DEBUG] [Thread-197452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:03:56.633 [DEBUG] [Thread-197452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:03:56.633 [INFO] [Thread-197452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:03:56.641 [DEBUG] [Thread-197452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] client lang: <none>
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] server lang: <none>
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] kex follows: False
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:03:56.642 [DEBUG] [Thread-197452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:03:56.643 [DEBUG] [Thread-197452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:03:56.643 [DEBUG] [Thread-197452] [transport.py] [_log()] Compression: none
2026-04-12T23:03:56.643 [DEBUG] [Thread-197452] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:03:56.704 [DEBUG] [Thread-197452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:03:56.704 [DEBUG] [Thread-197452] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:03:56.705 [DEBUG] [Thread-197452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:03:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:03:56.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:03:56.767 [DEBUG] [Thread-197452] [transport.py] [_log()] userauth is OK
2026-04-12T23:03:56.768 [DEBUG] [Thread-197452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:03:56.768 [DEBUG] [Thread-197452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:03:56.768 [DEBUG] [Thread-197452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:03:56.768 [DEBUG] [Thread-197452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:03:56.787 [INFO] [Thread-197452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:03:56.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:03:56.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:03:56.918 [DEBUG] [Thread-197454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:03:57.565 [DEBUG] [Thread-197452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:03:57.565 [DEBUG] [Thread-197452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:03:57.612 [DEBUG] [Thread-197452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:03:57.613 [DEBUG] [Thread-197452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:03:57.622 [DEBUG] [Thread-197452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:03:57.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:03:57.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:03:57.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:03:57.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:03:57.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:03:57.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:03:57.658 [DEBUG] [Thread-197452] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:04:11.970 [DEBUG] [Thread-197455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:04:18.749 [DEBUG] [Thread-197456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:04:27.013 [DEBUG] [Thread-197457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:04:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:04:27.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:04:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:04:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 3, 57), 0.23877, 98.227, 0.0, 9.61704, 10.7837, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:04:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:03:57
2026-04-12T23:04:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:04:29.575 [DEBUG] [Thread-197458] [transport.py] [_log()] starting thread (client mode): 0xb0f6fac0
2026-04-12T23:04:29.576 [DEBUG] [Thread-197458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:04:29.593 [DEBUG] [Thread-197458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:04:29.593 [INFO] [Thread-197458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] client lang: <none>
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] server lang: <none>
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] kex follows: False
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] Compression: none
2026-04-12T23:04:29.595 [DEBUG] [Thread-197458] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:04:29.612 [DEBUG] [Thread-197458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:04:29.613 [DEBUG] [Thread-197458] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:04:29.613 [DEBUG] [Thread-197458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:04:29.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:04:29.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:04:29.616 [DEBUG] [Thread-197458] [transport.py] [_log()] userauth is OK
2026-04-12T23:04:29.616 [DEBUG] [Thread-197458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:04:29.616 [DEBUG] [Thread-197458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:04:29.616 [DEBUG] [Thread-197458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:04:29.616 [DEBUG] [Thread-197458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:04:29.652 [INFO] [Thread-197458] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:04:29.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:04:30.272 [DEBUG] [Thread-197458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:04:30.272 [DEBUG] [Thread-197458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:04:30.273 [DEBUG] [Thread-197458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:04:30.313 [DEBUG] [Thread-197458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:04:30.313 [DEBUG] [Thread-197458] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:04:30.316 [DEBUG] [Thread-197458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:04:30.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:04:30.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:04:30.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:04:30.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:04:30.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:04:30.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:04:30.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:04:30.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:04:30.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:04:30.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.877882 -999.00  +11.10   5.03     91   +9.80 1 2 1 3 1     0    0 1.90 26.45 ..Es. 5.0 5.0 204.0 6.8 11.8 -22.1 11.7 -21.0 11.4 -19.0 11.8 -20.9
2026-04-12T23:04:30.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:04:30.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:04:30.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.877882
2026-04-12T23:04:30.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:04:30.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:04:30.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:04:30.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:04:30.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:04:30.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:03:57', tmtdew=0.23877, humidity=98.227, cloud=0.0, wind=9.61704, temperature=10.7837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:04:09.005', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.317, nan, 3.1014999999999997, nan, nan, nan, nan, nan, 2.6674999999999995, nan, 2.453249999999999, 1.7749999999999986, nan, nan, nan, 3.0269999999999992, 2.2424999999999997, 1.4162499999999998, 1.3544999999999998, 1.2095000000000002, 1.402000000000001, 2.469000000000001, 1.8870000000000005, 2.5432499999999987], zp_timestamp='2026-04-12T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:04:30.339 [DEBUG] [Thread-197458] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:04:30.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:04:30.431 [DEBUG] [Thread-197461] [transport.py] [_log()] starting thread (client mode): 0xae560700
2026-04-12T23:04:30.432 [DEBUG] [Thread-197461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:04:30.446 [DEBUG] [Thread-197461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:04:30.446 [INFO] [Thread-197461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] client lang: <none>
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] server lang: <none>
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] kex follows: False
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:04:30.454 [DEBUG] [Thread-197461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:04:30.455 [DEBUG] [Thread-197461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:04:30.455 [DEBUG] [Thread-197461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:04:30.455 [DEBUG] [Thread-197461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:04:30.455 [DEBUG] [Thread-197461] [transport.py] [_log()] Compression: none
2026-04-12T23:04:30.455 [DEBUG] [Thread-197461] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:04:30.511 [DEBUG] [Thread-197461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:04:30.512 [DEBUG] [Thread-197461] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:04:30.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:04:30.513 [DEBUG] [Thread-197461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:04:30.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:04:30.570 [DEBUG] [Thread-197461] [transport.py] [_log()] userauth is OK
2026-04-12T23:04:30.570 [DEBUG] [Thread-197461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:04:30.570 [DEBUG] [Thread-197461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:04:30.570 [DEBUG] [Thread-197461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:04:30.570 [DEBUG] [Thread-197461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:04:30.585 [INFO] [Thread-197461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:04:30.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:04:30.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:04:31.389 [DEBUG] [Thread-197461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:04:31.389 [DEBUG] [Thread-197461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:04:31.437 [DEBUG] [Thread-197461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:04:31.437 [DEBUG] [Thread-197461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:04:31.446 [DEBUG] [Thread-197461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:04:31.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:04:31.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:04:31.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:04:31.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:04:31.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:04:31.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:04:31.484 [DEBUG] [Thread-197461] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:04:40.497 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:04:40.499 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:04:42.053 [DEBUG] [Thread-197463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:04:57.107 [DEBUG] [Thread-197464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:05:01.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:05:01.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:05:01.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:05:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 4, 32), 0.24631, 98.1773, 0.0, 9.45828, 10.7339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:05:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:04:32
2026-04-12T23:05:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:05:03.315 [DEBUG] [Thread-197465] [transport.py] [_log()] starting thread (client mode): 0xae562380
2026-04-12T23:05:03.315 [DEBUG] [Thread-197465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:05:03.329 [DEBUG] [Thread-197465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:05:03.329 [INFO] [Thread-197465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:05:03.331 [DEBUG] [Thread-197465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] client lang: <none>
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] server lang: <none>
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] kex follows: False
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] Compression: none
2026-04-12T23:05:03.332 [DEBUG] [Thread-197465] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:05:03.347 [DEBUG] [Thread-197465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:05:03.347 [DEBUG] [Thread-197465] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:05:03.348 [DEBUG] [Thread-197465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:05:03.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:05:03.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:05:03.349 [DEBUG] [Thread-197465] [transport.py] [_log()] userauth is OK
2026-04-12T23:05:03.349 [DEBUG] [Thread-197465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:05:03.350 [DEBUG] [Thread-197465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:05:03.350 [DEBUG] [Thread-197465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:05:03.350 [DEBUG] [Thread-197465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:05:03.374 [INFO] [Thread-197465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:05:03.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:05:04.079 [DEBUG] [Thread-197465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:05:04.079 [DEBUG] [Thread-197465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:05:04.080 [DEBUG] [Thread-197465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:05:04.120 [DEBUG] [Thread-197465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:05:04.120 [DEBUG] [Thread-197465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:05:04.124 [DEBUG] [Thread-197465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:05:04.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:05:04.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:05:04.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:05:04.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:05:04.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:05:04.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:05:04.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:05:04.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:05:04.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:05:04.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.878228 -999.00  +11.10   1.92     91   +9.80 1 2 1 3 1     0    0 1.96 28.57 ..Es. 1.9 1.9 197.9 7.4 11.8 -22.1 11.7 -20.9 11.5 -19.1 11.8 -20.9
2026-04-12T23:05:04.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:05:04.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:05:04.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.878228
2026-04-12T23:05:04.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:05:04.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:05:04.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:05:04.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:05:04.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:05:04.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:04:32', tmtdew=0.24631, humidity=98.1773, cloud=0.0, wind=9.45828, temperature=10.7339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:04:38.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.317, nan, 3.1014999999999997, nan, nan, nan, nan, nan, 2.6674999999999995, nan, 2.453249999999999, 1.7749999999999986, nan, nan, nan, 3.0269999999999992, 2.2424999999999997, 1.4162499999999998, 1.3544999999999998, 1.2095000000000002, 1.402000000000001, 2.469000000000001, 1.8870000000000005, 2.5432499999999987], zp_timestamp='2026-04-12T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:05:04.154 [DEBUG] [Thread-197465] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:05:04.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:05:04.245 [DEBUG] [Thread-197468] [transport.py] [_log()] starting thread (client mode): 0xae5b3c10
2026-04-12T23:05:04.245 [DEBUG] [Thread-197468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:05:04.259 [DEBUG] [Thread-197468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:05:04.260 [INFO] [Thread-197468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:05:04.267 [DEBUG] [Thread-197468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:05:04.267 [DEBUG] [Thread-197468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:05:04.267 [DEBUG] [Thread-197468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:05:04.267 [DEBUG] [Thread-197468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] client lang: <none>
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] server lang: <none>
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] kex follows: False
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:05:04.268 [DEBUG] [Thread-197468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:05:04.269 [DEBUG] [Thread-197468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:05:04.269 [DEBUG] [Thread-197468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:05:04.269 [DEBUG] [Thread-197468] [transport.py] [_log()] Compression: none
2026-04-12T23:05:04.269 [DEBUG] [Thread-197468] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:05:04.329 [DEBUG] [Thread-197468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:05:04.329 [DEBUG] [Thread-197468] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:05:04.330 [DEBUG] [Thread-197468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:05:04.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:05:04.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:05:04.387 [DEBUG] [Thread-197468] [transport.py] [_log()] userauth is OK
2026-04-12T23:05:04.388 [DEBUG] [Thread-197468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:05:04.388 [DEBUG] [Thread-197468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:05:04.388 [DEBUG] [Thread-197468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:05:04.388 [DEBUG] [Thread-197468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:05:04.406 [INFO] [Thread-197468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:05:04.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:05:04.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:05:05.204 [DEBUG] [Thread-197468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:05:05.205 [DEBUG] [Thread-197468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:05:05.252 [DEBUG] [Thread-197468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:05:05.252 [DEBUG] [Thread-197468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:05:05.262 [DEBUG] [Thread-197468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:05:05.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:05: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')
2026-04-12T23:05:05.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:05:05.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:05:05.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:05:05.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:05:05.299 [DEBUG] [Thread-197468] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:05:12.144 [DEBUG] [Thread-197470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:05:18.827 [DEBUG] [Thread-197471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:05:27.203 [DEBUG] [Thread-197472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:05:35.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:05:35.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:05:35.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:05:36.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 5, 7), 0.2489, 98.1607, 0.0, 9.28188, 10.7505, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:05:36.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:05:07
2026-04-12T23:05:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:05:37.135 [DEBUG] [Thread-197473] [transport.py] [_log()] starting thread (client mode): 0xb0f41a80
2026-04-12T23:05:37.135 [DEBUG] [Thread-197473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:05:37.155 [DEBUG] [Thread-197473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:05:37.156 [INFO] [Thread-197473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:05:37.158 [DEBUG] [Thread-197473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] client lang: <none>
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] server lang: <none>
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] kex follows: False
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:05:37.159 [DEBUG] [Thread-197473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:05:37.160 [DEBUG] [Thread-197473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:05:37.160 [DEBUG] [Thread-197473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:05:37.160 [DEBUG] [Thread-197473] [transport.py] [_log()] Compression: none
2026-04-12T23:05:37.160 [DEBUG] [Thread-197473] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:05:37.177 [DEBUG] [Thread-197473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:05:37.177 [DEBUG] [Thread-197473] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:05:37.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:05:37.178 [DEBUG] [Thread-197473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:05:37.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:05:37.221 [DEBUG] [Thread-197473] [transport.py] [_log()] userauth is OK
2026-04-12T23:05:37.221 [DEBUG] [Thread-197473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:05:37.222 [DEBUG] [Thread-197473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:05:37.222 [DEBUG] [Thread-197473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:05:37.222 [DEBUG] [Thread-197473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:05:37.247 [INFO] [Thread-197473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:05:37.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:05:37.857 [DEBUG] [Thread-197473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:05:37.857 [DEBUG] [Thread-197473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:05:37.857 [DEBUG] [Thread-197473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:05:37.899 [DEBUG] [Thread-197473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:05:37.899 [DEBUG] [Thread-197473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:05:37.902 [DEBUG] [Thread-197473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:05:37.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:05:37.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:05:37.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:05:37.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:05:37.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:05:37.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:05:37.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:05:37.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:05:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:05:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.878575 -999.00  +11.10   4.90     91   +9.80 1 2 1 3 1     0    0 1.95 27.87 ..E.. 4.9 4.9 220.0 6.4 11.8 -22.0 11.7 -21.1 11.5 -19.0 11.7 -21.0
2026-04-12T23:05:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:05:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:05:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.878575
2026-04-12T23:05:37.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:05:37.926 [DEBUG] [Thread-197473] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:05:37.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:05:37.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:05:37.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:05:37.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:05:37.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:05:07', tmtdew=0.2489, humidity=98.1607, cloud=0.0, wind=9.28188, temperature=10.7505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:05:08.880', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3865, 1.81025, 2.5885, nan, nan, nan, nan, nan, 2.957, nan, nan, 1.8299999999999983, nan, nan, nan, nan, 2.4154999999999998, 0.7457500000000001, 0.6575000000000006, 0.7240000000000002, 1.3195000000000006, 2.7590000000000012, 2.3820000000000006, 2.632249999999999], zp_timestamp='2026-04-12T21:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:05:38.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:05:40.703 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:05:40.704 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:05:42.237 [DEBUG] [Thread-197476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:05:57.294 [DEBUG] [Thread-197477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:06:12.336 [DEBUG] [Thread-197478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:06:18.898 [DEBUG] [Thread-197479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:06:27.374 [DEBUG] [Thread-197480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:06:40.910 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:06:40.911 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:06:42.409 [DEBUG] [Thread-197481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:06:57.448 [DEBUG] [Thread-197482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:07:12.484 [DEBUG] [Thread-197483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:07:18.972 [DEBUG] [Thread-197484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:07:27.522 [DEBUG] [Thread-197485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:07:41.115 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:07:41.116 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:07:42.558 [DEBUG] [Thread-197486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:07:49.503 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T23:07:57.594 [DEBUG] [Thread-197487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:08:12.628 [DEBUG] [Thread-197488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:08:19.048 [DEBUG] [Thread-197489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:08:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:08:19.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:08:19.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:08:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 8, 5), 0.259125, 98.0944, 0.0, 8.0118, 10.7505, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:08:20.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:08:05
2026-04-12T23:08:21.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:08:21.317 [DEBUG] [Thread-197490] [transport.py] [_log()] starting thread (client mode): 0xae5e6740
2026-04-12T23:08:21.317 [DEBUG] [Thread-197490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:08:21.328 [DEBUG] [Thread-197490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:08:21.328 [INFO] [Thread-197490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] client lang: <none>
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] server lang: <none>
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] kex follows: False
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] Compression: none
2026-04-12T23:08:21.329 [DEBUG] [Thread-197490] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:08:21.349 [DEBUG] [Thread-197490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:08:21.349 [DEBUG] [Thread-197490] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:08:21.349 [DEBUG] [Thread-197490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:08:21.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:08:21.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:08:21.351 [DEBUG] [Thread-197490] [transport.py] [_log()] userauth is OK
2026-04-12T23:08:21.351 [DEBUG] [Thread-197490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:08:21.351 [DEBUG] [Thread-197490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:08:21.351 [DEBUG] [Thread-197490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:08:21.352 [DEBUG] [Thread-197490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:08:21.375 [INFO] [Thread-197490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:08:21.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:08:22.093 [DEBUG] [Thread-197490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:08:22.093 [DEBUG] [Thread-197490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:08:22.093 [DEBUG] [Thread-197490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:08:22.134 [DEBUG] [Thread-197490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:08:22.135 [DEBUG] [Thread-197490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:08:22.138 [DEBUG] [Thread-197490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:08:22.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:08:22.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:08:22.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:08:22.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:08:22.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:08:22.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:08:22.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:08:22.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:08:22.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:08:22.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.880658 -999.00  +11.10   3.36     91   +9.80 1 2 1 3 1     0    0 1.99 27.53 .nEs. 3.4 3.4 249.5 5.9 11.8 -22.1 11.7 -21.1 11.4 -19.1 11.7 -21.2
2026-04-12T23:08:22.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:08:22.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:08:22.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.880658
2026-04-12T23:08:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:08:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:08:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:08:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:08:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:08:22.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:08:05', tmtdew=0.259125, humidity=98.0944, cloud=0.0, wind=8.0118, temperature=10.7505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:08:08.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3865, 1.81025, 2.5885, nan, nan, nan, nan, nan, 2.957, nan, nan, 1.8299999999999983, nan, nan, nan, nan, 2.4154999999999998, 0.7457500000000001, 0.6575000000000006, 0.7240000000000002, 1.3195000000000006, 2.7590000000000012, 2.3820000000000006, 2.632249999999999], zp_timestamp='2026-04-12T21:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:08:22.157 [DEBUG] [Thread-197490] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:08:22.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:08:22.249 [DEBUG] [Thread-197493] [transport.py] [_log()] starting thread (client mode): 0xae5a42e0
2026-04-12T23:08:22.250 [DEBUG] [Thread-197493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:08:22.265 [DEBUG] [Thread-197493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:08:22.265 [INFO] [Thread-197493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] client lang: <none>
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] server lang: <none>
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] kex follows: False
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:08:22.273 [DEBUG] [Thread-197493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:08:22.274 [DEBUG] [Thread-197493] [transport.py] [_log()] Compression: none
2026-04-12T23:08:22.274 [DEBUG] [Thread-197493] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:08:22.330 [DEBUG] [Thread-197493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:08:22.331 [DEBUG] [Thread-197493] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:08:22.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:08:22.332 [DEBUG] [Thread-197493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:08:22.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:08:22.387 [DEBUG] [Thread-197493] [transport.py] [_log()] userauth is OK
2026-04-12T23:08:22.387 [DEBUG] [Thread-197493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:08:22.387 [DEBUG] [Thread-197493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:08:22.387 [DEBUG] [Thread-197493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:08:22.387 [DEBUG] [Thread-197493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:08:22.406 [INFO] [Thread-197493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:08:22.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:08:22.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:08:23.229 [DEBUG] [Thread-197493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:08:23.229 [DEBUG] [Thread-197493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:08:23.277 [DEBUG] [Thread-197493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:08:23.277 [DEBUG] [Thread-197493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:08:23.287 [DEBUG] [Thread-197493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:08:23.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:08:23.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:08:23.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:08:23.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:08:23.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:08:23.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:08:23.323 [DEBUG] [Thread-197493] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:08:27.665 [DEBUG] [Thread-197495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:08:41.321 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:08:41.323 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:08:42.717 [DEBUG] [Thread-197496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:08:53.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:08:53.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:08:53.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:08:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 8, 40), 0.41816, 97.1888, 0.0, 9.882, 10.7678, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:08:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:08:40
2026-04-12T23:08:54.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:08:55.119 [DEBUG] [Thread-197497] [transport.py] [_log()] starting thread (client mode): 0xae5b0fd0
2026-04-12T23:08:55.119 [DEBUG] [Thread-197497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:08:55.139 [DEBUG] [Thread-197497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:08:55.140 [INFO] [Thread-197497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] client lang: <none>
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] server lang: <none>
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] kex follows: False
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] Compression: none
2026-04-12T23:08:55.143 [DEBUG] [Thread-197497] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:08:55.161 [DEBUG] [Thread-197497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:08:55.162 [DEBUG] [Thread-197497] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:08:55.162 [DEBUG] [Thread-197497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:08:55.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:08:55.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:08:55.205 [DEBUG] [Thread-197497] [transport.py] [_log()] userauth is OK
2026-04-12T23:08:55.206 [DEBUG] [Thread-197497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:08:55.206 [DEBUG] [Thread-197497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:08:55.206 [DEBUG] [Thread-197497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:08:55.206 [DEBUG] [Thread-197497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:08:55.232 [INFO] [Thread-197497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:08:55.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:08:55.996 [DEBUG] [Thread-197497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:08:55.996 [DEBUG] [Thread-197497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:08:55.997 [DEBUG] [Thread-197497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:08:56.037 [DEBUG] [Thread-197497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:08:56.037 [DEBUG] [Thread-197497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:08:56.041 [DEBUG] [Thread-197497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:08:56.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:08:56.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:08:56.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:08:56.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:08:56.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:08:56.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:08:56.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:08:56.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:08:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:08:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.880658 -999.00  +11.10   3.36     91   +9.80 1 2 1 3 1     0    0 1.99 27.53 .nEs. 3.4 3.4 249.5 5.9 11.8 -22.1 11.7 -21.1 11.4 -19.1 11.7 -21.2
2026-04-12T23:08:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:08:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:08:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.880658
2026-04-12T23:08:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:08:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:08:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:08:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:08:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:08:56.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:08:40', tmtdew=0.41816, humidity=97.1888, cloud=0.0, wind=9.882, temperature=10.7678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:08:08.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3865, 1.81025, 2.5885, nan, nan, nan, nan, nan, 2.957, nan, nan, 1.8299999999999983, nan, nan, nan, nan, 2.4154999999999998, 0.7457500000000001, 0.6575000000000006, 0.7240000000000002, 1.3195000000000006, 2.7590000000000012, 2.3820000000000006, 2.632249999999999], zp_timestamp='2026-04-12T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:08:56.076 [DEBUG] [Thread-197497] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:08:56.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:08:56.160 [DEBUG] [Thread-197500] [transport.py] [_log()] starting thread (client mode): 0xae561f90
2026-04-12T23:08:56.160 [DEBUG] [Thread-197500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:08:56.175 [DEBUG] [Thread-197500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:08:56.175 [INFO] [Thread-197500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:08:56.183 [DEBUG] [Thread-197500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] client lang: <none>
2026-04-12T23:08:56.184 [DEBUG] [Thread-197500] [transport.py] [_log()] server lang: <none>
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] kex follows: False
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] Compression: none
2026-04-12T23:08:56.185 [DEBUG] [Thread-197500] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:08:56.242 [DEBUG] [Thread-197500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:08:56.243 [DEBUG] [Thread-197500] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:08:56.243 [DEBUG] [Thread-197500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:08:56.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:08:56.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:08:56.302 [DEBUG] [Thread-197500] [transport.py] [_log()] userauth is OK
2026-04-12T23:08:56.302 [DEBUG] [Thread-197500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:08:56.302 [DEBUG] [Thread-197500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:08:56.302 [DEBUG] [Thread-197500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:08:56.303 [DEBUG] [Thread-197500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:08:56.322 [INFO] [Thread-197500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:08:56.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:08:56.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:08:57.157 [DEBUG] [Thread-197500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:08:57.157 [DEBUG] [Thread-197500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:08:57.205 [DEBUG] [Thread-197500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:08:57.205 [DEBUG] [Thread-197500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:08:57.215 [DEBUG] [Thread-197500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:08:57.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:08:57.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:08:57.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:08:57.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:08:57.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:08:57.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:08:57.262 [DEBUG] [Thread-197500] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:08:57.753 [DEBUG] [Thread-197502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:09:12.799 [DEBUG] [Thread-197503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:09:19.127 [DEBUG] [Thread-197504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:09:27.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:09:27.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:09: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
2026-04-12T23:09:27.836 [DEBUG] [Thread-197505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:09:28.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 9, 15), 0.25397, 98.1275, 0.0, 8.55864, 10.7339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:09:28.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:09:15
2026-04-12T23:09:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:09:29.105 [DEBUG] [Thread-197506] [transport.py] [_log()] starting thread (client mode): 0xb0f42170
2026-04-12T23:09:29.106 [DEBUG] [Thread-197506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:09:29.130 [DEBUG] [Thread-197506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:09:29.130 [INFO] [Thread-197506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:09:29.132 [DEBUG] [Thread-197506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:09:29.132 [DEBUG] [Thread-197506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:09:29.132 [DEBUG] [Thread-197506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:09:29.132 [DEBUG] [Thread-197506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:09:29.132 [DEBUG] [Thread-197506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] client lang: <none>
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] server lang: <none>
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] kex follows: False
2026-04-12T23:09:29.133 [DEBUG] [Thread-197506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:09:29.134 [DEBUG] [Thread-197506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:09:29.134 [DEBUG] [Thread-197506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:09:29.134 [DEBUG] [Thread-197506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:09:29.134 [DEBUG] [Thread-197506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:09:29.134 [DEBUG] [Thread-197506] [transport.py] [_log()] Compression: none
2026-04-12T23:09:29.134 [DEBUG] [Thread-197506] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:09:29.153 [DEBUG] [Thread-197506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:09:29.153 [DEBUG] [Thread-197506] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:09:29.154 [DEBUG] [Thread-197506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:09:29.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:09:29.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:09:29.156 [DEBUG] [Thread-197506] [transport.py] [_log()] userauth is OK
2026-04-12T23:09:29.156 [DEBUG] [Thread-197506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:09:29.156 [DEBUG] [Thread-197506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:09:29.156 [DEBUG] [Thread-197506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:09:29.156 [DEBUG] [Thread-197506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:09:29.180 [INFO] [Thread-197506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:09:29.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:09:29.972 [DEBUG] [Thread-197506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:09:29.972 [DEBUG] [Thread-197506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:09:29.973 [DEBUG] [Thread-197506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:09:30.013 [DEBUG] [Thread-197506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:09:30.013 [DEBUG] [Thread-197506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:09:30.017 [DEBUG] [Thread-197506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:09:30.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:09:30.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:09:30.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:09:30.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:09:30.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:09:30.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:09:30.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:09:30.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:09:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:09:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.881006 -999.00  +11.10   4.58     91   +9.80 1 2 1 3 1     0    0 2.05 28.67 .nEs. 4.6 4.6 214.0 5.5 11.9 -22.1 11.7 -21.1 11.4 -19.1 11.7 -21.0
2026-04-12T23:09:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:09:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:09:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.881006
2026-04-12T23:09:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:09:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:09:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:09:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:09:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:09:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:09:15', tmtdew=0.25397, humidity=98.1275, cloud=0.0, wind=8.55864, temperature=10.7339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:08:38.918', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3865, 1.81025, 2.5885, nan, nan, nan, nan, nan, 2.957, nan, nan, 1.8299999999999983, nan, nan, nan, nan, 2.4154999999999998, 0.7457500000000001, 0.6575000000000006, 0.7240000000000002, 1.3195000000000006, 2.7590000000000012, 2.3820000000000006, 2.632249999999999], zp_timestamp='2026-04-12T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:09:30.046 [DEBUG] [Thread-197506] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:09:30.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:09:30.139 [DEBUG] [Thread-197509] [transport.py] [_log()] starting thread (client mode): 0xae5b0d00
2026-04-12T23:09:30.139 [DEBUG] [Thread-197509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:09:30.154 [DEBUG] [Thread-197509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:09:30.154 [INFO] [Thread-197509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] client lang: <none>
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] server lang: <none>
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] kex follows: False
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] Compression: none
2026-04-12T23:09:30.161 [DEBUG] [Thread-197509] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:09:30.219 [DEBUG] [Thread-197509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:09:30.220 [DEBUG] [Thread-197509] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:09:30.220 [DEBUG] [Thread-197509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:09:30.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:09:30.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:09:30.276 [DEBUG] [Thread-197509] [transport.py] [_log()] userauth is OK
2026-04-12T23:09:30.277 [DEBUG] [Thread-197509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:09:30.277 [DEBUG] [Thread-197509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:09:30.278 [DEBUG] [Thread-197509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:09:30.278 [DEBUG] [Thread-197509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:09:30.297 [INFO] [Thread-197509] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:09:30.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:09:30.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:09:31.156 [DEBUG] [Thread-197509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:09:31.156 [DEBUG] [Thread-197509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:09:31.204 [DEBUG] [Thread-197509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:09:31.204 [DEBUG] [Thread-197509] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:09:31.213 [DEBUG] [Thread-197509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:09:31.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:09:31.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:09:31.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:09:31.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:09:31.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:09:31.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:09:31.250 [DEBUG] [Thread-197509] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:09:41.527 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:09:41.529 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:09:42.873 [DEBUG] [Thread-197511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:09:57.935 [DEBUG] [Thread-197512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:10:01.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:10:01.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:10:01.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:10:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 9, 51), 0.41816, 97.1888, 0.0, 8.96472, 10.7678, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:10:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:09:51
2026-04-12T23:10:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:10:03.099 [DEBUG] [Thread-197513] [transport.py] [_log()] starting thread (client mode): 0xa79586d0
2026-04-12T23:10:03.099 [DEBUG] [Thread-197513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:10:03.119 [DEBUG] [Thread-197513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:10:03.119 [INFO] [Thread-197513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:03.122 [DEBUG] [Thread-197513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] client lang: <none>
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] server lang: <none>
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] kex follows: False
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] Compression: none
2026-04-12T23:10:03.123 [DEBUG] [Thread-197513] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:10:03.140 [DEBUG] [Thread-197513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:10:03.141 [DEBUG] [Thread-197513] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:10:03.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:10:03.142 [DEBUG] [Thread-197513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:10:03.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:10:03.143 [DEBUG] [Thread-197513] [transport.py] [_log()] userauth is OK
2026-04-12T23:10:03.144 [DEBUG] [Thread-197513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:10:03.144 [DEBUG] [Thread-197513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:10:03.144 [DEBUG] [Thread-197513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:10:03.144 [DEBUG] [Thread-197513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:10:03.161 [INFO] [Thread-197513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:10:03.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:10:04.101 [DEBUG] [Thread-197513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:10:04.101 [DEBUG] [Thread-197513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:10:04.102 [DEBUG] [Thread-197513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:10:04.143 [DEBUG] [Thread-197513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:10:04.143 [DEBUG] [Thread-197513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:10:04.146 [DEBUG] [Thread-197513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:10:04.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:10:04.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:10:04.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:10:04.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:10:04.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:10:04.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:10:04.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:10:04.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:10:04.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:10:04.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.881353 -999.00  +11.10   3.74     91   +9.80 1 2 1 3 1     0    0 2.10 29.43 .NES. 3.7 3.7 209.9 5.1 11.8 -22.1 11.7 -21.2 11.5 -19.1 11.7 -21.1
2026-04-12T23:10:04.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:10:04.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:10:04.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.881353
2026-04-12T23:10:04.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:10:04.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:10:04.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:10:04.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:10:04.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:10:04.176 [DEBUG] [Thread-197513] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:10:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:09:51', tmtdew=0.41816, humidity=97.1888, cloud=0.0, wind=8.96472, temperature=10.7678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:09:08.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3865, 1.81025, 2.5885, nan, nan, nan, nan, nan, 2.957, nan, nan, 1.8299999999999983, nan, nan, nan, nan, 2.4154999999999998, 0.7457500000000001, 0.6575000000000006, 0.7240000000000002, 1.3195000000000006, 2.7590000000000012, 2.3820000000000006, 2.632249999999999], zp_timestamp='2026-04-12T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:10:04.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:10:04.272 [DEBUG] [Thread-197516] [transport.py] [_log()] starting thread (client mode): 0xb0f425c0
2026-04-12T23:10:04.272 [DEBUG] [Thread-197516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:10:04.288 [DEBUG] [Thread-197516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:10:04.288 [INFO] [Thread-197516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:10:04.296 [DEBUG] [Thread-197516] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:10:04.296 [DEBUG] [Thread-197516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] client lang: <none>
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] server lang: <none>
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] kex follows: False
2026-04-12T23:10:04.297 [DEBUG] [Thread-197516] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:10:04.298 [DEBUG] [Thread-197516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:10:04.298 [DEBUG] [Thread-197516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:10:04.298 [DEBUG] [Thread-197516] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:10:04.298 [DEBUG] [Thread-197516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:10:04.298 [DEBUG] [Thread-197516] [transport.py] [_log()] Compression: none
2026-04-12T23:10:04.298 [DEBUG] [Thread-197516] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:10:04.362 [DEBUG] [Thread-197516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:10:04.363 [DEBUG] [Thread-197516] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:10:04.363 [DEBUG] [Thread-197516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:10:04.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:10:04.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:10:04.422 [DEBUG] [Thread-197516] [transport.py] [_log()] userauth is OK
2026-04-12T23:10:04.422 [DEBUG] [Thread-197516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:10:04.423 [DEBUG] [Thread-197516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:10:04.423 [DEBUG] [Thread-197516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:10:04.423 [DEBUG] [Thread-197516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:10:04.442 [INFO] [Thread-197516] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:10:04.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:10:04.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:10:05.320 [DEBUG] [Thread-197516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:10:05.320 [DEBUG] [Thread-197516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:10:05.369 [DEBUG] [Thread-197516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:10:05.369 [DEBUG] [Thread-197516] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:10:05.377 [DEBUG] [Thread-197516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:10:05.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:10:05.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:10:05.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:10:05.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:10:05.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:10:05.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:10:05.411 [DEBUG] [Thread-197516] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:10:12.972 [DEBUG] [Thread-197518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:10:19.183 [DEBUG] [Thread-197519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:10:28.013 [DEBUG] [Thread-197520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:10:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:10:35.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:10:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:10:36.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 10, 26), 0.26675, 98.0446, 0.0, 8.13528, 10.7339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:10:36.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:10:26
2026-04-12T23:10:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:10:37.286 [DEBUG] [Thread-197521] [transport.py] [_log()] starting thread (client mode): 0xae5626e0
2026-04-12T23:10:37.286 [DEBUG] [Thread-197521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:10:37.305 [DEBUG] [Thread-197521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:10:37.305 [INFO] [Thread-197521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] client lang: <none>
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] server lang: <none>
2026-04-12T23:10:37.308 [DEBUG] [Thread-197521] [transport.py] [_log()] kex follows: False
2026-04-12T23:10:37.309 [DEBUG] [Thread-197521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:10:37.309 [DEBUG] [Thread-197521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:10:37.309 [DEBUG] [Thread-197521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:10:37.309 [DEBUG] [Thread-197521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:10:37.309 [DEBUG] [Thread-197521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:10:37.309 [DEBUG] [Thread-197521] [transport.py] [_log()] Compression: none
2026-04-12T23:10:37.309 [DEBUG] [Thread-197521] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:10:37.326 [DEBUG] [Thread-197521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:10:37.327 [DEBUG] [Thread-197521] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:10:37.327 [DEBUG] [Thread-197521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:10:37.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:10:37.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:10:37.329 [DEBUG] [Thread-197521] [transport.py] [_log()] userauth is OK
2026-04-12T23:10:37.330 [DEBUG] [Thread-197521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:10:37.330 [DEBUG] [Thread-197521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:10:37.330 [DEBUG] [Thread-197521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:10:37.330 [DEBUG] [Thread-197521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:10:37.354 [INFO] [Thread-197521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:10:37.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:10:38.113 [DEBUG] [Thread-197521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:10:38.113 [DEBUG] [Thread-197521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:10:38.114 [DEBUG] [Thread-197521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:10:38.154 [DEBUG] [Thread-197521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:10:38.154 [DEBUG] [Thread-197521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:10:38.157 [DEBUG] [Thread-197521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:10:38.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:10:38.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:10:38.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:10:38.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:10:38.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:10:38.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:10:38.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:10:38.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.881700 -999.00  +11.10   3.69     91   +9.80 1 2 1 3 1     0    0 2.12 30.19 .NES. 3.7 3.7 203.3 5.0 11.8 -22.1 11.7 -21.1 11.4 -19.2 11.7 -20.9
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.881700
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:10:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:10:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:10:26', tmtdew=0.26675, humidity=98.0446, cloud=0.0, wind=8.13528, temperature=10.7339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:09:38.880', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3865, 1.81025, 2.5885, nan, nan, nan, nan, nan, 2.957, nan, nan, 1.8299999999999983, nan, nan, nan, nan, 2.4154999999999998, 0.7457500000000001, 0.6575000000000006, 0.7240000000000002, 1.3195000000000006, 2.7590000000000012, 2.3820000000000006, 2.632249999999999], zp_timestamp='2026-04-12T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:10:38.174 [DEBUG] [Thread-197521] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:10:38.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:10:38.267 [DEBUG] [Thread-197524] [transport.py] [_log()] starting thread (client mode): 0xae5b28c0
2026-04-12T23:10:38.268 [DEBUG] [Thread-197524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:10:38.282 [DEBUG] [Thread-197524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:10:38.283 [INFO] [Thread-197524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:10:38.290 [DEBUG] [Thread-197524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:10:38.291 [DEBUG] [Thread-197524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:10:38.292 [DEBUG] [Thread-197524] [transport.py] [_log()] client lang: <none>
2026-04-12T23:10:38.292 [DEBUG] [Thread-197524] [transport.py] [_log()] server lang: <none>
2026-04-12T23:10:38.292 [DEBUG] [Thread-197524] [transport.py] [_log()] kex follows: False
2026-04-12T23:10:38.292 [DEBUG] [Thread-197524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:10:38.292 [DEBUG] [Thread-197524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:10:38.292 [DEBUG] [Thread-197524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:10:38.292 [DEBUG] [Thread-197524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:10:38.293 [DEBUG] [Thread-197524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:10:38.293 [DEBUG] [Thread-197524] [transport.py] [_log()] Compression: none
2026-04-12T23:10:38.293 [DEBUG] [Thread-197524] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:10:38.352 [DEBUG] [Thread-197524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:10:38.352 [DEBUG] [Thread-197524] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:10:38.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:10:38.354 [DEBUG] [Thread-197524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:10:38.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:10:38.409 [DEBUG] [Thread-197524] [transport.py] [_log()] userauth is OK
2026-04-12T23:10:38.410 [DEBUG] [Thread-197524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:10:38.410 [DEBUG] [Thread-197524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:10:38.410 [DEBUG] [Thread-197524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:10:38.410 [DEBUG] [Thread-197524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:10:38.429 [INFO] [Thread-197524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:10:38.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:10:38.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:10:39.251 [DEBUG] [Thread-197524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:10:39.251 [DEBUG] [Thread-197524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:10:39.301 [DEBUG] [Thread-197524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:10:39.301 [DEBUG] [Thread-197524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:10:39.312 [DEBUG] [Thread-197524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:10:39.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:10: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')
2026-04-12T23:10:39.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:10:39.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:10:39.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:10:39.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:10:39.349 [DEBUG] [Thread-197524] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:10:41.742 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:10:41.743 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:10:43.051 [DEBUG] [Thread-197526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:10:58.103 [DEBUG] [Thread-197527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:11:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:11:09.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:11:09.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:11:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 11, 2), 0.264195, 98.0612, 0.0, 7.95888, 10.7339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:11:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:11:02
2026-04-12T23:11:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:11:11.160 [DEBUG] [Thread-197528] [transport.py] [_log()] starting thread (client mode): 0xae563520
2026-04-12T23:11:11.160 [DEBUG] [Thread-197528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:11:11.177 [DEBUG] [Thread-197528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:11:11.178 [INFO] [Thread-197528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:11:11.181 [DEBUG] [Thread-197528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:11:11.181 [DEBUG] [Thread-197528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:11:11.181 [DEBUG] [Thread-197528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:11:11.181 [DEBUG] [Thread-197528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] client lang: <none>
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] server lang: <none>
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] kex follows: False
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:11:11.182 [DEBUG] [Thread-197528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:11:11.183 [DEBUG] [Thread-197528] [transport.py] [_log()] Compression: none
2026-04-12T23:11:11.183 [DEBUG] [Thread-197528] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:11:11.194 [DEBUG] [Thread-197528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:11:11.194 [DEBUG] [Thread-197528] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:11:11.195 [DEBUG] [Thread-197528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:11:11.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:11:11.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:11:11.197 [DEBUG] [Thread-197528] [transport.py] [_log()] userauth is OK
2026-04-12T23:11:11.197 [DEBUG] [Thread-197528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:11:11.197 [DEBUG] [Thread-197528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:11:11.197 [DEBUG] [Thread-197528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:11:11.197 [DEBUG] [Thread-197528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:11:11.216 [INFO] [Thread-197528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:11:11.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:11:12.062 [DEBUG] [Thread-197528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:11:12.062 [DEBUG] [Thread-197528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:11:12.063 [DEBUG] [Thread-197528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:11:12.103 [DEBUG] [Thread-197528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:11:12.103 [DEBUG] [Thread-197528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:11:12.107 [DEBUG] [Thread-197528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:11:12.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:11:12.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:11:12.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:11:12.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:11:12.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:11:12.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:11:12.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:11:12.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:11:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:11:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.882047 -999.00  +11.10   5.59     91   +9.80 1 2 1 3 1     0    0 2.09 29.03 .NEs. 5.6 5.6 215.6 6.8 11.8 -22.3 11.7 -21.0 11.4 -19.2 11.7 -21.1
2026-04-12T23:11:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:11:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:11:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.882047
2026-04-12T23:11:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:11:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:11:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:11:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:11:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:11:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:11:02', tmtdew=0.264195, humidity=98.0612, cloud=0.0, wind=7.95888, temperature=10.7339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:10:08.861', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3865, 1.81025, 2.5885, nan, nan, nan, nan, nan, 2.957, nan, nan, 1.8299999999999983, nan, nan, nan, nan, 2.4154999999999998, 0.7457500000000001, 0.6575000000000006, 0.7240000000000002, 1.3195000000000006, 2.7590000000000012, 2.3820000000000006, 2.632249999999999], zp_timestamp='2026-04-12T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:11:12.133 [DEBUG] [Thread-197528] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:11:12.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:11:12.229 [DEBUG] [Thread-197531] [transport.py] [_log()] starting thread (client mode): 0xae50be50
2026-04-12T23:11:12.229 [DEBUG] [Thread-197531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:11:12.245 [DEBUG] [Thread-197531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:11:12.245 [INFO] [Thread-197531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:11:12.253 [DEBUG] [Thread-197531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:11:12.253 [DEBUG] [Thread-197531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:11:12.253 [DEBUG] [Thread-197531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] client lang: <none>
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] server lang: <none>
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] kex follows: False
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] Compression: none
2026-04-12T23:11:12.254 [DEBUG] [Thread-197531] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:11:12.311 [DEBUG] [Thread-197531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:11:12.312 [DEBUG] [Thread-197531] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:11:12.313 [DEBUG] [Thread-197531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:11:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:11:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:11:12.372 [DEBUG] [Thread-197531] [transport.py] [_log()] userauth is OK
2026-04-12T23:11:12.372 [DEBUG] [Thread-197531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:11:12.372 [DEBUG] [Thread-197531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:11:12.372 [DEBUG] [Thread-197531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:11:12.373 [DEBUG] [Thread-197531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:11:12.390 [INFO] [Thread-197531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:11:12.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:11:12.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:11:13.142 [DEBUG] [Thread-197533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:11:13.216 [DEBUG] [Thread-197531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:11:13.216 [DEBUG] [Thread-197531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:11:13.264 [DEBUG] [Thread-197531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:11:13.264 [DEBUG] [Thread-197531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:11:13.274 [DEBUG] [Thread-197531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:11:13.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:11:13.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:11:13.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:11:13.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:11:13.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:11:13.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:11:13.322 [DEBUG] [Thread-197531] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:11:19.260 [DEBUG] [Thread-197534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:11:28.191 [DEBUG] [Thread-197535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:11:41.950 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:11:41.951 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:11:43.225 [DEBUG] [Thread-197536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:11:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:11:43.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:11:43.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:11:44.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 11, 37), 0.42327, 97.1556, 0.0, 7.37712, 10.7679, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:11:44.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:11:37
2026-04-12T23:11:44.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:11:45.088 [DEBUG] [Thread-197537] [transport.py] [_log()] starting thread (client mode): 0xa795b850
2026-04-12T23:11:45.088 [DEBUG] [Thread-197537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:11:45.108 [DEBUG] [Thread-197537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:11:45.108 [INFO] [Thread-197537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:11:45.111 [DEBUG] [Thread-197537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] client lang: <none>
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] server lang: <none>
2026-04-12T23:11:45.112 [DEBUG] [Thread-197537] [transport.py] [_log()] kex follows: False
2026-04-12T23:11:45.113 [DEBUG] [Thread-197537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:11:45.113 [DEBUG] [Thread-197537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:11:45.113 [DEBUG] [Thread-197537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:11:45.113 [DEBUG] [Thread-197537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:11:45.113 [DEBUG] [Thread-197537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:11:45.113 [DEBUG] [Thread-197537] [transport.py] [_log()] Compression: none
2026-04-12T23:11:45.113 [DEBUG] [Thread-197537] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:11:45.132 [DEBUG] [Thread-197537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:11:45.133 [DEBUG] [Thread-197537] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:11:45.133 [DEBUG] [Thread-197537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:11:45.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:11:45.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:11:45.136 [DEBUG] [Thread-197537] [transport.py] [_log()] userauth is OK
2026-04-12T23:11:45.136 [DEBUG] [Thread-197537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:11:45.136 [DEBUG] [Thread-197537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:11:45.136 [DEBUG] [Thread-197537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:11:45.136 [DEBUG] [Thread-197537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:11:45.162 [INFO] [Thread-197537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:11:45.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:11:45.978 [DEBUG] [Thread-197537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:11:45.978 [DEBUG] [Thread-197537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:11:45.979 [DEBUG] [Thread-197537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:11:46.019 [DEBUG] [Thread-197537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:11:46.020 [DEBUG] [Thread-197537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:11:46.023 [DEBUG] [Thread-197537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:11:46.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:11:46.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:11:46.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:11:46.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:11:46.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:11:46.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:11:46.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:11:46.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:11:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:11:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.882741 -999.00  +11.10   3.22     91   +9.80 1 2 1 3 1     0    0 1.99 25.87 .NEs. 3.2 3.2 219.7 5.2 11.8 -22.2 11.7 -21.1 11.4 -19.2 11.7 -21.2
2026-04-12T23:11:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:11:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:11:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.882741
2026-04-12T23:11:46.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:11:46.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:11:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:11:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:11:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:11:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:11:37', tmtdew=0.42327, humidity=97.1556, cloud=0.0, wind=7.37712, temperature=10.7679, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:11:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:11:46.051 [DEBUG] [Thread-197537] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:11:46.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:11:46.147 [DEBUG] [Thread-197540] [transport.py] [_log()] starting thread (client mode): 0xa7958b50
2026-04-12T23:11:46.147 [DEBUG] [Thread-197540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:11:46.162 [DEBUG] [Thread-197540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:11:46.162 [INFO] [Thread-197540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:11:46.170 [DEBUG] [Thread-197540] [transport.py] [_log()] client lang: <none>
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] server lang: <none>
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] kex follows: False
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] Compression: none
2026-04-12T23:11:46.171 [DEBUG] [Thread-197540] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:11:46.232 [DEBUG] [Thread-197540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:11:46.232 [DEBUG] [Thread-197540] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:11:46.233 [DEBUG] [Thread-197540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:11:46.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:11:46.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:11:46.290 [DEBUG] [Thread-197540] [transport.py] [_log()] userauth is OK
2026-04-12T23:11:46.290 [DEBUG] [Thread-197540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:11:46.290 [DEBUG] [Thread-197540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:11:46.290 [DEBUG] [Thread-197540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:11:46.291 [DEBUG] [Thread-197540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:11:46.313 [INFO] [Thread-197540] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:11:46.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:11:46.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:11:47.146 [DEBUG] [Thread-197540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:11:47.146 [DEBUG] [Thread-197540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:11:47.194 [DEBUG] [Thread-197540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:11:47.194 [DEBUG] [Thread-197540] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:11:47.203 [DEBUG] [Thread-197540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:11:47.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:11:47.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:11:47.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:11:47.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:11:47.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:11:47.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:11:47.240 [DEBUG] [Thread-197540] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:11:58.264 [DEBUG] [Thread-197542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:12:13.318 [DEBUG] [Thread-197543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:12:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:12:17.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:12:17.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:12:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 11, 37), 0.42327, 97.1556, 0.0, 7.37712, 10.7679, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:12:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:11:37
2026-04-12T23:12:18.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:12:19.148 [DEBUG] [Thread-197544] [transport.py] [_log()] starting thread (client mode): 0xa7959930
2026-04-12T23:12:19.148 [DEBUG] [Thread-197544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:12:19.170 [DEBUG] [Thread-197544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:12:19.170 [INFO] [Thread-197544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:12:19.173 [DEBUG] [Thread-197544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:12:19.173 [DEBUG] [Thread-197544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:12:19.173 [DEBUG] [Thread-197544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] client lang: <none>
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] server lang: <none>
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] kex follows: False
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:12:19.174 [DEBUG] [Thread-197544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:12:19.175 [DEBUG] [Thread-197544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:12:19.175 [DEBUG] [Thread-197544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:12:19.175 [DEBUG] [Thread-197544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:12:19.175 [DEBUG] [Thread-197544] [transport.py] [_log()] Compression: none
2026-04-12T23:12:19.175 [DEBUG] [Thread-197544] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:12:19.193 [DEBUG] [Thread-197544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:12:19.194 [DEBUG] [Thread-197544] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:12:19.195 [DEBUG] [Thread-197544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:12:19.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:12:19.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:12:19.197 [DEBUG] [Thread-197544] [transport.py] [_log()] userauth is OK
2026-04-12T23:12:19.197 [DEBUG] [Thread-197544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:12:19.197 [DEBUG] [Thread-197544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:12:19.197 [DEBUG] [Thread-197544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:12:19.197 [DEBUG] [Thread-197544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:12:19.234 [INFO] [Thread-197544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:12:19.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:12:19.352 [DEBUG] [Thread-197546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:12:20.037 [DEBUG] [Thread-197544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:12:20.038 [DEBUG] [Thread-197544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:12:20.038 [DEBUG] [Thread-197544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:12:20.078 [DEBUG] [Thread-197544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:12:20.078 [DEBUG] [Thread-197544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:12:20.082 [DEBUG] [Thread-197544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:12:20.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:12:20.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:12:20.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:12:20.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:12:20.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:12:20.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:12:20.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:12:20.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:12:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:12:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.883089 -999.00  +11.10   2.04     91   +9.70 1 2 1 3 1     0    0 1.97 25.15 .NEs. 2.0 2.0 237.0 5.0 11.8 -22.3 11.7 -21.2 11.4 -19.3 11.7 -21.3
2026-04-12T23:12:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:12:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:12:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.883089
2026-04-12T23:12:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:12:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:12:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:12:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:12:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:12:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:11:37', tmtdew=0.42327, humidity=97.1556, cloud=0.0, wind=7.37712, temperature=10.7679, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:11:38.890', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:12:20.110 [DEBUG] [Thread-197544] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:12:20.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:12:20.208 [DEBUG] [Thread-197548] [transport.py] [_log()] starting thread (client mode): 0xa79588e0
2026-04-12T23:12:20.208 [DEBUG] [Thread-197548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:12:20.223 [DEBUG] [Thread-197548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:12:20.223 [INFO] [Thread-197548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:12:20.231 [DEBUG] [Thread-197548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:12:20.232 [DEBUG] [Thread-197548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:12:20.232 [DEBUG] [Thread-197548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:12:20.232 [DEBUG] [Thread-197548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:20.232 [DEBUG] [Thread-197548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:20.232 [DEBUG] [Thread-197548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:20.232 [DEBUG] [Thread-197548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] client lang: <none>
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] server lang: <none>
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] kex follows: False
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] Compression: none
2026-04-12T23:12:20.233 [DEBUG] [Thread-197548] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:12:20.293 [DEBUG] [Thread-197548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:12:20.293 [DEBUG] [Thread-197548] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:12:20.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:12:20.294 [DEBUG] [Thread-197548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:12:20.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:12:20.352 [DEBUG] [Thread-197548] [transport.py] [_log()] userauth is OK
2026-04-12T23:12:20.352 [DEBUG] [Thread-197548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:12:20.352 [DEBUG] [Thread-197548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:12:20.352 [DEBUG] [Thread-197548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:12:20.352 [DEBUG] [Thread-197548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:12:20.374 [INFO] [Thread-197548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:12:20.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:12:20.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:12:21.172 [DEBUG] [Thread-197548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:12:21.172 [DEBUG] [Thread-197548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:12:21.221 [DEBUG] [Thread-197548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:12:21.221 [DEBUG] [Thread-197548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:12:21.230 [DEBUG] [Thread-197548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:12:21.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:12:21.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:12:21.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:12:21.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:12:21.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:12:21.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:12:21.265 [DEBUG] [Thread-197548] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:12:28.353 [DEBUG] [Thread-197550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:12:42.156 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:12:42.157 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:12:43.404 [DEBUG] [Thread-197551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:12:51.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:12:51.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:12:51.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:12:52.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 12, 12), 0.2694, 98.028, 0.0, 7.64136, 10.7671, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:12:52.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:12:12
2026-04-12T23:12:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:12:53.147 [DEBUG] [Thread-197552] [transport.py] [_log()] starting thread (client mode): 0xa795bb20
2026-04-12T23:12:53.147 [DEBUG] [Thread-197552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:12:53.168 [DEBUG] [Thread-197552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:12:53.168 [INFO] [Thread-197552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:12:53.171 [DEBUG] [Thread-197552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:12:53.171 [DEBUG] [Thread-197552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:12:53.171 [DEBUG] [Thread-197552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] client lang: <none>
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] server lang: <none>
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] kex follows: False
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] Compression: none
2026-04-12T23:12:53.172 [DEBUG] [Thread-197552] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:12:53.189 [DEBUG] [Thread-197552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:12:53.189 [DEBUG] [Thread-197552] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:12:53.190 [DEBUG] [Thread-197552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:12:53.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:12:53.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:12:53.192 [DEBUG] [Thread-197552] [transport.py] [_log()] userauth is OK
2026-04-12T23:12:53.192 [DEBUG] [Thread-197552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:12:53.192 [DEBUG] [Thread-197552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:12:53.192 [DEBUG] [Thread-197552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:12:53.192 [DEBUG] [Thread-197552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:12:53.217 [INFO] [Thread-197552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:12:53.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:12:53.988 [DEBUG] [Thread-197552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:12:53.988 [DEBUG] [Thread-197552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:12:53.988 [DEBUG] [Thread-197552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:12:54.029 [DEBUG] [Thread-197552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:12:54.029 [DEBUG] [Thread-197552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:12:54.033 [DEBUG] [Thread-197552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:12:54.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:12:54.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:12:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:12:54.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:12:54.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:12:54.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:12:54.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:12:54.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:12:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:12:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.883436 -999.00  +11.10   3.47     91   +9.70 1 2 1 3 1     0    0 1.95 23.94 .NEs. 3.5 3.5 205.6 5.9 11.8 -22.3 11.7 -21.2 11.4 -19.2 11.7 -21.2
2026-04-12T23:12:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:12:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:12:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.883436
2026-04-12T23:12:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:12:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:12:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:12:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:12:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:12:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:12:12', tmtdew=0.2694, humidity=98.028, cloud=0.0, wind=7.64136, temperature=10.7671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:12:08.870', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:12:54.061 [DEBUG] [Thread-197552] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:12:54.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:12:54.153 [DEBUG] [Thread-197555] [transport.py] [_log()] starting thread (client mode): 0xae50b760
2026-04-12T23:12:54.153 [DEBUG] [Thread-197555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:12:54.167 [DEBUG] [Thread-197555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:12:54.168 [INFO] [Thread-197555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:12:54.176 [DEBUG] [Thread-197555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:12:54.176 [DEBUG] [Thread-197555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:12:54.176 [DEBUG] [Thread-197555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:12:54.176 [DEBUG] [Thread-197555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:54.176 [DEBUG] [Thread-197555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:12:54.176 [DEBUG] [Thread-197555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:54.176 [DEBUG] [Thread-197555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] client lang: <none>
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] server lang: <none>
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] kex follows: False
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:12:54.177 [DEBUG] [Thread-197555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:12:54.178 [DEBUG] [Thread-197555] [transport.py] [_log()] Compression: none
2026-04-12T23:12:54.178 [DEBUG] [Thread-197555] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:12:54.240 [DEBUG] [Thread-197555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:12:54.241 [DEBUG] [Thread-197555] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:12:54.241 [DEBUG] [Thread-197555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:12:54.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:12:54.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:12:54.298 [DEBUG] [Thread-197555] [transport.py] [_log()] userauth is OK
2026-04-12T23:12:54.298 [DEBUG] [Thread-197555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:12:54.298 [DEBUG] [Thread-197555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:12:54.298 [DEBUG] [Thread-197555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:12:54.299 [DEBUG] [Thread-197555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:12:54.317 [INFO] [Thread-197555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:12:54.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:12:54.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:12:55.133 [DEBUG] [Thread-197555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:12:55.133 [DEBUG] [Thread-197555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:12:55.181 [DEBUG] [Thread-197555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:12:55.181 [DEBUG] [Thread-197555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:12:55.191 [DEBUG] [Thread-197555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:12:55.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:12:55.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:12:55.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:12:55.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:12:55.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:12:55.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:12:55.233 [DEBUG] [Thread-197555] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:12:58.442 [DEBUG] [Thread-197557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:13.495 [DEBUG] [Thread-197558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:19.430 [DEBUG] [Thread-197559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:25.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:13:25.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:13:25.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:13:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 12, 48), 0.43889, 97.0561, 0.0, 8.18856, 10.8674, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:13:26.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:12:48
2026-04-12T23:13:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:13:27.093 [DEBUG] [Thread-197560] [transport.py] [_log()] starting thread (client mode): 0xae50ac20
2026-04-12T23:13:27.093 [DEBUG] [Thread-197560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:13:27.113 [DEBUG] [Thread-197560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:13:27.113 [INFO] [Thread-197560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] client lang: <none>
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] server lang: <none>
2026-04-12T23:13:27.117 [DEBUG] [Thread-197560] [transport.py] [_log()] kex follows: False
2026-04-12T23:13:27.118 [DEBUG] [Thread-197560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:13:27.118 [DEBUG] [Thread-197560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:13:27.118 [DEBUG] [Thread-197560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:13:27.118 [DEBUG] [Thread-197560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:13:27.118 [DEBUG] [Thread-197560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:13:27.118 [DEBUG] [Thread-197560] [transport.py] [_log()] Compression: none
2026-04-12T23:13:27.118 [DEBUG] [Thread-197560] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:13:27.134 [DEBUG] [Thread-197560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:13:27.135 [DEBUG] [Thread-197560] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:13:27.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:13:27.136 [DEBUG] [Thread-197560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:13:27.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:13:27.138 [DEBUG] [Thread-197560] [transport.py] [_log()] userauth is OK
2026-04-12T23:13:27.138 [DEBUG] [Thread-197560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:13:27.138 [DEBUG] [Thread-197560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:13:27.138 [DEBUG] [Thread-197560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:13:27.139 [DEBUG] [Thread-197560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:13:27.163 [INFO] [Thread-197560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:13:27.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:13:27.952 [DEBUG] [Thread-197560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:13:27.952 [DEBUG] [Thread-197560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:13:27.953 [DEBUG] [Thread-197560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:13:27.993 [DEBUG] [Thread-197560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:13:27.994 [DEBUG] [Thread-197560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:13:27.996 [DEBUG] [Thread-197560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:13:28.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:13:28.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:13:28.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:13:28.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:13:28.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:13:28.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:13:28.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:13:28.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:13:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:13:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.883783 -999.00  +11.10   4.63     91   +9.70 1 2 1 3 1     0    0 1.92 23.29 .NEs. 4.6 4.6 203.8 5.5 11.8 -22.3 11.7 -21.1 11.4 -19.1 11.7 -21.2
2026-04-12T23:13:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:13:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:13:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.883783
2026-04-12T23:13:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:13:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:13:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:13:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:13:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:13:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:12:48', tmtdew=0.43889, humidity=97.0561, cloud=0.0, wind=8.18856, temperature=10.8674, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:12:38.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:13:28.020 [DEBUG] [Thread-197560] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:13:28.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:13:28.114 [DEBUG] [Thread-197563] [transport.py] [_log()] starting thread (client mode): 0xa795be50
2026-04-12T23:13:28.114 [DEBUG] [Thread-197563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:13:28.129 [DEBUG] [Thread-197563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:13:28.129 [INFO] [Thread-197563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] client lang: <none>
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] server lang: <none>
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] kex follows: False
2026-04-12T23:13:28.138 [DEBUG] [Thread-197563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:13:28.139 [DEBUG] [Thread-197563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:13:28.139 [DEBUG] [Thread-197563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:13:28.139 [DEBUG] [Thread-197563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:13:28.139 [DEBUG] [Thread-197563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:13:28.139 [DEBUG] [Thread-197563] [transport.py] [_log()] Compression: none
2026-04-12T23:13:28.139 [DEBUG] [Thread-197563] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:13:28.195 [DEBUG] [Thread-197563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:13:28.195 [DEBUG] [Thread-197563] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:13:28.196 [DEBUG] [Thread-197563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:13:28.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:13:28.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:13:28.251 [DEBUG] [Thread-197563] [transport.py] [_log()] userauth is OK
2026-04-12T23:13:28.251 [DEBUG] [Thread-197563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:13:28.251 [DEBUG] [Thread-197563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:13:28.252 [DEBUG] [Thread-197563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:13:28.252 [DEBUG] [Thread-197563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:13:28.270 [INFO] [Thread-197563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:13:28.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:13:28.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:13:28.532 [DEBUG] [Thread-197565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:29.069 [DEBUG] [Thread-197563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:13:29.069 [DEBUG] [Thread-197563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:13:29.117 [DEBUG] [Thread-197563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:13:29.117 [DEBUG] [Thread-197563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:13:29.125 [DEBUG] [Thread-197563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:13:29.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:13:29.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:13:29.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:13:29.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:13:29.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:13:29.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:13:29.162 [DEBUG] [Thread-197563] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:13:42.364 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:42.365 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:43.584 [DEBUG] [Thread-197566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:58.621 [DEBUG] [Thread-197567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:13:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:13:59.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:13:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:14:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 13, 23), 0.27187, 98.0115, 0.0, 6.28236, 10.7339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:14:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:13:23
2026-04-12T23:14:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:14:01.079 [DEBUG] [Thread-197568] [transport.py] [_log()] starting thread (client mode): 0xae561f00
2026-04-12T23:14:01.079 [DEBUG] [Thread-197568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:14:01.098 [DEBUG] [Thread-197568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:14:01.098 [INFO] [Thread-197568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:14:01.099 [DEBUG] [Thread-197568] [transport.py] [_log()] client lang: <none>
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] server lang: <none>
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] kex follows: False
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] Compression: none
2026-04-12T23:14:01.100 [DEBUG] [Thread-197568] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:14:01.107 [DEBUG] [Thread-197568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:14:01.108 [DEBUG] [Thread-197568] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:14:01.108 [DEBUG] [Thread-197568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:14:01.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:14:01.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:14:01.109 [DEBUG] [Thread-197568] [transport.py] [_log()] userauth is OK
2026-04-12T23:14:01.110 [DEBUG] [Thread-197568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:14:01.110 [DEBUG] [Thread-197568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:14:01.110 [DEBUG] [Thread-197568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:14:01.110 [DEBUG] [Thread-197568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:14:01.125 [INFO] [Thread-197568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:14:01.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:14:01.930 [DEBUG] [Thread-197568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:14:01.931 [DEBUG] [Thread-197568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:14:01.931 [DEBUG] [Thread-197568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:14:01.972 [DEBUG] [Thread-197568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:14:01.972 [DEBUG] [Thread-197568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:14:01.976 [DEBUG] [Thread-197568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:14:01.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:14:01.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:14:01.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:14:01.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:14:01.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:14:01.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:14:01.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:14:01.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:14:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:14:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.884131 -999.00  +11.00   3.23     91   +9.70 1 2 1 3 1     0    0 1.90 21.49 .NEsw 3.2 3.2 207.9 4.3 11.8 -22.2 11.7 -21.1 11.4 -19.2 11.7 -21.1
2026-04-12T23:14:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:14:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:14:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.884131
2026-04-12T23:14:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:14:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:14:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:14:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:14:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:14:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:13:23', tmtdew=0.27187, humidity=98.0115, cloud=0.0, wind=6.28236, temperature=10.7339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:13:08.918', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:14:02.002 [DEBUG] [Thread-197568] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:14:02.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:14:02.099 [DEBUG] [Thread-197571] [transport.py] [_log()] starting thread (client mode): 0xae509a50
2026-04-12T23:14:02.099 [DEBUG] [Thread-197571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:14:02.121 [DEBUG] [Thread-197571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:14:02.122 [INFO] [Thread-197571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:14:02.130 [DEBUG] [Thread-197571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:14:02.130 [DEBUG] [Thread-197571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] client lang: <none>
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] server lang: <none>
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] kex follows: False
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:14:02.131 [DEBUG] [Thread-197571] [transport.py] [_log()] Compression: none
2026-04-12T23:14:02.132 [DEBUG] [Thread-197571] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:14:02.189 [DEBUG] [Thread-197571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:14:02.189 [DEBUG] [Thread-197571] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:14:02.190 [DEBUG] [Thread-197571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:14:02.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:14:02.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:14:02.245 [DEBUG] [Thread-197571] [transport.py] [_log()] userauth is OK
2026-04-12T23:14:02.245 [DEBUG] [Thread-197571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:14:02.245 [DEBUG] [Thread-197571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:14:02.245 [DEBUG] [Thread-197571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:14:02.245 [DEBUG] [Thread-197571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:14:02.264 [INFO] [Thread-197571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:14:02.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:14:02.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:14:03.095 [DEBUG] [Thread-197571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:14:03.096 [DEBUG] [Thread-197571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:14:03.146 [DEBUG] [Thread-197571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:14:03.146 [DEBUG] [Thread-197571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:14:03.158 [DEBUG] [Thread-197571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:14:03.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:14:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:14:03.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:14:03.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:14:03.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:14:03.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:14:03.201 [DEBUG] [Thread-197571] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:14:13.663 [DEBUG] [Thread-197573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:14:19.521 [DEBUG] [Thread-197574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:14:28.711 [DEBUG] [Thread-197575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:14:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:14:33.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:14:33.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:14:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 13, 59), 0.266965, 98.0446, 0.0, 6.24708, 10.8669, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:14:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:13:59
2026-04-12T23:14:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:14:35.057 [DEBUG] [Thread-197576] [transport.py] [_log()] starting thread (client mode): 0xae562d40
2026-04-12T23:14:35.057 [DEBUG] [Thread-197576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:14:35.077 [DEBUG] [Thread-197576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:14:35.077 [INFO] [Thread-197576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:14:35.080 [DEBUG] [Thread-197576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:14:35.080 [DEBUG] [Thread-197576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] client lang: <none>
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] server lang: <none>
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] kex follows: False
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:14:35.081 [DEBUG] [Thread-197576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:14:35.082 [DEBUG] [Thread-197576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:14:35.082 [DEBUG] [Thread-197576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:14:35.082 [DEBUG] [Thread-197576] [transport.py] [_log()] Compression: none
2026-04-12T23:14:35.082 [DEBUG] [Thread-197576] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:14:35.100 [DEBUG] [Thread-197576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:14:35.101 [DEBUG] [Thread-197576] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:14:35.101 [DEBUG] [Thread-197576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:14:35.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:14:35.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:14:35.104 [DEBUG] [Thread-197576] [transport.py] [_log()] userauth is OK
2026-04-12T23:14:35.104 [DEBUG] [Thread-197576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:14:35.104 [DEBUG] [Thread-197576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:14:35.104 [DEBUG] [Thread-197576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:14:35.104 [DEBUG] [Thread-197576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:14:35.127 [INFO] [Thread-197576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:14:35.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:14:35.886 [DEBUG] [Thread-197576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:14:35.886 [DEBUG] [Thread-197576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:14:35.886 [DEBUG] [Thread-197576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:14:35.927 [DEBUG] [Thread-197576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:14:35.927 [DEBUG] [Thread-197576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:14:35.929 [DEBUG] [Thread-197576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:14:35.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:14:35.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:14:35.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:14:35.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:14:35.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:14:35.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:14:35.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.884478 -999.00  +11.10   3.43     91   +9.70 1 2 1 3 1     0    0 1.88 21.72 .NE.W 3.4 3.4 198.4 5.1 11.8 -22.2 11.7 -21.2 11.4 -19.1 11.7 -21.2
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.884478
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:14:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:14:35.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:13:59', tmtdew=0.266965, humidity=98.0446, cloud=0.0, wind=6.24708, temperature=10.8669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:13:38.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:14:35.952 [DEBUG] [Thread-197576] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:14:36.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:14:36.035 [DEBUG] [Thread-197579] [transport.py] [_log()] starting thread (client mode): 0xae5634c0
2026-04-12T23:14:36.035 [DEBUG] [Thread-197579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:14:36.049 [DEBUG] [Thread-197579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:14:36.049 [INFO] [Thread-197579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:14:36.058 [DEBUG] [Thread-197579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:14:36.058 [DEBUG] [Thread-197579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:14:36.058 [DEBUG] [Thread-197579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:14:36.058 [DEBUG] [Thread-197579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:36.058 [DEBUG] [Thread-197579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] client lang: <none>
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] server lang: <none>
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] kex follows: False
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] Compression: none
2026-04-12T23:14:36.059 [DEBUG] [Thread-197579] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:14:36.118 [DEBUG] [Thread-197579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:14:36.119 [DEBUG] [Thread-197579] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:14:36.119 [DEBUG] [Thread-197579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:14:36.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:14:36.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:14:36.174 [DEBUG] [Thread-197579] [transport.py] [_log()] userauth is OK
2026-04-12T23:14:36.175 [DEBUG] [Thread-197579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:14:36.175 [DEBUG] [Thread-197579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:14:36.175 [DEBUG] [Thread-197579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:14:36.175 [DEBUG] [Thread-197579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:14:36.193 [INFO] [Thread-197579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:14:36.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:14:36.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:14:36.966 [DEBUG] [Thread-197579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:14:36.966 [DEBUG] [Thread-197579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:14:37.014 [DEBUG] [Thread-197579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:14:37.014 [DEBUG] [Thread-197579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:14:37.027 [DEBUG] [Thread-197579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:14:37.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:14:37.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:14:37.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:14:37.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:14:37.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:14:37.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:14:37.065 [DEBUG] [Thread-197579] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:14:42.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:14:42.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:14:43.748 [DEBUG] [Thread-197581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:14:58.799 [DEBUG] [Thread-197582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:15:07.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:15:07.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:15:07.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:15:08.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 14, 34), 0.4441, 97.0229, 0.0, 9.24696, 10.9005, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:15:08.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:14:34
2026-04-12T23:15:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:15:08.927 [DEBUG] [Thread-197583] [transport.py] [_log()] starting thread (client mode): 0xae5b0d30
2026-04-12T23:15:08.927 [DEBUG] [Thread-197583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:15:08.951 [DEBUG] [Thread-197583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:15:08.951 [INFO] [Thread-197583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] client lang: <none>
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] server lang: <none>
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] kex follows: False
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] Compression: none
2026-04-12T23:15:08.954 [DEBUG] [Thread-197583] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:15:08.970 [DEBUG] [Thread-197583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:15:08.970 [DEBUG] [Thread-197583] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:15:08.971 [DEBUG] [Thread-197583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:15:08.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:15:08.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:15:08.972 [DEBUG] [Thread-197583] [transport.py] [_log()] userauth is OK
2026-04-12T23:15:08.973 [DEBUG] [Thread-197583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:15:08.973 [DEBUG] [Thread-197583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:15:08.973 [DEBUG] [Thread-197583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:15:08.973 [DEBUG] [Thread-197583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:15:08.997 [INFO] [Thread-197583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:15:08.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:15:10.259 [DEBUG] [Thread-197583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:15:10.259 [DEBUG] [Thread-197583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:15:10.260 [DEBUG] [Thread-197583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:15:10.300 [DEBUG] [Thread-197583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:15:10.300 [DEBUG] [Thread-197583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:15:10.304 [DEBUG] [Thread-197583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:15:10.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:15:10.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:15:10.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:15:10.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:15:10.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:15:10.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:15:10.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:15:10.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:15:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:15:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.885172 -999.00  +11.00   3.50     91   +9.70 1 2 1 3 1     0    0 1.85 19.28 .NE.W 3.5 3.5 194.0 4.9 11.8 -22.2 11.7 -21.1 11.4 -19.2 11.7 -21.2
2026-04-12T23:15:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:15:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:15:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.885172
2026-04-12T23:15:10.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:15:10.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:15:10.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:15:10.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:15:10.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:15:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:14:34', tmtdew=0.4441, humidity=97.0229, cloud=0.0, wind=9.24696, temperature=10.9005, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:14:38.861', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:15:10.360 [DEBUG] [Thread-197583] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:15:10.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:15:10.452 [DEBUG] [Thread-197586] [transport.py] [_log()] starting thread (client mode): 0xae5b1540
2026-04-12T23:15:10.452 [DEBUG] [Thread-197586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:15:10.470 [DEBUG] [Thread-197586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:15:10.470 [INFO] [Thread-197586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:15:10.479 [DEBUG] [Thread-197586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:15:10.479 [DEBUG] [Thread-197586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:15:10.479 [DEBUG] [Thread-197586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:15:10.479 [DEBUG] [Thread-197586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:10.479 [DEBUG] [Thread-197586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] client lang: <none>
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] server lang: <none>
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] kex follows: False
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] Compression: none
2026-04-12T23:15:10.480 [DEBUG] [Thread-197586] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:15:10.535 [DEBUG] [Thread-197586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:15:10.536 [DEBUG] [Thread-197586] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:15:10.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:15:10.537 [DEBUG] [Thread-197586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:15:10.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:15:10.592 [DEBUG] [Thread-197586] [transport.py] [_log()] userauth is OK
2026-04-12T23:15:10.592 [DEBUG] [Thread-197586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:15:10.592 [DEBUG] [Thread-197586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:15:10.592 [DEBUG] [Thread-197586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:15:10.592 [DEBUG] [Thread-197586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:15:10.612 [INFO] [Thread-197586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:15:10.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:15:10.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:15:11.453 [DEBUG] [Thread-197586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:15:11.453 [DEBUG] [Thread-197586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:15:11.500 [DEBUG] [Thread-197586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:15:11.501 [DEBUG] [Thread-197586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:15:11.510 [DEBUG] [Thread-197586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:15:11.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:15:11.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:15:11.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:15:11.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:15:11.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:15:11.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:15:11.546 [DEBUG] [Thread-197586] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:15:13.837 [DEBUG] [Thread-197588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:15:19.600 [DEBUG] [Thread-197589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:15:28.893 [DEBUG] [Thread-197590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:15:41.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:15:41.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:15:41.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:15:42.788 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:15:42.789 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:15:42.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 15, 10), 0.274655, 97.9949, 0.0, 8.06472, 10.8669, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:15:42.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:15:10
2026-04-12T23:15:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:15:43.350 [DEBUG] [Thread-197591] [transport.py] [_log()] starting thread (client mode): 0xae563850
2026-04-12T23:15:43.350 [DEBUG] [Thread-197591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:15:43.365 [DEBUG] [Thread-197591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:15:43.365 [INFO] [Thread-197591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] client lang: <none>
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] server lang: <none>
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] kex follows: False
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] Compression: none
2026-04-12T23:15:43.368 [DEBUG] [Thread-197591] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:15:43.384 [DEBUG] [Thread-197591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:15:43.384 [DEBUG] [Thread-197591] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:15:43.385 [DEBUG] [Thread-197591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:15:43.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:15:43.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:15:43.387 [DEBUG] [Thread-197591] [transport.py] [_log()] userauth is OK
2026-04-12T23:15:43.387 [DEBUG] [Thread-197591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:15:43.387 [DEBUG] [Thread-197591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:15:43.387 [DEBUG] [Thread-197591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:15:43.387 [DEBUG] [Thread-197591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:15:43.419 [INFO] [Thread-197591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:15:43.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:15:43.930 [DEBUG] [Thread-197593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:15:44.199 [DEBUG] [Thread-197591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:15:44.199 [DEBUG] [Thread-197591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:15:44.200 [DEBUG] [Thread-197591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:15:44.240 [DEBUG] [Thread-197591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:15:44.240 [DEBUG] [Thread-197591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:15:44.244 [DEBUG] [Thread-197591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:15:44.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:15:44.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:15:44.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:15:44.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:15:44.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:15:44.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:15:44.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:15:44.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:15:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:15:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.885519 -999.00  +11.00   3.92     91   +9.70 1 2 1 3 1     0    0 1.78 17.19 .NEs. 3.9 3.9 206.4 4.8 11.8 -22.3 11.7 -21.2 11.4 -19.2 11.7 -21.2
2026-04-12T23:15:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:15:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:15:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.885519
2026-04-12T23:15:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:15:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:15:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:15:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:15:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:15:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:15:10', tmtdew=0.274655, humidity=97.9949, cloud=0.0, wind=8.06472, temperature=10.8669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:15:08.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:15:44.272 [DEBUG] [Thread-197591] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:15:44.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:15:44.366 [DEBUG] [Thread-197595] [transport.py] [_log()] starting thread (client mode): 0xae561240
2026-04-12T23:15:44.366 [DEBUG] [Thread-197595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:15:44.380 [DEBUG] [Thread-197595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:15:44.381 [INFO] [Thread-197595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:15:44.388 [DEBUG] [Thread-197595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:15:44.388 [DEBUG] [Thread-197595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:15:44.388 [DEBUG] [Thread-197595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:15:44.388 [DEBUG] [Thread-197595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:44.388 [DEBUG] [Thread-197595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] client lang: <none>
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] server lang: <none>
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] kex follows: False
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] Compression: none
2026-04-12T23:15:44.389 [DEBUG] [Thread-197595] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:15:44.445 [DEBUG] [Thread-197595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:15:44.446 [DEBUG] [Thread-197595] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:15:44.446 [DEBUG] [Thread-197595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:15:44.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:15:44.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:15:44.502 [DEBUG] [Thread-197595] [transport.py] [_log()] userauth is OK
2026-04-12T23:15:44.502 [DEBUG] [Thread-197595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:15:44.502 [DEBUG] [Thread-197595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:15:44.503 [DEBUG] [Thread-197595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:15:44.503 [DEBUG] [Thread-197595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:15:44.521 [INFO] [Thread-197595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:15:44.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:15:44.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:15:45.329 [DEBUG] [Thread-197595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:15:45.329 [DEBUG] [Thread-197595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:15:45.377 [DEBUG] [Thread-197595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:15:45.378 [DEBUG] [Thread-197595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:15:45.387 [DEBUG] [Thread-197595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:15:45.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:15:45.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:15:45.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:15:45.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:15:45.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:15:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:15:45.425 [DEBUG] [Thread-197595] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:15:58.966 [DEBUG] [Thread-197597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:16:14.021 [DEBUG] [Thread-197598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:16:15.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:16:15.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:16:15.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:16:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 15, 46), 0.45967, 96.9234, 0.0, 8.57664, 10.9669, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:16:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:15:46
2026-04-12T23:16:17.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:16:17.244 [DEBUG] [Thread-197599] [transport.py] [_log()] starting thread (client mode): 0xae563bb0
2026-04-12T23:16:17.244 [DEBUG] [Thread-197599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:16:17.264 [DEBUG] [Thread-197599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:16:17.264 [INFO] [Thread-197599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:16:17.266 [DEBUG] [Thread-197599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] client lang: <none>
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] server lang: <none>
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] kex follows: False
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] Compression: none
2026-04-12T23:16:17.267 [DEBUG] [Thread-197599] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:16:17.285 [DEBUG] [Thread-197599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:16:17.286 [DEBUG] [Thread-197599] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:16:17.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:16:17.287 [DEBUG] [Thread-197599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:16:17.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:16:17.289 [DEBUG] [Thread-197599] [transport.py] [_log()] userauth is OK
2026-04-12T23:16:17.289 [DEBUG] [Thread-197599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:16:17.289 [DEBUG] [Thread-197599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:16:17.289 [DEBUG] [Thread-197599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:16:17.289 [DEBUG] [Thread-197599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:16:17.315 [INFO] [Thread-197599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:16:17.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:16:18.109 [DEBUG] [Thread-197599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:16:18.109 [DEBUG] [Thread-197599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:16:18.109 [DEBUG] [Thread-197599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:16:18.151 [DEBUG] [Thread-197599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:16:18.152 [DEBUG] [Thread-197599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:16:18.154 [DEBUG] [Thread-197599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:16:18.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:16:18.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:16:18.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:16:18.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:16:18.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:16:18.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:16:18.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:16:18.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:16:18.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:16:18.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.885867 -999.00  +11.00   4.13     91   +9.70 1 2 1 3 1     0    0 1.72 15.28 .NEs. 4.1 4.1 215.4 5.2 11.8 -22.4 11.7 -21.2 11.4 -19.2 11.7 -21.3
2026-04-12T23:16:18.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:16:18.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:16:18.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.885867
2026-04-12T23:16:18.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:16:18.174 [DEBUG] [Thread-197599] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:16:18.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:16:18.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:16:18.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:16:18.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:16:18.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:15:46', tmtdew=0.45967, humidity=96.9234, cloud=0.0, wind=8.57664, temperature=10.9669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:15:38.909', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:16:18.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:16:18.269 [DEBUG] [Thread-197602] [transport.py] [_log()] starting thread (client mode): 0xae5090f0
2026-04-12T23:16:18.269 [DEBUG] [Thread-197602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:16:18.284 [DEBUG] [Thread-197602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:16:18.285 [INFO] [Thread-197602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:16:18.292 [DEBUG] [Thread-197602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] client lang: <none>
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] server lang: <none>
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] kex follows: False
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] Compression: none
2026-04-12T23:16:18.293 [DEBUG] [Thread-197602] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:16:18.350 [DEBUG] [Thread-197602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:16:18.351 [DEBUG] [Thread-197602] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:16:18.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:16:18.352 [DEBUG] [Thread-197602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:16:18.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:16:18.411 [DEBUG] [Thread-197602] [transport.py] [_log()] userauth is OK
2026-04-12T23:16:18.411 [DEBUG] [Thread-197602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:16:18.411 [DEBUG] [Thread-197602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:16:18.412 [DEBUG] [Thread-197602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:16:18.412 [DEBUG] [Thread-197602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:16:18.431 [INFO] [Thread-197602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:16:18.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:16:18.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:16:19.234 [DEBUG] [Thread-197602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:16:19.235 [DEBUG] [Thread-197602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:16:19.283 [DEBUG] [Thread-197602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:16:19.284 [DEBUG] [Thread-197602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:16:19.295 [DEBUG] [Thread-197602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:16:19.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:16:19.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:16:19.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:16:19.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:16:19.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:16:19.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:16:19.333 [DEBUG] [Thread-197602] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:16:19.678 [DEBUG] [Thread-197604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:16:29.059 [DEBUG] [Thread-197605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:16:42.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:16:42.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:16:44.109 [DEBUG] [Thread-197606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:16:49.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:16:49.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:16:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:16:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 16, 21), 0.274565, 97.9949, 0.0, 6.01776, 10.8337, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:16:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:16:21
2026-04-12T23:16:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:16:51.259 [DEBUG] [Thread-197607] [transport.py] [_log()] starting thread (client mode): 0xa7949bd0
2026-04-12T23:16:51.259 [DEBUG] [Thread-197607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:16:51.278 [DEBUG] [Thread-197607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:16:51.278 [INFO] [Thread-197607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:16:51.281 [DEBUG] [Thread-197607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:16:51.281 [DEBUG] [Thread-197607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:16:51.281 [DEBUG] [Thread-197607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] client lang: <none>
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] server lang: <none>
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] kex follows: False
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:16:51.282 [DEBUG] [Thread-197607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:16:51.283 [DEBUG] [Thread-197607] [transport.py] [_log()] Compression: none
2026-04-12T23:16:51.283 [DEBUG] [Thread-197607] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:16:51.300 [DEBUG] [Thread-197607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:16:51.301 [DEBUG] [Thread-197607] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:16:51.301 [DEBUG] [Thread-197607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:16:51.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:16:51.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:16:51.303 [DEBUG] [Thread-197607] [transport.py] [_log()] userauth is OK
2026-04-12T23:16:51.304 [DEBUG] [Thread-197607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:16:51.304 [DEBUG] [Thread-197607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:16:51.304 [DEBUG] [Thread-197607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:16:51.304 [DEBUG] [Thread-197607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:16:51.329 [INFO] [Thread-197607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:16:51.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:16:52.128 [DEBUG] [Thread-197607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:16:52.128 [DEBUG] [Thread-197607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:16:52.128 [DEBUG] [Thread-197607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:16:52.169 [DEBUG] [Thread-197607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:16:52.169 [DEBUG] [Thread-197607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:16:52.173 [DEBUG] [Thread-197607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:16:52.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:16:52.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:16:52.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:16:52.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:16:52.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:16:52.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:16:52.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:16:52.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:16:52.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:16:52.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.886214 -999.00  +11.00   3.70     91   +9.70 1 2 1 3 1     0    0 1.66 13.38 .NEsw 3.7 3.7 213.4 4.8 11.8 -22.3 11.7 -21.1 11.4 -19.4 11.7 -21.1
2026-04-12T23:16:52.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:16:52.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:16:52.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.886214
2026-04-12T23:16:52.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:16:52.200 [DEBUG] [Thread-197607] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:16:52.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:16:52.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:16:52.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:16:52.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:16:52.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:16:21', tmtdew=0.274565, humidity=97.9949, cloud=0.0, wind=6.01776, temperature=10.8337, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:16:08.890', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:16:52.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:16:52.296 [DEBUG] [Thread-197610] [transport.py] [_log()] starting thread (client mode): 0xae5a5db0
2026-04-12T23:16:52.296 [DEBUG] [Thread-197610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:16:52.310 [DEBUG] [Thread-197610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:16:52.310 [INFO] [Thread-197610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:16:52.318 [DEBUG] [Thread-197610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:16:52.318 [DEBUG] [Thread-197610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:16:52.318 [DEBUG] [Thread-197610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:16:52.318 [DEBUG] [Thread-197610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:52.318 [DEBUG] [Thread-197610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] client lang: <none>
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] server lang: <none>
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] kex follows: False
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] Compression: none
2026-04-12T23:16:52.319 [DEBUG] [Thread-197610] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:16:52.376 [DEBUG] [Thread-197610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:16:52.377 [DEBUG] [Thread-197610] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:16:52.377 [DEBUG] [Thread-197610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:16:52.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:16:52.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:16:52.436 [DEBUG] [Thread-197610] [transport.py] [_log()] userauth is OK
2026-04-12T23:16:52.436 [DEBUG] [Thread-197610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:16:52.436 [DEBUG] [Thread-197610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:16:52.436 [DEBUG] [Thread-197610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:16:52.437 [DEBUG] [Thread-197610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:16:52.457 [INFO] [Thread-197610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:16:52.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:16:52.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:16:53.250 [DEBUG] [Thread-197610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:16:53.250 [DEBUG] [Thread-197610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:16:53.298 [DEBUG] [Thread-197610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:16:53.298 [DEBUG] [Thread-197610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:16:53.307 [DEBUG] [Thread-197610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:16:53.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:16:53.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:16:53.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:16:53.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:16:53.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:16:53.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:16:53.344 [DEBUG] [Thread-197610] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:16:59.147 [DEBUG] [Thread-197612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:14.211 [DEBUG] [Thread-197613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:19.746 [DEBUG] [Thread-197614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:23.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:17:23.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:17:23.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:17:24.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 16, 57), 0.27988, 97.9617, 0.0, 6.10596, 10.9, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:17:24.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:16:57
2026-04-12T23:17:24.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:17:25.105 [DEBUG] [Thread-197615] [transport.py] [_log()] starting thread (client mode): 0xae562710
2026-04-12T23:17:25.106 [DEBUG] [Thread-197615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:17:25.126 [DEBUG] [Thread-197615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:17:25.126 [INFO] [Thread-197615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:17:25.129 [DEBUG] [Thread-197615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:17:25.129 [DEBUG] [Thread-197615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:17:25.129 [DEBUG] [Thread-197615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:17:25.129 [DEBUG] [Thread-197615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:17:25.129 [DEBUG] [Thread-197615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] client lang: <none>
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] server lang: <none>
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] kex follows: False
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] Compression: none
2026-04-12T23:17:25.130 [DEBUG] [Thread-197615] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:17:25.148 [DEBUG] [Thread-197615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:17:25.149 [DEBUG] [Thread-197615] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:17:25.150 [DEBUG] [Thread-197615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:17:25.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:17:25.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:17:25.152 [DEBUG] [Thread-197615] [transport.py] [_log()] userauth is OK
2026-04-12T23:17:25.152 [DEBUG] [Thread-197615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:17:25.152 [DEBUG] [Thread-197615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:17:25.152 [DEBUG] [Thread-197615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:17:25.152 [DEBUG] [Thread-197615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:17:25.177 [INFO] [Thread-197615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:17:25.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:17:25.968 [DEBUG] [Thread-197615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:17:25.969 [DEBUG] [Thread-197615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:17:25.969 [DEBUG] [Thread-197615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:17:26.010 [DEBUG] [Thread-197615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:17:26.011 [DEBUG] [Thread-197615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:17:26.014 [DEBUG] [Thread-197615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:17:26.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:17:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:17:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:17:26.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:17:26.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:17:26.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:17:26.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:17:26.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:17:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:17:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.886561 -999.00  +11.00   3.56     91   +9.70 1 2 1 3 1     0    0 1.66 12.15 .NEsw 3.6 3.6 227.0 5.0 11.8 -22.3 11.7 -21.1 11.4 -19.2 11.7 -21.2
2026-04-12T23:17:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:17:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:17:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.886561
2026-04-12T23:17:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:17:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:17:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:17:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:17:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:17:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:16:57', tmtdew=0.27988, humidity=97.9617, cloud=0.0, wind=6.10596, temperature=10.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:16:38.870', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.7725000000000009, 0.7822499999999994, 2.184, nan, nan, nan, nan, nan, 2.7935, nan, nan, 2.4419999999999984, nan, nan, nan, 2.855999999999999, 0.8215000000000003, 0.3777500000000007, 0.4215, 0.6859999999999999, 0.9850000000000012, 2.211000000000001, 2.2440000000000007, 2.6077499999999993], zp_timestamp='2026-04-12T21:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:17:26.039 [DEBUG] [Thread-197615] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:17:26.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:17:26.133 [DEBUG] [Thread-197618] [transport.py] [_log()] starting thread (client mode): 0xa794a620
2026-04-12T23:17:26.133 [DEBUG] [Thread-197618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:17:26.151 [DEBUG] [Thread-197618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:17:26.151 [INFO] [Thread-197618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:17:26.159 [DEBUG] [Thread-197618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:17:26.159 [DEBUG] [Thread-197618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:17:26.160 [DEBUG] [Thread-197618] [transport.py] [_log()] client lang: <none>
2026-04-12T23:17:26.161 [DEBUG] [Thread-197618] [transport.py] [_log()] server lang: <none>
2026-04-12T23:17:26.161 [DEBUG] [Thread-197618] [transport.py] [_log()] kex follows: False
2026-04-12T23:17:26.161 [DEBUG] [Thread-197618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:17:26.161 [DEBUG] [Thread-197618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:17:26.161 [DEBUG] [Thread-197618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:17:26.161 [DEBUG] [Thread-197618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:17:26.161 [DEBUG] [Thread-197618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:17:26.162 [DEBUG] [Thread-197618] [transport.py] [_log()] Compression: none
2026-04-12T23:17:26.162 [DEBUG] [Thread-197618] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:17:26.218 [DEBUG] [Thread-197618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:17:26.218 [DEBUG] [Thread-197618] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:17:26.219 [DEBUG] [Thread-197618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:17:26.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:17:26.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:17:26.283 [DEBUG] [Thread-197618] [transport.py] [_log()] userauth is OK
2026-04-12T23:17:26.283 [DEBUG] [Thread-197618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:17:26.283 [DEBUG] [Thread-197618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:17:26.283 [DEBUG] [Thread-197618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:17:26.283 [DEBUG] [Thread-197618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:17:26.297 [INFO] [Thread-197618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:17:26.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:17:26.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:17:27.093 [DEBUG] [Thread-197618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:17:27.093 [DEBUG] [Thread-197618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:17:27.142 [DEBUG] [Thread-197618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:17:27.142 [DEBUG] [Thread-197618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:17:27.152 [DEBUG] [Thread-197618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:17:27.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:17:27.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:17: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') -> 00000000
2026-04-12T23:17:27.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:17:27.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:17:27.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:17:27.191 [DEBUG] [Thread-197618] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:17:29.250 [DEBUG] [Thread-197620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:43.203 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:43.204 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:44.311 [DEBUG] [Thread-197621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:57.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:17:57.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:17:57.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:17:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 17, 32), 0.290055, 97.8954, 0.0, 5.91192, 10.8669, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:17:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:17:32
2026-04-12T23:17:58.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:17:58.986 [DEBUG] [Thread-197622] [transport.py] [_log()] starting thread (client mode): 0xae5e43d0
2026-04-12T23:17:58.986 [DEBUG] [Thread-197622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:17:59.007 [DEBUG] [Thread-197622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:17:59.007 [INFO] [Thread-197622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] client lang: <none>
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] server lang: <none>
2026-04-12T23:17:59.010 [DEBUG] [Thread-197622] [transport.py] [_log()] kex follows: False
2026-04-12T23:17:59.011 [DEBUG] [Thread-197622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:17:59.011 [DEBUG] [Thread-197622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:17:59.011 [DEBUG] [Thread-197622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:17:59.011 [DEBUG] [Thread-197622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:17:59.011 [DEBUG] [Thread-197622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:17:59.011 [DEBUG] [Thread-197622] [transport.py] [_log()] Compression: none
2026-04-12T23:17:59.011 [DEBUG] [Thread-197622] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:17:59.028 [DEBUG] [Thread-197622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:17:59.029 [DEBUG] [Thread-197622] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:17:59.029 [DEBUG] [Thread-197622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:17:59.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:17:59.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:17:59.031 [DEBUG] [Thread-197622] [transport.py] [_log()] userauth is OK
2026-04-12T23:17:59.032 [DEBUG] [Thread-197622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:17:59.032 [DEBUG] [Thread-197622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:17:59.032 [DEBUG] [Thread-197622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:17:59.032 [DEBUG] [Thread-197622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:17:59.058 [INFO] [Thread-197622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:17:59.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:17:59.351 [DEBUG] [Thread-197624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:17:59.849 [DEBUG] [Thread-197622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:17:59.849 [DEBUG] [Thread-197622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:17:59.849 [DEBUG] [Thread-197622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:17:59.890 [DEBUG] [Thread-197622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:17:59.890 [DEBUG] [Thread-197622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:17:59.894 [DEBUG] [Thread-197622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:17:59.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:17:59.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:17:59.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:17:59.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:17:59.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:17:59.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:17:59.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:17:59.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:17:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:17:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.886908 -999.00  +11.00   4.51     91   +9.70 1 2 1 3 1     0    0 1.61 10.87 .NEsw 4.5 4.5 205.6 5.3 11.8 -22.1 11.7 -21.3 11.4 -19.3 11.7 -21.3
2026-04-12T23:17:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:17:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:17:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.886908
2026-04-12T23:17:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:17:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:17:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:17:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:17:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:17:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:17:32', tmtdew=0.290055, humidity=97.8954, cloud=0.0, wind=5.91192, temperature=10.8669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:17:08.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.965, 0.49874999999999936, 2.5969999999999995, nan, nan, nan, nan, nan, 2.4675000000000002, nan, nan, 2.8519999999999985, nan, nan, nan, 3.0759999999999996, 1.3695000000000004, 0.51675, 0.5674999999999999, 0.6210000000000004, 0.6730000000000009, 2.4430000000000014, 2.2520000000000007, 1.4967499999999996], zp_timestamp='2026-04-12T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:17:59.923 [DEBUG] [Thread-197622] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:18:00.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:18:00.019 [DEBUG] [Thread-197626] [transport.py] [_log()] starting thread (client mode): 0xae50b940
2026-04-12T23:18:00.020 [DEBUG] [Thread-197626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:18:00.035 [DEBUG] [Thread-197626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:18:00.035 [INFO] [Thread-197626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:18:00.042 [DEBUG] [Thread-197626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:18:00.042 [DEBUG] [Thread-197626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:18:00.042 [DEBUG] [Thread-197626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:18:00.042 [DEBUG] [Thread-197626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] client lang: <none>
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] server lang: <none>
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] kex follows: False
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] Compression: none
2026-04-12T23:18:00.043 [DEBUG] [Thread-197626] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:18:00.102 [DEBUG] [Thread-197626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:18:00.102 [DEBUG] [Thread-197626] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:18:00.103 [DEBUG] [Thread-197626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:18:00.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:18:00.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:18:00.158 [DEBUG] [Thread-197626] [transport.py] [_log()] userauth is OK
2026-04-12T23:18:00.159 [DEBUG] [Thread-197626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:18:00.159 [DEBUG] [Thread-197626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:18:00.159 [DEBUG] [Thread-197626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:18:00.159 [DEBUG] [Thread-197626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:18:00.184 [INFO] [Thread-197626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:18:00.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:18:00.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:18:01.068 [DEBUG] [Thread-197626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:18:01.068 [DEBUG] [Thread-197626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:18:01.115 [DEBUG] [Thread-197626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:18:01.116 [DEBUG] [Thread-197626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:18:01.124 [DEBUG] [Thread-197626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:18:01.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:18:01.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:18:01.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:18:01.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:18:01.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:18:01.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:18:01.157 [DEBUG] [Thread-197626] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:18:14.385 [DEBUG] [Thread-197628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:18:19.814 [DEBUG] [Thread-197629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:18:29.446 [DEBUG] [Thread-197630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:18:31.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:18:31.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:18:31.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
2026-04-12T23:18:32.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 18, 8), 0.292675, 97.8788, 0.0, 5.52384, 10.8834, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:18:32.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:18:08
2026-04-12T23:18:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:18:32.982 [DEBUG] [Thread-197631] [transport.py] [_log()] starting thread (client mode): 0xa795be50
2026-04-12T23:18:32.982 [DEBUG] [Thread-197631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:18:33.002 [DEBUG] [Thread-197631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:18:33.003 [INFO] [Thread-197631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] client lang: <none>
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] server lang: <none>
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] kex follows: False
2026-04-12T23:18:33.006 [DEBUG] [Thread-197631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:18:33.007 [DEBUG] [Thread-197631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:18:33.007 [DEBUG] [Thread-197631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:18:33.007 [DEBUG] [Thread-197631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:18:33.007 [DEBUG] [Thread-197631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:18:33.007 [DEBUG] [Thread-197631] [transport.py] [_log()] Compression: none
2026-04-12T23:18:33.007 [DEBUG] [Thread-197631] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:18:33.026 [DEBUG] [Thread-197631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:18:33.026 [DEBUG] [Thread-197631] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:18:33.028 [DEBUG] [Thread-197631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:18:33.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:18:33.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:18:33.030 [DEBUG] [Thread-197631] [transport.py] [_log()] userauth is OK
2026-04-12T23:18:33.030 [DEBUG] [Thread-197631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:18:33.030 [DEBUG] [Thread-197631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:18:33.030 [DEBUG] [Thread-197631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:18:33.030 [DEBUG] [Thread-197631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:18:33.056 [INFO] [Thread-197631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:18:33.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:18:33.828 [DEBUG] [Thread-197631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:18:33.828 [DEBUG] [Thread-197631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:18:33.829 [DEBUG] [Thread-197631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:18:33.870 [DEBUG] [Thread-197631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:18:33.870 [DEBUG] [Thread-197631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:18:33.873 [DEBUG] [Thread-197631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:18:33.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:18:33.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:18:33.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:18:33.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:18:33.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:18:33.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:18:33.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:18:33.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:18:33.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:18:33.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.887603 -999.00  +11.00   4.80     91   +9.70 1 2 1 3 1     0    0 1.52 7.75 .NEsw 4.8 4.8 195.4 5.7 11.8 -22.4 11.7 -21.2 11.4 -19.1 11.7 -21.2
2026-04-12T23:18:33.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:18:33.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:18:33.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.887603
2026-04-12T23:18:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:18:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:18:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:18:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:18:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:18:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:18:08', tmtdew=0.292675, humidity=97.8788, cloud=0.0, wind=5.52384, temperature=10.8834, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:18:08.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.965, 0.49874999999999936, 2.5969999999999995, nan, nan, nan, nan, nan, 2.4675000000000002, nan, nan, 2.8519999999999985, nan, nan, nan, 3.0759999999999996, 1.3695000000000004, 0.51675, 0.5674999999999999, 0.6210000000000004, 0.6730000000000009, 2.4430000000000014, 2.2520000000000007, 1.4967499999999996], zp_timestamp='2026-04-12T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:18:33.901 [DEBUG] [Thread-197631] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:18:33.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:18:33.998 [DEBUG] [Thread-197634] [transport.py] [_log()] starting thread (client mode): 0xa7948c10
2026-04-12T23:18:33.998 [DEBUG] [Thread-197634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:18:34.013 [DEBUG] [Thread-197634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:18:34.014 [INFO] [Thread-197634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:18:34.021 [DEBUG] [Thread-197634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:18:34.022 [DEBUG] [Thread-197634] [transport.py] [_log()] client lang: <none>
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] server lang: <none>
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] kex follows: False
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] Compression: none
2026-04-12T23:18:34.023 [DEBUG] [Thread-197634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:18:34.079 [DEBUG] [Thread-197634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:18:34.079 [DEBUG] [Thread-197634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:18:34.080 [DEBUG] [Thread-197634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:18:34.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:18:34.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:18:34.139 [DEBUG] [Thread-197634] [transport.py] [_log()] userauth is OK
2026-04-12T23:18:34.139 [DEBUG] [Thread-197634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:18:34.139 [DEBUG] [Thread-197634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:18:34.139 [DEBUG] [Thread-197634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:18:34.139 [DEBUG] [Thread-197634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:18:34.158 [INFO] [Thread-197634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:18:34.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:18:34.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:18:34.940 [DEBUG] [Thread-197634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:18:34.940 [DEBUG] [Thread-197634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:18:34.987 [DEBUG] [Thread-197634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:18:34.988 [DEBUG] [Thread-197634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:18:34.997 [DEBUG] [Thread-197634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:18:35.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:18:35.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:18: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
2026-04-12T23:18:35.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:18:35.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:18:35.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:18:35.031 [DEBUG] [Thread-197634] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:18:43.409 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:18:43.411 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:18:44.481 [DEBUG] [Thread-197636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:18:59.540 [DEBUG] [Thread-197637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:19:05.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:19:05.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:19:05.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:19:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 18, 43), 0.48011, 96.7907, 0.0, 8.32968, 10.9337, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:19:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:18:43
2026-04-12T23:19:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:19:06.852 [DEBUG] [Thread-197638] [transport.py] [_log()] starting thread (client mode): 0xae535390
2026-04-12T23:19:06.852 [DEBUG] [Thread-197638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:19:06.875 [DEBUG] [Thread-197638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:19:06.875 [INFO] [Thread-197638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] client lang: <none>
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] server lang: <none>
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] kex follows: False
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] Compression: none
2026-04-12T23:19:06.876 [DEBUG] [Thread-197638] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:19:06.885 [DEBUG] [Thread-197638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:19:06.885 [DEBUG] [Thread-197638] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:19:06.886 [DEBUG] [Thread-197638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:19:06.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:19:06.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:19:06.886 [DEBUG] [Thread-197638] [transport.py] [_log()] userauth is OK
2026-04-12T23:19:06.887 [DEBUG] [Thread-197638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:19:06.887 [DEBUG] [Thread-197638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:19:06.887 [DEBUG] [Thread-197638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:19:06.887 [DEBUG] [Thread-197638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:19:06.903 [INFO] [Thread-197638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:19:06.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:19:07.708 [DEBUG] [Thread-197638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:19:07.708 [DEBUG] [Thread-197638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:19:07.709 [DEBUG] [Thread-197638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:19:07.749 [DEBUG] [Thread-197638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:19:07.749 [DEBUG] [Thread-197638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:19:07.751 [DEBUG] [Thread-197638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:19:07.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:19:07.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:19:07.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:19:07.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:19:07.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:19:07.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:19:07.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:19:07.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:19:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:19:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.887950 -999.00  +11.00   4.63     91   +9.70 1 2 1 3 1     0    0 1.49 6.45 .NESw 4.6 4.6 205.2 5.9 11.8 -22.5 11.7 -21.2 11.4 -19.3 11.7 -21.3
2026-04-12T23:19:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:19:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:19:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.887950
2026-04-12T23:19:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:19:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:19:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:19:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:19:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:19:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:18:43', tmtdew=0.48011, humidity=96.7907, cloud=0.0, wind=8.32968, temperature=10.9337, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:18:38.880', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.965, 0.49874999999999936, 2.5969999999999995, nan, nan, nan, nan, nan, 2.4675000000000002, nan, nan, 2.8519999999999985, nan, nan, nan, 3.0759999999999996, 1.3695000000000004, 0.51675, 0.5674999999999999, 0.6210000000000004, 0.6730000000000009, 2.4430000000000014, 2.2520000000000007, 1.4967499999999996], zp_timestamp='2026-04-12T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:19:07.769 [DEBUG] [Thread-197638] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:19:07.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:19:07.858 [DEBUG] [Thread-197641] [transport.py] [_log()] starting thread (client mode): 0xb0f42e60
2026-04-12T23:19:07.858 [DEBUG] [Thread-197641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:19:07.872 [DEBUG] [Thread-197641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:19:07.872 [INFO] [Thread-197641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:07.880 [DEBUG] [Thread-197641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] client lang: <none>
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] server lang: <none>
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] kex follows: False
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] Compression: none
2026-04-12T23:19:07.881 [DEBUG] [Thread-197641] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:19:07.936 [DEBUG] [Thread-197641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:19:07.936 [DEBUG] [Thread-197641] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:19:07.937 [DEBUG] [Thread-197641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:19:07.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:19:07.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:19:07.992 [DEBUG] [Thread-197641] [transport.py] [_log()] userauth is OK
2026-04-12T23:19:07.993 [DEBUG] [Thread-197641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:19:07.993 [DEBUG] [Thread-197641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:19:07.993 [DEBUG] [Thread-197641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:19:07.993 [DEBUG] [Thread-197641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:19:08.011 [INFO] [Thread-197641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:19:08.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:19:08.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:19:08.836 [DEBUG] [Thread-197641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:19:08.836 [DEBUG] [Thread-197641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:19:08.884 [DEBUG] [Thread-197641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:19:08.884 [DEBUG] [Thread-197641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:19:08.894 [DEBUG] [Thread-197641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:19:08.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:19:08.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23: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
2026-04-12T23:19:08.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:19:08.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:19:08.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:19:08.931 [DEBUG] [Thread-197641] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:19:14.577 [DEBUG] [Thread-197643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:19:19.884 [DEBUG] [Thread-197644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:19:29.635 [DEBUG] [Thread-197645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:19:38.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:19:38.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:19:38.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:19:40.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 19, 19), 0.29525, 97.8622, 0.0, 8.31168, 10.8834, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:19:40.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:19:19
2026-04-12T23:19:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:19:40.778 [DEBUG] [Thread-197646] [transport.py] [_log()] starting thread (client mode): 0xae5b18a0
2026-04-12T23:19:40.778 [DEBUG] [Thread-197646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:19:40.798 [DEBUG] [Thread-197646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:19:40.798 [INFO] [Thread-197646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:19:40.801 [DEBUG] [Thread-197646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:19:40.801 [DEBUG] [Thread-197646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:19:40.801 [DEBUG] [Thread-197646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:19:40.801 [DEBUG] [Thread-197646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:40.801 [DEBUG] [Thread-197646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] client lang: <none>
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] server lang: <none>
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] kex follows: False
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:19:40.802 [DEBUG] [Thread-197646] [transport.py] [_log()] Compression: none
2026-04-12T23:19:40.803 [DEBUG] [Thread-197646] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:19:40.819 [DEBUG] [Thread-197646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:19:40.820 [DEBUG] [Thread-197646] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:19:40.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:19:40.821 [DEBUG] [Thread-197646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:19:40.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:19:40.823 [DEBUG] [Thread-197646] [transport.py] [_log()] userauth is OK
2026-04-12T23:19:40.823 [DEBUG] [Thread-197646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:19:40.823 [DEBUG] [Thread-197646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:19:40.824 [DEBUG] [Thread-197646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:19:40.824 [DEBUG] [Thread-197646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:19:40.847 [INFO] [Thread-197646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:19:40.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:19:41.625 [DEBUG] [Thread-197646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:19:41.625 [DEBUG] [Thread-197646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:19:41.625 [DEBUG] [Thread-197646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:19:41.666 [DEBUG] [Thread-197646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:19:41.666 [DEBUG] [Thread-197646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:19:41.669 [DEBUG] [Thread-197646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:19:41.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:19:41.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:19:41.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:19:41.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:19:41.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:19:41.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:19:41.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:19:41.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:19:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:19:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.888297 -999.00  +11.00   5.12     91   +9.70 1 2 1 3 1     0    0 1.45 4.63 .NESw 5.1 5.1 200.4 6.0 11.8 -22.4 11.7 -21.6 11.4 -19.3 11.7 -21.3
2026-04-12T23:19:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:19:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:19:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.888297
2026-04-12T23:19:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:19:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:19:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:19:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:19:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:19:41.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:19:19', tmtdew=0.29525, humidity=97.8622, cloud=0.0, wind=8.31168, temperature=10.8834, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:19:08.861', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.965, 0.49874999999999936, 2.5969999999999995, nan, nan, nan, nan, nan, 2.4675000000000002, nan, nan, 2.8519999999999985, nan, nan, nan, 3.0759999999999996, 1.3695000000000004, 0.51675, 0.5674999999999999, 0.6210000000000004, 0.6730000000000009, 2.4430000000000014, 2.2520000000000007, 1.4967499999999996], zp_timestamp='2026-04-12T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:19:41.698 [DEBUG] [Thread-197646] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:19:41.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:19:41.791 [DEBUG] [Thread-197649] [transport.py] [_log()] starting thread (client mode): 0xb0f8c490
2026-04-12T23:19:41.791 [DEBUG] [Thread-197649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:19:41.806 [DEBUG] [Thread-197649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:19:41.806 [INFO] [Thread-197649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:19:41.813 [DEBUG] [Thread-197649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] client lang: <none>
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] server lang: <none>
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] kex follows: False
2026-04-12T23:19:41.814 [DEBUG] [Thread-197649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:19:41.815 [DEBUG] [Thread-197649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:19:41.815 [DEBUG] [Thread-197649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:19:41.815 [DEBUG] [Thread-197649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:19:41.815 [DEBUG] [Thread-197649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:19:41.815 [DEBUG] [Thread-197649] [transport.py] [_log()] Compression: none
2026-04-12T23:19:41.815 [DEBUG] [Thread-197649] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:19:41.873 [DEBUG] [Thread-197649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:19:41.874 [DEBUG] [Thread-197649] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:19:41.874 [DEBUG] [Thread-197649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:19:41.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:19:41.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:19:41.929 [DEBUG] [Thread-197649] [transport.py] [_log()] userauth is OK
2026-04-12T23:19:41.929 [DEBUG] [Thread-197649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:19:41.930 [DEBUG] [Thread-197649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:19:41.930 [DEBUG] [Thread-197649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:19:41.930 [DEBUG] [Thread-197649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:19:41.948 [INFO] [Thread-197649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:19:41.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:19:41.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:19:42.748 [DEBUG] [Thread-197649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:19:42.749 [DEBUG] [Thread-197649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:19:42.797 [DEBUG] [Thread-197649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:19:42.797 [DEBUG] [Thread-197649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:19:42.807 [DEBUG] [Thread-197649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:19:42.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:19:42.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:19:42.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:19:42.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:19:42.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:19:42.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:19:42.844 [DEBUG] [Thread-197649] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:19:43.616 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:19:43.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:19:44.668 [DEBUG] [Thread-197651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:19:59.715 [DEBUG] [Thread-197652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:20:12.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:20:12.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:20:12.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:20:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 19, 54), 0.50603, 96.6249, 0.0, 9.42336, 11.0, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:20:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:19:54
2026-04-12T23:20:14.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:20:14.666 [DEBUG] [Thread-197653] [transport.py] [_log()] starting thread (client mode): 0xae50b670
2026-04-12T23:20:14.666 [DEBUG] [Thread-197653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:20:14.687 [DEBUG] [Thread-197653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:20:14.687 [INFO] [Thread-197653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:20:14.690 [DEBUG] [Thread-197653] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:20:14.690 [DEBUG] [Thread-197653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] client lang: <none>
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] server lang: <none>
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] kex follows: False
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:20:14.691 [DEBUG] [Thread-197653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:20:14.692 [DEBUG] [Thread-197653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:20:14.692 [DEBUG] [Thread-197653] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:20:14.692 [DEBUG] [Thread-197653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:20:14.692 [DEBUG] [Thread-197653] [transport.py] [_log()] Compression: none
2026-04-12T23:20:14.692 [DEBUG] [Thread-197653] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:20:14.710 [DEBUG] [Thread-197653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:20:14.711 [DEBUG] [Thread-197653] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:20:14.712 [DEBUG] [Thread-197653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:20:14.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:20:14.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:20:14.715 [DEBUG] [Thread-197653] [transport.py] [_log()] userauth is OK
2026-04-12T23:20:14.716 [DEBUG] [Thread-197653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:20:14.716 [DEBUG] [Thread-197653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:20:14.716 [DEBUG] [Thread-197653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:20:14.716 [DEBUG] [Thread-197653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:20:14.735 [INFO] [Thread-197653] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:20:14.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:20:14.755 [DEBUG] [Thread-197655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:20:15.913 [DEBUG] [Thread-197653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:20:15.914 [DEBUG] [Thread-197653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:20:15.914 [DEBUG] [Thread-197653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:20:15.955 [DEBUG] [Thread-197653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:20:15.955 [DEBUG] [Thread-197653] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:20:15.958 [DEBUG] [Thread-197653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:20:15.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:20:15.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:20:15.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:20:15.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:20:15.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:20:15.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:20:15.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:20:15.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:20:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:20:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.888644 -999.00  +11.00   3.23     91   +9.70 1 2 1 3 1     0    0 1.46 3.92 .NE.. 3.2 3.2 205.4 5.3 11.8 -22.3 11.7 -21.3 11.4 -19.2 11.7 -21.2
2026-04-12T23:20:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:20:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:20:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.888644
2026-04-12T23:20:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:20:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:20:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:20:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:20:15.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:20:15.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:19:54', tmtdew=0.50603, humidity=96.6249, cloud=0.0, wind=9.42336, temperature=11.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:19:38.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.965, 0.49874999999999936, 2.5969999999999995, nan, nan, nan, nan, nan, 2.4675000000000002, nan, nan, 2.8519999999999985, nan, nan, nan, 3.0759999999999996, 1.3695000000000004, 0.51675, 0.5674999999999999, 0.6210000000000004, 0.6730000000000009, 2.4430000000000014, 2.2520000000000007, 1.4967499999999996], zp_timestamp='2026-04-12T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:20:15.988 [DEBUG] [Thread-197653] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:20:16.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:20:16.082 [DEBUG] [Thread-197657] [transport.py] [_log()] starting thread (client mode): 0xae5363e0
2026-04-12T23:20:16.083 [DEBUG] [Thread-197657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:20:16.102 [DEBUG] [Thread-197657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:20:16.102 [INFO] [Thread-197657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:20:16.110 [DEBUG] [Thread-197657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:20:16.110 [DEBUG] [Thread-197657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:20:16.110 [DEBUG] [Thread-197657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] client lang: <none>
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] server lang: <none>
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] kex follows: False
2026-04-12T23:20:16.111 [DEBUG] [Thread-197657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:20:16.112 [DEBUG] [Thread-197657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:20:16.112 [DEBUG] [Thread-197657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:20:16.112 [DEBUG] [Thread-197657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:20:16.112 [DEBUG] [Thread-197657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:20:16.112 [DEBUG] [Thread-197657] [transport.py] [_log()] Compression: none
2026-04-12T23:20:16.112 [DEBUG] [Thread-197657] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:20:16.172 [DEBUG] [Thread-197657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:20:16.172 [DEBUG] [Thread-197657] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:20:16.173 [DEBUG] [Thread-197657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:20:16.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:20:16.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:20:16.230 [DEBUG] [Thread-197657] [transport.py] [_log()] userauth is OK
2026-04-12T23:20:16.230 [DEBUG] [Thread-197657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:20:16.231 [DEBUG] [Thread-197657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:20:16.231 [DEBUG] [Thread-197657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:20:16.231 [DEBUG] [Thread-197657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:20:16.249 [INFO] [Thread-197657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:20:16.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:20:16.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:20:17.070 [DEBUG] [Thread-197657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:20:17.070 [DEBUG] [Thread-197657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:20:17.117 [DEBUG] [Thread-197657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:20:17.118 [DEBUG] [Thread-197657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:20:17.127 [DEBUG] [Thread-197657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:20:17.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:20:17.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:20:17.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:20:17.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:20:17.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:20:17.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:20:17.164 [DEBUG] [Thread-197657] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:20:19.943 [DEBUG] [Thread-197659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:20:29.793 [DEBUG] [Thread-197660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:20:43.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:20:43.825 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:20:44.844 [DEBUG] [Thread-197661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:20:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:20:47.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:20:47.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:20:48.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 20, 30), 0.25296, 97.8124, 0.0, 6.37056, 10.8834, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:20:48.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:20:30
2026-04-12T23:20:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:20:48.980 [DEBUG] [Thread-197662] [transport.py] [_log()] starting thread (client mode): 0xa79b43d0
2026-04-12T23:20:48.980 [DEBUG] [Thread-197662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:20:49.000 [DEBUG] [Thread-197662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:20:49.000 [INFO] [Thread-197662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:20:49.003 [DEBUG] [Thread-197662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:20:49.003 [DEBUG] [Thread-197662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] client lang: <none>
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] server lang: <none>
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] kex follows: False
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] Compression: none
2026-04-12T23:20:49.004 [DEBUG] [Thread-197662] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:20:49.021 [DEBUG] [Thread-197662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:20:49.022 [DEBUG] [Thread-197662] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:20:49.022 [DEBUG] [Thread-197662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:20:49.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:20:49.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:20:49.024 [DEBUG] [Thread-197662] [transport.py] [_log()] userauth is OK
2026-04-12T23:20:49.024 [DEBUG] [Thread-197662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:20:49.025 [DEBUG] [Thread-197662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:20:49.025 [DEBUG] [Thread-197662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:20:49.025 [DEBUG] [Thread-197662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:20:49.048 [INFO] [Thread-197662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:20:49.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:20:49.841 [DEBUG] [Thread-197662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:20:49.841 [DEBUG] [Thread-197662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:20:49.841 [DEBUG] [Thread-197662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:20:49.882 [DEBUG] [Thread-197662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:20:49.882 [DEBUG] [Thread-197662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:20:49.885 [DEBUG] [Thread-197662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:20:49.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:20:49.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:20:49.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:20:49.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:20:49.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:20:49.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:20:49.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:20:49.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:20:49.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:20:49.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.888991 -999.00  +11.00   4.37     91   +9.70 1 2 1 3 1     0    0 1.40 3.41 .NE.. 4.4 4.4 202.8 5.8 11.8 -22.3 11.7 -21.2 11.3 -19.3 11.7 -21.3
2026-04-12T23:20:49.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:20:49.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:20:49.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.888991
2026-04-12T23:20:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:20:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:20:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:20:49.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:20:49.910 [DEBUG] [Thread-197662] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:20:49.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:20:49.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:20:30', tmtdew=0.25296, humidity=97.8124, cloud=0.0, wind=6.37056, temperature=10.8834, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:20:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:20:49.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:20:50.005 [DEBUG] [Thread-197665] [transport.py] [_log()] starting thread (client mode): 0xae5b2110
2026-04-12T23:20:50.005 [DEBUG] [Thread-197665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:20:50.020 [DEBUG] [Thread-197665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:20:50.020 [INFO] [Thread-197665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:20:50.027 [DEBUG] [Thread-197665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] client lang: <none>
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] server lang: <none>
2026-04-12T23:20:50.028 [DEBUG] [Thread-197665] [transport.py] [_log()] kex follows: False
2026-04-12T23:20:50.029 [DEBUG] [Thread-197665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:20:50.029 [DEBUG] [Thread-197665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:20:50.029 [DEBUG] [Thread-197665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:20:50.029 [DEBUG] [Thread-197665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:20:50.029 [DEBUG] [Thread-197665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:20:50.029 [DEBUG] [Thread-197665] [transport.py] [_log()] Compression: none
2026-04-12T23:20:50.029 [DEBUG] [Thread-197665] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:20:50.088 [DEBUG] [Thread-197665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:20:50.088 [DEBUG] [Thread-197665] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:20:50.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:20:50.089 [DEBUG] [Thread-197665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:20:50.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:20:50.147 [DEBUG] [Thread-197665] [transport.py] [_log()] userauth is OK
2026-04-12T23:20:50.147 [DEBUG] [Thread-197665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:20:50.147 [DEBUG] [Thread-197665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:20:50.147 [DEBUG] [Thread-197665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:20:50.147 [DEBUG] [Thread-197665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:20:50.170 [INFO] [Thread-197665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:20:50.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:20:50.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:20:50.987 [DEBUG] [Thread-197665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:20:50.987 [DEBUG] [Thread-197665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:20:51.035 [DEBUG] [Thread-197665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:20:51.035 [DEBUG] [Thread-197665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:20:51.046 [DEBUG] [Thread-197665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:20:51.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:20:51.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:20:51.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
2026-04-12T23:20:51.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:20:51.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:20:51.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:20:51.087 [DEBUG] [Thread-197665] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:20:59.881 [DEBUG] [Thread-197667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:21:14.937 [DEBUG] [Thread-197668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:21:20.005 [DEBUG] [Thread-197669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:21:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:21:21.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:21:21.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:21:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 21, 5), 0.25044, 97.829, 0.0, 6.49404, 10.9, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:21:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:21:05
2026-04-12T23:21:22.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:21:22.955 [DEBUG] [Thread-197670] [transport.py] [_log()] starting thread (client mode): 0xb0f42ef0
2026-04-12T23:21:22.955 [DEBUG] [Thread-197670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:21:22.974 [DEBUG] [Thread-197670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:21:22.975 [INFO] [Thread-197670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] client lang: <none>
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] server lang: <none>
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] kex follows: False
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] Compression: none
2026-04-12T23:21:22.978 [DEBUG] [Thread-197670] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:21:22.996 [DEBUG] [Thread-197670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:21:22.996 [DEBUG] [Thread-197670] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:21:22.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:21:22.998 [DEBUG] [Thread-197670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:21:22.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:21:23.000 [DEBUG] [Thread-197670] [transport.py] [_log()] userauth is OK
2026-04-12T23:21:23.000 [DEBUG] [Thread-197670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:21:23.000 [DEBUG] [Thread-197670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:21:23.000 [DEBUG] [Thread-197670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:21:23.000 [DEBUG] [Thread-197670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:21:23.017 [INFO] [Thread-197670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:21:23.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:21:23.659 [DEBUG] [Thread-197670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:21:23.660 [DEBUG] [Thread-197670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:21:23.660 [DEBUG] [Thread-197670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:21:23.700 [DEBUG] [Thread-197670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:21:23.700 [DEBUG] [Thread-197670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:21:23.704 [DEBUG] [Thread-197670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:21:23.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:21:23.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:21:23.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:21:23.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:21:23.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:21:23.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:21:23.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:21:23.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:21:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:21:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.889339 -999.00  +11.00   5.59     92   +9.70 1 2 1 3 1     0    0 1.38 2.95 .NE.. 5.6 5.6 198.6 6.0 11.8 -22.4 11.6 -21.3 11.3 -19.3 11.6 -21.4
2026-04-12T23:21:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:21:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:21:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.889339
2026-04-12T23:21:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:21:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:21:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:21:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:21:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:21:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:21:05', tmtdew=0.25044, humidity=97.829, cloud=0.0, wind=6.49404, temperature=10.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:20:38.890', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:21:23.730 [DEBUG] [Thread-197670] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:21:23.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:21:23.824 [DEBUG] [Thread-197673] [transport.py] [_log()] starting thread (client mode): 0xb0f6eaa0
2026-04-12T23:21:23.824 [DEBUG] [Thread-197673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:21:23.838 [DEBUG] [Thread-197673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:21:23.838 [INFO] [Thread-197673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] client lang: <none>
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] server lang: <none>
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] kex follows: False
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:21:23.847 [DEBUG] [Thread-197673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:21:23.848 [DEBUG] [Thread-197673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:21:23.848 [DEBUG] [Thread-197673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:21:23.848 [DEBUG] [Thread-197673] [transport.py] [_log()] Compression: none
2026-04-12T23:21:23.848 [DEBUG] [Thread-197673] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:21:23.904 [DEBUG] [Thread-197673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:21:23.904 [DEBUG] [Thread-197673] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:21:23.905 [DEBUG] [Thread-197673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:21:23.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:21:23.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:21:23.965 [DEBUG] [Thread-197673] [transport.py] [_log()] userauth is OK
2026-04-12T23:21:23.965 [DEBUG] [Thread-197673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:21:23.966 [DEBUG] [Thread-197673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:21:23.966 [DEBUG] [Thread-197673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:21:23.966 [DEBUG] [Thread-197673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:21:23.984 [INFO] [Thread-197673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:21:23.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:21:23.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:21:24.811 [DEBUG] [Thread-197673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:21:24.811 [DEBUG] [Thread-197673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:21:24.859 [DEBUG] [Thread-197673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:21:24.860 [DEBUG] [Thread-197673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:21:24.869 [DEBUG] [Thread-197673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:21:24.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:21:24.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:21:24.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:21:24.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:21:24.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:21:24.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:21:24.909 [DEBUG] [Thread-197673] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:21:29.972 [DEBUG] [Thread-197675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:21:44.031 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:21:44.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:21:45.027 [DEBUG] [Thread-197676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:21:54.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:21:54.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:21:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:21:56.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 21, 40), 0.51129, 96.5917, 0.0, 9.24696, 11.0332, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:21:56.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:21:40
2026-04-12T23:21:56.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:21:56.743 [DEBUG] [Thread-197677] [transport.py] [_log()] starting thread (client mode): 0xb0f8c5e0
2026-04-12T23:21:56.744 [DEBUG] [Thread-197677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:21:56.764 [DEBUG] [Thread-197677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:21:56.764 [INFO] [Thread-197677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:21:56.767 [DEBUG] [Thread-197677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:21:56.767 [DEBUG] [Thread-197677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:21:56.767 [DEBUG] [Thread-197677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:21:56.767 [DEBUG] [Thread-197677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] client lang: <none>
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] server lang: <none>
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] kex follows: False
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] Compression: none
2026-04-12T23:21:56.768 [DEBUG] [Thread-197677] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:21:56.787 [DEBUG] [Thread-197677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:21:56.787 [DEBUG] [Thread-197677] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:21:56.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:21:56.788 [DEBUG] [Thread-197677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:21:56.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:21:56.790 [DEBUG] [Thread-197677] [transport.py] [_log()] userauth is OK
2026-04-12T23:21:56.791 [DEBUG] [Thread-197677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:21:56.791 [DEBUG] [Thread-197677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:21:56.791 [DEBUG] [Thread-197677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:21:56.791 [DEBUG] [Thread-197677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:21:56.815 [INFO] [Thread-197677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:21:56.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:21:57.415 [DEBUG] [Thread-197677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:21:57.415 [DEBUG] [Thread-197677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:21:57.416 [DEBUG] [Thread-197677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:21:57.456 [DEBUG] [Thread-197677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:21:57.456 [DEBUG] [Thread-197677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:21:57.459 [DEBUG] [Thread-197677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:21:57.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:21:57.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:21:57.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:21:57.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:21:57.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:21:57.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:21:57.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:21:57.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:21:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:21:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.890033 -999.00  +11.10   5.14     92   +9.90 1 2 1 3 1     0    0 1.35 1.76 .NEs. 5.1 5.1 213.8 5.7 11.8 -22.3 11.7 -21.3 11.4 -19.3 11.7 -21.4
2026-04-12T23:21:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:21:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:21:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.890033
2026-04-12T23:21:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:21:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:21:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:21:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:21:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:21:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:21:40', tmtdew=0.51129, humidity=96.5917, cloud=0.0, wind=9.24696, temperature=11.0332, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:21:38.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:21:57.487 [DEBUG] [Thread-197677] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:21:57.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:21:57.580 [DEBUG] [Thread-197680] [transport.py] [_log()] starting thread (client mode): 0xb0f8f970
2026-04-12T23:21:57.580 [DEBUG] [Thread-197680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:21:57.595 [DEBUG] [Thread-197680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:21:57.595 [INFO] [Thread-197680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:21:57.603 [DEBUG] [Thread-197680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] client lang: <none>
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] server lang: <none>
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] kex follows: False
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] Compression: none
2026-04-12T23:21:57.604 [DEBUG] [Thread-197680] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:21:57.661 [DEBUG] [Thread-197680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:21:57.662 [DEBUG] [Thread-197680] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:21:57.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:21:57.663 [DEBUG] [Thread-197680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:21:57.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:21:57.720 [DEBUG] [Thread-197680] [transport.py] [_log()] userauth is OK
2026-04-12T23:21:57.720 [DEBUG] [Thread-197680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:21:57.720 [DEBUG] [Thread-197680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:21:57.720 [DEBUG] [Thread-197680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:21:57.720 [DEBUG] [Thread-197680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:21:57.743 [INFO] [Thread-197680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:21:57.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:21:57.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:21:58.617 [DEBUG] [Thread-197680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:21:58.618 [DEBUG] [Thread-197680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:21:58.667 [DEBUG] [Thread-197680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:21:58.667 [DEBUG] [Thread-197680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:21:58.676 [DEBUG] [Thread-197680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:21:58.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:21: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')
2026-04-12T23:21:58.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:21:58.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:21:58.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:21:58.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:21:58.710 [DEBUG] [Thread-197680] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:22:00.064 [DEBUG] [Thread-197682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:22:15.119 [DEBUG] [Thread-197683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:22:20.066 [DEBUG] [Thread-197684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:22:28.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:22:28.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:22:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:22:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 22, 16), 0.308165, 97.7793, 0.0, 6.31764, 10.9, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:22:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:22:16
2026-04-12T23:22:30.159 [DEBUG] [Thread-197685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:22:30.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:22:30.606 [DEBUG] [Thread-197686] [transport.py] [_log()] starting thread (client mode): 0xae535d20
2026-04-12T23:22:30.606 [DEBUG] [Thread-197686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:22:30.626 [DEBUG] [Thread-197686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:22:30.626 [INFO] [Thread-197686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:22:30.629 [DEBUG] [Thread-197686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] client lang: <none>
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] server lang: <none>
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] kex follows: False
2026-04-12T23:22:30.630 [DEBUG] [Thread-197686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:22:30.631 [DEBUG] [Thread-197686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:22:30.631 [DEBUG] [Thread-197686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:22:30.631 [DEBUG] [Thread-197686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:22:30.631 [DEBUG] [Thread-197686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:22:30.631 [DEBUG] [Thread-197686] [transport.py] [_log()] Compression: none
2026-04-12T23:22:30.631 [DEBUG] [Thread-197686] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:22:30.650 [DEBUG] [Thread-197686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:22:30.651 [DEBUG] [Thread-197686] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:22:30.651 [DEBUG] [Thread-197686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:22:30.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:22:30.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:22:30.653 [DEBUG] [Thread-197686] [transport.py] [_log()] userauth is OK
2026-04-12T23:22:30.653 [DEBUG] [Thread-197686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:22:30.653 [DEBUG] [Thread-197686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:22:30.654 [DEBUG] [Thread-197686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:22:30.654 [DEBUG] [Thread-197686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:22:30.678 [INFO] [Thread-197686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:22:30.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:22:31.266 [DEBUG] [Thread-197686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:22:31.266 [DEBUG] [Thread-197686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:22:31.266 [DEBUG] [Thread-197686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:22:31.308 [DEBUG] [Thread-197686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:22:31.308 [DEBUG] [Thread-197686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:22:31.310 [DEBUG] [Thread-197686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:22:31.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:22:31.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:22:31.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:22:31.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:22:31.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:22:31.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:22:31.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:22:31.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:22:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:22:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.890380 -999.00  +11.00   3.40     92   +9.90 1 2 1 3 1     0    0 1.30 0.86 .Nes. 3.4 3.4 215.8 4.6 11.8 -22.4 11.7 -21.2 11.4 -19.4 11.7 -21.4
2026-04-12T23:22:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:22:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:22:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.890380
2026-04-12T23:22:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:22:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:22:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:22:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:22:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:22:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:22:16', tmtdew=0.308165, humidity=97.7793, cloud=0.0, wind=6.31764, temperature=10.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:22:08.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:22:31.337 [DEBUG] [Thread-197686] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:22:31.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:22:31.433 [DEBUG] [Thread-197689] [transport.py] [_log()] starting thread (client mode): 0xae537250
2026-04-12T23:22:31.433 [DEBUG] [Thread-197689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:22:31.448 [DEBUG] [Thread-197689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:22:31.448 [INFO] [Thread-197689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:22:31.455 [DEBUG] [Thread-197689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] client lang: <none>
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] server lang: <none>
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] kex follows: False
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] Compression: none
2026-04-12T23:22:31.456 [DEBUG] [Thread-197689] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:22:31.514 [DEBUG] [Thread-197689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:22:31.515 [DEBUG] [Thread-197689] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:22:31.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:22:31.516 [DEBUG] [Thread-197689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:22:31.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:22:31.573 [DEBUG] [Thread-197689] [transport.py] [_log()] userauth is OK
2026-04-12T23:22:31.574 [DEBUG] [Thread-197689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:22:31.574 [DEBUG] [Thread-197689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:22:31.574 [DEBUG] [Thread-197689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:22:31.574 [DEBUG] [Thread-197689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:22:31.599 [INFO] [Thread-197689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:22:31.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:22:31.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:22:32.410 [DEBUG] [Thread-197689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:22:32.410 [DEBUG] [Thread-197689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:22:32.458 [DEBUG] [Thread-197689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:22:32.458 [DEBUG] [Thread-197689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:22:32.467 [DEBUG] [Thread-197689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:22:32.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:22:32.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:22:32.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:22:32.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:22:32.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:22:32.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:22:32.504 [DEBUG] [Thread-197689] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:22:44.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:22:44.241 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:22:45.197 [DEBUG] [Thread-197691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:23:00.256 [DEBUG] [Thread-197692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:23:02.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:23:02.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:23:02.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:23:03.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 22, 51), 0.51643, 96.5585, 0.0, 8.57664, 11.0332, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:23:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:22:51
2026-04-12T23:23:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:23:04.382 [DEBUG] [Thread-197693] [transport.py] [_log()] starting thread (client mode): 0xa79b5270
2026-04-12T23:23:04.382 [DEBUG] [Thread-197693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:23:04.401 [DEBUG] [Thread-197693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:23:04.401 [INFO] [Thread-197693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:23:04.404 [DEBUG] [Thread-197693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:23:04.404 [DEBUG] [Thread-197693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:23:04.404 [DEBUG] [Thread-197693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:23:04.404 [DEBUG] [Thread-197693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] client lang: <none>
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] server lang: <none>
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] kex follows: False
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] Compression: none
2026-04-12T23:23:04.405 [DEBUG] [Thread-197693] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:23:04.422 [DEBUG] [Thread-197693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:23:04.422 [DEBUG] [Thread-197693] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:23:04.423 [DEBUG] [Thread-197693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:23:04.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:23:04.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:23:04.425 [DEBUG] [Thread-197693] [transport.py] [_log()] userauth is OK
2026-04-12T23:23:04.425 [DEBUG] [Thread-197693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:23:04.425 [DEBUG] [Thread-197693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:23:04.425 [DEBUG] [Thread-197693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:23:04.425 [DEBUG] [Thread-197693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:23:04.449 [INFO] [Thread-197693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:23:04.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:23:05.090 [DEBUG] [Thread-197693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:23:05.091 [DEBUG] [Thread-197693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:23:05.091 [DEBUG] [Thread-197693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:23:05.131 [DEBUG] [Thread-197693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:23:05.131 [DEBUG] [Thread-197693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:23:05.135 [DEBUG] [Thread-197693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:23:05.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:23:05.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:23:05.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:23:05.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:23:05.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:23:05.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:23:05.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:23:05.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:23:05.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:23:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.890728 -999.00  +11.00   3.36     92   +9.80 1 2 1 3 1     0    0 1.30 0.23 .Ne.. 3.4 3.4 231.4 5.0 11.8 -22.3 11.7 -21.2 11.4 -19.3 11.7 -21.5
2026-04-12T23:23:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:23:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:23:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.890728
2026-04-12T23:23:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:23:05.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:23:05.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:23:05.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:23:05.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:23:05.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:22:51', tmtdew=0.51643, humidity=96.5585, cloud=0.0, wind=8.57664, temperature=11.0332, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:22:38.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:23:05.162 [DEBUG] [Thread-197693] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:23:05.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:23:05.258 [DEBUG] [Thread-197696] [transport.py] [_log()] starting thread (client mode): 0xa79b5cf0
2026-04-12T23:23:05.258 [DEBUG] [Thread-197696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:23:05.273 [DEBUG] [Thread-197696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:23:05.273 [INFO] [Thread-197696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:23:05.285 [DEBUG] [Thread-197696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:23:05.285 [DEBUG] [Thread-197696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:23:05.285 [DEBUG] [Thread-197696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:23:05.285 [DEBUG] [Thread-197696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:05.285 [DEBUG] [Thread-197696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] client lang: <none>
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] server lang: <none>
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] kex follows: False
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] Compression: none
2026-04-12T23:23:05.286 [DEBUG] [Thread-197696] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:23:05.342 [DEBUG] [Thread-197696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:23:05.343 [DEBUG] [Thread-197696] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:23:05.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:23:05.344 [DEBUG] [Thread-197696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:23:05.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:23:05.402 [DEBUG] [Thread-197696] [transport.py] [_log()] userauth is OK
2026-04-12T23:23:05.403 [DEBUG] [Thread-197696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:23:05.403 [DEBUG] [Thread-197696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:23:05.403 [DEBUG] [Thread-197696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:23:05.403 [DEBUG] [Thread-197696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:23:05.428 [INFO] [Thread-197696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:23:05.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:23:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:23:06.236 [DEBUG] [Thread-197696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:23:06.236 [DEBUG] [Thread-197696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:23:06.285 [DEBUG] [Thread-197696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:23:06.285 [DEBUG] [Thread-197696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:23:06.294 [DEBUG] [Thread-197696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:23:06.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:23:06.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:23:06.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:23:06.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:23:06.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:23:06.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:23:06.331 [DEBUG] [Thread-197696] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:23:15.295 [DEBUG] [Thread-197698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:23:20.143 [DEBUG] [Thread-197699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:23:30.346 [DEBUG] [Thread-197700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:23:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:23:36.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:23:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:23:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 23, 27), 0.31847, 97.7129, 0.0, 8.1, 10.9, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:23:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:23:27
2026-04-12T23:23:38.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:23:38.346 [DEBUG] [Thread-197701] [transport.py] [_log()] starting thread (client mode): 0xa79b6a70
2026-04-12T23:23:38.346 [DEBUG] [Thread-197701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:23:38.365 [DEBUG] [Thread-197701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:23:38.365 [INFO] [Thread-197701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:38.369 [DEBUG] [Thread-197701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] client lang: <none>
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] server lang: <none>
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] kex follows: False
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] Compression: none
2026-04-12T23:23:38.370 [DEBUG] [Thread-197701] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:23:38.388 [DEBUG] [Thread-197701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:23:38.389 [DEBUG] [Thread-197701] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:23:38.389 [DEBUG] [Thread-197701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:23:38.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:23:38.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:23:38.391 [DEBUG] [Thread-197701] [transport.py] [_log()] userauth is OK
2026-04-12T23:23:38.392 [DEBUG] [Thread-197701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:23:38.392 [DEBUG] [Thread-197701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:23:38.392 [DEBUG] [Thread-197701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:23:38.392 [DEBUG] [Thread-197701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:23:38.416 [INFO] [Thread-197701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:23:38.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:23:39.036 [DEBUG] [Thread-197701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:23:39.036 [DEBUG] [Thread-197701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:23:39.036 [DEBUG] [Thread-197701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:23:39.077 [DEBUG] [Thread-197701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:23:39.077 [DEBUG] [Thread-197701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:23:39.081 [DEBUG] [Thread-197701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:23:39.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:23:39.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:23:39.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:23:39.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:23:39.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:23:39.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:23:39.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:23:39.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:23:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:23:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.891075 -999.00  +11.00   3.90     92   +9.80 1 2 1 3 1     0    0 1.27 -0.15 .Ne.. 3.9 3.9 212.6 6.1 11.8 -22.3 11.7 -21.2 11.4 -19.4 11.7 -21.3
2026-04-12T23:23:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:23:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:23:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.891075
2026-04-12T23:23:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:23:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:23:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:23:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:23:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:23:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:23:27', tmtdew=0.31847, humidity=97.7129, cloud=0.0, wind=8.1, temperature=10.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:23:08.880', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:23:39.106 [DEBUG] [Thread-197701] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:23:39.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:23:39.202 [DEBUG] [Thread-197704] [transport.py] [_log()] starting thread (client mode): 0xb0f8cc10
2026-04-12T23:23:39.202 [DEBUG] [Thread-197704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:23:39.217 [DEBUG] [Thread-197704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:23:39.217 [INFO] [Thread-197704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] client lang: <none>
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] server lang: <none>
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] kex follows: False
2026-04-12T23:23:39.228 [DEBUG] [Thread-197704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:23:39.229 [DEBUG] [Thread-197704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:23:39.229 [DEBUG] [Thread-197704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:23:39.229 [DEBUG] [Thread-197704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:23:39.229 [DEBUG] [Thread-197704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:23:39.229 [DEBUG] [Thread-197704] [transport.py] [_log()] Compression: none
2026-04-12T23:23:39.229 [DEBUG] [Thread-197704] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:23:39.287 [DEBUG] [Thread-197704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:23:39.288 [DEBUG] [Thread-197704] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:23:39.288 [DEBUG] [Thread-197704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:23:39.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:23:39.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:23:39.343 [DEBUG] [Thread-197704] [transport.py] [_log()] userauth is OK
2026-04-12T23:23:39.343 [DEBUG] [Thread-197704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:23:39.343 [DEBUG] [Thread-197704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:23:39.344 [DEBUG] [Thread-197704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:23:39.344 [DEBUG] [Thread-197704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:23:39.362 [INFO] [Thread-197704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:23:39.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:23:39.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:23:40.222 [DEBUG] [Thread-197704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:23:40.223 [DEBUG] [Thread-197704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:23:40.270 [DEBUG] [Thread-197704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:23:40.270 [DEBUG] [Thread-197704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:23:40.280 [DEBUG] [Thread-197704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:23:40.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:23:40.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:23:40.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:23:40.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:23:40.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:23:40.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:23:40.315 [DEBUG] [Thread-197704] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:23:44.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:23:44.455 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:23:45.379 [DEBUG] [Thread-197706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:00.430 [DEBUG] [Thread-197707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:10.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:24:10.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:24:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:24:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 24, 2), 0.3183, 97.7133, 0.0, 7.99416, 10.8671, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:24:11.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:24:02
2026-04-12T23:24:11.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:24:12.136 [DEBUG] [Thread-197708] [transport.py] [_log()] starting thread (client mode): 0xb0f8cfd0
2026-04-12T23:24:12.136 [DEBUG] [Thread-197708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:24:12.155 [DEBUG] [Thread-197708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:24:12.155 [INFO] [Thread-197708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:24:12.159 [DEBUG] [Thread-197708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] client lang: <none>
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] server lang: <none>
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] kex follows: False
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] Compression: none
2026-04-12T23:24:12.160 [DEBUG] [Thread-197708] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:24:12.178 [DEBUG] [Thread-197708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:24:12.179 [DEBUG] [Thread-197708] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:24:12.179 [DEBUG] [Thread-197708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:24:12.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:24:12.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:24:12.182 [DEBUG] [Thread-197708] [transport.py] [_log()] userauth is OK
2026-04-12T23:24:12.182 [DEBUG] [Thread-197708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:24:12.182 [DEBUG] [Thread-197708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:24:12.183 [DEBUG] [Thread-197708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:24:12.183 [DEBUG] [Thread-197708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:24:12.221 [INFO] [Thread-197708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:24:12.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:24:12.843 [DEBUG] [Thread-197708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:24:12.844 [DEBUG] [Thread-197708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:24:12.844 [DEBUG] [Thread-197708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:24:12.884 [DEBUG] [Thread-197708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:24:12.884 [DEBUG] [Thread-197708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:24:12.888 [DEBUG] [Thread-197708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:24:12.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:24:12.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:24:12.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:24:12.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:24:12.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:24:12.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:24:12.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:24:12.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:24:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:24:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.891422 -999.00  +11.00   4.90     92   +9.90 1 2 1 3 1     0    0 1.26 -0.72 .NE.. 4.9 4.9 196.4 6.4 11.8 -22.3 11.7 -21.1 11.4 -19.3 11.7 -21.5
2026-04-12T23:24:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:24:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:24:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.891422
2026-04-12T23:24:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:24:12.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:24:12.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:24:12.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:24:12.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:24:12.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:24:02', tmtdew=0.3183, humidity=97.7133, cloud=0.0, wind=7.99416, temperature=10.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:23:38.861', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:24:12.916 [DEBUG] [Thread-197708] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:24:12.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:24:13.009 [DEBUG] [Thread-197711] [transport.py] [_log()] starting thread (client mode): 0xa79b55d0
2026-04-12T23:24:13.009 [DEBUG] [Thread-197711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:24:13.025 [DEBUG] [Thread-197711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:24:13.025 [INFO] [Thread-197711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:24:13.032 [DEBUG] [Thread-197711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:24:13.032 [DEBUG] [Thread-197711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] client lang: <none>
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] server lang: <none>
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] kex follows: False
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] Compression: none
2026-04-12T23:24:13.033 [DEBUG] [Thread-197711] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:24:13.091 [DEBUG] [Thread-197711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:24:13.091 [DEBUG] [Thread-197711] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:24:13.092 [DEBUG] [Thread-197711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:24:13.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:24:13.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:24:13.147 [DEBUG] [Thread-197711] [transport.py] [_log()] userauth is OK
2026-04-12T23:24:13.147 [DEBUG] [Thread-197711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:24:13.147 [DEBUG] [Thread-197711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:24:13.147 [DEBUG] [Thread-197711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:24:13.147 [DEBUG] [Thread-197711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:24:13.161 [INFO] [Thread-197711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:24:13.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:24:13.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:24:13.950 [DEBUG] [Thread-197711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:24:13.951 [DEBUG] [Thread-197711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:24:13.998 [DEBUG] [Thread-197711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:24:13.998 [DEBUG] [Thread-197711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:24:14.008 [DEBUG] [Thread-197711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:24:14.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:24:14.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:24:14.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:24:14.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:24:14.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:24:14.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:24:14.048 [DEBUG] [Thread-197711] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:24:15.465 [DEBUG] [Thread-197713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:20.213 [DEBUG] [Thread-197714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:30.521 [DEBUG] [Thread-197715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:24:44.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:24:44.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:24:44.661 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:44.662 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 24, 2), 0.3183, 97.7133, 0.0, 7.99416, 10.8671, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:24:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:24:02
2026-04-12T23:24:45.562 [DEBUG] [Thread-197716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:24:45.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:24:45.878 [DEBUG] [Thread-197717] [transport.py] [_log()] starting thread (client mode): 0xb0f6e9b0
2026-04-12T23:24:45.878 [DEBUG] [Thread-197717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:24:45.897 [DEBUG] [Thread-197717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:24:45.897 [INFO] [Thread-197717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:24:45.900 [DEBUG] [Thread-197717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:24:45.900 [DEBUG] [Thread-197717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] client lang: <none>
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] server lang: <none>
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] kex follows: False
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] Compression: none
2026-04-12T23:24:45.901 [DEBUG] [Thread-197717] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:24:45.919 [DEBUG] [Thread-197717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:24:45.920 [DEBUG] [Thread-197717] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:24:45.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:24:45.921 [DEBUG] [Thread-197717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:24:45.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:24:45.923 [DEBUG] [Thread-197717] [transport.py] [_log()] userauth is OK
2026-04-12T23:24:45.923 [DEBUG] [Thread-197717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:24:45.923 [DEBUG] [Thread-197717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:24:45.923 [DEBUG] [Thread-197717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:24:45.923 [DEBUG] [Thread-197717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:24:45.956 [INFO] [Thread-197717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:24:45.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:24:46.574 [DEBUG] [Thread-197717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:24:46.574 [DEBUG] [Thread-197717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:24:46.575 [DEBUG] [Thread-197717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:24:46.615 [DEBUG] [Thread-197717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:24:46.615 [DEBUG] [Thread-197717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:24:46.619 [DEBUG] [Thread-197717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:24:46.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:24:46.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:24:46.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:24:46.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:24:46.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:24:46.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:24:46.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:24:46.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:24:46.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:24:46.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.891769 -999.00  +11.00   3.22     92   +9.90 1 2 1 3 1     0    0 1.24 -1.88 .NE.. 3.2 3.2 210.6 5.0 11.8 -22.3 11.7 -21.2 11.4 -19.3 11.7 -21.1
2026-04-12T23:24:46.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:24:46.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:24:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.891769
2026-04-12T23:24:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:24:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:24:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:24:46.641 [DEBUG] [Thread-197717] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:24:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:24:46.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:24:46.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:24:02', tmtdew=0.3183, humidity=97.7133, cloud=0.0, wind=7.99416, temperature=10.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:24:08.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:24:46.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:24:46.729 [DEBUG] [Thread-197720] [transport.py] [_log()] starting thread (client mode): 0xae536830
2026-04-12T23:24:46.729 [DEBUG] [Thread-197720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:24:46.744 [DEBUG] [Thread-197720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:24:46.744 [INFO] [Thread-197720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] client lang: <none>
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] server lang: <none>
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] kex follows: False
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:24:46.752 [DEBUG] [Thread-197720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:24:46.753 [DEBUG] [Thread-197720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:24:46.753 [DEBUG] [Thread-197720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:24:46.753 [DEBUG] [Thread-197720] [transport.py] [_log()] Compression: none
2026-04-12T23:24:46.753 [DEBUG] [Thread-197720] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:24:46.812 [DEBUG] [Thread-197720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:24:46.813 [DEBUG] [Thread-197720] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:24:46.813 [DEBUG] [Thread-197720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:24:46.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:24:46.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:24:46.869 [DEBUG] [Thread-197720] [transport.py] [_log()] userauth is OK
2026-04-12T23:24:46.869 [DEBUG] [Thread-197720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:24:46.869 [DEBUG] [Thread-197720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:24:46.869 [DEBUG] [Thread-197720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:24:46.870 [DEBUG] [Thread-197720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:24:46.888 [INFO] [Thread-197720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:24:46.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:24:46.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:24:47.738 [DEBUG] [Thread-197720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:24:47.738 [DEBUG] [Thread-197720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:24:47.788 [DEBUG] [Thread-197720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:24:47.788 [DEBUG] [Thread-197720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:24:47.796 [DEBUG] [Thread-197720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:24:47.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:24:47.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:24:47.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:24:47.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:24:47.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:24:47.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:24:47.830 [DEBUG] [Thread-197720] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:25:00.598 [DEBUG] [Thread-197722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:25:15.648 [DEBUG] [Thread-197723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:25:17.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:25:17.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:25:17.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:25:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 24, 38), 0.5366, 96.4267, 0.0, 6.49512, 10.9342, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:25:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:24:38
2026-04-12T23:25:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:25:19.899 [DEBUG] [Thread-197724] [transport.py] [_log()] starting thread (client mode): 0xa79b62f0
2026-04-12T23:25:19.899 [DEBUG] [Thread-197724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:25:19.920 [DEBUG] [Thread-197724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:25:19.921 [INFO] [Thread-197724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] client lang: <none>
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] server lang: <none>
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] kex follows: False
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] Compression: none
2026-04-12T23:25:19.924 [DEBUG] [Thread-197724] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:25:19.942 [DEBUG] [Thread-197724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:25:19.942 [DEBUG] [Thread-197724] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:25:19.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:25:19.943 [DEBUG] [Thread-197724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:25:19.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:25:19.945 [DEBUG] [Thread-197724] [transport.py] [_log()] userauth is OK
2026-04-12T23:25:19.946 [DEBUG] [Thread-197724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:25:19.946 [DEBUG] [Thread-197724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:25:19.946 [DEBUG] [Thread-197724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:25:19.946 [DEBUG] [Thread-197724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:25:19.969 [INFO] [Thread-197724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:25:19.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:25:20.273 [DEBUG] [Thread-197726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:25:20.615 [DEBUG] [Thread-197724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:25:20.615 [DEBUG] [Thread-197724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:25:20.616 [DEBUG] [Thread-197724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:25:20.656 [DEBUG] [Thread-197724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:25:20.656 [DEBUG] [Thread-197724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:25:20.659 [DEBUG] [Thread-197724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:25:20.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:25:20.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:25:20.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:25:20.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:25:20.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:25:20.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:25:20.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:25:20.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:25:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:25:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.892463 -999.00  +11.00   4.67     92   +9.80 1 2 1 3 1     0    0 1.20 -3.32 .NES. 4.7 4.7 194.0 5.3 11.8 -22.4 11.7 -21.2 11.3 -19.3 11.6 -21.3
2026-04-12T23:25:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:25:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:25:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.892463
2026-04-12T23:25:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:25:20.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:25:20.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:25:20.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:25:20.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:25:20.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:24:38', tmtdew=0.5366, humidity=96.4267, cloud=0.0, wind=6.49512, temperature=10.9342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:25:08.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:25:20.686 [DEBUG] [Thread-197724] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:25:20.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:25:20.790 [DEBUG] [Thread-197728] [transport.py] [_log()] starting thread (client mode): 0xb0f42710
2026-04-12T23:25:20.790 [DEBUG] [Thread-197728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:25:20.804 [DEBUG] [Thread-197728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:25:20.804 [INFO] [Thread-197728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:25:20.812 [DEBUG] [Thread-197728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:25:20.812 [DEBUG] [Thread-197728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:25:20.812 [DEBUG] [Thread-197728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:25:20.812 [DEBUG] [Thread-197728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:20.812 [DEBUG] [Thread-197728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:20.812 [DEBUG] [Thread-197728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:20.812 [DEBUG] [Thread-197728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] client lang: <none>
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] server lang: <none>
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] kex follows: False
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:25:20.813 [DEBUG] [Thread-197728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:25:20.814 [DEBUG] [Thread-197728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:25:20.814 [DEBUG] [Thread-197728] [transport.py] [_log()] Compression: none
2026-04-12T23:25:20.814 [DEBUG] [Thread-197728] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:25:20.872 [DEBUG] [Thread-197728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:25:20.873 [DEBUG] [Thread-197728] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:25:20.874 [DEBUG] [Thread-197728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:25:20.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:25:20.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:25:20.933 [DEBUG] [Thread-197728] [transport.py] [_log()] userauth is OK
2026-04-12T23:25:20.933 [DEBUG] [Thread-197728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:25:20.934 [DEBUG] [Thread-197728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:25:20.934 [DEBUG] [Thread-197728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:25:20.934 [DEBUG] [Thread-197728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:25:20.953 [INFO] [Thread-197728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:25:20.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:25:20.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:25:21.810 [DEBUG] [Thread-197728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:25:21.810 [DEBUG] [Thread-197728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:25:21.857 [DEBUG] [Thread-197728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:25:21.858 [DEBUG] [Thread-197728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:25:21.866 [DEBUG] [Thread-197728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:25:21.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:25:21.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:25:21.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:25:21.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:25:21.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:25:21.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:25:21.899 [DEBUG] [Thread-197728] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:25:30.684 [DEBUG] [Thread-197730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:25:44.868 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:25:44.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:25:45.747 [DEBUG] [Thread-197731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:25:51.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:25:51.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:25:51.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:25:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 25, 13), 0.32335, 97.6801, 0.0, 6.33528, 10.8339, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:25:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:25:13
2026-04-12T23:25:53.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:25:53.793 [DEBUG] [Thread-197732] [transport.py] [_log()] starting thread (client mode): 0xb0f40760
2026-04-12T23:25:53.793 [DEBUG] [Thread-197732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:25:53.814 [DEBUG] [Thread-197732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:25:53.814 [INFO] [Thread-197732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:25:53.817 [DEBUG] [Thread-197732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] client lang: <none>
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] server lang: <none>
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] kex follows: False
2026-04-12T23:25:53.818 [DEBUG] [Thread-197732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:25:53.819 [DEBUG] [Thread-197732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:25:53.819 [DEBUG] [Thread-197732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:25:53.819 [DEBUG] [Thread-197732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:25:53.819 [DEBUG] [Thread-197732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:25:53.819 [DEBUG] [Thread-197732] [transport.py] [_log()] Compression: none
2026-04-12T23:25:53.819 [DEBUG] [Thread-197732] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:25:53.838 [DEBUG] [Thread-197732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:25:53.839 [DEBUG] [Thread-197732] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:25:53.839 [DEBUG] [Thread-197732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:25:53.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:25:53.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:25:53.841 [DEBUG] [Thread-197732] [transport.py] [_log()] userauth is OK
2026-04-12T23:25:53.841 [DEBUG] [Thread-197732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:25:53.842 [DEBUG] [Thread-197732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:25:53.842 [DEBUG] [Thread-197732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:25:53.842 [DEBUG] [Thread-197732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:25:53.865 [INFO] [Thread-197732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:25:53.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:25:54.493 [DEBUG] [Thread-197732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:25:54.493 [DEBUG] [Thread-197732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:25:54.493 [DEBUG] [Thread-197732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:25:54.534 [DEBUG] [Thread-197732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:25:54.534 [DEBUG] [Thread-197732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:25:54.538 [DEBUG] [Thread-197732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:25:54.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:25:54.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:25:54.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:25:54.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:25:54.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:25:54.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:25:54.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:25:54.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:25:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:25:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.892811 -999.00  +11.00   4.20     92   +9.80 1 2 1 3 1     0    0 1.17 -3.60 .NEs. 4.2 4.2 215.1 5.4 11.8 -22.3 11.6 -21.2 11.3 -19.3 11.6 -21.2
2026-04-12T23:25:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:25:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:25:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.892811
2026-04-12T23:25:54.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:25:54.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:25:54.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:25:54.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:25:54.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:25:54.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:25:13', tmtdew=0.32335, humidity=97.6801, cloud=0.0, wind=6.33528, temperature=10.8339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:25:38.870', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:25:54.563 [DEBUG] [Thread-197732] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:25:54.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:25:54.656 [DEBUG] [Thread-197735] [transport.py] [_log()] starting thread (client mode): 0xae5343d0
2026-04-12T23:25:54.657 [DEBUG] [Thread-197735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:25:54.672 [DEBUG] [Thread-197735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:25:54.672 [INFO] [Thread-197735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:25:54.680 [DEBUG] [Thread-197735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:25:54.680 [DEBUG] [Thread-197735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:25:54.680 [DEBUG] [Thread-197735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:25:54.680 [DEBUG] [Thread-197735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:54.680 [DEBUG] [Thread-197735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:25:54.680 [DEBUG] [Thread-197735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] client lang: <none>
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] server lang: <none>
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] kex follows: False
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] Compression: none
2026-04-12T23:25:54.681 [DEBUG] [Thread-197735] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:25:54.739 [DEBUG] [Thread-197735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:25:54.740 [DEBUG] [Thread-197735] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:25:54.740 [DEBUG] [Thread-197735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:25:54.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:25:54.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:25:54.797 [DEBUG] [Thread-197735] [transport.py] [_log()] userauth is OK
2026-04-12T23:25:54.797 [DEBUG] [Thread-197735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:25:54.797 [DEBUG] [Thread-197735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:25:54.797 [DEBUG] [Thread-197735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:25:54.798 [DEBUG] [Thread-197735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:25:54.817 [INFO] [Thread-197735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:25:54.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:25:54.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:25:55.586 [DEBUG] [Thread-197735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:25:55.587 [DEBUG] [Thread-197735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:25:55.634 [DEBUG] [Thread-197735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:25:55.634 [DEBUG] [Thread-197735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:25:55.643 [DEBUG] [Thread-197735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:25:55.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:25:55.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:25:55.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:25:55.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:25:55.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:25:55.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:25:55.680 [DEBUG] [Thread-197735] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:26:00.784 [DEBUG] [Thread-197737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:26:15.838 [DEBUG] [Thread-197738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:26:20.354 [DEBUG] [Thread-197739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:26:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:26:25.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:26:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:26:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 25, 49), 0.54166, 96.3933, 0.0, 7.34184, 10.9009, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:26:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:25:49
2026-04-12T23:26:27.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:26:27.603 [DEBUG] [Thread-197740] [transport.py] [_log()] starting thread (client mode): 0xae5a6890
2026-04-12T23:26:27.604 [DEBUG] [Thread-197740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:26:27.614 [DEBUG] [Thread-197740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:26:27.614 [INFO] [Thread-197740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] client lang: <none>
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] server lang: <none>
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] kex follows: False
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:26:27.615 [DEBUG] [Thread-197740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:26:27.616 [DEBUG] [Thread-197740] [transport.py] [_log()] Compression: none
2026-04-12T23:26:27.616 [DEBUG] [Thread-197740] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:26:27.627 [DEBUG] [Thread-197740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:26:27.627 [DEBUG] [Thread-197740] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:26:27.628 [DEBUG] [Thread-197740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:26:27.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:26:27.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:26:27.629 [DEBUG] [Thread-197740] [transport.py] [_log()] userauth is OK
2026-04-12T23:26:27.629 [DEBUG] [Thread-197740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:26:27.629 [DEBUG] [Thread-197740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:26:27.629 [DEBUG] [Thread-197740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:26:27.629 [DEBUG] [Thread-197740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:26:27.650 [INFO] [Thread-197740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:26:27.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:26:28.296 [DEBUG] [Thread-197740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:26:28.296 [DEBUG] [Thread-197740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:26:28.296 [DEBUG] [Thread-197740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:26:28.337 [DEBUG] [Thread-197740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:26:28.337 [DEBUG] [Thread-197740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:26:28.341 [DEBUG] [Thread-197740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:26:28.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:26:28.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:26:28.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:26:28.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:26:28.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:26:28.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:26:28.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:26:28.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:26:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:26:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.893158 -999.00  +11.00   3.04     92   +9.90 1 2 1 3 1     0    0 1.13 -4.13 .NE.w 3.0 3.0 216.4 5.0 11.8 -22.2 11.7 -21.2 11.3 -19.2 11.6 -21.2
2026-04-12T23:26:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:26:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:26:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.893158
2026-04-12T23:26:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:26:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:26:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:26:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:26:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:26:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:25:49', tmtdew=0.54166, humidity=96.3933, cloud=0.0, wind=7.34184, temperature=10.9009, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:26:08.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4969999999999999, 2.4922500000000003, 3.0305, nan, nan, nan, nan, nan, 2.71, nan, nan, 2.272999999999998, nan, nan, nan, 2.9989999999999988, 0.5295000000000005, 0.35875000000000057, 0.4504999999999999, 0.4660000000000002, 0.7555000000000014, 2.561000000000001, nan, 2.4247499999999995], zp_timestamp='2026-04-12T21:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:26:28.369 [DEBUG] [Thread-197740] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:26:28.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:26:28.454 [DEBUG] [Thread-197743] [transport.py] [_log()] starting thread (client mode): 0xae5a6620
2026-04-12T23:26:28.454 [DEBUG] [Thread-197743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:26:28.469 [DEBUG] [Thread-197743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:26:28.470 [INFO] [Thread-197743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:26:28.477 [DEBUG] [Thread-197743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:26:28.478 [DEBUG] [Thread-197743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:26:28.478 [DEBUG] [Thread-197743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:26:28.478 [DEBUG] [Thread-197743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:26:28.478 [DEBUG] [Thread-197743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:26:28.478 [DEBUG] [Thread-197743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:26:28.478 [DEBUG] [Thread-197743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:26:28.478 [DEBUG] [Thread-197743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] client lang: <none>
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] server lang: <none>
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] kex follows: False
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:26:28.479 [DEBUG] [Thread-197743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:26:28.480 [DEBUG] [Thread-197743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:26:28.480 [DEBUG] [Thread-197743] [transport.py] [_log()] Compression: none
2026-04-12T23:26:28.480 [DEBUG] [Thread-197743] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:26:28.539 [DEBUG] [Thread-197743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:26:28.539 [DEBUG] [Thread-197743] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:26:28.540 [DEBUG] [Thread-197743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:26:28.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:26:28.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:26:28.598 [DEBUG] [Thread-197743] [transport.py] [_log()] userauth is OK
2026-04-12T23:26:28.598 [DEBUG] [Thread-197743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:26:28.598 [DEBUG] [Thread-197743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:26:28.598 [DEBUG] [Thread-197743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:26:28.598 [DEBUG] [Thread-197743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:26:28.617 [INFO] [Thread-197743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:26:28.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:26:28.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:26:29.427 [DEBUG] [Thread-197743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:26:29.427 [DEBUG] [Thread-197743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:26:29.475 [DEBUG] [Thread-197743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:26:29.475 [DEBUG] [Thread-197743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:26:29.484 [DEBUG] [Thread-197743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:26:29.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:26:29.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:26:29.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:26:29.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:26:29.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:26:29.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:26:29.521 [DEBUG] [Thread-197743] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:26:30.880 [DEBUG] [Thread-197745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:26:45.074 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:26:45.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:26:45.932 [DEBUG] [Thread-197746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:26:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:26:59.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:26:59.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:27:00.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 26, 25), 0.2733, 97.6804, 0.0, 5.52384, 10.7841, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:27:00.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:26:25
2026-04-12T23:27:00.970 [DEBUG] [Thread-197747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:27:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:27:01.367 [DEBUG] [Thread-197748] [transport.py] [_log()] starting thread (client mode): 0xae5a7940
2026-04-12T23:27:01.367 [DEBUG] [Thread-197748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:27:01.381 [DEBUG] [Thread-197748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:27:01.381 [INFO] [Thread-197748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] client lang: <none>
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] server lang: <none>
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] kex follows: False
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] Compression: none
2026-04-12T23:27:01.384 [DEBUG] [Thread-197748] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:27:01.400 [DEBUG] [Thread-197748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:27:01.400 [DEBUG] [Thread-197748] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:27:01.401 [DEBUG] [Thread-197748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:27:01.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:27:01.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:27:01.403 [DEBUG] [Thread-197748] [transport.py] [_log()] userauth is OK
2026-04-12T23:27:01.403 [DEBUG] [Thread-197748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:27:01.403 [DEBUG] [Thread-197748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:27:01.403 [DEBUG] [Thread-197748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:27:01.403 [DEBUG] [Thread-197748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:27:01.426 [INFO] [Thread-197748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:27:01.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:27:02.049 [DEBUG] [Thread-197748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:27:02.049 [DEBUG] [Thread-197748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:27:02.050 [DEBUG] [Thread-197748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:27:02.090 [DEBUG] [Thread-197748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:27:02.090 [DEBUG] [Thread-197748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:27:02.094 [DEBUG] [Thread-197748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:27:02.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:27:02.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:27:02.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:27:02.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:27:02.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:27:02.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:27:02.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:27:02.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:27:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:27:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.893505 -999.00  +11.00   3.51     92   +9.90 1 2 1 3 1     0    0 1.12 -4.62 .NE.w 3.5 3.5 199.2 4.9 11.7 -22.4 11.7 -21.6 11.3 -19.3 11.7 -21.4
2026-04-12T23:27:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:27:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:27:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.893505
2026-04-12T23:27:02.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:27:02.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:27:02.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:27:02.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:27:02.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:27:02.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:26:25', tmtdew=0.2733, humidity=97.6804, cloud=0.0, wind=5.52384, temperature=10.7841, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:26:38.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:27:02.119 [DEBUG] [Thread-197748] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:27:02.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:27:02.216 [DEBUG] [Thread-197751] [transport.py] [_log()] starting thread (client mode): 0xa79b5960
2026-04-12T23:27:02.216 [DEBUG] [Thread-197751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:27:02.237 [DEBUG] [Thread-197751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:27:02.237 [INFO] [Thread-197751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:27:02.245 [DEBUG] [Thread-197751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:27:02.245 [DEBUG] [Thread-197751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:27:02.245 [DEBUG] [Thread-197751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:27:02.245 [DEBUG] [Thread-197751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:02.245 [DEBUG] [Thread-197751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] client lang: <none>
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] server lang: <none>
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] kex follows: False
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:27:02.246 [DEBUG] [Thread-197751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:27:02.247 [DEBUG] [Thread-197751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:27:02.247 [DEBUG] [Thread-197751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:27:02.247 [DEBUG] [Thread-197751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:27:02.247 [DEBUG] [Thread-197751] [transport.py] [_log()] Compression: none
2026-04-12T23:27:02.247 [DEBUG] [Thread-197751] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:27:02.308 [DEBUG] [Thread-197751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:27:02.309 [DEBUG] [Thread-197751] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:27:02.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:27:02.310 [DEBUG] [Thread-197751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:27:02.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:27:02.366 [DEBUG] [Thread-197751] [transport.py] [_log()] userauth is OK
2026-04-12T23:27:02.367 [DEBUG] [Thread-197751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:27:02.367 [DEBUG] [Thread-197751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:27:02.367 [DEBUG] [Thread-197751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:27:02.367 [DEBUG] [Thread-197751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:27:02.386 [INFO] [Thread-197751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:27:02.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:27:02.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:27:03.208 [DEBUG] [Thread-197751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:27:03.208 [DEBUG] [Thread-197751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:27:03.256 [DEBUG] [Thread-197751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:27:03.256 [DEBUG] [Thread-197751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:27:03.265 [DEBUG] [Thread-197751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:27:03.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:27:03.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:27:03.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:27:03.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:27:03.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:27:03.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:27:03.302 [DEBUG] [Thread-197751] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:27:16.000 [DEBUG] [Thread-197753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:27:20.424 [DEBUG] [Thread-197754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:27:31.053 [DEBUG] [Thread-197755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:27:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:27:33.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:27:33.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:27:34.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 27), 0.325815, 97.6638, 0.0, 5.48856, 10.7675, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:27:34.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:27:00
2026-04-12T23:27:35.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:27:35.169 [DEBUG] [Thread-197756] [transport.py] [_log()] starting thread (client mode): 0xae537f70
2026-04-12T23:27:35.169 [DEBUG] [Thread-197756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:27:35.189 [DEBUG] [Thread-197756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:27:35.189 [INFO] [Thread-197756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] client lang: <none>
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] server lang: <none>
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] kex follows: False
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] Compression: none
2026-04-12T23:27:35.192 [DEBUG] [Thread-197756] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:27:35.209 [DEBUG] [Thread-197756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:27:35.210 [DEBUG] [Thread-197756] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:27:35.210 [DEBUG] [Thread-197756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:27:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:27:35.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:27:35.212 [DEBUG] [Thread-197756] [transport.py] [_log()] userauth is OK
2026-04-12T23:27:35.212 [DEBUG] [Thread-197756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:27:35.213 [DEBUG] [Thread-197756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:27:35.213 [DEBUG] [Thread-197756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:27:35.213 [DEBUG] [Thread-197756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:27:35.238 [INFO] [Thread-197756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:27:35.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:27:35.798 [DEBUG] [Thread-197756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:27:35.798 [DEBUG] [Thread-197756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:27:35.799 [DEBUG] [Thread-197756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:27:35.839 [DEBUG] [Thread-197756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:27:35.839 [DEBUG] [Thread-197756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:27:35.843 [DEBUG] [Thread-197756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:27:35.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:27:35.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:27:35.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:27:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:27:35.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:27:35.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:27:35.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:27:35.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:27:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:27:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.893852 -999.00  +11.00   3.87     92   +9.80 1 2 1 3 1     0    0 1.08 -5.01 .NE.. 3.9 3.9 195.2 5.7 11.8 -22.4 11.7 -21.3 11.4 -19.1 11.7 -21.2
2026-04-12T23:27:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:27:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:27:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.893852
2026-04-12T23:27:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:27:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:27:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:27:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:27:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:27:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:27:00', tmtdew=0.325815, humidity=97.6638, cloud=0.0, wind=5.48856, temperature=10.7675, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:27:08.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:27:35.870 [DEBUG] [Thread-197756] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:27:35.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:27:35.963 [DEBUG] [Thread-197759] [transport.py] [_log()] starting thread (client mode): 0xb0f8fc10
2026-04-12T23:27:35.964 [DEBUG] [Thread-197759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:27:35.978 [DEBUG] [Thread-197759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:27:35.978 [INFO] [Thread-197759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:27:35.986 [DEBUG] [Thread-197759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:27:35.987 [DEBUG] [Thread-197759] [transport.py] [_log()] client lang: <none>
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] server lang: <none>
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] kex follows: False
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:27:35.988 [DEBUG] [Thread-197759] [transport.py] [_log()] Compression: none
2026-04-12T23:27:35.989 [DEBUG] [Thread-197759] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:27:36.051 [DEBUG] [Thread-197759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:27:36.051 [DEBUG] [Thread-197759] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:27:36.052 [DEBUG] [Thread-197759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:27:36.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:27:36.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:27:36.107 [DEBUG] [Thread-197759] [transport.py] [_log()] userauth is OK
2026-04-12T23:27:36.107 [DEBUG] [Thread-197759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:27:36.107 [DEBUG] [Thread-197759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:27:36.107 [DEBUG] [Thread-197759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:27:36.107 [DEBUG] [Thread-197759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:27:36.125 [INFO] [Thread-197759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:27:36.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:27:36.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:27:36.932 [DEBUG] [Thread-197759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:27:36.932 [DEBUG] [Thread-197759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:27:36.980 [DEBUG] [Thread-197759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:27:36.980 [DEBUG] [Thread-197759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:27:36.990 [DEBUG] [Thread-197759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:27:36.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:27:36.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:27:37.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:27:37.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:27:37.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:27:37.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:27:37.028 [DEBUG] [Thread-197759] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:27:45.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:27:45.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:27:46.093 [DEBUG] [Thread-197761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:28:01.151 [DEBUG] [Thread-197762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:28:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:28:07.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:28:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:28:08.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 27, 35), 0.55695, 96.2942, 0.0, 7.97688, 10.868, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:28:08.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:27:35
2026-04-12T23:28:08.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:28:08.868 [DEBUG] [Thread-197763] [transport.py] [_log()] starting thread (client mode): 0xb0f8d0f0
2026-04-12T23:28:08.868 [DEBUG] [Thread-197763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:28:08.888 [DEBUG] [Thread-197763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:28:08.888 [INFO] [Thread-197763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:28:08.889 [DEBUG] [Thread-197763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:28:08.889 [DEBUG] [Thread-197763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:28:08.889 [DEBUG] [Thread-197763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:28:08.889 [DEBUG] [Thread-197763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:08.889 [DEBUG] [Thread-197763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] client lang: <none>
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] server lang: <none>
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] kex follows: False
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] Compression: none
2026-04-12T23:28:08.890 [DEBUG] [Thread-197763] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:28:08.898 [DEBUG] [Thread-197763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:28:08.899 [DEBUG] [Thread-197763] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:28:08.899 [DEBUG] [Thread-197763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:28:08.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:28:08.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:28:08.901 [DEBUG] [Thread-197763] [transport.py] [_log()] userauth is OK
2026-04-12T23:28:08.901 [DEBUG] [Thread-197763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:28:08.901 [DEBUG] [Thread-197763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:28:08.901 [DEBUG] [Thread-197763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:28:08.901 [DEBUG] [Thread-197763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:28:08.919 [INFO] [Thread-197763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:28:08.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:28:09.481 [DEBUG] [Thread-197763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:28:09.482 [DEBUG] [Thread-197763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:28:09.482 [DEBUG] [Thread-197763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:28:09.523 [DEBUG] [Thread-197763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:28:09.523 [DEBUG] [Thread-197763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:28:09.525 [DEBUG] [Thread-197763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:28:09.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:28:09.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:28:09.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:28:09.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:28:09.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:28:09.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:28:09.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:28:09.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.894201 -999.00  +11.00   4.09     92   +9.80 1 2 1 3 1     0    0 1.11 -5.36 .NE.. 4.1 4.1 197.0 4.9 11.8 -22.3 11.7 -21.3 11.4 -19.3 11.7 -21.1
2026-04-12T23:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.894201
2026-04-12T23:28:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:28:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:28:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:28:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:28:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:28:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:27:35', tmtdew=0.55695, humidity=96.2942, cloud=0.0, wind=7.97688, temperature=10.868, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:27:38.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:28:09.555 [DEBUG] [Thread-197763] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:28:09.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:28:09.650 [DEBUG] [Thread-197766] [transport.py] [_log()] starting thread (client mode): 0xa794b100
2026-04-12T23:28:09.650 [DEBUG] [Thread-197766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:28:09.665 [DEBUG] [Thread-197766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:28:09.665 [INFO] [Thread-197766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] client lang: <none>
2026-04-12T23:28:09.673 [DEBUG] [Thread-197766] [transport.py] [_log()] server lang: <none>
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] kex follows: False
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] Compression: none
2026-04-12T23:28:09.674 [DEBUG] [Thread-197766] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:28:09.730 [DEBUG] [Thread-197766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:28:09.731 [DEBUG] [Thread-197766] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:28:09.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:28:09.732 [DEBUG] [Thread-197766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:28:09.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:28:09.787 [DEBUG] [Thread-197766] [transport.py] [_log()] userauth is OK
2026-04-12T23:28:09.788 [DEBUG] [Thread-197766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:28:09.788 [DEBUG] [Thread-197766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:28:09.788 [DEBUG] [Thread-197766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:28:09.788 [DEBUG] [Thread-197766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:28:09.808 [INFO] [Thread-197766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:28:09.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:28:09.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:28:10.646 [DEBUG] [Thread-197766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:28:10.648 [DEBUG] [Thread-197766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:28:10.694 [DEBUG] [Thread-197766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:28:10.695 [DEBUG] [Thread-197766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:28:10.704 [DEBUG] [Thread-197766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:28:10.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:28:10.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:28:10.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:28:10.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:28:10.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:28:10.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:28:10.742 [DEBUG] [Thread-197766] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:28:16.186 [DEBUG] [Thread-197768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:28:20.492 [DEBUG] [Thread-197769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:28:31.237 [DEBUG] [Thread-197770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:28:40.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:28:40.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:28:40.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
2026-04-12T23:28:42.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 28, 11), 0.328355, 97.6471, 0.0, 5.66496, 10.8008, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:28:42.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:28:11
2026-04-12T23:28:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:28:42.564 [DEBUG] [Thread-197771] [transport.py] [_log()] starting thread (client mode): 0xae5362c0
2026-04-12T23:28:42.564 [DEBUG] [Thread-197771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:28:42.587 [DEBUG] [Thread-197771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:28:42.587 [INFO] [Thread-197771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:28:42.590 [DEBUG] [Thread-197771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:28:42.590 [DEBUG] [Thread-197771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] client lang: <none>
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] server lang: <none>
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] kex follows: False
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] Compression: none
2026-04-12T23:28:42.591 [DEBUG] [Thread-197771] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:28:42.609 [DEBUG] [Thread-197771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:28:42.609 [DEBUG] [Thread-197771] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:28:42.610 [DEBUG] [Thread-197771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:28:42.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:28:42.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:28:42.612 [DEBUG] [Thread-197771] [transport.py] [_log()] userauth is OK
2026-04-12T23:28:42.612 [DEBUG] [Thread-197771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:28:42.612 [DEBUG] [Thread-197771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:28:42.613 [DEBUG] [Thread-197771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:28:42.613 [DEBUG] [Thread-197771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:28:42.630 [INFO] [Thread-197771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:28:42.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:28:43.361 [DEBUG] [Thread-197771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:28:43.362 [DEBUG] [Thread-197771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:28:43.362 [DEBUG] [Thread-197771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:28:43.403 [DEBUG] [Thread-197771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:28:43.403 [DEBUG] [Thread-197771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:28:43.407 [DEBUG] [Thread-197771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:28:43.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:28:43.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:28:43.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:28:43.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:28:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:28:43.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:28:43.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:28:43.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:28:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:28:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.894201 -999.00  +11.00   4.09     92   +9.80 1 2 1 3 1     0    0 1.11 -5.36 .NE.. 4.1 4.1 197.0 4.9 11.8 -22.3 11.7 -21.3 11.4 -19.3 11.7 -21.1
2026-04-12T23:28:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:28:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:28:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.894201
2026-04-12T23:28:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:28:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:28:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:28:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:28:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:28:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:28:11', tmtdew=0.328355, humidity=97.6471, cloud=0.0, wind=5.66496, temperature=10.8008, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:27:38.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:28:43.430 [DEBUG] [Thread-197771] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:28:43.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:28:43.523 [DEBUG] [Thread-197774] [transport.py] [_log()] starting thread (client mode): 0xb0f8ffd0
2026-04-12T23:28:43.523 [DEBUG] [Thread-197774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:28:43.544 [DEBUG] [Thread-197774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:28:43.545 [INFO] [Thread-197774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:28:43.552 [DEBUG] [Thread-197774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:28:43.552 [DEBUG] [Thread-197774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:28:43.552 [DEBUG] [Thread-197774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] client lang: <none>
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] server lang: <none>
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] kex follows: False
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:28:43.553 [DEBUG] [Thread-197774] [transport.py] [_log()] Compression: none
2026-04-12T23:28:43.554 [DEBUG] [Thread-197774] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:28:43.612 [DEBUG] [Thread-197774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:28:43.613 [DEBUG] [Thread-197774] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:28:43.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:28:43.614 [DEBUG] [Thread-197774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:28:43.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:28:43.671 [DEBUG] [Thread-197774] [transport.py] [_log()] userauth is OK
2026-04-12T23:28:43.672 [DEBUG] [Thread-197774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:28:43.672 [DEBUG] [Thread-197774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:28:43.672 [DEBUG] [Thread-197774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:28:43.672 [DEBUG] [Thread-197774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:28:43.695 [INFO] [Thread-197774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:28:43.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:28:43.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:28:44.529 [DEBUG] [Thread-197774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:28:44.529 [DEBUG] [Thread-197774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:28:44.577 [DEBUG] [Thread-197774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:28:44.577 [DEBUG] [Thread-197774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:28:44.586 [DEBUG] [Thread-197774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:28:44.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:28:44.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:28:44.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:28:44.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:28:44.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:28:44.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:28:44.624 [DEBUG] [Thread-197774] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:28:45.488 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:28:45.489 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:28:46.277 [DEBUG] [Thread-197776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:01.339 [DEBUG] [Thread-197777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:14.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:29:14.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:29:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:29:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 28, 47), 0.56226, 96.2609, 0.0, 7.83576, 10.9011, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:29:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:28:47
2026-04-12T23:29:16.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:29:16.373 [DEBUG] [Thread-197778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:16.474 [DEBUG] [Thread-197779] [transport.py] [_log()] starting thread (client mode): 0xb0f6ddb0
2026-04-12T23:29:16.474 [DEBUG] [Thread-197779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:29:16.494 [DEBUG] [Thread-197779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:29:16.494 [INFO] [Thread-197779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:29:16.497 [DEBUG] [Thread-197779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:29:16.497 [DEBUG] [Thread-197779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:29:16.497 [DEBUG] [Thread-197779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:29:16.497 [DEBUG] [Thread-197779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:16.497 [DEBUG] [Thread-197779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:16.497 [DEBUG] [Thread-197779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] client lang: <none>
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] server lang: <none>
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] kex follows: False
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] Compression: none
2026-04-12T23:29:16.498 [DEBUG] [Thread-197779] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:29:16.515 [DEBUG] [Thread-197779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:29:16.515 [DEBUG] [Thread-197779] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:29:16.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:29:16.516 [DEBUG] [Thread-197779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:29:16.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:29:16.518 [DEBUG] [Thread-197779] [transport.py] [_log()] userauth is OK
2026-04-12T23:29:16.518 [DEBUG] [Thread-197779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:29:16.518 [DEBUG] [Thread-197779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:29:16.518 [DEBUG] [Thread-197779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:29:16.518 [DEBUG] [Thread-197779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:29:16.535 [INFO] [Thread-197779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:29:16.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:29:17.339 [DEBUG] [Thread-197779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:29:17.339 [DEBUG] [Thread-197779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:29:17.339 [DEBUG] [Thread-197779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:29:17.380 [DEBUG] [Thread-197779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:29:17.380 [DEBUG] [Thread-197779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:29:17.383 [DEBUG] [Thread-197779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:29:17.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:29:17.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:29:17.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:29:17.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:29:17.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:29:17.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:29:17.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:29:17.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:29:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:29:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.894894 -999.00  +11.00   4.00     92   +9.80 1 2 1 3 1     0    0 1.10 -6.40 .NE.. 4.0 4.0 203.8 4.8 11.8 -22.3 11.7 -21.2 11.4 -19.3 11.6 -21.2
2026-04-12T23:29:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:29:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:29:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.894894
2026-04-12T23:29:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:29:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:29:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:29:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:29:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:29:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:28:47', tmtdew=0.56226, humidity=96.2609, cloud=0.0, wind=7.83576, temperature=10.9011, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:28:38.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:29:17.408 [DEBUG] [Thread-197779] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:29:17.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:29:17.504 [DEBUG] [Thread-197782] [transport.py] [_log()] starting thread (client mode): 0xae50b850
2026-04-12T23:29:17.505 [DEBUG] [Thread-197782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:29:17.519 [DEBUG] [Thread-197782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:29:17.520 [INFO] [Thread-197782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] client lang: <none>
2026-04-12T23:29:17.527 [DEBUG] [Thread-197782] [transport.py] [_log()] server lang: <none>
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] kex follows: False
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] Compression: none
2026-04-12T23:29:17.528 [DEBUG] [Thread-197782] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:29:17.587 [DEBUG] [Thread-197782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:29:17.588 [DEBUG] [Thread-197782] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:29:17.588 [DEBUG] [Thread-197782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:29:17.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:29:17.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:29:17.644 [DEBUG] [Thread-197782] [transport.py] [_log()] userauth is OK
2026-04-12T23:29:17.644 [DEBUG] [Thread-197782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:29:17.644 [DEBUG] [Thread-197782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:29:17.644 [DEBUG] [Thread-197782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:29:17.644 [DEBUG] [Thread-197782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:29:17.663 [INFO] [Thread-197782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:29:17.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:29:17.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:29:18.480 [DEBUG] [Thread-197782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:29:18.480 [DEBUG] [Thread-197782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:29:18.528 [DEBUG] [Thread-197782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:29:18.528 [DEBUG] [Thread-197782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:29:18.537 [DEBUG] [Thread-197782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:29:18.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:29:18.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:29:18.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:29:18.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:29:18.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:29:18.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:29:18.571 [DEBUG] [Thread-197782] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:29:20.568 [DEBUG] [Thread-197784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:31.405 [DEBUG] [Thread-197785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:45.697 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:45.698 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:46.457 [DEBUG] [Thread-197786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:29:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:29:48.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:29:48.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:29:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 29, 22), 0.32597, 97.6636, 0.0, 5.7708, 10.8505, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:29:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:29:22
2026-04-12T23:29:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:29:50.517 [DEBUG] [Thread-197787] [transport.py] [_log()] starting thread (client mode): 0xae5a4490
2026-04-12T23:29:50.517 [DEBUG] [Thread-197787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:29:50.536 [DEBUG] [Thread-197787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:29:50.537 [INFO] [Thread-197787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] client lang: <none>
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] server lang: <none>
2026-04-12T23:29:50.540 [DEBUG] [Thread-197787] [transport.py] [_log()] kex follows: False
2026-04-12T23:29:50.541 [DEBUG] [Thread-197787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:29:50.541 [DEBUG] [Thread-197787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:29:50.541 [DEBUG] [Thread-197787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:29:50.541 [DEBUG] [Thread-197787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:29:50.541 [DEBUG] [Thread-197787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:29:50.541 [DEBUG] [Thread-197787] [transport.py] [_log()] Compression: none
2026-04-12T23:29:50.541 [DEBUG] [Thread-197787] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:29:50.559 [DEBUG] [Thread-197787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:29:50.559 [DEBUG] [Thread-197787] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:29:50.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:29:50.561 [DEBUG] [Thread-197787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:29:50.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:29:50.563 [DEBUG] [Thread-197787] [transport.py] [_log()] userauth is OK
2026-04-12T23:29:50.564 [DEBUG] [Thread-197787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:29:50.564 [DEBUG] [Thread-197787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:29:50.564 [DEBUG] [Thread-197787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:29:50.564 [DEBUG] [Thread-197787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:29:50.588 [INFO] [Thread-197787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:29:50.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:29:51.390 [DEBUG] [Thread-197787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:29:51.390 [DEBUG] [Thread-197787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:29:51.391 [DEBUG] [Thread-197787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:29:51.431 [DEBUG] [Thread-197787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:29:51.431 [DEBUG] [Thread-197787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:29:51.435 [DEBUG] [Thread-197787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:29:51.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:29:51.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:29:51.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:29:51.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:29:51.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:29:51.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:29:51.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:29:51.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:29:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:29:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.895241 -999.00  +11.00   4.13     92   +9.80 1 2 1 3 1     0    0 1.10 -6.29 .NE.. 4.1 4.1 203.8 4.8 11.8 -22.5 11.7 -21.4 11.4 -19.3 11.7 -21.3
2026-04-12T23:29:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:29:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:29:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.895241
2026-04-12T23:29:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:29:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:29:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:29:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:29:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:29:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:29:22', tmtdew=0.32597, humidity=97.6636, cloud=0.0, wind=5.7708, temperature=10.8505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:29:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:29:51.463 [DEBUG] [Thread-197787] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:29:51.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:29:51.556 [DEBUG] [Thread-197790] [transport.py] [_log()] starting thread (client mode): 0xa79b5cf0
2026-04-12T23:29:51.556 [DEBUG] [Thread-197790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:29:51.572 [DEBUG] [Thread-197790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:29:51.572 [INFO] [Thread-197790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:29:51.580 [DEBUG] [Thread-197790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:29:51.580 [DEBUG] [Thread-197790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:29:51.580 [DEBUG] [Thread-197790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:29:51.580 [DEBUG] [Thread-197790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:51.580 [DEBUG] [Thread-197790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] client lang: <none>
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] server lang: <none>
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] kex follows: False
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] Compression: none
2026-04-12T23:29:51.581 [DEBUG] [Thread-197790] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:29:51.640 [DEBUG] [Thread-197790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:29:51.641 [DEBUG] [Thread-197790] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:29:51.642 [DEBUG] [Thread-197790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:29:51.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:29:51.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:29:51.697 [DEBUG] [Thread-197790] [transport.py] [_log()] userauth is OK
2026-04-12T23:29:51.697 [DEBUG] [Thread-197790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:29:51.698 [DEBUG] [Thread-197790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:29:51.698 [DEBUG] [Thread-197790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:29:51.698 [DEBUG] [Thread-197790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:29:51.719 [INFO] [Thread-197790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:29:51.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:29:51.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:29:52.592 [DEBUG] [Thread-197790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:29:52.592 [DEBUG] [Thread-197790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:29:52.641 [DEBUG] [Thread-197790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:29:52.641 [DEBUG] [Thread-197790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:29:52.650 [DEBUG] [Thread-197790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:29:52.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:29:52.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:29:52.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:29:52.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:29:52.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:29:52.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:29:52.689 [DEBUG] [Thread-197790] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:30:01.494 [DEBUG] [Thread-197792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:30:16.540 [DEBUG] [Thread-197793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:30:20.645 [DEBUG] [Thread-197794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:30:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:30:22.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:30:22.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:30:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 29, 58), 0.33114, 97.6303, 0.0, 5.859, 10.8505, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:30:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:29:58
2026-04-12T23:30:24.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:30:24.565 [DEBUG] [Thread-197795] [transport.py] [_log()] starting thread (client mode): 0xa79b44f0
2026-04-12T23:30:24.565 [DEBUG] [Thread-197795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:30:24.587 [DEBUG] [Thread-197795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:30:24.587 [INFO] [Thread-197795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:30:24.591 [DEBUG] [Thread-197795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:30:24.591 [DEBUG] [Thread-197795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:30:24.591 [DEBUG] [Thread-197795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:30:24.591 [DEBUG] [Thread-197795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:24.591 [DEBUG] [Thread-197795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:24.591 [DEBUG] [Thread-197795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:24.591 [DEBUG] [Thread-197795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] client lang: <none>
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] server lang: <none>
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] kex follows: False
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:30:24.592 [DEBUG] [Thread-197795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:30:24.593 [DEBUG] [Thread-197795] [transport.py] [_log()] Compression: none
2026-04-12T23:30:24.593 [DEBUG] [Thread-197795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:30:24.613 [DEBUG] [Thread-197795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:30:24.613 [DEBUG] [Thread-197795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:30:24.614 [DEBUG] [Thread-197795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:30:24.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:30:24.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:30:24.616 [DEBUG] [Thread-197795] [transport.py] [_log()] userauth is OK
2026-04-12T23:30:24.616 [DEBUG] [Thread-197795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:30:24.617 [DEBUG] [Thread-197795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:30:24.617 [DEBUG] [Thread-197795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:30:24.617 [DEBUG] [Thread-197795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:30:24.637 [INFO] [Thread-197795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:30:24.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:30:25.795 [DEBUG] [Thread-197795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:30:25.796 [DEBUG] [Thread-197795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:30:25.796 [DEBUG] [Thread-197795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:30:25.837 [DEBUG] [Thread-197795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:30:25.837 [DEBUG] [Thread-197795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:30:25.840 [DEBUG] [Thread-197795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:30:25.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:30:25.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:30:25.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:30:25.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:30:25.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:30:25.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:30:25.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.895589 -999.00  +11.00   3.26     92   +9.80 1 2 1 3 1     0    0 1.04 -6.90 .NE.. 3.3 3.3 194.2 5.7 11.8 -22.4 11.7 -21.2 11.3 -19.3 11.7 -21.4
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.895589
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:30:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:30:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:29:58', tmtdew=0.33114, humidity=97.6303, cloud=0.0, wind=5.859, temperature=10.8505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:29:38.890', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:30:25.863 [DEBUG] [Thread-197795] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:30:25.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:30:25.945 [DEBUG] [Thread-197798] [transport.py] [_log()] starting thread (client mode): 0xb0f43c40
2026-04-12T23:30:25.945 [DEBUG] [Thread-197798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:30:25.961 [DEBUG] [Thread-197798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:30:25.961 [INFO] [Thread-197798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:30:25.969 [DEBUG] [Thread-197798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:30:25.969 [DEBUG] [Thread-197798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:30:25.969 [DEBUG] [Thread-197798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:30:25.969 [DEBUG] [Thread-197798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:25.969 [DEBUG] [Thread-197798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] client lang: <none>
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] server lang: <none>
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] kex follows: False
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] Compression: none
2026-04-12T23:30:25.970 [DEBUG] [Thread-197798] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:30:26.029 [DEBUG] [Thread-197798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:30:26.030 [DEBUG] [Thread-197798] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:30:26.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:30:26.031 [DEBUG] [Thread-197798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:30:26.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:30:26.090 [DEBUG] [Thread-197798] [transport.py] [_log()] userauth is OK
2026-04-12T23:30:26.090 [DEBUG] [Thread-197798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:30:26.090 [DEBUG] [Thread-197798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:30:26.090 [DEBUG] [Thread-197798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:30:26.091 [DEBUG] [Thread-197798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:30:26.111 [INFO] [Thread-197798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:30:26.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:30:26.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:30:26.910 [DEBUG] [Thread-197798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:30:26.910 [DEBUG] [Thread-197798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:30:26.958 [DEBUG] [Thread-197798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:30:26.958 [DEBUG] [Thread-197798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:30:26.968 [DEBUG] [Thread-197798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:30:26.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:30:26.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:30:26.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:30:26.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:30:26.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:30:26.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:30:27.007 [DEBUG] [Thread-197798] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:30:31.578 [DEBUG] [Thread-197800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:30:45.905 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:30:45.906 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:30:46.629 [DEBUG] [Thread-197801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:30:57.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:30:57.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:30:57.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:30:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 30, 33), 0.56241, 96.2607, 0.0, 7.97688, 10.9341, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:30:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:30:33
2026-04-12T23:30:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:30:58.904 [DEBUG] [Thread-197802] [transport.py] [_log()] starting thread (client mode): 0xb0f425c0
2026-04-12T23:30:58.904 [DEBUG] [Thread-197802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:30:58.923 [DEBUG] [Thread-197802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:30:58.924 [INFO] [Thread-197802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] client lang: <none>
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] server lang: <none>
2026-04-12T23:30:58.927 [DEBUG] [Thread-197802] [transport.py] [_log()] kex follows: False
2026-04-12T23:30:58.928 [DEBUG] [Thread-197802] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:30:58.928 [DEBUG] [Thread-197802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:30:58.928 [DEBUG] [Thread-197802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:30:58.928 [DEBUG] [Thread-197802] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:30:58.928 [DEBUG] [Thread-197802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:30:58.928 [DEBUG] [Thread-197802] [transport.py] [_log()] Compression: none
2026-04-12T23:30:58.928 [DEBUG] [Thread-197802] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:30:58.947 [DEBUG] [Thread-197802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:30:58.948 [DEBUG] [Thread-197802] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:30:58.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:30:58.949 [DEBUG] [Thread-197802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:30:58.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:30:58.952 [DEBUG] [Thread-197802] [transport.py] [_log()] userauth is OK
2026-04-12T23:30:58.952 [DEBUG] [Thread-197802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:30:58.953 [DEBUG] [Thread-197802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:30:58.953 [DEBUG] [Thread-197802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:30:58.953 [DEBUG] [Thread-197802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:30:58.975 [INFO] [Thread-197802] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:30:58.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:30:59.751 [DEBUG] [Thread-197802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:30:59.751 [DEBUG] [Thread-197802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:30:59.752 [DEBUG] [Thread-197802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:30:59.792 [DEBUG] [Thread-197802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:30:59.792 [DEBUG] [Thread-197802] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:30:59.796 [DEBUG] [Thread-197802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:30:59.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:30:59.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:30:59.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:30:59.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:30:59.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:30:59.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:30:59.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:30:59.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:30:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:30:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.895935 -999.00  +11.00   3.26     92   +9.80 1 2 1 3 1     0    0 0.99 -7.59 ..E.. 3.3 3.3 214.0 4.7 11.8 -22.4 11.6 -21.2 11.4 -19.3 11.6 -21.3
2026-04-12T23:30:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:30:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:30:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.895935
2026-04-12T23:30:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:30:59.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:30:59.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:30:59.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:30:59.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:30:59.824 [DEBUG] [Thread-197802] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:30:59.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:30:33', tmtdew=0.56241, humidity=96.2607, cloud=0.0, wind=7.97688, temperature=10.9341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:30:08.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:30:59.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:30:59.928 [DEBUG] [Thread-197805] [transport.py] [_log()] starting thread (client mode): 0xa794a1a0
2026-04-12T23:30:59.928 [DEBUG] [Thread-197805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:30:59.942 [DEBUG] [Thread-197805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:30:59.942 [INFO] [Thread-197805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:30:59.950 [DEBUG] [Thread-197805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:30:59.950 [DEBUG] [Thread-197805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] client lang: <none>
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] server lang: <none>
2026-04-12T23:30:59.951 [DEBUG] [Thread-197805] [transport.py] [_log()] kex follows: False
2026-04-12T23:30:59.952 [DEBUG] [Thread-197805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:30:59.952 [DEBUG] [Thread-197805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:30:59.952 [DEBUG] [Thread-197805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:30:59.952 [DEBUG] [Thread-197805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:30:59.952 [DEBUG] [Thread-197805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:30:59.952 [DEBUG] [Thread-197805] [transport.py] [_log()] Compression: none
2026-04-12T23:30:59.952 [DEBUG] [Thread-197805] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:31:00.010 [DEBUG] [Thread-197805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:31:00.011 [DEBUG] [Thread-197805] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:31:00.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:31:00.012 [DEBUG] [Thread-197805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:31:00.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:31:00.069 [DEBUG] [Thread-197805] [transport.py] [_log()] userauth is OK
2026-04-12T23:31:00.069 [DEBUG] [Thread-197805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:31:00.069 [DEBUG] [Thread-197805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:31:00.069 [DEBUG] [Thread-197805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:31:00.069 [DEBUG] [Thread-197805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:31:00.093 [INFO] [Thread-197805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:31:00.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:31:00.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:31:00.924 [DEBUG] [Thread-197805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:31:00.924 [DEBUG] [Thread-197805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:31:00.971 [DEBUG] [Thread-197805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:31:00.971 [DEBUG] [Thread-197805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:31:00.980 [DEBUG] [Thread-197805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:31:00.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:31:00.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:31:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:31:01.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:31:01.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:31:01.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:31:01.012 [DEBUG] [Thread-197805] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:31:01.664 [DEBUG] [Thread-197807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:31:16.715 [DEBUG] [Thread-197808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:31:20.711 [DEBUG] [Thread-197809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:31:31.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:31:31.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:31:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:31:31.750 [DEBUG] [Thread-197810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:31:32.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 31, 9), 0.331275, 97.6303, 0.0, 7.87068, 10.8836, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:31:32.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:31:09
2026-04-12T23:31:32.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:31:32.858 [DEBUG] [Thread-197811] [transport.py] [_log()] starting thread (client mode): 0xa794a2c0
2026-04-12T23:31:32.858 [DEBUG] [Thread-197811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:31:32.870 [DEBUG] [Thread-197811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:31:32.870 [INFO] [Thread-197811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:31:32.873 [DEBUG] [Thread-197811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:31:32.873 [DEBUG] [Thread-197811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] client lang: <none>
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] server lang: <none>
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] kex follows: False
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] Compression: none
2026-04-12T23:31:32.874 [DEBUG] [Thread-197811] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:31:32.885 [DEBUG] [Thread-197811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:31:32.886 [DEBUG] [Thread-197811] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:31:32.886 [DEBUG] [Thread-197811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:31:32.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:31:32.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:31:32.887 [DEBUG] [Thread-197811] [transport.py] [_log()] userauth is OK
2026-04-12T23:31:32.887 [DEBUG] [Thread-197811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:31:32.888 [DEBUG] [Thread-197811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:31:32.888 [DEBUG] [Thread-197811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:31:32.888 [DEBUG] [Thread-197811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:31:32.904 [INFO] [Thread-197811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:31:32.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:31:33.677 [DEBUG] [Thread-197811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:31:33.677 [DEBUG] [Thread-197811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:31:33.677 [DEBUG] [Thread-197811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:31:33.718 [DEBUG] [Thread-197811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:31:33.718 [DEBUG] [Thread-197811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:31:33.720 [DEBUG] [Thread-197811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:31:33.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:31:33.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:31:33.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:31:33.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:31:33.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:31:33.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:31:33.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:31:33.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:31:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:31:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.896283 -999.00  +11.00   2.91     92   +9.80 1 2 1 3 1     0    0 1.01 -7.37 ..E.. 2.9 2.9 212.0 4.5 11.8 -22.2 11.7 -21.3 11.4 -19.2 11.6 -21.3
2026-04-12T23:31:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:31:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:31:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.896283
2026-04-12T23:31:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:31:33.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:31:33.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:31:33.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:31:33.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:31:33.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:31:09', tmtdew=0.331275, humidity=97.6303, cloud=0.0, wind=7.87068, temperature=10.8836, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:30:38.851', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:31:33.744 [DEBUG] [Thread-197811] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:31:33.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:31:33.839 [DEBUG] [Thread-197814] [transport.py] [_log()] starting thread (client mode): 0xb0f43820
2026-04-12T23:31:33.839 [DEBUG] [Thread-197814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:31:33.855 [DEBUG] [Thread-197814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:31:33.855 [INFO] [Thread-197814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:31:33.862 [DEBUG] [Thread-197814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:31:33.862 [DEBUG] [Thread-197814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:31:33.862 [DEBUG] [Thread-197814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:31:33.862 [DEBUG] [Thread-197814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:31:33.862 [DEBUG] [Thread-197814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] client lang: <none>
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] server lang: <none>
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] kex follows: False
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] Compression: none
2026-04-12T23:31:33.863 [DEBUG] [Thread-197814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:31:33.922 [DEBUG] [Thread-197814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:31:33.923 [DEBUG] [Thread-197814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:31:33.923 [DEBUG] [Thread-197814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:31:33.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:31:33.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:31:33.978 [DEBUG] [Thread-197814] [transport.py] [_log()] userauth is OK
2026-04-12T23:31:33.978 [DEBUG] [Thread-197814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:31:33.978 [DEBUG] [Thread-197814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:31:33.978 [DEBUG] [Thread-197814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:31:33.978 [DEBUG] [Thread-197814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:31:33.999 [INFO] [Thread-197814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:31:34.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:31:34.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:31:34.845 [DEBUG] [Thread-197814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:31:34.845 [DEBUG] [Thread-197814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:31:34.893 [DEBUG] [Thread-197814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:31:34.893 [DEBUG] [Thread-197814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:31:34.904 [DEBUG] [Thread-197814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:31:34.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:31:34.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:31:34.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
2026-04-12T23:31:34.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:31:34.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:31:34.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:31:34.939 [DEBUG] [Thread-197814] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:31:46.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:31:46.113 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:31:46.789 [DEBUG] [Thread-197816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:32:01.844 [DEBUG] [Thread-197817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:32:04.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:32:04.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:32:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:32:06.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 31, 44), 0.57288, 96.1942, 0.0, 6.7068, 10.9672, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:32:06.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:31:44
2026-04-12T23:32:06.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:32:06.838 [DEBUG] [Thread-197818] [transport.py] [_log()] starting thread (client mode): 0xae5b2e00
2026-04-12T23:32:06.838 [DEBUG] [Thread-197818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:32:06.859 [DEBUG] [Thread-197818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:32:06.859 [INFO] [Thread-197818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:32:06.862 [DEBUG] [Thread-197818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] client lang: <none>
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] server lang: <none>
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] kex follows: False
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] Compression: none
2026-04-12T23:32:06.863 [DEBUG] [Thread-197818] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:32:06.882 [DEBUG] [Thread-197818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:32:06.883 [DEBUG] [Thread-197818] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:32:06.884 [DEBUG] [Thread-197818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:32:06.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:32:06.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:32:06.886 [DEBUG] [Thread-197818] [transport.py] [_log()] userauth is OK
2026-04-12T23:32:06.886 [DEBUG] [Thread-197818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:32:06.886 [DEBUG] [Thread-197818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:32:06.886 [DEBUG] [Thread-197818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:32:06.887 [DEBUG] [Thread-197818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:32:06.911 [INFO] [Thread-197818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:32:06.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:32:07.693 [DEBUG] [Thread-197818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:32:07.694 [DEBUG] [Thread-197818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:32:07.694 [DEBUG] [Thread-197818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:32:07.734 [DEBUG] [Thread-197818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:32:07.735 [DEBUG] [Thread-197818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:32:07.737 [DEBUG] [Thread-197818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:32:07.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:32:07.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:32:07.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:32:07.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:32:07.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:32:07.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:32:07.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:32:07.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:32:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:32:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.896630 -999.00  +11.00   4.02     92   +9.70 1 2 1 3 1     0    0 1.02 -7.31 ..E.. 4.0 4.0 221.6 5.2 11.7 -22.3 11.6 -21.1 11.3 -19.2 11.6 -21.2
2026-04-12T23:32:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:32:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:32:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.896630
2026-04-12T23:32:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:32:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:32:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:32:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:32:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:32:07.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:31:44', tmtdew=0.57288, humidity=96.1942, cloud=0.0, wind=6.7068, temperature=10.9672, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:31:08.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:32:07.758 [DEBUG] [Thread-197818] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:32:07.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:32:07.858 [DEBUG] [Thread-197821] [transport.py] [_log()] starting thread (client mode): 0xa795a500
2026-04-12T23:32:07.858 [DEBUG] [Thread-197821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:32:07.872 [DEBUG] [Thread-197821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:32:07.872 [INFO] [Thread-197821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] client lang: <none>
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] server lang: <none>
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] kex follows: False
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] Compression: none
2026-04-12T23:32:07.880 [DEBUG] [Thread-197821] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:32:07.939 [DEBUG] [Thread-197821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:32:07.940 [DEBUG] [Thread-197821] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:32:07.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:32:07.941 [DEBUG] [Thread-197821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:32:07.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:32:07.998 [DEBUG] [Thread-197821] [transport.py] [_log()] userauth is OK
2026-04-12T23:32:07.998 [DEBUG] [Thread-197821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:32:07.998 [DEBUG] [Thread-197821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:32:07.998 [DEBUG] [Thread-197821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:32:07.999 [DEBUG] [Thread-197821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:32:08.018 [INFO] [Thread-197821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:32:08.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:32:08.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:32:08.869 [DEBUG] [Thread-197821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:32:08.869 [DEBUG] [Thread-197821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:32:08.917 [DEBUG] [Thread-197821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:32:08.917 [DEBUG] [Thread-197821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:32:08.927 [DEBUG] [Thread-197821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:32:08.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:32:08.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:32:08.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:32:08.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:32:08.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:32:08.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:32:08.966 [DEBUG] [Thread-197821] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:32:16.883 [DEBUG] [Thread-197823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:32:20.791 [DEBUG] [Thread-197824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:32:31.936 [DEBUG] [Thread-197825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:32:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:32:38.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:32:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:32:40.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 32, 20), 0.341495, 97.5643, 0.0, 5.25924, 10.8673, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:32:40.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:32:20
2026-04-12T23:32:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:32:40.783 [DEBUG] [Thread-197826] [transport.py] [_log()] starting thread (client mode): 0xae50a080
2026-04-12T23:32:40.783 [DEBUG] [Thread-197826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:32:40.803 [DEBUG] [Thread-197826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:32:40.803 [INFO] [Thread-197826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] client lang: <none>
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] server lang: <none>
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] kex follows: False
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] Compression: none
2026-04-12T23:32:40.806 [DEBUG] [Thread-197826] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:32:40.823 [DEBUG] [Thread-197826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:32:40.824 [DEBUG] [Thread-197826] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:32:40.824 [DEBUG] [Thread-197826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:32:40.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:32:40.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:32:40.826 [DEBUG] [Thread-197826] [transport.py] [_log()] userauth is OK
2026-04-12T23:32:40.826 [DEBUG] [Thread-197826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:32:40.826 [DEBUG] [Thread-197826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:32:40.826 [DEBUG] [Thread-197826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:32:40.826 [DEBUG] [Thread-197826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:32:40.843 [INFO] [Thread-197826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:32:40.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:32:41.569 [DEBUG] [Thread-197826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:32:41.570 [DEBUG] [Thread-197826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:32:41.570 [DEBUG] [Thread-197826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:32:41.611 [DEBUG] [Thread-197826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:32:41.611 [DEBUG] [Thread-197826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:32:41.615 [DEBUG] [Thread-197826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:32:41.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:32:41.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:32:41.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:32:41.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:32:41.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:32:41.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:32:41.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:32:41.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:32:41.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:32:41.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.896977 -999.00  +11.00   2.11     92   +9.70 1 2 1 3 1     0    0 1.04 -7.79 ..E.. 2.1 2.1 306.2 6.9 11.8 -22.3 11.6 -21.1 11.3 -19.3 11.7 -21.2
2026-04-12T23:32:41.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:32:41.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:32:41.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.896977
2026-04-12T23:32:41.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:32:41.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:32:41.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:32:41.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:32:41.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:32:41.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:32:20', tmtdew=0.341495, humidity=97.5643, cloud=0.0, wind=5.25924, temperature=10.8673, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:31:38.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.111249999999999, 3.0255, nan, nan, nan, nan, nan, 2.561, nan, nan, 2.6804999999999986, nan, nan, nan, nan, 0.8595000000000006, 0.7157499999999999, 0.7650000000000006, 0.7645, 0.8640000000000008, 2.4490000000000007, 2.078000000000001, 2.664249999999999], zp_timestamp='2026-04-12T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:32:41.642 [DEBUG] [Thread-197826] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:32:41.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:32:41.733 [DEBUG] [Thread-197829] [transport.py] [_log()] starting thread (client mode): 0xa79b6b30
2026-04-12T23:32:41.734 [DEBUG] [Thread-197829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:32:41.748 [DEBUG] [Thread-197829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:32:41.749 [INFO] [Thread-197829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:32:41.756 [DEBUG] [Thread-197829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:32:41.757 [DEBUG] [Thread-197829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] client lang: <none>
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] server lang: <none>
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] kex follows: False
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] Compression: none
2026-04-12T23:32:41.758 [DEBUG] [Thread-197829] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:32:41.815 [DEBUG] [Thread-197829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:32:41.815 [DEBUG] [Thread-197829] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:32:41.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:32:41.817 [DEBUG] [Thread-197829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:32:41.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:32:41.874 [DEBUG] [Thread-197829] [transport.py] [_log()] userauth is OK
2026-04-12T23:32:41.874 [DEBUG] [Thread-197829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:32:41.875 [DEBUG] [Thread-197829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:32:41.875 [DEBUG] [Thread-197829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:32:41.875 [DEBUG] [Thread-197829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:32:41.894 [INFO] [Thread-197829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:32:41.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:32:41.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:32:42.692 [DEBUG] [Thread-197829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:32:42.692 [DEBUG] [Thread-197829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:32:42.740 [DEBUG] [Thread-197829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:32:42.741 [DEBUG] [Thread-197829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:32:42.750 [DEBUG] [Thread-197829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:32:42.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:32:42.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:32:42.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:32:42.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:32:42.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:32:42.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:32:42.787 [DEBUG] [Thread-197829] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:32:46.317 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:32:46.318 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:32:46.975 [DEBUG] [Thread-197831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:02.030 [DEBUG] [Thread-197832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:33:12.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:33:12.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:33:14.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 32, 55), 0.341325, 97.5642, 0.0, 5.57676, 10.7674, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:33:14.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:32:55
2026-04-12T23:33:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:33:14.671 [DEBUG] [Thread-197833] [transport.py] [_log()] starting thread (client mode): 0xae509360
2026-04-12T23:33:14.671 [DEBUG] [Thread-197833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:33:14.691 [DEBUG] [Thread-197833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:33:14.691 [INFO] [Thread-197833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:14.694 [DEBUG] [Thread-197833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] client lang: <none>
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] server lang: <none>
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] kex follows: False
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] Compression: none
2026-04-12T23:33:14.695 [DEBUG] [Thread-197833] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:33:14.707 [DEBUG] [Thread-197833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:33:14.708 [DEBUG] [Thread-197833] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:33:14.708 [DEBUG] [Thread-197833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:33:14.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:33:14.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:33:14.711 [DEBUG] [Thread-197833] [transport.py] [_log()] userauth is OK
2026-04-12T23:33:14.711 [DEBUG] [Thread-197833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:33:14.711 [DEBUG] [Thread-197833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:33:14.711 [DEBUG] [Thread-197833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:33:14.711 [DEBUG] [Thread-197833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:33:14.731 [INFO] [Thread-197833] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:33:14.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:33:15.507 [DEBUG] [Thread-197833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:33:15.507 [DEBUG] [Thread-197833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:33:15.507 [DEBUG] [Thread-197833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:33:15.548 [DEBUG] [Thread-197833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:33:15.549 [DEBUG] [Thread-197833] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:33:15.552 [DEBUG] [Thread-197833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:33:15.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:33:15.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:33:15.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:33:15.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:33:15.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:33:15.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:33:15.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:33:15.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:33:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:33:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.897672 -999.00  +11.10   3.10     91   +9.80 1 2 1 3 1     0    0 0.98 -9.73 .NE.. 3.1 3.1 176.1 4.5 11.8 -22.2 11.7 -21.2 11.4 -19.1 11.6 -21.1
2026-04-12T23:33:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:33:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:33:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.897672
2026-04-12T23:33:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:33:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:33:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:33:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:33:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:33:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:32:55', tmtdew=0.341325, humidity=97.5642, cloud=0.0, wind=5.57676, temperature=10.7674, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:32:38.861', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8322500000000002, nan, nan, nan, nan, nan, nan, nan, 0.7752499999999998, 3.1499999999999995, nan, nan, nan, nan, nan, 2.3095, nan, nan, nan, nan, nan, nan, 2.9189999999999996, 0.6055000000000001, 0.4657499999999999, 0.5995000000000008, 0.7735000000000003, 1.665000000000001, 2.2490000000000006, 0.7715000000000005, 2.4662499999999987], zp_timestamp='2026-04-12T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:33:15.579 [DEBUG] [Thread-197833] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:33:15.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:33:15.672 [DEBUG] [Thread-197836] [transport.py] [_log()] starting thread (client mode): 0xae534460
2026-04-12T23:33:15.672 [DEBUG] [Thread-197836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:33:15.692 [DEBUG] [Thread-197836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:33:15.692 [INFO] [Thread-197836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:33:15.700 [DEBUG] [Thread-197836] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:33:15.700 [DEBUG] [Thread-197836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:33:15.701 [DEBUG] [Thread-197836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:33:15.701 [DEBUG] [Thread-197836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:15.701 [DEBUG] [Thread-197836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:15.701 [DEBUG] [Thread-197836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:15.701 [DEBUG] [Thread-197836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:15.701 [DEBUG] [Thread-197836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:33:15.701 [DEBUG] [Thread-197836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] client lang: <none>
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] server lang: <none>
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] kex follows: False
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:33:15.702 [DEBUG] [Thread-197836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:33:15.703 [DEBUG] [Thread-197836] [transport.py] [_log()] Compression: none
2026-04-12T23:33:15.703 [DEBUG] [Thread-197836] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:33:15.759 [DEBUG] [Thread-197836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:33:15.759 [DEBUG] [Thread-197836] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:33:15.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:33:15.760 [DEBUG] [Thread-197836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:33:15.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:33:15.814 [DEBUG] [Thread-197836] [transport.py] [_log()] userauth is OK
2026-04-12T23:33:15.814 [DEBUG] [Thread-197836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:33:15.814 [DEBUG] [Thread-197836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:33:15.814 [DEBUG] [Thread-197836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:33:15.814 [DEBUG] [Thread-197836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:33:15.828 [INFO] [Thread-197836] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:33:15.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:33:15.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:33:16.627 [DEBUG] [Thread-197836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:33:16.628 [DEBUG] [Thread-197836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:33:16.675 [DEBUG] [Thread-197836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:33:16.676 [DEBUG] [Thread-197836] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:33:16.685 [DEBUG] [Thread-197836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:33:16.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:33:16.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:33:16.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:33:16.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:33:16.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:33:16.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:33:16.720 [DEBUG] [Thread-197836] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:33:17.072 [DEBUG] [Thread-197838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:20.867 [DEBUG] [Thread-197839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:32.124 [DEBUG] [Thread-197840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:46.524 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:46.525 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:46.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:33:46.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:33:46.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:33:47.159 [DEBUG] [Thread-197841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:33:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 33, 31), 0.34636, 97.531, 0.0, 5.82372, 10.7342, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:33:48.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:33:31
2026-04-12T23:33:48.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:33:48.632 [DEBUG] [Thread-197842] [transport.py] [_log()] starting thread (client mode): 0xae537eb0
2026-04-12T23:33:48.632 [DEBUG] [Thread-197842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:33:48.653 [DEBUG] [Thread-197842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:33:48.653 [INFO] [Thread-197842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] client lang: <none>
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] server lang: <none>
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] kex follows: False
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] Compression: none
2026-04-12T23:33:48.654 [DEBUG] [Thread-197842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:33:48.669 [DEBUG] [Thread-197842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:33:48.669 [DEBUG] [Thread-197842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:33:48.669 [DEBUG] [Thread-197842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:33:48.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:33:48.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:33:48.670 [DEBUG] [Thread-197842] [transport.py] [_log()] userauth is OK
2026-04-12T23:33:48.670 [DEBUG] [Thread-197842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:33:48.670 [DEBUG] [Thread-197842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:33:48.670 [DEBUG] [Thread-197842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:33:48.670 [DEBUG] [Thread-197842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:33:48.685 [INFO] [Thread-197842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:33:48.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:33:49.472 [DEBUG] [Thread-197842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:33:49.472 [DEBUG] [Thread-197842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:33:49.472 [DEBUG] [Thread-197842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:33:49.513 [DEBUG] [Thread-197842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:33:49.514 [DEBUG] [Thread-197842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:33:49.517 [DEBUG] [Thread-197842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:33:49.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:33:49.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:33:49.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:33:49.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:33:49.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:33:49.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:33:49.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:33:49.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:33:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:33:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.898019 -999.00  +11.10   1.91     91   +9.80 1 2 1 3 1     0    0 0.96 -9.92 .NE.. 1.9 1.9 219.9 6.6 11.8 -22.3 11.7 -21.2 11.3 -19.2 11.7 -21.3
2026-04-12T23:33:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:33:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:33:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.898019
2026-04-12T23:33:49.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:33:49.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:33:49.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:33:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:33:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:33:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:33:31', tmtdew=0.34636, humidity=97.531, cloud=0.0, wind=5.82372, temperature=10.7342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:33:08.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8322500000000002, nan, nan, nan, nan, nan, nan, nan, 0.7752499999999998, 3.1499999999999995, nan, nan, nan, nan, nan, 2.3095, nan, nan, nan, nan, nan, nan, 2.9189999999999996, 0.6055000000000001, 0.4657499999999999, 0.5995000000000008, 0.7735000000000003, 1.665000000000001, 2.2490000000000006, 0.7715000000000005, 2.4662499999999987], zp_timestamp='2026-04-12T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:33:49.546 [DEBUG] [Thread-197842] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:33:49.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:33:49.648 [DEBUG] [Thread-197845] [transport.py] [_log()] starting thread (client mode): 0xae50a470
2026-04-12T23:33:49.649 [DEBUG] [Thread-197845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:33:49.665 [DEBUG] [Thread-197845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:33:49.665 [INFO] [Thread-197845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:33:49.673 [DEBUG] [Thread-197845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:33:49.673 [DEBUG] [Thread-197845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] client lang: <none>
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] server lang: <none>
2026-04-12T23:33:49.674 [DEBUG] [Thread-197845] [transport.py] [_log()] kex follows: False
2026-04-12T23:33:49.675 [DEBUG] [Thread-197845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:33:49.675 [DEBUG] [Thread-197845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:33:49.675 [DEBUG] [Thread-197845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:33:49.675 [DEBUG] [Thread-197845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:33:49.675 [DEBUG] [Thread-197845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:33:49.675 [DEBUG] [Thread-197845] [transport.py] [_log()] Compression: none
2026-04-12T23:33:49.675 [DEBUG] [Thread-197845] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:33:49.731 [DEBUG] [Thread-197845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:33:49.731 [DEBUG] [Thread-197845] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:33:49.732 [DEBUG] [Thread-197845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:33:49.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:33:49.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:33:49.787 [DEBUG] [Thread-197845] [transport.py] [_log()] userauth is OK
2026-04-12T23:33:49.788 [DEBUG] [Thread-197845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:33:49.788 [DEBUG] [Thread-197845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:33:49.788 [DEBUG] [Thread-197845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:33:49.788 [DEBUG] [Thread-197845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:33:49.806 [INFO] [Thread-197845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:33:49.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:33:49.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:33:50.655 [DEBUG] [Thread-197845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:33:50.655 [DEBUG] [Thread-197845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:33:50.703 [DEBUG] [Thread-197845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:33:50.704 [DEBUG] [Thread-197845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:33:50.715 [DEBUG] [Thread-197845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:33:50.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:33:50.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:33:50.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:33:50.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:33:50.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:33:50.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:33:50.753 [DEBUG] [Thread-197845] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:34:02.196 [DEBUG] [Thread-197847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:34:17.251 [DEBUG] [Thread-197848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:34:20.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:34:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:34:20.941 [DEBUG] [Thread-197849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:34:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 34, 6), 0.343605, 97.5479, 0.0, 5.78844, 10.7013, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:34:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:34:06
2026-04-12T23:34:22.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:34:22.646 [DEBUG] [Thread-197850] [transport.py] [_log()] starting thread (client mode): 0xae562f50
2026-04-12T23:34:22.646 [DEBUG] [Thread-197850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:34:22.667 [DEBUG] [Thread-197850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:34:22.667 [INFO] [Thread-197850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:34:22.671 [DEBUG] [Thread-197850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:34:22.671 [DEBUG] [Thread-197850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:34:22.671 [DEBUG] [Thread-197850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] client lang: <none>
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] server lang: <none>
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] kex follows: False
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:34:22.672 [DEBUG] [Thread-197850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:34:22.673 [DEBUG] [Thread-197850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:34:22.673 [DEBUG] [Thread-197850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:34:22.673 [DEBUG] [Thread-197850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:34:22.673 [DEBUG] [Thread-197850] [transport.py] [_log()] Compression: none
2026-04-12T23:34:22.673 [DEBUG] [Thread-197850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:34:22.691 [DEBUG] [Thread-197850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:34:22.692 [DEBUG] [Thread-197850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:34:22.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:34:22.693 [DEBUG] [Thread-197850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:34:22.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:34:22.695 [DEBUG] [Thread-197850] [transport.py] [_log()] userauth is OK
2026-04-12T23:34:22.695 [DEBUG] [Thread-197850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:34:22.695 [DEBUG] [Thread-197850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:34:22.696 [DEBUG] [Thread-197850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:34:22.696 [DEBUG] [Thread-197850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:34:22.719 [INFO] [Thread-197850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:34:22.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:34:23.488 [DEBUG] [Thread-197850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:34:23.489 [DEBUG] [Thread-197850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:34:23.498 [DEBUG] [Thread-197850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:34:23.530 [DEBUG] [Thread-197850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:34:23.530 [DEBUG] [Thread-197850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:34:23.534 [DEBUG] [Thread-197850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:34:23.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:34:23.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:34:23.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:34:23.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:34:23.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:34:23.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:34:23.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:34:23.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:34:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:34:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.898366 -999.00  +11.10   2.24     91   +9.80 1 2 1 3 1     0    0 0.92 -9.61 .NE.. 2.2 2.2 241.0 2.8 11.8 -22.3 11.6 -21.3 11.3 -19.3 11.7 -21.3
2026-04-12T23:34:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:34:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:34:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.898366
2026-04-12T23:34:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:34:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:34:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:34:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:34:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:34:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:34:06', tmtdew=0.343605, humidity=97.5479, cloud=0.0, wind=5.78844, temperature=10.7013, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:33:38.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8322500000000002, nan, nan, nan, nan, nan, nan, nan, 0.7752499999999998, 3.1499999999999995, nan, nan, nan, nan, nan, 2.3095, nan, nan, nan, nan, nan, nan, 2.9189999999999996, 0.6055000000000001, 0.4657499999999999, 0.5995000000000008, 0.7735000000000003, 1.665000000000001, 2.2490000000000006, 0.7715000000000005, 2.4662499999999987], zp_timestamp='2026-04-12T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:34:23.562 [DEBUG] [Thread-197850] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:34:23.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:34:23.655 [DEBUG] [Thread-197853] [transport.py] [_log()] starting thread (client mode): 0xae5630d0
2026-04-12T23:34:23.655 [DEBUG] [Thread-197853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:34:23.670 [DEBUG] [Thread-197853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:34:23.670 [INFO] [Thread-197853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:34:23.678 [DEBUG] [Thread-197853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:34:23.678 [DEBUG] [Thread-197853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:34:23.678 [DEBUG] [Thread-197853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:34:23.678 [DEBUG] [Thread-197853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:23.678 [DEBUG] [Thread-197853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:23.678 [DEBUG] [Thread-197853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] client lang: <none>
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] server lang: <none>
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] kex follows: False
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:34:23.679 [DEBUG] [Thread-197853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:34:23.680 [DEBUG] [Thread-197853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:34:23.680 [DEBUG] [Thread-197853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:34:23.680 [DEBUG] [Thread-197853] [transport.py] [_log()] Compression: none
2026-04-12T23:34:23.680 [DEBUG] [Thread-197853] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:34:23.736 [DEBUG] [Thread-197853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:34:23.737 [DEBUG] [Thread-197853] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:34:23.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:34:23.739 [DEBUG] [Thread-197853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:34:23.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:34:23.796 [DEBUG] [Thread-197853] [transport.py] [_log()] userauth is OK
2026-04-12T23:34:23.796 [DEBUG] [Thread-197853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:34:23.797 [DEBUG] [Thread-197853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:34:23.797 [DEBUG] [Thread-197853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:34:23.797 [DEBUG] [Thread-197853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:34:23.816 [INFO] [Thread-197853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:34:23.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:34:23.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:34:24.632 [DEBUG] [Thread-197853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:34:24.633 [DEBUG] [Thread-197853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:34:24.680 [DEBUG] [Thread-197853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:34:24.680 [DEBUG] [Thread-197853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:34:24.690 [DEBUG] [Thread-197853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:34:24.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:34:24.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:34:24.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:34:24.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:34:24.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:34:24.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:34:24.728 [DEBUG] [Thread-197853] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:34:32.288 [DEBUG] [Thread-197855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:34:46.731 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:34:46.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:34:47.341 [DEBUG] [Thread-197856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:34:54.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:34:54.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:34:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:34:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 34, 42), 0.59263, 96.0626, 0.0, 7.9416, 10.7689, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:34:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:34:42
2026-04-12T23:34:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:34:56.919 [DEBUG] [Thread-197857] [transport.py] [_log()] starting thread (client mode): 0xa79587c0
2026-04-12T23:34:56.919 [DEBUG] [Thread-197857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:34:56.919 [DEBUG] [Thread-197857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:34:56.920 [INFO] [Thread-197857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:34:56.924 [DEBUG] [Thread-197857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:34:56.924 [DEBUG] [Thread-197857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:34:56.924 [DEBUG] [Thread-197857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] client lang: <none>
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] server lang: <none>
2026-04-12T23:34:56.925 [DEBUG] [Thread-197857] [transport.py] [_log()] kex follows: False
2026-04-12T23:34:56.926 [DEBUG] [Thread-197857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:34:56.926 [DEBUG] [Thread-197857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:34:56.926 [DEBUG] [Thread-197857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:34:56.926 [DEBUG] [Thread-197857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:34:56.926 [DEBUG] [Thread-197857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:34:56.926 [DEBUG] [Thread-197857] [transport.py] [_log()] Compression: none
2026-04-12T23:34:56.926 [DEBUG] [Thread-197857] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:34:56.947 [DEBUG] [Thread-197857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:34:56.948 [DEBUG] [Thread-197857] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:34:56.948 [DEBUG] [Thread-197857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:34:56.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:34:56.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:34:56.951 [DEBUG] [Thread-197857] [transport.py] [_log()] userauth is OK
2026-04-12T23:34:56.951 [DEBUG] [Thread-197857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:34:56.951 [DEBUG] [Thread-197857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:34:56.951 [DEBUG] [Thread-197857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:34:56.951 [DEBUG] [Thread-197857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:34:56.987 [INFO] [Thread-197857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:34:56.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:34:57.805 [DEBUG] [Thread-197857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:34:57.805 [DEBUG] [Thread-197857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:34:57.805 [DEBUG] [Thread-197857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:34:57.845 [DEBUG] [Thread-197857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:34:57.845 [DEBUG] [Thread-197857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:34:57.847 [DEBUG] [Thread-197857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:34:57.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:34:57.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:34:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:34:57.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:34:57.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:34:57.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:34:57.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:34:57.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:34:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:34:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.898713 -999.00  +11.10   2.79     91   +9.80 1 2 1 3 1     0    0 0.96 -10.19 .NE.. 2.8 2.8 246.2 4.6 11.8 -22.4 11.7 -21.2 11.4 -19.3 11.7 -21.2
2026-04-12T23:34:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.898713
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:34:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:34:42', tmtdew=0.59263, humidity=96.0626, cloud=0.0, wind=7.9416, temperature=10.7689, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:34:08.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8322500000000002, nan, nan, nan, nan, nan, nan, nan, 0.7752499999999998, 3.1499999999999995, nan, nan, nan, nan, nan, 2.3095, nan, nan, nan, nan, nan, nan, 2.9189999999999996, 0.6055000000000001, 0.4657499999999999, 0.5995000000000008, 0.7735000000000003, 1.665000000000001, 2.2490000000000006, 0.7715000000000005, 2.4662499999999987], zp_timestamp='2026-04-12T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:34:57.867 [DEBUG] [Thread-197857] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:34:57.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:34:57.956 [DEBUG] [Thread-197860] [transport.py] [_log()] starting thread (client mode): 0xb39c49d0
2026-04-12T23:34:57.956 [DEBUG] [Thread-197860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:34:57.971 [DEBUG] [Thread-197860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:34:57.971 [INFO] [Thread-197860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:34:57.978 [DEBUG] [Thread-197860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] client lang: <none>
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] server lang: <none>
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] kex follows: False
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:34:57.979 [DEBUG] [Thread-197860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:34:57.980 [DEBUG] [Thread-197860] [transport.py] [_log()] Compression: none
2026-04-12T23:34:57.980 [DEBUG] [Thread-197860] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:34:58.035 [DEBUG] [Thread-197860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:34:58.035 [DEBUG] [Thread-197860] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:34:58.036 [DEBUG] [Thread-197860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:34:58.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:34:58.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:34:58.091 [DEBUG] [Thread-197860] [transport.py] [_log()] userauth is OK
2026-04-12T23:34:58.092 [DEBUG] [Thread-197860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:34:58.092 [DEBUG] [Thread-197860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:34:58.092 [DEBUG] [Thread-197860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:34:58.092 [DEBUG] [Thread-197860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:34:58.115 [INFO] [Thread-197860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:34:58.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:34:58.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:34:58.943 [DEBUG] [Thread-197860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:34:58.943 [DEBUG] [Thread-197860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:34:58.992 [DEBUG] [Thread-197860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:34:58.992 [DEBUG] [Thread-197860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:34:59.002 [DEBUG] [Thread-197860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:34:59.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:34:59.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:34:59.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:34:59.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:34:59.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:34:59.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:34:59.039 [DEBUG] [Thread-197860] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:35:02.377 [DEBUG] [Thread-197862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:35:17.432 [DEBUG] [Thread-197863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:35:21.021 [DEBUG] [Thread-197864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:35:29.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:35:29.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:35:29.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:35:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 35, 17), 0.356345, 97.4652, 0.0, 6.15888, 10.6682, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:35:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:35:17
2026-04-12T23:35:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:35:30.873 [DEBUG] [Thread-197865] [transport.py] [_log()] starting thread (client mode): 0xa795a590
2026-04-12T23:35:30.874 [DEBUG] [Thread-197865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:35:30.894 [DEBUG] [Thread-197865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:35:30.895 [INFO] [Thread-197865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] client lang: <none>
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] server lang: <none>
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] kex follows: False
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:35:30.898 [DEBUG] [Thread-197865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:35:30.899 [DEBUG] [Thread-197865] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:35:30.899 [DEBUG] [Thread-197865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:35:30.899 [DEBUG] [Thread-197865] [transport.py] [_log()] Compression: none
2026-04-12T23:35:30.899 [DEBUG] [Thread-197865] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:35:30.918 [DEBUG] [Thread-197865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:35:30.919 [DEBUG] [Thread-197865] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:35:30.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:35:30.920 [DEBUG] [Thread-197865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:35:30.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:35:30.922 [DEBUG] [Thread-197865] [transport.py] [_log()] userauth is OK
2026-04-12T23:35:30.923 [DEBUG] [Thread-197865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:35:30.923 [DEBUG] [Thread-197865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:35:30.923 [DEBUG] [Thread-197865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:35:30.923 [DEBUG] [Thread-197865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:35:30.959 [INFO] [Thread-197865] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:35:30.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:35:31.810 [DEBUG] [Thread-197865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:35:31.810 [DEBUG] [Thread-197865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:35:31.811 [DEBUG] [Thread-197865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:35:31.851 [DEBUG] [Thread-197865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:35:31.852 [DEBUG] [Thread-197865] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:35:31.855 [DEBUG] [Thread-197865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:35:31.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:35:31.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:35:31.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:35:31.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:35:31.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:35:31.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:35:31.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:35:31.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:35:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:35:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.899061 -999.00  +11.10   3.45     91   +9.80 1 2 1 3 1     0    0 1.01 -9.13 .NE.w 3.5 3.5 209.8 5.4 11.8 -22.3 11.7 -21.4 11.4 -19.3 11.7 -21.4
2026-04-12T23:35:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:35:31.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:35:31.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.899061
2026-04-12T23:35:31.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:35:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:35:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:35:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:35:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:35:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:35:17', tmtdew=0.356345, humidity=97.4652, cloud=0.0, wind=6.15888, temperature=10.6682, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:34:38.870', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8322500000000002, nan, nan, nan, nan, nan, nan, nan, 0.7752499999999998, 3.1499999999999995, nan, nan, nan, nan, nan, 2.3095, nan, nan, nan, nan, nan, nan, 2.9189999999999996, 0.6055000000000001, 0.4657499999999999, 0.5995000000000008, 0.7735000000000003, 1.665000000000001, 2.2490000000000006, 0.7715000000000005, 2.4662499999999987], zp_timestamp='2026-04-12T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:35:31.883 [DEBUG] [Thread-197865] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:35:31.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:35:31.977 [DEBUG] [Thread-197868] [transport.py] [_log()] starting thread (client mode): 0xb39c7af0
2026-04-12T23:35:31.977 [DEBUG] [Thread-197868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:35:31.992 [DEBUG] [Thread-197868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:35:31.992 [INFO] [Thread-197868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] client lang: <none>
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] server lang: <none>
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] kex follows: False
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] Compression: none
2026-04-12T23:35:32.000 [DEBUG] [Thread-197868] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:35:32.064 [DEBUG] [Thread-197868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:35:32.064 [DEBUG] [Thread-197868] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:35:32.065 [DEBUG] [Thread-197868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:35:32.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:35:32.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:35:32.120 [DEBUG] [Thread-197868] [transport.py] [_log()] userauth is OK
2026-04-12T23:35:32.120 [DEBUG] [Thread-197868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:35:32.120 [DEBUG] [Thread-197868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:35:32.121 [DEBUG] [Thread-197868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:35:32.121 [DEBUG] [Thread-197868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:35:32.140 [INFO] [Thread-197868] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:35:32.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:35:32.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:35:32.468 [DEBUG] [Thread-197870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:35:32.953 [DEBUG] [Thread-197868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:35:32.953 [DEBUG] [Thread-197868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:35:33.001 [DEBUG] [Thread-197868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:35:33.001 [DEBUG] [Thread-197868] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:35:33.010 [DEBUG] [Thread-197868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:35:33.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:35:33.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:35:33.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:35:33.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:35:33.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:35:33.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:35:33.052 [DEBUG] [Thread-197868] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:35:46.939 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:35:46.941 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:35:47.524 [DEBUG] [Thread-197871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:36:02.560 [DEBUG] [Thread-197872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:36:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:36:03.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:36:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:36:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 35, 53), 0.5923, 96.0631, 0.0, 7.62408, 10.7028, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:36:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:35:53
2026-04-12T23:36:04.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:36:04.995 [DEBUG] [Thread-197873] [transport.py] [_log()] starting thread (client mode): 0xb39c5e40
2026-04-12T23:36:04.995 [DEBUG] [Thread-197873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:36:05.015 [DEBUG] [Thread-197873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:36:05.015 [INFO] [Thread-197873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] client lang: <none>
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] server lang: <none>
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] kex follows: False
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] Compression: none
2026-04-12T23:36:05.018 [DEBUG] [Thread-197873] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:36:05.033 [DEBUG] [Thread-197873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:36:05.034 [DEBUG] [Thread-197873] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:36:05.034 [DEBUG] [Thread-197873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:36:05.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:36:05.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:36:05.035 [DEBUG] [Thread-197873] [transport.py] [_log()] userauth is OK
2026-04-12T23:36:05.035 [DEBUG] [Thread-197873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:36:05.035 [DEBUG] [Thread-197873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:36:05.035 [DEBUG] [Thread-197873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:36:05.035 [DEBUG] [Thread-197873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:36:05.055 [INFO] [Thread-197873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:36:05.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:36:05.846 [DEBUG] [Thread-197873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:36:05.846 [DEBUG] [Thread-197873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:36:05.846 [DEBUG] [Thread-197873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:36:05.887 [DEBUG] [Thread-197873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:36:05.887 [DEBUG] [Thread-197873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:36:05.890 [DEBUG] [Thread-197873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:36:05.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:36:05.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:36:05.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:36:05.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:36:05.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:36:05.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:36:05.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:36:05.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:36:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.899407 -999.00  +11.10   2.81     91   +9.80 1 2 1 3 1     0    0 1.01 -8.47 .NE.w 2.8 2.8 197.8 4.5 11.8 -22.4 11.7 -21.3 11.4 -19.3 11.7 -21.3
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.899407
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:36:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:35:53', tmtdew=0.5923, humidity=96.0631, cloud=0.0, wind=7.62408, temperature=10.7028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:35:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 1.1837500000000007, nan, nan, nan, nan, nan, nan, nan, 0.8012499999999996, 1.907, nan, nan, nan, nan, nan, 2.7305, nan, nan, nan, nan, nan, nan, 2.7699999999999996, 0.7175000000000002, 0.34025000000000105, 0.44650000000000034, 0.6180000000000003, 0.8520000000000012, 2.3340000000000014, 2.166500000000001, 2.79275], zp_timestamp='2026-04-12T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:36:05.909 [DEBUG] [Thread-197873] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:36:05.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:36:05.992 [DEBUG] [Thread-197876] [transport.py] [_log()] starting thread (client mode): 0xa79591b0
2026-04-12T23:36:05.992 [DEBUG] [Thread-197876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:36:06.007 [DEBUG] [Thread-197876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:36:06.007 [INFO] [Thread-197876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:36:06.014 [DEBUG] [Thread-197876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:36:06.014 [DEBUG] [Thread-197876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:36:06.014 [DEBUG] [Thread-197876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:36:06.014 [DEBUG] [Thread-197876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:06.014 [DEBUG] [Thread-197876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:06.014 [DEBUG] [Thread-197876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:06.014 [DEBUG] [Thread-197876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] client lang: <none>
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] server lang: <none>
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] kex follows: False
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] Compression: none
2026-04-12T23:36:06.015 [DEBUG] [Thread-197876] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:36:06.071 [DEBUG] [Thread-197876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:36:06.071 [DEBUG] [Thread-197876] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:36:06.071 [DEBUG] [Thread-197876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:36:06.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:36:06.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:36:06.128 [DEBUG] [Thread-197876] [transport.py] [_log()] userauth is OK
2026-04-12T23:36:06.128 [DEBUG] [Thread-197876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:36:06.128 [DEBUG] [Thread-197876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:36:06.128 [DEBUG] [Thread-197876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:36:06.128 [DEBUG] [Thread-197876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:36:06.142 [INFO] [Thread-197876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:36:06.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:36:06.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:36:06.998 [DEBUG] [Thread-197876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:36:06.998 [DEBUG] [Thread-197876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:36:07.046 [DEBUG] [Thread-197876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:36:07.046 [DEBUG] [Thread-197876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:36:07.056 [DEBUG] [Thread-197876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:36:07.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:36:07.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:36:07.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:36:07.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:36:07.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:36:07.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:36:07.093 [DEBUG] [Thread-197876] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:36:17.599 [DEBUG] [Thread-197878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:36:21.098 [DEBUG] [Thread-197879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:36:32.665 [DEBUG] [Thread-197880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:36:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:36:37.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:36:37.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:36:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 36, 29), 0.398835, 97.5151, 0.0, 5.61204, 10.7847, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:36:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:36:29
2026-04-12T23:36:38.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:36:38.891 [DEBUG] [Thread-197881] [transport.py] [_log()] starting thread (client mode): 0xb39c7e80
2026-04-12T23:36:38.891 [DEBUG] [Thread-197881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:36:38.911 [DEBUG] [Thread-197881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:36:38.911 [INFO] [Thread-197881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:36:38.914 [DEBUG] [Thread-197881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] client lang: <none>
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] server lang: <none>
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] kex follows: False
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] Compression: none
2026-04-12T23:36:38.915 [DEBUG] [Thread-197881] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:36:38.924 [DEBUG] [Thread-197881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:36:38.925 [DEBUG] [Thread-197881] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:36:38.925 [DEBUG] [Thread-197881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:36:38.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:36:38.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:36:38.925 [DEBUG] [Thread-197881] [transport.py] [_log()] userauth is OK
2026-04-12T23:36:38.925 [DEBUG] [Thread-197881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:36:38.925 [DEBUG] [Thread-197881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:36:38.925 [DEBUG] [Thread-197881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:36:38.925 [DEBUG] [Thread-197881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:36:38.941 [INFO] [Thread-197881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:36:38.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:36:39.731 [DEBUG] [Thread-197881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:36:39.732 [DEBUG] [Thread-197881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:36:39.732 [DEBUG] [Thread-197881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:36:39.773 [DEBUG] [Thread-197881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:36:39.773 [DEBUG] [Thread-197881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:36:39.777 [DEBUG] [Thread-197881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:36:39.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:36:39.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:36:39.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:36:39.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:36:39.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:36:39.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:36:39.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:36:39.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.900103 -999.00  +11.10   2.91     91   +9.80 1 2 1 3 1     0    0 1.01 -7.61 .NE.w 2.9 2.9 205.0 4.4 11.8 -22.3 11.7 -21.3 11.4 -19.2 11.7 -21.2
2026-04-12T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.900103
2026-04-12T23:36:39.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:36:39.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:36:39.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:36:39.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:36:39.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:36:39.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:36:29', tmtdew=0.398835, humidity=97.5151, cloud=0.0, wind=5.61204, temperature=10.7847, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:36:08.899', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 1.1837500000000007, nan, nan, nan, nan, nan, nan, nan, 0.8012499999999996, 1.907, nan, nan, nan, nan, nan, 2.7305, nan, nan, nan, nan, nan, nan, 2.7699999999999996, 0.7175000000000002, 0.34025000000000105, 0.44650000000000034, 0.6180000000000003, 0.8520000000000012, 2.3340000000000014, 2.166500000000001, 2.79275], zp_timestamp='2026-04-12T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:36:39.800 [DEBUG] [Thread-197881] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:36:39.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:36:39.893 [DEBUG] [Thread-197884] [transport.py] [_log()] starting thread (client mode): 0xb39c6980
2026-04-12T23:36:39.893 [DEBUG] [Thread-197884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:36:39.909 [DEBUG] [Thread-197884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:36:39.910 [INFO] [Thread-197884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:36:39.920 [DEBUG] [Thread-197884] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] client lang: <none>
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] server lang: <none>
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] kex follows: False
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:36:39.921 [DEBUG] [Thread-197884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:36:39.922 [DEBUG] [Thread-197884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:36:39.922 [DEBUG] [Thread-197884] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:36:39.922 [DEBUG] [Thread-197884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:36:39.922 [DEBUG] [Thread-197884] [transport.py] [_log()] Compression: none
2026-04-12T23:36:39.922 [DEBUG] [Thread-197884] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:36:39.981 [DEBUG] [Thread-197884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:36:39.982 [DEBUG] [Thread-197884] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:36:39.982 [DEBUG] [Thread-197884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:36:39.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:36:39.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:36:40.040 [DEBUG] [Thread-197884] [transport.py] [_log()] userauth is OK
2026-04-12T23:36:40.040 [DEBUG] [Thread-197884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:36:40.040 [DEBUG] [Thread-197884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:36:40.041 [DEBUG] [Thread-197884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:36:40.041 [DEBUG] [Thread-197884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:36:40.059 [INFO] [Thread-197884] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:36:40.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:36:40.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:36:40.879 [DEBUG] [Thread-197884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:36:40.880 [DEBUG] [Thread-197884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:36:40.928 [DEBUG] [Thread-197884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:36:40.929 [DEBUG] [Thread-197884] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:36:40.938 [DEBUG] [Thread-197884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:36:40.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:36:40.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:36:40.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:36:40.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:36:40.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:36:40.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:36:40.976 [DEBUG] [Thread-197884] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:36:47.153 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:36:47.154 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:36:47.700 [DEBUG] [Thread-197886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:02.761 [DEBUG] [Thread-197887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:37:10.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:37:11.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:37:12.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 37, 4), 0.39625, 97.5317, 0.0, 5.64732, 10.7847, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:37:12.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:37:04
2026-04-12T23:37:12.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:37:12.820 [DEBUG] [Thread-197888] [transport.py] [_log()] starting thread (client mode): 0xa795b8b0
2026-04-12T23:37:12.820 [DEBUG] [Thread-197888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:37:12.839 [DEBUG] [Thread-197888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:37:12.839 [INFO] [Thread-197888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:37:12.842 [DEBUG] [Thread-197888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] client lang: <none>
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] server lang: <none>
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] kex follows: False
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:37:12.843 [DEBUG] [Thread-197888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:37:12.844 [DEBUG] [Thread-197888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:37:12.844 [DEBUG] [Thread-197888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:37:12.844 [DEBUG] [Thread-197888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:37:12.844 [DEBUG] [Thread-197888] [transport.py] [_log()] Compression: none
2026-04-12T23:37:12.844 [DEBUG] [Thread-197888] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:37:12.863 [DEBUG] [Thread-197888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:37:12.864 [DEBUG] [Thread-197888] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:37:12.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:37:12.865 [DEBUG] [Thread-197888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:37:12.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:37:12.867 [DEBUG] [Thread-197888] [transport.py] [_log()] userauth is OK
2026-04-12T23:37:12.868 [DEBUG] [Thread-197888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:37:12.868 [DEBUG] [Thread-197888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:37:12.868 [DEBUG] [Thread-197888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:37:12.868 [DEBUG] [Thread-197888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:37:12.883 [INFO] [Thread-197888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:37:12.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:37:13.692 [DEBUG] [Thread-197888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:37:13.693 [DEBUG] [Thread-197888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:37:13.693 [DEBUG] [Thread-197888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:37:13.734 [DEBUG] [Thread-197888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:37:13.734 [DEBUG] [Thread-197888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:37:13.738 [DEBUG] [Thread-197888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:37:13.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:37:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:37:13.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:37:13.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:37:13.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:37:13.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:37:13.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:37:13.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:37:13.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:37:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.900449 -999.00  +11.10   3.29     91   +9.70 1 2 1 3 1     0    0 1.06 -6.28 .NE.w 3.3 3.3 218.2 5.6 11.8 -22.6 11.7 -21.3 11.3 -19.2 11.6 -21.3
2026-04-12T23:37:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:37:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:37:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.900449
2026-04-12T23:37:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:37:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:37:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:37:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:37:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:37:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:37:04', tmtdew=0.39625, humidity=97.5317, cloud=0.0, wind=5.64732, temperature=10.7847, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:36:38.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 1.1837500000000007, nan, nan, nan, nan, nan, nan, nan, 0.8012499999999996, 1.907, nan, nan, nan, nan, nan, 2.7305, nan, nan, nan, nan, nan, nan, 2.7699999999999996, 0.7175000000000002, 0.34025000000000105, 0.44650000000000034, 0.6180000000000003, 0.8520000000000012, 2.3340000000000014, 2.166500000000001, 2.79275], zp_timestamp='2026-04-12T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:37:13.765 [DEBUG] [Thread-197888] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:37:13.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:37:13.871 [DEBUG] [Thread-197891] [transport.py] [_log()] starting thread (client mode): 0xb39c7a90
2026-04-12T23:37:13.871 [DEBUG] [Thread-197891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:37:13.887 [DEBUG] [Thread-197891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:37:13.887 [INFO] [Thread-197891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:37:13.895 [DEBUG] [Thread-197891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:37:13.895 [DEBUG] [Thread-197891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:37:13.895 [DEBUG] [Thread-197891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:37:13.895 [DEBUG] [Thread-197891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] client lang: <none>
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] server lang: <none>
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] kex follows: False
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:37:13.896 [DEBUG] [Thread-197891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:37:13.897 [DEBUG] [Thread-197891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:37:13.897 [DEBUG] [Thread-197891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:37:13.897 [DEBUG] [Thread-197891] [transport.py] [_log()] Compression: none
2026-04-12T23:37:13.897 [DEBUG] [Thread-197891] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:37:13.955 [DEBUG] [Thread-197891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:37:13.955 [DEBUG] [Thread-197891] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:37:13.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:37:13.957 [DEBUG] [Thread-197891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:37:13.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:37:14.017 [DEBUG] [Thread-197891] [transport.py] [_log()] userauth is OK
2026-04-12T23:37:14.018 [DEBUG] [Thread-197891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:37:14.027 [DEBUG] [Thread-197891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:37:14.027 [DEBUG] [Thread-197891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:37:14.027 [DEBUG] [Thread-197891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:37:14.048 [INFO] [Thread-197891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:37:14.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:37:14.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:37:14.872 [DEBUG] [Thread-197891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:37:14.873 [DEBUG] [Thread-197891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:37:14.921 [DEBUG] [Thread-197891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:37:14.922 [DEBUG] [Thread-197891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:37:14.931 [DEBUG] [Thread-197891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:37:14.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:37:14.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:37:14.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:37:14.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:37:14.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:37:14.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:37:14.970 [DEBUG] [Thread-197891] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:37:17.801 [DEBUG] [Thread-197893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:21.173 [DEBUG] [Thread-197894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:32.849 [DEBUG] [Thread-197895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:37:44.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:37:44.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:37:46.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 37, 4), 0.39625, 97.5317, 0.0, 5.64732, 10.7847, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:37:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:37:04
2026-04-12T23:37:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:37:46.776 [DEBUG] [Thread-197896] [transport.py] [_log()] starting thread (client mode): 0xb39c70d0
2026-04-12T23:37:46.776 [DEBUG] [Thread-197896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:37:46.796 [DEBUG] [Thread-197896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:37:46.796 [INFO] [Thread-197896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:37:46.799 [DEBUG] [Thread-197896] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:37:46.799 [DEBUG] [Thread-197896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:37:46.799 [DEBUG] [Thread-197896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:37:46.799 [DEBUG] [Thread-197896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:46.799 [DEBUG] [Thread-197896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:46.799 [DEBUG] [Thread-197896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:46.799 [DEBUG] [Thread-197896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] client lang: <none>
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] server lang: <none>
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] kex follows: False
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] Compression: none
2026-04-12T23:37:46.800 [DEBUG] [Thread-197896] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:37:46.818 [DEBUG] [Thread-197896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:37:46.819 [DEBUG] [Thread-197896] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:37:46.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:37:46.820 [DEBUG] [Thread-197896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:37:46.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:37:46.822 [DEBUG] [Thread-197896] [transport.py] [_log()] userauth is OK
2026-04-12T23:37:46.822 [DEBUG] [Thread-197896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:37:46.822 [DEBUG] [Thread-197896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:37:46.823 [DEBUG] [Thread-197896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:37:46.823 [DEBUG] [Thread-197896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:37:46.840 [INFO] [Thread-197896] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:37:46.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:37:47.359 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:47.360 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:47.619 [DEBUG] [Thread-197896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:37:47.619 [DEBUG] [Thread-197896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:37:47.620 [DEBUG] [Thread-197896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:37:47.660 [DEBUG] [Thread-197896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:37:47.660 [DEBUG] [Thread-197896] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:37:47.663 [DEBUG] [Thread-197896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:37:47.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:37:47.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:37:47.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:37:47.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:37:47.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:37:47.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:37:47.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:37:47.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:37:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:37:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.900797 -999.00  +11.10   3.25     91   +9.70 1 2 1 3 1     0    0 1.10 -4.87 .nE.. 3.2 3.2 211.6 4.8 11.8 -22.3 11.7 -21.2 11.4 -19.3 11.7 -21.3
2026-04-12T23:37:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:37:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:37:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.900797
2026-04-12T23:37:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:37:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:37:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:37:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:37:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:37:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:37:04', tmtdew=0.39625, humidity=97.5317, cloud=0.0, wind=5.64732, temperature=10.7847, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:37:08.861', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 1.1837500000000007, nan, nan, nan, nan, nan, nan, nan, 0.8012499999999996, 1.907, nan, nan, nan, nan, nan, 2.7305, nan, nan, nan, nan, nan, nan, 2.7699999999999996, 0.7175000000000002, 0.34025000000000105, 0.44650000000000034, 0.6180000000000003, 0.8520000000000012, 2.3340000000000014, 2.166500000000001, 2.79275], zp_timestamp='2026-04-12T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:37:47.687 [DEBUG] [Thread-197896] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:37:47.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:37:47.779 [DEBUG] [Thread-197899] [transport.py] [_log()] starting thread (client mode): 0xa795a7a0
2026-04-12T23:37:47.779 [DEBUG] [Thread-197899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:37:47.793 [DEBUG] [Thread-197899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:37:47.793 [INFO] [Thread-197899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] client lang: <none>
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] server lang: <none>
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] kex follows: False
2026-04-12T23:37:47.801 [DEBUG] [Thread-197899] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:37:47.802 [DEBUG] [Thread-197899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:37:47.802 [DEBUG] [Thread-197899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:37:47.802 [DEBUG] [Thread-197899] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:37:47.802 [DEBUG] [Thread-197899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:37:47.802 [DEBUG] [Thread-197899] [transport.py] [_log()] Compression: none
2026-04-12T23:37:47.802 [DEBUG] [Thread-197899] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:37:47.860 [DEBUG] [Thread-197899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:37:47.861 [DEBUG] [Thread-197899] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:37:47.861 [DEBUG] [Thread-197899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:37:47.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:37:47.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:37:47.887 [DEBUG] [Thread-197901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:37:47.916 [DEBUG] [Thread-197899] [transport.py] [_log()] userauth is OK
2026-04-12T23:37:47.917 [DEBUG] [Thread-197899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:37:47.917 [DEBUG] [Thread-197899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:37:47.917 [DEBUG] [Thread-197899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:37:47.917 [DEBUG] [Thread-197899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:37:47.938 [INFO] [Thread-197899] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:37:47.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:37:47.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:37:48.758 [DEBUG] [Thread-197899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:37:48.758 [DEBUG] [Thread-197899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:37:48.806 [DEBUG] [Thread-197899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:37:48.806 [DEBUG] [Thread-197899] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:37:48.816 [DEBUG] [Thread-197899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:37:48.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:37:48.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:37:48.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:37:48.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:37:48.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:37:48.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:37:48.852 [DEBUG] [Thread-197899] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:38:02.931 [DEBUG] [Thread-197902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:38:17.970 [DEBUG] [Thread-197903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:38:18.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:38:18.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:38:18.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:38:20.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 37, 39), 0.60265, 95.9966, 0.0, 7.80048, 10.7028, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:38:20.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:37:39
2026-04-12T23:38:20.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:38:20.879 [DEBUG] [Thread-197904] [transport.py] [_log()] starting thread (client mode): 0xa7959270
2026-04-12T23:38:20.879 [DEBUG] [Thread-197904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:38:20.899 [DEBUG] [Thread-197904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:38:20.899 [INFO] [Thread-197904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:38:20.900 [DEBUG] [Thread-197904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] client lang: <none>
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] server lang: <none>
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] kex follows: False
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] Compression: none
2026-04-12T23:38:20.901 [DEBUG] [Thread-197904] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:38:20.911 [DEBUG] [Thread-197904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:38:20.911 [DEBUG] [Thread-197904] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:38:20.911 [DEBUG] [Thread-197904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:38:20.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:38:20.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:38:20.914 [DEBUG] [Thread-197904] [transport.py] [_log()] userauth is OK
2026-04-12T23:38:20.914 [DEBUG] [Thread-197904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:38:20.914 [DEBUG] [Thread-197904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:38:20.914 [DEBUG] [Thread-197904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:38:20.914 [DEBUG] [Thread-197904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:38:20.933 [INFO] [Thread-197904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:38:20.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:38:21.249 [DEBUG] [Thread-197906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:38:21.687 [DEBUG] [Thread-197904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:38:21.687 [DEBUG] [Thread-197904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:38:21.688 [DEBUG] [Thread-197904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:38:21.728 [DEBUG] [Thread-197904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:38:21.728 [DEBUG] [Thread-197904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:38:21.732 [DEBUG] [Thread-197904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:38:21.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:38:21.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:38:21.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:38:21.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:38:21.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:38:21.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:38:21.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:38:21.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:38:21.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:38:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.901143 -999.00  +11.10   3.12     91   +9.70 1 2 1 3 1     0    0 1.15 -3.39 .nE.. 3.1 3.1 226.8 4.0 11.8 -22.3 11.7 -21.2 11.4 -19.1 11.7 -21.3
2026-04-12T23:38:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:38:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:38:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.901143
2026-04-12T23:38:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:38:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:38:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:38:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:38:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:38:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:37:39', tmtdew=0.60265, humidity=95.9966, cloud=0.0, wind=7.80048, temperature=10.7028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:37:38.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 1.1837500000000007, nan, nan, nan, nan, nan, nan, nan, 0.8012499999999996, 1.907, nan, nan, nan, nan, nan, 2.7305, nan, nan, nan, nan, nan, nan, 2.7699999999999996, 0.7175000000000002, 0.34025000000000105, 0.44650000000000034, 0.6180000000000003, 0.8520000000000012, 2.3340000000000014, 2.166500000000001, 2.79275], zp_timestamp='2026-04-12T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:38:21.761 [DEBUG] [Thread-197904] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:38:21.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:38:21.860 [DEBUG] [Thread-197908] [transport.py] [_log()] starting thread (client mode): 0xa795b5b0
2026-04-12T23:38:21.860 [DEBUG] [Thread-197908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:38:21.876 [DEBUG] [Thread-197908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:38:21.876 [INFO] [Thread-197908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:38:21.886 [DEBUG] [Thread-197908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:38:21.886 [DEBUG] [Thread-197908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:38:21.886 [DEBUG] [Thread-197908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:38:21.886 [DEBUG] [Thread-197908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] client lang: <none>
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] server lang: <none>
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] kex follows: False
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] Compression: none
2026-04-12T23:38:21.887 [DEBUG] [Thread-197908] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:38:21.944 [DEBUG] [Thread-197908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:38:21.945 [DEBUG] [Thread-197908] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:38:21.945 [DEBUG] [Thread-197908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:38:21.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:38:21.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:38:22.004 [DEBUG] [Thread-197908] [transport.py] [_log()] userauth is OK
2026-04-12T23:38:22.004 [DEBUG] [Thread-197908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:38:22.004 [DEBUG] [Thread-197908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:38:22.005 [DEBUG] [Thread-197908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:38:22.005 [DEBUG] [Thread-197908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:38:22.025 [INFO] [Thread-197908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:38:22.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:38:22.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:38:22.851 [DEBUG] [Thread-197908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:38:22.852 [DEBUG] [Thread-197908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:38:22.900 [DEBUG] [Thread-197908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:38:22.900 [DEBUG] [Thread-197908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:38:22.909 [DEBUG] [Thread-197908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:38:22.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:38:22.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:38:22.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:38:22.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:38:22.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:38:22.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:38:22.947 [DEBUG] [Thread-197908] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:38:33.008 [DEBUG] [Thread-197910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:38:47.564 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:38:47.566 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:38:48.059 [DEBUG] [Thread-197911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:38:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:38:52.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:38:52.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:38:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 38, 15), 0.411455, 96.932, 0.0, 7.23564, 10.6516, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:38:54.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:38:15
2026-04-12T23:38:54.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:38:54.921 [DEBUG] [Thread-197912] [transport.py] [_log()] starting thread (client mode): 0xb39c7a90
2026-04-12T23:38:54.921 [DEBUG] [Thread-197912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:38:54.942 [DEBUG] [Thread-197912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:38:54.942 [INFO] [Thread-197912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] client lang: <none>
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] server lang: <none>
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] kex follows: False
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] Compression: none
2026-04-12T23:38:54.945 [DEBUG] [Thread-197912] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:38:54.964 [DEBUG] [Thread-197912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:38:54.964 [DEBUG] [Thread-197912] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:38:54.965 [DEBUG] [Thread-197912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:38:54.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:38:54.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:38:54.967 [DEBUG] [Thread-197912] [transport.py] [_log()] userauth is OK
2026-04-12T23:38:54.967 [DEBUG] [Thread-197912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:38:54.967 [DEBUG] [Thread-197912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:38:54.967 [DEBUG] [Thread-197912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:38:54.967 [DEBUG] [Thread-197912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:38:54.985 [INFO] [Thread-197912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:38:54.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:38:55.742 [DEBUG] [Thread-197912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:38:55.743 [DEBUG] [Thread-197912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:38:55.743 [DEBUG] [Thread-197912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:38:55.783 [DEBUG] [Thread-197912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:38:55.783 [DEBUG] [Thread-197912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:38:55.786 [DEBUG] [Thread-197912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:38:55.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:38:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:38:55.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:38:55.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:38:55.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:38:55.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:38:55.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:38:55.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:38:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:38:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.901491 -999.00  +11.10   3.48     91   +9.70 1 2 1 3 1     0    0 1.18 -2.55 .NE.. 3.5 3.5 214.6 4.8 11.8 -22.2 11.7 -21.2 11.4 -19.2 11.7 -21.2
2026-04-12T23:38:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:38:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:38:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.901491
2026-04-12T23:38:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:38:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:38:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:38:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:38:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:38:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:38:15', tmtdew=0.411455, humidity=96.932, cloud=0.0, wind=7.23564, temperature=10.6516, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:38:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 1.1837500000000007, nan, nan, nan, nan, nan, nan, nan, 0.8012499999999996, 1.907, nan, nan, nan, nan, nan, 2.7305, nan, nan, nan, nan, nan, nan, 2.7699999999999996, 0.7175000000000002, 0.34025000000000105, 0.44650000000000034, 0.6180000000000003, 0.8520000000000012, 2.3340000000000014, 2.166500000000001, 2.79275], zp_timestamp='2026-04-12T21:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:38:55.813 [DEBUG] [Thread-197912] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:38:55.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:39:03.095 [DEBUG] [Thread-197915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:39:18.156 [DEBUG] [Thread-197916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:39:21.313 [DEBUG] [Thread-197917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:39:33.194 [DEBUG] [Thread-197918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:39:47.771 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:39:47.772 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:39:48.231 [DEBUG] [Thread-197919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:40:03.266 [DEBUG] [Thread-197920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:40:18.306 [DEBUG] [Thread-197921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:40:21.391 [DEBUG] [Thread-197922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:40:33.347 [DEBUG] [Thread-197923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:40:47.975 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:40:47.976 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:40:48.385 [DEBUG] [Thread-197924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:41:03.422 [DEBUG] [Thread-197925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:41:08.351 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T23:41:18.459 [DEBUG] [Thread-197926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:41:21.466 [DEBUG] [Thread-197927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:41:33.497 [DEBUG] [Thread-197928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:41:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:41:38.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:41:38.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:41:39.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 41, 13), 0.464225, 96.9159, 0.0, 7.44732, 10.7683, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:41:39.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:41:13
2026-04-12T23:41:40.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:41:40.216 [DEBUG] [Thread-197929] [transport.py] [_log()] starting thread (client mode): 0xb39c5630
2026-04-12T23:41:40.216 [DEBUG] [Thread-197929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:41:40.235 [DEBUG] [Thread-197929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:41:40.236 [INFO] [Thread-197929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] client lang: <none>
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] server lang: <none>
2026-04-12T23:41:40.239 [DEBUG] [Thread-197929] [transport.py] [_log()] kex follows: False
2026-04-12T23:41:40.240 [DEBUG] [Thread-197929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:41:40.240 [DEBUG] [Thread-197929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:41:40.240 [DEBUG] [Thread-197929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:41:40.240 [DEBUG] [Thread-197929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:41:40.240 [DEBUG] [Thread-197929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:41:40.240 [DEBUG] [Thread-197929] [transport.py] [_log()] Compression: none
2026-04-12T23:41:40.240 [DEBUG] [Thread-197929] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:41:40.257 [DEBUG] [Thread-197929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:41:40.258 [DEBUG] [Thread-197929] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:41:40.258 [DEBUG] [Thread-197929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:41:40.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:41:40.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:41:40.260 [DEBUG] [Thread-197929] [transport.py] [_log()] userauth is OK
2026-04-12T23:41:40.260 [DEBUG] [Thread-197929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:41:40.260 [DEBUG] [Thread-197929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:41:40.260 [DEBUG] [Thread-197929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:41:40.261 [DEBUG] [Thread-197929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:41:40.284 [INFO] [Thread-197929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:41:40.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:41:40.927 [DEBUG] [Thread-197929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:41:40.927 [DEBUG] [Thread-197929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:41:40.927 [DEBUG] [Thread-197929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:41:40.968 [DEBUG] [Thread-197929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:41:40.968 [DEBUG] [Thread-197929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:41:40.972 [DEBUG] [Thread-197929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:41:40.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:41:40.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:41:40.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:41:40.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:41:40.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:41:40.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:41:40.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:41:40.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:41:40.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:41:40.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.903574 -999.00  +11.00   2.63     91   +9.60 1 2 1 3 1     0    0 1.32 0.80 .NE.. 2.6 2.6 215.2 3.2 11.8 -22.3 11.7 -21.2 11.3 -19.1 11.7 -21.1
2026-04-12T23:41:40.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:41:40.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:41:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.903574
2026-04-12T23:41:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:41:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:41:40.998 [DEBUG] [Thread-197929] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:41:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:41:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:41:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:41:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:41:13', tmtdew=0.464225, humidity=96.9159, cloud=0.0, wind=7.44732, temperature=10.7683, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:41:08.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 1.1837500000000007, nan, nan, nan, nan, nan, nan, nan, 0.8012499999999996, 1.907, nan, nan, nan, nan, nan, 2.7305, nan, nan, nan, nan, nan, nan, 2.7699999999999996, 0.7175000000000002, 0.34025000000000105, 0.44650000000000034, 0.6180000000000003, 0.8520000000000012, 2.3340000000000014, 2.166500000000001, 2.79275], zp_timestamp='2026-04-12T21:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:41:41.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:41:41.086 [DEBUG] [Thread-197932] [transport.py] [_log()] starting thread (client mode): 0xa79597b0
2026-04-12T23:41:41.086 [DEBUG] [Thread-197932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:41:41.104 [DEBUG] [Thread-197932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:41:41.104 [INFO] [Thread-197932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:41:41.116 [DEBUG] [Thread-197932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] client lang: <none>
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] server lang: <none>
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] kex follows: False
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] Compression: none
2026-04-12T23:41:41.117 [DEBUG] [Thread-197932] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:41:41.174 [DEBUG] [Thread-197932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:41:41.174 [DEBUG] [Thread-197932] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:41:41.175 [DEBUG] [Thread-197932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:41:41.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:41:41.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:41:41.230 [DEBUG] [Thread-197932] [transport.py] [_log()] userauth is OK
2026-04-12T23:41:41.230 [DEBUG] [Thread-197932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:41:41.230 [DEBUG] [Thread-197932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:41:41.230 [DEBUG] [Thread-197932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:41:41.231 [DEBUG] [Thread-197932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:41:41.249 [INFO] [Thread-197932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:41:41.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:41:41.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:41:42.137 [DEBUG] [Thread-197932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:41:42.138 [DEBUG] [Thread-197932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:41:42.186 [DEBUG] [Thread-197932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:41:42.186 [DEBUG] [Thread-197932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:41:42.194 [DEBUG] [Thread-197932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:41:42.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:41:42.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:41:42.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:41:42.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:41:42.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:41:42.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:41:42.231 [DEBUG] [Thread-197932] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:41:48.182 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:41:48.183 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:41:48.533 [DEBUG] [Thread-197934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:03.583 [DEBUG] [Thread-197935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:12.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:42:12.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:42:12.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:42:13.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 41, 48), 0.64384, 95.7324, 0.0, 8.36496, 10.7035, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:42:13.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:41:48
2026-04-12T23:42:14.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:42:14.186 [DEBUG] [Thread-197936] [transport.py] [_log()] starting thread (client mode): 0xa795be80
2026-04-12T23:42:14.186 [DEBUG] [Thread-197936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:42:14.207 [DEBUG] [Thread-197936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:42:14.207 [INFO] [Thread-197936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] client lang: <none>
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] server lang: <none>
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] kex follows: False
2026-04-12T23:42:14.210 [DEBUG] [Thread-197936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:42:14.211 [DEBUG] [Thread-197936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:42:14.211 [DEBUG] [Thread-197936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:42:14.211 [DEBUG] [Thread-197936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:42:14.211 [DEBUG] [Thread-197936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:42:14.211 [DEBUG] [Thread-197936] [transport.py] [_log()] Compression: none
2026-04-12T23:42:14.211 [DEBUG] [Thread-197936] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:42:14.228 [DEBUG] [Thread-197936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:42:14.229 [DEBUG] [Thread-197936] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:42:14.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:42:14.229 [DEBUG] [Thread-197936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:42:14.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:42:14.232 [DEBUG] [Thread-197936] [transport.py] [_log()] userauth is OK
2026-04-12T23:42:14.232 [DEBUG] [Thread-197936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:42:14.232 [DEBUG] [Thread-197936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:42:14.233 [DEBUG] [Thread-197936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:42:14.233 [DEBUG] [Thread-197936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:42:14.257 [INFO] [Thread-197936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:42:14.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:42:14.856 [DEBUG] [Thread-197936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:42:14.856 [DEBUG] [Thread-197936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:42:14.857 [DEBUG] [Thread-197936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:42:14.897 [DEBUG] [Thread-197936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:42:14.897 [DEBUG] [Thread-197936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:42:14.901 [DEBUG] [Thread-197936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:42:14.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:42:14.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:42:14.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:42:14.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:42:14.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:42:14.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:42:14.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.903921 -999.00  +11.00   2.98     91   +9.60 1 2 1 3 1     0    0 1.33 1.58 .n... 3.0 3.0 210.6 4.5 11.8 -22.2 11.7 -21.2 11.4 -19.2 11.7 -21.3
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.903921
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:42:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:41:48', tmtdew=0.64384, humidity=95.7324, cloud=0.0, wind=8.36496, temperature=10.7035, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:41:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:42:14.919 [DEBUG] [Thread-197936] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:42:14.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:42:15.003 [DEBUG] [Thread-197939] [transport.py] [_log()] starting thread (client mode): 0xae560b80
2026-04-12T23:42:15.003 [DEBUG] [Thread-197939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:42:15.018 [DEBUG] [Thread-197939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:42:15.018 [INFO] [Thread-197939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:42:15.025 [DEBUG] [Thread-197939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] client lang: <none>
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] server lang: <none>
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] kex follows: False
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] Compression: none
2026-04-12T23:42:15.026 [DEBUG] [Thread-197939] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:42:15.085 [DEBUG] [Thread-197939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:42:15.086 [DEBUG] [Thread-197939] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:42:15.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:42:15.087 [DEBUG] [Thread-197939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:42:15.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:42:15.141 [DEBUG] [Thread-197939] [transport.py] [_log()] userauth is OK
2026-04-12T23:42:15.141 [DEBUG] [Thread-197939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:42:15.142 [DEBUG] [Thread-197939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:42:15.142 [DEBUG] [Thread-197939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:42:15.142 [DEBUG] [Thread-197939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:42:15.160 [INFO] [Thread-197939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:42:15.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:42:15.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:42:15.934 [DEBUG] [Thread-197939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:42:15.934 [DEBUG] [Thread-197939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:42:15.982 [DEBUG] [Thread-197939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:42:15.983 [DEBUG] [Thread-197939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:42:15.992 [DEBUG] [Thread-197939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:42:16.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:42:16.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:42:16.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:42:16.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:42:16.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:42:16.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:42:16.029 [DEBUG] [Thread-197939] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:42:18.616 [DEBUG] [Thread-197941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:21.529 [DEBUG] [Thread-197942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:33.671 [DEBUG] [Thread-197943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:46.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:42:46.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:42:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:42:47.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 42, 23), 0.474355, 96.8497, 0.0, 6.07068, 10.7186, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:42:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:42:23
2026-04-12T23:42:47.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:42:47.900 [DEBUG] [Thread-197944] [transport.py] [_log()] starting thread (client mode): 0xae562860
2026-04-12T23:42:47.900 [DEBUG] [Thread-197944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:42:47.920 [DEBUG] [Thread-197944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:42:47.920 [INFO] [Thread-197944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] client lang: <none>
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] server lang: <none>
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] kex follows: False
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:42:47.921 [DEBUG] [Thread-197944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:42:47.922 [DEBUG] [Thread-197944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:42:47.922 [DEBUG] [Thread-197944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:42:47.922 [DEBUG] [Thread-197944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:42:47.922 [DEBUG] [Thread-197944] [transport.py] [_log()] Compression: none
2026-04-12T23:42:47.922 [DEBUG] [Thread-197944] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:42:47.930 [DEBUG] [Thread-197944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:42:47.930 [DEBUG] [Thread-197944] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:42:47.931 [DEBUG] [Thread-197944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:42:47.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:42:47.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:42:47.933 [DEBUG] [Thread-197944] [transport.py] [_log()] userauth is OK
2026-04-12T23:42:47.933 [DEBUG] [Thread-197944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:42:47.933 [DEBUG] [Thread-197944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:42:47.933 [DEBUG] [Thread-197944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:42:47.933 [DEBUG] [Thread-197944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:42:47.959 [INFO] [Thread-197944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:42:47.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:42:48.393 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:48.394 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:48.574 [DEBUG] [Thread-197944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:42:48.574 [DEBUG] [Thread-197944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:42:48.574 [DEBUG] [Thread-197944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:42:48.616 [DEBUG] [Thread-197944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:42:48.616 [DEBUG] [Thread-197944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:42:48.620 [DEBUG] [Thread-197944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:42:48.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:42:48.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:42:48.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:42:48.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:42:48.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:42:48.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:42:48.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:42:48.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:42:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:42:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.904269 -999.00  +11.10   2.40     91   +9.70 1 2 1 3 1     0    0 1.37 2.54 ..... 2.4 2.4 210.6 4.2 11.8 -22.4 11.7 -21.2 11.4 -19.2 11.6 -21.1
2026-04-12T23:42:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:42:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:42:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.904269
2026-04-12T23:42:48.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:42:48.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:42:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:42:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:42:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:42:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:42:23', tmtdew=0.474355, humidity=96.8497, cloud=0.0, wind=6.07068, temperature=10.7186, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:42:08.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:42:48.648 [DEBUG] [Thread-197944] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:42:48.705 [DEBUG] [Thread-197947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:42:48.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:42:48.743 [DEBUG] [Thread-197948] [transport.py] [_log()] starting thread (client mode): 0xae5609a0
2026-04-12T23:42:48.743 [DEBUG] [Thread-197948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:42:48.758 [DEBUG] [Thread-197948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:42:48.758 [INFO] [Thread-197948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:42:48.765 [DEBUG] [Thread-197948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] client lang: <none>
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] server lang: <none>
2026-04-12T23:42:48.766 [DEBUG] [Thread-197948] [transport.py] [_log()] kex follows: False
2026-04-12T23:42:48.767 [DEBUG] [Thread-197948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:42:48.767 [DEBUG] [Thread-197948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:42:48.767 [DEBUG] [Thread-197948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:42:48.767 [DEBUG] [Thread-197948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:42:48.767 [DEBUG] [Thread-197948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:42:48.767 [DEBUG] [Thread-197948] [transport.py] [_log()] Compression: none
2026-04-12T23:42:48.767 [DEBUG] [Thread-197948] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:42:48.827 [DEBUG] [Thread-197948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:42:48.827 [DEBUG] [Thread-197948] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:42:48.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:42:48.828 [DEBUG] [Thread-197948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:42:48.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:42:48.884 [DEBUG] [Thread-197948] [transport.py] [_log()] userauth is OK
2026-04-12T23:42:48.884 [DEBUG] [Thread-197948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:42:48.884 [DEBUG] [Thread-197948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:42:48.884 [DEBUG] [Thread-197948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:42:48.884 [DEBUG] [Thread-197948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:42:48.907 [INFO] [Thread-197948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:42:48.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:42:48.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:42:49.722 [DEBUG] [Thread-197948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:42:49.722 [DEBUG] [Thread-197948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:42:49.770 [DEBUG] [Thread-197948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:42:49.770 [DEBUG] [Thread-197948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:42:49.780 [DEBUG] [Thread-197948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:42:49.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:42:49.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:42:49.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:42:49.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:42:49.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:42:49.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:42:49.816 [DEBUG] [Thread-197948] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:43:03.744 [DEBUG] [Thread-197950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:43:18.785 [DEBUG] [Thread-197951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:43:19.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:43:19.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:43:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:43:21.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 42, 59), 0.521835, 96.3663, 0.0, 7.9236, 10.7852, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:43:21.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:42:59
2026-04-12T23:43:21.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:43:21.593 [DEBUG] [Thread-197952] [transport.py] [_log()] starting thread (client mode): 0xb39c6c20
2026-04-12T23:43:21.593 [DEBUG] [Thread-197952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:43:21.600 [DEBUG] [Thread-197953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:43:21.612 [DEBUG] [Thread-197952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:43:21.612 [INFO] [Thread-197952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] client lang: <none>
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] server lang: <none>
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] kex follows: False
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] Compression: none
2026-04-12T23:43:21.616 [DEBUG] [Thread-197952] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:43:21.631 [DEBUG] [Thread-197952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:43:21.631 [DEBUG] [Thread-197952] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:43:21.631 [DEBUG] [Thread-197952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:43:21.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:43:21.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:43:21.633 [DEBUG] [Thread-197952] [transport.py] [_log()] userauth is OK
2026-04-12T23:43:21.633 [DEBUG] [Thread-197952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:43:21.633 [DEBUG] [Thread-197952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:43:21.633 [DEBUG] [Thread-197952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:43:21.633 [DEBUG] [Thread-197952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:43:21.646 [INFO] [Thread-197952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:43:21.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:43:22.322 [DEBUG] [Thread-197952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:43:22.322 [DEBUG] [Thread-197952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:43:22.323 [DEBUG] [Thread-197952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:43:22.363 [DEBUG] [Thread-197952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:43:22.363 [DEBUG] [Thread-197952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:43:22.367 [DEBUG] [Thread-197952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:43:22.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:43:22.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:43:22.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:43:22.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:43:22.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:43:22.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:43:22.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:43:22.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:43:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:43:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.904963 -999.00  +11.10   3.01     91   +9.70 1 2 1 3 1     0    0 1.39 4.56 .ne.. 3.0 3.0 200.9 5.1 11.8 -22.2 11.7 -21.1 11.4 -19.2 11.7 -21.2
2026-04-12T23:43:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:43:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:43:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.904963
2026-04-12T23:43:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:43:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:43:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:43:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:43:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:43:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:42:59', tmtdew=0.521835, humidity=96.3663, cloud=0.0, wind=7.9236, temperature=10.7852, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:43:08.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:43:22.396 [DEBUG] [Thread-197952] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:43:22.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:43:22.493 [DEBUG] [Thread-197956] [transport.py] [_log()] starting thread (client mode): 0xb39c68f0
2026-04-12T23:43:22.493 [DEBUG] [Thread-197956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:43:22.512 [DEBUG] [Thread-197956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:43:22.512 [INFO] [Thread-197956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:22.520 [DEBUG] [Thread-197956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] client lang: <none>
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] server lang: <none>
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] kex follows: False
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:43:22.521 [DEBUG] [Thread-197956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:43:22.522 [DEBUG] [Thread-197956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:43:22.522 [DEBUG] [Thread-197956] [transport.py] [_log()] Compression: none
2026-04-12T23:43:22.522 [DEBUG] [Thread-197956] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:43:22.579 [DEBUG] [Thread-197956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:43:22.580 [DEBUG] [Thread-197956] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:43:22.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:43:22.581 [DEBUG] [Thread-197956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:43:22.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:43:22.635 [DEBUG] [Thread-197956] [transport.py] [_log()] userauth is OK
2026-04-12T23:43:22.635 [DEBUG] [Thread-197956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:43:22.635 [DEBUG] [Thread-197956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:43:22.635 [DEBUG] [Thread-197956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:43:22.635 [DEBUG] [Thread-197956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:43:22.659 [INFO] [Thread-197956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:43:22.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:43:22.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:43:23.491 [DEBUG] [Thread-197956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:43:23.491 [DEBUG] [Thread-197956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:43:23.539 [DEBUG] [Thread-197956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:43:23.539 [DEBUG] [Thread-197956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:43:23.548 [DEBUG] [Thread-197956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:43:23.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:43:23.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:43:23.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:43:23.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:43:23.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:43:23.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:43:23.585 [DEBUG] [Thread-197956] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:43:33.821 [DEBUG] [Thread-197958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:43:48.601 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:43:48.602 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:43:48.873 [DEBUG] [Thread-197959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:43:53.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:43:53.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:43:53.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:43:54.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 43, 34), 0.65879, 95.6332, 0.0, 8.32968, 10.571, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:43:54.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:43:34
2026-04-12T23:43:55.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:43:55.473 [DEBUG] [Thread-197960] [transport.py] [_log()] starting thread (client mode): 0xae5608e0
2026-04-12T23:43:55.473 [DEBUG] [Thread-197960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:43:55.492 [DEBUG] [Thread-197960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:43:55.492 [INFO] [Thread-197960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:43:55.495 [DEBUG] [Thread-197960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] client lang: <none>
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] server lang: <none>
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] kex follows: False
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] Compression: none
2026-04-12T23:43:55.496 [DEBUG] [Thread-197960] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:43:55.512 [DEBUG] [Thread-197960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:43:55.512 [DEBUG] [Thread-197960] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:43:55.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:43:55.513 [DEBUG] [Thread-197960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:43:55.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:43:55.515 [DEBUG] [Thread-197960] [transport.py] [_log()] userauth is OK
2026-04-12T23:43:55.515 [DEBUG] [Thread-197960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:43:55.515 [DEBUG] [Thread-197960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:43:55.516 [DEBUG] [Thread-197960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:43:55.516 [DEBUG] [Thread-197960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:43:55.538 [INFO] [Thread-197960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:43:55.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:43:56.211 [DEBUG] [Thread-197960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:43:56.211 [DEBUG] [Thread-197960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:43:56.211 [DEBUG] [Thread-197960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:43:56.252 [DEBUG] [Thread-197960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:43:56.252 [DEBUG] [Thread-197960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:43:56.255 [DEBUG] [Thread-197960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:43:56.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:43:56.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:43:56.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:43:56.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:43:56.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:43:56.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:43:56.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:43:56.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:43:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:43:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.905310 -999.00  +11.10   2.53     91   +9.70 1 2 1 3 1     0    0 1.44 5.24 .ne.. 2.5 2.5 209.4 5.9 11.8 -22.3 11.7 -21.2 11.4 -19.3 11.7 -21.2
2026-04-12T23:43:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:43:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:43:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.905310
2026-04-12T23:43:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:43:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:43:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:43:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:43:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:43:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:43:34', tmtdew=0.65879, humidity=95.6332, cloud=0.0, wind=8.32968, temperature=10.571, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:43:38.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:43:56.282 [DEBUG] [Thread-197960] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:43:56.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:43:56.377 [DEBUG] [Thread-197963] [transport.py] [_log()] starting thread (client mode): 0xb39c79a0
2026-04-12T23:43:56.378 [DEBUG] [Thread-197963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:43:56.392 [DEBUG] [Thread-197963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:43:56.393 [INFO] [Thread-197963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:43:56.400 [DEBUG] [Thread-197963] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:43:56.400 [DEBUG] [Thread-197963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:43:56.400 [DEBUG] [Thread-197963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:43:56.400 [DEBUG] [Thread-197963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:56.400 [DEBUG] [Thread-197963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] client lang: <none>
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] server lang: <none>
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] kex follows: False
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] Compression: none
2026-04-12T23:43:56.401 [DEBUG] [Thread-197963] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:43:56.458 [DEBUG] [Thread-197963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:43:56.459 [DEBUG] [Thread-197963] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:43:56.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:43:56.460 [DEBUG] [Thread-197963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:43:56.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:43:56.514 [DEBUG] [Thread-197963] [transport.py] [_log()] userauth is OK
2026-04-12T23:43:56.515 [DEBUG] [Thread-197963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:43:56.515 [DEBUG] [Thread-197963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:43:56.515 [DEBUG] [Thread-197963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:43:56.515 [DEBUG] [Thread-197963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:43:56.534 [INFO] [Thread-197963] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:43:56.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:43:56.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:43:57.340 [DEBUG] [Thread-197963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:43:57.340 [DEBUG] [Thread-197963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:43:57.388 [DEBUG] [Thread-197963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:43:57.389 [DEBUG] [Thread-197963] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:43:57.398 [DEBUG] [Thread-197963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:43:57.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:43:57.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:43:57.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:43:57.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:43:57.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:43:57.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:43:57.435 [DEBUG] [Thread-197963] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:44:03.912 [DEBUG] [Thread-197965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:44:18.971 [DEBUG] [Thread-197966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:44:21.675 [DEBUG] [Thread-197967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:44:27.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:44:27.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:44:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:44:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 44, 10), 0.58183, 96.3001, 0.0, 7.88832, 10.7524, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:44:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:44:10
2026-04-12T23:44:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:44:29.241 [DEBUG] [Thread-197968] [transport.py] [_log()] starting thread (client mode): 0xa7959840
2026-04-12T23:44:29.241 [DEBUG] [Thread-197968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:44:29.256 [DEBUG] [Thread-197968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:44:29.256 [INFO] [Thread-197968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] client lang: <none>
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] server lang: <none>
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] kex follows: False
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:44:29.259 [DEBUG] [Thread-197968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:44:29.260 [DEBUG] [Thread-197968] [transport.py] [_log()] Compression: none
2026-04-12T23:44:29.260 [DEBUG] [Thread-197968] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:44:29.276 [DEBUG] [Thread-197968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:44:29.276 [DEBUG] [Thread-197968] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:44:29.277 [DEBUG] [Thread-197968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:44:29.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:44:29.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:44:29.279 [DEBUG] [Thread-197968] [transport.py] [_log()] userauth is OK
2026-04-12T23:44:29.279 [DEBUG] [Thread-197968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:44:29.279 [DEBUG] [Thread-197968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:44:29.279 [DEBUG] [Thread-197968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:44:29.279 [DEBUG] [Thread-197968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:44:29.304 [INFO] [Thread-197968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:44:29.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:44:29.905 [DEBUG] [Thread-197968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:44:29.906 [DEBUG] [Thread-197968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:44:29.906 [DEBUG] [Thread-197968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:44:29.947 [DEBUG] [Thread-197968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:44:29.948 [DEBUG] [Thread-197968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:44:29.951 [DEBUG] [Thread-197968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:44:29.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:44:29.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:44:29.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:44:29.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:44:29.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:44:29.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:44:29.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:44:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:44:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:44:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.905657 -999.00  +11.10   3.72     91   +9.70 1 2 1 3 1     0    0 1.48 6.24 .NEs. 3.7 3.7 208.0 4.5 11.8 -22.3 11.7 -21.2 11.4 -19.2 11.6 -21.1
2026-04-12T23:44:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:44:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:44:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.905657
2026-04-12T23:44:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:44:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:44:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:44:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:44:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:44:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:44:10', tmtdew=0.58183, humidity=96.3001, cloud=0.0, wind=7.88832, temperature=10.7524, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:44:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:44:29.980 [DEBUG] [Thread-197968] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:44:30.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:44:30.086 [DEBUG] [Thread-197971] [transport.py] [_log()] starting thread (client mode): 0xa795bb20
2026-04-12T23:44:30.086 [DEBUG] [Thread-197971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:44:30.101 [DEBUG] [Thread-197971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:44:30.101 [INFO] [Thread-197971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:44:30.109 [DEBUG] [Thread-197971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:44:30.109 [DEBUG] [Thread-197971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:44:30.109 [DEBUG] [Thread-197971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:44:30.109 [DEBUG] [Thread-197971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:44:30.109 [DEBUG] [Thread-197971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] client lang: <none>
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] server lang: <none>
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] kex follows: False
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] Compression: none
2026-04-12T23:44:30.110 [DEBUG] [Thread-197971] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:44:30.166 [DEBUG] [Thread-197971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:44:30.166 [DEBUG] [Thread-197971] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:44:30.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:44:30.167 [DEBUG] [Thread-197971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:44:30.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:44:30.222 [DEBUG] [Thread-197971] [transport.py] [_log()] userauth is OK
2026-04-12T23:44:30.223 [DEBUG] [Thread-197971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:44:30.223 [DEBUG] [Thread-197971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:44:30.223 [DEBUG] [Thread-197971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:44:30.223 [DEBUG] [Thread-197971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:44:30.241 [INFO] [Thread-197971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:44:30.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:44:30.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:44:31.056 [DEBUG] [Thread-197971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:44:31.056 [DEBUG] [Thread-197971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:44:31.104 [DEBUG] [Thread-197971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:44:31.104 [DEBUG] [Thread-197971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:44:31.113 [DEBUG] [Thread-197971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:44:31.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:44:31.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:44:31.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:44:31.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:44:31.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:44:31.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:44:31.150 [DEBUG] [Thread-197971] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:44:34.006 [DEBUG] [Thread-197973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:44:48.806 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:44:48.808 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:44:49.057 [DEBUG] [Thread-197974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:45:01.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:45:01.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:45:01.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:45:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 44, 46), 0.66884, 95.5669, 0.0, 8.40024, 10.5047, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:45:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:44:46
2026-04-12T23:45:02.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:45:02.999 [DEBUG] [Thread-197975] [transport.py] [_log()] starting thread (client mode): 0xa7959ae0
2026-04-12T23:45:02.999 [DEBUG] [Thread-197975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:45:03.021 [DEBUG] [Thread-197975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:45:03.021 [INFO] [Thread-197975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:45:03.022 [DEBUG] [Thread-197975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] client lang: <none>
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] server lang: <none>
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] kex follows: False
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] Compression: none
2026-04-12T23:45:03.023 [DEBUG] [Thread-197975] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:45:03.030 [DEBUG] [Thread-197975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:45:03.031 [DEBUG] [Thread-197975] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:45:03.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:45:03.031 [DEBUG] [Thread-197975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:45:03.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:45:03.032 [DEBUG] [Thread-197975] [transport.py] [_log()] userauth is OK
2026-04-12T23:45:03.032 [DEBUG] [Thread-197975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:45:03.032 [DEBUG] [Thread-197975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:45:03.032 [DEBUG] [Thread-197975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:45:03.032 [DEBUG] [Thread-197975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:45:03.042 [INFO] [Thread-197975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:45:03.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:45:03.734 [DEBUG] [Thread-197975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:45:03.734 [DEBUG] [Thread-197975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:45:03.734 [DEBUG] [Thread-197975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:45:03.775 [DEBUG] [Thread-197975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:45:03.775 [DEBUG] [Thread-197975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:45:03.778 [DEBUG] [Thread-197975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:45:03.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:45:03.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:45:03.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:45:03.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:45:03.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:45:03.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:45:03.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:45:03.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.906005 -999.00  +11.10   2.81     91   +9.70 1 2 1 3 1     0    0 1.48 6.99 .NEs. 2.8 2.8 194.6 5.0 11.8 -22.3 11.7 -21.2 11.3 -19.2 11.6 -21.1
2026-04-12T23:45:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:45:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:45:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.906005
2026-04-12T23:45:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:45:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:45:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:45:03.837 [DEBUG] [Thread-197975] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:45:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:45:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:45:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:44:46', tmtdew=0.66884, humidity=95.5669, cloud=0.0, wind=8.40024, temperature=10.5047, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:44:38.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:45:03.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:45:03.930 [DEBUG] [Thread-197978] [transport.py] [_log()] starting thread (client mode): 0xa795a230
2026-04-12T23:45:03.930 [DEBUG] [Thread-197978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:45:03.945 [DEBUG] [Thread-197978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:45:03.945 [INFO] [Thread-197978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] client lang: <none>
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] server lang: <none>
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] kex follows: False
2026-04-12T23:45:03.953 [DEBUG] [Thread-197978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:45:03.954 [DEBUG] [Thread-197978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:45:03.954 [DEBUG] [Thread-197978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:45:03.954 [DEBUG] [Thread-197978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:45:03.954 [DEBUG] [Thread-197978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:45:03.954 [DEBUG] [Thread-197978] [transport.py] [_log()] Compression: none
2026-04-12T23:45:03.962 [DEBUG] [Thread-197978] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:45:04.012 [DEBUG] [Thread-197978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:45:04.012 [DEBUG] [Thread-197978] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:45:04.013 [DEBUG] [Thread-197978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:45:04.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:45:04.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:45:04.069 [DEBUG] [Thread-197978] [transport.py] [_log()] userauth is OK
2026-04-12T23:45:04.070 [DEBUG] [Thread-197978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:45:04.070 [DEBUG] [Thread-197978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:45:04.070 [DEBUG] [Thread-197978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:45:04.070 [DEBUG] [Thread-197978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:45:04.089 [INFO] [Thread-197978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:45:04.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:45:04.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:45:04.096 [DEBUG] [Thread-197980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:45:04.917 [DEBUG] [Thread-197978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:45:04.917 [DEBUG] [Thread-197978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:45:04.965 [DEBUG] [Thread-197978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:45:04.966 [DEBUG] [Thread-197978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:45:04.975 [DEBUG] [Thread-197978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:45:04.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:45:04.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:45:04.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:45:05.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:45:05.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:45:05.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:45:05.012 [DEBUG] [Thread-197978] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:45:19.150 [DEBUG] [Thread-197981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:45:21.749 [DEBUG] [Thread-197982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:45:34.185 [DEBUG] [Thread-197983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:45:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:45:35.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:45:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:45:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 45, 21), 0.631905, 95.8001, 0.0, 7.90596, 10.769, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:45:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:45:21
2026-04-12T23:45:36.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:45:36.820 [DEBUG] [Thread-197984] [transport.py] [_log()] starting thread (client mode): 0xae562c80
2026-04-12T23:45:36.821 [DEBUG] [Thread-197984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:45:36.838 [DEBUG] [Thread-197984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:45:36.838 [INFO] [Thread-197984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] client lang: <none>
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] server lang: <none>
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] kex follows: False
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] Compression: none
2026-04-12T23:45:36.841 [DEBUG] [Thread-197984] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:45:36.851 [DEBUG] [Thread-197984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:45:36.851 [DEBUG] [Thread-197984] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:45:36.852 [DEBUG] [Thread-197984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:45:36.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:45:36.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:45:36.853 [DEBUG] [Thread-197984] [transport.py] [_log()] userauth is OK
2026-04-12T23:45:36.853 [DEBUG] [Thread-197984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:45:36.854 [DEBUG] [Thread-197984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:45:36.854 [DEBUG] [Thread-197984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:45:36.854 [DEBUG] [Thread-197984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:45:36.871 [INFO] [Thread-197984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:45:36.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:45:37.482 [DEBUG] [Thread-197984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:45:37.483 [DEBUG] [Thread-197984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:45:37.483 [DEBUG] [Thread-197984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:45:37.523 [DEBUG] [Thread-197984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:45:37.523 [DEBUG] [Thread-197984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:45:37.526 [DEBUG] [Thread-197984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:45:37.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:45:37.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:45:37.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:45:37.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:45:37.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:45:37.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:45:37.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:45:37.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:45:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:45:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.906351 -999.00  +11.10   4.33     91   +9.70 1 2 1 3 1     0    0 1.50 7.24 ..e.. 4.3 4.3 205.6 4.9 11.8 -22.3 11.7 -21.2 11.3 -19.3 11.7 -21.2
2026-04-12T23:45:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:45:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:45:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.906351
2026-04-12T23:45:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:45:37.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:45:37.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:45:37.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:45:37.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:45:37.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:45:21', tmtdew=0.631905, humidity=95.8001, cloud=0.0, wind=7.90596, temperature=10.769, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:45:08.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:45:37.545 [DEBUG] [Thread-197984] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:45:37.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:45:37.640 [DEBUG] [Thread-197987] [transport.py] [_log()] starting thread (client mode): 0xb39c5d20
2026-04-12T23:45:37.640 [DEBUG] [Thread-197987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:45:37.655 [DEBUG] [Thread-197987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:45:37.655 [INFO] [Thread-197987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:45:37.663 [DEBUG] [Thread-197987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] client lang: <none>
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] server lang: <none>
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] kex follows: False
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] Compression: none
2026-04-12T23:45:37.664 [DEBUG] [Thread-197987] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:45:37.719 [DEBUG] [Thread-197987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:45:37.720 [DEBUG] [Thread-197987] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:45:37.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:45:37.721 [DEBUG] [Thread-197987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:45:37.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:45:37.776 [DEBUG] [Thread-197987] [transport.py] [_log()] userauth is OK
2026-04-12T23:45:37.777 [DEBUG] [Thread-197987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:45:37.777 [DEBUG] [Thread-197987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:45:37.777 [DEBUG] [Thread-197987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:45:37.777 [DEBUG] [Thread-197987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:45:37.799 [INFO] [Thread-197987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:45:37.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:45:37.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:45:38.639 [DEBUG] [Thread-197987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:45:38.639 [DEBUG] [Thread-197987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:45:38.688 [DEBUG] [Thread-197987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:45:38.688 [DEBUG] [Thread-197987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:45:38.697 [DEBUG] [Thread-197987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:45:38.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:45:38.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:45: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') -> 00000000
2026-04-12T23:45:38.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:45:38.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:45:38.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:45:38.733 [DEBUG] [Thread-197987] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:45:49.015 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:45:49.016 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:45:49.220 [DEBUG] [Thread-197989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:46:04.279 [DEBUG] [Thread-197990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:46:08.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:46:08.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:46:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:46:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 45, 56), 0.63441, 95.7835, 0.0, 6.07068, 10.7524, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:46:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:45:56
2026-04-12T23:46:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:46:10.557 [DEBUG] [Thread-197991] [transport.py] [_log()] starting thread (client mode): 0xb39c5f90
2026-04-12T23:46:10.557 [DEBUG] [Thread-197991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:46:10.572 [DEBUG] [Thread-197991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:46:10.572 [INFO] [Thread-197991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] client lang: <none>
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] server lang: <none>
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] kex follows: False
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] Compression: none
2026-04-12T23:46:10.576 [DEBUG] [Thread-197991] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:46:10.591 [DEBUG] [Thread-197991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:46:10.591 [DEBUG] [Thread-197991] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:46:10.592 [DEBUG] [Thread-197991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:46:10.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:46:10.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:46:10.594 [DEBUG] [Thread-197991] [transport.py] [_log()] userauth is OK
2026-04-12T23:46:10.594 [DEBUG] [Thread-197991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:46:10.594 [DEBUG] [Thread-197991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:46:10.594 [DEBUG] [Thread-197991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:46:10.594 [DEBUG] [Thread-197991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:46:10.613 [INFO] [Thread-197991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:46:10.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:46:11.349 [DEBUG] [Thread-197991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:46:11.349 [DEBUG] [Thread-197991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:46:11.350 [DEBUG] [Thread-197991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:46:11.390 [DEBUG] [Thread-197991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:46:11.390 [DEBUG] [Thread-197991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:46:11.394 [DEBUG] [Thread-197991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:46:11.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:46:11.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:46:11.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:46:11.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:46:11.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:46:11.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:46:11.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:46:11.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:46:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:46:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.906351 -999.00  +11.10   4.33     91   +9.70 1 2 1 3 1     0    0 1.50 7.24 ..e.. 4.3 4.3 205.6 4.9 11.8 -22.3 11.7 -21.2 11.3 -19.3 11.7 -21.2
2026-04-12T23:46:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:46:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:46:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.906351
2026-04-12T23:46:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:46:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:46:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:46:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:46:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:46:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:45:56', tmtdew=0.63441, humidity=95.7835, cloud=0.0, wind=6.07068, temperature=10.7524, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:45:08.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:46:11.421 [DEBUG] [Thread-197991] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:46:11.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:46:11.525 [DEBUG] [Thread-197994] [transport.py] [_log()] starting thread (client mode): 0xa7959e40
2026-04-12T23:46:11.525 [DEBUG] [Thread-197994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:46:11.540 [DEBUG] [Thread-197994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:46:11.540 [INFO] [Thread-197994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] client lang: <none>
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] server lang: <none>
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] kex follows: False
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:46:11.548 [DEBUG] [Thread-197994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:46:11.549 [DEBUG] [Thread-197994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:46:11.549 [DEBUG] [Thread-197994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:46:11.549 [DEBUG] [Thread-197994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:46:11.549 [DEBUG] [Thread-197994] [transport.py] [_log()] Compression: none
2026-04-12T23:46:11.549 [DEBUG] [Thread-197994] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:46:11.608 [DEBUG] [Thread-197994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:46:11.608 [DEBUG] [Thread-197994] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:46:11.609 [DEBUG] [Thread-197994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:46:11.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:46:11.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:46:11.664 [DEBUG] [Thread-197994] [transport.py] [_log()] userauth is OK
2026-04-12T23:46:11.665 [DEBUG] [Thread-197994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:46:11.665 [DEBUG] [Thread-197994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:46:11.665 [DEBUG] [Thread-197994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:46:11.666 [DEBUG] [Thread-197994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:46:11.690 [INFO] [Thread-197994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:46:11.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:46:11.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:46:12.516 [DEBUG] [Thread-197994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:46:12.517 [DEBUG] [Thread-197994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:46:12.564 [DEBUG] [Thread-197994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:46:12.564 [DEBUG] [Thread-197994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:46:12.573 [DEBUG] [Thread-197994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:46:12.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:46:12.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:46:12.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:46:12.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:46:12.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:46:12.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:46:12.611 [DEBUG] [Thread-197994] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:46:19.318 [DEBUG] [Thread-197996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:46:21.815 [DEBUG] [Thread-197997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:46:34.368 [DEBUG] [Thread-197998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:46:42.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:46:42.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:46:42.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:46:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 46, 32), 0.639525, 95.7508, 0.0, 6.17652, 10.7527, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:46:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:46:32
2026-04-12T23:46:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:46:44.472 [DEBUG] [Thread-197999] [transport.py] [_log()] starting thread (client mode): 0xb0fcfd00
2026-04-12T23:46:44.473 [DEBUG] [Thread-197999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:46:44.493 [DEBUG] [Thread-197999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:46:44.493 [INFO] [Thread-197999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:46:44.496 [DEBUG] [Thread-197999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:46:44.496 [DEBUG] [Thread-197999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:46:44.496 [DEBUG] [Thread-197999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:46:44.496 [DEBUG] [Thread-197999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:44.496 [DEBUG] [Thread-197999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:44.496 [DEBUG] [Thread-197999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:44.496 [DEBUG] [Thread-197999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] client lang: <none>
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] server lang: <none>
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] kex follows: False
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] Compression: none
2026-04-12T23:46:44.497 [DEBUG] [Thread-197999] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:46:44.515 [DEBUG] [Thread-197999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:46:44.516 [DEBUG] [Thread-197999] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:46:44.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:46:44.518 [DEBUG] [Thread-197999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:46:44.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:46:44.520 [DEBUG] [Thread-197999] [transport.py] [_log()] userauth is OK
2026-04-12T23:46:44.520 [DEBUG] [Thread-197999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:46:44.521 [DEBUG] [Thread-197999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:46:44.521 [DEBUG] [Thread-197999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:46:44.521 [DEBUG] [Thread-197999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:46:44.541 [INFO] [Thread-197999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:46:44.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:46:45.359 [DEBUG] [Thread-197999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:46:45.359 [DEBUG] [Thread-197999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:46:45.359 [DEBUG] [Thread-197999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:46:45.400 [DEBUG] [Thread-197999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:46:45.400 [DEBUG] [Thread-197999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:46:45.404 [DEBUG] [Thread-197999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:46:45.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:46:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:46:45.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:46:45.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:46:45.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:46:45.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:46:45.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:46:45.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:46:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:46:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.906699 -999.00  +11.10   2.71     91   +9.70 1 2 1 3 1     0    0 1.55 8.44 ..E.. 2.7 2.7 221.3 6.5 11.8 -22.4 11.7 -21.2 11.4 -19.3 11.7 -21.3
2026-04-12T23:46:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:46:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:46:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.906699
2026-04-12T23:46:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:46:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:46:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:46:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:46:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:46:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:46:32', tmtdew=0.639525, humidity=95.7508, cloud=0.0, wind=6.17652, temperature=10.7527, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:45:38.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:46:45.432 [DEBUG] [Thread-197999] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:46:45.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:46:45.525 [DEBUG] [Thread-198002] [transport.py] [_log()] starting thread (client mode): 0xb0fcea10
2026-04-12T23:46:45.525 [DEBUG] [Thread-198002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:46:45.542 [DEBUG] [Thread-198002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:46:45.542 [INFO] [Thread-198002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:46:45.549 [DEBUG] [Thread-198002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:46:45.550 [DEBUG] [Thread-198002] [transport.py] [_log()] client lang: <none>
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] server lang: <none>
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] kex follows: False
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:46:45.551 [DEBUG] [Thread-198002] [transport.py] [_log()] Compression: none
2026-04-12T23:46:45.552 [DEBUG] [Thread-198002] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:46:45.609 [DEBUG] [Thread-198002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:46:45.610 [DEBUG] [Thread-198002] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:46:45.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:46:45.612 [DEBUG] [Thread-198002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:46:45.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:46:45.670 [DEBUG] [Thread-198002] [transport.py] [_log()] userauth is OK
2026-04-12T23:46:45.670 [DEBUG] [Thread-198002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:46:45.670 [DEBUG] [Thread-198002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:46:45.670 [DEBUG] [Thread-198002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:46:45.670 [DEBUG] [Thread-198002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:46:45.693 [INFO] [Thread-198002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:46:45.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:46:45.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:46:46.560 [DEBUG] [Thread-198002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:46:46.560 [DEBUG] [Thread-198002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:46:46.608 [DEBUG] [Thread-198002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:46:46.608 [DEBUG] [Thread-198002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:46:46.617 [DEBUG] [Thread-198002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:46:46.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:46:46.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:46:46.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:46:46.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:46:46.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:46:46.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:46:46.654 [DEBUG] [Thread-198002] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:46:49.224 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:46:49.225 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:46:49.406 [DEBUG] [Thread-198004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:04.457 [DEBUG] [Thread-198005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:47:16.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:47:16.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:47:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 47, 8), 0.642115, 95.7342, 0.0, 6.31764, 10.7527, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:47:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:47:08
2026-04-12T23:47:18.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:47:18.436 [DEBUG] [Thread-198006] [transport.py] [_log()] starting thread (client mode): 0xa795b640
2026-04-12T23:47:18.436 [DEBUG] [Thread-198006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:47:18.450 [DEBUG] [Thread-198006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:47:18.451 [INFO] [Thread-198006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] client lang: <none>
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] server lang: <none>
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] kex follows: False
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:47:18.454 [DEBUG] [Thread-198006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:47:18.455 [DEBUG] [Thread-198006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:47:18.455 [DEBUG] [Thread-198006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:47:18.455 [DEBUG] [Thread-198006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:47:18.455 [DEBUG] [Thread-198006] [transport.py] [_log()] Compression: none
2026-04-12T23:47:18.455 [DEBUG] [Thread-198006] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:47:18.464 [DEBUG] [Thread-198006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:47:18.465 [DEBUG] [Thread-198006] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:47:18.465 [DEBUG] [Thread-198006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:47:18.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:47:18.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:47:18.468 [DEBUG] [Thread-198006] [transport.py] [_log()] userauth is OK
2026-04-12T23:47:18.468 [DEBUG] [Thread-198006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:47:18.469 [DEBUG] [Thread-198006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:47:18.469 [DEBUG] [Thread-198006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:47:18.469 [DEBUG] [Thread-198006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:47:18.494 [INFO] [Thread-198006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:47:18.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:47:19.255 [DEBUG] [Thread-198006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:47:19.256 [DEBUG] [Thread-198006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:47:19.256 [DEBUG] [Thread-198006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:47:19.296 [DEBUG] [Thread-198006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:47:19.297 [DEBUG] [Thread-198006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:47:19.300 [DEBUG] [Thread-198006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:47:19.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:47:19.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:47:19.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:47:19.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:47:19.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:47:19.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:47:19.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:47:19.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:47:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:47:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.907394 -999.00  +11.10   4.12     91   +9.70 1 2 1 3 1     0    0 1.60 9.72 ..e.. 4.1 4.1 222.9 4.8 11.8 -22.3 11.7 -21.3 11.4 -19.2 11.6 -21.2
2026-04-12T23:47:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:47:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:47:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.907394
2026-04-12T23:47:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:47:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:47:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:47:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:47:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:47:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:47:08', tmtdew=0.642115, humidity=95.7342, cloud=0.0, wind=6.31764, temperature=10.7527, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:46:38.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7292500000000004, nan, nan, nan, nan, nan, nan, 2.6075, 1.01525, 2.8499999999999996, nan, nan, nan, nan, nan, 2.6374999999999993, nan, nan, nan, 2.5127499999999987, nan, nan, 2.978999999999999, 0.3055000000000003, 0.1687499999999993, 0.28550000000000075, 0.33700000000000063, 0.668000000000001, 1.9475000000000007, 1.9490000000000007, 2.414749999999999], zp_timestamp='2026-04-12T21:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:47:19.327 [DEBUG] [Thread-198006] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:47:19.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:47:19.421 [DEBUG] [Thread-198009] [transport.py] [_log()] starting thread (client mode): 0xb0fce6b0
2026-04-12T23:47:19.421 [DEBUG] [Thread-198009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:47:19.436 [DEBUG] [Thread-198009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:47:19.436 [INFO] [Thread-198009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:47:19.446 [DEBUG] [Thread-198009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] client lang: <none>
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] server lang: <none>
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] kex follows: False
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] Compression: none
2026-04-12T23:47:19.447 [DEBUG] [Thread-198009] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:47:19.496 [DEBUG] [Thread-198011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:19.503 [DEBUG] [Thread-198009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:47:19.504 [DEBUG] [Thread-198009] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:47:19.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:47:19.505 [DEBUG] [Thread-198009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:47:19.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:47:19.560 [DEBUG] [Thread-198009] [transport.py] [_log()] userauth is OK
2026-04-12T23:47:19.561 [DEBUG] [Thread-198009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:47:19.561 [DEBUG] [Thread-198009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:47:19.561 [DEBUG] [Thread-198009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:47:19.561 [DEBUG] [Thread-198009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:47:19.580 [INFO] [Thread-198009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:47:19.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:47:19.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:47:20.385 [DEBUG] [Thread-198009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:47:20.386 [DEBUG] [Thread-198009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:47:20.434 [DEBUG] [Thread-198009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:47:20.435 [DEBUG] [Thread-198009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:47:20.444 [DEBUG] [Thread-198009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:47:20.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:47:20.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:47:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:47:20.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:47:20.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:47:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:47:20.481 [DEBUG] [Thread-198009] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:47:21.879 [DEBUG] [Thread-198012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:34.558 [DEBUG] [Thread-198013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:49.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:49.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:49.591 [DEBUG] [Thread-198014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:47:50.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:47:50.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:47:50.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:47:51.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 47, 43), 0.67921, 95.5016, 0.0, 8.85888, 10.5385, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:47:51.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:47:43
2026-04-12T23:47:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:47:52.353 [DEBUG] [Thread-198015] [transport.py] [_log()] starting thread (client mode): 0xb0fccac0
2026-04-12T23:47:52.353 [DEBUG] [Thread-198015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:47:52.373 [DEBUG] [Thread-198015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:47:52.373 [INFO] [Thread-198015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:47:52.376 [DEBUG] [Thread-198015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:47:52.376 [DEBUG] [Thread-198015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:47:52.376 [DEBUG] [Thread-198015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] client lang: <none>
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] server lang: <none>
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] kex follows: False
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] Compression: none
2026-04-12T23:47:52.377 [DEBUG] [Thread-198015] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:47:52.393 [DEBUG] [Thread-198015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:47:52.393 [DEBUG] [Thread-198015] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:47:52.393 [DEBUG] [Thread-198015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:47:52.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:47:52.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:47:52.394 [DEBUG] [Thread-198015] [transport.py] [_log()] userauth is OK
2026-04-12T23:47:52.394 [DEBUG] [Thread-198015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:47:52.394 [DEBUG] [Thread-198015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:47:52.394 [DEBUG] [Thread-198015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:47:52.394 [DEBUG] [Thread-198015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:47:52.411 [INFO] [Thread-198015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:47:52.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:47:53.164 [DEBUG] [Thread-198015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:47:53.164 [DEBUG] [Thread-198015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:47:53.165 [DEBUG] [Thread-198015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:47:53.205 [DEBUG] [Thread-198015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:47:53.205 [DEBUG] [Thread-198015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:47:53.209 [DEBUG] [Thread-198015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:47:53.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:47:53.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:47:53.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:47:53.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:47:53.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:47:53.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:47:53.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:47:53.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:47:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:47:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.907741 -999.00  +11.10   1.99     91   +9.70 1 2 1 3 1     0    0 1.58 10.16 ..e.. 2.0 2.0 243.7 5.4 11.8 -22.4 11.7 -21.3 11.3 -19.1 11.7 -21.2
2026-04-12T23:47:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:47:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:47:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.907741
2026-04-12T23:47:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:47:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:47:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:47:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:47:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:47:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:47:43', tmtdew=0.67921, humidity=95.5016, cloud=0.0, wind=8.85888, temperature=10.5385, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:47:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7852500000000004, nan, nan, nan, nan, nan, nan, nan, 1.32925, 3.2279999999999998, nan, nan, nan, nan, nan, 2.401, nan, nan, 3.538999999999999, nan, nan, nan, 2.821999999999999, 0.3414999999999999, 0.1977499999999992, 0.3260000000000005, 0.2839999999999998, 0.7000000000000011, 2.1305000000000014, 0.7500000000000009, 2.6207499999999992], zp_timestamp='2026-04-12T21:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:47:53.236 [DEBUG] [Thread-198015] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:47:53.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:47:53.330 [DEBUG] [Thread-198018] [transport.py] [_log()] starting thread (client mode): 0xb0fcee90
2026-04-12T23:47:53.330 [DEBUG] [Thread-198018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:47:53.345 [DEBUG] [Thread-198018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:47:53.345 [INFO] [Thread-198018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] client lang: <none>
2026-04-12T23:47:53.354 [DEBUG] [Thread-198018] [transport.py] [_log()] server lang: <none>
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] kex follows: False
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] Compression: none
2026-04-12T23:47:53.355 [DEBUG] [Thread-198018] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:47:53.415 [DEBUG] [Thread-198018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:47:53.416 [DEBUG] [Thread-198018] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:47:53.416 [DEBUG] [Thread-198018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:47:53.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:47:53.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:47:53.476 [DEBUG] [Thread-198018] [transport.py] [_log()] userauth is OK
2026-04-12T23:47:53.477 [DEBUG] [Thread-198018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:47:53.477 [DEBUG] [Thread-198018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:47:53.477 [DEBUG] [Thread-198018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:47:53.477 [DEBUG] [Thread-198018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:47:53.501 [INFO] [Thread-198018] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:47:53.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:47:53.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:47:54.330 [DEBUG] [Thread-198018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:47:54.330 [DEBUG] [Thread-198018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:47:54.378 [DEBUG] [Thread-198018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:47:54.378 [DEBUG] [Thread-198018] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:47:54.388 [DEBUG] [Thread-198018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:47:54.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:47:54.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:47:54.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:47:54.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:47:54.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:47:54.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:47:54.425 [DEBUG] [Thread-198018] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:48:04.630 [DEBUG] [Thread-198020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:48:19.682 [DEBUG] [Thread-198021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:48:21.935 [DEBUG] [Thread-198022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:48:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:48:24.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:48:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:48:25.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 48, 18), 0.689625, 95.7511, 0.0, 6.15888, 10.7861, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:48:25.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:48:18
2026-04-12T23:48:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:48:26.247 [DEBUG] [Thread-198023] [transport.py] [_log()] starting thread (client mode): 0xb0fcd960
2026-04-12T23:48:26.248 [DEBUG] [Thread-198023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:48:26.272 [DEBUG] [Thread-198023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:48:26.272 [INFO] [Thread-198023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:48:26.276 [DEBUG] [Thread-198023] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:48:26.276 [DEBUG] [Thread-198023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:48:26.276 [DEBUG] [Thread-198023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:48:26.276 [DEBUG] [Thread-198023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:48:26.276 [DEBUG] [Thread-198023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] client lang: <none>
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] server lang: <none>
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] kex follows: False
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:48:26.277 [DEBUG] [Thread-198023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:48:26.278 [DEBUG] [Thread-198023] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:48:26.278 [DEBUG] [Thread-198023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:48:26.278 [DEBUG] [Thread-198023] [transport.py] [_log()] Compression: none
2026-04-12T23:48:26.278 [DEBUG] [Thread-198023] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:48:26.296 [DEBUG] [Thread-198023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:48:26.297 [DEBUG] [Thread-198023] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:48:26.297 [DEBUG] [Thread-198023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:48:26.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:48:26.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:48:26.299 [DEBUG] [Thread-198023] [transport.py] [_log()] userauth is OK
2026-04-12T23:48:26.299 [DEBUG] [Thread-198023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:48:26.300 [DEBUG] [Thread-198023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:48:26.300 [DEBUG] [Thread-198023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:48:26.300 [DEBUG] [Thread-198023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:48:26.337 [INFO] [Thread-198023] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:48:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:48:27.162 [DEBUG] [Thread-198023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:48:27.162 [DEBUG] [Thread-198023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:48:27.162 [DEBUG] [Thread-198023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:48:27.204 [DEBUG] [Thread-198023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:48:27.204 [DEBUG] [Thread-198023] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:48:27.207 [DEBUG] [Thread-198023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:48:27.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:48:27.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:48:27.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:48:27.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:48:27.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:48:27.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:48:27.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:48:27.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:48:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:48:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.908088 -999.00  +11.10   2.77     91   +9.70 1 2 1 3 1     0    0 1.61 10.70 .nE.. 2.8 2.8 222.1 5.1 11.8 -22.5 11.7 -21.2 11.3 -19.2 11.7 -21.0
2026-04-12T23:48:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:48:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:48:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.908088
2026-04-12T23:48:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:48:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:48:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:48:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:48:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:48:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:48:18', tmtdew=0.689625, humidity=95.7511, cloud=0.0, wind=6.15888, temperature=10.7861, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:47:38.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7852500000000004, nan, nan, nan, nan, nan, nan, nan, 1.32925, 3.2279999999999998, nan, nan, nan, nan, nan, 2.401, nan, nan, 3.538999999999999, nan, nan, nan, 2.821999999999999, 0.3414999999999999, 0.1977499999999992, 0.3260000000000005, 0.2839999999999998, 0.7000000000000011, 2.1305000000000014, 0.7500000000000009, 2.6207499999999992], zp_timestamp='2026-04-12T21:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:48:27.232 [DEBUG] [Thread-198023] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:48:27.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:48:27.332 [DEBUG] [Thread-198026] [transport.py] [_log()] starting thread (client mode): 0xb0fce650
2026-04-12T23:48:27.332 [DEBUG] [Thread-198026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:48:27.346 [DEBUG] [Thread-198026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:48:27.346 [INFO] [Thread-198026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:48:27.354 [DEBUG] [Thread-198026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:48:27.354 [DEBUG] [Thread-198026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:48:27.354 [DEBUG] [Thread-198026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:48:27.354 [DEBUG] [Thread-198026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:48:27.354 [DEBUG] [Thread-198026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:48:27.354 [DEBUG] [Thread-198026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:48:27.354 [DEBUG] [Thread-198026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] client lang: <none>
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] server lang: <none>
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] kex follows: False
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:48:27.355 [DEBUG] [Thread-198026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:48:27.356 [DEBUG] [Thread-198026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:48:27.356 [DEBUG] [Thread-198026] [transport.py] [_log()] Compression: none
2026-04-12T23:48:27.356 [DEBUG] [Thread-198026] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:48:27.409 [DEBUG] [Thread-198026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:48:27.410 [DEBUG] [Thread-198026] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:48:27.410 [DEBUG] [Thread-198026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:48:27.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:48:27.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:48:27.466 [DEBUG] [Thread-198026] [transport.py] [_log()] userauth is OK
2026-04-12T23:48:27.466 [DEBUG] [Thread-198026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:48:27.466 [DEBUG] [Thread-198026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:48:27.467 [DEBUG] [Thread-198026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:48:27.467 [DEBUG] [Thread-198026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:48:27.489 [INFO] [Thread-198026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:48:27.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:48:27.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:48:28.335 [DEBUG] [Thread-198026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:48:28.335 [DEBUG] [Thread-198026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:48:28.383 [DEBUG] [Thread-198026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:48:28.383 [DEBUG] [Thread-198026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:48:28.392 [DEBUG] [Thread-198026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:48:28.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:48:28.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:48:28.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:48:28.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:48:28.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:48:28.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:48:28.425 [DEBUG] [Thread-198026] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:48:34.713 [DEBUG] [Thread-198028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:48:49.631 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:48:49.632 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:48:49.770 [DEBUG] [Thread-198029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:48:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:48:58.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:48:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:48:59.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 48, 18), 0.689625, 95.7511, 0.0, 6.15888, 10.7861, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:48:59.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:48:18
2026-04-12T23:49:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:49:00.419 [DEBUG] [Thread-198030] [transport.py] [_log()] starting thread (client mode): 0xb0fcde10
2026-04-12T23:49:00.419 [DEBUG] [Thread-198030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:49:00.439 [DEBUG] [Thread-198030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:49:00.439 [INFO] [Thread-198030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:49:00.440 [DEBUG] [Thread-198030] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:49:00.440 [DEBUG] [Thread-198030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] client lang: <none>
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] server lang: <none>
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] kex follows: False
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] Compression: none
2026-04-12T23:49:00.441 [DEBUG] [Thread-198030] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:49:00.449 [DEBUG] [Thread-198030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:49:00.449 [DEBUG] [Thread-198030] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:49:00.450 [DEBUG] [Thread-198030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:49:00.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:49:00.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:49:00.451 [DEBUG] [Thread-198030] [transport.py] [_log()] userauth is OK
2026-04-12T23:49:00.451 [DEBUG] [Thread-198030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:49:00.452 [DEBUG] [Thread-198030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:49:00.452 [DEBUG] [Thread-198030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:49:00.452 [DEBUG] [Thread-198030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:49:00.469 [INFO] [Thread-198030] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:49:00.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:49:01.223 [DEBUG] [Thread-198030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:49:01.224 [DEBUG] [Thread-198030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:49:01.224 [DEBUG] [Thread-198030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:49:01.265 [DEBUG] [Thread-198030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:49:01.265 [DEBUG] [Thread-198030] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:49:01.268 [DEBUG] [Thread-198030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:49:01.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:49:01.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:49:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:49:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:49:01.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:49:01.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:49:01.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:49:01.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:49:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:49:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.908435 -999.00  +11.10   5.23     91   +9.70 1 2 1 3 1     0    0 1.63 10.97 ..E.. 5.2 5.2 214.6 5.6 11.8 -22.4 11.7 -21.3 11.4 -19.3 11.7 -21.1
2026-04-12T23:49:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:49:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:49:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.908435
2026-04-12T23:49:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:49:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:49:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:49:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:49:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:49:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:48:18', tmtdew=0.689625, humidity=95.7511, cloud=0.0, wind=6.15888, temperature=10.7861, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:48:08.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7852500000000004, nan, nan, nan, nan, nan, nan, nan, 1.32925, 3.2279999999999998, nan, nan, nan, nan, nan, 2.401, nan, nan, 3.538999999999999, nan, nan, nan, 2.821999999999999, 0.3414999999999999, 0.1977499999999992, 0.3260000000000005, 0.2839999999999998, 0.7000000000000011, 2.1305000000000014, 0.7500000000000009, 2.6207499999999992], zp_timestamp='2026-04-12T21:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:49:01.291 [DEBUG] [Thread-198030] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:49:01.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:49:01.395 [DEBUG] [Thread-198033] [transport.py] [_log()] starting thread (client mode): 0xb0fcdb70
2026-04-12T23:49:01.395 [DEBUG] [Thread-198033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:49:01.410 [DEBUG] [Thread-198033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:49:01.410 [INFO] [Thread-198033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:49:01.417 [DEBUG] [Thread-198033] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] client lang: <none>
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] server lang: <none>
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] kex follows: False
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] Compression: none
2026-04-12T23:49:01.418 [DEBUG] [Thread-198033] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:49:01.478 [DEBUG] [Thread-198033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:49:01.479 [DEBUG] [Thread-198033] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:49:01.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:49:01.480 [DEBUG] [Thread-198033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:49:01.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:49:01.534 [DEBUG] [Thread-198033] [transport.py] [_log()] userauth is OK
2026-04-12T23:49:01.534 [DEBUG] [Thread-198033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:49:01.534 [DEBUG] [Thread-198033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:49:01.534 [DEBUG] [Thread-198033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:49:01.534 [DEBUG] [Thread-198033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:49:01.550 [INFO] [Thread-198033] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:49:01.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:49:01.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:49:02.356 [DEBUG] [Thread-198033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:49:02.356 [DEBUG] [Thread-198033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:49:02.404 [DEBUG] [Thread-198033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:49:02.404 [DEBUG] [Thread-198033] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:49:02.413 [DEBUG] [Thread-198033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:49:02.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:49: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')
2026-04-12T23:49:02.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:49:02.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:49:02.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:49:02.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:49:02.450 [DEBUG] [Thread-198033] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:49:04.808 [DEBUG] [Thread-198035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:49:19.859 [DEBUG] [Thread-198036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:49:22.018 [DEBUG] [Thread-198037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:49:32.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:49:32.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:49:32.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:49:33.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 48, 54), 0.69441, 95.4033, 0.0, 9.1764, 10.5061, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:49:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:48:54
2026-04-12T23:49:34.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:49:34.489 [DEBUG] [Thread-198038] [transport.py] [_log()] starting thread (client mode): 0xb0fcf7f0
2026-04-12T23:49:34.489 [DEBUG] [Thread-198038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:49:34.508 [DEBUG] [Thread-198038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:49:34.508 [INFO] [Thread-198038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:49:34.511 [DEBUG] [Thread-198038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] client lang: <none>
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] server lang: <none>
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] kex follows: False
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] Compression: none
2026-04-12T23:49:34.512 [DEBUG] [Thread-198038] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:49:34.529 [DEBUG] [Thread-198038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:49:34.529 [DEBUG] [Thread-198038] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:49:34.529 [DEBUG] [Thread-198038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:49:34.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:49:34.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:49:34.530 [DEBUG] [Thread-198038] [transport.py] [_log()] userauth is OK
2026-04-12T23:49:34.530 [DEBUG] [Thread-198038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:49:34.530 [DEBUG] [Thread-198038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:49:34.530 [DEBUG] [Thread-198038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:49:34.530 [DEBUG] [Thread-198038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:49:34.545 [INFO] [Thread-198038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:49:34.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:49:34.895 [DEBUG] [Thread-198040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:49:35.322 [DEBUG] [Thread-198038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:49:35.322 [DEBUG] [Thread-198038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:49:35.322 [DEBUG] [Thread-198038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:49:35.363 [DEBUG] [Thread-198038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:49:35.363 [DEBUG] [Thread-198038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:49:35.367 [DEBUG] [Thread-198038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:49:35.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:49:35.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:49:35.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:49:35.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:49:35.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:49:35.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:49:35.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:49:35.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:49:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:49:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.908782 -999.00  +11.10   3.90     91   +9.70 1 2 1 3 1     0    0 1.67 11.61 ..E.. 3.9 3.9 218.7 5.0 11.8 -22.4 11.7 -21.4 11.3 -19.2 11.7 -21.2
2026-04-12T23:49:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:49:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:49:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.908782
2026-04-12T23:49:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:49:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:49:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:49:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:49:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:49:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:48:54', tmtdew=0.69441, humidity=95.4033, cloud=0.0, wind=9.1764, temperature=10.5061, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:48:38.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7852500000000004, nan, nan, nan, nan, nan, nan, nan, 1.32925, 3.2279999999999998, nan, nan, nan, nan, nan, 2.401, nan, nan, 3.538999999999999, nan, nan, nan, 2.821999999999999, 0.3414999999999999, 0.1977499999999992, 0.3260000000000005, 0.2839999999999998, 0.7000000000000011, 2.1305000000000014, 0.7500000000000009, 2.6207499999999992], zp_timestamp='2026-04-12T21:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:49:35.394 [DEBUG] [Thread-198038] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:49:35.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:49:35.494 [DEBUG] [Thread-198042] [transport.py] [_log()] starting thread (client mode): 0xb0fcf340
2026-04-12T23:49:35.494 [DEBUG] [Thread-198042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:49:35.511 [DEBUG] [Thread-198042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:49:35.511 [INFO] [Thread-198042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:49:35.520 [DEBUG] [Thread-198042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:49:35.520 [DEBUG] [Thread-198042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] client lang: <none>
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] server lang: <none>
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] kex follows: False
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:49:35.521 [DEBUG] [Thread-198042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:49:35.522 [DEBUG] [Thread-198042] [transport.py] [_log()] Compression: none
2026-04-12T23:49:35.522 [DEBUG] [Thread-198042] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:49:35.581 [DEBUG] [Thread-198042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:49:35.581 [DEBUG] [Thread-198042] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:49:35.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:49:35.582 [DEBUG] [Thread-198042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:49:35.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:49:35.645 [DEBUG] [Thread-198042] [transport.py] [_log()] userauth is OK
2026-04-12T23:49:35.646 [DEBUG] [Thread-198042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:49:35.646 [DEBUG] [Thread-198042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:49:35.646 [DEBUG] [Thread-198042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:49:35.646 [DEBUG] [Thread-198042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:49:35.673 [INFO] [Thread-198042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:49:35.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:49:35.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:49:36.477 [DEBUG] [Thread-198042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:49:36.477 [DEBUG] [Thread-198042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:49:36.529 [DEBUG] [Thread-198042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:49:36.529 [DEBUG] [Thread-198042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:49:36.540 [DEBUG] [Thread-198042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:49:36.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:49:36.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:49:36.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:49:36.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:49:36.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:49:36.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:49:36.575 [DEBUG] [Thread-198042] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:49:49.841 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:49:49.842 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:49:49.931 [DEBUG] [Thread-198044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:50:04.986 [DEBUG] [Thread-198045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:50:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:50:06.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:50:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:50:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 49, 29), 0.74469, 95.2182, 0.0, 6.3882, 10.7697, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:50:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:49:29
2026-04-12T23:50:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:50:08.552 [DEBUG] [Thread-198046] [transport.py] [_log()] starting thread (client mode): 0xb0fcd720
2026-04-12T23:50:08.552 [DEBUG] [Thread-198046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:50:08.572 [DEBUG] [Thread-198046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:50:08.572 [INFO] [Thread-198046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:50:08.575 [DEBUG] [Thread-198046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:50:08.575 [DEBUG] [Thread-198046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:50:08.575 [DEBUG] [Thread-198046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:50:08.575 [DEBUG] [Thread-198046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] client lang: <none>
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] server lang: <none>
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] kex follows: False
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:50:08.576 [DEBUG] [Thread-198046] [transport.py] [_log()] Compression: none
2026-04-12T23:50:08.577 [DEBUG] [Thread-198046] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:50:08.595 [DEBUG] [Thread-198046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:50:08.596 [DEBUG] [Thread-198046] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:50:08.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:50:08.598 [DEBUG] [Thread-198046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:50:08.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:50:08.600 [DEBUG] [Thread-198046] [transport.py] [_log()] userauth is OK
2026-04-12T23:50:08.600 [DEBUG] [Thread-198046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:50:08.600 [DEBUG] [Thread-198046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:50:08.600 [DEBUG] [Thread-198046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:50:08.600 [DEBUG] [Thread-198046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:50:08.621 [INFO] [Thread-198046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:50:08.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:50:09.688 [DEBUG] [Thread-198046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:50:09.688 [DEBUG] [Thread-198046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:50:09.688 [DEBUG] [Thread-198046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:50:09.729 [DEBUG] [Thread-198046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:50:09.729 [DEBUG] [Thread-198046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:50:09.733 [DEBUG] [Thread-198046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:50:09.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:50:09.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:50:09.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:50:09.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:50:09.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:50:09.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:50:09.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:50:09.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:50:09.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:50:09.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.909130 -999.00  +11.10   1.80     91   +9.70 1 2 1 3 1     0    0 1.67 11.96 .NEsw 1.8 1.8 142.0 4.9 11.8 -22.4 11.7 -21.3 11.3 -19.3 11.7 -21.3
2026-04-12T23:50:09.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:50:09.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:50:09.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.909130
2026-04-12T23:50:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:50:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:50:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:50:09.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:50:09.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:50:09.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:49:29', tmtdew=0.74469, humidity=95.2182, cloud=0.0, wind=6.3882, temperature=10.7697, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:49:08.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7852500000000004, nan, nan, nan, nan, nan, nan, nan, 1.32925, 3.2279999999999998, nan, nan, nan, nan, nan, 2.401, nan, nan, 3.538999999999999, nan, nan, nan, 2.821999999999999, 0.3414999999999999, 0.1977499999999992, 0.3260000000000005, 0.2839999999999998, 0.7000000000000011, 2.1305000000000014, 0.7500000000000009, 2.6207499999999992], zp_timestamp='2026-04-12T21:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:50:09.763 [DEBUG] [Thread-198046] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:50:09.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:50:09.857 [DEBUG] [Thread-198049] [transport.py] [_log()] starting thread (client mode): 0xb0fce5c0
2026-04-12T23:50:09.858 [DEBUG] [Thread-198049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:50:09.876 [DEBUG] [Thread-198049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:50:09.876 [INFO] [Thread-198049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:50:09.887 [DEBUG] [Thread-198049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:50:09.888 [DEBUG] [Thread-198049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:50:09.888 [DEBUG] [Thread-198049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:50:09.888 [DEBUG] [Thread-198049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:09.888 [DEBUG] [Thread-198049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:09.888 [DEBUG] [Thread-198049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] client lang: <none>
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] server lang: <none>
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] kex follows: False
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] Compression: none
2026-04-12T23:50:09.889 [DEBUG] [Thread-198049] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:50:09.947 [DEBUG] [Thread-198049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:50:09.948 [DEBUG] [Thread-198049] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:50:09.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:50:09.949 [DEBUG] [Thread-198049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:50:09.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:50:10.011 [DEBUG] [Thread-198049] [transport.py] [_log()] userauth is OK
2026-04-12T23:50:10.011 [DEBUG] [Thread-198049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:50:10.011 [DEBUG] [Thread-198049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:50:10.012 [DEBUG] [Thread-198049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:50:10.012 [DEBUG] [Thread-198049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:50:10.039 [INFO] [Thread-198049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:50:10.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:50:10.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:50:10.865 [DEBUG] [Thread-198049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:50:10.865 [DEBUG] [Thread-198049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:50:10.916 [DEBUG] [Thread-198049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:50:10.916 [DEBUG] [Thread-198049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:50:10.928 [DEBUG] [Thread-198049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:50:10.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:50:10.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:50:10.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:50:10.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:50:10.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:50:10.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:50:10.984 [DEBUG] [Thread-198049] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:50:20.025 [DEBUG] [Thread-198051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:50:22.072 [DEBUG] [Thread-198052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:50:35.087 [DEBUG] [Thread-198053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:50:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:50:41.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:50:41.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:50:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 50, 6), 0.754795, 95.1521, 0.0, 6.3, 10.72, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:50:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:50:06
2026-04-12T23:50:42.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:50:42.905 [DEBUG] [Thread-198054] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6d0
2026-04-12T23:50:42.905 [DEBUG] [Thread-198054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:50:42.925 [DEBUG] [Thread-198054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:50:42.925 [INFO] [Thread-198054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:50:42.928 [DEBUG] [Thread-198054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] client lang: <none>
2026-04-12T23:50:42.929 [DEBUG] [Thread-198054] [transport.py] [_log()] server lang: <none>
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] kex follows: False
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] Compression: none
2026-04-12T23:50:42.930 [DEBUG] [Thread-198054] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:50:42.949 [DEBUG] [Thread-198054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:50:42.949 [DEBUG] [Thread-198054] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:50:42.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:50:42.950 [DEBUG] [Thread-198054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:50:42.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:50:42.953 [DEBUG] [Thread-198054] [transport.py] [_log()] userauth is OK
2026-04-12T23:50:42.953 [DEBUG] [Thread-198054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:50:42.953 [DEBUG] [Thread-198054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:50:42.953 [DEBUG] [Thread-198054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:50:42.953 [DEBUG] [Thread-198054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:50:42.978 [INFO] [Thread-198054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:50:42.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:50:43.759 [DEBUG] [Thread-198054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:50:43.759 [DEBUG] [Thread-198054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:50:43.760 [DEBUG] [Thread-198054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:50:43.800 [DEBUG] [Thread-198054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:50:43.800 [DEBUG] [Thread-198054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:50:43.804 [DEBUG] [Thread-198054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:50:43.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:50:43.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:50:43.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:50:43.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:50:43.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:50:43.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:50:43.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:50:43.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:50:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:50:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.909823 -999.00  +11.10   4.75     91   +9.70 1 2 1 3 1     0    0 1.69 12.90 ..... 4.8 4.8 214.0 5.5 11.8 -22.4 11.7 -21.2 11.4 -19.2 11.6 -21.2
2026-04-12T23:50:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:50:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:50:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.909823
2026-04-12T23:50:43.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:50:43.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:50:43.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:50:43.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:50:43.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:50:43.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:50:06', tmtdew=0.754795, humidity=95.1521, cloud=0.0, wind=6.3, temperature=10.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:50:08.707', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.7852500000000004, nan, nan, nan, nan, nan, nan, nan, 1.32925, 3.2279999999999998, nan, nan, nan, nan, nan, 2.401, nan, nan, 3.538999999999999, nan, nan, nan, 2.821999999999999, 0.3414999999999999, 0.1977499999999992, 0.3260000000000005, 0.2839999999999998, 0.7000000000000011, 2.1305000000000014, 0.7500000000000009, 2.6207499999999992], zp_timestamp='2026-04-12T21:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:50:43.832 [DEBUG] [Thread-198054] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:50:43.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:50:43.925 [DEBUG] [Thread-198057] [transport.py] [_log()] starting thread (client mode): 0xb0fcf0a0
2026-04-12T23:50:43.925 [DEBUG] [Thread-198057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:50:43.940 [DEBUG] [Thread-198057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:50:43.940 [INFO] [Thread-198057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] client lang: <none>
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] server lang: <none>
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] kex follows: False
2026-04-12T23:50:43.948 [DEBUG] [Thread-198057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:50:43.949 [DEBUG] [Thread-198057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:50:43.949 [DEBUG] [Thread-198057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:50:43.949 [DEBUG] [Thread-198057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:50:43.949 [DEBUG] [Thread-198057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:50:43.949 [DEBUG] [Thread-198057] [transport.py] [_log()] Compression: none
2026-04-12T23:50:43.949 [DEBUG] [Thread-198057] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:50:44.005 [DEBUG] [Thread-198057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:50:44.006 [DEBUG] [Thread-198057] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:50:44.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:50:44.007 [DEBUG] [Thread-198057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:50:44.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:50:44.062 [DEBUG] [Thread-198057] [transport.py] [_log()] userauth is OK
2026-04-12T23:50:44.062 [DEBUG] [Thread-198057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:50:44.062 [DEBUG] [Thread-198057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:50:44.062 [DEBUG] [Thread-198057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:50:44.062 [DEBUG] [Thread-198057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:50:44.081 [INFO] [Thread-198057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:50:44.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:50:44.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:50:44.891 [DEBUG] [Thread-198057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:50:44.892 [DEBUG] [Thread-198057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:50:44.939 [DEBUG] [Thread-198057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:50:44.939 [DEBUG] [Thread-198057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:50:44.949 [DEBUG] [Thread-198057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:50:44.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:50:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:50:44.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:50:44.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:50:44.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:50:44.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:50:44.986 [DEBUG] [Thread-198057] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:50:50.047 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:50:50.048 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:50:50.120 [DEBUG] [Thread-198059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:05.175 [DEBUG] [Thread-198060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:15.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:51:15.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:51:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:51:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 50, 41), 0.69969, 95.3706, 0.0, 9.84672, 10.5396, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:51:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:50:41
2026-04-12T23:51:16.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:51:16.832 [DEBUG] [Thread-198061] [transport.py] [_log()] starting thread (client mode): 0xae560ac0
2026-04-12T23:51:16.832 [DEBUG] [Thread-198061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:51:16.851 [DEBUG] [Thread-198061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:51:16.851 [INFO] [Thread-198061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:51:16.854 [DEBUG] [Thread-198061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] client lang: <none>
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] server lang: <none>
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] kex follows: False
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:51:16.855 [DEBUG] [Thread-198061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:51:16.856 [DEBUG] [Thread-198061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:51:16.856 [DEBUG] [Thread-198061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:51:16.856 [DEBUG] [Thread-198061] [transport.py] [_log()] Compression: none
2026-04-12T23:51:16.856 [DEBUG] [Thread-198061] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:51:16.873 [DEBUG] [Thread-198061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:51:16.874 [DEBUG] [Thread-198061] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:51:16.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:51:16.875 [DEBUG] [Thread-198061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:51:16.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:51:16.877 [DEBUG] [Thread-198061] [transport.py] [_log()] userauth is OK
2026-04-12T23:51:16.877 [DEBUG] [Thread-198061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:51:16.877 [DEBUG] [Thread-198061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:51:16.877 [DEBUG] [Thread-198061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:51:16.878 [DEBUG] [Thread-198061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:51:16.892 [INFO] [Thread-198061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:51:16.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:51:17.700 [DEBUG] [Thread-198061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:51:17.700 [DEBUG] [Thread-198061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:51:17.700 [DEBUG] [Thread-198061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:51:17.740 [DEBUG] [Thread-198061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:51:17.741 [DEBUG] [Thread-198061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:51:17.744 [DEBUG] [Thread-198061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:51:17.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:51:17.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:51:17.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:51:17.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:51:17.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:51:17.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:51:17.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:51:17.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:51:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:51:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.910171 -999.00  +11.10   3.59     91   +9.70 1 2 1 3 1     0    0 1.73 13.83 ..... 3.6 3.6 199.6 6.0 11.8 -22.3 11.7 -21.2 11.4 -19.3 11.7 -21.3
2026-04-12T23:51:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:51:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:51:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.910171
2026-04-12T23:51:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:51:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:51:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:51:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:51:17.766 [DEBUG] [Thread-198061] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:51:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:51:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:50:41', tmtdew=0.69969, humidity=95.3706, cloud=0.0, wind=9.84672, temperature=10.5396, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:50:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:51:17.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:51:17.857 [DEBUG] [Thread-198064] [transport.py] [_log()] starting thread (client mode): 0xae563430
2026-04-12T23:51:17.858 [DEBUG] [Thread-198064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:51:17.872 [DEBUG] [Thread-198064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:51:17.872 [INFO] [Thread-198064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:51:17.880 [DEBUG] [Thread-198064] [transport.py] [_log()] client lang: <none>
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] server lang: <none>
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] kex follows: False
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] Compression: none
2026-04-12T23:51:17.881 [DEBUG] [Thread-198064] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:51:17.936 [DEBUG] [Thread-198064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:51:17.937 [DEBUG] [Thread-198064] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:51:17.937 [DEBUG] [Thread-198064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:51:17.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:51:17.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:51:17.995 [DEBUG] [Thread-198064] [transport.py] [_log()] userauth is OK
2026-04-12T23:51:17.995 [DEBUG] [Thread-198064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:51:17.996 [DEBUG] [Thread-198064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:51:17.996 [DEBUG] [Thread-198064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:51:17.996 [DEBUG] [Thread-198064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:51:18.014 [INFO] [Thread-198064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:51:18.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:51:18.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:51:18.784 [DEBUG] [Thread-198064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:51:18.784 [DEBUG] [Thread-198064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:51:18.832 [DEBUG] [Thread-198064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:51:18.832 [DEBUG] [Thread-198064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:51:18.841 [DEBUG] [Thread-198064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:51:18.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:51:18.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:51:18.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:51:18.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:51:18.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:51:18.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:51:18.878 [DEBUG] [Thread-198064] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:51:20.216 [DEBUG] [Thread-198066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:22.143 [DEBUG] [Thread-198067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:35.270 [DEBUG] [Thread-198068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:48.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:51:48.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:51:48.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:51:50.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 51, 17), 0.754925, 95.1523, 0.0, 6.28236, 10.7533, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:51:50.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:51:17
2026-04-12T23:51:50.256 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:50.257 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:50.308 [DEBUG] [Thread-198069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:51:50.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:51:50.719 [DEBUG] [Thread-198070] [transport.py] [_log()] starting thread (client mode): 0xae5617b0
2026-04-12T23:51:50.719 [DEBUG] [Thread-198070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:51:50.733 [DEBUG] [Thread-198070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:51:50.733 [INFO] [Thread-198070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] client lang: <none>
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] server lang: <none>
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] kex follows: False
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] Compression: none
2026-04-12T23:51:50.736 [DEBUG] [Thread-198070] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:51:50.753 [DEBUG] [Thread-198070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:51:50.753 [DEBUG] [Thread-198070] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:51:50.754 [DEBUG] [Thread-198070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:51:50.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:51:50.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:51:50.756 [DEBUG] [Thread-198070] [transport.py] [_log()] userauth is OK
2026-04-12T23:51:50.756 [DEBUG] [Thread-198070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:51:50.756 [DEBUG] [Thread-198070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:51:50.756 [DEBUG] [Thread-198070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:51:50.756 [DEBUG] [Thread-198070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:51:50.774 [INFO] [Thread-198070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:51:50.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:51:51.535 [DEBUG] [Thread-198070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:51:51.535 [DEBUG] [Thread-198070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:51:51.536 [DEBUG] [Thread-198070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:51:51.576 [DEBUG] [Thread-198070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:51:51.576 [DEBUG] [Thread-198070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:51:51.580 [DEBUG] [Thread-198070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:51:51.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:51:51.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:51:51.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:51:51.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:51:51.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:51:51.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:51:51.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:51:51.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:51:51.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:51:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.910518 -999.00  +11.10   3.07     91   +9.70 1 2 1 3 1     0    0 1.72 13.81 ..e.. 3.1 3.1 199.6 5.9 11.8 -22.4 11.7 -21.3 11.4 -19.3 11.7 -21.3
2026-04-12T23:51:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:51:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:51:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.910518
2026-04-12T23:51:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:51:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:51:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:51:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:51:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:51:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:51:17', tmtdew=0.754925, humidity=95.1523, cloud=0.0, wind=6.28236, temperature=10.7533, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:51:08.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:51:51.607 [DEBUG] [Thread-198070] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:51:51.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:51:51.707 [DEBUG] [Thread-198073] [transport.py] [_log()] starting thread (client mode): 0xb0fcf130
2026-04-12T23:51:51.707 [DEBUG] [Thread-198073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:51:51.721 [DEBUG] [Thread-198073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:51:51.721 [INFO] [Thread-198073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:51:51.729 [DEBUG] [Thread-198073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:51:51.730 [DEBUG] [Thread-198073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:51:51.730 [DEBUG] [Thread-198073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:51:51.730 [DEBUG] [Thread-198073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:51.730 [DEBUG] [Thread-198073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:51:51.730 [DEBUG] [Thread-198073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:51.730 [DEBUG] [Thread-198073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:51:51.730 [DEBUG] [Thread-198073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] client lang: <none>
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] server lang: <none>
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] kex follows: False
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] Compression: none
2026-04-12T23:51:51.731 [DEBUG] [Thread-198073] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:51:51.789 [DEBUG] [Thread-198073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:51:51.789 [DEBUG] [Thread-198073] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:51:51.790 [DEBUG] [Thread-198073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:51:51.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:51:51.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:51:51.844 [DEBUG] [Thread-198073] [transport.py] [_log()] userauth is OK
2026-04-12T23:51:51.845 [DEBUG] [Thread-198073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:51:51.845 [DEBUG] [Thread-198073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:51:51.845 [DEBUG] [Thread-198073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:51:51.845 [DEBUG] [Thread-198073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:51:51.864 [INFO] [Thread-198073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:51:51.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:51:51.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:51:52.655 [DEBUG] [Thread-198073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:51:52.655 [DEBUG] [Thread-198073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:51:52.703 [DEBUG] [Thread-198073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:51:52.703 [DEBUG] [Thread-198073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:51:52.713 [DEBUG] [Thread-198073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:51:52.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:51:52.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:51:52.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:51:52.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:51:52.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:51:52.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:51:52.745 [DEBUG] [Thread-198073] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:52:05.345 [DEBUG] [Thread-198075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:52:20.397 [DEBUG] [Thread-198076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:52:22.210 [DEBUG] [Thread-198077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:52:22.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:52:22.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:52:22.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:52:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 51, 52), 0.69995, 95.3709, 0.0, 9.3528, 10.6061, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:52:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:51:52
2026-04-12T23:52:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:52:24.551 [DEBUG] [Thread-198078] [transport.py] [_log()] starting thread (client mode): 0xb0fceb00
2026-04-12T23:52:24.551 [DEBUG] [Thread-198078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:52:24.572 [DEBUG] [Thread-198078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:52:24.572 [INFO] [Thread-198078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:52:24.575 [DEBUG] [Thread-198078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:52:24.575 [DEBUG] [Thread-198078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:52:24.575 [DEBUG] [Thread-198078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] client lang: <none>
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] server lang: <none>
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] kex follows: False
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:52:24.576 [DEBUG] [Thread-198078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:52:24.577 [DEBUG] [Thread-198078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:52:24.577 [DEBUG] [Thread-198078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:52:24.577 [DEBUG] [Thread-198078] [transport.py] [_log()] Compression: none
2026-04-12T23:52:24.577 [DEBUG] [Thread-198078] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:52:24.596 [DEBUG] [Thread-198078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:52:24.596 [DEBUG] [Thread-198078] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:52:24.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:52:24.598 [DEBUG] [Thread-198078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:52:24.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:52:24.601 [DEBUG] [Thread-198078] [transport.py] [_log()] userauth is OK
2026-04-12T23:52:24.601 [DEBUG] [Thread-198078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:52:24.601 [DEBUG] [Thread-198078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:52:24.601 [DEBUG] [Thread-198078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:52:24.601 [DEBUG] [Thread-198078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:52:24.622 [INFO] [Thread-198078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:52:24.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:52:25.424 [DEBUG] [Thread-198078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:52:25.424 [DEBUG] [Thread-198078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:52:25.424 [DEBUG] [Thread-198078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:52:25.465 [DEBUG] [Thread-198078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:52:25.466 [DEBUG] [Thread-198078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:52:25.469 [DEBUG] [Thread-198078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:52:25.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:52:25.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:52:25.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:52:25.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:52:25.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:52:25.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:52:25.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:52:25.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:52:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:52:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.910866 -999.00  +11.10   3.62     91   +9.70 1 2 1 3 1     0    0 1.76 14.67 ..esw 3.6 3.6 213.4 6.1 11.8 -22.3 11.7 -21.3 11.3 -19.1 11.7 -21.3
2026-04-12T23:52:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:52:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:52:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.910866
2026-04-12T23:52:25.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:52:25.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:52:25.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:52:25.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:52:25.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:52:25.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:51:52', tmtdew=0.69995, humidity=95.3709, cloud=0.0, wind=9.3528, temperature=10.6061, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:51:38.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:52:25.498 [DEBUG] [Thread-198078] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:52:25.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:52:25.591 [DEBUG] [Thread-198081] [transport.py] [_log()] starting thread (client mode): 0xae5629b0
2026-04-12T23:52:25.591 [DEBUG] [Thread-198081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:52:25.606 [DEBUG] [Thread-198081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:52:25.606 [INFO] [Thread-198081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:52:25.614 [DEBUG] [Thread-198081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:52:25.614 [DEBUG] [Thread-198081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:52:25.614 [DEBUG] [Thread-198081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:52:25.614 [DEBUG] [Thread-198081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] client lang: <none>
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] server lang: <none>
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] kex follows: False
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] Compression: none
2026-04-12T23:52:25.615 [DEBUG] [Thread-198081] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:52:25.673 [DEBUG] [Thread-198081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:52:25.673 [DEBUG] [Thread-198081] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:52:25.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:52:25.675 [DEBUG] [Thread-198081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:52:25.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:52:25.732 [DEBUG] [Thread-198081] [transport.py] [_log()] userauth is OK
2026-04-12T23:52:25.733 [DEBUG] [Thread-198081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:52:25.733 [DEBUG] [Thread-198081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:52:25.733 [DEBUG] [Thread-198081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:52:25.733 [DEBUG] [Thread-198081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:52:25.752 [INFO] [Thread-198081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:52:25.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:52:25.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:52:26.581 [DEBUG] [Thread-198081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:52:26.581 [DEBUG] [Thread-198081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:52:26.629 [DEBUG] [Thread-198081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:52:26.629 [DEBUG] [Thread-198081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:52:26.639 [DEBUG] [Thread-198081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:52:26.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:52:26.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:52:26.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:52:26.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:52:26.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:52:26.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:52:26.675 [DEBUG] [Thread-198081] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:52:35.435 [DEBUG] [Thread-198083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:52:50.461 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:52:50.462 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:52:50.486 [DEBUG] [Thread-198084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:52:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:52:56.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:52:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:52:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 52, 28), 0.80764, 95.1354, 0.0, 8.55864, 10.7697, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:52:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:52:28
2026-04-12T23:52:58.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:52:58.522 [DEBUG] [Thread-198085] [transport.py] [_log()] starting thread (client mode): 0xb39c6470
2026-04-12T23:52:58.522 [DEBUG] [Thread-198085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:52:58.542 [DEBUG] [Thread-198085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:52:58.542 [INFO] [Thread-198085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:52:58.546 [DEBUG] [Thread-198085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] client lang: <none>
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] server lang: <none>
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] kex follows: False
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] Compression: none
2026-04-12T23:52:58.547 [DEBUG] [Thread-198085] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:52:58.565 [DEBUG] [Thread-198085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:52:58.566 [DEBUG] [Thread-198085] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:52:58.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:52:58.567 [DEBUG] [Thread-198085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:52:58.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:52:58.570 [DEBUG] [Thread-198085] [transport.py] [_log()] userauth is OK
2026-04-12T23:52:58.570 [DEBUG] [Thread-198085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:52:58.570 [DEBUG] [Thread-198085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:52:58.570 [DEBUG] [Thread-198085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:52:58.570 [DEBUG] [Thread-198085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:52:58.595 [INFO] [Thread-198085] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:52:58.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:52:59.394 [DEBUG] [Thread-198085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:52:59.395 [DEBUG] [Thread-198085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:52:59.395 [DEBUG] [Thread-198085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:52:59.435 [DEBUG] [Thread-198085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:52:59.435 [DEBUG] [Thread-198085] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:52:59.439 [DEBUG] [Thread-198085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:52:59.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:52:59.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:52:59.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:52:59.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:52:59.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:52:59.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:52:59.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:52:59.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:52:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:52:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.911213 -999.00  +11.10   1.73     91   +9.80 1 2 1 3 1     0    0 1.73 13.83 ..esw 1.7 1.7 152.2 5.0 11.8 -22.4 11.7 -21.3 11.4 -19.2 11.7 -21.2
2026-04-12T23:52:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:52:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:52:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.911213
2026-04-12T23:52:59.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:52:59.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:52:59.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:52:59.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:52:59.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:52:59.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:52:28', tmtdew=0.80764, humidity=95.1354, cloud=0.0, wind=8.55864, temperature=10.7697, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:52:08.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:52:59.465 [DEBUG] [Thread-198085] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:52:59.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:52:59.558 [DEBUG] [Thread-198088] [transport.py] [_log()] starting thread (client mode): 0xb39c73d0
2026-04-12T23:52:59.558 [DEBUG] [Thread-198088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:52:59.574 [DEBUG] [Thread-198088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:52:59.575 [INFO] [Thread-198088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:52:59.582 [DEBUG] [Thread-198088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:52:59.582 [DEBUG] [Thread-198088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] client lang: <none>
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] server lang: <none>
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] kex follows: False
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] Compression: none
2026-04-12T23:52:59.583 [DEBUG] [Thread-198088] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:52:59.641 [DEBUG] [Thread-198088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:52:59.641 [DEBUG] [Thread-198088] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:52:59.642 [DEBUG] [Thread-198088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:52:59.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:52:59.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:52:59.700 [DEBUG] [Thread-198088] [transport.py] [_log()] userauth is OK
2026-04-12T23:52:59.700 [DEBUG] [Thread-198088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:52:59.701 [DEBUG] [Thread-198088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:52:59.701 [DEBUG] [Thread-198088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:52:59.701 [DEBUG] [Thread-198088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:52:59.720 [INFO] [Thread-198088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:52:59.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:52:59.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:53:00.522 [DEBUG] [Thread-198088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:53:00.523 [DEBUG] [Thread-198088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:53:00.571 [DEBUG] [Thread-198088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:53:00.571 [DEBUG] [Thread-198088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:53:00.581 [DEBUG] [Thread-198088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:53:00.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:53:00.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:53:00.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:53:00.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:53:00.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:53:00.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:53:00.618 [DEBUG] [Thread-198088] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:53:05.522 [DEBUG] [Thread-198090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:53:20.586 [DEBUG] [Thread-198091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:53:22.287 [DEBUG] [Thread-198092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:53:30.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:53:30.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:53:30.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:53:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 53, 6), 0.80253, 95.1686, 0.0, 8.6292, 10.7863, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:53:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:53:06
2026-04-12T23:53:32.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:53:32.591 [DEBUG] [Thread-198093] [transport.py] [_log()] starting thread (client mode): 0xae562050
2026-04-12T23:53:32.591 [DEBUG] [Thread-198093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:53:32.611 [DEBUG] [Thread-198093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:53:32.612 [INFO] [Thread-198093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:53:32.614 [DEBUG] [Thread-198093] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:53:32.614 [DEBUG] [Thread-198093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:53:32.614 [DEBUG] [Thread-198093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:53:32.614 [DEBUG] [Thread-198093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] client lang: <none>
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] server lang: <none>
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] kex follows: False
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] Compression: none
2026-04-12T23:53:32.615 [DEBUG] [Thread-198093] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:53:32.632 [DEBUG] [Thread-198093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:53:32.633 [DEBUG] [Thread-198093] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:53:32.634 [DEBUG] [Thread-198093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:53:32.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:53:32.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:53:32.677 [DEBUG] [Thread-198093] [transport.py] [_log()] userauth is OK
2026-04-12T23:53:32.677 [DEBUG] [Thread-198093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:53:32.677 [DEBUG] [Thread-198093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:53:32.678 [DEBUG] [Thread-198093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:53:32.678 [DEBUG] [Thread-198093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:53:32.698 [INFO] [Thread-198093] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:53:32.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:53:33.469 [DEBUG] [Thread-198093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:53:33.469 [DEBUG] [Thread-198093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:53:33.469 [DEBUG] [Thread-198093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:53:33.510 [DEBUG] [Thread-198093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:53:33.510 [DEBUG] [Thread-198093] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:53:33.513 [DEBUG] [Thread-198093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:53:33.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:53:33.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:53:33.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:53:33.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:53:33.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:53:33.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:53:33.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:53:33.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:53:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:53:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.911560 -999.00  +11.10   3.28     91   +9.80 1 2 1 3 1     0    0 1.69 12.91 .nESw 3.3 3.3 219.4 4.9 11.8 -22.3 11.7 -21.5 11.4 -19.4 11.7 -21.3
2026-04-12T23:53:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:53:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:53:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.911560
2026-04-12T23:53:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:53:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:53:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:53:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:53:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:53:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:53:06', tmtdew=0.80253, humidity=95.1686, cloud=0.0, wind=8.6292, temperature=10.7863, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:52:38.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:53:33.531 [DEBUG] [Thread-198093] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:53:33.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:53:33.612 [DEBUG] [Thread-198096] [transport.py] [_log()] starting thread (client mode): 0xb0fcf250
2026-04-12T23:53:33.612 [DEBUG] [Thread-198096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:53:33.627 [DEBUG] [Thread-198096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:53:33.627 [INFO] [Thread-198096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:53:33.634 [DEBUG] [Thread-198096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:53:33.634 [DEBUG] [Thread-198096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] client lang: <none>
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] server lang: <none>
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] kex follows: False
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] Compression: none
2026-04-12T23:53:33.635 [DEBUG] [Thread-198096] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:53:33.692 [DEBUG] [Thread-198096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:53:33.693 [DEBUG] [Thread-198096] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:53:33.693 [DEBUG] [Thread-198096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:53:33.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:53:33.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:53:33.752 [DEBUG] [Thread-198096] [transport.py] [_log()] userauth is OK
2026-04-12T23:53:33.752 [DEBUG] [Thread-198096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:53:33.752 [DEBUG] [Thread-198096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:53:33.752 [DEBUG] [Thread-198096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:53:33.752 [DEBUG] [Thread-198096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:53:33.772 [INFO] [Thread-198096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:53:33.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:53:33.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:53:34.594 [DEBUG] [Thread-198096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:53:34.594 [DEBUG] [Thread-198096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:53:34.642 [DEBUG] [Thread-198096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:53:34.643 [DEBUG] [Thread-198096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:53:34.651 [DEBUG] [Thread-198096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:53:34.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:53:34.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:53:34.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:53:34.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:53:34.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:53:34.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:53:34.684 [DEBUG] [Thread-198096] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:53:35.623 [DEBUG] [Thread-198098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:53:50.669 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:53:50.670 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:53:50.683 [DEBUG] [Thread-198099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:54:04.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:54:04.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:54:04.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:54:05.720 [DEBUG] [Thread-198100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:54:06.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 53, 41), 0.70496, 95.3368, 0.0, 10.0231, 10.5392, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:54:06.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:53:41
2026-04-12T23:54:06.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:54:06.542 [DEBUG] [Thread-198101] [transport.py] [_log()] starting thread (client mode): 0xb39c72e0
2026-04-12T23:54:06.542 [DEBUG] [Thread-198101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:54:06.554 [DEBUG] [Thread-198101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:54:06.554 [INFO] [Thread-198101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] client lang: <none>
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] server lang: <none>
2026-04-12T23:54:06.557 [DEBUG] [Thread-198101] [transport.py] [_log()] kex follows: False
2026-04-12T23:54:06.558 [DEBUG] [Thread-198101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:54:06.558 [DEBUG] [Thread-198101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:54:06.558 [DEBUG] [Thread-198101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:54:06.558 [DEBUG] [Thread-198101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:54:06.558 [DEBUG] [Thread-198101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:54:06.558 [DEBUG] [Thread-198101] [transport.py] [_log()] Compression: none
2026-04-12T23:54:06.558 [DEBUG] [Thread-198101] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:54:06.573 [DEBUG] [Thread-198101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:54:06.574 [DEBUG] [Thread-198101] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:54:06.574 [DEBUG] [Thread-198101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:54:06.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:54:06.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:54:06.576 [DEBUG] [Thread-198101] [transport.py] [_log()] userauth is OK
2026-04-12T23:54:06.576 [DEBUG] [Thread-198101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:54:06.576 [DEBUG] [Thread-198101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:54:06.576 [DEBUG] [Thread-198101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:54:06.576 [DEBUG] [Thread-198101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:54:06.595 [INFO] [Thread-198101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:54:06.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:54:07.366 [DEBUG] [Thread-198101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:54:07.366 [DEBUG] [Thread-198101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:54:07.366 [DEBUG] [Thread-198101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:54:07.407 [DEBUG] [Thread-198101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:54:07.407 [DEBUG] [Thread-198101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:54:07.410 [DEBUG] [Thread-198101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:54:07.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:54:07.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:54:07.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:54:07.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:54:07.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:54:07.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:54:07.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:54:07.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:54:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:54:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.912254 -999.00  +11.10   5.48     91   +9.70 1 2 1 3 1     0    0 1.75 13.14 ..... 5.5 5.5 208.6 8.1 11.8 -22.4 11.7 -21.3 11.4 -19.3 11.7 -21.2
2026-04-12T23:54:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:54:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:54:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.912254
2026-04-12T23:54:07.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:54:07.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:54:07.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:54:07.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:54:07.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:54:07.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:53:41', tmtdew=0.70496, humidity=95.3368, cloud=0.0, wind=10.0231, temperature=10.5392, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:53:38.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:54:07.437 [DEBUG] [Thread-198101] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:54:07.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:54:07.538 [DEBUG] [Thread-198104] [transport.py] [_log()] starting thread (client mode): 0xb0fcc430
2026-04-12T23:54:07.539 [DEBUG] [Thread-198104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:54:07.553 [DEBUG] [Thread-198104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:54:07.553 [INFO] [Thread-198104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] client lang: <none>
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] server lang: <none>
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] kex follows: False
2026-04-12T23:54:07.561 [DEBUG] [Thread-198104] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:54:07.562 [DEBUG] [Thread-198104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:54:07.562 [DEBUG] [Thread-198104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:54:07.562 [DEBUG] [Thread-198104] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:54:07.562 [DEBUG] [Thread-198104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:54:07.562 [DEBUG] [Thread-198104] [transport.py] [_log()] Compression: none
2026-04-12T23:54:07.562 [DEBUG] [Thread-198104] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:54:07.620 [DEBUG] [Thread-198104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:54:07.621 [DEBUG] [Thread-198104] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:54:07.621 [DEBUG] [Thread-198104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:54:07.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:54:07.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:54:07.676 [DEBUG] [Thread-198104] [transport.py] [_log()] userauth is OK
2026-04-12T23:54:07.676 [DEBUG] [Thread-198104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:54:07.676 [DEBUG] [Thread-198104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:54:07.676 [DEBUG] [Thread-198104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:54:07.676 [DEBUG] [Thread-198104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:54:07.700 [INFO] [Thread-198104] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:54:07.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:54:07.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:54:08.512 [DEBUG] [Thread-198104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:54:08.512 [DEBUG] [Thread-198104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:54:08.560 [DEBUG] [Thread-198104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:54:08.561 [DEBUG] [Thread-198104] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:54:08.570 [DEBUG] [Thread-198104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:54:08.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:54:08.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:54:08.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:54:08.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:54:08.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:54:08.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:54:08.609 [DEBUG] [Thread-198104] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:54:20.756 [DEBUG] [Thread-198106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:54:22.366 [DEBUG] [Thread-198107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:54:35.817 [DEBUG] [Thread-198108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:54:38.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:54:38.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:54:38.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:54:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 54, 17), 0.757915, 94.6352, 0.0, 8.38224, 10.7694, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:54:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:54:17
2026-04-12T23:54:40.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:54:40.449 [DEBUG] [Thread-198109] [transport.py] [_log()] starting thread (client mode): 0xae561300
2026-04-12T23:54:40.449 [DEBUG] [Thread-198109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:54:40.469 [DEBUG] [Thread-198109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:54:40.469 [INFO] [Thread-198109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:54:40.472 [DEBUG] [Thread-198109] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:54:40.472 [DEBUG] [Thread-198109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:54:40.472 [DEBUG] [Thread-198109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:54:40.472 [DEBUG] [Thread-198109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:40.472 [DEBUG] [Thread-198109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:40.472 [DEBUG] [Thread-198109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:40.472 [DEBUG] [Thread-198109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] client lang: <none>
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] server lang: <none>
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] kex follows: False
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] Compression: none
2026-04-12T23:54:40.473 [DEBUG] [Thread-198109] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:54:40.489 [DEBUG] [Thread-198109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:54:40.490 [DEBUG] [Thread-198109] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:54:40.490 [DEBUG] [Thread-198109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:54:40.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:54:40.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:54:40.492 [DEBUG] [Thread-198109] [transport.py] [_log()] userauth is OK
2026-04-12T23:54:40.492 [DEBUG] [Thread-198109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:54:40.492 [DEBUG] [Thread-198109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:54:40.492 [DEBUG] [Thread-198109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:54:40.492 [DEBUG] [Thread-198109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:54:40.505 [INFO] [Thread-198109] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:54:40.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:54:41.304 [DEBUG] [Thread-198109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:54:41.304 [DEBUG] [Thread-198109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:54:41.305 [DEBUG] [Thread-198109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:54:41.345 [DEBUG] [Thread-198109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:54:41.345 [DEBUG] [Thread-198109] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:54:41.349 [DEBUG] [Thread-198109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:54:41.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:54:41.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:54:41.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:54:41.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:54:41.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:54:41.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:54:41.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:54:41.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:54:41.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:54:41.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.912602 -999.00  +11.10   3.64     91   +9.70 1 2 1 3 1     0    0 1.74 13.38 ..Es. 3.6 3.6 236.2 5.8 11.8 -22.3 11.7 -21.3 11.4 -19.3 11.7 -21.2
2026-04-12T23:54:41.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:54:41.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:54:41.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.912602
2026-04-12T23:54:41.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:54:41.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:54:41.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:54:41.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:54:41.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:54:41.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:54:17', tmtdew=0.757915, humidity=94.6352, cloud=0.0, wind=8.38224, temperature=10.7694, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:54:08.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:54:41.376 [DEBUG] [Thread-198109] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:54:41.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:54:41.470 [DEBUG] [Thread-198112] [transport.py] [_log()] starting thread (client mode): 0xae561660
2026-04-12T23:54:41.470 [DEBUG] [Thread-198112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:54:41.485 [DEBUG] [Thread-198112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:54:41.485 [INFO] [Thread-198112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:54:41.492 [DEBUG] [Thread-198112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] client lang: <none>
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] server lang: <none>
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] kex follows: False
2026-04-12T23:54:41.493 [DEBUG] [Thread-198112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:54:41.494 [DEBUG] [Thread-198112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:54:41.494 [DEBUG] [Thread-198112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:54:41.494 [DEBUG] [Thread-198112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:54:41.494 [DEBUG] [Thread-198112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:54:41.494 [DEBUG] [Thread-198112] [transport.py] [_log()] Compression: none
2026-04-12T23:54:41.494 [DEBUG] [Thread-198112] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:54:41.553 [DEBUG] [Thread-198112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:54:41.554 [DEBUG] [Thread-198112] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:54:41.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:54:41.555 [DEBUG] [Thread-198112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:54:41.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:54:41.612 [DEBUG] [Thread-198112] [transport.py] [_log()] userauth is OK
2026-04-12T23:54:41.612 [DEBUG] [Thread-198112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:54:41.612 [DEBUG] [Thread-198112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:54:41.612 [DEBUG] [Thread-198112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:54:41.612 [DEBUG] [Thread-198112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:54:41.631 [INFO] [Thread-198112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:54:41.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:54:41.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:54:42.441 [DEBUG] [Thread-198112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:54:42.442 [DEBUG] [Thread-198112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:54:42.490 [DEBUG] [Thread-198112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:54:42.491 [DEBUG] [Thread-198112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:54:42.500 [DEBUG] [Thread-198112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:54:42.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:54:42.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:54: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
2026-04-12T23:54:42.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:54:42.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:54:42.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:54:42.537 [DEBUG] [Thread-198112] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:54:50.852 [DEBUG] [Thread-198114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:54:50.875 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:54:50.876 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:55:05.910 [DEBUG] [Thread-198115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:55:12.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:55:12.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:55:12.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:55:13.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 54, 53), 0.7255, 95.2046, 0.0, 9.67032, 10.5063, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:55:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:54:53
2026-04-12T23:55:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:55:14.376 [DEBUG] [Thread-198116] [transport.py] [_log()] starting thread (client mode): 0xb0fcd2d0
2026-04-12T23:55:14.376 [DEBUG] [Thread-198116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:55:14.396 [DEBUG] [Thread-198116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:55:14.396 [INFO] [Thread-198116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:55:14.399 [DEBUG] [Thread-198116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] client lang: <none>
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] server lang: <none>
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] kex follows: False
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] Compression: none
2026-04-12T23:55:14.400 [DEBUG] [Thread-198116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:55:14.418 [DEBUG] [Thread-198116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:55:14.419 [DEBUG] [Thread-198116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:55:14.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:55:14.420 [DEBUG] [Thread-198116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:55:14.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:55:14.422 [DEBUG] [Thread-198116] [transport.py] [_log()] userauth is OK
2026-04-12T23:55:14.422 [DEBUG] [Thread-198116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:55:14.422 [DEBUG] [Thread-198116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:55:14.422 [DEBUG] [Thread-198116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:55:14.423 [DEBUG] [Thread-198116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:55:14.458 [INFO] [Thread-198116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:55:14.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:55:15.733 [DEBUG] [Thread-198116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:55:15.733 [DEBUG] [Thread-198116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:55:15.734 [DEBUG] [Thread-198116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:55:15.774 [DEBUG] [Thread-198116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:55:15.774 [DEBUG] [Thread-198116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:55:15.778 [DEBUG] [Thread-198116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:55:15.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:55:15.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:55:15.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:55:15.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:55:15.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:55:15.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:55:15.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:55:15.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:55:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:55:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.912949 -999.00  +11.10   4.21     91   +9.70 1 2 1 3 1     0    0 1.69 11.98 ..Es. 4.2 4.2 208.6 6.8 11.8 -22.2 11.7 -21.2 11.4 -19.4 11.7 -21.3
2026-04-12T23:55:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:55:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:55:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.912949
2026-04-12T23:55:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:55:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:55:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:55:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:55:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:55:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:54:53', tmtdew=0.7255, humidity=95.2046, cloud=0.0, wind=9.67032, temperature=10.5063, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:54:38.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:55:15.817 [DEBUG] [Thread-198116] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:55:15.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:55:15.911 [DEBUG] [Thread-198119] [transport.py] [_log()] starting thread (client mode): 0xb0fcd930
2026-04-12T23:55:15.911 [DEBUG] [Thread-198119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:55:15.925 [DEBUG] [Thread-198119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:55:15.925 [INFO] [Thread-198119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:55:15.933 [DEBUG] [Thread-198119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:55:15.933 [DEBUG] [Thread-198119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:55:15.933 [DEBUG] [Thread-198119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:55:15.933 [DEBUG] [Thread-198119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:15.933 [DEBUG] [Thread-198119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] client lang: <none>
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] server lang: <none>
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] kex follows: False
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:55:15.934 [DEBUG] [Thread-198119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:55:15.935 [DEBUG] [Thread-198119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:55:15.935 [DEBUG] [Thread-198119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:55:15.935 [DEBUG] [Thread-198119] [transport.py] [_log()] Compression: none
2026-04-12T23:55:15.935 [DEBUG] [Thread-198119] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:55:15.992 [DEBUG] [Thread-198119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:55:15.993 [DEBUG] [Thread-198119] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:55:15.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:55:15.994 [DEBUG] [Thread-198119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:55:15.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:55:16.048 [DEBUG] [Thread-198119] [transport.py] [_log()] userauth is OK
2026-04-12T23:55:16.048 [DEBUG] [Thread-198119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:55:16.048 [DEBUG] [Thread-198119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:55:16.048 [DEBUG] [Thread-198119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:55:16.048 [DEBUG] [Thread-198119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:55:16.067 [INFO] [Thread-198119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:55:16.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:55:16.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:55:16.887 [DEBUG] [Thread-198119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:55:16.888 [DEBUG] [Thread-198119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:55:16.936 [DEBUG] [Thread-198119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:55:16.936 [DEBUG] [Thread-198119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:55:16.945 [DEBUG] [Thread-198119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:55:16.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:55:16.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:55:16.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:55:16.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:55:16.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:55:16.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:55:16.983 [DEBUG] [Thread-198119] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:55:20.948 [DEBUG] [Thread-198121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:55:22.430 [DEBUG] [Thread-198122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:55:36.000 [DEBUG] [Thread-198123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:55:47.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:55:47.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:55:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:55:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 55, 28), 0.81057, 94.6187, 0.0, 8.6292, 10.836, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:55:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:55:28
2026-04-12T23:55:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:55:48.877 [DEBUG] [Thread-198124] [transport.py] [_log()] starting thread (client mode): 0xae562aa0
2026-04-12T23:55:48.877 [DEBUG] [Thread-198124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:55:48.896 [DEBUG] [Thread-198124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:55:48.896 [INFO] [Thread-198124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:55:48.899 [DEBUG] [Thread-198124] [transport.py] [_log()] client lang: <none>
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] server lang: <none>
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] kex follows: False
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] Compression: none
2026-04-12T23:55:48.900 [DEBUG] [Thread-198124] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:55:48.911 [DEBUG] [Thread-198124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:55:48.912 [DEBUG] [Thread-198124] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:55:48.912 [DEBUG] [Thread-198124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:55:48.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:55:48.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:55:48.914 [DEBUG] [Thread-198124] [transport.py] [_log()] userauth is OK
2026-04-12T23:55:48.914 [DEBUG] [Thread-198124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:55:48.914 [DEBUG] [Thread-198124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:55:48.914 [DEBUG] [Thread-198124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:55:48.914 [DEBUG] [Thread-198124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:55:48.928 [INFO] [Thread-198124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:55:48.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:55:49.720 [DEBUG] [Thread-198124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:55:49.721 [DEBUG] [Thread-198124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:55:49.721 [DEBUG] [Thread-198124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:55:49.761 [DEBUG] [Thread-198124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:55:49.761 [DEBUG] [Thread-198124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:55:49.764 [DEBUG] [Thread-198124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:55:49.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:55:49.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:55:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:55:49.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:55:49.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:55:49.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:55:49.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:55:49.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:55:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:55:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.913296 -999.00  +11.10   4.80     91   +9.70 1 2 1 3 1     0    0 1.73 12.29 ..Es. 4.8 4.8 191.1 6.3 11.8 -22.2 11.6 -21.2 11.3 -19.3 11.7 -21.3
2026-04-12T23:55:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:55:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:55:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.913296
2026-04-12T23:55:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:55:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:55:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:55:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:55:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:55:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:55:28', tmtdew=0.81057, humidity=94.6187, cloud=0.0, wind=8.6292, temperature=10.836, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:55:08.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:55:49.789 [DEBUG] [Thread-198124] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:55:49.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:55:49.883 [DEBUG] [Thread-198127] [transport.py] [_log()] starting thread (client mode): 0xae5606d0
2026-04-12T23:55:49.883 [DEBUG] [Thread-198127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:55:49.898 [DEBUG] [Thread-198127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:55:49.898 [INFO] [Thread-198127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:55:49.905 [DEBUG] [Thread-198127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:55:49.906 [DEBUG] [Thread-198127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:55:49.906 [DEBUG] [Thread-198127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:55:49.906 [DEBUG] [Thread-198127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:49.906 [DEBUG] [Thread-198127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] client lang: <none>
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] server lang: <none>
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] kex follows: False
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] Compression: none
2026-04-12T23:55:49.907 [DEBUG] [Thread-198127] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:55:49.968 [DEBUG] [Thread-198127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:55:49.968 [DEBUG] [Thread-198127] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:55:49.969 [DEBUG] [Thread-198127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:55:49.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:55:49.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:55:50.025 [DEBUG] [Thread-198127] [transport.py] [_log()] userauth is OK
2026-04-12T23:55:50.026 [DEBUG] [Thread-198127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:55:50.026 [DEBUG] [Thread-198127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:55:50.026 [DEBUG] [Thread-198127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:55:50.026 [DEBUG] [Thread-198127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:55:50.043 [INFO] [Thread-198127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:55:50.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:55:50.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:55:50.907 [DEBUG] [Thread-198127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:55:50.907 [DEBUG] [Thread-198127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:55:50.955 [DEBUG] [Thread-198127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:55:50.955 [DEBUG] [Thread-198127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:55:50.968 [DEBUG] [Thread-198127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:55:50.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:55:50.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:55:50.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:55:50.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:55:50.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:55:50.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:55:51.005 [DEBUG] [Thread-198127] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:55:51.037 [DEBUG] [Thread-198129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:55:51.081 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:55:51.082 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:06.089 [DEBUG] [Thread-198130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:21.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:56:21.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:56:21.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
2026-04-12T23:56:21.129 [DEBUG] [Thread-198131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:22.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 56, 4), 0.810515, 94.6187, 0.0, 8.82324, 10.8194, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:56:22.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:56:04
2026-04-12T23:56:22.486 [DEBUG] [Thread-198132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:56:22.879 [DEBUG] [Thread-198133] [transport.py] [_log()] starting thread (client mode): 0xa79582e0
2026-04-12T23:56:22.879 [DEBUG] [Thread-198133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:56:22.899 [DEBUG] [Thread-198133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:56:22.899 [INFO] [Thread-198133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] client lang: <none>
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] server lang: <none>
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] kex follows: False
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] Compression: none
2026-04-12T23:56:22.903 [DEBUG] [Thread-198133] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:56:22.921 [DEBUG] [Thread-198133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:56:22.922 [DEBUG] [Thread-198133] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:56:22.922 [DEBUG] [Thread-198133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:56:22.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:56:22.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:56:22.924 [DEBUG] [Thread-198133] [transport.py] [_log()] userauth is OK
2026-04-12T23:56:22.925 [DEBUG] [Thread-198133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:56:22.925 [DEBUG] [Thread-198133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:56:22.925 [DEBUG] [Thread-198133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:56:22.925 [DEBUG] [Thread-198133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:56:22.960 [INFO] [Thread-198133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:56:22.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:56:23.781 [DEBUG] [Thread-198133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:56:23.781 [DEBUG] [Thread-198133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:56:23.782 [DEBUG] [Thread-198133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:56:23.822 [DEBUG] [Thread-198133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:56:23.822 [DEBUG] [Thread-198133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:56:23.826 [DEBUG] [Thread-198133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:56:23.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:56:23.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:56:23.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:56:23.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:56:23.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:56:23.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:56:23.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:56:23.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:56:23.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:56:23.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.913643 -999.00  +11.10   5.41     91   +9.70 1 2 1 3 1     0    0 1.74 12.70 ..Es. 5.4 5.4 225.1 6.5 11.8 -22.3 11.7 -21.3 11.4 -19.3 11.6 -21.2
2026-04-12T23:56:23.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:56:23.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:56:23.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.913643
2026-04-12T23:56:23.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:56:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:56:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:56:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:56:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:56:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:56:04', tmtdew=0.810515, humidity=94.6187, cloud=0.0, wind=8.82324, temperature=10.8194, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:55:38.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.9372499999999997, 3.101, nan, nan, nan, nan, nan, 2.4525000000000006, nan, nan, nan, nan, nan, nan, nan, 0.3370000000000015, 0.22974999999999923, 0.3185000000000002, 0.2759999999999998, 0.7990000000000013, 2.173000000000001, 1.4910000000000014, 2.3867499999999993], zp_timestamp='2026-04-12T21:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:56:23.853 [DEBUG] [Thread-198133] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:56:23.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:56:23.951 [DEBUG] [Thread-198136] [transport.py] [_log()] starting thread (client mode): 0xa7959570
2026-04-12T23:56:23.952 [DEBUG] [Thread-198136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:56:23.966 [DEBUG] [Thread-198136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:56:23.966 [INFO] [Thread-198136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:56:23.974 [DEBUG] [Thread-198136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:56:23.974 [DEBUG] [Thread-198136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:56:23.974 [DEBUG] [Thread-198136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] client lang: <none>
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] server lang: <none>
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] kex follows: False
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] Compression: none
2026-04-12T23:56:23.975 [DEBUG] [Thread-198136] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:56:24.031 [DEBUG] [Thread-198136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:56:24.032 [DEBUG] [Thread-198136] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:56:24.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:56:24.033 [DEBUG] [Thread-198136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:56:24.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:56:24.087 [DEBUG] [Thread-198136] [transport.py] [_log()] userauth is OK
2026-04-12T23:56:24.088 [DEBUG] [Thread-198136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:56:24.088 [DEBUG] [Thread-198136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:56:24.088 [DEBUG] [Thread-198136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:56:24.088 [DEBUG] [Thread-198136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:56:24.108 [INFO] [Thread-198136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:56:24.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:56:24.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:56:24.907 [DEBUG] [Thread-198136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:56:24.908 [DEBUG] [Thread-198136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:56:24.955 [DEBUG] [Thread-198136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:56:24.955 [DEBUG] [Thread-198136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:56:24.965 [DEBUG] [Thread-198136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:56:24.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:56:24.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:56: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') -> 00000000
2026-04-12T23:56:24.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:56:24.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:56:24.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:56:25.002 [DEBUG] [Thread-198136] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:56:36.167 [DEBUG] [Thread-198138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:51.221 [DEBUG] [Thread-198139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:51.286 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:51.287 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:56:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:56:55.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:56:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:56:56.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 56, 39), 0.72634, 95.2042, 0.0, 10.129, 10.6719, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:56:56.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:56:39
2026-04-12T23:56:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:56:56.941 [DEBUG] [Thread-198140] [transport.py] [_log()] starting thread (client mode): 0xae562d40
2026-04-12T23:56:56.942 [DEBUG] [Thread-198140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:56:56.963 [DEBUG] [Thread-198140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:56:56.963 [INFO] [Thread-198140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] client lang: <none>
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] server lang: <none>
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] kex follows: False
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:56:56.967 [DEBUG] [Thread-198140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:56:56.968 [DEBUG] [Thread-198140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:56:56.968 [DEBUG] [Thread-198140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:56:56.968 [DEBUG] [Thread-198140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:56:56.968 [DEBUG] [Thread-198140] [transport.py] [_log()] Compression: none
2026-04-12T23:56:56.968 [DEBUG] [Thread-198140] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:56:56.984 [DEBUG] [Thread-198140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:56:56.984 [DEBUG] [Thread-198140] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:56:56.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:56:56.985 [DEBUG] [Thread-198140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:56:56.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:56:56.987 [DEBUG] [Thread-198140] [transport.py] [_log()] userauth is OK
2026-04-12T23:56:56.988 [DEBUG] [Thread-198140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:56:56.988 [DEBUG] [Thread-198140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:56:56.988 [DEBUG] [Thread-198140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:56:56.988 [DEBUG] [Thread-198140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:56:57.003 [INFO] [Thread-198140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:56:57.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:56:57.769 [DEBUG] [Thread-198140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:56:57.769 [DEBUG] [Thread-198140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:56:57.770 [DEBUG] [Thread-198140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:56:57.810 [DEBUG] [Thread-198140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:56:57.810 [DEBUG] [Thread-198140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:56:57.813 [DEBUG] [Thread-198140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:56:57.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:56:57.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:56:57.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:56:57.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:56:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:56:57.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:56:57.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:56:57.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:56:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:56:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.913991 -999.00  +11.10   5.21     91   +9.70 1 2 1 3 1     0    0 1.74 13.24 ..e.. 5.2 5.2 208.8 6.7 11.8 -22.5 11.7 -21.3 11.4 -19.3 11.7 -21.2
2026-04-12T23:56:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:56:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:56:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.913991
2026-04-12T23:56:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:56:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:56:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:56:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:56:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:56:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:56:39', tmtdew=0.72634, humidity=95.2042, cloud=0.0, wind=10.129, temperature=10.6719, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:56:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.5412500000000007, 1.3952500000000008, nan, nan, nan, nan, nan, nan, 2.9745, 0.24624999999999986, nan, nan, nan, nan, nan, nan, 2.2619999999999996, nan, nan, nan, 2.7087499999999984, nan, nan, 2.5589999999999993, 0.4095000000000004, 0.20475000000000065, 0.22850000000000037, 0.27800000000000047, 0.6095000000000006, 2.0360000000000014, 2.1525000000000007, 2.3892499999999988], zp_timestamp='2026-04-12T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:56:57.838 [DEBUG] [Thread-198140] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:56:57.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:56:57.935 [DEBUG] [Thread-198143] [transport.py] [_log()] starting thread (client mode): 0xb0fcce80
2026-04-12T23:56:57.935 [DEBUG] [Thread-198143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:56:57.949 [DEBUG] [Thread-198143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:56:57.949 [INFO] [Thread-198143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] client lang: <none>
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] server lang: <none>
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] kex follows: False
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:56:57.957 [DEBUG] [Thread-198143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:56:57.958 [DEBUG] [Thread-198143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:56:57.958 [DEBUG] [Thread-198143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:56:57.958 [DEBUG] [Thread-198143] [transport.py] [_log()] Compression: none
2026-04-12T23:56:57.958 [DEBUG] [Thread-198143] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:56:58.014 [DEBUG] [Thread-198143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:56:58.015 [DEBUG] [Thread-198143] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:56:58.015 [DEBUG] [Thread-198143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:56:58.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:56:58.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:56:58.071 [DEBUG] [Thread-198143] [transport.py] [_log()] userauth is OK
2026-04-12T23:56:58.071 [DEBUG] [Thread-198143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:56:58.071 [DEBUG] [Thread-198143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:56:58.071 [DEBUG] [Thread-198143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:56:58.071 [DEBUG] [Thread-198143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:56:58.089 [INFO] [Thread-198143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:56:58.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:56:58.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:56:58.888 [DEBUG] [Thread-198143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:56:58.888 [DEBUG] [Thread-198143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:56:58.936 [DEBUG] [Thread-198143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:56:58.936 [DEBUG] [Thread-198143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:56:58.945 [DEBUG] [Thread-198143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:56:58.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:56:58.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:56:58.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:56:58.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:56:58.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:56:58.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:56:58.981 [DEBUG] [Thread-198143] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:57:06.259 [DEBUG] [Thread-198145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:57:21.321 [DEBUG] [Thread-198146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:57:22.554 [DEBUG] [Thread-198147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:57:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:57:29.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:57:29.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:57:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 57, 15), 0.865515, 94.5857, 0.0, 8.52336, 10.8364, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:57:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:57:15
2026-04-12T23:57:30.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:57:30.808 [DEBUG] [Thread-198148] [transport.py] [_log()] starting thread (client mode): 0xb39c7910
2026-04-12T23:57:30.808 [DEBUG] [Thread-198148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:57:30.827 [DEBUG] [Thread-198148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:57:30.827 [INFO] [Thread-198148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:57:30.830 [DEBUG] [Thread-198148] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] client lang: <none>
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] server lang: <none>
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] kex follows: False
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] Compression: none
2026-04-12T23:57:30.831 [DEBUG] [Thread-198148] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:57:30.849 [DEBUG] [Thread-198148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:57:30.850 [DEBUG] [Thread-198148] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:57:30.850 [DEBUG] [Thread-198148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:57:30.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:57:30.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:57:30.852 [DEBUG] [Thread-198148] [transport.py] [_log()] userauth is OK
2026-04-12T23:57:30.852 [DEBUG] [Thread-198148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:57:30.853 [DEBUG] [Thread-198148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:57:30.853 [DEBUG] [Thread-198148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:57:30.853 [DEBUG] [Thread-198148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:57:30.888 [INFO] [Thread-198148] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:57:30.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:57:31.656 [DEBUG] [Thread-198148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:57:31.657 [DEBUG] [Thread-198148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:57:31.657 [DEBUG] [Thread-198148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:57:31.698 [DEBUG] [Thread-198148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:57:31.698 [DEBUG] [Thread-198148] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:57:31.701 [DEBUG] [Thread-198148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:57:31.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:57:31.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:57:31.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:57:31.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:57:31.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:57:31.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:57:31.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:57:31.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:57:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:57:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.914685 -999.00  +11.10   3.70     91   +9.70 1 2 1 3 1     0    0 1.72 11.70 ..E.. 3.7 3.7 229.1 6.3 11.8 -22.5 11.7 -21.4 11.4 -19.4 11.7 -21.4
2026-04-12T23:57:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:57:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:57:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.914685
2026-04-12T23:57:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:57:31.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:57:31.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:57:31.727 [DEBUG] [Thread-198148] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:57:31.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:57:31.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:57:31.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:57:15', tmtdew=0.865515, humidity=94.5857, cloud=0.0, wind=8.52336, temperature=10.8364, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:57:08.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.5412500000000007, 1.3952500000000008, nan, nan, nan, nan, nan, nan, 2.9745, 0.24624999999999986, nan, nan, nan, nan, nan, nan, 2.2619999999999996, nan, nan, nan, 2.7087499999999984, nan, nan, 2.5589999999999993, 0.4095000000000004, 0.20475000000000065, 0.22850000000000037, 0.27800000000000047, 0.6095000000000006, 2.0360000000000014, 2.1525000000000007, 2.3892499999999988], zp_timestamp='2026-04-12T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:57:31.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:57:31.827 [DEBUG] [Thread-198151] [transport.py] [_log()] starting thread (client mode): 0xa795bbe0
2026-04-12T23:57:31.827 [DEBUG] [Thread-198151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:57:31.841 [DEBUG] [Thread-198151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:57:31.841 [INFO] [Thread-198151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:57:31.848 [DEBUG] [Thread-198151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] client lang: <none>
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] server lang: <none>
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] kex follows: False
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] Compression: none
2026-04-12T23:57:31.849 [DEBUG] [Thread-198151] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:57:31.908 [DEBUG] [Thread-198151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:57:31.908 [DEBUG] [Thread-198151] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:57:31.909 [DEBUG] [Thread-198151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:57:31.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:57:31.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:57:31.967 [DEBUG] [Thread-198151] [transport.py] [_log()] userauth is OK
2026-04-12T23:57:31.968 [DEBUG] [Thread-198151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:57:31.968 [DEBUG] [Thread-198151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:57:31.968 [DEBUG] [Thread-198151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:57:31.968 [DEBUG] [Thread-198151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:57:31.987 [INFO] [Thread-198151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:57:31.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:57:31.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:57:32.820 [DEBUG] [Thread-198151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:57:32.821 [DEBUG] [Thread-198151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:57:32.868 [DEBUG] [Thread-198151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:57:32.868 [DEBUG] [Thread-198151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:57:32.878 [DEBUG] [Thread-198151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:57:32.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:57:32.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:57:32.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:57:32.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:57:32.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:57:32.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:57:32.918 [DEBUG] [Thread-198151] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:57:36.361 [DEBUG] [Thread-198153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:57:51.422 [DEBUG] [Thread-198154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:57:51.492 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:57:51.493 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:58:02.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:58:02.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:58:02.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:58:04.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 57, 51), 0.72622, 95.205, 0.0, 9.59976, 10.6725, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:58:04.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:57:51
2026-04-12T23:58:04.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:58:04.770 [DEBUG] [Thread-198155] [transport.py] [_log()] starting thread (client mode): 0xb39c78b0
2026-04-12T23:58:04.770 [DEBUG] [Thread-198155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:58:04.790 [DEBUG] [Thread-198155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:58:04.791 [INFO] [Thread-198155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:04.794 [DEBUG] [Thread-198155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] client lang: <none>
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] server lang: <none>
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] kex follows: False
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] Compression: none
2026-04-12T23:58:04.795 [DEBUG] [Thread-198155] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:58:04.814 [DEBUG] [Thread-198155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:58:04.815 [DEBUG] [Thread-198155] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:58:04.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:58:04.817 [DEBUG] [Thread-198155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:58:04.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:58:04.819 [DEBUG] [Thread-198155] [transport.py] [_log()] userauth is OK
2026-04-12T23:58:04.819 [DEBUG] [Thread-198155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:58:04.819 [DEBUG] [Thread-198155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:58:04.819 [DEBUG] [Thread-198155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:58:04.819 [DEBUG] [Thread-198155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:58:04.843 [INFO] [Thread-198155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:58:04.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:58:05.601 [DEBUG] [Thread-198155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:58:05.601 [DEBUG] [Thread-198155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:58:05.601 [DEBUG] [Thread-198155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:58:05.642 [DEBUG] [Thread-198155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:58:05.642 [DEBUG] [Thread-198155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:58:05.646 [DEBUG] [Thread-198155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:58:05.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:58:05.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:58:05.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:58:05.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:58:05.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:58:05.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:58:05.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:58:05.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:58:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:58:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.915032 -999.00  +11.00   4.80     91   +9.60 1 2 1 3 1     0    0 1.68 11.32 ..E.. 4.8 4.8 207.5 5.8 11.8 -22.5 11.7 -21.5 11.4 -19.4 11.7 -21.5
2026-04-12T23:58:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:58:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:58:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.915032
2026-04-12T23:58:05.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:58:05.671 [DEBUG] [Thread-198155] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:58:05.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:58:05.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:58:05.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:58:05.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:58:05.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:57:51', tmtdew=0.72622, humidity=95.205, cloud=0.0, wind=9.59976, temperature=10.6725, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:57:38.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.5412500000000007, 1.3952500000000008, nan, nan, nan, nan, nan, nan, 2.9745, 0.24624999999999986, nan, nan, nan, nan, nan, nan, 2.2619999999999996, nan, nan, nan, 2.7087499999999984, nan, nan, 2.5589999999999993, 0.4095000000000004, 0.20475000000000065, 0.22850000000000037, 0.27800000000000047, 0.6095000000000006, 2.0360000000000014, 2.1525000000000007, 2.3892499999999988], zp_timestamp='2026-04-12T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:58:05.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:58:05.770 [DEBUG] [Thread-198158] [transport.py] [_log()] starting thread (client mode): 0xa79585b0
2026-04-12T23:58:05.770 [DEBUG] [Thread-198158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:58:05.785 [DEBUG] [Thread-198158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:58:05.785 [INFO] [Thread-198158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] client lang: <none>
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] server lang: <none>
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] kex follows: False
2026-04-12T23:58:05.793 [DEBUG] [Thread-198158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:58:05.794 [DEBUG] [Thread-198158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:58:05.794 [DEBUG] [Thread-198158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:58:05.794 [DEBUG] [Thread-198158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:58:05.794 [DEBUG] [Thread-198158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:58:05.794 [DEBUG] [Thread-198158] [transport.py] [_log()] Compression: none
2026-04-12T23:58:05.794 [DEBUG] [Thread-198158] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:58:05.852 [DEBUG] [Thread-198158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:58:05.853 [DEBUG] [Thread-198158] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:58:05.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:58:05.854 [DEBUG] [Thread-198158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:58:05.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:58:05.911 [DEBUG] [Thread-198158] [transport.py] [_log()] userauth is OK
2026-04-12T23:58:05.912 [DEBUG] [Thread-198158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:58:05.912 [DEBUG] [Thread-198158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:58:05.912 [DEBUG] [Thread-198158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:58:05.912 [DEBUG] [Thread-198158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:58:05.931 [INFO] [Thread-198158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:58:05.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:58:05.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:58:06.458 [DEBUG] [Thread-198160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:58:06.749 [DEBUG] [Thread-198158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:58:06.749 [DEBUG] [Thread-198158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:58:06.797 [DEBUG] [Thread-198158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:58:06.798 [DEBUG] [Thread-198158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:58:06.807 [DEBUG] [Thread-198158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:58:06.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:58:06.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:58:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:58:06.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:58:06.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:58:06.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:58:06.844 [DEBUG] [Thread-198158] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:58:21.511 [DEBUG] [Thread-198161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:58:22.633 [DEBUG] [Thread-198162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:58:36.550 [DEBUG] [Thread-198163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:58:36.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:58:36.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:58:36.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:58:38.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 58, 26), 0.86311, 94.6025, 0.0, 8.20584, 10.8362, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:58:38.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:58:26
2026-04-12T23:58:38.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:58:38.683 [DEBUG] [Thread-198164] [transport.py] [_log()] starting thread (client mode): 0xa79592d0
2026-04-12T23:58:38.683 [DEBUG] [Thread-198164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:58:38.703 [DEBUG] [Thread-198164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:58:38.703 [INFO] [Thread-198164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] client lang: <none>
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] server lang: <none>
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] kex follows: False
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] Compression: none
2026-04-12T23:58:38.707 [DEBUG] [Thread-198164] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:58:38.726 [DEBUG] [Thread-198164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:58:38.727 [DEBUG] [Thread-198164] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:58:38.728 [DEBUG] [Thread-198164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:58:38.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:58:38.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:58:38.769 [DEBUG] [Thread-198164] [transport.py] [_log()] userauth is OK
2026-04-12T23:58:38.769 [DEBUG] [Thread-198164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:58:38.769 [DEBUG] [Thread-198164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:58:38.769 [DEBUG] [Thread-198164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:58:38.770 [DEBUG] [Thread-198164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:58:38.801 [INFO] [Thread-198164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:58:38.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:58:39.599 [DEBUG] [Thread-198164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:58:39.599 [DEBUG] [Thread-198164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:58:39.600 [DEBUG] [Thread-198164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:58:39.640 [DEBUG] [Thread-198164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:58:39.640 [DEBUG] [Thread-198164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:58:39.644 [DEBUG] [Thread-198164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:58:39.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:58:39.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:58:39.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:58:39.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:58:39.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:58:39.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:58:39.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:58:39.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:58:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:58:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.915379 -999.00  +11.00   5.50     91   +9.70 1 2 1 3 1     0    0 1.67 10.85 ..Es. 5.5 5.5 210.8 6.1 11.8 -22.5 11.6 -21.4 11.3 -19.4 11.6 -21.4
2026-04-12T23:58:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:58:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:58:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.915379
2026-04-12T23:58:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:58:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:58:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:58:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:58:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:58:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:58:26', tmtdew=0.86311, humidity=94.6025, cloud=0.0, wind=8.20584, temperature=10.8362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:58:08.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.5412500000000007, 1.3952500000000008, nan, nan, nan, nan, nan, nan, 2.9745, 0.24624999999999986, nan, nan, nan, nan, nan, nan, 2.2619999999999996, nan, nan, nan, 2.7087499999999984, nan, nan, 2.5589999999999993, 0.4095000000000004, 0.20475000000000065, 0.22850000000000037, 0.27800000000000047, 0.6095000000000006, 2.0360000000000014, 2.1525000000000007, 2.3892499999999988], zp_timestamp='2026-04-12T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:58:39.664 [DEBUG] [Thread-198164] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:58:39.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:58:39.753 [DEBUG] [Thread-198167] [transport.py] [_log()] starting thread (client mode): 0xa79590c0
2026-04-12T23:58:39.753 [DEBUG] [Thread-198167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:58:39.767 [DEBUG] [Thread-198167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:58:39.767 [INFO] [Thread-198167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:58:39.775 [DEBUG] [Thread-198167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:58:39.775 [DEBUG] [Thread-198167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] client lang: <none>
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] server lang: <none>
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] kex follows: False
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] Compression: none
2026-04-12T23:58:39.776 [DEBUG] [Thread-198167] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:58:39.836 [DEBUG] [Thread-198167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:58:39.836 [DEBUG] [Thread-198167] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:58:39.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:58:39.837 [DEBUG] [Thread-198167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:58:39.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:58:39.895 [DEBUG] [Thread-198167] [transport.py] [_log()] userauth is OK
2026-04-12T23:58:39.895 [DEBUG] [Thread-198167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:58:39.896 [DEBUG] [Thread-198167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:58:39.896 [DEBUG] [Thread-198167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:58:39.896 [DEBUG] [Thread-198167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:58:39.914 [INFO] [Thread-198167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:58:39.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:58:39.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:58:40.791 [DEBUG] [Thread-198167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:58:40.791 [DEBUG] [Thread-198167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:58:40.838 [DEBUG] [Thread-198167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:58:40.839 [DEBUG] [Thread-198167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:58:40.848 [DEBUG] [Thread-198167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:58:40.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:58:40.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:58:40.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:58:40.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:58:40.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:58:40.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:58:40.882 [DEBUG] [Thread-198167] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:58:51.586 [DEBUG] [Thread-198169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:58:51.700 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:58:51.701 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:59:06.635 [DEBUG] [Thread-198170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:59:10.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:59:10.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:59:10.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:59:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 59, 2), 0.865735, 94.5859, 0.0, 8.15292, 10.8362, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:59:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:59:02
2026-04-12T23:59:12.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:59:12.762 [DEBUG] [Thread-198171] [transport.py] [_log()] starting thread (client mode): 0xb39c6230
2026-04-12T23:59:12.762 [DEBUG] [Thread-198171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:59:12.781 [DEBUG] [Thread-198171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:59:12.781 [INFO] [Thread-198171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:59:12.784 [DEBUG] [Thread-198171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] client lang: <none>
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] server lang: <none>
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] kex follows: False
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] Compression: none
2026-04-12T23:59:12.785 [DEBUG] [Thread-198171] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:59:12.803 [DEBUG] [Thread-198171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:59:12.804 [DEBUG] [Thread-198171] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:59:12.804 [DEBUG] [Thread-198171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:59:12.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:59:12.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:59:12.806 [DEBUG] [Thread-198171] [transport.py] [_log()] userauth is OK
2026-04-12T23:59:12.806 [DEBUG] [Thread-198171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:59:12.806 [DEBUG] [Thread-198171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:59:12.806 [DEBUG] [Thread-198171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:59:12.806 [DEBUG] [Thread-198171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:59:12.824 [INFO] [Thread-198171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:59:12.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:59:13.395 [DEBUG] [Thread-198171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:59:13.395 [DEBUG] [Thread-198171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:59:13.396 [DEBUG] [Thread-198171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:59:13.436 [DEBUG] [Thread-198171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:59:13.436 [DEBUG] [Thread-198171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:59:13.439 [DEBUG] [Thread-198171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:59:13.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:59:13.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:59:13.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:59:13.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:59:13.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:59:13.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:59:13.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:59:13.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:59:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:59:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.915727 -999.00  +11.00   5.19     91   +9.70 1 2 1 3 1     0    0 1.62 8.59 ..Es. 5.2 5.2 217.6 5.9 11.7 -22.6 11.6 -21.3 11.4 -19.6 11.6 -21.6
2026-04-12T23:59:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:59:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:59:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.915727
2026-04-12T23:59:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:59:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:59:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:59:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:59:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:59:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:59:02', tmtdew=0.865735, humidity=94.5859, cloud=0.0, wind=8.15292, temperature=10.8362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:58:38.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.5412500000000007, 1.3952500000000008, nan, nan, nan, nan, nan, nan, 2.9745, 0.24624999999999986, nan, nan, nan, nan, nan, nan, 2.2619999999999996, nan, nan, nan, 2.7087499999999984, nan, nan, 2.5589999999999993, 0.4095000000000004, 0.20475000000000065, 0.22850000000000037, 0.27800000000000047, 0.6095000000000006, 2.0360000000000014, 2.1525000000000007, 2.3892499999999988], zp_timestamp='2026-04-12T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:59:13.464 [DEBUG] [Thread-198171] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:59:13.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:59:13.560 [DEBUG] [Thread-198174] [transport.py] [_log()] starting thread (client mode): 0xb39c6b00
2026-04-12T23:59:13.560 [DEBUG] [Thread-198174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:59:13.575 [DEBUG] [Thread-198174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:59:13.575 [INFO] [Thread-198174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:59:13.582 [DEBUG] [Thread-198174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] client lang: <none>
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] server lang: <none>
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] kex follows: False
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] Compression: none
2026-04-12T23:59:13.583 [DEBUG] [Thread-198174] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:59:13.643 [DEBUG] [Thread-198174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:59:13.644 [DEBUG] [Thread-198174] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:59:13.645 [DEBUG] [Thread-198174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:59:13.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:59:13.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:59:13.702 [DEBUG] [Thread-198174] [transport.py] [_log()] userauth is OK
2026-04-12T23:59:13.702 [DEBUG] [Thread-198174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:59:13.702 [DEBUG] [Thread-198174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:59:13.702 [DEBUG] [Thread-198174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:59:13.702 [DEBUG] [Thread-198174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:59:13.721 [INFO] [Thread-198174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:59:13.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:59:13.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:59:14.516 [DEBUG] [Thread-198174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:59:14.517 [DEBUG] [Thread-198174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:59:14.564 [DEBUG] [Thread-198174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:59:14.564 [DEBUG] [Thread-198174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:59:14.574 [DEBUG] [Thread-198174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:59:14.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:59:14.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:59:14.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T23:59:14.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:59:14.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:59:14.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:59:14.615 [DEBUG] [Thread-198174] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:59:21.668 [DEBUG] [Thread-198176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:59:22.688 [DEBUG] [Thread-198177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:59:36.717 [DEBUG] [Thread-198178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:59:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T23:59:44.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T23:59:44.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T23:59:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 59, 37), 0.73187, 95.1721, 0.0, 10.764, 10.7722, 2, 2, 0, 2, 0, 0),)
2026-04-12T23:59:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:59:37
2026-04-12T23:59:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T23:59:46.438 [DEBUG] [Thread-198179] [transport.py] [_log()] starting thread (client mode): 0xa7959150
2026-04-12T23:59:46.438 [DEBUG] [Thread-198179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:59:46.453 [DEBUG] [Thread-198179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T23:59:46.453 [INFO] [Thread-198179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T23:59:46.457 [DEBUG] [Thread-198179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:59:46.457 [DEBUG] [Thread-198179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T23:59:46.457 [DEBUG] [Thread-198179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:59:46.457 [DEBUG] [Thread-198179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:46.457 [DEBUG] [Thread-198179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:46.457 [DEBUG] [Thread-198179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:46.457 [DEBUG] [Thread-198179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] client lang: <none>
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] server lang: <none>
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] kex follows: False
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] Compression: none
2026-04-12T23:59:46.458 [DEBUG] [Thread-198179] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:59:46.475 [DEBUG] [Thread-198179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:59:46.476 [DEBUG] [Thread-198179] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:59:46.476 [DEBUG] [Thread-198179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T23:59:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T23:59:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:59:46.478 [DEBUG] [Thread-198179] [transport.py] [_log()] userauth is OK
2026-04-12T23:59:46.478 [DEBUG] [Thread-198179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:59:46.478 [DEBUG] [Thread-198179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:59:46.478 [DEBUG] [Thread-198179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T23:59:46.478 [DEBUG] [Thread-198179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:59:46.502 [INFO] [Thread-198179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:59:46.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:59:47.142 [DEBUG] [Thread-198179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:59:47.142 [DEBUG] [Thread-198179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:59:47.143 [DEBUG] [Thread-198179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T23:59:47.183 [DEBUG] [Thread-198179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:59:47.183 [DEBUG] [Thread-198179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:59:47.187 [DEBUG] [Thread-198179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:59:47.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:59:47.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T23:59:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T23:59:47.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T23:59:47.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:59:47.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T23:59:47.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:59:47.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:59:47.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T23:59:47.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.916074 -999.00  +11.00   3.62     92   +9.70 1 2 1 3 1     0    0 1.57 7.50 ..Es. 3.6 3.6 217.0 5.2 11.7 -22.6 11.6 -21.5 11.3 -19.5 11.6 -21.6
2026-04-12T23:59:47.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T23:59:47.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T23:59:47.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.916074
2026-04-12T23:59:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T23:59:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T23:59:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T23:59:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T23:59:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-12T23:59:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:59:37', tmtdew=0.73187, humidity=95.1721, cloud=0.0, wind=10.764, temperature=10.7722, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:59:08.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.5412500000000007, 1.3952500000000008, nan, nan, nan, nan, nan, nan, 2.9745, 0.24624999999999986, nan, nan, nan, nan, nan, nan, 2.2619999999999996, nan, nan, nan, 2.7087499999999984, nan, nan, 2.5589999999999993, 0.4095000000000004, 0.20475000000000065, 0.22850000000000037, 0.27800000000000047, 0.6095000000000006, 2.0360000000000014, 2.1525000000000007, 2.3892499999999988], zp_timestamp='2026-04-12T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T23:59:47.214 [DEBUG] [Thread-198179] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:59:47.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T23:59:47.306 [DEBUG] [Thread-198182] [transport.py] [_log()] starting thread (client mode): 0xb39c6470
2026-04-12T23:59:47.306 [DEBUG] [Thread-198182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T23:59:47.321 [DEBUG] [Thread-198182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T23:59:47.321 [INFO] [Thread-198182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T23:59:47.330 [DEBUG] [Thread-198182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T23:59:47.330 [DEBUG] [Thread-198182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T23:59:47.330 [DEBUG] [Thread-198182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] client lang: <none>
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] server lang: <none>
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] kex follows: False
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] Compression: none
2026-04-12T23:59:47.331 [DEBUG] [Thread-198182] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T23:59:47.387 [DEBUG] [Thread-198182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T23:59:47.388 [DEBUG] [Thread-198182] [transport.py] [_log()] Switch to new keys ...
2026-04-12T23:59:47.388 [DEBUG] [Thread-198182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T23:59:47.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T23:59:47.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T23:59:47.449 [DEBUG] [Thread-198182] [transport.py] [_log()] userauth is OK
2026-04-12T23:59:47.449 [DEBUG] [Thread-198182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T23:59:47.449 [DEBUG] [Thread-198182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T23:59:47.449 [DEBUG] [Thread-198182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T23:59:47.449 [DEBUG] [Thread-198182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T23:59:47.469 [INFO] [Thread-198182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T23:59:47.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T23:59:47.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T23:59:48.272 [DEBUG] [Thread-198182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T23:59:48.272 [DEBUG] [Thread-198182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T23:59:48.320 [DEBUG] [Thread-198182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T23:59:48.320 [DEBUG] [Thread-198182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T23:59:48.330 [DEBUG] [Thread-198182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T23:59:48.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T23:59:48.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T23:59:48.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
2026-04-12T23:59:48.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T23:59:48.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T23:59:48.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T23:59:48.368 [DEBUG] [Thread-198182] [transport.py] [_log()] EOF in transport thread
2026-04-12T23:59:51.755 [DEBUG] [Thread-198184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:59:51.907 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T23:59:51.908 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:00:06.805 [DEBUG] [Thread-198185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:00:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:00:18.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:00:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:00:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 23, 59, 37), 0.73187, 95.1721, 0.0, 10.764, 10.7722, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:00:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 23:59:37
2026-04-13T00:00:20.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:00:20.191 [DEBUG] [Thread-198186] [transport.py] [_log()] starting thread (client mode): 0xa795bd00
2026-04-13T00:00:20.191 [DEBUG] [Thread-198186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:00:20.210 [DEBUG] [Thread-198186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:00:20.210 [INFO] [Thread-198186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:00:20.213 [DEBUG] [Thread-198186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:00:20.213 [DEBUG] [Thread-198186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:00:20.213 [DEBUG] [Thread-198186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:00:20.213 [DEBUG] [Thread-198186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:00:20.213 [DEBUG] [Thread-198186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:00:20.213 [DEBUG] [Thread-198186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:00:20.213 [DEBUG] [Thread-198186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] client lang: <none>
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] server lang: <none>
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] kex follows: False
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] Compression: none
2026-04-13T00:00:20.214 [DEBUG] [Thread-198186] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:00:20.233 [DEBUG] [Thread-198186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:00:20.234 [DEBUG] [Thread-198186] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:00:20.234 [DEBUG] [Thread-198186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:00:20.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:00:20.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:00:20.236 [DEBUG] [Thread-198186] [transport.py] [_log()] userauth is OK
2026-04-13T00:00:20.237 [DEBUG] [Thread-198186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:00:20.237 [DEBUG] [Thread-198186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:00:20.237 [DEBUG] [Thread-198186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:00:20.237 [DEBUG] [Thread-198186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:00:20.260 [INFO] [Thread-198186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:00:20.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:00:21.592 [DEBUG] [Thread-198186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:00:21.592 [DEBUG] [Thread-198186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:00:21.593 [DEBUG] [Thread-198186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:00:21.634 [DEBUG] [Thread-198186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:00:21.634 [DEBUG] [Thread-198186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:00:21.638 [DEBUG] [Thread-198186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:00:21.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:00:21.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:00:21.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:00:21.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:00:21.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:00:21.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:00:21.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:00:21.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:00:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:00:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.916074 -999.00  +11.00   3.62     92   +9.70 1 2 1 3 1     0    0 1.57 7.50 ..Es. 3.6 3.6 217.0 5.2 11.7 -22.6 11.6 -21.5 11.3 -19.5 11.6 -21.6
2026-04-13T00:00:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:00:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:00:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.916074
2026-04-13T00:00:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:00:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:00:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:00:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:00:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:00:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T23:59:37', tmtdew=0.73187, humidity=95.1721, cloud=0.0, wind=10.764, temperature=10.7722, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T21:59:08.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.5412500000000007, 1.3952500000000008, nan, nan, nan, nan, nan, nan, 2.9745, 0.24624999999999986, nan, nan, nan, nan, nan, nan, 2.2619999999999996, nan, nan, nan, 2.7087499999999984, nan, nan, 2.5589999999999993, 0.4095000000000004, 0.20475000000000065, 0.22850000000000037, 0.27800000000000047, 0.6095000000000006, 2.0360000000000014, 2.1525000000000007, 2.3892499999999988], zp_timestamp='2026-04-12T21:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:00:21.776 [DEBUG] [Thread-198186] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:00:21.832 [DEBUG] [Thread-198189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:00:21.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:00:22.762 [DEBUG] [Thread-198190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:00:36.875 [DEBUG] [Thread-198191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:00:51.914 [DEBUG] [Thread-198192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:00:52.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:00:52.114 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:01:06.952 [DEBUG] [Thread-198193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:01:21.989 [DEBUG] [Thread-198194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:01:22.838 [DEBUG] [Thread-198195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:01:37.028 [DEBUG] [Thread-198196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:01:52.067 [DEBUG] [Thread-198197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:01:52.322 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:01:52.323 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:02:07.102 [DEBUG] [Thread-198198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:02:22.136 [DEBUG] [Thread-198199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:02:22.917 [DEBUG] [Thread-198200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:02:34.495 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T00:02:37.170 [DEBUG] [Thread-198201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:02:52.207 [DEBUG] [Thread-198202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:02:52.527 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:02:52.528 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:03:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:03:04.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:03:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:03:05.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 2, 35), 0.73261, 95.1727, 0.0, 11.2579, 10.9384, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:03:05.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:02:35
2026-04-13T00:03:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:03:06.398 [DEBUG] [Thread-198203] [transport.py] [_log()] starting thread (client mode): 0xa795a9b0
2026-04-13T00:03:06.398 [DEBUG] [Thread-198203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:03:06.417 [DEBUG] [Thread-198203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:03:06.417 [INFO] [Thread-198203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] client lang: <none>
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] server lang: <none>
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] kex follows: False
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:03:06.420 [DEBUG] [Thread-198203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:03:06.421 [DEBUG] [Thread-198203] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:03:06.421 [DEBUG] [Thread-198203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:03:06.421 [DEBUG] [Thread-198203] [transport.py] [_log()] Compression: none
2026-04-13T00:03:06.421 [DEBUG] [Thread-198203] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:03:06.434 [DEBUG] [Thread-198203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:03:06.435 [DEBUG] [Thread-198203] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:03:06.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:03:06.436 [DEBUG] [Thread-198203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:03:06.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:03:06.438 [DEBUG] [Thread-198203] [transport.py] [_log()] userauth is OK
2026-04-13T00:03:06.438 [DEBUG] [Thread-198203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:03:06.438 [DEBUG] [Thread-198203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:03:06.438 [DEBUG] [Thread-198203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:03:06.439 [DEBUG] [Thread-198203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:03:06.462 [INFO] [Thread-198203] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:03:06.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:03:07.226 [DEBUG] [Thread-198203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:03:07.226 [DEBUG] [Thread-198203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:03:07.227 [DEBUG] [Thread-198203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:03:07.247 [DEBUG] [Thread-198205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:03:07.267 [DEBUG] [Thread-198203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:03:07.267 [DEBUG] [Thread-198203] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:03:07.270 [DEBUG] [Thread-198203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:03:07.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:03:07.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:03:07.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:03:07.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:03:07.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:03:07.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:03:07.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:03:07.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:03:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:03:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.918157 -999.00  +10.90   5.54     92   +9.70 1 2 1 3 1     0    0 1.33 -0.72 ..... 5.5 5.5 195.6 6.3 11.7 -22.6 11.6 -21.5 11.3 -19.4 11.6 -21.4
2026-04-13T00:03:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:03:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:03:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.918157
2026-04-13T00:03:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:03:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:03:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:03:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:03:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:03:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:02:35', tmtdew=0.73261, humidity=95.1727, cloud=0.0, wind=11.2579, temperature=10.9384, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:02:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.28125, 2.1049999999999995, nan, nan, nan, nan, nan, 2.5504999999999995, nan, nan, nan, nan, nan, nan, 2.749999999999999, 0.4895000000000005, 0.2832499999999989, 0.40000000000000036, 0.38649999999999984, 0.634500000000001, 1.774000000000001, nan, 2.477249999999999], zp_timestamp='2026-04-12T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:03:07.294 [DEBUG] [Thread-198203] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:03:07.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:03:07.388 [DEBUG] [Thread-198207] [transport.py] [_log()] starting thread (client mode): 0xae562ce0
2026-04-13T00:03:07.389 [DEBUG] [Thread-198207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:03:07.403 [DEBUG] [Thread-198207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:03:07.404 [INFO] [Thread-198207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] client lang: <none>
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] server lang: <none>
2026-04-13T00:03:07.412 [DEBUG] [Thread-198207] [transport.py] [_log()] kex follows: False
2026-04-13T00:03:07.413 [DEBUG] [Thread-198207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:03:07.413 [DEBUG] [Thread-198207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:03:07.413 [DEBUG] [Thread-198207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:03:07.413 [DEBUG] [Thread-198207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:03:07.413 [DEBUG] [Thread-198207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:03:07.413 [DEBUG] [Thread-198207] [transport.py] [_log()] Compression: none
2026-04-13T00:03:07.413 [DEBUG] [Thread-198207] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:03:07.471 [DEBUG] [Thread-198207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:03:07.472 [DEBUG] [Thread-198207] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:03:07.472 [DEBUG] [Thread-198207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:03:07.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:03:07.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:03:07.527 [DEBUG] [Thread-198207] [transport.py] [_log()] userauth is OK
2026-04-13T00:03:07.527 [DEBUG] [Thread-198207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:03:07.527 [DEBUG] [Thread-198207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:03:07.527 [DEBUG] [Thread-198207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:03:07.527 [DEBUG] [Thread-198207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:03:07.545 [INFO] [Thread-198207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:03:07.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:03:07.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:03:08.352 [DEBUG] [Thread-198207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:03:08.353 [DEBUG] [Thread-198207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:03:08.400 [DEBUG] [Thread-198207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:03:08.400 [DEBUG] [Thread-198207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:03:08.409 [DEBUG] [Thread-198207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:03:08.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:03:08.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:03:08.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:03:08.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:03:08.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:03:08.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:03:08.448 [DEBUG] [Thread-198207] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:03:22.283 [DEBUG] [Thread-198209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:03:23.005 [DEBUG] [Thread-198210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:03:37.342 [DEBUG] [Thread-198211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:03:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:03:38.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:03:38.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:03:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 3, 10), 0.813535, 94.6029, 0.0, 8.8938, 10.836, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:03:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:03:10
2026-04-13T00:03:40.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:03:40.314 [DEBUG] [Thread-198212] [transport.py] [_log()] starting thread (client mode): 0xae563580
2026-04-13T00:03:40.314 [DEBUG] [Thread-198212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:03:40.336 [DEBUG] [Thread-198212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:03:40.336 [INFO] [Thread-198212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:03:40.339 [DEBUG] [Thread-198212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:03:40.339 [DEBUG] [Thread-198212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:03:40.339 [DEBUG] [Thread-198212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:03:40.339 [DEBUG] [Thread-198212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] client lang: <none>
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] server lang: <none>
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] kex follows: False
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:03:40.340 [DEBUG] [Thread-198212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:03:40.341 [DEBUG] [Thread-198212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:03:40.341 [DEBUG] [Thread-198212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:03:40.341 [DEBUG] [Thread-198212] [transport.py] [_log()] Compression: none
2026-04-13T00:03:40.341 [DEBUG] [Thread-198212] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:03:40.360 [DEBUG] [Thread-198212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:03:40.361 [DEBUG] [Thread-198212] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:03:40.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:03:40.362 [DEBUG] [Thread-198212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:03:40.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:03:40.364 [DEBUG] [Thread-198212] [transport.py] [_log()] userauth is OK
2026-04-13T00:03:40.364 [DEBUG] [Thread-198212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:03:40.364 [DEBUG] [Thread-198212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:03:40.365 [DEBUG] [Thread-198212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:03:40.365 [DEBUG] [Thread-198212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:03:40.400 [INFO] [Thread-198212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:03:40.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:03:41.213 [DEBUG] [Thread-198212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:03:41.213 [DEBUG] [Thread-198212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:03:41.213 [DEBUG] [Thread-198212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:03:41.254 [DEBUG] [Thread-198212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:03:41.254 [DEBUG] [Thread-198212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:03:41.257 [DEBUG] [Thread-198212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:03:41.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:03:41.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:03:41.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:03:41.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:03:41.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:03:41.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:03:41.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:03:41.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.918852 -999.00  +10.90   5.30     92   +9.70 1 2 1 3 1     0    0 1.25 -3.08 ..E.. 5.3 5.3 213.9 9.0 11.7 -22.4 11.5 -21.3 11.3 -19.3 11.5 -21.4
2026-04-13T00:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:03:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.918852
2026-04-13T00:03:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:03:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:03:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:03:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:03:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:03:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:03:10', tmtdew=0.813535, humidity=94.6029, cloud=0.0, wind=8.8938, temperature=10.836, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:03:08.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.28125, 2.1049999999999995, nan, nan, nan, nan, nan, 2.5504999999999995, nan, nan, nan, nan, nan, nan, 2.749999999999999, 0.4895000000000005, 0.2832499999999989, 0.40000000000000036, 0.38649999999999984, 0.634500000000001, 1.774000000000001, nan, 2.477249999999999], zp_timestamp='2026-04-12T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:03:41.281 [DEBUG] [Thread-198212] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:03:41.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:03:41.383 [DEBUG] [Thread-198215] [transport.py] [_log()] starting thread (client mode): 0xa7958520
2026-04-13T00:03:41.383 [DEBUG] [Thread-198215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:03:41.398 [DEBUG] [Thread-198215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:03:41.399 [INFO] [Thread-198215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:03:41.406 [DEBUG] [Thread-198215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:03:41.406 [DEBUG] [Thread-198215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:03:41.406 [DEBUG] [Thread-198215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] client lang: <none>
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] server lang: <none>
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] kex follows: False
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] Compression: none
2026-04-13T00:03:41.407 [DEBUG] [Thread-198215] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:03:41.466 [DEBUG] [Thread-198215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:03:41.467 [DEBUG] [Thread-198215] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:03:41.468 [DEBUG] [Thread-198215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:03:41.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:03:41.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:03:41.523 [DEBUG] [Thread-198215] [transport.py] [_log()] userauth is OK
2026-04-13T00:03:41.523 [DEBUG] [Thread-198215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:03:41.523 [DEBUG] [Thread-198215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:03:41.523 [DEBUG] [Thread-198215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:03:41.523 [DEBUG] [Thread-198215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:03:41.542 [INFO] [Thread-198215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:03:41.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:03:41.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:03:42.320 [DEBUG] [Thread-198215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:03:42.321 [DEBUG] [Thread-198215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:03:42.369 [DEBUG] [Thread-198215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:03:42.370 [DEBUG] [Thread-198215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:03:42.379 [DEBUG] [Thread-198215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:03:42.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:03:42.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:03: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') -> 00000000
2026-04-13T00:03:42.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:03:42.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:03:42.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:03:42.418 [DEBUG] [Thread-198215] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:03:52.378 [DEBUG] [Thread-198217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:03:52.731 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:03:52.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:04:07.419 [DEBUG] [Thread-198218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:04:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:04:12.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:04:12.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:04:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 3, 46), 0.73209, 95.1728, 0.0, 9.67032, 10.839, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:04:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:03:46
2026-04-13T00:04:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:04:14.286 [DEBUG] [Thread-198219] [transport.py] [_log()] starting thread (client mode): 0xb39c5300
2026-04-13T00:04:14.286 [DEBUG] [Thread-198219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:04:14.306 [DEBUG] [Thread-198219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:04:14.306 [INFO] [Thread-198219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] client lang: <none>
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] server lang: <none>
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] kex follows: False
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] Compression: none
2026-04-13T00:04:14.310 [DEBUG] [Thread-198219] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:04:14.328 [DEBUG] [Thread-198219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:04:14.329 [DEBUG] [Thread-198219] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:04:14.330 [DEBUG] [Thread-198219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:04:14.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:04:14.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:04:14.332 [DEBUG] [Thread-198219] [transport.py] [_log()] userauth is OK
2026-04-13T00:04:14.332 [DEBUG] [Thread-198219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:04:14.332 [DEBUG] [Thread-198219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:04:14.333 [DEBUG] [Thread-198219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:04:14.333 [DEBUG] [Thread-198219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:04:14.369 [INFO] [Thread-198219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:04:14.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:04:15.156 [DEBUG] [Thread-198219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:04:15.156 [DEBUG] [Thread-198219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:04:15.156 [DEBUG] [Thread-198219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:04:15.197 [DEBUG] [Thread-198219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:04:15.197 [DEBUG] [Thread-198219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:04:15.200 [DEBUG] [Thread-198219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:04:15.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:04:15.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:04:15.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:04:15.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:04:15.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:04:15.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:04:15.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:04:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:04:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:04:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.919199 -999.00  +11.00   4.54     92   +9.70 1 2 1 3 1     0    0 1.26 -3.49 ..... 4.5 4.5 211.4 5.4 11.7 -22.5 11.6 -21.4 11.3 -19.4 11.6 -21.5
2026-04-13T00:04:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:04:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:04:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.919199
2026-04-13T00:04:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:04:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:04:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:04:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:04:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:04:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:03:46', tmtdew=0.73209, humidity=95.1728, cloud=0.0, wind=9.67032, temperature=10.839, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:03:38.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.28125, 2.1049999999999995, nan, nan, nan, nan, nan, 2.5504999999999995, nan, nan, nan, nan, nan, nan, 2.749999999999999, 0.4895000000000005, 0.2832499999999989, 0.40000000000000036, 0.38649999999999984, 0.634500000000001, 1.774000000000001, nan, 2.477249999999999], zp_timestamp='2026-04-12T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:04:15.226 [DEBUG] [Thread-198219] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:04:15.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:04:15.326 [DEBUG] [Thread-198222] [transport.py] [_log()] starting thread (client mode): 0xa7959a20
2026-04-13T00:04:15.326 [DEBUG] [Thread-198222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:04:15.342 [DEBUG] [Thread-198222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:04:15.342 [INFO] [Thread-198222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:04:15.350 [DEBUG] [Thread-198222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:04:15.350 [DEBUG] [Thread-198222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:04:15.350 [DEBUG] [Thread-198222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:04:15.350 [DEBUG] [Thread-198222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:15.350 [DEBUG] [Thread-198222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] client lang: <none>
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] server lang: <none>
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] kex follows: False
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:04:15.351 [DEBUG] [Thread-198222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:04:15.352 [DEBUG] [Thread-198222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:04:15.352 [DEBUG] [Thread-198222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:04:15.352 [DEBUG] [Thread-198222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:04:15.352 [DEBUG] [Thread-198222] [transport.py] [_log()] Compression: none
2026-04-13T00:04:15.352 [DEBUG] [Thread-198222] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:04:15.406 [DEBUG] [Thread-198222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:04:15.407 [DEBUG] [Thread-198222] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:04:15.408 [DEBUG] [Thread-198222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:04:15.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:04:15.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:04:15.463 [DEBUG] [Thread-198222] [transport.py] [_log()] userauth is OK
2026-04-13T00:04:15.463 [DEBUG] [Thread-198222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:04:15.463 [DEBUG] [Thread-198222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:04:15.464 [DEBUG] [Thread-198222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:04:15.464 [DEBUG] [Thread-198222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:04:15.483 [INFO] [Thread-198222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:04:15.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:04:15.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:04:16.280 [DEBUG] [Thread-198222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:04:16.280 [DEBUG] [Thread-198222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:04:16.328 [DEBUG] [Thread-198222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:04:16.328 [DEBUG] [Thread-198222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:04:16.337 [DEBUG] [Thread-198222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:04:16.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:04:16.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:04:16.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:04:16.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:04:16.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:04:16.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:04:16.375 [DEBUG] [Thread-198222] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:04:22.458 [DEBUG] [Thread-198224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:04:23.081 [DEBUG] [Thread-198225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:04:37.512 [DEBUG] [Thread-198226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:04:46.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:04:46.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:04:46.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:04:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 4, 21), 0.81857, 94.5698, 0.0, 8.78796, 10.8529, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:04:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:04:21
2026-04-13T00:04:48.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:04:48.289 [DEBUG] [Thread-198227] [transport.py] [_log()] starting thread (client mode): 0xae560f40
2026-04-13T00:04:48.289 [DEBUG] [Thread-198227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:04:48.310 [DEBUG] [Thread-198227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:04:48.310 [INFO] [Thread-198227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] client lang: <none>
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] server lang: <none>
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] kex follows: False
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] Compression: none
2026-04-13T00:04:48.313 [DEBUG] [Thread-198227] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:04:48.330 [DEBUG] [Thread-198227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:04:48.330 [DEBUG] [Thread-198227] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:04:48.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:04:48.331 [DEBUG] [Thread-198227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:04:48.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:04:48.333 [DEBUG] [Thread-198227] [transport.py] [_log()] userauth is OK
2026-04-13T00:04:48.334 [DEBUG] [Thread-198227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:04:48.334 [DEBUG] [Thread-198227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:04:48.334 [DEBUG] [Thread-198227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:04:48.334 [DEBUG] [Thread-198227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:04:48.351 [INFO] [Thread-198227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:04:48.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:04:49.139 [DEBUG] [Thread-198227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:04:49.139 [DEBUG] [Thread-198227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:04:49.140 [DEBUG] [Thread-198227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:04:49.180 [DEBUG] [Thread-198227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:04:49.180 [DEBUG] [Thread-198227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:04:49.183 [DEBUG] [Thread-198227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:04:49.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:04:49.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:04:49.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:04:49.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:04:49.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:04:49.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:04:49.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:04:49.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:04:49.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:04:49.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.919546 -999.00  +11.00   2.56     92   +9.70 1 2 1 3 1     0    0 1.23 -3.91 ..... 2.6 2.6 222.7 5.8 11.7 -22.6 11.6 -21.3 11.3 -19.3 11.6 -21.4
2026-04-13T00:04:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:04:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:04:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.919546
2026-04-13T00:04:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:04:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:04:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:04:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:04:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:04:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:04:21', tmtdew=0.81857, humidity=94.5698, cloud=0.0, wind=8.78796, temperature=10.8529, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:04:08.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.28125, 2.1049999999999995, nan, nan, nan, nan, nan, 2.5504999999999995, nan, nan, nan, nan, nan, nan, 2.749999999999999, 0.4895000000000005, 0.2832499999999989, 0.40000000000000036, 0.38649999999999984, 0.634500000000001, 1.774000000000001, nan, 2.477249999999999], zp_timestamp='2026-04-12T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:04:49.212 [DEBUG] [Thread-198227] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:04:49.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:04:49.307 [DEBUG] [Thread-198230] [transport.py] [_log()] starting thread (client mode): 0xa7958910
2026-04-13T00:04:49.307 [DEBUG] [Thread-198230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:04:49.322 [DEBUG] [Thread-198230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:04:49.322 [INFO] [Thread-198230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:04:49.330 [DEBUG] [Thread-198230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] client lang: <none>
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] server lang: <none>
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] kex follows: False
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] Compression: none
2026-04-13T00:04:49.331 [DEBUG] [Thread-198230] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:04:49.390 [DEBUG] [Thread-198230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:04:49.391 [DEBUG] [Thread-198230] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:04:49.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:04:49.392 [DEBUG] [Thread-198230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:04:49.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:04:49.450 [DEBUG] [Thread-198230] [transport.py] [_log()] userauth is OK
2026-04-13T00:04:49.451 [DEBUG] [Thread-198230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:04:49.451 [DEBUG] [Thread-198230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:04:49.451 [DEBUG] [Thread-198230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:04:49.451 [DEBUG] [Thread-198230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:04:49.475 [INFO] [Thread-198230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:04:49.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:04:49.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:04:50.319 [DEBUG] [Thread-198230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:04:50.319 [DEBUG] [Thread-198230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:04:50.368 [DEBUG] [Thread-198230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:04:50.368 [DEBUG] [Thread-198230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:04:50.377 [DEBUG] [Thread-198230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:04:50.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:04:50.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:04:50.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:04:50.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:04:50.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:04:50.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:04:50.414 [DEBUG] [Thread-198230] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:04:52.552 [DEBUG] [Thread-198232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:04:52.936 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:04:52.937 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:07.607 [DEBUG] [Thread-198233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:20.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:05:20.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:05:20.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:05:21.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 4, 56), 0.77352, 94.5367, 0.0, 8.73504, 10.7532, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:05:21.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:04:56
2026-04-13T00:05:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:05:22.230 [DEBUG] [Thread-198234] [transport.py] [_log()] starting thread (client mode): 0xa795ae30
2026-04-13T00:05:22.230 [DEBUG] [Thread-198234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:05:22.250 [DEBUG] [Thread-198234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:05:22.250 [INFO] [Thread-198234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:05:22.251 [DEBUG] [Thread-198234] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:05:22.251 [DEBUG] [Thread-198234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:05:22.251 [DEBUG] [Thread-198234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:05:22.251 [DEBUG] [Thread-198234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:22.251 [DEBUG] [Thread-198234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:22.251 [DEBUG] [Thread-198234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] client lang: <none>
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] server lang: <none>
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] kex follows: False
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] Compression: none
2026-04-13T00:05:22.252 [DEBUG] [Thread-198234] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:05:22.262 [DEBUG] [Thread-198234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:05:22.263 [DEBUG] [Thread-198234] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:05:22.264 [DEBUG] [Thread-198234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:05:22.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:05:22.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:05:22.267 [DEBUG] [Thread-198234] [transport.py] [_log()] userauth is OK
2026-04-13T00:05:22.267 [DEBUG] [Thread-198234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:05:22.267 [DEBUG] [Thread-198234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:05:22.267 [DEBUG] [Thread-198234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:05:22.268 [DEBUG] [Thread-198234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:05:22.293 [INFO] [Thread-198234] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:05:22.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:05:22.644 [DEBUG] [Thread-198236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:23.158 [DEBUG] [Thread-198237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:23.286 [DEBUG] [Thread-198234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:05:23.286 [DEBUG] [Thread-198234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:05:23.286 [DEBUG] [Thread-198234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:05:23.327 [DEBUG] [Thread-198234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:05:23.327 [DEBUG] [Thread-198234] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:05:23.331 [DEBUG] [Thread-198234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:05:23.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:05:23.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:05:23.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:05:23.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:05:23.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:05:23.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:05:23.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:05:23.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:05:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:05:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.919893 -999.00  +11.00   3.72     92   +9.70 1 2 1 3 1     0    0 1.20 -4.59 ..E.. 3.7 3.7 221.2 6.0 11.7 -22.4 11.6 -21.3 11.3 -19.4 11.6 -21.3
2026-04-13T00:05:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:05:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:05:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.919893
2026-04-13T00:05:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:05:23.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:05:23.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:05:23.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:05:23.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:05:23.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:04:56', tmtdew=0.77352, humidity=94.5367, cloud=0.0, wind=8.73504, temperature=10.7532, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:04:38.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.28125, 2.1049999999999995, nan, nan, nan, nan, nan, 2.5504999999999995, nan, nan, nan, nan, nan, nan, 2.749999999999999, 0.4895000000000005, 0.2832499999999989, 0.40000000000000036, 0.38649999999999984, 0.634500000000001, 1.774000000000001, nan, 2.477249999999999], zp_timestamp='2026-04-12T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:05:23.357 [DEBUG] [Thread-198234] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:05:23.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:05:23.451 [DEBUG] [Thread-198239] [transport.py] [_log()] starting thread (client mode): 0xa7958070
2026-04-13T00:05:23.451 [DEBUG] [Thread-198239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:05:23.466 [DEBUG] [Thread-198239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:05:23.466 [INFO] [Thread-198239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:05:23.474 [DEBUG] [Thread-198239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:05:23.474 [DEBUG] [Thread-198239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:05:23.474 [DEBUG] [Thread-198239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:05:23.474 [DEBUG] [Thread-198239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:23.474 [DEBUG] [Thread-198239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:23.474 [DEBUG] [Thread-198239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] client lang: <none>
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] server lang: <none>
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] kex follows: False
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] Compression: none
2026-04-13T00:05:23.475 [DEBUG] [Thread-198239] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:05:23.535 [DEBUG] [Thread-198239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:05:23.535 [DEBUG] [Thread-198239] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:05:23.536 [DEBUG] [Thread-198239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:05:23.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:05:23.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:05:23.591 [DEBUG] [Thread-198239] [transport.py] [_log()] userauth is OK
2026-04-13T00:05:23.592 [DEBUG] [Thread-198239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:05:23.592 [DEBUG] [Thread-198239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:05:23.592 [DEBUG] [Thread-198239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:05:23.592 [DEBUG] [Thread-198239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:05:23.611 [INFO] [Thread-198239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:05:23.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:05:23.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:05:24.432 [DEBUG] [Thread-198239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:05:24.432 [DEBUG] [Thread-198239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:05:24.480 [DEBUG] [Thread-198239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:05:24.480 [DEBUG] [Thread-198239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:05:24.489 [DEBUG] [Thread-198239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:05:24.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:05:24.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:05:24.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:05:24.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:05:24.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:05:24.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:05:24.527 [DEBUG] [Thread-198239] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:05:37.682 [DEBUG] [Thread-198241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:52.731 [DEBUG] [Thread-198242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:53.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:53.145 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:05:54.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:05:54.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:05:54.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:05:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 5, 32), 0.760585, 94.6196, 0.0, 9.29952, 10.7697, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:05:55.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:05:32
2026-04-13T00:05:56.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:05:56.419 [DEBUG] [Thread-198243] [transport.py] [_log()] starting thread (client mode): 0xa7959060
2026-04-13T00:05:56.419 [DEBUG] [Thread-198243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:05:56.440 [DEBUG] [Thread-198243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:05:56.440 [INFO] [Thread-198243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] client lang: <none>
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] server lang: <none>
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] kex follows: False
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] Compression: none
2026-04-13T00:05:56.442 [DEBUG] [Thread-198243] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:05:56.458 [DEBUG] [Thread-198243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:05:56.459 [DEBUG] [Thread-198243] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:05:56.459 [DEBUG] [Thread-198243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:05:56.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:05:56.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:05:56.461 [DEBUG] [Thread-198243] [transport.py] [_log()] userauth is OK
2026-04-13T00:05:56.462 [DEBUG] [Thread-198243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:05:56.462 [DEBUG] [Thread-198243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:05:56.462 [DEBUG] [Thread-198243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:05:56.462 [DEBUG] [Thread-198243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:05:56.480 [INFO] [Thread-198243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:05:56.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:05:57.239 [DEBUG] [Thread-198243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:05:57.239 [DEBUG] [Thread-198243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:05:57.239 [DEBUG] [Thread-198243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:05:57.280 [DEBUG] [Thread-198243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:05:57.280 [DEBUG] [Thread-198243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:05:57.282 [DEBUG] [Thread-198243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:05:57.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:05:57.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:05:57.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:05:57.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:05:57.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:05:57.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:05:57.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:05:57.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.920240 -999.00  +10.90   3.71     92   +9.70 1 2 1 3 1     0    0 1.19 -5.36 ..E.. 3.7 3.7 225.4 5.8 11.7 -22.4 11.5 -21.4 11.2 -19.4 11.6 -21.4
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.920240
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:05:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:05:32', tmtdew=0.760585, humidity=94.6196, cloud=0.0, wind=9.29952, temperature=10.7697, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:05:08.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:05:57.300 [DEBUG] [Thread-198243] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:05:57.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:05:57.386 [DEBUG] [Thread-198246] [transport.py] [_log()] starting thread (client mode): 0xa7959510
2026-04-13T00:05:57.386 [DEBUG] [Thread-198246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:05:57.401 [DEBUG] [Thread-198246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:05:57.401 [INFO] [Thread-198246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:05:57.409 [DEBUG] [Thread-198246] [transport.py] [_log()] client lang: <none>
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] server lang: <none>
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] kex follows: False
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] Compression: none
2026-04-13T00:05:57.410 [DEBUG] [Thread-198246] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:05:57.467 [DEBUG] [Thread-198246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:05:57.467 [DEBUG] [Thread-198246] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:05:57.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:05:57.468 [DEBUG] [Thread-198246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:05:57.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:05:57.523 [DEBUG] [Thread-198246] [transport.py] [_log()] userauth is OK
2026-04-13T00:05:57.523 [DEBUG] [Thread-198246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:05:57.523 [DEBUG] [Thread-198246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:05:57.524 [DEBUG] [Thread-198246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:05:57.524 [DEBUG] [Thread-198246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:05:57.547 [INFO] [Thread-198246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:05:57.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:05:57.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:05:58.361 [DEBUG] [Thread-198246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:05:58.361 [DEBUG] [Thread-198246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:05:58.409 [DEBUG] [Thread-198246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:05:58.409 [DEBUG] [Thread-198246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:05:58.419 [DEBUG] [Thread-198246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:05:58.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:05:58.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:05:58.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:05:58.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:05:58.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:05:58.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:05:58.457 [DEBUG] [Thread-198246] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:06:07.766 [DEBUG] [Thread-198248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:06:22.830 [DEBUG] [Thread-198249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:06:23.233 [DEBUG] [Thread-198250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:06:28.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:06:28.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:06:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:06:29.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 6, 7), 0.75286, 94.6694, 0.0, 9.1584, 10.7864, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:06:29.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:06:07
2026-04-13T00:06:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:06:30.279 [DEBUG] [Thread-198251] [transport.py] [_log()] starting thread (client mode): 0xb39c6e60
2026-04-13T00:06:30.279 [DEBUG] [Thread-198251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:06:30.300 [DEBUG] [Thread-198251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:06:30.300 [INFO] [Thread-198251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:06:30.303 [DEBUG] [Thread-198251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:06:30.303 [DEBUG] [Thread-198251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:06:30.303 [DEBUG] [Thread-198251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:06:30.303 [DEBUG] [Thread-198251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:06:30.303 [DEBUG] [Thread-198251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] client lang: <none>
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] server lang: <none>
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] kex follows: False
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:06:30.304 [DEBUG] [Thread-198251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:06:30.305 [DEBUG] [Thread-198251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:06:30.305 [DEBUG] [Thread-198251] [transport.py] [_log()] Compression: none
2026-04-13T00:06:30.305 [DEBUG] [Thread-198251] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:06:30.323 [DEBUG] [Thread-198251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:06:30.324 [DEBUG] [Thread-198251] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:06:30.324 [DEBUG] [Thread-198251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:06:30.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:06:30.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:06:30.365 [DEBUG] [Thread-198251] [transport.py] [_log()] userauth is OK
2026-04-13T00:06:30.365 [DEBUG] [Thread-198251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:06:30.365 [DEBUG] [Thread-198251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:06:30.366 [DEBUG] [Thread-198251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:06:30.366 [DEBUG] [Thread-198251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:06:30.399 [INFO] [Thread-198251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:06:30.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:06:31.162 [DEBUG] [Thread-198251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:06:31.162 [DEBUG] [Thread-198251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:06:31.162 [DEBUG] [Thread-198251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:06:31.203 [DEBUG] [Thread-198251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:06:31.203 [DEBUG] [Thread-198251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:06:31.206 [DEBUG] [Thread-198251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:06:31.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:06:31.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:06:31.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:06:31.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:06:31.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:06:31.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:06:31.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:06:31.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:06:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:06:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.920935 -999.00  +10.80   4.07     91   +9.60 1 2 1 3 1     0    0 1.14 -6.66 ..e.. 4.1 4.1 222.8 7.5 11.6 -22.5 11.5 -21.4 11.2 -19.5 11.5 -21.6
2026-04-13T00:06:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:06:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:06:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.920935
2026-04-13T00:06:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:06:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:06:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:06:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:06:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:06:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:06:07', tmtdew=0.75286, humidity=94.6694, cloud=0.0, wind=9.1584, temperature=10.7864, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:06:08.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:06:31.236 [DEBUG] [Thread-198251] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:06:31.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:06:31.329 [DEBUG] [Thread-198254] [transport.py] [_log()] starting thread (client mode): 0xa7958310
2026-04-13T00:06:31.329 [DEBUG] [Thread-198254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:06:31.343 [DEBUG] [Thread-198254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:06:31.343 [INFO] [Thread-198254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] client lang: <none>
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] server lang: <none>
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] kex follows: False
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:06:31.351 [DEBUG] [Thread-198254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:06:31.352 [DEBUG] [Thread-198254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:06:31.352 [DEBUG] [Thread-198254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:06:31.352 [DEBUG] [Thread-198254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:06:31.352 [DEBUG] [Thread-198254] [transport.py] [_log()] Compression: none
2026-04-13T00:06:31.352 [DEBUG] [Thread-198254] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:06:31.414 [DEBUG] [Thread-198254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:06:31.415 [DEBUG] [Thread-198254] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:06:31.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:06:31.416 [DEBUG] [Thread-198254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:06:31.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:06:31.475 [DEBUG] [Thread-198254] [transport.py] [_log()] userauth is OK
2026-04-13T00:06:31.475 [DEBUG] [Thread-198254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:06:31.475 [DEBUG] [Thread-198254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:06:31.475 [DEBUG] [Thread-198254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:06:31.475 [DEBUG] [Thread-198254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:06:31.494 [INFO] [Thread-198254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:06:31.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:06:31.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:06:32.333 [DEBUG] [Thread-198254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:06:32.334 [DEBUG] [Thread-198254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:06:32.382 [DEBUG] [Thread-198254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:06:32.383 [DEBUG] [Thread-198254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:06:32.392 [DEBUG] [Thread-198254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:06:32.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:06:32.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:06:32.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:06:32.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:06:32.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:06:32.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:06:32.428 [DEBUG] [Thread-198254] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:06:37.865 [DEBUG] [Thread-198256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:06:52.915 [DEBUG] [Thread-198257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:06:53.350 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:06:53.351 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:07:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:07:02.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:07:02.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:07:03.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 6, 43), 0.71076, 95.3057, 0.0, 10.6582, 10.7395, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:07:03.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:06:43
2026-04-13T00:07:04.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:07:04.250 [DEBUG] [Thread-198258] [transport.py] [_log()] starting thread (client mode): 0xb0fce890
2026-04-13T00:07:04.250 [DEBUG] [Thread-198258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:07:04.271 [DEBUG] [Thread-198258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:07:04.271 [INFO] [Thread-198258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:07:04.273 [DEBUG] [Thread-198258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] client lang: <none>
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] server lang: <none>
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] kex follows: False
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] Compression: none
2026-04-13T00:07:04.274 [DEBUG] [Thread-198258] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:07:04.293 [DEBUG] [Thread-198258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:07:04.294 [DEBUG] [Thread-198258] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:07:04.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:07:04.296 [DEBUG] [Thread-198258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:07:04.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:07:04.298 [DEBUG] [Thread-198258] [transport.py] [_log()] userauth is OK
2026-04-13T00:07:04.298 [DEBUG] [Thread-198258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:07:04.299 [DEBUG] [Thread-198258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:07:04.299 [DEBUG] [Thread-198258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:07:04.299 [DEBUG] [Thread-198258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:07:04.320 [INFO] [Thread-198258] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:07:04.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:07:05.076 [DEBUG] [Thread-198258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:07:05.077 [DEBUG] [Thread-198258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:07:05.077 [DEBUG] [Thread-198258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:07:05.118 [DEBUG] [Thread-198258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:07:05.118 [DEBUG] [Thread-198258] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:07:05.121 [DEBUG] [Thread-198258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:07:05.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:07:05.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:07:05.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:07:05.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:07:05.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:07:05.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:07:05.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:07:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:07:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:07:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.921282 -999.00  +10.80   3.87     91   +9.50 1 2 1 3 1     0    0 1.14 -6.66 ..e.. 3.9 3.9 210.6 6.2 11.6 -22.5 11.5 -21.3 11.2 -19.3 11.6 -21.2
2026-04-13T00:07:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:07:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:07:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.921282
2026-04-13T00:07:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:07:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:07:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:07:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:07:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:07:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:06:43', tmtdew=0.71076, humidity=95.3057, cloud=0.0, wind=10.6582, temperature=10.7395, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:06:38.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:07:05.146 [DEBUG] [Thread-198258] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:07:05.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:07:05.239 [DEBUG] [Thread-198261] [transport.py] [_log()] starting thread (client mode): 0xb0fcf4c0
2026-04-13T00:07:05.239 [DEBUG] [Thread-198261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:07:05.254 [DEBUG] [Thread-198261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:07:05.254 [INFO] [Thread-198261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:07:05.262 [DEBUG] [Thread-198261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:07:05.262 [DEBUG] [Thread-198261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:07:05.262 [DEBUG] [Thread-198261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:07:05.262 [DEBUG] [Thread-198261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:05.262 [DEBUG] [Thread-198261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:05.262 [DEBUG] [Thread-198261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:05.262 [DEBUG] [Thread-198261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] client lang: <none>
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] server lang: <none>
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] kex follows: False
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] Compression: none
2026-04-13T00:07:05.263 [DEBUG] [Thread-198261] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:07:05.323 [DEBUG] [Thread-198261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:07:05.324 [DEBUG] [Thread-198261] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:07:05.324 [DEBUG] [Thread-198261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:07:05.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:07:05.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:07:05.380 [DEBUG] [Thread-198261] [transport.py] [_log()] userauth is OK
2026-04-13T00:07:05.380 [DEBUG] [Thread-198261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:07:05.381 [DEBUG] [Thread-198261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:07:05.381 [DEBUG] [Thread-198261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:07:05.381 [DEBUG] [Thread-198261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:07:05.399 [INFO] [Thread-198261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:07:05.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:07:05.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:07:06.186 [DEBUG] [Thread-198261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:07:06.186 [DEBUG] [Thread-198261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:07:06.234 [DEBUG] [Thread-198261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:07:06.234 [DEBUG] [Thread-198261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:07:06.242 [DEBUG] [Thread-198261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:07:06.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:07:06.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:07:06.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:07:06.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:07:06.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:07:06.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:07:06.276 [DEBUG] [Thread-198261] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:07:07.951 [DEBUG] [Thread-198263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:07:22.999 [DEBUG] [Thread-198264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:07:23.291 [DEBUG] [Thread-198265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:07:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:07:36.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:07:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:07:37.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 7, 18), 0.76049, 95.1197, 0.0, 11.0995, 10.7532, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:07:37.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:07:18
2026-04-13T00:07:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:07:38.032 [DEBUG] [Thread-198266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:07:38.098 [DEBUG] [Thread-198267] [transport.py] [_log()] starting thread (client mode): 0xa795b670
2026-04-13T00:07:38.098 [DEBUG] [Thread-198267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:07:38.116 [DEBUG] [Thread-198267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:07:38.116 [INFO] [Thread-198267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:07:38.119 [DEBUG] [Thread-198267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] client lang: <none>
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] server lang: <none>
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] kex follows: False
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] Compression: none
2026-04-13T00:07:38.120 [DEBUG] [Thread-198267] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:07:38.136 [DEBUG] [Thread-198267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:07:38.137 [DEBUG] [Thread-198267] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:07:38.137 [DEBUG] [Thread-198267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:07:38.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:07:38.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:07:38.139 [DEBUG] [Thread-198267] [transport.py] [_log()] userauth is OK
2026-04-13T00:07:38.139 [DEBUG] [Thread-198267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:07:38.139 [DEBUG] [Thread-198267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:07:38.140 [DEBUG] [Thread-198267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:07:38.140 [DEBUG] [Thread-198267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:07:38.164 [INFO] [Thread-198267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:07:38.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:07:38.793 [DEBUG] [Thread-198267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:07:38.793 [DEBUG] [Thread-198267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:07:38.794 [DEBUG] [Thread-198267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:07:38.835 [DEBUG] [Thread-198267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:07:38.835 [DEBUG] [Thread-198267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:07:38.838 [DEBUG] [Thread-198267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:07:38.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:07:38.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:07:38.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:07:38.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:07:38.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:07:38.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:07:38.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:07:38.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:07:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:07:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.921629 -999.00  +10.80   2.30     91   +9.50 1 2 1 3 1     0    0 1.14 -6.92 ..E.. 2.3 2.3 235.6 5.9 11.6 -22.5 11.5 -21.3 11.2 -19.3 11.5 -21.4
2026-04-13T00:07:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:07:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:07:38.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.921629
2026-04-13T00:07:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:07:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:07:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:07:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:07:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:07:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:07:18', tmtdew=0.76049, humidity=95.1197, cloud=0.0, wind=11.0995, temperature=10.7532, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:07:08.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:07:38.863 [DEBUG] [Thread-198267] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:07:38.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:07:38.957 [DEBUG] [Thread-198270] [transport.py] [_log()] starting thread (client mode): 0xa7959900
2026-04-13T00:07:38.957 [DEBUG] [Thread-198270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:07:38.971 [DEBUG] [Thread-198270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:07:38.972 [INFO] [Thread-198270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:07:38.979 [DEBUG] [Thread-198270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:07:38.979 [DEBUG] [Thread-198270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:07:38.979 [DEBUG] [Thread-198270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:07:38.979 [DEBUG] [Thread-198270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:38.979 [DEBUG] [Thread-198270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:07:38.979 [DEBUG] [Thread-198270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:38.979 [DEBUG] [Thread-198270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] client lang: <none>
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] server lang: <none>
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] kex follows: False
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] Compression: none
2026-04-13T00:07:38.980 [DEBUG] [Thread-198270] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:07:39.038 [DEBUG] [Thread-198270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:07:39.038 [DEBUG] [Thread-198270] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:07:39.039 [DEBUG] [Thread-198270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:07:39.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:07:39.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:07:39.094 [DEBUG] [Thread-198270] [transport.py] [_log()] userauth is OK
2026-04-13T00:07:39.094 [DEBUG] [Thread-198270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:07:39.094 [DEBUG] [Thread-198270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:07:39.094 [DEBUG] [Thread-198270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:07:39.094 [DEBUG] [Thread-198270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:07:39.116 [INFO] [Thread-198270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:07:39.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:07:39.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:07:39.929 [DEBUG] [Thread-198270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:07:39.929 [DEBUG] [Thread-198270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:07:39.977 [DEBUG] [Thread-198270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:07:39.977 [DEBUG] [Thread-198270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:07:39.986 [DEBUG] [Thread-198270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:07:39.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:07:39.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:07:40.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:07:40.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:07:40.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:07:40.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:07:40.020 [DEBUG] [Thread-198270] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:07:53.068 [DEBUG] [Thread-198272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:07:53.558 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:07:53.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:08:08.117 [DEBUG] [Thread-198273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:08:10.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:08:10.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:08:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:08:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 7, 54), 0.71611, 95.2726, 0.0, 10.764, 10.7728, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:08:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:07:54
2026-04-13T00:08:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:08:11.921 [DEBUG] [Thread-198274] [transport.py] [_log()] starting thread (client mode): 0xa795b880
2026-04-13T00:08:11.922 [DEBUG] [Thread-198274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:08:11.944 [DEBUG] [Thread-198274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:08:11.944 [INFO] [Thread-198274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:08:11.946 [DEBUG] [Thread-198274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] client lang: <none>
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] server lang: <none>
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] kex follows: False
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] Compression: none
2026-04-13T00:08:11.947 [DEBUG] [Thread-198274] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:08:11.968 [DEBUG] [Thread-198274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:08:11.968 [DEBUG] [Thread-198274] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:08:11.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:08:11.969 [DEBUG] [Thread-198274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:08:11.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:08:11.971 [DEBUG] [Thread-198274] [transport.py] [_log()] userauth is OK
2026-04-13T00:08:11.971 [DEBUG] [Thread-198274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:08:11.972 [DEBUG] [Thread-198274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:08:11.972 [DEBUG] [Thread-198274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:08:11.972 [DEBUG] [Thread-198274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:08:11.994 [INFO] [Thread-198274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:08:11.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:08:12.620 [DEBUG] [Thread-198274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:08:12.620 [DEBUG] [Thread-198274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:08:12.620 [DEBUG] [Thread-198274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:08:12.661 [DEBUG] [Thread-198274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:08:12.661 [DEBUG] [Thread-198274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:08:12.664 [DEBUG] [Thread-198274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:08:12.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:08:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:08:12.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:08:12.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:08:12.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:08:12.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:08:12.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:08:12.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:08:12.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:08:12.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.921976 -999.00  +10.80   2.99     91   +9.40 1 2 1 3 1     0    0 1.13 -7.10 ..E.w 3.0 3.0 207.9 7.0 11.6 -22.4 11.5 -21.4 11.2 -19.3 11.5 -21.4
2026-04-13T00:08:12.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:08:12.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:08:12.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.921976
2026-04-13T00:08:12.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:08:12.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:08:12.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:08:12.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:08:12.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:08:12.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:07:54', tmtdew=0.71611, humidity=95.2726, cloud=0.0, wind=10.764, temperature=10.7728, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:07:38.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:08:12.691 [DEBUG] [Thread-198274] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:08:12.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:08:12.785 [DEBUG] [Thread-198277] [transport.py] [_log()] starting thread (client mode): 0xb0fcc250
2026-04-13T00:08:12.786 [DEBUG] [Thread-198277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:08:12.800 [DEBUG] [Thread-198277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:08:12.800 [INFO] [Thread-198277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:08:12.808 [DEBUG] [Thread-198277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:08:12.809 [DEBUG] [Thread-198277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] client lang: <none>
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] server lang: <none>
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] kex follows: False
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:08:12.810 [DEBUG] [Thread-198277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:08:12.811 [DEBUG] [Thread-198277] [transport.py] [_log()] Compression: none
2026-04-13T00:08:12.811 [DEBUG] [Thread-198277] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:08:12.868 [DEBUG] [Thread-198277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:08:12.869 [DEBUG] [Thread-198277] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:08:12.869 [DEBUG] [Thread-198277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:08:12.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:08:12.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:08:12.927 [DEBUG] [Thread-198277] [transport.py] [_log()] userauth is OK
2026-04-13T00:08:12.928 [DEBUG] [Thread-198277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:08:12.928 [DEBUG] [Thread-198277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:08:12.928 [DEBUG] [Thread-198277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:08:12.928 [DEBUG] [Thread-198277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:08:12.947 [INFO] [Thread-198277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:08:12.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:08:12.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:08:13.756 [DEBUG] [Thread-198277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:08:13.756 [DEBUG] [Thread-198277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:08:13.804 [DEBUG] [Thread-198277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:08:13.804 [DEBUG] [Thread-198277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:08:13.813 [DEBUG] [Thread-198277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:08:13.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:08:13.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:08:13.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:08:13.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:08:13.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:08:13.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:08:13.851 [DEBUG] [Thread-198277] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:08:23.154 [DEBUG] [Thread-198279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:08:23.349 [DEBUG] [Thread-198280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:08:38.206 [DEBUG] [Thread-198281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:08:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:08:43.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:08:43.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:08:45.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 8, 29), 0.75813, 94.6363, 0.0, 9.44064, 10.803, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:08:45.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:08:29
2026-04-13T00:08:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:08:45.677 [DEBUG] [Thread-198282] [transport.py] [_log()] starting thread (client mode): 0xb0fccb80
2026-04-13T00:08:45.677 [DEBUG] [Thread-198282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:08:45.699 [DEBUG] [Thread-198282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:08:45.700 [INFO] [Thread-198282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] client lang: <none>
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] server lang: <none>
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] kex follows: False
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] Compression: none
2026-04-13T00:08:45.703 [DEBUG] [Thread-198282] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:08:45.720 [DEBUG] [Thread-198282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:08:45.721 [DEBUG] [Thread-198282] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:08:45.722 [DEBUG] [Thread-198282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:08:45.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:08:45.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:08:45.724 [DEBUG] [Thread-198282] [transport.py] [_log()] userauth is OK
2026-04-13T00:08:45.724 [DEBUG] [Thread-198282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:08:45.725 [DEBUG] [Thread-198282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:08:45.725 [DEBUG] [Thread-198282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:08:45.725 [DEBUG] [Thread-198282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:08:45.760 [INFO] [Thread-198282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:08:45.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:08:46.353 [DEBUG] [Thread-198282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:08:46.353 [DEBUG] [Thread-198282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:08:46.354 [DEBUG] [Thread-198282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:08:46.395 [DEBUG] [Thread-198282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:08:46.395 [DEBUG] [Thread-198282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:08:46.399 [DEBUG] [Thread-198282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:08:46.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:08:46.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:08:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:08:46.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:08:46.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:08:46.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:08:46.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:08:46.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:08:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:08:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.922324 -999.00  +10.80   5.35     91   +9.50 1 2 1 3 1     0    0 1.10 -6.64 ..E.w 5.3 5.3 211.2 7.3 11.6 -22.5 11.5 -21.3 11.2 -19.3 11.5 -21.3
2026-04-13T00:08:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:08:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:08:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.922324
2026-04-13T00:08:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:08:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:08:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:08:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:08:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:08:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:08:29', tmtdew=0.75813, humidity=94.6363, cloud=0.0, wind=9.44064, temperature=10.803, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:08:08.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:08:46.425 [DEBUG] [Thread-198282] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:08:46.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:08:46.518 [DEBUG] [Thread-198285] [transport.py] [_log()] starting thread (client mode): 0xb0fce980
2026-04-13T00:08:46.518 [DEBUG] [Thread-198285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:08:46.533 [DEBUG] [Thread-198285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:08:46.533 [INFO] [Thread-198285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] client lang: <none>
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] server lang: <none>
2026-04-13T00:08:46.541 [DEBUG] [Thread-198285] [transport.py] [_log()] kex follows: False
2026-04-13T00:08:46.542 [DEBUG] [Thread-198285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:08:46.542 [DEBUG] [Thread-198285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:08:46.542 [DEBUG] [Thread-198285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:08:46.542 [DEBUG] [Thread-198285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:08:46.542 [DEBUG] [Thread-198285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:08:46.542 [DEBUG] [Thread-198285] [transport.py] [_log()] Compression: none
2026-04-13T00:08:46.542 [DEBUG] [Thread-198285] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:08:46.599 [DEBUG] [Thread-198285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:08:46.600 [DEBUG] [Thread-198285] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:08:46.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:08:46.601 [DEBUG] [Thread-198285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:08:46.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:08:46.654 [DEBUG] [Thread-198285] [transport.py] [_log()] userauth is OK
2026-04-13T00:08:46.655 [DEBUG] [Thread-198285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:08:46.655 [DEBUG] [Thread-198285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:08:46.655 [DEBUG] [Thread-198285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:08:46.655 [DEBUG] [Thread-198285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:08:46.674 [INFO] [Thread-198285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:08:46.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:08:46.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:08:47.486 [DEBUG] [Thread-198285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:08:47.486 [DEBUG] [Thread-198285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:08:47.534 [DEBUG] [Thread-198285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:08:47.534 [DEBUG] [Thread-198285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:08:47.543 [DEBUG] [Thread-198285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:08:47.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:08:47.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:08:47.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:08:47.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:08:47.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:08:47.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:08:47.581 [DEBUG] [Thread-198285] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:08:53.241 [DEBUG] [Thread-198287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:08:53.765 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:08:53.767 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:08.293 [DEBUG] [Thread-198288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:17.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:09:17.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:09:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:09:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 9, 5), 0.757805, 94.6363, 0.0, 9.423, 10.7367, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:09:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:09:05
2026-04-13T00:09:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:09:19.419 [DEBUG] [Thread-198289] [transport.py] [_log()] starting thread (client mode): 0xa795b340
2026-04-13T00:09:19.419 [DEBUG] [Thread-198289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:09:19.440 [DEBUG] [Thread-198289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:09:19.440 [INFO] [Thread-198289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] client lang: <none>
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] server lang: <none>
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] kex follows: False
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] Compression: none
2026-04-13T00:09:19.443 [DEBUG] [Thread-198289] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:09:19.460 [DEBUG] [Thread-198289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:09:19.460 [DEBUG] [Thread-198289] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:09:19.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:09:19.461 [DEBUG] [Thread-198289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:09:19.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:09:19.505 [DEBUG] [Thread-198289] [transport.py] [_log()] userauth is OK
2026-04-13T00:09:19.505 [DEBUG] [Thread-198289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:09:19.505 [DEBUG] [Thread-198289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:09:19.506 [DEBUG] [Thread-198289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:09:19.506 [DEBUG] [Thread-198289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:09:19.537 [INFO] [Thread-198289] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:09:19.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:09:20.174 [DEBUG] [Thread-198289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:09:20.174 [DEBUG] [Thread-198289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:09:20.175 [DEBUG] [Thread-198289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:09:20.215 [DEBUG] [Thread-198289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:09:20.215 [DEBUG] [Thread-198289] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:09:20.218 [DEBUG] [Thread-198289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:09:20.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:09:20.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:09:20.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:09:20.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:09:20.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:09:20.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:09:20.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:09:20.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:09:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:09:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.922671 -999.00  +10.80   2.48     91   +9.40 1 2 1 3 1     0    0 1.15 -6.19 ..E.w 2.5 2.5 212.6 7.1 11.6 -22.4 11.5 -21.4 11.2 -19.3 11.5 -21.3
2026-04-13T00:09:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:09:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:09:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.922671
2026-04-13T00:09:20.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:09:20.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:09:20.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:09:20.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:09:20.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:09:20.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:09:05', tmtdew=0.757805, humidity=94.6363, cloud=0.0, wind=9.423, temperature=10.7367, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:08:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:09:20.249 [DEBUG] [Thread-198289] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:09:20.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:09:20.344 [DEBUG] [Thread-198292] [transport.py] [_log()] starting thread (client mode): 0xa795b040
2026-04-13T00:09:20.344 [DEBUG] [Thread-198292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:09:20.359 [DEBUG] [Thread-198292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:09:20.359 [INFO] [Thread-198292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:09:20.366 [DEBUG] [Thread-198292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] client lang: <none>
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] server lang: <none>
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] kex follows: False
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] Compression: none
2026-04-13T00:09:20.367 [DEBUG] [Thread-198292] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:09:20.427 [DEBUG] [Thread-198292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:09:20.428 [DEBUG] [Thread-198292] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:09:20.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:09:20.429 [DEBUG] [Thread-198292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:09:20.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:09:20.488 [DEBUG] [Thread-198292] [transport.py] [_log()] userauth is OK
2026-04-13T00:09:20.488 [DEBUG] [Thread-198292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:09:20.488 [DEBUG] [Thread-198292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:09:20.488 [DEBUG] [Thread-198292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:09:20.488 [DEBUG] [Thread-198292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:09:20.507 [INFO] [Thread-198292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:09:20.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:09:20.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:09:21.294 [DEBUG] [Thread-198292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:09:21.295 [DEBUG] [Thread-198292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:09:21.342 [DEBUG] [Thread-198292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:09:21.342 [DEBUG] [Thread-198292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:09:21.351 [DEBUG] [Thread-198292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:09:21.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:09:21.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:09:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:09:21.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:09:21.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:09:21.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:09:21.388 [DEBUG] [Thread-198292] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:09:23.331 [DEBUG] [Thread-198294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:23.420 [DEBUG] [Thread-198295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:38.388 [DEBUG] [Thread-198296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:51.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:09:51.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:09:51.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:09:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 9, 41), 0.72097, 95.2395, 0.0, 12.2105, 10.7065, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:09:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:09:41
2026-04-13T00:09:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:09:53.271 [DEBUG] [Thread-198297] [transport.py] [_log()] starting thread (client mode): 0xb0fccb20
2026-04-13T00:09:53.271 [DEBUG] [Thread-198297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:09:53.291 [DEBUG] [Thread-198297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:09:53.291 [INFO] [Thread-198297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:09:53.294 [DEBUG] [Thread-198297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] client lang: <none>
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] server lang: <none>
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] kex follows: False
2026-04-13T00:09:53.295 [DEBUG] [Thread-198297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:09:53.296 [DEBUG] [Thread-198297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:09:53.296 [DEBUG] [Thread-198297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:09:53.296 [DEBUG] [Thread-198297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:09:53.296 [DEBUG] [Thread-198297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:09:53.296 [DEBUG] [Thread-198297] [transport.py] [_log()] Compression: none
2026-04-13T00:09:53.296 [DEBUG] [Thread-198297] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:09:53.316 [DEBUG] [Thread-198297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:09:53.316 [DEBUG] [Thread-198297] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:09:53.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:09:53.318 [DEBUG] [Thread-198297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:09:53.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:09:53.361 [DEBUG] [Thread-198297] [transport.py] [_log()] userauth is OK
2026-04-13T00:09:53.361 [DEBUG] [Thread-198297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:09:53.361 [DEBUG] [Thread-198297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:09:53.361 [DEBUG] [Thread-198297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:09:53.361 [DEBUG] [Thread-198297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:09:53.387 [INFO] [Thread-198297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:09:53.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:09:53.424 [DEBUG] [Thread-198299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:53.971 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:53.972 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:09:53.986 [DEBUG] [Thread-198297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:09:53.986 [DEBUG] [Thread-198297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:09:53.987 [DEBUG] [Thread-198297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:09:54.033 [DEBUG] [Thread-198297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:09:54.033 [DEBUG] [Thread-198297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:09:54.037 [DEBUG] [Thread-198297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:09:54.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:09:54.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:09:54.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:09:54.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:09:54.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:09:54.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:09:54.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:09:54.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:09:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:09:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.923365 -999.00  +10.80   4.64     91   +9.40 1 2 1 3 1     0    0 1.16 -6.03 ..E.. 4.6 4.6 211.1 10.2 11.6 -22.4 11.5 -21.5 11.2 -19.4 11.5 -21.5
2026-04-13T00:09:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:09:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:09:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.923365
2026-04-13T00:09:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:09:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:09:54.066 [DEBUG] [Thread-198297] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:09:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:09:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:09:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:09:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:09:41', tmtdew=0.72097, humidity=95.2395, cloud=0.0, wind=12.2105, temperature=10.7065, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:09:38.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:09:54.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:09:54.153 [DEBUG] [Thread-198301] [transport.py] [_log()] starting thread (client mode): 0xb0fce830
2026-04-13T00:09:54.153 [DEBUG] [Thread-198301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:09:54.168 [DEBUG] [Thread-198301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:09:54.168 [INFO] [Thread-198301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:09:54.176 [DEBUG] [Thread-198301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:09:54.176 [DEBUG] [Thread-198301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:09:54.176 [DEBUG] [Thread-198301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:09:54.176 [DEBUG] [Thread-198301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:54.176 [DEBUG] [Thread-198301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] client lang: <none>
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] server lang: <none>
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] kex follows: False
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] Compression: none
2026-04-13T00:09:54.177 [DEBUG] [Thread-198301] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:09:54.234 [DEBUG] [Thread-198301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:09:54.235 [DEBUG] [Thread-198301] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:09:54.236 [DEBUG] [Thread-198301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:09:54.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:09:54.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:09:54.290 [DEBUG] [Thread-198301] [transport.py] [_log()] userauth is OK
2026-04-13T00:09:54.291 [DEBUG] [Thread-198301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:09:54.291 [DEBUG] [Thread-198301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:09:54.291 [DEBUG] [Thread-198301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:09:54.291 [DEBUG] [Thread-198301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:09:54.310 [INFO] [Thread-198301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:09:54.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:09:54.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:09:55.127 [DEBUG] [Thread-198301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:09:55.127 [DEBUG] [Thread-198301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:09:55.175 [DEBUG] [Thread-198301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:09:55.175 [DEBUG] [Thread-198301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:09:55.184 [DEBUG] [Thread-198301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:09:55.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:09:55.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:09:55.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:09:55.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:09:55.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:09:55.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:09:55.221 [DEBUG] [Thread-198301] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:10:08.461 [DEBUG] [Thread-198303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:10:23.492 [DEBUG] [Thread-198304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:10:23.520 [DEBUG] [Thread-198305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:10:25.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:10:25.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:10:25.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:10:26.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 10, 16), 0.865775, 94.5866, 0.0, 11.7346, 10.8198, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:10:26.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:10:16
2026-04-13T00:10:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:10:27.171 [DEBUG] [Thread-198306] [transport.py] [_log()] starting thread (client mode): 0xae51b8e0
2026-04-13T00:10:27.171 [DEBUG] [Thread-198306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:10:27.191 [DEBUG] [Thread-198306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:10:27.191 [INFO] [Thread-198306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] client lang: <none>
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] server lang: <none>
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] kex follows: False
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] Compression: none
2026-04-13T00:10:27.194 [DEBUG] [Thread-198306] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:10:27.203 [DEBUG] [Thread-198306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:10:27.204 [DEBUG] [Thread-198306] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:10:27.204 [DEBUG] [Thread-198306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:10:27.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:10:27.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:10:27.249 [DEBUG] [Thread-198306] [transport.py] [_log()] userauth is OK
2026-04-13T00:10:27.249 [DEBUG] [Thread-198306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:10:27.249 [DEBUG] [Thread-198306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:10:27.249 [DEBUG] [Thread-198306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:10:27.249 [DEBUG] [Thread-198306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:10:27.270 [INFO] [Thread-198306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:10:27.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:10:27.905 [DEBUG] [Thread-198306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:10:27.905 [DEBUG] [Thread-198306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:10:27.906 [DEBUG] [Thread-198306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:10:27.946 [DEBUG] [Thread-198306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:10:27.946 [DEBUG] [Thread-198306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:10:27.949 [DEBUG] [Thread-198306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:10:27.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:10:27.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:10:27.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:10:27.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:10:27.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:10:27.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:10:27.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.923712 -999.00  +10.90   4.83     91   +9.40 1 2 1 3 1     0    0 1.15 -5.82 .N... 4.8 4.8 208.6 6.9 11.6 -22.5 11.5 -21.3 11.2 -19.4 11.4 -21.4
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.923712
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:10:27.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:10:27.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:10:27.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:10:16', tmtdew=0.865775, humidity=94.5866, cloud=0.0, wind=11.7346, temperature=10.8198, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:10:08.717', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:10:27.966 [DEBUG] [Thread-198306] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:10:28.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:10:28.053 [DEBUG] [Thread-198309] [transport.py] [_log()] starting thread (client mode): 0xae518790
2026-04-13T00:10:28.053 [DEBUG] [Thread-198309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:10:28.067 [DEBUG] [Thread-198309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:10:28.068 [INFO] [Thread-198309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:10:28.075 [DEBUG] [Thread-198309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:10:28.075 [DEBUG] [Thread-198309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:10:28.075 [DEBUG] [Thread-198309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:10:28.075 [DEBUG] [Thread-198309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:10:28.075 [DEBUG] [Thread-198309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] client lang: <none>
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] server lang: <none>
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] kex follows: False
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:10:28.076 [DEBUG] [Thread-198309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:10:28.077 [DEBUG] [Thread-198309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:10:28.077 [DEBUG] [Thread-198309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:10:28.077 [DEBUG] [Thread-198309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:10:28.077 [DEBUG] [Thread-198309] [transport.py] [_log()] Compression: none
2026-04-13T00:10:28.077 [DEBUG] [Thread-198309] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:10:28.135 [DEBUG] [Thread-198309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:10:28.136 [DEBUG] [Thread-198309] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:10:28.136 [DEBUG] [Thread-198309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:10:28.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:10:28.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:10:28.191 [DEBUG] [Thread-198309] [transport.py] [_log()] userauth is OK
2026-04-13T00:10:28.191 [DEBUG] [Thread-198309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:10:28.191 [DEBUG] [Thread-198309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:10:28.191 [DEBUG] [Thread-198309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:10:28.191 [DEBUG] [Thread-198309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:10:28.216 [INFO] [Thread-198309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:10:28.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:10:28.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:10:29.065 [DEBUG] [Thread-198309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:10:29.065 [DEBUG] [Thread-198309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:10:29.113 [DEBUG] [Thread-198309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:10:29.113 [DEBUG] [Thread-198309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:10:29.124 [DEBUG] [Thread-198309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:10:29.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:10:29.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:10:29.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:10:29.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:10:29.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:10:29.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:10:29.168 [DEBUG] [Thread-198309] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:10:38.558 [DEBUG] [Thread-198311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:10:53.611 [DEBUG] [Thread-198312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:10:54.179 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:10:54.180 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:10:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:10:59.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:10:59.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:11:00.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 10, 52), 0.74208, 95.106, 0.0, 11.4696, 10.7392, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:11:00.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:10:52
2026-04-13T00:11:00.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:11:01.023 [DEBUG] [Thread-198313] [transport.py] [_log()] starting thread (client mode): 0xa7959c00
2026-04-13T00:11:01.023 [DEBUG] [Thread-198313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:11:01.039 [DEBUG] [Thread-198313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:11:01.039 [INFO] [Thread-198313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] client lang: <none>
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] server lang: <none>
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] kex follows: False
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:11:01.041 [DEBUG] [Thread-198313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:11:01.042 [DEBUG] [Thread-198313] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:11:01.042 [DEBUG] [Thread-198313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:11:01.042 [DEBUG] [Thread-198313] [transport.py] [_log()] Compression: none
2026-04-13T00:11:01.042 [DEBUG] [Thread-198313] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:11:01.053 [DEBUG] [Thread-198313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:11:01.053 [DEBUG] [Thread-198313] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:11:01.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:11:01.055 [DEBUG] [Thread-198313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:11:01.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:11:01.057 [DEBUG] [Thread-198313] [transport.py] [_log()] userauth is OK
2026-04-13T00:11:01.057 [DEBUG] [Thread-198313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:11:01.057 [DEBUG] [Thread-198313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:11:01.057 [DEBUG] [Thread-198313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:11:01.057 [DEBUG] [Thread-198313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:11:01.086 [INFO] [Thread-198313] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:11:01.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:11:01.671 [DEBUG] [Thread-198313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:11:01.671 [DEBUG] [Thread-198313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:11:01.672 [DEBUG] [Thread-198313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:11:01.713 [DEBUG] [Thread-198313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:11:01.713 [DEBUG] [Thread-198313] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:11:01.715 [DEBUG] [Thread-198313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:11:01.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:11:01.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:11:01.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:11:01.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:11:01.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:11:01.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:11:01.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:11:01.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.924060 -999.00  +10.90   5.34     91   +9.40 1 2 1 3 1     0    0 1.16 -5.57 .N... 5.3 5.3 221.4 8.1 11.6 -22.5 11.5 -21.3 11.2 -19.4 11.5 -21.3
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.924060
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:10:52', tmtdew=0.74208, humidity=95.106, cloud=0.0, wind=11.4696, temperature=10.7392, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:10:38.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:11:01.738 [DEBUG] [Thread-198313] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:11:01.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:11:01.831 [DEBUG] [Thread-198316] [transport.py] [_log()] starting thread (client mode): 0xb0fce7a0
2026-04-13T00:11:01.831 [DEBUG] [Thread-198316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:11:01.845 [DEBUG] [Thread-198316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:11:01.845 [INFO] [Thread-198316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:01.853 [DEBUG] [Thread-198316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] client lang: <none>
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] server lang: <none>
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] kex follows: False
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:11:01.854 [DEBUG] [Thread-198316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:11:01.855 [DEBUG] [Thread-198316] [transport.py] [_log()] Compression: none
2026-04-13T00:11:01.855 [DEBUG] [Thread-198316] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:11:01.911 [DEBUG] [Thread-198316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:11:01.912 [DEBUG] [Thread-198316] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:11:01.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:11:01.913 [DEBUG] [Thread-198316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:11:01.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:11:01.971 [DEBUG] [Thread-198316] [transport.py] [_log()] userauth is OK
2026-04-13T00:11:01.971 [DEBUG] [Thread-198316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:11:01.971 [DEBUG] [Thread-198316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:11:01.971 [DEBUG] [Thread-198316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:11:01.971 [DEBUG] [Thread-198316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:11:01.991 [INFO] [Thread-198316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:11:01.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:11:01.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:11:02.844 [DEBUG] [Thread-198316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:11:02.844 [DEBUG] [Thread-198316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:11:02.892 [DEBUG] [Thread-198316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:11:02.892 [DEBUG] [Thread-198316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:11:02.901 [DEBUG] [Thread-198316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:11:02.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:11:02.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:11:02.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:11:02.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:11:02.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:11:02.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:11:02.936 [DEBUG] [Thread-198316] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:11:08.649 [DEBUG] [Thread-198318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:11:23.550 [DEBUG] [Thread-198319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:11:23.701 [DEBUG] [Thread-198320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:11:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:11:32.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:11:32.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:11:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 10, 52), 0.74208, 95.106, 0.0, 11.4696, 10.7392, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:11:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:10:52
2026-04-13T00:11:34.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:11:34.799 [DEBUG] [Thread-198321] [transport.py] [_log()] starting thread (client mode): 0xb39c7040
2026-04-13T00:11:34.799 [DEBUG] [Thread-198321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:11:34.818 [DEBUG] [Thread-198321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:11:34.818 [INFO] [Thread-198321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:11:34.821 [DEBUG] [Thread-198321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:11:34.821 [DEBUG] [Thread-198321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:11:34.821 [DEBUG] [Thread-198321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:11:34.821 [DEBUG] [Thread-198321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:34.821 [DEBUG] [Thread-198321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] client lang: <none>
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] server lang: <none>
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] kex follows: False
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] Compression: none
2026-04-13T00:11:34.822 [DEBUG] [Thread-198321] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:11:34.832 [DEBUG] [Thread-198321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:11:34.832 [DEBUG] [Thread-198321] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:11:34.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:11:34.834 [DEBUG] [Thread-198321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:11:34.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:11:34.836 [DEBUG] [Thread-198321] [transport.py] [_log()] userauth is OK
2026-04-13T00:11:34.836 [DEBUG] [Thread-198321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:11:34.836 [DEBUG] [Thread-198321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:11:34.836 [DEBUG] [Thread-198321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:11:34.836 [DEBUG] [Thread-198321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:11:34.855 [INFO] [Thread-198321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:11:34.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:11:35.489 [DEBUG] [Thread-198321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:11:35.490 [DEBUG] [Thread-198321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:11:35.490 [DEBUG] [Thread-198321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:11:35.530 [DEBUG] [Thread-198321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:11:35.530 [DEBUG] [Thread-198321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:11:35.533 [DEBUG] [Thread-198321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:11:35.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:11:35.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:11:35.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:11:35.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:11:35.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:11:35.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:11:35.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:11:35.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:11:35.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:11:35.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.924407 -999.00  +10.90   4.29     91   +9.50 1 2 1 3 1     0    0 1.18 -5.38 .N... 4.3 4.3 209.0 5.7 11.6 -22.3 11.5 -21.4 11.2 -19.3 11.5 -21.3
2026-04-13T00:11:35.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:11:35.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:11:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.924407
2026-04-13T00:11:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:11:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:11:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:11:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:11:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:11:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:10:52', tmtdew=0.74208, humidity=95.106, cloud=0.0, wind=11.4696, temperature=10.7392, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:11:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.89025, 1.8239999999999998, nan, nan, nan, nan, nan, 2.5255, nan, nan, nan, nan, nan, nan, 3.0509999999999993, 0.45150000000000023, 0.31125000000000114, 0.38949999999999996, 0.4640000000000004, 0.6130000000000013, 1.9010000000000007, 2.383000000000001, 2.752749999999999], zp_timestamp='2026-04-12T22:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:11:35.557 [DEBUG] [Thread-198321] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:11:35.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:11:35.654 [DEBUG] [Thread-198324] [transport.py] [_log()] starting thread (client mode): 0xb39c5ab0
2026-04-13T00:11:35.654 [DEBUG] [Thread-198324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:11:35.669 [DEBUG] [Thread-198324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:11:35.669 [INFO] [Thread-198324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:11:35.677 [DEBUG] [Thread-198324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:11:35.677 [DEBUG] [Thread-198324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:11:35.677 [DEBUG] [Thread-198324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:11:35.677 [DEBUG] [Thread-198324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:35.677 [DEBUG] [Thread-198324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:11:35.677 [DEBUG] [Thread-198324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:35.677 [DEBUG] [Thread-198324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] client lang: <none>
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] server lang: <none>
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] kex follows: False
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] Compression: none
2026-04-13T00:11:35.678 [DEBUG] [Thread-198324] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:11:35.735 [DEBUG] [Thread-198324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:11:35.735 [DEBUG] [Thread-198324] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:11:35.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:11:35.736 [DEBUG] [Thread-198324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:11:35.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:11:35.802 [DEBUG] [Thread-198324] [transport.py] [_log()] userauth is OK
2026-04-13T00:11:35.802 [DEBUG] [Thread-198324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:11:35.803 [DEBUG] [Thread-198324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:11:35.803 [DEBUG] [Thread-198324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:11:35.803 [DEBUG] [Thread-198324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:11:35.824 [INFO] [Thread-198324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:11:35.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:11:35.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:11:36.647 [DEBUG] [Thread-198324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:11:36.647 [DEBUG] [Thread-198324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:11:36.695 [DEBUG] [Thread-198324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:11:36.695 [DEBUG] [Thread-198324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:11:36.705 [DEBUG] [Thread-198324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:11:36.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:11:36.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:11:36.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:11:36.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:11:36.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:11:36.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:11:36.742 [DEBUG] [Thread-198324] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:11:38.741 [DEBUG] [Thread-198326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:11:53.804 [DEBUG] [Thread-198327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:11:54.384 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:11:54.385 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:12:06.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:12:06.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:12: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
2026-04-13T00:12:08.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 11, 27), 0.936605, 93.9536, 0.0, 9.82872, 10.8031, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:12:08.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:11:27
2026-04-13T00:12:08.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:12:08.648 [DEBUG] [Thread-198328] [transport.py] [_log()] starting thread (client mode): 0xae5185e0
2026-04-13T00:12:08.648 [DEBUG] [Thread-198328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:12:08.669 [DEBUG] [Thread-198328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:12:08.670 [INFO] [Thread-198328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:12:08.672 [DEBUG] [Thread-198328] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] client lang: <none>
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] server lang: <none>
2026-04-13T00:12:08.673 [DEBUG] [Thread-198328] [transport.py] [_log()] kex follows: False
2026-04-13T00:12:08.674 [DEBUG] [Thread-198328] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:12:08.674 [DEBUG] [Thread-198328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:12:08.674 [DEBUG] [Thread-198328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:12:08.674 [DEBUG] [Thread-198328] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:12:08.674 [DEBUG] [Thread-198328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:12:08.674 [DEBUG] [Thread-198328] [transport.py] [_log()] Compression: none
2026-04-13T00:12:08.674 [DEBUG] [Thread-198328] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:12:08.688 [DEBUG] [Thread-198328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:12:08.689 [DEBUG] [Thread-198328] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:12:08.690 [DEBUG] [Thread-198328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:12:08.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:12:08.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:12:08.693 [DEBUG] [Thread-198328] [transport.py] [_log()] userauth is OK
2026-04-13T00:12:08.693 [DEBUG] [Thread-198328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:12:08.693 [DEBUG] [Thread-198328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:12:08.693 [DEBUG] [Thread-198328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:12:08.694 [DEBUG] [Thread-198328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:12:08.716 [INFO] [Thread-198328] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:12:08.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:12:08.837 [DEBUG] [Thread-198330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:12:09.298 [DEBUG] [Thread-198328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:12:09.298 [DEBUG] [Thread-198328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:12:09.298 [DEBUG] [Thread-198328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:12:09.339 [DEBUG] [Thread-198328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:12:09.339 [DEBUG] [Thread-198328] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:12:09.341 [DEBUG] [Thread-198328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:12:09.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:12:09.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:12:09.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:12:09.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:12:09.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:12:09.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:12:09.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:12:09.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:12:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:12:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.924754 -999.00  +10.90   4.14     91   +9.50 1 2 1 3 1     0    0 1.18 -5.11 .N... 4.1 4.1 215.5 6.4 11.6 -22.4 11.5 -21.4 11.2 -19.3 11.5 -21.5
2026-04-13T00:12:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:12:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:12:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.924754
2026-04-13T00:12:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:12:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:12:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:12:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:12:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:12:09.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:11:27', tmtdew=0.936605, humidity=93.9536, cloud=0.0, wind=9.82872, temperature=10.8031, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:11:38.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:12:09.358 [DEBUG] [Thread-198328] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:12:09.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:12:09.450 [DEBUG] [Thread-198332] [transport.py] [_log()] starting thread (client mode): 0xb39c66b0
2026-04-13T00:12:09.450 [DEBUG] [Thread-198332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:12:09.466 [DEBUG] [Thread-198332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:12:09.467 [INFO] [Thread-198332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:12:09.474 [DEBUG] [Thread-198332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:12:09.474 [DEBUG] [Thread-198332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:12:09.474 [DEBUG] [Thread-198332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:12:09.474 [DEBUG] [Thread-198332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:09.474 [DEBUG] [Thread-198332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] client lang: <none>
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] server lang: <none>
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] kex follows: False
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] Compression: none
2026-04-13T00:12:09.475 [DEBUG] [Thread-198332] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:12:09.534 [DEBUG] [Thread-198332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:12:09.535 [DEBUG] [Thread-198332] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:12:09.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:12:09.536 [DEBUG] [Thread-198332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:12:09.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:12:09.591 [DEBUG] [Thread-198332] [transport.py] [_log()] userauth is OK
2026-04-13T00:12:09.592 [DEBUG] [Thread-198332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:12:09.592 [DEBUG] [Thread-198332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:12:09.592 [DEBUG] [Thread-198332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:12:09.592 [DEBUG] [Thread-198332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:12:09.611 [INFO] [Thread-198332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:12:09.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:12:09.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:12:10.419 [DEBUG] [Thread-198332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:12:10.420 [DEBUG] [Thread-198332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:12:10.468 [DEBUG] [Thread-198332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:12:10.468 [DEBUG] [Thread-198332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:12:10.478 [DEBUG] [Thread-198332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:12:10.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:12:10.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:12:10.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:12:10.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:12:10.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:12:10.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:12:10.514 [DEBUG] [Thread-198332] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:12:23.620 [DEBUG] [Thread-198334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:12:23.877 [DEBUG] [Thread-198335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:12:38.939 [DEBUG] [Thread-198336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:12:40.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:12:40.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:12:40.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:12:41.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 12, 2), 0.934155, 93.9702, 0.0, 9.49356, 10.8362, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:12:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:12:02
2026-04-13T00:12:42.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:12:42.451 [DEBUG] [Thread-198337] [transport.py] [_log()] starting thread (client mode): 0xb39c6440
2026-04-13T00:12:42.451 [DEBUG] [Thread-198337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:12:42.461 [DEBUG] [Thread-198337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:12:42.461 [INFO] [Thread-198337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] client lang: <none>
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] server lang: <none>
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] kex follows: False
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] Compression: none
2026-04-13T00:12:42.463 [DEBUG] [Thread-198337] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:12:42.478 [DEBUG] [Thread-198337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:12:42.478 [DEBUG] [Thread-198337] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:12:42.478 [DEBUG] [Thread-198337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:12:42.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:12:42.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:12:42.480 [DEBUG] [Thread-198337] [transport.py] [_log()] userauth is OK
2026-04-13T00:12:42.480 [DEBUG] [Thread-198337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:12:42.480 [DEBUG] [Thread-198337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:12:42.480 [DEBUG] [Thread-198337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:12:42.480 [DEBUG] [Thread-198337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:12:42.494 [INFO] [Thread-198337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:12:42.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:12:43.086 [DEBUG] [Thread-198337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:12:43.086 [DEBUG] [Thread-198337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:12:43.087 [DEBUG] [Thread-198337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:12:43.127 [DEBUG] [Thread-198337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:12:43.127 [DEBUG] [Thread-198337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:12:43.129 [DEBUG] [Thread-198337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:12:43.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:12:43.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:12:43.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:12:43.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:12:43.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:12:43.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:12:43.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:12:43.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:12:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:12:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.925101 -999.00  +10.90   4.54     91   +9.50 1 2 1 3 1     0    0 1.22 -4.50 .N... 4.5 4.5 218.6 6.4 11.6 -22.4 11.4 -21.3 11.2 -19.4 11.5 -21.4
2026-04-13T00:12:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:12:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:12:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.925101
2026-04-13T00:12:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:12:43.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:12:43.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:12:43.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:12:43.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:12:43.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:12:02', tmtdew=0.934155, humidity=93.9702, cloud=0.0, wind=9.49356, temperature=10.8362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:12:08.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:12:43.153 [DEBUG] [Thread-198337] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:12:43.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:12:43.246 [DEBUG] [Thread-198340] [transport.py] [_log()] starting thread (client mode): 0xae51b220
2026-04-13T00:12:43.246 [DEBUG] [Thread-198340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:12:43.261 [DEBUG] [Thread-198340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:12:43.261 [INFO] [Thread-198340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:12:43.269 [DEBUG] [Thread-198340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:12:43.269 [DEBUG] [Thread-198340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:12:43.269 [DEBUG] [Thread-198340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:12:43.269 [DEBUG] [Thread-198340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] client lang: <none>
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] server lang: <none>
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] kex follows: False
2026-04-13T00:12:43.270 [DEBUG] [Thread-198340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:12:43.271 [DEBUG] [Thread-198340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:12:43.271 [DEBUG] [Thread-198340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:12:43.271 [DEBUG] [Thread-198340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:12:43.271 [DEBUG] [Thread-198340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:12:43.271 [DEBUG] [Thread-198340] [transport.py] [_log()] Compression: none
2026-04-13T00:12:43.271 [DEBUG] [Thread-198340] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:12:43.326 [DEBUG] [Thread-198340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:12:43.327 [DEBUG] [Thread-198340] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:12:43.327 [DEBUG] [Thread-198340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:12:43.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:12:43.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:12:43.383 [DEBUG] [Thread-198340] [transport.py] [_log()] userauth is OK
2026-04-13T00:12:43.384 [DEBUG] [Thread-198340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:12:43.384 [DEBUG] [Thread-198340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:12:43.384 [DEBUG] [Thread-198340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:12:43.384 [DEBUG] [Thread-198340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:12:43.402 [INFO] [Thread-198340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:12:43.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:12:43.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:12:44.193 [DEBUG] [Thread-198340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:12:44.193 [DEBUG] [Thread-198340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:12:44.241 [DEBUG] [Thread-198340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:12:44.241 [DEBUG] [Thread-198340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:12:44.250 [DEBUG] [Thread-198340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:12:44.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:12:44.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:12:44.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:12:44.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:12:44.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:12:44.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:12:44.285 [DEBUG] [Thread-198340] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:12:53.976 [DEBUG] [Thread-198342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:12:54.590 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:12:54.591 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:13:09.029 [DEBUG] [Thread-198343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:13:14.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:13:14.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:13:14.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:13:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 12, 38), 0.7941, 94.7745, 0.0, 11.2932, 10.7061, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:13:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:12:38
2026-04-13T00:13:16.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:13:16.314 [DEBUG] [Thread-198344] [transport.py] [_log()] starting thread (client mode): 0xa7958460
2026-04-13T00:13:16.314 [DEBUG] [Thread-198344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:13:16.324 [DEBUG] [Thread-198344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:13:16.324 [INFO] [Thread-198344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:13:16.325 [DEBUG] [Thread-198344] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:13:16.325 [DEBUG] [Thread-198344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:13:16.325 [DEBUG] [Thread-198344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] client lang: <none>
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] server lang: <none>
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] kex follows: False
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] Compression: none
2026-04-13T00:13:16.326 [DEBUG] [Thread-198344] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:13:16.333 [DEBUG] [Thread-198344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:13:16.333 [DEBUG] [Thread-198344] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:13:16.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:13:16.334 [DEBUG] [Thread-198344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:13:16.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:13:16.334 [DEBUG] [Thread-198344] [transport.py] [_log()] userauth is OK
2026-04-13T00:13:16.335 [DEBUG] [Thread-198344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:13:16.335 [DEBUG] [Thread-198344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:13:16.335 [DEBUG] [Thread-198344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:13:16.335 [DEBUG] [Thread-198344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:13:16.348 [INFO] [Thread-198344] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:13:16.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:13:17.161 [DEBUG] [Thread-198344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:13:17.161 [DEBUG] [Thread-198344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:13:17.162 [DEBUG] [Thread-198344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:13:17.202 [DEBUG] [Thread-198344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:13:17.202 [DEBUG] [Thread-198344] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:13:17.205 [DEBUG] [Thread-198344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:13:17.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:13:17.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:13:17.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:13:17.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:13:17.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:13:17.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:13:17.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:13:17.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:13:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:13:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.925101 -999.00  +10.90   4.54     91   +9.50 1 2 1 3 1     0    0 1.22 -4.50 .N... 4.5 4.5 218.6 6.4 11.6 -22.4 11.4 -21.3 11.2 -19.4 11.5 -21.4
2026-04-13T00:13:17.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:13:17.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:13:17.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.925101
2026-04-13T00:13:17.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:13:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:13:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:13:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:13:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:13:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:12:38', tmtdew=0.7941, humidity=94.7745, cloud=0.0, wind=11.2932, temperature=10.7061, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:12:08.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:13:17.229 [DEBUG] [Thread-198344] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:13:17.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:13:17.322 [DEBUG] [Thread-198347] [transport.py] [_log()] starting thread (client mode): 0xa7959150
2026-04-13T00:13:17.322 [DEBUG] [Thread-198347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:13:17.337 [DEBUG] [Thread-198347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:13:17.338 [INFO] [Thread-198347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:13:17.346 [DEBUG] [Thread-198347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:13:17.346 [DEBUG] [Thread-198347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:13:17.346 [DEBUG] [Thread-198347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:13:17.346 [DEBUG] [Thread-198347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:17.346 [DEBUG] [Thread-198347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] client lang: <none>
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] server lang: <none>
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] kex follows: False
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:13:17.347 [DEBUG] [Thread-198347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:13:17.348 [DEBUG] [Thread-198347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:13:17.348 [DEBUG] [Thread-198347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:13:17.348 [DEBUG] [Thread-198347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:13:17.348 [DEBUG] [Thread-198347] [transport.py] [_log()] Compression: none
2026-04-13T00:13:17.348 [DEBUG] [Thread-198347] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:13:17.409 [DEBUG] [Thread-198347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:13:17.409 [DEBUG] [Thread-198347] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:13:17.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:13:17.410 [DEBUG] [Thread-198347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:13:17.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:13:17.467 [DEBUG] [Thread-198347] [transport.py] [_log()] userauth is OK
2026-04-13T00:13:17.467 [DEBUG] [Thread-198347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:13:17.467 [DEBUG] [Thread-198347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:13:17.468 [DEBUG] [Thread-198347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:13:17.468 [DEBUG] [Thread-198347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:13:17.486 [INFO] [Thread-198347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:13:17.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:13:17.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:13:18.290 [DEBUG] [Thread-198347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:13:18.290 [DEBUG] [Thread-198347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:13:18.338 [DEBUG] [Thread-198347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:13:18.338 [DEBUG] [Thread-198347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:13:18.347 [DEBUG] [Thread-198347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:13:18.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:13:18.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:13:18.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:13:18.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:13:18.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:13:18.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:13:18.384 [DEBUG] [Thread-198347] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:13:23.713 [DEBUG] [Thread-198349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:13:24.069 [DEBUG] [Thread-198350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:13:39.123 [DEBUG] [Thread-198351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:13:48.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:13:48.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:13:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:13:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 13, 14), 1.0074, 93.321, 0.0, 9.29952, 10.7865, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:13:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:13:14
2026-04-13T00:13:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:13:50.237 [DEBUG] [Thread-198352] [transport.py] [_log()] starting thread (client mode): 0xae5186d0
2026-04-13T00:13:50.237 [DEBUG] [Thread-198352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:13:50.257 [DEBUG] [Thread-198352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:13:50.257 [INFO] [Thread-198352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:13:50.260 [DEBUG] [Thread-198352] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] client lang: <none>
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] server lang: <none>
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] kex follows: False
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] Compression: none
2026-04-13T00:13:50.261 [DEBUG] [Thread-198352] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:13:50.280 [DEBUG] [Thread-198352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:13:50.281 [DEBUG] [Thread-198352] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:13:50.281 [DEBUG] [Thread-198352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:13:50.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:13:50.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:13:50.284 [DEBUG] [Thread-198352] [transport.py] [_log()] userauth is OK
2026-04-13T00:13:50.284 [DEBUG] [Thread-198352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:13:50.284 [DEBUG] [Thread-198352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:13:50.284 [DEBUG] [Thread-198352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:13:50.284 [DEBUG] [Thread-198352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:13:50.320 [INFO] [Thread-198352] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:13:50.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:13:51.114 [DEBUG] [Thread-198352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:13:51.114 [DEBUG] [Thread-198352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:13:51.114 [DEBUG] [Thread-198352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:13:51.155 [DEBUG] [Thread-198352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:13:51.155 [DEBUG] [Thread-198352] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:13:51.159 [DEBUG] [Thread-198352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:13:51.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:13:51.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:13:51.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:13:51.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:13:51.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:13:51.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:13:51.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:13:51.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:13:51.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:13:51.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.925796 -999.00  +10.90   2.39     91   +9.40 1 2 1 3 1     0    0 1.27 -2.67 .N..w 2.4 2.4 222.1 6.1 11.6 -22.4 11.5 -21.4 11.2 -19.4 11.4 -21.2
2026-04-13T00:13:51.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:13:51.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:13:51.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.925796
2026-04-13T00:13:51.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:13:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:13:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:13:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:13:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:13:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:13:14', tmtdew=1.0074, humidity=93.321, cloud=0.0, wind=9.29952, temperature=10.7865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:13:08.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:13:51.186 [DEBUG] [Thread-198352] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:13:51.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:13:51.279 [DEBUG] [Thread-198355] [transport.py] [_log()] starting thread (client mode): 0xb39c53f0
2026-04-13T00:13:51.279 [DEBUG] [Thread-198355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:13:51.294 [DEBUG] [Thread-198355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:13:51.294 [INFO] [Thread-198355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] client lang: <none>
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] server lang: <none>
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] kex follows: False
2026-04-13T00:13:51.302 [DEBUG] [Thread-198355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:13:51.303 [DEBUG] [Thread-198355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:13:51.303 [DEBUG] [Thread-198355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:13:51.303 [DEBUG] [Thread-198355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:13:51.303 [DEBUG] [Thread-198355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:13:51.303 [DEBUG] [Thread-198355] [transport.py] [_log()] Compression: none
2026-04-13T00:13:51.303 [DEBUG] [Thread-198355] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:13:51.363 [DEBUG] [Thread-198355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:13:51.363 [DEBUG] [Thread-198355] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:13:51.364 [DEBUG] [Thread-198355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:13:51.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:13:51.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:13:51.419 [DEBUG] [Thread-198355] [transport.py] [_log()] userauth is OK
2026-04-13T00:13:51.419 [DEBUG] [Thread-198355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:13:51.420 [DEBUG] [Thread-198355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:13:51.420 [DEBUG] [Thread-198355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:13:51.420 [DEBUG] [Thread-198355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:13:51.438 [INFO] [Thread-198355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:13:51.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:13:51.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:13:52.298 [DEBUG] [Thread-198355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:13:52.298 [DEBUG] [Thread-198355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:13:52.346 [DEBUG] [Thread-198355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:13:52.346 [DEBUG] [Thread-198355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:13:52.355 [DEBUG] [Thread-198355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:13:52.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:13:52.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:13:52.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:13:52.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:13:52.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:13:52.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:13:52.393 [DEBUG] [Thread-198355] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:13:54.164 [DEBUG] [Thread-198357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:13:54.799 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:13:54.800 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:09.214 [DEBUG] [Thread-198358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:14:22.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:14:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:14:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 13, 49), 0.83067, 94.5426, 0.0, 11.1168, 10.7063, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:14:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:13:49
2026-04-13T00:14:23.781 [DEBUG] [Thread-198359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:14:24.251 [DEBUG] [Thread-198360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:24.265 [DEBUG] [Thread-198361] [transport.py] [_log()] starting thread (client mode): 0xa7958c40
2026-04-13T00:14:24.265 [DEBUG] [Thread-198361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:14:24.286 [DEBUG] [Thread-198361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:14:24.286 [INFO] [Thread-198361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:14:24.288 [DEBUG] [Thread-198361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:14:24.288 [DEBUG] [Thread-198361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:14:24.288 [DEBUG] [Thread-198361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] client lang: <none>
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] server lang: <none>
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] kex follows: False
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:14:24.289 [DEBUG] [Thread-198361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:14:24.290 [DEBUG] [Thread-198361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:14:24.290 [DEBUG] [Thread-198361] [transport.py] [_log()] Compression: none
2026-04-13T00:14:24.290 [DEBUG] [Thread-198361] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:14:24.302 [DEBUG] [Thread-198361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:14:24.303 [DEBUG] [Thread-198361] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:14:24.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:14:24.304 [DEBUG] [Thread-198361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:14:24.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:14:24.306 [DEBUG] [Thread-198361] [transport.py] [_log()] userauth is OK
2026-04-13T00:14:24.306 [DEBUG] [Thread-198361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:14:24.306 [DEBUG] [Thread-198361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:14:24.306 [DEBUG] [Thread-198361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:14:24.306 [DEBUG] [Thread-198361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:14:24.331 [INFO] [Thread-198361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:14:24.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:14:25.108 [DEBUG] [Thread-198361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:14:25.108 [DEBUG] [Thread-198361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:14:25.108 [DEBUG] [Thread-198361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:14:25.149 [DEBUG] [Thread-198361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:14:25.149 [DEBUG] [Thread-198361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:14:25.153 [DEBUG] [Thread-198361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:14:25.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:14:25.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:14:25.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:14:25.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:14:25.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:14:25.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:14:25.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:14:25.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:14:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:14:25.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.926143 -999.00  +10.90   3.46     91   +9.50 1 2 1 3 1     0    0 1.29 -1.83 .N..w 3.5 3.5 213.6 6.7 11.6 -22.4 11.5 -21.4 11.2 -19.4 11.4 -21.3
2026-04-13T00:14:25.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:14:25.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:14:25.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.926143
2026-04-13T00:14:25.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:14:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:14:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:14:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:14:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:14:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:13:49', tmtdew=0.83067, humidity=94.5426, cloud=0.0, wind=11.1168, temperature=10.7063, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:13:38.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:14:25.183 [DEBUG] [Thread-198361] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:14:25.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:14:25.276 [DEBUG] [Thread-198364] [transport.py] [_log()] starting thread (client mode): 0xa795a440
2026-04-13T00:14:25.276 [DEBUG] [Thread-198364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:14:25.291 [DEBUG] [Thread-198364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:14:25.291 [INFO] [Thread-198364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:14:25.298 [DEBUG] [Thread-198364] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] client lang: <none>
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] server lang: <none>
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] kex follows: False
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] Compression: none
2026-04-13T00:14:25.299 [DEBUG] [Thread-198364] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:14:25.359 [DEBUG] [Thread-198364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:14:25.360 [DEBUG] [Thread-198364] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:14:25.361 [DEBUG] [Thread-198364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:14:25.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:14:25.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:14:25.415 [DEBUG] [Thread-198364] [transport.py] [_log()] userauth is OK
2026-04-13T00:14:25.415 [DEBUG] [Thread-198364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:14:25.416 [DEBUG] [Thread-198364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:14:25.416 [DEBUG] [Thread-198364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:14:25.416 [DEBUG] [Thread-198364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:14:25.434 [INFO] [Thread-198364] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:14:25.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:14:25.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:14:26.273 [DEBUG] [Thread-198364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:14:26.273 [DEBUG] [Thread-198364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:14:26.321 [DEBUG] [Thread-198364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:14:26.321 [DEBUG] [Thread-198364] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:14:26.330 [DEBUG] [Thread-198364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:14:26.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:14:26.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:14:26.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
2026-04-13T00:14:26.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:14:26.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:14:26.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:14:26.367 [DEBUG] [Thread-198364] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:14:39.286 [DEBUG] [Thread-198366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:54.341 [DEBUG] [Thread-198367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:55.006 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:55.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:14:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:14:56.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:14:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:14:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 14, 25), 1.01804, 93.2547, 0.0, 9.7758, 10.8197, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:14:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:14:25
2026-04-13T00:14:58.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:14:58.257 [DEBUG] [Thread-198368] [transport.py] [_log()] starting thread (client mode): 0xa795a800
2026-04-13T00:14:58.257 [DEBUG] [Thread-198368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:14:58.271 [DEBUG] [Thread-198368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:14:58.271 [INFO] [Thread-198368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] client lang: <none>
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] server lang: <none>
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] kex follows: False
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:14:58.274 [DEBUG] [Thread-198368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:14:58.275 [DEBUG] [Thread-198368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:14:58.275 [DEBUG] [Thread-198368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:14:58.275 [DEBUG] [Thread-198368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:14:58.275 [DEBUG] [Thread-198368] [transport.py] [_log()] Compression: none
2026-04-13T00:14:58.275 [DEBUG] [Thread-198368] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:14:58.291 [DEBUG] [Thread-198368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:14:58.291 [DEBUG] [Thread-198368] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:14:58.291 [DEBUG] [Thread-198368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:14:58.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:14:58.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:14:58.293 [DEBUG] [Thread-198368] [transport.py] [_log()] userauth is OK
2026-04-13T00:14:58.293 [DEBUG] [Thread-198368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:14:58.293 [DEBUG] [Thread-198368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:14:58.293 [DEBUG] [Thread-198368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:14:58.293 [DEBUG] [Thread-198368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:14:58.310 [INFO] [Thread-198368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:14:58.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:14:59.104 [DEBUG] [Thread-198368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:14:59.104 [DEBUG] [Thread-198368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:14:59.105 [DEBUG] [Thread-198368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:14:59.145 [DEBUG] [Thread-198368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:14:59.145 [DEBUG] [Thread-198368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:14:59.148 [DEBUG] [Thread-198368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:14:59.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:14:59.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:14:59.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:14:59.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:14:59.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:14:59.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:14:59.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:14:59.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:14:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:14:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.926490 -999.00  +10.90   5.19     91   +9.40 1 2 1 3 1     0    0 1.34 -0.87 .N..w 5.2 5.2 198.3 6.9 11.6 -22.4 11.4 -21.2 11.2 -19.3 11.5 -21.4
2026-04-13T00:14:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:14:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:14:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.926490
2026-04-13T00:14:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:14:59.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:14:59.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:14:59.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:14:59.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:14:59.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:14:25', tmtdew=1.01804, humidity=93.2547, cloud=0.0, wind=9.7758, temperature=10.8197, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:14:08.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:14:59.175 [DEBUG] [Thread-198368] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:14:59.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:14:59.263 [DEBUG] [Thread-198371] [transport.py] [_log()] starting thread (client mode): 0xa795a500
2026-04-13T00:14:59.264 [DEBUG] [Thread-198371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:14:59.282 [DEBUG] [Thread-198371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:14:59.283 [INFO] [Thread-198371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:14:59.290 [DEBUG] [Thread-198371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:14:59.290 [DEBUG] [Thread-198371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:14:59.290 [DEBUG] [Thread-198371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:14:59.290 [DEBUG] [Thread-198371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:59.290 [DEBUG] [Thread-198371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:14:59.290 [DEBUG] [Thread-198371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] client lang: <none>
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] server lang: <none>
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] kex follows: False
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] Compression: none
2026-04-13T00:14:59.291 [DEBUG] [Thread-198371] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:14:59.351 [DEBUG] [Thread-198371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:14:59.351 [DEBUG] [Thread-198371] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:14:59.352 [DEBUG] [Thread-198371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:14:59.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:14:59.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:14:59.407 [DEBUG] [Thread-198371] [transport.py] [_log()] userauth is OK
2026-04-13T00:14:59.407 [DEBUG] [Thread-198371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:14:59.408 [DEBUG] [Thread-198371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:14:59.408 [DEBUG] [Thread-198371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:14:59.408 [DEBUG] [Thread-198371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:14:59.426 [INFO] [Thread-198371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:14:59.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:14:59.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:15:00.211 [DEBUG] [Thread-198371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:15:00.212 [DEBUG] [Thread-198371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:15:00.260 [DEBUG] [Thread-198371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:15:00.260 [DEBUG] [Thread-198371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:15:00.270 [DEBUG] [Thread-198371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:15:00.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:15:00.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:15:00.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:15:00.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:15:00.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:15:00.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:15:00.306 [DEBUG] [Thread-198371] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:15:09.378 [DEBUG] [Thread-198373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:15:23.843 [DEBUG] [Thread-198374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:15:24.433 [DEBUG] [Thread-198375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:15:30.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:15:30.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:15:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:15:31.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 15), 1.07843, 93.1884, 0.0, 9.14076, 10.8032, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:15:31.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:15:00
2026-04-13T00:15:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:15:32.137 [DEBUG] [Thread-198376] [transport.py] [_log()] starting thread (client mode): 0xb39c67d0
2026-04-13T00:15:32.137 [DEBUG] [Thread-198376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:15:32.152 [DEBUG] [Thread-198376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:15:32.152 [INFO] [Thread-198376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:15:32.155 [DEBUG] [Thread-198376] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] client lang: <none>
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] server lang: <none>
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] kex follows: False
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] Compression: none
2026-04-13T00:15:32.156 [DEBUG] [Thread-198376] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:15:32.174 [DEBUG] [Thread-198376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:15:32.175 [DEBUG] [Thread-198376] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:15:32.175 [DEBUG] [Thread-198376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:15:32.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:15:32.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:15:32.177 [DEBUG] [Thread-198376] [transport.py] [_log()] userauth is OK
2026-04-13T00:15:32.177 [DEBUG] [Thread-198376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:15:32.178 [DEBUG] [Thread-198376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:15:32.178 [DEBUG] [Thread-198376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:15:32.178 [DEBUG] [Thread-198376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:15:32.203 [INFO] [Thread-198376] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:15:32.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:15:33.055 [DEBUG] [Thread-198376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:15:33.056 [DEBUG] [Thread-198376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:15:33.056 [DEBUG] [Thread-198376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:15:33.097 [DEBUG] [Thread-198376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:15:33.098 [DEBUG] [Thread-198376] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:15:33.101 [DEBUG] [Thread-198376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:15:33.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:15:33.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:15:33.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:15:33.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:15:33.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:15:33.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:15:33.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:15:33.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:15:33.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:15:33.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.926837 -999.00  +10.90   5.83     91   +9.40 1 2 1 3 1     0    0 1.42 0.26 ..e.W 5.8 5.8 217.2 7.4 11.6 -22.5 11.4 -21.3 11.2 -19.3 11.4 -21.2
2026-04-13T00:15:33.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:15:33.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:15:33.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.926837
2026-04-13T00:15:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:15:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:15:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:15:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:15:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:15:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:15:00', tmtdew=1.07843, humidity=93.1884, cloud=0.0, wind=9.14076, temperature=10.8032, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:14:38.717', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:15:33.157 [DEBUG] [Thread-198376] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:15:33.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:15:33.252 [DEBUG] [Thread-198379] [transport.py] [_log()] starting thread (client mode): 0xae51a830
2026-04-13T00:15:33.252 [DEBUG] [Thread-198379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:15:33.267 [DEBUG] [Thread-198379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:15:33.267 [INFO] [Thread-198379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:15:33.275 [DEBUG] [Thread-198379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] client lang: <none>
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] server lang: <none>
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] kex follows: False
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] Compression: none
2026-04-13T00:15:33.276 [DEBUG] [Thread-198379] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:15:33.334 [DEBUG] [Thread-198379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:15:33.334 [DEBUG] [Thread-198379] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:15:33.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:15:33.336 [DEBUG] [Thread-198379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:15:33.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:15:33.389 [DEBUG] [Thread-198379] [transport.py] [_log()] userauth is OK
2026-04-13T00:15:33.390 [DEBUG] [Thread-198379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:15:33.390 [DEBUG] [Thread-198379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:15:33.390 [DEBUG] [Thread-198379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:15:33.390 [DEBUG] [Thread-198379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:15:33.410 [INFO] [Thread-198379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:15:33.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:15:33.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:15:34.237 [DEBUG] [Thread-198379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:15:34.238 [DEBUG] [Thread-198379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:15:34.288 [DEBUG] [Thread-198379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:15:34.289 [DEBUG] [Thread-198379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:15:34.299 [DEBUG] [Thread-198379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:15:34.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:15:34.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:15:34.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:15:34.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:15:34.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:15:34.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:15:34.336 [DEBUG] [Thread-198379] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:15:39.470 [DEBUG] [Thread-198381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:15:54.533 [DEBUG] [Thread-198382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:15:55.222 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:15:55.224 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:16:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:16:04.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:16:04.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:16:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 15, 36), 0.84691, 94.4431, 0.0, 10.1995, 10.8059, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:16:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:15:36
2026-04-13T00:16:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:16:06.156 [DEBUG] [Thread-198383] [transport.py] [_log()] starting thread (client mode): 0xae518160
2026-04-13T00:16:06.157 [DEBUG] [Thread-198383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:16:06.176 [DEBUG] [Thread-198383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:16:06.176 [INFO] [Thread-198383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:16:06.179 [DEBUG] [Thread-198383] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:16:06.179 [DEBUG] [Thread-198383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:16:06.179 [DEBUG] [Thread-198383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:16:06.179 [DEBUG] [Thread-198383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:06.179 [DEBUG] [Thread-198383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:06.179 [DEBUG] [Thread-198383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] client lang: <none>
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] server lang: <none>
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] kex follows: False
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] Compression: none
2026-04-13T00:16:06.180 [DEBUG] [Thread-198383] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:16:06.197 [DEBUG] [Thread-198383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:16:06.198 [DEBUG] [Thread-198383] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:16:06.198 [DEBUG] [Thread-198383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:16:06.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:16:06.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:16:06.201 [DEBUG] [Thread-198383] [transport.py] [_log()] userauth is OK
2026-04-13T00:16:06.201 [DEBUG] [Thread-198383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:16:06.201 [DEBUG] [Thread-198383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:16:06.201 [DEBUG] [Thread-198383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:16:06.201 [DEBUG] [Thread-198383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:16:06.224 [INFO] [Thread-198383] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:16:06.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:16:07.030 [DEBUG] [Thread-198383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:16:07.030 [DEBUG] [Thread-198383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:16:07.030 [DEBUG] [Thread-198383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:16:07.072 [DEBUG] [Thread-198383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:16:07.072 [DEBUG] [Thread-198383] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:16:07.074 [DEBUG] [Thread-198383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:16:07.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:16:07.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:16:07.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:16:07.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:16:07.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:16:07.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:16:07.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:16:07.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:16:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:16:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.927184 -999.00  +10.90   5.46     91   +9.40 1 2 1 3 1     0    0 1.41 1.37 ..e.W 5.5 5.5 246.2 6.5 11.6 -22.5 11.5 -21.4 11.2 -19.3 11.5 -21.2
2026-04-13T00:16:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:16:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:16:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.927184
2026-04-13T00:16:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:16:07.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:16:07.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:16:07.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:16:07.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:16:07.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:15:36', tmtdew=0.84691, humidity=94.4431, cloud=0.0, wind=10.1995, temperature=10.8059, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:15:08.698', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:16:07.097 [DEBUG] [Thread-198383] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:16:07.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:16:07.184 [DEBUG] [Thread-198386] [transport.py] [_log()] starting thread (client mode): 0xae519d20
2026-04-13T00:16:07.184 [DEBUG] [Thread-198386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:16:07.200 [DEBUG] [Thread-198386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:16:07.200 [INFO] [Thread-198386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:16:07.207 [DEBUG] [Thread-198386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:16:07.208 [DEBUG] [Thread-198386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:16:07.208 [DEBUG] [Thread-198386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:16:07.208 [DEBUG] [Thread-198386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:07.208 [DEBUG] [Thread-198386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:07.208 [DEBUG] [Thread-198386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:07.208 [DEBUG] [Thread-198386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] client lang: <none>
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] server lang: <none>
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] kex follows: False
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] Compression: none
2026-04-13T00:16:07.209 [DEBUG] [Thread-198386] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:16:07.267 [DEBUG] [Thread-198386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:16:07.268 [DEBUG] [Thread-198386] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:16:07.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:16:07.269 [DEBUG] [Thread-198386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:16:07.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:16:07.327 [DEBUG] [Thread-198386] [transport.py] [_log()] userauth is OK
2026-04-13T00:16:07.327 [DEBUG] [Thread-198386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:16:07.327 [DEBUG] [Thread-198386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:16:07.327 [DEBUG] [Thread-198386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:16:07.328 [DEBUG] [Thread-198386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:16:07.341 [INFO] [Thread-198386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:16:07.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:16:07.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:16:08.154 [DEBUG] [Thread-198386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:16:08.154 [DEBUG] [Thread-198386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:16:08.201 [DEBUG] [Thread-198386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:16:08.202 [DEBUG] [Thread-198386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:16:08.210 [DEBUG] [Thread-198386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:16:08.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:16:08.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:16:08.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:16:08.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:16:08.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:16:08.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:16:08.245 [DEBUG] [Thread-198386] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:16:09.568 [DEBUG] [Thread-198388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:16:23.909 [DEBUG] [Thread-198389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:16:24.624 [DEBUG] [Thread-198390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:16:38.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:16:38.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:16: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
2026-04-13T00:16:39.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 16, 11), 1.1366, 92.6387, 0.0, 9.14076, 10.903, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:16:39.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:16:11
2026-04-13T00:16:39.659 [DEBUG] [Thread-198391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:16:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:16:40.001 [DEBUG] [Thread-198392] [transport.py] [_log()] starting thread (client mode): 0xae51b3a0
2026-04-13T00:16:40.001 [DEBUG] [Thread-198392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:16:40.023 [DEBUG] [Thread-198392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:16:40.024 [INFO] [Thread-198392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] client lang: <none>
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] server lang: <none>
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] kex follows: False
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:16:40.025 [DEBUG] [Thread-198392] [transport.py] [_log()] Compression: none
2026-04-13T00:16:40.026 [DEBUG] [Thread-198392] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:16:40.043 [DEBUG] [Thread-198392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:16:40.043 [DEBUG] [Thread-198392] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:16:40.044 [DEBUG] [Thread-198392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:16:40.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:16:40.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:16:40.046 [DEBUG] [Thread-198392] [transport.py] [_log()] userauth is OK
2026-04-13T00:16:40.046 [DEBUG] [Thread-198392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:16:40.046 [DEBUG] [Thread-198392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:16:40.046 [DEBUG] [Thread-198392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:16:40.047 [DEBUG] [Thread-198392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:16:40.081 [INFO] [Thread-198392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:16:40.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:16:40.896 [DEBUG] [Thread-198392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:16:40.896 [DEBUG] [Thread-198392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:16:40.897 [DEBUG] [Thread-198392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:16:40.937 [DEBUG] [Thread-198392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:16:40.937 [DEBUG] [Thread-198392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:16:40.941 [DEBUG] [Thread-198392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:16:40.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:16:40.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:16:40.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:16:40.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:16:40.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:16:40.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:16:40.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:16:40.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:16:40.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:16:40.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.927879 -999.00  +10.90   2.85     91   +9.50 1 2 1 3 1     0    0 1.41 2.16 ..e.. 2.9 2.9 223.8 5.8 11.6 -22.5 11.4 -21.3 11.2 -19.4 11.5 -21.3
2026-04-13T00:16:40.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:16:40.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:16:40.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.927879
2026-04-13T00:16:40.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:16:40.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:16:40.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:16:40.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:16:40.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:16:40.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:16:11', tmtdew=1.1366, humidity=92.6387, cloud=0.0, wind=9.14076, temperature=10.903, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:16:08.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:16:40.969 [DEBUG] [Thread-198392] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:16:41.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:16:41.062 [DEBUG] [Thread-198395] [transport.py] [_log()] starting thread (client mode): 0xae51b790
2026-04-13T00:16:41.062 [DEBUG] [Thread-198395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:16:41.076 [DEBUG] [Thread-198395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:16:41.077 [INFO] [Thread-198395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:16:41.084 [DEBUG] [Thread-198395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:16:41.085 [DEBUG] [Thread-198395] [transport.py] [_log()] client lang: <none>
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] server lang: <none>
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] kex follows: False
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] Compression: none
2026-04-13T00:16:41.086 [DEBUG] [Thread-198395] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:16:41.145 [DEBUG] [Thread-198395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:16:41.146 [DEBUG] [Thread-198395] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:16:41.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:16:41.147 [DEBUG] [Thread-198395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:16:41.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:16:41.201 [DEBUG] [Thread-198395] [transport.py] [_log()] userauth is OK
2026-04-13T00:16:41.201 [DEBUG] [Thread-198395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:16:41.201 [DEBUG] [Thread-198395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:16:41.201 [DEBUG] [Thread-198395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:16:41.201 [DEBUG] [Thread-198395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:16:41.222 [INFO] [Thread-198395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:16:41.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:16:41.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:16:42.109 [DEBUG] [Thread-198395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:16:42.109 [DEBUG] [Thread-198395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:16:42.157 [DEBUG] [Thread-198395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:16:42.157 [DEBUG] [Thread-198395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:16:42.167 [DEBUG] [Thread-198395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:16:42.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:16:42.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:16:42.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:16:42.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:16:42.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:16:42.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:16:42.204 [DEBUG] [Thread-198395] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:16:54.696 [DEBUG] [Thread-198397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:16:55.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:16:55.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:17:09.748 [DEBUG] [Thread-198398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:17:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:17:12.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:17:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:17:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 16, 46), 0.90453, 94.0783, 0.0, 10.9757, 10.7727, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:17:13.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:16:46
2026-04-13T00:17:13.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:17:14.080 [DEBUG] [Thread-198399] [transport.py] [_log()] starting thread (client mode): 0xb0fce020
2026-04-13T00:17:14.080 [DEBUG] [Thread-198399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:17:14.101 [DEBUG] [Thread-198399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:17:14.101 [INFO] [Thread-198399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] client lang: <none>
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] server lang: <none>
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] kex follows: False
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] Compression: none
2026-04-13T00:17:14.104 [DEBUG] [Thread-198399] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:17:14.121 [DEBUG] [Thread-198399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:17:14.121 [DEBUG] [Thread-198399] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:17:14.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:17:14.122 [DEBUG] [Thread-198399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:17:14.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:17:14.124 [DEBUG] [Thread-198399] [transport.py] [_log()] userauth is OK
2026-04-13T00:17:14.125 [DEBUG] [Thread-198399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:17:14.125 [DEBUG] [Thread-198399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:17:14.125 [DEBUG] [Thread-198399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:17:14.125 [DEBUG] [Thread-198399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:17:14.150 [INFO] [Thread-198399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:17:14.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:17:14.944 [DEBUG] [Thread-198399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:17:14.944 [DEBUG] [Thread-198399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:17:14.945 [DEBUG] [Thread-198399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:17:14.985 [DEBUG] [Thread-198399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:17:14.985 [DEBUG] [Thread-198399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:17:14.989 [DEBUG] [Thread-198399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:17:15.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:17:15.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:17:15.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:17:15.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:17:15.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:17:15.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:17:15.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:17:15.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:17:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:17:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.928226 -999.00  +10.90   6.11     91   +9.50 1 2 1 3 1     0    0 1.43 2.52 ..e.. 6.1 6.1 238.8 6.9 11.6 -22.4 11.4 -21.4 11.2 -19.3 11.5 -21.4
2026-04-13T00:17:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:17:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:17:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.928226
2026-04-13T00:17:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:17:15.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:17:15.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:17:15.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:17:15.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:17:15.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:16:46', tmtdew=0.90453, humidity=94.0783, cloud=0.0, wind=10.9757, temperature=10.7727, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:16:38.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:17:15.017 [DEBUG] [Thread-198399] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:17:15.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:17:15.113 [DEBUG] [Thread-198402] [transport.py] [_log()] starting thread (client mode): 0xa7959030
2026-04-13T00:17:15.113 [DEBUG] [Thread-198402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:17:15.132 [DEBUG] [Thread-198402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:17:15.133 [INFO] [Thread-198402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] client lang: <none>
2026-04-13T00:17:15.142 [DEBUG] [Thread-198402] [transport.py] [_log()] server lang: <none>
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] kex follows: False
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] Compression: none
2026-04-13T00:17:15.143 [DEBUG] [Thread-198402] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:17:15.201 [DEBUG] [Thread-198402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:17:15.202 [DEBUG] [Thread-198402] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:17:15.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:17:15.203 [DEBUG] [Thread-198402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:17:15.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:17:15.258 [DEBUG] [Thread-198402] [transport.py] [_log()] userauth is OK
2026-04-13T00:17:15.258 [DEBUG] [Thread-198402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:17:15.259 [DEBUG] [Thread-198402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:17:15.259 [DEBUG] [Thread-198402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:17:15.259 [DEBUG] [Thread-198402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:17:15.281 [INFO] [Thread-198402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:17:15.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:17:15.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:17:16.085 [DEBUG] [Thread-198402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:17:16.085 [DEBUG] [Thread-198402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:17:16.133 [DEBUG] [Thread-198402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:17:16.134 [DEBUG] [Thread-198402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:17:16.143 [DEBUG] [Thread-198402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:17:16.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:17:16.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:17:16.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:17:16.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:17:16.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:17:16.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:17:16.180 [DEBUG] [Thread-198402] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:17:23.964 [DEBUG] [Thread-198404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:17:24.787 [DEBUG] [Thread-198405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:17:39.846 [DEBUG] [Thread-198406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:17:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:17:46.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:17:46.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:17:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 17, 22), 1.15742, 92.506, 0.0, 9.2466, 10.8698, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:17:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:17:22
2026-04-13T00:17:47.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:17:48.017 [DEBUG] [Thread-198407] [transport.py] [_log()] starting thread (client mode): 0xae563a60
2026-04-13T00:17:48.017 [DEBUG] [Thread-198407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:17:48.037 [DEBUG] [Thread-198407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:17:48.038 [INFO] [Thread-198407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:17:48.041 [DEBUG] [Thread-198407] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:17:48.041 [DEBUG] [Thread-198407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:17:48.041 [DEBUG] [Thread-198407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:17:48.041 [DEBUG] [Thread-198407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:48.041 [DEBUG] [Thread-198407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] client lang: <none>
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] server lang: <none>
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] kex follows: False
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:17:48.042 [DEBUG] [Thread-198407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:17:48.043 [DEBUG] [Thread-198407] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:17:48.043 [DEBUG] [Thread-198407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:17:48.043 [DEBUG] [Thread-198407] [transport.py] [_log()] Compression: none
2026-04-13T00:17:48.043 [DEBUG] [Thread-198407] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:17:48.062 [DEBUG] [Thread-198407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:17:48.063 [DEBUG] [Thread-198407] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:17:48.064 [DEBUG] [Thread-198407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:17:48.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:17:48.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:17:48.067 [DEBUG] [Thread-198407] [transport.py] [_log()] userauth is OK
2026-04-13T00:17:48.067 [DEBUG] [Thread-198407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:17:48.067 [DEBUG] [Thread-198407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:17:48.067 [DEBUG] [Thread-198407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:17:48.067 [DEBUG] [Thread-198407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:17:48.090 [INFO] [Thread-198407] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:17:48.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:17:48.860 [DEBUG] [Thread-198407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:17:48.861 [DEBUG] [Thread-198407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:17:48.861 [DEBUG] [Thread-198407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:17:48.903 [DEBUG] [Thread-198407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:17:48.903 [DEBUG] [Thread-198407] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:17:48.906 [DEBUG] [Thread-198407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:17:48.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:17:48.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:17:48.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:17:48.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:17:48.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:17:48.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:17:48.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:17:48.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:17:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:17:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.928573 -999.00  +10.90   4.21     91   +9.50 1 2 1 3 1     0    0 1.42 3.10 ..E.w 4.2 4.2 235.2 7.3 11.6 -22.5 11.5 -21.4 -999.0 -999.0 11.5 -21.4
2026-04-13T00:17:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:17:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:17:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.928573
2026-04-13T00:17:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:17:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:17:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:17:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:17:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:17:48.934 [DEBUG] [Thread-198407] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:17:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:17:22', tmtdew=1.15742, humidity=92.506, cloud=0.0, wind=9.2466, temperature=10.8698, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:17:08.707', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3592499999999994, 1.8919999999999995, nan, nan, nan, nan, nan, 2.5975, nan, 1.818249999999999, nan, nan, nan, nan, 2.1834999999999996, 0.21799999999999997, 0.06725000000000136, 0.11600000000000144, 0.10849999999999937, 0.4690000000000012, 1.4610000000000012, 2.2280000000000015, 2.1827499999999995], zp_timestamp='2026-04-12T22:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:17:49.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:17:49.023 [DEBUG] [Thread-198410] [transport.py] [_log()] starting thread (client mode): 0xae5624d0
2026-04-13T00:17:49.023 [DEBUG] [Thread-198410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:17:49.039 [DEBUG] [Thread-198410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:17:49.039 [INFO] [Thread-198410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:17:49.046 [DEBUG] [Thread-198410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:17:49.047 [DEBUG] [Thread-198410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] client lang: <none>
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] server lang: <none>
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] kex follows: False
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:17:49.048 [DEBUG] [Thread-198410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:17:49.049 [DEBUG] [Thread-198410] [transport.py] [_log()] Compression: none
2026-04-13T00:17:49.049 [DEBUG] [Thread-198410] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:17:49.109 [DEBUG] [Thread-198410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:17:49.109 [DEBUG] [Thread-198410] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:17:49.110 [DEBUG] [Thread-198410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:17:49.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:17:49.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:17:49.168 [DEBUG] [Thread-198410] [transport.py] [_log()] userauth is OK
2026-04-13T00:17:49.168 [DEBUG] [Thread-198410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:17:49.169 [DEBUG] [Thread-198410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:17:49.169 [DEBUG] [Thread-198410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:17:49.169 [DEBUG] [Thread-198410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:17:49.188 [INFO] [Thread-198410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:17:49.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:17:49.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:17:50.010 [DEBUG] [Thread-198410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:17:50.010 [DEBUG] [Thread-198410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:17:50.058 [DEBUG] [Thread-198410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:17:50.059 [DEBUG] [Thread-198410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:17:50.068 [DEBUG] [Thread-198410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:17:50.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:17: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')
2026-04-13T00:17:50.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:17:50.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:17:50.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:17:50.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:17:50.105 [DEBUG] [Thread-198410] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:17:54.882 [DEBUG] [Thread-198412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:17:55.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:17:55.639 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:09.943 [DEBUG] [Thread-198413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:20.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:18:20.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:18:20.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:18:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 17, 57), 1.205, 92.5226, 0.0, 11.2936, 10.903, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:18:21.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:17:57
2026-04-13T00:18:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:18:21.951 [DEBUG] [Thread-198414] [transport.py] [_log()] starting thread (client mode): 0xae5621d0
2026-04-13T00:18:21.951 [DEBUG] [Thread-198414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:18:21.970 [DEBUG] [Thread-198414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:18:21.971 [INFO] [Thread-198414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] client lang: <none>
2026-04-13T00:18:21.974 [DEBUG] [Thread-198414] [transport.py] [_log()] server lang: <none>
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] kex follows: False
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] Compression: none
2026-04-13T00:18:21.975 [DEBUG] [Thread-198414] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:18:21.992 [DEBUG] [Thread-198414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:18:21.993 [DEBUG] [Thread-198414] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:18:21.993 [DEBUG] [Thread-198414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:18:21.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:18:21.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:18:22.036 [DEBUG] [Thread-198414] [transport.py] [_log()] userauth is OK
2026-04-13T00:18:22.036 [DEBUG] [Thread-198414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:18:22.037 [DEBUG] [Thread-198414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:18:22.037 [DEBUG] [Thread-198414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:18:22.037 [DEBUG] [Thread-198414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:18:22.057 [INFO] [Thread-198414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:18:22.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:18:22.873 [DEBUG] [Thread-198414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:18:22.873 [DEBUG] [Thread-198414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:18:22.873 [DEBUG] [Thread-198414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:18:22.914 [DEBUG] [Thread-198414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:18:22.914 [DEBUG] [Thread-198414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:18:22.916 [DEBUG] [Thread-198414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:18:22.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:18:22.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:18:22.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:18:22.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:18:22.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:18:22.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:18:22.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:18:22.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:18:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:18:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.928921 -999.00  +10.90   5.60     91   +9.50 1 2 1 3 1     0    0 1.45 3.44 ..E.w 5.6 5.6 233.8 7.9 11.6 -22.5 11.5 -21.3 11.2 -19.2 11.5 -21.4
2026-04-13T00:18:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:18:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:18:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.928921
2026-04-13T00:18:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:18:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:18:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:18:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:18:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:18:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:17:57', tmtdew=1.205, humidity=92.5226, cloud=0.0, wind=11.2936, temperature=10.903, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:17:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.92875, 1.596, nan, nan, nan, nan, nan, 3.2654999999999994, 2.977999999999999, 2.413249999999999, nan, nan, 1.3607500000000012, nan, nan, 0.5065, 0.2157499999999999, 0.2530000000000001, 0.3210000000000006, 0.6310000000000011, 0.9370000000000012, 2.761000000000001, 2.518249999999999], zp_timestamp='2026-04-12T22:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:18:22.942 [DEBUG] [Thread-198414] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:18:23.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:18:23.037 [DEBUG] [Thread-198417] [transport.py] [_log()] starting thread (client mode): 0xb0fce080
2026-04-13T00:18:23.037 [DEBUG] [Thread-198417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:18:23.052 [DEBUG] [Thread-198417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:18:23.052 [INFO] [Thread-198417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] client lang: <none>
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] server lang: <none>
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] kex follows: False
2026-04-13T00:18:23.060 [DEBUG] [Thread-198417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:18:23.061 [DEBUG] [Thread-198417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:18:23.061 [DEBUG] [Thread-198417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:18:23.061 [DEBUG] [Thread-198417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:18:23.061 [DEBUG] [Thread-198417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:18:23.061 [DEBUG] [Thread-198417] [transport.py] [_log()] Compression: none
2026-04-13T00:18:23.061 [DEBUG] [Thread-198417] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:18:23.117 [DEBUG] [Thread-198417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:18:23.117 [DEBUG] [Thread-198417] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:18:23.118 [DEBUG] [Thread-198417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:18:23.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:18:23.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:18:23.173 [DEBUG] [Thread-198417] [transport.py] [_log()] userauth is OK
2026-04-13T00:18:23.173 [DEBUG] [Thread-198417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:18:23.174 [DEBUG] [Thread-198417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:18:23.174 [DEBUG] [Thread-198417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:18:23.174 [DEBUG] [Thread-198417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:18:23.195 [INFO] [Thread-198417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:18:23.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:18:23.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:18:23.996 [DEBUG] [Thread-198417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:18:23.996 [DEBUG] [Thread-198417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:18:24.022 [DEBUG] [Thread-198419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:24.045 [DEBUG] [Thread-198417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:18:24.045 [DEBUG] [Thread-198417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:18:24.054 [DEBUG] [Thread-198417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:18:24.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:18:24.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:18:24.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:18:24.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:18:24.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:18:24.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:18:24.091 [DEBUG] [Thread-198417] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:18:24.976 [DEBUG] [Thread-198420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:40.030 [DEBUG] [Thread-198421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:18:54.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:18:54.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:18:55.069 [DEBUG] [Thread-198422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 18, 33), 0.93633, 93.8794, 0.0, 11.2932, 10.806, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:18:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:18:33
2026-04-13T00:18:55.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:18:55.844 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:55.845 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:18:55.926 [DEBUG] [Thread-198423] [transport.py] [_log()] starting thread (client mode): 0xa795a1a0
2026-04-13T00:18:55.926 [DEBUG] [Thread-198423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:18:55.946 [DEBUG] [Thread-198423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:18:55.946 [INFO] [Thread-198423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:18:55.949 [DEBUG] [Thread-198423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] client lang: <none>
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] server lang: <none>
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] kex follows: False
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:18:55.950 [DEBUG] [Thread-198423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:18:55.951 [DEBUG] [Thread-198423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:18:55.951 [DEBUG] [Thread-198423] [transport.py] [_log()] Compression: none
2026-04-13T00:18:55.951 [DEBUG] [Thread-198423] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:18:55.967 [DEBUG] [Thread-198423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:18:55.968 [DEBUG] [Thread-198423] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:18:55.968 [DEBUG] [Thread-198423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:18:55.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:18:55.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:18:55.970 [DEBUG] [Thread-198423] [transport.py] [_log()] userauth is OK
2026-04-13T00:18:55.970 [DEBUG] [Thread-198423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:18:55.970 [DEBUG] [Thread-198423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:18:55.970 [DEBUG] [Thread-198423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:18:55.971 [DEBUG] [Thread-198423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:18:56.006 [INFO] [Thread-198423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:18:56.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:18:56.775 [DEBUG] [Thread-198423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:18:56.775 [DEBUG] [Thread-198423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:18:56.776 [DEBUG] [Thread-198423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:18:56.816 [DEBUG] [Thread-198423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:18:56.816 [DEBUG] [Thread-198423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:18:56.820 [DEBUG] [Thread-198423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:18:56.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:18:56.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:18:56.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:18:56.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:18:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:18:56.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:18:56.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:18:56.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:18:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:18:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.929268 -999.00  +10.90   5.39     91   +9.50 1 2 1 3 1     0    0 1.50 4.21 .N... 5.4 5.4 248.2 9.9 11.6 -22.3 11.5 -21.3 11.2 -19.2 11.5 -21.4
2026-04-13T00:18:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:18:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:18:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.929268
2026-04-13T00:18:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:18:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:18:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:18:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:18:56.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:18:56.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:18:33', tmtdew=0.93633, humidity=93.8794, cloud=0.0, wind=11.2932, temperature=10.806, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:18:08.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.92875, 1.596, nan, nan, nan, nan, nan, 3.2654999999999994, 2.977999999999999, 2.413249999999999, nan, nan, 1.3607500000000012, nan, nan, 0.5065, 0.2157499999999999, 0.2530000000000001, 0.3210000000000006, 0.6310000000000011, 0.9370000000000012, 2.761000000000001, 2.518249999999999], zp_timestamp='2026-04-12T22:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:18:56.846 [DEBUG] [Thread-198423] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:18:56.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:18:56.939 [DEBUG] [Thread-198426] [transport.py] [_log()] starting thread (client mode): 0xa795a440
2026-04-13T00:18:56.940 [DEBUG] [Thread-198426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:18:56.954 [DEBUG] [Thread-198426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:18:56.954 [INFO] [Thread-198426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:18:56.964 [DEBUG] [Thread-198426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] client lang: <none>
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] server lang: <none>
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] kex follows: False
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] Compression: none
2026-04-13T00:18:56.965 [DEBUG] [Thread-198426] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:18:57.020 [DEBUG] [Thread-198426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:18:57.020 [DEBUG] [Thread-198426] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:18:57.021 [DEBUG] [Thread-198426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:18:57.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:18:57.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:18:57.077 [DEBUG] [Thread-198426] [transport.py] [_log()] userauth is OK
2026-04-13T00:18:57.078 [DEBUG] [Thread-198426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:18:57.078 [DEBUG] [Thread-198426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:18:57.078 [DEBUG] [Thread-198426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:18:57.078 [DEBUG] [Thread-198426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:18:57.097 [INFO] [Thread-198426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:18:57.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:18:57.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:18:57.910 [DEBUG] [Thread-198426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:18:57.910 [DEBUG] [Thread-198426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:18:57.958 [DEBUG] [Thread-198426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:18:57.958 [DEBUG] [Thread-198426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:18:57.967 [DEBUG] [Thread-198426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:18:57.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:18:57.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:18:57.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:18:57.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:18:57.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:18:57.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:18:58.004 [DEBUG] [Thread-198426] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:19:10.109 [DEBUG] [Thread-198428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:19:24.080 [DEBUG] [Thread-198429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:19:25.162 [DEBUG] [Thread-198430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:19:28.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:19:28.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:19: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
2026-04-13T00:19:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 19, 9), 1.16839, 92.4397, 0.0, 9.29952, 10.9362, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:19:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:19:09
2026-04-13T00:19:29.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:19:29.826 [DEBUG] [Thread-198431] [transport.py] [_log()] starting thread (client mode): 0xb39c70d0
2026-04-13T00:19:29.827 [DEBUG] [Thread-198431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:19:29.848 [DEBUG] [Thread-198431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:19:29.848 [INFO] [Thread-198431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] client lang: <none>
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] server lang: <none>
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] kex follows: False
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] Compression: none
2026-04-13T00:19:29.852 [DEBUG] [Thread-198431] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:19:29.869 [DEBUG] [Thread-198431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:19:29.870 [DEBUG] [Thread-198431] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:19:29.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:19:29.871 [DEBUG] [Thread-198431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:19:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:19:29.873 [DEBUG] [Thread-198431] [transport.py] [_log()] userauth is OK
2026-04-13T00:19:29.873 [DEBUG] [Thread-198431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:19:29.873 [DEBUG] [Thread-198431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:19:29.874 [DEBUG] [Thread-198431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:19:29.874 [DEBUG] [Thread-198431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:19:29.891 [INFO] [Thread-198431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:19:29.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:19:30.672 [DEBUG] [Thread-198431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:19:30.672 [DEBUG] [Thread-198431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:19:30.673 [DEBUG] [Thread-198431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:19:30.713 [DEBUG] [Thread-198431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:19:30.713 [DEBUG] [Thread-198431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:19:30.717 [DEBUG] [Thread-198431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:19:30.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:19:30.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:19:30.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:19:30.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:19:30.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:19:30.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:19:30.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:19:30.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:19:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:19:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.929615 -999.00  +11.00   7.21     91   +9.60 1 2 1 3 1     0    0 1.48 4.11 .N... 7.2 7.2 241.2 9.2 11.6 -22.3 11.5 -21.3 11.2 -19.2 11.5 -21.0
2026-04-13T00:19:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:19:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:19:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.929615
2026-04-13T00:19:30.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:19:30.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:19:30.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:19:30.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:19:30.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:19:30.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:19:09', tmtdew=1.16839, humidity=92.4397, cloud=0.0, wind=9.29952, temperature=10.9362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:18:38.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.92875, 1.596, nan, nan, nan, nan, nan, 3.2654999999999994, 2.977999999999999, 2.413249999999999, nan, nan, 1.3607500000000012, nan, nan, 0.5065, 0.2157499999999999, 0.2530000000000001, 0.3210000000000006, 0.6310000000000011, 0.9370000000000012, 2.761000000000001, 2.518249999999999], zp_timestamp='2026-04-12T22:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:19:30.744 [DEBUG] [Thread-198431] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:19:30.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:19:30.839 [DEBUG] [Thread-198434] [transport.py] [_log()] starting thread (client mode): 0xa795a440
2026-04-13T00:19:30.839 [DEBUG] [Thread-198434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:19:30.853 [DEBUG] [Thread-198434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:19:30.853 [INFO] [Thread-198434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:19:30.860 [DEBUG] [Thread-198434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] client lang: <none>
2026-04-13T00:19:30.861 [DEBUG] [Thread-198434] [transport.py] [_log()] server lang: <none>
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] kex follows: False
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] Compression: none
2026-04-13T00:19:30.862 [DEBUG] [Thread-198434] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:19:30.918 [DEBUG] [Thread-198434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:19:30.919 [DEBUG] [Thread-198434] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:19:30.920 [DEBUG] [Thread-198434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:19:30.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:19:30.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:19:30.974 [DEBUG] [Thread-198434] [transport.py] [_log()] userauth is OK
2026-04-13T00:19:30.975 [DEBUG] [Thread-198434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:19:30.975 [DEBUG] [Thread-198434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:19:30.975 [DEBUG] [Thread-198434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:19:30.975 [DEBUG] [Thread-198434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:19:30.994 [INFO] [Thread-198434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:19:30.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:19:30.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:19:31.828 [DEBUG] [Thread-198434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:19:31.828 [DEBUG] [Thread-198434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:19:31.877 [DEBUG] [Thread-198434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:19:31.877 [DEBUG] [Thread-198434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:19:31.886 [DEBUG] [Thread-198434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:19:31.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:19:31.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:19:31.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:19:31.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:19:31.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:19:31.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:19:31.924 [DEBUG] [Thread-198434] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:19:40.202 [DEBUG] [Thread-198436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:19:55.257 [DEBUG] [Thread-198437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:19:56.049 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:19:56.050 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:20:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:20:01.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:20:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:20:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 19, 44), 0.96294, 93.7135, 0.0, 11.646, 10.8392, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:20:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:19:44
2026-04-13T00:20:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:20:03.753 [DEBUG] [Thread-198438] [transport.py] [_log()] starting thread (client mode): 0xb0fce500
2026-04-13T00:20:03.753 [DEBUG] [Thread-198438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:20:03.774 [DEBUG] [Thread-198438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:20:03.775 [INFO] [Thread-198438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:20:03.776 [DEBUG] [Thread-198438] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] client lang: <none>
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] server lang: <none>
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] kex follows: False
2026-04-13T00:20:03.777 [DEBUG] [Thread-198438] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:20:03.778 [DEBUG] [Thread-198438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:20:03.778 [DEBUG] [Thread-198438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:20:03.778 [DEBUG] [Thread-198438] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:20:03.778 [DEBUG] [Thread-198438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:20:03.778 [DEBUG] [Thread-198438] [transport.py] [_log()] Compression: none
2026-04-13T00:20:03.778 [DEBUG] [Thread-198438] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:20:03.798 [DEBUG] [Thread-198438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:20:03.799 [DEBUG] [Thread-198438] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:20:03.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:20:03.800 [DEBUG] [Thread-198438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:20:03.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:20:03.802 [DEBUG] [Thread-198438] [transport.py] [_log()] userauth is OK
2026-04-13T00:20:03.802 [DEBUG] [Thread-198438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:20:03.802 [DEBUG] [Thread-198438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:20:03.802 [DEBUG] [Thread-198438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:20:03.802 [DEBUG] [Thread-198438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:20:03.819 [INFO] [Thread-198438] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:20:03.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:20:04.736 [DEBUG] [Thread-198438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:20:04.736 [DEBUG] [Thread-198438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:20:04.737 [DEBUG] [Thread-198438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:20:04.777 [DEBUG] [Thread-198438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:20:04.777 [DEBUG] [Thread-198438] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:20:04.781 [DEBUG] [Thread-198438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:20:04.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:20:04.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:20:04.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:20:04.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:20:04.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:20:04.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:20:04.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:20:04.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:20:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:20:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.930309 -999.00  +11.00   4.20     90   +9.60 1 2 1 3 1     0    0 1.52 4.87 .n... 4.2 4.2 231.6 7.2 11.6 -22.5 11.5 -21.3 11.2 -19.3 11.5 -21.4
2026-04-13T00:20:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:20:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:20:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.930309
2026-04-13T00:20:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:20:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:20:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:20:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:20:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:20:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:19:44', tmtdew=0.96294, humidity=93.7135, cloud=0.0, wind=11.646, temperature=10.8392, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:19:38.698', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.92875, 1.596, nan, nan, nan, nan, nan, 3.2654999999999994, 2.977999999999999, 2.413249999999999, nan, nan, 1.3607500000000012, nan, nan, 0.5065, 0.2157499999999999, 0.2530000000000001, 0.3210000000000006, 0.6310000000000011, 0.9370000000000012, 2.761000000000001, 2.518249999999999], zp_timestamp='2026-04-12T22:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:20:04.810 [DEBUG] [Thread-198438] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:20:04.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:20:04.902 [DEBUG] [Thread-198441] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6d0
2026-04-13T00:20:04.902 [DEBUG] [Thread-198441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:20:04.917 [DEBUG] [Thread-198441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:20:04.917 [INFO] [Thread-198441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:20:04.925 [DEBUG] [Thread-198441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:20:04.925 [DEBUG] [Thread-198441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:20:04.925 [DEBUG] [Thread-198441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:20:04.925 [DEBUG] [Thread-198441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:04.925 [DEBUG] [Thread-198441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:04.925 [DEBUG] [Thread-198441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:04.925 [DEBUG] [Thread-198441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] client lang: <none>
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] server lang: <none>
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] kex follows: False
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:20:04.926 [DEBUG] [Thread-198441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:20:04.927 [DEBUG] [Thread-198441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:20:04.927 [DEBUG] [Thread-198441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:20:04.927 [DEBUG] [Thread-198441] [transport.py] [_log()] Compression: none
2026-04-13T00:20:04.927 [DEBUG] [Thread-198441] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:20:04.986 [DEBUG] [Thread-198441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:20:04.986 [DEBUG] [Thread-198441] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:20:04.987 [DEBUG] [Thread-198441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:20:04.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:20:04.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:20:05.044 [DEBUG] [Thread-198441] [transport.py] [_log()] userauth is OK
2026-04-13T00:20:05.045 [DEBUG] [Thread-198441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:20:05.045 [DEBUG] [Thread-198441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:20:05.045 [DEBUG] [Thread-198441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:20:05.045 [DEBUG] [Thread-198441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:20:05.064 [INFO] [Thread-198441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:20:05.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:20:05.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:20:05.879 [DEBUG] [Thread-198441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:20:05.880 [DEBUG] [Thread-198441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:20:05.928 [DEBUG] [Thread-198441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:20:05.929 [DEBUG] [Thread-198441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:20:05.938 [DEBUG] [Thread-198441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:20:05.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:20:05.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:20:05.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:20:05.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:20:05.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:20:05.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:20:05.975 [DEBUG] [Thread-198441] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:20:10.292 [DEBUG] [Thread-198443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:20:24.137 [DEBUG] [Thread-198444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:20:25.342 [DEBUG] [Thread-198445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:20:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:20:35.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:20:35.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:20:37.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 20, 19), 1.23916, 92.307, 0.0, 9.49356, 10.8864, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:20:37.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:20:19
2026-04-13T00:20:37.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:20:37.763 [DEBUG] [Thread-198446] [transport.py] [_log()] starting thread (client mode): 0xa795b0d0
2026-04-13T00:20:37.763 [DEBUG] [Thread-198446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:20:37.784 [DEBUG] [Thread-198446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:20:37.784 [INFO] [Thread-198446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:20:37.787 [DEBUG] [Thread-198446] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:20:37.787 [DEBUG] [Thread-198446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:20:37.787 [DEBUG] [Thread-198446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:20:37.787 [DEBUG] [Thread-198446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:37.787 [DEBUG] [Thread-198446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] client lang: <none>
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] server lang: <none>
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] kex follows: False
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] Compression: none
2026-04-13T00:20:37.788 [DEBUG] [Thread-198446] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:20:37.803 [DEBUG] [Thread-198446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:20:37.804 [DEBUG] [Thread-198446] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:20:37.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:20:37.804 [DEBUG] [Thread-198446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:20:37.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:20:37.805 [DEBUG] [Thread-198446] [transport.py] [_log()] userauth is OK
2026-04-13T00:20:37.805 [DEBUG] [Thread-198446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:20:37.805 [DEBUG] [Thread-198446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:20:37.805 [DEBUG] [Thread-198446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:20:37.806 [DEBUG] [Thread-198446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:20:37.824 [INFO] [Thread-198446] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:20:37.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:20:38.661 [DEBUG] [Thread-198446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:20:38.662 [DEBUG] [Thread-198446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:20:38.662 [DEBUG] [Thread-198446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:20:38.703 [DEBUG] [Thread-198446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:20:38.703 [DEBUG] [Thread-198446] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:20:38.707 [DEBUG] [Thread-198446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:20:38.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:20:38.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:20:38.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:20:38.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:20:38.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:20:38.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:20:38.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:20:38.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:20:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:20:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.930656 -999.00  +11.00   3.36     90   +9.60 1 2 1 3 1     0    0 1.54 5.28 zNE.W 3.4 3.4 219.6 6.0 11.6 -22.4 11.5 -21.4 11.2 -19.4 11.5 -21.4
2026-04-13T00:20:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:20:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:20:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.930656
2026-04-13T00:20:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:20:38.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:20:38.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:20:38.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:20:38.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:20:38.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:20:19', tmtdew=1.23916, humidity=92.307, cloud=0.0, wind=9.49356, temperature=10.8864, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:20:08.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.92875, 1.596, nan, nan, nan, nan, nan, 3.2654999999999994, 2.977999999999999, 2.413249999999999, nan, nan, 1.3607500000000012, nan, nan, 0.5065, 0.2157499999999999, 0.2530000000000001, 0.3210000000000006, 0.6310000000000011, 0.9370000000000012, 2.761000000000001, 2.518249999999999], zp_timestamp='2026-04-12T22:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:20:38.734 [DEBUG] [Thread-198446] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:20:38.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:20:38.828 [DEBUG] [Thread-198449] [transport.py] [_log()] starting thread (client mode): 0xa7958160
2026-04-13T00:20:38.828 [DEBUG] [Thread-198449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:20:38.842 [DEBUG] [Thread-198449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:20:38.843 [INFO] [Thread-198449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:20:38.850 [DEBUG] [Thread-198449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:20:38.851 [DEBUG] [Thread-198449] [transport.py] [_log()] client lang: <none>
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] server lang: <none>
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] kex follows: False
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:20:38.852 [DEBUG] [Thread-198449] [transport.py] [_log()] Compression: none
2026-04-13T00:20:38.853 [DEBUG] [Thread-198449] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:20:38.911 [DEBUG] [Thread-198449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:20:38.912 [DEBUG] [Thread-198449] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:20:38.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:20:38.913 [DEBUG] [Thread-198449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:20:38.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:20:38.972 [DEBUG] [Thread-198449] [transport.py] [_log()] userauth is OK
2026-04-13T00:20:38.972 [DEBUG] [Thread-198449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:20:38.972 [DEBUG] [Thread-198449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:20:38.972 [DEBUG] [Thread-198449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:20:38.972 [DEBUG] [Thread-198449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:20:38.986 [INFO] [Thread-198449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:20:38.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:20:38.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:20:39.813 [DEBUG] [Thread-198449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:20:39.813 [DEBUG] [Thread-198449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:20:39.861 [DEBUG] [Thread-198449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:20:39.861 [DEBUG] [Thread-198449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:20:39.871 [DEBUG] [Thread-198449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:20:39.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:20:39.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:20:39.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:20:39.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:20:39.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:20:39.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:20:39.908 [DEBUG] [Thread-198449] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:20:40.374 [DEBUG] [Thread-198451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:20:55.436 [DEBUG] [Thread-198452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:20:56.256 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:20:56.257 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:21:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:21:09.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:21:09.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:21:10.474 [DEBUG] [Thread-198453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:21:11.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 20, 55), 1.184, 91.8402, 0.0, 8.78796, 10.853, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:21:11.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:20:55
2026-04-13T00:21:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:21:11.650 [DEBUG] [Thread-198454] [transport.py] [_log()] starting thread (client mode): 0xb39c7880
2026-04-13T00:21:11.651 [DEBUG] [Thread-198454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:21:11.671 [DEBUG] [Thread-198454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:21:11.671 [INFO] [Thread-198454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:21:11.674 [DEBUG] [Thread-198454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] client lang: <none>
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] server lang: <none>
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] kex follows: False
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:21:11.675 [DEBUG] [Thread-198454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:21:11.676 [DEBUG] [Thread-198454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:21:11.676 [DEBUG] [Thread-198454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:21:11.676 [DEBUG] [Thread-198454] [transport.py] [_log()] Compression: none
2026-04-13T00:21:11.676 [DEBUG] [Thread-198454] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:21:11.694 [DEBUG] [Thread-198454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:21:11.694 [DEBUG] [Thread-198454] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:21:11.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:21:11.696 [DEBUG] [Thread-198454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:21:11.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:21:11.698 [DEBUG] [Thread-198454] [transport.py] [_log()] userauth is OK
2026-04-13T00:21:11.698 [DEBUG] [Thread-198454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:21:11.698 [DEBUG] [Thread-198454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:21:11.698 [DEBUG] [Thread-198454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:21:11.698 [DEBUG] [Thread-198454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:21:11.722 [INFO] [Thread-198454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:21:11.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:21:12.358 [DEBUG] [Thread-198454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:21:12.359 [DEBUG] [Thread-198454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:21:12.359 [DEBUG] [Thread-198454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:21:12.400 [DEBUG] [Thread-198454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:21:12.401 [DEBUG] [Thread-198454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:21:12.404 [DEBUG] [Thread-198454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:21:12.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:21:12.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:21:12.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:21:12.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:21:12.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:21:12.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:21:12.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:21:12.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:21:12.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:21:12.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.931004 -999.00  +11.00   4.30     90   +9.50 1 2 1 3 1     0    0 1.55 6.15 ..E.W 4.3 4.3 219.5 6.3 11.6 -22.5 11.5 -21.4 11.2 -19.4 11.5 -21.5
2026-04-13T00:21:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:21:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:21:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.931004
2026-04-13T00:21:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:21:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:21:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:21:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:21:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:21:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:20:55', tmtdew=1.184, humidity=91.8402, cloud=0.0, wind=8.78796, temperature=10.853, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:20:38.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:21:12.430 [DEBUG] [Thread-198454] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:21:12.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:21:12.523 [DEBUG] [Thread-198457] [transport.py] [_log()] starting thread (client mode): 0xa7959db0
2026-04-13T00:21:12.523 [DEBUG] [Thread-198457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:21:12.538 [DEBUG] [Thread-198457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:21:12.538 [INFO] [Thread-198457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:21:12.545 [DEBUG] [Thread-198457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:21:12.545 [DEBUG] [Thread-198457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:21:12.545 [DEBUG] [Thread-198457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:21:12.545 [DEBUG] [Thread-198457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:12.545 [DEBUG] [Thread-198457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] client lang: <none>
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] server lang: <none>
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] kex follows: False
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] Compression: none
2026-04-13T00:21:12.546 [DEBUG] [Thread-198457] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:21:12.605 [DEBUG] [Thread-198457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:21:12.605 [DEBUG] [Thread-198457] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:21:12.605 [DEBUG] [Thread-198457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:21:12.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:21:12.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:21:12.661 [DEBUG] [Thread-198457] [transport.py] [_log()] userauth is OK
2026-04-13T00:21:12.662 [DEBUG] [Thread-198457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:21:12.662 [DEBUG] [Thread-198457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:21:12.662 [DEBUG] [Thread-198457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:21:12.662 [DEBUG] [Thread-198457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:21:12.680 [INFO] [Thread-198457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:21:12.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:21:12.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:21:13.492 [DEBUG] [Thread-198457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:21:13.492 [DEBUG] [Thread-198457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:21:13.544 [DEBUG] [Thread-198457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:21:13.544 [DEBUG] [Thread-198457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:21:13.553 [DEBUG] [Thread-198457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:21:13.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:21:13.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:21:13.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:21:13.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:21:13.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:21:13.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:21:13.592 [DEBUG] [Thread-198457] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:21:24.206 [DEBUG] [Thread-198459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:21:25.512 [DEBUG] [Thread-198460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:21:40.570 [DEBUG] [Thread-198461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:21:43.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:21:43.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:21:43.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:21:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 21, 30), 1.18951, 91.807, 0.0, 9.14076, 10.8862, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:21:44.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:21:30
2026-04-13T00:21:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:21:45.397 [DEBUG] [Thread-198462] [transport.py] [_log()] starting thread (client mode): 0xb0fced10
2026-04-13T00:21:45.397 [DEBUG] [Thread-198462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:21:45.409 [DEBUG] [Thread-198462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:21:45.409 [INFO] [Thread-198462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] client lang: <none>
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] server lang: <none>
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] kex follows: False
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] Compression: none
2026-04-13T00:21:45.412 [DEBUG] [Thread-198462] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:21:45.428 [DEBUG] [Thread-198462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:21:45.429 [DEBUG] [Thread-198462] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:21:45.429 [DEBUG] [Thread-198462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:21:45.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:21:45.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:21:45.431 [DEBUG] [Thread-198462] [transport.py] [_log()] userauth is OK
2026-04-13T00:21:45.431 [DEBUG] [Thread-198462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:21:45.431 [DEBUG] [Thread-198462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:21:45.431 [DEBUG] [Thread-198462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:21:45.431 [DEBUG] [Thread-198462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:21:45.452 [INFO] [Thread-198462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:21:45.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:21:46.109 [DEBUG] [Thread-198462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:21:46.109 [DEBUG] [Thread-198462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:21:46.110 [DEBUG] [Thread-198462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:21:46.151 [DEBUG] [Thread-198462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:21:46.151 [DEBUG] [Thread-198462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:21:46.153 [DEBUG] [Thread-198462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:21:46.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:21:46.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:21:46.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:21:46.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:21:46.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:21:46.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:21:46.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.931351 -999.00  +10.90   2.79     90   +9.40 1 2 1 3 1     0    0 1.56 7.08 ..E.W 2.8 2.8 215.3 7.1 11.6 -22.6 11.4 -21.3 11.1 -19.4 11.5 -21.4
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.931351
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:21:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:21:30', tmtdew=1.18951, humidity=91.807, cloud=0.0, wind=9.14076, temperature=10.8862, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:21:08.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:21:46.173 [DEBUG] [Thread-198462] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:21:46.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:21:46.254 [DEBUG] [Thread-198465] [transport.py] [_log()] starting thread (client mode): 0xb39c5ab0
2026-04-13T00:21:46.254 [DEBUG] [Thread-198465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:21:46.273 [DEBUG] [Thread-198465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:21:46.273 [INFO] [Thread-198465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] client lang: <none>
2026-04-13T00:21:46.281 [DEBUG] [Thread-198465] [transport.py] [_log()] server lang: <none>
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] kex follows: False
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] Compression: none
2026-04-13T00:21:46.282 [DEBUG] [Thread-198465] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:21:46.340 [DEBUG] [Thread-198465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:21:46.340 [DEBUG] [Thread-198465] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:21:46.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:21:46.341 [DEBUG] [Thread-198465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:21:46.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:21:46.396 [DEBUG] [Thread-198465] [transport.py] [_log()] userauth is OK
2026-04-13T00:21:46.396 [DEBUG] [Thread-198465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:21:46.396 [DEBUG] [Thread-198465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:21:46.396 [DEBUG] [Thread-198465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:21:46.396 [DEBUG] [Thread-198465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:21:46.415 [INFO] [Thread-198465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:21:46.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:21:46.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:21:47.231 [DEBUG] [Thread-198465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:21:47.231 [DEBUG] [Thread-198465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:21:47.279 [DEBUG] [Thread-198465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:21:47.279 [DEBUG] [Thread-198465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:21:47.288 [DEBUG] [Thread-198465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:21:47.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:21:47.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:21:47.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:21:47.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:21:47.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:21:47.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:21:47.325 [DEBUG] [Thread-198465] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:21:55.608 [DEBUG] [Thread-198467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:21:56.462 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:21:56.464 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:22:10.669 [DEBUG] [Thread-198468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:22:17.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:22:17.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:22:17.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:22:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 22, 6), 1.19756, 91.7573, 0.0, 9.0702, 10.9028, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:22:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:22:06
2026-04-13T00:22:18.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:22:19.140 [DEBUG] [Thread-198469] [transport.py] [_log()] starting thread (client mode): 0xae5606a0
2026-04-13T00:22:19.140 [DEBUG] [Thread-198469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:22:19.160 [DEBUG] [Thread-198469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:22:19.160 [INFO] [Thread-198469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:22:19.163 [DEBUG] [Thread-198469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:22:19.163 [DEBUG] [Thread-198469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] client lang: <none>
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] server lang: <none>
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] kex follows: False
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:22:19.164 [DEBUG] [Thread-198469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:22:19.165 [DEBUG] [Thread-198469] [transport.py] [_log()] Compression: none
2026-04-13T00:22:19.165 [DEBUG] [Thread-198469] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:22:19.177 [DEBUG] [Thread-198469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:22:19.177 [DEBUG] [Thread-198469] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:22:19.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:22:19.179 [DEBUG] [Thread-198469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:22:19.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:22:19.180 [DEBUG] [Thread-198469] [transport.py] [_log()] userauth is OK
2026-04-13T00:22:19.181 [DEBUG] [Thread-198469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:22:19.181 [DEBUG] [Thread-198469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:22:19.181 [DEBUG] [Thread-198469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:22:19.181 [DEBUG] [Thread-198469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:22:19.204 [INFO] [Thread-198469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:22:19.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:22:19.812 [DEBUG] [Thread-198469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:22:19.812 [DEBUG] [Thread-198469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:22:19.812 [DEBUG] [Thread-198469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:22:19.854 [DEBUG] [Thread-198469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:22:19.854 [DEBUG] [Thread-198469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:22:19.858 [DEBUG] [Thread-198469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:22:19.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:22:19.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:22:19.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:22:19.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:22:19.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:22:19.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:22:19.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:22:19.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:22:19.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:22:19.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.931698 -999.00  +10.90   2.94     90   +9.50 1 2 1 3 1     0    0 1.60 7.73 ..... 2.9 2.9 229.5 5.8 11.6 -22.5 11.4 -21.4 11.2 -19.4 11.5 -21.4
2026-04-13T00:22:19.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:22:19.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:22:19.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.931698
2026-04-13T00:22:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:22:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:22:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:22:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:22:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:22:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:22:06', tmtdew=1.19756, humidity=91.7573, cloud=0.0, wind=9.0702, temperature=10.9028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:21:38.707', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:22:19.885 [DEBUG] [Thread-198469] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:22:19.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:22:19.979 [DEBUG] [Thread-198472] [transport.py] [_log()] starting thread (client mode): 0xae561fc0
2026-04-13T00:22:19.979 [DEBUG] [Thread-198472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:22:19.994 [DEBUG] [Thread-198472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:22:19.994 [INFO] [Thread-198472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:22:20.003 [DEBUG] [Thread-198472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:22:20.004 [DEBUG] [Thread-198472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:22:20.004 [DEBUG] [Thread-198472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:22:20.004 [DEBUG] [Thread-198472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:20.004 [DEBUG] [Thread-198472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:20.004 [DEBUG] [Thread-198472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] client lang: <none>
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] server lang: <none>
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] kex follows: False
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] Compression: none
2026-04-13T00:22:20.005 [DEBUG] [Thread-198472] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:22:20.063 [DEBUG] [Thread-198472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:22:20.063 [DEBUG] [Thread-198472] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:22:20.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:22:20.065 [DEBUG] [Thread-198472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:22:20.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:22:20.123 [DEBUG] [Thread-198472] [transport.py] [_log()] userauth is OK
2026-04-13T00:22:20.123 [DEBUG] [Thread-198472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:22:20.123 [DEBUG] [Thread-198472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:22:20.123 [DEBUG] [Thread-198472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:22:20.123 [DEBUG] [Thread-198472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:22:20.142 [INFO] [Thread-198472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:22:20.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:22:20.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:22:20.925 [DEBUG] [Thread-198472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:22:20.926 [DEBUG] [Thread-198472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:22:20.973 [DEBUG] [Thread-198472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:22:20.973 [DEBUG] [Thread-198472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:22:20.982 [DEBUG] [Thread-198472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:22:20.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:22:20.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:22: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') -> 00000000
2026-04-13T00:22:21.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:22:21.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:22:21.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:22:21.019 [DEBUG] [Thread-198472] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:22:24.291 [DEBUG] [Thread-198474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:22:25.705 [DEBUG] [Thread-198475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:22:40.753 [DEBUG] [Thread-198476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:22:51.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:22:51.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:22:51.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:22:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 22, 41), 1.00524, 93.4482, 0.0, 11.5754, 10.8392, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:22:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:22:41
2026-04-13T00:22:52.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:22:52.854 [DEBUG] [Thread-198477] [transport.py] [_log()] starting thread (client mode): 0xae519120
2026-04-13T00:22:52.854 [DEBUG] [Thread-198477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:22:52.876 [DEBUG] [Thread-198477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:22:52.876 [INFO] [Thread-198477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:22:52.879 [DEBUG] [Thread-198477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:22:52.879 [DEBUG] [Thread-198477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:22:52.879 [DEBUG] [Thread-198477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:22:52.879 [DEBUG] [Thread-198477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] client lang: <none>
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] server lang: <none>
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] kex follows: False
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:22:52.880 [DEBUG] [Thread-198477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:22:52.881 [DEBUG] [Thread-198477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:22:52.881 [DEBUG] [Thread-198477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:22:52.881 [DEBUG] [Thread-198477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:22:52.881 [DEBUG] [Thread-198477] [transport.py] [_log()] Compression: none
2026-04-13T00:22:52.881 [DEBUG] [Thread-198477] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:22:52.902 [DEBUG] [Thread-198477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:22:52.902 [DEBUG] [Thread-198477] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:22:52.903 [DEBUG] [Thread-198477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:22:52.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:22:52.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:22:52.905 [DEBUG] [Thread-198477] [transport.py] [_log()] userauth is OK
2026-04-13T00:22:52.905 [DEBUG] [Thread-198477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:22:52.905 [DEBUG] [Thread-198477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:22:52.905 [DEBUG] [Thread-198477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:22:52.905 [DEBUG] [Thread-198477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:22:52.940 [INFO] [Thread-198477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:22:52.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:22:53.572 [DEBUG] [Thread-198477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:22:53.572 [DEBUG] [Thread-198477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:22:53.572 [DEBUG] [Thread-198477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:22:53.613 [DEBUG] [Thread-198477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:22:53.613 [DEBUG] [Thread-198477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:22:53.617 [DEBUG] [Thread-198477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:22:53.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:22:53.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:22:53.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:22:53.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:22:53.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:22:53.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:22:53.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:22:53.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:22:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:22:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.932045 -999.00  +10.90   4.74     90   +9.50 1 2 1 3 1     0    0 1.59 7.03 ..... 4.7 4.7 231.8 6.4 11.6 -22.5 11.4 -21.3 11.2 -19.3 11.4 -21.2
2026-04-13T00:22:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:22:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:22:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.932045
2026-04-13T00:22:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:22:53.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:22:53.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:22:53.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:22:53.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:22:53.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:22:41', tmtdew=1.00524, humidity=93.4482, cloud=0.0, wind=11.5754, temperature=10.8392, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:22:08.688', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:22:53.643 [DEBUG] [Thread-198477] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:22:53.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:22:53.737 [DEBUG] [Thread-198480] [transport.py] [_log()] starting thread (client mode): 0xae5196f0
2026-04-13T00:22:53.737 [DEBUG] [Thread-198480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:22:53.752 [DEBUG] [Thread-198480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:22:53.753 [INFO] [Thread-198480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:22:53.760 [DEBUG] [Thread-198480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:22:53.760 [DEBUG] [Thread-198480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:22:53.760 [DEBUG] [Thread-198480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:22:53.760 [DEBUG] [Thread-198480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:53.760 [DEBUG] [Thread-198480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:22:53.760 [DEBUG] [Thread-198480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:53.760 [DEBUG] [Thread-198480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] client lang: <none>
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] server lang: <none>
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] kex follows: False
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] Compression: none
2026-04-13T00:22:53.761 [DEBUG] [Thread-198480] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:22:53.821 [DEBUG] [Thread-198480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:22:53.822 [DEBUG] [Thread-198480] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:22:53.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:22:53.823 [DEBUG] [Thread-198480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:22:53.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:22:53.877 [DEBUG] [Thread-198480] [transport.py] [_log()] userauth is OK
2026-04-13T00:22:53.877 [DEBUG] [Thread-198480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:22:53.878 [DEBUG] [Thread-198480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:22:53.878 [DEBUG] [Thread-198480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:22:53.878 [DEBUG] [Thread-198480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:22:53.896 [INFO] [Thread-198480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:22:53.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:22:53.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:22:54.715 [DEBUG] [Thread-198480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:22:54.715 [DEBUG] [Thread-198480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:22:54.763 [DEBUG] [Thread-198480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:22:54.764 [DEBUG] [Thread-198480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:22:54.773 [DEBUG] [Thread-198480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:22:54.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:22:54.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:22:54.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:22:54.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:22:54.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:22:54.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:22:54.812 [DEBUG] [Thread-198480] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:22:55.790 [DEBUG] [Thread-198482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:22:56.670 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:22:56.672 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:10.853 [DEBUG] [Thread-198483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:24.369 [DEBUG] [Thread-198484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:24.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:23:24.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:23:24.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:23:25.892 [DEBUG] [Thread-198485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 23, 17), 1.21045, 91.6744, 0.0, 9.21132, 10.853, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:23:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:23:17
2026-04-13T00:23:26.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:23:26.720 [DEBUG] [Thread-198486] [transport.py] [_log()] starting thread (client mode): 0xae518250
2026-04-13T00:23:26.720 [DEBUG] [Thread-198486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:23:26.741 [DEBUG] [Thread-198486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:23:26.741 [INFO] [Thread-198486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] client lang: <none>
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] server lang: <none>
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] kex follows: False
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:23:26.743 [DEBUG] [Thread-198486] [transport.py] [_log()] Compression: none
2026-04-13T00:23:26.744 [DEBUG] [Thread-198486] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:23:26.760 [DEBUG] [Thread-198486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:23:26.761 [DEBUG] [Thread-198486] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:23:26.761 [DEBUG] [Thread-198486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:23:26.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:23:26.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:23:26.763 [DEBUG] [Thread-198486] [transport.py] [_log()] userauth is OK
2026-04-13T00:23:26.763 [DEBUG] [Thread-198486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:23:26.763 [DEBUG] [Thread-198486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:23:26.763 [DEBUG] [Thread-198486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:23:26.763 [DEBUG] [Thread-198486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:23:26.781 [INFO] [Thread-198486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:23:26.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:23:27.423 [DEBUG] [Thread-198486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:23:27.424 [DEBUG] [Thread-198486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:23:27.424 [DEBUG] [Thread-198486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:23:27.465 [DEBUG] [Thread-198486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:23:27.466 [DEBUG] [Thread-198486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:23:27.469 [DEBUG] [Thread-198486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:23:27.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:23:27.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:23:27.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:23:27.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:23:27.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:23:27.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:23:27.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:23:27.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:23:27.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:23:27.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.932740 -999.00  +10.90   2.64     91   +9.50 1 2 1 3 1     0    0 1.57 6.03 .N... 2.6 2.6 214.4 5.6 11.6 -22.6 11.5 -21.4 11.2 -19.2 11.5 -21.4
2026-04-13T00:23:27.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:23:27.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:23:27.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.932740
2026-04-13T00:23:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:23:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:23:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:23:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:23:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:23:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:23:17', tmtdew=1.21045, humidity=91.6744, cloud=0.0, wind=9.21132, temperature=10.853, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:23:08.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:23:27.496 [DEBUG] [Thread-198486] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:23:27.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:23:27.590 [DEBUG] [Thread-198489] [transport.py] [_log()] starting thread (client mode): 0xae5613c0
2026-04-13T00:23:27.590 [DEBUG] [Thread-198489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:23:27.605 [DEBUG] [Thread-198489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:23:27.606 [INFO] [Thread-198489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:23:27.613 [DEBUG] [Thread-198489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:23:27.613 [DEBUG] [Thread-198489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:23:27.613 [DEBUG] [Thread-198489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:23:27.613 [DEBUG] [Thread-198489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:23:27.613 [DEBUG] [Thread-198489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] client lang: <none>
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] server lang: <none>
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] kex follows: False
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] Compression: none
2026-04-13T00:23:27.614 [DEBUG] [Thread-198489] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:23:27.672 [DEBUG] [Thread-198489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:23:27.673 [DEBUG] [Thread-198489] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:23:27.673 [DEBUG] [Thread-198489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:23:27.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:23:27.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:23:27.727 [DEBUG] [Thread-198489] [transport.py] [_log()] userauth is OK
2026-04-13T00:23:27.727 [DEBUG] [Thread-198489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:23:27.727 [DEBUG] [Thread-198489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:23:27.727 [DEBUG] [Thread-198489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:23:27.727 [DEBUG] [Thread-198489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:23:27.745 [INFO] [Thread-198489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:23:27.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:23:27.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:23:28.567 [DEBUG] [Thread-198489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:23:28.567 [DEBUG] [Thread-198489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:23:28.615 [DEBUG] [Thread-198489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:23:28.615 [DEBUG] [Thread-198489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:23:28.624 [DEBUG] [Thread-198489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:23:28.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:23:28.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:23: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
2026-04-13T00:23:28.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:23:28.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:23:28.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:23:28.661 [DEBUG] [Thread-198489] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:23:40.929 [DEBUG] [Thread-198491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:55.982 [DEBUG] [Thread-198492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:56.876 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:56.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:23:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:23:58.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:23:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:23:59.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 23, 17), 1.21045, 91.6744, 0.0, 9.21132, 10.853, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:23:59.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:23:17
2026-04-13T00:24:00.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:24:00.543 [DEBUG] [Thread-198493] [transport.py] [_log()] starting thread (client mode): 0xae562710
2026-04-13T00:24:00.543 [DEBUG] [Thread-198493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:24:00.563 [DEBUG] [Thread-198493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:24:00.564 [INFO] [Thread-198493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:24:00.565 [DEBUG] [Thread-198493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:24:00.565 [DEBUG] [Thread-198493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:24:00.565 [DEBUG] [Thread-198493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:24:00.565 [DEBUG] [Thread-198493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:00.565 [DEBUG] [Thread-198493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:00.565 [DEBUG] [Thread-198493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:00.565 [DEBUG] [Thread-198493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] client lang: <none>
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] server lang: <none>
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] kex follows: False
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] Compression: none
2026-04-13T00:24:00.566 [DEBUG] [Thread-198493] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:24:00.581 [DEBUG] [Thread-198493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:24:00.582 [DEBUG] [Thread-198493] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:24:00.582 [DEBUG] [Thread-198493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:24:00.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:24:00.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:24:00.584 [DEBUG] [Thread-198493] [transport.py] [_log()] userauth is OK
2026-04-13T00:24:00.584 [DEBUG] [Thread-198493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:24:00.584 [DEBUG] [Thread-198493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:24:00.585 [DEBUG] [Thread-198493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:24:00.585 [DEBUG] [Thread-198493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:24:00.609 [INFO] [Thread-198493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:24:00.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:24:01.224 [DEBUG] [Thread-198493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:24:01.224 [DEBUG] [Thread-198493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:24:01.224 [DEBUG] [Thread-198493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:24:01.265 [DEBUG] [Thread-198493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:24:01.265 [DEBUG] [Thread-198493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:24:01.268 [DEBUG] [Thread-198493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:24:01.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:24:01.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:24:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:24:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:24:01.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:24:01.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:24:01.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:24:01.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.933087 -999.00  +10.90   3.78     91   +9.50 1 2 1 3 1     0    0 1.56 6.01 .N... 3.8 3.8 219.2 6.5 11.5 -22.3 11.4 -21.2 11.2 -19.4 11.5 -21.5
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.933087
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:24:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:23:17', tmtdew=1.21045, humidity=91.6744, cloud=0.0, wind=9.21132, temperature=10.853, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:23:38.717', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:24:01.289 [DEBUG] [Thread-198493] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:24:01.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:24:01.380 [DEBUG] [Thread-198496] [transport.py] [_log()] starting thread (client mode): 0xae563ca0
2026-04-13T00:24:01.380 [DEBUG] [Thread-198496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:24:01.395 [DEBUG] [Thread-198496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:24:01.395 [INFO] [Thread-198496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:24:01.403 [DEBUG] [Thread-198496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] client lang: <none>
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] server lang: <none>
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] kex follows: False
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:24:01.404 [DEBUG] [Thread-198496] [transport.py] [_log()] Compression: none
2026-04-13T00:24:01.405 [DEBUG] [Thread-198496] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:24:01.461 [DEBUG] [Thread-198496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:24:01.462 [DEBUG] [Thread-198496] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:24:01.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:24:01.462 [DEBUG] [Thread-198496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:24:01.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:24:01.525 [DEBUG] [Thread-198496] [transport.py] [_log()] userauth is OK
2026-04-13T00:24:01.525 [DEBUG] [Thread-198496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:24:01.525 [DEBUG] [Thread-198496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:24:01.525 [DEBUG] [Thread-198496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:24:01.525 [DEBUG] [Thread-198496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:24:01.540 [INFO] [Thread-198496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:24:01.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:24:01.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:24:02.357 [DEBUG] [Thread-198496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:24:02.358 [DEBUG] [Thread-198496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:24:02.408 [DEBUG] [Thread-198496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:24:02.408 [DEBUG] [Thread-198496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:24:02.417 [DEBUG] [Thread-198496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:24:02.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:24:02.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:24:02.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:24:02.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:24:02.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:24:02.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:24:02.455 [DEBUG] [Thread-198496] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:24:11.019 [DEBUG] [Thread-198498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:24:24.426 [DEBUG] [Thread-198499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:24:26.072 [DEBUG] [Thread-198500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:24:32.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:24:32.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:24: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
2026-04-13T00:24:33.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 23, 53), 1.01029, 93.4151, 0.0, 11.9635, 10.806, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:24:33.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:23:53
2026-04-13T00:24:34.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:24:34.458 [DEBUG] [Thread-198501] [transport.py] [_log()] starting thread (client mode): 0xae51b790
2026-04-13T00:24:34.458 [DEBUG] [Thread-198501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:24:34.479 [DEBUG] [Thread-198501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:24:34.479 [INFO] [Thread-198501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] client lang: <none>
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] server lang: <none>
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] kex follows: False
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] Compression: none
2026-04-13T00:24:34.482 [DEBUG] [Thread-198501] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:24:34.500 [DEBUG] [Thread-198501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:24:34.500 [DEBUG] [Thread-198501] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:24:34.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:24:34.502 [DEBUG] [Thread-198501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:24:34.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:24:34.504 [DEBUG] [Thread-198501] [transport.py] [_log()] userauth is OK
2026-04-13T00:24:34.504 [DEBUG] [Thread-198501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:24:34.504 [DEBUG] [Thread-198501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:24:34.504 [DEBUG] [Thread-198501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:24:34.505 [DEBUG] [Thread-198501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:24:34.527 [INFO] [Thread-198501] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:24:34.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:24:35.208 [DEBUG] [Thread-198501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:24:35.208 [DEBUG] [Thread-198501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:24:35.209 [DEBUG] [Thread-198501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:24:35.249 [DEBUG] [Thread-198501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:24:35.249 [DEBUG] [Thread-198501] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:24:35.253 [DEBUG] [Thread-198501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:24:35.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:24:35.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:24:35.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:24:35.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:24:35.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:24:35.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:24:35.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:24:35.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:24:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:24:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.933434 -999.00  +10.90   5.22     91   +9.50 1 2 1 3 1     0    0 1.57 6.63 ..... 5.2 5.2 206.5 6.2 11.6 -22.4 11.5 -21.4 11.2 -19.4 11.4 -21.4
2026-04-13T00:24:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:24:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:24:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.933434
2026-04-13T00:24:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:24:35.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:24:35.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:24:35.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:24:35.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:24:35.279 [DEBUG] [Thread-198501] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:24:35.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:23:53', tmtdew=1.01029, humidity=93.4151, cloud=0.0, wind=11.9635, temperature=10.806, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:24:08.698', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:24:35.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:24:35.376 [DEBUG] [Thread-198504] [transport.py] [_log()] starting thread (client mode): 0xae5195d0
2026-04-13T00:24:35.376 [DEBUG] [Thread-198504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:24:35.391 [DEBUG] [Thread-198504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:24:35.391 [INFO] [Thread-198504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:24:35.398 [DEBUG] [Thread-198504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] client lang: <none>
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] server lang: <none>
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] kex follows: False
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:24:35.399 [DEBUG] [Thread-198504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:24:35.400 [DEBUG] [Thread-198504] [transport.py] [_log()] Compression: none
2026-04-13T00:24:35.400 [DEBUG] [Thread-198504] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:24:35.457 [DEBUG] [Thread-198504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:24:35.458 [DEBUG] [Thread-198504] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:24:35.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:24:35.459 [DEBUG] [Thread-198504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:24:35.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:24:35.513 [DEBUG] [Thread-198504] [transport.py] [_log()] userauth is OK
2026-04-13T00:24:35.514 [DEBUG] [Thread-198504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:24:35.514 [DEBUG] [Thread-198504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:24:35.514 [DEBUG] [Thread-198504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:24:35.514 [DEBUG] [Thread-198504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:24:35.534 [INFO] [Thread-198504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:24:35.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:24:35.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:24:36.332 [DEBUG] [Thread-198504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:24:36.332 [DEBUG] [Thread-198504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:24:36.380 [DEBUG] [Thread-198504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:24:36.380 [DEBUG] [Thread-198504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:24:36.389 [DEBUG] [Thread-198504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:24:36.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:24: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')
2026-04-13T00:24:36.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:24:36.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:24:36.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:24:36.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:24:36.426 [DEBUG] [Thread-198504] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:24:41.108 [DEBUG] [Thread-198506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:24:56.160 [DEBUG] [Thread-198507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:24:57.086 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:24:57.088 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:25:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:25:06.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:25:06.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:25:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 24, 28), 1.21273, 91.6578, 0.0, 9.49356, 10.8033, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:25:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:24:28
2026-04-13T00:25:08.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:25:08.312 [DEBUG] [Thread-198508] [transport.py] [_log()] starting thread (client mode): 0xae562d10
2026-04-13T00:25:08.313 [DEBUG] [Thread-198508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:25:08.333 [DEBUG] [Thread-198508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:25:08.334 [INFO] [Thread-198508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:25:08.336 [DEBUG] [Thread-198508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] client lang: <none>
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] server lang: <none>
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] kex follows: False
2026-04-13T00:25:08.337 [DEBUG] [Thread-198508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:25:08.338 [DEBUG] [Thread-198508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:25:08.338 [DEBUG] [Thread-198508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:25:08.338 [DEBUG] [Thread-198508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:25:08.338 [DEBUG] [Thread-198508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:25:08.338 [DEBUG] [Thread-198508] [transport.py] [_log()] Compression: none
2026-04-13T00:25:08.338 [DEBUG] [Thread-198508] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:25:08.355 [DEBUG] [Thread-198508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:25:08.356 [DEBUG] [Thread-198508] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:25:08.356 [DEBUG] [Thread-198508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:25:08.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:25:08.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:25:08.358 [DEBUG] [Thread-198508] [transport.py] [_log()] userauth is OK
2026-04-13T00:25:08.359 [DEBUG] [Thread-198508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:25:08.359 [DEBUG] [Thread-198508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:25:08.359 [DEBUG] [Thread-198508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:25:08.359 [DEBUG] [Thread-198508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:25:08.383 [INFO] [Thread-198508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:25:08.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:25:09.207 [DEBUG] [Thread-198508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:25:09.207 [DEBUG] [Thread-198508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:25:09.207 [DEBUG] [Thread-198508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:25:09.248 [DEBUG] [Thread-198508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:25:09.248 [DEBUG] [Thread-198508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:25:09.251 [DEBUG] [Thread-198508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:25:09.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:25:09.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:25:09.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:25:09.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:25:09.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:25:09.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:25:09.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:25:09.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:25:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:25:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.933781 -999.00  +10.90   4.73     91   +9.50 1 2 1 3 1     0    0 1.61 7.12 ..... 4.7 4.7 241.0 6.7 11.6 -22.6 11.4 -21.4 11.1 -19.4 11.4 -21.4
2026-04-13T00:25:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:25:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:25:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.933781
2026-04-13T00:25:09.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:25:09.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:25:09.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:25:09.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:25:09.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:25:09.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:24:28', tmtdew=1.21273, humidity=91.6578, cloud=0.0, wind=9.49356, temperature=10.8033, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:24:38.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:25:09.306 [DEBUG] [Thread-198508] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:25:09.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:25:09.400 [DEBUG] [Thread-198511] [transport.py] [_log()] starting thread (client mode): 0xae563580
2026-04-13T00:25:09.400 [DEBUG] [Thread-198511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:25:09.416 [DEBUG] [Thread-198511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:25:09.416 [INFO] [Thread-198511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:25:09.423 [DEBUG] [Thread-198511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:25:09.423 [DEBUG] [Thread-198511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] client lang: <none>
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] server lang: <none>
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] kex follows: False
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] Compression: none
2026-04-13T00:25:09.424 [DEBUG] [Thread-198511] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:25:09.484 [DEBUG] [Thread-198511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:25:09.485 [DEBUG] [Thread-198511] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:25:09.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:25:09.486 [DEBUG] [Thread-198511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:25:09.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:25:09.540 [DEBUG] [Thread-198511] [transport.py] [_log()] userauth is OK
2026-04-13T00:25:09.541 [DEBUG] [Thread-198511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:25:09.541 [DEBUG] [Thread-198511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:25:09.541 [DEBUG] [Thread-198511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:25:09.541 [DEBUG] [Thread-198511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:25:09.559 [INFO] [Thread-198511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:25:09.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:25:09.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:25:10.414 [DEBUG] [Thread-198511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:25:10.414 [DEBUG] [Thread-198511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:25:10.462 [DEBUG] [Thread-198511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:25:10.462 [DEBUG] [Thread-198511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:25:10.471 [DEBUG] [Thread-198511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:25:10.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:25:10.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:25:10.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:25:10.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:25:10.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:25:10.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:25:10.506 [DEBUG] [Thread-198511] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:25:11.197 [DEBUG] [Thread-198513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:25:24.493 [DEBUG] [Thread-198514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:25:26.255 [DEBUG] [Thread-198515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:25:40.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:25:40.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:25:40.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:25:41.293 [DEBUG] [Thread-198516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:25:41.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 25, 4), 1.21045, 91.6744, 0.0, 9.56412, 10.853, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:25:41.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:25:04
2026-04-13T00:25:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:25:42.394 [DEBUG] [Thread-198517] [transport.py] [_log()] starting thread (client mode): 0xae51b4c0
2026-04-13T00:25:42.394 [DEBUG] [Thread-198517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:25:42.414 [DEBUG] [Thread-198517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:25:42.414 [INFO] [Thread-198517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:25:42.417 [DEBUG] [Thread-198517] [transport.py] [_log()] client lang: <none>
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] server lang: <none>
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] kex follows: False
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] Compression: none
2026-04-13T00:25:42.418 [DEBUG] [Thread-198517] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:25:42.433 [DEBUG] [Thread-198517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:25:42.434 [DEBUG] [Thread-198517] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:25:42.435 [DEBUG] [Thread-198517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:25:42.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:25:42.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:25:42.440 [DEBUG] [Thread-198517] [transport.py] [_log()] userauth is OK
2026-04-13T00:25:42.440 [DEBUG] [Thread-198517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:25:42.440 [DEBUG] [Thread-198517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:25:42.441 [DEBUG] [Thread-198517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:25:42.441 [DEBUG] [Thread-198517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:25:42.464 [INFO] [Thread-198517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:25:42.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:25:43.123 [DEBUG] [Thread-198517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:25:43.123 [DEBUG] [Thread-198517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:25:43.124 [DEBUG] [Thread-198517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:25:43.165 [DEBUG] [Thread-198517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:25:43.165 [DEBUG] [Thread-198517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:25:43.169 [DEBUG] [Thread-198517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:25:43.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:25:43.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:25:43.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:25:43.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:25:43.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:25:43.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:25:43.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:25:43.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:25:43.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:25:43.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.934128 -999.00  +10.90   5.36     91   +9.50 1 2 1 3 1     0    0 1.61 7.33 ..... 5.4 5.4 237.2 6.7 11.6 -22.5 11.4 -21.4 11.2 -19.3 11.4 -21.3
2026-04-13T00:25:43.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:25:43.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:25:43.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.934128
2026-04-13T00:25:43.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:25:43.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:25:43.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:25:43.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:25:43.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:25:43.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:25:04', tmtdew=1.21045, humidity=91.6744, cloud=0.0, wind=9.56412, temperature=10.853, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:25:08.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:25:43.196 [DEBUG] [Thread-198517] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:25:43.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:25:43.290 [DEBUG] [Thread-198520] [transport.py] [_log()] starting thread (client mode): 0xae51bfd0
2026-04-13T00:25:43.291 [DEBUG] [Thread-198520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:25:43.305 [DEBUG] [Thread-198520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:25:43.305 [INFO] [Thread-198520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:25:43.313 [DEBUG] [Thread-198520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:25:43.313 [DEBUG] [Thread-198520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:25:43.313 [DEBUG] [Thread-198520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:25:43.313 [DEBUG] [Thread-198520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] client lang: <none>
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] server lang: <none>
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] kex follows: False
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] Compression: none
2026-04-13T00:25:43.314 [DEBUG] [Thread-198520] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:25:43.371 [DEBUG] [Thread-198520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:25:43.372 [DEBUG] [Thread-198520] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:25:43.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:25:43.373 [DEBUG] [Thread-198520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:25:43.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:25:43.427 [DEBUG] [Thread-198520] [transport.py] [_log()] userauth is OK
2026-04-13T00:25:43.428 [DEBUG] [Thread-198520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:25:43.428 [DEBUG] [Thread-198520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:25:43.428 [DEBUG] [Thread-198520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:25:43.428 [DEBUG] [Thread-198520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:25:43.446 [INFO] [Thread-198520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:25:43.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:25:43.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:25:44.218 [DEBUG] [Thread-198520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:25:44.219 [DEBUG] [Thread-198520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:25:44.267 [DEBUG] [Thread-198520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:25:44.267 [DEBUG] [Thread-198520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:25:44.277 [DEBUG] [Thread-198520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:25:44.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:25:44.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:25:44.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:25:44.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:25:44.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:25:44.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:25:44.314 [DEBUG] [Thread-198520] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:25:56.336 [DEBUG] [Thread-198522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:25:57.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:25:57.293 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:26:11.389 [DEBUG] [Thread-198523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:26:14.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:26:14.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:26:14.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:26:15.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 25, 40), 1.02137, 93.3487, 0.0, 11.7166, 10.8724, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:26:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:25:40
2026-04-13T00:26:15.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:26:16.101 [DEBUG] [Thread-198524] [transport.py] [_log()] starting thread (client mode): 0xae51a8c0
2026-04-13T00:26:16.101 [DEBUG] [Thread-198524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:26:16.121 [DEBUG] [Thread-198524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:26:16.121 [INFO] [Thread-198524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:26:16.124 [DEBUG] [Thread-198524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:26:16.124 [DEBUG] [Thread-198524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:26:16.124 [DEBUG] [Thread-198524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] client lang: <none>
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] server lang: <none>
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] kex follows: False
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] Compression: none
2026-04-13T00:26:16.125 [DEBUG] [Thread-198524] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:26:16.141 [DEBUG] [Thread-198524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:26:16.141 [DEBUG] [Thread-198524] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:26:16.142 [DEBUG] [Thread-198524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:26:16.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:26:16.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:26:16.144 [DEBUG] [Thread-198524] [transport.py] [_log()] userauth is OK
2026-04-13T00:26:16.144 [DEBUG] [Thread-198524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:26:16.144 [DEBUG] [Thread-198524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:26:16.144 [DEBUG] [Thread-198524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:26:16.144 [DEBUG] [Thread-198524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:26:16.165 [INFO] [Thread-198524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:26:16.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:26:16.782 [DEBUG] [Thread-198524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:26:16.783 [DEBUG] [Thread-198524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:26:16.783 [DEBUG] [Thread-198524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:26:16.823 [DEBUG] [Thread-198524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:26:16.823 [DEBUG] [Thread-198524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:26:16.827 [DEBUG] [Thread-198524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:26:16.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:26:16.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:26:16.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:26:16.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:26:16.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:26:16.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:26:16.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:26:16.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:26:16.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:26:16.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.934476 -999.00  +10.90   3.38     91   +9.50 1 2 1 3 1     0    0 1.59 7.44 ..e.w 3.4 3.4 226.8 5.5 11.6 -22.4 11.5 -21.4 11.2 -19.4 11.4 -21.5
2026-04-13T00:26:16.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:26:16.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:26:16.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.934476
2026-04-13T00:26:16.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:26:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:26:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:26:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:26:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:26:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:25:40', tmtdew=1.02137, humidity=93.3487, cloud=0.0, wind=11.7166, temperature=10.8724, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:25:38.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:26:16.854 [DEBUG] [Thread-198524] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:26:16.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:26:16.950 [DEBUG] [Thread-198527] [transport.py] [_log()] starting thread (client mode): 0xae51ac80
2026-04-13T00:26:16.950 [DEBUG] [Thread-198527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:26:16.966 [DEBUG] [Thread-198527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:26:16.966 [INFO] [Thread-198527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:26:16.974 [DEBUG] [Thread-198527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:26:16.974 [DEBUG] [Thread-198527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:26:16.974 [DEBUG] [Thread-198527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] client lang: <none>
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] server lang: <none>
2026-04-13T00:26:16.975 [DEBUG] [Thread-198527] [transport.py] [_log()] kex follows: False
2026-04-13T00:26:16.976 [DEBUG] [Thread-198527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:26:16.976 [DEBUG] [Thread-198527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:26:16.976 [DEBUG] [Thread-198527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:26:16.976 [DEBUG] [Thread-198527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:26:16.976 [DEBUG] [Thread-198527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:26:16.976 [DEBUG] [Thread-198527] [transport.py] [_log()] Compression: none
2026-04-13T00:26:16.976 [DEBUG] [Thread-198527] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:26:17.037 [DEBUG] [Thread-198527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:26:17.037 [DEBUG] [Thread-198527] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:26:17.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:26:17.038 [DEBUG] [Thread-198527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:26:17.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:26:17.100 [DEBUG] [Thread-198527] [transport.py] [_log()] userauth is OK
2026-04-13T00:26:17.100 [DEBUG] [Thread-198527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:26:17.100 [DEBUG] [Thread-198527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:26:17.100 [DEBUG] [Thread-198527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:26:17.101 [DEBUG] [Thread-198527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:26:17.122 [INFO] [Thread-198527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:26:17.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:26:17.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:26:17.958 [DEBUG] [Thread-198527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:26:17.958 [DEBUG] [Thread-198527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:26:18.008 [DEBUG] [Thread-198527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:26:18.008 [DEBUG] [Thread-198527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:26:18.017 [DEBUG] [Thread-198527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:26:18.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:26:18.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:26:18.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:26:18.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:26:18.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:26:18.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:26:18.051 [DEBUG] [Thread-198527] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:26:24.570 [DEBUG] [Thread-198529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:26:26.427 [DEBUG] [Thread-198530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:26:41.483 [DEBUG] [Thread-198531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:26:48.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:26:48.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:26:48.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:26:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 26, 15), 1.22092, 92.108, 0.0, 8.8938, 10.8364, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:26:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:26:15
2026-04-13T00:26:49.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:26:49.873 [DEBUG] [Thread-198532] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa90
2026-04-13T00:26:49.873 [DEBUG] [Thread-198532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:26:49.893 [DEBUG] [Thread-198532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:26:49.893 [INFO] [Thread-198532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] client lang: <none>
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] server lang: <none>
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] kex follows: False
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] Compression: none
2026-04-13T00:26:49.895 [DEBUG] [Thread-198532] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:26:49.905 [DEBUG] [Thread-198532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:26:49.905 [DEBUG] [Thread-198532] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:26:49.906 [DEBUG] [Thread-198532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:26:49.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:26:49.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:26:49.907 [DEBUG] [Thread-198532] [transport.py] [_log()] userauth is OK
2026-04-13T00:26:49.908 [DEBUG] [Thread-198532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:26:49.908 [DEBUG] [Thread-198532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:26:49.908 [DEBUG] [Thread-198532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:26:49.908 [DEBUG] [Thread-198532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:26:49.925 [INFO] [Thread-198532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:26:49.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:26:50.504 [DEBUG] [Thread-198532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:26:50.504 [DEBUG] [Thread-198532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:26:50.504 [DEBUG] [Thread-198532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:26:50.545 [DEBUG] [Thread-198532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:26:50.545 [DEBUG] [Thread-198532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:26:50.547 [DEBUG] [Thread-198532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:26:50.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:26:50.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:26:50.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:26:50.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:26:50.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:26:50.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:26:50.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:26:50.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:26:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:26:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.935170 -999.00  +10.90   2.53     91   +9.50 1 2 1 3 1     0    0 1.65 8.83 ..E.W 2.5 2.5 241.6 5.4 11.6 -22.5 11.4 -21.4 11.1 -19.5 11.4 -21.3
2026-04-13T00:26:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:26:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:26:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.935170
2026-04-13T00:26:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:26:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:26:50.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:26:50.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:26:50.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:26:50.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:26:15', tmtdew=1.22092, humidity=92.108, cloud=0.0, wind=8.8938, temperature=10.8364, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:26:38.688', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.9814999999999987, nan, nan, nan, nan, nan, nan, 1.0927499999999997, 1.5709999999999997, nan, nan, 0.09199999999999875, nan, nan, 2.8505000000000003, 2.8519999999999985, 2.4472499999999986, 2.376999999999999, nan, 2.133250000000001, nan, 2.9049999999999994, 0.2865000000000002, 0.14175000000000004, 0.16549999999999976, 0.21300000000000097, 0.47000000000000064, 1.2540000000000013, 2.290000000000001, 2.4827499999999993], zp_timestamp='2026-04-12T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:26:50.571 [DEBUG] [Thread-198532] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:26:50.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:26:50.665 [DEBUG] [Thread-198535] [transport.py] [_log()] starting thread (client mode): 0xae5612a0
2026-04-13T00:26:50.665 [DEBUG] [Thread-198535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:26:50.683 [DEBUG] [Thread-198535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:26:50.683 [INFO] [Thread-198535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:26:50.690 [DEBUG] [Thread-198535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] client lang: <none>
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] server lang: <none>
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] kex follows: False
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:26:50.691 [DEBUG] [Thread-198535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:26:50.692 [DEBUG] [Thread-198535] [transport.py] [_log()] Compression: none
2026-04-13T00:26:50.692 [DEBUG] [Thread-198535] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:26:50.748 [DEBUG] [Thread-198535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:26:50.749 [DEBUG] [Thread-198535] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:26:50.749 [DEBUG] [Thread-198535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:26:50.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:26:50.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:26:50.804 [DEBUG] [Thread-198535] [transport.py] [_log()] userauth is OK
2026-04-13T00:26:50.805 [DEBUG] [Thread-198535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:26:50.805 [DEBUG] [Thread-198535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:26:50.805 [DEBUG] [Thread-198535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:26:50.805 [DEBUG] [Thread-198535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:26:50.825 [INFO] [Thread-198535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:26:50.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:26:50.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:26:51.652 [DEBUG] [Thread-198535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:26:51.653 [DEBUG] [Thread-198535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:26:51.700 [DEBUG] [Thread-198535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:26:51.701 [DEBUG] [Thread-198535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:26:51.709 [DEBUG] [Thread-198535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:26:51.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:26:51.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:26:51.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:26:51.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:26:51.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:26:51.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:26:51.743 [DEBUG] [Thread-198535] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:26:56.517 [DEBUG] [Thread-198537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:26:57.499 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:26:57.500 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:11.570 [DEBUG] [Thread-198538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:27:21.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:27:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:27:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 26, 50), 1.02618, 93.3156, 0.0, 11.1521, 10.8061, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:27:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:26:50
2026-04-13T00:27:23.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:27:23.573 [DEBUG] [Thread-198539] [transport.py] [_log()] starting thread (client mode): 0xa7958c10
2026-04-13T00:27:23.573 [DEBUG] [Thread-198539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:27:23.593 [DEBUG] [Thread-198539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:27:23.594 [INFO] [Thread-198539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:27:23.597 [DEBUG] [Thread-198539] [transport.py] [_log()] client lang: <none>
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] server lang: <none>
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] kex follows: False
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] Compression: none
2026-04-13T00:27:23.598 [DEBUG] [Thread-198539] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:27:23.617 [DEBUG] [Thread-198539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:27:23.618 [DEBUG] [Thread-198539] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:27:23.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:27:23.619 [DEBUG] [Thread-198539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:27:23.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:27:23.621 [DEBUG] [Thread-198539] [transport.py] [_log()] userauth is OK
2026-04-13T00:27:23.621 [DEBUG] [Thread-198539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:27:23.622 [DEBUG] [Thread-198539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:27:23.622 [DEBUG] [Thread-198539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:27:23.622 [DEBUG] [Thread-198539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:27:23.643 [INFO] [Thread-198539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:27:23.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:27:24.259 [DEBUG] [Thread-198539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:27:24.259 [DEBUG] [Thread-198539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:27:24.260 [DEBUG] [Thread-198539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:27:24.300 [DEBUG] [Thread-198539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:27:24.300 [DEBUG] [Thread-198539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:27:24.304 [DEBUG] [Thread-198539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:27:24.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:27:24.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:27:24.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:27:24.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:27:24.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:27:24.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:27:24.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:27:24.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:27:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:27:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.935517 -999.00  +10.90   2.81     91   +9.50 1 2 1 3 1     0    0 1.71 10.14 ..E.W 2.8 2.8 219.6 7.5 11.6 -22.4 11.4 -21.3 11.2 -19.4 11.4 -21.4
2026-04-13T00:27:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:27:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:27:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.935517
2026-04-13T00:27:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:27:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:27:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:27:24.325 [DEBUG] [Thread-198539] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:27:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:27:24.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:27:24.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:26:50', tmtdew=1.02618, humidity=93.3156, cloud=0.0, wind=11.1521, temperature=10.8061, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:27:08.669', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:27:24.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:27:24.419 [DEBUG] [Thread-198542] [transport.py] [_log()] starting thread (client mode): 0xa7959660
2026-04-13T00:27:24.419 [DEBUG] [Thread-198542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:27:24.433 [DEBUG] [Thread-198542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:27:24.433 [INFO] [Thread-198542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:27:24.441 [DEBUG] [Thread-198542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:27:24.441 [DEBUG] [Thread-198542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:27:24.441 [DEBUG] [Thread-198542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:27:24.441 [DEBUG] [Thread-198542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:24.441 [DEBUG] [Thread-198542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:24.441 [DEBUG] [Thread-198542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] client lang: <none>
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] server lang: <none>
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] kex follows: False
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] Compression: none
2026-04-13T00:27:24.442 [DEBUG] [Thread-198542] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:27:24.500 [DEBUG] [Thread-198542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:27:24.501 [DEBUG] [Thread-198542] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:27:24.501 [DEBUG] [Thread-198542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:27:24.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:27:24.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:27:24.556 [DEBUG] [Thread-198542] [transport.py] [_log()] userauth is OK
2026-04-13T00:27:24.556 [DEBUG] [Thread-198542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:27:24.557 [DEBUG] [Thread-198542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:27:24.557 [DEBUG] [Thread-198542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:27:24.557 [DEBUG] [Thread-198542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:27:24.576 [INFO] [Thread-198542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:27:24.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:27:24.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:27:24.660 [DEBUG] [Thread-198544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:25.365 [DEBUG] [Thread-198542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:27:25.365 [DEBUG] [Thread-198542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:27:25.413 [DEBUG] [Thread-198542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:27:25.413 [DEBUG] [Thread-198542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:27:25.422 [DEBUG] [Thread-198542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:27:25.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:27:25.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:27:25.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:27:25.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:27:25.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:27:25.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:27:25.460 [DEBUG] [Thread-198542] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:27:26.609 [DEBUG] [Thread-198545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:41.670 [DEBUG] [Thread-198546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:27:55.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:27:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:27:56.708 [DEBUG] [Thread-198547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 27, 26), 1.21815, 92.1246, 0.0, 9.52884, 10.8199, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:27:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:27:26
2026-04-13T00:27:57.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:27:57.240 [DEBUG] [Thread-198548] [transport.py] [_log()] starting thread (client mode): 0xa795ad70
2026-04-13T00:27:57.240 [DEBUG] [Thread-198548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:27:57.253 [DEBUG] [Thread-198548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:27:57.253 [INFO] [Thread-198548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] client lang: <none>
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] server lang: <none>
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] kex follows: False
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:27:57.254 [DEBUG] [Thread-198548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:27:57.255 [DEBUG] [Thread-198548] [transport.py] [_log()] Compression: none
2026-04-13T00:27:57.255 [DEBUG] [Thread-198548] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:27:57.270 [DEBUG] [Thread-198548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:27:57.270 [DEBUG] [Thread-198548] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:27:57.270 [DEBUG] [Thread-198548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:27:57.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:27:57.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:27:57.271 [DEBUG] [Thread-198548] [transport.py] [_log()] userauth is OK
2026-04-13T00:27:57.271 [DEBUG] [Thread-198548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:27:57.271 [DEBUG] [Thread-198548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:27:57.271 [DEBUG] [Thread-198548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:27:57.271 [DEBUG] [Thread-198548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:27:57.289 [INFO] [Thread-198548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:27:57.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:27:57.703 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:57.704 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:27:57.958 [DEBUG] [Thread-198548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:27:57.958 [DEBUG] [Thread-198548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:27:57.959 [DEBUG] [Thread-198548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:27:58.000 [DEBUG] [Thread-198548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:27:58.001 [DEBUG] [Thread-198548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:27:58.003 [DEBUG] [Thread-198548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:27:58.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:27:58.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:27:58.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:27:58.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:27:58.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:27:58.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:27:58.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:27:58.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:27:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:27:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.935865 -999.00  +10.90   4.65     91   +9.50 1 2 1 3 1     0    0 1.67 9.56 ..E.W 4.7 4.7 225.6 7.1 11.6 -22.5 11.4 -21.3 11.1 -19.3 11.4 -21.5
2026-04-13T00:27:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:27:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:27:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.935865
2026-04-13T00:27:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:27:58.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:27:58.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:27:58.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:27:58.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:27:58.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:27:26', tmtdew=1.21815, humidity=92.1246, cloud=0.0, wind=9.52884, temperature=10.8199, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:27:38.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:27:58.026 [DEBUG] [Thread-198548] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:27:58.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:27:58.122 [DEBUG] [Thread-198551] [transport.py] [_log()] starting thread (client mode): 0xb0fcf5e0
2026-04-13T00:27:58.122 [DEBUG] [Thread-198551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:27:58.136 [DEBUG] [Thread-198551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:27:58.137 [INFO] [Thread-198551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:27:58.144 [DEBUG] [Thread-198551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:27:58.144 [DEBUG] [Thread-198551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:27:58.144 [DEBUG] [Thread-198551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:27:58.144 [DEBUG] [Thread-198551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:58.144 [DEBUG] [Thread-198551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:27:58.144 [DEBUG] [Thread-198551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] client lang: <none>
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] server lang: <none>
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] kex follows: False
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:27:58.145 [DEBUG] [Thread-198551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:27:58.146 [DEBUG] [Thread-198551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:27:58.146 [DEBUG] [Thread-198551] [transport.py] [_log()] Compression: none
2026-04-13T00:27:58.146 [DEBUG] [Thread-198551] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:27:58.204 [DEBUG] [Thread-198551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:27:58.204 [DEBUG] [Thread-198551] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:27:58.205 [DEBUG] [Thread-198551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:27:58.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:27:58.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:27:58.264 [DEBUG] [Thread-198551] [transport.py] [_log()] userauth is OK
2026-04-13T00:27:58.264 [DEBUG] [Thread-198551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:27:58.264 [DEBUG] [Thread-198551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:27:58.264 [DEBUG] [Thread-198551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:27:58.265 [DEBUG] [Thread-198551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:27:58.284 [INFO] [Thread-198551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:27:58.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:27:58.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:27:59.092 [DEBUG] [Thread-198551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:27:59.093 [DEBUG] [Thread-198551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:27:59.141 [DEBUG] [Thread-198551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:27:59.141 [DEBUG] [Thread-198551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:27:59.150 [DEBUG] [Thread-198551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:27:59.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:27:59.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:27:59.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:27:59.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:27:59.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:27:59.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:27:59.194 [DEBUG] [Thread-198551] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:28:11.746 [DEBUG] [Thread-198553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:28:24.728 [DEBUG] [Thread-198554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:28:26.799 [DEBUG] [Thread-198555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:28:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:28:29.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:28:29.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:28:30.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 28, 1), 1.22067, 92.108, 0.0, 9.08784, 10.8033, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:28:30.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:28:01
2026-04-13T00:28:30.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:28:31.049 [DEBUG] [Thread-198556] [transport.py] [_log()] starting thread (client mode): 0xae5629b0
2026-04-13T00:28:31.049 [DEBUG] [Thread-198556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:28:31.070 [DEBUG] [Thread-198556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:28:31.070 [INFO] [Thread-198556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] client lang: <none>
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] server lang: <none>
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] kex follows: False
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:28:31.073 [DEBUG] [Thread-198556] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:28:31.074 [DEBUG] [Thread-198556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:28:31.074 [DEBUG] [Thread-198556] [transport.py] [_log()] Compression: none
2026-04-13T00:28:31.074 [DEBUG] [Thread-198556] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:28:31.092 [DEBUG] [Thread-198556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:28:31.093 [DEBUG] [Thread-198556] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:28:31.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:28:31.094 [DEBUG] [Thread-198556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:28:31.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:28:31.096 [DEBUG] [Thread-198556] [transport.py] [_log()] userauth is OK
2026-04-13T00:28:31.096 [DEBUG] [Thread-198556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:28:31.096 [DEBUG] [Thread-198556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:28:31.096 [DEBUG] [Thread-198556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:28:31.096 [DEBUG] [Thread-198556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:28:31.133 [INFO] [Thread-198556] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:28:31.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:28:31.914 [DEBUG] [Thread-198556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:28:31.914 [DEBUG] [Thread-198556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:28:31.915 [DEBUG] [Thread-198556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:28:31.955 [DEBUG] [Thread-198556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:28:31.955 [DEBUG] [Thread-198556] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:28:31.958 [DEBUG] [Thread-198556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:28:31.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:28:31.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:28:31.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:28:31.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:28:31.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:28:31.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:28:31.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:28:31.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:28:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:28:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.935865 -999.00  +10.90   4.65     91   +9.50 1 2 1 3 1     0    0 1.67 9.56 ..E.W 4.7 4.7 225.6 7.1 11.6 -22.5 11.4 -21.3 11.1 -19.3 11.4 -21.5
2026-04-13T00:28:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:28:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:28:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.935865
2026-04-13T00:28:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:28:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:28:31.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:28:31.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:28:31.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:28:31.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:28:01', tmtdew=1.22067, humidity=92.108, cloud=0.0, wind=9.08784, temperature=10.8033, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:27:38.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:28:31.979 [DEBUG] [Thread-198556] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:28:32.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:28:32.072 [DEBUG] [Thread-198559] [transport.py] [_log()] starting thread (client mode): 0xb0fcc880
2026-04-13T00:28:32.072 [DEBUG] [Thread-198559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:28:32.088 [DEBUG] [Thread-198559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:28:32.088 [INFO] [Thread-198559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:28:32.096 [DEBUG] [Thread-198559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:28:32.096 [DEBUG] [Thread-198559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:28:32.096 [DEBUG] [Thread-198559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] client lang: <none>
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] server lang: <none>
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] kex follows: False
2026-04-13T00:28:32.097 [DEBUG] [Thread-198559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:28:32.098 [DEBUG] [Thread-198559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:28:32.098 [DEBUG] [Thread-198559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:28:32.098 [DEBUG] [Thread-198559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:28:32.098 [DEBUG] [Thread-198559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:28:32.098 [DEBUG] [Thread-198559] [transport.py] [_log()] Compression: none
2026-04-13T00:28:32.098 [DEBUG] [Thread-198559] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:28:32.155 [DEBUG] [Thread-198559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:28:32.156 [DEBUG] [Thread-198559] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:28:32.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:28:32.157 [DEBUG] [Thread-198559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:28:32.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:28:32.215 [DEBUG] [Thread-198559] [transport.py] [_log()] userauth is OK
2026-04-13T00:28:32.215 [DEBUG] [Thread-198559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:28:32.215 [DEBUG] [Thread-198559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:28:32.215 [DEBUG] [Thread-198559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:28:32.216 [DEBUG] [Thread-198559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:28:32.240 [INFO] [Thread-198559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:28:32.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:28:32.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:28:33.087 [DEBUG] [Thread-198559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:28:33.087 [DEBUG] [Thread-198559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:28:33.136 [DEBUG] [Thread-198559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:28:33.136 [DEBUG] [Thread-198559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:28:33.145 [DEBUG] [Thread-198559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:28:33.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:28:33.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:28:33.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:28:33.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:28:33.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:28:33.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:28:33.182 [DEBUG] [Thread-198559] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:28:41.836 [DEBUG] [Thread-198561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:28:56.888 [DEBUG] [Thread-198562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:28:57.919 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:28:57.920 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:29:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:29:03.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:29:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:29:04.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 28, 37), 1.03703, 93.2493, 0.0, 11.8224, 10.8392, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:29:04.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:28:37
2026-04-13T00:29:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:29:04.994 [DEBUG] [Thread-198563] [transport.py] [_log()] starting thread (client mode): 0xae5606a0
2026-04-13T00:29:04.994 [DEBUG] [Thread-198563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:29:05.015 [DEBUG] [Thread-198563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:29:05.015 [INFO] [Thread-198563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:29:05.018 [DEBUG] [Thread-198563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:29:05.018 [DEBUG] [Thread-198563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] client lang: <none>
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] server lang: <none>
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] kex follows: False
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] Compression: none
2026-04-13T00:29:05.019 [DEBUG] [Thread-198563] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:29:05.037 [DEBUG] [Thread-198563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:29:05.038 [DEBUG] [Thread-198563] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:29:05.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:29:05.039 [DEBUG] [Thread-198563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:29:05.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:29:05.041 [DEBUG] [Thread-198563] [transport.py] [_log()] userauth is OK
2026-04-13T00:29:05.041 [DEBUG] [Thread-198563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:29:05.042 [DEBUG] [Thread-198563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:29:05.042 [DEBUG] [Thread-198563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:29:05.042 [DEBUG] [Thread-198563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:29:05.067 [INFO] [Thread-198563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:29:05.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:29:05.836 [DEBUG] [Thread-198563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:29:05.837 [DEBUG] [Thread-198563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:29:05.837 [DEBUG] [Thread-198563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:29:05.878 [DEBUG] [Thread-198563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:29:05.878 [DEBUG] [Thread-198563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:29:05.881 [DEBUG] [Thread-198563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:29:05.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:29:05.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:29:05.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:29:05.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:29:05.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:29:05.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:29:05.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:29:05.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:29:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:29:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.936212 -999.00  +10.90   4.18     91   +9.50 1 2 1 3 1     0    0 1.66 9.60 ..E.W 4.2 4.2 217.2 7.5 11.6 -22.6 11.4 -21.4 11.2 -19.3 11.4 -21.2
2026-04-13T00:29:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:29:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:29:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.936212
2026-04-13T00:29:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:29:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:29:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:29:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:29:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:29:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:28:37', tmtdew=1.03703, humidity=93.2493, cloud=0.0, wind=11.8224, temperature=10.8392, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:28:08.717', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:29:05.909 [DEBUG] [Thread-198563] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:29:05.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:29:06.002 [DEBUG] [Thread-198566] [transport.py] [_log()] starting thread (client mode): 0xae560610
2026-04-13T00:29:06.003 [DEBUG] [Thread-198566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:29:06.017 [DEBUG] [Thread-198566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:29:06.018 [INFO] [Thread-198566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:29:06.025 [DEBUG] [Thread-198566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:29:06.026 [DEBUG] [Thread-198566] [transport.py] [_log()] client lang: <none>
2026-04-13T00:29:06.027 [DEBUG] [Thread-198566] [transport.py] [_log()] server lang: <none>
2026-04-13T00:29:06.027 [DEBUG] [Thread-198566] [transport.py] [_log()] kex follows: False
2026-04-13T00:29:06.027 [DEBUG] [Thread-198566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:29:06.027 [DEBUG] [Thread-198566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:29:06.027 [DEBUG] [Thread-198566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:29:06.027 [DEBUG] [Thread-198566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:29:06.027 [DEBUG] [Thread-198566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:29:06.028 [DEBUG] [Thread-198566] [transport.py] [_log()] Compression: none
2026-04-13T00:29:06.028 [DEBUG] [Thread-198566] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:29:06.087 [DEBUG] [Thread-198566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:29:06.088 [DEBUG] [Thread-198566] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:29:06.089 [DEBUG] [Thread-198566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:29:06.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:29:06.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:29:06.146 [DEBUG] [Thread-198566] [transport.py] [_log()] userauth is OK
2026-04-13T00:29:06.146 [DEBUG] [Thread-198566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:29:06.146 [DEBUG] [Thread-198566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:29:06.147 [DEBUG] [Thread-198566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:29:06.147 [DEBUG] [Thread-198566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:29:06.166 [INFO] [Thread-198566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:29:06.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:29:06.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:29:06.986 [DEBUG] [Thread-198566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:29:06.986 [DEBUG] [Thread-198566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:29:07.034 [DEBUG] [Thread-198566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:29:07.034 [DEBUG] [Thread-198566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:29:07.045 [DEBUG] [Thread-198566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:29:07.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:29:07.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:29:07.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
2026-04-13T00:29:07.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:29:07.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:29:07.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:29:07.086 [DEBUG] [Thread-198566] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:29:11.925 [DEBUG] [Thread-198568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:29:24.795 [DEBUG] [Thread-198569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:29:26.988 [DEBUG] [Thread-198570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:29:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:29:37.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:29:37.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:29:38.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 29, 12), 1.27129, 92.108, 0.0, 9.28188, 10.8862, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:29:38.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:29:12
2026-04-13T00:29:38.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:29:38.953 [DEBUG] [Thread-198571] [transport.py] [_log()] starting thread (client mode): 0xb0fcccd0
2026-04-13T00:29:38.953 [DEBUG] [Thread-198571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:29:38.974 [DEBUG] [Thread-198571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:29:38.975 [INFO] [Thread-198571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] client lang: <none>
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] server lang: <none>
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] kex follows: False
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:29:38.978 [DEBUG] [Thread-198571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:29:38.979 [DEBUG] [Thread-198571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:29:38.979 [DEBUG] [Thread-198571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:29:38.979 [DEBUG] [Thread-198571] [transport.py] [_log()] Compression: none
2026-04-13T00:29:38.979 [DEBUG] [Thread-198571] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:29:38.997 [DEBUG] [Thread-198571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:29:38.997 [DEBUG] [Thread-198571] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:29:38.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:29:38.998 [DEBUG] [Thread-198571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:29:38.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:29:39.000 [DEBUG] [Thread-198571] [transport.py] [_log()] userauth is OK
2026-04-13T00:29:39.001 [DEBUG] [Thread-198571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:29:39.001 [DEBUG] [Thread-198571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:29:39.001 [DEBUG] [Thread-198571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:29:39.001 [DEBUG] [Thread-198571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:29:39.024 [INFO] [Thread-198571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:29:39.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:29:39.804 [DEBUG] [Thread-198571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:29:39.804 [DEBUG] [Thread-198571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:29:39.805 [DEBUG] [Thread-198571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:29:39.845 [DEBUG] [Thread-198571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:29:39.845 [DEBUG] [Thread-198571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:29:39.849 [DEBUG] [Thread-198571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:29:39.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:29:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:29:39.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:29:39.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:29:39.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:29:39.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:29:39.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:29:39.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:29:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:29:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.936559 -999.00  +10.90   4.34     91   +9.50 1 2 1 3 1     0    0 1.66 9.50 ..E.W 4.3 4.3 228.8 6.3 11.5 -22.5 11.4 -21.3 11.2 -19.3 11.4 -21.3
2026-04-13T00:29:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:29:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:29:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.936559
2026-04-13T00:29:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:29:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:29:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:29:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:29:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:29:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:29:12', tmtdew=1.27129, humidity=92.108, cloud=0.0, wind=9.28188, temperature=10.8862, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:28:38.698', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:29:39.870 [DEBUG] [Thread-198571] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:29:39.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:29:39.972 [DEBUG] [Thread-198574] [transport.py] [_log()] starting thread (client mode): 0xae560550
2026-04-13T00:29:39.972 [DEBUG] [Thread-198574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:29:39.986 [DEBUG] [Thread-198574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:29:39.986 [INFO] [Thread-198574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] client lang: <none>
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] server lang: <none>
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] kex follows: False
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:29:39.994 [DEBUG] [Thread-198574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:29:39.995 [DEBUG] [Thread-198574] [transport.py] [_log()] Compression: none
2026-04-13T00:29:39.995 [DEBUG] [Thread-198574] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:29:40.054 [DEBUG] [Thread-198574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:29:40.054 [DEBUG] [Thread-198574] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:29:40.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:29:40.056 [DEBUG] [Thread-198574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:29:40.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:29:40.113 [DEBUG] [Thread-198574] [transport.py] [_log()] userauth is OK
2026-04-13T00:29:40.113 [DEBUG] [Thread-198574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:29:40.114 [DEBUG] [Thread-198574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:29:40.114 [DEBUG] [Thread-198574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:29:40.114 [DEBUG] [Thread-198574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:29:40.133 [INFO] [Thread-198574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:29:40.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:29:40.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:29:40.929 [DEBUG] [Thread-198574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:29:40.929 [DEBUG] [Thread-198574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:29:40.977 [DEBUG] [Thread-198574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:29:40.977 [DEBUG] [Thread-198574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:29:40.986 [DEBUG] [Thread-198574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:29:40.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:29:40.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:29:41.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:29:41.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:29:41.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:29:41.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:29:41.024 [DEBUG] [Thread-198574] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:29:42.027 [DEBUG] [Thread-198576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:29:57.091 [DEBUG] [Thread-198577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:29:58.126 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:29:58.127 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:30:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:30:11.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:30:11.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:30:12.131 [DEBUG] [Thread-198578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:30:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 29, 48), 1.0474, 93.1829, 0.0, 12.1752, 10.8061, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:30:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:29:48
2026-04-13T00:30:12.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:30:12.997 [DEBUG] [Thread-198579] [transport.py] [_log()] starting thread (client mode): 0xb0fcea10
2026-04-13T00:30:12.998 [DEBUG] [Thread-198579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:30:13.017 [DEBUG] [Thread-198579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:30:13.017 [INFO] [Thread-198579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:30:13.020 [DEBUG] [Thread-198579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] client lang: <none>
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] server lang: <none>
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] kex follows: False
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:30:13.021 [DEBUG] [Thread-198579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:30:13.022 [DEBUG] [Thread-198579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:30:13.022 [DEBUG] [Thread-198579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:30:13.022 [DEBUG] [Thread-198579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:30:13.022 [DEBUG] [Thread-198579] [transport.py] [_log()] Compression: none
2026-04-13T00:30:13.022 [DEBUG] [Thread-198579] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:30:13.042 [DEBUG] [Thread-198579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:30:13.042 [DEBUG] [Thread-198579] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:30:13.043 [DEBUG] [Thread-198579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:30:13.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:30:13.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:30:13.045 [DEBUG] [Thread-198579] [transport.py] [_log()] userauth is OK
2026-04-13T00:30:13.045 [DEBUG] [Thread-198579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:30:13.045 [DEBUG] [Thread-198579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:30:13.046 [DEBUG] [Thread-198579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:30:13.046 [DEBUG] [Thread-198579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:30:13.069 [INFO] [Thread-198579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:30:13.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:30:14.338 [DEBUG] [Thread-198579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:30:14.339 [DEBUG] [Thread-198579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:30:14.339 [DEBUG] [Thread-198579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:30:14.379 [DEBUG] [Thread-198579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:30:14.379 [DEBUG] [Thread-198579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:30:14.383 [DEBUG] [Thread-198579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:30:14.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:30:14.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:30:14.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:30:14.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:30:14.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:30:14.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:30:14.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:30:14.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:30:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:30:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.936906 -999.00  +10.90   3.13     91   +9.50 1 2 1 3 1     0    0 1.65 9.12 ..E.W 3.1 3.1 212.3 6.5 11.5 -22.5 11.4 -21.3 11.2 -19.4 11.4 -21.3
2026-04-13T00:30:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:30:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:30:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.936906
2026-04-13T00:30:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:30:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:30:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:30:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:30:14.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:30:14.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:29:48', tmtdew=1.0474, humidity=93.1829, cloud=0.0, wind=12.1752, temperature=10.8061, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:29:08.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:30:14.414 [DEBUG] [Thread-198579] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:30:14.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:30:14.509 [DEBUG] [Thread-198582] [transport.py] [_log()] starting thread (client mode): 0xae5629b0
2026-04-13T00:30:14.509 [DEBUG] [Thread-198582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:30:14.523 [DEBUG] [Thread-198582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:30:14.524 [INFO] [Thread-198582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:30:14.531 [DEBUG] [Thread-198582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] client lang: <none>
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] server lang: <none>
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] kex follows: False
2026-04-13T00:30:14.532 [DEBUG] [Thread-198582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:30:14.533 [DEBUG] [Thread-198582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:30:14.533 [DEBUG] [Thread-198582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:30:14.533 [DEBUG] [Thread-198582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:30:14.533 [DEBUG] [Thread-198582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:30:14.533 [DEBUG] [Thread-198582] [transport.py] [_log()] Compression: none
2026-04-13T00:30:14.533 [DEBUG] [Thread-198582] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:30:14.591 [DEBUG] [Thread-198582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:30:14.592 [DEBUG] [Thread-198582] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:30:14.592 [DEBUG] [Thread-198582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:30:14.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:30:14.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:30:14.648 [DEBUG] [Thread-198582] [transport.py] [_log()] userauth is OK
2026-04-13T00:30:14.648 [DEBUG] [Thread-198582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:30:14.648 [DEBUG] [Thread-198582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:30:14.648 [DEBUG] [Thread-198582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:30:14.648 [DEBUG] [Thread-198582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:30:14.666 [INFO] [Thread-198582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:30:14.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:30:14.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:30:15.474 [DEBUG] [Thread-198582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:30:15.474 [DEBUG] [Thread-198582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:30:15.522 [DEBUG] [Thread-198582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:30:15.522 [DEBUG] [Thread-198582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:30:15.532 [DEBUG] [Thread-198582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:30:15.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:30:15.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:30:15.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:30:15.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:30:15.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:30:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:30:15.569 [DEBUG] [Thread-198582] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:30:24.872 [DEBUG] [Thread-198584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:30:27.171 [DEBUG] [Thread-198585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:30:42.234 [DEBUG] [Thread-198586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:30:45.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:30:45.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:30:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:30:46.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 30, 23), 1.27622, 91.5749, 0.0, 9.75816, 10.8364, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:30:46.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:30:23
2026-04-13T00:30:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:30:47.412 [DEBUG] [Thread-198587] [transport.py] [_log()] starting thread (client mode): 0xae5f1ae0
2026-04-13T00:30:47.412 [DEBUG] [Thread-198587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:30:47.432 [DEBUG] [Thread-198587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:30:47.432 [INFO] [Thread-198587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:30:47.435 [DEBUG] [Thread-198587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:30:47.435 [DEBUG] [Thread-198587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:30:47.435 [DEBUG] [Thread-198587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] client lang: <none>
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] server lang: <none>
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] kex follows: False
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:30:47.436 [DEBUG] [Thread-198587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:30:47.437 [DEBUG] [Thread-198587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:30:47.437 [DEBUG] [Thread-198587] [transport.py] [_log()] Compression: none
2026-04-13T00:30:47.437 [DEBUG] [Thread-198587] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:30:47.458 [DEBUG] [Thread-198587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:30:47.458 [DEBUG] [Thread-198587] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:30:47.459 [DEBUG] [Thread-198587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:30:47.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:30:47.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:30:47.461 [DEBUG] [Thread-198587] [transport.py] [_log()] userauth is OK
2026-04-13T00:30:47.461 [DEBUG] [Thread-198587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:30:47.461 [DEBUG] [Thread-198587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:30:47.461 [DEBUG] [Thread-198587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:30:47.461 [DEBUG] [Thread-198587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:30:47.495 [INFO] [Thread-198587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:30:47.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:30:48.253 [DEBUG] [Thread-198587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:30:48.253 [DEBUG] [Thread-198587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:30:48.253 [DEBUG] [Thread-198587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:30:48.294 [DEBUG] [Thread-198587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:30:48.294 [DEBUG] [Thread-198587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:30:48.296 [DEBUG] [Thread-198587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:30:48.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:30:48.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:30:48.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:30:48.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:30:48.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:30:48.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:30:48.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:30:48.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:30:48.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:30:48.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.937600 -999.00  +10.80   5.90     91   +9.40 1 2 1 3 1     0    0 1.63 8.18 ..... 5.9 5.9 215.0 7.3 11.5 -22.5 11.4 -21.4 11.1 -19.4 11.4 -21.3
2026-04-13T00:30:48.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:30:48.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:30:48.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.937600
2026-04-13T00:30:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:30:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:30:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:30:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:30:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:30:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:30:23', tmtdew=1.27622, humidity=91.5749, cloud=0.0, wind=9.75816, temperature=10.8364, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:30:08.640', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:30:48.321 [DEBUG] [Thread-198587] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:30:48.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:30:48.413 [DEBUG] [Thread-198590] [transport.py] [_log()] starting thread (client mode): 0xae5f1510
2026-04-13T00:30:48.413 [DEBUG] [Thread-198590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:30:48.428 [DEBUG] [Thread-198590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:30:48.428 [INFO] [Thread-198590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:30:48.436 [DEBUG] [Thread-198590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] client lang: <none>
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] server lang: <none>
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] kex follows: False
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] Compression: none
2026-04-13T00:30:48.437 [DEBUG] [Thread-198590] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:30:48.495 [DEBUG] [Thread-198590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:30:48.496 [DEBUG] [Thread-198590] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:30:48.496 [DEBUG] [Thread-198590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:30:48.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:30:48.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:30:48.551 [DEBUG] [Thread-198590] [transport.py] [_log()] userauth is OK
2026-04-13T00:30:48.551 [DEBUG] [Thread-198590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:30:48.551 [DEBUG] [Thread-198590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:30:48.552 [DEBUG] [Thread-198590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:30:48.552 [DEBUG] [Thread-198590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:30:48.571 [INFO] [Thread-198590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:30:48.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:30:48.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:30:49.399 [DEBUG] [Thread-198590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:30:49.399 [DEBUG] [Thread-198590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:30:49.447 [DEBUG] [Thread-198590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:30:49.447 [DEBUG] [Thread-198590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:30:49.456 [DEBUG] [Thread-198590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:30:49.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:30:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:30:49.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:30:49.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:30:49.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:30:49.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:30:49.494 [DEBUG] [Thread-198590] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:30:57.274 [DEBUG] [Thread-198592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:30:58.330 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:30:58.331 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:31:12.332 [DEBUG] [Thread-198593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:31:19.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:31:19.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:31:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:31:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 30, 58), 1.27901, 91.5583, 0.0, 9.423, 10.853, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:31:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:30:58
2026-04-13T00:31:21.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:31:21.292 [DEBUG] [Thread-198594] [transport.py] [_log()] starting thread (client mode): 0xb0fcf970
2026-04-13T00:31:21.292 [DEBUG] [Thread-198594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:31:21.312 [DEBUG] [Thread-198594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:31:21.312 [INFO] [Thread-198594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:31:21.315 [DEBUG] [Thread-198594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] client lang: <none>
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] server lang: <none>
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] kex follows: False
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] Compression: none
2026-04-13T00:31:21.316 [DEBUG] [Thread-198594] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:31:21.332 [DEBUG] [Thread-198594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:31:21.333 [DEBUG] [Thread-198594] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:31:21.333 [DEBUG] [Thread-198594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:31:21.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:31:21.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:31:21.335 [DEBUG] [Thread-198594] [transport.py] [_log()] userauth is OK
2026-04-13T00:31:21.335 [DEBUG] [Thread-198594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:31:21.335 [DEBUG] [Thread-198594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:31:21.335 [DEBUG] [Thread-198594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:31:21.336 [DEBUG] [Thread-198594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:31:21.359 [INFO] [Thread-198594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:31:21.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:31:22.169 [DEBUG] [Thread-198594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:31:22.169 [DEBUG] [Thread-198594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:31:22.170 [DEBUG] [Thread-198594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:31:22.210 [DEBUG] [Thread-198594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:31:22.210 [DEBUG] [Thread-198594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:31:22.214 [DEBUG] [Thread-198594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:31:22.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:31:22.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:31:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:31:22.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:31:22.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:31:22.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:31:22.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:31:22.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:31:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:31:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.937948 -999.00  +10.80   5.08     91   +9.40 1 2 1 3 1     0    0 1.62 8.07 ..... 5.1 5.1 204.0 7.8 11.5 -22.5 11.4 -21.3 11.1 -19.4 11.4 -21.3
2026-04-13T00:31:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:31:22.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:31:22.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.937948
2026-04-13T00:31:22.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:31:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:31:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:31:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:31:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:31:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:30:58', tmtdew=1.27901, humidity=91.5583, cloud=0.0, wind=9.423, temperature=10.853, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:30:38.707', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:31:22.244 [DEBUG] [Thread-198594] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:31:22.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:31:22.340 [DEBUG] [Thread-198597] [transport.py] [_log()] starting thread (client mode): 0xae5629b0
2026-04-13T00:31:22.340 [DEBUG] [Thread-198597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:31:22.355 [DEBUG] [Thread-198597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:31:22.356 [INFO] [Thread-198597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:31:22.363 [DEBUG] [Thread-198597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:31:22.364 [DEBUG] [Thread-198597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:31:22.364 [DEBUG] [Thread-198597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:31:22.364 [DEBUG] [Thread-198597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:22.364 [DEBUG] [Thread-198597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:22.364 [DEBUG] [Thread-198597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:22.364 [DEBUG] [Thread-198597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:22.364 [DEBUG] [Thread-198597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] client lang: <none>
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] server lang: <none>
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] kex follows: False
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:31:22.365 [DEBUG] [Thread-198597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:31:22.366 [DEBUG] [Thread-198597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:31:22.366 [DEBUG] [Thread-198597] [transport.py] [_log()] Compression: none
2026-04-13T00:31:22.366 [DEBUG] [Thread-198597] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:31:22.422 [DEBUG] [Thread-198597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:31:22.423 [DEBUG] [Thread-198597] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:31:22.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:31:22.424 [DEBUG] [Thread-198597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:31:22.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:31:22.478 [DEBUG] [Thread-198597] [transport.py] [_log()] userauth is OK
2026-04-13T00:31:22.479 [DEBUG] [Thread-198597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:31:22.479 [DEBUG] [Thread-198597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:31:22.479 [DEBUG] [Thread-198597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:31:22.479 [DEBUG] [Thread-198597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:31:22.497 [INFO] [Thread-198597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:31:22.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:31:22.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:31:23.294 [DEBUG] [Thread-198597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:31:23.294 [DEBUG] [Thread-198597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:31:23.342 [DEBUG] [Thread-198597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:31:23.342 [DEBUG] [Thread-198597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:31:23.352 [DEBUG] [Thread-198597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:31:23.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:31:23.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:31:23.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:31:23.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:31:23.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:31:23.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:31:23.388 [DEBUG] [Thread-198597] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:31:24.948 [DEBUG] [Thread-198599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:31:27.369 [DEBUG] [Thread-198600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:31:42.422 [DEBUG] [Thread-198601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:31:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:31:53.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:31:53.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:31:54.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 31, 34), 1.06813, 93.0502, 0.0, 10.8346, 10.7397, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:31:54.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:31:34
2026-04-13T00:31:55.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:31:55.219 [DEBUG] [Thread-198602] [transport.py] [_log()] starting thread (client mode): 0xb0fcfd60
2026-04-13T00:31:55.219 [DEBUG] [Thread-198602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:31:55.240 [DEBUG] [Thread-198602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:31:55.240 [INFO] [Thread-198602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] client lang: <none>
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] server lang: <none>
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] kex follows: False
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] Compression: none
2026-04-13T00:31:55.243 [DEBUG] [Thread-198602] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:31:55.262 [DEBUG] [Thread-198602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:31:55.262 [DEBUG] [Thread-198602] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:31:55.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:31:55.263 [DEBUG] [Thread-198602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:31:55.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:31:55.305 [DEBUG] [Thread-198602] [transport.py] [_log()] userauth is OK
2026-04-13T00:31:55.305 [DEBUG] [Thread-198602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:31:55.305 [DEBUG] [Thread-198602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:31:55.305 [DEBUG] [Thread-198602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:31:55.306 [DEBUG] [Thread-198602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:31:55.327 [INFO] [Thread-198602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:31:55.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:31:56.096 [DEBUG] [Thread-198602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:31:56.096 [DEBUG] [Thread-198602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:31:56.097 [DEBUG] [Thread-198602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:31:56.137 [DEBUG] [Thread-198602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:31:56.137 [DEBUG] [Thread-198602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:31:56.140 [DEBUG] [Thread-198602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:31:56.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:31:56.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:31:56.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:31:56.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:31:56.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:31:56.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:31:56.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:31:56.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:31:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:31:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.938295 -999.00  +10.80   4.67     91   +9.40 1 2 1 3 1     0    0 1.63 7.50 ..... 4.7 4.7 218.7 7.8 11.6 -22.3 11.4 -21.3 11.1 -19.4 11.4 -21.5
2026-04-13T00:31:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:31:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:31:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.938295
2026-04-13T00:31:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:31:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:31:56.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:31:56.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:31:56.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:31:56.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:31:34', tmtdew=1.06813, humidity=93.0502, cloud=0.0, wind=10.8346, temperature=10.7397, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:31:08.688', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:31:56.166 [DEBUG] [Thread-198602] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:31:56.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:31:56.261 [DEBUG] [Thread-198605] [transport.py] [_log()] starting thread (client mode): 0xa795aad0
2026-04-13T00:31:56.261 [DEBUG] [Thread-198605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:31:56.276 [DEBUG] [Thread-198605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:31:56.276 [INFO] [Thread-198605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:31:56.283 [DEBUG] [Thread-198605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] client lang: <none>
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] server lang: <none>
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] kex follows: False
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:31:56.284 [DEBUG] [Thread-198605] [transport.py] [_log()] Compression: none
2026-04-13T00:31:56.285 [DEBUG] [Thread-198605] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:31:56.341 [DEBUG] [Thread-198605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:31:56.342 [DEBUG] [Thread-198605] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:31:56.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:31:56.343 [DEBUG] [Thread-198605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:31:56.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:31:56.397 [DEBUG] [Thread-198605] [transport.py] [_log()] userauth is OK
2026-04-13T00:31:56.398 [DEBUG] [Thread-198605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:31:56.398 [DEBUG] [Thread-198605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:31:56.398 [DEBUG] [Thread-198605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:31:56.398 [DEBUG] [Thread-198605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:31:56.417 [INFO] [Thread-198605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:31:56.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:31:56.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:31:57.222 [DEBUG] [Thread-198605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:31:57.223 [DEBUG] [Thread-198605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:31:57.270 [DEBUG] [Thread-198605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:31:57.271 [DEBUG] [Thread-198605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:31:57.279 [DEBUG] [Thread-198605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:31:57.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:31:57.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:31:57.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:31:57.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:31:57.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:31:57.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:31:57.317 [DEBUG] [Thread-198605] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:31:57.458 [DEBUG] [Thread-198607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:31:58.536 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:31:58.537 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:32:12.502 [DEBUG] [Thread-198608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:32:25.025 [DEBUG] [Thread-198609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:32:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:32:27.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:32:27.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:32:27.540 [DEBUG] [Thread-198610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:32:28.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 32, 9), 1.28407, 91.5251, 0.0, 9.17604, 10.8199, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:32:28.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:32:09
2026-04-13T00:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:32:29.171 [DEBUG] [Thread-198611] [transport.py] [_log()] starting thread (client mode): 0xae5f2ad0
2026-04-13T00:32:29.171 [DEBUG] [Thread-198611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:32:29.190 [DEBUG] [Thread-198611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:32:29.190 [INFO] [Thread-198611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:32:29.191 [DEBUG] [Thread-198611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:32:29.191 [DEBUG] [Thread-198611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] client lang: <none>
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] server lang: <none>
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] kex follows: False
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] Compression: none
2026-04-13T00:32:29.192 [DEBUG] [Thread-198611] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:32:29.200 [DEBUG] [Thread-198611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:32:29.201 [DEBUG] [Thread-198611] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:32:29.201 [DEBUG] [Thread-198611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:32:29.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:32:29.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:32:29.202 [DEBUG] [Thread-198611] [transport.py] [_log()] userauth is OK
2026-04-13T00:32:29.203 [DEBUG] [Thread-198611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:32:29.203 [DEBUG] [Thread-198611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:32:29.203 [DEBUG] [Thread-198611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:32:29.203 [DEBUG] [Thread-198611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:32:29.226 [INFO] [Thread-198611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:32:29.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:32:30.021 [DEBUG] [Thread-198611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:32:30.021 [DEBUG] [Thread-198611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:32:30.022 [DEBUG] [Thread-198611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:32:30.062 [DEBUG] [Thread-198611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:32:30.063 [DEBUG] [Thread-198611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:32:30.066 [DEBUG] [Thread-198611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:32:30.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:32:30.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:32:30.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:32:30.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:32:30.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:32:30.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:32:30.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:32:30.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:32:30.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:32:30.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.938642 -999.00  +10.90   4.64     91   +9.40 1 2 1 3 1     0    0 1.57 6.40 ..... 4.6 4.6 195.3 7.0 11.6 -22.3 11.4 -21.4 11.1 -19.4 11.4 -21.3
2026-04-13T00:32:30.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:32:30.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:32:30.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.938642
2026-04-13T00:32:30.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:32:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:32:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:32:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:32:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:32:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:32:09', tmtdew=1.28407, humidity=91.5251, cloud=0.0, wind=9.17604, temperature=10.8199, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:31:38.669', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.5949999999999989, nan, nan, nan, nan, nan, nan, 1.0597499999999993, 1.4429999999999996, nan, nan, nan, nan, nan, 2.9704999999999995, 2.451999999999999, 1.4812499999999993, 2.5924999999999994, 2.4422499999999987, nan, nan, nan, 0.22750000000000092, 0.09875000000000078, 0.12449999999999939, 0.17149999999999999, 0.35800000000000143, 0.8805000000000014, 2.545000000000001, 2.1492499999999986], zp_timestamp='2026-04-12T22:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:32:30.095 [DEBUG] [Thread-198611] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:32:30.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:32:30.189 [DEBUG] [Thread-198614] [transport.py] [_log()] starting thread (client mode): 0xae5f22c0
2026-04-13T00:32:30.189 [DEBUG] [Thread-198614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:32:30.204 [DEBUG] [Thread-198614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:32:30.205 [INFO] [Thread-198614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:32:30.212 [DEBUG] [Thread-198614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:32:30.212 [DEBUG] [Thread-198614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:32:30.212 [DEBUG] [Thread-198614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:32:30.212 [DEBUG] [Thread-198614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] client lang: <none>
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] server lang: <none>
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] kex follows: False
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] Compression: none
2026-04-13T00:32:30.213 [DEBUG] [Thread-198614] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:32:30.273 [DEBUG] [Thread-198614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:32:30.274 [DEBUG] [Thread-198614] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:32:30.275 [DEBUG] [Thread-198614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:32:30.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:32:30.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:32:30.329 [DEBUG] [Thread-198614] [transport.py] [_log()] userauth is OK
2026-04-13T00:32:30.329 [DEBUG] [Thread-198614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:32:30.329 [DEBUG] [Thread-198614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:32:30.329 [DEBUG] [Thread-198614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:32:30.329 [DEBUG] [Thread-198614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:32:30.352 [INFO] [Thread-198614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:32:30.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:32:30.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:32:31.171 [DEBUG] [Thread-198614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:32:31.171 [DEBUG] [Thread-198614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:32:31.220 [DEBUG] [Thread-198614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:32:31.220 [DEBUG] [Thread-198614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:32:31.232 [DEBUG] [Thread-198614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:32:31.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:32:31.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:32:31.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:32:31.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:32:31.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:32:31.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:32:31.269 [DEBUG] [Thread-198614] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:32:42.576 [DEBUG] [Thread-198616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:32:57.639 [DEBUG] [Thread-198617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:32:58.742 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:32:58.743 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:33:01.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:33:01.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:33:01.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:33:02.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 32, 45), 1.07825, 92.9839, 0.0, 11.2226, 10.6734, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:33:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:32:45
2026-04-13T00:33:02.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:33:03.110 [DEBUG] [Thread-198618] [transport.py] [_log()] starting thread (client mode): 0xae5f16c0
2026-04-13T00:33:03.111 [DEBUG] [Thread-198618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:33:03.130 [DEBUG] [Thread-198618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:33:03.130 [INFO] [Thread-198618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] client lang: <none>
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] server lang: <none>
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] kex follows: False
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] Compression: none
2026-04-13T00:33:03.133 [DEBUG] [Thread-198618] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:33:03.151 [DEBUG] [Thread-198618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:33:03.152 [DEBUG] [Thread-198618] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:33:03.152 [DEBUG] [Thread-198618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:33:03.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:33:03.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:33:03.154 [DEBUG] [Thread-198618] [transport.py] [_log()] userauth is OK
2026-04-13T00:33:03.154 [DEBUG] [Thread-198618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:33:03.154 [DEBUG] [Thread-198618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:33:03.154 [DEBUG] [Thread-198618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:33:03.154 [DEBUG] [Thread-198618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:33:03.178 [INFO] [Thread-198618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:33:03.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:33:03.963 [DEBUG] [Thread-198618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:33:03.963 [DEBUG] [Thread-198618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:33:03.963 [DEBUG] [Thread-198618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:33:04.004 [DEBUG] [Thread-198618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:33:04.004 [DEBUG] [Thread-198618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:33:04.008 [DEBUG] [Thread-198618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:33:04.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:33:04.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:33:04.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:33:04.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:33:04.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:33:04.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:33:04.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:33:04.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:33:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:33:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.938990 -999.00  +10.90   5.08     90   +9.40 1 2 1 3 1     0    0 1.59 6.55 ..... 5.1 5.1 210.5 6.6 11.5 -22.4 11.4 -21.4 11.2 -19.4 11.4 -21.3
2026-04-13T00:33:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:33:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:33:04.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.938990
2026-04-13T00:33:04.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:33:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:33:04.035 [DEBUG] [Thread-198618] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:33:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:33:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:33:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:33:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:32:45', tmtdew=1.07825, humidity=92.9839, cloud=0.0, wind=11.2226, temperature=10.6734, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:32:08.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 0.9364999999999997, nan, nan, nan, nan, nan, nan, 1.4252499999999992, 1.803, nan, nan, nan, nan, nan, 2.1295, 2.246999999999999, 2.5367499999999987, 2.8459999999999983, nan, nan, nan, nan, 0.24499999999999922, 0.09275000000000055, 0.17549999999999955, 0.1739999999999995, 0.346000000000001, 1.2525000000000013, 2.3580000000000005, 1.472249999999999], zp_timestamp='2026-04-12T22:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:33:04.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:33:04.140 [DEBUG] [Thread-198621] [transport.py] [_log()] starting thread (client mode): 0xa7959c00
2026-04-13T00:33:04.140 [DEBUG] [Thread-198621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:33:04.155 [DEBUG] [Thread-198621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:33:04.155 [INFO] [Thread-198621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:33:04.163 [DEBUG] [Thread-198621] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:33:04.163 [DEBUG] [Thread-198621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:33:04.163 [DEBUG] [Thread-198621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:33:04.163 [DEBUG] [Thread-198621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:04.163 [DEBUG] [Thread-198621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:04.163 [DEBUG] [Thread-198621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] client lang: <none>
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] server lang: <none>
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] kex follows: False
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] Compression: none
2026-04-13T00:33:04.164 [DEBUG] [Thread-198621] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:33:04.221 [DEBUG] [Thread-198621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:33:04.222 [DEBUG] [Thread-198621] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:33:04.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:33:04.223 [DEBUG] [Thread-198621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:33:04.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:33:04.280 [DEBUG] [Thread-198621] [transport.py] [_log()] userauth is OK
2026-04-13T00:33:04.280 [DEBUG] [Thread-198621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:33:04.280 [DEBUG] [Thread-198621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:33:04.280 [DEBUG] [Thread-198621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:33:04.280 [DEBUG] [Thread-198621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:33:04.299 [INFO] [Thread-198621] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:33:04.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:33:04.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:33:05.137 [DEBUG] [Thread-198621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:33:05.138 [DEBUG] [Thread-198621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:33:05.186 [DEBUG] [Thread-198621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:33:05.187 [DEBUG] [Thread-198621] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:33:05.196 [DEBUG] [Thread-198621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:33:05.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:33:05.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:33:05.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:33:05.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:33:05.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:33:05.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:33:05.233 [DEBUG] [Thread-198621] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:33:12.673 [DEBUG] [Thread-198623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:33:25.101 [DEBUG] [Thread-198624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:33:27.723 [DEBUG] [Thread-198625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:33:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:33:35.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:33:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:33:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 33, 20), 1.28382, 91.5251, 0.0, 9.03492, 10.7867, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:33:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:33:20
2026-04-13T00:33:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:33:37.034 [DEBUG] [Thread-198626] [transport.py] [_log()] starting thread (client mode): 0xae5f0250
2026-04-13T00:33:37.035 [DEBUG] [Thread-198626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:33:37.056 [DEBUG] [Thread-198626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:33:37.056 [INFO] [Thread-198626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:33:37.060 [DEBUG] [Thread-198626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] client lang: <none>
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] server lang: <none>
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] kex follows: False
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] Compression: none
2026-04-13T00:33:37.061 [DEBUG] [Thread-198626] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:33:37.082 [DEBUG] [Thread-198626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:33:37.083 [DEBUG] [Thread-198626] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:33:37.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:33:37.084 [DEBUG] [Thread-198626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:33:37.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:33:37.087 [DEBUG] [Thread-198626] [transport.py] [_log()] userauth is OK
2026-04-13T00:33:37.087 [DEBUG] [Thread-198626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:33:37.087 [DEBUG] [Thread-198626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:33:37.087 [DEBUG] [Thread-198626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:33:37.087 [DEBUG] [Thread-198626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:33:37.110 [INFO] [Thread-198626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:33:37.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:33:37.909 [DEBUG] [Thread-198626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:33:37.909 [DEBUG] [Thread-198626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:33:37.909 [DEBUG] [Thread-198626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:33:37.949 [DEBUG] [Thread-198626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:33:37.950 [DEBUG] [Thread-198626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:33:37.952 [DEBUG] [Thread-198626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:33:37.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:33:37.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:33:37.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:33:37.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:33:37.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:33:37.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:33:37.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.939337 -999.00  +10.90   5.21     90   +9.50 1 2 1 3 1     0    0 1.55 5.69 ..... 5.2 5.2 216.8 6.8 11.5 -22.4 11.4 -21.3 11.1 -19.4 11.4 -21.4
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.939337
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:33:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:33:37.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:33:20', tmtdew=1.28382, humidity=91.5251, cloud=0.0, wind=9.03492, temperature=10.7867, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:32:38.717', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 0.9364999999999997, nan, nan, nan, nan, nan, nan, 1.4252499999999992, 1.803, nan, nan, nan, nan, nan, 2.1295, 2.246999999999999, 2.5367499999999987, 2.8459999999999983, nan, nan, nan, nan, 0.24499999999999922, 0.09275000000000055, 0.17549999999999955, 0.1739999999999995, 0.346000000000001, 1.2525000000000013, 2.3580000000000005, 1.472249999999999], zp_timestamp='2026-04-12T22:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:33:37.972 [DEBUG] [Thread-198626] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:33:38.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:33:38.062 [DEBUG] [Thread-198629] [transport.py] [_log()] starting thread (client mode): 0xae5f2e30
2026-04-13T00:33:38.062 [DEBUG] [Thread-198629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:33:38.076 [DEBUG] [Thread-198629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:33:38.076 [INFO] [Thread-198629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] client lang: <none>
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] server lang: <none>
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] kex follows: False
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:33:38.084 [DEBUG] [Thread-198629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:33:38.085 [DEBUG] [Thread-198629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:33:38.085 [DEBUG] [Thread-198629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:33:38.085 [DEBUG] [Thread-198629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:33:38.085 [DEBUG] [Thread-198629] [transport.py] [_log()] Compression: none
2026-04-13T00:33:38.085 [DEBUG] [Thread-198629] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:33:38.143 [DEBUG] [Thread-198629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:33:38.144 [DEBUG] [Thread-198629] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:33:38.144 [DEBUG] [Thread-198629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:33:38.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:33:38.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:33:38.199 [DEBUG] [Thread-198629] [transport.py] [_log()] userauth is OK
2026-04-13T00:33:38.199 [DEBUG] [Thread-198629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:33:38.199 [DEBUG] [Thread-198629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:33:38.199 [DEBUG] [Thread-198629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:33:38.199 [DEBUG] [Thread-198629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:33:38.217 [INFO] [Thread-198629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:33:38.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:33:38.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:33:39.037 [DEBUG] [Thread-198629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:33:39.038 [DEBUG] [Thread-198629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:33:39.087 [DEBUG] [Thread-198629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:33:39.087 [DEBUG] [Thread-198629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:33:39.097 [DEBUG] [Thread-198629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:33:39.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:33:39.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:33:39.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:33:39.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:33:39.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:33:39.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:33:39.134 [DEBUG] [Thread-198629] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:33:42.762 [DEBUG] [Thread-198631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:33:57.825 [DEBUG] [Thread-198632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:33:58.950 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:33:58.951 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:34:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:34:09.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:34:09.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:34:10.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 33, 56), 1.29683, 91.4422, 0.0, 8.92908, 10.7535, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:34:10.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:33:56
2026-04-13T00:34:10.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:34:11.015 [DEBUG] [Thread-198633] [transport.py] [_log()] starting thread (client mode): 0xae51ab60
2026-04-13T00:34:11.015 [DEBUG] [Thread-198633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:34:11.035 [DEBUG] [Thread-198633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:34:11.035 [INFO] [Thread-198633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:34:11.038 [DEBUG] [Thread-198633] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] client lang: <none>
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] server lang: <none>
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] kex follows: False
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:34:11.039 [DEBUG] [Thread-198633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:34:11.040 [DEBUG] [Thread-198633] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:34:11.040 [DEBUG] [Thread-198633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:34:11.040 [DEBUG] [Thread-198633] [transport.py] [_log()] Compression: none
2026-04-13T00:34:11.040 [DEBUG] [Thread-198633] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:34:11.057 [DEBUG] [Thread-198633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:34:11.058 [DEBUG] [Thread-198633] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:34:11.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:34:11.059 [DEBUG] [Thread-198633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:34:11.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:34:11.101 [DEBUG] [Thread-198633] [transport.py] [_log()] userauth is OK
2026-04-13T00:34:11.101 [DEBUG] [Thread-198633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:34:11.102 [DEBUG] [Thread-198633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:34:11.102 [DEBUG] [Thread-198633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:34:11.102 [DEBUG] [Thread-198633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:34:11.122 [INFO] [Thread-198633] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:34:11.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:34:11.899 [DEBUG] [Thread-198633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:34:11.900 [DEBUG] [Thread-198633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:34:11.900 [DEBUG] [Thread-198633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:34:11.941 [DEBUG] [Thread-198633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:34:11.941 [DEBUG] [Thread-198633] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:34:11.943 [DEBUG] [Thread-198633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:34:11.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:34:11.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:34:11.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:34:11.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:34:11.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:34:11.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:34:11.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:34:11.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:34:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:34:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.940031 -999.00  +10.90   4.15     90   +9.40 1 2 1 3 1     0    0 1.57 5.12 ..e.. 4.2 4.2 221.6 9.2 11.5 -22.3 11.4 -21.2 11.2 -19.4 11.4 -21.6
2026-04-13T00:34:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:34:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:34:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.940031
2026-04-13T00:34:11.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:34:11.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:34:11.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:34:11.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:34:11.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:34:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:33:56', tmtdew=1.29683, humidity=91.4422, cloud=0.0, wind=8.92908, temperature=10.7535, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:33:38.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 0.9364999999999997, nan, nan, nan, nan, nan, nan, 1.4252499999999992, 1.803, nan, nan, nan, nan, nan, 2.1295, 2.246999999999999, 2.5367499999999987, 2.8459999999999983, nan, nan, nan, nan, 0.24499999999999922, 0.09275000000000055, 0.17549999999999955, 0.1739999999999995, 0.346000000000001, 1.2525000000000013, 2.3580000000000005, 1.472249999999999], zp_timestamp='2026-04-12T22:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:34:11.971 [DEBUG] [Thread-198633] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:34:12.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:34:12.059 [DEBUG] [Thread-198636] [transport.py] [_log()] starting thread (client mode): 0xae51a200
2026-04-13T00:34:12.059 [DEBUG] [Thread-198636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:34:12.075 [DEBUG] [Thread-198636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:34:12.075 [INFO] [Thread-198636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:34:12.083 [DEBUG] [Thread-198636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:34:12.083 [DEBUG] [Thread-198636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:34:12.083 [DEBUG] [Thread-198636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:34:12.083 [DEBUG] [Thread-198636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:12.083 [DEBUG] [Thread-198636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:12.083 [DEBUG] [Thread-198636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:12.083 [DEBUG] [Thread-198636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] client lang: <none>
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] server lang: <none>
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] kex follows: False
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] Compression: none
2026-04-13T00:34:12.084 [DEBUG] [Thread-198636] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:34:12.143 [DEBUG] [Thread-198636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:34:12.144 [DEBUG] [Thread-198636] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:34:12.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:34:12.145 [DEBUG] [Thread-198636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:34:12.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:34:12.200 [DEBUG] [Thread-198636] [transport.py] [_log()] userauth is OK
2026-04-13T00:34:12.200 [DEBUG] [Thread-198636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:34:12.200 [DEBUG] [Thread-198636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:34:12.200 [DEBUG] [Thread-198636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:34:12.200 [DEBUG] [Thread-198636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:34:12.220 [INFO] [Thread-198636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:34:12.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:34:12.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:34:12.861 [DEBUG] [Thread-198638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:34:13.064 [DEBUG] [Thread-198636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:34:13.064 [DEBUG] [Thread-198636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:34:13.112 [DEBUG] [Thread-198636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:34:13.112 [DEBUG] [Thread-198636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:34:13.127 [DEBUG] [Thread-198636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:34:13.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:34:13.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:34:13.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:34:13.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:34:13.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:34:13.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:34:13.164 [DEBUG] [Thread-198636] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:34:25.180 [DEBUG] [Thread-198639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:34:27.914 [DEBUG] [Thread-198640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:34:42.954 [DEBUG] [Thread-198641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:34:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:34:43.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:34:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:34:44.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 34, 31), 1.29178, 91.4753, 0.0, 8.6292, 10.7867, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:34:44.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:34:31
2026-04-13T00:34:44.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:34:44.983 [DEBUG] [Thread-198642] [transport.py] [_log()] starting thread (client mode): 0xae5f28f0
2026-04-13T00:34:44.983 [DEBUG] [Thread-198642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:34:45.004 [DEBUG] [Thread-198642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:34:45.004 [INFO] [Thread-198642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:34:45.007 [DEBUG] [Thread-198642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:34:45.007 [DEBUG] [Thread-198642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:34:45.007 [DEBUG] [Thread-198642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] client lang: <none>
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] server lang: <none>
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] kex follows: False
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] Compression: none
2026-04-13T00:34:45.008 [DEBUG] [Thread-198642] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:34:45.018 [DEBUG] [Thread-198642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:34:45.018 [DEBUG] [Thread-198642] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:34:45.019 [DEBUG] [Thread-198642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:34:45.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:34:45.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:34:45.021 [DEBUG] [Thread-198642] [transport.py] [_log()] userauth is OK
2026-04-13T00:34:45.021 [DEBUG] [Thread-198642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:34:45.021 [DEBUG] [Thread-198642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:34:45.021 [DEBUG] [Thread-198642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:34:45.021 [DEBUG] [Thread-198642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:34:45.046 [INFO] [Thread-198642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:34:45.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:34:45.841 [DEBUG] [Thread-198642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:34:45.841 [DEBUG] [Thread-198642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:34:45.842 [DEBUG] [Thread-198642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:34:45.882 [DEBUG] [Thread-198642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:34:45.882 [DEBUG] [Thread-198642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:34:45.886 [DEBUG] [Thread-198642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:34:45.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:34:45.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:34:45.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:34:45.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:34:45.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:34:45.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:34:45.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:34:45.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:34:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:34:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.940378 -999.00  +10.90   3.69     90   +9.40 1 2 1 3 1     0    0 1.58 4.62 ..e.. 3.7 3.7 201.7 6.5 11.5 -22.4 11.4 -21.4 11.1 -19.3 11.4 -21.3
2026-04-13T00:34:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:34:45.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:34:45.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.940378
2026-04-13T00:34:45.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:34:45.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:34:45.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:34:45.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:34:45.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:34:45.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:34:31', tmtdew=1.29178, humidity=91.4753, cloud=0.0, wind=8.6292, temperature=10.7867, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:34:08.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 0.9364999999999997, nan, nan, nan, nan, nan, nan, 1.4252499999999992, 1.803, nan, nan, nan, nan, nan, 2.1295, 2.246999999999999, 2.5367499999999987, 2.8459999999999983, nan, nan, nan, nan, 0.24499999999999922, 0.09275000000000055, 0.17549999999999955, 0.1739999999999995, 0.346000000000001, 1.2525000000000013, 2.3580000000000005, 1.472249999999999], zp_timestamp='2026-04-12T22:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:34:45.910 [DEBUG] [Thread-198642] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:34:45.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:34:46.004 [DEBUG] [Thread-198645] [transport.py] [_log()] starting thread (client mode): 0xa795a920
2026-04-13T00:34:46.004 [DEBUG] [Thread-198645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:34:46.019 [DEBUG] [Thread-198645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:34:46.019 [INFO] [Thread-198645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:34:46.026 [DEBUG] [Thread-198645] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] client lang: <none>
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] server lang: <none>
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] kex follows: False
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:34:46.027 [DEBUG] [Thread-198645] [transport.py] [_log()] Compression: none
2026-04-13T00:34:46.028 [DEBUG] [Thread-198645] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:34:46.086 [DEBUG] [Thread-198645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:34:46.087 [DEBUG] [Thread-198645] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:34:46.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:34:46.088 [DEBUG] [Thread-198645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:34:46.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:34:46.142 [DEBUG] [Thread-198645] [transport.py] [_log()] userauth is OK
2026-04-13T00:34:46.143 [DEBUG] [Thread-198645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:34:46.143 [DEBUG] [Thread-198645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:34:46.143 [DEBUG] [Thread-198645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:34:46.143 [DEBUG] [Thread-198645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:34:46.161 [INFO] [Thread-198645] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:34:46.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:34:46.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:34:46.985 [DEBUG] [Thread-198645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:34:46.985 [DEBUG] [Thread-198645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:34:47.033 [DEBUG] [Thread-198645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:34:47.033 [DEBUG] [Thread-198645] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:34:47.043 [DEBUG] [Thread-198645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:34:47.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:34:47.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:34:47.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:34:47.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:34:47.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:34:47.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:34:47.079 [DEBUG] [Thread-198645] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:34:57.995 [DEBUG] [Thread-198647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:34:59.157 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:34:59.159 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:35:13.044 [DEBUG] [Thread-198648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:35:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:35:17.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:35:17.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
2026-04-13T00:35:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 35, 6), 1.28634, 91.5085, 0.0, 8.82324, 10.7701, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:35:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:35:06
2026-04-13T00:35:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:35:18.905 [DEBUG] [Thread-198649] [transport.py] [_log()] starting thread (client mode): 0xa795b2e0
2026-04-13T00:35:18.905 [DEBUG] [Thread-198649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:35:18.929 [DEBUG] [Thread-198649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:35:18.929 [INFO] [Thread-198649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] client lang: <none>
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] server lang: <none>
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] kex follows: False
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:35:18.933 [DEBUG] [Thread-198649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:35:18.934 [DEBUG] [Thread-198649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:35:18.934 [DEBUG] [Thread-198649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:35:18.934 [DEBUG] [Thread-198649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:35:18.934 [DEBUG] [Thread-198649] [transport.py] [_log()] Compression: none
2026-04-13T00:35:18.934 [DEBUG] [Thread-198649] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:35:18.949 [DEBUG] [Thread-198649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:35:18.950 [DEBUG] [Thread-198649] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:35:18.950 [DEBUG] [Thread-198649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:35:18.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:35:18.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:35:18.952 [DEBUG] [Thread-198649] [transport.py] [_log()] userauth is OK
2026-04-13T00:35:18.952 [DEBUG] [Thread-198649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:35:18.952 [DEBUG] [Thread-198649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:35:18.952 [DEBUG] [Thread-198649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:35:18.952 [DEBUG] [Thread-198649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:35:18.987 [INFO] [Thread-198649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:35:18.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:35:20.035 [DEBUG] [Thread-198649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:35:20.035 [DEBUG] [Thread-198649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:35:20.035 [DEBUG] [Thread-198649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:35:20.076 [DEBUG] [Thread-198649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:35:20.076 [DEBUG] [Thread-198649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:35:20.079 [DEBUG] [Thread-198649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:35:20.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:35:20.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:35:20.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:35:20.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:35:20.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:35:20.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:35:20.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:35:20.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:35:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.940726 -999.00  +10.90   2.76     90   +9.40 1 2 1 3 1     0    0 1.54 4.62 ..ESW 2.8 2.8 190.9 5.2 11.6 -22.4 11.4 -21.3 11.1 -19.3 11.4 -21.5
2026-04-13T00:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.940726
2026-04-13T00:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:35:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:35:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:35:20.104 [DEBUG] [Thread-198649] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:35:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:35:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:35:20.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:35:06', tmtdew=1.28634, humidity=91.5085, cloud=0.0, wind=8.82324, temperature=10.7701, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:34:38.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 0.9364999999999997, nan, nan, nan, nan, nan, nan, 1.4252499999999992, 1.803, nan, nan, nan, nan, nan, 2.1295, 2.246999999999999, 2.5367499999999987, 2.8459999999999983, nan, nan, nan, nan, 0.24499999999999922, 0.09275000000000055, 0.17549999999999955, 0.1739999999999995, 0.346000000000001, 1.2525000000000013, 2.3580000000000005, 1.472249999999999], zp_timestamp='2026-04-12T22:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:35:20.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:35:20.198 [DEBUG] [Thread-198652] [transport.py] [_log()] starting thread (client mode): 0xa7958a60
2026-04-13T00:35:20.198 [DEBUG] [Thread-198652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:35:20.213 [DEBUG] [Thread-198652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:35:20.213 [INFO] [Thread-198652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:35:20.220 [DEBUG] [Thread-198652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] client lang: <none>
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] server lang: <none>
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] kex follows: False
2026-04-13T00:35:20.221 [DEBUG] [Thread-198652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:35:20.222 [DEBUG] [Thread-198652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:35:20.222 [DEBUG] [Thread-198652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:35:20.222 [DEBUG] [Thread-198652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:35:20.222 [DEBUG] [Thread-198652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:35:20.222 [DEBUG] [Thread-198652] [transport.py] [_log()] Compression: none
2026-04-13T00:35:20.222 [DEBUG] [Thread-198652] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:35:20.276 [DEBUG] [Thread-198652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:35:20.277 [DEBUG] [Thread-198652] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:35:20.277 [DEBUG] [Thread-198652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:35:20.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:35:20.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:35:20.333 [DEBUG] [Thread-198652] [transport.py] [_log()] userauth is OK
2026-04-13T00:35:20.333 [DEBUG] [Thread-198652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:35:20.333 [DEBUG] [Thread-198652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:35:20.333 [DEBUG] [Thread-198652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:35:20.333 [DEBUG] [Thread-198652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:35:20.353 [INFO] [Thread-198652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:35:20.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:35:20.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:35:21.234 [DEBUG] [Thread-198652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:35:21.235 [DEBUG] [Thread-198652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:35:21.282 [DEBUG] [Thread-198652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:35:21.282 [DEBUG] [Thread-198652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:35:21.291 [DEBUG] [Thread-198652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:35:21.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:35: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')
2026-04-13T00:35:21.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:35:21.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:35:21.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:35:21.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:35:21.328 [DEBUG] [Thread-198652] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:35:25.267 [DEBUG] [Thread-198654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:35:28.072 [DEBUG] [Thread-198655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:35:43.124 [DEBUG] [Thread-198656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:35:51.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:35:51.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:35:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:35:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 35, 42), 1.08888, 92.9175, 0.0, 9.67032, 10.6734, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:35:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:35:42
2026-04-13T00:35:52.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:35:53.146 [DEBUG] [Thread-198657] [transport.py] [_log()] starting thread (client mode): 0xae563430
2026-04-13T00:35:53.146 [DEBUG] [Thread-198657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:35:53.167 [DEBUG] [Thread-198657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:35:53.167 [INFO] [Thread-198657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:35:53.170 [DEBUG] [Thread-198657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] client lang: <none>
2026-04-13T00:35:53.171 [DEBUG] [Thread-198657] [transport.py] [_log()] server lang: <none>
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] kex follows: False
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] Compression: none
2026-04-13T00:35:53.172 [DEBUG] [Thread-198657] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:35:53.192 [DEBUG] [Thread-198657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:35:53.192 [DEBUG] [Thread-198657] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:35:53.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:35:53.193 [DEBUG] [Thread-198657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:35:53.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:35:53.195 [DEBUG] [Thread-198657] [transport.py] [_log()] userauth is OK
2026-04-13T00:35:53.196 [DEBUG] [Thread-198657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:35:53.196 [DEBUG] [Thread-198657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:35:53.196 [DEBUG] [Thread-198657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:35:53.196 [DEBUG] [Thread-198657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:35:53.219 [INFO] [Thread-198657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:35:53.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:35:54.036 [DEBUG] [Thread-198657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:35:54.037 [DEBUG] [Thread-198657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:35:54.037 [DEBUG] [Thread-198657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:35:54.078 [DEBUG] [Thread-198657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:35:54.078 [DEBUG] [Thread-198657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:35:54.082 [DEBUG] [Thread-198657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:35:54.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:35:54.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:35:54.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:35:54.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:35:54.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:35:54.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:35:54.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:35:54.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:35:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:35:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.941072 -999.00  +10.90   4.87     90   +9.40 1 2 1 3 1     0    0 1.59 5.04 ..ESW 4.9 4.9 210.2 6.5 11.5 -22.4 11.4 -21.3 11.1 -19.3 11.4 -21.3
2026-04-13T00:35:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:35:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:35:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.941072
2026-04-13T00:35:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:35:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:35:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:35:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:35:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:35:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:35:42', tmtdew=1.08888, humidity=92.9175, cloud=0.0, wind=9.67032, temperature=10.6734, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:35:08.621', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 0.9364999999999997, nan, nan, nan, nan, nan, nan, 1.4252499999999992, 1.803, nan, nan, nan, nan, nan, 2.1295, 2.246999999999999, 2.5367499999999987, 2.8459999999999983, nan, nan, nan, nan, 0.24499999999999922, 0.09275000000000055, 0.17549999999999955, 0.1739999999999995, 0.346000000000001, 1.2525000000000013, 2.3580000000000005, 1.472249999999999], zp_timestamp='2026-04-12T22:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:35:54.108 [DEBUG] [Thread-198657] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:35:54.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:35:54.201 [DEBUG] [Thread-198660] [transport.py] [_log()] starting thread (client mode): 0xae5627a0
2026-04-13T00:35:54.201 [DEBUG] [Thread-198660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:35:54.216 [DEBUG] [Thread-198660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:35:54.216 [INFO] [Thread-198660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:35:54.224 [DEBUG] [Thread-198660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] client lang: <none>
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] server lang: <none>
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] kex follows: False
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] Compression: none
2026-04-13T00:35:54.225 [DEBUG] [Thread-198660] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:35:54.282 [DEBUG] [Thread-198660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:35:54.282 [DEBUG] [Thread-198660] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:35:54.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:35:54.283 [DEBUG] [Thread-198660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:35:54.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:35:54.341 [DEBUG] [Thread-198660] [transport.py] [_log()] userauth is OK
2026-04-13T00:35:54.341 [DEBUG] [Thread-198660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:35:54.342 [DEBUG] [Thread-198660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:35:54.342 [DEBUG] [Thread-198660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:35:54.342 [DEBUG] [Thread-198660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:35:54.360 [INFO] [Thread-198660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:35:54.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:35:54.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:35:55.218 [DEBUG] [Thread-198660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:35:55.218 [DEBUG] [Thread-198660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:35:55.265 [DEBUG] [Thread-198660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:35:55.266 [DEBUG] [Thread-198660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:35:55.274 [DEBUG] [Thread-198660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:35:55.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:35:55.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:35:55.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:35:55.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:35:55.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:35:55.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:35:55.308 [DEBUG] [Thread-198660] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:35:58.162 [DEBUG] [Thread-198662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:35:59.364 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:35:59.365 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:36:13.214 [DEBUG] [Thread-198663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:36:25.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:36:25.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:36:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:36:25.346 [DEBUG] [Thread-198664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:36:26.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 36, 17), 1.39216, 91.4753, 0.0, 8.0118, 10.8864, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:36:26.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:36:17
2026-04-13T00:36:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:36:27.263 [DEBUG] [Thread-198665] [transport.py] [_log()] starting thread (client mode): 0xae5f0d60
2026-04-13T00:36:27.263 [DEBUG] [Thread-198665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:36:27.276 [DEBUG] [Thread-198665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:36:27.276 [INFO] [Thread-198665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] client lang: <none>
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] server lang: <none>
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] kex follows: False
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] Compression: none
2026-04-13T00:36:27.279 [DEBUG] [Thread-198665] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:36:27.295 [DEBUG] [Thread-198665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:36:27.296 [DEBUG] [Thread-198665] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:36:27.296 [DEBUG] [Thread-198665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:36:27.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:36:27.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:36:27.298 [DEBUG] [Thread-198665] [transport.py] [_log()] userauth is OK
2026-04-13T00:36:27.298 [DEBUG] [Thread-198665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:36:27.298 [DEBUG] [Thread-198665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:36:27.298 [DEBUG] [Thread-198665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:36:27.298 [DEBUG] [Thread-198665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:36:27.316 [INFO] [Thread-198665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:36:27.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:36:28.087 [DEBUG] [Thread-198665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:36:28.087 [DEBUG] [Thread-198665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:36:28.087 [DEBUG] [Thread-198665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:36:28.128 [DEBUG] [Thread-198665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:36:28.128 [DEBUG] [Thread-198665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:36:28.131 [DEBUG] [Thread-198665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:36:28.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:36:28.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:36:28.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:36:28.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:36:28.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:36:28.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:36:28.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:36:28.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:36:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:36:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.941421 -999.00  +10.90   3.85     90   +9.40 1 2 1 3 1     0    0 1.59 4.74 ..Esw 3.9 3.9 203.5 5.9 11.5 -22.4 11.4 -21.2 11.1 -19.4 11.4 -21.2
2026-04-13T00:36:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:36:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:36:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.941421
2026-04-13T00:36:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:36:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:36:28.153 [DEBUG] [Thread-198665] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:36:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:36:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:36:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:36:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:36:17', tmtdew=1.39216, humidity=91.4753, cloud=0.0, wind=8.0118, temperature=10.8864, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:35:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:36:28.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:36:28.248 [DEBUG] [Thread-198668] [transport.py] [_log()] starting thread (client mode): 0xae51aa40
2026-04-13T00:36:28.248 [DEBUG] [Thread-198669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:36:28.249 [DEBUG] [Thread-198668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:36:28.262 [DEBUG] [Thread-198668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:36:28.262 [INFO] [Thread-198668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:36:28.269 [DEBUG] [Thread-198668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:36:28.269 [DEBUG] [Thread-198668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] client lang: <none>
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] server lang: <none>
2026-04-13T00:36:28.270 [DEBUG] [Thread-198668] [transport.py] [_log()] kex follows: False
2026-04-13T00:36:28.271 [DEBUG] [Thread-198668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:36:28.271 [DEBUG] [Thread-198668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:36:28.271 [DEBUG] [Thread-198668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:36:28.271 [DEBUG] [Thread-198668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:36:28.271 [DEBUG] [Thread-198668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:36:28.271 [DEBUG] [Thread-198668] [transport.py] [_log()] Compression: none
2026-04-13T00:36:28.271 [DEBUG] [Thread-198668] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:36:28.333 [DEBUG] [Thread-198668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:36:28.334 [DEBUG] [Thread-198668] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:36:28.334 [DEBUG] [Thread-198668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:36:28.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:36:28.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:36:28.392 [DEBUG] [Thread-198668] [transport.py] [_log()] userauth is OK
2026-04-13T00:36:28.392 [DEBUG] [Thread-198668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:36:28.392 [DEBUG] [Thread-198668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:36:28.393 [DEBUG] [Thread-198668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:36:28.393 [DEBUG] [Thread-198668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:36:28.415 [INFO] [Thread-198668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:36:28.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:36:28.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:36:29.283 [DEBUG] [Thread-198668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:36:29.283 [DEBUG] [Thread-198668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:36:29.331 [DEBUG] [Thread-198668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:36:29.331 [DEBUG] [Thread-198668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:36:29.341 [DEBUG] [Thread-198668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:36:29.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:36: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')
2026-04-13T00:36:29.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:36:29.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:36:29.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:36:29.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:36:29.377 [DEBUG] [Thread-198668] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:36:43.293 [DEBUG] [Thread-198671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:36:58.330 [DEBUG] [Thread-198672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:36:59.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:36:59.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:36:59.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:36:59.567 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:36:59.568 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:37:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 36, 53), 1.10509, 92.818, 0.0, 9.21168, 10.7066, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:37:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:36:53
2026-04-13T00:37:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:37:01.245 [DEBUG] [Thread-198673] [transport.py] [_log()] starting thread (client mode): 0xae563580
2026-04-13T00:37:01.245 [DEBUG] [Thread-198673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:37:01.265 [DEBUG] [Thread-198673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:37:01.265 [INFO] [Thread-198673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:37:01.268 [DEBUG] [Thread-198673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:37:01.268 [DEBUG] [Thread-198673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] client lang: <none>
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] server lang: <none>
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] kex follows: False
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] Compression: none
2026-04-13T00:37:01.269 [DEBUG] [Thread-198673] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:37:01.285 [DEBUG] [Thread-198673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:37:01.286 [DEBUG] [Thread-198673] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:37:01.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:37:01.286 [DEBUG] [Thread-198673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:37:01.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:37:01.287 [DEBUG] [Thread-198673] [transport.py] [_log()] userauth is OK
2026-04-13T00:37:01.287 [DEBUG] [Thread-198673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:37:01.287 [DEBUG] [Thread-198673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:37:01.287 [DEBUG] [Thread-198673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:37:01.287 [DEBUG] [Thread-198673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:37:01.307 [INFO] [Thread-198673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:37:01.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:37:02.096 [DEBUG] [Thread-198673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:37:02.097 [DEBUG] [Thread-198673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:37:02.098 [DEBUG] [Thread-198673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:37:02.138 [DEBUG] [Thread-198673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:37:02.138 [DEBUG] [Thread-198673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:37:02.142 [DEBUG] [Thread-198673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:37:02.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:37:02.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:37:02.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:37:02.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:37:02.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:37:02.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:37:02.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:37:02.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.941767 -999.00  +10.90   3.25     90   +9.40 1 2 1 3 1     0    0 1.58 4.77 ..ESW 3.2 3.2 225.1 5.9 11.6 -22.4 11.4 -21.4 11.2 -19.3 11.4 -21.3
2026-04-13T00:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.941767
2026-04-13T00:37:02.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:37:02.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:37:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:37:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:37:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:37:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:36:53', tmtdew=1.10509, humidity=92.818, cloud=0.0, wind=9.21168, temperature=10.7066, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:36:08.669', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:37:02.166 [DEBUG] [Thread-198673] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:37:02.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:37:02.250 [DEBUG] [Thread-198676] [transport.py] [_log()] starting thread (client mode): 0xae561ae0
2026-04-13T00:37:02.250 [DEBUG] [Thread-198676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:37:02.265 [DEBUG] [Thread-198676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:37:02.265 [INFO] [Thread-198676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] client lang: <none>
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] server lang: <none>
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] kex follows: False
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:37:02.273 [DEBUG] [Thread-198676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:37:02.274 [DEBUG] [Thread-198676] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:37:02.274 [DEBUG] [Thread-198676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:37:02.274 [DEBUG] [Thread-198676] [transport.py] [_log()] Compression: none
2026-04-13T00:37:02.274 [DEBUG] [Thread-198676] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:37:02.332 [DEBUG] [Thread-198676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:37:02.333 [DEBUG] [Thread-198676] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:37:02.333 [DEBUG] [Thread-198676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:37:02.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:37:02.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:37:02.389 [DEBUG] [Thread-198676] [transport.py] [_log()] userauth is OK
2026-04-13T00:37:02.389 [DEBUG] [Thread-198676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:37:02.389 [DEBUG] [Thread-198676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:37:02.389 [DEBUG] [Thread-198676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:37:02.389 [DEBUG] [Thread-198676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:37:02.408 [INFO] [Thread-198676] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:37:02.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:37:02.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:37:03.249 [DEBUG] [Thread-198676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:37:03.249 [DEBUG] [Thread-198676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:37:03.297 [DEBUG] [Thread-198676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:37:03.298 [DEBUG] [Thread-198676] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:37:03.309 [DEBUG] [Thread-198676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:37:03.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:37:03.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:37:03.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:37:03.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:37:03.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:37:03.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:37:03.347 [DEBUG] [Thread-198676] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:37:13.368 [DEBUG] [Thread-198678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:37:25.416 [DEBUG] [Thread-198679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:37:28.411 [DEBUG] [Thread-198680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:37:33.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:37:33.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:37:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:37:34.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 36, 53), 1.10509, 92.818, 0.0, 9.21168, 10.7066, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:37:34.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:36:53
2026-04-13T00:37:35.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:37:35.161 [DEBUG] [Thread-198681] [transport.py] [_log()] starting thread (client mode): 0xae5f0cd0
2026-04-13T00:37:35.162 [DEBUG] [Thread-198681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:37:35.181 [DEBUG] [Thread-198681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:37:35.182 [INFO] [Thread-198681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] client lang: <none>
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] server lang: <none>
2026-04-13T00:37:35.185 [DEBUG] [Thread-198681] [transport.py] [_log()] kex follows: False
2026-04-13T00:37:35.186 [DEBUG] [Thread-198681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:37:35.186 [DEBUG] [Thread-198681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:37:35.186 [DEBUG] [Thread-198681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:37:35.186 [DEBUG] [Thread-198681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:37:35.186 [DEBUG] [Thread-198681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:37:35.186 [DEBUG] [Thread-198681] [transport.py] [_log()] Compression: none
2026-04-13T00:37:35.186 [DEBUG] [Thread-198681] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:37:35.206 [DEBUG] [Thread-198681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:37:35.207 [DEBUG] [Thread-198681] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:37:35.207 [DEBUG] [Thread-198681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:37:35.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:37:35.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:37:35.210 [DEBUG] [Thread-198681] [transport.py] [_log()] userauth is OK
2026-04-13T00:37:35.210 [DEBUG] [Thread-198681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:37:35.210 [DEBUG] [Thread-198681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:37:35.210 [DEBUG] [Thread-198681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:37:35.210 [DEBUG] [Thread-198681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:37:35.245 [INFO] [Thread-198681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:37:35.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:37:36.029 [DEBUG] [Thread-198681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:37:36.029 [DEBUG] [Thread-198681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:37:36.029 [DEBUG] [Thread-198681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:37:36.070 [DEBUG] [Thread-198681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:37:36.070 [DEBUG] [Thread-198681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:37:36.074 [DEBUG] [Thread-198681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:37:36.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:37:36.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:37:36.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:37:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:37:36.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:37:36.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:37:36.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:37:36.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:37:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:37:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.942462 -999.00  +10.90   4.00     90   +9.40 1 2 1 3 1     0    0 1.58 4.33 ...sw 4.0 4.0 222.1 6.1 11.5 -22.4 11.4 -21.2 11.2 -19.3 11.4 -21.4
2026-04-13T00:37:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:37:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:37:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.942462
2026-04-13T00:37:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:37:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:37:36.101 [DEBUG] [Thread-198681] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:37:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:37:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:37:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:37:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:36:53', tmtdew=1.10509, humidity=92.818, cloud=0.0, wind=9.21168, temperature=10.7066, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:37:08.717', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:37:36.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:37:36.194 [DEBUG] [Thread-198684] [transport.py] [_log()] starting thread (client mode): 0xae561cf0
2026-04-13T00:37:36.194 [DEBUG] [Thread-198684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:37:36.209 [DEBUG] [Thread-198684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:37:36.209 [INFO] [Thread-198684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] client lang: <none>
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] server lang: <none>
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] kex follows: False
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] Compression: none
2026-04-13T00:37:36.217 [DEBUG] [Thread-198684] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:37:36.274 [DEBUG] [Thread-198684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:37:36.275 [DEBUG] [Thread-198684] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:37:36.275 [DEBUG] [Thread-198684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:37:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:37:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:37:36.330 [DEBUG] [Thread-198684] [transport.py] [_log()] userauth is OK
2026-04-13T00:37:36.331 [DEBUG] [Thread-198684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:37:36.331 [DEBUG] [Thread-198684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:37:36.331 [DEBUG] [Thread-198684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:37:36.331 [DEBUG] [Thread-198684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:37:36.349 [INFO] [Thread-198684] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:37:36.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:37:36.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:37:37.176 [DEBUG] [Thread-198684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:37:37.177 [DEBUG] [Thread-198684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:37:37.224 [DEBUG] [Thread-198684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:37:37.224 [DEBUG] [Thread-198684] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:37:37.235 [DEBUG] [Thread-198684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:37:37.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:37:37.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:37:37.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:37:37.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:37:37.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:37:37.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:37:37.272 [DEBUG] [Thread-198684] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:37:43.444 [DEBUG] [Thread-198686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:37:58.499 [DEBUG] [Thread-198687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:37:59.769 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:37:59.771 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:38:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:38:07.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:38:07.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:38:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 37, 28), 1.35534, 91.3924, 0.0, 7.94124, 10.8699, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:38:08.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:37:28
2026-04-13T00:38:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:38:09.304 [DEBUG] [Thread-198688] [transport.py] [_log()] starting thread (client mode): 0xae5f1210
2026-04-13T00:38:09.304 [DEBUG] [Thread-198688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:38:09.323 [DEBUG] [Thread-198688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:38:09.323 [INFO] [Thread-198688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] client lang: <none>
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] server lang: <none>
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] kex follows: False
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] Compression: none
2026-04-13T00:38:09.326 [DEBUG] [Thread-198688] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:38:09.345 [DEBUG] [Thread-198688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:38:09.345 [DEBUG] [Thread-198688] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:38:09.346 [DEBUG] [Thread-198688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:38:09.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:38:09.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:38:09.348 [DEBUG] [Thread-198688] [transport.py] [_log()] userauth is OK
2026-04-13T00:38:09.348 [DEBUG] [Thread-198688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:38:09.348 [DEBUG] [Thread-198688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:38:09.348 [DEBUG] [Thread-198688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:38:09.348 [DEBUG] [Thread-198688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:38:09.366 [INFO] [Thread-198688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:38:09.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:38:10.142 [DEBUG] [Thread-198688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:38:10.142 [DEBUG] [Thread-198688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:38:10.143 [DEBUG] [Thread-198688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:38:10.183 [DEBUG] [Thread-198688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:38:10.183 [DEBUG] [Thread-198688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:38:10.187 [DEBUG] [Thread-198688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:38:10.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:38:10.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:38:10.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:38:10.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:38:10.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:38:10.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:38:10.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:38:10.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:38:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:38:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.942809 -999.00  +10.90   5.41     90   +9.40 1 2 1 3 1     0    0 1.52 3.91 ...sw 5.4 5.4 215.9 6.4 11.6 -22.4 11.4 -21.3 11.1 -19.3 11.4 -21.4
2026-04-13T00:38:10.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:38:10.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:38:10.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.942809
2026-04-13T00:38:10.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:38:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:38:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:38:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:38:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:38:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:37:28', tmtdew=1.35534, humidity=91.3924, cloud=0.0, wind=7.94124, temperature=10.8699, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:37:38.698', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:38:10.212 [DEBUG] [Thread-198688] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:38:10.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:38:10.304 [DEBUG] [Thread-198691] [transport.py] [_log()] starting thread (client mode): 0xae5f3af0
2026-04-13T00:38:10.304 [DEBUG] [Thread-198691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:38:10.319 [DEBUG] [Thread-198691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:38:10.319 [INFO] [Thread-198691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] client lang: <none>
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] server lang: <none>
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] kex follows: False
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:38:10.327 [DEBUG] [Thread-198691] [transport.py] [_log()] Compression: none
2026-04-13T00:38:10.328 [DEBUG] [Thread-198691] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:38:10.386 [DEBUG] [Thread-198691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:38:10.386 [DEBUG] [Thread-198691] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:38:10.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:38:10.387 [DEBUG] [Thread-198691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:38:10.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:38:10.443 [DEBUG] [Thread-198691] [transport.py] [_log()] userauth is OK
2026-04-13T00:38:10.443 [DEBUG] [Thread-198691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:38:10.443 [DEBUG] [Thread-198691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:38:10.443 [DEBUG] [Thread-198691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:38:10.443 [DEBUG] [Thread-198691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:38:10.462 [INFO] [Thread-198691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:38:10.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:38:10.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:38:11.333 [DEBUG] [Thread-198691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:38:11.333 [DEBUG] [Thread-198691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:38:11.381 [DEBUG] [Thread-198691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:38:11.381 [DEBUG] [Thread-198691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:38:11.391 [DEBUG] [Thread-198691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:38:11.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:38:11.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:38:11.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:38:11.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:38:11.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:38:11.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:38:11.428 [DEBUG] [Thread-198691] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:38:13.544 [DEBUG] [Thread-198693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:38:25.485 [DEBUG] [Thread-198694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:38:28.609 [DEBUG] [Thread-198695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:38:41.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:38:41.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:38:41.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:38:42.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 38, 4), 1.35561, 91.3924, 0.0, 7.4826, 10.903, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:38:42.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:38:04
2026-04-13T00:38:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:38:43.408 [DEBUG] [Thread-198696] [transport.py] [_log()] starting thread (client mode): 0xb39c66b0
2026-04-13T00:38:43.408 [DEBUG] [Thread-198696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:38:43.428 [DEBUG] [Thread-198696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:38:43.428 [INFO] [Thread-198696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:38:43.431 [DEBUG] [Thread-198696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] client lang: <none>
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] server lang: <none>
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] kex follows: False
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:38:43.432 [DEBUG] [Thread-198696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:38:43.433 [DEBUG] [Thread-198696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:38:43.433 [DEBUG] [Thread-198696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:38:43.433 [DEBUG] [Thread-198696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:38:43.433 [DEBUG] [Thread-198696] [transport.py] [_log()] Compression: none
2026-04-13T00:38:43.433 [DEBUG] [Thread-198696] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:38:43.453 [DEBUG] [Thread-198696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:38:43.454 [DEBUG] [Thread-198696] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:38:43.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:38:43.456 [DEBUG] [Thread-198696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:38:43.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:38:43.458 [DEBUG] [Thread-198696] [transport.py] [_log()] userauth is OK
2026-04-13T00:38:43.459 [DEBUG] [Thread-198696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:38:43.459 [DEBUG] [Thread-198696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:38:43.459 [DEBUG] [Thread-198696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:38:43.459 [DEBUG] [Thread-198696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:38:43.485 [INFO] [Thread-198696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:38:43.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:38:43.648 [DEBUG] [Thread-198698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:38:44.263 [DEBUG] [Thread-198696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:38:44.264 [DEBUG] [Thread-198696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:38:44.264 [DEBUG] [Thread-198696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:38:44.305 [DEBUG] [Thread-198696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:38:44.305 [DEBUG] [Thread-198696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:38:44.308 [DEBUG] [Thread-198696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:38:44.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:38:44.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:38:44.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:38:44.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:38:44.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:38:44.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:38:44.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:38:44.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:38:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:38:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.943156 -999.00  +10.90   3.38     90   +9.40 1 2 1 3 1     0    0 1.53 3.30 ..ESw 3.4 3.4 200.1 5.5 11.5 -22.5 11.4 -21.3 11.1 -19.4 11.4 -21.3
2026-04-13T00:38:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:38:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:38:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.943156
2026-04-13T00:38:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:38:44.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:38:44.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:38:44.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:38:44.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:38:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:38:04', tmtdew=1.35561, humidity=91.3924, cloud=0.0, wind=7.4826, temperature=10.903, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:38:08.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:38:44.335 [DEBUG] [Thread-198696] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:38:44.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:38:44.427 [DEBUG] [Thread-198700] [transport.py] [_log()] starting thread (client mode): 0xb39c73a0
2026-04-13T00:38:44.427 [DEBUG] [Thread-198700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:38:44.442 [DEBUG] [Thread-198700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:38:44.442 [INFO] [Thread-198700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] client lang: <none>
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] server lang: <none>
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] kex follows: False
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:38:44.450 [DEBUG] [Thread-198700] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:38:44.451 [DEBUG] [Thread-198700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:38:44.451 [DEBUG] [Thread-198700] [transport.py] [_log()] Compression: none
2026-04-13T00:38:44.451 [DEBUG] [Thread-198700] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:38:44.510 [DEBUG] [Thread-198700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:38:44.511 [DEBUG] [Thread-198700] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:38:44.511 [DEBUG] [Thread-198700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:38:44.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:38:44.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:38:44.570 [DEBUG] [Thread-198700] [transport.py] [_log()] userauth is OK
2026-04-13T00:38:44.571 [DEBUG] [Thread-198700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:38:44.571 [DEBUG] [Thread-198700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:38:44.571 [DEBUG] [Thread-198700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:38:44.571 [DEBUG] [Thread-198700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:38:44.590 [INFO] [Thread-198700] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:38:44.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:38:44.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:38:45.404 [DEBUG] [Thread-198700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:38:45.404 [DEBUG] [Thread-198700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:38:45.452 [DEBUG] [Thread-198700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:38:45.452 [DEBUG] [Thread-198700] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:38:45.462 [DEBUG] [Thread-198700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:38:45.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:38:45.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:38:45.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:38:45.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:38:45.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:38:45.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:38:45.498 [DEBUG] [Thread-198700] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:38:58.685 [DEBUG] [Thread-198702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:38:59.976 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:38:59.977 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:39:13.745 [DEBUG] [Thread-198703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:39:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:39:15.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:39:15.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:39:16.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 38, 39), 1.12666, 92.6853, 0.0, 8.18856, 10.7397, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:39:16.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:38:39
2026-04-13T00:39:17.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:39:17.501 [DEBUG] [Thread-198704] [transport.py] [_log()] starting thread (client mode): 0xb39c7fa0
2026-04-13T00:39:17.502 [DEBUG] [Thread-198704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:39:17.522 [DEBUG] [Thread-198704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:39:17.522 [INFO] [Thread-198704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:39:17.525 [DEBUG] [Thread-198704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] client lang: <none>
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] server lang: <none>
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] kex follows: False
2026-04-13T00:39:17.526 [DEBUG] [Thread-198704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:39:17.527 [DEBUG] [Thread-198704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:39:17.527 [DEBUG] [Thread-198704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:39:17.527 [DEBUG] [Thread-198704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:39:17.527 [DEBUG] [Thread-198704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:39:17.527 [DEBUG] [Thread-198704] [transport.py] [_log()] Compression: none
2026-04-13T00:39:17.527 [DEBUG] [Thread-198704] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:39:17.544 [DEBUG] [Thread-198704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:39:17.545 [DEBUG] [Thread-198704] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:39:17.545 [DEBUG] [Thread-198704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:39:17.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:39:17.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:39:17.547 [DEBUG] [Thread-198704] [transport.py] [_log()] userauth is OK
2026-04-13T00:39:17.547 [DEBUG] [Thread-198704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:39:17.548 [DEBUG] [Thread-198704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:39:17.548 [DEBUG] [Thread-198704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:39:17.548 [DEBUG] [Thread-198704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:39:17.564 [INFO] [Thread-198704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:39:17.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:39:18.344 [DEBUG] [Thread-198704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:39:18.344 [DEBUG] [Thread-198704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:39:18.344 [DEBUG] [Thread-198704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:39:18.385 [DEBUG] [Thread-198704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:39:18.385 [DEBUG] [Thread-198704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:39:18.389 [DEBUG] [Thread-198704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:39:18.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:39:18.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:39:18.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:39:18.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:39:18.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:39:18.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:39:18.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:39:18.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:39:18.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:39:18.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.943503 -999.00  +10.90   4.15     90   +9.40 1 2 1 3 1     0    0 1.53 3.43 ..ESw 4.2 4.2 220.2 5.7 11.6 -22.4 11.4 -21.2 11.1 -19.3 11.4 -21.2
2026-04-13T00:39:18.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:39:18.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:39:18.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.943503
2026-04-13T00:39:18.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:39:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:39:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:39:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:39:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:39:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:38:39', tmtdew=1.12666, humidity=92.6853, cloud=0.0, wind=8.18856, temperature=10.7397, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:38:38.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:39:18.418 [DEBUG] [Thread-198704] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:39:18.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:39:18.511 [DEBUG] [Thread-198707] [transport.py] [_log()] starting thread (client mode): 0xae5f15d0
2026-04-13T00:39:18.511 [DEBUG] [Thread-198707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:39:18.525 [DEBUG] [Thread-198707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:39:18.526 [INFO] [Thread-198707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:39:18.533 [DEBUG] [Thread-198707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] client lang: <none>
2026-04-13T00:39:18.534 [DEBUG] [Thread-198707] [transport.py] [_log()] server lang: <none>
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] kex follows: False
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] Compression: none
2026-04-13T00:39:18.535 [DEBUG] [Thread-198707] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:39:18.594 [DEBUG] [Thread-198707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:39:18.595 [DEBUG] [Thread-198707] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:39:18.596 [DEBUG] [Thread-198707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:39:18.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:39:18.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:39:18.654 [DEBUG] [Thread-198707] [transport.py] [_log()] userauth is OK
2026-04-13T00:39:18.655 [DEBUG] [Thread-198707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:39:18.655 [DEBUG] [Thread-198707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:39:18.655 [DEBUG] [Thread-198707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:39:18.655 [DEBUG] [Thread-198707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:39:18.673 [INFO] [Thread-198707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:39:18.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:39:18.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:39:19.475 [DEBUG] [Thread-198707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:39:19.475 [DEBUG] [Thread-198707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:39:19.523 [DEBUG] [Thread-198707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:39:19.523 [DEBUG] [Thread-198707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:39:19.532 [DEBUG] [Thread-198707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:39:19.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:39:19.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:39:19.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:39:19.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:39:19.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:39:19.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:39:19.570 [DEBUG] [Thread-198707] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:39:25.547 [DEBUG] [Thread-198709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:39:28.782 [DEBUG] [Thread-198710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:39:43.828 [DEBUG] [Thread-198711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:39:49.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:39:49.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:39:49.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:39:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 39, 15), 1.42154, 90.7933, 0.0, 7.99416, 10.9033, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:39:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:39:15
2026-04-13T00:39:51.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:39:51.389 [DEBUG] [Thread-198712] [transport.py] [_log()] starting thread (client mode): 0xb39c5cf0
2026-04-13T00:39:51.389 [DEBUG] [Thread-198712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:39:51.410 [DEBUG] [Thread-198712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:39:51.410 [INFO] [Thread-198712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:39:51.414 [DEBUG] [Thread-198712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] client lang: <none>
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] server lang: <none>
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] kex follows: False
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] Compression: none
2026-04-13T00:39:51.415 [DEBUG] [Thread-198712] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:39:51.436 [DEBUG] [Thread-198712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:39:51.436 [DEBUG] [Thread-198712] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:39:51.437 [DEBUG] [Thread-198712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:39:51.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:39:51.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:39:51.439 [DEBUG] [Thread-198712] [transport.py] [_log()] userauth is OK
2026-04-13T00:39:51.439 [DEBUG] [Thread-198712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:39:51.439 [DEBUG] [Thread-198712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:39:51.439 [DEBUG] [Thread-198712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:39:51.439 [DEBUG] [Thread-198712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:39:51.474 [INFO] [Thread-198712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:39:51.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:39:52.285 [DEBUG] [Thread-198712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:39:52.286 [DEBUG] [Thread-198712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:39:52.286 [DEBUG] [Thread-198712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:39:52.327 [DEBUG] [Thread-198712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:39:52.327 [DEBUG] [Thread-198712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:39:52.330 [DEBUG] [Thread-198712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:39:52.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:39:52.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:39:52.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:39:52.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:39:52.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:39:52.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:39:52.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:39:52.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:39:52.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:39:52.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.943850 -999.00  +10.90   4.65     90   +9.40 1 2 1 3 1     0    0 1.53 3.70 ..... 4.7 4.7 225.0 5.9 11.5 -22.3 11.4 -21.2 11.1 -19.4 11.4 -21.1
2026-04-13T00:39:52.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:39:52.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:39:52.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.943850
2026-04-13T00:39:52.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:39:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:39:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:39:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:39:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:39:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:39:15', tmtdew=1.42154, humidity=90.7933, cloud=0.0, wind=7.99416, temperature=10.9033, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:39:08.640', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:39:52.356 [DEBUG] [Thread-198712] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:39:52.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:39:52.464 [DEBUG] [Thread-198715] [transport.py] [_log()] starting thread (client mode): 0xae5f2ad0
2026-04-13T00:39:52.464 [DEBUG] [Thread-198715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:39:52.483 [DEBUG] [Thread-198715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:39:52.483 [INFO] [Thread-198715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:39:52.494 [DEBUG] [Thread-198715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:39:52.494 [DEBUG] [Thread-198715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:39:52.494 [DEBUG] [Thread-198715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:39:52.494 [DEBUG] [Thread-198715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:52.494 [DEBUG] [Thread-198715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] client lang: <none>
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] server lang: <none>
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] kex follows: False
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] Compression: none
2026-04-13T00:39:52.495 [DEBUG] [Thread-198715] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:39:52.553 [DEBUG] [Thread-198715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:39:52.554 [DEBUG] [Thread-198715] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:39:52.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:39:52.555 [DEBUG] [Thread-198715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:39:52.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:39:52.613 [DEBUG] [Thread-198715] [transport.py] [_log()] userauth is OK
2026-04-13T00:39:52.613 [DEBUG] [Thread-198715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:39:52.613 [DEBUG] [Thread-198715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:39:52.614 [DEBUG] [Thread-198715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:39:52.614 [DEBUG] [Thread-198715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:39:52.636 [INFO] [Thread-198715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:39:52.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:39:52.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:39:53.464 [DEBUG] [Thread-198715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:39:53.464 [DEBUG] [Thread-198715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:39:53.512 [DEBUG] [Thread-198715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:39:53.512 [DEBUG] [Thread-198715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:39:53.521 [DEBUG] [Thread-198715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:39:53.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:39:53.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:39:53.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:39:53.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:39:53.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:39:53.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:39:53.558 [DEBUG] [Thread-198715] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:39:58.860 [DEBUG] [Thread-198717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:00.184 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:00.186 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:13.914 [DEBUG] [Thread-198718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:40:23.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:40:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:40:24.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 39, 51), 1.14311, 92.5864, 0.0, 7.30656, 10.8065, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:40:24.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:39:51
2026-04-13T00:40:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:40:25.365 [DEBUG] [Thread-198719] [transport.py] [_log()] starting thread (client mode): 0xb39c7040
2026-04-13T00:40:25.365 [DEBUG] [Thread-198719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:40:25.386 [DEBUG] [Thread-198719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:40:25.386 [INFO] [Thread-198719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] client lang: <none>
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] server lang: <none>
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] kex follows: False
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] Compression: none
2026-04-13T00:40:25.389 [DEBUG] [Thread-198719] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:40:25.408 [DEBUG] [Thread-198719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:40:25.409 [DEBUG] [Thread-198719] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:40:25.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:40:25.411 [DEBUG] [Thread-198719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:40:25.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:40:25.413 [DEBUG] [Thread-198719] [transport.py] [_log()] userauth is OK
2026-04-13T00:40:25.414 [DEBUG] [Thread-198719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:40:25.414 [DEBUG] [Thread-198719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:40:25.414 [DEBUG] [Thread-198719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:40:25.414 [DEBUG] [Thread-198719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:40:25.452 [INFO] [Thread-198719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:40:25.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:40:25.615 [DEBUG] [Thread-198721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:26.186 [DEBUG] [Thread-198719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:40:26.186 [DEBUG] [Thread-198719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:40:26.187 [DEBUG] [Thread-198719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:40:26.227 [DEBUG] [Thread-198719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:40:26.227 [DEBUG] [Thread-198719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:40:26.231 [DEBUG] [Thread-198719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:40:26.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:40:26.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:40:26.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:40:26.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:40:26.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:40:26.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:40:26.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:40:26.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:40:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:40:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.944198 -999.00  +10.90   2.74     90   +9.40 1 2 1 3 1     0    0 1.55 3.39 ..eSw 2.7 2.7 246.2 5.9 11.5 -22.3 11.4 -21.3 11.1 -19.2 11.4 -21.3
2026-04-13T00:40:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:40:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:40:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.944198
2026-04-13T00:40:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:40:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:40:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:40:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:40:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:40:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:39:51', tmtdew=1.14311, humidity=92.5864, cloud=0.0, wind=7.30656, temperature=10.8065, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:39:38.707', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:40:26.261 [DEBUG] [Thread-198719] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:40:26.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:40:26.358 [DEBUG] [Thread-198723] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-13T00:40:26.358 [DEBUG] [Thread-198723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:40:26.373 [DEBUG] [Thread-198723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:40:26.373 [INFO] [Thread-198723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:40:26.381 [DEBUG] [Thread-198723] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:40:26.381 [DEBUG] [Thread-198723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:40:26.381 [DEBUG] [Thread-198723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:40:26.381 [DEBUG] [Thread-198723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:40:26.381 [DEBUG] [Thread-198723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] client lang: <none>
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] server lang: <none>
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] kex follows: False
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] Compression: none
2026-04-13T00:40:26.382 [DEBUG] [Thread-198723] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:40:26.445 [DEBUG] [Thread-198723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:40:26.445 [DEBUG] [Thread-198723] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:40:26.446 [DEBUG] [Thread-198723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:40:26.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:40:26.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:40:26.501 [DEBUG] [Thread-198723] [transport.py] [_log()] userauth is OK
2026-04-13T00:40:26.501 [DEBUG] [Thread-198723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:40:26.501 [DEBUG] [Thread-198723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:40:26.501 [DEBUG] [Thread-198723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:40:26.501 [DEBUG] [Thread-198723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:40:26.520 [INFO] [Thread-198723] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:40:26.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:40:26.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:40:27.313 [DEBUG] [Thread-198723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:40:27.313 [DEBUG] [Thread-198723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:40:27.361 [DEBUG] [Thread-198723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:40:27.361 [DEBUG] [Thread-198723] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:40:27.370 [DEBUG] [Thread-198723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:40:27.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:40:27.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:40:27.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:40:27.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:40:27.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:40:27.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:40:27.407 [DEBUG] [Thread-198723] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:40:28.952 [DEBUG] [Thread-198725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:44.005 [DEBUG] [Thread-198726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:40:57.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:40:57.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:40:58.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 40, 27), 1.41916, 90.8098, 0.0, 7.78248, 10.9364, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:40:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:40:27
2026-04-13T00:40:59.045 [DEBUG] [Thread-198727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:40:59.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:40:59.242 [DEBUG] [Thread-198728] [transport.py] [_log()] starting thread (client mode): 0xb39c6080
2026-04-13T00:40:59.242 [DEBUG] [Thread-198728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:40:59.263 [DEBUG] [Thread-198728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:40:59.263 [INFO] [Thread-198728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] client lang: <none>
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] server lang: <none>
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] kex follows: False
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] Compression: none
2026-04-13T00:40:59.267 [DEBUG] [Thread-198728] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:40:59.285 [DEBUG] [Thread-198728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:40:59.286 [DEBUG] [Thread-198728] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:40:59.286 [DEBUG] [Thread-198728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:40:59.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:40:59.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:40:59.288 [DEBUG] [Thread-198728] [transport.py] [_log()] userauth is OK
2026-04-13T00:40:59.289 [DEBUG] [Thread-198728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:40:59.289 [DEBUG] [Thread-198728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:40:59.289 [DEBUG] [Thread-198728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:40:59.289 [DEBUG] [Thread-198728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:40:59.307 [INFO] [Thread-198728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:40:59.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:41:00.113 [DEBUG] [Thread-198728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:41:00.114 [DEBUG] [Thread-198728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:41:00.114 [DEBUG] [Thread-198728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:41:00.155 [DEBUG] [Thread-198728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:41:00.155 [DEBUG] [Thread-198728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:41:00.159 [DEBUG] [Thread-198728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:41:00.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:41:00.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:41:00.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:41:00.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:41:00.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:41:00.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:41:00.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:41:00.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:41:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:41:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.944892 -999.00  +10.90   3.78     91   +9.50 1 2 1 3 1     0    0 1.54 3.00 ..... 3.8 3.8 224.9 5.2 11.5 -22.3 11.4 -21.2 11.1 -19.3 11.4 -21.3
2026-04-13T00:41:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:41:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:41:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.944892
2026-04-13T00:41:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:41:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:41:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:41:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:41:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:41:00.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:40:27', tmtdew=1.41916, humidity=90.8098, cloud=0.0, wind=7.78248, temperature=10.9364, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:40:38.669', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0740000000000007, nan, nan, nan, nan, nan, nan, 1.4612499999999997, 1.2155000000000005, nan, nan, nan, nan, nan, 2.4425, 2.205, 2.377249999999999, 3.0119999999999987, nan, nan, nan, nan, 0.27749999999999986, 0.11374999999999957, 0.13150000000000084, 0.20800000000000018, 0.40500000000000114, 1.0460000000000012, 2.2990000000000004, 2.1827499999999986], zp_timestamp='2026-04-12T22:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:41:00.186 [DEBUG] [Thread-198728] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:41:00.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:41:00.391 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:41:00.392 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:41:14.086 [DEBUG] [Thread-198731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:41:25.673 [DEBUG] [Thread-198732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:41:29.138 [DEBUG] [Thread-198733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:41:44.172 [DEBUG] [Thread-198734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:41:59.212 [DEBUG] [Thread-198735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:42:00.609 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:42:00.610 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:42:14.250 [DEBUG] [Thread-198736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:42:25.741 [DEBUG] [Thread-198737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:42:29.287 [DEBUG] [Thread-198738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:42:44.327 [DEBUG] [Thread-198739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:42:59.364 [DEBUG] [Thread-198740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:43:00.815 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:43:00.816 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:43:14.399 [DEBUG] [Thread-198741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:43:15.711 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T00:43:25.802 [DEBUG] [Thread-198742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:43:29.436 [DEBUG] [Thread-198743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:43:44.475 [DEBUG] [Thread-198744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:43:45.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:43:45.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:43:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:43:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 43, 24), 1.47434, 90.7767, 0.0, 8.66448, 10.9699, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:43:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:43:24
2026-04-13T00:43:47.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:43:47.582 [DEBUG] [Thread-198745] [transport.py] [_log()] starting thread (client mode): 0xb39c4ac0
2026-04-13T00:43:47.582 [DEBUG] [Thread-198745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:43:47.603 [DEBUG] [Thread-198745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:43:47.603 [INFO] [Thread-198745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] client lang: <none>
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] server lang: <none>
2026-04-13T00:43:47.606 [DEBUG] [Thread-198745] [transport.py] [_log()] kex follows: False
2026-04-13T00:43:47.607 [DEBUG] [Thread-198745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:43:47.607 [DEBUG] [Thread-198745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:43:47.607 [DEBUG] [Thread-198745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:43:47.607 [DEBUG] [Thread-198745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:43:47.607 [DEBUG] [Thread-198745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:43:47.607 [DEBUG] [Thread-198745] [transport.py] [_log()] Compression: none
2026-04-13T00:43:47.607 [DEBUG] [Thread-198745] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:43:47.625 [DEBUG] [Thread-198745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:43:47.625 [DEBUG] [Thread-198745] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:43:47.626 [DEBUG] [Thread-198745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:43:47.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:43:47.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:43:47.628 [DEBUG] [Thread-198745] [transport.py] [_log()] userauth is OK
2026-04-13T00:43:47.628 [DEBUG] [Thread-198745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:43:47.628 [DEBUG] [Thread-198745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:43:47.628 [DEBUG] [Thread-198745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:43:47.628 [DEBUG] [Thread-198745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:43:47.647 [INFO] [Thread-198745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:43:47.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:43:48.266 [DEBUG] [Thread-198745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:43:48.267 [DEBUG] [Thread-198745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:43:48.267 [DEBUG] [Thread-198745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:43:48.308 [DEBUG] [Thread-198745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:43:48.308 [DEBUG] [Thread-198745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:43:48.311 [DEBUG] [Thread-198745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:43:48.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:43:48.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:43:48.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:43:48.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:43:48.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:43:48.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:43:48.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:43:48.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:43:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:43:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.946628 -999.00  +10.90   3.65     91   +9.50 1 2 1 3 1     0    0 1.49 2.66 ..ES. 3.6 3.6 212.6 6.4 11.6 -22.3 11.4 -21.2 11.1 -19.2 11.4 -21.2
2026-04-13T00:43:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:43:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:43:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.946628
2026-04-13T00:43:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:43:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:43:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:43:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:43:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:43:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:43:24', tmtdew=1.47434, humidity=90.7767, cloud=0.0, wind=8.66448, temperature=10.9699, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:43:08.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:43:48.336 [DEBUG] [Thread-198745] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:43:48.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:43:48.439 [DEBUG] [Thread-198748] [transport.py] [_log()] starting thread (client mode): 0xb39c7ca0
2026-04-13T00:43:48.439 [DEBUG] [Thread-198748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:43:48.454 [DEBUG] [Thread-198748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:43:48.454 [INFO] [Thread-198748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:43:48.461 [DEBUG] [Thread-198748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:43:48.461 [DEBUG] [Thread-198748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] client lang: <none>
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] server lang: <none>
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] kex follows: False
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] Compression: none
2026-04-13T00:43:48.462 [DEBUG] [Thread-198748] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:43:48.521 [DEBUG] [Thread-198748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:43:48.522 [DEBUG] [Thread-198748] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:43:48.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:43:48.523 [DEBUG] [Thread-198748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:43:48.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:43:48.578 [DEBUG] [Thread-198748] [transport.py] [_log()] userauth is OK
2026-04-13T00:43:48.578 [DEBUG] [Thread-198748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:43:48.578 [DEBUG] [Thread-198748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:43:48.578 [DEBUG] [Thread-198748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:43:48.579 [DEBUG] [Thread-198748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:43:48.598 [INFO] [Thread-198748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:43:48.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:43:48.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:43:49.435 [DEBUG] [Thread-198748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:43:49.435 [DEBUG] [Thread-198748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:43:49.483 [DEBUG] [Thread-198748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:43:49.483 [DEBUG] [Thread-198748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:43:49.491 [DEBUG] [Thread-198748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:43:49.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:43:49.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:43:49.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:43:49.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:43:49.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:43:49.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:43:49.523 [DEBUG] [Thread-198748] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:43:59.510 [DEBUG] [Thread-198750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:44:01.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:44:01.020 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:44:14.581 [DEBUG] [Thread-198751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:44:19.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:44:19.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:44:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:44:20.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 43, 24), 1.47434, 90.7767, 0.0, 8.66448, 10.9699, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:44:20.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:43:24
2026-04-13T00:44:21.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:44:21.354 [DEBUG] [Thread-198752] [transport.py] [_log()] starting thread (client mode): 0xb0fcd4b0
2026-04-13T00:44:21.354 [DEBUG] [Thread-198752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:44:21.374 [DEBUG] [Thread-198752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:44:21.374 [INFO] [Thread-198752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] client lang: <none>
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] server lang: <none>
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] kex follows: False
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] Compression: none
2026-04-13T00:44:21.376 [DEBUG] [Thread-198752] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:44:21.385 [DEBUG] [Thread-198752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:44:21.385 [DEBUG] [Thread-198752] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:44:21.386 [DEBUG] [Thread-198752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:44:21.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:44:21.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:44:21.388 [DEBUG] [Thread-198752] [transport.py] [_log()] userauth is OK
2026-04-13T00:44:21.388 [DEBUG] [Thread-198752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:44:21.388 [DEBUG] [Thread-198752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:44:21.388 [DEBUG] [Thread-198752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:44:21.388 [DEBUG] [Thread-198752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:44:21.406 [INFO] [Thread-198752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:44:21.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:44:22.039 [DEBUG] [Thread-198752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:44:22.039 [DEBUG] [Thread-198752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:44:22.040 [DEBUG] [Thread-198752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:44:22.080 [DEBUG] [Thread-198752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:44:22.080 [DEBUG] [Thread-198752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:44:22.084 [DEBUG] [Thread-198752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:44:22.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:44:22.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:44:22.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:44:22.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:44:22.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:44:22.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:44:22.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:44:22.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:44:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:44:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.947322 -999.00  +10.90   4.86     90   +9.50 1 2 1 3 1     0    0 1.50 2.35 ..eS. 4.9 4.9 207.0 6.5 11.6 -22.3 11.4 -21.2 11.1 -19.2 11.4 -21.1
2026-04-13T00:44:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:44:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:44:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.947322
2026-04-13T00:44:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:44:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:44:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:44:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:44:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:44:22.110 [DEBUG] [Thread-198752] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:44:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:43:24', tmtdew=1.47434, humidity=90.7767, cloud=0.0, wind=8.66448, temperature=10.9699, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:44:08.621', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:44:22.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:44:22.205 [DEBUG] [Thread-198755] [transport.py] [_log()] starting thread (client mode): 0xb39c5630
2026-04-13T00:44:22.205 [DEBUG] [Thread-198755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:44:22.220 [DEBUG] [Thread-198755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:44:22.220 [INFO] [Thread-198755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:44:22.227 [DEBUG] [Thread-198755] [transport.py] [_log()] client lang: <none>
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] server lang: <none>
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] kex follows: False
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] Compression: none
2026-04-13T00:44:22.228 [DEBUG] [Thread-198755] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:44:22.285 [DEBUG] [Thread-198755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:44:22.286 [DEBUG] [Thread-198755] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:44:22.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:44:22.287 [DEBUG] [Thread-198755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:44:22.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:44:22.344 [DEBUG] [Thread-198755] [transport.py] [_log()] userauth is OK
2026-04-13T00:44:22.344 [DEBUG] [Thread-198755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:44:22.345 [DEBUG] [Thread-198755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:44:22.345 [DEBUG] [Thread-198755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:44:22.345 [DEBUG] [Thread-198755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:44:22.363 [INFO] [Thread-198755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:44:22.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:44:22.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:44:23.184 [DEBUG] [Thread-198755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:44:23.184 [DEBUG] [Thread-198755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:44:23.232 [DEBUG] [Thread-198755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:44:23.232 [DEBUG] [Thread-198755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:44:23.241 [DEBUG] [Thread-198755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:44:23.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:44:23.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:44:23.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:44:23.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:44:23.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:44:23.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:44:23.279 [DEBUG] [Thread-198755] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:44:25.872 [DEBUG] [Thread-198757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:44:29.618 [DEBUG] [Thread-198758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:44:44.669 [DEBUG] [Thread-198759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:44:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:44:53.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:44:53.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:44:54.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 44, 35), 1.17544, 92.3874, 0.0, 8.2944, 10.8397, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:44:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:44:35
2026-04-13T00:44:54.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:44:55.154 [DEBUG] [Thread-198760] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-13T00:44:55.154 [DEBUG] [Thread-198760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:44:55.175 [DEBUG] [Thread-198760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:44:55.175 [INFO] [Thread-198760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:44:55.176 [DEBUG] [Thread-198760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] client lang: <none>
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] server lang: <none>
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] kex follows: False
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] Compression: none
2026-04-13T00:44:55.177 [DEBUG] [Thread-198760] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:44:55.185 [DEBUG] [Thread-198760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:44:55.186 [DEBUG] [Thread-198760] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:44:55.186 [DEBUG] [Thread-198760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:44:55.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:44:55.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:44:55.188 [DEBUG] [Thread-198760] [transport.py] [_log()] userauth is OK
2026-04-13T00:44:55.188 [DEBUG] [Thread-198760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:44:55.188 [DEBUG] [Thread-198760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:44:55.188 [DEBUG] [Thread-198760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:44:55.189 [DEBUG] [Thread-198760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:44:55.207 [INFO] [Thread-198760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:44:55.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:44:55.812 [DEBUG] [Thread-198760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:44:55.812 [DEBUG] [Thread-198760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:44:55.813 [DEBUG] [Thread-198760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:44:55.853 [DEBUG] [Thread-198760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:44:55.854 [DEBUG] [Thread-198760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:44:55.856 [DEBUG] [Thread-198760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:44:55.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:44:55.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:44:55.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:44:55.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:44:55.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:44:55.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:44:55.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:44:55.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:44:55.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:44:55.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.947670 -999.00  +10.90   3.92     90   +9.40 1 2 1 3 1     0    0 1.53 2.60 ..eS. 3.9 3.9 213.6 5.0 11.6 -22.4 11.4 -21.2 11.1 -19.2 11.4 -21.2
2026-04-13T00:44:55.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:44:55.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:44:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.947670
2026-04-13T00:44:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:44:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:44:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:44:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:44:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:44:55.881 [DEBUG] [Thread-198760] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:44:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:44:35', tmtdew=1.17544, humidity=92.3874, cloud=0.0, wind=8.2944, temperature=10.8397, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:44:38.688', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:44:55.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:44:55.974 [DEBUG] [Thread-198763] [transport.py] [_log()] starting thread (client mode): 0xae519ba0
2026-04-13T00:44:55.974 [DEBUG] [Thread-198763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:44:55.990 [DEBUG] [Thread-198763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:44:55.990 [INFO] [Thread-198763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] client lang: <none>
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] server lang: <none>
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] kex follows: False
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:44:55.997 [DEBUG] [Thread-198763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:44:55.998 [DEBUG] [Thread-198763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:44:55.998 [DEBUG] [Thread-198763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:44:55.998 [DEBUG] [Thread-198763] [transport.py] [_log()] Compression: none
2026-04-13T00:44:55.998 [DEBUG] [Thread-198763] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:44:56.055 [DEBUG] [Thread-198763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:44:56.055 [DEBUG] [Thread-198763] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:44:56.055 [DEBUG] [Thread-198763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:44:56.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:44:56.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:44:56.112 [DEBUG] [Thread-198763] [transport.py] [_log()] userauth is OK
2026-04-13T00:44:56.112 [DEBUG] [Thread-198763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:44:56.112 [DEBUG] [Thread-198763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:44:56.112 [DEBUG] [Thread-198763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:44:56.112 [DEBUG] [Thread-198763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:44:56.130 [INFO] [Thread-198763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:44:56.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:44:56.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:44:56.964 [DEBUG] [Thread-198763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:44:56.964 [DEBUG] [Thread-198763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:44:57.012 [DEBUG] [Thread-198763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:44:57.012 [DEBUG] [Thread-198763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:44:57.022 [DEBUG] [Thread-198763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:44:57.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:44:57.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:44: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
2026-04-13T00:44:57.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:44:57.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:44:57.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:44:57.059 [DEBUG] [Thread-198763] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:44:59.704 [DEBUG] [Thread-198765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:45:01.226 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:45:01.228 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:45:14.758 [DEBUG] [Thread-198766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:45:25.929 [DEBUG] [Thread-198767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:45:27.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:45:27.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:45:27.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:45:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 45, 10), 1.48237, 90.7269, 0.0, 7.95888, 10.9698, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:45:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:45:10
2026-04-13T00:45:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:45:28.926 [DEBUG] [Thread-198768] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-13T00:45:28.926 [DEBUG] [Thread-198768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:45:28.946 [DEBUG] [Thread-198768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:45:28.946 [INFO] [Thread-198768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:45:28.948 [DEBUG] [Thread-198768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:45:28.948 [DEBUG] [Thread-198768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:45:28.948 [DEBUG] [Thread-198768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:45:28.948 [DEBUG] [Thread-198768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:45:28.948 [DEBUG] [Thread-198768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] client lang: <none>
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] server lang: <none>
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] kex follows: False
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] Compression: none
2026-04-13T00:45:28.949 [DEBUG] [Thread-198768] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:45:28.961 [DEBUG] [Thread-198768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:45:28.961 [DEBUG] [Thread-198768] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:45:28.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:45:28.962 [DEBUG] [Thread-198768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:45:28.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:45:28.964 [DEBUG] [Thread-198768] [transport.py] [_log()] userauth is OK
2026-04-13T00:45:28.964 [DEBUG] [Thread-198768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:45:28.964 [DEBUG] [Thread-198768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:45:28.965 [DEBUG] [Thread-198768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:45:28.965 [DEBUG] [Thread-198768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:45:28.987 [INFO] [Thread-198768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:45:28.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:45:29.652 [DEBUG] [Thread-198768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:45:29.652 [DEBUG] [Thread-198768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:45:29.652 [DEBUG] [Thread-198768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:45:29.693 [DEBUG] [Thread-198768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:45:29.693 [DEBUG] [Thread-198768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:45:29.697 [DEBUG] [Thread-198768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:45:29.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:45:29.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:45:29.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:45:29.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:45:29.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:45:29.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:45:29.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:45:29.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:45:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:45:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.948016 -999.00  +10.90   2.52     90   +9.40 1 2 1 3 1     0    0 1.51 3.42 ..Es. 2.5 2.5 236.6 6.0 11.6 -22.3 11.4 -21.4 11.1 -19.2 11.4 -21.2
2026-04-13T00:45:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:45:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:45:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.948016
2026-04-13T00:45:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:45:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:45:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:45:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:45:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:45:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:45:10', tmtdew=1.48237, humidity=90.7269, cloud=0.0, wind=7.95888, temperature=10.9698, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:45:08.582', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:45:29.726 [DEBUG] [Thread-198768] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:45:29.793 [DEBUG] [Thread-198771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:45:29.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:45:29.820 [DEBUG] [Thread-198772] [transport.py] [_log()] starting thread (client mode): 0xb39c66b0
2026-04-13T00:45:29.820 [DEBUG] [Thread-198772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:45:29.837 [DEBUG] [Thread-198772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:45:29.837 [INFO] [Thread-198772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:45:29.845 [DEBUG] [Thread-198772] [transport.py] [_log()] client lang: <none>
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] server lang: <none>
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] kex follows: False
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] Compression: none
2026-04-13T00:45:29.846 [DEBUG] [Thread-198772] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:45:29.909 [DEBUG] [Thread-198772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:45:29.909 [DEBUG] [Thread-198772] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:45:29.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:45:29.911 [DEBUG] [Thread-198772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:45:29.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:45:29.969 [DEBUG] [Thread-198772] [transport.py] [_log()] userauth is OK
2026-04-13T00:45:29.969 [DEBUG] [Thread-198772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:45:29.969 [DEBUG] [Thread-198772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:45:29.969 [DEBUG] [Thread-198772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:45:29.969 [DEBUG] [Thread-198772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:45:29.988 [INFO] [Thread-198772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:45:29.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:45:29.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:45:30.818 [DEBUG] [Thread-198772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:45:30.819 [DEBUG] [Thread-198772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:45:30.869 [DEBUG] [Thread-198772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:45:30.869 [DEBUG] [Thread-198772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:45:30.881 [DEBUG] [Thread-198772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:45:30.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:45:30.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:45:30.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:45:30.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:45:30.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:45:30.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:45:30.918 [DEBUG] [Thread-198772] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:45:44.836 [DEBUG] [Thread-198774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:45:59.876 [DEBUG] [Thread-198775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:46:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:46:00.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:46:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:46:01.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:46:01.431 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:46:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 45, 46), 1.17067, 92.4205, 0.0, 10.0231, 10.9059, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:46:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:45:46
2026-04-13T00:46:02.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:46:02.749 [DEBUG] [Thread-198776] [transport.py] [_log()] starting thread (client mode): 0xae508af0
2026-04-13T00:46:02.749 [DEBUG] [Thread-198776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:46:02.770 [DEBUG] [Thread-198776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:46:02.770 [INFO] [Thread-198776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:46:02.773 [DEBUG] [Thread-198776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] client lang: <none>
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] server lang: <none>
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] kex follows: False
2026-04-13T00:46:02.774 [DEBUG] [Thread-198776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:46:02.775 [DEBUG] [Thread-198776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:46:02.775 [DEBUG] [Thread-198776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:46:02.775 [DEBUG] [Thread-198776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:46:02.775 [DEBUG] [Thread-198776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:46:02.775 [DEBUG] [Thread-198776] [transport.py] [_log()] Compression: none
2026-04-13T00:46:02.775 [DEBUG] [Thread-198776] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:46:02.792 [DEBUG] [Thread-198776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:46:02.792 [DEBUG] [Thread-198776] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:46:02.793 [DEBUG] [Thread-198776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:46:02.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:46:02.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:46:02.794 [DEBUG] [Thread-198776] [transport.py] [_log()] userauth is OK
2026-04-13T00:46:02.795 [DEBUG] [Thread-198776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:46:02.795 [DEBUG] [Thread-198776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:46:02.795 [DEBUG] [Thread-198776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:46:02.795 [DEBUG] [Thread-198776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:46:02.817 [INFO] [Thread-198776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:46:02.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:46:03.394 [DEBUG] [Thread-198776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:46:03.394 [DEBUG] [Thread-198776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:46:03.394 [DEBUG] [Thread-198776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:46:03.435 [DEBUG] [Thread-198776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:46:03.435 [DEBUG] [Thread-198776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:46:03.437 [DEBUG] [Thread-198776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:46:03.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:46:03.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:46:03.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:46:03.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:46:03.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:46:03.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:46:03.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:46:03.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:46:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:46:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.948364 -999.00  +10.90   3.81     90   +9.40 1 2 1 3 1     0    0 1.52 3.43 ..Es. 3.8 3.8 193.5 5.5 11.5 -22.3 11.4 -21.2 11.1 -19.2 11.4 -21.2
2026-04-13T00:46:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:46:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:46:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.948364
2026-04-13T00:46:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:46:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:46:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:46:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:46:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:46:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:45:46', tmtdew=1.17067, humidity=92.4205, cloud=0.0, wind=10.0231, temperature=10.9059, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:45:38.650', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:46:03.462 [DEBUG] [Thread-198776] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:46:03.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:46:03.556 [DEBUG] [Thread-198779] [transport.py] [_log()] starting thread (client mode): 0xb39c78e0
2026-04-13T00:46:03.556 [DEBUG] [Thread-198779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:46:03.570 [DEBUG] [Thread-198779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:46:03.570 [INFO] [Thread-198779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:46:03.578 [DEBUG] [Thread-198779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:46:03.578 [DEBUG] [Thread-198779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:46:03.578 [DEBUG] [Thread-198779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] client lang: <none>
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] server lang: <none>
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] kex follows: False
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] Compression: none
2026-04-13T00:46:03.579 [DEBUG] [Thread-198779] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:46:03.635 [DEBUG] [Thread-198779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:46:03.635 [DEBUG] [Thread-198779] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:46:03.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:46:03.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:46:03.637 [DEBUG] [Thread-198779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:46:03.691 [DEBUG] [Thread-198779] [transport.py] [_log()] userauth is OK
2026-04-13T00:46:03.691 [DEBUG] [Thread-198779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:46:03.691 [DEBUG] [Thread-198779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:46:03.691 [DEBUG] [Thread-198779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:46:03.692 [DEBUG] [Thread-198779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:46:03.709 [INFO] [Thread-198779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:46:03.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:46:03.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:46:04.592 [DEBUG] [Thread-198779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:46:04.592 [DEBUG] [Thread-198779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:46:04.640 [DEBUG] [Thread-198779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:46:04.640 [DEBUG] [Thread-198779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:46:04.652 [DEBUG] [Thread-198779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:46:04.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:46:04.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:46:04.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:46:04.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:46:04.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:46:04.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:46:04.694 [DEBUG] [Thread-198779] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:46:14.911 [DEBUG] [Thread-198781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:46:25.997 [DEBUG] [Thread-198782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:46:29.964 [DEBUG] [Thread-198783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:46:34.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:46:34.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:46:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:46:35.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 46, 21), 1.54604, 90.1439, 0.0, 8.73504, 11.003, 1, 2, 0, 2, 0, 0),)
2026-04-13T00:46:35.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:46:21
2026-04-13T00:46:36.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:46:36.523 [DEBUG] [Thread-198784] [transport.py] [_log()] starting thread (client mode): 0xb39c6440
2026-04-13T00:46:36.523 [DEBUG] [Thread-198784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:46:36.544 [DEBUG] [Thread-198784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:46:36.544 [INFO] [Thread-198784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:46:36.545 [DEBUG] [Thread-198784] [transport.py] [_log()] client lang: <none>
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] server lang: <none>
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] kex follows: False
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] Compression: none
2026-04-13T00:46:36.546 [DEBUG] [Thread-198784] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:46:36.558 [DEBUG] [Thread-198784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:46:36.559 [DEBUG] [Thread-198784] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:46:36.559 [DEBUG] [Thread-198784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:46:36.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:46:36.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:46:36.561 [DEBUG] [Thread-198784] [transport.py] [_log()] userauth is OK
2026-04-13T00:46:36.561 [DEBUG] [Thread-198784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:46:36.561 [DEBUG] [Thread-198784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:46:36.562 [DEBUG] [Thread-198784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:46:36.562 [DEBUG] [Thread-198784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:46:36.586 [INFO] [Thread-198784] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:46:36.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:46:37.180 [DEBUG] [Thread-198784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:46:37.180 [DEBUG] [Thread-198784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:46:37.181 [DEBUG] [Thread-198784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:46:37.221 [DEBUG] [Thread-198784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:46:37.221 [DEBUG] [Thread-198784] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:46:37.225 [DEBUG] [Thread-198784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:46:37.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:46:37.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:46:37.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:46:37.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:46:37.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:46:37.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:46:37.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:46:37.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:46:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:46:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.948711 -999.00  +10.90   4.06     90   +9.40 1 2 1 3 1     0    0 1.55 3.56 ..es. 4.1 4.1 220.6 7.0 11.6 -22.2 11.4 -21.2 11.1 -19.2 11.4 -21.4
2026-04-13T00:46:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:46:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:46:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.948711
2026-04-13T00:46:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:46:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:46:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:46:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:46:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:46:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:46:21', tmtdew=1.54604, humidity=90.1439, cloud=0.0, wind=8.73504, temperature=11.003, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:46:08.630', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:46:37.245 [DEBUG] [Thread-198784] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:46:37.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:46:37.339 [DEBUG] [Thread-198787] [transport.py] [_log()] starting thread (client mode): 0xae50bb20
2026-04-13T00:46:37.339 [DEBUG] [Thread-198787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:46:37.353 [DEBUG] [Thread-198787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:46:37.353 [INFO] [Thread-198787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:46:37.361 [DEBUG] [Thread-198787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:46:37.361 [DEBUG] [Thread-198787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:46:37.361 [DEBUG] [Thread-198787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:46:37.361 [DEBUG] [Thread-198787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] client lang: <none>
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] server lang: <none>
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] kex follows: False
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:46:37.362 [DEBUG] [Thread-198787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:46:37.363 [DEBUG] [Thread-198787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:46:37.363 [DEBUG] [Thread-198787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:46:37.363 [DEBUG] [Thread-198787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:46:37.363 [DEBUG] [Thread-198787] [transport.py] [_log()] Compression: none
2026-04-13T00:46:37.363 [DEBUG] [Thread-198787] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:46:37.420 [DEBUG] [Thread-198787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:46:37.421 [DEBUG] [Thread-198787] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:46:37.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:46:37.422 [DEBUG] [Thread-198787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:46:37.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:46:37.484 [DEBUG] [Thread-198787] [transport.py] [_log()] userauth is OK
2026-04-13T00:46:37.485 [DEBUG] [Thread-198787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:46:37.485 [DEBUG] [Thread-198787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:46:37.485 [DEBUG] [Thread-198787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:46:37.485 [DEBUG] [Thread-198787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:46:37.503 [INFO] [Thread-198787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:46:37.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:46:37.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:46:38.333 [DEBUG] [Thread-198787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:46:38.333 [DEBUG] [Thread-198787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:46:38.381 [DEBUG] [Thread-198787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:46:38.381 [DEBUG] [Thread-198787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:46:38.390 [DEBUG] [Thread-198787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:46:38.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:46:38.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:46:38.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:46:38.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:46:38.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:46:38.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:46:38.427 [DEBUG] [Thread-198787] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:46:45.001 [DEBUG] [Thread-198789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:00.066 [DEBUG] [Thread-198790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:01.634 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:01.635 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:47:08.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:47:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:47:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 46, 57), 1.51735, 90.0111, 0.0, 7.87068, 10.9364, 1, 2, 0, 2, 0, 0),)
2026-04-13T00:47:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:46:57
2026-04-13T00:47:10.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:47:10.386 [DEBUG] [Thread-198791] [transport.py] [_log()] starting thread (client mode): 0xae50a470
2026-04-13T00:47:10.386 [DEBUG] [Thread-198791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:47:10.401 [DEBUG] [Thread-198791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:47:10.401 [INFO] [Thread-198791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:47:10.403 [DEBUG] [Thread-198791] [transport.py] [_log()] client lang: <none>
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] server lang: <none>
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] kex follows: False
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] Compression: none
2026-04-13T00:47:10.404 [DEBUG] [Thread-198791] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:47:10.416 [DEBUG] [Thread-198791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:47:10.416 [DEBUG] [Thread-198791] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:47:10.417 [DEBUG] [Thread-198791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:47:10.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:47:10.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:47:10.418 [DEBUG] [Thread-198791] [transport.py] [_log()] userauth is OK
2026-04-13T00:47:10.418 [DEBUG] [Thread-198791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:47:10.418 [DEBUG] [Thread-198791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:47:10.418 [DEBUG] [Thread-198791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:47:10.418 [DEBUG] [Thread-198791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:47:10.435 [INFO] [Thread-198791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:47:10.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:47:11.009 [DEBUG] [Thread-198791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:47:11.010 [DEBUG] [Thread-198791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:47:11.010 [DEBUG] [Thread-198791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:47:11.051 [DEBUG] [Thread-198791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:47:11.051 [DEBUG] [Thread-198791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:47:11.058 [DEBUG] [Thread-198791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:47:11.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:47:11.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:47:11.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:47:11.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:47:11.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:47:11.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:47:11.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:47:11.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:47:11.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:47:11.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.949059 -999.00  +10.90   4.30     90   +9.40 1 2 1 3 1     0    0 1.52 3.38 ..e.. 4.3 4.3 214.4 5.4 11.5 -22.3 11.4 -21.3 11.1 -19.3 11.4 -21.4
2026-04-13T00:47:11.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:47:11.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:47:11.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.949059
2026-04-13T00:47:11.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:47:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:47:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:47:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:47:11.091 [DEBUG] [Thread-198791] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:47:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:47:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:46:57', tmtdew=1.51735, humidity=90.0111, cloud=0.0, wind=7.87068, temperature=10.9364, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:46:38.698', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:47:11.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:47:11.196 [DEBUG] [Thread-198794] [transport.py] [_log()] starting thread (client mode): 0xae509db0
2026-04-13T00:47:11.197 [DEBUG] [Thread-198794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:47:11.211 [DEBUG] [Thread-198794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:47:11.212 [INFO] [Thread-198794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] client lang: <none>
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] server lang: <none>
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] kex follows: False
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:47:11.219 [DEBUG] [Thread-198794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:47:11.220 [DEBUG] [Thread-198794] [transport.py] [_log()] Compression: none
2026-04-13T00:47:11.220 [DEBUG] [Thread-198794] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:47:11.282 [DEBUG] [Thread-198794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:47:11.283 [DEBUG] [Thread-198794] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:47:11.284 [DEBUG] [Thread-198794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:47:11.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:47:11.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:47:11.339 [DEBUG] [Thread-198794] [transport.py] [_log()] userauth is OK
2026-04-13T00:47:11.339 [DEBUG] [Thread-198794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:47:11.339 [DEBUG] [Thread-198794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:47:11.340 [DEBUG] [Thread-198794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:47:11.340 [DEBUG] [Thread-198794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:47:11.358 [INFO] [Thread-198794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:47:11.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:47:11.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:47:12.202 [DEBUG] [Thread-198794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:47:12.202 [DEBUG] [Thread-198794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:47:12.250 [DEBUG] [Thread-198794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:47:12.250 [DEBUG] [Thread-198794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:47:12.259 [DEBUG] [Thread-198794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:47:12.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:47:12.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:47:12.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:47:12.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:47:12.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:47:12.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:47:12.297 [DEBUG] [Thread-198794] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:47:15.103 [DEBUG] [Thread-198796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:26.053 [DEBUG] [Thread-198797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:30.157 [DEBUG] [Thread-198798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:47:42.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:47:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:47:43.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 47, 32), 1.27387, 91.7901, 0.0, 8.57664, 11.0386, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:47:43.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:47:32
2026-04-13T00:47:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:47:44.117 [DEBUG] [Thread-198799] [transport.py] [_log()] starting thread (client mode): 0xb39c60e0
2026-04-13T00:47:44.117 [DEBUG] [Thread-198799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:47:44.135 [DEBUG] [Thread-198799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:47:44.135 [INFO] [Thread-198799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] client lang: <none>
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] server lang: <none>
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] kex follows: False
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] Compression: none
2026-04-13T00:47:44.138 [DEBUG] [Thread-198799] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:47:44.150 [DEBUG] [Thread-198799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:47:44.151 [DEBUG] [Thread-198799] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:47:44.151 [DEBUG] [Thread-198799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:47:44.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:47:44.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:47:44.153 [DEBUG] [Thread-198799] [transport.py] [_log()] userauth is OK
2026-04-13T00:47:44.153 [DEBUG] [Thread-198799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:47:44.153 [DEBUG] [Thread-198799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:47:44.153 [DEBUG] [Thread-198799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:47:44.153 [DEBUG] [Thread-198799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:47:44.171 [INFO] [Thread-198799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:47:44.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:47:44.759 [DEBUG] [Thread-198799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:47:44.759 [DEBUG] [Thread-198799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:47:44.759 [DEBUG] [Thread-198799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:47:44.800 [DEBUG] [Thread-198799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:47:44.800 [DEBUG] [Thread-198799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:47:44.803 [DEBUG] [Thread-198799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:47:44.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:47:44.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:47:44.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:47:44.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:47:44.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:47:44.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:47:44.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:47:44.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:47:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:47:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.949753 -999.00  +10.80   4.85     90   +9.30 1 2 1 3 1     0    0 1.56 3.72 ..es. 4.8 4.8 201.6 6.3 11.5 -22.4 11.4 -21.7 11.1 -19.3 11.4 -21.3
2026-04-13T00:47:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:47:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:47:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.949753
2026-04-13T00:47:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:47:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:47:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:47:44.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:47:44.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:47:44.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:47:32', tmtdew=1.27387, humidity=91.7901, cloud=0.0, wind=8.57664, temperature=11.0386, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:47:38.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.4694999999999991, nan, nan, nan, nan, nan, nan, -0.41025000000000134, 3.0805, nan, nan, nan, nan, nan, 2.3955, 2.133499999999999, 2.1127499999999992, 2.828999999999999, nan, nan, nan, nan, 0.26449999999999996, 0.09175000000000111, 0.0705000000000009, 0.1349999999999998, 0.2920000000000016, 1.5090000000000012, 2.2830000000000004, 1.842249999999999], zp_timestamp='2026-04-12T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:47:44.826 [DEBUG] [Thread-198799] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:47:44.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:47:44.919 [DEBUG] [Thread-198802] [transport.py] [_log()] starting thread (client mode): 0xae50aec0
2026-04-13T00:47:44.919 [DEBUG] [Thread-198802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:47:44.933 [DEBUG] [Thread-198802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:47:44.933 [INFO] [Thread-198802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] client lang: <none>
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] server lang: <none>
2026-04-13T00:47:44.941 [DEBUG] [Thread-198802] [transport.py] [_log()] kex follows: False
2026-04-13T00:47:44.942 [DEBUG] [Thread-198802] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:47:44.942 [DEBUG] [Thread-198802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:47:44.942 [DEBUG] [Thread-198802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:47:44.942 [DEBUG] [Thread-198802] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:47:44.942 [DEBUG] [Thread-198802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:47:44.942 [DEBUG] [Thread-198802] [transport.py] [_log()] Compression: none
2026-04-13T00:47:44.942 [DEBUG] [Thread-198802] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:47:44.998 [DEBUG] [Thread-198802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:47:44.998 [DEBUG] [Thread-198802] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:47:44.999 [DEBUG] [Thread-198802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:47:44.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:47:45.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:47:45.055 [DEBUG] [Thread-198802] [transport.py] [_log()] userauth is OK
2026-04-13T00:47:45.055 [DEBUG] [Thread-198802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:47:45.055 [DEBUG] [Thread-198802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:47:45.055 [DEBUG] [Thread-198802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:47:45.056 [DEBUG] [Thread-198802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:47:45.078 [INFO] [Thread-198802] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:47:45.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:47:45.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:47:45.195 [DEBUG] [Thread-198804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:47:45.891 [DEBUG] [Thread-198802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:47:45.891 [DEBUG] [Thread-198802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:47:45.939 [DEBUG] [Thread-198802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:47:45.939 [DEBUG] [Thread-198802] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:47:45.948 [DEBUG] [Thread-198802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:47:45.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:47:45.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:47:45.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:47:45.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:47:45.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:47:45.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:47:45.984 [DEBUG] [Thread-198802] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:48:00.253 [DEBUG] [Thread-198805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:48:01.848 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:48:01.849 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:48:15.291 [DEBUG] [Thread-198806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:48:16.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:48:16.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:48:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:48:17.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 48, 8), 1.60503, 89.7789, 0.0, 7.659, 10.9363, 1, 1, 0, 2, 0, 0),)
2026-04-13T00:48:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:48:08
2026-04-13T00:48:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:48:17.832 [DEBUG] [Thread-198807] [transport.py] [_log()] starting thread (client mode): 0xae50bc70
2026-04-13T00:48:17.832 [DEBUG] [Thread-198807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:48:17.852 [DEBUG] [Thread-198807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:48:17.852 [INFO] [Thread-198807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:17.855 [DEBUG] [Thread-198807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] client lang: <none>
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] server lang: <none>
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] kex follows: False
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] Compression: none
2026-04-13T00:48:17.856 [DEBUG] [Thread-198807] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:48:17.874 [DEBUG] [Thread-198807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:48:17.874 [DEBUG] [Thread-198807] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:48:17.875 [DEBUG] [Thread-198807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:48:17.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:48:17.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:48:17.876 [DEBUG] [Thread-198807] [transport.py] [_log()] userauth is OK
2026-04-13T00:48:17.877 [DEBUG] [Thread-198807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:48:17.877 [DEBUG] [Thread-198807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:48:17.877 [DEBUG] [Thread-198807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:48:17.877 [DEBUG] [Thread-198807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:48:17.903 [INFO] [Thread-198807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:48:17.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:48:18.671 [DEBUG] [Thread-198807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:48:18.672 [DEBUG] [Thread-198807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:48:18.673 [DEBUG] [Thread-198807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:48:18.713 [DEBUG] [Thread-198807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:48:18.713 [DEBUG] [Thread-198807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:48:18.716 [DEBUG] [Thread-198807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:48:18.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:48:18.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:48:18.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:48:18.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:48:18.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:48:18.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:48:18.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:48:18.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:48:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:48:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.949753 -999.00  +10.80   4.85     90   +9.30 1 2 1 3 1     0    0 1.56 3.72 ..es. 4.8 4.8 201.6 6.3 11.5 -22.4 11.4 -21.7 11.1 -19.3 11.4 -21.3
2026-04-13T00:48:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:48:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:48:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.949753
2026-04-13T00:48:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:48:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:48:18.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:48:18.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:48:18.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:48:18.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:48:08', tmtdew=1.60503, humidity=89.7789, cloud=0.0, wind=7.659, temperature=10.9363, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:47:38.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.0022500000000000853, 2.9670000000000005, nan, nan, nan, nan, nan, 2.3084999999999996, 2.2029999999999994, 2.0062499999999996, nan, nan, nan, nan, 0.9719999999999995, 0.22900000000000098, 0.11325000000000074, 0.10449999999999982, 0.21799999999999997, 0.354000000000001, 1.5620000000000012, 2.5440000000000005, 1.2197499999999994], zp_timestamp='2026-04-12T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:48:18.741 [DEBUG] [Thread-198807] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:48:18.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:48:18.833 [DEBUG] [Thread-198810] [transport.py] [_log()] starting thread (client mode): 0xae509f30
2026-04-13T00:48:18.833 [DEBUG] [Thread-198810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:48:18.847 [DEBUG] [Thread-198810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:48:18.847 [INFO] [Thread-198810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] client lang: <none>
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] server lang: <none>
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] kex follows: False
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:48:18.855 [DEBUG] [Thread-198810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:48:18.856 [DEBUG] [Thread-198810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:48:18.856 [DEBUG] [Thread-198810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:48:18.856 [DEBUG] [Thread-198810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:48:18.856 [DEBUG] [Thread-198810] [transport.py] [_log()] Compression: none
2026-04-13T00:48:18.856 [DEBUG] [Thread-198810] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:48:18.913 [DEBUG] [Thread-198810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:48:18.914 [DEBUG] [Thread-198810] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:48:18.914 [DEBUG] [Thread-198810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:48:18.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:48:18.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:48:18.971 [DEBUG] [Thread-198810] [transport.py] [_log()] userauth is OK
2026-04-13T00:48:18.971 [DEBUG] [Thread-198810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:48:18.971 [DEBUG] [Thread-198810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:48:18.972 [DEBUG] [Thread-198810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:48:18.972 [DEBUG] [Thread-198810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:48:18.990 [INFO] [Thread-198810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:48:18.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:48:18.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:48:19.808 [DEBUG] [Thread-198810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:48:19.808 [DEBUG] [Thread-198810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:48:19.856 [DEBUG] [Thread-198810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:48:19.856 [DEBUG] [Thread-198810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:48:19.866 [DEBUG] [Thread-198810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:48:19.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:48:19.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:48:19.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:48:19.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:48:19.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:48:19.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:48:19.903 [DEBUG] [Thread-198810] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:48:26.122 [DEBUG] [Thread-198812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:48:30.329 [DEBUG] [Thread-198813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:48:45.393 [DEBUG] [Thread-198814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:48:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:48:49.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:48:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:48:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 48, 43), 1.33133, 91.4251, 0.0, 7.55352, 10.8395, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:48:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:48:43
2026-04-13T00:48:51.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:48:51.842 [DEBUG] [Thread-198815] [transport.py] [_log()] starting thread (client mode): 0xae508100
2026-04-13T00:48:51.842 [DEBUG] [Thread-198815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:48:51.862 [DEBUG] [Thread-198815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:48:51.863 [INFO] [Thread-198815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] client lang: <none>
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] server lang: <none>
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] kex follows: False
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] Compression: none
2026-04-13T00:48:51.866 [DEBUG] [Thread-198815] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:48:51.884 [DEBUG] [Thread-198815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:48:51.884 [DEBUG] [Thread-198815] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:48:51.885 [DEBUG] [Thread-198815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:48:51.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:48:51.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:48:51.886 [DEBUG] [Thread-198815] [transport.py] [_log()] userauth is OK
2026-04-13T00:48:51.887 [DEBUG] [Thread-198815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:48:51.887 [DEBUG] [Thread-198815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:48:51.887 [DEBUG] [Thread-198815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:48:51.887 [DEBUG] [Thread-198815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:48:51.908 [INFO] [Thread-198815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:48:51.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:48:52.742 [DEBUG] [Thread-198815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:48:52.742 [DEBUG] [Thread-198815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:48:52.742 [DEBUG] [Thread-198815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:48:52.783 [DEBUG] [Thread-198815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:48:52.783 [DEBUG] [Thread-198815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:48:52.786 [DEBUG] [Thread-198815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:48:52.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:48:52.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:48:52.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:48:52.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:48:52.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:48:52.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:48:52.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:48:52.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:48:52.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:48:52.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.950100 -999.00  +10.80   3.49     90   +9.20 1 2 1 3 1     0    0 1.56 4.24 ..es. 3.5 3.5 211.9 6.0 11.5 -22.5 11.3 -21.3 11.1 -19.3 11.4 -21.3
2026-04-13T00:48:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:48:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:48:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.950100
2026-04-13T00:48:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:48:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:48:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:48:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:48:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:48:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:48:43', tmtdew=1.33133, humidity=91.4251, cloud=0.0, wind=7.55352, temperature=10.8395, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:48:08.640', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.0022500000000000853, 2.9670000000000005, nan, nan, nan, nan, nan, 2.3084999999999996, 2.2029999999999994, 2.0062499999999996, nan, nan, nan, nan, 0.9719999999999995, 0.22900000000000098, 0.11325000000000074, 0.10449999999999982, 0.21799999999999997, 0.354000000000001, 1.5620000000000012, 2.5440000000000005, 1.2197499999999994], zp_timestamp='2026-04-12T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:48:52.814 [DEBUG] [Thread-198815] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:48:52.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:48:52.911 [DEBUG] [Thread-198818] [transport.py] [_log()] starting thread (client mode): 0xae5f0a30
2026-04-13T00:48:52.911 [DEBUG] [Thread-198818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:48:52.925 [DEBUG] [Thread-198818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:48:52.925 [INFO] [Thread-198818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:48:52.933 [DEBUG] [Thread-198818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:48:52.934 [DEBUG] [Thread-198818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:48:52.934 [DEBUG] [Thread-198818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:48:52.934 [DEBUG] [Thread-198818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:52.934 [DEBUG] [Thread-198818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:48:52.934 [DEBUG] [Thread-198818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:52.934 [DEBUG] [Thread-198818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] client lang: <none>
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] server lang: <none>
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] kex follows: False
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] Compression: none
2026-04-13T00:48:52.935 [DEBUG] [Thread-198818] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:48:52.994 [DEBUG] [Thread-198818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:48:52.994 [DEBUG] [Thread-198818] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:48:52.995 [DEBUG] [Thread-198818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:48:52.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:48:52.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:48:53.050 [DEBUG] [Thread-198818] [transport.py] [_log()] userauth is OK
2026-04-13T00:48:53.050 [DEBUG] [Thread-198818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:48:53.050 [DEBUG] [Thread-198818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:48:53.050 [DEBUG] [Thread-198818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:48:53.050 [DEBUG] [Thread-198818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:48:53.069 [INFO] [Thread-198818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:48:53.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:48:53.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:48:53.891 [DEBUG] [Thread-198818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:48:53.891 [DEBUG] [Thread-198818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:48:53.939 [DEBUG] [Thread-198818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:48:53.939 [DEBUG] [Thread-198818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:48:53.949 [DEBUG] [Thread-198818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:48:53.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:48:53.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:48:53.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:48:53.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:48:53.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:48:53.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:48:53.986 [DEBUG] [Thread-198818] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:49:00.430 [DEBUG] [Thread-198820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:49:02.054 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:49:02.055 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:49:15.484 [DEBUG] [Thread-198821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:49:24.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:49:24.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:49:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:49:25.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 48, 43), 1.33133, 91.4251, 0.0, 7.55352, 10.8395, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:49:25.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:48:43
2026-04-13T00:49:25.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:49:25.858 [DEBUG] [Thread-198822] [transport.py] [_log()] starting thread (client mode): 0xae5f02b0
2026-04-13T00:49:25.858 [DEBUG] [Thread-198822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:49:25.878 [DEBUG] [Thread-198822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:49:25.878 [INFO] [Thread-198822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:49:25.881 [DEBUG] [Thread-198822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:49:25.881 [DEBUG] [Thread-198822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:49:25.881 [DEBUG] [Thread-198822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:49:25.881 [DEBUG] [Thread-198822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:49:25.881 [DEBUG] [Thread-198822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:49:25.881 [DEBUG] [Thread-198822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] client lang: <none>
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] server lang: <none>
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] kex follows: False
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] Compression: none
2026-04-13T00:49:25.882 [DEBUG] [Thread-198822] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:49:25.897 [DEBUG] [Thread-198822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:49:25.897 [DEBUG] [Thread-198822] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:49:25.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:49:25.898 [DEBUG] [Thread-198822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:49:25.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:49:25.900 [DEBUG] [Thread-198822] [transport.py] [_log()] userauth is OK
2026-04-13T00:49:25.900 [DEBUG] [Thread-198822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:49:25.900 [DEBUG] [Thread-198822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:49:25.900 [DEBUG] [Thread-198822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:49:25.900 [DEBUG] [Thread-198822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:49:25.924 [INFO] [Thread-198822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:49:25.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:49:26.183 [DEBUG] [Thread-198824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:49:26.695 [DEBUG] [Thread-198822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:49:26.695 [DEBUG] [Thread-198822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:49:26.696 [DEBUG] [Thread-198822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:49:26.736 [DEBUG] [Thread-198822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:49:26.736 [DEBUG] [Thread-198822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:49:26.739 [DEBUG] [Thread-198822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:49:26.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:49:26.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:49:26.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:49:26.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:49:26.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:49:26.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:49:26.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:49:26.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:49:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:49:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.950447 -999.00  +10.70   4.28     90   +9.20 1 2 1 3 1     0    0 1.56 4.20 ..es. 4.3 4.3 189.2 6.3 11.5 -22.4 11.3 -21.1 11.1 -19.3 11.4 -21.3
2026-04-13T00:49:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:49:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:49:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.950447
2026-04-13T00:49:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:49:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:49:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:49:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:49:26.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:49:26.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:48:43', tmtdew=1.33133, humidity=91.4251, cloud=0.0, wind=7.55352, temperature=10.8395, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:48:38.621', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.0022500000000000853, 2.9670000000000005, nan, nan, nan, nan, nan, 2.3084999999999996, 2.2029999999999994, 2.0062499999999996, nan, nan, nan, nan, 0.9719999999999995, 0.22900000000000098, 0.11325000000000074, 0.10449999999999982, 0.21799999999999997, 0.354000000000001, 1.5620000000000012, 2.5440000000000005, 1.2197499999999994], zp_timestamp='2026-04-12T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:49:26.767 [DEBUG] [Thread-198822] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:49:26.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:49:26.868 [DEBUG] [Thread-198826] [transport.py] [_log()] starting thread (client mode): 0xae5f25c0
2026-04-13T00:49:26.868 [DEBUG] [Thread-198826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:49:26.883 [DEBUG] [Thread-198826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:49:26.883 [INFO] [Thread-198826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] client lang: <none>
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] server lang: <none>
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] kex follows: False
2026-04-13T00:49:26.892 [DEBUG] [Thread-198826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:49:26.893 [DEBUG] [Thread-198826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:49:26.893 [DEBUG] [Thread-198826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:49:26.893 [DEBUG] [Thread-198826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:49:26.893 [DEBUG] [Thread-198826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:49:26.893 [DEBUG] [Thread-198826] [transport.py] [_log()] Compression: none
2026-04-13T00:49:26.893 [DEBUG] [Thread-198826] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:49:26.948 [DEBUG] [Thread-198826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:49:26.949 [DEBUG] [Thread-198826] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:49:26.949 [DEBUG] [Thread-198826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:49:26.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:49:26.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:49:27.005 [DEBUG] [Thread-198826] [transport.py] [_log()] userauth is OK
2026-04-13T00:49:27.005 [DEBUG] [Thread-198826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:49:27.005 [DEBUG] [Thread-198826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:49:27.005 [DEBUG] [Thread-198826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:49:27.005 [DEBUG] [Thread-198826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:49:27.023 [INFO] [Thread-198826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:49:27.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:49:27.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:49:27.822 [DEBUG] [Thread-198826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:49:27.822 [DEBUG] [Thread-198826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:49:27.870 [DEBUG] [Thread-198826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:49:27.871 [DEBUG] [Thread-198826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:49:27.879 [DEBUG] [Thread-198826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:49:27.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:49:27.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:49:27.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:49:27.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:49:27.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:49:27.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:49:27.913 [DEBUG] [Thread-198826] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:49:30.521 [DEBUG] [Thread-198828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:49:45.575 [DEBUG] [Thread-198829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:49:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:49:57.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:49:57.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:49:59.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 49, 19), 1.67043, 89.1793, 0.0, 7.09452, 10.9034, 1, 1, 0, 2, 0, 0),)
2026-04-13T00:49:59.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:49:19
2026-04-13T00:49:59.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:49:59.832 [DEBUG] [Thread-198830] [transport.py] [_log()] starting thread (client mode): 0xae5f3580
2026-04-13T00:49:59.832 [DEBUG] [Thread-198830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:49:59.852 [DEBUG] [Thread-198830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:49:59.853 [INFO] [Thread-198830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] client lang: <none>
2026-04-13T00:49:59.856 [DEBUG] [Thread-198830] [transport.py] [_log()] server lang: <none>
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] kex follows: False
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] Compression: none
2026-04-13T00:49:59.857 [DEBUG] [Thread-198830] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:49:59.876 [DEBUG] [Thread-198830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:49:59.877 [DEBUG] [Thread-198830] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:49:59.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:49:59.878 [DEBUG] [Thread-198830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:49:59.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:49:59.887 [DEBUG] [Thread-198830] [transport.py] [_log()] userauth is OK
2026-04-13T00:49:59.888 [DEBUG] [Thread-198830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:49:59.888 [DEBUG] [Thread-198830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:49:59.888 [DEBUG] [Thread-198830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:49:59.888 [DEBUG] [Thread-198830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:49:59.923 [INFO] [Thread-198830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:49:59.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:50:00.613 [DEBUG] [Thread-198832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:50:00.771 [DEBUG] [Thread-198830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:50:00.771 [DEBUG] [Thread-198830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:50:00.771 [DEBUG] [Thread-198830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:50:00.812 [DEBUG] [Thread-198830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:50:00.812 [DEBUG] [Thread-198830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:50:00.815 [DEBUG] [Thread-198830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:50:00.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:50:00.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:50:00.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:50:00.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:50:00.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:50:00.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:50:00.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:50:00.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:50:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:50:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.950795 -999.00  +10.70   3.28     90   +9.30 1 2 1 3 1     0    0 1.57 3.96 ..es. 3.3 3.3 215.4 6.6 11.5 -22.4 11.4 -21.4 11.1 -19.3 11.3 -21.3
2026-04-13T00:50:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:50:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:50:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.950795
2026-04-13T00:50:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:50:00.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:50:00.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:50:00.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:50:00.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:50:00.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:49:19', tmtdew=1.67043, humidity=89.1793, cloud=0.0, wind=7.09452, temperature=10.9034, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:49:08.688', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.0022500000000000853, 2.9670000000000005, nan, nan, nan, nan, nan, 2.3084999999999996, 2.2029999999999994, 2.0062499999999996, nan, nan, nan, nan, 0.9719999999999995, 0.22900000000000098, 0.11325000000000074, 0.10449999999999982, 0.21799999999999997, 0.354000000000001, 1.5620000000000012, 2.5440000000000005, 1.2197499999999994], zp_timestamp='2026-04-12T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:50:00.841 [DEBUG] [Thread-198830] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:50:00.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:50:00.934 [DEBUG] [Thread-198834] [transport.py] [_log()] starting thread (client mode): 0xb0fcd8d0
2026-04-13T00:50:00.934 [DEBUG] [Thread-198834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:50:00.949 [DEBUG] [Thread-198834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:50:00.949 [INFO] [Thread-198834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:50:00.956 [DEBUG] [Thread-198834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:50:00.956 [DEBUG] [Thread-198834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:50:00.956 [DEBUG] [Thread-198834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:50:00.956 [DEBUG] [Thread-198834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:50:00.956 [DEBUG] [Thread-198834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:50:00.956 [DEBUG] [Thread-198834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] client lang: <none>
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] server lang: <none>
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] kex follows: False
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] Compression: none
2026-04-13T00:50:00.957 [DEBUG] [Thread-198834] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:50:01.013 [DEBUG] [Thread-198834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:50:01.013 [DEBUG] [Thread-198834] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:50:01.013 [DEBUG] [Thread-198834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:50:01.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:50:01.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:50:01.070 [DEBUG] [Thread-198834] [transport.py] [_log()] userauth is OK
2026-04-13T00:50:01.070 [DEBUG] [Thread-198834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:50:01.070 [DEBUG] [Thread-198834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:50:01.070 [DEBUG] [Thread-198834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:50:01.070 [DEBUG] [Thread-198834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:50:01.086 [INFO] [Thread-198834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:50:01.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:50:01.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:50:01.956 [DEBUG] [Thread-198834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:50:01.956 [DEBUG] [Thread-198834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:50:02.004 [DEBUG] [Thread-198834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:50:02.004 [DEBUG] [Thread-198834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:50:02.018 [DEBUG] [Thread-198834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:50:02.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:50:02.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:50:02.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:50:02.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:50:02.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:50:02.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:50:02.052 [DEBUG] [Thread-198834] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:50:02.263 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:50:02.264 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:50:15.650 [DEBUG] [Thread-198836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:50:26.239 [DEBUG] [Thread-198837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:50:30.704 [DEBUG] [Thread-198838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:50:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:50:32.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:50:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:50:33.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 49, 54), 1.32435, 91.4582, 0.0, 6.77736, 10.6736, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:50:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:49:54
2026-04-13T00:50:33.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:50:33.962 [DEBUG] [Thread-198839] [transport.py] [_log()] starting thread (client mode): 0xae50a440
2026-04-13T00:50:33.962 [DEBUG] [Thread-198839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:50:33.974 [DEBUG] [Thread-198839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:50:33.974 [INFO] [Thread-198839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] client lang: <none>
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] server lang: <none>
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] kex follows: False
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:50:33.977 [DEBUG] [Thread-198839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:50:33.978 [DEBUG] [Thread-198839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:50:33.978 [DEBUG] [Thread-198839] [transport.py] [_log()] Compression: none
2026-04-13T00:50:33.978 [DEBUG] [Thread-198839] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:50:33.994 [DEBUG] [Thread-198839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:50:33.994 [DEBUG] [Thread-198839] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:50:33.995 [DEBUG] [Thread-198839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:50:33.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:50:33.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:50:33.997 [DEBUG] [Thread-198839] [transport.py] [_log()] userauth is OK
2026-04-13T00:50:33.997 [DEBUG] [Thread-198839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:50:33.997 [DEBUG] [Thread-198839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:50:33.997 [DEBUG] [Thread-198839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:50:33.997 [DEBUG] [Thread-198839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:50:34.012 [INFO] [Thread-198839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:50:34.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:50:34.965 [DEBUG] [Thread-198839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:50:34.966 [DEBUG] [Thread-198839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:50:34.966 [DEBUG] [Thread-198839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:50:35.007 [DEBUG] [Thread-198839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:50:35.007 [DEBUG] [Thread-198839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:50:35.010 [DEBUG] [Thread-198839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:50:35.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:50:35.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:50:35.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:50:35.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:50:35.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:50:35.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:50:35.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:50:35.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:50:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:50:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.951142 -999.00  +10.80   4.51     90   +9.30 1 2 1 3 1     0    0 1.56 3.95 ..es. 4.5 4.5 184.0 6.1 11.5 -22.3 11.3 -21.4 11.1 -19.1 11.3 -21.3
2026-04-13T00:50:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:50:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:50:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.951142
2026-04-13T00:50:35.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:50:35.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:50:35.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:50:35.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:50:35.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:50:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:49:54', tmtdew=1.32435, humidity=91.4582, cloud=0.0, wind=6.77736, temperature=10.6736, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:49:38.669', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.0022500000000000853, 2.9670000000000005, nan, nan, nan, nan, nan, 2.3084999999999996, 2.2029999999999994, 2.0062499999999996, nan, nan, nan, nan, 0.9719999999999995, 0.22900000000000098, 0.11325000000000074, 0.10449999999999982, 0.21799999999999997, 0.354000000000001, 1.5620000000000012, 2.5440000000000005, 1.2197499999999994], zp_timestamp='2026-04-12T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:50:35.037 [DEBUG] [Thread-198839] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:50:35.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:50:35.126 [DEBUG] [Thread-198842] [transport.py] [_log()] starting thread (client mode): 0xae5f0820
2026-04-13T00:50:35.126 [DEBUG] [Thread-198842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:50:35.140 [DEBUG] [Thread-198842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:50:35.141 [INFO] [Thread-198842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:50:35.148 [DEBUG] [Thread-198842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:50:35.148 [DEBUG] [Thread-198842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] client lang: <none>
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] server lang: <none>
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] kex follows: False
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] Compression: none
2026-04-13T00:50:35.149 [DEBUG] [Thread-198842] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:50:35.208 [DEBUG] [Thread-198842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:50:35.209 [DEBUG] [Thread-198842] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:50:35.210 [DEBUG] [Thread-198842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:50:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:50:35.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:50:35.264 [DEBUG] [Thread-198842] [transport.py] [_log()] userauth is OK
2026-04-13T00:50:35.265 [DEBUG] [Thread-198842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:50:35.265 [DEBUG] [Thread-198842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:50:35.265 [DEBUG] [Thread-198842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:50:35.265 [DEBUG] [Thread-198842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:50:35.283 [INFO] [Thread-198842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:50:35.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:50:35.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:50:36.091 [DEBUG] [Thread-198842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:50:36.091 [DEBUG] [Thread-198842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:50:36.138 [DEBUG] [Thread-198842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:50:36.139 [DEBUG] [Thread-198842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:50:36.147 [DEBUG] [Thread-198842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:50:36.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:50: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')
2026-04-13T00:50:36.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:50:36.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:50:36.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:50:36.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:50:36.184 [DEBUG] [Thread-198842] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:50:45.740 [DEBUG] [Thread-198844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:51:00.787 [DEBUG] [Thread-198845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:51:02.466 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:51:02.467 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:51:06.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:51:06.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:51:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:51:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 50, 30), 1.71407, 89.2125, 0.0, 6.79464, 10.8038, 1, 1, 0, 2, 0, 0),)
2026-04-13T00:51:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:50:30
2026-04-13T00:51:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:51:08.085 [DEBUG] [Thread-198846] [transport.py] [_log()] starting thread (client mode): 0xae5f2ec0
2026-04-13T00:51:08.085 [DEBUG] [Thread-198846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:51:08.105 [DEBUG] [Thread-198846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:51:08.105 [INFO] [Thread-198846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:08.108 [DEBUG] [Thread-198846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] client lang: <none>
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] server lang: <none>
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] kex follows: False
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] Compression: none
2026-04-13T00:51:08.109 [DEBUG] [Thread-198846] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:51:08.127 [DEBUG] [Thread-198846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:51:08.127 [DEBUG] [Thread-198846] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:51:08.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:51:08.128 [DEBUG] [Thread-198846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:51:08.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:51:08.130 [DEBUG] [Thread-198846] [transport.py] [_log()] userauth is OK
2026-04-13T00:51:08.130 [DEBUG] [Thread-198846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:51:08.130 [DEBUG] [Thread-198846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:51:08.130 [DEBUG] [Thread-198846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:51:08.130 [DEBUG] [Thread-198846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:51:08.153 [INFO] [Thread-198846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:51:08.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:51:08.916 [DEBUG] [Thread-198846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:51:08.916 [DEBUG] [Thread-198846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:51:08.917 [DEBUG] [Thread-198846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:51:08.957 [DEBUG] [Thread-198846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:51:08.957 [DEBUG] [Thread-198846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:51:08.961 [DEBUG] [Thread-198846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:51:08.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:51:08.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:51:08.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:51:08.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:51:08.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:51:08.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:51:08.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:51:08.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:51:08.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:51:08.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.951489 -999.00  +10.80   5.13     91   +9.40 1 2 1 3 1     0    0 1.58 3.52 ..ESw 5.1 5.1 183.4 5.7 11.5 -22.4 11.4 -21.4 11.1 -19.3 11.4 -21.3
2026-04-13T00:51:08.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:51:08.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:51:08.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.951489
2026-04-13T00:51:08.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:51:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:51:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:51:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:51:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:51:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:50:30', tmtdew=1.71407, humidity=89.2125, cloud=0.0, wind=6.79464, temperature=10.8038, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:50:08.650', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:51:08.988 [DEBUG] [Thread-198846] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:51:09.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:51:09.081 [DEBUG] [Thread-198849] [transport.py] [_log()] starting thread (client mode): 0xae50a500
2026-04-13T00:51:09.081 [DEBUG] [Thread-198849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:51:09.095 [DEBUG] [Thread-198849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:51:09.096 [INFO] [Thread-198849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:51:09.103 [DEBUG] [Thread-198849] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:51:09.104 [DEBUG] [Thread-198849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] client lang: <none>
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] server lang: <none>
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] kex follows: False
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:51:09.105 [DEBUG] [Thread-198849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:51:09.106 [DEBUG] [Thread-198849] [transport.py] [_log()] Compression: none
2026-04-13T00:51:09.106 [DEBUG] [Thread-198849] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:51:09.162 [DEBUG] [Thread-198849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:51:09.163 [DEBUG] [Thread-198849] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:51:09.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:51:09.165 [DEBUG] [Thread-198849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:51:09.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:51:09.221 [DEBUG] [Thread-198849] [transport.py] [_log()] userauth is OK
2026-04-13T00:51:09.222 [DEBUG] [Thread-198849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:51:09.222 [DEBUG] [Thread-198849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:51:09.222 [DEBUG] [Thread-198849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:51:09.222 [DEBUG] [Thread-198849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:51:09.256 [INFO] [Thread-198849] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:51:09.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:51:09.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:51:10.093 [DEBUG] [Thread-198849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:51:10.094 [DEBUG] [Thread-198849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:51:10.142 [DEBUG] [Thread-198849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:51:10.142 [DEBUG] [Thread-198849] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:51:10.151 [DEBUG] [Thread-198849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:51:10.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:51:10.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:51:10.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:51:10.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:51:10.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:51:10.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:51:10.188 [DEBUG] [Thread-198849] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:51:15.819 [DEBUG] [Thread-198851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:51:26.297 [DEBUG] [Thread-198852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:51:30.871 [DEBUG] [Thread-198853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:51:40.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:51:40.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:51:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:51:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 51, 5), 1.7136, 89.2125, 0.0, 6.70644, 10.7541, 1, 1, 0, 2, 0, 0),)
2026-04-13T00:51:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:51:05
2026-04-13T00:51:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:51:42.052 [DEBUG] [Thread-198854] [transport.py] [_log()] starting thread (client mode): 0xae50bca0
2026-04-13T00:51:42.052 [DEBUG] [Thread-198854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:51:42.076 [DEBUG] [Thread-198854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:51:42.076 [INFO] [Thread-198854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:51:42.079 [DEBUG] [Thread-198854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:51:42.080 [DEBUG] [Thread-198854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] client lang: <none>
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] server lang: <none>
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] kex follows: False
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:51:42.081 [DEBUG] [Thread-198854] [transport.py] [_log()] Compression: none
2026-04-13T00:51:42.082 [DEBUG] [Thread-198854] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:51:42.103 [DEBUG] [Thread-198854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:51:42.103 [DEBUG] [Thread-198854] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:51:42.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:51:42.104 [DEBUG] [Thread-198854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:51:42.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:51:42.107 [DEBUG] [Thread-198854] [transport.py] [_log()] userauth is OK
2026-04-13T00:51:42.107 [DEBUG] [Thread-198854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:51:42.107 [DEBUG] [Thread-198854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:51:42.107 [DEBUG] [Thread-198854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:51:42.107 [DEBUG] [Thread-198854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:51:42.132 [INFO] [Thread-198854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:51:42.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:51:42.865 [DEBUG] [Thread-198854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:51:42.865 [DEBUG] [Thread-198854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:51:42.865 [DEBUG] [Thread-198854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:51:42.906 [DEBUG] [Thread-198854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:51:42.906 [DEBUG] [Thread-198854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:51:42.910 [DEBUG] [Thread-198854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:51:42.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:51:42.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:51:42.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:51:42.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:51:42.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:51:42.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:51:42.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:51:42.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:51:42.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:51:42.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.952183 -999.00  +10.90   4.51     91   +9.50 1 2 1 3 1     0    0 1.53 2.81 ..eSw 4.5 4.5 203.6 5.1 11.5 -22.4 11.3 -21.2 11.1 -19.2 11.4 -21.2
2026-04-13T00:51:42.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:51:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:51:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.952183
2026-04-13T00:51:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:51:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:51:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:51:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:51:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:51:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:51:05', tmtdew=1.7136, humidity=89.2125, cloud=0.0, wind=6.70644, temperature=10.7541, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:51:08.611', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:51:42.937 [DEBUG] [Thread-198854] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:51:43.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:51:43.031 [DEBUG] [Thread-198857] [transport.py] [_log()] starting thread (client mode): 0xae518490
2026-04-13T00:51:43.031 [DEBUG] [Thread-198857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:51:43.046 [DEBUG] [Thread-198857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:51:43.046 [INFO] [Thread-198857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] client lang: <none>
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] server lang: <none>
2026-04-13T00:51:43.053 [DEBUG] [Thread-198857] [transport.py] [_log()] kex follows: False
2026-04-13T00:51:43.054 [DEBUG] [Thread-198857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:51:43.054 [DEBUG] [Thread-198857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:51:43.054 [DEBUG] [Thread-198857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:51:43.054 [DEBUG] [Thread-198857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:51:43.054 [DEBUG] [Thread-198857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:51:43.054 [DEBUG] [Thread-198857] [transport.py] [_log()] Compression: none
2026-04-13T00:51:43.054 [DEBUG] [Thread-198857] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:51:43.109 [DEBUG] [Thread-198857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:51:43.110 [DEBUG] [Thread-198857] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:51:43.111 [DEBUG] [Thread-198857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:51:43.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:51:43.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:51:43.166 [DEBUG] [Thread-198857] [transport.py] [_log()] userauth is OK
2026-04-13T00:51:43.167 [DEBUG] [Thread-198857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:51:43.167 [DEBUG] [Thread-198857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:51:43.167 [DEBUG] [Thread-198857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:51:43.167 [DEBUG] [Thread-198857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:51:43.186 [INFO] [Thread-198857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:51:43.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:51:43.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:51:43.970 [DEBUG] [Thread-198857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:51:43.970 [DEBUG] [Thread-198857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:51:44.018 [DEBUG] [Thread-198857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:51:44.018 [DEBUG] [Thread-198857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:51:44.027 [DEBUG] [Thread-198857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:51:44.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:51:44.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:51:44.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:51:44.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:51:44.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:51:44.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:51:44.071 [DEBUG] [Thread-198857] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:51:45.908 [DEBUG] [Thread-198859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:00.958 [DEBUG] [Thread-198860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:02.675 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:02.676 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:52:14.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:52:14.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:52:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 51, 40), 0.64747, 95.812, 0.0, 6.14232, 5.00407, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:52:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:51:40
2026-04-13T00:52:15.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:52:15.884 [DEBUG] [Thread-198861] [transport.py] [_log()] starting thread (client mode): 0xae563760
2026-04-13T00:52:15.884 [DEBUG] [Thread-198861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:52:15.903 [DEBUG] [Thread-198861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:52:15.903 [INFO] [Thread-198861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:52:15.906 [DEBUG] [Thread-198861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] client lang: <none>
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] server lang: <none>
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] kex follows: False
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:52:15.907 [DEBUG] [Thread-198861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:52:15.908 [DEBUG] [Thread-198861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:52:15.908 [DEBUG] [Thread-198861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:52:15.908 [DEBUG] [Thread-198861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:52:15.908 [DEBUG] [Thread-198861] [transport.py] [_log()] Compression: none
2026-04-13T00:52:15.908 [DEBUG] [Thread-198861] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:52:15.924 [DEBUG] [Thread-198861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:52:15.925 [DEBUG] [Thread-198861] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:52:15.925 [DEBUG] [Thread-198861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:52:15.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:52:15.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:52:15.928 [DEBUG] [Thread-198861] [transport.py] [_log()] userauth is OK
2026-04-13T00:52:15.928 [DEBUG] [Thread-198861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:52:15.928 [DEBUG] [Thread-198861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:52:15.928 [DEBUG] [Thread-198861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:52:15.928 [DEBUG] [Thread-198861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:52:15.943 [INFO] [Thread-198861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:52:15.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:52:15.995 [DEBUG] [Thread-198863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:16.708 [DEBUG] [Thread-198861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:52:16.708 [DEBUG] [Thread-198861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:52:16.708 [DEBUG] [Thread-198861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:52:16.749 [DEBUG] [Thread-198861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:52:16.749 [DEBUG] [Thread-198861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:52:16.752 [DEBUG] [Thread-198861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:52:16.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:52:16.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:52:16.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:52:16.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:52:16.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:52:16.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:52:16.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:52:16.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:52:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:52:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.952531 -999.00  +10.80   4.56     91   +9.50 1 2 1 3 1     0    0 1.49 2.28 ..ES. 4.6 4.6 196.2 5.1 11.5 -22.4 11.3 -21.4 11.1 -19.3 11.3 -21.3
2026-04-13T00:52:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:52:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:52:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.952531
2026-04-13T00:52:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:52:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:52:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:52:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:52:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:52:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:51:40', tmtdew=0.64747, humidity=95.812, cloud=0.0, wind=6.14232, temperature=5.00407, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:51:38.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:52:16.777 [DEBUG] [Thread-198861] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:52:16.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:52:16.878 [DEBUG] [Thread-198865] [transport.py] [_log()] starting thread (client mode): 0xb0fcdf60
2026-04-13T00:52:16.878 [DEBUG] [Thread-198865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:52:16.892 [DEBUG] [Thread-198865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:52:16.892 [INFO] [Thread-198865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] client lang: <none>
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] server lang: <none>
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] kex follows: False
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:52:16.900 [DEBUG] [Thread-198865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:52:16.901 [DEBUG] [Thread-198865] [transport.py] [_log()] Compression: none
2026-04-13T00:52:16.901 [DEBUG] [Thread-198865] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:52:16.958 [DEBUG] [Thread-198865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:52:16.959 [DEBUG] [Thread-198865] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:52:16.959 [DEBUG] [Thread-198865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:52:16.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:52:16.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:52:17.015 [DEBUG] [Thread-198865] [transport.py] [_log()] userauth is OK
2026-04-13T00:52:17.015 [DEBUG] [Thread-198865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:52:17.016 [DEBUG] [Thread-198865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:52:17.016 [DEBUG] [Thread-198865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:52:17.016 [DEBUG] [Thread-198865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:52:17.035 [INFO] [Thread-198865] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:52:17.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:52:17.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:52:17.871 [DEBUG] [Thread-198865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:52:17.871 [DEBUG] [Thread-198865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:52:17.919 [DEBUG] [Thread-198865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:52:17.919 [DEBUG] [Thread-198865] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:52:17.927 [DEBUG] [Thread-198865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:52:17.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:52: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')
2026-04-13T00:52:17.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:52:17.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:52:17.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:52:17.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:52:17.960 [DEBUG] [Thread-198865] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:52:26.364 [DEBUG] [Thread-198867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:31.030 [DEBUG] [Thread-198868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:46.084 [DEBUG] [Thread-198869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:52:47.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:52:47.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:52:47.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:52:49.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 52, 16), 1.05405, 93.2743, 0.0, 4.74768, 6.94726, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:52:49.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:52:16
2026-04-13T00:52:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:52:49.778 [DEBUG] [Thread-198870] [transport.py] [_log()] starting thread (client mode): 0xa795b280
2026-04-13T00:52:49.778 [DEBUG] [Thread-198870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:52:49.800 [DEBUG] [Thread-198870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:52:49.800 [INFO] [Thread-198870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:52:49.803 [DEBUG] [Thread-198870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:52:49.803 [DEBUG] [Thread-198870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:52:49.803 [DEBUG] [Thread-198870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:52:49.803 [DEBUG] [Thread-198870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:49.803 [DEBUG] [Thread-198870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:49.803 [DEBUG] [Thread-198870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] client lang: <none>
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] server lang: <none>
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] kex follows: False
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:52:49.804 [DEBUG] [Thread-198870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:52:49.805 [DEBUG] [Thread-198870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:52:49.805 [DEBUG] [Thread-198870] [transport.py] [_log()] Compression: none
2026-04-13T00:52:49.805 [DEBUG] [Thread-198870] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:52:49.824 [DEBUG] [Thread-198870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:52:49.824 [DEBUG] [Thread-198870] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:52:49.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:52:49.826 [DEBUG] [Thread-198870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:52:49.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:52:49.827 [DEBUG] [Thread-198870] [transport.py] [_log()] userauth is OK
2026-04-13T00:52:49.828 [DEBUG] [Thread-198870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:52:49.828 [DEBUG] [Thread-198870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:52:49.828 [DEBUG] [Thread-198870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:52:49.828 [DEBUG] [Thread-198870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:52:49.851 [INFO] [Thread-198870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:52:49.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:52:50.615 [DEBUG] [Thread-198870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:52:50.615 [DEBUG] [Thread-198870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:52:50.616 [DEBUG] [Thread-198870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:52:50.656 [DEBUG] [Thread-198870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:52:50.656 [DEBUG] [Thread-198870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:52:50.659 [DEBUG] [Thread-198870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:52:50.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:52:50.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:52:50.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:52:50.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:52:50.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:52:50.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:52:50.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:52:50.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:52:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:52:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.952878 -999.00  +10.80   3.65     91   +9.50 1 2 1 3 1     0    0 1.49 1.55 ..ES. 3.6 3.6 186.2 5.0 11.4 -22.2 11.3 -21.4 11.1 -19.4 11.3 -21.3
2026-04-13T00:52:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:52:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:52:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.952878
2026-04-13T00:52:50.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:52:50.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:52:50.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:52:50.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:52:50.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:52:50.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:52:16', tmtdew=1.05405, humidity=93.2743, cloud=0.0, wind=4.74768, temperature=6.94726, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:52:08.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:52:50.679 [DEBUG] [Thread-198870] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:52:50.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:52:50.768 [DEBUG] [Thread-198873] [transport.py] [_log()] starting thread (client mode): 0xa795b370
2026-04-13T00:52:50.769 [DEBUG] [Thread-198873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:52:50.783 [DEBUG] [Thread-198873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:52:50.783 [INFO] [Thread-198873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:52:50.791 [DEBUG] [Thread-198873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:52:50.791 [DEBUG] [Thread-198873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:52:50.791 [DEBUG] [Thread-198873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:52:50.791 [DEBUG] [Thread-198873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:50.791 [DEBUG] [Thread-198873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:52:50.791 [DEBUG] [Thread-198873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] client lang: <none>
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] server lang: <none>
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] kex follows: False
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] Compression: none
2026-04-13T00:52:50.792 [DEBUG] [Thread-198873] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:52:50.847 [DEBUG] [Thread-198873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:52:50.848 [DEBUG] [Thread-198873] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:52:50.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:52:50.849 [DEBUG] [Thread-198873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:52:50.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:52:50.904 [DEBUG] [Thread-198873] [transport.py] [_log()] userauth is OK
2026-04-13T00:52:50.905 [DEBUG] [Thread-198873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:52:50.905 [DEBUG] [Thread-198873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:52:50.905 [DEBUG] [Thread-198873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:52:50.905 [DEBUG] [Thread-198873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:52:50.923 [INFO] [Thread-198873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:52:50.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:52:50.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:52:51.728 [DEBUG] [Thread-198873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:52:51.729 [DEBUG] [Thread-198873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:52:51.777 [DEBUG] [Thread-198873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:52:51.777 [DEBUG] [Thread-198873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:52:51.787 [DEBUG] [Thread-198873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:52:51.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:52:51.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:52:51.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:52:51.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:52:51.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:52:51.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:52:51.823 [DEBUG] [Thread-198873] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:53:01.120 [DEBUG] [Thread-198875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:53:02.881 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:53:02.882 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:53:16.166 [DEBUG] [Thread-198876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:53:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:53:21.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:53:21.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:53:23.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 52, 52), 0.625565, 95.9447, 0.0, 5.43672, 4.9543, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:53:23.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:52:52
2026-04-13T00:53:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:53:23.659 [DEBUG] [Thread-198877] [transport.py] [_log()] starting thread (client mode): 0xae508d90
2026-04-13T00:53:23.659 [DEBUG] [Thread-198877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:53:23.679 [DEBUG] [Thread-198877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:53:23.679 [INFO] [Thread-198877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:53:23.682 [DEBUG] [Thread-198877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:53:23.682 [DEBUG] [Thread-198877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:53:23.682 [DEBUG] [Thread-198877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:53:23.682 [DEBUG] [Thread-198877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:23.682 [DEBUG] [Thread-198877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] client lang: <none>
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] server lang: <none>
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] kex follows: False
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] Compression: none
2026-04-13T00:53:23.683 [DEBUG] [Thread-198877] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:53:23.700 [DEBUG] [Thread-198877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:53:23.701 [DEBUG] [Thread-198877] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:53:23.702 [DEBUG] [Thread-198877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:53:23.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:53:23.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:53:23.704 [DEBUG] [Thread-198877] [transport.py] [_log()] userauth is OK
2026-04-13T00:53:23.704 [DEBUG] [Thread-198877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:53:23.704 [DEBUG] [Thread-198877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:53:23.704 [DEBUG] [Thread-198877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:53:23.704 [DEBUG] [Thread-198877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:53:23.729 [INFO] [Thread-198877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:53:23.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:53:24.532 [DEBUG] [Thread-198877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:53:24.533 [DEBUG] [Thread-198877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:53:24.533 [DEBUG] [Thread-198877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:53:24.574 [DEBUG] [Thread-198877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:53:24.574 [DEBUG] [Thread-198877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:53:24.578 [DEBUG] [Thread-198877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:53:24.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:53:24.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:53:24.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:53:24.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:53:24.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:53:24.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:53:24.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:53:24.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:53:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:53:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.953225 -999.00  +10.80   4.02     91   +9.50 1 2 1 3 1     0    0 1.49 0.73 ..ES. 4.0 4.0 191.2 4.7 11.4 -22.3 11.3 -21.5 11.1 -19.3 11.3 -21.4
2026-04-13T00:53:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:53:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:53:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.953225
2026-04-13T00:53:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:53:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:53:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:53:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:53:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:53:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:52:52', tmtdew=0.625565, humidity=95.9447, cloud=0.0, wind=5.43672, temperature=4.9543, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:52:38.640', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:53:24.606 [DEBUG] [Thread-198877] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:53:24.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:53:24.699 [DEBUG] [Thread-198880] [transport.py] [_log()] starting thread (client mode): 0xae5610c0
2026-04-13T00:53:24.699 [DEBUG] [Thread-198880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:53:24.715 [DEBUG] [Thread-198880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:53:24.716 [INFO] [Thread-198880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:53:24.723 [DEBUG] [Thread-198880] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:53:24.724 [DEBUG] [Thread-198880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] client lang: <none>
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] server lang: <none>
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] kex follows: False
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:53:24.725 [DEBUG] [Thread-198880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:53:24.726 [DEBUG] [Thread-198880] [transport.py] [_log()] Compression: none
2026-04-13T00:53:24.726 [DEBUG] [Thread-198880] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:53:24.786 [DEBUG] [Thread-198880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:53:24.786 [DEBUG] [Thread-198880] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:53:24.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:53:24.788 [DEBUG] [Thread-198880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:53:24.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:53:24.845 [DEBUG] [Thread-198880] [transport.py] [_log()] userauth is OK
2026-04-13T00:53:24.845 [DEBUG] [Thread-198880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:53:24.845 [DEBUG] [Thread-198880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:53:24.845 [DEBUG] [Thread-198880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:53:24.845 [DEBUG] [Thread-198880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:53:24.864 [INFO] [Thread-198880] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:53:24.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:53:24.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:53:25.704 [DEBUG] [Thread-198880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:53:25.704 [DEBUG] [Thread-198880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:53:25.752 [DEBUG] [Thread-198880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:53:25.752 [DEBUG] [Thread-198880] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:53:25.762 [DEBUG] [Thread-198880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:53:25.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:53:25.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:53:25.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:53:25.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:53:25.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:53:25.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:53:25.798 [DEBUG] [Thread-198880] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:53:26.420 [DEBUG] [Thread-198882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:53:31.198 [DEBUG] [Thread-198883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:53:46.249 [DEBUG] [Thread-198884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:53:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:53:55.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:53:55.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:53:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 53, 27), 0.973017, 93.6961, 0.0, 4.6242, 6.90286, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:53:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:53:27
2026-04-13T00:53:57.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:53:57.670 [DEBUG] [Thread-198885] [transport.py] [_log()] starting thread (client mode): 0xae560ac0
2026-04-13T00:53:57.670 [DEBUG] [Thread-198885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:53:57.691 [DEBUG] [Thread-198885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:53:57.691 [INFO] [Thread-198885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:57.692 [DEBUG] [Thread-198885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] client lang: <none>
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] server lang: <none>
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] kex follows: False
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] Compression: none
2026-04-13T00:53:57.693 [DEBUG] [Thread-198885] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:53:57.709 [DEBUG] [Thread-198885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:53:57.709 [DEBUG] [Thread-198885] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:53:57.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:53:57.710 [DEBUG] [Thread-198885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:53:57.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:53:57.712 [DEBUG] [Thread-198885] [transport.py] [_log()] userauth is OK
2026-04-13T00:53:57.712 [DEBUG] [Thread-198885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:53:57.712 [DEBUG] [Thread-198885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:53:57.712 [DEBUG] [Thread-198885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:53:57.712 [DEBUG] [Thread-198885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:53:57.735 [INFO] [Thread-198885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:53:57.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:53:58.462 [DEBUG] [Thread-198885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:53:58.462 [DEBUG] [Thread-198885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:53:58.463 [DEBUG] [Thread-198885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:53:58.503 [DEBUG] [Thread-198885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:53:58.504 [DEBUG] [Thread-198885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:53:58.507 [DEBUG] [Thread-198885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:53:58.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:53:58.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:53:58.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:53:58.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:53:58.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:53:58.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:53:58.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:53:58.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:53:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:53:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.953572 -999.00  +10.80   3.18     91   +9.60 1 2 1 3 1     0    0 1.46 -0.30 ..... 3.2 3.2 187.2 4.7 11.4 -22.4 11.3 -21.5 11.1 -19.3 11.3 -21.3
2026-04-13T00:53:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:53:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:53:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.953572
2026-04-13T00:53:58.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:53:58.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:53:58.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:53:58.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:53:58.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:53:58.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:53:27', tmtdew=0.973017, humidity=93.6961, cloud=0.0, wind=4.6242, temperature=6.90286, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:53:08.621', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:53:58.538 [DEBUG] [Thread-198885] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:53:58.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:53:58.628 [DEBUG] [Thread-198888] [transport.py] [_log()] starting thread (client mode): 0xb0fcc100
2026-04-13T00:53:58.628 [DEBUG] [Thread-198888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:53:58.644 [DEBUG] [Thread-198888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:53:58.645 [INFO] [Thread-198888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:53:58.652 [DEBUG] [Thread-198888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:53:58.652 [DEBUG] [Thread-198888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:53:58.652 [DEBUG] [Thread-198888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:53:58.652 [DEBUG] [Thread-198888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:58.652 [DEBUG] [Thread-198888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] client lang: <none>
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] server lang: <none>
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] kex follows: False
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] Compression: none
2026-04-13T00:53:58.653 [DEBUG] [Thread-198888] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:53:58.714 [DEBUG] [Thread-198888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:53:58.714 [DEBUG] [Thread-198888] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:53:58.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:53:58.715 [DEBUG] [Thread-198888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:53:58.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:53:58.770 [DEBUG] [Thread-198888] [transport.py] [_log()] userauth is OK
2026-04-13T00:53:58.770 [DEBUG] [Thread-198888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:53:58.770 [DEBUG] [Thread-198888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:53:58.771 [DEBUG] [Thread-198888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:53:58.771 [DEBUG] [Thread-198888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:53:58.789 [INFO] [Thread-198888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:53:58.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:53:58.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:53:59.596 [DEBUG] [Thread-198888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:53:59.596 [DEBUG] [Thread-198888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:53:59.644 [DEBUG] [Thread-198888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:53:59.644 [DEBUG] [Thread-198888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:53:59.653 [DEBUG] [Thread-198888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:53:59.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:53:59.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:53:59.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:53:59.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:53:59.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:53:59.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:53:59.690 [DEBUG] [Thread-198888] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:54:01.288 [DEBUG] [Thread-198890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:54:03.087 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:54:03.088 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:54:16.340 [DEBUG] [Thread-198891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:54:26.477 [DEBUG] [Thread-198892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:54:29.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:54:29.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:54:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:54:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 54, 2), 0.969457, 93.7182, 0.0, 4.39488, 6.90286, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:54:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:54:02
2026-04-13T00:54:31.380 [DEBUG] [Thread-198893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:54:31.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:54:31.662 [DEBUG] [Thread-198894] [transport.py] [_log()] starting thread (client mode): 0xae563be0
2026-04-13T00:54:31.662 [DEBUG] [Thread-198894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:54:31.681 [DEBUG] [Thread-198894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:54:31.681 [INFO] [Thread-198894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] client lang: <none>
2026-04-13T00:54:31.685 [DEBUG] [Thread-198894] [transport.py] [_log()] server lang: <none>
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] kex follows: False
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] Compression: none
2026-04-13T00:54:31.686 [DEBUG] [Thread-198894] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:54:31.704 [DEBUG] [Thread-198894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:54:31.705 [DEBUG] [Thread-198894] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:54:31.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:54:31.706 [DEBUG] [Thread-198894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:54:31.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:54:31.708 [DEBUG] [Thread-198894] [transport.py] [_log()] userauth is OK
2026-04-13T00:54:31.708 [DEBUG] [Thread-198894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:54:31.708 [DEBUG] [Thread-198894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:54:31.708 [DEBUG] [Thread-198894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:54:31.708 [DEBUG] [Thread-198894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:54:31.725 [INFO] [Thread-198894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:54:31.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:54:32.526 [DEBUG] [Thread-198894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:54:32.526 [DEBUG] [Thread-198894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:54:32.526 [DEBUG] [Thread-198894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:54:32.568 [DEBUG] [Thread-198894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:54:32.568 [DEBUG] [Thread-198894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:54:32.570 [DEBUG] [Thread-198894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:54:32.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:54:32.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:54:32.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:54:32.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:54:32.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:54:32.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:54:32.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:54:32.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:54:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:54:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.953920 -999.00  +10.80   5.00     92   +9.60 1 2 1 3 1     0    0 1.38 -1.55 ..es. 5.0 5.0 195.6 5.3 11.4 -22.3 11.3 -21.4 11.1 -19.3 11.3 -21.2
2026-04-13T00:54:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:54:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:54:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.953920
2026-04-13T00:54:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:54:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:54:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:54:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:54:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:54:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:54:02', tmtdew=0.969457, humidity=93.7182, cloud=0.0, wind=4.39488, temperature=6.90286, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:53:38.688', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:54:32.594 [DEBUG] [Thread-198894] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:54:32.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:54:32.692 [DEBUG] [Thread-198897] [transport.py] [_log()] starting thread (client mode): 0xae5f1fc0
2026-04-13T00:54:32.692 [DEBUG] [Thread-198897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:54:32.707 [DEBUG] [Thread-198897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:54:32.707 [INFO] [Thread-198897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] client lang: <none>
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] server lang: <none>
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] kex follows: False
2026-04-13T00:54:32.715 [DEBUG] [Thread-198897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:54:32.716 [DEBUG] [Thread-198897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:54:32.716 [DEBUG] [Thread-198897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:54:32.716 [DEBUG] [Thread-198897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:54:32.716 [DEBUG] [Thread-198897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:54:32.716 [DEBUG] [Thread-198897] [transport.py] [_log()] Compression: none
2026-04-13T00:54:32.716 [DEBUG] [Thread-198897] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:54:32.773 [DEBUG] [Thread-198897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:54:32.773 [DEBUG] [Thread-198897] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:54:32.774 [DEBUG] [Thread-198897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:54:32.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:54:32.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:54:32.830 [DEBUG] [Thread-198897] [transport.py] [_log()] userauth is OK
2026-04-13T00:54:32.830 [DEBUG] [Thread-198897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:54:32.830 [DEBUG] [Thread-198897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:54:32.830 [DEBUG] [Thread-198897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:54:32.830 [DEBUG] [Thread-198897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:54:32.849 [INFO] [Thread-198897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:54:32.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:54:32.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:54:33.676 [DEBUG] [Thread-198897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:54:33.677 [DEBUG] [Thread-198897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:54:33.724 [DEBUG] [Thread-198897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:54:33.724 [DEBUG] [Thread-198897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:54:33.733 [DEBUG] [Thread-198897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:54:33.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:54:33.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:54:33.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:54:33.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:54:33.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:54:33.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:54:33.767 [DEBUG] [Thread-198897] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:54:46.415 [DEBUG] [Thread-198899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:55:01.463 [DEBUG] [Thread-198900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:55:03.301 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:55:03.302 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:55:03.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:55:03.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:55:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:55:05.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 54, 38), 0.58546, 96.1938, 0.0, 5.18976, 4.95452, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:55:05.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:54:38
2026-04-13T00:55:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:55:05.588 [DEBUG] [Thread-198901] [transport.py] [_log()] starting thread (client mode): 0xae518250
2026-04-13T00:55:05.588 [DEBUG] [Thread-198901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:55:05.608 [DEBUG] [Thread-198901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:55:05.608 [INFO] [Thread-198901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:55:05.611 [DEBUG] [Thread-198901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:55:05.611 [DEBUG] [Thread-198901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:55:05.611 [DEBUG] [Thread-198901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:55:05.611 [DEBUG] [Thread-198901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:05.611 [DEBUG] [Thread-198901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] client lang: <none>
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] server lang: <none>
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] kex follows: False
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:55:05.612 [DEBUG] [Thread-198901] [transport.py] [_log()] Compression: none
2026-04-13T00:55:05.613 [DEBUG] [Thread-198901] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:55:05.631 [DEBUG] [Thread-198901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:55:05.633 [DEBUG] [Thread-198901] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:55:05.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:55:05.634 [DEBUG] [Thread-198901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:55:05.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:55:05.636 [DEBUG] [Thread-198901] [transport.py] [_log()] userauth is OK
2026-04-13T00:55:05.636 [DEBUG] [Thread-198901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:55:05.636 [DEBUG] [Thread-198901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:55:05.636 [DEBUG] [Thread-198901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:55:05.636 [DEBUG] [Thread-198901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:55:05.660 [INFO] [Thread-198901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:55:05.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:55:06.822 [DEBUG] [Thread-198901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:55:06.823 [DEBUG] [Thread-198901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:55:06.823 [DEBUG] [Thread-198901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:55:06.864 [DEBUG] [Thread-198901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:55:06.864 [DEBUG] [Thread-198901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:55:06.868 [DEBUG] [Thread-198901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:55:06.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:55:06.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:55:06.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:55:06.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:55:06.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:55:06.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:55:06.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:55:06.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:55:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:55:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.954614 -999.00  +10.80   2.65     92   +9.60 1 2 1 3 1     0    0 1.32 -4.21 ..ESw 2.6 2.6 188.6 3.4 11.4 -22.3 11.3 -21.5 11.1 -19.3 11.3 -21.3
2026-04-13T00:55:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:55:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:55:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.954614
2026-04-13T00:55:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:55:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:55:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:55:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:55:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:55:06.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:54:38', tmtdew=0.58546, humidity=96.1938, cloud=0.0, wind=5.18976, temperature=4.95452, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:54:38.650', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:55:06.920 [DEBUG] [Thread-198901] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:55:07.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:55:07.016 [DEBUG] [Thread-198904] [transport.py] [_log()] starting thread (client mode): 0xa795afb0
2026-04-13T00:55:07.016 [DEBUG] [Thread-198904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:55:07.031 [DEBUG] [Thread-198904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:55:07.031 [INFO] [Thread-198904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:55:07.039 [DEBUG] [Thread-198904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:55:07.039 [DEBUG] [Thread-198904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:55:07.039 [DEBUG] [Thread-198904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:55:07.039 [DEBUG] [Thread-198904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:07.039 [DEBUG] [Thread-198904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] client lang: <none>
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] server lang: <none>
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] kex follows: False
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:55:07.040 [DEBUG] [Thread-198904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:55:07.041 [DEBUG] [Thread-198904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:55:07.041 [DEBUG] [Thread-198904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:55:07.041 [DEBUG] [Thread-198904] [transport.py] [_log()] Compression: none
2026-04-13T00:55:07.041 [DEBUG] [Thread-198904] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:55:07.104 [DEBUG] [Thread-198904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:55:07.104 [DEBUG] [Thread-198904] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:55:07.105 [DEBUG] [Thread-198904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:55:07.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:55:07.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:55:07.163 [DEBUG] [Thread-198904] [transport.py] [_log()] userauth is OK
2026-04-13T00:55:07.163 [DEBUG] [Thread-198904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:55:07.164 [DEBUG] [Thread-198904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:55:07.164 [DEBUG] [Thread-198904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:55:07.164 [DEBUG] [Thread-198904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:55:07.183 [INFO] [Thread-198904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:55:07.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:55:07.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:55:07.970 [DEBUG] [Thread-198904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:55:07.970 [DEBUG] [Thread-198904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:55:08.020 [DEBUG] [Thread-198904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:55:08.020 [DEBUG] [Thread-198904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:55:08.028 [DEBUG] [Thread-198904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:55:08.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:55:08.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:55:08.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:55:08.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:55:08.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:55:08.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:55:08.062 [DEBUG] [Thread-198904] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:55:16.499 [DEBUG] [Thread-198906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:55:26.535 [DEBUG] [Thread-198907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:55:31.552 [DEBUG] [Thread-198908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:55:38.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:55:38.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:55:38.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:55:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 55, 13), 0.876567, 94.2177, 0.0, 4.64184, 6.92497, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:55:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:55:13
2026-04-13T00:55:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:55:39.915 [DEBUG] [Thread-198909] [transport.py] [_log()] starting thread (client mode): 0xae518190
2026-04-13T00:55:39.915 [DEBUG] [Thread-198909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:55:39.935 [DEBUG] [Thread-198909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:55:39.935 [INFO] [Thread-198909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] client lang: <none>
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] server lang: <none>
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] kex follows: False
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] Compression: none
2026-04-13T00:55:39.936 [DEBUG] [Thread-198909] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:55:39.955 [DEBUG] [Thread-198909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:55:39.955 [DEBUG] [Thread-198909] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:55:39.956 [DEBUG] [Thread-198909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:55:39.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:55:39.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:55:39.958 [DEBUG] [Thread-198909] [transport.py] [_log()] userauth is OK
2026-04-13T00:55:39.958 [DEBUG] [Thread-198909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:55:39.958 [DEBUG] [Thread-198909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:55:39.958 [DEBUG] [Thread-198909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:55:39.959 [DEBUG] [Thread-198909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:55:39.993 [INFO] [Thread-198909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:55:39.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:55:40.786 [DEBUG] [Thread-198909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:55:40.787 [DEBUG] [Thread-198909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:55:40.787 [DEBUG] [Thread-198909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:55:40.828 [DEBUG] [Thread-198909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:55:40.828 [DEBUG] [Thread-198909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:55:40.830 [DEBUG] [Thread-198909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:55:40.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:55:40.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:55:40.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:55:40.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:55:40.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:55:40.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:55:40.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:55:40.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:55:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:55:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.954961 -999.00  +10.80   2.43     92   +9.60 1 2 1 3 1     0    0 1.25 -5.30 ..ESw 2.4 2.4 186.2 3.6 11.4 -22.3 11.3 -21.4 11.0 -19.1 11.3 -21.1
2026-04-13T00:55:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:55:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:55:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.954961
2026-04-13T00:55:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:55:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:55:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:55:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:55:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:55:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:55:13', tmtdew=0.876567, humidity=94.2177, cloud=0.0, wind=4.64184, temperature=6.92497, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:55:08.630', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:55:40.855 [DEBUG] [Thread-198909] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:55:40.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:55:40.949 [DEBUG] [Thread-198912] [transport.py] [_log()] starting thread (client mode): 0xae50bb50
2026-04-13T00:55:40.949 [DEBUG] [Thread-198912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:55:40.963 [DEBUG] [Thread-198912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:55:40.964 [INFO] [Thread-198912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:55:40.971 [DEBUG] [Thread-198912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:55:40.972 [DEBUG] [Thread-198912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:55:40.972 [DEBUG] [Thread-198912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:55:40.972 [DEBUG] [Thread-198912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:40.972 [DEBUG] [Thread-198912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:55:40.972 [DEBUG] [Thread-198912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:40.972 [DEBUG] [Thread-198912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:55:40.972 [DEBUG] [Thread-198912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] client lang: <none>
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] server lang: <none>
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] kex follows: False
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] Compression: none
2026-04-13T00:55:40.973 [DEBUG] [Thread-198912] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:55:41.032 [DEBUG] [Thread-198912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:55:41.032 [DEBUG] [Thread-198912] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:55:41.033 [DEBUG] [Thread-198912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:55:41.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:55:41.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:55:41.088 [DEBUG] [Thread-198912] [transport.py] [_log()] userauth is OK
2026-04-13T00:55:41.088 [DEBUG] [Thread-198912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:55:41.088 [DEBUG] [Thread-198912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:55:41.088 [DEBUG] [Thread-198912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:55:41.088 [DEBUG] [Thread-198912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:55:41.112 [INFO] [Thread-198912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:55:41.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:55:41.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:55:41.905 [DEBUG] [Thread-198912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:55:41.905 [DEBUG] [Thread-198912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:55:41.953 [DEBUG] [Thread-198912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:55:41.953 [DEBUG] [Thread-198912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:55:41.962 [DEBUG] [Thread-198912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:55:41.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:55:41.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:55:41.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:55:41.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:55:41.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:55:41.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:55:41.999 [DEBUG] [Thread-198912] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:55:46.592 [DEBUG] [Thread-198914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:01.644 [DEBUG] [Thread-198915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:03.508 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:03.510 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:56:12.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:56:12.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:56:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 55, 49), 0.54451, 96.4591, 0.0, 6.0012, 5.15351, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:56:13.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:55:49
2026-04-13T00:56:13.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:56:13.910 [DEBUG] [Thread-198916] [transport.py] [_log()] starting thread (client mode): 0xb0fe9480
2026-04-13T00:56:13.910 [DEBUG] [Thread-198916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:56:13.931 [DEBUG] [Thread-198916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:56:13.931 [INFO] [Thread-198916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:56:13.934 [DEBUG] [Thread-198916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:56:13.934 [DEBUG] [Thread-198916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:56:13.934 [DEBUG] [Thread-198916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:56:13.934 [DEBUG] [Thread-198916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:13.934 [DEBUG] [Thread-198916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] client lang: <none>
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] server lang: <none>
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] kex follows: False
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] Compression: none
2026-04-13T00:56:13.935 [DEBUG] [Thread-198916] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:56:13.952 [DEBUG] [Thread-198916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:56:13.953 [DEBUG] [Thread-198916] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:56:13.953 [DEBUG] [Thread-198916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:56:13.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:56:13.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:56:13.955 [DEBUG] [Thread-198916] [transport.py] [_log()] userauth is OK
2026-04-13T00:56:13.955 [DEBUG] [Thread-198916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:56:13.956 [DEBUG] [Thread-198916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:56:13.956 [DEBUG] [Thread-198916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:56:13.956 [DEBUG] [Thread-198916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:56:13.973 [INFO] [Thread-198916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:56:13.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:56:14.756 [DEBUG] [Thread-198916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:56:14.757 [DEBUG] [Thread-198916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:56:14.757 [DEBUG] [Thread-198916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:56:14.798 [DEBUG] [Thread-198916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:56:14.798 [DEBUG] [Thread-198916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:56:14.802 [DEBUG] [Thread-198916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:56:14.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:56:14.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:56:14.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:56:14.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:56:14.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:56:14.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:56:14.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:56:14.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:56:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:56:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.955308 -999.00  +10.80   2.71     92   +9.60 1 2 1 3 1     0    0 1.20 -6.56 ..e.. 2.7 2.7 196.2 3.5 11.4 -22.4 11.3 -21.4 11.1 -19.1 11.3 -21.1
2026-04-13T00:56:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:56:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:56:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.955308
2026-04-13T00:56:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:56:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:56:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:56:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:56:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:56:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:55:49', tmtdew=0.54451, humidity=96.4591, cloud=0.0, wind=6.0012, temperature=5.15351, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:55:38.611', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:56:14.827 [DEBUG] [Thread-198916] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:56:14.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:56:14.919 [DEBUG] [Thread-198919] [transport.py] [_log()] starting thread (client mode): 0xb0fe9360
2026-04-13T00:56:14.920 [DEBUG] [Thread-198919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:56:14.933 [DEBUG] [Thread-198919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:56:14.933 [INFO] [Thread-198919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:56:14.941 [DEBUG] [Thread-198919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:56:14.941 [DEBUG] [Thread-198919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] client lang: <none>
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] server lang: <none>
2026-04-13T00:56:14.942 [DEBUG] [Thread-198919] [transport.py] [_log()] kex follows: False
2026-04-13T00:56:14.943 [DEBUG] [Thread-198919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:56:14.943 [DEBUG] [Thread-198919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:56:14.943 [DEBUG] [Thread-198919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:56:14.943 [DEBUG] [Thread-198919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:56:14.943 [DEBUG] [Thread-198919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:56:14.943 [DEBUG] [Thread-198919] [transport.py] [_log()] Compression: none
2026-04-13T00:56:14.943 [DEBUG] [Thread-198919] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:56:14.998 [DEBUG] [Thread-198919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:56:14.999 [DEBUG] [Thread-198919] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:56:14.999 [DEBUG] [Thread-198919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:56:14.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:56:14.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:56:15.068 [DEBUG] [Thread-198919] [transport.py] [_log()] userauth is OK
2026-04-13T00:56:15.068 [DEBUG] [Thread-198919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:56:15.069 [DEBUG] [Thread-198919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:56:15.069 [DEBUG] [Thread-198919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:56:15.069 [DEBUG] [Thread-198919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:56:15.088 [INFO] [Thread-198919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:56:15.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:56:15.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:56:15.901 [DEBUG] [Thread-198919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:56:15.901 [DEBUG] [Thread-198919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:56:15.949 [DEBUG] [Thread-198919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:56:15.949 [DEBUG] [Thread-198919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:56:15.958 [DEBUG] [Thread-198919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:56:15.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:56:15.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:56:15.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:56:15.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:56:15.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:56:15.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:56:15.995 [DEBUG] [Thread-198919] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:56:16.682 [DEBUG] [Thread-198921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:26.624 [DEBUG] [Thread-198922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:31.733 [DEBUG] [Thread-198923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:45.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:56:45.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:56:46.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:56:46.766 [DEBUG] [Thread-198924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:56:47.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 56, 24), 0.83136, 94.6284, 0.0, 4.73004, 7.02462, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:56:47.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:56:24
2026-04-13T00:56:47.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:56:47.779 [DEBUG] [Thread-198925] [transport.py] [_log()] starting thread (client mode): 0xa7959900
2026-04-13T00:56:47.779 [DEBUG] [Thread-198925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:56:47.798 [DEBUG] [Thread-198925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:56:47.798 [INFO] [Thread-198925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:56:47.801 [DEBUG] [Thread-198925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:56:47.801 [DEBUG] [Thread-198925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:56:47.801 [DEBUG] [Thread-198925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] client lang: <none>
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] server lang: <none>
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] kex follows: False
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] Compression: none
2026-04-13T00:56:47.802 [DEBUG] [Thread-198925] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:56:47.811 [DEBUG] [Thread-198925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:56:47.811 [DEBUG] [Thread-198925] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:56:47.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:56:47.812 [DEBUG] [Thread-198925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:56:47.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:56:47.813 [DEBUG] [Thread-198925] [transport.py] [_log()] userauth is OK
2026-04-13T00:56:47.813 [DEBUG] [Thread-198925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:56:47.813 [DEBUG] [Thread-198925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:56:47.813 [DEBUG] [Thread-198925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:56:47.813 [DEBUG] [Thread-198925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:56:47.830 [INFO] [Thread-198925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:56:47.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:56:48.582 [DEBUG] [Thread-198925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:56:48.582 [DEBUG] [Thread-198925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:56:48.582 [DEBUG] [Thread-198925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:56:48.623 [DEBUG] [Thread-198925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:56:48.623 [DEBUG] [Thread-198925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:56:48.627 [DEBUG] [Thread-198925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:56:48.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:56:48.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:56:48.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:56:48.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:56:48.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:56:48.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:56:48.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:56:48.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:56:48.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:56:48.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.955656 -999.00  +10.80   2.94     92   +9.60 1 2 1 3 1     0    0 1.18 -7.23 ..... 2.9 2.9 190.4 3.5 11.5 -22.4 11.3 -21.3 11.1 -19.2 11.3 -21.2
2026-04-13T00:56:48.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:56:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:56:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.955656
2026-04-13T00:56:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:56:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:56:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:56:48.655 [DEBUG] [Thread-198925] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:56:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:56:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:56:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:56:24', tmtdew=0.83136, humidity=94.6284, cloud=0.0, wind=4.73004, temperature=7.02462, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:56:08.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.5642500000000004, 0.40449999999999875, nan, nan, nan, nan, nan, nan, 0.13625000000000043, 2.1999999999999993, nan, nan, nan, nan, nan, 1.6155, 2.347999999999999, 1.9702499999999992, nan, 2.2967499999999985, nan, nan, 1.2064999999999992, 0.125, 0.019249999999999545, 0.006000000000000227, 0.057000000000000384, 0.2640000000000011, 0.9675000000000011, 2.2430000000000003, 0.8922499999999989], zp_timestamp='2026-04-12T22:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:56:48.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:56:48.746 [DEBUG] [Thread-198928] [transport.py] [_log()] starting thread (client mode): 0xa795aad0
2026-04-13T00:56:48.746 [DEBUG] [Thread-198928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:56:48.761 [DEBUG] [Thread-198928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:56:48.761 [INFO] [Thread-198928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] client lang: <none>
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] server lang: <none>
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] kex follows: False
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:56:48.769 [DEBUG] [Thread-198928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:56:48.770 [DEBUG] [Thread-198928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:56:48.770 [DEBUG] [Thread-198928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:56:48.770 [DEBUG] [Thread-198928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:56:48.770 [DEBUG] [Thread-198928] [transport.py] [_log()] Compression: none
2026-04-13T00:56:48.770 [DEBUG] [Thread-198928] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:56:48.828 [DEBUG] [Thread-198928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:56:48.829 [DEBUG] [Thread-198928] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:56:48.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:56:48.830 [DEBUG] [Thread-198928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:56:48.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:56:48.886 [DEBUG] [Thread-198928] [transport.py] [_log()] userauth is OK
2026-04-13T00:56:48.886 [DEBUG] [Thread-198928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:56:48.886 [DEBUG] [Thread-198928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:56:48.886 [DEBUG] [Thread-198928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:56:48.887 [DEBUG] [Thread-198928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:56:48.905 [INFO] [Thread-198928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:56:48.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:56:48.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:56:49.730 [DEBUG] [Thread-198928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:56:49.730 [DEBUG] [Thread-198928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:56:49.779 [DEBUG] [Thread-198928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:56:49.779 [DEBUG] [Thread-198928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:56:49.788 [DEBUG] [Thread-198928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:56:49.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:56:49.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:56:49.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:56:49.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:56:49.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:56:49.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:56:49.823 [DEBUG] [Thread-198928] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:57:01.802 [DEBUG] [Thread-198930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:57:03.714 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:57:03.715 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:57:16.853 [DEBUG] [Thread-198931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:57:19.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:57:19.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:57:19.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:57:21.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 56, 59), 0.825967, 94.6615, 0.0, 4.78296, 7.01353, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:57:21.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:56:59
2026-04-13T00:57:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:57:21.633 [DEBUG] [Thread-198932] [transport.py] [_log()] starting thread (client mode): 0xae561ae0
2026-04-13T00:57:21.634 [DEBUG] [Thread-198932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:57:21.654 [DEBUG] [Thread-198932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:57:21.654 [INFO] [Thread-198932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:57:21.657 [DEBUG] [Thread-198932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:57:21.657 [DEBUG] [Thread-198932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:57:21.657 [DEBUG] [Thread-198932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:57:21.657 [DEBUG] [Thread-198932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:21.657 [DEBUG] [Thread-198932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] client lang: <none>
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] server lang: <none>
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] kex follows: False
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:57:21.658 [DEBUG] [Thread-198932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:57:21.659 [DEBUG] [Thread-198932] [transport.py] [_log()] Compression: none
2026-04-13T00:57:21.659 [DEBUG] [Thread-198932] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:57:21.676 [DEBUG] [Thread-198932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:57:21.677 [DEBUG] [Thread-198932] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:57:21.678 [DEBUG] [Thread-198932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:57:21.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:57:21.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:57:21.680 [DEBUG] [Thread-198932] [transport.py] [_log()] userauth is OK
2026-04-13T00:57:21.680 [DEBUG] [Thread-198932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:57:21.680 [DEBUG] [Thread-198932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:57:21.681 [DEBUG] [Thread-198932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:57:21.681 [DEBUG] [Thread-198932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:57:21.704 [INFO] [Thread-198932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:57:21.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:57:22.491 [DEBUG] [Thread-198932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:57:22.491 [DEBUG] [Thread-198932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:57:22.491 [DEBUG] [Thread-198932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:57:22.532 [DEBUG] [Thread-198932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:57:22.532 [DEBUG] [Thread-198932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:57:22.535 [DEBUG] [Thread-198932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:57:22.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:57:22.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:57:22.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:57:22.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:57:22.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:57:22.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:57:22.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:57:22.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:57:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:57:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.956003 -999.00  +10.80   3.31     92   +9.60 1 2 1 3 1     0    0 1.15 -7.99 ..... 3.3 3.3 195.6 3.6 11.5 -22.2 11.3 -21.4 11.1 -19.2 11.3 -21.2
2026-04-13T00:57:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:57:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:57:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.956003
2026-04-13T00:57:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:57:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:57:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:57:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:57:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:57:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:56:59', tmtdew=0.825967, humidity=94.6615, cloud=0.0, wind=4.78296, temperature=7.01353, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:56:38.659', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:57:22.563 [DEBUG] [Thread-198932] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:57:22.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:57:22.669 [DEBUG] [Thread-198935] [transport.py] [_log()] starting thread (client mode): 0xb39c60e0
2026-04-13T00:57:22.669 [DEBUG] [Thread-198935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:57:22.683 [DEBUG] [Thread-198935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:57:22.684 [INFO] [Thread-198935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:57:22.691 [DEBUG] [Thread-198935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:57:22.691 [DEBUG] [Thread-198935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] client lang: <none>
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] server lang: <none>
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] kex follows: False
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] Compression: none
2026-04-13T00:57:22.692 [DEBUG] [Thread-198935] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:57:22.756 [DEBUG] [Thread-198935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:57:22.757 [DEBUG] [Thread-198935] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:57:22.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:57:22.758 [DEBUG] [Thread-198935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:57:22.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:57:22.819 [DEBUG] [Thread-198935] [transport.py] [_log()] userauth is OK
2026-04-13T00:57:22.820 [DEBUG] [Thread-198935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:57:22.820 [DEBUG] [Thread-198935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:57:22.820 [DEBUG] [Thread-198935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:57:22.820 [DEBUG] [Thread-198935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:57:22.842 [INFO] [Thread-198935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:57:22.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:57:22.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:57:23.638 [DEBUG] [Thread-198935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:57:23.638 [DEBUG] [Thread-198935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:57:23.686 [DEBUG] [Thread-198935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:57:23.686 [DEBUG] [Thread-198935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:57:23.695 [DEBUG] [Thread-198935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:57:23.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:57:23.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:57:23.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:57:23.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:57:23.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:57:23.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:57:23.732 [DEBUG] [Thread-198935] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:57:26.707 [DEBUG] [Thread-198937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:57:31.889 [DEBUG] [Thread-198938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:57:46.946 [DEBUG] [Thread-198939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:57:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:57:53.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:57:53.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:57:55.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 57, 35), 0.518595, 96.6249, 0.0, 5.61312, 5.2364, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:57:55.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:57:35
2026-04-13T00:57:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:57:55.567 [DEBUG] [Thread-198940] [transport.py] [_log()] starting thread (client mode): 0xa7958b80
2026-04-13T00:57:55.567 [DEBUG] [Thread-198940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:57:55.587 [DEBUG] [Thread-198940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:57:55.587 [INFO] [Thread-198940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:57:55.589 [DEBUG] [Thread-198940] [transport.py] [_log()] client lang: <none>
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] server lang: <none>
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] kex follows: False
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] Compression: none
2026-04-13T00:57:55.590 [DEBUG] [Thread-198940] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:57:55.610 [DEBUG] [Thread-198940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:57:55.611 [DEBUG] [Thread-198940] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:57:55.612 [DEBUG] [Thread-198940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:57:55.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:57:55.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:57:55.614 [DEBUG] [Thread-198940] [transport.py] [_log()] userauth is OK
2026-04-13T00:57:55.614 [DEBUG] [Thread-198940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:57:55.614 [DEBUG] [Thread-198940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:57:55.614 [DEBUG] [Thread-198940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:57:55.615 [DEBUG] [Thread-198940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:57:55.638 [INFO] [Thread-198940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:57:55.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:57:56.433 [DEBUG] [Thread-198940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:57:56.433 [DEBUG] [Thread-198940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:57:56.434 [DEBUG] [Thread-198940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:57:56.474 [DEBUG] [Thread-198940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:57:56.474 [DEBUG] [Thread-198940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:57:56.477 [DEBUG] [Thread-198940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:57:56.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:57:56.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:57:56.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:57:56.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:57:56.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:57:56.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:57:56.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:57:56.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:57:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:57:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.956350 -999.00  +10.80   3.34     92   +9.60 1 2 1 3 1     0    0 1.10 -9.31 ..... 3.3 3.3 190.6 4.3 11.4 -22.2 11.3 -21.4 11.1 -19.1 11.3 -21.1
2026-04-13T00:57:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:57:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:57:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.956350
2026-04-13T00:57:56.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:57:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:57:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:57:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:57:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:57:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:57:35', tmtdew=0.518595, humidity=96.6249, cloud=0.0, wind=5.61312, temperature=5.2364, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:57:08.640', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:57:56.502 [DEBUG] [Thread-198940] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:57:56.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:57:56.594 [DEBUG] [Thread-198943] [transport.py] [_log()] starting thread (client mode): 0xa795aad0
2026-04-13T00:57:56.594 [DEBUG] [Thread-198943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:57:56.609 [DEBUG] [Thread-198943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:57:56.609 [INFO] [Thread-198943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:57:56.617 [DEBUG] [Thread-198943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:57:56.617 [DEBUG] [Thread-198943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:57:56.617 [DEBUG] [Thread-198943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:57:56.617 [DEBUG] [Thread-198943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] client lang: <none>
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] server lang: <none>
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] kex follows: False
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:57:56.618 [DEBUG] [Thread-198943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:57:56.619 [DEBUG] [Thread-198943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:57:56.619 [DEBUG] [Thread-198943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:57:56.619 [DEBUG] [Thread-198943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:57:56.619 [DEBUG] [Thread-198943] [transport.py] [_log()] Compression: none
2026-04-13T00:57:56.619 [DEBUG] [Thread-198943] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:57:56.678 [DEBUG] [Thread-198943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:57:56.679 [DEBUG] [Thread-198943] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:57:56.680 [DEBUG] [Thread-198943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:57:56.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:57:56.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:57:56.738 [DEBUG] [Thread-198943] [transport.py] [_log()] userauth is OK
2026-04-13T00:57:56.738 [DEBUG] [Thread-198943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:57:56.739 [DEBUG] [Thread-198943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:57:56.739 [DEBUG] [Thread-198943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:57:56.739 [DEBUG] [Thread-198943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:57:56.758 [INFO] [Thread-198943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:57:56.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:57:56.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:57:57.580 [DEBUG] [Thread-198943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:57:57.580 [DEBUG] [Thread-198943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:57:57.629 [DEBUG] [Thread-198943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:57:57.629 [DEBUG] [Thread-198943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:57:57.638 [DEBUG] [Thread-198943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:57:57.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:57:57.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:57:57.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:57:57.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:57:57.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:57:57.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:57:57.675 [DEBUG] [Thread-198943] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:58:01.990 [DEBUG] [Thread-198945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:58:03.921 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:58:03.922 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:58:17.046 [DEBUG] [Thread-198946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:58:26.783 [DEBUG] [Thread-198947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:58:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:58:27.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:58:27.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:58:29.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 58, 11), 0.77525, 94.7723, 0.0, 5.22396, 7.0579, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:58:29.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:58:11
2026-04-13T00:58:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:58:29.540 [DEBUG] [Thread-198948] [transport.py] [_log()] starting thread (client mode): 0xa7959450
2026-04-13T00:58:29.540 [DEBUG] [Thread-198948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:58:29.561 [DEBUG] [Thread-198948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:58:29.561 [INFO] [Thread-198948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:58:29.564 [DEBUG] [Thread-198948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] client lang: <none>
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] server lang: <none>
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] kex follows: False
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] Compression: none
2026-04-13T00:58:29.565 [DEBUG] [Thread-198948] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:58:29.583 [DEBUG] [Thread-198948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:58:29.584 [DEBUG] [Thread-198948] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:58:29.585 [DEBUG] [Thread-198948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:58:29.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:58:29.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:58:29.588 [DEBUG] [Thread-198948] [transport.py] [_log()] userauth is OK
2026-04-13T00:58:29.588 [DEBUG] [Thread-198948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:58:29.588 [DEBUG] [Thread-198948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:58:29.588 [DEBUG] [Thread-198948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:58:29.588 [DEBUG] [Thread-198948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:58:29.608 [INFO] [Thread-198948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:58:29.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:58:30.387 [DEBUG] [Thread-198948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:58:30.388 [DEBUG] [Thread-198948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:58:30.388 [DEBUG] [Thread-198948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:58:30.428 [DEBUG] [Thread-198948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:58:30.428 [DEBUG] [Thread-198948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:58:30.431 [DEBUG] [Thread-198948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:58:30.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:58:30.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:58:30.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:58:30.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:58:30.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:58:30.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:58:30.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:58:30.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:58:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:58:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.957044 -999.00  +10.80   3.70     91   +9.60 1 2 1 3 1     0    0 1.03 -12.23 ..... 3.7 3.7 202.0 4.5 11.4 -22.2 11.3 -21.1 11.1 -19.2 11.3 -21.2
2026-04-13T00:58:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:58:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:58:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.957044
2026-04-13T00:58:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:58:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:58:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:58:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:58:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:58:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:58:11', tmtdew=0.77525, humidity=94.7723, cloud=0.0, wind=5.22396, temperature=7.0579, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:58:08.602', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:58:30.462 [DEBUG] [Thread-198948] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:58:30.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:58:30.555 [DEBUG] [Thread-198951] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc10
2026-04-13T00:58:30.555 [DEBUG] [Thread-198951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:58:30.570 [DEBUG] [Thread-198951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:58:30.571 [INFO] [Thread-198951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:58:30.578 [DEBUG] [Thread-198951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:58:30.579 [DEBUG] [Thread-198951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:58:30.579 [DEBUG] [Thread-198951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:58:30.579 [DEBUG] [Thread-198951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:58:30.579 [DEBUG] [Thread-198951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:58:30.579 [DEBUG] [Thread-198951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:58:30.579 [DEBUG] [Thread-198951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:58:30.579 [DEBUG] [Thread-198951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] client lang: <none>
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] server lang: <none>
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] kex follows: False
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:58:30.580 [DEBUG] [Thread-198951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:58:30.581 [DEBUG] [Thread-198951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:58:30.581 [DEBUG] [Thread-198951] [transport.py] [_log()] Compression: none
2026-04-13T00:58:30.581 [DEBUG] [Thread-198951] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:58:30.639 [DEBUG] [Thread-198951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:58:30.639 [DEBUG] [Thread-198951] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:58:30.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:58:30.641 [DEBUG] [Thread-198951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:58:30.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:58:30.698 [DEBUG] [Thread-198951] [transport.py] [_log()] userauth is OK
2026-04-13T00:58:30.698 [DEBUG] [Thread-198951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:58:30.698 [DEBUG] [Thread-198951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:58:30.698 [DEBUG] [Thread-198951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:58:30.698 [DEBUG] [Thread-198951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:58:30.724 [INFO] [Thread-198951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:58:30.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:58:30.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:58:31.523 [DEBUG] [Thread-198951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:58:31.523 [DEBUG] [Thread-198951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:58:31.572 [DEBUG] [Thread-198951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:58:31.573 [DEBUG] [Thread-198951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:58:31.582 [DEBUG] [Thread-198951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:58:31.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:58:31.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:58:31.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:58:31.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:58:31.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:58:31.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:58:31.619 [DEBUG] [Thread-198951] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:58:32.084 [DEBUG] [Thread-198953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:58:47.135 [DEBUG] [Thread-198954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:59:01.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:59:01.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:59:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:59:02.168 [DEBUG] [Thread-198955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:59:02.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 58, 46), 0.515645, 96.6418, 0.0, 5.78952, 5.20344, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:59:02.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:58:46
2026-04-13T00:59:03.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:59:03.472 [DEBUG] [Thread-198956] [transport.py] [_log()] starting thread (client mode): 0xb39c5630
2026-04-13T00:59:03.472 [DEBUG] [Thread-198956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:59:03.482 [DEBUG] [Thread-198956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:59:03.482 [INFO] [Thread-198956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] client lang: <none>
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] server lang: <none>
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] kex follows: False
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] Compression: none
2026-04-13T00:59:03.484 [DEBUG] [Thread-198956] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:59:03.495 [DEBUG] [Thread-198956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:59:03.495 [DEBUG] [Thread-198956] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:59:03.495 [DEBUG] [Thread-198956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:59:03.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:59:03.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:59:03.496 [DEBUG] [Thread-198956] [transport.py] [_log()] userauth is OK
2026-04-13T00:59:03.496 [DEBUG] [Thread-198956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:59:03.496 [DEBUG] [Thread-198956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:59:03.496 [DEBUG] [Thread-198956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:59:03.496 [DEBUG] [Thread-198956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:59:03.510 [INFO] [Thread-198956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:59:03.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:59:04.125 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:59:04.127 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:59:04.312 [DEBUG] [Thread-198956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:59:04.312 [DEBUG] [Thread-198956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:59:04.313 [DEBUG] [Thread-198956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:59:04.353 [DEBUG] [Thread-198956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:59:04.353 [DEBUG] [Thread-198956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:59:04.357 [DEBUG] [Thread-198956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:59:04.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:59:04.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:59:04.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:59:04.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:59:04.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:59:04.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:59:04.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:59:04.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:59:04.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:59:04.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.957392 -999.00  +10.90   3.46     91   +9.60 1 2 1 3 1     0    0 1.01 -12.67 ..... 3.5 3.5 193.6 4.1 11.5 -22.1 11.3 -21.1 11.1 -19.1 11.3 -21.1
2026-04-13T00:59:04.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:59:04.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:59:04.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.957392
2026-04-13T00:59:04.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:59:04.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:59:04.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:59:04.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:59:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:59:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:58:46', tmtdew=0.515645, humidity=96.6418, cloud=0.0, wind=5.78952, temperature=5.20344, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:58:38.669', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:59:04.384 [DEBUG] [Thread-198956] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:59:04.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:59:04.477 [DEBUG] [Thread-198959] [transport.py] [_log()] starting thread (client mode): 0xae562290
2026-04-13T00:59:04.477 [DEBUG] [Thread-198959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:59:04.492 [DEBUG] [Thread-198959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:59:04.492 [INFO] [Thread-198959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:59:04.500 [DEBUG] [Thread-198959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:59:04.500 [DEBUG] [Thread-198959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:59:04.500 [DEBUG] [Thread-198959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:59:04.500 [DEBUG] [Thread-198959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:04.500 [DEBUG] [Thread-198959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] client lang: <none>
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] server lang: <none>
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] kex follows: False
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:59:04.501 [DEBUG] [Thread-198959] [transport.py] [_log()] Compression: none
2026-04-13T00:59:04.502 [DEBUG] [Thread-198959] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:59:04.558 [DEBUG] [Thread-198959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:59:04.559 [DEBUG] [Thread-198959] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:59:04.559 [DEBUG] [Thread-198959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:59:04.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:59:04.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:59:04.618 [DEBUG] [Thread-198959] [transport.py] [_log()] userauth is OK
2026-04-13T00:59:04.618 [DEBUG] [Thread-198959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:59:04.618 [DEBUG] [Thread-198959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:59:04.619 [DEBUG] [Thread-198959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:59:04.619 [DEBUG] [Thread-198959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:59:04.642 [INFO] [Thread-198959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:59:04.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:59:04.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:59:05.468 [DEBUG] [Thread-198959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:59:05.469 [DEBUG] [Thread-198959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:59:05.517 [DEBUG] [Thread-198959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:59:05.517 [DEBUG] [Thread-198959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:59:05.526 [DEBUG] [Thread-198959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:59:05.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:59:05.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:59:05.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:59:05.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:59:05.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:59:05.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:59:05.563 [DEBUG] [Thread-198959] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:59:17.208 [DEBUG] [Thread-198961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:59:26.854 [DEBUG] [Thread-198962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:59:32.272 [DEBUG] [Thread-198963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T00:59:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T00:59:35.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T00:59:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T00:59:36.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 59, 21), 0.7751, 94.7722, 0.0, 4.94172, 7.03574, 2, 2, 0, 2, 0, 0),)
2026-04-13T00:59:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:59:21
2026-04-13T00:59:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T00:59:37.368 [DEBUG] [Thread-198964] [transport.py] [_log()] starting thread (client mode): 0xae5196f0
2026-04-13T00:59:37.368 [DEBUG] [Thread-198964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:59:37.390 [DEBUG] [Thread-198964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T00:59:37.391 [INFO] [Thread-198964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] client lang: <none>
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] server lang: <none>
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] kex follows: False
2026-04-13T00:59:37.394 [DEBUG] [Thread-198964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:59:37.395 [DEBUG] [Thread-198964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:59:37.395 [DEBUG] [Thread-198964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:59:37.395 [DEBUG] [Thread-198964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:59:37.395 [DEBUG] [Thread-198964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:59:37.395 [DEBUG] [Thread-198964] [transport.py] [_log()] Compression: none
2026-04-13T00:59:37.395 [DEBUG] [Thread-198964] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:59:37.415 [DEBUG] [Thread-198964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:59:37.415 [DEBUG] [Thread-198964] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:59:37.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T00:59:37.416 [DEBUG] [Thread-198964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T00:59:37.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:59:37.419 [DEBUG] [Thread-198964] [transport.py] [_log()] userauth is OK
2026-04-13T00:59:37.419 [DEBUG] [Thread-198964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:59:37.419 [DEBUG] [Thread-198964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:59:37.419 [DEBUG] [Thread-198964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T00:59:37.419 [DEBUG] [Thread-198964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:59:37.444 [INFO] [Thread-198964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:59:37.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:59:38.081 [DEBUG] [Thread-198964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:59:38.081 [DEBUG] [Thread-198964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:59:38.081 [DEBUG] [Thread-198964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T00:59:38.122 [DEBUG] [Thread-198964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:59:38.122 [DEBUG] [Thread-198964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:59:38.125 [DEBUG] [Thread-198964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:59:38.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:59:38.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T00:59:38.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T00:59:38.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T00:59:38.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:59:38.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T00:59:38.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:59:38.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.957739 -999.00  +10.90   3.53     91   +9.60 1 2 1 3 1     0    0 1.00 -12.49 ..... 3.5 3.5 196.8 4.3 11.5 -22.2 11.3 -21.1 11.1 -19.0 11.3 -21.1
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.957739
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T00:59:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T00:59:38.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T00:59:38.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T00:59:38.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:59:21', tmtdew=0.7751, humidity=94.7722, cloud=0.0, wind=4.94172, temperature=7.03574, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:59:08.650', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T00:59:38.146 [DEBUG] [Thread-198964] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:59:38.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T00:59:38.243 [DEBUG] [Thread-198967] [transport.py] [_log()] starting thread (client mode): 0xa7958d90
2026-04-13T00:59:38.243 [DEBUG] [Thread-198967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T00:59:38.260 [DEBUG] [Thread-198967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T00:59:38.260 [INFO] [Thread-198967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] client lang: <none>
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] server lang: <none>
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] kex follows: False
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T00:59:38.268 [DEBUG] [Thread-198967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T00:59:38.269 [DEBUG] [Thread-198967] [transport.py] [_log()] Compression: none
2026-04-13T00:59:38.269 [DEBUG] [Thread-198967] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T00:59:38.324 [DEBUG] [Thread-198967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T00:59:38.324 [DEBUG] [Thread-198967] [transport.py] [_log()] Switch to new keys ...
2026-04-13T00:59:38.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T00:59:38.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T00:59:38.325 [DEBUG] [Thread-198967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T00:59:38.382 [DEBUG] [Thread-198967] [transport.py] [_log()] userauth is OK
2026-04-13T00:59:38.382 [DEBUG] [Thread-198967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T00:59:38.382 [DEBUG] [Thread-198967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T00:59:38.382 [DEBUG] [Thread-198967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T00:59:38.382 [DEBUG] [Thread-198967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T00:59:38.397 [INFO] [Thread-198967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T00:59:38.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T00:59:38.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T00:59:39.228 [DEBUG] [Thread-198967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T00:59:39.228 [DEBUG] [Thread-198967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T00:59:39.276 [DEBUG] [Thread-198967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T00:59:39.276 [DEBUG] [Thread-198967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T00:59:39.285 [DEBUG] [Thread-198967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T00:59:39.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T00:59:39.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T00:59:39.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T00:59:39.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T00:59:39.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T00:59:39.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T00:59:39.321 [DEBUG] [Thread-198967] [transport.py] [_log()] EOF in transport thread
2026-04-13T00:59:47.313 [DEBUG] [Thread-198969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:02.378 [DEBUG] [Thread-198970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:04.333 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:04.334 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:09.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:00:09.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:00:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:00:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 0, 59, 56), 0.796243, 94.8496, 0.0, 5.10048, 7.09118, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:00:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 00:59:56
2026-04-13T01:00:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:00:11.172 [DEBUG] [Thread-198971] [transport.py] [_log()] starting thread (client mode): 0xae5603d0
2026-04-13T01:00:11.172 [DEBUG] [Thread-198971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:00:11.191 [DEBUG] [Thread-198971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:00:11.191 [INFO] [Thread-198971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:00:11.192 [DEBUG] [Thread-198971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:00:11.192 [DEBUG] [Thread-198971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:00:11.192 [DEBUG] [Thread-198971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] client lang: <none>
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] server lang: <none>
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] kex follows: False
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] Compression: none
2026-04-13T01:00:11.193 [DEBUG] [Thread-198971] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:00:11.202 [DEBUG] [Thread-198971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:00:11.203 [DEBUG] [Thread-198971] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:00:11.203 [DEBUG] [Thread-198971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:00:11.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:00:11.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:00:11.205 [DEBUG] [Thread-198971] [transport.py] [_log()] userauth is OK
2026-04-13T01:00:11.205 [DEBUG] [Thread-198971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:00:11.205 [DEBUG] [Thread-198971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:00:11.205 [DEBUG] [Thread-198971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:00:11.205 [DEBUG] [Thread-198971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:00:11.225 [INFO] [Thread-198971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:00:11.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:00:12.470 [DEBUG] [Thread-198971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:00:12.471 [DEBUG] [Thread-198971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:00:12.471 [DEBUG] [Thread-198971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:00:12.512 [DEBUG] [Thread-198971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:00:12.512 [DEBUG] [Thread-198971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:00:12.515 [DEBUG] [Thread-198971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:00:12.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:00:12.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:00:12.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:00:12.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:00:12.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:00:12.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:00:12.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:00:12.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:00:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:00:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.958086 -999.00  +10.90   4.28     91   +9.60 1 2 1 3 1     0    0 0.97 -13.14 ..... 4.3 4.3 209.2 5.2 11.4 -22.1 11.3 -21.1 11.1 -19.1 11.3 -21.0
2026-04-13T01:00:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:00:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:00:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.958086
2026-04-13T01:00:12.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:00:12.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:00:12.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:00:12.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:00:12.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:00:12.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T00:59:56', tmtdew=0.796243, humidity=94.8496, cloud=0.0, wind=5.10048, temperature=7.09118, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T22:59:38.630', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:00:12.553 [DEBUG] [Thread-198971] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:00:12.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:00:12.641 [DEBUG] [Thread-198974] [transport.py] [_log()] starting thread (client mode): 0xb0fcd330
2026-04-13T01:00:12.641 [DEBUG] [Thread-198974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:00:12.656 [DEBUG] [Thread-198974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:00:12.656 [INFO] [Thread-198974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:00:12.663 [DEBUG] [Thread-198974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:00:12.663 [DEBUG] [Thread-198974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:00:12.663 [DEBUG] [Thread-198974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:00:12.663 [DEBUG] [Thread-198974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:12.663 [DEBUG] [Thread-198974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:12.663 [DEBUG] [Thread-198974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] client lang: <none>
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] server lang: <none>
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] kex follows: False
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] Compression: none
2026-04-13T01:00:12.664 [DEBUG] [Thread-198974] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:00:12.723 [DEBUG] [Thread-198974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:00:12.723 [DEBUG] [Thread-198974] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:00:12.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:00:12.724 [DEBUG] [Thread-198974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:00:12.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:00:12.779 [DEBUG] [Thread-198974] [transport.py] [_log()] userauth is OK
2026-04-13T01:00:12.780 [DEBUG] [Thread-198974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:00:12.780 [DEBUG] [Thread-198974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:00:12.780 [DEBUG] [Thread-198974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:00:12.780 [DEBUG] [Thread-198974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:00:12.799 [INFO] [Thread-198974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:00:12.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:00:12.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:00:13.625 [DEBUG] [Thread-198974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:00:13.626 [DEBUG] [Thread-198974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:00:13.673 [DEBUG] [Thread-198974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:00:13.673 [DEBUG] [Thread-198974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:00:13.683 [DEBUG] [Thread-198974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:00:13.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:00:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:00:13.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:00:13.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:00:13.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:00:13.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:00:13.723 [DEBUG] [Thread-198974] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:00:17.414 [DEBUG] [Thread-198976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:26.943 [DEBUG] [Thread-198977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:32.467 [DEBUG] [Thread-198978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:43.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:00:43.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:00:43.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:00:45.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 0, 32), 0.79422, 94.8609, 0.0, 5.2416, 7.05814, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:00:45.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:00:32
2026-04-13T01:00:45.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:00:45.631 [DEBUG] [Thread-198979] [transport.py] [_log()] starting thread (client mode): 0xae51ba30
2026-04-13T01:00:45.632 [DEBUG] [Thread-198979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:00:45.651 [DEBUG] [Thread-198979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:00:45.651 [INFO] [Thread-198979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:00:45.654 [DEBUG] [Thread-198979] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:00:45.654 [DEBUG] [Thread-198979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:00:45.654 [DEBUG] [Thread-198979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:00:45.654 [DEBUG] [Thread-198979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:45.654 [DEBUG] [Thread-198979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:45.654 [DEBUG] [Thread-198979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] client lang: <none>
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] server lang: <none>
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] kex follows: False
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] Compression: none
2026-04-13T01:00:45.655 [DEBUG] [Thread-198979] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:00:45.674 [DEBUG] [Thread-198979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:00:45.674 [DEBUG] [Thread-198979] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:00:45.675 [DEBUG] [Thread-198979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:00:45.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:00:45.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:00:45.677 [DEBUG] [Thread-198979] [transport.py] [_log()] userauth is OK
2026-04-13T01:00:45.677 [DEBUG] [Thread-198979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:00:45.677 [DEBUG] [Thread-198979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:00:45.677 [DEBUG] [Thread-198979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:00:45.677 [DEBUG] [Thread-198979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:00:45.712 [INFO] [Thread-198979] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:00:45.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:00:46.269 [DEBUG] [Thread-198979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:00:46.270 [DEBUG] [Thread-198979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:00:46.270 [DEBUG] [Thread-198979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:00:46.310 [DEBUG] [Thread-198979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:00:46.310 [DEBUG] [Thread-198979] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:00:46.313 [DEBUG] [Thread-198979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:00:46.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:00:46.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:00:46.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:00:46.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:00:46.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:00:46.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:00:46.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:00:46.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:00:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:00:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.958433 -999.00  +10.90   4.33     91   +9.50 1 2 1 3 1     0    0 0.97 -13.37 ..... 4.3 4.3 195.8 4.9 11.4 -22.2 11.4 -21.1 11.1 -19.0 11.3 -21.0
2026-04-13T01:00:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:00:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:00:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.958433
2026-04-13T01:00:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:00:46.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:00:46.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:00:46.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:00:46.334 [DEBUG] [Thread-198979] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:00:46.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:00:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:00:32', tmtdew=0.79422, humidity=94.8609, cloud=0.0, wind=5.2416, temperature=7.05814, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:00:08.611', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:00:46.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:00:46.429 [DEBUG] [Thread-198982] [transport.py] [_log()] starting thread (client mode): 0xb39c6950
2026-04-13T01:00:46.429 [DEBUG] [Thread-198982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:00:46.444 [DEBUG] [Thread-198982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:00:46.444 [INFO] [Thread-198982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:00:46.451 [DEBUG] [Thread-198982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:00:46.452 [DEBUG] [Thread-198982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:00:46.453 [DEBUG] [Thread-198982] [transport.py] [_log()] client lang: <none>
2026-04-13T01:00:46.453 [DEBUG] [Thread-198982] [transport.py] [_log()] server lang: <none>
2026-04-13T01:00:46.453 [DEBUG] [Thread-198982] [transport.py] [_log()] kex follows: False
2026-04-13T01:00:46.453 [DEBUG] [Thread-198982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:00:46.453 [DEBUG] [Thread-198982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:00:46.453 [DEBUG] [Thread-198982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:00:46.453 [DEBUG] [Thread-198982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:00:46.454 [DEBUG] [Thread-198982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:00:46.454 [DEBUG] [Thread-198982] [transport.py] [_log()] Compression: none
2026-04-13T01:00:46.454 [DEBUG] [Thread-198982] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:00:46.512 [DEBUG] [Thread-198982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:00:46.513 [DEBUG] [Thread-198982] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:00:46.513 [DEBUG] [Thread-198982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:00:46.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:00:46.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:00:46.571 [DEBUG] [Thread-198982] [transport.py] [_log()] userauth is OK
2026-04-13T01:00:46.572 [DEBUG] [Thread-198982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:00:46.572 [DEBUG] [Thread-198982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:00:46.572 [DEBUG] [Thread-198982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:00:46.572 [DEBUG] [Thread-198982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:00:46.595 [INFO] [Thread-198982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:00:46.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:00:46.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:00:47.426 [DEBUG] [Thread-198982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:00:47.427 [DEBUG] [Thread-198982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:00:47.476 [DEBUG] [Thread-198982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:00:47.476 [DEBUG] [Thread-198982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:00:47.485 [DEBUG] [Thread-198982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:00:47.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:00: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')
2026-04-13T01:00:47.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:00:47.506 [DEBUG] [Thread-198984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:00:47.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:00:47.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:00:47.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:00:47.522 [DEBUG] [Thread-198982] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:01:02.558 [DEBUG] [Thread-198985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:01:04.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:01:04.545 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:01:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:01:17.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:01:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:01:17.595 [DEBUG] [Thread-198986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:01:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 1, 7), 0.789167, 94.894, 0.0, 4.67712, 7.09131, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:01:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:01:07
2026-04-13T01:01:19.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:01:19.345 [DEBUG] [Thread-198987] [transport.py] [_log()] starting thread (client mode): 0xa79595d0
2026-04-13T01:01:19.345 [DEBUG] [Thread-198987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:01:19.365 [DEBUG] [Thread-198987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:01:19.365 [INFO] [Thread-198987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:01:19.368 [DEBUG] [Thread-198987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:01:19.368 [DEBUG] [Thread-198987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:01:19.368 [DEBUG] [Thread-198987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:01:19.368 [DEBUG] [Thread-198987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] client lang: <none>
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] server lang: <none>
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] kex follows: False
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] Compression: none
2026-04-13T01:01:19.369 [DEBUG] [Thread-198987] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:01:19.387 [DEBUG] [Thread-198987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:01:19.388 [DEBUG] [Thread-198987] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:01:19.388 [DEBUG] [Thread-198987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:01:19.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:01:19.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:01:19.390 [DEBUG] [Thread-198987] [transport.py] [_log()] userauth is OK
2026-04-13T01:01:19.390 [DEBUG] [Thread-198987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:01:19.390 [DEBUG] [Thread-198987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:01:19.390 [DEBUG] [Thread-198987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:01:19.391 [DEBUG] [Thread-198987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:01:19.415 [INFO] [Thread-198987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:01:19.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:01:20.039 [DEBUG] [Thread-198987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:01:20.039 [DEBUG] [Thread-198987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:01:20.040 [DEBUG] [Thread-198987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:01:20.080 [DEBUG] [Thread-198987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:01:20.081 [DEBUG] [Thread-198987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:01:20.084 [DEBUG] [Thread-198987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:01:20.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:01:20.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:01:20.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:01:20.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:01:20.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:01:20.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:01:20.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:01:20.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.958781 -999.00  +10.90   3.51     91   +9.50 1 2 1 3 1     0    0 1.04 -11.94 Z.... 3.5 3.5 185.8 4.7 11.5 -22.2 11.3 -21.3 11.1 -19.2 11.3 -21.0
2026-04-13T01:01:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:01:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:01:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.958781
2026-04-13T01:01:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:01:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:01:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:01:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:01:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:01:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:01:07', tmtdew=0.789167, humidity=94.894, cloud=0.0, wind=4.67712, temperature=7.09131, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:00:38.678', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:01:20.113 [DEBUG] [Thread-198987] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:01:20.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:01:20.207 [DEBUG] [Thread-198990] [transport.py] [_log()] starting thread (client mode): 0xb39c7880
2026-04-13T01:01:20.207 [DEBUG] [Thread-198990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:01:20.221 [DEBUG] [Thread-198990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:01:20.221 [INFO] [Thread-198990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:01:20.229 [DEBUG] [Thread-198990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:01:20.229 [DEBUG] [Thread-198990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:01:20.229 [DEBUG] [Thread-198990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] client lang: <none>
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] server lang: <none>
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] kex follows: False
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] Compression: none
2026-04-13T01:01:20.230 [DEBUG] [Thread-198990] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:01:20.287 [DEBUG] [Thread-198990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:01:20.288 [DEBUG] [Thread-198990] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:01:20.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:01:20.289 [DEBUG] [Thread-198990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:01:20.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:01:20.343 [DEBUG] [Thread-198990] [transport.py] [_log()] userauth is OK
2026-04-13T01:01:20.343 [DEBUG] [Thread-198990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:01:20.343 [DEBUG] [Thread-198990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:01:20.343 [DEBUG] [Thread-198990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:01:20.343 [DEBUG] [Thread-198990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:01:20.361 [INFO] [Thread-198990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:01:20.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:01:20.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:01:21.168 [DEBUG] [Thread-198990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:01:21.169 [DEBUG] [Thread-198990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:01:21.217 [DEBUG] [Thread-198990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:01:21.217 [DEBUG] [Thread-198990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:01:21.227 [DEBUG] [Thread-198990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:01:21.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:01:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:01:21.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:01:21.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:01:21.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:01:21.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:01:21.264 [DEBUG] [Thread-198990] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:01:27.019 [DEBUG] [Thread-198992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:01:32.632 [DEBUG] [Thread-198993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:01:47.672 [DEBUG] [Thread-198994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:01:51.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:01:51.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:01:51.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:01:52.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 1, 43), 0.488765, 96.8081, 0.0, 5.89536, 5.15394, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:01:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:01:43
2026-04-13T01:01:52.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:01:53.089 [DEBUG] [Thread-198995] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa60
2026-04-13T01:01:53.089 [DEBUG] [Thread-198995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:01:53.109 [DEBUG] [Thread-198995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:01:53.109 [INFO] [Thread-198995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] client lang: <none>
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] server lang: <none>
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] kex follows: False
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] Compression: none
2026-04-13T01:01:53.112 [DEBUG] [Thread-198995] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:01:53.129 [DEBUG] [Thread-198995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:01:53.130 [DEBUG] [Thread-198995] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:01:53.130 [DEBUG] [Thread-198995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:01:53.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:01:53.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:01:53.133 [DEBUG] [Thread-198995] [transport.py] [_log()] userauth is OK
2026-04-13T01:01:53.133 [DEBUG] [Thread-198995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:01:53.133 [DEBUG] [Thread-198995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:01:53.133 [DEBUG] [Thread-198995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:01:53.133 [DEBUG] [Thread-198995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:01:53.157 [INFO] [Thread-198995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:01:53.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:01:53.746 [DEBUG] [Thread-198995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:01:53.747 [DEBUG] [Thread-198995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:01:53.747 [DEBUG] [Thread-198995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:01:53.788 [DEBUG] [Thread-198995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:01:53.789 [DEBUG] [Thread-198995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:01:53.792 [DEBUG] [Thread-198995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:01:53.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:01:53.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:01:53.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:01:53.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:01:53.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:01:53.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:01:53.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:01:53.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:01:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:01:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.959475 -999.00  +10.90   3.12     91   +9.50 1 2 1 3 1     0    0 1.02 -12.99 Z.... 3.1 3.1 188.8 4.5 11.5 -22.2 11.4 -21.2 11.1 -19.2 11.3 -21.1
2026-04-13T01:01:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:01:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:01:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.959475
2026-04-13T01:01:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:01:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:01:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:01:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:01:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:01:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:01:43', tmtdew=0.488765, humidity=96.8081, cloud=0.0, wind=5.89536, temperature=5.15394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:01:38.640', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:01:53.819 [DEBUG] [Thread-198995] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:01:53.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:01:53.914 [DEBUG] [Thread-198998] [transport.py] [_log()] starting thread (client mode): 0xae5f3b50
2026-04-13T01:01:53.914 [DEBUG] [Thread-198998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:01:53.929 [DEBUG] [Thread-198998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:01:53.930 [INFO] [Thread-198998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:01:53.937 [DEBUG] [Thread-198998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:01:53.937 [DEBUG] [Thread-198998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:01:53.937 [DEBUG] [Thread-198998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:01:53.937 [DEBUG] [Thread-198998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:53.937 [DEBUG] [Thread-198998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:01:53.937 [DEBUG] [Thread-198998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:53.937 [DEBUG] [Thread-198998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] client lang: <none>
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] server lang: <none>
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] kex follows: False
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] Compression: none
2026-04-13T01:01:53.938 [DEBUG] [Thread-198998] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:01:53.993 [DEBUG] [Thread-198998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:01:53.993 [DEBUG] [Thread-198998] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:01:53.993 [DEBUG] [Thread-198998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:01:53.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:01:53.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:01:54.051 [DEBUG] [Thread-198998] [transport.py] [_log()] userauth is OK
2026-04-13T01:01:54.052 [DEBUG] [Thread-198998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:01:54.052 [DEBUG] [Thread-198998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:01:54.052 [DEBUG] [Thread-198998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:01:54.052 [DEBUG] [Thread-198998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:01:54.075 [INFO] [Thread-198998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:01:54.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:01:54.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:01:54.918 [DEBUG] [Thread-198998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:01:54.919 [DEBUG] [Thread-198998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:01:54.967 [DEBUG] [Thread-198998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:01:54.967 [DEBUG] [Thread-198998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:01:54.977 [DEBUG] [Thread-198998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:01:54.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:01:54.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:01:54.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:01:55.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:01:55.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:01:55.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:01:55.014 [DEBUG] [Thread-198998] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:02:02.707 [DEBUG] [Thread-199000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:02:04.750 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:02:04.752 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:02:17.755 [DEBUG] [Thread-199001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:02:25.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:02:25.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:02:25.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:02:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 2, 18), 0.787007, 94.9052, 0.0, 4.8888, 7.03612, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:02:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:02:18
2026-04-13T01:02:26.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:02:26.853 [DEBUG] [Thread-199002] [transport.py] [_log()] starting thread (client mode): 0xae5f2f20
2026-04-13T01:02:26.854 [DEBUG] [Thread-199002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:02:26.872 [DEBUG] [Thread-199002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:02:26.873 [INFO] [Thread-199002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:02:26.875 [DEBUG] [Thread-199002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:02:26.875 [DEBUG] [Thread-199002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:02:26.875 [DEBUG] [Thread-199002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:02:26.875 [DEBUG] [Thread-199002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:02:26.875 [DEBUG] [Thread-199002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] client lang: <none>
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] server lang: <none>
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] kex follows: False
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] Compression: none
2026-04-13T01:02:26.876 [DEBUG] [Thread-199002] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:02:26.885 [DEBUG] [Thread-199002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:02:26.885 [DEBUG] [Thread-199002] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:02:26.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:02:26.886 [DEBUG] [Thread-199002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:02:26.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:02:26.887 [DEBUG] [Thread-199002] [transport.py] [_log()] userauth is OK
2026-04-13T01:02:26.887 [DEBUG] [Thread-199002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:02:26.887 [DEBUG] [Thread-199002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:02:26.887 [DEBUG] [Thread-199002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:02:26.887 [DEBUG] [Thread-199002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:02:26.900 [INFO] [Thread-199002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:02:26.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:02:27.095 [DEBUG] [Thread-199004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:02:27.552 [DEBUG] [Thread-199002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:02:27.552 [DEBUG] [Thread-199002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:02:27.553 [DEBUG] [Thread-199002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:02:27.593 [DEBUG] [Thread-199002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:02:27.593 [DEBUG] [Thread-199002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:02:27.595 [DEBUG] [Thread-199002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:02:27.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:02:27.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:02:27.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:02:27.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:02:27.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:02:27.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:02:27.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:02:27.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:02:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:02:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.959823 -999.00  +11.00   3.47     91   +9.60 1 2 1 3 1     0    0 1.01 -12.18 ZN... 3.5 3.5 176.8 4.5 11.5 -22.2 11.3 -21.3 11.1 -19.2 11.4 -21.2
2026-04-13T01:02:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:02:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:02:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.959823
2026-04-13T01:02:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:02:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:02:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:02:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:02:27.618 [DEBUG] [Thread-199002] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:02:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:02:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:02:18', tmtdew=0.787007, humidity=94.9052, cloud=0.0, wind=4.8888, temperature=7.03612, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:02:08.707', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:02:27.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:02:27.722 [DEBUG] [Thread-199006] [transport.py] [_log()] starting thread (client mode): 0xb39c7ca0
2026-04-13T01:02:27.722 [DEBUG] [Thread-199006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:02:27.737 [DEBUG] [Thread-199006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:02:27.737 [INFO] [Thread-199006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:02:27.744 [DEBUG] [Thread-199006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:02:27.744 [DEBUG] [Thread-199006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:02:27.744 [DEBUG] [Thread-199006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:02:27.744 [DEBUG] [Thread-199006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:02:27.744 [DEBUG] [Thread-199006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:02:27.744 [DEBUG] [Thread-199006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:02:27.744 [DEBUG] [Thread-199006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] client lang: <none>
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] server lang: <none>
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] kex follows: False
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] Compression: none
2026-04-13T01:02:27.745 [DEBUG] [Thread-199006] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:02:27.806 [DEBUG] [Thread-199006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:02:27.806 [DEBUG] [Thread-199006] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:02:27.807 [DEBUG] [Thread-199006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:02:27.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:02:27.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:02:27.863 [DEBUG] [Thread-199006] [transport.py] [_log()] userauth is OK
2026-04-13T01:02:27.863 [DEBUG] [Thread-199006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:02:27.863 [DEBUG] [Thread-199006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:02:27.863 [DEBUG] [Thread-199006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:02:27.863 [DEBUG] [Thread-199006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:02:27.885 [INFO] [Thread-199006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:02:27.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:02:27.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:02:28.694 [DEBUG] [Thread-199006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:02:28.694 [DEBUG] [Thread-199006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:02:28.742 [DEBUG] [Thread-199006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:02:28.742 [DEBUG] [Thread-199006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:02:28.751 [DEBUG] [Thread-199006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:02:28.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:02:28.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:02:28.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:02:28.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:02:28.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:02:28.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:02:28.787 [DEBUG] [Thread-199006] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:02:32.791 [DEBUG] [Thread-199008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:02:47.852 [DEBUG] [Thread-199009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:02:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:02:58.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:02:58.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:03:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 2, 18), 0.787007, 94.9052, 0.0, 4.8888, 7.03612, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:03:00.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:02:18
2026-04-13T01:03:00.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:03:00.690 [DEBUG] [Thread-199010] [transport.py] [_log()] starting thread (client mode): 0xae508ca0
2026-04-13T01:03:00.690 [DEBUG] [Thread-199010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:03:00.710 [DEBUG] [Thread-199010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:03:00.710 [INFO] [Thread-199010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:03:00.713 [DEBUG] [Thread-199010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] client lang: <none>
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] server lang: <none>
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] kex follows: False
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] Compression: none
2026-04-13T01:03:00.714 [DEBUG] [Thread-199010] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:03:00.732 [DEBUG] [Thread-199010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:03:00.733 [DEBUG] [Thread-199010] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:03:00.733 [DEBUG] [Thread-199010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:03:00.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:03:00.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:03:00.735 [DEBUG] [Thread-199010] [transport.py] [_log()] userauth is OK
2026-04-13T01:03:00.736 [DEBUG] [Thread-199010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:03:00.736 [DEBUG] [Thread-199010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:03:00.736 [DEBUG] [Thread-199010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:03:00.736 [DEBUG] [Thread-199010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:03:00.751 [INFO] [Thread-199010] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:03:00.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:03:01.402 [DEBUG] [Thread-199010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:03:01.402 [DEBUG] [Thread-199010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:03:01.402 [DEBUG] [Thread-199010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:03:01.443 [DEBUG] [Thread-199010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:03:01.443 [DEBUG] [Thread-199010] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:03:01.446 [DEBUG] [Thread-199010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:03:01.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:03:01.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:03:01.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:03:01.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:03:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:03:01.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:03:01.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:03:01.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:03:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:03:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.960169 -999.00  +11.00   4.28     91   +9.60 1 2 1 3 1     0    0 1.01 -12.29 ZN... 4.3 4.3 171.6 4.8 11.5 -22.3 11.3 -21.2 11.1 -19.1 11.3 -21.3
2026-04-13T01:03:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:03:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:03:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.960169
2026-04-13T01:03:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:03:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:03:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:03:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:03:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:03:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:02:18', tmtdew=0.787007, humidity=94.9052, cloud=0.0, wind=4.8888, temperature=7.03612, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:02:38.602', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.303, nan, nan, nan, nan, nan, 1.9645000000000001, nan, 2.3597499999999982, nan, nan, nan, nan, 1.767999999999999, 0.5985000000000005, 0.5947500000000003, 0.5985000000000005, 0.44399999999999995, 0.5870000000000024, 0.870000000000001, 2.4570000000000007, 1.8527499999999995], zp_timestamp='2026-04-12T22:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:03:01.471 [DEBUG] [Thread-199010] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:03:01.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:03:01.558 [DEBUG] [Thread-199013] [transport.py] [_log()] starting thread (client mode): 0xae5616c0
2026-04-13T01:03:01.558 [DEBUG] [Thread-199013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:03:01.572 [DEBUG] [Thread-199013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:03:01.572 [INFO] [Thread-199013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:01.580 [DEBUG] [Thread-199013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] client lang: <none>
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] server lang: <none>
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] kex follows: False
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:03:01.581 [DEBUG] [Thread-199013] [transport.py] [_log()] Compression: none
2026-04-13T01:03:01.582 [DEBUG] [Thread-199013] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:03:01.641 [DEBUG] [Thread-199013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:03:01.641 [DEBUG] [Thread-199013] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:03:01.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:03:01.641 [DEBUG] [Thread-199013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:03:01.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:03:01.698 [DEBUG] [Thread-199013] [transport.py] [_log()] userauth is OK
2026-04-13T01:03:01.699 [DEBUG] [Thread-199013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:03:01.699 [DEBUG] [Thread-199013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:03:01.699 [DEBUG] [Thread-199013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:03:01.699 [DEBUG] [Thread-199013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:03:01.714 [INFO] [Thread-199013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:03:01.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:03:01.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:03:02.544 [DEBUG] [Thread-199013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:03:02.544 [DEBUG] [Thread-199013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:03:02.591 [DEBUG] [Thread-199013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:03:02.592 [DEBUG] [Thread-199013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:03:02.600 [DEBUG] [Thread-199013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:03:02.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:03:02.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:03:02.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:03:02.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:03:02.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:03:02.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:03:02.634 [DEBUG] [Thread-199013] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:03:02.888 [DEBUG] [Thread-199015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:03:04.957 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:03:04.958 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:03:17.941 [DEBUG] [Thread-199016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:03:27.151 [DEBUG] [Thread-199017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:03:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:03:32.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:03:32.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:03:32.982 [DEBUG] [Thread-199018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:03:33.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 2, 54), 0.47033, 96.924, 0.0, 5.61312, 5.15381, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:03:33.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:02:54
2026-04-13T01:03:34.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:03:34.507 [DEBUG] [Thread-199019] [transport.py] [_log()] starting thread (client mode): 0xae5180a0
2026-04-13T01:03:34.507 [DEBUG] [Thread-199019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:03:34.527 [DEBUG] [Thread-199019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:03:34.527 [INFO] [Thread-199019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:03:34.530 [DEBUG] [Thread-199019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] client lang: <none>
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] server lang: <none>
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] kex follows: False
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] Compression: none
2026-04-13T01:03:34.531 [DEBUG] [Thread-199019] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:03:34.547 [DEBUG] [Thread-199019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:03:34.547 [DEBUG] [Thread-199019] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:03:34.548 [DEBUG] [Thread-199019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:03:34.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:03:34.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:03:34.588 [DEBUG] [Thread-199019] [transport.py] [_log()] userauth is OK
2026-04-13T01:03:34.588 [DEBUG] [Thread-199019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:03:34.589 [DEBUG] [Thread-199019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:03:34.589 [DEBUG] [Thread-199019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:03:34.589 [DEBUG] [Thread-199019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:03:34.605 [INFO] [Thread-199019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:03:34.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:03:35.232 [DEBUG] [Thread-199019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:03:35.233 [DEBUG] [Thread-199019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:03:35.233 [DEBUG] [Thread-199019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:03:35.274 [DEBUG] [Thread-199019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:03:35.274 [DEBUG] [Thread-199019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:03:35.277 [DEBUG] [Thread-199019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:03:35.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:03:35.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:03:35.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:03:35.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:03:35.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:03:35.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:03:35.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:03:35.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:03:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:03:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.960516 -999.00  +11.00   4.44     91   +9.60 1 2 1 3 1     0    0 1.03 -11.30 ZN... 4.4 4.4 172.6 4.8 11.5 -22.3 11.4 -21.2 11.1 -19.1 11.3 -21.1
2026-04-13T01:03:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:03:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:03:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.960516
2026-04-13T01:03:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:03:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:03:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:03:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:03:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:03:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:02:54', tmtdew=0.47033, humidity=96.924, cloud=0.0, wind=5.61312, temperature=5.15381, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:03:08.582', atlas_cloud=2, atlas_rain=1, zp_data=[0.25624999999999964, nan, nan, 0.37049999999999983, nan, nan, nan, nan, nan, nan, 0.6342499999999998, nan, nan, nan, nan, nan, nan, 2.1564999999999994, nan, 2.635249999999999, nan, nan, nan, nan, nan, 0.8704999999999998, 0.6162500000000009, 0.9830000000000005, 0.8140000000000001, 1.1670000000000007, 1.3120000000000012, 2.7060000000000004, 1.9862499999999992], zp_timestamp='2026-04-12T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:03:35.307 [DEBUG] [Thread-199019] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:03:35.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:03:35.406 [DEBUG] [Thread-199022] [transport.py] [_log()] starting thread (client mode): 0xae5f01c0
2026-04-13T01:03:35.406 [DEBUG] [Thread-199022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:03:35.420 [DEBUG] [Thread-199022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:03:35.421 [INFO] [Thread-199022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:03:35.428 [DEBUG] [Thread-199022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:03:35.428 [DEBUG] [Thread-199022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] client lang: <none>
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] server lang: <none>
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] kex follows: False
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] Compression: none
2026-04-13T01:03:35.429 [DEBUG] [Thread-199022] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:03:35.487 [DEBUG] [Thread-199022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:03:35.488 [DEBUG] [Thread-199022] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:03:35.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:03:35.489 [DEBUG] [Thread-199022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:03:35.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:03:35.544 [DEBUG] [Thread-199022] [transport.py] [_log()] userauth is OK
2026-04-13T01:03:35.544 [DEBUG] [Thread-199022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:03:35.544 [DEBUG] [Thread-199022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:03:35.544 [DEBUG] [Thread-199022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:03:35.544 [DEBUG] [Thread-199022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:03:35.569 [INFO] [Thread-199022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:03:35.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:03:35.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:03:36.396 [DEBUG] [Thread-199022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:03:36.397 [DEBUG] [Thread-199022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:03:36.445 [DEBUG] [Thread-199022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:03:36.445 [DEBUG] [Thread-199022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:03:36.454 [DEBUG] [Thread-199022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:03:36.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:03:36.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')
2026-04-13T01:03:36.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:03:36.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:03:36.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:03:36.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:03:36.488 [DEBUG] [Thread-199022] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:03:48.017 [DEBUG] [Thread-199024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:04:03.069 [DEBUG] [Thread-199025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:04:05.164 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:04:05.165 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:04:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:04:06.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:04:06.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:04:07.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 3, 29), 0.810117, 94.9715, 0.0, 4.39488, 7.08027, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:04:07.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:03:29
2026-04-13T01:04:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:04:08.386 [DEBUG] [Thread-199026] [transport.py] [_log()] starting thread (client mode): 0xae51b8e0
2026-04-13T01:04:08.386 [DEBUG] [Thread-199026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:04:08.407 [DEBUG] [Thread-199026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:04:08.407 [INFO] [Thread-199026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] client lang: <none>
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] server lang: <none>
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] kex follows: False
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] Compression: none
2026-04-13T01:04:08.410 [DEBUG] [Thread-199026] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:04:08.429 [DEBUG] [Thread-199026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:04:08.429 [DEBUG] [Thread-199026] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:04:08.430 [DEBUG] [Thread-199026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:04:08.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:04:08.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:04:08.431 [DEBUG] [Thread-199026] [transport.py] [_log()] userauth is OK
2026-04-13T01:04:08.431 [DEBUG] [Thread-199026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:04:08.431 [DEBUG] [Thread-199026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:04:08.431 [DEBUG] [Thread-199026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:04:08.431 [DEBUG] [Thread-199026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:04:08.443 [INFO] [Thread-199026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:04:08.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:04:09.104 [DEBUG] [Thread-199026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:04:09.104 [DEBUG] [Thread-199026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:04:09.104 [DEBUG] [Thread-199026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:04:09.145 [DEBUG] [Thread-199026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:04:09.145 [DEBUG] [Thread-199026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:04:09.148 [DEBUG] [Thread-199026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:04:09.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:04:09.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:04:09.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:04:09.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:04:09.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:04:09.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:04:09.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:04:09.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:04:09.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:04:09.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.960864 -999.00  +10.90   3.48     91   +9.60 1 2 1 3 1     0    0 1.04 -10.96 ZN... 3.5 3.5 174.8 4.4 11.5 -22.2 11.3 -21.2 11.1 -19.2 11.3 -21.1
2026-04-13T01:04:09.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:04:09.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:04:09.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.960864
2026-04-13T01:04:09.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:04:09.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:04:09.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:04:09.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:04:09.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:04:09.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:03:29', tmtdew=0.810117, humidity=94.9715, cloud=0.0, wind=4.39488, temperature=7.08027, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:03:38.650', atlas_cloud=2, atlas_rain=1, zp_data=[0.25624999999999964, nan, nan, 0.37049999999999983, nan, nan, nan, nan, nan, nan, 0.6342499999999998, nan, nan, nan, nan, nan, nan, 2.1564999999999994, nan, 2.635249999999999, nan, nan, nan, nan, nan, 0.8704999999999998, 0.6162500000000009, 0.9830000000000005, 0.8140000000000001, 1.1670000000000007, 1.3120000000000012, 2.7060000000000004, 1.9862499999999992], zp_timestamp='2026-04-12T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:04:09.173 [DEBUG] [Thread-199026] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:04:09.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:04:09.265 [DEBUG] [Thread-199029] [transport.py] [_log()] starting thread (client mode): 0xae50a650
2026-04-13T01:04:09.265 [DEBUG] [Thread-199029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:04:09.280 [DEBUG] [Thread-199029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:04:09.280 [INFO] [Thread-199029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:04:09.288 [DEBUG] [Thread-199029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:04:09.288 [DEBUG] [Thread-199029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:04:09.288 [DEBUG] [Thread-199029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:04:09.288 [DEBUG] [Thread-199029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:09.288 [DEBUG] [Thread-199029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:09.288 [DEBUG] [Thread-199029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:09.288 [DEBUG] [Thread-199029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] client lang: <none>
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] server lang: <none>
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] kex follows: False
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] Compression: none
2026-04-13T01:04:09.289 [DEBUG] [Thread-199029] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:04:09.350 [DEBUG] [Thread-199029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:04:09.351 [DEBUG] [Thread-199029] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:04:09.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:04:09.352 [DEBUG] [Thread-199029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:04:09.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:04:09.408 [DEBUG] [Thread-199029] [transport.py] [_log()] userauth is OK
2026-04-13T01:04:09.408 [DEBUG] [Thread-199029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:04:09.408 [DEBUG] [Thread-199029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:04:09.408 [DEBUG] [Thread-199029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:04:09.408 [DEBUG] [Thread-199029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:04:09.427 [INFO] [Thread-199029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:04:09.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:04:09.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:04:10.236 [DEBUG] [Thread-199029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:04:10.236 [DEBUG] [Thread-199029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:04:10.284 [DEBUG] [Thread-199029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:04:10.284 [DEBUG] [Thread-199029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:04:10.293 [DEBUG] [Thread-199029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:04:10.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:04:10.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:04:10.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:04:10.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:04:10.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:04:10.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:04:10.330 [DEBUG] [Thread-199029] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:04:18.105 [DEBUG] [Thread-199031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:04:27.231 [DEBUG] [Thread-199032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:04:33.161 [DEBUG] [Thread-199033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:04:40.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:04:40.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:04:40.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:04:41.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 4, 4), 0.81189, 94.9603, 0.0, 4.34196, 7.0802, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:04:41.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:04:04
2026-04-13T01:04:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:04:42.257 [DEBUG] [Thread-199034] [transport.py] [_log()] starting thread (client mode): 0xae5f3880
2026-04-13T01:04:42.258 [DEBUG] [Thread-199034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:04:42.277 [DEBUG] [Thread-199034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:04:42.277 [INFO] [Thread-199034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] client lang: <none>
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] server lang: <none>
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] kex follows: False
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] Compression: none
2026-04-13T01:04:42.280 [DEBUG] [Thread-199034] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:04:42.292 [DEBUG] [Thread-199034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:04:42.292 [DEBUG] [Thread-199034] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:04:42.293 [DEBUG] [Thread-199034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:04:42.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:04:42.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:04:42.295 [DEBUG] [Thread-199034] [transport.py] [_log()] userauth is OK
2026-04-13T01:04:42.296 [DEBUG] [Thread-199034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:04:42.296 [DEBUG] [Thread-199034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:04:42.296 [DEBUG] [Thread-199034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:04:42.296 [DEBUG] [Thread-199034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:04:42.316 [INFO] [Thread-199034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:04:42.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:04:42.912 [DEBUG] [Thread-199034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:04:42.912 [DEBUG] [Thread-199034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:04:42.913 [DEBUG] [Thread-199034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:04:42.953 [DEBUG] [Thread-199034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:04:42.954 [DEBUG] [Thread-199034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:04:42.957 [DEBUG] [Thread-199034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:04:42.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:04:42.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:04:42.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:04:42.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:04:42.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:04:42.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:04:42.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:04:42.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:04:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:04:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.961211 -999.00  +10.90   4.21     91   +9.60 1 2 1 3 1     0    0 1.03 -10.87 Z..s. 4.2 4.2 173.8 4.6 11.4 -22.2 11.3 -21.1 11.0 -19.3 11.4 -21.1
2026-04-13T01:04:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:04:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:04:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.961211
2026-04-13T01:04:42.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:04:42.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:04:42.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:04:42.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:04:42.985 [DEBUG] [Thread-199034] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:04:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:04:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:04:04', tmtdew=0.81189, humidity=94.9603, cloud=0.0, wind=4.34196, temperature=7.0802, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:04:08.630', atlas_cloud=2, atlas_rain=1, zp_data=[0.25624999999999964, nan, nan, 0.37049999999999983, nan, nan, nan, nan, nan, nan, 0.6342499999999998, nan, nan, nan, nan, nan, nan, 2.1564999999999994, nan, 2.635249999999999, nan, nan, nan, nan, nan, 0.8704999999999998, 0.6162500000000009, 0.9830000000000005, 0.8140000000000001, 1.1670000000000007, 1.3120000000000012, 2.7060000000000004, 1.9862499999999992], zp_timestamp='2026-04-12T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:04:43.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:04:43.080 [DEBUG] [Thread-199037] [transport.py] [_log()] starting thread (client mode): 0xae50b6a0
2026-04-13T01:04:43.080 [DEBUG] [Thread-199037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:04:43.097 [DEBUG] [Thread-199037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:04:43.098 [INFO] [Thread-199037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:04:43.108 [DEBUG] [Thread-199037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] client lang: <none>
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] server lang: <none>
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] kex follows: False
2026-04-13T01:04:43.109 [DEBUG] [Thread-199037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:04:43.110 [DEBUG] [Thread-199037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:04:43.110 [DEBUG] [Thread-199037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:04:43.110 [DEBUG] [Thread-199037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:04:43.110 [DEBUG] [Thread-199037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:04:43.110 [DEBUG] [Thread-199037] [transport.py] [_log()] Compression: none
2026-04-13T01:04:43.110 [DEBUG] [Thread-199037] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:04:43.168 [DEBUG] [Thread-199037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:04:43.169 [DEBUG] [Thread-199037] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:04:43.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:04:43.170 [DEBUG] [Thread-199037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:04:43.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:04:43.224 [DEBUG] [Thread-199037] [transport.py] [_log()] userauth is OK
2026-04-13T01:04:43.224 [DEBUG] [Thread-199037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:04:43.224 [DEBUG] [Thread-199037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:04:43.224 [DEBUG] [Thread-199037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:04:43.224 [DEBUG] [Thread-199037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:04:43.243 [INFO] [Thread-199037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:04:43.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:04:43.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:04:44.034 [DEBUG] [Thread-199037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:04:44.034 [DEBUG] [Thread-199037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:04:44.082 [DEBUG] [Thread-199037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:04:44.082 [DEBUG] [Thread-199037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:04:44.090 [DEBUG] [Thread-199037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:04:44.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:04:44.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:04:44.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:04:44.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:04:44.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:04:44.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:04:44.123 [DEBUG] [Thread-199037] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:04:48.199 [DEBUG] [Thread-199039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:03.254 [DEBUG] [Thread-199040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:05.370 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:05.371 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:14.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:05:14.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:05:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:05:15.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 4, 40), 0.460145, 96.9902, 0.0, 5.472, 5.20346, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:05:15.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:04:40
2026-04-13T01:05:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:05:16.034 [DEBUG] [Thread-199041] [transport.py] [_log()] starting thread (client mode): 0xae561930
2026-04-13T01:05:16.034 [DEBUG] [Thread-199041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:05:16.050 [DEBUG] [Thread-199041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:05:16.050 [INFO] [Thread-199041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] client lang: <none>
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] server lang: <none>
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] kex follows: False
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] Compression: none
2026-04-13T01:05:16.053 [DEBUG] [Thread-199041] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:05:16.071 [DEBUG] [Thread-199041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:05:16.071 [DEBUG] [Thread-199041] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:05:16.072 [DEBUG] [Thread-199041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:05:16.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:05:16.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:05:16.074 [DEBUG] [Thread-199041] [transport.py] [_log()] userauth is OK
2026-04-13T01:05:16.074 [DEBUG] [Thread-199041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:05:16.074 [DEBUG] [Thread-199041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:05:16.074 [DEBUG] [Thread-199041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:05:16.075 [DEBUG] [Thread-199041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:05:16.099 [INFO] [Thread-199041] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:05:16.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:05:16.685 [DEBUG] [Thread-199041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:05:16.685 [DEBUG] [Thread-199041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:05:16.685 [DEBUG] [Thread-199041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:05:16.726 [DEBUG] [Thread-199041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:05:16.726 [DEBUG] [Thread-199041] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:05:16.729 [DEBUG] [Thread-199041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:05:16.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:05:16.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:05:16.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:05:16.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:05:16.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:05:16.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:05:16.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:05:16.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:05:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:05:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.961905 -999.00  +10.90   4.15     91   +9.60 1 2 1 3 1     0    0 1.05 -11.89 ZN.S. 4.2 4.2 172.6 4.8 11.5 -22.3 11.3 -21.3 11.1 -19.2 11.3 -21.2
2026-04-13T01:05:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:05:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:05:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.961905
2026-04-13T01:05:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:05:16.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:05:16.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:05:16.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:05:16.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:05:16.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:04:40', tmtdew=0.460145, humidity=96.9902, cloud=0.0, wind=5.472, temperature=5.20346, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:05:08.592', atlas_cloud=2, atlas_rain=1, zp_data=[0.25624999999999964, nan, nan, 0.37049999999999983, nan, nan, nan, nan, nan, nan, 0.6342499999999998, nan, nan, nan, nan, nan, nan, 2.1564999999999994, nan, 2.635249999999999, nan, nan, nan, nan, nan, 0.8704999999999998, 0.6162500000000009, 0.9830000000000005, 0.8140000000000001, 1.1670000000000007, 1.3120000000000012, 2.7060000000000004, 1.9862499999999992], zp_timestamp='2026-04-12T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:05:16.756 [DEBUG] [Thread-199041] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:05:16.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:05:16.849 [DEBUG] [Thread-199044] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-13T01:05:16.850 [DEBUG] [Thread-199044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:05:16.864 [DEBUG] [Thread-199044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:05:16.864 [INFO] [Thread-199044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:05:16.872 [DEBUG] [Thread-199044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] client lang: <none>
2026-04-13T01:05:16.873 [DEBUG] [Thread-199044] [transport.py] [_log()] server lang: <none>
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] kex follows: False
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] Compression: none
2026-04-13T01:05:16.874 [DEBUG] [Thread-199044] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:05:16.932 [DEBUG] [Thread-199044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:05:16.933 [DEBUG] [Thread-199044] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:05:16.933 [DEBUG] [Thread-199044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:05:16.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:05:16.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:05:16.989 [DEBUG] [Thread-199044] [transport.py] [_log()] userauth is OK
2026-04-13T01:05:16.990 [DEBUG] [Thread-199044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:05:16.990 [DEBUG] [Thread-199044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:05:16.990 [DEBUG] [Thread-199044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:05:16.990 [DEBUG] [Thread-199044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:05:17.009 [INFO] [Thread-199044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:05:17.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:05:17.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:05:17.793 [DEBUG] [Thread-199044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:05:17.793 [DEBUG] [Thread-199044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:05:17.840 [DEBUG] [Thread-199044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:05:17.840 [DEBUG] [Thread-199044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:05:17.849 [DEBUG] [Thread-199044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:05:17.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:05:17.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:05:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:05:17.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:05:17.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:05:17.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:05:17.883 [DEBUG] [Thread-199044] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:05:18.290 [DEBUG] [Thread-199046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:27.306 [DEBUG] [Thread-199047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:33.344 [DEBUG] [Thread-199048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:05:47.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:05:47.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:05:48.381 [DEBUG] [Thread-199049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:05:49.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 5, 15), 0.771577, 95.0047, 0.0, 4.39488, 7.0247, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:05:49.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:05:15
2026-04-13T01:05:49.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:05:49.697 [DEBUG] [Thread-199050] [transport.py] [_log()] starting thread (client mode): 0xb0fcf250
2026-04-13T01:05:49.697 [DEBUG] [Thread-199050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:05:49.710 [DEBUG] [Thread-199050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:05:49.710 [INFO] [Thread-199050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] client lang: <none>
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] server lang: <none>
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] kex follows: False
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] Compression: none
2026-04-13T01:05:49.711 [DEBUG] [Thread-199050] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:05:49.723 [DEBUG] [Thread-199050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:05:49.724 [DEBUG] [Thread-199050] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:05:49.724 [DEBUG] [Thread-199050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:05:49.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:05:49.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:05:49.726 [DEBUG] [Thread-199050] [transport.py] [_log()] userauth is OK
2026-04-13T01:05:49.726 [DEBUG] [Thread-199050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:05:49.726 [DEBUG] [Thread-199050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:05:49.726 [DEBUG] [Thread-199050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:05:49.726 [DEBUG] [Thread-199050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:05:49.745 [INFO] [Thread-199050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:05:49.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:05:50.307 [DEBUG] [Thread-199050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:05:50.308 [DEBUG] [Thread-199050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:05:50.308 [DEBUG] [Thread-199050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:05:50.349 [DEBUG] [Thread-199050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:05:50.349 [DEBUG] [Thread-199050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:05:50.352 [DEBUG] [Thread-199050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:05:50.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:05:50.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:05:50.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:05:50.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:05:50.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:05:50.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:05:50.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:05:50.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:05:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:05:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.962252 -999.00  +10.90   3.77     91   +9.60 1 2 1 3 1     0    0 1.02 -11.10 ZN.s. 3.8 3.8 175.8 4.5 11.4 -22.0 11.3 -21.1 11.1 -19.1 11.3 -21.1
2026-04-13T01:05:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:05:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:05:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.962252
2026-04-13T01:05:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:05:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:05:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:05:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:05:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:05:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:05:15', tmtdew=0.771577, humidity=95.0047, cloud=0.0, wind=4.39488, temperature=7.0247, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:05:38.573', atlas_cloud=2, atlas_rain=1, zp_data=[0.25624999999999964, nan, nan, 0.37049999999999983, nan, nan, nan, nan, nan, nan, 0.6342499999999998, nan, nan, nan, nan, nan, nan, 2.1564999999999994, nan, 2.635249999999999, nan, nan, nan, nan, nan, 0.8704999999999998, 0.6162500000000009, 0.9830000000000005, 0.8140000000000001, 1.1670000000000007, 1.3120000000000012, 2.7060000000000004, 1.9862499999999992], zp_timestamp='2026-04-12T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:05:50.381 [DEBUG] [Thread-199050] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:05:50.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:05:50.483 [DEBUG] [Thread-199053] [transport.py] [_log()] starting thread (client mode): 0xa7959cc0
2026-04-13T01:05:50.483 [DEBUG] [Thread-199053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:05:50.497 [DEBUG] [Thread-199053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:05:50.497 [INFO] [Thread-199053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:05:50.505 [DEBUG] [Thread-199053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:05:50.506 [DEBUG] [Thread-199053] [transport.py] [_log()] client lang: <none>
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] server lang: <none>
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] kex follows: False
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:05:50.507 [DEBUG] [Thread-199053] [transport.py] [_log()] Compression: none
2026-04-13T01:05:50.508 [DEBUG] [Thread-199053] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:05:50.570 [DEBUG] [Thread-199053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:05:50.570 [DEBUG] [Thread-199053] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:05:50.571 [DEBUG] [Thread-199053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:05:50.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:05:50.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:05:50.628 [DEBUG] [Thread-199053] [transport.py] [_log()] userauth is OK
2026-04-13T01:05:50.629 [DEBUG] [Thread-199053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:05:50.629 [DEBUG] [Thread-199053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:05:50.629 [DEBUG] [Thread-199053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:05:50.629 [DEBUG] [Thread-199053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:05:50.647 [INFO] [Thread-199053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:05:50.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:05:50.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:05:51.494 [DEBUG] [Thread-199053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:05:51.495 [DEBUG] [Thread-199053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:05:51.542 [DEBUG] [Thread-199053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:05:51.542 [DEBUG] [Thread-199053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:05:51.552 [DEBUG] [Thread-199053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:05:51.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:05:51.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:05:51.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:05:51.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:05:51.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:05:51.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:05:51.589 [DEBUG] [Thread-199053] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:06:03.416 [DEBUG] [Thread-199055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:06:05.574 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:06:05.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:06:18.470 [DEBUG] [Thread-199056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:06:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:06:21.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:06:21.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:06:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 5, 52), 0.45981, 96.9903, 0.0, 5.68368, 5.15376, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:06:22.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:05:52
2026-04-13T01:06:23.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:06:23.439 [DEBUG] [Thread-199057] [transport.py] [_log()] starting thread (client mode): 0xae518850
2026-04-13T01:06:23.439 [DEBUG] [Thread-199057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:06:23.457 [DEBUG] [Thread-199057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:06:23.457 [INFO] [Thread-199057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:06:23.460 [DEBUG] [Thread-199057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] client lang: <none>
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] server lang: <none>
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] kex follows: False
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] Compression: none
2026-04-13T01:06:23.461 [DEBUG] [Thread-199057] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:06:23.480 [DEBUG] [Thread-199057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:06:23.481 [DEBUG] [Thread-199057] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:06:23.481 [DEBUG] [Thread-199057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:06:23.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:06:23.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:06:23.483 [DEBUG] [Thread-199057] [transport.py] [_log()] userauth is OK
2026-04-13T01:06:23.483 [DEBUG] [Thread-199057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:06:23.483 [DEBUG] [Thread-199057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:06:23.484 [DEBUG] [Thread-199057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:06:23.484 [DEBUG] [Thread-199057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:06:23.510 [INFO] [Thread-199057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:06:23.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:06:24.236 [DEBUG] [Thread-199057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:06:24.236 [DEBUG] [Thread-199057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:06:24.236 [DEBUG] [Thread-199057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:06:24.276 [DEBUG] [Thread-199057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:06:24.277 [DEBUG] [Thread-199057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:06:24.278 [DEBUG] [Thread-199057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:06:24.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:06:24.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:06:24.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:06:24.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:06:24.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:06:24.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:06:24.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:06:24.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:06:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:06:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.962252 -999.00  +10.90   3.77     91   +9.60 1 2 1 3 1     0    0 1.02 -11.10 ZN.s. 3.8 3.8 175.8 4.5 11.4 -22.0 11.3 -21.1 11.1 -19.1 11.3 -21.1
2026-04-13T01:06:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:06:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:06:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.962252
2026-04-13T01:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:06:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:06:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:06:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:05:52', tmtdew=0.45981, humidity=96.9903, cloud=0.0, wind=5.68368, temperature=5.15376, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:05:38.573', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:06:24.302 [DEBUG] [Thread-199057] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:06:24.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:06:24.399 [DEBUG] [Thread-199060] [transport.py] [_log()] starting thread (client mode): 0xae50a260
2026-04-13T01:06:24.400 [DEBUG] [Thread-199060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:06:24.414 [DEBUG] [Thread-199060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:06:24.414 [INFO] [Thread-199060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:06:24.422 [DEBUG] [Thread-199060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:06:24.422 [DEBUG] [Thread-199060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:06:24.422 [DEBUG] [Thread-199060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:06:24.422 [DEBUG] [Thread-199060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:24.422 [DEBUG] [Thread-199060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:24.422 [DEBUG] [Thread-199060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] client lang: <none>
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] server lang: <none>
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] kex follows: False
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:06:24.423 [DEBUG] [Thread-199060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:06:24.424 [DEBUG] [Thread-199060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:06:24.424 [DEBUG] [Thread-199060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:06:24.424 [DEBUG] [Thread-199060] [transport.py] [_log()] Compression: none
2026-04-13T01:06:24.424 [DEBUG] [Thread-199060] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:06:24.480 [DEBUG] [Thread-199060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:06:24.481 [DEBUG] [Thread-199060] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:06:24.482 [DEBUG] [Thread-199060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:06:24.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:06:24.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:06:24.540 [DEBUG] [Thread-199060] [transport.py] [_log()] userauth is OK
2026-04-13T01:06:24.541 [DEBUG] [Thread-199060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:06:24.541 [DEBUG] [Thread-199060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:06:24.541 [DEBUG] [Thread-199060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:06:24.541 [DEBUG] [Thread-199060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:06:24.561 [INFO] [Thread-199060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:06:24.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:06:24.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:06:25.371 [DEBUG] [Thread-199060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:06:25.371 [DEBUG] [Thread-199060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:06:25.419 [DEBUG] [Thread-199060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:06:25.419 [DEBUG] [Thread-199060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:06:25.430 [DEBUG] [Thread-199060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:06:25.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:06:25.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:06:25.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:06:25.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:06:25.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:06:25.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:06:25.467 [DEBUG] [Thread-199060] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:06:27.364 [DEBUG] [Thread-199062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:06:33.511 [DEBUG] [Thread-199063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:06:48.567 [DEBUG] [Thread-199064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:06:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:06:55.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:06:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 6, 27), 1.10486, 92.5234, 0.0, 4.55364, 10.7035, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:06:27
2026-04-13T01:06:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:06:57.495 [DEBUG] [Thread-199065] [transport.py] [_log()] starting thread (client mode): 0xae508760
2026-04-13T01:06:57.495 [DEBUG] [Thread-199065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:06:57.515 [DEBUG] [Thread-199065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:06:57.515 [INFO] [Thread-199065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] client lang: <none>
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] server lang: <none>
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] kex follows: False
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] Compression: none
2026-04-13T01:06:57.518 [DEBUG] [Thread-199065] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:06:57.536 [DEBUG] [Thread-199065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:06:57.537 [DEBUG] [Thread-199065] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:06:57.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:06:57.538 [DEBUG] [Thread-199065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:06:57.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:06:57.540 [DEBUG] [Thread-199065] [transport.py] [_log()] userauth is OK
2026-04-13T01:06:57.540 [DEBUG] [Thread-199065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:06:57.540 [DEBUG] [Thread-199065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:06:57.540 [DEBUG] [Thread-199065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:06:57.540 [DEBUG] [Thread-199065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:06:57.565 [INFO] [Thread-199065] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:06:57.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:06:58.274 [DEBUG] [Thread-199065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:06:58.275 [DEBUG] [Thread-199065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:06:58.275 [DEBUG] [Thread-199065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:06:58.316 [DEBUG] [Thread-199065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:06:58.316 [DEBUG] [Thread-199065] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:06:58.320 [DEBUG] [Thread-199065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:06:58.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:06:58.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:06:58.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:06:58.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:06:58.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:06:58.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:06:58.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:06:58.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:06:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:06:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.962600 -999.00  +10.90   3.15     91   +9.60 1 2 1 3 1     0    0 1.01 -11.32 ZN.s. 3.1 3.1 172.0 4.3 11.4 -22.1 11.3 -21.0 11.1 -19.2 11.3 -21.1
2026-04-13T01:06:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:06:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:06:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.962600
2026-04-13T01:06:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:06:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:06:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:06:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:06:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:06:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:06:27', tmtdew=1.10486, humidity=92.5234, cloud=0.0, wind=4.55364, temperature=10.7035, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:06:08.640', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:06:58.341 [DEBUG] [Thread-199065] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:06:58.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:06:58.434 [DEBUG] [Thread-199068] [transport.py] [_log()] starting thread (client mode): 0xae508be0
2026-04-13T01:06:58.434 [DEBUG] [Thread-199068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:06:58.449 [DEBUG] [Thread-199068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:06:58.449 [INFO] [Thread-199068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:06:58.457 [DEBUG] [Thread-199068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:06:58.457 [DEBUG] [Thread-199068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] client lang: <none>
2026-04-13T01:06:58.458 [DEBUG] [Thread-199068] [transport.py] [_log()] server lang: <none>
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] kex follows: False
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] Compression: none
2026-04-13T01:06:58.459 [DEBUG] [Thread-199068] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:06:58.516 [DEBUG] [Thread-199068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:06:58.517 [DEBUG] [Thread-199068] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:06:58.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:06:58.518 [DEBUG] [Thread-199068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:06:58.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:06:58.572 [DEBUG] [Thread-199068] [transport.py] [_log()] userauth is OK
2026-04-13T01:06:58.572 [DEBUG] [Thread-199068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:06:58.572 [DEBUG] [Thread-199068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:06:58.572 [DEBUG] [Thread-199068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:06:58.572 [DEBUG] [Thread-199068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:06:58.590 [INFO] [Thread-199068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:06:58.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:06:58.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:06:59.397 [DEBUG] [Thread-199068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:06:59.398 [DEBUG] [Thread-199068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:06:59.446 [DEBUG] [Thread-199068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:06:59.446 [DEBUG] [Thread-199068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:06:59.455 [DEBUG] [Thread-199068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:06:59.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:06:59.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:06:59.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:06:59.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:06:59.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:06:59.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:06:59.489 [DEBUG] [Thread-199068] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:07:03.604 [DEBUG] [Thread-199070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:07:05.782 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:07:05.784 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:07:18.654 [DEBUG] [Thread-199071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:07:27.426 [DEBUG] [Thread-199072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:07:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:07:29.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:07:29.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:07:30.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 7, 2), 1.09971, 92.5566, 0.0, 4.39488, 10.7201, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:07:30.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:07:02
2026-04-13T01:07:31.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:07:31.333 [DEBUG] [Thread-199073] [transport.py] [_log()] starting thread (client mode): 0xb0fe84f0
2026-04-13T01:07:31.333 [DEBUG] [Thread-199073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:07:31.353 [DEBUG] [Thread-199073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:07:31.353 [INFO] [Thread-199073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] client lang: <none>
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] server lang: <none>
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] kex follows: False
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:07:31.356 [DEBUG] [Thread-199073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:07:31.357 [DEBUG] [Thread-199073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:07:31.357 [DEBUG] [Thread-199073] [transport.py] [_log()] Compression: none
2026-04-13T01:07:31.357 [DEBUG] [Thread-199073] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:07:31.374 [DEBUG] [Thread-199073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:07:31.375 [DEBUG] [Thread-199073] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:07:31.375 [DEBUG] [Thread-199073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:07:31.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:07:31.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:07:31.377 [DEBUG] [Thread-199073] [transport.py] [_log()] userauth is OK
2026-04-13T01:07:31.378 [DEBUG] [Thread-199073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:07:31.378 [DEBUG] [Thread-199073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:07:31.378 [DEBUG] [Thread-199073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:07:31.378 [DEBUG] [Thread-199073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:07:31.405 [INFO] [Thread-199073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:07:31.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:07:32.168 [DEBUG] [Thread-199073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:07:32.168 [DEBUG] [Thread-199073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:07:32.169 [DEBUG] [Thread-199073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:07:32.209 [DEBUG] [Thread-199073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:07:32.209 [DEBUG] [Thread-199073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:07:32.213 [DEBUG] [Thread-199073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:07:32.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:07:32.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:07:32.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:07:32.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:07:32.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:07:32.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:07:32.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:07:32.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:07:32.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:07:32.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.962947 -999.00  +10.90   2.92     91   +9.60 1 2 1 3 1     0    0 1.02 -11.52 ZN.s. 2.9 2.9 174.6 3.6 11.4 -22.2 11.3 -21.1 11.1 -19.3 11.3 -21.0
2026-04-13T01:07:32.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:07:32.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:07:32.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.962947
2026-04-13T01:07:32.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:07:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:07:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:07:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:07:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:07:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:07:02', tmtdew=1.09971, humidity=92.5566, cloud=0.0, wind=4.39488, temperature=10.7201, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:06:38.621', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:07:32.240 [DEBUG] [Thread-199073] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:07:32.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:07:32.343 [DEBUG] [Thread-199076] [transport.py] [_log()] starting thread (client mode): 0xae509cf0
2026-04-13T01:07:32.343 [DEBUG] [Thread-199076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:07:32.357 [DEBUG] [Thread-199076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:07:32.357 [INFO] [Thread-199076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] client lang: <none>
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] server lang: <none>
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] kex follows: False
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:07:32.365 [DEBUG] [Thread-199076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:07:32.366 [DEBUG] [Thread-199076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:07:32.366 [DEBUG] [Thread-199076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:07:32.366 [DEBUG] [Thread-199076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:07:32.366 [DEBUG] [Thread-199076] [transport.py] [_log()] Compression: none
2026-04-13T01:07:32.366 [DEBUG] [Thread-199076] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:07:32.424 [DEBUG] [Thread-199076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:07:32.424 [DEBUG] [Thread-199076] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:07:32.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:07:32.426 [DEBUG] [Thread-199076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:07:32.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:07:32.480 [DEBUG] [Thread-199076] [transport.py] [_log()] userauth is OK
2026-04-13T01:07:32.480 [DEBUG] [Thread-199076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:07:32.480 [DEBUG] [Thread-199076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:07:32.480 [DEBUG] [Thread-199076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:07:32.481 [DEBUG] [Thread-199076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:07:32.499 [INFO] [Thread-199076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:07:32.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:07:32.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:07:33.302 [DEBUG] [Thread-199076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:07:33.302 [DEBUG] [Thread-199076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:07:33.350 [DEBUG] [Thread-199076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:07:33.350 [DEBUG] [Thread-199076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:07:33.359 [DEBUG] [Thread-199076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:07:33.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:07:33.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:07:33.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:07:33.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:07:33.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:07:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:07:33.396 [DEBUG] [Thread-199076] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:07:33.688 [DEBUG] [Thread-199078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:07:48.739 [DEBUG] [Thread-199079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:08:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:08:03.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:08:03.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:08:03.779 [DEBUG] [Thread-199080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:08:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 7, 38), 0.9349, 93.8815, 0.0, 5.2956, 10.6415, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:08:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:07:38
2026-04-13T01:08:05.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:08:05.218 [DEBUG] [Thread-199081] [transport.py] [_log()] starting thread (client mode): 0xb0fea470
2026-04-13T01:08:05.218 [DEBUG] [Thread-199081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:08:05.239 [DEBUG] [Thread-199081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:08:05.239 [INFO] [Thread-199081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] client lang: <none>
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] server lang: <none>
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] kex follows: False
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:08:05.242 [DEBUG] [Thread-199081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:08:05.243 [DEBUG] [Thread-199081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:08:05.243 [DEBUG] [Thread-199081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:08:05.243 [DEBUG] [Thread-199081] [transport.py] [_log()] Compression: none
2026-04-13T01:08:05.243 [DEBUG] [Thread-199081] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:08:05.259 [DEBUG] [Thread-199081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:08:05.260 [DEBUG] [Thread-199081] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:08:05.260 [DEBUG] [Thread-199081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:08:05.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:08:05.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:08:05.262 [DEBUG] [Thread-199081] [transport.py] [_log()] userauth is OK
2026-04-13T01:08:05.262 [DEBUG] [Thread-199081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:08:05.262 [DEBUG] [Thread-199081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:08:05.263 [DEBUG] [Thread-199081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:08:05.263 [DEBUG] [Thread-199081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:08:05.278 [INFO] [Thread-199081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:08:05.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:08:05.990 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:08:05.991 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:08:05.993 [DEBUG] [Thread-199081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:08:05.993 [DEBUG] [Thread-199081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:08:05.994 [DEBUG] [Thread-199081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:08:06.034 [DEBUG] [Thread-199081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:08:06.034 [DEBUG] [Thread-199081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:08:06.038 [DEBUG] [Thread-199081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:08:06.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:08:06.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:08:06.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:08:06.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:08:06.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:08:06.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:08:06.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:08:06.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:08:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:08:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.963294 -999.00  +10.90   2.46     91   +9.60 1 2 1 3 1     0    0 1.02 -11.38 ZN... 2.5 2.5 184.4 3.4 11.5 -22.2 11.3 -21.2 11.1 -19.0 11.3 -21.1
2026-04-13T01:08:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:08:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:08:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.963294
2026-04-13T01:08:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:08:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:08:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:08:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:08:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:08:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:07:38', tmtdew=0.9349, humidity=93.8815, cloud=0.0, wind=5.2956, temperature=10.6415, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:07:08.602', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:08:06.064 [DEBUG] [Thread-199081] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:08:06.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:08:06.156 [DEBUG] [Thread-199084] [transport.py] [_log()] starting thread (client mode): 0xb0fe9ff0
2026-04-13T01:08:06.156 [DEBUG] [Thread-199084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:08:06.171 [DEBUG] [Thread-199084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:08:06.172 [INFO] [Thread-199084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] client lang: <none>
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] server lang: <none>
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] kex follows: False
2026-04-13T01:08:06.179 [DEBUG] [Thread-199084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:08:06.180 [DEBUG] [Thread-199084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:08:06.180 [DEBUG] [Thread-199084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:08:06.180 [DEBUG] [Thread-199084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:08:06.180 [DEBUG] [Thread-199084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:08:06.180 [DEBUG] [Thread-199084] [transport.py] [_log()] Compression: none
2026-04-13T01:08:06.180 [DEBUG] [Thread-199084] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:08:06.240 [DEBUG] [Thread-199084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:08:06.241 [DEBUG] [Thread-199084] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:08:06.241 [DEBUG] [Thread-199084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:08:06.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:08:06.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:08:06.296 [DEBUG] [Thread-199084] [transport.py] [_log()] userauth is OK
2026-04-13T01:08:06.296 [DEBUG] [Thread-199084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:08:06.296 [DEBUG] [Thread-199084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:08:06.296 [DEBUG] [Thread-199084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:08:06.296 [DEBUG] [Thread-199084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:08:06.315 [INFO] [Thread-199084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:08:06.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:08:06.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:08:07.119 [DEBUG] [Thread-199084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:08:07.119 [DEBUG] [Thread-199084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:08:07.167 [DEBUG] [Thread-199084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:08:07.167 [DEBUG] [Thread-199084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:08:07.176 [DEBUG] [Thread-199084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:08:07.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:08:07.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:08:07.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:08:07.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:08:07.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:08:07.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:08:07.213 [DEBUG] [Thread-199084] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:08:18.818 [DEBUG] [Thread-199086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:08:27.508 [DEBUG] [Thread-199087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:08:33.879 [DEBUG] [Thread-199088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:08:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:08:37.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:08:37.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:08:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 8, 14), 1.04155, 93.1068, 0.0, 4.60656, 10.6872, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:08:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:08:14
2026-04-13T01:08:38.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:08:39.050 [DEBUG] [Thread-199089] [transport.py] [_log()] starting thread (client mode): 0xa7958a60
2026-04-13T01:08:39.050 [DEBUG] [Thread-199089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:08:39.070 [DEBUG] [Thread-199089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:08:39.070 [INFO] [Thread-199089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] client lang: <none>
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] server lang: <none>
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] kex follows: False
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] Compression: none
2026-04-13T01:08:39.073 [DEBUG] [Thread-199089] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:08:39.088 [DEBUG] [Thread-199089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:08:39.089 [DEBUG] [Thread-199089] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:08:39.089 [DEBUG] [Thread-199089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:08:39.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:08:39.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:08:39.091 [DEBUG] [Thread-199089] [transport.py] [_log()] userauth is OK
2026-04-13T01:08:39.091 [DEBUG] [Thread-199089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:08:39.091 [DEBUG] [Thread-199089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:08:39.091 [DEBUG] [Thread-199089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:08:39.091 [DEBUG] [Thread-199089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:08:39.116 [INFO] [Thread-199089] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:08:39.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:08:39.889 [DEBUG] [Thread-199089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:08:39.890 [DEBUG] [Thread-199089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:08:39.890 [DEBUG] [Thread-199089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:08:39.930 [DEBUG] [Thread-199089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:08:39.930 [DEBUG] [Thread-199089] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:08:39.934 [DEBUG] [Thread-199089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:08:39.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:08:39.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:08:39.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:08:39.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:08:39.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:08:39.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:08:39.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:08:39.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:08:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:08:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.963641 -999.00  +10.90   2.41     91   +9.60 1 2 1 3 1     0    0 0.96 -12.23 ZN.s. 2.4 2.4 183.2 3.0 11.4 -22.2 11.3 -21.4 11.1 -19.1 11.3 -21.1
2026-04-13T01:08:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:08:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:08:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.963641
2026-04-13T01:08:39.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:08:39.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:08:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:08:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:08:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:08:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:08:14', tmtdew=1.04155, humidity=93.1068, cloud=0.0, wind=4.60656, temperature=10.6872, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:07:38.582', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:08:39.963 [DEBUG] [Thread-199089] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:08:40.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:08:40.058 [DEBUG] [Thread-199092] [transport.py] [_log()] starting thread (client mode): 0xa795aad0
2026-04-13T01:08:40.058 [DEBUG] [Thread-199092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:08:40.073 [DEBUG] [Thread-199092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:08:40.073 [INFO] [Thread-199092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:08:40.081 [DEBUG] [Thread-199092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:08:40.081 [DEBUG] [Thread-199092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:08:40.081 [DEBUG] [Thread-199092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:08:40.081 [DEBUG] [Thread-199092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:40.081 [DEBUG] [Thread-199092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] client lang: <none>
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] server lang: <none>
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] kex follows: False
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:08:40.082 [DEBUG] [Thread-199092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:08:40.083 [DEBUG] [Thread-199092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:08:40.083 [DEBUG] [Thread-199092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:08:40.083 [DEBUG] [Thread-199092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:08:40.083 [DEBUG] [Thread-199092] [transport.py] [_log()] Compression: none
2026-04-13T01:08:40.083 [DEBUG] [Thread-199092] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:08:40.141 [DEBUG] [Thread-199092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:08:40.142 [DEBUG] [Thread-199092] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:08:40.143 [DEBUG] [Thread-199092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:08:40.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:08:40.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:08:40.200 [DEBUG] [Thread-199092] [transport.py] [_log()] userauth is OK
2026-04-13T01:08:40.201 [DEBUG] [Thread-199092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:08:40.201 [DEBUG] [Thread-199092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:08:40.201 [DEBUG] [Thread-199092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:08:40.201 [DEBUG] [Thread-199092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:08:40.220 [INFO] [Thread-199092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:08:40.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:08:40.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:08:41.023 [DEBUG] [Thread-199092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:08:41.023 [DEBUG] [Thread-199092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:08:41.071 [DEBUG] [Thread-199092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:08:41.071 [DEBUG] [Thread-199092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:08:41.080 [DEBUG] [Thread-199092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:08:41.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:08:41.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:08:41.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:08:41.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:08:41.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:08:41.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:08:41.118 [DEBUG] [Thread-199092] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:08:48.917 [DEBUG] [Thread-199094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:09:03.967 [DEBUG] [Thread-199095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:09:06.195 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:09:06.196 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:09:11.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:09:11.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:09:11.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:09:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 8, 50), 0.8831, 94.2136, 0.0, 6.354, 10.7744, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:09:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:08:50
2026-04-13T01:09:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:09:13.024 [DEBUG] [Thread-199096] [transport.py] [_log()] starting thread (client mode): 0xb0fe9900
2026-04-13T01:09:13.024 [DEBUG] [Thread-199096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:09:13.043 [DEBUG] [Thread-199096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:09:13.044 [INFO] [Thread-199096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:09:13.047 [DEBUG] [Thread-199096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] client lang: <none>
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] server lang: <none>
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] kex follows: False
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] Compression: none
2026-04-13T01:09:13.048 [DEBUG] [Thread-199096] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:09:13.058 [DEBUG] [Thread-199096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:09:13.059 [DEBUG] [Thread-199096] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:09:13.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:09:13.061 [DEBUG] [Thread-199096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:09:13.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:09:13.063 [DEBUG] [Thread-199096] [transport.py] [_log()] userauth is OK
2026-04-13T01:09:13.063 [DEBUG] [Thread-199096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:09:13.063 [DEBUG] [Thread-199096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:09:13.063 [DEBUG] [Thread-199096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:09:13.063 [DEBUG] [Thread-199096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:09:13.088 [INFO] [Thread-199096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:09:13.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:09:13.809 [DEBUG] [Thread-199096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:09:13.809 [DEBUG] [Thread-199096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:09:13.809 [DEBUG] [Thread-199096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:09:13.850 [DEBUG] [Thread-199096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:09:13.851 [DEBUG] [Thread-199096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:09:13.854 [DEBUG] [Thread-199096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:09:13.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:09:13.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:09:13.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:09:13.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:09:13.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:09:13.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:09:13.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:09:13.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:09:13.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:09:13.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.964336 -999.00  +10.90   3.67     91   +9.60 1 2 1 3 1     0    0 1.01 -11.93 ZN.s. 3.7 3.7 208.4 4.6 11.5 -22.0 11.3 -21.1 11.1 -19.1 11.3 -21.1
2026-04-13T01:09:13.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:09:13.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:09:13.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.964336
2026-04-13T01:09:13.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:09:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:09:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:09:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:09:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:09:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:08:50', tmtdew=0.8831, humidity=94.2136, cloud=0.0, wind=6.354, temperature=10.7744, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:08:38.630', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:09:13.881 [DEBUG] [Thread-199096] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:09:13.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:09:13.977 [DEBUG] [Thread-199099] [transport.py] [_log()] starting thread (client mode): 0xb0fe8f70
2026-04-13T01:09:13.977 [DEBUG] [Thread-199099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:09:13.993 [DEBUG] [Thread-199099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:09:13.993 [INFO] [Thread-199099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:09:14.000 [DEBUG] [Thread-199099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] client lang: <none>
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] server lang: <none>
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] kex follows: False
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:09:14.001 [DEBUG] [Thread-199099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:09:14.002 [DEBUG] [Thread-199099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:09:14.002 [DEBUG] [Thread-199099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:09:14.002 [DEBUG] [Thread-199099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:09:14.002 [DEBUG] [Thread-199099] [transport.py] [_log()] Compression: none
2026-04-13T01:09:14.002 [DEBUG] [Thread-199099] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:09:14.060 [DEBUG] [Thread-199099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:09:14.060 [DEBUG] [Thread-199099] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:09:14.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:09:14.061 [DEBUG] [Thread-199099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:09:14.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:09:14.116 [DEBUG] [Thread-199099] [transport.py] [_log()] userauth is OK
2026-04-13T01:09:14.116 [DEBUG] [Thread-199099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:09:14.116 [DEBUG] [Thread-199099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:09:14.116 [DEBUG] [Thread-199099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:09:14.117 [DEBUG] [Thread-199099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:09:14.136 [INFO] [Thread-199099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:09:14.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:09:14.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:09:14.966 [DEBUG] [Thread-199099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:09:14.966 [DEBUG] [Thread-199099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:09:15.014 [DEBUG] [Thread-199099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:09:15.014 [DEBUG] [Thread-199099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:09:15.026 [DEBUG] [Thread-199099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:09:15.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:09:15.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:09:15.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:09:15.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:09:15.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:09:15.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:09:15.072 [DEBUG] [Thread-199099] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:09:19.003 [DEBUG] [Thread-199101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:09:27.567 [DEBUG] [Thread-199102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:09:34.051 [DEBUG] [Thread-199103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:09:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:09:45.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:09:45.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:09:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 9, 25), 0.996985, 93.0736, 0.0, 4.85352, 10.7704, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:09:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:09:25
2026-04-13T01:09:46.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:09:46.911 [DEBUG] [Thread-199104] [transport.py] [_log()] starting thread (client mode): 0xae509330
2026-04-13T01:09:46.911 [DEBUG] [Thread-199104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:09:46.932 [DEBUG] [Thread-199104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:09:46.932 [INFO] [Thread-199104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] client lang: <none>
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] server lang: <none>
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] kex follows: False
2026-04-13T01:09:46.933 [DEBUG] [Thread-199104] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:09:46.934 [DEBUG] [Thread-199104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:09:46.934 [DEBUG] [Thread-199104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:09:46.934 [DEBUG] [Thread-199104] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:09:46.934 [DEBUG] [Thread-199104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:09:46.934 [DEBUG] [Thread-199104] [transport.py] [_log()] Compression: none
2026-04-13T01:09:46.934 [DEBUG] [Thread-199104] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:09:46.951 [DEBUG] [Thread-199104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:09:46.952 [DEBUG] [Thread-199104] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:09:46.952 [DEBUG] [Thread-199104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:09:46.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:09:46.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:09:46.954 [DEBUG] [Thread-199104] [transport.py] [_log()] userauth is OK
2026-04-13T01:09:46.954 [DEBUG] [Thread-199104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:09:46.954 [DEBUG] [Thread-199104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:09:46.955 [DEBUG] [Thread-199104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:09:46.955 [DEBUG] [Thread-199104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:09:46.993 [INFO] [Thread-199104] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:09:46.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:09:47.787 [DEBUG] [Thread-199104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:09:47.787 [DEBUG] [Thread-199104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:09:47.787 [DEBUG] [Thread-199104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:09:47.829 [DEBUG] [Thread-199104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:09:47.829 [DEBUG] [Thread-199104] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:09:47.831 [DEBUG] [Thread-199104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:09:47.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:09:47.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:09:47.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:09:47.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:09:47.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:09:47.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:09:47.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:09:47.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:09:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:09:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.964683 -999.00  +10.90   2.83     91   +9.60 1 2 1 3 1     0    0 1.01 -10.90 ZN.s. 2.8 2.8 202.8 3.9 11.4 -22.0 11.3 -20.9 11.1 -19.1 11.3 -21.0
2026-04-13T01:09:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:09:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:09:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.964683
2026-04-13T01:09:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:09:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:09:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:09:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:09:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:09:47.855 [DEBUG] [Thread-199104] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:09:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:09:25', tmtdew=0.996985, humidity=93.0736, cloud=0.0, wind=4.85352, temperature=10.7704, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:09:08.611', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:09:47.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:09:47.960 [DEBUG] [Thread-199107] [transport.py] [_log()] starting thread (client mode): 0xae50a800
2026-04-13T01:09:47.960 [DEBUG] [Thread-199107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:09:47.975 [DEBUG] [Thread-199107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:09:47.975 [INFO] [Thread-199107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] client lang: <none>
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] server lang: <none>
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] kex follows: False
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:09:47.983 [DEBUG] [Thread-199107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:09:47.984 [DEBUG] [Thread-199107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:09:47.984 [DEBUG] [Thread-199107] [transport.py] [_log()] Compression: none
2026-04-13T01:09:47.984 [DEBUG] [Thread-199107] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:09:48.039 [DEBUG] [Thread-199107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:09:48.040 [DEBUG] [Thread-199107] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:09:48.041 [DEBUG] [Thread-199107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:09:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:09:48.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:09:48.097 [DEBUG] [Thread-199107] [transport.py] [_log()] userauth is OK
2026-04-13T01:09:48.098 [DEBUG] [Thread-199107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:09:48.098 [DEBUG] [Thread-199107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:09:48.098 [DEBUG] [Thread-199107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:09:48.098 [DEBUG] [Thread-199107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:09:48.116 [INFO] [Thread-199107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:09:48.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:09:48.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:09:48.961 [DEBUG] [Thread-199107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:09:48.961 [DEBUG] [Thread-199107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:09:49.009 [DEBUG] [Thread-199107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:09:49.009 [DEBUG] [Thread-199107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:09:49.021 [DEBUG] [Thread-199107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:09:49.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:09:49.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:09:49.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:09:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:09:49.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:09:49.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:09:49.065 [DEBUG] [Thread-199107] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:09:49.087 [DEBUG] [Thread-199109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:04.140 [DEBUG] [Thread-199110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:06.403 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:06.404 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:10:19.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:10:19.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:10:19.176 [DEBUG] [Thread-199111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:20.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 10), 1.05441, 93.0236, 0.0, 4.99464, 10.7373, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:10:20.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:10:00
2026-04-13T01:10:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:10:20.907 [DEBUG] [Thread-199112] [transport.py] [_log()] starting thread (client mode): 0xb39c7910
2026-04-13T01:10:20.907 [DEBUG] [Thread-199112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:10:20.926 [DEBUG] [Thread-199112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:10:20.927 [INFO] [Thread-199112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:10:20.929 [DEBUG] [Thread-199112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] client lang: <none>
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] server lang: <none>
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] kex follows: False
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:10:20.930 [DEBUG] [Thread-199112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:10:20.931 [DEBUG] [Thread-199112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:10:20.931 [DEBUG] [Thread-199112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:10:20.931 [DEBUG] [Thread-199112] [transport.py] [_log()] Compression: none
2026-04-13T01:10:20.931 [DEBUG] [Thread-199112] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:10:20.952 [DEBUG] [Thread-199112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:10:20.953 [DEBUG] [Thread-199112] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:10:20.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:10:20.954 [DEBUG] [Thread-199112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:10:20.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:10:20.997 [DEBUG] [Thread-199112] [transport.py] [_log()] userauth is OK
2026-04-13T01:10:20.997 [DEBUG] [Thread-199112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:10:20.998 [DEBUG] [Thread-199112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:10:20.998 [DEBUG] [Thread-199112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:10:20.998 [DEBUG] [Thread-199112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:10:21.029 [INFO] [Thread-199112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:10:21.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:10:22.185 [DEBUG] [Thread-199112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:10:22.186 [DEBUG] [Thread-199112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:10:22.187 [DEBUG] [Thread-199112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:10:22.227 [DEBUG] [Thread-199112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:10:22.227 [DEBUG] [Thread-199112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:10:22.230 [DEBUG] [Thread-199112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:10:22.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:10:22.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:10:22.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:10:22.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:10:22.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:10:22.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:10:22.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:10:22.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:10:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:10:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.965030 -999.00  +10.80   2.54     91   +9.50 1 2 1 3 1     0    0 1.02 -10.71 Z.... 2.5 2.5 214.2 4.5 11.5 -22.1 11.3 -20.9 11.1 -19.0 11.3 -20.8
2026-04-13T01:10:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:10:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:10:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.965030
2026-04-13T01:10:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:10:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:10:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:10:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:10:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:10:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:10:00', tmtdew=1.05441, humidity=93.0236, cloud=0.0, wind=4.99464, temperature=10.7373, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:09:38.592', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:10:22.273 [DEBUG] [Thread-199112] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:10:22.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:10:22.366 [DEBUG] [Thread-199115] [transport.py] [_log()] starting thread (client mode): 0xb0feaa70
2026-04-13T01:10:22.366 [DEBUG] [Thread-199115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:10:22.381 [DEBUG] [Thread-199115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:10:22.381 [INFO] [Thread-199115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] client lang: <none>
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] server lang: <none>
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] kex follows: False
2026-04-13T01:10:22.388 [DEBUG] [Thread-199115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:10:22.389 [DEBUG] [Thread-199115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:10:22.389 [DEBUG] [Thread-199115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:10:22.389 [DEBUG] [Thread-199115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:10:22.389 [DEBUG] [Thread-199115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:10:22.389 [DEBUG] [Thread-199115] [transport.py] [_log()] Compression: none
2026-04-13T01:10:22.389 [DEBUG] [Thread-199115] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:10:22.447 [DEBUG] [Thread-199115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:10:22.447 [DEBUG] [Thread-199115] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:10:22.448 [DEBUG] [Thread-199115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:10:22.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:10:22.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:10:22.504 [DEBUG] [Thread-199115] [transport.py] [_log()] userauth is OK
2026-04-13T01:10:22.504 [DEBUG] [Thread-199115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:10:22.504 [DEBUG] [Thread-199115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:10:22.504 [DEBUG] [Thread-199115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:10:22.505 [DEBUG] [Thread-199115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:10:22.529 [INFO] [Thread-199115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:10:22.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:10:22.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:10:23.351 [DEBUG] [Thread-199115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:10:23.351 [DEBUG] [Thread-199115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:10:23.399 [DEBUG] [Thread-199115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:10:23.399 [DEBUG] [Thread-199115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:10:23.408 [DEBUG] [Thread-199115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:10:23.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:10:23.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:10: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') -> 00000000
2026-04-13T01:10:23.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:10:23.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:10:23.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:10:23.445 [DEBUG] [Thread-199115] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:10:27.645 [DEBUG] [Thread-199117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:34.215 [DEBUG] [Thread-199118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:49.273 [DEBUG] [Thread-199119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:10:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:10:53.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:10:53.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:10:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 10, 36), 0.88794, 94.1804, 0.0, 6.63624, 10.708, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:10:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:10:36
2026-04-13T01:10:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:10:55.286 [DEBUG] [Thread-199120] [transport.py] [_log()] starting thread (client mode): 0xae508520
2026-04-13T01:10:55.286 [DEBUG] [Thread-199120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:10:55.308 [DEBUG] [Thread-199120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:10:55.308 [INFO] [Thread-199120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:10:55.311 [DEBUG] [Thread-199120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] client lang: <none>
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] server lang: <none>
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] kex follows: False
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] Compression: none
2026-04-13T01:10:55.312 [DEBUG] [Thread-199120] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:10:55.324 [DEBUG] [Thread-199120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:10:55.325 [DEBUG] [Thread-199120] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:10:55.326 [DEBUG] [Thread-199120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:10:55.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:10:55.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:10:55.328 [DEBUG] [Thread-199120] [transport.py] [_log()] userauth is OK
2026-04-13T01:10:55.328 [DEBUG] [Thread-199120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:10:55.328 [DEBUG] [Thread-199120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:10:55.329 [DEBUG] [Thread-199120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:10:55.329 [DEBUG] [Thread-199120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:10:55.348 [INFO] [Thread-199120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:10:55.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:10:56.136 [DEBUG] [Thread-199120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:10:56.136 [DEBUG] [Thread-199120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:10:56.137 [DEBUG] [Thread-199120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:10:56.177 [DEBUG] [Thread-199120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:10:56.177 [DEBUG] [Thread-199120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:10:56.181 [DEBUG] [Thread-199120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:10:56.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:10:56.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:10:56.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:10:56.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:10:56.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:10:56.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:10:56.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:10:56.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:10:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:10:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.965377 -999.00  +10.90   4.10     91   +9.50 1 2 1 3 1     0    0 1.06 -9.54 ZN.S. 4.1 4.1 201.0 4.9 11.5 -22.1 11.3 -20.9 11.1 -19.0 11.3 -20.9
2026-04-13T01:10:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:10:56.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:10:56.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.965377
2026-04-13T01:10:56.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:10:56.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:10:56.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:10:56.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:10:56.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:10:56.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:10:36', tmtdew=0.88794, humidity=94.1804, cloud=0.0, wind=6.63624, temperature=10.708, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:10:08.573', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:10:56.206 [DEBUG] [Thread-199120] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:10:56.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:10:56.299 [DEBUG] [Thread-199123] [transport.py] [_log()] starting thread (client mode): 0xae50abc0
2026-04-13T01:10:56.299 [DEBUG] [Thread-199123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:10:56.314 [DEBUG] [Thread-199123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:10:56.314 [INFO] [Thread-199123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] client lang: <none>
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] server lang: <none>
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] kex follows: False
2026-04-13T01:10:56.322 [DEBUG] [Thread-199123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:10:56.323 [DEBUG] [Thread-199123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:10:56.323 [DEBUG] [Thread-199123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:10:56.323 [DEBUG] [Thread-199123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:10:56.323 [DEBUG] [Thread-199123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:10:56.323 [DEBUG] [Thread-199123] [transport.py] [_log()] Compression: none
2026-04-13T01:10:56.323 [DEBUG] [Thread-199123] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:10:56.379 [DEBUG] [Thread-199123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:10:56.380 [DEBUG] [Thread-199123] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:10:56.380 [DEBUG] [Thread-199123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:10:56.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:10:56.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:10:56.436 [DEBUG] [Thread-199123] [transport.py] [_log()] userauth is OK
2026-04-13T01:10:56.436 [DEBUG] [Thread-199123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:10:56.436 [DEBUG] [Thread-199123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:10:56.436 [DEBUG] [Thread-199123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:10:56.436 [DEBUG] [Thread-199123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:10:56.455 [INFO] [Thread-199123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:10:56.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:10:56.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:10:57.283 [DEBUG] [Thread-199123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:10:57.283 [DEBUG] [Thread-199123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:10:57.331 [DEBUG] [Thread-199123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:10:57.331 [DEBUG] [Thread-199123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:10:57.339 [DEBUG] [Thread-199123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:10:57.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:10: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')
2026-04-13T01:10:57.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:10:57.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:10:57.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:10:57.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:10:57.374 [DEBUG] [Thread-199123] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:11:04.309 [DEBUG] [Thread-199125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:11:06.609 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:11:06.610 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:11:19.361 [DEBUG] [Thread-199126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:11:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:11:27.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:11:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:11:27.721 [DEBUG] [Thread-199127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:11:28.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 11, 11), 1.09144, 93.1068, 0.0, 4.94172, 10.7706, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:11:28.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:11:11
2026-04-13T01:11:29.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:11:29.306 [DEBUG] [Thread-199128] [transport.py] [_log()] starting thread (client mode): 0xae508220
2026-04-13T01:11:29.306 [DEBUG] [Thread-199128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:11:29.326 [DEBUG] [Thread-199128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:11:29.326 [INFO] [Thread-199128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:11:29.329 [DEBUG] [Thread-199128] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] client lang: <none>
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] server lang: <none>
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] kex follows: False
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] Compression: none
2026-04-13T01:11:29.330 [DEBUG] [Thread-199128] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:11:29.345 [DEBUG] [Thread-199128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:11:29.346 [DEBUG] [Thread-199128] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:11:29.346 [DEBUG] [Thread-199128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:11:29.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:11:29.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:11:29.347 [DEBUG] [Thread-199128] [transport.py] [_log()] userauth is OK
2026-04-13T01:11:29.347 [DEBUG] [Thread-199128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:11:29.347 [DEBUG] [Thread-199128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:11:29.347 [DEBUG] [Thread-199128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:11:29.347 [DEBUG] [Thread-199128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:11:29.362 [INFO] [Thread-199128] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:11:29.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:11:30.152 [DEBUG] [Thread-199128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:11:30.152 [DEBUG] [Thread-199128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:11:30.153 [DEBUG] [Thread-199128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:11:30.193 [DEBUG] [Thread-199128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:11:30.193 [DEBUG] [Thread-199128] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:11:30.196 [DEBUG] [Thread-199128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:11:30.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:11:30.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:11:30.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:11:30.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:11:30.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:11:30.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:11:30.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:11:30.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:11:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:11:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.965724 -999.00  +10.90   3.96     91   +9.50 1 2 1 3 1     0    0 1.04 -9.89 ZN.S. 4.0 4.0 196.0 4.3 11.5 -22.1 11.4 -20.9 11.1 -19.0 11.3 -20.9
2026-04-13T01:11:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:11:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:11:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.965724
2026-04-13T01:11:30.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:11:30.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:11:30.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:11:30.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:11:30.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:11:30.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:11:11', tmtdew=1.09144, humidity=93.1068, cloud=0.0, wind=4.94172, temperature=10.7706, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:10:38.554', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:11:30.222 [DEBUG] [Thread-199128] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:11:30.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:11:30.316 [DEBUG] [Thread-199131] [transport.py] [_log()] starting thread (client mode): 0xae5f3a90
2026-04-13T01:11:30.316 [DEBUG] [Thread-199131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:11:30.334 [DEBUG] [Thread-199131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:11:30.334 [INFO] [Thread-199131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:11:30.342 [DEBUG] [Thread-199131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:11:30.342 [DEBUG] [Thread-199131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:11:30.342 [DEBUG] [Thread-199131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:11:30.342 [DEBUG] [Thread-199131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] client lang: <none>
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] server lang: <none>
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] kex follows: False
2026-04-13T01:11:30.343 [DEBUG] [Thread-199131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:11:30.344 [DEBUG] [Thread-199131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:11:30.344 [DEBUG] [Thread-199131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:11:30.344 [DEBUG] [Thread-199131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:11:30.344 [DEBUG] [Thread-199131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:11:30.344 [DEBUG] [Thread-199131] [transport.py] [_log()] Compression: none
2026-04-13T01:11:30.344 [DEBUG] [Thread-199131] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:11:30.400 [DEBUG] [Thread-199131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:11:30.400 [DEBUG] [Thread-199131] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:11:30.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:11:30.401 [DEBUG] [Thread-199131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:11:30.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:11:30.455 [DEBUG] [Thread-199131] [transport.py] [_log()] userauth is OK
2026-04-13T01:11:30.455 [DEBUG] [Thread-199131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:11:30.456 [DEBUG] [Thread-199131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:11:30.456 [DEBUG] [Thread-199131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:11:30.456 [DEBUG] [Thread-199131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:11:30.473 [INFO] [Thread-199131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:11:30.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:11:30.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:11:31.270 [DEBUG] [Thread-199131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:11:31.270 [DEBUG] [Thread-199131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:11:31.318 [DEBUG] [Thread-199131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:11:31.318 [DEBUG] [Thread-199131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:11:31.327 [DEBUG] [Thread-199131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:11:31.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:11:31.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:11:31.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:11:31.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:11:31.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:11:31.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:11:31.363 [DEBUG] [Thread-199131] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:11:34.396 [DEBUG] [Thread-199133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:11:49.454 [DEBUG] [Thread-199134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:12:01.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:12:01.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:12:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:12:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 11, 47), 0.87255, 94.2802, 0.0, 5.75424, 10.7746, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:12:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:11:47
2026-04-13T01:12:03.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:12:03.184 [DEBUG] [Thread-199135] [transport.py] [_log()] starting thread (client mode): 0xb0fea080
2026-04-13T01:12:03.184 [DEBUG] [Thread-199135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:12:03.200 [DEBUG] [Thread-199135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:12:03.200 [INFO] [Thread-199135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] client lang: <none>
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] server lang: <none>
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] kex follows: False
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] Compression: none
2026-04-13T01:12:03.202 [DEBUG] [Thread-199135] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:12:03.215 [DEBUG] [Thread-199135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:12:03.215 [DEBUG] [Thread-199135] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:12:03.216 [DEBUG] [Thread-199135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:12:03.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:12:03.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:12:03.217 [DEBUG] [Thread-199135] [transport.py] [_log()] userauth is OK
2026-04-13T01:12:03.217 [DEBUG] [Thread-199135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:12:03.217 [DEBUG] [Thread-199135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:12:03.217 [DEBUG] [Thread-199135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:12:03.217 [DEBUG] [Thread-199135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:12:03.230 [INFO] [Thread-199135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:12:03.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:12:04.000 [DEBUG] [Thread-199135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:12:04.001 [DEBUG] [Thread-199135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:12:04.001 [DEBUG] [Thread-199135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:12:04.042 [DEBUG] [Thread-199135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:12:04.042 [DEBUG] [Thread-199135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:12:04.044 [DEBUG] [Thread-199135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:12:04.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:12:04.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:12:04.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:12:04.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:12:04.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:12:04.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:12:04.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.966072 -999.00  +10.90   2.43     91   +9.50 1 2 1 3 1     0    0 1.08 -9.11 ..eS. 2.4 2.4 195.0 4.2 11.5 -22.1 11.3 -21.1 11.1 -18.9 11.3 -21.0
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.966072
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:12:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:11:47', tmtdew=0.87255, humidity=94.2802, cloud=0.0, wind=5.75424, temperature=10.7746, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:11:08.621', atlas_cloud=2, atlas_rain=1, zp_data=[0.44974999999999987, 0.45225000000000115, 0.45225000000000115, 0.5744999999999987, nan, nan, nan, nan, nan, nan, 1.4052499999999997, 2.6494999999999997, nan, nan, 0.26149999999999807, nan, 2.2067499999999995, 2.5305, 1.3059999999999992, nan, nan, nan, nan, nan, 2.5199999999999996, 0.27999999999999936, 0.24725000000000108, 0.4745000000000008, 0.5185000000000004, 0.8290000000000006, 1.317000000000001, 2.6260000000000012, 0.9047499999999999], zp_timestamp='2026-04-12T23:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:12:04.066 [DEBUG] [Thread-199135] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:12:04.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:12:04.147 [DEBUG] [Thread-199138] [transport.py] [_log()] starting thread (client mode): 0xb0feabf0
2026-04-13T01:12:04.147 [DEBUG] [Thread-199138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:12:04.162 [DEBUG] [Thread-199138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:12:04.162 [INFO] [Thread-199138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] client lang: <none>
2026-04-13T01:12:04.169 [DEBUG] [Thread-199138] [transport.py] [_log()] server lang: <none>
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] kex follows: False
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] Compression: none
2026-04-13T01:12:04.170 [DEBUG] [Thread-199138] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:12:04.232 [DEBUG] [Thread-199138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:12:04.233 [DEBUG] [Thread-199138] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:12:04.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:12:04.235 [DEBUG] [Thread-199138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:12:04.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:12:04.292 [DEBUG] [Thread-199138] [transport.py] [_log()] userauth is OK
2026-04-13T01:12:04.292 [DEBUG] [Thread-199138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:12:04.292 [DEBUG] [Thread-199138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:12:04.292 [DEBUG] [Thread-199138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:12:04.292 [DEBUG] [Thread-199138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:12:04.312 [INFO] [Thread-199138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:12:04.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:12:04.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:12:04.491 [DEBUG] [Thread-199140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:12:05.139 [DEBUG] [Thread-199138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:12:05.139 [DEBUG] [Thread-199138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:12:05.186 [DEBUG] [Thread-199138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:12:05.186 [DEBUG] [Thread-199138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:12:05.195 [DEBUG] [Thread-199138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:12:05.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:12: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')
2026-04-13T01:12:05.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:12:05.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:12:05.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:12:05.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:12:05.230 [DEBUG] [Thread-199138] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:12:06.813 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:12:06.814 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:12:19.551 [DEBUG] [Thread-199141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:12:27.792 [DEBUG] [Thread-199142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:12:34.586 [DEBUG] [Thread-199143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:12:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:12:35.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:12:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:12:36.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 12, 22), 1.09415, 93.0904, 0.0, 4.85352, 10.7873, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:12:36.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:12:22
2026-04-13T01:12:36.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:12:37.074 [DEBUG] [Thread-199144] [transport.py] [_log()] starting thread (client mode): 0xb0fea110
2026-04-13T01:12:37.074 [DEBUG] [Thread-199144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:12:37.094 [DEBUG] [Thread-199144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:12:37.094 [INFO] [Thread-199144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:12:37.096 [DEBUG] [Thread-199144] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:12:37.096 [DEBUG] [Thread-199144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] client lang: <none>
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] server lang: <none>
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] kex follows: False
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:12:37.097 [DEBUG] [Thread-199144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:12:37.098 [DEBUG] [Thread-199144] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:12:37.098 [DEBUG] [Thread-199144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:12:37.098 [DEBUG] [Thread-199144] [transport.py] [_log()] Compression: none
2026-04-13T01:12:37.098 [DEBUG] [Thread-199144] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:12:37.113 [DEBUG] [Thread-199144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:12:37.113 [DEBUG] [Thread-199144] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:12:37.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:12:37.115 [DEBUG] [Thread-199144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:12:37.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:12:37.117 [DEBUG] [Thread-199144] [transport.py] [_log()] userauth is OK
2026-04-13T01:12:37.117 [DEBUG] [Thread-199144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:12:37.118 [DEBUG] [Thread-199144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:12:37.118 [DEBUG] [Thread-199144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:12:37.118 [DEBUG] [Thread-199144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:12:37.141 [INFO] [Thread-199144] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:12:37.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:12:37.903 [DEBUG] [Thread-199144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:12:37.903 [DEBUG] [Thread-199144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:12:37.904 [DEBUG] [Thread-199144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:12:37.944 [DEBUG] [Thread-199144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:12:37.944 [DEBUG] [Thread-199144] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:12:37.947 [DEBUG] [Thread-199144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:12:37.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:12:37.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:12:37.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:12:37.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:12:37.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:12:37.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:12:37.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:12:37.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:12:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:12:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.966419 -999.00  +11.00   4.19     90   +9.50 1 2 1 3 1     0    0 1.08 -7.96 .Nes. 4.2 4.2 205.8 5.3 11.5 -22.1 11.4 -21.0 11.1 -19.0 11.4 -20.9
2026-04-13T01:12:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:12:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:12:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.966419
2026-04-13T01:12:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:12:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:12:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:12:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:12:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:12:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:12:22', tmtdew=1.09415, humidity=93.0904, cloud=0.0, wind=4.85352, temperature=10.7873, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:11:38.602', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:12:37.969 [DEBUG] [Thread-199144] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:12:38.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:12:38.064 [DEBUG] [Thread-199147] [transport.py] [_log()] starting thread (client mode): 0xae519ba0
2026-04-13T01:12:38.064 [DEBUG] [Thread-199147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:12:38.079 [DEBUG] [Thread-199147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:12:38.079 [INFO] [Thread-199147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] client lang: <none>
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] server lang: <none>
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] kex follows: False
2026-04-13T01:12:38.087 [DEBUG] [Thread-199147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:12:38.088 [DEBUG] [Thread-199147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:12:38.088 [DEBUG] [Thread-199147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:12:38.088 [DEBUG] [Thread-199147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:12:38.088 [DEBUG] [Thread-199147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:12:38.088 [DEBUG] [Thread-199147] [transport.py] [_log()] Compression: none
2026-04-13T01:12:38.088 [DEBUG] [Thread-199147] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:12:38.143 [DEBUG] [Thread-199147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:12:38.143 [DEBUG] [Thread-199147] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:12:38.144 [DEBUG] [Thread-199147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:12:38.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:12:38.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:12:38.199 [DEBUG] [Thread-199147] [transport.py] [_log()] userauth is OK
2026-04-13T01:12:38.200 [DEBUG] [Thread-199147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:12:38.200 [DEBUG] [Thread-199147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:12:38.200 [DEBUG] [Thread-199147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:12:38.200 [DEBUG] [Thread-199147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:12:38.219 [INFO] [Thread-199147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:12:38.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:12:38.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:12:39.040 [DEBUG] [Thread-199147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:12:39.040 [DEBUG] [Thread-199147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:12:39.088 [DEBUG] [Thread-199147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:12:39.088 [DEBUG] [Thread-199147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:12:39.098 [DEBUG] [Thread-199147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:12:39.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:12:39.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:12:39.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:12:39.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:12:39.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:12:39.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:12:39.135 [DEBUG] [Thread-199147] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:12:49.622 [DEBUG] [Thread-199149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:13:04.685 [DEBUG] [Thread-199150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:13:07.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:13:07.020 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:13:09.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:13:09.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:13:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:13:10.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 12, 57), 1.0916, 93.1071, 0.0, 5.11812, 10.804, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:13:10.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:12:57
2026-04-13T01:13:10.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:13:10.965 [DEBUG] [Thread-199151] [transport.py] [_log()] starting thread (client mode): 0xb0feb1f0
2026-04-13T01:13:10.965 [DEBUG] [Thread-199151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:13:10.985 [DEBUG] [Thread-199151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:13:10.985 [INFO] [Thread-199151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:13:10.988 [DEBUG] [Thread-199151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:13:10.988 [DEBUG] [Thread-199151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:13:10.988 [DEBUG] [Thread-199151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:13:10.988 [DEBUG] [Thread-199151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:10.988 [DEBUG] [Thread-199151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] client lang: <none>
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] server lang: <none>
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] kex follows: False
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] Compression: none
2026-04-13T01:13:10.989 [DEBUG] [Thread-199151] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:13:11.007 [DEBUG] [Thread-199151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:13:11.008 [DEBUG] [Thread-199151] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:13:11.008 [DEBUG] [Thread-199151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:13:11.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:13:11.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:13:11.010 [DEBUG] [Thread-199151] [transport.py] [_log()] userauth is OK
2026-04-13T01:13:11.010 [DEBUG] [Thread-199151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:13:11.010 [DEBUG] [Thread-199151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:13:11.011 [DEBUG] [Thread-199151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:13:11.011 [DEBUG] [Thread-199151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:13:11.034 [INFO] [Thread-199151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:13:11.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:13:11.851 [DEBUG] [Thread-199151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:13:11.851 [DEBUG] [Thread-199151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:13:11.852 [DEBUG] [Thread-199151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:13:11.892 [DEBUG] [Thread-199151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:13:11.892 [DEBUG] [Thread-199151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:13:11.896 [DEBUG] [Thread-199151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:13:11.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:13:11.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:13:11.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:13:11.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:13:11.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:13:11.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:13:11.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:13:11.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:13:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:13:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.967114 -999.00  +11.00   4.23     90   +9.50 1 2 1 3 1     0    0 1.19 -5.56 .Nes. 4.2 4.2 207.6 4.6 11.5 -22.1 11.4 -21.1 11.1 -19.0 11.3 -21.0
2026-04-13T01:13:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:13:11.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:13:11.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.967114
2026-04-13T01:13:11.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:13:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:13:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:13:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:13:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:13:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:12:57', tmtdew=1.0916, humidity=93.1071, cloud=0.0, wind=5.11812, temperature=10.804, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:12:38.650', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:13:11.923 [DEBUG] [Thread-199151] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:13:12.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:13:12.019 [DEBUG] [Thread-199154] [transport.py] [_log()] starting thread (client mode): 0xae5f1fc0
2026-04-13T01:13:12.019 [DEBUG] [Thread-199154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:13:12.034 [DEBUG] [Thread-199154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:13:12.034 [INFO] [Thread-199154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:13:12.042 [DEBUG] [Thread-199154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:13:12.042 [DEBUG] [Thread-199154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:13:12.042 [DEBUG] [Thread-199154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:13:12.042 [DEBUG] [Thread-199154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:12.042 [DEBUG] [Thread-199154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:12.042 [DEBUG] [Thread-199154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] client lang: <none>
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] server lang: <none>
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] kex follows: False
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] Compression: none
2026-04-13T01:13:12.043 [DEBUG] [Thread-199154] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:13:12.101 [DEBUG] [Thread-199154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:13:12.102 [DEBUG] [Thread-199154] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:13:12.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:13:12.103 [DEBUG] [Thread-199154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:13:12.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:13:12.160 [DEBUG] [Thread-199154] [transport.py] [_log()] userauth is OK
2026-04-13T01:13:12.160 [DEBUG] [Thread-199154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:13:12.160 [DEBUG] [Thread-199154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:13:12.161 [DEBUG] [Thread-199154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:13:12.161 [DEBUG] [Thread-199154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:13:12.185 [INFO] [Thread-199154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:13:12.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:13:12.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:13:13.027 [DEBUG] [Thread-199154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:13:13.027 [DEBUG] [Thread-199154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:13:13.075 [DEBUG] [Thread-199154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:13:13.075 [DEBUG] [Thread-199154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:13:13.084 [DEBUG] [Thread-199154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:13:13.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:13:13.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:13:13.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:13:13.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:13:13.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:13:13.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:13:13.118 [DEBUG] [Thread-199154] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:13:19.721 [DEBUG] [Thread-199156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:13:27.887 [DEBUG] [Thread-199157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:13:34.777 [DEBUG] [Thread-199158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:13:43.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:13:43.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:13:43.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:13:44.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 13, 34), 0.87796, 94.2473, 0.0, 6.91848, 10.8079, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:13:44.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:13:34
2026-04-13T01:13:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:13:45.186 [DEBUG] [Thread-199159] [transport.py] [_log()] starting thread (client mode): 0xae5637c0
2026-04-13T01:13:45.186 [DEBUG] [Thread-199159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:13:45.205 [DEBUG] [Thread-199159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:13:45.205 [INFO] [Thread-199159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:13:45.208 [DEBUG] [Thread-199159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:13:45.208 [DEBUG] [Thread-199159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:13:45.208 [DEBUG] [Thread-199159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] client lang: <none>
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] server lang: <none>
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] kex follows: False
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] Compression: none
2026-04-13T01:13:45.209 [DEBUG] [Thread-199159] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:13:45.225 [DEBUG] [Thread-199159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:13:45.225 [DEBUG] [Thread-199159] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:13:45.225 [DEBUG] [Thread-199159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:13:45.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:13:45.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:13:45.227 [DEBUG] [Thread-199159] [transport.py] [_log()] userauth is OK
2026-04-13T01:13:45.228 [DEBUG] [Thread-199159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:13:45.228 [DEBUG] [Thread-199159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:13:45.228 [DEBUG] [Thread-199159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:13:45.228 [DEBUG] [Thread-199159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:13:45.245 [INFO] [Thread-199159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:13:45.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:13:46.040 [DEBUG] [Thread-199159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:13:46.040 [DEBUG] [Thread-199159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:13:46.040 [DEBUG] [Thread-199159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:13:46.081 [DEBUG] [Thread-199159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:13:46.081 [DEBUG] [Thread-199159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:13:46.084 [DEBUG] [Thread-199159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:13:46.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:13:46.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:13:46.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:13:46.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:13:46.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:13:46.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:13:46.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:13:46.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.967461 -999.00  +11.00   3.77     90   +9.50 1 2 1 3 1     0    0 1.24 -4.38 Z.... 3.8 3.8 214.4 4.5 11.5 -22.1 11.4 -21.0 11.1 -19.0 11.4 -20.9
2026-04-13T01:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.967461
2026-04-13T01:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:13:46.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:13:46.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:13:46.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:13:46.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:13:46.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:13:34', tmtdew=0.87796, humidity=94.2473, cloud=0.0, wind=6.91848, temperature=10.8079, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:13:08.630', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:13:46.106 [DEBUG] [Thread-199159] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:13:46.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:13:46.204 [DEBUG] [Thread-199162] [transport.py] [_log()] starting thread (client mode): 0xae5f2d40
2026-04-13T01:13:46.204 [DEBUG] [Thread-199162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:13:46.219 [DEBUG] [Thread-199162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:13:46.219 [INFO] [Thread-199162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] client lang: <none>
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] server lang: <none>
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] kex follows: False
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:13:46.226 [DEBUG] [Thread-199162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:13:46.227 [DEBUG] [Thread-199162] [transport.py] [_log()] Compression: none
2026-04-13T01:13:46.227 [DEBUG] [Thread-199162] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:13:46.282 [DEBUG] [Thread-199162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:13:46.282 [DEBUG] [Thread-199162] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:13:46.283 [DEBUG] [Thread-199162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:13:46.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:13:46.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:13:46.339 [DEBUG] [Thread-199162] [transport.py] [_log()] userauth is OK
2026-04-13T01:13:46.339 [DEBUG] [Thread-199162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:13:46.339 [DEBUG] [Thread-199162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:13:46.339 [DEBUG] [Thread-199162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:13:46.339 [DEBUG] [Thread-199162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:13:46.357 [INFO] [Thread-199162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:13:46.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:13:46.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:13:47.193 [DEBUG] [Thread-199162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:13:47.193 [DEBUG] [Thread-199162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:13:47.241 [DEBUG] [Thread-199162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:13:47.241 [DEBUG] [Thread-199162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:13:47.250 [DEBUG] [Thread-199162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:13:47.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:13:47.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:13:47.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:13:47.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:13:47.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:13:47.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:13:47.284 [DEBUG] [Thread-199162] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:13:49.806 [DEBUG] [Thread-199164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:04.845 [DEBUG] [Thread-199165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:07.225 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:07.226 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:17.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:14:17.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:14:17.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:14:18.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 14, 9), 1.14422, 92.5906, 0.0, 5.18868, 10.854, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:14:18.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:14:09
2026-04-13T01:14:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:14:19.188 [DEBUG] [Thread-199166] [transport.py] [_log()] starting thread (client mode): 0xb0feb3d0
2026-04-13T01:14:19.188 [DEBUG] [Thread-199166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:14:19.208 [DEBUG] [Thread-199166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:14:19.208 [INFO] [Thread-199166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] client lang: <none>
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] server lang: <none>
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] kex follows: False
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:14:19.210 [DEBUG] [Thread-199166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:14:19.211 [DEBUG] [Thread-199166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:14:19.211 [DEBUG] [Thread-199166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:14:19.211 [DEBUG] [Thread-199166] [transport.py] [_log()] Compression: none
2026-04-13T01:14:19.211 [DEBUG] [Thread-199166] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:14:19.227 [DEBUG] [Thread-199166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:14:19.228 [DEBUG] [Thread-199166] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:14:19.228 [DEBUG] [Thread-199166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:14:19.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:14:19.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:14:19.230 [DEBUG] [Thread-199166] [transport.py] [_log()] userauth is OK
2026-04-13T01:14:19.230 [DEBUG] [Thread-199166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:14:19.230 [DEBUG] [Thread-199166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:14:19.230 [DEBUG] [Thread-199166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:14:19.231 [DEBUG] [Thread-199166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:14:19.254 [INFO] [Thread-199166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:14:19.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:14:19.871 [DEBUG] [Thread-199168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:20.035 [DEBUG] [Thread-199166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:14:20.035 [DEBUG] [Thread-199166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:14:20.036 [DEBUG] [Thread-199166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:14:20.077 [DEBUG] [Thread-199166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:14:20.077 [DEBUG] [Thread-199166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:14:20.080 [DEBUG] [Thread-199166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:14:20.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:14:20.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:14:20.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:14:20.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:14:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:14:20.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:14:20.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:14:20.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:14:20.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:14:20.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.967808 -999.00  +11.00   2.58     90   +9.50 1 2 1 3 1     0    0 1.21 -3.29 Z.es. 2.6 2.6 201.8 3.6 11.5 -22.2 11.4 -20.9 11.1 -19.0 11.3 -20.9
2026-04-13T01:14:20.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:14:20.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:14:20.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.967808
2026-04-13T01:14:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:14:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:14:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:14:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:14:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:14:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:14:09', tmtdew=1.14422, humidity=92.5906, cloud=0.0, wind=5.18868, temperature=10.854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:13:38.611', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:14:20.107 [DEBUG] [Thread-199166] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:14:20.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:14:20.203 [DEBUG] [Thread-199170] [transport.py] [_log()] starting thread (client mode): 0xb0fe9000
2026-04-13T01:14:20.204 [DEBUG] [Thread-199170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:14:20.224 [DEBUG] [Thread-199170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:14:20.224 [INFO] [Thread-199170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:14:20.234 [DEBUG] [Thread-199170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] client lang: <none>
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] server lang: <none>
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] kex follows: False
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] Compression: none
2026-04-13T01:14:20.235 [DEBUG] [Thread-199170] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:14:20.291 [DEBUG] [Thread-199170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:14:20.292 [DEBUG] [Thread-199170] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:14:20.292 [DEBUG] [Thread-199170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:14:20.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:14:20.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:14:20.348 [DEBUG] [Thread-199170] [transport.py] [_log()] userauth is OK
2026-04-13T01:14:20.348 [DEBUG] [Thread-199170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:14:20.348 [DEBUG] [Thread-199170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:14:20.348 [DEBUG] [Thread-199170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:14:20.348 [DEBUG] [Thread-199170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:14:20.370 [INFO] [Thread-199170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:14:20.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:14:20.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:14:21.208 [DEBUG] [Thread-199170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:14:21.208 [DEBUG] [Thread-199170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:14:21.257 [DEBUG] [Thread-199170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:14:21.257 [DEBUG] [Thread-199170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:14:21.266 [DEBUG] [Thread-199170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:14:21.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:14:21.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:14:21.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:14:21.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:14:21.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:14:21.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:14:21.301 [DEBUG] [Thread-199170] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:14:27.972 [DEBUG] [Thread-199172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:34.903 [DEBUG] [Thread-199173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:49.950 [DEBUG] [Thread-199174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:14:51.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:14:51.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:14:51.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:14:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 14, 44), 0.89854, 94.1148, 0.0, 6.49512, 10.7417, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:14:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:14:44
2026-04-13T01:14:52.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:14:53.108 [DEBUG] [Thread-199175] [transport.py] [_log()] starting thread (client mode): 0xae562290
2026-04-13T01:14:53.108 [DEBUG] [Thread-199175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:14:53.128 [DEBUG] [Thread-199175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:14:53.128 [INFO] [Thread-199175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:14:53.131 [DEBUG] [Thread-199175] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:14:53.131 [DEBUG] [Thread-199175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:14:53.131 [DEBUG] [Thread-199175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] client lang: <none>
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] server lang: <none>
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] kex follows: False
2026-04-13T01:14:53.132 [DEBUG] [Thread-199175] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:14:53.133 [DEBUG] [Thread-199175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:14:53.133 [DEBUG] [Thread-199175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:14:53.133 [DEBUG] [Thread-199175] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:14:53.133 [DEBUG] [Thread-199175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:14:53.133 [DEBUG] [Thread-199175] [transport.py] [_log()] Compression: none
2026-04-13T01:14:53.133 [DEBUG] [Thread-199175] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:14:53.151 [DEBUG] [Thread-199175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:14:53.151 [DEBUG] [Thread-199175] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:14:53.152 [DEBUG] [Thread-199175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:14:53.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:14:53.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:14:53.153 [DEBUG] [Thread-199175] [transport.py] [_log()] userauth is OK
2026-04-13T01:14:53.153 [DEBUG] [Thread-199175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:14:53.154 [DEBUG] [Thread-199175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:14:53.154 [DEBUG] [Thread-199175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:14:53.154 [DEBUG] [Thread-199175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:14:53.175 [INFO] [Thread-199175] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:14:53.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:14:53.936 [DEBUG] [Thread-199175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:14:53.936 [DEBUG] [Thread-199175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:14:53.937 [DEBUG] [Thread-199175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:14:53.977 [DEBUG] [Thread-199175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:14:53.977 [DEBUG] [Thread-199175] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:14:53.981 [DEBUG] [Thread-199175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:14:53.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:14:53.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:14:53.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:14:53.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:14:54.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:14:54.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:14:54.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:14:54.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:14:54.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:14:54.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.968155 -999.00  +10.90   3.72     90   +9.40 1 2 1 3 1     0    0 1.29 -2.26 Z.es. 3.7 3.7 206.4 4.2 11.5 -22.1 11.4 -20.9 11.1 -19.0 11.4 -21.2
2026-04-13T01:14:54.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:14:54.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:14:54.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.968155
2026-04-13T01:14:54.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:14:54.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:14:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:14:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:14:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:14:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:14:44', tmtdew=0.89854, humidity=94.1148, cloud=0.0, wind=6.49512, temperature=10.7417, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:14:08.592', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:14:54.007 [DEBUG] [Thread-199175] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:14:54.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:14:54.097 [DEBUG] [Thread-199178] [transport.py] [_log()] starting thread (client mode): 0xae518e50
2026-04-13T01:14:54.097 [DEBUG] [Thread-199178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:14:54.112 [DEBUG] [Thread-199178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:14:54.112 [INFO] [Thread-199178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:14:54.119 [DEBUG] [Thread-199178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:14:54.119 [DEBUG] [Thread-199178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:14:54.119 [DEBUG] [Thread-199178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:14:54.119 [DEBUG] [Thread-199178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:54.119 [DEBUG] [Thread-199178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] client lang: <none>
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] server lang: <none>
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] kex follows: False
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] Compression: none
2026-04-13T01:14:54.120 [DEBUG] [Thread-199178] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:14:54.180 [DEBUG] [Thread-199178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:14:54.180 [DEBUG] [Thread-199178] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:14:54.181 [DEBUG] [Thread-199178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:14:54.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:14:54.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:14:54.240 [DEBUG] [Thread-199178] [transport.py] [_log()] userauth is OK
2026-04-13T01:14:54.240 [DEBUG] [Thread-199178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:14:54.240 [DEBUG] [Thread-199178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:14:54.240 [DEBUG] [Thread-199178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:14:54.240 [DEBUG] [Thread-199178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:14:54.258 [INFO] [Thread-199178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:14:54.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:14:54.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:14:55.072 [DEBUG] [Thread-199178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:14:55.073 [DEBUG] [Thread-199178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:14:55.121 [DEBUG] [Thread-199178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:14:55.121 [DEBUG] [Thread-199178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:14:55.131 [DEBUG] [Thread-199178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:14:55.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:14:55.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:14:55.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:14:55.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:14:55.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:14:55.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:14:55.170 [DEBUG] [Thread-199178] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:15:04.989 [DEBUG] [Thread-199180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:15:07.433 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:15:07.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:15:20.043 [DEBUG] [Thread-199181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:15:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:15:25.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:15:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:15:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 14, 44), 0.89854, 94.1148, 0.0, 6.49512, 10.7417, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:15:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:14:44
2026-04-13T01:15:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:15:27.041 [DEBUG] [Thread-199182] [transport.py] [_log()] starting thread (client mode): 0xae563910
2026-04-13T01:15:27.041 [DEBUG] [Thread-199182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:15:27.060 [DEBUG] [Thread-199182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:15:27.060 [INFO] [Thread-199182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] client lang: <none>
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] server lang: <none>
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] kex follows: False
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] Compression: none
2026-04-13T01:15:27.064 [DEBUG] [Thread-199182] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:15:27.080 [DEBUG] [Thread-199182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:15:27.080 [DEBUG] [Thread-199182] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:15:27.080 [DEBUG] [Thread-199182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:15:27.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:15:27.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:15:27.081 [DEBUG] [Thread-199182] [transport.py] [_log()] userauth is OK
2026-04-13T01:15:27.081 [DEBUG] [Thread-199182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:15:27.081 [DEBUG] [Thread-199182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:15:27.081 [DEBUG] [Thread-199182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:15:27.081 [DEBUG] [Thread-199182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:15:27.094 [INFO] [Thread-199182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:15:27.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:15:27.912 [DEBUG] [Thread-199182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:15:27.912 [DEBUG] [Thread-199182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:15:27.912 [DEBUG] [Thread-199182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:15:27.953 [DEBUG] [Thread-199182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:15:27.953 [DEBUG] [Thread-199182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:15:27.954 [DEBUG] [Thread-199182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:15:27.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:15:27.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:15:27.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:15:27.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:15:27.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:15:27.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:15:27.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:15:27.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:15:27.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:15:27.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.968502 -999.00  +10.90   2.96     90   +9.40 1 2 1 3 1     0    0 1.30 -1.08 Z.... 3.0 3.0 212.6 4.1 11.5 -22.2 11.4 -20.9 11.1 -19.0 11.3 -20.9
2026-04-13T01:15:27.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:15:27.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:15:27.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.968502
2026-04-13T01:15:27.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:15:27.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:15:27.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:15:27.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:15:27.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:15:27.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:14:44', tmtdew=0.89854, humidity=94.1148, cloud=0.0, wind=6.49512, temperature=10.7417, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:14:38.573', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:15:27.978 [DEBUG] [Thread-199182] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:15:28.044 [DEBUG] [Thread-199185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:15:28.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:15:28.071 [DEBUG] [Thread-199186] [transport.py] [_log()] starting thread (client mode): 0xb39c7910
2026-04-13T01:15:28.071 [DEBUG] [Thread-199186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:15:28.089 [DEBUG] [Thread-199186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:15:28.089 [INFO] [Thread-199186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:15:28.096 [DEBUG] [Thread-199186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:15:28.096 [DEBUG] [Thread-199186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:15:28.096 [DEBUG] [Thread-199186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:15:28.096 [DEBUG] [Thread-199186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:15:28.096 [DEBUG] [Thread-199186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] client lang: <none>
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] server lang: <none>
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] kex follows: False
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] Compression: none
2026-04-13T01:15:28.097 [DEBUG] [Thread-199186] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:15:28.154 [DEBUG] [Thread-199186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:15:28.155 [DEBUG] [Thread-199186] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:15:28.155 [DEBUG] [Thread-199186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:15:28.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:15:28.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:15:28.211 [DEBUG] [Thread-199186] [transport.py] [_log()] userauth is OK
2026-04-13T01:15:28.211 [DEBUG] [Thread-199186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:15:28.211 [DEBUG] [Thread-199186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:15:28.211 [DEBUG] [Thread-199186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:15:28.211 [DEBUG] [Thread-199186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:15:28.230 [INFO] [Thread-199186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:15:28.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:15:28.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:15:29.035 [DEBUG] [Thread-199186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:15:29.035 [DEBUG] [Thread-199186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:15:29.083 [DEBUG] [Thread-199186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:15:29.083 [DEBUG] [Thread-199186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:15:29.092 [DEBUG] [Thread-199186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:15:29.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:15:29.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:15:29.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:15:29.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:15:29.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:15:29.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:15:29.129 [DEBUG] [Thread-199186] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:15:35.086 [DEBUG] [Thread-199188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:15:50.136 [DEBUG] [Thread-199189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:15:59.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:15:59.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:15:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:16:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 15, 20), 1.1442, 92.5907, 0.0, 4.92408, 10.8541, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:16:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:15:20
2026-04-13T01:16:00.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:16:01.004 [DEBUG] [Thread-199190] [transport.py] [_log()] starting thread (client mode): 0xb0fcf1f0
2026-04-13T01:16:01.004 [DEBUG] [Thread-199190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:16:01.023 [DEBUG] [Thread-199190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:16:01.023 [INFO] [Thread-199190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:16:01.026 [DEBUG] [Thread-199190] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:16:01.026 [DEBUG] [Thread-199190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:16:01.026 [DEBUG] [Thread-199190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:16:01.026 [DEBUG] [Thread-199190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:01.026 [DEBUG] [Thread-199190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] client lang: <none>
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] server lang: <none>
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] kex follows: False
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] Compression: none
2026-04-13T01:16:01.027 [DEBUG] [Thread-199190] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:16:01.043 [DEBUG] [Thread-199190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:16:01.043 [DEBUG] [Thread-199190] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:16:01.043 [DEBUG] [Thread-199190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:16:01.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:16:01.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:16:01.044 [DEBUG] [Thread-199190] [transport.py] [_log()] userauth is OK
2026-04-13T01:16:01.044 [DEBUG] [Thread-199190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:16:01.044 [DEBUG] [Thread-199190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:16:01.044 [DEBUG] [Thread-199190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:16:01.044 [DEBUG] [Thread-199190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:16:01.063 [INFO] [Thread-199190] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:16:01.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:16:01.913 [DEBUG] [Thread-199190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:16:01.913 [DEBUG] [Thread-199190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:16:01.913 [DEBUG] [Thread-199190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:16:01.955 [DEBUG] [Thread-199190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:16:01.955 [DEBUG] [Thread-199190] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:16:01.958 [DEBUG] [Thread-199190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:16:01.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:16:01.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:16:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:16:01.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:16:01.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:16:01.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:16:01.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:16:01.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:16:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:16:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.968849 -999.00  +10.90   4.28     90   +9.40 1 2 1 3 1     0    0 1.36 0.46 Z.... 4.3 4.3 209.6 4.8 11.5 -22.1 11.4 -21.1 11.1 -19.0 11.3 -20.9
2026-04-13T01:16:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:16:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:16:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.968849
2026-04-13T01:16:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:16:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:16:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:16:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:16:01.983 [DEBUG] [Thread-199190] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:16:01.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:16:01.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:15:20', tmtdew=1.1442, humidity=92.5907, cloud=0.0, wind=4.92408, temperature=10.8541, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:15:08.554', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:16:02.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:16:02.076 [DEBUG] [Thread-199193] [transport.py] [_log()] starting thread (client mode): 0xae5f3d30
2026-04-13T01:16:02.076 [DEBUG] [Thread-199193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:16:02.093 [DEBUG] [Thread-199193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:16:02.093 [INFO] [Thread-199193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:16:02.102 [DEBUG] [Thread-199193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:16:02.102 [DEBUG] [Thread-199193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] client lang: <none>
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] server lang: <none>
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] kex follows: False
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] Compression: none
2026-04-13T01:16:02.103 [DEBUG] [Thread-199193] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:16:02.158 [DEBUG] [Thread-199193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:16:02.159 [DEBUG] [Thread-199193] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:16:02.160 [DEBUG] [Thread-199193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:16:02.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:16:02.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:16:02.220 [DEBUG] [Thread-199193] [transport.py] [_log()] userauth is OK
2026-04-13T01:16:02.220 [DEBUG] [Thread-199193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:16:02.221 [DEBUG] [Thread-199193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:16:02.221 [DEBUG] [Thread-199193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:16:02.221 [DEBUG] [Thread-199193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:16:02.240 [INFO] [Thread-199193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:16:02.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:16:02.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:16:03.048 [DEBUG] [Thread-199193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:16:03.049 [DEBUG] [Thread-199193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:16:03.097 [DEBUG] [Thread-199193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:16:03.097 [DEBUG] [Thread-199193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:16:03.108 [DEBUG] [Thread-199193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:16:03.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:16:03.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:16:03.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:16:03.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:16:03.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:16:03.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:16:03.145 [DEBUG] [Thread-199193] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:16:05.170 [DEBUG] [Thread-199195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:16:07.637 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:16:07.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:16:20.226 [DEBUG] [Thread-199196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:16:28.133 [DEBUG] [Thread-199197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:16:33.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:16:33.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:16:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:16:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 15, 55), 1.20714, 92.0077, 0.0, 4.8006, 10.8209, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:16:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:15:55
2026-04-13T01:16:34.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:16:35.098 [DEBUG] [Thread-199198] [transport.py] [_log()] starting thread (client mode): 0xae560550
2026-04-13T01:16:35.099 [DEBUG] [Thread-199198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:16:35.120 [DEBUG] [Thread-199198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:16:35.120 [INFO] [Thread-199198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] client lang: <none>
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] server lang: <none>
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] kex follows: False
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] Compression: none
2026-04-13T01:16:35.123 [DEBUG] [Thread-199198] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:16:35.141 [DEBUG] [Thread-199198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:16:35.141 [DEBUG] [Thread-199198] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:16:35.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:16:35.142 [DEBUG] [Thread-199198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:16:35.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:16:35.144 [DEBUG] [Thread-199198] [transport.py] [_log()] userauth is OK
2026-04-13T01:16:35.145 [DEBUG] [Thread-199198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:16:35.145 [DEBUG] [Thread-199198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:16:35.145 [DEBUG] [Thread-199198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:16:35.145 [DEBUG] [Thread-199198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:16:35.181 [INFO] [Thread-199198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:16:35.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:16:35.268 [DEBUG] [Thread-199200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:16:35.986 [DEBUG] [Thread-199198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:16:35.987 [DEBUG] [Thread-199198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:16:35.987 [DEBUG] [Thread-199198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:16:36.028 [DEBUG] [Thread-199198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:16:36.029 [DEBUG] [Thread-199198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:16:36.032 [DEBUG] [Thread-199198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:16:36.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:16:36.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:16:36.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:16:36.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:16:36.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:16:36.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:16:36.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:16:36.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:16:36.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:16:36.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.969544 -999.00  +10.90   3.84     90   +9.40 1 2 1 3 1     0    0 1.50 2.89 .N.s. 3.8 3.8 207.4 4.1 11.5 -22.2 11.4 -21.0 11.1 -19.1 11.4 -20.9
2026-04-13T01:16:36.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:16:36.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:16:36.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.969544
2026-04-13T01:16:36.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:16:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:16:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:16:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:16:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:16:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:15:55', tmtdew=1.20714, humidity=92.0077, cloud=0.0, wind=4.8006, temperature=10.8209, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:16:08.602', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:16:36.062 [DEBUG] [Thread-199198] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:16:36.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:16:36.158 [DEBUG] [Thread-199202] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6a0
2026-04-13T01:16:36.158 [DEBUG] [Thread-199202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:16:36.173 [DEBUG] [Thread-199202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:16:36.173 [INFO] [Thread-199202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:16:36.180 [DEBUG] [Thread-199202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:16:36.180 [DEBUG] [Thread-199202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:16:36.180 [DEBUG] [Thread-199202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:16:36.180 [DEBUG] [Thread-199202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:36.180 [DEBUG] [Thread-199202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] client lang: <none>
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] server lang: <none>
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] kex follows: False
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] Compression: none
2026-04-13T01:16:36.181 [DEBUG] [Thread-199202] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:16:36.239 [DEBUG] [Thread-199202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:16:36.240 [DEBUG] [Thread-199202] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:16:36.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:16:36.241 [DEBUG] [Thread-199202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:16:36.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:16:36.295 [DEBUG] [Thread-199202] [transport.py] [_log()] userauth is OK
2026-04-13T01:16:36.296 [DEBUG] [Thread-199202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:16:36.296 [DEBUG] [Thread-199202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:16:36.296 [DEBUG] [Thread-199202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:16:36.296 [DEBUG] [Thread-199202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:16:36.320 [INFO] [Thread-199202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:16:36.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:16:36.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:16:37.115 [DEBUG] [Thread-199202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:16:37.115 [DEBUG] [Thread-199202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:16:37.163 [DEBUG] [Thread-199202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:16:37.163 [DEBUG] [Thread-199202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:16:37.172 [DEBUG] [Thread-199202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:16:37.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:16:37.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:16:37.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:16:37.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:16:37.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:16:37.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:16:37.209 [DEBUG] [Thread-199202] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:16:50.305 [DEBUG] [Thread-199204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:17:05.369 [DEBUG] [Thread-199205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:17:07.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:17:07.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:17:07.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:17:07.844 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:17:07.845 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:17:08.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 16, 31), 1.21756, 91.9415, 0.0, 4.67712, 10.8044, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:17:08.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:16:31
2026-04-13T01:17:09.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:17:09.170 [DEBUG] [Thread-199206] [transport.py] [_log()] starting thread (client mode): 0xb0fccf70
2026-04-13T01:17:09.171 [DEBUG] [Thread-199206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:17:09.191 [DEBUG] [Thread-199206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:17:09.191 [INFO] [Thread-199206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:09.192 [DEBUG] [Thread-199206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] client lang: <none>
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] server lang: <none>
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] kex follows: False
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] Compression: none
2026-04-13T01:17:09.193 [DEBUG] [Thread-199206] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:17:09.201 [DEBUG] [Thread-199206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:17:09.201 [DEBUG] [Thread-199206] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:17:09.201 [DEBUG] [Thread-199206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:17:09.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:17:09.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:17:09.203 [DEBUG] [Thread-199206] [transport.py] [_log()] userauth is OK
2026-04-13T01:17:09.204 [DEBUG] [Thread-199206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:17:09.204 [DEBUG] [Thread-199206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:17:09.204 [DEBUG] [Thread-199206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:17:09.204 [DEBUG] [Thread-199206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:17:09.222 [INFO] [Thread-199206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:17:09.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:17:09.997 [DEBUG] [Thread-199206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:17:09.997 [DEBUG] [Thread-199206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:17:09.998 [DEBUG] [Thread-199206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:17:10.038 [DEBUG] [Thread-199206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:17:10.038 [DEBUG] [Thread-199206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:17:10.042 [DEBUG] [Thread-199206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:17:10.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:17:10.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:17:10.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:17:10.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:17:10.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:17:10.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:17:10.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:17:10.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:17:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:17:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.969891 -999.00  +10.90   3.92     90   +9.40 1 2 1 3 1     0    0 1.50 4.30 .N.s. 3.9 3.9 217.8 4.6 11.5 -22.2 11.4 -21.0 11.1 -19.1 11.3 -21.0
2026-04-13T01:17:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:17:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:17:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.969891
2026-04-13T01:17:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:17:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:17:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:17:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:17:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:17:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:16:31', tmtdew=1.21756, humidity=91.9415, cloud=0.0, wind=4.67712, temperature=10.8044, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:16:38.582', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:17:10.072 [DEBUG] [Thread-199206] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:17:10.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:17:10.165 [DEBUG] [Thread-199209] [transport.py] [_log()] starting thread (client mode): 0xae563ca0
2026-04-13T01:17:10.165 [DEBUG] [Thread-199209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:17:10.180 [DEBUG] [Thread-199209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:17:10.181 [INFO] [Thread-199209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:17:10.188 [DEBUG] [Thread-199209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:17:10.188 [DEBUG] [Thread-199209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:17:10.188 [DEBUG] [Thread-199209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] client lang: <none>
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] server lang: <none>
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] kex follows: False
2026-04-13T01:17:10.189 [DEBUG] [Thread-199209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:17:10.190 [DEBUG] [Thread-199209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:17:10.190 [DEBUG] [Thread-199209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:17:10.190 [DEBUG] [Thread-199209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:17:10.190 [DEBUG] [Thread-199209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:17:10.190 [DEBUG] [Thread-199209] [transport.py] [_log()] Compression: none
2026-04-13T01:17:10.190 [DEBUG] [Thread-199209] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:17:10.245 [DEBUG] [Thread-199209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:17:10.245 [DEBUG] [Thread-199209] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:17:10.245 [DEBUG] [Thread-199209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:17:10.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:17:10.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:17:10.303 [DEBUG] [Thread-199209] [transport.py] [_log()] userauth is OK
2026-04-13T01:17:10.303 [DEBUG] [Thread-199209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:17:10.303 [DEBUG] [Thread-199209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:17:10.303 [DEBUG] [Thread-199209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:17:10.303 [DEBUG] [Thread-199209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:17:10.322 [INFO] [Thread-199209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:17:10.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:17:10.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:17:11.142 [DEBUG] [Thread-199209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:17:11.143 [DEBUG] [Thread-199209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:17:11.190 [DEBUG] [Thread-199209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:17:11.191 [DEBUG] [Thread-199209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:17:11.200 [DEBUG] [Thread-199209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:17:11.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:17:11.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:17:11.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:17:11.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:17:11.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:17:11.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:17:11.237 [DEBUG] [Thread-199209] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:17:20.407 [DEBUG] [Thread-199211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:17:28.196 [DEBUG] [Thread-199212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:17:35.457 [DEBUG] [Thread-199213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:17:41.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:17:41.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:17:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:17:42.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 17, 7), 1.22316, 91.9083, 0.0, 4.67712, 10.8542, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:17:42.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:17:07
2026-04-13T01:17:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:17:43.172 [DEBUG] [Thread-199214] [transport.py] [_log()] starting thread (client mode): 0xae5087c0
2026-04-13T01:17:43.172 [DEBUG] [Thread-199214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:17:43.192 [DEBUG] [Thread-199214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:17:43.192 [INFO] [Thread-199214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:17:43.195 [DEBUG] [Thread-199214] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:17:43.195 [DEBUG] [Thread-199214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:17:43.195 [DEBUG] [Thread-199214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] client lang: <none>
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] server lang: <none>
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] kex follows: False
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:17:43.196 [DEBUG] [Thread-199214] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:17:43.197 [DEBUG] [Thread-199214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:17:43.197 [DEBUG] [Thread-199214] [transport.py] [_log()] Compression: none
2026-04-13T01:17:43.197 [DEBUG] [Thread-199214] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:17:43.215 [DEBUG] [Thread-199214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:17:43.216 [DEBUG] [Thread-199214] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:17:43.216 [DEBUG] [Thread-199214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:17:43.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:17:43.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:17:43.218 [DEBUG] [Thread-199214] [transport.py] [_log()] userauth is OK
2026-04-13T01:17:43.218 [DEBUG] [Thread-199214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:17:43.218 [DEBUG] [Thread-199214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:17:43.218 [DEBUG] [Thread-199214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:17:43.219 [DEBUG] [Thread-199214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:17:43.242 [INFO] [Thread-199214] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:17:43.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:17:44.038 [DEBUG] [Thread-199214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:17:44.039 [DEBUG] [Thread-199214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:17:44.039 [DEBUG] [Thread-199214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:17:44.080 [DEBUG] [Thread-199214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:17:44.080 [DEBUG] [Thread-199214] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:17:44.083 [DEBUG] [Thread-199214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:17:44.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:17:44.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:17:44.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:17:44.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:17:44.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:17:44.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:17:44.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:17:44.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:17:44.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:17:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.970238 -999.00  +10.90   4.04     90   +9.40 1 2 1 3 1     0    0 1.52 5.48 .N... 4.0 4.0 219.8 4.9 11.5 -22.2 11.4 -21.0 11.1 -19.0 11.4 -21.0
2026-04-13T01:17:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:17:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:17:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.970238
2026-04-13T01:17:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:17:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:17:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:17:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:17:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:17:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:17:07', tmtdew=1.22316, humidity=91.9083, cloud=0.0, wind=4.67712, temperature=10.8542, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:17:08.563', atlas_cloud=2, atlas_rain=1, zp_data=[0.6797499999999994, nan, 0.3257500000000011, nan, nan, nan, nan, nan, nan, 1.9940000000000007, 0.8042499999999997, 2.327, nan, nan, 0.4319999999999986, nan, nan, 2.6235, 2.6839999999999993, nan, nan, nan, nan, nan, nan, 0.6364999999999998, 0.7057500000000001, 1.1535000000000002, 0.9350000000000005, 1.3585000000000012, 1.4655000000000005, 2.5040000000000004, 1.4677499999999988], zp_timestamp='2026-04-12T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:17:44.112 [DEBUG] [Thread-199214] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:17:44.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:17:44.206 [DEBUG] [Thread-199217] [transport.py] [_log()] starting thread (client mode): 0xae508820
2026-04-13T01:17:44.206 [DEBUG] [Thread-199217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:17:44.220 [DEBUG] [Thread-199217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:17:44.220 [INFO] [Thread-199217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] client lang: <none>
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] server lang: <none>
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] kex follows: False
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:17:44.228 [DEBUG] [Thread-199217] [transport.py] [_log()] Compression: none
2026-04-13T01:17:44.229 [DEBUG] [Thread-199217] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:17:44.284 [DEBUG] [Thread-199217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:17:44.284 [DEBUG] [Thread-199217] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:17:44.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:17:44.285 [DEBUG] [Thread-199217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:17:44.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:17:44.342 [DEBUG] [Thread-199217] [transport.py] [_log()] userauth is OK
2026-04-13T01:17:44.342 [DEBUG] [Thread-199217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:17:44.342 [DEBUG] [Thread-199217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:17:44.342 [DEBUG] [Thread-199217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:17:44.342 [DEBUG] [Thread-199217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:17:44.356 [INFO] [Thread-199217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:17:44.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:17:44.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:17:45.170 [DEBUG] [Thread-199217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:17:45.170 [DEBUG] [Thread-199217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:17:45.218 [DEBUG] [Thread-199217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:17:45.218 [DEBUG] [Thread-199217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:17:45.227 [DEBUG] [Thread-199217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:17:45.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:17:45.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:17:45.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:17:45.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:17:45.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:17:45.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:17:45.264 [DEBUG] [Thread-199217] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:17:50.497 [DEBUG] [Thread-199219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:05.543 [DEBUG] [Thread-199220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:08.049 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:08.050 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:15.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:18:15.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:18:15.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:18:16.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 17, 43), 0.97203, 93.6508, 0.0, 5.86008, 10.7088, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:18:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:17:43
2026-04-13T01:18:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:18:17.112 [DEBUG] [Thread-199221] [transport.py] [_log()] starting thread (client mode): 0xb0fcc5e0
2026-04-13T01:18:17.112 [DEBUG] [Thread-199221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:18:17.133 [DEBUG] [Thread-199221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:18:17.133 [INFO] [Thread-199221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:18:17.136 [DEBUG] [Thread-199221] [transport.py] [_log()] client lang: <none>
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] server lang: <none>
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] kex follows: False
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] Compression: none
2026-04-13T01:18:17.137 [DEBUG] [Thread-199221] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:18:17.157 [DEBUG] [Thread-199221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:18:17.157 [DEBUG] [Thread-199221] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:18:17.158 [DEBUG] [Thread-199221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:18:17.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:18:17.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:18:17.161 [DEBUG] [Thread-199221] [transport.py] [_log()] userauth is OK
2026-04-13T01:18:17.161 [DEBUG] [Thread-199221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:18:17.161 [DEBUG] [Thread-199221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:18:17.161 [DEBUG] [Thread-199221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:18:17.162 [DEBUG] [Thread-199221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:18:17.189 [INFO] [Thread-199221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:18:17.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:18:17.852 [DEBUG] [Thread-199221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:18:17.853 [DEBUG] [Thread-199221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:18:17.853 [DEBUG] [Thread-199221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:18:17.894 [DEBUG] [Thread-199221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:18:17.894 [DEBUG] [Thread-199221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:18:17.897 [DEBUG] [Thread-199221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:18:17.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:18:17.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:18:17.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:18:17.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:18:17.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:18:17.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:18:17.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:18:17.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:18:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:18:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.970586 -999.00  +10.90   3.55     90   +9.40 1 2 1 3 1     0    0 1.57 6.64 Z.... 3.5 3.5 204.4 4.5 11.5 -22.1 11.4 -21.0 11.1 -19.1 11.3 -20.9
2026-04-13T01:18:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:18:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:18:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.970586
2026-04-13T01:18:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:18:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:18:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:18:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:18:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:18:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:17:43', tmtdew=0.97203, humidity=93.6508, cloud=0.0, wind=5.86008, temperature=10.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:17:38.630', atlas_cloud=2, atlas_rain=1, zp_data=[1.23325, 0.4462500000000009, 0.3882500000000011, 0.27149999999999963, nan, nan, nan, nan, nan, nan, 1.2702499999999999, 2.1819999999999995, nan, nan, nan, nan, nan, 2.7074999999999996, 2.0649999999999995, 3.327749999999999, nan, nan, nan, nan, nan, 0.35799999999999876, 0.3042499999999997, 0.46450000000000014, 0.492, 0.9375000000000009, 0.8050000000000006, 2.505000000000001, 1.5437499999999993], zp_timestamp='2026-04-12T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:18:17.915 [DEBUG] [Thread-199221] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:18:17.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:18:18.001 [DEBUG] [Thread-199224] [transport.py] [_log()] starting thread (client mode): 0xae5b6020
2026-04-13T01:18:18.001 [DEBUG] [Thread-199224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:18:18.015 [DEBUG] [Thread-199224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:18:18.015 [INFO] [Thread-199224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:18:18.025 [DEBUG] [Thread-199224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:18:18.025 [DEBUG] [Thread-199224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] client lang: <none>
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] server lang: <none>
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] kex follows: False
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:18:18.026 [DEBUG] [Thread-199224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:18:18.027 [DEBUG] [Thread-199224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:18:18.027 [DEBUG] [Thread-199224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:18:18.027 [DEBUG] [Thread-199224] [transport.py] [_log()] Compression: none
2026-04-13T01:18:18.027 [DEBUG] [Thread-199224] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:18:18.084 [DEBUG] [Thread-199224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:18:18.084 [DEBUG] [Thread-199224] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:18:18.085 [DEBUG] [Thread-199224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:18:18.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:18:18.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:18:18.143 [DEBUG] [Thread-199224] [transport.py] [_log()] userauth is OK
2026-04-13T01:18:18.143 [DEBUG] [Thread-199224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:18:18.143 [DEBUG] [Thread-199224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:18:18.143 [DEBUG] [Thread-199224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:18:18.143 [DEBUG] [Thread-199224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:18:18.166 [INFO] [Thread-199224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:18:18.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:18:18.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:18:19.032 [DEBUG] [Thread-199224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:18:19.032 [DEBUG] [Thread-199224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:18:19.080 [DEBUG] [Thread-199224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:18:19.080 [DEBUG] [Thread-199224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:18:19.090 [DEBUG] [Thread-199224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:18:19.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:18:19.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:18:19.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:18:19.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:18:19.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:18:19.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:18:19.127 [DEBUG] [Thread-199224] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:18:20.578 [DEBUG] [Thread-199226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:28.289 [DEBUG] [Thread-199227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:35.631 [DEBUG] [Thread-199228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:49.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:18:49.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:18:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:18:50.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 18, 18), 1.29153, 91.7922, 0.0, 4.73004, 10.8876, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:18:50.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:18:18
2026-04-13T01:18:50.669 [DEBUG] [Thread-199229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:18:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:18:50.948 [DEBUG] [Thread-199230] [transport.py] [_log()] starting thread (client mode): 0xae5b49d0
2026-04-13T01:18:50.948 [DEBUG] [Thread-199230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:18:50.969 [DEBUG] [Thread-199230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:18:50.969 [INFO] [Thread-199230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:18:50.972 [DEBUG] [Thread-199230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:18:50.972 [DEBUG] [Thread-199230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:18:50.972 [DEBUG] [Thread-199230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:18:50.972 [DEBUG] [Thread-199230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:50.972 [DEBUG] [Thread-199230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:50.972 [DEBUG] [Thread-199230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] client lang: <none>
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] server lang: <none>
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] kex follows: False
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] Compression: none
2026-04-13T01:18:50.973 [DEBUG] [Thread-199230] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:18:50.991 [DEBUG] [Thread-199230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:18:50.992 [DEBUG] [Thread-199230] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:18:50.992 [DEBUG] [Thread-199230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:18:50.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:18:50.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:18:50.995 [DEBUG] [Thread-199230] [transport.py] [_log()] userauth is OK
2026-04-13T01:18:50.995 [DEBUG] [Thread-199230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:18:50.995 [DEBUG] [Thread-199230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:18:50.995 [DEBUG] [Thread-199230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:18:50.995 [DEBUG] [Thread-199230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:18:51.019 [INFO] [Thread-199230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:18:51.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:18:51.640 [DEBUG] [Thread-199230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:18:51.640 [DEBUG] [Thread-199230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:18:51.641 [DEBUG] [Thread-199230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:18:51.681 [DEBUG] [Thread-199230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:18:51.681 [DEBUG] [Thread-199230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:18:51.685 [DEBUG] [Thread-199230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:18:51.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:18:51.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:18:51.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:18:51.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:18:51.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:18:51.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:18:51.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:18:51.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:18:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:18:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.970933 -999.00  +10.90   3.89     90   +9.40 1 2 1 3 1     0    0 1.58 7.92 Z.... 3.9 3.9 207.4 5.2 11.6 -22.1 11.3 -21.0 11.1 -19.0 11.4 -21.0
2026-04-13T01:18:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:18:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:18:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.970933
2026-04-13T01:18:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:18:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:18:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:18:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:18:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:18:51.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:18:18', tmtdew=1.29153, humidity=91.7922, cloud=0.0, wind=4.73004, temperature=10.8876, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:18:08.611', atlas_cloud=2, atlas_rain=1, zp_data=[1.23325, 0.4462500000000009, 0.3882500000000011, 0.27149999999999963, nan, nan, nan, nan, nan, nan, 1.2702499999999999, 2.1819999999999995, nan, nan, nan, nan, nan, 2.7074999999999996, 2.0649999999999995, 3.327749999999999, nan, nan, nan, nan, nan, 0.35799999999999876, 0.3042499999999997, 0.46450000000000014, 0.492, 0.9375000000000009, 0.8050000000000006, 2.505000000000001, 1.5437499999999993], zp_timestamp='2026-04-12T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:18:51.714 [DEBUG] [Thread-199230] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:18:51.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:18:51.806 [DEBUG] [Thread-199233] [transport.py] [_log()] starting thread (client mode): 0xae50a050
2026-04-13T01:18:51.806 [DEBUG] [Thread-199233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:18:51.821 [DEBUG] [Thread-199233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:18:51.821 [INFO] [Thread-199233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:18:51.828 [DEBUG] [Thread-199233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] client lang: <none>
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] server lang: <none>
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] kex follows: False
2026-04-13T01:18:51.829 [DEBUG] [Thread-199233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:18:51.830 [DEBUG] [Thread-199233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:18:51.830 [DEBUG] [Thread-199233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:18:51.830 [DEBUG] [Thread-199233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:18:51.831 [DEBUG] [Thread-199233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:18:51.831 [DEBUG] [Thread-199233] [transport.py] [_log()] Compression: none
2026-04-13T01:18:51.831 [DEBUG] [Thread-199233] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:18:51.887 [DEBUG] [Thread-199233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:18:51.887 [DEBUG] [Thread-199233] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:18:51.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:18:51.889 [DEBUG] [Thread-199233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:18:51.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:18:51.946 [DEBUG] [Thread-199233] [transport.py] [_log()] userauth is OK
2026-04-13T01:18:51.946 [DEBUG] [Thread-199233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:18:51.947 [DEBUG] [Thread-199233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:18:51.947 [DEBUG] [Thread-199233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:18:51.947 [DEBUG] [Thread-199233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:18:51.965 [INFO] [Thread-199233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:18:51.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:18:51.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:18:52.794 [DEBUG] [Thread-199233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:18:52.795 [DEBUG] [Thread-199233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:18:52.842 [DEBUG] [Thread-199233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:18:52.842 [DEBUG] [Thread-199233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:18:52.851 [DEBUG] [Thread-199233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:18:52.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:18:52.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:18:52.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:18:52.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:18:52.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:18:52.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:18:52.889 [DEBUG] [Thread-199233] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:19:05.705 [DEBUG] [Thread-199235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:19:08.256 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:19:08.258 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:19:20.767 [DEBUG] [Thread-199236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:19:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:19:22.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:19:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:19:24.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 18, 54), 1.30227, 91.7263, 0.0, 4.8006, 10.871, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:19:24.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:18:54
2026-04-13T01:19:24.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:19:24.727 [DEBUG] [Thread-199237] [transport.py] [_log()] starting thread (client mode): 0xae5b60b0
2026-04-13T01:19:24.727 [DEBUG] [Thread-199237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:19:24.749 [DEBUG] [Thread-199237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:19:24.749 [INFO] [Thread-199237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:24.753 [DEBUG] [Thread-199237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] client lang: <none>
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] server lang: <none>
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] kex follows: False
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] Compression: none
2026-04-13T01:19:24.754 [DEBUG] [Thread-199237] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:19:24.772 [DEBUG] [Thread-199237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:19:24.772 [DEBUG] [Thread-199237] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:19:24.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:19:24.773 [DEBUG] [Thread-199237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:19:24.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:19:24.776 [DEBUG] [Thread-199237] [transport.py] [_log()] userauth is OK
2026-04-13T01:19:24.776 [DEBUG] [Thread-199237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:19:24.776 [DEBUG] [Thread-199237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:19:24.776 [DEBUG] [Thread-199237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:19:24.776 [DEBUG] [Thread-199237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:19:24.801 [INFO] [Thread-199237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:19:24.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:19:25.410 [DEBUG] [Thread-199237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:19:25.411 [DEBUG] [Thread-199237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:19:25.411 [DEBUG] [Thread-199237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:19:25.451 [DEBUG] [Thread-199237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:19:25.451 [DEBUG] [Thread-199237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:19:25.455 [DEBUG] [Thread-199237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:19:25.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:19:25.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:19:25.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:19:25.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:19:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:19:25.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:19:25.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:19:25.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:19:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:19:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.971280 -999.00  +10.90   4.82     90   +9.40 1 2 1 3 1     0    0 1.67 9.62 ..... 4.8 4.8 210.2 5.1 11.5 -22.1 11.4 -21.0 11.1 -19.0 11.4 -20.9
2026-04-13T01:19:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:19:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:19:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.971280
2026-04-13T01:19:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:19:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:19:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:19:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:19:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:19:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:18:54', tmtdew=1.30227, humidity=91.7263, cloud=0.0, wind=4.8006, temperature=10.871, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:18:38.592', atlas_cloud=2, atlas_rain=1, zp_data=[1.23325, 0.4462500000000009, 0.3882500000000011, 0.27149999999999963, nan, nan, nan, nan, nan, nan, 1.2702499999999999, 2.1819999999999995, nan, nan, nan, nan, nan, 2.7074999999999996, 2.0649999999999995, 3.327749999999999, nan, nan, nan, nan, nan, 0.35799999999999876, 0.3042499999999997, 0.46450000000000014, 0.492, 0.9375000000000009, 0.8050000000000006, 2.505000000000001, 1.5437499999999993], zp_timestamp='2026-04-12T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:19:25.484 [DEBUG] [Thread-199237] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:19:25.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:19:25.578 [DEBUG] [Thread-199240] [transport.py] [_log()] starting thread (client mode): 0xae5b6a40
2026-04-13T01:19:25.578 [DEBUG] [Thread-199240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:19:25.592 [DEBUG] [Thread-199240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:19:25.592 [INFO] [Thread-199240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] client lang: <none>
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] server lang: <none>
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] kex follows: False
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] Compression: none
2026-04-13T01:19:25.600 [DEBUG] [Thread-199240] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:19:25.662 [DEBUG] [Thread-199240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:19:25.663 [DEBUG] [Thread-199240] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:19:25.663 [DEBUG] [Thread-199240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:19:25.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:19:25.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:19:25.722 [DEBUG] [Thread-199240] [transport.py] [_log()] userauth is OK
2026-04-13T01:19:25.723 [DEBUG] [Thread-199240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:19:25.723 [DEBUG] [Thread-199240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:19:25.723 [DEBUG] [Thread-199240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:19:25.723 [DEBUG] [Thread-199240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:19:25.741 [INFO] [Thread-199240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:19:25.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:19:25.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:19:26.539 [DEBUG] [Thread-199240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:19:26.539 [DEBUG] [Thread-199240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:19:26.587 [DEBUG] [Thread-199240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:19:26.587 [DEBUG] [Thread-199240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:19:26.596 [DEBUG] [Thread-199240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:19:26.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:19:26.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:19:26.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:19:26.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:19:26.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:19:26.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:19:26.633 [DEBUG] [Thread-199240] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:19:28.379 [DEBUG] [Thread-199242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:19:35.803 [DEBUG] [Thread-199243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:19:50.856 [DEBUG] [Thread-199244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:19:56.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:19:56.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:19:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:19:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 19, 31), 1.31553, 91.6433, 0.0, 4.73004, 10.871, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:19:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:19:31
2026-04-13T01:19:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:19:58.489 [DEBUG] [Thread-199245] [transport.py] [_log()] starting thread (client mode): 0xae5b7340
2026-04-13T01:19:58.489 [DEBUG] [Thread-199245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:19:58.509 [DEBUG] [Thread-199245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:19:58.510 [INFO] [Thread-199245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:19:58.512 [DEBUG] [Thread-199245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] client lang: <none>
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] server lang: <none>
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] kex follows: False
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:19:58.513 [DEBUG] [Thread-199245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:19:58.514 [DEBUG] [Thread-199245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:19:58.514 [DEBUG] [Thread-199245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:19:58.514 [DEBUG] [Thread-199245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:19:58.514 [DEBUG] [Thread-199245] [transport.py] [_log()] Compression: none
2026-04-13T01:19:58.514 [DEBUG] [Thread-199245] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:19:58.533 [DEBUG] [Thread-199245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:19:58.533 [DEBUG] [Thread-199245] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:19:58.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:19:58.534 [DEBUG] [Thread-199245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:19:58.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:19:58.536 [DEBUG] [Thread-199245] [transport.py] [_log()] userauth is OK
2026-04-13T01:19:58.536 [DEBUG] [Thread-199245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:19:58.537 [DEBUG] [Thread-199245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:19:58.537 [DEBUG] [Thread-199245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:19:58.537 [DEBUG] [Thread-199245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:19:58.572 [INFO] [Thread-199245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:19:58.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:19:59.139 [DEBUG] [Thread-199245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:19:59.140 [DEBUG] [Thread-199245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:19:59.140 [DEBUG] [Thread-199245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:19:59.181 [DEBUG] [Thread-199245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:19:59.181 [DEBUG] [Thread-199245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:19:59.184 [DEBUG] [Thread-199245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:19:59.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:19:59.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:19:59.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:19:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:19:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:19:59.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:19:59.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:19:59.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:19:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:19:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.971974 -999.00  +10.90   3.98     90   +9.40 1 2 1 3 1     0    0 1.66 10.45 ..... 4.0 4.0 201.0 4.3 11.5 -22.0 11.4 -21.1 11.1 -19.0 11.4 -20.9
2026-04-13T01:19:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:19:59.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:19:59.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.971974
2026-04-13T01:19:59.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:19:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:19:59.213 [DEBUG] [Thread-199245] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:19:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:19:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:19:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:19:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:19:31', tmtdew=1.31553, humidity=91.6433, cloud=0.0, wind=4.73004, temperature=10.871, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:19:38.554', atlas_cloud=2, atlas_rain=1, zp_data=[1.23325, 0.4462500000000009, 0.3882500000000011, 0.27149999999999963, nan, nan, nan, nan, nan, nan, 1.2702499999999999, 2.1819999999999995, nan, nan, nan, nan, nan, 2.7074999999999996, 2.0649999999999995, 3.327749999999999, nan, nan, nan, nan, nan, 0.35799999999999876, 0.3042499999999997, 0.46450000000000014, 0.492, 0.9375000000000009, 0.8050000000000006, 2.505000000000001, 1.5437499999999993], zp_timestamp='2026-04-12T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:19:59.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:19:59.307 [DEBUG] [Thread-199248] [transport.py] [_log()] starting thread (client mode): 0xae51a8f0
2026-04-13T01:19:59.307 [DEBUG] [Thread-199248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:19:59.321 [DEBUG] [Thread-199248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:19:59.321 [INFO] [Thread-199248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] client lang: <none>
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] server lang: <none>
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] kex follows: False
2026-04-13T01:19:59.329 [DEBUG] [Thread-199248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:19:59.330 [DEBUG] [Thread-199248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:19:59.330 [DEBUG] [Thread-199248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:19:59.330 [DEBUG] [Thread-199248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:19:59.330 [DEBUG] [Thread-199248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:19:59.330 [DEBUG] [Thread-199248] [transport.py] [_log()] Compression: none
2026-04-13T01:19:59.330 [DEBUG] [Thread-199248] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:19:59.385 [DEBUG] [Thread-199248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:19:59.386 [DEBUG] [Thread-199248] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:19:59.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:19:59.387 [DEBUG] [Thread-199248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:19:59.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:19:59.442 [DEBUG] [Thread-199248] [transport.py] [_log()] userauth is OK
2026-04-13T01:19:59.442 [DEBUG] [Thread-199248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:19:59.442 [DEBUG] [Thread-199248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:19:59.443 [DEBUG] [Thread-199248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:19:59.443 [DEBUG] [Thread-199248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:19:59.461 [INFO] [Thread-199248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:19:59.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:19:59.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:20:00.256 [DEBUG] [Thread-199248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:20:00.257 [DEBUG] [Thread-199248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:20:00.305 [DEBUG] [Thread-199248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:20:00.305 [DEBUG] [Thread-199248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:20:00.314 [DEBUG] [Thread-199248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:20:00.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:20:00.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:20:00.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:20:00.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:20:00.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:20:00.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:20:00.351 [DEBUG] [Thread-199248] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:20:05.890 [DEBUG] [Thread-199250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:20:08.463 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:20:08.464 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:20:20.949 [DEBUG] [Thread-199251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:20:28.465 [DEBUG] [Thread-199252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:20:30.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:20:30.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:20:30.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:20:31.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 20, 6), 1.32905, 91.5604, 0.0, 5.0652, 10.9042, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:20:31.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:20:06
2026-04-13T01:20:32.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:20:32.214 [DEBUG] [Thread-199253] [transport.py] [_log()] starting thread (client mode): 0xae5b7e50
2026-04-13T01:20:32.214 [DEBUG] [Thread-199253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:20:32.230 [DEBUG] [Thread-199253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:20:32.230 [INFO] [Thread-199253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] client lang: <none>
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] server lang: <none>
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] kex follows: False
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:20:32.233 [DEBUG] [Thread-199253] [transport.py] [_log()] Compression: none
2026-04-13T01:20:32.234 [DEBUG] [Thread-199253] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:20:32.253 [DEBUG] [Thread-199253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:20:32.254 [DEBUG] [Thread-199253] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:20:32.254 [DEBUG] [Thread-199253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:20:32.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:20:32.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:20:32.256 [DEBUG] [Thread-199253] [transport.py] [_log()] userauth is OK
2026-04-13T01:20:32.256 [DEBUG] [Thread-199253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:20:32.256 [DEBUG] [Thread-199253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:20:32.256 [DEBUG] [Thread-199253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:20:32.257 [DEBUG] [Thread-199253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:20:32.272 [INFO] [Thread-199253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:20:32.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:20:32.921 [DEBUG] [Thread-199253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:20:32.921 [DEBUG] [Thread-199253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:20:32.921 [DEBUG] [Thread-199253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:20:32.962 [DEBUG] [Thread-199253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:20:32.962 [DEBUG] [Thread-199253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:20:32.966 [DEBUG] [Thread-199253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:20:32.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:20:32.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:20:32.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:20:32.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:20:32.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:20:32.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:20:32.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:20:32.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:20:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:20:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.972321 -999.00  +10.90   3.90     90   +9.40 1 2 1 3 1     0    0 1.70 11.00 ..... 3.9 3.9 202.0 4.6 11.6 -22.1 11.4 -21.0 11.1 -19.0 11.4 -20.9
2026-04-13T01:20:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:20:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:20:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.972321
2026-04-13T01:20:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:20:32.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:20:32.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:20:32.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:20:32.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:20:32.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:20:06', tmtdew=1.32905, humidity=91.5604, cloud=0.0, wind=5.0652, temperature=10.9042, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:20:08.534', atlas_cloud=2, atlas_rain=1, zp_data=[1.23325, 0.4462500000000009, 0.3882500000000011, 0.27149999999999963, nan, nan, nan, nan, nan, nan, 1.2702499999999999, 2.1819999999999995, nan, nan, nan, nan, nan, 2.7074999999999996, 2.0649999999999995, 3.327749999999999, nan, nan, nan, nan, nan, 0.35799999999999876, 0.3042499999999997, 0.46450000000000014, 0.492, 0.9375000000000009, 0.8050000000000006, 2.505000000000001, 1.5437499999999993], zp_timestamp='2026-04-12T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:20:32.992 [DEBUG] [Thread-199253] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:20:33.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:20:33.097 [DEBUG] [Thread-199256] [transport.py] [_log()] starting thread (client mode): 0xae5b5c00
2026-04-13T01:20:33.098 [DEBUG] [Thread-199256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:20:33.112 [DEBUG] [Thread-199256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:20:33.112 [INFO] [Thread-199256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] client lang: <none>
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] server lang: <none>
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] kex follows: False
2026-04-13T01:20:33.120 [DEBUG] [Thread-199256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:20:33.121 [DEBUG] [Thread-199256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:20:33.121 [DEBUG] [Thread-199256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:20:33.121 [DEBUG] [Thread-199256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:20:33.121 [DEBUG] [Thread-199256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:20:33.121 [DEBUG] [Thread-199256] [transport.py] [_log()] Compression: none
2026-04-13T01:20:33.121 [DEBUG] [Thread-199256] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:20:33.177 [DEBUG] [Thread-199256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:20:33.178 [DEBUG] [Thread-199256] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:20:33.178 [DEBUG] [Thread-199256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:20:33.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:20:33.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:20:33.234 [DEBUG] [Thread-199256] [transport.py] [_log()] userauth is OK
2026-04-13T01:20:33.235 [DEBUG] [Thread-199256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:20:33.235 [DEBUG] [Thread-199256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:20:33.235 [DEBUG] [Thread-199256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:20:33.235 [DEBUG] [Thread-199256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:20:33.253 [INFO] [Thread-199256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:20:33.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:20:33.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:20:34.102 [DEBUG] [Thread-199256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:20:34.102 [DEBUG] [Thread-199256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:20:34.149 [DEBUG] [Thread-199256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:20:34.150 [DEBUG] [Thread-199256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:20:34.163 [DEBUG] [Thread-199256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:20:34.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:20:34.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:20:34.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:20:34.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:20:34.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:20:34.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:20:34.202 [DEBUG] [Thread-199256] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:20:35.986 [DEBUG] [Thread-199258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:20:51.040 [DEBUG] [Thread-199259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:21:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:21:04.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:21:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:21:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 20, 41), 1.08445, 92.9549, 0.0, 6.67152, 10.8752, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:21:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:20:41
2026-04-13T01:21:05.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:21:05.994 [DEBUG] [Thread-199260] [transport.py] [_log()] starting thread (client mode): 0xae5623e0
2026-04-13T01:21:05.995 [DEBUG] [Thread-199260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:21:06.016 [DEBUG] [Thread-199260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:21:06.016 [INFO] [Thread-199260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] client lang: <none>
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] server lang: <none>
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] kex follows: False
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] Compression: none
2026-04-13T01:21:06.019 [DEBUG] [Thread-199260] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:21:06.034 [DEBUG] [Thread-199260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:21:06.034 [DEBUG] [Thread-199260] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:21:06.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:21:06.035 [DEBUG] [Thread-199260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:21:06.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:21:06.036 [DEBUG] [Thread-199260] [transport.py] [_log()] userauth is OK
2026-04-13T01:21:06.036 [DEBUG] [Thread-199260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:21:06.036 [DEBUG] [Thread-199260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:21:06.036 [DEBUG] [Thread-199260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:21:06.036 [DEBUG] [Thread-199260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:21:06.048 [INFO] [Thread-199260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:21:06.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:21:06.077 [DEBUG] [Thread-199262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:21:06.686 [DEBUG] [Thread-199260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:21:06.687 [DEBUG] [Thread-199260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:21:06.687 [DEBUG] [Thread-199260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:21:06.727 [DEBUG] [Thread-199260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:21:06.727 [DEBUG] [Thread-199260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:21:06.731 [DEBUG] [Thread-199260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:21:06.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:21:06.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:21:06.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:21:06.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:21:06.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:21:06.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:21:06.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:21:06.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:21:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:21:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.972669 -999.00  +10.90   3.43     90   +9.40 1 2 1 3 1     0    0 1.73 11.93 ..... 3.4 3.4 202.1 4.2 11.5 -22.2 11.4 -21.1 11.1 -19.0 11.4 -21.1
2026-04-13T01:21:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:21:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:21:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.972669
2026-04-13T01:21:06.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:21:06.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:21:06.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:21:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:21:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:21:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:20:41', tmtdew=1.08445, humidity=92.9549, cloud=0.0, wind=6.67152, temperature=10.8752, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:20:38.602', atlas_cloud=2, atlas_rain=1, zp_data=[1.23325, 0.4462500000000009, 0.3882500000000011, 0.27149999999999963, nan, nan, nan, nan, nan, nan, 1.2702499999999999, 2.1819999999999995, nan, nan, nan, nan, nan, 2.7074999999999996, 2.0649999999999995, 3.327749999999999, nan, nan, nan, nan, nan, 0.35799999999999876, 0.3042499999999997, 0.46450000000000014, 0.492, 0.9375000000000009, 0.8050000000000006, 2.505000000000001, 1.5437499999999993], zp_timestamp='2026-04-12T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:21:06.759 [DEBUG] [Thread-199260] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:21:06.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:21:06.846 [DEBUG] [Thread-199264] [transport.py] [_log()] starting thread (client mode): 0xb0fcc2e0
2026-04-13T01:21:06.846 [DEBUG] [Thread-199264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:21:06.861 [DEBUG] [Thread-199264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:21:06.861 [INFO] [Thread-199264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:21:06.869 [DEBUG] [Thread-199264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:21:06.869 [DEBUG] [Thread-199264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] client lang: <none>
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] server lang: <none>
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] kex follows: False
2026-04-13T01:21:06.870 [DEBUG] [Thread-199264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:21:06.871 [DEBUG] [Thread-199264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:21:06.871 [DEBUG] [Thread-199264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:21:06.871 [DEBUG] [Thread-199264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:21:06.871 [DEBUG] [Thread-199264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:21:06.871 [DEBUG] [Thread-199264] [transport.py] [_log()] Compression: none
2026-04-13T01:21:06.871 [DEBUG] [Thread-199264] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:21:06.926 [DEBUG] [Thread-199264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:21:06.927 [DEBUG] [Thread-199264] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:21:06.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:21:06.929 [DEBUG] [Thread-199264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:21:06.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:21:06.982 [DEBUG] [Thread-199264] [transport.py] [_log()] userauth is OK
2026-04-13T01:21:06.983 [DEBUG] [Thread-199264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:21:06.983 [DEBUG] [Thread-199264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:21:06.983 [DEBUG] [Thread-199264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:21:06.983 [DEBUG] [Thread-199264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:21:07.003 [INFO] [Thread-199264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:21:07.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:21:07.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:21:07.787 [DEBUG] [Thread-199264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:21:07.787 [DEBUG] [Thread-199264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:21:07.835 [DEBUG] [Thread-199264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:21:07.835 [DEBUG] [Thread-199264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:21:07.844 [DEBUG] [Thread-199264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:21:07.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:21:07.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:21:07.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:21:07.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:21:07.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:21:07.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:21:07.876 [DEBUG] [Thread-199264] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:21:08.667 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:21:08.668 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:21:21.111 [DEBUG] [Thread-199266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:21:28.540 [DEBUG] [Thread-199267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:21:36.164 [DEBUG] [Thread-199268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:21:37.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:21:37.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:21:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:21:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 21, 17), 1.39281, 90.977, 0.0, 4.67712, 10.9537, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:21:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:21:17
2026-04-13T01:21:39.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:21:39.763 [DEBUG] [Thread-199269] [transport.py] [_log()] starting thread (client mode): 0xae5b7ac0
2026-04-13T01:21:39.763 [DEBUG] [Thread-199269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:21:39.783 [DEBUG] [Thread-199269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:21:39.783 [INFO] [Thread-199269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:21:39.786 [DEBUG] [Thread-199269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:21:39.786 [DEBUG] [Thread-199269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:21:39.786 [DEBUG] [Thread-199269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:21:39.786 [DEBUG] [Thread-199269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:39.786 [DEBUG] [Thread-199269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:39.786 [DEBUG] [Thread-199269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] client lang: <none>
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] server lang: <none>
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] kex follows: False
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] Compression: none
2026-04-13T01:21:39.787 [DEBUG] [Thread-199269] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:21:39.804 [DEBUG] [Thread-199269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:21:39.804 [DEBUG] [Thread-199269] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:21:39.804 [DEBUG] [Thread-199269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:21:39.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:21:39.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:21:39.849 [DEBUG] [Thread-199269] [transport.py] [_log()] userauth is OK
2026-04-13T01:21:39.849 [DEBUG] [Thread-199269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:21:39.849 [DEBUG] [Thread-199269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:21:39.850 [DEBUG] [Thread-199269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:21:39.850 [DEBUG] [Thread-199269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:21:39.874 [INFO] [Thread-199269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:21:39.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:21:40.540 [DEBUG] [Thread-199269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:21:40.540 [DEBUG] [Thread-199269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:21:40.540 [DEBUG] [Thread-199269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:21:40.581 [DEBUG] [Thread-199269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:21:40.581 [DEBUG] [Thread-199269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:21:40.585 [DEBUG] [Thread-199269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:21:40.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:21:40.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:21:40.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:21:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:21:40.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:21:40.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:21:40.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:21:40.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:21:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:21:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.973016 -999.00  +10.90   3.30     90   +9.40 1 2 1 3 1     0    0 1.78 12.76 ZN... 3.3 3.3 202.8 4.2 11.5 -22.1 11.4 -21.0 11.2 -19.1 11.4 -20.9
2026-04-13T01:21:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:21:40.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:21:40.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.973016
2026-04-13T01:21:40.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:21:40.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:21:40.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:21:40.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:21:40.610 [DEBUG] [Thread-199269] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:21:40.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:21:40.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:21:17', tmtdew=1.39281, humidity=90.977, cloud=0.0, wind=4.67712, temperature=10.9537, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:21:08.582', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:21:40.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:21:40.707 [DEBUG] [Thread-199272] [transport.py] [_log()] starting thread (client mode): 0xae51bee0
2026-04-13T01:21:40.707 [DEBUG] [Thread-199272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:21:40.722 [DEBUG] [Thread-199272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:21:40.722 [INFO] [Thread-199272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:21:40.729 [DEBUG] [Thread-199272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:21:40.729 [DEBUG] [Thread-199272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:21:40.729 [DEBUG] [Thread-199272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:21:40.729 [DEBUG] [Thread-199272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:40.729 [DEBUG] [Thread-199272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:21:40.729 [DEBUG] [Thread-199272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:40.729 [DEBUG] [Thread-199272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] client lang: <none>
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] server lang: <none>
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] kex follows: False
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] Compression: none
2026-04-13T01:21:40.730 [DEBUG] [Thread-199272] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:21:40.789 [DEBUG] [Thread-199272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:21:40.791 [DEBUG] [Thread-199272] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:21:40.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:21:40.792 [DEBUG] [Thread-199272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:21:40.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:21:40.845 [DEBUG] [Thread-199272] [transport.py] [_log()] userauth is OK
2026-04-13T01:21:40.846 [DEBUG] [Thread-199272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:21:40.846 [DEBUG] [Thread-199272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:21:40.846 [DEBUG] [Thread-199272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:21:40.846 [DEBUG] [Thread-199272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:21:40.864 [INFO] [Thread-199272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:21:40.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:21:40.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:21:41.676 [DEBUG] [Thread-199272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:21:41.676 [DEBUG] [Thread-199272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:21:41.724 [DEBUG] [Thread-199272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:21:41.725 [DEBUG] [Thread-199272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:21:41.734 [DEBUG] [Thread-199272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:21:41.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:21:41.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')
2026-04-13T01:21:41.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:21:41.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:21:41.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:21:41.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:21:41.771 [DEBUG] [Thread-199272] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:21:51.205 [DEBUG] [Thread-199274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:22:06.269 [DEBUG] [Thread-199275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:22:08.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:22:08.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:22:11.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:22:11.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:22:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:22:13.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 21, 52), 1.11173, 92.7883, 0.0, 5.1192, 10.941, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:22:13.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:21:52
2026-04-13T01:22:13.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:22:13.638 [DEBUG] [Thread-199276] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa60
2026-04-13T01:22:13.638 [DEBUG] [Thread-199276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:22:13.659 [DEBUG] [Thread-199276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:22:13.659 [INFO] [Thread-199276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:22:13.662 [DEBUG] [Thread-199276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:22:13.662 [DEBUG] [Thread-199276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:22:13.662 [DEBUG] [Thread-199276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] client lang: <none>
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] server lang: <none>
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] kex follows: False
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:22:13.663 [DEBUG] [Thread-199276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:22:13.664 [DEBUG] [Thread-199276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:22:13.664 [DEBUG] [Thread-199276] [transport.py] [_log()] Compression: none
2026-04-13T01:22:13.664 [DEBUG] [Thread-199276] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:22:13.682 [DEBUG] [Thread-199276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:22:13.682 [DEBUG] [Thread-199276] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:22:13.683 [DEBUG] [Thread-199276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:22:13.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:22:13.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:22:13.685 [DEBUG] [Thread-199276] [transport.py] [_log()] userauth is OK
2026-04-13T01:22:13.685 [DEBUG] [Thread-199276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:22:13.685 [DEBUG] [Thread-199276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:22:13.685 [DEBUG] [Thread-199276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:22:13.686 [DEBUG] [Thread-199276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:22:13.708 [INFO] [Thread-199276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:22:13.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:22:14.342 [DEBUG] [Thread-199276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:22:14.342 [DEBUG] [Thread-199276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:22:14.343 [DEBUG] [Thread-199276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:22:14.384 [DEBUG] [Thread-199276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:22:14.384 [DEBUG] [Thread-199276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:22:14.387 [DEBUG] [Thread-199276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:22:14.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:22:14.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:22:14.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:22:14.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:22:14.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:22:14.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:22:14.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:22:14.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:22:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:22:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.973363 -999.00  +10.90   2.83     90   +9.40 1 2 1 3 1     0    0 1.78 12.97 ZN... 2.8 2.8 191.1 4.5 11.5 -22.1 11.4 -21.1 11.1 -19.0 11.3 -21.1
2026-04-13T01:22:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:22:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:22:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.973363
2026-04-13T01:22:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:22:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:22:14.413 [DEBUG] [Thread-199276] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:22:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:22:14.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:22:14.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:22:14.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:21:52', tmtdew=1.11173, humidity=92.7883, cloud=0.0, wind=5.1192, temperature=10.941, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:21:38.563', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:22:14.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:22:14.501 [DEBUG] [Thread-199279] [transport.py] [_log()] starting thread (client mode): 0xae51b3a0
2026-04-13T01:22:14.501 [DEBUG] [Thread-199279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:22:14.516 [DEBUG] [Thread-199279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:22:14.516 [INFO] [Thread-199279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:22:14.523 [DEBUG] [Thread-199279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] client lang: <none>
2026-04-13T01:22:14.524 [DEBUG] [Thread-199279] [transport.py] [_log()] server lang: <none>
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] kex follows: False
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] Compression: none
2026-04-13T01:22:14.525 [DEBUG] [Thread-199279] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:22:14.581 [DEBUG] [Thread-199279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:22:14.582 [DEBUG] [Thread-199279] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:22:14.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:22:14.583 [DEBUG] [Thread-199279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:22:14.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:22:14.642 [DEBUG] [Thread-199279] [transport.py] [_log()] userauth is OK
2026-04-13T01:22:14.642 [DEBUG] [Thread-199279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:22:14.643 [DEBUG] [Thread-199279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:22:14.643 [DEBUG] [Thread-199279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:22:14.643 [DEBUG] [Thread-199279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:22:14.663 [INFO] [Thread-199279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:22:14.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:22:14.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:22:15.470 [DEBUG] [Thread-199279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:22:15.470 [DEBUG] [Thread-199279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:22:15.518 [DEBUG] [Thread-199279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:22:15.518 [DEBUG] [Thread-199279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:22:15.527 [DEBUG] [Thread-199279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:22:15.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:22:15.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:22:15.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:22:15.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:22:15.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:22:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:22:15.561 [DEBUG] [Thread-199279] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:22:21.303 [DEBUG] [Thread-199281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:22:28.609 [DEBUG] [Thread-199282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:22:36.366 [DEBUG] [Thread-199283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:22:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:22:45.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:22:45.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:22:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 22, 28), 1.4716, 90.7946, 0.0, 4.60656, 10.9374, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:22:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:22:28
2026-04-13T01:22:47.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:22:47.420 [DEBUG] [Thread-199284] [transport.py] [_log()] starting thread (client mode): 0xae5b7a90
2026-04-13T01:22:47.420 [DEBUG] [Thread-199284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:22:47.434 [DEBUG] [Thread-199284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:22:47.434 [INFO] [Thread-199284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:47.436 [DEBUG] [Thread-199284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] client lang: <none>
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] server lang: <none>
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] kex follows: False
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] Compression: none
2026-04-13T01:22:47.437 [DEBUG] [Thread-199284] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:22:47.449 [DEBUG] [Thread-199284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:22:47.449 [DEBUG] [Thread-199284] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:22:47.450 [DEBUG] [Thread-199284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:22:47.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:22:47.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:22:47.451 [DEBUG] [Thread-199284] [transport.py] [_log()] userauth is OK
2026-04-13T01:22:47.451 [DEBUG] [Thread-199284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:22:47.451 [DEBUG] [Thread-199284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:22:47.451 [DEBUG] [Thread-199284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:22:47.451 [DEBUG] [Thread-199284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:22:47.464 [INFO] [Thread-199284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:22:47.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:22:48.094 [DEBUG] [Thread-199284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:22:48.094 [DEBUG] [Thread-199284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:22:48.095 [DEBUG] [Thread-199284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:22:48.135 [DEBUG] [Thread-199284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:22:48.135 [DEBUG] [Thread-199284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:22:48.137 [DEBUG] [Thread-199284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:22:48.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:22:48.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:22:48.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:22:48.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:22:48.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:22:48.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:22:48.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:22:48.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:22:48.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:22:48.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.973710 -999.00  +10.90   3.57     90   +9.40 1 2 1 3 1     0    0 1.81 13.37 ZN... 3.6 3.6 197.2 4.4 11.5 -22.1 11.4 -21.0 11.1 -19.0 11.4 -20.9
2026-04-13T01:22:48.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:22:48.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:22:48.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.973710
2026-04-13T01:22:48.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:22:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:22:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:22:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:22:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:22:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:22:28', tmtdew=1.4716, humidity=90.7946, cloud=0.0, wind=4.60656, temperature=10.9374, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:22:08.544', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:22:48.161 [DEBUG] [Thread-199284] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:22:48.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:22:48.263 [DEBUG] [Thread-199287] [transport.py] [_log()] starting thread (client mode): 0xae5f3b20
2026-04-13T01:22:48.263 [DEBUG] [Thread-199287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:22:48.277 [DEBUG] [Thread-199287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:22:48.277 [INFO] [Thread-199287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] client lang: <none>
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] server lang: <none>
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] kex follows: False
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:22:48.285 [DEBUG] [Thread-199287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:22:48.286 [DEBUG] [Thread-199287] [transport.py] [_log()] Compression: none
2026-04-13T01:22:48.286 [DEBUG] [Thread-199287] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:22:48.345 [DEBUG] [Thread-199287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:22:48.346 [DEBUG] [Thread-199287] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:22:48.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:22:48.347 [DEBUG] [Thread-199287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:22:48.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:22:48.401 [DEBUG] [Thread-199287] [transport.py] [_log()] userauth is OK
2026-04-13T01:22:48.402 [DEBUG] [Thread-199287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:22:48.402 [DEBUG] [Thread-199287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:22:48.402 [DEBUG] [Thread-199287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:22:48.402 [DEBUG] [Thread-199287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:22:48.426 [INFO] [Thread-199287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:22:48.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:22:48.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:22:49.313 [DEBUG] [Thread-199287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:22:49.313 [DEBUG] [Thread-199287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:22:49.361 [DEBUG] [Thread-199287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:22:49.361 [DEBUG] [Thread-199287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:22:49.370 [DEBUG] [Thread-199287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:22:49.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:22:49.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:22: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') -> 00000000
2026-04-13T01:22:49.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:22:49.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:22:49.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:22:49.407 [DEBUG] [Thread-199287] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:22:51.403 [DEBUG] [Thread-199289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:06.456 [DEBUG] [Thread-199290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:09.075 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:09.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:19.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:23:19.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:23:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:23:20.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 23, 3), 1.46906, 90.8113, 0.0, 4.6242, 10.954, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:23:20.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:23:03
2026-04-13T01:23:21.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:23:21.229 [DEBUG] [Thread-199291] [transport.py] [_log()] starting thread (client mode): 0xae51bfd0
2026-04-13T01:23:21.230 [DEBUG] [Thread-199291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:23:21.250 [DEBUG] [Thread-199291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:23:21.250 [INFO] [Thread-199291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:23:21.251 [DEBUG] [Thread-199291] [transport.py] [_log()] client lang: <none>
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] server lang: <none>
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] kex follows: False
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] Compression: none
2026-04-13T01:23:21.252 [DEBUG] [Thread-199291] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:23:21.262 [DEBUG] [Thread-199291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:23:21.263 [DEBUG] [Thread-199291] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:23:21.263 [DEBUG] [Thread-199291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:23:21.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:23:21.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:23:21.266 [DEBUG] [Thread-199291] [transport.py] [_log()] userauth is OK
2026-04-13T01:23:21.266 [DEBUG] [Thread-199291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:23:21.266 [DEBUG] [Thread-199291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:23:21.266 [DEBUG] [Thread-199291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:23:21.266 [DEBUG] [Thread-199291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:23:21.292 [INFO] [Thread-199291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:23:21.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:23:21.493 [DEBUG] [Thread-199293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:21.882 [DEBUG] [Thread-199291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:23:21.882 [DEBUG] [Thread-199291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:23:21.883 [DEBUG] [Thread-199291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:23:21.923 [DEBUG] [Thread-199291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:23:21.923 [DEBUG] [Thread-199291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:23:21.926 [DEBUG] [Thread-199291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:23:21.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:23:21.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:23:21.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:23:21.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:23:21.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:23:21.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:23:21.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:23:21.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:23:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:23:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.974405 -999.00  +10.90   3.92     90   +9.40 1 2 1 3 1     0    0 1.85 14.63 Z.... 3.9 3.9 198.8 5.0 11.5 -22.2 11.4 -20.9 11.1 -19.0 11.3 -20.9
2026-04-13T01:23:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:23:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:23:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.974405
2026-04-13T01:23:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:23:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:23:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:23:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:23:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:23:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:23:03', tmtdew=1.46906, humidity=90.8113, cloud=0.0, wind=4.6242, temperature=10.954, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:23:08.592', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:23:21.961 [DEBUG] [Thread-199291] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:23:22.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:23:22.048 [DEBUG] [Thread-199295] [transport.py] [_log()] starting thread (client mode): 0xae5b4430
2026-04-13T01:23:22.048 [DEBUG] [Thread-199295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:23:22.063 [DEBUG] [Thread-199295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:23:22.064 [INFO] [Thread-199295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:23:22.071 [DEBUG] [Thread-199295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:23:22.071 [DEBUG] [Thread-199295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:23:22.071 [DEBUG] [Thread-199295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:23:22.071 [DEBUG] [Thread-199295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:22.071 [DEBUG] [Thread-199295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] client lang: <none>
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] server lang: <none>
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] kex follows: False
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] Compression: none
2026-04-13T01:23:22.072 [DEBUG] [Thread-199295] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:23:22.129 [DEBUG] [Thread-199295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:23:22.130 [DEBUG] [Thread-199295] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:23:22.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:23:22.131 [DEBUG] [Thread-199295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:23:22.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:23:22.185 [DEBUG] [Thread-199295] [transport.py] [_log()] userauth is OK
2026-04-13T01:23:22.186 [DEBUG] [Thread-199295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:23:22.186 [DEBUG] [Thread-199295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:23:22.186 [DEBUG] [Thread-199295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:23:22.186 [DEBUG] [Thread-199295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:23:22.206 [INFO] [Thread-199295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:23:22.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:23:22.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:23:23.011 [DEBUG] [Thread-199295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:23:23.012 [DEBUG] [Thread-199295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:23:23.060 [DEBUG] [Thread-199295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:23:23.060 [DEBUG] [Thread-199295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:23:23.069 [DEBUG] [Thread-199295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:23:23.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:23:23.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:23:23.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:23:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:23:23.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:23:23.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:23:23.107 [DEBUG] [Thread-199295] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:23:28.693 [DEBUG] [Thread-199297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:36.531 [DEBUG] [Thread-199298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:51.578 [DEBUG] [Thread-199299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:23:53.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:23:53.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:23:53.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:23:54.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 23, 39), 1.14854, 92.5562, 0.0, 5.71896, 10.8748, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:23:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:23:39
2026-04-13T01:23:54.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:23:54.930 [DEBUG] [Thread-199300] [transport.py] [_log()] starting thread (client mode): 0xae561180
2026-04-13T01:23:54.930 [DEBUG] [Thread-199300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:23:54.950 [DEBUG] [Thread-199300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:23:54.950 [INFO] [Thread-199300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:23:54.951 [DEBUG] [Thread-199300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:23:54.951 [DEBUG] [Thread-199300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:23:54.951 [DEBUG] [Thread-199300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:23:54.951 [DEBUG] [Thread-199300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] client lang: <none>
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] server lang: <none>
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] kex follows: False
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] Compression: none
2026-04-13T01:23:54.952 [DEBUG] [Thread-199300] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:23:54.960 [DEBUG] [Thread-199300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:23:54.961 [DEBUG] [Thread-199300] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:23:54.961 [DEBUG] [Thread-199300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:23:54.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:23:54.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:23:54.963 [DEBUG] [Thread-199300] [transport.py] [_log()] userauth is OK
2026-04-13T01:23:54.963 [DEBUG] [Thread-199300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:23:54.964 [DEBUG] [Thread-199300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:23:54.964 [DEBUG] [Thread-199300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:23:54.964 [DEBUG] [Thread-199300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:23:54.977 [INFO] [Thread-199300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:23:54.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:23:55.575 [DEBUG] [Thread-199300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:23:55.575 [DEBUG] [Thread-199300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:23:55.575 [DEBUG] [Thread-199300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:23:55.616 [DEBUG] [Thread-199300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:23:55.616 [DEBUG] [Thread-199300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:23:55.620 [DEBUG] [Thread-199300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:23:55.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:23:55.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:23:55.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:23:55.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:23:55.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:23:55.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:23:55.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:23:55.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:23:55.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:23:55.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.974752 -999.00  +10.90   3.67     90   +9.40 1 2 1 3 1     0    0 1.84 14.74 z..S. 3.7 3.7 203.0 4.4 11.5 -22.1 11.4 -21.0 11.1 -19.1 11.4 -21.0
2026-04-13T01:23:55.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:23:55.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:23:55.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.974752
2026-04-13T01:23:55.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:23:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:23:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:23:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:23:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:23:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:23:39', tmtdew=1.14854, humidity=92.5562, cloud=0.0, wind=5.71896, temperature=10.8748, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:23:38.573', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:23:55.644 [DEBUG] [Thread-199300] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:23:55.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:23:55.739 [DEBUG] [Thread-199303] [transport.py] [_log()] starting thread (client mode): 0xb0fe8760
2026-04-13T01:23:55.739 [DEBUG] [Thread-199303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:23:55.754 [DEBUG] [Thread-199303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:23:55.754 [INFO] [Thread-199303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:23:55.761 [DEBUG] [Thread-199303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] client lang: <none>
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] server lang: <none>
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] kex follows: False
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:23:55.762 [DEBUG] [Thread-199303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:23:55.763 [DEBUG] [Thread-199303] [transport.py] [_log()] Compression: none
2026-04-13T01:23:55.763 [DEBUG] [Thread-199303] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:23:55.819 [DEBUG] [Thread-199303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:23:55.820 [DEBUG] [Thread-199303] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:23:55.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:23:55.821 [DEBUG] [Thread-199303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:23:55.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:23:55.876 [DEBUG] [Thread-199303] [transport.py] [_log()] userauth is OK
2026-04-13T01:23:55.876 [DEBUG] [Thread-199303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:23:55.876 [DEBUG] [Thread-199303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:23:55.876 [DEBUG] [Thread-199303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:23:55.876 [DEBUG] [Thread-199303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:23:55.895 [INFO] [Thread-199303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:23:55.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:23:55.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:23:56.693 [DEBUG] [Thread-199303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:23:56.693 [DEBUG] [Thread-199303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:23:56.741 [DEBUG] [Thread-199303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:23:56.741 [DEBUG] [Thread-199303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:23:56.751 [DEBUG] [Thread-199303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:23:56.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:23:56.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:23:56.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:23:56.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:23:56.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:23:56.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:23:56.788 [DEBUG] [Thread-199303] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:24:06.611 [DEBUG] [Thread-199305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:24:09.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:24:09.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:24:21.660 [DEBUG] [Thread-199306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:24:26.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:24:26.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:24:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:24:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 24, 15), 1.53516, 90.2114, 0.0, 4.69476, 10.9537, 1, 2, 0, 2, 0, 0),)
2026-04-13T01:24:28.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:24:15
2026-04-13T01:24:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:24:28.649 [DEBUG] [Thread-199307] [transport.py] [_log()] starting thread (client mode): 0xb0fce410
2026-04-13T01:24:28.649 [DEBUG] [Thread-199307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:24:28.670 [DEBUG] [Thread-199307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:24:28.670 [INFO] [Thread-199307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:24:28.674 [DEBUG] [Thread-199307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] client lang: <none>
2026-04-13T01:24:28.675 [DEBUG] [Thread-199307] [transport.py] [_log()] server lang: <none>
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] kex follows: False
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] Compression: none
2026-04-13T01:24:28.676 [DEBUG] [Thread-199307] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:24:28.692 [DEBUG] [Thread-199307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:24:28.693 [DEBUG] [Thread-199307] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:24:28.693 [DEBUG] [Thread-199307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:24:28.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:24:28.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:24:28.695 [DEBUG] [Thread-199307] [transport.py] [_log()] userauth is OK
2026-04-13T01:24:28.696 [DEBUG] [Thread-199307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:24:28.696 [DEBUG] [Thread-199307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:24:28.696 [DEBUG] [Thread-199307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:24:28.696 [DEBUG] [Thread-199307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:24:28.725 [INFO] [Thread-199307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:24:28.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:24:28.757 [DEBUG] [Thread-199309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:24:29.312 [DEBUG] [Thread-199307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:24:29.312 [DEBUG] [Thread-199307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:24:29.313 [DEBUG] [Thread-199307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:24:29.353 [DEBUG] [Thread-199307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:24:29.353 [DEBUG] [Thread-199307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:24:29.356 [DEBUG] [Thread-199307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:24:29.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:24:29.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:24:29.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:24:29.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:24:29.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:24:29.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:24:29.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:24:29.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:24:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:24:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.975099 -999.00  +10.90   4.24     90   +9.50 1 2 1 3 1     0    0 1.78 13.57 z..S. 4.2 4.2 196.6 4.7 11.5 -22.1 11.4 -21.1 11.1 -19.0 11.3 -21.1
2026-04-13T01:24:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:24:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:24:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.975099
2026-04-13T01:24:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:24:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:24:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:24:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:24:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:24:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:24:15', tmtdew=1.53516, humidity=90.2114, cloud=0.0, wind=4.69476, temperature=10.9537, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:24:08.554', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:24:29.383 [DEBUG] [Thread-199307] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:24:29.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:24:29.476 [DEBUG] [Thread-199311] [transport.py] [_log()] starting thread (client mode): 0xae5f1cc0
2026-04-13T01:24:29.477 [DEBUG] [Thread-199311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:24:29.492 [DEBUG] [Thread-199311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:24:29.492 [INFO] [Thread-199311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:24:29.499 [DEBUG] [Thread-199311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] client lang: <none>
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] server lang: <none>
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] kex follows: False
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:24:29.500 [DEBUG] [Thread-199311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:24:29.501 [DEBUG] [Thread-199311] [transport.py] [_log()] Compression: none
2026-04-13T01:24:29.501 [DEBUG] [Thread-199311] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:24:29.558 [DEBUG] [Thread-199311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:24:29.559 [DEBUG] [Thread-199311] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:24:29.559 [DEBUG] [Thread-199311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:24:29.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:24:29.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:24:29.614 [DEBUG] [Thread-199311] [transport.py] [_log()] userauth is OK
2026-04-13T01:24:29.615 [DEBUG] [Thread-199311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:24:29.615 [DEBUG] [Thread-199311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:24:29.615 [DEBUG] [Thread-199311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:24:29.615 [DEBUG] [Thread-199311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:24:29.634 [INFO] [Thread-199311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:24:29.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:24:29.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:24:30.440 [DEBUG] [Thread-199311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:24:30.440 [DEBUG] [Thread-199311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:24:30.488 [DEBUG] [Thread-199311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:24:30.488 [DEBUG] [Thread-199311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:24:30.499 [DEBUG] [Thread-199311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:24:30.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:24:30.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:24:30.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:24:30.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:24:30.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:24:30.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:24:30.539 [DEBUG] [Thread-199311] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:24:36.695 [DEBUG] [Thread-199313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:24:51.751 [DEBUG] [Thread-199314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:25:00.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:25:00.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:25:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:25:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 24, 50), 1.17538, 92.3896, 0.0, 5.50728, 10.8743, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:25:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:24:50
2026-04-13T01:25:02.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:25:02.391 [DEBUG] [Thread-199315] [transport.py] [_log()] starting thread (client mode): 0xae5f3370
2026-04-13T01:25:02.391 [DEBUG] [Thread-199315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:25:02.411 [DEBUG] [Thread-199315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:25:02.411 [INFO] [Thread-199315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:25:02.413 [DEBUG] [Thread-199315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] client lang: <none>
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] server lang: <none>
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] kex follows: False
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:25:02.414 [DEBUG] [Thread-199315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:25:02.415 [DEBUG] [Thread-199315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:25:02.415 [DEBUG] [Thread-199315] [transport.py] [_log()] Compression: none
2026-04-13T01:25:02.415 [DEBUG] [Thread-199315] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:25:02.425 [DEBUG] [Thread-199315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:25:02.426 [DEBUG] [Thread-199315] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:25:02.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:25:02.427 [DEBUG] [Thread-199315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:25:02.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:25:02.430 [DEBUG] [Thread-199315] [transport.py] [_log()] userauth is OK
2026-04-13T01:25:02.430 [DEBUG] [Thread-199315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:25:02.430 [DEBUG] [Thread-199315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:25:02.430 [DEBUG] [Thread-199315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:25:02.430 [DEBUG] [Thread-199315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:25:02.450 [INFO] [Thread-199315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:25:02.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:25:03.172 [DEBUG] [Thread-199315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:25:03.172 [DEBUG] [Thread-199315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:25:03.173 [DEBUG] [Thread-199315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:25:03.213 [DEBUG] [Thread-199315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:25:03.213 [DEBUG] [Thread-199315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:25:03.216 [DEBUG] [Thread-199315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:25:03.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:25:03.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:25:03.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:25:03.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:25:03.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:25:03.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:25:03.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:25:03.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:25:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:25:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.975099 -999.00  +10.90   4.24     90   +9.50 1 2 1 3 1     0    0 1.78 13.57 z..S. 4.2 4.2 196.6 4.7 11.5 -22.1 11.4 -21.1 11.1 -19.0 11.3 -21.1
2026-04-13T01:25:03.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:25:03.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:25:03.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.975099
2026-04-13T01:25:03.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:25:03.241 [DEBUG] [Thread-199315] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:25:03.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:25:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:25:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:25:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:25:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:24:50', tmtdew=1.17538, humidity=92.3896, cloud=0.0, wind=5.50728, temperature=10.8743, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:24:08.554', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:25:03.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:25:03.339 [DEBUG] [Thread-199318] [transport.py] [_log()] starting thread (client mode): 0xb0feb5b0
2026-04-13T01:25:03.339 [DEBUG] [Thread-199318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:25:03.358 [DEBUG] [Thread-199318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:25:03.359 [INFO] [Thread-199318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:25:03.370 [DEBUG] [Thread-199318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:25:03.370 [DEBUG] [Thread-199318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:25:03.370 [DEBUG] [Thread-199318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:25:03.370 [DEBUG] [Thread-199318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:03.370 [DEBUG] [Thread-199318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:03.370 [DEBUG] [Thread-199318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:03.370 [DEBUG] [Thread-199318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] client lang: <none>
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] server lang: <none>
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] kex follows: False
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] Compression: none
2026-04-13T01:25:03.371 [DEBUG] [Thread-199318] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:25:03.432 [DEBUG] [Thread-199318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:25:03.433 [DEBUG] [Thread-199318] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:25:03.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:25:03.434 [DEBUG] [Thread-199318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:25:03.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:25:03.489 [DEBUG] [Thread-199318] [transport.py] [_log()] userauth is OK
2026-04-13T01:25:03.489 [DEBUG] [Thread-199318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:25:03.489 [DEBUG] [Thread-199318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:25:03.490 [DEBUG] [Thread-199318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:25:03.490 [DEBUG] [Thread-199318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:25:03.511 [INFO] [Thread-199318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:25:03.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:25:03.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:25:04.284 [DEBUG] [Thread-199318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:25:04.284 [DEBUG] [Thread-199318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:25:04.332 [DEBUG] [Thread-199318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:25:04.332 [DEBUG] [Thread-199318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:25:04.342 [DEBUG] [Thread-199318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:25:04.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:25:04.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:25: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
2026-04-13T01:25:04.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:25:04.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:25:04.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:25:04.382 [DEBUG] [Thread-199318] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:25:06.787 [DEBUG] [Thread-199320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:25:09.487 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:25:09.488 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:25:21.843 [DEBUG] [Thread-199321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:25:28.821 [DEBUG] [Thread-199322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:25:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:25:34.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:25:34.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:25:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 25, 25), 1.53536, 90.2119, 0.0, 4.41252, 10.9872, 1, 2, 0, 2, 0, 0),)
2026-04-13T01:25:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:25:25
2026-04-13T01:25:36.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:25:36.219 [DEBUG] [Thread-199323] [transport.py] [_log()] starting thread (client mode): 0xae5f0cd0
2026-04-13T01:25:36.219 [DEBUG] [Thread-199323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:25:36.239 [DEBUG] [Thread-199323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:25:36.239 [INFO] [Thread-199323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] client lang: <none>
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] server lang: <none>
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] kex follows: False
2026-04-13T01:25:36.243 [DEBUG] [Thread-199323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:25:36.244 [DEBUG] [Thread-199323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:25:36.244 [DEBUG] [Thread-199323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:25:36.244 [DEBUG] [Thread-199323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:25:36.244 [DEBUG] [Thread-199323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:25:36.244 [DEBUG] [Thread-199323] [transport.py] [_log()] Compression: none
2026-04-13T01:25:36.244 [DEBUG] [Thread-199323] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:25:36.262 [DEBUG] [Thread-199323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:25:36.263 [DEBUG] [Thread-199323] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:25:36.263 [DEBUG] [Thread-199323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:25:36.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:25:36.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:25:36.265 [DEBUG] [Thread-199323] [transport.py] [_log()] userauth is OK
2026-04-13T01:25:36.266 [DEBUG] [Thread-199323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:25:36.266 [DEBUG] [Thread-199323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:25:36.266 [DEBUG] [Thread-199323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:25:36.266 [DEBUG] [Thread-199323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:25:36.289 [INFO] [Thread-199323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:25:36.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:25:36.880 [DEBUG] [Thread-199325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:25:37.385 [DEBUG] [Thread-199323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:25:37.385 [DEBUG] [Thread-199323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:25:37.385 [DEBUG] [Thread-199323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:25:37.426 [DEBUG] [Thread-199323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:25:37.426 [DEBUG] [Thread-199323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:25:37.430 [DEBUG] [Thread-199323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:25:37.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:25:37.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:25:37.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:25:37.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:25:37.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:25:37.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:25:37.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:25:37.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:25:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:25:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.975446 -999.00  +11.00   3.53     90   +9.50 1 2 1 3 1     0    0 1.80 13.05 .N... 3.5 3.5 196.6 4.6 11.5 -22.1 11.4 -21.0 11.1 -19.1 11.4 -21.1
2026-04-13T01:25:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:25:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:25:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.975446
2026-04-13T01:25:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:25:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:25:37.472 [DEBUG] [Thread-199323] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:25:37.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:25:37.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:25:37.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:25:37.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:25:25', tmtdew=1.53536, humidity=90.2119, cloud=0.0, wind=4.41252, temperature=10.9872, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:24:38.534', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:25:37.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:25:37.578 [DEBUG] [Thread-199327] [transport.py] [_log()] starting thread (client mode): 0xa795ada0
2026-04-13T01:25:37.578 [DEBUG] [Thread-199327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:25:37.592 [DEBUG] [Thread-199327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:25:37.592 [INFO] [Thread-199327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:25:37.599 [DEBUG] [Thread-199327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:25:37.599 [DEBUG] [Thread-199327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] client lang: <none>
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] server lang: <none>
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] kex follows: False
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] Compression: none
2026-04-13T01:25:37.600 [DEBUG] [Thread-199327] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:25:37.659 [DEBUG] [Thread-199327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:25:37.660 [DEBUG] [Thread-199327] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:25:37.660 [DEBUG] [Thread-199327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:25:37.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:25:37.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:25:37.714 [DEBUG] [Thread-199327] [transport.py] [_log()] userauth is OK
2026-04-13T01:25:37.715 [DEBUG] [Thread-199327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:25:37.715 [DEBUG] [Thread-199327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:25:37.715 [DEBUG] [Thread-199327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:25:37.715 [DEBUG] [Thread-199327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:25:37.738 [INFO] [Thread-199327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:25:37.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:25:37.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:25:38.542 [DEBUG] [Thread-199327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:25:38.542 [DEBUG] [Thread-199327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:25:38.590 [DEBUG] [Thread-199327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:25:38.590 [DEBUG] [Thread-199327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:25:38.599 [DEBUG] [Thread-199327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:25:38.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:25:38.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:25:38.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:25:38.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:25:38.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:25:38.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:25:38.637 [DEBUG] [Thread-199327] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:25:51.918 [DEBUG] [Thread-199329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:26:06.972 [DEBUG] [Thread-199330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:26:08.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:26:08.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:26:08.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:26:09.692 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:26:09.693 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:26:09.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 26, 1), 1.54058, 90.1787, 0.0, 4.81824, 10.9706, 1, 2, 0, 2, 0, 0),)
2026-04-13T01:26:09.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:26:01
2026-04-13T01:26:10.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:26:10.469 [DEBUG] [Thread-199331] [transport.py] [_log()] starting thread (client mode): 0xae5b4460
2026-04-13T01:26:10.469 [DEBUG] [Thread-199331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:26:10.489 [DEBUG] [Thread-199331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:26:10.489 [INFO] [Thread-199331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:26:10.493 [DEBUG] [Thread-199331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] client lang: <none>
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] server lang: <none>
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] kex follows: False
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] Compression: none
2026-04-13T01:26:10.494 [DEBUG] [Thread-199331] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:26:10.513 [DEBUG] [Thread-199331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:26:10.514 [DEBUG] [Thread-199331] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:26:10.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:26:10.515 [DEBUG] [Thread-199331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:26:10.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:26:10.517 [DEBUG] [Thread-199331] [transport.py] [_log()] userauth is OK
2026-04-13T01:26:10.517 [DEBUG] [Thread-199331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:26:10.518 [DEBUG] [Thread-199331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:26:10.518 [DEBUG] [Thread-199331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:26:10.518 [DEBUG] [Thread-199331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:26:10.535 [INFO] [Thread-199331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:26:10.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:26:11.323 [DEBUG] [Thread-199331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:26:11.323 [DEBUG] [Thread-199331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:26:11.323 [DEBUG] [Thread-199331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:26:11.364 [DEBUG] [Thread-199331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:26:11.364 [DEBUG] [Thread-199331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:26:11.368 [DEBUG] [Thread-199331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:26:11.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:26:11.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:26:11.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:26:11.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:26:11.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:26:11.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:26:11.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:26:11.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:26:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:26:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.975793 -999.00  +11.00   3.92     90   +9.50 1 2 1 3 1     0    0 1.80 13.77 .N... 3.9 3.9 194.8 4.5 11.5 -22.1 11.4 -21.2 11.1 -19.1 11.4 -20.9
2026-04-13T01:26:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:26:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:26:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.975793
2026-04-13T01:26:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:26:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:26:11.393 [DEBUG] [Thread-199331] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:26:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:26:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:26:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:26:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:26:01', tmtdew=1.54058, humidity=90.1787, cloud=0.0, wind=4.81824, temperature=10.9706, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:25:08.515', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:26:11.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:26:11.490 [DEBUG] [Thread-199334] [transport.py] [_log()] starting thread (client mode): 0xa795b460
2026-04-13T01:26:11.490 [DEBUG] [Thread-199334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:26:11.505 [DEBUG] [Thread-199334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:26:11.505 [INFO] [Thread-199334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:26:11.513 [DEBUG] [Thread-199334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:26:11.513 [DEBUG] [Thread-199334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:26:11.513 [DEBUG] [Thread-199334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] client lang: <none>
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] server lang: <none>
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] kex follows: False
2026-04-13T01:26:11.514 [DEBUG] [Thread-199334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:26:11.515 [DEBUG] [Thread-199334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:26:11.515 [DEBUG] [Thread-199334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:26:11.515 [DEBUG] [Thread-199334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:26:11.515 [DEBUG] [Thread-199334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:26:11.515 [DEBUG] [Thread-199334] [transport.py] [_log()] Compression: none
2026-04-13T01:26:11.515 [DEBUG] [Thread-199334] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:26:11.574 [DEBUG] [Thread-199334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:26:11.574 [DEBUG] [Thread-199334] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:26:11.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:26:11.576 [DEBUG] [Thread-199334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:26:11.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:26:11.629 [DEBUG] [Thread-199334] [transport.py] [_log()] userauth is OK
2026-04-13T01:26:11.629 [DEBUG] [Thread-199334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:26:11.629 [DEBUG] [Thread-199334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:26:11.629 [DEBUG] [Thread-199334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:26:11.629 [DEBUG] [Thread-199334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:26:11.643 [INFO] [Thread-199334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:26:11.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:26:11.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:26:12.477 [DEBUG] [Thread-199334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:26:12.478 [DEBUG] [Thread-199334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:26:12.525 [DEBUG] [Thread-199334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:26:12.525 [DEBUG] [Thread-199334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:26:12.535 [DEBUG] [Thread-199334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:26:12.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:26:12.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:26:12.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:26:12.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:26:12.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:26:12.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:26:12.571 [DEBUG] [Thread-199334] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:26:22.011 [DEBUG] [Thread-199336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:26:28.886 [DEBUG] [Thread-199337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:26:37.061 [DEBUG] [Thread-199338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:26:42.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:26:42.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:26:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:26:43.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 26, 36), 1.21302, 92.1583, 0.0, 5.54256, 10.9081, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:26:43.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:26:36
2026-04-13T01:26:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:26:44.475 [DEBUG] [Thread-199339] [transport.py] [_log()] starting thread (client mode): 0xae518220
2026-04-13T01:26:44.475 [DEBUG] [Thread-199339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:26:44.496 [DEBUG] [Thread-199339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:26:44.496 [INFO] [Thread-199339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] client lang: <none>
2026-04-13T01:26:44.499 [DEBUG] [Thread-199339] [transport.py] [_log()] server lang: <none>
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] kex follows: False
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] Compression: none
2026-04-13T01:26:44.500 [DEBUG] [Thread-199339] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:26:44.517 [DEBUG] [Thread-199339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:26:44.517 [DEBUG] [Thread-199339] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:26:44.518 [DEBUG] [Thread-199339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:26:44.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:26:44.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:26:44.520 [DEBUG] [Thread-199339] [transport.py] [_log()] userauth is OK
2026-04-13T01:26:44.520 [DEBUG] [Thread-199339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:26:44.520 [DEBUG] [Thread-199339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:26:44.520 [DEBUG] [Thread-199339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:26:44.521 [DEBUG] [Thread-199339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:26:44.545 [INFO] [Thread-199339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:26:44.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:26:45.345 [DEBUG] [Thread-199339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:26:45.345 [DEBUG] [Thread-199339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:26:45.345 [DEBUG] [Thread-199339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:26:45.386 [DEBUG] [Thread-199339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:26:45.386 [DEBUG] [Thread-199339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:26:45.389 [DEBUG] [Thread-199339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:26:45.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:26:45.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:26:45.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:26:45.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:26:45.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:26:45.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:26:45.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:26:45.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:26:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:26:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.976488 -999.00  +11.00   2.99     90   +9.60 1 2 1 3 1     0    0 1.80 12.85 Z..s. 3.0 3.0 182.4 3.6 11.5 -22.2 11.3 -21.3 11.1 -19.2 11.4 -21.2
2026-04-13T01:26:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:26:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:26:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.976488
2026-04-13T01:26:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:26:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:26:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:26:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:26:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:26:45.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:26:36', tmtdew=1.21302, humidity=92.1583, cloud=0.0, wind=5.54256, temperature=10.9081, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:26:08.563', atlas_cloud=2, atlas_rain=1, zp_data=[2.1647499999999997, 0.7482500000000005, 0.6112500000000001, nan, nan, nan, nan, nan, nan, nan, 1.2002499999999996, 0.36599999999999966, nan, nan, nan, nan, nan, 2.9154999999999998, 2.5145, 2.802249999999999, nan, 2.8767499999999986, nan, nan, nan, 0.4455, 0.28974999999999973, 0.41849999999999987, 0.4815000000000005, 0.628000000000001, nan, 2.4705000000000004, 1.8597499999999991], zp_timestamp='2026-04-12T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:26:45.413 [DEBUG] [Thread-199339] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:26:45.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:26:45.504 [DEBUG] [Thread-199342] [transport.py] [_log()] starting thread (client mode): 0xae50a260
2026-04-13T01:26:45.504 [DEBUG] [Thread-199342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:26:45.519 [DEBUG] [Thread-199342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:26:45.519 [INFO] [Thread-199342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:26:45.527 [DEBUG] [Thread-199342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] client lang: <none>
2026-04-13T01:26:45.528 [DEBUG] [Thread-199342] [transport.py] [_log()] server lang: <none>
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] kex follows: False
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] Compression: none
2026-04-13T01:26:45.529 [DEBUG] [Thread-199342] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:26:45.587 [DEBUG] [Thread-199342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:26:45.588 [DEBUG] [Thread-199342] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:26:45.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:26:45.589 [DEBUG] [Thread-199342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:26:45.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:26:45.644 [DEBUG] [Thread-199342] [transport.py] [_log()] userauth is OK
2026-04-13T01:26:45.644 [DEBUG] [Thread-199342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:26:45.644 [DEBUG] [Thread-199342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:26:45.644 [DEBUG] [Thread-199342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:26:45.644 [DEBUG] [Thread-199342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:26:45.663 [INFO] [Thread-199342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:26:45.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:26:45.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:26:46.509 [DEBUG] [Thread-199342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:26:46.510 [DEBUG] [Thread-199342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:26:46.558 [DEBUG] [Thread-199342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:26:46.558 [DEBUG] [Thread-199342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:26:46.568 [DEBUG] [Thread-199342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:26:46.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:26:46.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:26:46.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:26:46.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:26:46.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:26:46.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:26:46.604 [DEBUG] [Thread-199342] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:26:52.099 [DEBUG] [Thread-199344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:07.159 [DEBUG] [Thread-199345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:09.899 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:09.900 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:27:16.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:27:16.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:27:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 26, 36), 1.21302, 92.1583, 0.0, 5.54256, 10.9081, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:27:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:26:36
2026-04-13T01:27:18.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:27:18.595 [DEBUG] [Thread-199346] [transport.py] [_log()] starting thread (client mode): 0xae5b72e0
2026-04-13T01:27:18.596 [DEBUG] [Thread-199346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:27:18.616 [DEBUG] [Thread-199346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:27:18.616 [INFO] [Thread-199346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:27:18.619 [DEBUG] [Thread-199346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:27:18.619 [DEBUG] [Thread-199346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:27:18.619 [DEBUG] [Thread-199346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:27:18.619 [DEBUG] [Thread-199346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:18.619 [DEBUG] [Thread-199346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:18.619 [DEBUG] [Thread-199346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] client lang: <none>
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] server lang: <none>
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] kex follows: False
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] Compression: none
2026-04-13T01:27:18.620 [DEBUG] [Thread-199346] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:27:18.637 [DEBUG] [Thread-199346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:27:18.638 [DEBUG] [Thread-199346] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:27:18.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:27:18.639 [DEBUG] [Thread-199346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:27:18.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:27:18.641 [DEBUG] [Thread-199346] [transport.py] [_log()] userauth is OK
2026-04-13T01:27:18.641 [DEBUG] [Thread-199346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:27:18.642 [DEBUG] [Thread-199346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:27:18.642 [DEBUG] [Thread-199346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:27:18.642 [DEBUG] [Thread-199346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:27:18.677 [INFO] [Thread-199346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:27:18.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:27:19.475 [DEBUG] [Thread-199346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:27:19.475 [DEBUG] [Thread-199346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:27:19.475 [DEBUG] [Thread-199346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:27:19.516 [DEBUG] [Thread-199346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:27:19.516 [DEBUG] [Thread-199346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:27:19.520 [DEBUG] [Thread-199346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:27:19.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:27:19.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:27:19.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:27:19.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:27:19.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:27:19.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:27:19.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:27:19.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:27:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:27:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.976835 -999.00  +11.00   3.25     90   +9.50 1 2 1 3 1     0    0 1.79 11.49 ZN... 3.2 3.2 177.0 3.7 11.4 -22.2 11.4 -21.3 11.1 -19.2 11.3 -21.0
2026-04-13T01:27:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:27:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:27:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.976835
2026-04-13T01:27:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:27:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:27:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:27:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:27:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:27:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:26:36', tmtdew=1.21302, humidity=92.1583, cloud=0.0, wind=5.54256, temperature=10.9081, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:26:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:27:19.548 [DEBUG] [Thread-199346] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:27:19.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:27:19.642 [DEBUG] [Thread-199349] [transport.py] [_log()] starting thread (client mode): 0xa795ae60
2026-04-13T01:27:19.642 [DEBUG] [Thread-199349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:27:19.658 [DEBUG] [Thread-199349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:27:19.659 [INFO] [Thread-199349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:27:19.666 [DEBUG] [Thread-199349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:27:19.666 [DEBUG] [Thread-199349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:27:19.666 [DEBUG] [Thread-199349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] client lang: <none>
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] server lang: <none>
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] kex follows: False
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:27:19.667 [DEBUG] [Thread-199349] [transport.py] [_log()] Compression: none
2026-04-13T01:27:19.668 [DEBUG] [Thread-199349] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:27:19.725 [DEBUG] [Thread-199349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:27:19.726 [DEBUG] [Thread-199349] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:27:19.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:27:19.727 [DEBUG] [Thread-199349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:27:19.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:27:19.782 [DEBUG] [Thread-199349] [transport.py] [_log()] userauth is OK
2026-04-13T01:27:19.782 [DEBUG] [Thread-199349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:27:19.782 [DEBUG] [Thread-199349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:27:19.783 [DEBUG] [Thread-199349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:27:19.783 [DEBUG] [Thread-199349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:27:19.802 [INFO] [Thread-199349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:27:19.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:27:19.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:27:20.625 [DEBUG] [Thread-199349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:27:20.625 [DEBUG] [Thread-199349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:27:20.673 [DEBUG] [Thread-199349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:27:20.674 [DEBUG] [Thread-199349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:27:20.683 [DEBUG] [Thread-199349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:27:20.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:27: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')
2026-04-13T01:27:20.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:27:20.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:27:20.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:27:20.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:27:20.718 [DEBUG] [Thread-199349] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:27:22.197 [DEBUG] [Thread-199351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:28.959 [DEBUG] [Thread-199352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:37.259 [DEBUG] [Thread-199353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:50.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:27:50.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:27:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:27:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 27, 12), 1.51158, 90.546, 0.0, 4.7124, 10.9209, 1, 2, 0, 2, 0, 0),)
2026-04-13T01:27:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:27:12
2026-04-13T01:27:52.296 [DEBUG] [Thread-199354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:27:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:27:52.770 [DEBUG] [Thread-199355] [transport.py] [_log()] starting thread (client mode): 0xae5095d0
2026-04-13T01:27:52.770 [DEBUG] [Thread-199355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:27:52.791 [DEBUG] [Thread-199355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:27:52.791 [INFO] [Thread-199355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:27:52.794 [DEBUG] [Thread-199355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:27:52.794 [DEBUG] [Thread-199355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:27:52.794 [DEBUG] [Thread-199355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:27:52.794 [DEBUG] [Thread-199355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] client lang: <none>
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] server lang: <none>
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] kex follows: False
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:27:52.795 [DEBUG] [Thread-199355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:27:52.796 [DEBUG] [Thread-199355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:27:52.796 [DEBUG] [Thread-199355] [transport.py] [_log()] Compression: none
2026-04-13T01:27:52.796 [DEBUG] [Thread-199355] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:27:52.814 [DEBUG] [Thread-199355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:27:52.815 [DEBUG] [Thread-199355] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:27:52.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:27:52.817 [DEBUG] [Thread-199355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:27:52.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:27:52.819 [DEBUG] [Thread-199355] [transport.py] [_log()] userauth is OK
2026-04-13T01:27:52.819 [DEBUG] [Thread-199355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:27:52.820 [DEBUG] [Thread-199355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:27:52.820 [DEBUG] [Thread-199355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:27:52.820 [DEBUG] [Thread-199355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:27:52.840 [INFO] [Thread-199355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:27:52.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:27:53.551 [DEBUG] [Thread-199355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:27:53.551 [DEBUG] [Thread-199355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:27:53.552 [DEBUG] [Thread-199355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:27:53.593 [DEBUG] [Thread-199355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:27:53.593 [DEBUG] [Thread-199355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:27:53.596 [DEBUG] [Thread-199355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:27:53.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:27:53.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:27:53.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:27:53.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:27:53.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:27:53.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:27:53.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:27:53.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:27:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:27:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.977182 -999.00  +11.00   2.82     90   +9.50 1 2 1 3 1     0    0 1.80 11.80 Z.e.. 2.8 2.8 183.8 3.5 11.5 -22.0 11.4 -21.2 11.1 -19.1 11.3 -21.2
2026-04-13T01:27:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:27:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:27:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.977182
2026-04-13T01:27:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:27:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:27:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:27:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:27:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:27:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:27:12', tmtdew=1.51158, humidity=90.546, cloud=0.0, wind=4.7124, temperature=10.9209, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:27:08.525', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:27:53.622 [DEBUG] [Thread-199355] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:27:53.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:27:53.721 [DEBUG] [Thread-199358] [transport.py] [_log()] starting thread (client mode): 0xae508700
2026-04-13T01:27:53.721 [DEBUG] [Thread-199358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:27:53.735 [DEBUG] [Thread-199358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:27:53.735 [INFO] [Thread-199358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:27:53.743 [DEBUG] [Thread-199358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:27:53.743 [DEBUG] [Thread-199358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:27:53.743 [DEBUG] [Thread-199358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:27:53.743 [DEBUG] [Thread-199358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] client lang: <none>
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] server lang: <none>
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] kex follows: False
2026-04-13T01:27:53.744 [DEBUG] [Thread-199358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:27:53.745 [DEBUG] [Thread-199358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:27:53.745 [DEBUG] [Thread-199358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:27:53.745 [DEBUG] [Thread-199358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:27:53.745 [DEBUG] [Thread-199358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:27:53.745 [DEBUG] [Thread-199358] [transport.py] [_log()] Compression: none
2026-04-13T01:27:53.745 [DEBUG] [Thread-199358] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:27:53.804 [DEBUG] [Thread-199358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:27:53.805 [DEBUG] [Thread-199358] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:27:53.806 [DEBUG] [Thread-199358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:27:53.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:27:53.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:27:53.863 [DEBUG] [Thread-199358] [transport.py] [_log()] userauth is OK
2026-04-13T01:27:53.864 [DEBUG] [Thread-199358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:27:53.864 [DEBUG] [Thread-199358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:27:53.864 [DEBUG] [Thread-199358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:27:53.865 [DEBUG] [Thread-199358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:27:53.884 [INFO] [Thread-199358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:27:53.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:27:53.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:27:54.695 [DEBUG] [Thread-199358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:27:54.695 [DEBUG] [Thread-199358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:27:54.743 [DEBUG] [Thread-199358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:27:54.743 [DEBUG] [Thread-199358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:27:54.752 [DEBUG] [Thread-199358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:27:54.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:27: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')
2026-04-13T01:27:54.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:27:54.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:27:54.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:27:54.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:27:54.789 [DEBUG] [Thread-199358] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:28:07.334 [DEBUG] [Thread-199360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:28:10.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:28:10.107 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:28:22.387 [DEBUG] [Thread-199361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:28:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:28:24.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:28:24.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:28:26.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 27, 47), 1.20736, 92.1915, 0.0, 5.89536, 10.8749, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:28:26.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:27:47
2026-04-13T01:28:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:28:26.685 [DEBUG] [Thread-199362] [transport.py] [_log()] starting thread (client mode): 0xae5083a0
2026-04-13T01:28:26.685 [DEBUG] [Thread-199362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:28:26.705 [DEBUG] [Thread-199362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:28:26.705 [INFO] [Thread-199362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] client lang: <none>
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] server lang: <none>
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] kex follows: False
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] Compression: none
2026-04-13T01:28:26.708 [DEBUG] [Thread-199362] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:28:26.718 [DEBUG] [Thread-199362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:28:26.719 [DEBUG] [Thread-199362] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:28:26.719 [DEBUG] [Thread-199362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:28:26.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:28:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:28:26.721 [DEBUG] [Thread-199362] [transport.py] [_log()] userauth is OK
2026-04-13T01:28:26.721 [DEBUG] [Thread-199362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:28:26.721 [DEBUG] [Thread-199362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:28:26.721 [DEBUG] [Thread-199362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:28:26.721 [DEBUG] [Thread-199362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:28:26.739 [INFO] [Thread-199362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:28:26.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:28:27.501 [DEBUG] [Thread-199362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:28:27.501 [DEBUG] [Thread-199362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:28:27.501 [DEBUG] [Thread-199362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:28:27.543 [DEBUG] [Thread-199362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:28:27.543 [DEBUG] [Thread-199362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:28:27.546 [DEBUG] [Thread-199362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:28:27.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:28:27.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:28:27.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:28:27.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:28:27.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:28:27.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:28:27.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:28:27.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:28:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:28:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.977530 -999.00  +11.00   2.77     90   +9.60 1 2 1 3 1     0    0 1.79 12.20 Z.e.. 2.8 2.8 181.4 3.1 11.5 -22.2 11.4 -21.1 11.1 -19.0 11.3 -20.9
2026-04-13T01:28:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:28:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:28:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.977530
2026-04-13T01:28:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:28:27.573 [DEBUG] [Thread-199362] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:28:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:28:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:28:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:28:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:28:27.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:27:47', tmtdew=1.20736, humidity=92.1915, cloud=0.0, wind=5.89536, temperature=10.8749, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:27:38.592', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:28:27.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:28:27.670 [DEBUG] [Thread-199365] [transport.py] [_log()] starting thread (client mode): 0xae5b61d0
2026-04-13T01:28:27.670 [DEBUG] [Thread-199365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:28:27.685 [DEBUG] [Thread-199365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:28:27.685 [INFO] [Thread-199365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:28:27.692 [DEBUG] [Thread-199365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:28:27.692 [DEBUG] [Thread-199365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:28:27.692 [DEBUG] [Thread-199365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:28:27.692 [DEBUG] [Thread-199365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:28:27.692 [DEBUG] [Thread-199365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] client lang: <none>
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] server lang: <none>
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] kex follows: False
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:28:27.693 [DEBUG] [Thread-199365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:28:27.694 [DEBUG] [Thread-199365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:28:27.694 [DEBUG] [Thread-199365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:28:27.694 [DEBUG] [Thread-199365] [transport.py] [_log()] Compression: none
2026-04-13T01:28:27.694 [DEBUG] [Thread-199365] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:28:27.757 [DEBUG] [Thread-199365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:28:27.758 [DEBUG] [Thread-199365] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:28:27.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:28:27.759 [DEBUG] [Thread-199365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:28:27.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:28:27.813 [DEBUG] [Thread-199365] [transport.py] [_log()] userauth is OK
2026-04-13T01:28:27.813 [DEBUG] [Thread-199365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:28:27.813 [DEBUG] [Thread-199365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:28:27.813 [DEBUG] [Thread-199365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:28:27.813 [DEBUG] [Thread-199365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:28:27.839 [INFO] [Thread-199365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:28:27.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:28:27.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:28:28.621 [DEBUG] [Thread-199365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:28:28.621 [DEBUG] [Thread-199365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:28:28.669 [DEBUG] [Thread-199365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:28:28.669 [DEBUG] [Thread-199365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:28:28.678 [DEBUG] [Thread-199365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:28:28.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:28:28.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:28:28.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:28:28.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:28:28.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:28:28.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:28:28.714 [DEBUG] [Thread-199365] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:28:29.016 [DEBUG] [Thread-199367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:28:37.430 [DEBUG] [Thread-199368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:28:52.482 [DEBUG] [Thread-199369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:28:58.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:28:58.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:28:58.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:28:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 28, 23), 1.49861, 90.6289, 0.0, 4.90644, 10.9206, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:28:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:28:23
2026-04-13T01:29:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:29:00.597 [DEBUG] [Thread-199370] [transport.py] [_log()] starting thread (client mode): 0xb0fe9f90
2026-04-13T01:29:00.597 [DEBUG] [Thread-199370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:29:00.622 [DEBUG] [Thread-199370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:29:00.622 [INFO] [Thread-199370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:29:00.626 [DEBUG] [Thread-199370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:29:00.626 [DEBUG] [Thread-199370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:29:00.626 [DEBUG] [Thread-199370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:29:00.626 [DEBUG] [Thread-199370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] client lang: <none>
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] server lang: <none>
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] kex follows: False
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:29:00.627 [DEBUG] [Thread-199370] [transport.py] [_log()] Compression: none
2026-04-13T01:29:00.628 [DEBUG] [Thread-199370] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:29:00.645 [DEBUG] [Thread-199370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:29:00.646 [DEBUG] [Thread-199370] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:29:00.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:29:00.647 [DEBUG] [Thread-199370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:29:00.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:29:00.649 [DEBUG] [Thread-199370] [transport.py] [_log()] userauth is OK
2026-04-13T01:29:00.649 [DEBUG] [Thread-199370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:29:00.649 [DEBUG] [Thread-199370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:29:00.650 [DEBUG] [Thread-199370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:29:00.650 [DEBUG] [Thread-199370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:29:00.674 [INFO] [Thread-199370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:29:00.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:29:01.434 [DEBUG] [Thread-199370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:29:01.434 [DEBUG] [Thread-199370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:29:01.434 [DEBUG] [Thread-199370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:29:01.475 [DEBUG] [Thread-199370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:29:01.475 [DEBUG] [Thread-199370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:29:01.478 [DEBUG] [Thread-199370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:29:01.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:29:01.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:29:01.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:29:01.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:29:01.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:29:01.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:29:01.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:29:01.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:29:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:29:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.977877 -999.00  +11.00   3.26     91   +9.60 1 2 1 3 1     0    0 1.75 10.56 Z.... 3.3 3.3 192.4 3.5 11.5 -22.2 11.4 -21.1 11.1 -19.1 11.4 -21.1
2026-04-13T01:29:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:29:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:29:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.977877
2026-04-13T01:29:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:29:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:29:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:29:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:29:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:29:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:28:23', tmtdew=1.49861, humidity=90.6289, cloud=0.0, wind=4.90644, temperature=10.9206, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:28:08.573', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:29:01.502 [DEBUG] [Thread-199370] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:29:01.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:29:01.595 [DEBUG] [Thread-199373] [transport.py] [_log()] starting thread (client mode): 0xae50a080
2026-04-13T01:29:01.595 [DEBUG] [Thread-199373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:29:01.609 [DEBUG] [Thread-199373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:29:01.609 [INFO] [Thread-199373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] client lang: <none>
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] server lang: <none>
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] kex follows: False
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:29:01.617 [DEBUG] [Thread-199373] [transport.py] [_log()] Compression: none
2026-04-13T01:29:01.618 [DEBUG] [Thread-199373] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:29:01.674 [DEBUG] [Thread-199373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:29:01.674 [DEBUG] [Thread-199373] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:29:01.674 [DEBUG] [Thread-199373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:29:01.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:29:01.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:29:01.730 [DEBUG] [Thread-199373] [transport.py] [_log()] userauth is OK
2026-04-13T01:29:01.730 [DEBUG] [Thread-199373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:29:01.730 [DEBUG] [Thread-199373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:29:01.730 [DEBUG] [Thread-199373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:29:01.730 [DEBUG] [Thread-199373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:29:01.746 [INFO] [Thread-199373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:29:01.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:29:01.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:29:02.575 [DEBUG] [Thread-199373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:29:02.576 [DEBUG] [Thread-199373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:29:02.624 [DEBUG] [Thread-199373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:29:02.624 [DEBUG] [Thread-199373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:29:02.634 [DEBUG] [Thread-199373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:29:02.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:29:02.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:29:02.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:29:02.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:29:02.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:29:02.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:29:02.670 [DEBUG] [Thread-199373] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:29:07.527 [DEBUG] [Thread-199375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:29:10.308 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:29:10.310 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:29:22.582 [DEBUG] [Thread-199376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:29:29.095 [DEBUG] [Thread-199377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:29:32.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:29:32.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:29:32.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:29:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 28, 59), 1.40636, 90.5792, 0.0, 5.34744, 10.8375, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:29:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:28:59
2026-04-13T01:29:34.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:29:34.505 [DEBUG] [Thread-199378] [transport.py] [_log()] starting thread (client mode): 0xae5f1300
2026-04-13T01:29:34.505 [DEBUG] [Thread-199378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:29:34.520 [DEBUG] [Thread-199378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:29:34.520 [INFO] [Thread-199378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:29:34.523 [DEBUG] [Thread-199378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:29:34.523 [DEBUG] [Thread-199378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:29:34.523 [DEBUG] [Thread-199378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] client lang: <none>
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] server lang: <none>
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] kex follows: False
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] Compression: none
2026-04-13T01:29:34.524 [DEBUG] [Thread-199378] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:29:34.541 [DEBUG] [Thread-199378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:29:34.542 [DEBUG] [Thread-199378] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:29:34.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:29:34.543 [DEBUG] [Thread-199378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:29:34.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:29:34.545 [DEBUG] [Thread-199378] [transport.py] [_log()] userauth is OK
2026-04-13T01:29:34.546 [DEBUG] [Thread-199378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:29:34.546 [DEBUG] [Thread-199378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:29:34.546 [DEBUG] [Thread-199378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:29:34.546 [DEBUG] [Thread-199378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:29:34.570 [INFO] [Thread-199378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:29:34.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:29:35.339 [DEBUG] [Thread-199378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:29:35.340 [DEBUG] [Thread-199378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:29:35.340 [DEBUG] [Thread-199378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:29:35.380 [DEBUG] [Thread-199378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:29:35.380 [DEBUG] [Thread-199378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:29:35.384 [DEBUG] [Thread-199378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:29:35.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:29:35.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:29:35.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:29:35.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:29:35.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:29:35.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:29:35.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:29:35.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:29:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:29:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.978224 -999.00  +10.90   2.56     91   +9.50 1 2 1 3 1     0    0 1.74 9.81 z.... 2.6 2.6 201.4 3.4 11.5 -22.1 11.3 -21.1 11.1 -19.1 11.3 -21.1
2026-04-13T01:29:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:29:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:29:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.978224
2026-04-13T01:29:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:29:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:29:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:29:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:29:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:29:35.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:28:59', tmtdew=1.40636, humidity=90.5792, cloud=0.0, wind=5.34744, temperature=10.8375, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:28:38.554', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:29:35.411 [DEBUG] [Thread-199378] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:29:35.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:29:35.508 [DEBUG] [Thread-199381] [transport.py] [_log()] starting thread (client mode): 0xae50a290
2026-04-13T01:29:35.509 [DEBUG] [Thread-199381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:29:35.524 [DEBUG] [Thread-199381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:29:35.524 [INFO] [Thread-199381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:29:35.531 [DEBUG] [Thread-199381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] client lang: <none>
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] server lang: <none>
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] kex follows: False
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:29:35.532 [DEBUG] [Thread-199381] [transport.py] [_log()] Compression: none
2026-04-13T01:29:35.533 [DEBUG] [Thread-199381] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:29:35.587 [DEBUG] [Thread-199381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:29:35.588 [DEBUG] [Thread-199381] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:29:35.588 [DEBUG] [Thread-199381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:29:35.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:29:35.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:29:35.645 [DEBUG] [Thread-199381] [transport.py] [_log()] userauth is OK
2026-04-13T01:29:35.645 [DEBUG] [Thread-199381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:29:35.645 [DEBUG] [Thread-199381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:29:35.645 [DEBUG] [Thread-199381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:29:35.645 [DEBUG] [Thread-199381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:29:35.664 [INFO] [Thread-199381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:29:35.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:29:35.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:29:36.452 [DEBUG] [Thread-199381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:29:36.453 [DEBUG] [Thread-199381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:29:36.501 [DEBUG] [Thread-199381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:29:36.502 [DEBUG] [Thread-199381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:29:36.511 [DEBUG] [Thread-199381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:29:36.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:29:36.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:29:36.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:29:36.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:29:36.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:29:36.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:29:36.548 [DEBUG] [Thread-199381] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:29:37.619 [DEBUG] [Thread-199383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:29:52.673 [DEBUG] [Thread-199384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:30:06.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:30:06.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:30:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:30:07.707 [DEBUG] [Thread-199385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:30:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 29, 35), 1.20258, 92.2247, 0.0, 7.236, 10.9413, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:30:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:29:35
2026-04-13T01:30:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:30:08.360 [DEBUG] [Thread-199386] [transport.py] [_log()] starting thread (client mode): 0xb39c5ab0
2026-04-13T01:30:08.360 [DEBUG] [Thread-199386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:30:08.379 [DEBUG] [Thread-199386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:30:08.379 [INFO] [Thread-199386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] client lang: <none>
2026-04-13T01:30:08.381 [DEBUG] [Thread-199386] [transport.py] [_log()] server lang: <none>
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] kex follows: False
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] Compression: none
2026-04-13T01:30:08.382 [DEBUG] [Thread-199386] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:30:08.396 [DEBUG] [Thread-199386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:30:08.397 [DEBUG] [Thread-199386] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:30:08.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:30:08.397 [DEBUG] [Thread-199386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:30:08.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:30:08.398 [DEBUG] [Thread-199386] [transport.py] [_log()] userauth is OK
2026-04-13T01:30:08.398 [DEBUG] [Thread-199386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:30:08.398 [DEBUG] [Thread-199386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:30:08.398 [DEBUG] [Thread-199386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:30:08.398 [DEBUG] [Thread-199386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:30:08.407 [INFO] [Thread-199386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:30:08.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:30:09.558 [DEBUG] [Thread-199386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:30:09.558 [DEBUG] [Thread-199386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:30:09.558 [DEBUG] [Thread-199386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:30:09.599 [DEBUG] [Thread-199386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:30:09.599 [DEBUG] [Thread-199386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:30:09.603 [DEBUG] [Thread-199386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:30:09.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:30:09.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:30:09.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:30:09.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:30:09.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:30:09.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:30:09.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:30:09.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:30:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:30:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.978571 -999.00  +10.90   3.07     91   +9.50 1 2 1 3 1     0    0 1.73 9.88 z.... 3.1 3.1 199.4 4.5 11.5 -22.2 11.3 -21.0 11.1 -19.2 11.4 -21.0
2026-04-13T01:30:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:30:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:30:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.978571
2026-04-13T01:30:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:30:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:30:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:30:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:30:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:30:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:29:35', tmtdew=1.20258, humidity=92.2247, cloud=0.0, wind=7.236, temperature=10.9413, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:29:08.534', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:30:09.651 [DEBUG] [Thread-199386] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:30:09.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:30:09.745 [DEBUG] [Thread-199389] [transport.py] [_log()] starting thread (client mode): 0xae50bc70
2026-04-13T01:30:09.745 [DEBUG] [Thread-199389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:30:09.760 [DEBUG] [Thread-199389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:30:09.760 [INFO] [Thread-199389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:30:09.767 [DEBUG] [Thread-199389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:30:09.767 [DEBUG] [Thread-199389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:30:09.767 [DEBUG] [Thread-199389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] client lang: <none>
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] server lang: <none>
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] kex follows: False
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:30:09.768 [DEBUG] [Thread-199389] [transport.py] [_log()] Compression: none
2026-04-13T01:30:09.769 [DEBUG] [Thread-199389] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:30:09.825 [DEBUG] [Thread-199389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:30:09.826 [DEBUG] [Thread-199389] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:30:09.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:30:09.827 [DEBUG] [Thread-199389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:30:09.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:30:09.882 [DEBUG] [Thread-199389] [transport.py] [_log()] userauth is OK
2026-04-13T01:30:09.882 [DEBUG] [Thread-199389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:30:09.882 [DEBUG] [Thread-199389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:30:09.882 [DEBUG] [Thread-199389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:30:09.882 [DEBUG] [Thread-199389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:30:09.901 [INFO] [Thread-199389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:30:09.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:30:09.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:30:10.516 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:30:10.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:30:10.739 [DEBUG] [Thread-199389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:30:10.739 [DEBUG] [Thread-199389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:30:10.787 [DEBUG] [Thread-199389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:30:10.787 [DEBUG] [Thread-199389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:30:10.799 [DEBUG] [Thread-199389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:30:10.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:30:10.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:30:10.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:30:10.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:30:10.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:30:10.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:30:10.835 [DEBUG] [Thread-199389] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:30:22.748 [DEBUG] [Thread-199391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:30:29.154 [DEBUG] [Thread-199392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:30:37.801 [DEBUG] [Thread-199393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:30:40.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:30:40.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:30:40.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:30:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 30, 10), 1.44622, 90.6455, 0.0, 5.5062, 10.9038, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:30:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:30:10
2026-04-13T01:30:42.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:30:42.723 [DEBUG] [Thread-199394] [transport.py] [_log()] starting thread (client mode): 0xae5085e0
2026-04-13T01:30:42.724 [DEBUG] [Thread-199394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:30:42.743 [DEBUG] [Thread-199394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:30:42.744 [INFO] [Thread-199394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] client lang: <none>
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] server lang: <none>
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] kex follows: False
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:30:42.747 [DEBUG] [Thread-199394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:30:42.748 [DEBUG] [Thread-199394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:30:42.748 [DEBUG] [Thread-199394] [transport.py] [_log()] Compression: none
2026-04-13T01:30:42.748 [DEBUG] [Thread-199394] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:30:42.764 [DEBUG] [Thread-199394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:30:42.764 [DEBUG] [Thread-199394] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:30:42.765 [DEBUG] [Thread-199394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:30:42.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:30:42.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:30:42.767 [DEBUG] [Thread-199394] [transport.py] [_log()] userauth is OK
2026-04-13T01:30:42.767 [DEBUG] [Thread-199394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:30:42.767 [DEBUG] [Thread-199394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:30:42.767 [DEBUG] [Thread-199394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:30:42.767 [DEBUG] [Thread-199394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:30:42.790 [INFO] [Thread-199394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:30:42.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:30:43.579 [DEBUG] [Thread-199394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:30:43.579 [DEBUG] [Thread-199394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:30:43.579 [DEBUG] [Thread-199394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:30:43.620 [DEBUG] [Thread-199394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:30:43.620 [DEBUG] [Thread-199394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:30:43.622 [DEBUG] [Thread-199394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:30:43.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:30:43.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:30:43.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:30:43.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:30:43.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:30:43.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:30:43.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:30:43.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:30:43.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:30:43.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.979265 -999.00  +10.80   1.58     91   +9.50 1 2 1 3 1     0    0 1.68 7.74 Z.... 1.6 1.6 217.3 3.7 11.5 -22.0 11.4 -20.9 11.1 -19.1 11.3 -21.1
2026-04-13T01:30:43.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:30:43.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:30:43.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.979265
2026-04-13T01:30:43.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:30:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:30:43.642 [DEBUG] [Thread-199394] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:30:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:30:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:30:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:30:43.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:30:10', tmtdew=1.44622, humidity=90.6455, cloud=0.0, wind=5.5062, temperature=10.9038, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:30:08.496', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:30:43.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:30:43.738 [DEBUG] [Thread-199397] [transport.py] [_log()] starting thread (client mode): 0xa795a380
2026-04-13T01:30:43.738 [DEBUG] [Thread-199397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:30:43.753 [DEBUG] [Thread-199397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:30:43.753 [INFO] [Thread-199397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:30:43.761 [DEBUG] [Thread-199397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:30:43.761 [DEBUG] [Thread-199397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:30:43.761 [DEBUG] [Thread-199397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:30:43.761 [DEBUG] [Thread-199397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:43.761 [DEBUG] [Thread-199397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:30:43.761 [DEBUG] [Thread-199397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:43.761 [DEBUG] [Thread-199397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] client lang: <none>
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] server lang: <none>
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] kex follows: False
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] Compression: none
2026-04-13T01:30:43.762 [DEBUG] [Thread-199397] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:30:43.819 [DEBUG] [Thread-199397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:30:43.819 [DEBUG] [Thread-199397] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:30:43.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:30:43.820 [DEBUG] [Thread-199397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:30:43.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:30:43.876 [DEBUG] [Thread-199397] [transport.py] [_log()] userauth is OK
2026-04-13T01:30:43.876 [DEBUG] [Thread-199397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:30:43.877 [DEBUG] [Thread-199397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:30:43.877 [DEBUG] [Thread-199397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:30:43.877 [DEBUG] [Thread-199397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:30:43.908 [INFO] [Thread-199397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:30:43.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:30:43.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:30:44.748 [DEBUG] [Thread-199397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:30:44.748 [DEBUG] [Thread-199397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:30:44.795 [DEBUG] [Thread-199397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:30:44.795 [DEBUG] [Thread-199397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:30:44.804 [DEBUG] [Thread-199397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:30:44.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:30:44.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:30:44.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:30:44.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:30:44.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:30:44.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:30:44.836 [DEBUG] [Thread-199397] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:30:52.839 [DEBUG] [Thread-199399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:31:07.891 [DEBUG] [Thread-199400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:31:10.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:31:10.722 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:31:14.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:31:14.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:31:14.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:31:16.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 30, 45), 1.19186, 92.2911, 0.0, 7.7652, 10.9413, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:31:16.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:30:45
2026-04-13T01:31:16.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:31:16.705 [DEBUG] [Thread-199401] [transport.py] [_log()] starting thread (client mode): 0xb0fe98d0
2026-04-13T01:31:16.705 [DEBUG] [Thread-199401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:31:16.725 [DEBUG] [Thread-199401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:31:16.725 [INFO] [Thread-199401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:31:16.728 [DEBUG] [Thread-199401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] client lang: <none>
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] server lang: <none>
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] kex follows: False
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:31:16.729 [DEBUG] [Thread-199401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:31:16.730 [DEBUG] [Thread-199401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:31:16.730 [DEBUG] [Thread-199401] [transport.py] [_log()] Compression: none
2026-04-13T01:31:16.730 [DEBUG] [Thread-199401] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:31:16.748 [DEBUG] [Thread-199401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:31:16.749 [DEBUG] [Thread-199401] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:31:16.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:31:16.750 [DEBUG] [Thread-199401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:31:16.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:31:16.752 [DEBUG] [Thread-199401] [transport.py] [_log()] userauth is OK
2026-04-13T01:31:16.753 [DEBUG] [Thread-199401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:31:16.753 [DEBUG] [Thread-199401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:31:16.753 [DEBUG] [Thread-199401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:31:16.753 [DEBUG] [Thread-199401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:31:16.778 [INFO] [Thread-199401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:31:16.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:31:17.580 [DEBUG] [Thread-199401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:31:17.580 [DEBUG] [Thread-199401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:31:17.581 [DEBUG] [Thread-199401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:31:17.621 [DEBUG] [Thread-199401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:31:17.621 [DEBUG] [Thread-199401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:31:17.625 [DEBUG] [Thread-199401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:31:17.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:31:17.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:31:17.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:31:17.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:31:17.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:31:17.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:31:17.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:31:17.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:31:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:31:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.979613 -999.00  +10.80   2.18     91   +9.50 1 2 1 3 1     0    0 1.64 6.89 Z.e.. 2.2 2.2 211.4 4.7 11.5 -22.0 11.3 -20.9 11.1 -19.0 11.4 -21.1
2026-04-13T01:31:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:31:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:31:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.979613
2026-04-13T01:31:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:31:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:31:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:31:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:31:17.654 [DEBUG] [Thread-199401] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:31:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:31:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:30:45', tmtdew=1.19186, humidity=92.2911, cloud=0.0, wind=7.7652, temperature=10.9413, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:30:38.563', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:31:17.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:31:17.749 [DEBUG] [Thread-199404] [transport.py] [_log()] starting thread (client mode): 0xae5f2260
2026-04-13T01:31:17.750 [DEBUG] [Thread-199404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:31:17.764 [DEBUG] [Thread-199404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:31:17.764 [INFO] [Thread-199404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:31:17.771 [DEBUG] [Thread-199404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:31:17.771 [DEBUG] [Thread-199404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:31:17.771 [DEBUG] [Thread-199404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:31:17.771 [DEBUG] [Thread-199404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:17.771 [DEBUG] [Thread-199404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:17.771 [DEBUG] [Thread-199404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] client lang: <none>
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] server lang: <none>
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] kex follows: False
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] Compression: none
2026-04-13T01:31:17.772 [DEBUG] [Thread-199404] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:31:17.827 [DEBUG] [Thread-199404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:31:17.827 [DEBUG] [Thread-199404] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:31:17.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:31:17.828 [DEBUG] [Thread-199404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:31:17.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:31:17.884 [DEBUG] [Thread-199404] [transport.py] [_log()] userauth is OK
2026-04-13T01:31:17.884 [DEBUG] [Thread-199404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:31:17.884 [DEBUG] [Thread-199404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:31:17.884 [DEBUG] [Thread-199404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:31:17.884 [DEBUG] [Thread-199404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:31:17.902 [INFO] [Thread-199404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:31:17.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:31:17.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:31:18.727 [DEBUG] [Thread-199404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:31:18.728 [DEBUG] [Thread-199404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:31:18.776 [DEBUG] [Thread-199404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:31:18.776 [DEBUG] [Thread-199404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:31:18.786 [DEBUG] [Thread-199404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:31:18.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:31:18.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:31:18.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:31:18.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:31:18.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:31:18.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:31:18.822 [DEBUG] [Thread-199404] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:31:22.932 [DEBUG] [Thread-199406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:31:29.205 [DEBUG] [Thread-199407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:31:37.983 [DEBUG] [Thread-199408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:31:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:31:48.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:31:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:31:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 31, 21), 1.46158, 90.546, 0.0, 5.71788, 10.8209, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:31:50.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:31:21
2026-04-13T01:31:50.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:31:50.633 [DEBUG] [Thread-199409] [transport.py] [_log()] starting thread (client mode): 0xb0fe8070
2026-04-13T01:31:50.633 [DEBUG] [Thread-199409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:31:50.653 [DEBUG] [Thread-199409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:31:50.653 [INFO] [Thread-199409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] client lang: <none>
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] server lang: <none>
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] kex follows: False
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] Compression: none
2026-04-13T01:31:50.656 [DEBUG] [Thread-199409] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:31:50.673 [DEBUG] [Thread-199409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:31:50.674 [DEBUG] [Thread-199409] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:31:50.674 [DEBUG] [Thread-199409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:31:50.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:31:50.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:31:50.676 [DEBUG] [Thread-199409] [transport.py] [_log()] userauth is OK
2026-04-13T01:31:50.677 [DEBUG] [Thread-199409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:31:50.677 [DEBUG] [Thread-199409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:31:50.677 [DEBUG] [Thread-199409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:31:50.677 [DEBUG] [Thread-199409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:31:50.701 [INFO] [Thread-199409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:31:50.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:31:51.463 [DEBUG] [Thread-199409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:31:51.463 [DEBUG] [Thread-199409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:31:51.464 [DEBUG] [Thread-199409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:31:51.503 [DEBUG] [Thread-199409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:31:51.504 [DEBUG] [Thread-199409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:31:51.506 [DEBUG] [Thread-199409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:31:51.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:31:51.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:31:51.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:31:51.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:31:51.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:31:51.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:31:51.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:31:51.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:31:51.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:31:51.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.979960 -999.00  +10.80   3.92     91   +9.50 1 2 1 3 1     0    0 1.63 5.99 Z.e.. 3.9 3.9 200.4 5.0 11.5 -22.0 11.4 -21.2 11.1 -19.0 11.4 -21.0
2026-04-13T01:31:51.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:31:51.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:31:51.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.979960
2026-04-13T01:31:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:31:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:31:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:31:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:31:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:31:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:31:21', tmtdew=1.46158, humidity=90.546, cloud=0.0, wind=5.71788, temperature=10.8209, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:31:08.544', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:31:51.525 [DEBUG] [Thread-199409] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:31:51.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:31:51.621 [DEBUG] [Thread-199412] [transport.py] [_log()] starting thread (client mode): 0xae5099f0
2026-04-13T01:31:51.621 [DEBUG] [Thread-199412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:31:51.634 [DEBUG] [Thread-199412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:31:51.634 [INFO] [Thread-199412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] client lang: <none>
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] server lang: <none>
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] kex follows: False
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:31:51.644 [DEBUG] [Thread-199412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:31:51.645 [DEBUG] [Thread-199412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:31:51.645 [DEBUG] [Thread-199412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:31:51.645 [DEBUG] [Thread-199412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:31:51.645 [DEBUG] [Thread-199412] [transport.py] [_log()] Compression: none
2026-04-13T01:31:51.645 [DEBUG] [Thread-199412] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:31:51.703 [DEBUG] [Thread-199412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:31:51.703 [DEBUG] [Thread-199412] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:31:51.703 [DEBUG] [Thread-199412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:31:51.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:31:51.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:31:51.763 [DEBUG] [Thread-199412] [transport.py] [_log()] userauth is OK
2026-04-13T01:31:51.763 [DEBUG] [Thread-199412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:31:51.763 [DEBUG] [Thread-199412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:31:51.763 [DEBUG] [Thread-199412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:31:51.763 [DEBUG] [Thread-199412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:31:51.780 [INFO] [Thread-199412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:31:51.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:31:51.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:31:52.560 [DEBUG] [Thread-199412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:31:52.561 [DEBUG] [Thread-199412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:31:52.609 [DEBUG] [Thread-199412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:31:52.609 [DEBUG] [Thread-199412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:31:52.619 [DEBUG] [Thread-199412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:31:52.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:31:52.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:31:52.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:31:52.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:31:52.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:31:52.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:31:52.655 [DEBUG] [Thread-199412] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:31:53.019 [DEBUG] [Thread-199414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:08.079 [DEBUG] [Thread-199415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:10.928 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:10.929 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:22.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:32:22.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:32:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:32:23.116 [DEBUG] [Thread-199416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:23.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 31, 56), 1.46888, 90.4962, 0.0, 7.50024, 10.7379, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:32:23.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:31:56
2026-04-13T01:32:24.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:32:24.514 [DEBUG] [Thread-199417] [transport.py] [_log()] starting thread (client mode): 0xae5195a0
2026-04-13T01:32:24.514 [DEBUG] [Thread-199417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:32:24.533 [DEBUG] [Thread-199417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:32:24.533 [INFO] [Thread-199417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] client lang: <none>
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] server lang: <none>
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] kex follows: False
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] Compression: none
2026-04-13T01:32:24.536 [DEBUG] [Thread-199417] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:32:24.552 [DEBUG] [Thread-199417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:32:24.553 [DEBUG] [Thread-199417] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:32:24.553 [DEBUG] [Thread-199417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:32:24.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:32:24.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:32:24.556 [DEBUG] [Thread-199417] [transport.py] [_log()] userauth is OK
2026-04-13T01:32:24.556 [DEBUG] [Thread-199417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:32:24.556 [DEBUG] [Thread-199417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:32:24.556 [DEBUG] [Thread-199417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:32:24.556 [DEBUG] [Thread-199417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:32:24.571 [INFO] [Thread-199417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:32:24.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:32:25.352 [DEBUG] [Thread-199417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:32:25.352 [DEBUG] [Thread-199417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:32:25.352 [DEBUG] [Thread-199417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:32:25.393 [DEBUG] [Thread-199417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:32:25.393 [DEBUG] [Thread-199417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:32:25.396 [DEBUG] [Thread-199417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:32:25.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:32:25.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:32:25.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:32:25.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:32:25.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:32:25.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:32:25.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:32:25.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:32:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:32:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.980307 -999.00  +10.80   3.41     91   +9.40 1 2 1 3 1     0    0 1.59 5.44 Z.... 3.4 3.4 205.4 5.3 11.5 -22.0 11.4 -21.0 11.1 -19.0 11.4 -20.9
2026-04-13T01:32:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:32:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:32:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.980307
2026-04-13T01:32:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:32:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:32:25.424 [DEBUG] [Thread-199417] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:32:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:32:25.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:32:25.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:32:25.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:31:56', tmtdew=1.46888, humidity=90.4962, cloud=0.0, wind=7.50024, temperature=10.7379, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:31:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:32:25.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:32:25.521 [DEBUG] [Thread-199420] [transport.py] [_log()] starting thread (client mode): 0xae51a6b0
2026-04-13T01:32:25.521 [DEBUG] [Thread-199420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:32:25.536 [DEBUG] [Thread-199420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:32:25.536 [INFO] [Thread-199420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] client lang: <none>
2026-04-13T01:32:25.543 [DEBUG] [Thread-199420] [transport.py] [_log()] server lang: <none>
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] kex follows: False
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] Compression: none
2026-04-13T01:32:25.544 [DEBUG] [Thread-199420] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:32:25.603 [DEBUG] [Thread-199420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:32:25.603 [DEBUG] [Thread-199420] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:32:25.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:32:25.605 [DEBUG] [Thread-199420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:32:25.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:32:25.659 [DEBUG] [Thread-199420] [transport.py] [_log()] userauth is OK
2026-04-13T01:32:25.659 [DEBUG] [Thread-199420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:32:25.659 [DEBUG] [Thread-199420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:32:25.659 [DEBUG] [Thread-199420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:32:25.660 [DEBUG] [Thread-199420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:32:25.679 [INFO] [Thread-199420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:32:25.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:32:25.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:32:26.486 [DEBUG] [Thread-199420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:32:26.486 [DEBUG] [Thread-199420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:32:26.534 [DEBUG] [Thread-199420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:32:26.534 [DEBUG] [Thread-199420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:32:26.543 [DEBUG] [Thread-199420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:32:26.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:32:26.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:32:26.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:32:26.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:32:26.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:32:26.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:32:26.581 [DEBUG] [Thread-199420] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:32:29.270 [DEBUG] [Thread-199422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:38.150 [DEBUG] [Thread-199423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:53.196 [DEBUG] [Thread-199424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:32:56.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:32:56.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:32:56.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:32:57.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 32, 32), 1.47663, 90.4465, 0.0, 7.5708, 10.7048, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:32:57.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:32:32
2026-04-13T01:32:58.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:32:58.444 [DEBUG] [Thread-199425] [transport.py] [_log()] starting thread (client mode): 0xb0fe8eb0
2026-04-13T01:32:58.444 [DEBUG] [Thread-199425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:32:58.466 [DEBUG] [Thread-199425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:32:58.466 [INFO] [Thread-199425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] client lang: <none>
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] server lang: <none>
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] kex follows: False
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] Compression: none
2026-04-13T01:32:58.468 [DEBUG] [Thread-199425] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:32:58.479 [DEBUG] [Thread-199425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:32:58.480 [DEBUG] [Thread-199425] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:32:58.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:32:58.481 [DEBUG] [Thread-199425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:32:58.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:32:58.483 [DEBUG] [Thread-199425] [transport.py] [_log()] userauth is OK
2026-04-13T01:32:58.484 [DEBUG] [Thread-199425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:32:58.484 [DEBUG] [Thread-199425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:32:58.484 [DEBUG] [Thread-199425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:32:58.484 [DEBUG] [Thread-199425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:32:58.504 [INFO] [Thread-199425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:32:58.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:32:59.245 [DEBUG] [Thread-199425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:32:59.246 [DEBUG] [Thread-199425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:32:59.246 [DEBUG] [Thread-199425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:32:59.287 [DEBUG] [Thread-199425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:32:59.287 [DEBUG] [Thread-199425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:32:59.291 [DEBUG] [Thread-199425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:32:59.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:32:59.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:32:59.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:32:59.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:32:59.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:32:59.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:32:59.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:32:59.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:32:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:32:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.980655 -999.00  +10.80   3.70     91   +9.40 1 2 1 3 1     0    0 1.54 4.47 Z.... 3.7 3.7 211.0 4.7 11.5 -22.2 11.3 -21.1 11.1 -19.1 11.3 -21.0
2026-04-13T01:32:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:32:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:32:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.980655
2026-04-13T01:32:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:32:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:32:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:32:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:32:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:32:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:32:32', tmtdew=1.47663, humidity=90.4465, cloud=0.0, wind=7.5708, temperature=10.7048, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:32:08.592', atlas_cloud=2, atlas_rain=1, zp_data=[2.3127499999999994, nan, 0.3592500000000012, nan, nan, nan, nan, nan, nan, nan, 0.73475, 0.2724999999999991, nan, nan, 0.2129999999999992, nan, nan, 2.9544999999999995, 2.004999999999999, 3.0852499999999994, nan, nan, nan, nan, nan, 0.2115000000000009, 0.10275000000000034, 0.1485000000000003, 0.14400000000000013, 0.3835000000000006, 1.7055000000000007, 2.6160000000000014, 1.1887499999999989], zp_timestamp='2026-04-12T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:32:59.312 [DEBUG] [Thread-199425] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:32:59.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:32:59.405 [DEBUG] [Thread-199428] [transport.py] [_log()] starting thread (client mode): 0xae51a800
2026-04-13T01:32:59.405 [DEBUG] [Thread-199428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:32:59.419 [DEBUG] [Thread-199428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:32:59.419 [INFO] [Thread-199428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:32:59.427 [DEBUG] [Thread-199428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] client lang: <none>
2026-04-13T01:32:59.428 [DEBUG] [Thread-199428] [transport.py] [_log()] server lang: <none>
2026-04-13T01:32:59.429 [DEBUG] [Thread-199428] [transport.py] [_log()] kex follows: False
2026-04-13T01:32:59.429 [DEBUG] [Thread-199428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:32:59.429 [DEBUG] [Thread-199428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:32:59.429 [DEBUG] [Thread-199428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:32:59.429 [DEBUG] [Thread-199428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:32:59.429 [DEBUG] [Thread-199428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:32:59.429 [DEBUG] [Thread-199428] [transport.py] [_log()] Compression: none
2026-04-13T01:32:59.430 [DEBUG] [Thread-199428] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:32:59.488 [DEBUG] [Thread-199428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:32:59.489 [DEBUG] [Thread-199428] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:32:59.490 [DEBUG] [Thread-199428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:32:59.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:32:59.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:32:59.548 [DEBUG] [Thread-199428] [transport.py] [_log()] userauth is OK
2026-04-13T01:32:59.548 [DEBUG] [Thread-199428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:32:59.548 [DEBUG] [Thread-199428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:32:59.549 [DEBUG] [Thread-199428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:32:59.549 [DEBUG] [Thread-199428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:32:59.567 [INFO] [Thread-199428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:32:59.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:32:59.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:33:00.377 [DEBUG] [Thread-199428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:33:00.377 [DEBUG] [Thread-199428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:33:00.425 [DEBUG] [Thread-199428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:33:00.425 [DEBUG] [Thread-199428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:33:00.434 [DEBUG] [Thread-199428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:33:00.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:33:00.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:33:00.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:33:00.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:33:00.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:33:00.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:33:00.473 [DEBUG] [Thread-199428] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:33:08.235 [DEBUG] [Thread-199430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:33:11.132 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:33:11.133 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:33:23.288 [DEBUG] [Thread-199431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:33:29.328 [DEBUG] [Thread-199432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:33:30.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:33:30.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:33: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
2026-04-13T01:33:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 33, 7), 1.50107, 90.2976, 0.0, 7.23564, 10.7382, 1, 2, 0, 2, 0, 0),)
2026-04-13T01:33:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:33:07
2026-04-13T01:33:32.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:33:32.398 [DEBUG] [Thread-199433] [transport.py] [_log()] starting thread (client mode): 0xa7958910
2026-04-13T01:33:32.398 [DEBUG] [Thread-199433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:33:32.417 [DEBUG] [Thread-199433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:33:32.417 [INFO] [Thread-199433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:33:32.420 [DEBUG] [Thread-199433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:33:32.420 [DEBUG] [Thread-199433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:33:32.420 [DEBUG] [Thread-199433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] client lang: <none>
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] server lang: <none>
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] kex follows: False
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] Compression: none
2026-04-13T01:33:32.421 [DEBUG] [Thread-199433] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:33:32.437 [DEBUG] [Thread-199433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:33:32.437 [DEBUG] [Thread-199433] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:33:32.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:33:32.438 [DEBUG] [Thread-199433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:33:32.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:33:32.440 [DEBUG] [Thread-199433] [transport.py] [_log()] userauth is OK
2026-04-13T01:33:32.440 [DEBUG] [Thread-199433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:33:32.440 [DEBUG] [Thread-199433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:33:32.440 [DEBUG] [Thread-199433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:33:32.441 [DEBUG] [Thread-199433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:33:32.463 [INFO] [Thread-199433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:33:32.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:33:33.298 [DEBUG] [Thread-199433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:33:33.298 [DEBUG] [Thread-199433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:33:33.299 [DEBUG] [Thread-199433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:33:33.339 [DEBUG] [Thread-199433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:33:33.339 [DEBUG] [Thread-199433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:33:33.343 [DEBUG] [Thread-199433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:33:33.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:33:33.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:33:33.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:33:33.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:33:33.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:33:33.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:33:33.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:33:33.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:33:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:33:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.981002 -999.00  +10.80   4.48     90   +9.40 1 2 1 3 1     0    0 1.54 4.49 ZNE.. 4.5 4.5 208.8 5.1 11.5 -22.0 11.4 -20.9 11.1 -19.0 11.3 -21.0
2026-04-13T01:33:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:33:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:33:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.981002
2026-04-13T01:33:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:33:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:33:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:33:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:33:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:33:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:33:07', tmtdew=1.50107, humidity=90.2976, cloud=0.0, wind=7.23564, temperature=10.7382, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:32:38.573', atlas_cloud=2, atlas_rain=1, zp_data=[0.7077499999999999, nan, 0.33225000000000016, nan, nan, nan, nan, nan, nan, nan, 0.7092499999999999, 0.16849999999999987, nan, nan, nan, nan, nan, 2.6855, nan, 2.9472499999999986, nan, nan, nan, nan, nan, 0.2394999999999996, 0.2417499999999997, 0.32450000000000045, 0.2765000000000004, 0.44200000000000106, 1.4070000000000018, 2.553000000000001, 0.5742499999999993], zp_timestamp='2026-04-12T23:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:33:33.372 [DEBUG] [Thread-199433] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:33:33.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:33:33.467 [DEBUG] [Thread-199436] [transport.py] [_log()] starting thread (client mode): 0xae5f2bf0
2026-04-13T01:33:33.468 [DEBUG] [Thread-199436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:33:33.482 [DEBUG] [Thread-199436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:33:33.482 [INFO] [Thread-199436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:33:33.489 [DEBUG] [Thread-199436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:33:33.490 [DEBUG] [Thread-199436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:33:33.490 [DEBUG] [Thread-199436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:33:33.490 [DEBUG] [Thread-199436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:33:33.490 [DEBUG] [Thread-199436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:33:33.490 [DEBUG] [Thread-199436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:33:33.490 [DEBUG] [Thread-199436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] client lang: <none>
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] server lang: <none>
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] kex follows: False
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:33:33.491 [DEBUG] [Thread-199436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:33:33.492 [DEBUG] [Thread-199436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:33:33.492 [DEBUG] [Thread-199436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:33:33.492 [DEBUG] [Thread-199436] [transport.py] [_log()] Compression: none
2026-04-13T01:33:33.492 [DEBUG] [Thread-199436] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:33:33.547 [DEBUG] [Thread-199436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:33:33.548 [DEBUG] [Thread-199436] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:33:33.548 [DEBUG] [Thread-199436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:33:33.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:33:33.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:33:33.605 [DEBUG] [Thread-199436] [transport.py] [_log()] userauth is OK
2026-04-13T01:33:33.605 [DEBUG] [Thread-199436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:33:33.605 [DEBUG] [Thread-199436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:33:33.606 [DEBUG] [Thread-199436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:33:33.606 [DEBUG] [Thread-199436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:33:33.624 [INFO] [Thread-199436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:33:33.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:33:33.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:33:34.462 [DEBUG] [Thread-199436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:33:34.462 [DEBUG] [Thread-199436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:33:34.510 [DEBUG] [Thread-199436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:33:34.511 [DEBUG] [Thread-199436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:33:34.520 [DEBUG] [Thread-199436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:33:34.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:33: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')
2026-04-13T01:33:34.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:33:34.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:33:34.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:33:34.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:33:34.557 [DEBUG] [Thread-199436] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:33:38.326 [DEBUG] [Thread-199438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:33:53.393 [DEBUG] [Thread-199439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:34:04.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:34:04.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:34:04.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:34:05.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 33, 42), 1.33447, 91.3961, 0.0, 7.69464, 10.6764, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:34:05.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:33:42
2026-04-13T01:34:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:34:06.400 [DEBUG] [Thread-199440] [transport.py] [_log()] starting thread (client mode): 0xae5f2410
2026-04-13T01:34:06.400 [DEBUG] [Thread-199440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:34:06.421 [DEBUG] [Thread-199440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:34:06.421 [INFO] [Thread-199440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] client lang: <none>
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] server lang: <none>
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] kex follows: False
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] Compression: none
2026-04-13T01:34:06.424 [DEBUG] [Thread-199440] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:34:06.443 [DEBUG] [Thread-199440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:34:06.444 [DEBUG] [Thread-199440] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:34:06.445 [DEBUG] [Thread-199440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:34:06.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:34:06.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:34:06.447 [DEBUG] [Thread-199440] [transport.py] [_log()] userauth is OK
2026-04-13T01:34:06.447 [DEBUG] [Thread-199440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:34:06.447 [DEBUG] [Thread-199440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:34:06.447 [DEBUG] [Thread-199440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:34:06.447 [DEBUG] [Thread-199440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:34:06.472 [INFO] [Thread-199440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:34:06.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:34:07.264 [DEBUG] [Thread-199440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:34:07.265 [DEBUG] [Thread-199440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:34:07.265 [DEBUG] [Thread-199440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:34:07.306 [DEBUG] [Thread-199440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:34:07.306 [DEBUG] [Thread-199440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:34:07.310 [DEBUG] [Thread-199440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:34:07.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:34:07.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:34:07.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:34:07.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:34:07.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:34:07.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:34:07.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:34:07.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:34:07.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:34:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.981696 -999.00  +10.90   3.54     90   +9.40 1 2 1 3 1     0    0 1.55 4.52 ZN... 3.5 3.5 212.6 4.9 11.5 -21.9 11.3 -20.8 11.1 -19.0 11.3 -20.8
2026-04-13T01:34:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:34:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:34:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.981696
2026-04-13T01:34:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:34:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:34:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:34:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:34:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:34:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:33:42', tmtdew=1.33447, humidity=91.3961, cloud=0.0, wind=7.69464, temperature=10.6764, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:33:38.534', atlas_cloud=2, atlas_rain=1, zp_data=[0.7077499999999999, nan, 0.33225000000000016, nan, nan, nan, nan, nan, nan, nan, 0.7092499999999999, 0.16849999999999987, nan, nan, nan, nan, nan, 2.6855, nan, 2.9472499999999986, nan, nan, nan, nan, nan, 0.2394999999999996, 0.2417499999999997, 0.32450000000000045, 0.2765000000000004, 0.44200000000000106, 1.4070000000000018, 2.553000000000001, 0.5742499999999993], zp_timestamp='2026-04-12T23:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:34:07.337 [DEBUG] [Thread-199440] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:34:07.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:34:07.430 [DEBUG] [Thread-199443] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-13T01:34:07.430 [DEBUG] [Thread-199443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:34:07.445 [DEBUG] [Thread-199443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:34:07.445 [INFO] [Thread-199443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:34:07.453 [DEBUG] [Thread-199443] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:34:07.453 [DEBUG] [Thread-199443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:34:07.454 [DEBUG] [Thread-199443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:34:07.454 [DEBUG] [Thread-199443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:07.454 [DEBUG] [Thread-199443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:07.454 [DEBUG] [Thread-199443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:07.454 [DEBUG] [Thread-199443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:07.454 [DEBUG] [Thread-199443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] client lang: <none>
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] server lang: <none>
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] kex follows: False
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] Compression: none
2026-04-13T01:34:07.455 [DEBUG] [Thread-199443] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:34:07.510 [DEBUG] [Thread-199443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:34:07.511 [DEBUG] [Thread-199443] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:34:07.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:34:07.512 [DEBUG] [Thread-199443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:34:07.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:34:07.566 [DEBUG] [Thread-199443] [transport.py] [_log()] userauth is OK
2026-04-13T01:34:07.567 [DEBUG] [Thread-199443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:34:07.567 [DEBUG] [Thread-199443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:34:07.567 [DEBUG] [Thread-199443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:34:07.567 [DEBUG] [Thread-199443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:34:07.592 [INFO] [Thread-199443] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:34:07.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:34:07.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:34:08.387 [DEBUG] [Thread-199443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:34:08.387 [DEBUG] [Thread-199443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:34:08.430 [DEBUG] [Thread-199445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:34:08.435 [DEBUG] [Thread-199443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:34:08.435 [DEBUG] [Thread-199443] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:34:08.444 [DEBUG] [Thread-199443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:34:08.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:34: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')
2026-04-13T01:34:08.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:34:08.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:34:08.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:34:08.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:34:08.479 [DEBUG] [Thread-199443] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:34:11.337 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:34:11.338 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:34:23.484 [DEBUG] [Thread-199446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:34:29.385 [DEBUG] [Thread-199447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:34:38.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:34:38.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:34:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:34:38.525 [DEBUG] [Thread-199448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:34:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 34, 18), 1.64663, 89.5155, 0.0, 7.659, 10.755, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:34:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:34:18
2026-04-13T01:34:40.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:34:40.280 [DEBUG] [Thread-199449] [transport.py] [_log()] starting thread (client mode): 0xae508c70
2026-04-13T01:34:40.280 [DEBUG] [Thread-199449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:34:40.301 [DEBUG] [Thread-199449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:34:40.301 [INFO] [Thread-199449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] client lang: <none>
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] server lang: <none>
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] kex follows: False
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:34:40.304 [DEBUG] [Thread-199449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:34:40.305 [DEBUG] [Thread-199449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:34:40.305 [DEBUG] [Thread-199449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:34:40.305 [DEBUG] [Thread-199449] [transport.py] [_log()] Compression: none
2026-04-13T01:34:40.305 [DEBUG] [Thread-199449] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:34:40.321 [DEBUG] [Thread-199449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:34:40.321 [DEBUG] [Thread-199449] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:34:40.322 [DEBUG] [Thread-199449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:34:40.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:34:40.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:34:40.323 [DEBUG] [Thread-199449] [transport.py] [_log()] userauth is OK
2026-04-13T01:34:40.324 [DEBUG] [Thread-199449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:34:40.324 [DEBUG] [Thread-199449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:34:40.324 [DEBUG] [Thread-199449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:34:40.324 [DEBUG] [Thread-199449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:34:40.355 [INFO] [Thread-199449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:34:40.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:34:41.160 [DEBUG] [Thread-199449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:34:41.160 [DEBUG] [Thread-199449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:34:41.161 [DEBUG] [Thread-199449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:34:41.201 [DEBUG] [Thread-199449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:34:41.202 [DEBUG] [Thread-199449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:34:41.205 [DEBUG] [Thread-199449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:34:41.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:34:41.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:34:41.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:34:41.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:34:41.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:34:41.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:34:41.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:34:41.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:34:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:34:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.982043 -999.00  +10.90   3.81     90   +9.30 1 2 1 3 1     0    0 1.59 4.59 ZN... 3.8 3.8 209.6 5.5 11.6 -22.0 11.3 -20.8 11.1 -19.0 11.4 -20.9
2026-04-13T01:34:41.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:34:41.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:34:41.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.982043
2026-04-13T01:34:41.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:34:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:34:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:34:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:34:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:34:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:34:18', tmtdew=1.64663, humidity=89.5155, cloud=0.0, wind=7.659, temperature=10.755, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:34:08.515', atlas_cloud=2, atlas_rain=1, zp_data=[0.7077499999999999, nan, 0.33225000000000016, nan, nan, nan, nan, nan, nan, nan, 0.7092499999999999, 0.16849999999999987, nan, nan, nan, nan, nan, 2.6855, nan, 2.9472499999999986, nan, nan, nan, nan, nan, 0.2394999999999996, 0.2417499999999997, 0.32450000000000045, 0.2765000000000004, 0.44200000000000106, 1.4070000000000018, 2.553000000000001, 0.5742499999999993], zp_timestamp='2026-04-12T23:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:34:41.232 [DEBUG] [Thread-199449] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:34:41.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:34:41.326 [DEBUG] [Thread-199452] [transport.py] [_log()] starting thread (client mode): 0xae51ab60
2026-04-13T01:34:41.326 [DEBUG] [Thread-199452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:34:41.340 [DEBUG] [Thread-199452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:34:41.340 [INFO] [Thread-199452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:34:41.348 [DEBUG] [Thread-199452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:34:41.348 [DEBUG] [Thread-199452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:34:41.348 [DEBUG] [Thread-199452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:34:41.348 [DEBUG] [Thread-199452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] client lang: <none>
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] server lang: <none>
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] kex follows: False
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] Compression: none
2026-04-13T01:34:41.349 [DEBUG] [Thread-199452] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:34:41.407 [DEBUG] [Thread-199452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:34:41.408 [DEBUG] [Thread-199452] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:34:41.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:34:41.409 [DEBUG] [Thread-199452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:34:41.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:34:41.463 [DEBUG] [Thread-199452] [transport.py] [_log()] userauth is OK
2026-04-13T01:34:41.463 [DEBUG] [Thread-199452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:34:41.463 [DEBUG] [Thread-199452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:34:41.464 [DEBUG] [Thread-199452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:34:41.464 [DEBUG] [Thread-199452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:34:41.483 [INFO] [Thread-199452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:34:41.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:34:41.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:34:42.316 [DEBUG] [Thread-199452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:34:42.316 [DEBUG] [Thread-199452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:34:42.364 [DEBUG] [Thread-199452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:34:42.365 [DEBUG] [Thread-199452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:34:42.374 [DEBUG] [Thread-199452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:34:42.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:34:42.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:34:42.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:34:42.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:34:42.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:34:42.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:34:42.410 [DEBUG] [Thread-199452] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:34:53.562 [DEBUG] [Thread-199454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:35:08.613 [DEBUG] [Thread-199455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:35:11.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:35:11.546 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:35:12.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:35:12.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:35:12.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:35:13.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 34, 54), 1.40612, 90.9647, 0.0, 7.97688, 10.809, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:35:13.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:34:54
2026-04-13T01:35:14.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:35:14.344 [DEBUG] [Thread-199456] [transport.py] [_log()] starting thread (client mode): 0xb0fce260
2026-04-13T01:35:14.344 [DEBUG] [Thread-199456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:35:14.364 [DEBUG] [Thread-199456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:35:14.364 [INFO] [Thread-199456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] client lang: <none>
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] server lang: <none>
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] kex follows: False
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] Compression: none
2026-04-13T01:35:14.367 [DEBUG] [Thread-199456] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:35:14.384 [DEBUG] [Thread-199456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:35:14.384 [DEBUG] [Thread-199456] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:35:14.385 [DEBUG] [Thread-199456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:35:14.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:35:14.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:35:14.387 [DEBUG] [Thread-199456] [transport.py] [_log()] userauth is OK
2026-04-13T01:35:14.388 [DEBUG] [Thread-199456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:35:14.388 [DEBUG] [Thread-199456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:35:14.388 [DEBUG] [Thread-199456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:35:14.388 [DEBUG] [Thread-199456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:35:14.425 [INFO] [Thread-199456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:35:14.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:35:15.687 [DEBUG] [Thread-199456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:35:15.688 [DEBUG] [Thread-199456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:35:15.688 [DEBUG] [Thread-199456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:35:15.728 [DEBUG] [Thread-199456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:35:15.728 [DEBUG] [Thread-199456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:35:15.731 [DEBUG] [Thread-199456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:35:15.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:35:15.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:35:15.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:35:15.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:35:15.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:35:15.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:35:15.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:35:15.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:35:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:35:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.982391 -999.00  +10.90   5.21     90   +9.30 1 2 1 3 1     0    0 1.57 4.47 ZN... 5.2 5.2 210.8 5.9 11.5 -22.1 11.3 -20.8 11.1 -19.1 11.3 -20.8
2026-04-13T01:35:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:35:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:35:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.982391
2026-04-13T01:35:15.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:35:15.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:35:15.757 [DEBUG] [Thread-199456] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:35:15.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:35:15.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:35:15.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:35:15.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:34:54', tmtdew=1.40612, humidity=90.9647, cloud=0.0, wind=7.97688, temperature=10.809, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:34:38.582', atlas_cloud=2, atlas_rain=1, zp_data=[0.7077499999999999, nan, 0.33225000000000016, nan, nan, nan, nan, nan, nan, nan, 0.7092499999999999, 0.16849999999999987, nan, nan, nan, nan, nan, 2.6855, nan, 2.9472499999999986, nan, nan, nan, nan, nan, 0.2394999999999996, 0.2417499999999997, 0.32450000000000045, 0.2765000000000004, 0.44200000000000106, 1.4070000000000018, 2.553000000000001, 0.5742499999999993], zp_timestamp='2026-04-12T23:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:35:15.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:35:15.844 [DEBUG] [Thread-199459] [transport.py] [_log()] starting thread (client mode): 0xb0fced40
2026-04-13T01:35:15.844 [DEBUG] [Thread-199459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:35:15.859 [DEBUG] [Thread-199459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:35:15.859 [INFO] [Thread-199459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] client lang: <none>
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] server lang: <none>
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] kex follows: False
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:35:15.867 [DEBUG] [Thread-199459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:35:15.868 [DEBUG] [Thread-199459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:35:15.868 [DEBUG] [Thread-199459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:35:15.868 [DEBUG] [Thread-199459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:35:15.868 [DEBUG] [Thread-199459] [transport.py] [_log()] Compression: none
2026-04-13T01:35:15.868 [DEBUG] [Thread-199459] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:35:15.928 [DEBUG] [Thread-199459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:35:15.929 [DEBUG] [Thread-199459] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:35:15.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:35:15.930 [DEBUG] [Thread-199459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:35:15.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:35:15.988 [DEBUG] [Thread-199459] [transport.py] [_log()] userauth is OK
2026-04-13T01:35:15.988 [DEBUG] [Thread-199459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:35:15.989 [DEBUG] [Thread-199459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:35:15.989 [DEBUG] [Thread-199459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:35:15.989 [DEBUG] [Thread-199459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:35:16.008 [INFO] [Thread-199459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:35:16.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:35:16.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:35:16.852 [DEBUG] [Thread-199459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:35:16.853 [DEBUG] [Thread-199459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:35:16.901 [DEBUG] [Thread-199459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:35:16.901 [DEBUG] [Thread-199459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:35:16.910 [DEBUG] [Thread-199459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:35:16.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:35:16.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:35:16.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:35:16.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:35:16.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:35:16.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:35:16.947 [DEBUG] [Thread-199459] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:35:23.650 [DEBUG] [Thread-199461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:35:29.463 [DEBUG] [Thread-199462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:35:38.705 [DEBUG] [Thread-199463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:35:46.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:35:46.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:35:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:35:48.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 35, 29), 1.67438, 89.35, 0.0, 7.72956, 10.8215, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:35:48.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:35:29
2026-04-13T01:35:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:35:48.839 [DEBUG] [Thread-199464] [transport.py] [_log()] starting thread (client mode): 0xae5b54b0
2026-04-13T01:35:48.839 [DEBUG] [Thread-199464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:35:48.859 [DEBUG] [Thread-199464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:35:48.859 [INFO] [Thread-199464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] client lang: <none>
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] server lang: <none>
2026-04-13T01:35:48.863 [DEBUG] [Thread-199464] [transport.py] [_log()] kex follows: False
2026-04-13T01:35:48.864 [DEBUG] [Thread-199464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:35:48.864 [DEBUG] [Thread-199464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:35:48.864 [DEBUG] [Thread-199464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:35:48.864 [DEBUG] [Thread-199464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:35:48.864 [DEBUG] [Thread-199464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:35:48.864 [DEBUG] [Thread-199464] [transport.py] [_log()] Compression: none
2026-04-13T01:35:48.864 [DEBUG] [Thread-199464] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:35:48.885 [DEBUG] [Thread-199464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:35:48.886 [DEBUG] [Thread-199464] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:35:48.886 [DEBUG] [Thread-199464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:35:48.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:35:48.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:35:48.888 [DEBUG] [Thread-199464] [transport.py] [_log()] userauth is OK
2026-04-13T01:35:48.888 [DEBUG] [Thread-199464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:35:48.888 [DEBUG] [Thread-199464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:35:48.888 [DEBUG] [Thread-199464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:35:48.889 [DEBUG] [Thread-199464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:35:48.912 [INFO] [Thread-199464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:35:48.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:35:49.675 [DEBUG] [Thread-199464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:35:49.675 [DEBUG] [Thread-199464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:35:49.675 [DEBUG] [Thread-199464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:35:49.716 [DEBUG] [Thread-199464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:35:49.716 [DEBUG] [Thread-199464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:35:49.720 [DEBUG] [Thread-199464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:35:49.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:35:49.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:35:49.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:35:49.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:35:49.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:35:49.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:35:49.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:35:49.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:35:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:35:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.982737 -999.00  +10.90   2.53     89   +9.30 1 2 1 3 1     0    0 1.59 4.60 zN... 2.5 2.5 193.3 5.2 11.6 -22.0 11.4 -20.7 11.1 -19.0 11.3 -20.8
2026-04-13T01:35:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:35:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:35:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.982737
2026-04-13T01:35:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:35:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:35:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:35:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:35:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:35:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:35:29', tmtdew=1.67438, humidity=89.35, cloud=0.0, wind=7.72956, temperature=10.8215, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:35:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[0.7077499999999999, nan, 0.33225000000000016, nan, nan, nan, nan, nan, nan, nan, 0.7092499999999999, 0.16849999999999987, nan, nan, nan, nan, nan, 2.6855, nan, 2.9472499999999986, nan, nan, nan, nan, nan, 0.2394999999999996, 0.2417499999999997, 0.32450000000000045, 0.2765000000000004, 0.44200000000000106, 1.4070000000000018, 2.553000000000001, 0.5742499999999993], zp_timestamp='2026-04-12T23:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:35:49.747 [DEBUG] [Thread-199464] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:35:49.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:35:49.842 [DEBUG] [Thread-199467] [transport.py] [_log()] starting thread (client mode): 0xae5b4c70
2026-04-13T01:35:49.842 [DEBUG] [Thread-199467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:35:49.857 [DEBUG] [Thread-199467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:35:49.857 [INFO] [Thread-199467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:35:49.865 [DEBUG] [Thread-199467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] client lang: <none>
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] server lang: <none>
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] kex follows: False
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:35:49.866 [DEBUG] [Thread-199467] [transport.py] [_log()] Compression: none
2026-04-13T01:35:49.867 [DEBUG] [Thread-199467] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:35:49.924 [DEBUG] [Thread-199467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:35:49.925 [DEBUG] [Thread-199467] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:35:49.925 [DEBUG] [Thread-199467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:35:49.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:35:49.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:35:49.980 [DEBUG] [Thread-199467] [transport.py] [_log()] userauth is OK
2026-04-13T01:35:49.981 [DEBUG] [Thread-199467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:35:49.981 [DEBUG] [Thread-199467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:35:49.981 [DEBUG] [Thread-199467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:35:49.981 [DEBUG] [Thread-199467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:35:50.006 [INFO] [Thread-199467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:35:50.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:35:50.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:35:50.816 [DEBUG] [Thread-199467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:35:50.816 [DEBUG] [Thread-199467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:35:50.864 [DEBUG] [Thread-199467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:35:50.864 [DEBUG] [Thread-199467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:35:50.874 [DEBUG] [Thread-199467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:35:50.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:35:50.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:35:50.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:35:50.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:35:50.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:35:50.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:35:50.911 [DEBUG] [Thread-199467] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:35:53.745 [DEBUG] [Thread-199469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:08.808 [DEBUG] [Thread-199470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:11.755 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:11.757 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:20.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:36:20.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:36:20.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:36:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 36, 5), 1.67508, 89.35, 0.0, 7.51788, 10.8879, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:36:22.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:36:05
2026-04-13T01:36:22.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:36:22.755 [DEBUG] [Thread-199471] [transport.py] [_log()] starting thread (client mode): 0xae51b7f0
2026-04-13T01:36:22.755 [DEBUG] [Thread-199471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:36:22.776 [DEBUG] [Thread-199471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:36:22.776 [INFO] [Thread-199471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] client lang: <none>
2026-04-13T01:36:22.780 [DEBUG] [Thread-199471] [transport.py] [_log()] server lang: <none>
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] kex follows: False
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] Compression: none
2026-04-13T01:36:22.781 [DEBUG] [Thread-199471] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:36:22.800 [DEBUG] [Thread-199471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:36:22.801 [DEBUG] [Thread-199471] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:36:22.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:36:22.802 [DEBUG] [Thread-199471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:36:22.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:36:22.804 [DEBUG] [Thread-199471] [transport.py] [_log()] userauth is OK
2026-04-13T01:36:22.805 [DEBUG] [Thread-199471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:36:22.805 [DEBUG] [Thread-199471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:36:22.805 [DEBUG] [Thread-199471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:36:22.805 [DEBUG] [Thread-199471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:36:22.828 [INFO] [Thread-199471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:36:22.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:36:23.659 [DEBUG] [Thread-199471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:36:23.659 [DEBUG] [Thread-199471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:36:23.660 [DEBUG] [Thread-199471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:36:23.700 [DEBUG] [Thread-199471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:36:23.700 [DEBUG] [Thread-199471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:36:23.703 [DEBUG] [Thread-199471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:36:23.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:36:23.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:36:23.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:36:23.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:36:23.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:36:23.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:36:23.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:36:23.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:36:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:36:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.983085 -999.00  +10.90   3.12     89   +9.20 1 2 1 3 1     0    0 1.60 4.88 ..... 3.1 3.1 229.7 5.7 11.6 -22.0 11.3 -20.8 11.1 -19.0 11.3 -21.0
2026-04-13T01:36:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:36:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:36:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.983085
2026-04-13T01:36:23.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:36:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:36:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:36:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:36:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:36:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:36:05', tmtdew=1.67508, humidity=89.35, cloud=0.0, wind=7.51788, temperature=10.8879, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:35:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:36:23.730 [DEBUG] [Thread-199471] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:36:23.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:36:23.822 [DEBUG] [Thread-199474] [transport.py] [_log()] starting thread (client mode): 0xb0fcce50
2026-04-13T01:36:23.822 [DEBUG] [Thread-199474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:36:23.836 [DEBUG] [Thread-199474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:36:23.836 [INFO] [Thread-199474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:36:23.843 [DEBUG] [Thread-199474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] client lang: <none>
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] server lang: <none>
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] kex follows: False
2026-04-13T01:36:23.844 [DEBUG] [Thread-199474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:36:23.845 [DEBUG] [Thread-199474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:36:23.845 [DEBUG] [Thread-199474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:36:23.845 [DEBUG] [Thread-199474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:36:23.845 [DEBUG] [Thread-199474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:36:23.845 [DEBUG] [Thread-199474] [transport.py] [_log()] Compression: none
2026-04-13T01:36:23.845 [DEBUG] [Thread-199474] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:36:23.853 [DEBUG] [Thread-199476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:23.900 [DEBUG] [Thread-199474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:36:23.900 [DEBUG] [Thread-199474] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:36:23.901 [DEBUG] [Thread-199474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:36:23.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:36:23.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:36:23.958 [DEBUG] [Thread-199474] [transport.py] [_log()] userauth is OK
2026-04-13T01:36:23.958 [DEBUG] [Thread-199474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:36:23.958 [DEBUG] [Thread-199474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:36:23.958 [DEBUG] [Thread-199474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:36:23.958 [DEBUG] [Thread-199474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:36:23.986 [INFO] [Thread-199474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:36:23.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:36:23.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:36:24.842 [DEBUG] [Thread-199474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:36:24.842 [DEBUG] [Thread-199474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:36:24.890 [DEBUG] [Thread-199474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:36:24.890 [DEBUG] [Thread-199474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:36:24.899 [DEBUG] [Thread-199474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:36:24.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:36:24.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:36:24.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:36:24.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:36:24.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:36:24.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:36:24.936 [DEBUG] [Thread-199474] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:36:29.536 [DEBUG] [Thread-199477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:38.907 [DEBUG] [Thread-199478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:53.949 [DEBUG] [Thread-199479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:36:54.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:36:54.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:36:54.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:36:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 36, 40), 1.47184, 90.5677, 0.0, 7.65936, 10.8761, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:36:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:36:40
2026-04-13T01:36:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:36:56.773 [DEBUG] [Thread-199480] [transport.py] [_log()] starting thread (client mode): 0xae5f1d20
2026-04-13T01:36:56.773 [DEBUG] [Thread-199480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:36:56.792 [DEBUG] [Thread-199480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:36:56.792 [INFO] [Thread-199480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:36:56.795 [DEBUG] [Thread-199480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:36:56.795 [DEBUG] [Thread-199480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:36:56.795 [DEBUG] [Thread-199480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] client lang: <none>
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] server lang: <none>
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] kex follows: False
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:36:56.796 [DEBUG] [Thread-199480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:36:56.797 [DEBUG] [Thread-199480] [transport.py] [_log()] Compression: none
2026-04-13T01:36:56.797 [DEBUG] [Thread-199480] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:36:56.816 [DEBUG] [Thread-199480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:36:56.817 [DEBUG] [Thread-199480] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:36:56.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:36:56.818 [DEBUG] [Thread-199480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:36:56.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:36:56.820 [DEBUG] [Thread-199480] [transport.py] [_log()] userauth is OK
2026-04-13T01:36:56.821 [DEBUG] [Thread-199480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:36:56.821 [DEBUG] [Thread-199480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:36:56.821 [DEBUG] [Thread-199480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:36:56.821 [DEBUG] [Thread-199480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:36:56.836 [INFO] [Thread-199480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:36:56.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:36:57.660 [DEBUG] [Thread-199480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:36:57.660 [DEBUG] [Thread-199480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:36:57.661 [DEBUG] [Thread-199480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:36:57.701 [DEBUG] [Thread-199480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:36:57.701 [DEBUG] [Thread-199480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:36:57.703 [DEBUG] [Thread-199480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:36:57.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:36:57.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:36:57.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:36:57.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:36:57.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:36:57.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:36:57.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:36:57.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:36:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:36:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.983433 -999.00  +10.90   2.12     89   +9.20 1 2 1 3 1     0    0 1.63 5.31 ..... 2.1 2.1 240.6 5.0 11.5 -22.0 11.4 -20.8 11.1 -19.0 11.4 -20.9
2026-04-13T01:36:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:36:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:36:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.983433
2026-04-13T01:36:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:36:57.725 [DEBUG] [Thread-199480] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:36:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:36:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:36:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:36:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:36:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:36:40', tmtdew=1.47184, humidity=90.5677, cloud=0.0, wind=7.65936, temperature=10.8761, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:36:08.611', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:36:57.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:36:57.817 [DEBUG] [Thread-199483] [transport.py] [_log()] starting thread (client mode): 0xb0fe8d60
2026-04-13T01:36:57.817 [DEBUG] [Thread-199483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:36:57.832 [DEBUG] [Thread-199483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:36:57.832 [INFO] [Thread-199483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:36:57.839 [DEBUG] [Thread-199483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] client lang: <none>
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] server lang: <none>
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] kex follows: False
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:36:57.840 [DEBUG] [Thread-199483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:36:57.841 [DEBUG] [Thread-199483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:36:57.841 [DEBUG] [Thread-199483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:36:57.841 [DEBUG] [Thread-199483] [transport.py] [_log()] Compression: none
2026-04-13T01:36:57.841 [DEBUG] [Thread-199483] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:36:57.898 [DEBUG] [Thread-199483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:36:57.899 [DEBUG] [Thread-199483] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:36:57.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:36:57.900 [DEBUG] [Thread-199483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:36:57.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:36:57.954 [DEBUG] [Thread-199483] [transport.py] [_log()] userauth is OK
2026-04-13T01:36:57.954 [DEBUG] [Thread-199483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:36:57.954 [DEBUG] [Thread-199483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:36:57.954 [DEBUG] [Thread-199483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:36:57.954 [DEBUG] [Thread-199483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:36:57.974 [INFO] [Thread-199483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:36:57.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:36:57.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:36:58.777 [DEBUG] [Thread-199483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:36:58.777 [DEBUG] [Thread-199483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:36:58.825 [DEBUG] [Thread-199483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:36:58.825 [DEBUG] [Thread-199483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:36:58.834 [DEBUG] [Thread-199483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:36:58.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:36:58.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:36:58.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:36:58.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:36:58.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:36:58.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:36:58.870 [DEBUG] [Thread-199483] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:37:08.983 [DEBUG] [Thread-199485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:37:11.962 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:37:11.963 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:37:24.035 [DEBUG] [Thread-199486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:37:28.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:37:28.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:37:28.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:37:29.605 [DEBUG] [Thread-199487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:37:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 37, 16), 1.79392, 88.7341, 0.0, 7.58844, 10.9215, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:37:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:37:16
2026-04-13T01:37:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:37:30.750 [DEBUG] [Thread-199488] [transport.py] [_log()] starting thread (client mode): 0xb0febc70
2026-04-13T01:37:30.750 [DEBUG] [Thread-199488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:37:30.770 [DEBUG] [Thread-199488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:37:30.770 [INFO] [Thread-199488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:37:30.771 [DEBUG] [Thread-199488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] client lang: <none>
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] server lang: <none>
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] kex follows: False
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] Compression: none
2026-04-13T01:37:30.772 [DEBUG] [Thread-199488] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:37:30.790 [DEBUG] [Thread-199488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:37:30.790 [DEBUG] [Thread-199488] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:37:30.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:37:30.791 [DEBUG] [Thread-199488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:37:30.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:37:30.793 [DEBUG] [Thread-199488] [transport.py] [_log()] userauth is OK
2026-04-13T01:37:30.793 [DEBUG] [Thread-199488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:37:30.794 [DEBUG] [Thread-199488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:37:30.794 [DEBUG] [Thread-199488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:37:30.794 [DEBUG] [Thread-199488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:37:30.811 [INFO] [Thread-199488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:37:30.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:37:31.471 [DEBUG] [Thread-199488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:37:31.471 [DEBUG] [Thread-199488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:37:31.472 [DEBUG] [Thread-199488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:37:31.512 [DEBUG] [Thread-199488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:37:31.512 [DEBUG] [Thread-199488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:37:31.515 [DEBUG] [Thread-199488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:37:31.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:37:31.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:37:31.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:37:31.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:37:31.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:37:31.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:37:31.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:37:31.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:37:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:37:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.984127 -999.00  +10.90   2.97     89   +9.20 1 2 1 3 1     0    0 1.63 5.67 .N... 3.0 3.0 201.8 6.0 11.5 -21.9 11.4 -21.0 11.2 -18.9 11.4 -20.8
2026-04-13T01:37:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:37:31.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:37:31.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.984127
2026-04-13T01:37:31.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:37:31.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:37:31.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:37:31.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:37:31.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:37:31.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:37:16', tmtdew=1.79392, humidity=88.7341, cloud=0.0, wind=7.58844, temperature=10.9215, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:37:08.573', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:37:31.538 [DEBUG] [Thread-199488] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:37:31.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:37:31.632 [DEBUG] [Thread-199491] [transport.py] [_log()] starting thread (client mode): 0xae5b4a90
2026-04-13T01:37:31.632 [DEBUG] [Thread-199491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:37:31.646 [DEBUG] [Thread-199491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:37:31.646 [INFO] [Thread-199491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:37:31.654 [DEBUG] [Thread-199491] [transport.py] [_log()] client lang: <none>
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] server lang: <none>
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] kex follows: False
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] Compression: none
2026-04-13T01:37:31.655 [DEBUG] [Thread-199491] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:37:31.711 [DEBUG] [Thread-199491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:37:31.711 [DEBUG] [Thread-199491] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:37:31.712 [DEBUG] [Thread-199491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:37:31.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:37:31.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:37:31.767 [DEBUG] [Thread-199491] [transport.py] [_log()] userauth is OK
2026-04-13T01:37:31.767 [DEBUG] [Thread-199491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:37:31.767 [DEBUG] [Thread-199491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:37:31.767 [DEBUG] [Thread-199491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:37:31.767 [DEBUG] [Thread-199491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:37:31.785 [INFO] [Thread-199491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:37:31.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:37:31.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:37:32.684 [DEBUG] [Thread-199491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:37:32.684 [DEBUG] [Thread-199491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:37:32.732 [DEBUG] [Thread-199491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:37:32.732 [DEBUG] [Thread-199491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:37:32.741 [DEBUG] [Thread-199491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:37:32.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:37:32.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:37:32.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:37:32.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:37:32.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:37:32.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:37:32.778 [DEBUG] [Thread-199491] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:37:39.067 [DEBUG] [Thread-199493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:37:54.122 [DEBUG] [Thread-199494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:38:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:38:02.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:38:02.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:38:04.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 37, 51), 1.49321, 90.4354, 0.0, 8.54136, 10.8432, 2, 2, 0, 2, 0, 0),)
2026-04-13T01:38:04.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:37:51
2026-04-13T01:38:04.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:38:04.623 [DEBUG] [Thread-199495] [transport.py] [_log()] starting thread (client mode): 0xae5f2bf0
2026-04-13T01:38:04.624 [DEBUG] [Thread-199495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:38:04.639 [DEBUG] [Thread-199495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:38:04.639 [INFO] [Thread-199495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] client lang: <none>
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] server lang: <none>
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] kex follows: False
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] Compression: none
2026-04-13T01:38:04.642 [DEBUG] [Thread-199495] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:38:04.659 [DEBUG] [Thread-199495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:38:04.659 [DEBUG] [Thread-199495] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:38:04.660 [DEBUG] [Thread-199495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:38:04.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:38:04.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:38:04.662 [DEBUG] [Thread-199495] [transport.py] [_log()] userauth is OK
2026-04-13T01:38:04.662 [DEBUG] [Thread-199495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:38:04.662 [DEBUG] [Thread-199495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:38:04.662 [DEBUG] [Thread-199495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:38:04.662 [DEBUG] [Thread-199495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:38:04.681 [INFO] [Thread-199495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:38:04.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:38:05.333 [DEBUG] [Thread-199495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:38:05.334 [DEBUG] [Thread-199495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:38:05.334 [DEBUG] [Thread-199495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:38:05.375 [DEBUG] [Thread-199495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:38:05.375 [DEBUG] [Thread-199495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:38:05.379 [DEBUG] [Thread-199495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:38:05.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:38:05.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:38:05.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:38:05.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:38:05.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:38:05.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:38:05.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:38:05.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:38:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:38:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.984474 -999.00  +11.00   2.72     89   +9.20 1 2 1 3 1     0    0 1.69 6.59 .N... 2.7 2.7 205.8 4.4 11.6 -22.0 11.4 -20.8 11.1 -18.9 11.4 -20.9
2026-04-13T01:38:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:38:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:38:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.984474
2026-04-13T01:38:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:38:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:38:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:38:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:38:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:38:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:37:51', tmtdew=1.49321, humidity=90.4354, cloud=0.0, wind=8.54136, temperature=10.8432, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:37:38.554', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:38:05.406 [DEBUG] [Thread-199495] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:38:05.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:38:05.499 [DEBUG] [Thread-199498] [transport.py] [_log()] starting thread (client mode): 0xb0fcdf60
2026-04-13T01:38:05.499 [DEBUG] [Thread-199498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:38:05.513 [DEBUG] [Thread-199498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:38:05.513 [INFO] [Thread-199498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] client lang: <none>
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] server lang: <none>
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] kex follows: False
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:38:05.521 [DEBUG] [Thread-199498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:38:05.522 [DEBUG] [Thread-199498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:38:05.522 [DEBUG] [Thread-199498] [transport.py] [_log()] Compression: none
2026-04-13T01:38:05.522 [DEBUG] [Thread-199498] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:38:05.580 [DEBUG] [Thread-199498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:38:05.580 [DEBUG] [Thread-199498] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:38:05.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:38:05.581 [DEBUG] [Thread-199498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:38:05.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:38:05.636 [DEBUG] [Thread-199498] [transport.py] [_log()] userauth is OK
2026-04-13T01:38:05.636 [DEBUG] [Thread-199498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:38:05.636 [DEBUG] [Thread-199498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:38:05.636 [DEBUG] [Thread-199498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:38:05.636 [DEBUG] [Thread-199498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:38:05.655 [INFO] [Thread-199498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:38:05.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:38:05.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:38:06.481 [DEBUG] [Thread-199498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:38:06.481 [DEBUG] [Thread-199498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:38:06.529 [DEBUG] [Thread-199498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:38:06.529 [DEBUG] [Thread-199498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:38:06.539 [DEBUG] [Thread-199498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:38:06.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:38:06.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:38:06.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:38:06.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:38:06.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:38:06.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:38:06.576 [DEBUG] [Thread-199498] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:38:09.161 [DEBUG] [Thread-199500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:38:12.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:38:12.169 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:38:24.216 [DEBUG] [Thread-199501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:38:29.663 [DEBUG] [Thread-199502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:38:36.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:38:36.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:38:36.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:38:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 38, 27), 1.86335, 88.1182, 0.0, 8.20584, 10.9548, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:38:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:38:27
2026-04-13T01:38:38.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:38:38.414 [DEBUG] [Thread-199503] [transport.py] [_log()] starting thread (client mode): 0xb39c5ab0
2026-04-13T01:38:38.414 [DEBUG] [Thread-199503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:38:38.434 [DEBUG] [Thread-199503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:38:38.434 [INFO] [Thread-199503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] client lang: <none>
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] server lang: <none>
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] kex follows: False
2026-04-13T01:38:38.437 [DEBUG] [Thread-199503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:38:38.438 [DEBUG] [Thread-199503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:38:38.438 [DEBUG] [Thread-199503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:38:38.438 [DEBUG] [Thread-199503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:38:38.438 [DEBUG] [Thread-199503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:38:38.438 [DEBUG] [Thread-199503] [transport.py] [_log()] Compression: none
2026-04-13T01:38:38.438 [DEBUG] [Thread-199503] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:38:38.455 [DEBUG] [Thread-199503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:38:38.455 [DEBUG] [Thread-199503] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:38:38.456 [DEBUG] [Thread-199503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:38:38.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:38:38.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:38:38.458 [DEBUG] [Thread-199503] [transport.py] [_log()] userauth is OK
2026-04-13T01:38:38.458 [DEBUG] [Thread-199503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:38:38.458 [DEBUG] [Thread-199503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:38:38.458 [DEBUG] [Thread-199503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:38:38.459 [DEBUG] [Thread-199503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:38:38.476 [INFO] [Thread-199503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:38:38.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:38:39.107 [DEBUG] [Thread-199503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:38:39.107 [DEBUG] [Thread-199503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:38:39.107 [DEBUG] [Thread-199503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:38:39.147 [DEBUG] [Thread-199503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:38:39.147 [DEBUG] [Thread-199503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:38:39.150 [DEBUG] [Thread-199503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:38:39.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:38:39.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:38:39.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:38:39.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:38:39.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:38:39.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:38:39.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:38:39.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.984821 -999.00  +11.00   2.61     88   +9.20 1 2 1 3 1     0    0 1.73 7.38 ZN... 2.6 2.6 205.5 5.8 11.5 -21.9 11.4 -20.7 11.2 -18.8 11.4 -20.9
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.984821
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:38:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:38:27', tmtdew=1.86335, humidity=88.1182, cloud=0.0, wind=8.20584, temperature=10.9548, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:38:08.534', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:38:39.164 [DEBUG] [Thread-199503] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:38:39.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:38:39.248 [DEBUG] [Thread-199506] [transport.py] [_log()] starting thread (client mode): 0xae5b4c40
2026-04-13T01:38:39.248 [DEBUG] [Thread-199506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:38:39.252 [DEBUG] [Thread-199507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:38:39.262 [DEBUG] [Thread-199506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:38:39.262 [INFO] [Thread-199506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] client lang: <none>
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] server lang: <none>
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] kex follows: False
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] Compression: none
2026-04-13T01:38:39.270 [DEBUG] [Thread-199506] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:38:39.332 [DEBUG] [Thread-199506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:38:39.333 [DEBUG] [Thread-199506] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:38:39.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:38:39.334 [DEBUG] [Thread-199506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:38:39.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:38:39.388 [DEBUG] [Thread-199506] [transport.py] [_log()] userauth is OK
2026-04-13T01:38:39.388 [DEBUG] [Thread-199506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:38:39.388 [DEBUG] [Thread-199506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:38:39.389 [DEBUG] [Thread-199506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:38:39.389 [DEBUG] [Thread-199506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:38:39.407 [INFO] [Thread-199506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:38:39.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:38:39.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:38:40.216 [DEBUG] [Thread-199506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:38:40.216 [DEBUG] [Thread-199506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:38:40.264 [DEBUG] [Thread-199506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:38:40.264 [DEBUG] [Thread-199506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:38:40.273 [DEBUG] [Thread-199506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:38:40.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:38:40.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:38:40.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:38:40.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:38:40.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:38:40.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:38:40.310 [DEBUG] [Thread-199506] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:38:54.296 [DEBUG] [Thread-199509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:39:09.335 [DEBUG] [Thread-199510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:39:10.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:39:10.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:39:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:39:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 39, 2), 1.87171, 88.0686, 0.0, 7.72956, 10.9715, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:39:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:39:02
2026-04-13T01:39:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:39:12.217 [DEBUG] [Thread-199511] [transport.py] [_log()] starting thread (client mode): 0xae5b6d40
2026-04-13T01:39:12.217 [DEBUG] [Thread-199511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:39:12.238 [DEBUG] [Thread-199511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:39:12.238 [INFO] [Thread-199511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] client lang: <none>
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] server lang: <none>
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] kex follows: False
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] Compression: none
2026-04-13T01:39:12.241 [DEBUG] [Thread-199511] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:39:12.260 [DEBUG] [Thread-199511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:39:12.261 [DEBUG] [Thread-199511] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:39:12.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:39:12.262 [DEBUG] [Thread-199511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:39:12.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:39:12.264 [DEBUG] [Thread-199511] [transport.py] [_log()] userauth is OK
2026-04-13T01:39:12.265 [DEBUG] [Thread-199511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:39:12.265 [DEBUG] [Thread-199511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:39:12.265 [DEBUG] [Thread-199511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:39:12.265 [DEBUG] [Thread-199511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:39:12.283 [INFO] [Thread-199511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:39:12.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:39:12.374 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:39:12.375 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:39:12.928 [DEBUG] [Thread-199511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:39:12.928 [DEBUG] [Thread-199511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:39:12.928 [DEBUG] [Thread-199511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:39:12.969 [DEBUG] [Thread-199511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:39:12.969 [DEBUG] [Thread-199511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:39:12.971 [DEBUG] [Thread-199511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:39:12.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:39:12.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:39:12.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:39:12.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:39:12.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:39:12.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:39:12.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:39:12.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:39:12.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:39:12.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.985168 -999.00  +11.00   4.53     88   +9.20 1 2 1 3 1     0    0 1.75 7.17 ZN... 4.5 4.5 205.2 5.7 11.6 -22.0 11.4 -20.8 11.2 -19.0 11.4 -20.9
2026-04-13T01:39:12.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:39:12.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:39:12.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.985168
2026-04-13T01:39:12.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:39:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:39:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:39:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:39:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:39:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:39:02', tmtdew=1.87171, humidity=88.0686, cloud=0.0, wind=7.72956, temperature=10.9715, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:38:38.515', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:39:12.993 [DEBUG] [Thread-199511] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:39:13.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:39:13.092 [DEBUG] [Thread-199514] [transport.py] [_log()] starting thread (client mode): 0xb0fcc070
2026-04-13T01:39:13.092 [DEBUG] [Thread-199514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:39:13.106 [DEBUG] [Thread-199514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:39:13.106 [INFO] [Thread-199514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:39:13.114 [DEBUG] [Thread-199514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:39:13.114 [DEBUG] [Thread-199514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:39:13.114 [DEBUG] [Thread-199514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:39:13.114 [DEBUG] [Thread-199514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:13.114 [DEBUG] [Thread-199514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:13.114 [DEBUG] [Thread-199514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] client lang: <none>
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] server lang: <none>
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] kex follows: False
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:39:13.115 [DEBUG] [Thread-199514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:39:13.116 [DEBUG] [Thread-199514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:39:13.116 [DEBUG] [Thread-199514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:39:13.116 [DEBUG] [Thread-199514] [transport.py] [_log()] Compression: none
2026-04-13T01:39:13.116 [DEBUG] [Thread-199514] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:39:13.171 [DEBUG] [Thread-199514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:39:13.172 [DEBUG] [Thread-199514] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:39:13.172 [DEBUG] [Thread-199514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:39:13.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:39:13.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:39:13.232 [DEBUG] [Thread-199514] [transport.py] [_log()] userauth is OK
2026-04-13T01:39:13.232 [DEBUG] [Thread-199514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:39:13.232 [DEBUG] [Thread-199514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:39:13.232 [DEBUG] [Thread-199514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:39:13.233 [DEBUG] [Thread-199514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:39:13.254 [INFO] [Thread-199514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:39:13.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:39:13.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:39:14.056 [DEBUG] [Thread-199514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:39:14.056 [DEBUG] [Thread-199514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:39:14.103 [DEBUG] [Thread-199514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:39:14.103 [DEBUG] [Thread-199514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:39:14.112 [DEBUG] [Thread-199514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:39:14.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:39:14.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:39:14.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:39:14.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:39:14.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:39:14.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:39:14.147 [DEBUG] [Thread-199514] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:39:24.374 [DEBUG] [Thread-199516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:39:29.720 [DEBUG] [Thread-199517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:39:39.434 [DEBUG] [Thread-199518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:39:44.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:39:44.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:39:44.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:39:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 39, 2), 1.87171, 88.0686, 0.0, 7.72956, 10.9715, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:39:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:39:02
2026-04-13T01:39:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:39:46.125 [DEBUG] [Thread-199519] [transport.py] [_log()] starting thread (client mode): 0xae51b4c0
2026-04-13T01:39:46.125 [DEBUG] [Thread-199519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:39:46.145 [DEBUG] [Thread-199519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:39:46.146 [INFO] [Thread-199519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:39:46.149 [DEBUG] [Thread-199519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:39:46.149 [DEBUG] [Thread-199519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:39:46.149 [DEBUG] [Thread-199519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:39:46.149 [DEBUG] [Thread-199519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:46.149 [DEBUG] [Thread-199519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:46.149 [DEBUG] [Thread-199519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:46.149 [DEBUG] [Thread-199519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] client lang: <none>
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] server lang: <none>
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] kex follows: False
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] Compression: none
2026-04-13T01:39:46.150 [DEBUG] [Thread-199519] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:39:46.170 [DEBUG] [Thread-199519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:39:46.170 [DEBUG] [Thread-199519] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:39:46.171 [DEBUG] [Thread-199519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:39:46.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:39:46.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:39:46.173 [DEBUG] [Thread-199519] [transport.py] [_log()] userauth is OK
2026-04-13T01:39:46.173 [DEBUG] [Thread-199519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:39:46.174 [DEBUG] [Thread-199519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:39:46.174 [DEBUG] [Thread-199519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:39:46.174 [DEBUG] [Thread-199519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:39:46.209 [INFO] [Thread-199519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:39:46.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:39:46.842 [DEBUG] [Thread-199519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:39:46.842 [DEBUG] [Thread-199519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:39:46.843 [DEBUG] [Thread-199519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:39:46.883 [DEBUG] [Thread-199519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:39:46.883 [DEBUG] [Thread-199519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:39:46.886 [DEBUG] [Thread-199519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:39:46.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:39:46.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:39:46.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:39:46.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:39:46.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:39:46.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:39:46.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:39:46.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:39:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:39:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.985515 -999.00  +11.00   3.82     88   +9.20 1 2 1 3 1     0    0 1.72 7.48 .N... 3.8 3.8 220.4 5.4 11.6 -21.9 11.4 -20.7 11.1 -18.9 11.4 -20.8
2026-04-13T01:39:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:39:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:39:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.985515
2026-04-13T01:39:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:39:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:39:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:39:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:39:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:39:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:39:02', tmtdew=1.87171, humidity=88.0686, cloud=0.0, wind=7.72956, temperature=10.9715, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:39:08.496', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:39:46.917 [DEBUG] [Thread-199519] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:39:46.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:39:47.011 [DEBUG] [Thread-199522] [transport.py] [_log()] starting thread (client mode): 0xae5b7610
2026-04-13T01:39:47.011 [DEBUG] [Thread-199522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:39:47.026 [DEBUG] [Thread-199522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:39:47.026 [INFO] [Thread-199522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:39:47.034 [DEBUG] [Thread-199522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:39:47.034 [DEBUG] [Thread-199522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:39:47.035 [DEBUG] [Thread-199522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:39:47.035 [DEBUG] [Thread-199522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:47.035 [DEBUG] [Thread-199522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:39:47.035 [DEBUG] [Thread-199522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:47.035 [DEBUG] [Thread-199522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:39:47.035 [DEBUG] [Thread-199522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] client lang: <none>
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] server lang: <none>
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] kex follows: False
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] Compression: none
2026-04-13T01:39:47.036 [DEBUG] [Thread-199522] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:39:47.093 [DEBUG] [Thread-199522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:39:47.094 [DEBUG] [Thread-199522] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:39:47.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:39:47.095 [DEBUG] [Thread-199522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:39:47.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:39:47.149 [DEBUG] [Thread-199522] [transport.py] [_log()] userauth is OK
2026-04-13T01:39:47.150 [DEBUG] [Thread-199522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:39:47.150 [DEBUG] [Thread-199522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:39:47.150 [DEBUG] [Thread-199522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:39:47.150 [DEBUG] [Thread-199522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:39:47.168 [INFO] [Thread-199522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:39:47.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:39:47.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:39:47.978 [DEBUG] [Thread-199522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:39:47.978 [DEBUG] [Thread-199522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:39:48.026 [DEBUG] [Thread-199522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:39:48.027 [DEBUG] [Thread-199522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:39:48.035 [DEBUG] [Thread-199522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:39:48.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:39:48.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:39:48.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:39:48.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:39:48.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:39:48.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:39:48.071 [DEBUG] [Thread-199522] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:39:54.472 [DEBUG] [Thread-199524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:09.524 [DEBUG] [Thread-199525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:12.585 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:12.587 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:18.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:40:18.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:40:18.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:40:19.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 39, 39), 1.60216, 89.7723, 0.0, 9.24696, 10.8103, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:40:19.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:39:39
2026-04-13T01:40:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:40:19.898 [DEBUG] [Thread-199526] [transport.py] [_log()] starting thread (client mode): 0xae52dea0
2026-04-13T01:40:19.898 [DEBUG] [Thread-199526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:40:19.914 [DEBUG] [Thread-199526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:40:19.915 [INFO] [Thread-199526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] client lang: <none>
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] server lang: <none>
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] kex follows: False
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:40:19.916 [DEBUG] [Thread-199526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:40:19.917 [DEBUG] [Thread-199526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:40:19.917 [DEBUG] [Thread-199526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:40:19.917 [DEBUG] [Thread-199526] [transport.py] [_log()] Compression: none
2026-04-13T01:40:19.917 [DEBUG] [Thread-199526] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:40:19.926 [DEBUG] [Thread-199526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:40:19.927 [DEBUG] [Thread-199526] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:40:19.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:40:19.928 [DEBUG] [Thread-199526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:40:19.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:40:19.929 [DEBUG] [Thread-199526] [transport.py] [_log()] userauth is OK
2026-04-13T01:40:19.930 [DEBUG] [Thread-199526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:40:19.930 [DEBUG] [Thread-199526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:40:19.930 [DEBUG] [Thread-199526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:40:19.930 [DEBUG] [Thread-199526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:40:19.953 [INFO] [Thread-199526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:40:19.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:40:20.565 [DEBUG] [Thread-199526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:40:20.566 [DEBUG] [Thread-199526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:40:20.566 [DEBUG] [Thread-199526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:40:20.607 [DEBUG] [Thread-199526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:40:20.607 [DEBUG] [Thread-199526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:40:20.611 [DEBUG] [Thread-199526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:40:20.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:40:20.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:40:20.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:40:20.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:40:20.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:40:20.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:40:20.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:40:20.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:40:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:40:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.985863 -999.00  +11.00   4.87     88   +9.10 1 2 1 3 1     0    0 1.75 8.16 .N... 4.9 4.9 215.5 5.8 11.6 -21.9 11.4 -20.7 11.2 -18.8 11.4 -20.9
2026-04-13T01:40:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:40:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:40:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.985863
2026-04-13T01:40:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:40:20.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:40:20.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:40:20.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:40:20.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:40:20.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:39:39', tmtdew=1.60216, humidity=89.7723, cloud=0.0, wind=9.24696, temperature=10.8103, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:39:38.563', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:40:20.639 [DEBUG] [Thread-199526] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:40:20.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:40:20.731 [DEBUG] [Thread-199529] [transport.py] [_log()] starting thread (client mode): 0xb0fce410
2026-04-13T01:40:20.731 [DEBUG] [Thread-199529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:40:20.746 [DEBUG] [Thread-199529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:40:20.746 [INFO] [Thread-199529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:40:20.753 [DEBUG] [Thread-199529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:40:20.753 [DEBUG] [Thread-199529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:40:20.753 [DEBUG] [Thread-199529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:40:20.753 [DEBUG] [Thread-199529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:20.753 [DEBUG] [Thread-199529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] client lang: <none>
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] server lang: <none>
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] kex follows: False
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] Compression: none
2026-04-13T01:40:20.754 [DEBUG] [Thread-199529] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:40:20.813 [DEBUG] [Thread-199529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:40:20.814 [DEBUG] [Thread-199529] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:40:20.814 [DEBUG] [Thread-199529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:40:20.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:40:20.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:40:20.870 [DEBUG] [Thread-199529] [transport.py] [_log()] userauth is OK
2026-04-13T01:40:20.870 [DEBUG] [Thread-199529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:40:20.870 [DEBUG] [Thread-199529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:40:20.870 [DEBUG] [Thread-199529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:40:20.870 [DEBUG] [Thread-199529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:40:20.889 [INFO] [Thread-199529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:40:20.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:40:20.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:40:21.706 [DEBUG] [Thread-199529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:40:21.706 [DEBUG] [Thread-199529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:40:21.754 [DEBUG] [Thread-199529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:40:21.755 [DEBUG] [Thread-199529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:40:21.764 [DEBUG] [Thread-199529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:40:21.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:40:21.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:40:21.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:40:21.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:40:21.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:40:21.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:40:21.801 [DEBUG] [Thread-199529] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:40:24.561 [DEBUG] [Thread-199531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:29.777 [DEBUG] [Thread-199532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:39.614 [DEBUG] [Thread-199533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:51.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:40:51.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:40:51.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:40:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 40, 14), 2.02853, 87.2204, 0.0, 8.13528, 10.9552, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:40:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:40:14
2026-04-13T01:40:53.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:40:53.726 [DEBUG] [Thread-199534] [transport.py] [_log()] starting thread (client mode): 0xb0fea740
2026-04-13T01:40:53.726 [DEBUG] [Thread-199534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:40:53.743 [DEBUG] [Thread-199534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:40:53.743 [INFO] [Thread-199534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:40:53.746 [DEBUG] [Thread-199534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] client lang: <none>
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] server lang: <none>
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] kex follows: False
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] Compression: none
2026-04-13T01:40:53.747 [DEBUG] [Thread-199534] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:40:53.763 [DEBUG] [Thread-199534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:40:53.764 [DEBUG] [Thread-199534] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:40:53.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:40:53.765 [DEBUG] [Thread-199534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:40:53.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:40:53.767 [DEBUG] [Thread-199534] [transport.py] [_log()] userauth is OK
2026-04-13T01:40:53.767 [DEBUG] [Thread-199534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:40:53.767 [DEBUG] [Thread-199534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:40:53.767 [DEBUG] [Thread-199534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:40:53.767 [DEBUG] [Thread-199534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:40:53.792 [INFO] [Thread-199534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:40:53.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:40:54.420 [DEBUG] [Thread-199534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:40:54.420 [DEBUG] [Thread-199534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:40:54.421 [DEBUG] [Thread-199534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:40:54.461 [DEBUG] [Thread-199534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:40:54.461 [DEBUG] [Thread-199534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:40:54.465 [DEBUG] [Thread-199534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:40:54.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:40:54.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:40:54.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:40:54.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:40:54.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:40:54.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:40:54.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:40:54.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:40:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:40:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.986557 -999.00  +10.90   4.81     88   +9.10 1 2 1 3 1     0    0 1.91 11.55 .N... 4.8 4.8 213.0 5.7 11.6 -21.9 11.4 -20.7 11.1 -19.0 11.4 -20.9
2026-04-13T01:40:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:40:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:40:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.986557
2026-04-13T01:40:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:40:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:40:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:40:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:40:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:40:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:40:14', tmtdew=2.02853, humidity=87.2204, cloud=0.0, wind=8.13528, temperature=10.9552, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:40:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:40:54.488 [DEBUG] [Thread-199534] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:40:54.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:40:54.583 [DEBUG] [Thread-199537] [transport.py] [_log()] starting thread (client mode): 0xb0fce650
2026-04-13T01:40:54.584 [DEBUG] [Thread-199537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:40:54.598 [DEBUG] [Thread-199537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:40:54.598 [INFO] [Thread-199537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:40:54.606 [DEBUG] [Thread-199537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:40:54.606 [DEBUG] [Thread-199537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:40:54.606 [DEBUG] [Thread-199537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:40:54.606 [DEBUG] [Thread-199537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:54.606 [DEBUG] [Thread-199537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:40:54.606 [DEBUG] [Thread-199537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] client lang: <none>
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] server lang: <none>
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] kex follows: False
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] Compression: none
2026-04-13T01:40:54.607 [DEBUG] [Thread-199537] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:40:54.650 [DEBUG] [Thread-199539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:40:54.666 [DEBUG] [Thread-199537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:40:54.667 [DEBUG] [Thread-199537] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:40:54.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:40:54.668 [DEBUG] [Thread-199537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:40:54.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:40:54.722 [DEBUG] [Thread-199537] [transport.py] [_log()] userauth is OK
2026-04-13T01:40:54.723 [DEBUG] [Thread-199537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:40:54.723 [DEBUG] [Thread-199537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:40:54.723 [DEBUG] [Thread-199537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:40:54.723 [DEBUG] [Thread-199537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:40:54.743 [INFO] [Thread-199537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:40:54.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:40:54.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:40:55.573 [DEBUG] [Thread-199537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:40:55.574 [DEBUG] [Thread-199537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:40:55.622 [DEBUG] [Thread-199537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:40:55.622 [DEBUG] [Thread-199537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:40:55.631 [DEBUG] [Thread-199537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:40:55.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:40:55.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:40:55.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:40:55.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:40:55.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:40:55.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:40:55.668 [DEBUG] [Thread-199537] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:41:09.704 [DEBUG] [Thread-199540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:41:12.791 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:41:12.792 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:41:24.738 [DEBUG] [Thread-199541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:41:25.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:41:25.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:41:25.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:41:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 40, 50), 1.71345, 89.109, 0.0, 8.2944, 10.91, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:41:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:40:50
2026-04-13T01:41:27.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:41:27.615 [DEBUG] [Thread-199542] [transport.py] [_log()] starting thread (client mode): 0xae52f850
2026-04-13T01:41:27.615 [DEBUG] [Thread-199542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:41:27.636 [DEBUG] [Thread-199542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:41:27.636 [INFO] [Thread-199542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] client lang: <none>
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] server lang: <none>
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] kex follows: False
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] Compression: none
2026-04-13T01:41:27.639 [DEBUG] [Thread-199542] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:41:27.657 [DEBUG] [Thread-199542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:41:27.658 [DEBUG] [Thread-199542] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:41:27.658 [DEBUG] [Thread-199542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:41:27.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:41:27.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:41:27.660 [DEBUG] [Thread-199542] [transport.py] [_log()] userauth is OK
2026-04-13T01:41:27.660 [DEBUG] [Thread-199542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:41:27.660 [DEBUG] [Thread-199542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:41:27.660 [DEBUG] [Thread-199542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:41:27.660 [DEBUG] [Thread-199542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:41:27.675 [INFO] [Thread-199542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:41:27.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:41:28.321 [DEBUG] [Thread-199542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:41:28.321 [DEBUG] [Thread-199542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:41:28.321 [DEBUG] [Thread-199542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:41:28.362 [DEBUG] [Thread-199542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:41:28.362 [DEBUG] [Thread-199542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:41:28.365 [DEBUG] [Thread-199542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:41:28.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:41:28.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:41:28.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:41:28.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:41:28.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:41:28.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:41:28.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:41:28.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:41:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:41:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.986904 -999.00  +10.90   4.11     88   +9.10 1 2 1 3 1     0    0 1.87 11.58 ZN... 4.1 4.1 216.5 6.3 11.6 -21.9 11.5 -20.8 11.2 -18.9 11.5 -21.0
2026-04-13T01:41:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:41:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:41:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.986904
2026-04-13T01:41:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:41:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:41:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:41:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:41:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:41:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:40:50', tmtdew=1.71345, humidity=89.109, cloud=0.0, wind=8.2944, temperature=10.91, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:41:08.506', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:41:28.384 [DEBUG] [Thread-199542] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:41:28.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:41:28.480 [DEBUG] [Thread-199545] [transport.py] [_log()] starting thread (client mode): 0xae51a6b0
2026-04-13T01:41:28.480 [DEBUG] [Thread-199545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:41:28.498 [DEBUG] [Thread-199545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:41:28.498 [INFO] [Thread-199545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] client lang: <none>
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] server lang: <none>
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] kex follows: False
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:41:28.505 [DEBUG] [Thread-199545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:41:28.506 [DEBUG] [Thread-199545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:41:28.506 [DEBUG] [Thread-199545] [transport.py] [_log()] Compression: none
2026-04-13T01:41:28.506 [DEBUG] [Thread-199545] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:41:28.565 [DEBUG] [Thread-199545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:41:28.566 [DEBUG] [Thread-199545] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:41:28.566 [DEBUG] [Thread-199545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:41:28.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:41:28.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:41:28.623 [DEBUG] [Thread-199545] [transport.py] [_log()] userauth is OK
2026-04-13T01:41:28.623 [DEBUG] [Thread-199545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:41:28.623 [DEBUG] [Thread-199545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:41:28.624 [DEBUG] [Thread-199545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:41:28.624 [DEBUG] [Thread-199545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:41:28.645 [INFO] [Thread-199545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:41:28.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:41:28.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:41:29.453 [DEBUG] [Thread-199545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:41:29.453 [DEBUG] [Thread-199545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:41:29.501 [DEBUG] [Thread-199545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:41:29.501 [DEBUG] [Thread-199545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:41:29.510 [DEBUG] [Thread-199545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:41:29.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:41:29.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:41: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
2026-04-13T01:41:29.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:41:29.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:41:29.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:41:29.544 [DEBUG] [Thread-199545] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:41:29.834 [DEBUG] [Thread-199547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:41:39.772 [DEBUG] [Thread-199548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:41:54.827 [DEBUG] [Thread-199549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:41:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:41:59.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:41:59.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
2026-04-13T01:42:00.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 41, 25), 2.19016, 86.3556, 0.0, 8.50572, 11.0716, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:42:00.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:41:25
2026-04-13T01:42:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:42:01.425 [DEBUG] [Thread-199550] [transport.py] [_log()] starting thread (client mode): 0xa7959150
2026-04-13T01:42:01.425 [DEBUG] [Thread-199550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:42:01.444 [DEBUG] [Thread-199550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:42:01.444 [INFO] [Thread-199550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:42:01.447 [DEBUG] [Thread-199550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:42:01.447 [DEBUG] [Thread-199550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:42:01.447 [DEBUG] [Thread-199550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] client lang: <none>
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] server lang: <none>
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] kex follows: False
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] Compression: none
2026-04-13T01:42:01.448 [DEBUG] [Thread-199550] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:42:01.456 [DEBUG] [Thread-199550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:42:01.457 [DEBUG] [Thread-199550] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:42:01.457 [DEBUG] [Thread-199550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:42:01.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:42:01.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:42:01.459 [DEBUG] [Thread-199550] [transport.py] [_log()] userauth is OK
2026-04-13T01:42:01.459 [DEBUG] [Thread-199550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:42:01.459 [DEBUG] [Thread-199550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:42:01.459 [DEBUG] [Thread-199550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:42:01.459 [DEBUG] [Thread-199550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:42:01.475 [INFO] [Thread-199550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:42:01.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:42:02.121 [DEBUG] [Thread-199550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:42:02.121 [DEBUG] [Thread-199550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:42:02.121 [DEBUG] [Thread-199550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:42:02.162 [DEBUG] [Thread-199550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:42:02.162 [DEBUG] [Thread-199550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:42:02.166 [DEBUG] [Thread-199550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:42:02.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:42:02.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:42:02.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:42:02.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:42:02.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:42:02.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:42:02.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:42:02.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:42:02.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:42:02.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.987252 -999.00  +10.90   5.28     88   +9.10 1 2 1 3 1     0    0 1.89 12.35 ZN... 5.3 5.3 215.2 6.4 11.6 -22.0 11.4 -20.8 11.2 -18.9 11.4 -20.9
2026-04-13T01:42:02.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:42:02.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:42:02.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.987252
2026-04-13T01:42:02.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:42:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:42:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:42:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:42:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:42:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:41:25', tmtdew=2.19016, humidity=86.3556, cloud=0.0, wind=8.50572, temperature=11.0716, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:41:38.573', atlas_cloud=2, atlas_rain=1, zp_data=[1.6337499999999991, nan, 0.3152500000000007, nan, nan, nan, 0.09600000000000009, nan, nan, 2.737, 1.17225, 1.3014999999999999, nan, nan, 0.16999999999999993, nan, 1.5082499999999994, 2.7364999999999995, 2.8279999999999994, 2.8992499999999986, nan, nan, 1.095250000000001, nan, nan, 0.13150000000000084, 0.04925000000000068, 0.08050000000000068, 0.11800000000000033, 0.3260000000000014, 1.019000000000001, 2.1610000000000005, 0.9597500000000005], zp_timestamp='2026-04-12T23:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:42:02.194 [DEBUG] [Thread-199550] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:42:02.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:42:02.288 [DEBUG] [Thread-199553] [transport.py] [_log()] starting thread (client mode): 0xb0fcd7e0
2026-04-13T01:42:02.288 [DEBUG] [Thread-199553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:42:02.304 [DEBUG] [Thread-199553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:42:02.304 [INFO] [Thread-199553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:42:02.312 [DEBUG] [Thread-199553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:42:02.312 [DEBUG] [Thread-199553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:42:02.312 [DEBUG] [Thread-199553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:42:02.312 [DEBUG] [Thread-199553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] client lang: <none>
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] server lang: <none>
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] kex follows: False
2026-04-13T01:42:02.313 [DEBUG] [Thread-199553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:42:02.314 [DEBUG] [Thread-199553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:42:02.314 [DEBUG] [Thread-199553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:42:02.314 [DEBUG] [Thread-199553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:42:02.314 [DEBUG] [Thread-199553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:42:02.315 [DEBUG] [Thread-199553] [transport.py] [_log()] Compression: none
2026-04-13T01:42:02.315 [DEBUG] [Thread-199553] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:42:02.375 [DEBUG] [Thread-199553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:42:02.376 [DEBUG] [Thread-199553] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:42:02.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:42:02.377 [DEBUG] [Thread-199553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:42:02.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:42:02.432 [DEBUG] [Thread-199553] [transport.py] [_log()] userauth is OK
2026-04-13T01:42:02.432 [DEBUG] [Thread-199553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:42:02.432 [DEBUG] [Thread-199553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:42:02.432 [DEBUG] [Thread-199553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:42:02.433 [DEBUG] [Thread-199553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:42:02.451 [INFO] [Thread-199553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:42:02.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:42:02.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:42:03.290 [DEBUG] [Thread-199553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:42:03.291 [DEBUG] [Thread-199553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:42:03.338 [DEBUG] [Thread-199553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:42:03.338 [DEBUG] [Thread-199553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:42:03.347 [DEBUG] [Thread-199553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:42:03.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:42:03.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:42:03.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:42:03.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:42:03.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:42:03.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:42:03.385 [DEBUG] [Thread-199553] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:42:09.864 [DEBUG] [Thread-199555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:42:12.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:42:12.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:42:24.916 [DEBUG] [Thread-199556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:42:29.891 [DEBUG] [Thread-199557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:42:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:42:33.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:42:33.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:42:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 42, 1), 2.20148, 86.2892, 0.0, 8.24112, 11.0882, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:42:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:42:01
2026-04-13T01:42:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:42:35.208 [DEBUG] [Thread-199558] [transport.py] [_log()] starting thread (client mode): 0xb0fcf550
2026-04-13T01:42:35.208 [DEBUG] [Thread-199558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:42:35.221 [DEBUG] [Thread-199558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:42:35.221 [INFO] [Thread-199558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] client lang: <none>
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] server lang: <none>
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] kex follows: False
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] Compression: none
2026-04-13T01:42:35.223 [DEBUG] [Thread-199558] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:42:35.233 [DEBUG] [Thread-199558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:42:35.233 [DEBUG] [Thread-199558] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:42:35.234 [DEBUG] [Thread-199558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:42:35.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:42:35.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:42:35.235 [DEBUG] [Thread-199558] [transport.py] [_log()] userauth is OK
2026-04-13T01:42:35.235 [DEBUG] [Thread-199558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:42:35.235 [DEBUG] [Thread-199558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:42:35.235 [DEBUG] [Thread-199558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:42:35.235 [DEBUG] [Thread-199558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:42:35.250 [INFO] [Thread-199558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:42:35.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:42:35.845 [DEBUG] [Thread-199558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:42:35.846 [DEBUG] [Thread-199558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:42:35.846 [DEBUG] [Thread-199558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:42:35.886 [DEBUG] [Thread-199558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:42:35.886 [DEBUG] [Thread-199558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:42:35.889 [DEBUG] [Thread-199558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:42:35.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:42:35.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:42:35.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:42:35.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:42:35.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:42:35.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:42:35.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:42:35.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:42:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:42:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.987599 -999.00  +10.90   4.83     88   +9.10 1 2 1 3 1     0    0 2.02 14.48 ZN... 4.8 4.8 218.8 5.6 11.6 -22.0 11.4 -20.9 11.2 -18.9 11.4 -20.9
2026-04-13T01:42:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:42:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:42:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.987599
2026-04-13T01:42:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:42:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:42:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:42:35.915 [DEBUG] [Thread-199558] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:42:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:42:35.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:42:35.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:42:01', tmtdew=2.20148, humidity=86.2892, cloud=0.0, wind=8.24112, temperature=11.0882, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:42:08.554', atlas_cloud=2, atlas_rain=1, zp_data=[0.74925, nan, 0.5282499999999999, nan, nan, nan, 0.09600000000000009, nan, nan, 2.923, 1.1522499999999996, 2.1080000000000005, nan, nan, 0.009999999999999787, nan, nan, 2.5790000000000006, 1.2299999999999995, 2.746249999999999, nan, nan, 1.6182500000000006, nan, 1.8609999999999989, 0.08750000000000036, 0.029749999999999943, -0.006499999999999062, 0.06050000000000111, 0.25700000000000234, 0.44400000000000084, 2.5980000000000008, 0.43124999999999947], zp_timestamp='2026-04-12T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:42:35.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:42:36.009 [DEBUG] [Thread-199561] [transport.py] [_log()] starting thread (client mode): 0xb0fcf670
2026-04-13T01:42:36.009 [DEBUG] [Thread-199561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:42:36.027 [DEBUG] [Thread-199561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:42:36.028 [INFO] [Thread-199561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:42:36.035 [DEBUG] [Thread-199561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:42:36.035 [DEBUG] [Thread-199561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:42:36.036 [DEBUG] [Thread-199561] [transport.py] [_log()] client lang: <none>
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] server lang: <none>
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] kex follows: False
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:42:36.037 [DEBUG] [Thread-199561] [transport.py] [_log()] Compression: none
2026-04-13T01:42:36.038 [DEBUG] [Thread-199561] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:42:36.096 [DEBUG] [Thread-199561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:42:36.097 [DEBUG] [Thread-199561] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:42:36.098 [DEBUG] [Thread-199561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:42:36.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:42:36.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:42:36.156 [DEBUG] [Thread-199561] [transport.py] [_log()] userauth is OK
2026-04-13T01:42:36.157 [DEBUG] [Thread-199561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:42:36.157 [DEBUG] [Thread-199561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:42:36.157 [DEBUG] [Thread-199561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:42:36.157 [DEBUG] [Thread-199561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:42:36.175 [INFO] [Thread-199561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:42:36.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:42:36.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:42:37.001 [DEBUG] [Thread-199561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:42:37.001 [DEBUG] [Thread-199561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:42:37.048 [DEBUG] [Thread-199561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:42:37.049 [DEBUG] [Thread-199561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:42:37.057 [DEBUG] [Thread-199561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:42:37.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:42:37.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:42:37.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:42:37.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:42:37.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:42:37.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:42:37.092 [DEBUG] [Thread-199561] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:42:39.950 [DEBUG] [Thread-199563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:42:55.013 [DEBUG] [Thread-199564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:43:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:43:07.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:43:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:43:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 42, 36), 1.81917, 88.479, 0.0, 10.3054, 10.9434, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:43:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:42:36
2026-04-13T01:43:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:43:08.966 [DEBUG] [Thread-199565] [transport.py] [_log()] starting thread (client mode): 0xae52ffa0
2026-04-13T01:43:08.966 [DEBUG] [Thread-199565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:43:08.982 [DEBUG] [Thread-199565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:43:08.982 [INFO] [Thread-199565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:43:08.985 [DEBUG] [Thread-199565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:43:08.985 [DEBUG] [Thread-199565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:43:08.985 [DEBUG] [Thread-199565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:43:08.985 [DEBUG] [Thread-199565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:08.985 [DEBUG] [Thread-199565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] client lang: <none>
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] server lang: <none>
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] kex follows: False
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:43:08.986 [DEBUG] [Thread-199565] [transport.py] [_log()] Compression: none
2026-04-13T01:43:08.987 [DEBUG] [Thread-199565] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:43:09.005 [DEBUG] [Thread-199565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:43:09.006 [DEBUG] [Thread-199565] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:43:09.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:43:09.007 [DEBUG] [Thread-199565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:43:09.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:43:09.009 [DEBUG] [Thread-199565] [transport.py] [_log()] userauth is OK
2026-04-13T01:43:09.010 [DEBUG] [Thread-199565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:43:09.010 [DEBUG] [Thread-199565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:43:09.010 [DEBUG] [Thread-199565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:43:09.010 [DEBUG] [Thread-199565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:43:09.028 [INFO] [Thread-199565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:43:09.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:43:09.607 [DEBUG] [Thread-199565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:43:09.608 [DEBUG] [Thread-199565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:43:09.608 [DEBUG] [Thread-199565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:43:09.649 [DEBUG] [Thread-199565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:43:09.649 [DEBUG] [Thread-199565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:43:09.652 [DEBUG] [Thread-199565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:43:09.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:43:09.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:43:09.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:43:09.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:43:09.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:43:09.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:43:09.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:43:09.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:43:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:43:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.987946 -999.00  +10.90   4.95     88   +9.10 1 2 1 3 1     0    0 2.02 14.92 .N.S. 5.0 5.0 215.4 6.0 11.6 -21.9 11.4 -20.9 11.1 -18.8 11.4 -20.9
2026-04-13T01:43:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:43:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:43:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.987946
2026-04-13T01:43:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:43:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:43:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:43:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:43:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:43:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:42:36', tmtdew=1.81917, humidity=88.479, cloud=0.0, wind=10.3054, temperature=10.9434, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:42:38.534', atlas_cloud=2, atlas_rain=1, zp_data=[0.74925, nan, 0.5282499999999999, nan, nan, nan, 0.09600000000000009, nan, nan, 2.923, 1.1522499999999996, 2.1080000000000005, nan, nan, 0.009999999999999787, nan, nan, 2.5790000000000006, 1.2299999999999995, 2.746249999999999, nan, nan, 1.6182500000000006, nan, 1.8609999999999989, 0.08750000000000036, 0.029749999999999943, -0.006499999999999062, 0.06050000000000111, 0.25700000000000234, 0.44400000000000084, 2.5980000000000008, 0.43124999999999947], zp_timestamp='2026-04-12T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:43:09.690 [DEBUG] [Thread-199565] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:43:09.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:43:09.781 [DEBUG] [Thread-199568] [transport.py] [_log()] starting thread (client mode): 0xae52dea0
2026-04-13T01:43:09.781 [DEBUG] [Thread-199568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:43:09.797 [DEBUG] [Thread-199568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:43:09.798 [INFO] [Thread-199568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:43:09.805 [DEBUG] [Thread-199568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:43:09.805 [DEBUG] [Thread-199568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:43:09.805 [DEBUG] [Thread-199568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:43:09.805 [DEBUG] [Thread-199568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:09.805 [DEBUG] [Thread-199568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] client lang: <none>
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] server lang: <none>
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] kex follows: False
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] Compression: none
2026-04-13T01:43:09.806 [DEBUG] [Thread-199568] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:43:09.864 [DEBUG] [Thread-199568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:43:09.865 [DEBUG] [Thread-199568] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:43:09.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:43:09.866 [DEBUG] [Thread-199568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:43:09.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:43:09.920 [DEBUG] [Thread-199568] [transport.py] [_log()] userauth is OK
2026-04-13T01:43:09.921 [DEBUG] [Thread-199568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:43:09.921 [DEBUG] [Thread-199568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:43:09.921 [DEBUG] [Thread-199568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:43:09.922 [DEBUG] [Thread-199568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:43:09.946 [INFO] [Thread-199568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:43:09.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:43:09.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:43:10.050 [DEBUG] [Thread-199570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:43:10.767 [DEBUG] [Thread-199568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:43:10.767 [DEBUG] [Thread-199568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:43:10.815 [DEBUG] [Thread-199568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:43:10.815 [DEBUG] [Thread-199568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:43:10.824 [DEBUG] [Thread-199568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:43:10.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:43:10.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:43:10.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:43:10.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:43:10.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:43:10.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:43:10.859 [DEBUG] [Thread-199568] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:43:13.203 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:43:13.204 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:43:25.115 [DEBUG] [Thread-199571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:43:29.974 [DEBUG] [Thread-199572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:43:40.151 [DEBUG] [Thread-199573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:43:40.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:43:40.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:43:40.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:43:42.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 43, 12), 2.32095, 85.6732, 0.0, 8.41752, 11.0383, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:43:42.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:43:12
2026-04-13T01:43:42.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:43:42.757 [DEBUG] [Thread-199574] [transport.py] [_log()] starting thread (client mode): 0xa7959900
2026-04-13T01:43:42.757 [DEBUG] [Thread-199574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:43:42.776 [DEBUG] [Thread-199574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:43:42.777 [INFO] [Thread-199574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:43:42.780 [DEBUG] [Thread-199574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:43:42.780 [DEBUG] [Thread-199574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:43:42.780 [DEBUG] [Thread-199574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:43:42.780 [DEBUG] [Thread-199574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:42.780 [DEBUG] [Thread-199574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:42.780 [DEBUG] [Thread-199574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] client lang: <none>
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] server lang: <none>
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] kex follows: False
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] Compression: none
2026-04-13T01:43:42.781 [DEBUG] [Thread-199574] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:43:42.792 [DEBUG] [Thread-199574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:43:42.792 [DEBUG] [Thread-199574] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:43:42.793 [DEBUG] [Thread-199574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:43:42.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:43:42.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:43:42.795 [DEBUG] [Thread-199574] [transport.py] [_log()] userauth is OK
2026-04-13T01:43:42.795 [DEBUG] [Thread-199574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:43:42.796 [DEBUG] [Thread-199574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:43:42.796 [DEBUG] [Thread-199574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:43:42.796 [DEBUG] [Thread-199574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:43:42.815 [INFO] [Thread-199574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:43:42.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:43:43.371 [DEBUG] [Thread-199574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:43:43.372 [DEBUG] [Thread-199574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:43:43.372 [DEBUG] [Thread-199574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:43:43.413 [DEBUG] [Thread-199574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:43:43.413 [DEBUG] [Thread-199574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:43:43.416 [DEBUG] [Thread-199574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:43:43.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:43:43.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:43:43.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:43:43.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:43:43.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:43:43.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:43:43.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:43:43.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:43:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:43:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.988293 -999.00  +10.90   5.26     88   +9.10 1 2 1 3 1     0    0 2.01 14.38 .N.S. 5.3 5.3 211.7 6.5 11.5 -22.0 11.4 -20.8 11.1 -18.9 11.4 -20.9
2026-04-13T01:43:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:43:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:43:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.988293
2026-04-13T01:43:43.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:43:43.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:43:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:43:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:43:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:43:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:43:12', tmtdew=2.32095, humidity=85.6732, cloud=0.0, wind=8.41752, temperature=11.0383, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:43:08.515', atlas_cloud=2, atlas_rain=1, zp_data=[0.74925, nan, 0.5282499999999999, nan, nan, nan, 0.09600000000000009, nan, nan, 2.923, 1.1522499999999996, 2.1080000000000005, nan, nan, 0.009999999999999787, nan, nan, 2.5790000000000006, 1.2299999999999995, 2.746249999999999, nan, nan, 1.6182500000000006, nan, 1.8609999999999989, 0.08750000000000036, 0.029749999999999943, -0.006499999999999062, 0.06050000000000111, 0.25700000000000234, 0.44400000000000084, 2.5980000000000008, 0.43124999999999947], zp_timestamp='2026-04-12T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:43:43.440 [DEBUG] [Thread-199574] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:43:43.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:43:43.534 [DEBUG] [Thread-199577] [transport.py] [_log()] starting thread (client mode): 0xae5b4e50
2026-04-13T01:43:43.534 [DEBUG] [Thread-199577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:43:43.550 [DEBUG] [Thread-199577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:43:43.550 [INFO] [Thread-199577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:43:43.558 [DEBUG] [Thread-199577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:43:43.558 [DEBUG] [Thread-199577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:43:43.558 [DEBUG] [Thread-199577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:43:43.558 [DEBUG] [Thread-199577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:43.558 [DEBUG] [Thread-199577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:43:43.558 [DEBUG] [Thread-199577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:43.558 [DEBUG] [Thread-199577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] client lang: <none>
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] server lang: <none>
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] kex follows: False
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:43:43.559 [DEBUG] [Thread-199577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:43:43.560 [DEBUG] [Thread-199577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:43:43.560 [DEBUG] [Thread-199577] [transport.py] [_log()] Compression: none
2026-04-13T01:43:43.560 [DEBUG] [Thread-199577] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:43:43.618 [DEBUG] [Thread-199577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:43:43.618 [DEBUG] [Thread-199577] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:43:43.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:43:43.619 [DEBUG] [Thread-199577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:43:43.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:43:43.677 [DEBUG] [Thread-199577] [transport.py] [_log()] userauth is OK
2026-04-13T01:43:43.677 [DEBUG] [Thread-199577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:43:43.678 [DEBUG] [Thread-199577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:43:43.678 [DEBUG] [Thread-199577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:43:43.678 [DEBUG] [Thread-199577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:43:43.700 [INFO] [Thread-199577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:43:43.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:43:43.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:43:44.547 [DEBUG] [Thread-199577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:43:44.548 [DEBUG] [Thread-199577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:43:44.595 [DEBUG] [Thread-199577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:43:44.595 [DEBUG] [Thread-199577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:43:44.606 [DEBUG] [Thread-199577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:43:44.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:43:44.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:43:44.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:43:44.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:43:44.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:43:44.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:43:44.647 [DEBUG] [Thread-199577] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:43:55.190 [DEBUG] [Thread-199579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:44:10.241 [DEBUG] [Thread-199580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:44:13.407 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:44:13.408 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:44:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:44:14.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:44:14.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:44:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 43, 47), 1.85768, 88.2469, 0.0, 10.3406, 10.9103, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:44:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:43:47
2026-04-13T01:44:16.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:44:16.484 [DEBUG] [Thread-199581] [transport.py] [_log()] starting thread (client mode): 0xae5b5c60
2026-04-13T01:44:16.484 [DEBUG] [Thread-199581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:44:16.495 [DEBUG] [Thread-199581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:44:16.495 [INFO] [Thread-199581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] client lang: <none>
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] server lang: <none>
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] kex follows: False
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] Compression: none
2026-04-13T01:44:16.498 [DEBUG] [Thread-199581] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:44:16.512 [DEBUG] [Thread-199581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:44:16.513 [DEBUG] [Thread-199581] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:44:16.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:44:16.513 [DEBUG] [Thread-199581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:44:16.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:44:16.514 [DEBUG] [Thread-199581] [transport.py] [_log()] userauth is OK
2026-04-13T01:44:16.514 [DEBUG] [Thread-199581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:44:16.514 [DEBUG] [Thread-199581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:44:16.514 [DEBUG] [Thread-199581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:44:16.514 [DEBUG] [Thread-199581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:44:16.524 [INFO] [Thread-199581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:44:16.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:44:17.097 [DEBUG] [Thread-199581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:44:17.098 [DEBUG] [Thread-199581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:44:17.098 [DEBUG] [Thread-199581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:44:17.139 [DEBUG] [Thread-199581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:44:17.139 [DEBUG] [Thread-199581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:44:17.143 [DEBUG] [Thread-199581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:44:17.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:44:17.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:44:17.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:44:17.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:44:17.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:44:17.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:44:17.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:44:17.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:44:17.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:44:17.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.988988 -999.00  +10.80   4.09     89   +9.10 1 2 1 3 1     0    0 2.04 15.75 .N.S. 4.1 4.1 200.8 5.9 11.5 -22.0 11.4 -20.8 11.1 -19.0 11.4 -20.9
2026-04-13T01:44:17.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:44:17.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:44:17.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.988988
2026-04-13T01:44:17.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:44:17.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:44:17.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:44:17.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:44:17.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:44:17.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:43:47', tmtdew=1.85768, humidity=88.2469, cloud=0.0, wind=10.3406, temperature=10.9103, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:44:08.563', atlas_cloud=2, atlas_rain=1, zp_data=[0.74925, nan, 0.5282499999999999, nan, nan, nan, 0.09600000000000009, nan, nan, 2.923, 1.1522499999999996, 2.1080000000000005, nan, nan, 0.009999999999999787, nan, nan, 2.5790000000000006, 1.2299999999999995, 2.746249999999999, nan, nan, 1.6182500000000006, nan, 1.8609999999999989, 0.08750000000000036, 0.029749999999999943, -0.006499999999999062, 0.06050000000000111, 0.25700000000000234, 0.44400000000000084, 2.5980000000000008, 0.43124999999999947], zp_timestamp='2026-04-12T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:44:17.168 [DEBUG] [Thread-199581] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:44:17.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:44:17.261 [DEBUG] [Thread-199584] [transport.py] [_log()] starting thread (client mode): 0xae52d810
2026-04-13T01:44:17.261 [DEBUG] [Thread-199584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:44:17.276 [DEBUG] [Thread-199584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:44:17.276 [INFO] [Thread-199584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:17.284 [DEBUG] [Thread-199584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] client lang: <none>
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] server lang: <none>
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] kex follows: False
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:44:17.285 [DEBUG] [Thread-199584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:44:17.286 [DEBUG] [Thread-199584] [transport.py] [_log()] Compression: none
2026-04-13T01:44:17.286 [DEBUG] [Thread-199584] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:44:17.342 [DEBUG] [Thread-199584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:44:17.342 [DEBUG] [Thread-199584] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:44:17.343 [DEBUG] [Thread-199584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:44:17.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:44:17.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:44:17.401 [DEBUG] [Thread-199584] [transport.py] [_log()] userauth is OK
2026-04-13T01:44:17.402 [DEBUG] [Thread-199584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:44:17.402 [DEBUG] [Thread-199584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:44:17.402 [DEBUG] [Thread-199584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:44:17.402 [DEBUG] [Thread-199584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:44:17.421 [INFO] [Thread-199584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:44:17.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:44:17.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:44:18.217 [DEBUG] [Thread-199584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:44:18.217 [DEBUG] [Thread-199584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:44:18.265 [DEBUG] [Thread-199584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:44:18.265 [DEBUG] [Thread-199584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:44:18.274 [DEBUG] [Thread-199584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:44:18.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:44:18.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:44:18.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:44:18.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:44:18.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:44:18.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:44:18.311 [DEBUG] [Thread-199584] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:44:25.273 [DEBUG] [Thread-199586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:44:30.060 [DEBUG] [Thread-199587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:44:40.328 [DEBUG] [Thread-199588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:44:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:44:48.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:44:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:44:49.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 44, 22), 2.32628, 85.6401, 0.0, 8.34696, 11.0217, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:44:49.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:44:22
2026-04-13T01:44:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:44:50.153 [DEBUG] [Thread-199589] [transport.py] [_log()] starting thread (client mode): 0xae5b6410
2026-04-13T01:44:50.153 [DEBUG] [Thread-199589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:44:50.174 [DEBUG] [Thread-199589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:44:50.174 [INFO] [Thread-199589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] client lang: <none>
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] server lang: <none>
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] kex follows: False
2026-04-13T01:44:50.177 [DEBUG] [Thread-199589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:44:50.178 [DEBUG] [Thread-199589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:44:50.178 [DEBUG] [Thread-199589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:44:50.178 [DEBUG] [Thread-199589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:44:50.178 [DEBUG] [Thread-199589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:44:50.178 [DEBUG] [Thread-199589] [transport.py] [_log()] Compression: none
2026-04-13T01:44:50.178 [DEBUG] [Thread-199589] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:44:50.194 [DEBUG] [Thread-199589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:44:50.195 [DEBUG] [Thread-199589] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:44:50.195 [DEBUG] [Thread-199589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:44:50.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:44:50.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:44:50.198 [DEBUG] [Thread-199589] [transport.py] [_log()] userauth is OK
2026-04-13T01:44:50.198 [DEBUG] [Thread-199589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:44:50.198 [DEBUG] [Thread-199589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:44:50.198 [DEBUG] [Thread-199589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:44:50.198 [DEBUG] [Thread-199589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:44:50.233 [INFO] [Thread-199589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:44:50.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:44:51.029 [DEBUG] [Thread-199589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:44:51.029 [DEBUG] [Thread-199589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:44:51.029 [DEBUG] [Thread-199589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:44:51.070 [DEBUG] [Thread-199589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:44:51.070 [DEBUG] [Thread-199589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:44:51.073 [DEBUG] [Thread-199589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:44:51.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:44:51.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:44:51.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:44:51.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:44:51.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:44:51.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:44:51.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:44:51.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:44:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:44:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.988988 -999.00  +10.80   4.09     89   +9.10 1 2 1 3 1     0    0 2.04 15.75 .N.S. 4.1 4.1 200.8 5.9 11.5 -22.0 11.4 -20.8 11.1 -19.0 11.4 -20.9
2026-04-13T01:44:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:44:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:44:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.988988
2026-04-13T01:44:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:44:51.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:44:51.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:44:51.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:44:51.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:44:51.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:44:22', tmtdew=2.32628, humidity=85.6401, cloud=0.0, wind=8.34696, temperature=11.0217, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:44:08.563', atlas_cloud=2, atlas_rain=1, zp_data=[0.74925, nan, 0.5282499999999999, nan, nan, nan, 0.09600000000000009, nan, nan, 2.923, 1.1522499999999996, 2.1080000000000005, nan, nan, 0.009999999999999787, nan, nan, 2.5790000000000006, 1.2299999999999995, 2.746249999999999, nan, nan, 1.6182500000000006, nan, 1.8609999999999989, 0.08750000000000036, 0.029749999999999943, -0.006499999999999062, 0.06050000000000111, 0.25700000000000234, 0.44400000000000084, 2.5980000000000008, 0.43124999999999947], zp_timestamp='2026-04-12T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:44:51.099 [DEBUG] [Thread-199589] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:44:51.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:44:51.193 [DEBUG] [Thread-199592] [transport.py] [_log()] starting thread (client mode): 0xae51aa40
2026-04-13T01:44:51.193 [DEBUG] [Thread-199592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:44:51.208 [DEBUG] [Thread-199592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:44:51.208 [INFO] [Thread-199592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] client lang: <none>
2026-04-13T01:44:51.216 [DEBUG] [Thread-199592] [transport.py] [_log()] server lang: <none>
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] kex follows: False
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] Compression: none
2026-04-13T01:44:51.217 [DEBUG] [Thread-199592] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:44:51.275 [DEBUG] [Thread-199592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:44:51.276 [DEBUG] [Thread-199592] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:44:51.276 [DEBUG] [Thread-199592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:44:51.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:44:51.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:44:51.334 [DEBUG] [Thread-199592] [transport.py] [_log()] userauth is OK
2026-04-13T01:44:51.334 [DEBUG] [Thread-199592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:44:51.334 [DEBUG] [Thread-199592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:44:51.334 [DEBUG] [Thread-199592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:44:51.334 [DEBUG] [Thread-199592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:44:51.357 [INFO] [Thread-199592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:44:51.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:44:51.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:44:52.205 [DEBUG] [Thread-199592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:44:52.205 [DEBUG] [Thread-199592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:44:52.253 [DEBUG] [Thread-199592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:44:52.254 [DEBUG] [Thread-199592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:44:52.262 [DEBUG] [Thread-199592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:44:52.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:44:52.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:44:52.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:44:52.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:44:52.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:44:52.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:44:52.299 [DEBUG] [Thread-199592] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:44:55.370 [DEBUG] [Thread-199594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:10.422 [DEBUG] [Thread-199595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:13.616 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:13.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:22.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:45:22.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:45:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:45:23.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 44, 58), 2.28959, 86.0568, 0.0, 9.14076, 10.9718, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:45:23.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:44:58
2026-04-13T01:45:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:45:24.131 [DEBUG] [Thread-199596] [transport.py] [_log()] starting thread (client mode): 0xae52c490
2026-04-13T01:45:24.131 [DEBUG] [Thread-199596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:45:24.151 [DEBUG] [Thread-199596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:45:24.151 [INFO] [Thread-199596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:45:24.154 [DEBUG] [Thread-199596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] client lang: <none>
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] server lang: <none>
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] kex follows: False
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:45:24.155 [DEBUG] [Thread-199596] [transport.py] [_log()] Compression: none
2026-04-13T01:45:24.156 [DEBUG] [Thread-199596] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:45:24.175 [DEBUG] [Thread-199596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:45:24.176 [DEBUG] [Thread-199596] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:45:24.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:45:24.177 [DEBUG] [Thread-199596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:45:24.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:45:24.179 [DEBUG] [Thread-199596] [transport.py] [_log()] userauth is OK
2026-04-13T01:45:24.179 [DEBUG] [Thread-199596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:45:24.179 [DEBUG] [Thread-199596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:45:24.179 [DEBUG] [Thread-199596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:45:24.179 [DEBUG] [Thread-199596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:45:24.220 [INFO] [Thread-199596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:45:24.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:45:25.459 [DEBUG] [Thread-199598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:25.545 [DEBUG] [Thread-199596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:45:25.545 [DEBUG] [Thread-199596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:45:25.546 [DEBUG] [Thread-199596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:45:25.586 [DEBUG] [Thread-199596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:45:25.586 [DEBUG] [Thread-199596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:45:25.589 [DEBUG] [Thread-199596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:45:25.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:45:25.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:45:25.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:45:25.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:45:25.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:45:25.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:45:25.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:45:25.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:45:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:45:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.989335 -999.00  +10.70   4.70     89   +9.10 1 2 1 3 1     0    0 2.04 15.64 .N.S. 4.7 4.7 218.0 7.4 11.5 -22.1 11.4 -20.9 11.1 -18.9 11.4 -20.9
2026-04-13T01:45:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:45:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:45:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.989335
2026-04-13T01:45:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:45:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:45:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:45:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:45:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:45:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:44:58', tmtdew=2.28959, humidity=86.0568, cloud=0.0, wind=9.14076, temperature=10.9718, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:44:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:45:25.620 [DEBUG] [Thread-199596] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:45:25.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:45:25.713 [DEBUG] [Thread-199600] [transport.py] [_log()] starting thread (client mode): 0xb0fcfac0
2026-04-13T01:45:25.714 [DEBUG] [Thread-199600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:45:25.728 [DEBUG] [Thread-199600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:45:25.728 [INFO] [Thread-199600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:45:25.735 [DEBUG] [Thread-199600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:45:25.736 [DEBUG] [Thread-199600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] client lang: <none>
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] server lang: <none>
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] kex follows: False
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] Compression: none
2026-04-13T01:45:25.737 [DEBUG] [Thread-199600] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:45:25.794 [DEBUG] [Thread-199600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:45:25.794 [DEBUG] [Thread-199600] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:45:25.795 [DEBUG] [Thread-199600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:45:25.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:45:25.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:45:25.850 [DEBUG] [Thread-199600] [transport.py] [_log()] userauth is OK
2026-04-13T01:45:25.850 [DEBUG] [Thread-199600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:45:25.850 [DEBUG] [Thread-199600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:45:25.851 [DEBUG] [Thread-199600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:45:25.851 [DEBUG] [Thread-199600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:45:25.869 [INFO] [Thread-199600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:45:25.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:45:25.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:45:26.671 [DEBUG] [Thread-199600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:45:26.671 [DEBUG] [Thread-199600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:45:26.719 [DEBUG] [Thread-199600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:45:26.719 [DEBUG] [Thread-199600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:45:26.728 [DEBUG] [Thread-199600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:45:26.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:45:26.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:45:26.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:45:26.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:45:26.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:45:26.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:45:26.765 [DEBUG] [Thread-199600] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:45:30.146 [DEBUG] [Thread-199602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:40.491 [DEBUG] [Thread-199603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:55.543 [DEBUG] [Thread-199604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:45:56.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:45:56.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:45:56.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:45:58.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 45, 33), 1.89075, 88.0475, 0.0, 10.8698, 10.8768, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:45:58.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:45:33
2026-04-13T01:45:58.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:45:58.650 [DEBUG] [Thread-199605] [transport.py] [_log()] starting thread (client mode): 0xae5b4670
2026-04-13T01:45:58.650 [DEBUG] [Thread-199605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:45:58.672 [DEBUG] [Thread-199605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:45:58.672 [INFO] [Thread-199605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:45:58.675 [DEBUG] [Thread-199605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:45:58.675 [DEBUG] [Thread-199605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] client lang: <none>
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] server lang: <none>
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] kex follows: False
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:45:58.676 [DEBUG] [Thread-199605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:45:58.677 [DEBUG] [Thread-199605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:45:58.677 [DEBUG] [Thread-199605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:45:58.677 [DEBUG] [Thread-199605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:45:58.677 [DEBUG] [Thread-199605] [transport.py] [_log()] Compression: none
2026-04-13T01:45:58.677 [DEBUG] [Thread-199605] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:45:58.695 [DEBUG] [Thread-199605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:45:58.696 [DEBUG] [Thread-199605] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:45:58.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:45:58.696 [DEBUG] [Thread-199605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:45:58.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:45:58.699 [DEBUG] [Thread-199605] [transport.py] [_log()] userauth is OK
2026-04-13T01:45:58.699 [DEBUG] [Thread-199605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:45:58.699 [DEBUG] [Thread-199605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:45:58.699 [DEBUG] [Thread-199605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:45:58.699 [DEBUG] [Thread-199605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:45:58.722 [INFO] [Thread-199605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:45:58.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:45:59.530 [DEBUG] [Thread-199605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:45:59.530 [DEBUG] [Thread-199605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:45:59.531 [DEBUG] [Thread-199605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:45:59.571 [DEBUG] [Thread-199605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:45:59.571 [DEBUG] [Thread-199605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:45:59.574 [DEBUG] [Thread-199605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:45:59.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:45:59.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:45:59.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:45:59.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:45:59.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:45:59.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:45:59.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:45:59.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:45:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:45:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.989682 -999.00  +10.80   6.03     89   +9.10 1 2 1 3 1     0    0 2.09 17.18 .N.s. 6.0 6.0 195.0 8.0 11.5 -21.9 11.4 -20.7 11.2 -19.0 11.4 -20.9
2026-04-13T01:45:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:45:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:45:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.989682
2026-04-13T01:45:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:45:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:45:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:45:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:45:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:45:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:45:33', tmtdew=1.89075, humidity=88.0475, cloud=0.0, wind=10.8698, temperature=10.8768, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:45:08.525', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:45:59.598 [DEBUG] [Thread-199605] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:45:59.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:45:59.691 [DEBUG] [Thread-199608] [transport.py] [_log()] starting thread (client mode): 0xae52c0a0
2026-04-13T01:45:59.691 [DEBUG] [Thread-199608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:45:59.706 [DEBUG] [Thread-199608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:45:59.706 [INFO] [Thread-199608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:45:59.713 [DEBUG] [Thread-199608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] client lang: <none>
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] server lang: <none>
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] kex follows: False
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] Compression: none
2026-04-13T01:45:59.714 [DEBUG] [Thread-199608] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:45:59.770 [DEBUG] [Thread-199608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:45:59.770 [DEBUG] [Thread-199608] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:45:59.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:45:59.772 [DEBUG] [Thread-199608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:45:59.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:45:59.826 [DEBUG] [Thread-199608] [transport.py] [_log()] userauth is OK
2026-04-13T01:45:59.827 [DEBUG] [Thread-199608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:45:59.827 [DEBUG] [Thread-199608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:45:59.827 [DEBUG] [Thread-199608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:45:59.827 [DEBUG] [Thread-199608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:45:59.846 [INFO] [Thread-199608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:45:59.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:45:59.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:46:00.679 [DEBUG] [Thread-199608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:46:00.680 [DEBUG] [Thread-199608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:46:00.728 [DEBUG] [Thread-199608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:46:00.728 [DEBUG] [Thread-199608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:46:00.738 [DEBUG] [Thread-199608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:46:00.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:46:00.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:46:00.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:46:00.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:46:00.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:46:00.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:46:00.775 [DEBUG] [Thread-199608] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:46:10.579 [DEBUG] [Thread-199610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:46:13.822 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:46:13.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:46:25.640 [DEBUG] [Thread-199611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:46:30.237 [DEBUG] [Thread-199612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:46:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:46:30.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:46:30.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:46:32.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 46, 8), 2.25352, 85.974, 0.0, 7.69428, 10.9718, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:46:32.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:46:08
2026-04-13T01:46:32.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:46:32.625 [DEBUG] [Thread-199613] [transport.py] [_log()] starting thread (client mode): 0xa7959120
2026-04-13T01:46:32.625 [DEBUG] [Thread-199613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:46:32.648 [DEBUG] [Thread-199613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:46:32.649 [INFO] [Thread-199613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] client lang: <none>
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] server lang: <none>
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] kex follows: False
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:46:32.652 [DEBUG] [Thread-199613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:46:32.653 [DEBUG] [Thread-199613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:46:32.653 [DEBUG] [Thread-199613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:46:32.653 [DEBUG] [Thread-199613] [transport.py] [_log()] Compression: none
2026-04-13T01:46:32.653 [DEBUG] [Thread-199613] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:46:32.670 [DEBUG] [Thread-199613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:46:32.671 [DEBUG] [Thread-199613] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:46:32.671 [DEBUG] [Thread-199613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:46:32.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:46:32.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:46:32.673 [DEBUG] [Thread-199613] [transport.py] [_log()] userauth is OK
2026-04-13T01:46:32.673 [DEBUG] [Thread-199613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:46:32.673 [DEBUG] [Thread-199613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:46:32.673 [DEBUG] [Thread-199613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:46:32.673 [DEBUG] [Thread-199613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:46:32.694 [INFO] [Thread-199613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:46:32.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:46:33.484 [DEBUG] [Thread-199613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:46:33.485 [DEBUG] [Thread-199613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:46:33.485 [DEBUG] [Thread-199613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:46:33.526 [DEBUG] [Thread-199613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:46:33.526 [DEBUG] [Thread-199613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:46:33.529 [DEBUG] [Thread-199613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:46:33.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:46:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:46:33.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:46:33.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:46:33.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:46:33.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:46:33.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:46:33.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:46:33.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:46:33.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.990029 -999.00  +10.80   4.91     89   +9.10 1 2 1 3 1     0    0 2.08 16.84 .N.s. 4.9 4.9 217.6 5.9 11.5 -21.9 11.3 -20.7 11.1 -19.1 11.4 -20.9
2026-04-13T01:46:33.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:46:33.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:46:33.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.990029
2026-04-13T01:46:33.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:46:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:46:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:46:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:46:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:46:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:46:08', tmtdew=2.25352, humidity=85.974, cloud=0.0, wind=7.69428, temperature=10.9718, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:45:38.506', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:46:33.547 [DEBUG] [Thread-199613] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:46:33.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:46:33.634 [DEBUG] [Thread-199616] [transport.py] [_log()] starting thread (client mode): 0xae52c6d0
2026-04-13T01:46:33.634 [DEBUG] [Thread-199616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:46:33.648 [DEBUG] [Thread-199616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:46:33.648 [INFO] [Thread-199616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] client lang: <none>
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] server lang: <none>
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] kex follows: False
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:46:33.656 [DEBUG] [Thread-199616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:46:33.657 [DEBUG] [Thread-199616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:46:33.657 [DEBUG] [Thread-199616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:46:33.657 [DEBUG] [Thread-199616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:46:33.657 [DEBUG] [Thread-199616] [transport.py] [_log()] Compression: none
2026-04-13T01:46:33.657 [DEBUG] [Thread-199616] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:46:33.713 [DEBUG] [Thread-199616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:46:33.714 [DEBUG] [Thread-199616] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:46:33.714 [DEBUG] [Thread-199616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:46:33.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:46:33.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:46:33.771 [DEBUG] [Thread-199616] [transport.py] [_log()] userauth is OK
2026-04-13T01:46:33.771 [DEBUG] [Thread-199616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:46:33.771 [DEBUG] [Thread-199616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:46:33.771 [DEBUG] [Thread-199616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:46:33.771 [DEBUG] [Thread-199616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:46:33.791 [INFO] [Thread-199616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:46:33.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:46:33.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:46:34.602 [DEBUG] [Thread-199616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:46:34.603 [DEBUG] [Thread-199616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:46:34.650 [DEBUG] [Thread-199616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:46:34.651 [DEBUG] [Thread-199616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:46:34.659 [DEBUG] [Thread-199616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:46:34.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:46:34.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:46:34.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:46:34.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:46:34.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:46:34.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:46:34.690 [DEBUG] [Thread-199616] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:46:40.674 [DEBUG] [Thread-199618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:46:55.737 [DEBUG] [Thread-199619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:47:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:47:04.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:47:04.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:47:05.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 46, 44), 1.91451, 87.9148, 0.0, 8.36496, 10.9764, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:47:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:46:44
2026-04-13T01:47:06.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:47:06.522 [DEBUG] [Thread-199620] [transport.py] [_log()] starting thread (client mode): 0xae5b5120
2026-04-13T01:47:06.523 [DEBUG] [Thread-199620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:47:06.543 [DEBUG] [Thread-199620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:47:06.543 [INFO] [Thread-199620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:47:06.546 [DEBUG] [Thread-199620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:47:06.546 [DEBUG] [Thread-199620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:47:06.546 [DEBUG] [Thread-199620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] client lang: <none>
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] server lang: <none>
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] kex follows: False
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:47:06.547 [DEBUG] [Thread-199620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:47:06.548 [DEBUG] [Thread-199620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:47:06.548 [DEBUG] [Thread-199620] [transport.py] [_log()] Compression: none
2026-04-13T01:47:06.548 [DEBUG] [Thread-199620] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:47:06.568 [DEBUG] [Thread-199620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:47:06.569 [DEBUG] [Thread-199620] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:47:06.569 [DEBUG] [Thread-199620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:47:06.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:47:06.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:47:06.571 [DEBUG] [Thread-199620] [transport.py] [_log()] userauth is OK
2026-04-13T01:47:06.572 [DEBUG] [Thread-199620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:47:06.572 [DEBUG] [Thread-199620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:47:06.572 [DEBUG] [Thread-199620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:47:06.572 [DEBUG] [Thread-199620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:47:06.606 [INFO] [Thread-199620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:47:06.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:47:07.419 [DEBUG] [Thread-199620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:47:07.420 [DEBUG] [Thread-199620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:47:07.420 [DEBUG] [Thread-199620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:47:07.460 [DEBUG] [Thread-199620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:47:07.460 [DEBUG] [Thread-199620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:47:07.464 [DEBUG] [Thread-199620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:47:07.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:47:07.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:47:07.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:47:07.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:47:07.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:47:07.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:47:07.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:47:07.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:47:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:47:07.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.990376 -999.00  +10.80   6.85     89   +9.10 1 2 1 3 1     0    0 2.11 17.11 zn.s. 6.8 6.8 215.1 7.4 11.5 -22.0 11.4 -20.8 11.1 -19.0 11.4 -20.8
2026-04-13T01:47:07.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:47:07.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:47:07.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.990376
2026-04-13T01:47:07.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:47:07.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:47:07.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:47:07.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:47:07.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:47:07.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:46:44', tmtdew=1.91451, humidity=87.9148, cloud=0.0, wind=8.36496, temperature=10.9764, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:46:08.486', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:47:07.491 [DEBUG] [Thread-199620] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:47:07.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:47:07.582 [DEBUG] [Thread-199623] [transport.py] [_log()] starting thread (client mode): 0xae5b4c40
2026-04-13T01:47:07.582 [DEBUG] [Thread-199623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:47:07.597 [DEBUG] [Thread-199623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:47:07.598 [INFO] [Thread-199623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:47:07.605 [DEBUG] [Thread-199623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:47:07.605 [DEBUG] [Thread-199623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:47:07.605 [DEBUG] [Thread-199623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:47:07.605 [DEBUG] [Thread-199623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:07.605 [DEBUG] [Thread-199623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:07.605 [DEBUG] [Thread-199623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:07.605 [DEBUG] [Thread-199623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] client lang: <none>
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] server lang: <none>
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] kex follows: False
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] Compression: none
2026-04-13T01:47:07.606 [DEBUG] [Thread-199623] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:47:07.663 [DEBUG] [Thread-199623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:47:07.664 [DEBUG] [Thread-199623] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:47:07.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:47:07.665 [DEBUG] [Thread-199623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:47:07.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:47:07.718 [DEBUG] [Thread-199623] [transport.py] [_log()] userauth is OK
2026-04-13T01:47:07.719 [DEBUG] [Thread-199623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:47:07.719 [DEBUG] [Thread-199623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:47:07.719 [DEBUG] [Thread-199623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:47:07.719 [DEBUG] [Thread-199623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:47:07.741 [INFO] [Thread-199623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:47:07.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:47:07.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:47:08.557 [DEBUG] [Thread-199623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:47:08.558 [DEBUG] [Thread-199623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:47:08.606 [DEBUG] [Thread-199623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:47:08.606 [DEBUG] [Thread-199623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:47:08.616 [DEBUG] [Thread-199623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:47:08.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:47:08.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:47:08.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:47:08.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:47:08.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:47:08.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:47:08.653 [DEBUG] [Thread-199623] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:47:10.775 [DEBUG] [Thread-199625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:47:14.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:47:14.028 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:47:25.823 [DEBUG] [Thread-199626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:47:30.319 [DEBUG] [Thread-199627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:47:38.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:47:38.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:47:38.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:47:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 47, 19), 2.32589, 85.8414, 0.0, 8.2764, 10.9719, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:47:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:47:19
2026-04-13T01:47:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:47:40.484 [DEBUG] [Thread-199628] [transport.py] [_log()] starting thread (client mode): 0xae50b8e0
2026-04-13T01:47:40.484 [DEBUG] [Thread-199628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:47:40.504 [DEBUG] [Thread-199628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:47:40.504 [INFO] [Thread-199628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:47:40.507 [DEBUG] [Thread-199628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:47:40.507 [DEBUG] [Thread-199628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:47:40.507 [DEBUG] [Thread-199628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:47:40.507 [DEBUG] [Thread-199628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:40.507 [DEBUG] [Thread-199628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] client lang: <none>
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] server lang: <none>
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] kex follows: False
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:47:40.508 [DEBUG] [Thread-199628] [transport.py] [_log()] Compression: none
2026-04-13T01:47:40.509 [DEBUG] [Thread-199628] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:47:40.527 [DEBUG] [Thread-199628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:47:40.528 [DEBUG] [Thread-199628] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:47:40.529 [DEBUG] [Thread-199628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:47:40.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:47:40.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:47:40.532 [DEBUG] [Thread-199628] [transport.py] [_log()] userauth is OK
2026-04-13T01:47:40.532 [DEBUG] [Thread-199628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:47:40.532 [DEBUG] [Thread-199628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:47:40.532 [DEBUG] [Thread-199628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:47:40.532 [DEBUG] [Thread-199628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:47:40.547 [INFO] [Thread-199628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:47:40.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:47:40.858 [DEBUG] [Thread-199630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:47:41.341 [DEBUG] [Thread-199628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:47:41.341 [DEBUG] [Thread-199628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:47:41.341 [DEBUG] [Thread-199628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:47:41.382 [DEBUG] [Thread-199628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:47:41.382 [DEBUG] [Thread-199628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:47:41.384 [DEBUG] [Thread-199628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:47:41.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:47:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:47:41.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:47:41.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:47:41.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:47:41.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:47:41.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:47:41.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:47:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:47:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.990724 -999.00  +10.80   6.08     89   +9.10 1 2 1 3 1     0    0 2.09 16.53 zn.s. 6.1 6.1 208.9 7.7 11.5 -21.8 11.4 -20.7 11.1 -18.9 11.4 -20.9
2026-04-13T01:47:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:47:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:47:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.990724
2026-04-13T01:47:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:47:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:47:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:47:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:47:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:47:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:47:19', tmtdew=2.32589, humidity=85.8414, cloud=0.0, wind=8.2764, temperature=10.9719, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:46:38.554', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:47:41.409 [DEBUG] [Thread-199628] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:47:41.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:47:41.503 [DEBUG] [Thread-199632] [transport.py] [_log()] starting thread (client mode): 0xae50ae30
2026-04-13T01:47:41.503 [DEBUG] [Thread-199632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:47:41.518 [DEBUG] [Thread-199632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:47:41.519 [INFO] [Thread-199632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:47:41.526 [DEBUG] [Thread-199632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:47:41.526 [DEBUG] [Thread-199632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:47:41.526 [DEBUG] [Thread-199632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:47:41.526 [DEBUG] [Thread-199632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:41.526 [DEBUG] [Thread-199632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:47:41.526 [DEBUG] [Thread-199632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:41.526 [DEBUG] [Thread-199632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] client lang: <none>
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] server lang: <none>
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] kex follows: False
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] Compression: none
2026-04-13T01:47:41.527 [DEBUG] [Thread-199632] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:47:41.583 [DEBUG] [Thread-199632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:47:41.584 [DEBUG] [Thread-199632] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:47:41.584 [DEBUG] [Thread-199632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:47:41.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:47:41.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:47:41.639 [DEBUG] [Thread-199632] [transport.py] [_log()] userauth is OK
2026-04-13T01:47:41.639 [DEBUG] [Thread-199632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:47:41.639 [DEBUG] [Thread-199632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:47:41.640 [DEBUG] [Thread-199632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:47:41.640 [DEBUG] [Thread-199632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:47:41.659 [INFO] [Thread-199632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:47:41.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:47:41.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:47:42.476 [DEBUG] [Thread-199632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:47:42.476 [DEBUG] [Thread-199632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:47:42.524 [DEBUG] [Thread-199632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:47:42.524 [DEBUG] [Thread-199632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:47:42.534 [DEBUG] [Thread-199632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:47:42.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:47:42.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:47:42.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:47:42.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:47:42.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:47:42.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:47:42.569 [DEBUG] [Thread-199632] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:47:55.897 [DEBUG] [Thread-199634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:48:10.950 [DEBUG] [Thread-199635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:48:12.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:48:12.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:48:12.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:48:13.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 47, 55), 2.32051, 85.3746, 0.0, 8.04708, 10.9885, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:48:13.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:47:55
2026-04-13T01:48:14.233 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:48:14.234 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:48:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:48:14.431 [DEBUG] [Thread-199636] [transport.py] [_log()] starting thread (client mode): 0xb0fe86d0
2026-04-13T01:48:14.431 [DEBUG] [Thread-199636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:48:14.446 [DEBUG] [Thread-199636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:48:14.446 [INFO] [Thread-199636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] client lang: <none>
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] server lang: <none>
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] kex follows: False
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] Compression: none
2026-04-13T01:48:14.449 [DEBUG] [Thread-199636] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:48:14.468 [DEBUG] [Thread-199636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:48:14.468 [DEBUG] [Thread-199636] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:48:14.469 [DEBUG] [Thread-199636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:48:14.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:48:14.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:48:14.471 [DEBUG] [Thread-199636] [transport.py] [_log()] userauth is OK
2026-04-13T01:48:14.471 [DEBUG] [Thread-199636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:48:14.471 [DEBUG] [Thread-199636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:48:14.471 [DEBUG] [Thread-199636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:48:14.472 [DEBUG] [Thread-199636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:48:14.497 [INFO] [Thread-199636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:48:14.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:48:15.287 [DEBUG] [Thread-199636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:48:15.287 [DEBUG] [Thread-199636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:48:15.287 [DEBUG] [Thread-199636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:48:15.328 [DEBUG] [Thread-199636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:48:15.328 [DEBUG] [Thread-199636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:48:15.332 [DEBUG] [Thread-199636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:48:15.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:48:15.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:48:15.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:48:15.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:48:15.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:48:15.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:48:15.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:48:15.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:48:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:48:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.991418 -999.00  +10.80   6.00     89   +9.10 1 2 1 3 1     0    0 2.09 16.92 ZN... 6.0 6.0 204.5 6.9 11.5 -21.9 11.3 -20.8 11.1 -18.9 11.3 -20.9
2026-04-13T01:48:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:48:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:48:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.991418
2026-04-13T01:48:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:48:15.361 [DEBUG] [Thread-199636] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:48:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:48:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:48:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:48:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:48:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:47:55', tmtdew=2.32051, humidity=85.3746, cloud=0.0, wind=8.04708, temperature=10.9885, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:47:38.515', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:48:15.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:48:15.459 [DEBUG] [Thread-199639] [transport.py] [_log()] starting thread (client mode): 0xae5f0700
2026-04-13T01:48:15.459 [DEBUG] [Thread-199639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:48:15.474 [DEBUG] [Thread-199639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:48:15.475 [INFO] [Thread-199639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:48:15.482 [DEBUG] [Thread-199639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] client lang: <none>
2026-04-13T01:48:15.483 [DEBUG] [Thread-199639] [transport.py] [_log()] server lang: <none>
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] kex follows: False
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] Compression: none
2026-04-13T01:48:15.484 [DEBUG] [Thread-199639] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:48:15.539 [DEBUG] [Thread-199639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:48:15.540 [DEBUG] [Thread-199639] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:48:15.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:48:15.541 [DEBUG] [Thread-199639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:48:15.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:48:15.596 [DEBUG] [Thread-199639] [transport.py] [_log()] userauth is OK
2026-04-13T01:48:15.596 [DEBUG] [Thread-199639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:48:15.597 [DEBUG] [Thread-199639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:48:15.597 [DEBUG] [Thread-199639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:48:15.597 [DEBUG] [Thread-199639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:48:15.616 [INFO] [Thread-199639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:48:15.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:48:15.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:48:16.502 [DEBUG] [Thread-199639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:48:16.502 [DEBUG] [Thread-199639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:48:16.551 [DEBUG] [Thread-199639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:48:16.551 [DEBUG] [Thread-199639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:48:16.561 [DEBUG] [Thread-199639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:48:16.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:48:16.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:48:16.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:48:16.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:48:16.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:48:16.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:48:16.607 [DEBUG] [Thread-199639] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:48:25.987 [DEBUG] [Thread-199641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:48:30.372 [DEBUG] [Thread-199642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:48:41.050 [DEBUG] [Thread-199643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:48:46.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:48:46.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:48:46.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:48:47.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 48, 30), 2.33477, 85.2917, 0.0, 7.8354, 11.0051, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:48:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:48:30
2026-04-13T01:48:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:48:48.441 [DEBUG] [Thread-199644] [transport.py] [_log()] starting thread (client mode): 0xae51b4c0
2026-04-13T01:48:48.441 [DEBUG] [Thread-199644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:48:48.462 [DEBUG] [Thread-199644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:48:48.462 [INFO] [Thread-199644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:48:48.466 [DEBUG] [Thread-199644] [transport.py] [_log()] client lang: <none>
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] server lang: <none>
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] kex follows: False
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] Compression: none
2026-04-13T01:48:48.467 [DEBUG] [Thread-199644] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:48:48.486 [DEBUG] [Thread-199644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:48:48.487 [DEBUG] [Thread-199644] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:48:48.487 [DEBUG] [Thread-199644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:48:48.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:48:48.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:48:48.489 [DEBUG] [Thread-199644] [transport.py] [_log()] userauth is OK
2026-04-13T01:48:48.490 [DEBUG] [Thread-199644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:48:48.490 [DEBUG] [Thread-199644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:48:48.490 [DEBUG] [Thread-199644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:48:48.490 [DEBUG] [Thread-199644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:48:48.511 [INFO] [Thread-199644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:48:48.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:48:49.234 [DEBUG] [Thread-199644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:48:49.235 [DEBUG] [Thread-199644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:48:49.235 [DEBUG] [Thread-199644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:48:49.276 [DEBUG] [Thread-199644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:48:49.276 [DEBUG] [Thread-199644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:48:49.280 [DEBUG] [Thread-199644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:48:49.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:48:49.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:48:49.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:48:49.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:48:49.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:48:49.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:48:49.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:48:49.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:48:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:48:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.991765 -999.00  +10.80   2.94     89   +9.10 1 2 1 3 1     0    0 2.16 17.06 ZN... 2.9 2.9 205.2 5.5 11.5 -21.9 11.4 -20.8 11.1 -18.9 11.3 -20.8
2026-04-13T01:48:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:48:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:48:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.991765
2026-04-13T01:48:49.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:48:49.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:48:49.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:48:49.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:48:49.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:48:49.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:48:30', tmtdew=2.33477, humidity=85.2917, cloud=0.0, wind=7.8354, temperature=11.0051, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:48:08.496', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:48:49.305 [DEBUG] [Thread-199644] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:48:49.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:48:49.398 [DEBUG] [Thread-199647] [transport.py] [_log()] starting thread (client mode): 0xae52c580
2026-04-13T01:48:49.398 [DEBUG] [Thread-199647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:48:49.413 [DEBUG] [Thread-199647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:48:49.413 [INFO] [Thread-199647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:48:49.421 [DEBUG] [Thread-199647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:48:49.421 [DEBUG] [Thread-199647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:48:49.421 [DEBUG] [Thread-199647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:48:49.421 [DEBUG] [Thread-199647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:49.421 [DEBUG] [Thread-199647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:48:49.421 [DEBUG] [Thread-199647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] client lang: <none>
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] server lang: <none>
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] kex follows: False
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] Compression: none
2026-04-13T01:48:49.422 [DEBUG] [Thread-199647] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:48:49.485 [DEBUG] [Thread-199647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:48:49.486 [DEBUG] [Thread-199647] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:48:49.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:48:49.487 [DEBUG] [Thread-199647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:48:49.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:48:49.544 [DEBUG] [Thread-199647] [transport.py] [_log()] userauth is OK
2026-04-13T01:48:49.544 [DEBUG] [Thread-199647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:48:49.544 [DEBUG] [Thread-199647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:48:49.544 [DEBUG] [Thread-199647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:48:49.544 [DEBUG] [Thread-199647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:48:49.563 [INFO] [Thread-199647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:48:49.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:48:49.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:48:50.432 [DEBUG] [Thread-199647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:48:50.432 [DEBUG] [Thread-199647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:48:50.480 [DEBUG] [Thread-199647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:48:50.480 [DEBUG] [Thread-199647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:48:50.490 [DEBUG] [Thread-199647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:48:50.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:48:50.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:48:50.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:48:50.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:48:50.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:48:50.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:48:50.526 [DEBUG] [Thread-199647] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:48:56.089 [DEBUG] [Thread-199649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:11.143 [DEBUG] [Thread-199650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:14.441 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:14.443 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:20.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:49:20.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:49:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:49:21.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 49, 5), 2.33221, 85.3083, 0.0, 7.97652, 11.0217, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:49:21.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:49:05
2026-04-13T01:49:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:49:22.345 [DEBUG] [Thread-199651] [transport.py] [_log()] starting thread (client mode): 0xae51b8e0
2026-04-13T01:49:22.345 [DEBUG] [Thread-199651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:49:22.368 [DEBUG] [Thread-199651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:49:22.368 [INFO] [Thread-199651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:49:22.372 [DEBUG] [Thread-199651] [transport.py] [_log()] client lang: <none>
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] server lang: <none>
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] kex follows: False
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] Compression: none
2026-04-13T01:49:22.373 [DEBUG] [Thread-199651] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:49:22.391 [DEBUG] [Thread-199651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:49:22.391 [DEBUG] [Thread-199651] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:49:22.392 [DEBUG] [Thread-199651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:49:22.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:49:22.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:49:22.394 [DEBUG] [Thread-199651] [transport.py] [_log()] userauth is OK
2026-04-13T01:49:22.395 [DEBUG] [Thread-199651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:49:22.395 [DEBUG] [Thread-199651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:49:22.395 [DEBUG] [Thread-199651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:49:22.395 [DEBUG] [Thread-199651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:49:22.421 [INFO] [Thread-199651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:49:22.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:49:23.242 [DEBUG] [Thread-199651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:49:23.242 [DEBUG] [Thread-199651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:49:23.243 [DEBUG] [Thread-199651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:49:23.283 [DEBUG] [Thread-199651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:49:23.283 [DEBUG] [Thread-199651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:49:23.285 [DEBUG] [Thread-199651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:49:23.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:49:23.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:49:23.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:49:23.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:49:23.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:49:23.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:49:23.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:49:23.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:49:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:49:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.992113 -999.00  +10.80   5.03     89   +9.10 1 2 1 3 1     0    0 2.13 17.18 ZN... 5.0 5.0 221.9 6.4 11.5 -21.7 11.4 -20.6 11.1 -18.9 11.4 -20.9
2026-04-13T01:49:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:49:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:49:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.992113
2026-04-13T01:49:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:49:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:49:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:49:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:49:23.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:49:23.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:49:05', tmtdew=2.33221, humidity=85.3083, cloud=0.0, wind=7.97652, temperature=11.0217, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:48:38.563', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:49:23.308 [DEBUG] [Thread-199651] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:49:23.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:49:23.401 [DEBUG] [Thread-199654] [transport.py] [_log()] starting thread (client mode): 0xae52e6b0
2026-04-13T01:49:23.401 [DEBUG] [Thread-199654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:49:23.416 [DEBUG] [Thread-199654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:49:23.416 [INFO] [Thread-199654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:49:23.423 [DEBUG] [Thread-199654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] client lang: <none>
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] server lang: <none>
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] kex follows: False
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] Compression: none
2026-04-13T01:49:23.424 [DEBUG] [Thread-199654] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:49:23.484 [DEBUG] [Thread-199654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:49:23.484 [DEBUG] [Thread-199654] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:49:23.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:49:23.486 [DEBUG] [Thread-199654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:49:23.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:49:23.541 [DEBUG] [Thread-199654] [transport.py] [_log()] userauth is OK
2026-04-13T01:49:23.541 [DEBUG] [Thread-199654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:49:23.541 [DEBUG] [Thread-199654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:49:23.541 [DEBUG] [Thread-199654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:49:23.541 [DEBUG] [Thread-199654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:49:23.560 [INFO] [Thread-199654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:49:23.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:49:23.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:49:24.356 [DEBUG] [Thread-199654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:49:24.357 [DEBUG] [Thread-199654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:49:24.405 [DEBUG] [Thread-199654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:49:24.405 [DEBUG] [Thread-199654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:49:24.414 [DEBUG] [Thread-199654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:49:24.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:49:24.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:49:24.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:49:24.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:49:24.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:49:24.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:49:24.451 [DEBUG] [Thread-199654] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:49:26.182 [DEBUG] [Thread-199656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:30.455 [DEBUG] [Thread-199657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:41.234 [DEBUG] [Thread-199658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:54.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:49:54.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:49:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:49:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 49, 41), 1.99247, 87.4508, 0.0, 9.3528, 10.9435, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:49:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:49:41
2026-04-13T01:49:56.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:49:56.265 [DEBUG] [Thread-199659] [transport.py] [_log()] starting thread (client mode): 0xae5f1300
2026-04-13T01:49:56.265 [DEBUG] [Thread-199659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:49:56.270 [DEBUG] [Thread-199660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:49:56.285 [DEBUG] [Thread-199659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:49:56.285 [INFO] [Thread-199659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:49:56.286 [DEBUG] [Thread-199659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] client lang: <none>
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] server lang: <none>
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] kex follows: False
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] Compression: none
2026-04-13T01:49:56.287 [DEBUG] [Thread-199659] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:49:56.298 [DEBUG] [Thread-199659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:49:56.299 [DEBUG] [Thread-199659] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:49:56.299 [DEBUG] [Thread-199659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:49:56.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:49:56.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:49:56.301 [DEBUG] [Thread-199659] [transport.py] [_log()] userauth is OK
2026-04-13T01:49:56.301 [DEBUG] [Thread-199659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:49:56.301 [DEBUG] [Thread-199659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:49:56.301 [DEBUG] [Thread-199659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:49:56.302 [DEBUG] [Thread-199659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:49:56.325 [INFO] [Thread-199659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:49:56.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:49:57.092 [DEBUG] [Thread-199659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:49:57.092 [DEBUG] [Thread-199659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:49:57.093 [DEBUG] [Thread-199659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:49:57.133 [DEBUG] [Thread-199659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:49:57.133 [DEBUG] [Thread-199659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:49:57.136 [DEBUG] [Thread-199659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:49:57.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:49:57.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:49:57.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:49:57.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:49:57.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:49:57.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:49:57.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:49:57.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:49:57.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:49:57.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.992460 -999.00  +10.80   4.10     89   +9.10 1 2 1 3 1     0    0 2.16 17.69 ZN.s. 4.1 4.1 206.4 7.0 11.5 -21.7 11.4 -20.7 11.1 -18.8 11.4 -20.8
2026-04-13T01:49:57.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:49:57.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:49:57.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.992460
2026-04-13T01:49:57.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:49:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:49:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:49:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:49:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:49:57.159 [DEBUG] [Thread-199659] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:49:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:49:41', tmtdew=1.99247, humidity=87.4508, cloud=0.0, wind=9.3528, temperature=10.9435, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:49:08.544', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:49:57.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:49:57.253 [DEBUG] [Thread-199663] [transport.py] [_log()] starting thread (client mode): 0xae5f0550
2026-04-13T01:49:57.253 [DEBUG] [Thread-199663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:49:57.267 [DEBUG] [Thread-199663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:49:57.267 [INFO] [Thread-199663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] client lang: <none>
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] server lang: <none>
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] kex follows: False
2026-04-13T01:49:57.275 [DEBUG] [Thread-199663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:49:57.276 [DEBUG] [Thread-199663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:49:57.276 [DEBUG] [Thread-199663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:49:57.276 [DEBUG] [Thread-199663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:49:57.276 [DEBUG] [Thread-199663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:49:57.276 [DEBUG] [Thread-199663] [transport.py] [_log()] Compression: none
2026-04-13T01:49:57.276 [DEBUG] [Thread-199663] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:49:57.331 [DEBUG] [Thread-199663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:49:57.332 [DEBUG] [Thread-199663] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:49:57.333 [DEBUG] [Thread-199663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:49:57.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:49:57.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:49:57.388 [DEBUG] [Thread-199663] [transport.py] [_log()] userauth is OK
2026-04-13T01:49:57.388 [DEBUG] [Thread-199663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:49:57.388 [DEBUG] [Thread-199663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:49:57.388 [DEBUG] [Thread-199663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:49:57.388 [DEBUG] [Thread-199663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:49:57.410 [INFO] [Thread-199663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:49:57.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:49:57.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:49:58.222 [DEBUG] [Thread-199663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:49:58.222 [DEBUG] [Thread-199663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:49:58.270 [DEBUG] [Thread-199663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:49:58.270 [DEBUG] [Thread-199663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:49:58.279 [DEBUG] [Thread-199663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:49:58.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:49: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')
2026-04-13T01:49:58.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:49:58.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:49:58.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:49:58.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:49:58.316 [DEBUG] [Thread-199663] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:50:11.303 [DEBUG] [Thread-199665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:50:14.649 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:50:14.650 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:50:26.359 [DEBUG] [Thread-199666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:50:28.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:50:28.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:50:28.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:50:29.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 50, 17), 2.39086, 85.2586, 0.0, 8.84088, 11.0884, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:50:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:50:17
2026-04-13T01:50:30.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:50:30.251 [DEBUG] [Thread-199667] [transport.py] [_log()] starting thread (client mode): 0xae5f06d0
2026-04-13T01:50:30.251 [DEBUG] [Thread-199667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:50:30.272 [DEBUG] [Thread-199667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:50:30.272 [INFO] [Thread-199667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:50:30.276 [DEBUG] [Thread-199667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:50:30.276 [DEBUG] [Thread-199667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:50:30.276 [DEBUG] [Thread-199667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] client lang: <none>
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] server lang: <none>
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] kex follows: False
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:50:30.277 [DEBUG] [Thread-199667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:50:30.278 [DEBUG] [Thread-199667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:50:30.278 [DEBUG] [Thread-199667] [transport.py] [_log()] Compression: none
2026-04-13T01:50:30.278 [DEBUG] [Thread-199667] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:50:30.294 [DEBUG] [Thread-199667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:50:30.295 [DEBUG] [Thread-199667] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:50:30.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:50:30.296 [DEBUG] [Thread-199667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:50:30.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:50:30.298 [DEBUG] [Thread-199667] [transport.py] [_log()] userauth is OK
2026-04-13T01:50:30.298 [DEBUG] [Thread-199667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:50:30.298 [DEBUG] [Thread-199667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:50:30.299 [DEBUG] [Thread-199667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:50:30.299 [DEBUG] [Thread-199667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:50:30.324 [INFO] [Thread-199667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:50:30.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:50:30.541 [DEBUG] [Thread-199669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:50:31.188 [DEBUG] [Thread-199667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:50:31.188 [DEBUG] [Thread-199667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:50:31.189 [DEBUG] [Thread-199667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:50:31.229 [DEBUG] [Thread-199667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:50:31.229 [DEBUG] [Thread-199667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:50:31.233 [DEBUG] [Thread-199667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:50:31.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:50:31.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:50:31.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:50:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:50:31.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:50:31.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:50:31.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:50:31.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.992807 -999.00  +10.80   6.02     89   +9.10 1 2 1 3 1     0    0 2.06 15.49 zN.S. 6.0 6.0 202.6 6.5 11.6 -21.8 11.4 -20.6 11.1 -18.8 11.3 -20.8
2026-04-13T01:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.992807
2026-04-13T01:50:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:50:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:50:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:50:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:50:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:50:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:50:17', tmtdew=2.39086, humidity=85.2586, cloud=0.0, wind=8.84088, temperature=11.0884, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:49:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:50:31.261 [DEBUG] [Thread-199667] [transport.py] [_log()] EOF in transport thread
2026-04-13T01: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
2026-04-13T01:50:31.353 [DEBUG] [Thread-199671] [transport.py] [_log()] starting thread (client mode): 0xae5f2260
2026-04-13T01:50:31.354 [DEBUG] [Thread-199671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:50:31.368 [DEBUG] [Thread-199671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:50:31.368 [INFO] [Thread-199671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:50:31.376 [DEBUG] [Thread-199671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:50:31.376 [DEBUG] [Thread-199671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:50:31.376 [DEBUG] [Thread-199671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:50:31.376 [DEBUG] [Thread-199671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:50:31.376 [DEBUG] [Thread-199671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] client lang: <none>
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] server lang: <none>
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] kex follows: False
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] Compression: none
2026-04-13T01:50:31.377 [DEBUG] [Thread-199671] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:50:31.433 [DEBUG] [Thread-199671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:50:31.433 [DEBUG] [Thread-199671] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:50:31.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:50:31.435 [DEBUG] [Thread-199671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:50:31.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:50:31.489 [DEBUG] [Thread-199671] [transport.py] [_log()] userauth is OK
2026-04-13T01:50:31.489 [DEBUG] [Thread-199671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:50:31.489 [DEBUG] [Thread-199671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:50:31.489 [DEBUG] [Thread-199671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:50:31.489 [DEBUG] [Thread-199671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:50:31.507 [INFO] [Thread-199671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:50:31.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:50:31.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:50:32.384 [DEBUG] [Thread-199671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:50:32.384 [DEBUG] [Thread-199671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:50:32.435 [DEBUG] [Thread-199671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:50:32.435 [DEBUG] [Thread-199671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:50:32.449 [DEBUG] [Thread-199671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:50:32.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:50:32.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:50:32.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:50:32.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:50:32.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:50:32.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:50:32.487 [DEBUG] [Thread-199671] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:50:41.398 [DEBUG] [Thread-199673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:50:56.450 [DEBUG] [Thread-199674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:51:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:51:02.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:51:02.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:51:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 50, 53), 2.03849, 87.1854, 0.0, 9.77616, 11.0099, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:51:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:50:53
2026-04-13T01:51:04.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:51:04.303 [DEBUG] [Thread-199675] [transport.py] [_log()] starting thread (client mode): 0xae5b45b0
2026-04-13T01:51:04.303 [DEBUG] [Thread-199675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:51:04.324 [DEBUG] [Thread-199675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:51:04.325 [INFO] [Thread-199675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:51:04.327 [DEBUG] [Thread-199675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] client lang: <none>
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] server lang: <none>
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] kex follows: False
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] Compression: none
2026-04-13T01:51:04.328 [DEBUG] [Thread-199675] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:51:04.347 [DEBUG] [Thread-199675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:51:04.348 [DEBUG] [Thread-199675] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:51:04.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:51:04.350 [DEBUG] [Thread-199675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:51:04.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:51:04.352 [DEBUG] [Thread-199675] [transport.py] [_log()] userauth is OK
2026-04-13T01:51:04.352 [DEBUG] [Thread-199675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:51:04.352 [DEBUG] [Thread-199675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:51:04.352 [DEBUG] [Thread-199675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:51:04.352 [DEBUG] [Thread-199675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:51:04.376 [INFO] [Thread-199675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:51:04.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:51:05.175 [DEBUG] [Thread-199675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:51:05.175 [DEBUG] [Thread-199675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:51:05.175 [DEBUG] [Thread-199675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:51:05.216 [DEBUG] [Thread-199675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:51:05.217 [DEBUG] [Thread-199675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:51:05.220 [DEBUG] [Thread-199675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:51:05.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:51:05.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:51:05.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:51:05.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:51:05.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:51:05.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:51:05.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:51:05.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:51:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:51:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.993154 -999.00  +10.80   3.02     89   +9.10 1 2 1 3 1     0    0 2.10 15.52 zN.S. 3.0 3.0 255.0 6.6 11.5 -21.8 11.4 -20.7 11.1 -18.8 11.4 -20.6
2026-04-13T01:51:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:51:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:51:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.993154
2026-04-13T01:51:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:51:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:51:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:51:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:51:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:51:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:50:53', tmtdew=2.03849, humidity=87.1854, cloud=0.0, wind=9.77616, temperature=11.0099, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:50:08.506', atlas_cloud=2, atlas_rain=1, zp_data=[0.8787499999999993, nan, 0.6252500000000003, nan, nan, nan, nan, nan, nan, nan, 1.1237499999999994, 2.8134999999999994, nan, nan, nan, nan, nan, 2.0549999999999997, 0.6350000000000007, 2.004249999999999, nan, nan, nan, nan, 1.7739999999999991, 0.14649999999999963, 0.06574999999999953, 0.0259999999999998, 0.09800000000000075, 0.30700000000000127, 0.588000000000001, 1.9350000000000005, 0.24274999999999913], zp_timestamp='2026-04-12T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:51:05.246 [DEBUG] [Thread-199675] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:51:05.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:51:05.340 [DEBUG] [Thread-199678] [transport.py] [_log()] starting thread (client mode): 0xae5f3370
2026-04-13T01:51:05.340 [DEBUG] [Thread-199678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:51:05.353 [DEBUG] [Thread-199678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:51:05.354 [INFO] [Thread-199678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] client lang: <none>
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] server lang: <none>
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] kex follows: False
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] Compression: none
2026-04-13T01:51:05.361 [DEBUG] [Thread-199678] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:51:05.420 [DEBUG] [Thread-199678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:51:05.421 [DEBUG] [Thread-199678] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:51:05.421 [DEBUG] [Thread-199678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:51:05.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:51:05.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:51:05.482 [DEBUG] [Thread-199678] [transport.py] [_log()] userauth is OK
2026-04-13T01:51:05.482 [DEBUG] [Thread-199678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:51:05.482 [DEBUG] [Thread-199678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:51:05.482 [DEBUG] [Thread-199678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:51:05.482 [DEBUG] [Thread-199678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:51:05.504 [INFO] [Thread-199678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:51:05.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:51:05.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:51:06.282 [DEBUG] [Thread-199678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:51:06.282 [DEBUG] [Thread-199678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:51:06.330 [DEBUG] [Thread-199678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:51:06.330 [DEBUG] [Thread-199678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:51:06.339 [DEBUG] [Thread-199678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:51:06.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:51:06.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:51: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
2026-04-13T01:51:06.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:51:06.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:51:06.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:51:06.376 [DEBUG] [Thread-199678] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:51:11.488 [DEBUG] [Thread-199680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:51:14.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:51:14.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:51:26.541 [DEBUG] [Thread-199681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:51:30.592 [DEBUG] [Thread-199682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:51:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:51:36.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:51: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
2026-04-13T01:51:37.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 51, 28), 2.45518, 84.8771, 0.0, 8.06472, 11.0052, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:51:37.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:51:28
2026-04-13T01:51:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:51:38.247 [DEBUG] [Thread-199683] [transport.py] [_log()] starting thread (client mode): 0xae52de10
2026-04-13T01:51:38.247 [DEBUG] [Thread-199683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:51:38.266 [DEBUG] [Thread-199683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:51:38.266 [INFO] [Thread-199683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] client lang: <none>
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] server lang: <none>
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] kex follows: False
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:51:38.270 [DEBUG] [Thread-199683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:51:38.271 [DEBUG] [Thread-199683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:51:38.271 [DEBUG] [Thread-199683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:51:38.271 [DEBUG] [Thread-199683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:51:38.271 [DEBUG] [Thread-199683] [transport.py] [_log()] Compression: none
2026-04-13T01:51:38.271 [DEBUG] [Thread-199683] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:51:38.290 [DEBUG] [Thread-199683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:51:38.290 [DEBUG] [Thread-199683] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:51:38.291 [DEBUG] [Thread-199683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:51:38.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:51:38.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:51:38.293 [DEBUG] [Thread-199683] [transport.py] [_log()] userauth is OK
2026-04-13T01:51:38.293 [DEBUG] [Thread-199683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:51:38.293 [DEBUG] [Thread-199683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:51:38.293 [DEBUG] [Thread-199683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:51:38.293 [DEBUG] [Thread-199683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:51:38.312 [INFO] [Thread-199683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:51:38.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:51:39.124 [DEBUG] [Thread-199683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:51:39.124 [DEBUG] [Thread-199683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:51:39.125 [DEBUG] [Thread-199683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:51:39.165 [DEBUG] [Thread-199683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:51:39.165 [DEBUG] [Thread-199683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:51:39.168 [DEBUG] [Thread-199683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:51:39.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:51:39.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:51:39.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:51:39.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:51:39.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:51:39.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:51:39.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:51:39.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:51:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:51:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.993849 -999.00  +10.80   3.95     89   +9.10 1 2 1 3 1     0    0 2.11 15.80 Z..s. 4.0 4.0 206.2 7.5 11.5 -21.6 11.4 -20.7 11.1 -18.7 11.3 -20.8
2026-04-13T01:51:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:51:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:51:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.993849
2026-04-13T01:51:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:51:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:51:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:51:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:51:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:51:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:51:28', tmtdew=2.45518, humidity=84.8771, cloud=0.0, wind=8.06472, temperature=11.0052, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:51:08.554', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:51:39.193 [DEBUG] [Thread-199683] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:51:39.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:51:39.286 [DEBUG] [Thread-199686] [transport.py] [_log()] starting thread (client mode): 0xae52f940
2026-04-13T01:51:39.287 [DEBUG] [Thread-199686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:51:39.301 [DEBUG] [Thread-199686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:51:39.301 [INFO] [Thread-199686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:51:39.309 [DEBUG] [Thread-199686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] client lang: <none>
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] server lang: <none>
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] kex follows: False
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] Compression: none
2026-04-13T01:51:39.310 [DEBUG] [Thread-199686] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:51:39.372 [DEBUG] [Thread-199686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:51:39.372 [DEBUG] [Thread-199686] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:51:39.373 [DEBUG] [Thread-199686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:51:39.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:51:39.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:51:39.433 [DEBUG] [Thread-199686] [transport.py] [_log()] userauth is OK
2026-04-13T01:51:39.433 [DEBUG] [Thread-199686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:51:39.433 [DEBUG] [Thread-199686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:51:39.433 [DEBUG] [Thread-199686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:51:39.433 [DEBUG] [Thread-199686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:51:39.451 [INFO] [Thread-199686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:51:39.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:51:39.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:51:40.279 [DEBUG] [Thread-199686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:51:40.279 [DEBUG] [Thread-199686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:51:40.327 [DEBUG] [Thread-199686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:51:40.327 [DEBUG] [Thread-199686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:51:40.337 [DEBUG] [Thread-199686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:51:40.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:51:40.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:51:40.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:51:40.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:51:40.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:51:40.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:51:40.374 [DEBUG] [Thread-199686] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:51:41.578 [DEBUG] [Thread-199688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:51:56.642 [DEBUG] [Thread-199689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:52:10.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:52:10.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:52:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:52:11.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 52, 3), 2.4727, 84.7776, 0.0, 8.39988, 11.0384, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:52:11.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:52:03
2026-04-13T01:52:11.678 [DEBUG] [Thread-199690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:52:12.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:52:12.187 [DEBUG] [Thread-199691] [transport.py] [_log()] starting thread (client mode): 0xae51a260
2026-04-13T01:52:12.187 [DEBUG] [Thread-199691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:52:12.208 [DEBUG] [Thread-199691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:52:12.208 [INFO] [Thread-199691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:52:12.209 [DEBUG] [Thread-199691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:52:12.209 [DEBUG] [Thread-199691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:52:12.209 [DEBUG] [Thread-199691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:52:12.209 [DEBUG] [Thread-199691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:12.209 [DEBUG] [Thread-199691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:12.209 [DEBUG] [Thread-199691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:12.209 [DEBUG] [Thread-199691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] client lang: <none>
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] server lang: <none>
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] kex follows: False
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] Compression: none
2026-04-13T01:52:12.210 [DEBUG] [Thread-199691] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:52:12.224 [DEBUG] [Thread-199691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:52:12.224 [DEBUG] [Thread-199691] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:52:12.225 [DEBUG] [Thread-199691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:52:12.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:52:12.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:52:12.227 [DEBUG] [Thread-199691] [transport.py] [_log()] userauth is OK
2026-04-13T01:52:12.227 [DEBUG] [Thread-199691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:52:12.227 [DEBUG] [Thread-199691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:52:12.227 [DEBUG] [Thread-199691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:52:12.227 [DEBUG] [Thread-199691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:52:12.250 [INFO] [Thread-199691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:52:12.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:52:13.052 [DEBUG] [Thread-199691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:52:13.052 [DEBUG] [Thread-199691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:52:13.053 [DEBUG] [Thread-199691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:52:13.093 [DEBUG] [Thread-199691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:52:13.093 [DEBUG] [Thread-199691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:52:13.097 [DEBUG] [Thread-199691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:52:13.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:52:13.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:52:13.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:52:13.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:52:13.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:52:13.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:52:13.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:52:13.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:52:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:52:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.994196 -999.00  +10.80   4.34     88   +9.10 1 2 1 3 1     0    0 2.10 15.74 zN... 4.3 4.3 204.2 7.0 11.5 -21.6 11.4 -20.6 11.1 -18.7 11.4 -20.6
2026-04-13T01:52:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:52:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:52:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.994196
2026-04-13T01:52:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:52:13.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:52:13.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:52:13.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:52:13.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:52:13.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:52:03', tmtdew=2.4727, humidity=84.7776, cloud=0.0, wind=8.39988, temperature=11.0384, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:51:38.534', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:52:13.124 [DEBUG] [Thread-199691] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:52:13.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:52:13.222 [DEBUG] [Thread-199694] [transport.py] [_log()] starting thread (client mode): 0xae50a650
2026-04-13T01:52:13.222 [DEBUG] [Thread-199694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:52:13.236 [DEBUG] [Thread-199694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:52:13.236 [INFO] [Thread-199694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:52:13.244 [DEBUG] [Thread-199694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:52:13.244 [DEBUG] [Thread-199694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:52:13.244 [DEBUG] [Thread-199694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] client lang: <none>
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] server lang: <none>
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] kex follows: False
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:52:13.245 [DEBUG] [Thread-199694] [transport.py] [_log()] Compression: none
2026-04-13T01:52:13.246 [DEBUG] [Thread-199694] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:52:13.300 [DEBUG] [Thread-199694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:52:13.301 [DEBUG] [Thread-199694] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:52:13.301 [DEBUG] [Thread-199694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:52:13.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:52:13.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:52:13.362 [DEBUG] [Thread-199694] [transport.py] [_log()] userauth is OK
2026-04-13T01:52:13.362 [DEBUG] [Thread-199694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:52:13.362 [DEBUG] [Thread-199694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:52:13.362 [DEBUG] [Thread-199694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:52:13.363 [DEBUG] [Thread-199694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:52:13.382 [INFO] [Thread-199694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:52:13.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:52:13.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:52:14.201 [DEBUG] [Thread-199694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:52:14.201 [DEBUG] [Thread-199694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:52:14.249 [DEBUG] [Thread-199694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:52:14.249 [DEBUG] [Thread-199694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:52:14.259 [DEBUG] [Thread-199694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:52:14.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:52:14.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:52:14.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:52:14.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:52:14.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:52:14.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:52:14.295 [DEBUG] [Thread-199694] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:52:15.062 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:52:15.063 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:52:26.716 [DEBUG] [Thread-199696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:52:30.668 [DEBUG] [Thread-199697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:52:41.777 [DEBUG] [Thread-199698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:52:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:52:44.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:52:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:52:45.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 52, 3), 2.4727, 84.7776, 0.0, 8.39988, 11.0384, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:52:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:52:03
2026-04-13T01:52:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:52:46.163 [DEBUG] [Thread-199699] [transport.py] [_log()] starting thread (client mode): 0xae5f06d0
2026-04-13T01:52:46.163 [DEBUG] [Thread-199699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:52:46.187 [DEBUG] [Thread-199699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:52:46.187 [INFO] [Thread-199699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] client lang: <none>
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] server lang: <none>
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] kex follows: False
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] Compression: none
2026-04-13T01:52:46.191 [DEBUG] [Thread-199699] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:52:46.208 [DEBUG] [Thread-199699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:52:46.209 [DEBUG] [Thread-199699] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:52:46.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:52:46.210 [DEBUG] [Thread-199699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:52:46.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:52:46.212 [DEBUG] [Thread-199699] [transport.py] [_log()] userauth is OK
2026-04-13T01:52:46.212 [DEBUG] [Thread-199699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:52:46.213 [DEBUG] [Thread-199699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:52:46.213 [DEBUG] [Thread-199699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:52:46.213 [DEBUG] [Thread-199699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:52:46.248 [INFO] [Thread-199699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:52:46.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:52:47.058 [DEBUG] [Thread-199699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:52:47.058 [DEBUG] [Thread-199699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:52:47.059 [DEBUG] [Thread-199699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:52:47.100 [DEBUG] [Thread-199699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:52:47.100 [DEBUG] [Thread-199699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:52:47.103 [DEBUG] [Thread-199699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:52:47.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:52:47.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:52:47.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:52:47.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:52:47.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:52:47.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:52:47.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:52:47.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:52:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:52:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.994543 -999.00  +10.90   5.93     88   +9.10 1 2 1 3 1     0    0 2.10 15.59 Z..S. 5.9 5.9 211.0 8.1 11.6 -21.8 11.3 -20.5 11.0 -18.6 11.3 -20.5
2026-04-13T01:52:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:52:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:52:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.994543
2026-04-13T01:52:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:52:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:52:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:52:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:52:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:52:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:52:03', tmtdew=2.4727, humidity=84.7776, cloud=0.0, wind=8.39988, temperature=11.0384, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:52:08.515', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:52:47.127 [DEBUG] [Thread-199699] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:52:47.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:52:47.222 [DEBUG] [Thread-199702] [transport.py] [_log()] starting thread (client mode): 0xae52ca90
2026-04-13T01:52:47.222 [DEBUG] [Thread-199702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:52:47.237 [DEBUG] [Thread-199702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:52:47.237 [INFO] [Thread-199702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] client lang: <none>
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] server lang: <none>
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] kex follows: False
2026-04-13T01:52:47.245 [DEBUG] [Thread-199702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:52:47.246 [DEBUG] [Thread-199702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:52:47.246 [DEBUG] [Thread-199702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:52:47.246 [DEBUG] [Thread-199702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:52:47.247 [DEBUG] [Thread-199702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:52:47.247 [DEBUG] [Thread-199702] [transport.py] [_log()] Compression: none
2026-04-13T01:52:47.247 [DEBUG] [Thread-199702] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:52:47.303 [DEBUG] [Thread-199702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:52:47.304 [DEBUG] [Thread-199702] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:52:47.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:52:47.305 [DEBUG] [Thread-199702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:52:47.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:52:47.366 [DEBUG] [Thread-199702] [transport.py] [_log()] userauth is OK
2026-04-13T01:52:47.367 [DEBUG] [Thread-199702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:52:47.367 [DEBUG] [Thread-199702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:52:47.367 [DEBUG] [Thread-199702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:52:47.367 [DEBUG] [Thread-199702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:52:47.392 [INFO] [Thread-199702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:52:47.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:52:47.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:52:48.207 [DEBUG] [Thread-199702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:52:48.207 [DEBUG] [Thread-199702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:52:48.255 [DEBUG] [Thread-199702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:52:48.255 [DEBUG] [Thread-199702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:52:48.263 [DEBUG] [Thread-199702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:52:48.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:52:48.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:52:48.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:52:48.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:52:48.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:52:48.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:52:48.299 [DEBUG] [Thread-199702] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:52:56.819 [DEBUG] [Thread-199704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:53:11.872 [DEBUG] [Thread-199705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:53:15.269 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:53:15.270 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:53:18.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:53:18.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:53:18.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:53:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 52, 39), 2.21876, 86.124, 0.0, 8.8236, 10.9437, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:53:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:52:39
2026-04-13T01:53:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:53:20.117 [DEBUG] [Thread-199706] [transport.py] [_log()] starting thread (client mode): 0xb0fcce50
2026-04-13T01:53:20.117 [DEBUG] [Thread-199706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:53:20.136 [DEBUG] [Thread-199706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:53:20.136 [INFO] [Thread-199706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] client lang: <none>
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] server lang: <none>
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] kex follows: False
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] Compression: none
2026-04-13T01:53:20.140 [DEBUG] [Thread-199706] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:53:20.157 [DEBUG] [Thread-199706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:53:20.157 [DEBUG] [Thread-199706] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:53:20.158 [DEBUG] [Thread-199706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:53:20.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:53:20.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:53:20.160 [DEBUG] [Thread-199706] [transport.py] [_log()] userauth is OK
2026-04-13T01:53:20.160 [DEBUG] [Thread-199706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:53:20.160 [DEBUG] [Thread-199706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:53:20.160 [DEBUG] [Thread-199706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:53:20.160 [DEBUG] [Thread-199706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:53:20.185 [INFO] [Thread-199706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:53:20.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:53:21.009 [DEBUG] [Thread-199706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:53:21.009 [DEBUG] [Thread-199706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:53:21.009 [DEBUG] [Thread-199706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:53:21.050 [DEBUG] [Thread-199706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:53:21.050 [DEBUG] [Thread-199706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:53:21.053 [DEBUG] [Thread-199706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:53:21.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:53:21.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:53:21.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:53:21.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:53:21.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:53:21.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:53:21.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:53:21.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:53:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:53:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.994890 -999.00  +10.90   6.09     88   +9.10 1 2 1 3 1     0    0 2.13 16.37 Z..S. 6.1 6.1 210.2 7.1 11.5 -21.5 11.4 -20.5 11.1 -18.7 11.3 -20.7
2026-04-13T01:53:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:53:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:53:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.994890
2026-04-13T01:53:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:53:21.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:53:21.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:53:21.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:53:21.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:53:21.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:52:39', tmtdew=2.21876, humidity=86.124, cloud=0.0, wind=8.8236, temperature=10.9437, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:52:38.496', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:53:21.077 [DEBUG] [Thread-199706] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:53:21.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:53:21.171 [DEBUG] [Thread-199709] [transport.py] [_log()] starting thread (client mode): 0xae508370
2026-04-13T01:53:21.171 [DEBUG] [Thread-199709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:53:21.186 [DEBUG] [Thread-199709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:53:21.186 [INFO] [Thread-199709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:53:21.194 [DEBUG] [Thread-199709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:53:21.194 [DEBUG] [Thread-199709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:53:21.194 [DEBUG] [Thread-199709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:53:21.194 [DEBUG] [Thread-199709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:21.194 [DEBUG] [Thread-199709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:21.194 [DEBUG] [Thread-199709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:21.194 [DEBUG] [Thread-199709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] client lang: <none>
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] server lang: <none>
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] kex follows: False
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:53:21.195 [DEBUG] [Thread-199709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:53:21.196 [DEBUG] [Thread-199709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:53:21.196 [DEBUG] [Thread-199709] [transport.py] [_log()] Compression: none
2026-04-13T01:53:21.196 [DEBUG] [Thread-199709] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:53:21.255 [DEBUG] [Thread-199709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:53:21.255 [DEBUG] [Thread-199709] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:53:21.256 [DEBUG] [Thread-199709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:53:21.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:53:21.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:53:21.314 [DEBUG] [Thread-199709] [transport.py] [_log()] userauth is OK
2026-04-13T01:53:21.315 [DEBUG] [Thread-199709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:53:21.315 [DEBUG] [Thread-199709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:53:21.315 [DEBUG] [Thread-199709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:53:21.315 [DEBUG] [Thread-199709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:53:21.334 [INFO] [Thread-199709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:53:21.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:53:21.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:53:22.137 [DEBUG] [Thread-199709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:53:22.137 [DEBUG] [Thread-199709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:53:22.185 [DEBUG] [Thread-199709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:53:22.185 [DEBUG] [Thread-199709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:53:22.194 [DEBUG] [Thread-199709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:53:22.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:53:22.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:53:22.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:53:22.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:53:22.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:53:22.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:53:22.231 [DEBUG] [Thread-199709] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:53:26.912 [DEBUG] [Thread-199711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:53:30.736 [DEBUG] [Thread-199712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:53:41.964 [DEBUG] [Thread-199713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:53:52.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:53:52.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:53:52.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:53:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 53, 15), 2.58506, 83.9127, 0.0, 8.15292, 11.0718, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:53:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:53:15
2026-04-13T01:53:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:53:54.154 [DEBUG] [Thread-199714] [transport.py] [_log()] starting thread (client mode): 0xb0fcd450
2026-04-13T01:53:54.155 [DEBUG] [Thread-199714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:53:54.174 [DEBUG] [Thread-199714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:53:54.174 [INFO] [Thread-199714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:53:54.178 [DEBUG] [Thread-199714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:53:54.178 [DEBUG] [Thread-199714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:53:54.178 [DEBUG] [Thread-199714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:53:54.178 [DEBUG] [Thread-199714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] client lang: <none>
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] server lang: <none>
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] kex follows: False
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:53:54.179 [DEBUG] [Thread-199714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:53:54.180 [DEBUG] [Thread-199714] [transport.py] [_log()] Compression: none
2026-04-13T01:53:54.180 [DEBUG] [Thread-199714] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:53:54.192 [DEBUG] [Thread-199714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:53:54.193 [DEBUG] [Thread-199714] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:53:54.193 [DEBUG] [Thread-199714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:53:54.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:53:54.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:53:54.196 [DEBUG] [Thread-199714] [transport.py] [_log()] userauth is OK
2026-04-13T01:53:54.196 [DEBUG] [Thread-199714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:53:54.196 [DEBUG] [Thread-199714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:53:54.196 [DEBUG] [Thread-199714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:53:54.196 [DEBUG] [Thread-199714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:53:54.215 [INFO] [Thread-199714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:53:54.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:53:54.990 [DEBUG] [Thread-199714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:53:54.990 [DEBUG] [Thread-199714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:53:54.991 [DEBUG] [Thread-199714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:53:55.031 [DEBUG] [Thread-199714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:53:55.031 [DEBUG] [Thread-199714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:53:55.034 [DEBUG] [Thread-199714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:53:55.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:53:55.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:53:55.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:53:55.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:53:55.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:53:55.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:53:55.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:53:55.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:53:55.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:53:55.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.995237 -999.00  +10.90   4.30     88   +9.10 1 2 1 3 1     0    0 2.18 17.16 ZN.s. 4.3 4.3 212.0 5.7 11.5 -21.6 11.4 -20.6 11.1 -18.8 11.4 -20.5
2026-04-13T01:53:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:53:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:53:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.995237
2026-04-13T01:53:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:53:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:53:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:53:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:53:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:53:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:53:15', tmtdew=2.58506, humidity=83.9127, cloud=0.0, wind=8.15292, temperature=11.0718, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:53:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:53:55.060 [DEBUG] [Thread-199714] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:53:55.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:53:55.155 [DEBUG] [Thread-199717] [transport.py] [_log()] starting thread (client mode): 0xb0fce6e0
2026-04-13T01:53:55.156 [DEBUG] [Thread-199717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:53:55.170 [DEBUG] [Thread-199717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:53:55.171 [INFO] [Thread-199717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:53:55.178 [DEBUG] [Thread-199717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] client lang: <none>
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] server lang: <none>
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] kex follows: False
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] Compression: none
2026-04-13T01:53:55.179 [DEBUG] [Thread-199717] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:53:55.239 [DEBUG] [Thread-199717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:53:55.239 [DEBUG] [Thread-199717] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:53:55.240 [DEBUG] [Thread-199717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:53:55.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:53:55.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:53:55.294 [DEBUG] [Thread-199717] [transport.py] [_log()] userauth is OK
2026-04-13T01:53:55.295 [DEBUG] [Thread-199717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:53:55.295 [DEBUG] [Thread-199717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:53:55.295 [DEBUG] [Thread-199717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:53:55.295 [DEBUG] [Thread-199717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:53:55.314 [INFO] [Thread-199717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:53:55.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:53:55.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:53:56.188 [DEBUG] [Thread-199717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:53:56.188 [DEBUG] [Thread-199717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:53:56.236 [DEBUG] [Thread-199717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:53:56.236 [DEBUG] [Thread-199717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:53:56.246 [DEBUG] [Thread-199717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:53:56.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:53:56.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:53:56.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:53:56.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:53:56.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:53:56.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:53:56.283 [DEBUG] [Thread-199717] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:53:57.003 [DEBUG] [Thread-199719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:54:12.053 [DEBUG] [Thread-199720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:54:15.472 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:54:15.473 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:54:26.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:54:26.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:54:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:54:27.092 [DEBUG] [Thread-199721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:54:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 53, 50), 2.29297, 85.6927, 0.0, 8.6472, 10.9437, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:54:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:53:50
2026-04-13T01:54:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:54:28.169 [DEBUG] [Thread-199722] [transport.py] [_log()] starting thread (client mode): 0xae50bd90
2026-04-13T01:54:28.169 [DEBUG] [Thread-199722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:54:28.183 [DEBUG] [Thread-199722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:54:28.183 [INFO] [Thread-199722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] client lang: <none>
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] server lang: <none>
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] kex follows: False
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] Compression: none
2026-04-13T01:54:28.187 [DEBUG] [Thread-199722] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:54:28.205 [DEBUG] [Thread-199722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:54:28.205 [DEBUG] [Thread-199722] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:54:28.206 [DEBUG] [Thread-199722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:54:28.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:54:28.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:54:28.207 [DEBUG] [Thread-199722] [transport.py] [_log()] userauth is OK
2026-04-13T01:54:28.208 [DEBUG] [Thread-199722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:54:28.208 [DEBUG] [Thread-199722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:54:28.208 [DEBUG] [Thread-199722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:54:28.208 [DEBUG] [Thread-199722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:54:28.225 [INFO] [Thread-199722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:54:28.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:54:29.019 [DEBUG] [Thread-199722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:54:29.019 [DEBUG] [Thread-199722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:54:29.020 [DEBUG] [Thread-199722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:54:29.060 [DEBUG] [Thread-199722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:54:29.060 [DEBUG] [Thread-199722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:54:29.063 [DEBUG] [Thread-199722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:54:29.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:54:29.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:54:29.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:54:29.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:54:29.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:54:29.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:54:29.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:54:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:54:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:54:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.995585 -999.00  +10.90   4.58     87   +8.90 1 2 1 2 1     0    0 2.16 18.11 ZN.s. 4.6 4.6 230.4 7.4 11.6 -21.5 11.4 -20.6 11.1 -18.7 11.4 -20.5
2026-04-13T01:54:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:54:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:54:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.995585
2026-04-13T01:54:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:54:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:54:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:54:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:54:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:54:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:53:50', tmtdew=2.29297, humidity=85.6927, cloud=0.0, wind=8.6472, temperature=10.9437, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:53:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:54:29.091 [DEBUG] [Thread-199722] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:54:29.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:54:29.183 [DEBUG] [Thread-199725] [transport.py] [_log()] starting thread (client mode): 0xae50b580
2026-04-13T01:54:29.183 [DEBUG] [Thread-199725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:54:29.198 [DEBUG] [Thread-199725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:54:29.198 [INFO] [Thread-199725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] client lang: <none>
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] server lang: <none>
2026-04-13T01:54:29.206 [DEBUG] [Thread-199725] [transport.py] [_log()] kex follows: False
2026-04-13T01:54:29.207 [DEBUG] [Thread-199725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:54:29.207 [DEBUG] [Thread-199725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:54:29.207 [DEBUG] [Thread-199725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:54:29.207 [DEBUG] [Thread-199725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:54:29.207 [DEBUG] [Thread-199725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:54:29.207 [DEBUG] [Thread-199725] [transport.py] [_log()] Compression: none
2026-04-13T01:54:29.207 [DEBUG] [Thread-199725] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:54:29.266 [DEBUG] [Thread-199725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:54:29.267 [DEBUG] [Thread-199725] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:54:29.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:54:29.268 [DEBUG] [Thread-199725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:54:29.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:54:29.323 [DEBUG] [Thread-199725] [transport.py] [_log()] userauth is OK
2026-04-13T01:54:29.323 [DEBUG] [Thread-199725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:54:29.324 [DEBUG] [Thread-199725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:54:29.324 [DEBUG] [Thread-199725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:54:29.324 [DEBUG] [Thread-199725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:54:29.343 [INFO] [Thread-199725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:54:29.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:54:29.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:54:30.182 [DEBUG] [Thread-199725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:54:30.182 [DEBUG] [Thread-199725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:54:30.230 [DEBUG] [Thread-199725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:54:30.230 [DEBUG] [Thread-199725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:54:30.239 [DEBUG] [Thread-199725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:54:30.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:54:30.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:54:30.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:54:30.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:54:30.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:54:30.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:54:30.276 [DEBUG] [Thread-199725] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:54:30.807 [DEBUG] [Thread-199727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:54:42.131 [DEBUG] [Thread-199728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:54:57.194 [DEBUG] [Thread-199729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:55:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:55:00.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:55:00.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:55:01.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 54, 26), 2.7108, 83.2634, 0.0, 8.25876, 11.0718, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:55:01.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:54:26
2026-04-13T01:55:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:55:02.099 [DEBUG] [Thread-199730] [transport.py] [_log()] starting thread (client mode): 0xae51bf10
2026-04-13T01:55:02.099 [DEBUG] [Thread-199730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:55:02.116 [DEBUG] [Thread-199730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:55:02.116 [INFO] [Thread-199730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:55:02.119 [DEBUG] [Thread-199730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] client lang: <none>
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] server lang: <none>
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] kex follows: False
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] Compression: none
2026-04-13T01:55:02.120 [DEBUG] [Thread-199730] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:55:02.134 [DEBUG] [Thread-199730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:55:02.135 [DEBUG] [Thread-199730] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:55:02.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:55:02.137 [DEBUG] [Thread-199730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:55:02.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:55:02.139 [DEBUG] [Thread-199730] [transport.py] [_log()] userauth is OK
2026-04-13T01:55:02.139 [DEBUG] [Thread-199730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:55:02.139 [DEBUG] [Thread-199730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:55:02.139 [DEBUG] [Thread-199730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:55:02.139 [DEBUG] [Thread-199730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:55:02.165 [INFO] [Thread-199730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:55:02.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:55:02.977 [DEBUG] [Thread-199730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:55:02.977 [DEBUG] [Thread-199730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:55:02.978 [DEBUG] [Thread-199730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:55:03.018 [DEBUG] [Thread-199730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:55:03.018 [DEBUG] [Thread-199730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:55:03.021 [DEBUG] [Thread-199730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:55:03.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:55:03.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:55:03.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:55:03.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:55:03.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:55:03.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:55:03.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:55:03.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:55:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:55:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.996279 -999.00  +10.90   4.80     87   +8.90 1 2 1 2 1     0    0 2.34 22.06 ZN.S. 4.8 4.8 216.2 6.8 11.6 -21.6 11.4 -20.5 11.1 -18.7 11.4 -20.7
2026-04-13T01:55:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:55:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:55:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.996279
2026-04-13T01:55:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:55:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:55:03.067 [DEBUG] [Thread-199730] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:55:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:55:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:55:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:55:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:54:26', tmtdew=2.7108, humidity=83.2634, cloud=0.0, wind=8.25876, temperature=11.0718, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:54:38.506', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:55:03.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:55:03.162 [DEBUG] [Thread-199733] [transport.py] [_log()] starting thread (client mode): 0xb0f55600
2026-04-13T01:55:03.162 [DEBUG] [Thread-199733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:55:03.176 [DEBUG] [Thread-199733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:55:03.176 [INFO] [Thread-199733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] client lang: <none>
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] server lang: <none>
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] kex follows: False
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:55:03.184 [DEBUG] [Thread-199733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:55:03.185 [DEBUG] [Thread-199733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:55:03.185 [DEBUG] [Thread-199733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:55:03.185 [DEBUG] [Thread-199733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:55:03.185 [DEBUG] [Thread-199733] [transport.py] [_log()] Compression: none
2026-04-13T01:55:03.185 [DEBUG] [Thread-199733] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:55:03.244 [DEBUG] [Thread-199733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:55:03.244 [DEBUG] [Thread-199733] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:55:03.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:55:03.245 [DEBUG] [Thread-199733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:55:03.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:55:03.302 [DEBUG] [Thread-199733] [transport.py] [_log()] userauth is OK
2026-04-13T01:55:03.302 [DEBUG] [Thread-199733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:55:03.303 [DEBUG] [Thread-199733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:55:03.303 [DEBUG] [Thread-199733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:55:03.303 [DEBUG] [Thread-199733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:55:03.322 [INFO] [Thread-199733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:55:03.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:55:03.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:55:04.119 [DEBUG] [Thread-199733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:55:04.119 [DEBUG] [Thread-199733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:55:04.167 [DEBUG] [Thread-199733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:55:04.167 [DEBUG] [Thread-199733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:55:04.176 [DEBUG] [Thread-199733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:55:04.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:55:04.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:55:04.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:55:04.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:55:04.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:55:04.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:55:04.213 [DEBUG] [Thread-199733] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:55:12.232 [DEBUG] [Thread-199735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:55:15.676 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:55:15.678 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:55:27.295 [DEBUG] [Thread-199736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:55:30.883 [DEBUG] [Thread-199737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:55:34.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:55:34.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:55:34.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:55:35.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 55, 1), 2.70565, 83.2966, 0.0, 8.541, 11.105, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:55:35.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:55:01
2026-04-13T01:55:35.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:55:36.036 [DEBUG] [Thread-199738] [transport.py] [_log()] starting thread (client mode): 0xb0f54af0
2026-04-13T01:55:36.036 [DEBUG] [Thread-199738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:55:36.058 [DEBUG] [Thread-199738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:55:36.058 [INFO] [Thread-199738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] client lang: <none>
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] server lang: <none>
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] kex follows: False
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] Compression: none
2026-04-13T01:55:36.062 [DEBUG] [Thread-199738] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:55:36.079 [DEBUG] [Thread-199738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:55:36.079 [DEBUG] [Thread-199738] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:55:36.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:55:36.081 [DEBUG] [Thread-199738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:55:36.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:55:36.083 [DEBUG] [Thread-199738] [transport.py] [_log()] userauth is OK
2026-04-13T01:55:36.083 [DEBUG] [Thread-199738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:55:36.083 [DEBUG] [Thread-199738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:55:36.083 [DEBUG] [Thread-199738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:55:36.083 [DEBUG] [Thread-199738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:55:36.108 [INFO] [Thread-199738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:55:36.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:55:36.923 [DEBUG] [Thread-199738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:55:36.924 [DEBUG] [Thread-199738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:55:36.924 [DEBUG] [Thread-199738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:55:36.964 [DEBUG] [Thread-199738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:55:36.964 [DEBUG] [Thread-199738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:55:36.968 [DEBUG] [Thread-199738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:55:36.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:55:36.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:55:36.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:55:36.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:55:36.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:55:36.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:55:36.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:55:36.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:55:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:55:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.996626 -999.00  +10.90   6.04     88   +9.00 1 2 1 3 1     0    0 2.46 25.16 ZN.S. 6.0 6.0 213.6 7.1 11.6 -21.6 11.4 -20.5 11.1 -18.7 11.4 -20.5
2026-04-13T01:55:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:55:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:55:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.996626
2026-04-13T01:55:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:55:36.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:55:36.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:55:36.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:55:36.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:55:36.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:55:01', tmtdew=2.70565, humidity=83.2966, cloud=0.0, wind=8.541, temperature=11.105, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:55:08.486', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:55:36.995 [DEBUG] [Thread-199738] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:55:37.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:55:37.089 [DEBUG] [Thread-199741] [transport.py] [_log()] starting thread (client mode): 0xae50b580
2026-04-13T01:55:37.089 [DEBUG] [Thread-199741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:55:37.103 [DEBUG] [Thread-199741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:55:37.103 [INFO] [Thread-199741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:55:37.111 [DEBUG] [Thread-199741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] client lang: <none>
2026-04-13T01:55:37.112 [DEBUG] [Thread-199741] [transport.py] [_log()] server lang: <none>
2026-04-13T01:55:37.113 [DEBUG] [Thread-199741] [transport.py] [_log()] kex follows: False
2026-04-13T01:55:37.113 [DEBUG] [Thread-199741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:55:37.113 [DEBUG] [Thread-199741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:55:37.113 [DEBUG] [Thread-199741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:55:37.113 [DEBUG] [Thread-199741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:55:37.113 [DEBUG] [Thread-199741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:55:37.113 [DEBUG] [Thread-199741] [transport.py] [_log()] Compression: none
2026-04-13T01:55:37.114 [DEBUG] [Thread-199741] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:55:37.171 [DEBUG] [Thread-199741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:55:37.172 [DEBUG] [Thread-199741] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:55:37.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:55:37.173 [DEBUG] [Thread-199741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:55:37.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:55:37.227 [DEBUG] [Thread-199741] [transport.py] [_log()] userauth is OK
2026-04-13T01:55:37.227 [DEBUG] [Thread-199741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:55:37.228 [DEBUG] [Thread-199741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:55:37.228 [DEBUG] [Thread-199741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:55:37.228 [DEBUG] [Thread-199741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:55:37.252 [INFO] [Thread-199741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:55:37.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:55:37.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:55:38.064 [DEBUG] [Thread-199741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:55:38.064 [DEBUG] [Thread-199741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:55:38.112 [DEBUG] [Thread-199741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:55:38.112 [DEBUG] [Thread-199741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:55:38.123 [DEBUG] [Thread-199741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:55:38.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:55:38.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:55:38.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:55:38.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:55:38.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:55:38.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:55:38.167 [DEBUG] [Thread-199741] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:55:42.331 [DEBUG] [Thread-199743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:55:57.393 [DEBUG] [Thread-199744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:56:08.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:56:08.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:56:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:56:09.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 55, 37), 2.35719, 85.3278, 0.0, 9.67032, 11.0101, 1, 1, 0, 2, 0, 0),)
2026-04-13T01:56:09.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:55:37
2026-04-13T01:56:09.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:56:09.956 [DEBUG] [Thread-199745] [transport.py] [_log()] starting thread (client mode): 0xae50ba30
2026-04-13T01:56:09.957 [DEBUG] [Thread-199745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:56:09.976 [DEBUG] [Thread-199745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:56:09.976 [INFO] [Thread-199745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] client lang: <none>
2026-04-13T01:56:09.979 [DEBUG] [Thread-199745] [transport.py] [_log()] server lang: <none>
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] kex follows: False
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] Compression: none
2026-04-13T01:56:09.980 [DEBUG] [Thread-199745] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:56:09.997 [DEBUG] [Thread-199745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:56:09.998 [DEBUG] [Thread-199745] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:56:09.999 [DEBUG] [Thread-199745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:56:09.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:56:09.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:56:10.001 [DEBUG] [Thread-199745] [transport.py] [_log()] userauth is OK
2026-04-13T01:56:10.001 [DEBUG] [Thread-199745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:56:10.001 [DEBUG] [Thread-199745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:56:10.001 [DEBUG] [Thread-199745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:56:10.001 [DEBUG] [Thread-199745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:56:10.026 [INFO] [Thread-199745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:56:10.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:56:10.674 [DEBUG] [Thread-199745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:56:10.674 [DEBUG] [Thread-199745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:56:10.674 [DEBUG] [Thread-199745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:56:10.715 [DEBUG] [Thread-199745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:56:10.715 [DEBUG] [Thread-199745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:56:10.719 [DEBUG] [Thread-199745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:56:10.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:56:10.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:56:10.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:56:10.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:56:10.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:56:10.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:56:10.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:56:10.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:56:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:56:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.996973 -999.00  +10.90   4.66     87   +9.00 1 2 1 2 1     0    0 2.39 23.60 ZN.S. 4.7 4.7 226.4 6.7 11.5 -21.6 11.3 -20.5 11.1 -18.7 11.4 -20.7
2026-04-13T01:56:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:56:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:56:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.996973
2026-04-13T01:56:10.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:56:10.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:56:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:56:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:56:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:56:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:55:37', tmtdew=2.35719, humidity=85.3278, cloud=0.0, wind=9.67032, temperature=11.0101, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:55:38.467', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:56:10.746 [DEBUG] [Thread-199745] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:56:10.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:56:10.840 [DEBUG] [Thread-199748] [transport.py] [_log()] starting thread (client mode): 0xae50a260
2026-04-13T01:56:10.841 [DEBUG] [Thread-199748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:56:10.855 [DEBUG] [Thread-199748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:56:10.855 [INFO] [Thread-199748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] client lang: <none>
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] server lang: <none>
2026-04-13T01:56:10.864 [DEBUG] [Thread-199748] [transport.py] [_log()] kex follows: False
2026-04-13T01:56:10.865 [DEBUG] [Thread-199748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:56:10.865 [DEBUG] [Thread-199748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:56:10.865 [DEBUG] [Thread-199748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:56:10.865 [DEBUG] [Thread-199748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:56:10.865 [DEBUG] [Thread-199748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:56:10.865 [DEBUG] [Thread-199748] [transport.py] [_log()] Compression: none
2026-04-13T01:56:10.865 [DEBUG] [Thread-199748] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:56:10.920 [DEBUG] [Thread-199748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:56:10.920 [DEBUG] [Thread-199748] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:56:10.921 [DEBUG] [Thread-199748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:56:10.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:56:10.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:56:10.978 [DEBUG] [Thread-199748] [transport.py] [_log()] userauth is OK
2026-04-13T01:56:10.978 [DEBUG] [Thread-199748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:56:10.978 [DEBUG] [Thread-199748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:56:10.978 [DEBUG] [Thread-199748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:56:10.978 [DEBUG] [Thread-199748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:56:10.999 [INFO] [Thread-199748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:56:11.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:56:11.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:56:11.827 [DEBUG] [Thread-199748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:56:11.827 [DEBUG] [Thread-199748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:56:11.875 [DEBUG] [Thread-199748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:56:11.875 [DEBUG] [Thread-199748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:56:11.886 [DEBUG] [Thread-199748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:56:11.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:56:11.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:56:11.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:56:11.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:56:11.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:56:11.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:56:11.926 [DEBUG] [Thread-199748] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:56:12.432 [DEBUG] [Thread-199750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:56:15.884 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:56:15.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:56:27.481 [DEBUG] [Thread-199751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:56:30.939 [DEBUG] [Thread-199752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:56:41.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:56:41.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:56:41.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:56:42.516 [DEBUG] [Thread-199753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:56:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 56, 13), 2.87833, 82.3654, 0.0, 8.96436, 11.0389, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:56:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:56:13
2026-04-13T01:56:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:56:43.731 [DEBUG] [Thread-199754] [transport.py] [_log()] starting thread (client mode): 0xb0f56290
2026-04-13T01:56:43.731 [DEBUG] [Thread-199754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:56:43.743 [DEBUG] [Thread-199754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:56:43.744 [INFO] [Thread-199754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] client lang: <none>
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] server lang: <none>
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] kex follows: False
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:56:43.747 [DEBUG] [Thread-199754] [transport.py] [_log()] Compression: none
2026-04-13T01:56:43.748 [DEBUG] [Thread-199754] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:56:43.767 [DEBUG] [Thread-199754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:56:43.767 [DEBUG] [Thread-199754] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:56:43.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:56:43.768 [DEBUG] [Thread-199754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:56:43.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:56:43.770 [DEBUG] [Thread-199754] [transport.py] [_log()] userauth is OK
2026-04-13T01:56:43.771 [DEBUG] [Thread-199754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:56:43.771 [DEBUG] [Thread-199754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:56:43.771 [DEBUG] [Thread-199754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:56:43.771 [DEBUG] [Thread-199754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:56:43.789 [INFO] [Thread-199754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:56:43.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:56:44.416 [DEBUG] [Thread-199754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:56:44.416 [DEBUG] [Thread-199754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:56:44.417 [DEBUG] [Thread-199754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:56:44.457 [DEBUG] [Thread-199754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:56:44.457 [DEBUG] [Thread-199754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:56:44.461 [DEBUG] [Thread-199754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:56:44.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:56:44.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:56:44.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:56:44.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:56:44.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:56:44.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:56:44.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:56:44.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:56:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:56:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.997321 -999.00  +10.90   4.14     87   +8.90 1 2 1 2 1     0    0 2.46 25.43 ZN.S. 4.1 4.1 228.1 6.5 11.5 -21.7 11.4 -20.8 11.1 -18.6 11.3 -20.6
2026-04-13T01:56:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:56:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:56:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.997321
2026-04-13T01:56:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:56:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:56:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:56:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:56:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:56:44.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:56:13', tmtdew=2.87833, humidity=82.3654, cloud=0.0, wind=8.96436, temperature=11.0389, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:56:08.534', atlas_cloud=2, atlas_rain=1, zp_data=[1.7387499999999996, nan, 0.9147500000000006, nan, nan, nan, nan, nan, nan, 2.8900000000000006, 1.10025, 2.808, nan, nan, nan, nan, nan, 1.9005, 0.5119999999999987, 2.026249999999999, nan, nan, 1.619250000000001, nan, nan, 0.14500000000000135, 0.11175000000000068, 0.07450000000000045, 0.11899999999999977, 0.30400000000000116, 0.6710000000000012, 2.2430000000000003, 0.18674999999999997], zp_timestamp='2026-04-12T23:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:56:44.489 [DEBUG] [Thread-199754] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:56:44.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:56:44.596 [DEBUG] [Thread-199757] [transport.py] [_log()] starting thread (client mode): 0xae5f0c40
2026-04-13T01:56:44.596 [DEBUG] [Thread-199757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:56:44.610 [DEBUG] [Thread-199757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:56:44.610 [INFO] [Thread-199757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:56:44.618 [DEBUG] [Thread-199757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:56:44.618 [DEBUG] [Thread-199757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:56:44.618 [DEBUG] [Thread-199757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:56:44.618 [DEBUG] [Thread-199757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] client lang: <none>
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] server lang: <none>
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] kex follows: False
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:56:44.619 [DEBUG] [Thread-199757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:56:44.620 [DEBUG] [Thread-199757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:56:44.620 [DEBUG] [Thread-199757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:56:44.620 [DEBUG] [Thread-199757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:56:44.620 [DEBUG] [Thread-199757] [transport.py] [_log()] Compression: none
2026-04-13T01:56:44.620 [DEBUG] [Thread-199757] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:56:44.676 [DEBUG] [Thread-199757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:56:44.677 [DEBUG] [Thread-199757] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:56:44.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:56:44.679 [DEBUG] [Thread-199757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:56:44.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:56:44.736 [DEBUG] [Thread-199757] [transport.py] [_log()] userauth is OK
2026-04-13T01:56:44.736 [DEBUG] [Thread-199757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:56:44.737 [DEBUG] [Thread-199757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:56:44.737 [DEBUG] [Thread-199757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:56:44.737 [DEBUG] [Thread-199757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:56:44.756 [INFO] [Thread-199757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:56:44.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:56:44.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:56:45.575 [DEBUG] [Thread-199757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:56:45.576 [DEBUG] [Thread-199757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:56:45.624 [DEBUG] [Thread-199757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:56:45.624 [DEBUG] [Thread-199757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:56:45.634 [DEBUG] [Thread-199757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:56:45.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:56:45.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:56:45.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:56:45.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:56:45.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:56:45.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:56:45.670 [DEBUG] [Thread-199757] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:56:57.558 [DEBUG] [Thread-199759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:57:12.610 [DEBUG] [Thread-199760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:57:15.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:57:15.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:57:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:57:16.099 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:57:16.100 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:57:16.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 56, 48), 2.59457, 83.967, 0.0, 10.5876, 11.0096, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:57:16.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:56:48
2026-04-13T01:57:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:57:17.568 [DEBUG] [Thread-199761] [transport.py] [_log()] starting thread (client mode): 0xb0feb790
2026-04-13T01:57:17.568 [DEBUG] [Thread-199761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:57:17.588 [DEBUG] [Thread-199761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:57:17.589 [INFO] [Thread-199761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:57:17.591 [DEBUG] [Thread-199761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] client lang: <none>
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] server lang: <none>
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] kex follows: False
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] Compression: none
2026-04-13T01:57:17.592 [DEBUG] [Thread-199761] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:57:17.609 [DEBUG] [Thread-199761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:57:17.610 [DEBUG] [Thread-199761] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:57:17.610 [DEBUG] [Thread-199761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:57:17.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:57:17.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:57:17.613 [DEBUG] [Thread-199761] [transport.py] [_log()] userauth is OK
2026-04-13T01:57:17.613 [DEBUG] [Thread-199761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:57:17.613 [DEBUG] [Thread-199761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:57:17.613 [DEBUG] [Thread-199761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:57:17.614 [DEBUG] [Thread-199761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:57:17.637 [INFO] [Thread-199761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:57:17.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:57:18.300 [DEBUG] [Thread-199761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:57:18.300 [DEBUG] [Thread-199761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:57:18.301 [DEBUG] [Thread-199761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:57:18.341 [DEBUG] [Thread-199761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:57:18.341 [DEBUG] [Thread-199761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:57:18.345 [DEBUG] [Thread-199761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:57:18.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:57:18.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:57:18.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:57:18.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:57:18.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:57:18.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:57:18.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:57:18.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:57:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:57:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.997668 -999.00  +10.90   4.62     88   +9.00 1 2 1 3 1     0    0 2.47 26.73 ZN.S. 4.6 4.6 212.4 7.1 11.6 -21.7 11.4 -20.5 11.1 -18.6 11.4 -20.5
2026-04-13T01:57:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:57:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:57:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.997668
2026-04-13T01:57:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:57:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:57:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:57:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:57:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:57:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:56:48', tmtdew=2.59457, humidity=83.967, cloud=0.0, wind=10.5876, temperature=11.0096, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:56:38.515', atlas_cloud=2, atlas_rain=1, zp_data=[3.2807499999999994, nan, 0.8327500000000008, nan, nan, nan, 0.1919999999999984, nan, nan, 2.817, 0.9602499999999994, 2.5229999999999997, nan, nan, 0.04699999999999882, nan, nan, 1.7010000000000005, 0.6239999999999997, 1.6007499999999988, nan, 2.7347499999999982, 1.0142500000000005, nan, 2.179999999999999, 0.19149999999999956, 0.11074999999999946, 0.0625, 0.14400000000000013, 0.3200000000000012, 0.6225000000000014, 1.8870000000000005, 0.32374999999999954], zp_timestamp='2026-04-12T23:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:57:18.372 [DEBUG] [Thread-199761] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:57:18.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:57:18.466 [DEBUG] [Thread-199764] [transport.py] [_log()] starting thread (client mode): 0xb0f55b10
2026-04-13T01:57:18.466 [DEBUG] [Thread-199764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:57:18.481 [DEBUG] [Thread-199764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:57:18.481 [INFO] [Thread-199764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] client lang: <none>
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] server lang: <none>
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] kex follows: False
2026-04-13T01:57:18.489 [DEBUG] [Thread-199764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:57:18.490 [DEBUG] [Thread-199764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:57:18.490 [DEBUG] [Thread-199764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:57:18.490 [DEBUG] [Thread-199764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:57:18.490 [DEBUG] [Thread-199764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:57:18.490 [DEBUG] [Thread-199764] [transport.py] [_log()] Compression: none
2026-04-13T01:57:18.490 [DEBUG] [Thread-199764] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:57:18.548 [DEBUG] [Thread-199764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:57:18.548 [DEBUG] [Thread-199764] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:57:18.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:57:18.549 [DEBUG] [Thread-199764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:57:18.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:57:18.604 [DEBUG] [Thread-199764] [transport.py] [_log()] userauth is OK
2026-04-13T01:57:18.604 [DEBUG] [Thread-199764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:57:18.604 [DEBUG] [Thread-199764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:57:18.604 [DEBUG] [Thread-199764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:57:18.604 [DEBUG] [Thread-199764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:57:18.622 [INFO] [Thread-199764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:57:18.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:57:18.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:57:19.495 [DEBUG] [Thread-199764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:57:19.495 [DEBUG] [Thread-199764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:57:19.543 [DEBUG] [Thread-199764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:57:19.543 [DEBUG] [Thread-199764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:57:19.553 [DEBUG] [Thread-199764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:57:19.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:57:19.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:57:19.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:57:19.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:57:19.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:57:19.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:57:19.590 [DEBUG] [Thread-199764] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:57:27.649 [DEBUG] [Thread-199766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:57:31.013 [DEBUG] [Thread-199767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:57:42.712 [DEBUG] [Thread-199768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:57:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:57:49.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:57:49.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:57:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 57, 24), 2.99731, 81.7015, 0.0, 9.0702, 11.2214, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:57:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:57:24
2026-04-13T01:57:51.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:57:51.422 [DEBUG] [Thread-199769] [transport.py] [_log()] starting thread (client mode): 0xa795a0b0
2026-04-13T01:57:51.422 [DEBUG] [Thread-199769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:57:51.443 [DEBUG] [Thread-199769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:57:51.443 [INFO] [Thread-199769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] client lang: <none>
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] server lang: <none>
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] kex follows: False
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:57:51.446 [DEBUG] [Thread-199769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:57:51.447 [DEBUG] [Thread-199769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:57:51.447 [DEBUG] [Thread-199769] [transport.py] [_log()] Compression: none
2026-04-13T01:57:51.447 [DEBUG] [Thread-199769] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:57:51.465 [DEBUG] [Thread-199769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:57:51.466 [DEBUG] [Thread-199769] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:57:51.466 [DEBUG] [Thread-199769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:57:51.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:57:51.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:57:51.468 [DEBUG] [Thread-199769] [transport.py] [_log()] userauth is OK
2026-04-13T01:57:51.469 [DEBUG] [Thread-199769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:57:51.469 [DEBUG] [Thread-199769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:57:51.469 [DEBUG] [Thread-199769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:57:51.469 [DEBUG] [Thread-199769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:57:51.490 [INFO] [Thread-199769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:57:51.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:57:52.137 [DEBUG] [Thread-199769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:57:52.138 [DEBUG] [Thread-199769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:57:52.138 [DEBUG] [Thread-199769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:57:52.178 [DEBUG] [Thread-199769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:57:52.178 [DEBUG] [Thread-199769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:57:52.182 [DEBUG] [Thread-199769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:57:52.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:57:52.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:57:52.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:57:52.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:57:52.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:57:52.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:57:52.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:57:52.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:57:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:57:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.998015 -999.00  +10.90   4.14     88   +9.00 1 2 1 3 1     0    0 2.54 28.59 ZN.S. 4.1 4.1 203.9 6.1 11.5 -21.6 11.4 -20.6 11.1 -18.5 11.4 -20.6
2026-04-13T01:57:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:57:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:57:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.998015
2026-04-13T01:57:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:57:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:57:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:57:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:57:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:57:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:57:24', tmtdew=2.99731, humidity=81.7015, cloud=0.0, wind=9.0702, temperature=11.2214, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:57:08.496', atlas_cloud=2, atlas_rain=1, zp_data=[3.2807499999999994, nan, 0.8327500000000008, nan, nan, nan, 0.1919999999999984, nan, nan, 2.817, 0.9602499999999994, 2.5229999999999997, nan, nan, 0.04699999999999882, nan, nan, 1.7010000000000005, 0.6239999999999997, 1.6007499999999988, nan, 2.7347499999999982, 1.0142500000000005, nan, 2.179999999999999, 0.19149999999999956, 0.11074999999999946, 0.0625, 0.14400000000000013, 0.3200000000000012, 0.6225000000000014, 1.8870000000000005, 0.32374999999999954], zp_timestamp='2026-04-12T23:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:57:52.209 [DEBUG] [Thread-199769] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:57:52.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:57:52.302 [DEBUG] [Thread-199772] [transport.py] [_log()] starting thread (client mode): 0xae5b7310
2026-04-13T01:57:52.302 [DEBUG] [Thread-199772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:57:52.316 [DEBUG] [Thread-199772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:57:52.316 [INFO] [Thread-199772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:57:52.324 [DEBUG] [Thread-199772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:57:52.324 [DEBUG] [Thread-199772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:57:52.324 [DEBUG] [Thread-199772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:57:52.324 [DEBUG] [Thread-199772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:52.324 [DEBUG] [Thread-199772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] client lang: <none>
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] server lang: <none>
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] kex follows: False
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] Compression: none
2026-04-13T01:57:52.325 [DEBUG] [Thread-199772] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:57:52.381 [DEBUG] [Thread-199772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:57:52.381 [DEBUG] [Thread-199772] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:57:52.381 [DEBUG] [Thread-199772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:57:52.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:57:52.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:57:52.444 [DEBUG] [Thread-199772] [transport.py] [_log()] userauth is OK
2026-04-13T01:57:52.444 [DEBUG] [Thread-199772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:57:52.444 [DEBUG] [Thread-199772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:57:52.444 [DEBUG] [Thread-199772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:57:52.445 [DEBUG] [Thread-199772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:57:52.463 [INFO] [Thread-199772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:57:52.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:57:52.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:57:53.281 [DEBUG] [Thread-199772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:57:53.281 [DEBUG] [Thread-199772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:57:53.329 [DEBUG] [Thread-199772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:57:53.329 [DEBUG] [Thread-199772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:57:53.339 [DEBUG] [Thread-199772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:57:53.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:57:53.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:57:53.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:57:53.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:57:53.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:57:53.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:57:53.376 [DEBUG] [Thread-199772] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:57:57.749 [DEBUG] [Thread-199774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:12.813 [DEBUG] [Thread-199775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:16.308 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:16.309 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:23.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:58:23.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:58:23.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:58:24.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 57, 59), 3.08719, 81.2039, 0.0, 8.75268, 11.2377, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:58:24.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:57:59
2026-04-13T01:58:25.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:58:25.161 [DEBUG] [Thread-199776] [transport.py] [_log()] starting thread (client mode): 0xb0f54bb0
2026-04-13T01:58:25.161 [DEBUG] [Thread-199776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:58:25.181 [DEBUG] [Thread-199776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:58:25.181 [INFO] [Thread-199776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] client lang: <none>
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] server lang: <none>
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] kex follows: False
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:58:25.185 [DEBUG] [Thread-199776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:58:25.186 [DEBUG] [Thread-199776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:58:25.186 [DEBUG] [Thread-199776] [transport.py] [_log()] Compression: none
2026-04-13T01:58:25.186 [DEBUG] [Thread-199776] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:58:25.202 [DEBUG] [Thread-199776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:58:25.202 [DEBUG] [Thread-199776] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:58:25.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:58:25.203 [DEBUG] [Thread-199776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:58:25.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:58:25.205 [DEBUG] [Thread-199776] [transport.py] [_log()] userauth is OK
2026-04-13T01:58:25.205 [DEBUG] [Thread-199776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:58:25.205 [DEBUG] [Thread-199776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:58:25.205 [DEBUG] [Thread-199776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:58:25.205 [DEBUG] [Thread-199776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:58:25.228 [INFO] [Thread-199776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:58:25.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:58:25.853 [DEBUG] [Thread-199776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:58:25.854 [DEBUG] [Thread-199776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:58:25.854 [DEBUG] [Thread-199776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:58:25.894 [DEBUG] [Thread-199776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:58:25.895 [DEBUG] [Thread-199776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:58:25.897 [DEBUG] [Thread-199776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:58:25.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:58:25.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:58:25.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:58:25.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:58:25.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:58:25.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:58:25.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:58:25.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:58:25.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:58:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.998710 -999.00  +10.90   5.86     87   +8.90 1 2 1 2 1     0    0 2.54 26.60 Z..S. 5.9 5.9 204.6 6.8 11.5 -21.6 11.4 -20.6 11.1 -18.7 11.4 -20.4
2026-04-13T01:58:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:58:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:58:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.998710
2026-04-13T01:58:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:58:25.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:58:25.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:58:25.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:58:25.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:58:25.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:57:59', tmtdew=3.08719, humidity=81.2039, cloud=0.0, wind=8.75268, temperature=11.2377, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:58:08.544', atlas_cloud=2, atlas_rain=1, zp_data=[3.2807499999999994, nan, 0.8327500000000008, nan, nan, nan, 0.1919999999999984, nan, nan, 2.817, 0.9602499999999994, 2.5229999999999997, nan, nan, 0.04699999999999882, nan, nan, 1.7010000000000005, 0.6239999999999997, 1.6007499999999988, nan, 2.7347499999999982, 1.0142500000000005, nan, 2.179999999999999, 0.19149999999999956, 0.11074999999999946, 0.0625, 0.14400000000000013, 0.3200000000000012, 0.6225000000000014, 1.8870000000000005, 0.32374999999999954], zp_timestamp='2026-04-12T23:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:58:25.921 [DEBUG] [Thread-199776] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:58:26.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:58:26.016 [DEBUG] [Thread-199779] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-13T01:58:26.016 [DEBUG] [Thread-199779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:58:26.030 [DEBUG] [Thread-199779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:58:26.030 [INFO] [Thread-199779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:26.037 [DEBUG] [Thread-199779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] client lang: <none>
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] server lang: <none>
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] kex follows: False
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] Compression: none
2026-04-13T01:58:26.038 [DEBUG] [Thread-199779] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:58:26.094 [DEBUG] [Thread-199779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:58:26.095 [DEBUG] [Thread-199779] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:58:26.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:58:26.095 [DEBUG] [Thread-199779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:58:26.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:58:26.150 [DEBUG] [Thread-199779] [transport.py] [_log()] userauth is OK
2026-04-13T01:58:26.151 [DEBUG] [Thread-199779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:58:26.151 [DEBUG] [Thread-199779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:58:26.151 [DEBUG] [Thread-199779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:58:26.151 [DEBUG] [Thread-199779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:58:26.173 [INFO] [Thread-199779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:58:26.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:58:26.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:58:26.987 [DEBUG] [Thread-199779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:58:26.988 [DEBUG] [Thread-199779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:58:27.035 [DEBUG] [Thread-199779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:58:27.036 [DEBUG] [Thread-199779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:58:27.044 [DEBUG] [Thread-199779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:58:27.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:58:27.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:58:27.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:58:27.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:58:27.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:58:27.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:58:27.078 [DEBUG] [Thread-199779] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:58:27.847 [DEBUG] [Thread-199781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:31.075 [DEBUG] [Thread-199782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:42.905 [DEBUG] [Thread-199783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:58:57.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:58:57.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:58:57.942 [DEBUG] [Thread-199784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:58:58.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 58, 35), 3.01289, 81.6449, 0.0, 10.8346, 11.242, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:58:58.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:58:35
2026-04-13T01:58:58.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:58:58.842 [DEBUG] [Thread-199785] [transport.py] [_log()] starting thread (client mode): 0xae5b4c40
2026-04-13T01:58:58.842 [DEBUG] [Thread-199785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:58:58.863 [DEBUG] [Thread-199785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:58:58.863 [INFO] [Thread-199785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] client lang: <none>
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] server lang: <none>
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] kex follows: False
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:58:58.866 [DEBUG] [Thread-199785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:58:58.867 [DEBUG] [Thread-199785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:58:58.867 [DEBUG] [Thread-199785] [transport.py] [_log()] Compression: none
2026-04-13T01:58:58.867 [DEBUG] [Thread-199785] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:58:58.883 [DEBUG] [Thread-199785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:58:58.883 [DEBUG] [Thread-199785] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:58:58.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:58:58.884 [DEBUG] [Thread-199785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:58:58.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:58:58.887 [DEBUG] [Thread-199785] [transport.py] [_log()] userauth is OK
2026-04-13T01:58:58.887 [DEBUG] [Thread-199785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:58:58.887 [DEBUG] [Thread-199785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:58:58.887 [DEBUG] [Thread-199785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:58:58.887 [DEBUG] [Thread-199785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:58:58.925 [INFO] [Thread-199785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:58:58.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:58:59.586 [DEBUG] [Thread-199785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:58:59.586 [DEBUG] [Thread-199785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:58:59.586 [DEBUG] [Thread-199785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:58:59.627 [DEBUG] [Thread-199785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:58:59.627 [DEBUG] [Thread-199785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:58:59.630 [DEBUG] [Thread-199785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:58:59.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:58:59.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:58:59.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:58:59.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:58:59.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:58:59.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:58:59.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:58:59.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:58:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:58:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.999057 -999.00  +10.90   4.20     87   +9.00 1 2 1 2 1     0    0 2.58 27.16 ZN.S. 4.2 4.2 232.3 7.8 11.5 -21.6 11.3 -20.5 11.1 -18.6 11.4 -20.7
2026-04-13T01:58:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:58:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:58:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.999057
2026-04-13T01:58:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:58:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:58:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:58:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:58:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:58:59.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:58:35', tmtdew=3.01289, humidity=81.6449, cloud=0.0, wind=10.8346, temperature=11.242, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:58:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[3.2807499999999994, nan, 0.8327500000000008, nan, nan, nan, 0.1919999999999984, nan, nan, 2.817, 0.9602499999999994, 2.5229999999999997, nan, nan, 0.04699999999999882, nan, nan, 1.7010000000000005, 0.6239999999999997, 1.6007499999999988, nan, 2.7347499999999982, 1.0142500000000005, nan, 2.179999999999999, 0.19149999999999956, 0.11074999999999946, 0.0625, 0.14400000000000013, 0.3200000000000012, 0.6225000000000014, 1.8870000000000005, 0.32374999999999954], zp_timestamp='2026-04-12T23:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:58:59.658 [DEBUG] [Thread-199785] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:58:59.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:58:59.751 [DEBUG] [Thread-199788] [transport.py] [_log()] starting thread (client mode): 0xae5b4100
2026-04-13T01:58:59.751 [DEBUG] [Thread-199788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:58:59.767 [DEBUG] [Thread-199788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:58:59.767 [INFO] [Thread-199788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] client lang: <none>
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] server lang: <none>
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] kex follows: False
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:58:59.775 [DEBUG] [Thread-199788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:58:59.776 [DEBUG] [Thread-199788] [transport.py] [_log()] Compression: none
2026-04-13T01:58:59.776 [DEBUG] [Thread-199788] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:58:59.834 [DEBUG] [Thread-199788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:58:59.835 [DEBUG] [Thread-199788] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:58:59.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:58:59.836 [DEBUG] [Thread-199788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:58:59.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:58:59.891 [DEBUG] [Thread-199788] [transport.py] [_log()] userauth is OK
2026-04-13T01:58:59.891 [DEBUG] [Thread-199788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:58:59.891 [DEBUG] [Thread-199788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:58:59.891 [DEBUG] [Thread-199788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:58:59.892 [DEBUG] [Thread-199788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:58:59.911 [INFO] [Thread-199788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:58:59.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:58:59.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:59:00.716 [DEBUG] [Thread-199788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:59:00.716 [DEBUG] [Thread-199788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:59:00.763 [DEBUG] [Thread-199788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:59:00.764 [DEBUG] [Thread-199788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:59:00.772 [DEBUG] [Thread-199788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:59:00.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:59:00.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:59:00.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:59:00.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:59:00.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:59:00.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:59:00.807 [DEBUG] [Thread-199788] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:59:12.980 [DEBUG] [Thread-199790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:59:16.524 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:59:16.525 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:59:28.041 [DEBUG] [Thread-199791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:59:30.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T01:59:30.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T01:59:30.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T01:59:31.146 [DEBUG] [Thread-199792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:59:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 59, 10), 3.26545, 80.0073, 0.0, 8.92908, 11.354, 0, 1, 0, 2, 0, 0),)
2026-04-13T01:59:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:59:10
2026-04-13T01:59:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T01:59:32.718 [DEBUG] [Thread-199793] [transport.py] [_log()] starting thread (client mode): 0xae5b6da0
2026-04-13T01:59:32.718 [DEBUG] [Thread-199793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:59:32.739 [DEBUG] [Thread-199793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T01:59:32.739 [INFO] [Thread-199793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T01:59:32.742 [DEBUG] [Thread-199793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:59:32.742 [DEBUG] [Thread-199793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T01:59:32.742 [DEBUG] [Thread-199793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:59:32.742 [DEBUG] [Thread-199793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] client lang: <none>
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] server lang: <none>
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] kex follows: False
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:59:32.743 [DEBUG] [Thread-199793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:59:32.744 [DEBUG] [Thread-199793] [transport.py] [_log()] Compression: none
2026-04-13T01:59:32.744 [DEBUG] [Thread-199793] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:59:32.763 [DEBUG] [Thread-199793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:59:32.763 [DEBUG] [Thread-199793] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:59:32.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T01:59:32.765 [DEBUG] [Thread-199793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T01:59:32.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:59:32.767 [DEBUG] [Thread-199793] [transport.py] [_log()] userauth is OK
2026-04-13T01:59:32.767 [DEBUG] [Thread-199793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:59:32.767 [DEBUG] [Thread-199793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:59:32.767 [DEBUG] [Thread-199793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T01:59:32.767 [DEBUG] [Thread-199793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:59:32.791 [INFO] [Thread-199793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:59:32.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:59:33.462 [DEBUG] [Thread-199793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:59:33.463 [DEBUG] [Thread-199793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:59:33.463 [DEBUG] [Thread-199793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T01:59:33.504 [DEBUG] [Thread-199793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:59:33.504 [DEBUG] [Thread-199793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:59:33.508 [DEBUG] [Thread-199793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:59:33.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:59:33.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T01:59:33.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T01:59:33.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T01:59:33.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:59:33.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T01:59:33.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:59:33.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:59:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T01:59:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.999404 -999.00  +10.90   6.80     87   +8.90 1 2 1 2 1     0    0 2.51 25.32 ZN.S. 6.8 6.8 200.4 8.6 11.5 -21.6 11.4 -20.6 11.1 -18.7 11.4 -20.6
2026-04-13T01:59:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T01:59:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T01:59:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.999404
2026-04-13T01:59:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T01:59:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T01:59:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T01:59:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T01:59:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T01:59:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:59:10', tmtdew=3.26545, humidity=80.0073, cloud=0.0, wind=8.92908, temperature=11.354, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:59:08.506', atlas_cloud=2, atlas_rain=1, zp_data=[3.2807499999999994, nan, 0.8327500000000008, nan, nan, nan, 0.1919999999999984, nan, nan, 2.817, 0.9602499999999994, 2.5229999999999997, nan, nan, 0.04699999999999882, nan, nan, 1.7010000000000005, 0.6239999999999997, 1.6007499999999988, nan, 2.7347499999999982, 1.0142500000000005, nan, 2.179999999999999, 0.19149999999999956, 0.11074999999999946, 0.0625, 0.14400000000000013, 0.3200000000000012, 0.6225000000000014, 1.8870000000000005, 0.32374999999999954], zp_timestamp='2026-04-12T23:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T01:59:33.535 [DEBUG] [Thread-199793] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:59:33.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T01:59:33.629 [DEBUG] [Thread-199796] [transport.py] [_log()] starting thread (client mode): 0xae52f3a0
2026-04-13T01:59:33.629 [DEBUG] [Thread-199796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T01:59:33.643 [DEBUG] [Thread-199796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T01:59:33.643 [INFO] [Thread-199796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] client lang: <none>
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] server lang: <none>
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] kex follows: False
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T01:59:33.651 [DEBUG] [Thread-199796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T01:59:33.652 [DEBUG] [Thread-199796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T01:59:33.652 [DEBUG] [Thread-199796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T01:59:33.652 [DEBUG] [Thread-199796] [transport.py] [_log()] Compression: none
2026-04-13T01:59:33.652 [DEBUG] [Thread-199796] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T01:59:33.709 [DEBUG] [Thread-199796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T01:59:33.709 [DEBUG] [Thread-199796] [transport.py] [_log()] Switch to new keys ...
2026-04-13T01:59:33.709 [DEBUG] [Thread-199796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T01:59:33.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T01:59:33.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T01:59:33.765 [DEBUG] [Thread-199796] [transport.py] [_log()] userauth is OK
2026-04-13T01:59:33.766 [DEBUG] [Thread-199796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T01:59:33.766 [DEBUG] [Thread-199796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T01:59:33.766 [DEBUG] [Thread-199796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T01:59:33.766 [DEBUG] [Thread-199796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T01:59:33.787 [INFO] [Thread-199796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T01:59:33.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T01:59:33.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T01:59:34.590 [DEBUG] [Thread-199796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T01:59:34.590 [DEBUG] [Thread-199796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T01:59:34.638 [DEBUG] [Thread-199796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T01:59:34.638 [DEBUG] [Thread-199796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T01:59:34.646 [DEBUG] [Thread-199796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T01:59:34.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T01:59:34.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T01:59:34.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T01:59:34.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T01:59:34.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T01:59:34.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T01:59:34.679 [DEBUG] [Thread-199796] [transport.py] [_log()] EOF in transport thread
2026-04-13T01:59:43.077 [DEBUG] [Thread-199798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T01:59:58.130 [DEBUG] [Thread-199799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:00:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:00:04.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:00:04.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
2026-04-13T02:00:05.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 1, 59, 45), 3.14823, 80.9151, 0.0, 10.1995, 11.3747, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:00:05.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 01:59:45
2026-04-13T02:00:06.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:00:06.505 [DEBUG] [Thread-199800] [transport.py] [_log()] starting thread (client mode): 0xae5b6f50
2026-04-13T02:00:06.505 [DEBUG] [Thread-199800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:00:06.525 [DEBUG] [Thread-199800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:00:06.525 [INFO] [Thread-199800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:00:06.528 [DEBUG] [Thread-199800] [transport.py] [_log()] client lang: <none>
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] server lang: <none>
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] kex follows: False
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] Compression: none
2026-04-13T02:00:06.529 [DEBUG] [Thread-199800] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:00:06.545 [DEBUG] [Thread-199800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:00:06.545 [DEBUG] [Thread-199800] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:00:06.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:00:06.547 [DEBUG] [Thread-199800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:00:06.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:00:06.549 [DEBUG] [Thread-199800] [transport.py] [_log()] userauth is OK
2026-04-13T02:00:06.549 [DEBUG] [Thread-199800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:00:06.550 [DEBUG] [Thread-199800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:00:06.550 [DEBUG] [Thread-199800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:00:06.550 [DEBUG] [Thread-199800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:00:06.567 [INFO] [Thread-199800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:00:06.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:00:07.332 [DEBUG] [Thread-199800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:00:07.333 [DEBUG] [Thread-199800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:00:07.333 [DEBUG] [Thread-199800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:00:07.374 [DEBUG] [Thread-199800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:00:07.374 [DEBUG] [Thread-199800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:00:07.377 [DEBUG] [Thread-199800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:00:07.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:00:07.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:00:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:00:07.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:00:07.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:00:07.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:00:07.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:00:07.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:00:07.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:00:07.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.999751 -999.00  +10.90   2.32     87   +8.90 1 2 1 2 1     0    0 2.53 25.25 ZN.S. 2.3 2.3 236.8 5.8 11.6 -21.7 11.4 -20.6 11.1 -18.8 11.4 -20.6
2026-04-13T02:00:07.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:00:07.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:00:07.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.999751
2026-04-13T02:00:07.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:00:07.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:00:07.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:00:07.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:00:07.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:00:07.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T01:59:45', tmtdew=3.14823, humidity=80.9151, cloud=0.0, wind=10.1995, temperature=11.3747, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-12T23:59:38.486', atlas_cloud=2, atlas_rain=1, zp_data=[3.2807499999999994, nan, 0.8327500000000008, nan, nan, nan, 0.1919999999999984, nan, nan, 2.817, 0.9602499999999994, 2.5229999999999997, nan, nan, 0.04699999999999882, nan, nan, 1.7010000000000005, 0.6239999999999997, 1.6007499999999988, nan, 2.7347499999999982, 1.0142500000000005, nan, 2.179999999999999, 0.19149999999999956, 0.11074999999999946, 0.0625, 0.14400000000000013, 0.3200000000000012, 0.6225000000000014, 1.8870000000000005, 0.32374999999999954], zp_timestamp='2026-04-12T23:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:00:07.407 [DEBUG] [Thread-199800] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:00:07.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:00:07.514 [DEBUG] [Thread-199803] [transport.py] [_log()] starting thread (client mode): 0xae5b56c0
2026-04-13T02:00:07.514 [DEBUG] [Thread-199803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:00:07.528 [DEBUG] [Thread-199803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:00:07.528 [INFO] [Thread-199803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] client lang: <none>
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] server lang: <none>
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] kex follows: False
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:00:07.536 [DEBUG] [Thread-199803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:00:07.537 [DEBUG] [Thread-199803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:00:07.537 [DEBUG] [Thread-199803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:00:07.537 [DEBUG] [Thread-199803] [transport.py] [_log()] Compression: none
2026-04-13T02:00:07.537 [DEBUG] [Thread-199803] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:00:07.593 [DEBUG] [Thread-199803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:00:07.594 [DEBUG] [Thread-199803] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:00:07.595 [DEBUG] [Thread-199803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:00:07.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:00:07.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:00:07.650 [DEBUG] [Thread-199803] [transport.py] [_log()] userauth is OK
2026-04-13T02:00:07.651 [DEBUG] [Thread-199803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:00:07.651 [DEBUG] [Thread-199803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:00:07.651 [DEBUG] [Thread-199803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:00:07.651 [DEBUG] [Thread-199803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:00:07.670 [INFO] [Thread-199803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:00:07.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:00:07.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:00:08.519 [DEBUG] [Thread-199803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:00:08.520 [DEBUG] [Thread-199803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:00:08.568 [DEBUG] [Thread-199803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:00:08.568 [DEBUG] [Thread-199803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:00:08.577 [DEBUG] [Thread-199803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:00:08.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:00:08.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:00:08.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:00:08.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:00:08.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:00:08.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:00:08.615 [DEBUG] [Thread-199803] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:00:13.167 [DEBUG] [Thread-199805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:00:16.730 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:00:16.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:00:28.220 [DEBUG] [Thread-199806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:00:31.208 [DEBUG] [Thread-199807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:00:38.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:00:38.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:00:38.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:00:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 0, 21), 3.46043, 79.2585, 0.0, 8.85852, 11.3874, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:00:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:00:21
2026-04-13T02:00:40.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:00:40.468 [DEBUG] [Thread-199808] [transport.py] [_log()] starting thread (client mode): 0xb0f54c70
2026-04-13T02:00:40.468 [DEBUG] [Thread-199808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:00:40.487 [DEBUG] [Thread-199808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:00:40.487 [INFO] [Thread-199808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] client lang: <none>
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] server lang: <none>
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] kex follows: False
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:00:40.489 [DEBUG] [Thread-199808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:00:40.490 [DEBUG] [Thread-199808] [transport.py] [_log()] Compression: none
2026-04-13T02:00:40.490 [DEBUG] [Thread-199808] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:00:40.498 [DEBUG] [Thread-199808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:00:40.498 [DEBUG] [Thread-199808] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:00:40.499 [DEBUG] [Thread-199808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:00:40.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:00:40.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:00:40.501 [DEBUG] [Thread-199808] [transport.py] [_log()] userauth is OK
2026-04-13T02:00:40.501 [DEBUG] [Thread-199808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:00:40.501 [DEBUG] [Thread-199808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:00:40.501 [DEBUG] [Thread-199808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:00:40.501 [DEBUG] [Thread-199808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:00:40.520 [INFO] [Thread-199808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:00:40.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:00:41.174 [DEBUG] [Thread-199808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:00:41.174 [DEBUG] [Thread-199808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:00:41.175 [DEBUG] [Thread-199808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:00:41.215 [DEBUG] [Thread-199808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:00:41.215 [DEBUG] [Thread-199808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:00:41.219 [DEBUG] [Thread-199808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:00:41.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:00:41.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:00:41.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:00:41.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:00:41.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:00:41.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:00:41.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:00:41.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:00:41.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:00:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.000098 -999.00  +10.90   3.43     87   +8.90 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 3.4 3.4 187.2 6.1 11.6 -21.7 11.4 -20.6 11.2 -18.7 11.4 -20.4
2026-04-13T02:00:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:00:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:00:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.000098
2026-04-13T02:00:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:00:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:00:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:00:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:00:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:00:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:00:21', tmtdew=3.46043, humidity=79.2585, cloud=0.0, wind=8.85852, temperature=11.3874, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:00:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-12T23:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:00:41.245 [DEBUG] [Thread-199808] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:00:41.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:00:41.338 [DEBUG] [Thread-199811] [transport.py] [_log()] starting thread (client mode): 0xb0f56ce0
2026-04-13T02:00:41.338 [DEBUG] [Thread-199811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:00:41.354 [DEBUG] [Thread-199811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:00:41.354 [INFO] [Thread-199811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] client lang: <none>
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] server lang: <none>
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] kex follows: False
2026-04-13T02:00:41.362 [DEBUG] [Thread-199811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:00:41.363 [DEBUG] [Thread-199811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:00:41.363 [DEBUG] [Thread-199811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:00:41.363 [DEBUG] [Thread-199811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:00:41.363 [DEBUG] [Thread-199811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:00:41.363 [DEBUG] [Thread-199811] [transport.py] [_log()] Compression: none
2026-04-13T02:00:41.363 [DEBUG] [Thread-199811] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:00:41.421 [DEBUG] [Thread-199811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:00:41.422 [DEBUG] [Thread-199811] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:00:41.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:00:41.423 [DEBUG] [Thread-199811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:00:41.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:00:41.477 [DEBUG] [Thread-199811] [transport.py] [_log()] userauth is OK
2026-04-13T02:00:41.477 [DEBUG] [Thread-199811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:00:41.477 [DEBUG] [Thread-199811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:00:41.478 [DEBUG] [Thread-199811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:00:41.478 [DEBUG] [Thread-199811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:00:41.497 [INFO] [Thread-199811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:00:41.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:00:41.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:00:42.307 [DEBUG] [Thread-199811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:00:42.307 [DEBUG] [Thread-199811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:00:42.355 [DEBUG] [Thread-199811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:00:42.356 [DEBUG] [Thread-199811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:00:42.365 [DEBUG] [Thread-199811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:00:42.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:00:42.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:00:42.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:00:42.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:00:42.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:00:42.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:00:42.402 [DEBUG] [Thread-199811] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:00:43.259 [DEBUG] [Thread-199813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:00:58.313 [DEBUG] [Thread-199814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:01:12.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:01:12.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:01:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:01:13.354 [DEBUG] [Thread-199815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:01:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 0, 57), 3.46386, 79.242, 0.0, 8.43516, 11.404, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:01:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:00:57
2026-04-13T02:01:14.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:01:14.220 [DEBUG] [Thread-199816] [transport.py] [_log()] starting thread (client mode): 0xb0f54ac0
2026-04-13T02:01:14.220 [DEBUG] [Thread-199816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:01:14.239 [DEBUG] [Thread-199816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:01:14.239 [INFO] [Thread-199816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:14.243 [DEBUG] [Thread-199816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] client lang: <none>
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] server lang: <none>
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] kex follows: False
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] Compression: none
2026-04-13T02:01:14.244 [DEBUG] [Thread-199816] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:01:14.265 [DEBUG] [Thread-199816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:01:14.265 [DEBUG] [Thread-199816] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:01:14.266 [DEBUG] [Thread-199816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:01:14.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:01:14.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:01:14.268 [DEBUG] [Thread-199816] [transport.py] [_log()] userauth is OK
2026-04-13T02:01:14.268 [DEBUG] [Thread-199816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:01:14.268 [DEBUG] [Thread-199816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:01:14.268 [DEBUG] [Thread-199816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:01:14.268 [DEBUG] [Thread-199816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:01:14.292 [INFO] [Thread-199816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:01:14.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:01:14.880 [DEBUG] [Thread-199816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:01:14.880 [DEBUG] [Thread-199816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:01:14.880 [DEBUG] [Thread-199816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:01:14.921 [DEBUG] [Thread-199816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:01:14.921 [DEBUG] [Thread-199816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:01:14.925 [DEBUG] [Thread-199816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:01:14.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:01:14.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:01:14.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:01:14.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:01:14.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:01:14.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:01:14.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:01:14.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:01:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:01:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.000447 -999.00  +10.90   3.01     87   +8.90 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 3.0 3.0 240.0 7.0 11.6 -21.6 11.4 -20.5 11.1 -18.6 11.4 -20.6
2026-04-13T02:01:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:01:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:01:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.000447
2026-04-13T02:01:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:01:14.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:01:14.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:01:14.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:01:14.944 [DEBUG] [Thread-199816] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:01:14.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:01:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:00:57', tmtdew=3.46386, humidity=79.242, cloud=0.0, wind=8.43516, temperature=11.404, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:00:38.621', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-12T23:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:01:15.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:01:15.038 [DEBUG] [Thread-199819] [transport.py] [_log()] starting thread (client mode): 0xb0f57d30
2026-04-13T02:01:15.038 [DEBUG] [Thread-199819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:01:15.052 [DEBUG] [Thread-199819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:01:15.053 [INFO] [Thread-199819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:01:15.060 [DEBUG] [Thread-199819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:01:15.060 [DEBUG] [Thread-199819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:01:15.060 [DEBUG] [Thread-199819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:01:15.060 [DEBUG] [Thread-199819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:15.060 [DEBUG] [Thread-199819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] client lang: <none>
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] server lang: <none>
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] kex follows: False
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:01:15.061 [DEBUG] [Thread-199819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:01:15.062 [DEBUG] [Thread-199819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:01:15.062 [DEBUG] [Thread-199819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:01:15.062 [DEBUG] [Thread-199819] [transport.py] [_log()] Compression: none
2026-04-13T02:01:15.062 [DEBUG] [Thread-199819] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:01:15.122 [DEBUG] [Thread-199819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:01:15.122 [DEBUG] [Thread-199819] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:01:15.123 [DEBUG] [Thread-199819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:01:15.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:01:15.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:01:15.181 [DEBUG] [Thread-199819] [transport.py] [_log()] userauth is OK
2026-04-13T02:01:15.181 [DEBUG] [Thread-199819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:01:15.181 [DEBUG] [Thread-199819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:01:15.181 [DEBUG] [Thread-199819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:01:15.181 [DEBUG] [Thread-199819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:01:15.199 [INFO] [Thread-199819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:01:15.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:01:15.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:01:16.016 [DEBUG] [Thread-199819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:01:16.017 [DEBUG] [Thread-199819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:01:16.065 [DEBUG] [Thread-199819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:01:16.065 [DEBUG] [Thread-199819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:01:16.074 [DEBUG] [Thread-199819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:01:16.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:01:16.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:01:16.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:01:16.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:01:16.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:01:16.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:01:16.111 [DEBUG] [Thread-199819] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:01:16.935 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:01:16.936 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:01:28.390 [DEBUG] [Thread-199821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:01:31.266 [DEBUG] [Thread-199822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:01:43.450 [DEBUG] [Thread-199823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:01:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:01:46.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:01:46.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:01:47.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 1, 33), 3.30596, 80.0527, 0.0, 10.9051, 11.3749, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:01:47.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:01:33
2026-04-13T02:01:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:01:47.956 [DEBUG] [Thread-199824] [transport.py] [_log()] starting thread (client mode): 0xae52fc70
2026-04-13T02:01:47.956 [DEBUG] [Thread-199824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:01:47.973 [DEBUG] [Thread-199824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:01:47.973 [INFO] [Thread-199824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] client lang: <none>
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] server lang: <none>
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] kex follows: False
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] Compression: none
2026-04-13T02:01:47.974 [DEBUG] [Thread-199824] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:01:47.983 [DEBUG] [Thread-199824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:01:47.983 [DEBUG] [Thread-199824] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:01:47.983 [DEBUG] [Thread-199824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:01:47.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:01:47.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:01:47.985 [DEBUG] [Thread-199824] [transport.py] [_log()] userauth is OK
2026-04-13T02:01:47.985 [DEBUG] [Thread-199824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:01:47.985 [DEBUG] [Thread-199824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:01:47.985 [DEBUG] [Thread-199824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:01:47.985 [DEBUG] [Thread-199824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:01:48.009 [INFO] [Thread-199824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:01:48.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:01:48.588 [DEBUG] [Thread-199824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:01:48.588 [DEBUG] [Thread-199824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:01:48.589 [DEBUG] [Thread-199824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:01:48.629 [DEBUG] [Thread-199824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:01:48.629 [DEBUG] [Thread-199824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:01:48.632 [DEBUG] [Thread-199824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:01:48.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:01:48.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:01:48.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:01:48.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:01:48.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:01:48.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:01:48.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:01:48.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:01:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:01:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.001140 -999.00  +10.90   4.97     87   +8.80 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 5.0 5.0 219.6 6.4 11.5 -21.6 11.4 -20.6 11.1 -18.6 11.4 -20.8
2026-04-13T02:01:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:01:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:01:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.001140
2026-04-13T02:01:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:01:48.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:01:48.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:01:48.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:01:48.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:01:48.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:01:33', tmtdew=3.30596, humidity=80.0527, cloud=0.0, wind=10.9051, temperature=11.3749, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:01:38.496', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-12T23:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:01:48.662 [DEBUG] [Thread-199824] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:01:48.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:01:48.756 [DEBUG] [Thread-199827] [transport.py] [_log()] starting thread (client mode): 0xae5b59c0
2026-04-13T02:01:48.756 [DEBUG] [Thread-199827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:01:48.774 [DEBUG] [Thread-199827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:01:48.774 [INFO] [Thread-199827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] client lang: <none>
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] server lang: <none>
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] kex follows: False
2026-04-13T02:01:48.782 [DEBUG] [Thread-199827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:01:48.783 [DEBUG] [Thread-199827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:01:48.783 [DEBUG] [Thread-199827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:01:48.783 [DEBUG] [Thread-199827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:01:48.783 [DEBUG] [Thread-199827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:01:48.783 [DEBUG] [Thread-199827] [transport.py] [_log()] Compression: none
2026-04-13T02:01:48.783 [DEBUG] [Thread-199827] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:01:48.844 [DEBUG] [Thread-199827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:01:48.845 [DEBUG] [Thread-199827] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:01:48.846 [DEBUG] [Thread-199827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:01:48.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:01:48.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:01:48.900 [DEBUG] [Thread-199827] [transport.py] [_log()] userauth is OK
2026-04-13T02:01:48.901 [DEBUG] [Thread-199827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:01:48.901 [DEBUG] [Thread-199827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:01:48.901 [DEBUG] [Thread-199827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:01:48.901 [DEBUG] [Thread-199827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:01:48.919 [INFO] [Thread-199827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:01:48.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:01:48.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:01:49.763 [DEBUG] [Thread-199827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:01:49.764 [DEBUG] [Thread-199827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:01:49.811 [DEBUG] [Thread-199827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:01:49.811 [DEBUG] [Thread-199827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:01:49.821 [DEBUG] [Thread-199827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:01:49.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:01:49.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:01:49.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:01:49.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:01:49.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:01:49.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:01:49.859 [DEBUG] [Thread-199827] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:01:58.488 [DEBUG] [Thread-199829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:02:13.542 [DEBUG] [Thread-199830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:02:17.141 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:02:17.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:02:19.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:02:19.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:02:19.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:02:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 2, 8), 3.58173, 78.8771, 0.0, 9.03492, 11.4372, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:02:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:02:08
2026-04-13T02:02:21.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:02:21.683 [DEBUG] [Thread-199831] [transport.py] [_log()] starting thread (client mode): 0xae5b4670
2026-04-13T02:02:21.683 [DEBUG] [Thread-199831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:02:21.703 [DEBUG] [Thread-199831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:02:21.703 [INFO] [Thread-199831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:02:21.705 [DEBUG] [Thread-199831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:02:21.705 [DEBUG] [Thread-199831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] client lang: <none>
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] server lang: <none>
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] kex follows: False
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:02:21.706 [DEBUG] [Thread-199831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:02:21.707 [DEBUG] [Thread-199831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:02:21.707 [DEBUG] [Thread-199831] [transport.py] [_log()] Compression: none
2026-04-13T02:02:21.707 [DEBUG] [Thread-199831] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:02:21.716 [DEBUG] [Thread-199831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:02:21.717 [DEBUG] [Thread-199831] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:02:21.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:02:21.718 [DEBUG] [Thread-199831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:02:21.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:02:21.761 [DEBUG] [Thread-199831] [transport.py] [_log()] userauth is OK
2026-04-13T02:02:21.761 [DEBUG] [Thread-199831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:02:21.761 [DEBUG] [Thread-199831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:02:21.762 [DEBUG] [Thread-199831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:02:21.762 [DEBUG] [Thread-199831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:02:21.782 [INFO] [Thread-199831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:02:21.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:02:22.400 [DEBUG] [Thread-199831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:02:22.400 [DEBUG] [Thread-199831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:02:22.401 [DEBUG] [Thread-199831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:02:22.441 [DEBUG] [Thread-199831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:02:22.441 [DEBUG] [Thread-199831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:02:22.445 [DEBUG] [Thread-199831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:02:22.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:02:22.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:02:22.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:02:22.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:02:22.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:02:22.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:02:22.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:02:22.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:02:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:02:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.001487 -999.00  +10.90   6.68     87   +8.80 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 6.7 6.7 205.4 8.0 11.5 -21.7 11.4 -20.5 11.2 -18.6 11.4 -20.5
2026-04-13T02:02:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:02:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:02:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.001487
2026-04-13T02:02:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:02:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:02:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:02:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:02:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:02:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:02:08', tmtdew=3.58173, humidity=78.8771, cloud=0.0, wind=9.03492, temperature=11.4372, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:02:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-12T23:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:02:22.471 [DEBUG] [Thread-199831] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:02:22.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:02:22.563 [DEBUG] [Thread-199834] [transport.py] [_log()] starting thread (client mode): 0xae52e1d0
2026-04-13T02:02:22.563 [DEBUG] [Thread-199834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:02:22.578 [DEBUG] [Thread-199834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:02:22.578 [INFO] [Thread-199834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] client lang: <none>
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] server lang: <none>
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] kex follows: False
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:02:22.586 [DEBUG] [Thread-199834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:02:22.587 [DEBUG] [Thread-199834] [transport.py] [_log()] Compression: none
2026-04-13T02:02:22.587 [DEBUG] [Thread-199834] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:02:22.643 [DEBUG] [Thread-199834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:02:22.644 [DEBUG] [Thread-199834] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:02:22.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:02:22.645 [DEBUG] [Thread-199834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:02:22.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:02:22.700 [DEBUG] [Thread-199834] [transport.py] [_log()] userauth is OK
2026-04-13T02:02:22.700 [DEBUG] [Thread-199834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:02:22.700 [DEBUG] [Thread-199834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:02:22.701 [DEBUG] [Thread-199834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:02:22.701 [DEBUG] [Thread-199834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:02:22.724 [INFO] [Thread-199834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:02:22.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:02:22.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:02:23.540 [DEBUG] [Thread-199834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:02:23.540 [DEBUG] [Thread-199834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:02:23.589 [DEBUG] [Thread-199834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:02:23.589 [DEBUG] [Thread-199834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:02:23.598 [DEBUG] [Thread-199834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:02:23.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:02: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')
2026-04-13T02:02:23.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:02:23.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:02:23.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:02:23.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:02:23.634 [DEBUG] [Thread-199834] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:02:28.579 [DEBUG] [Thread-199836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:02:31.325 [DEBUG] [Thread-199837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:02:43.634 [DEBUG] [Thread-199838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:02:53.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:02:53.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:02:53.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:02:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 2, 44), 3.37739, 79.6879, 0.0, 10.0937, 11.5408, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:02:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:02:44
2026-04-13T02:02:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:02:55.446 [DEBUG] [Thread-199839] [transport.py] [_log()] starting thread (client mode): 0xb0f55600
2026-04-13T02:02:55.446 [DEBUG] [Thread-199839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:02:55.470 [DEBUG] [Thread-199839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:02:55.470 [INFO] [Thread-199839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:02:55.479 [DEBUG] [Thread-199839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:02:55.480 [DEBUG] [Thread-199839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:02:55.480 [DEBUG] [Thread-199839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:02:55.480 [DEBUG] [Thread-199839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:55.480 [DEBUG] [Thread-199839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:55.480 [DEBUG] [Thread-199839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] client lang: <none>
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] server lang: <none>
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] kex follows: False
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] Compression: none
2026-04-13T02:02:55.481 [DEBUG] [Thread-199839] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:02:55.494 [DEBUG] [Thread-199839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:02:55.495 [DEBUG] [Thread-199839] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:02:55.495 [DEBUG] [Thread-199839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:02:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:02:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:02:55.497 [DEBUG] [Thread-199839] [transport.py] [_log()] userauth is OK
2026-04-13T02:02:55.498 [DEBUG] [Thread-199839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:02:55.498 [DEBUG] [Thread-199839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:02:55.498 [DEBUG] [Thread-199839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:02:55.498 [DEBUG] [Thread-199839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:02:55.516 [INFO] [Thread-199839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:02:55.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:02:56.180 [DEBUG] [Thread-199839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:02:56.181 [DEBUG] [Thread-199839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:02:56.181 [DEBUG] [Thread-199839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:02:56.222 [DEBUG] [Thread-199839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:02:56.222 [DEBUG] [Thread-199839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:02:56.226 [DEBUG] [Thread-199839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:02:56.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:02:56.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:02:56.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:02:56.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:02:56.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:02:56.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:02:56.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:02:56.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:02:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:02:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.001835 -999.00  +10.90   5.18     86   +8.80 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 5.2 5.2 219.0 8.0 11.6 -21.6 11.4 -20.5 11.2 -18.5 11.4 -20.5
2026-04-13T02:02:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:02:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:02:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.001835
2026-04-13T02:02:56.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:02:56.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:02:56.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:02:56.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:02:56.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:02:56.249 [DEBUG] [Thread-199839] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:02:56.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:02:44', tmtdew=3.37739, humidity=79.6879, cloud=0.0, wind=10.0937, temperature=11.5408, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:02:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-12T23:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:02:56.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:02:56.345 [DEBUG] [Thread-199842] [transport.py] [_log()] starting thread (client mode): 0xae5b45b0
2026-04-13T02:02:56.345 [DEBUG] [Thread-199842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:02:56.359 [DEBUG] [Thread-199842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:02:56.359 [INFO] [Thread-199842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:02:56.367 [DEBUG] [Thread-199842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:02:56.367 [DEBUG] [Thread-199842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:02:56.367 [DEBUG] [Thread-199842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:02:56.367 [DEBUG] [Thread-199842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:56.367 [DEBUG] [Thread-199842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:02:56.367 [DEBUG] [Thread-199842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:56.367 [DEBUG] [Thread-199842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] client lang: <none>
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] server lang: <none>
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] kex follows: False
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] Compression: none
2026-04-13T02:02:56.368 [DEBUG] [Thread-199842] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:02:56.427 [DEBUG] [Thread-199842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:02:56.428 [DEBUG] [Thread-199842] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:02:56.428 [DEBUG] [Thread-199842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:02:56.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:02:56.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:02:56.486 [DEBUG] [Thread-199842] [transport.py] [_log()] userauth is OK
2026-04-13T02:02:56.486 [DEBUG] [Thread-199842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:02:56.487 [DEBUG] [Thread-199842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:02:56.487 [DEBUG] [Thread-199842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:02:56.487 [DEBUG] [Thread-199842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:02:56.506 [INFO] [Thread-199842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:02:56.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:02:56.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:02:57.327 [DEBUG] [Thread-199842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:02:57.328 [DEBUG] [Thread-199842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:02:57.375 [DEBUG] [Thread-199842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:02:57.375 [DEBUG] [Thread-199842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:02:57.384 [DEBUG] [Thread-199842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:02:57.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:02:57.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:02:57.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:02:57.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:02:57.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:02:57.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:02:57.422 [DEBUG] [Thread-199842] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:02:58.669 [DEBUG] [Thread-199844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:03:13.723 [DEBUG] [Thread-199845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:03:17.348 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:03:17.350 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:03:27.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:03:27.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:03:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:03:28.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 3, 19), 3.60318, 78.261, 0.0, 8.8938, 11.3872, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:03:28.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:03:19
2026-04-13T02:03:28.760 [DEBUG] [Thread-199846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:03:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:03:29.336 [DEBUG] [Thread-199847] [transport.py] [_log()] starting thread (client mode): 0xae517460
2026-04-13T02:03:29.336 [DEBUG] [Thread-199847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:03:29.356 [DEBUG] [Thread-199847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:03:29.357 [INFO] [Thread-199847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:03:29.359 [DEBUG] [Thread-199847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] client lang: <none>
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] server lang: <none>
2026-04-13T02:03:29.360 [DEBUG] [Thread-199847] [transport.py] [_log()] kex follows: False
2026-04-13T02:03:29.361 [DEBUG] [Thread-199847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:03:29.361 [DEBUG] [Thread-199847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:03:29.361 [DEBUG] [Thread-199847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:03:29.361 [DEBUG] [Thread-199847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:03:29.361 [DEBUG] [Thread-199847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:03:29.361 [DEBUG] [Thread-199847] [transport.py] [_log()] Compression: none
2026-04-13T02:03:29.361 [DEBUG] [Thread-199847] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:03:29.380 [DEBUG] [Thread-199847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:03:29.381 [DEBUG] [Thread-199847] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:03:29.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:03:29.382 [DEBUG] [Thread-199847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:03:29.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:03:29.384 [DEBUG] [Thread-199847] [transport.py] [_log()] userauth is OK
2026-04-13T02:03:29.384 [DEBUG] [Thread-199847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:03:29.384 [DEBUG] [Thread-199847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:03:29.384 [DEBUG] [Thread-199847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:03:29.384 [DEBUG] [Thread-199847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:03:29.407 [INFO] [Thread-199847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:03:29.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:03:30.197 [DEBUG] [Thread-199847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:03:30.198 [DEBUG] [Thread-199847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:03:30.199 [DEBUG] [Thread-199847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:03:30.239 [DEBUG] [Thread-199847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:03:30.239 [DEBUG] [Thread-199847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:03:30.243 [DEBUG] [Thread-199847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:03:30.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:03:30.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:03:30.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:03:30.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:03:30.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:03:30.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:03:30.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:03:30.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:03:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:03:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.001835 -999.00  +10.90   5.18     86   +8.80 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 5.2 5.2 219.0 8.0 11.6 -21.6 11.4 -20.5 11.2 -18.5 11.4 -20.5
2026-04-13T02:03:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:03:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:03:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.001835
2026-04-13T02:03:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:03:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:03:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:03:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:03:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:03:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:03:19', tmtdew=3.60318, humidity=78.261, cloud=0.0, wind=8.8938, temperature=11.3872, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:02:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-13T00:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:03:30.269 [DEBUG] [Thread-199847] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:03:30.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:03:30.363 [DEBUG] [Thread-199850] [transport.py] [_log()] starting thread (client mode): 0xae5b4df0
2026-04-13T02:03:30.363 [DEBUG] [Thread-199850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:03:30.378 [DEBUG] [Thread-199850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:03:30.378 [INFO] [Thread-199850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:03:30.387 [DEBUG] [Thread-199850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:03:30.387 [DEBUG] [Thread-199850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:03:30.387 [DEBUG] [Thread-199850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:03:30.387 [DEBUG] [Thread-199850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:03:30.387 [DEBUG] [Thread-199850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:03:30.387 [DEBUG] [Thread-199850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:03:30.387 [DEBUG] [Thread-199850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] client lang: <none>
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] server lang: <none>
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] kex follows: False
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] Compression: none
2026-04-13T02:03:30.388 [DEBUG] [Thread-199850] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:03:30.448 [DEBUG] [Thread-199850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:03:30.448 [DEBUG] [Thread-199850] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:03:30.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:03:30.449 [DEBUG] [Thread-199850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:03:30.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:03:30.511 [DEBUG] [Thread-199850] [transport.py] [_log()] userauth is OK
2026-04-13T02:03:30.511 [DEBUG] [Thread-199850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:03:30.511 [DEBUG] [Thread-199850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:03:30.511 [DEBUG] [Thread-199850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:03:30.511 [DEBUG] [Thread-199850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:03:30.532 [INFO] [Thread-199850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:03:30.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:03:30.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:03:31.364 [DEBUG] [Thread-199850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:03:31.365 [DEBUG] [Thread-199850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:03:31.393 [DEBUG] [Thread-199852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:03:31.412 [DEBUG] [Thread-199850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:03:31.412 [DEBUG] [Thread-199850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:03:31.422 [DEBUG] [Thread-199850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:03:31.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:03:31.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:03:31.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:03:31.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:03:31.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:03:31.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:03:31.458 [DEBUG] [Thread-199850] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:03:43.797 [DEBUG] [Thread-199853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:03:58.859 [DEBUG] [Thread-199854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:04:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:04:01.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:04:01.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:04:02.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 3, 19), 3.60318, 78.261, 0.0, 8.8938, 11.3872, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:04:02.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:03:19
2026-04-13T02:04:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:04:03.245 [DEBUG] [Thread-199855] [transport.py] [_log()] starting thread (client mode): 0xae515ea0
2026-04-13T02:04:03.246 [DEBUG] [Thread-199855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:04:03.265 [DEBUG] [Thread-199855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:04:03.266 [INFO] [Thread-199855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] client lang: <none>
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] server lang: <none>
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] kex follows: False
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:04:03.269 [DEBUG] [Thread-199855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:04:03.270 [DEBUG] [Thread-199855] [transport.py] [_log()] Compression: none
2026-04-13T02:04:03.270 [DEBUG] [Thread-199855] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:04:03.288 [DEBUG] [Thread-199855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:04:03.289 [DEBUG] [Thread-199855] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:04:03.290 [DEBUG] [Thread-199855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:04:03.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:04:03.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:04:03.292 [DEBUG] [Thread-199855] [transport.py] [_log()] userauth is OK
2026-04-13T02:04:03.292 [DEBUG] [Thread-199855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:04:03.292 [DEBUG] [Thread-199855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:04:03.292 [DEBUG] [Thread-199855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:04:03.292 [DEBUG] [Thread-199855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:04:03.316 [INFO] [Thread-199855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:04:03.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:04:04.076 [DEBUG] [Thread-199855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:04:04.076 [DEBUG] [Thread-199855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:04:04.077 [DEBUG] [Thread-199855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:04:04.117 [DEBUG] [Thread-199855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:04:04.117 [DEBUG] [Thread-199855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:04:04.121 [DEBUG] [Thread-199855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:04:04.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:04:04.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:04:04.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:04:04.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:04:04.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:04:04.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:04:04.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:04:04.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:04:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:04:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.002182 -999.00  +11.00   2.69     86   +8.80 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 2.7 2.7 200.9 7.0 11.6 -21.5 11.4 -20.5 11.2 -18.6 11.4 -20.4
2026-04-13T02:04:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:04:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:04:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.002182
2026-04-13T02:04:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:04:04.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:04:04.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:04:04.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:04:04.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:04:04.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:03:19', tmtdew=3.60318, humidity=78.261, cloud=0.0, wind=8.8938, temperature=11.3872, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:03:08.525', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-13T00:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:04:04.148 [DEBUG] [Thread-199855] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:04:04.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:04:04.242 [DEBUG] [Thread-199858] [transport.py] [_log()] starting thread (client mode): 0xb0f54430
2026-04-13T02:04:04.242 [DEBUG] [Thread-199858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:04:04.256 [DEBUG] [Thread-199858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:04:04.256 [INFO] [Thread-199858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] client lang: <none>
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] server lang: <none>
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] kex follows: False
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:04:04.264 [DEBUG] [Thread-199858] [transport.py] [_log()] Compression: none
2026-04-13T02:04:04.265 [DEBUG] [Thread-199858] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:04:04.322 [DEBUG] [Thread-199858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:04:04.323 [DEBUG] [Thread-199858] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:04:04.324 [DEBUG] [Thread-199858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:04:04.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:04:04.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:04:04.379 [DEBUG] [Thread-199858] [transport.py] [_log()] userauth is OK
2026-04-13T02:04:04.379 [DEBUG] [Thread-199858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:04:04.379 [DEBUG] [Thread-199858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:04:04.379 [DEBUG] [Thread-199858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:04:04.379 [DEBUG] [Thread-199858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:04:04.402 [INFO] [Thread-199858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:04:04.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:04:04.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:04:05.252 [DEBUG] [Thread-199858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:04:05.253 [DEBUG] [Thread-199858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:04:05.300 [DEBUG] [Thread-199858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:04:05.300 [DEBUG] [Thread-199858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:04:05.309 [DEBUG] [Thread-199858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:04:05.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:04:05.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:04:05.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:04:05.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:04:05.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:04:05.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:04:05.346 [DEBUG] [Thread-199858] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:04:13.902 [DEBUG] [Thread-199860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:04:17.561 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:04:17.563 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:04:28.954 [DEBUG] [Thread-199861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:04:31.451 [DEBUG] [Thread-199862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:04:35.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:04:35.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:04: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
2026-04-13T02:04:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 3, 56), 3.7304, 77.6117, 0.0, 8.77032, 11.4206, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:04:36.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:03:56
2026-04-13T02:04:37.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:04:37.197 [DEBUG] [Thread-199863] [transport.py] [_log()] starting thread (client mode): 0xae5158d0
2026-04-13T02:04:37.197 [DEBUG] [Thread-199863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:04:37.217 [DEBUG] [Thread-199863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:04:37.217 [INFO] [Thread-199863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] client lang: <none>
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] server lang: <none>
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] kex follows: False
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:04:37.218 [DEBUG] [Thread-199863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:04:37.219 [DEBUG] [Thread-199863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:04:37.219 [DEBUG] [Thread-199863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:04:37.219 [DEBUG] [Thread-199863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:04:37.219 [DEBUG] [Thread-199863] [transport.py] [_log()] Compression: none
2026-04-13T02:04:37.219 [DEBUG] [Thread-199863] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:04:37.227 [DEBUG] [Thread-199863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:04:37.228 [DEBUG] [Thread-199863] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:04:37.228 [DEBUG] [Thread-199863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:04:37.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:04:37.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:04:37.231 [DEBUG] [Thread-199863] [transport.py] [_log()] userauth is OK
2026-04-13T02:04:37.231 [DEBUG] [Thread-199863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:04:37.231 [DEBUG] [Thread-199863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:04:37.231 [DEBUG] [Thread-199863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:04:37.232 [DEBUG] [Thread-199863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:04:37.246 [INFO] [Thread-199863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:04:37.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:04:38.029 [DEBUG] [Thread-199863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:04:38.029 [DEBUG] [Thread-199863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:04:38.029 [DEBUG] [Thread-199863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:04:38.070 [DEBUG] [Thread-199863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:04:38.070 [DEBUG] [Thread-199863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:04:38.073 [DEBUG] [Thread-199863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:04:38.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:04:38.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:04:38.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:04:38.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:04:38.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:04:38.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:04:38.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:04:38.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:04:38.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:04:38.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.002529 -999.00  +11.00   2.48     86   +8.70 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 2.5 2.5 240.9 7.0 11.6 -21.5 11.4 -20.6 11.2 -18.7 11.5 -20.6
2026-04-13T02:04:38.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:04:38.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:04:38.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.002529
2026-04-13T02:04:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:04:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:04:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:04:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:04:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:04:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:03:56', tmtdew=3.7304, humidity=77.6117, cloud=0.0, wind=8.77032, temperature=11.4206, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:03:38.506', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-13T00:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:04:38.096 [DEBUG] [Thread-199863] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:04:38.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:04:38.193 [DEBUG] [Thread-199866] [transport.py] [_log()] starting thread (client mode): 0xae516c50
2026-04-13T02:04:38.193 [DEBUG] [Thread-199866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:04:38.208 [DEBUG] [Thread-199866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:04:38.208 [INFO] [Thread-199866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:04:38.216 [DEBUG] [Thread-199866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:04:38.216 [DEBUG] [Thread-199866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:04:38.217 [DEBUG] [Thread-199866] [transport.py] [_log()] client lang: <none>
2026-04-13T02:04:38.218 [DEBUG] [Thread-199866] [transport.py] [_log()] server lang: <none>
2026-04-13T02:04:38.218 [DEBUG] [Thread-199866] [transport.py] [_log()] kex follows: False
2026-04-13T02:04:38.218 [DEBUG] [Thread-199866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:04:38.218 [DEBUG] [Thread-199866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:04:38.218 [DEBUG] [Thread-199866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:04:38.218 [DEBUG] [Thread-199866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:04:38.218 [DEBUG] [Thread-199866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:04:38.219 [DEBUG] [Thread-199866] [transport.py] [_log()] Compression: none
2026-04-13T02:04:38.219 [DEBUG] [Thread-199866] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:04:38.275 [DEBUG] [Thread-199866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:04:38.275 [DEBUG] [Thread-199866] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:04:38.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:04:38.277 [DEBUG] [Thread-199866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:04:38.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:04:38.331 [DEBUG] [Thread-199866] [transport.py] [_log()] userauth is OK
2026-04-13T02:04:38.331 [DEBUG] [Thread-199866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:04:38.331 [DEBUG] [Thread-199866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:04:38.331 [DEBUG] [Thread-199866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:04:38.331 [DEBUG] [Thread-199866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:04:38.350 [INFO] [Thread-199866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:04:38.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:04:38.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:04:39.171 [DEBUG] [Thread-199866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:04:39.171 [DEBUG] [Thread-199866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:04:39.221 [DEBUG] [Thread-199866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:04:39.221 [DEBUG] [Thread-199866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:04:39.231 [DEBUG] [Thread-199866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:04:39.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:04:39.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:04:39.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:04:39.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:04:39.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:04:39.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:04:39.268 [DEBUG] [Thread-199866] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:04:43.993 [DEBUG] [Thread-199868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:04:59.045 [DEBUG] [Thread-199869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:05:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:05:09.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:05:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:05:10.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 4, 31), 3.748, 77.5122, 0.0, 8.52336, 11.3875, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:05:10.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:04:31
2026-04-13T02:05:10.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:05:11.153 [DEBUG] [Thread-199870] [transport.py] [_log()] starting thread (client mode): 0xae514e80
2026-04-13T02:05:11.153 [DEBUG] [Thread-199870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:05:11.176 [DEBUG] [Thread-199870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:05:11.176 [INFO] [Thread-199870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:05:11.179 [DEBUG] [Thread-199870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:05:11.179 [DEBUG] [Thread-199870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:05:11.179 [DEBUG] [Thread-199870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:05:11.179 [DEBUG] [Thread-199870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] client lang: <none>
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] server lang: <none>
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] kex follows: False
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:05:11.180 [DEBUG] [Thread-199870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:05:11.181 [DEBUG] [Thread-199870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:05:11.181 [DEBUG] [Thread-199870] [transport.py] [_log()] Compression: none
2026-04-13T02:05:11.181 [DEBUG] [Thread-199870] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:05:11.191 [DEBUG] [Thread-199870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:05:11.191 [DEBUG] [Thread-199870] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:05:11.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:05:11.193 [DEBUG] [Thread-199870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:05:11.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:05:11.194 [DEBUG] [Thread-199870] [transport.py] [_log()] userauth is OK
2026-04-13T02:05:11.195 [DEBUG] [Thread-199870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:05:11.195 [DEBUG] [Thread-199870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:05:11.195 [DEBUG] [Thread-199870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:05:11.195 [DEBUG] [Thread-199870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:05:11.222 [INFO] [Thread-199870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:05:11.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:05:12.449 [DEBUG] [Thread-199870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:05:12.450 [DEBUG] [Thread-199870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:05:12.450 [DEBUG] [Thread-199870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:05:12.490 [DEBUG] [Thread-199870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:05:12.490 [DEBUG] [Thread-199870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:05:12.494 [DEBUG] [Thread-199870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:05:12.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:05:12.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:05:12.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:05:12.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:05:12.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:05:12.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:05:12.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:05:12.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:05:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:05:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.002876 -999.00  +11.00   2.35     86   +8.80 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 2.4 2.4 154.5 5.9 11.6 -21.7 11.4 -20.6 11.2 -18.7 11.4 -20.6
2026-04-13T02:05:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:05:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:05:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.002876
2026-04-13T02:05:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:05:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:05:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:05:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:05:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:05:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:04:31', tmtdew=3.748, humidity=77.5122, cloud=0.0, wind=8.52336, temperature=11.3875, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:04:08.486', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-13T00:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:05:12.526 [DEBUG] [Thread-199870] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:05:12.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:05:12.621 [DEBUG] [Thread-199873] [transport.py] [_log()] starting thread (client mode): 0xae516ef0
2026-04-13T02:05:12.621 [DEBUG] [Thread-199873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:05:12.636 [DEBUG] [Thread-199873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:05:12.636 [INFO] [Thread-199873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] client lang: <none>
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] server lang: <none>
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] kex follows: False
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:05:12.644 [DEBUG] [Thread-199873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:05:12.645 [DEBUG] [Thread-199873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:05:12.645 [DEBUG] [Thread-199873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:05:12.645 [DEBUG] [Thread-199873] [transport.py] [_log()] Compression: none
2026-04-13T02:05:12.645 [DEBUG] [Thread-199873] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:05:12.702 [DEBUG] [Thread-199873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:05:12.703 [DEBUG] [Thread-199873] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:05:12.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:05:12.704 [DEBUG] [Thread-199873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:05:12.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:05:12.758 [DEBUG] [Thread-199873] [transport.py] [_log()] userauth is OK
2026-04-13T02:05:12.759 [DEBUG] [Thread-199873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:05:12.759 [DEBUG] [Thread-199873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:05:12.759 [DEBUG] [Thread-199873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:05:12.759 [DEBUG] [Thread-199873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:05:12.778 [INFO] [Thread-199873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:05:12.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:05:12.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:05:13.614 [DEBUG] [Thread-199873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:05:13.614 [DEBUG] [Thread-199873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:05:13.663 [DEBUG] [Thread-199873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:05:13.663 [DEBUG] [Thread-199873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:05:13.673 [DEBUG] [Thread-199873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:05:13.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:05:13.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:05:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:05:13.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:05:13.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:05:13.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:05:13.711 [DEBUG] [Thread-199873] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:05:14.086 [DEBUG] [Thread-199875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:05:17.769 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:05:17.770 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:05:29.144 [DEBUG] [Thread-199876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:05:31.519 [DEBUG] [Thread-199877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:05:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:05:43.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:05:43.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:05:44.183 [DEBUG] [Thread-199878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:05:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 5, 7), 3.74008, 77.562, 0.0, 8.32932, 11.4373, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:05:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:05:07
2026-04-13T02:05:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:05:45.592 [DEBUG] [Thread-199879] [transport.py] [_log()] starting thread (client mode): 0xae515150
2026-04-13T02:05:45.592 [DEBUG] [Thread-199879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:05:45.611 [DEBUG] [Thread-199879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:05:45.611 [INFO] [Thread-199879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] client lang: <none>
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] server lang: <none>
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] kex follows: False
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] Compression: none
2026-04-13T02:05:45.614 [DEBUG] [Thread-199879] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:05:45.631 [DEBUG] [Thread-199879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:05:45.631 [DEBUG] [Thread-199879] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:05:45.632 [DEBUG] [Thread-199879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:05:45.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:05:45.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:05:45.634 [DEBUG] [Thread-199879] [transport.py] [_log()] userauth is OK
2026-04-13T02:05:45.634 [DEBUG] [Thread-199879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:05:45.634 [DEBUG] [Thread-199879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:05:45.634 [DEBUG] [Thread-199879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:05:45.635 [DEBUG] [Thread-199879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:05:45.659 [INFO] [Thread-199879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:05:45.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:05:46.447 [DEBUG] [Thread-199879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:05:46.447 [DEBUG] [Thread-199879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:05:46.448 [DEBUG] [Thread-199879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:05:46.488 [DEBUG] [Thread-199879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:05:46.488 [DEBUG] [Thread-199879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:05:46.491 [DEBUG] [Thread-199879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:05:46.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:05:46.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:05:46.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:05:46.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:05:46.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:05:46.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:05:46.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:05:46.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:05:46.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:05:46.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.003570 -999.00  +11.00   3.72     85   +8.70 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 3.7 3.7 206.8 7.6 11.6 -21.6 11.4 -20.6 11.2 -18.7 11.4 -20.4
2026-04-13T02:05:46.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:05:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:05:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.003570
2026-04-13T02:05:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:05:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:05:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:05:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:05:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:05:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:05:07', tmtdew=3.74008, humidity=77.562, cloud=0.0, wind=8.32932, temperature=11.4373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:05:08.448', atlas_cloud=2, atlas_rain=1, zp_data=[1.3797499999999996, 1.5092500000000006, 0.9252500000000001, nan, nan, nan, 0.21699999999999875, nan, nan, nan, 0.6637500000000003, 1.673, nan, nan, 0.09600000000000009, nan, 1.9312499999999995, 1.6524999999999999, 0.3879999999999999, 0.8842499999999989, 1.9459999999999988, 2.526749999999999, 1.2302500000000007, nan, 1.8989999999999991, 0.11850000000000094, 0.0807500000000001, 0.034000000000000696, 0.15300000000000047, 0.27800000000000136, 0.5690000000000008, 1.493500000000001, 0.3077499999999995], zp_timestamp='2026-04-13T00:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:05:46.510 [DEBUG] [Thread-199879] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:05:46.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:05:46.601 [DEBUG] [Thread-199882] [transport.py] [_log()] starting thread (client mode): 0xae517250
2026-04-13T02:05:46.601 [DEBUG] [Thread-199882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:05:46.617 [DEBUG] [Thread-199882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:05:46.617 [INFO] [Thread-199882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:05:46.624 [DEBUG] [Thread-199882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] client lang: <none>
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] server lang: <none>
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] kex follows: False
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] Compression: none
2026-04-13T02:05:46.625 [DEBUG] [Thread-199882] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:05:46.682 [DEBUG] [Thread-199882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:05:46.683 [DEBUG] [Thread-199882] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:05:46.683 [DEBUG] [Thread-199882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:05:46.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:05:46.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:05:46.742 [DEBUG] [Thread-199882] [transport.py] [_log()] userauth is OK
2026-04-13T02:05:46.742 [DEBUG] [Thread-199882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:05:46.742 [DEBUG] [Thread-199882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:05:46.742 [DEBUG] [Thread-199882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:05:46.742 [DEBUG] [Thread-199882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:05:46.761 [INFO] [Thread-199882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:05:46.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:05:46.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:05:47.614 [DEBUG] [Thread-199882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:05:47.615 [DEBUG] [Thread-199882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:05:47.663 [DEBUG] [Thread-199882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:05:47.663 [DEBUG] [Thread-199882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:05:47.672 [DEBUG] [Thread-199882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:05:47.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:05:47.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:05:47.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
2026-04-13T02:05:47.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:05:47.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:05:47.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:05:47.708 [DEBUG] [Thread-199882] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:05:59.220 [DEBUG] [Thread-199884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:06:14.283 [DEBUG] [Thread-199885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:06:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:06:17.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:06:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:06:17.974 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:06:17.976 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:06:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 5, 42), 3.47311, 79.1571, 0.0, 9.49392, 11.4413, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:06:19.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:05:42
2026-04-13T02:06:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:06:19.608 [DEBUG] [Thread-199886] [transport.py] [_log()] starting thread (client mode): 0xae52f4c0
2026-04-13T02:06:19.608 [DEBUG] [Thread-199886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:06:19.628 [DEBUG] [Thread-199886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:06:19.629 [INFO] [Thread-199886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] client lang: <none>
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] server lang: <none>
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] kex follows: False
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:06:19.632 [DEBUG] [Thread-199886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:06:19.633 [DEBUG] [Thread-199886] [transport.py] [_log()] Compression: none
2026-04-13T02:06:19.633 [DEBUG] [Thread-199886] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:06:19.649 [DEBUG] [Thread-199886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:06:19.650 [DEBUG] [Thread-199886] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:06:19.651 [DEBUG] [Thread-199886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:06:19.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:06:19.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:06:19.653 [DEBUG] [Thread-199886] [transport.py] [_log()] userauth is OK
2026-04-13T02:06:19.653 [DEBUG] [Thread-199886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:06:19.653 [DEBUG] [Thread-199886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:06:19.653 [DEBUG] [Thread-199886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:06:19.653 [DEBUG] [Thread-199886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:06:19.689 [INFO] [Thread-199886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:06:19.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:06:20.420 [DEBUG] [Thread-199886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:06:20.420 [DEBUG] [Thread-199886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:06:20.420 [DEBUG] [Thread-199886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:06:20.461 [DEBUG] [Thread-199886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:06:20.461 [DEBUG] [Thread-199886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:06:20.465 [DEBUG] [Thread-199886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:06:20.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:06:20.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:06:20.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:06:20.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:06:20.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:06:20.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:06:20.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:06:20.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:06:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:06:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.003918 -999.00  +11.00   3.63     85   +8.70 1 2 1 2 1     0    0 -999.00 0.00 ZneS. 3.6 3.6 256.8 7.2 11.6 -21.4 11.4 -20.6 11.2 -18.8 11.5 -20.6
2026-04-13T02:06:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:06:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:06:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.003918
2026-04-13T02:06:20.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:06:20.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:06:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:06:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:06:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:06:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:05:42', tmtdew=3.47311, humidity=79.1571, cloud=0.0, wind=9.49392, temperature=11.4413, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:05:38.515', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:06:20.494 [DEBUG] [Thread-199886] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:06:20.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:06:20.593 [DEBUG] [Thread-199889] [transport.py] [_log()] starting thread (client mode): 0xae52e140
2026-04-13T02:06:20.593 [DEBUG] [Thread-199889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:06:20.608 [DEBUG] [Thread-199889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:06:20.608 [INFO] [Thread-199889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] client lang: <none>
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] server lang: <none>
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] kex follows: False
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] Compression: none
2026-04-13T02:06:20.616 [DEBUG] [Thread-199889] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:06:20.674 [DEBUG] [Thread-199889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:06:20.674 [DEBUG] [Thread-199889] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:06:20.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:06:20.675 [DEBUG] [Thread-199889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:06:20.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:06:20.735 [DEBUG] [Thread-199889] [transport.py] [_log()] userauth is OK
2026-04-13T02:06:20.735 [DEBUG] [Thread-199889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:06:20.735 [DEBUG] [Thread-199889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:06:20.736 [DEBUG] [Thread-199889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:06:20.736 [DEBUG] [Thread-199889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:06:20.755 [INFO] [Thread-199889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:06:20.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:06:20.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:06:21.597 [DEBUG] [Thread-199889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:06:21.597 [DEBUG] [Thread-199889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:06:21.645 [DEBUG] [Thread-199889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:06:21.645 [DEBUG] [Thread-199889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:06:21.654 [DEBUG] [Thread-199889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:06:21.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:06:21.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:06:21.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:06:21.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:06:21.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:06:21.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:06:21.690 [DEBUG] [Thread-199889] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:06:29.317 [DEBUG] [Thread-199891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:06:31.582 [DEBUG] [Thread-199892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:06:44.361 [DEBUG] [Thread-199893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:06:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:06:51.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:06:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:06:52.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 6, 18), 3.72688, 77.6283, 0.0, 8.6292, 11.4041, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:06:52.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:06:18
2026-04-13T02:06:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:06:53.519 [DEBUG] [Thread-199894] [transport.py] [_log()] starting thread (client mode): 0xae514c70
2026-04-13T02:06:53.519 [DEBUG] [Thread-199894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:06:53.539 [DEBUG] [Thread-199894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:06:53.539 [INFO] [Thread-199894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:06:53.542 [DEBUG] [Thread-199894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:06:53.542 [DEBUG] [Thread-199894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:06:53.542 [DEBUG] [Thread-199894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:06:53.542 [DEBUG] [Thread-199894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:53.542 [DEBUG] [Thread-199894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] client lang: <none>
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] server lang: <none>
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] kex follows: False
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] Compression: none
2026-04-13T02:06:53.543 [DEBUG] [Thread-199894] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:06:53.560 [DEBUG] [Thread-199894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:06:53.561 [DEBUG] [Thread-199894] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:06:53.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:06:53.561 [DEBUG] [Thread-199894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:06:53.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:06:53.604 [DEBUG] [Thread-199894] [transport.py] [_log()] userauth is OK
2026-04-13T02:06:53.604 [DEBUG] [Thread-199894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:06:53.604 [DEBUG] [Thread-199894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:06:53.605 [DEBUG] [Thread-199894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:06:53.605 [DEBUG] [Thread-199894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:06:53.628 [INFO] [Thread-199894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:06:53.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:06:54.409 [DEBUG] [Thread-199894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:06:54.410 [DEBUG] [Thread-199894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:06:54.410 [DEBUG] [Thread-199894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:06:54.451 [DEBUG] [Thread-199894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:06:54.451 [DEBUG] [Thread-199894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:06:54.455 [DEBUG] [Thread-199894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:06:54.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:06:54.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:06:54.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:06:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:06:54.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:06:54.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:06:54.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:06:54.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:06:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:06:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.004265 -999.00  +11.00   4.20     86   +8.70 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 4.2 4.2 204.4 6.4 11.6 -21.7 11.4 -20.6 11.2 -18.7 11.4 -20.6
2026-04-13T02:06:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:06:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:06:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.004265
2026-04-13T02:06:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:06:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:06:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:06:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:06:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:06:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:06:18', tmtdew=3.72688, humidity=77.6283, cloud=0.0, wind=8.6292, temperature=11.4041, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:06:08.496', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:06:54.479 [DEBUG] [Thread-199894] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:06:54.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:06:54.574 [DEBUG] [Thread-199897] [transport.py] [_log()] starting thread (client mode): 0xae516080
2026-04-13T02:06:54.575 [DEBUG] [Thread-199897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:06:54.594 [DEBUG] [Thread-199897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:06:54.594 [INFO] [Thread-199897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:06:54.601 [DEBUG] [Thread-199897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] client lang: <none>
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] server lang: <none>
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] kex follows: False
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:06:54.602 [DEBUG] [Thread-199897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:06:54.603 [DEBUG] [Thread-199897] [transport.py] [_log()] Compression: none
2026-04-13T02:06:54.603 [DEBUG] [Thread-199897] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:06:54.661 [DEBUG] [Thread-199897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:06:54.661 [DEBUG] [Thread-199897] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:06:54.661 [DEBUG] [Thread-199897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:06:54.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:06:54.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:06:54.719 [DEBUG] [Thread-199897] [transport.py] [_log()] userauth is OK
2026-04-13T02:06:54.719 [DEBUG] [Thread-199897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:06:54.719 [DEBUG] [Thread-199897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:06:54.719 [DEBUG] [Thread-199897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:06:54.719 [DEBUG] [Thread-199897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:06:54.742 [INFO] [Thread-199897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:06:54.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:06:54.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:06:55.566 [DEBUG] [Thread-199897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:06:55.566 [DEBUG] [Thread-199897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:06:55.614 [DEBUG] [Thread-199897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:06:55.614 [DEBUG] [Thread-199897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:06:55.623 [DEBUG] [Thread-199897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:06:55.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:06:55.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:06:55.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:06:55.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:06:55.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:06:55.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:06:55.657 [DEBUG] [Thread-199897] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:06:59.396 [DEBUG] [Thread-199899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:14.445 [DEBUG] [Thread-199900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:18.181 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:18.182 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:07:25.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:07:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:07:26.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 6, 53), 3.45376, 79.2567, 0.0, 10.0937, 11.4082, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:07:26.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:06:53
2026-04-13T02:07:27.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:07:27.462 [DEBUG] [Thread-199901] [transport.py] [_log()] starting thread (client mode): 0xa795be80
2026-04-13T02:07:27.462 [DEBUG] [Thread-199901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:07:27.476 [DEBUG] [Thread-199901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:07:27.476 [INFO] [Thread-199901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:07:27.479 [DEBUG] [Thread-199901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:07:27.479 [DEBUG] [Thread-199901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:07:27.479 [DEBUG] [Thread-199901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:07:27.479 [DEBUG] [Thread-199901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] client lang: <none>
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] server lang: <none>
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] kex follows: False
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] Compression: none
2026-04-13T02:07:27.480 [DEBUG] [Thread-199901] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:07:27.498 [DEBUG] [Thread-199901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:07:27.499 [DEBUG] [Thread-199901] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:07:27.500 [DEBUG] [Thread-199901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:07:27.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:07:27.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:07:27.501 [DEBUG] [Thread-199901] [transport.py] [_log()] userauth is OK
2026-04-13T02:07:27.502 [DEBUG] [Thread-199901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:07:27.502 [DEBUG] [Thread-199901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:07:27.502 [DEBUG] [Thread-199901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:07:27.502 [DEBUG] [Thread-199901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:07:27.526 [INFO] [Thread-199901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:07:27.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:07:28.311 [DEBUG] [Thread-199901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:07:28.311 [DEBUG] [Thread-199901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:07:28.311 [DEBUG] [Thread-199901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:07:28.352 [DEBUG] [Thread-199901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:07:28.352 [DEBUG] [Thread-199901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:07:28.355 [DEBUG] [Thread-199901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:07:28.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:07:28.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:07:28.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:07:28.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:07:28.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:07:28.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:07:28.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:07:28.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:07:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:07:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.004612 -999.00  +11.00   4.74     86   +8.80 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 4.7 4.7 232.9 6.7 11.6 -21.7 11.5 -20.7 11.2 -18.7 11.5 -20.8
2026-04-13T02:07:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:07:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:07:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.004612
2026-04-13T02:07:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:07:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:07:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:07:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:07:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:07:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:06:53', tmtdew=3.45376, humidity=79.2567, cloud=0.0, wind=10.0937, temperature=11.4082, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:06:38.477', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:07:28.382 [DEBUG] [Thread-199901] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:07:28.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:07:28.475 [DEBUG] [Thread-199904] [transport.py] [_log()] starting thread (client mode): 0xa79597b0
2026-04-13T02:07:28.476 [DEBUG] [Thread-199904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:07:28.490 [DEBUG] [Thread-199904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:07:28.490 [INFO] [Thread-199904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] client lang: <none>
2026-04-13T02:07:28.498 [DEBUG] [Thread-199904] [transport.py] [_log()] server lang: <none>
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] kex follows: False
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] Compression: none
2026-04-13T02:07:28.499 [DEBUG] [Thread-199904] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:07:28.557 [DEBUG] [Thread-199904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:07:28.558 [DEBUG] [Thread-199904] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:07:28.567 [DEBUG] [Thread-199904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:07:28.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:07:28.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:07:28.614 [DEBUG] [Thread-199904] [transport.py] [_log()] userauth is OK
2026-04-13T02:07:28.614 [DEBUG] [Thread-199904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:07:28.614 [DEBUG] [Thread-199904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:07:28.614 [DEBUG] [Thread-199904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:07:28.615 [DEBUG] [Thread-199904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:07:28.638 [INFO] [Thread-199904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:07:28.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:07:28.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:07:29.478 [DEBUG] [Thread-199904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:07:29.479 [DEBUG] [Thread-199904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:07:29.483 [DEBUG] [Thread-199906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:29.530 [DEBUG] [Thread-199904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:07:29.530 [DEBUG] [Thread-199904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:07:29.539 [DEBUG] [Thread-199904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:07:29.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:07:29.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:07:29.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:07:29.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:07:29.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:07:29.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:07:29.575 [DEBUG] [Thread-199904] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:07:31.637 [DEBUG] [Thread-199907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:44.536 [DEBUG] [Thread-199908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:59.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:07:59.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:07:59.584 [DEBUG] [Thread-199909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:07:59.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:08:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 7, 29), 3.60888, 78.2279, 0.0, 10.3763, 11.4207, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:08:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:07:29
2026-04-13T02:08:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:08:01.432 [DEBUG] [Thread-199910] [transport.py] [_log()] starting thread (client mode): 0xa7958cd0
2026-04-13T02:08:01.432 [DEBUG] [Thread-199910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:08:01.445 [DEBUG] [Thread-199910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:08:01.445 [INFO] [Thread-199910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:08:01.448 [DEBUG] [Thread-199910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:08:01.448 [DEBUG] [Thread-199910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:08:01.448 [DEBUG] [Thread-199910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:08:01.448 [DEBUG] [Thread-199910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:01.448 [DEBUG] [Thread-199910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:01.448 [DEBUG] [Thread-199910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:01.448 [DEBUG] [Thread-199910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] client lang: <none>
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] server lang: <none>
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] kex follows: False
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] Compression: none
2026-04-13T02:08:01.449 [DEBUG] [Thread-199910] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:08:01.466 [DEBUG] [Thread-199910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:08:01.466 [DEBUG] [Thread-199910] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:08:01.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:08:01.466 [DEBUG] [Thread-199910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:08:01.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:08:01.467 [DEBUG] [Thread-199910] [transport.py] [_log()] userauth is OK
2026-04-13T02:08:01.467 [DEBUG] [Thread-199910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:08:01.467 [DEBUG] [Thread-199910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:08:01.467 [DEBUG] [Thread-199910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:08:01.467 [DEBUG] [Thread-199910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:08:01.482 [INFO] [Thread-199910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:08:01.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:08:02.288 [DEBUG] [Thread-199910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:08:02.288 [DEBUG] [Thread-199910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:08:02.289 [DEBUG] [Thread-199910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:08:02.329 [DEBUG] [Thread-199910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:08:02.330 [DEBUG] [Thread-199910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:08:02.333 [DEBUG] [Thread-199910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:08:02.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:08:02.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:08:02.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:08:02.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:08:02.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:08:02.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:08:02.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:08:02.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:08:02.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:08:02.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.004959 -999.00  +10.90   4.58     86   +8.80 1 2 1 2 1     0    0 -999.00 0.00 zN.S. 4.6 4.6 189.2 5.9 11.6 -21.7 11.4 -20.7 11.2 -18.8 11.4 -20.9
2026-04-13T02:08:02.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:08:02.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:08:02.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.004959
2026-04-13T02:08:02.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:08:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:08:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:08:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:08:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:08:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:07:29', tmtdew=3.60888, humidity=78.2279, cloud=0.0, wind=10.3763, temperature=11.4207, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:07:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:08:02.361 [DEBUG] [Thread-199910] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:08:02.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:08:02.455 [DEBUG] [Thread-199913] [transport.py] [_log()] starting thread (client mode): 0xb0fe8d60
2026-04-13T02:08:02.455 [DEBUG] [Thread-199913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:08:02.469 [DEBUG] [Thread-199913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:08:02.469 [INFO] [Thread-199913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] client lang: <none>
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] server lang: <none>
2026-04-13T02:08:02.477 [DEBUG] [Thread-199913] [transport.py] [_log()] kex follows: False
2026-04-13T02:08:02.478 [DEBUG] [Thread-199913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:08:02.478 [DEBUG] [Thread-199913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:08:02.478 [DEBUG] [Thread-199913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:08:02.478 [DEBUG] [Thread-199913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:08:02.478 [DEBUG] [Thread-199913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:08:02.478 [DEBUG] [Thread-199913] [transport.py] [_log()] Compression: none
2026-04-13T02:08:02.478 [DEBUG] [Thread-199913] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:08:02.536 [DEBUG] [Thread-199913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:08:02.536 [DEBUG] [Thread-199913] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:08:02.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:08:02.537 [DEBUG] [Thread-199913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:08:02.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:08:02.593 [DEBUG] [Thread-199913] [transport.py] [_log()] userauth is OK
2026-04-13T02:08:02.594 [DEBUG] [Thread-199913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:08:02.594 [DEBUG] [Thread-199913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:08:02.594 [DEBUG] [Thread-199913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:08:02.594 [DEBUG] [Thread-199913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:08:02.613 [INFO] [Thread-199913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:08:02.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:08:02.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:08:03.446 [DEBUG] [Thread-199913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:08:03.446 [DEBUG] [Thread-199913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:08:03.494 [DEBUG] [Thread-199913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:08:03.494 [DEBUG] [Thread-199913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:08:03.503 [DEBUG] [Thread-199913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:08:03.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:08:03.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:08:03.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:08:03.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:08:03.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:08:03.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:08:03.540 [DEBUG] [Thread-199913] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:08:14.620 [DEBUG] [Thread-199915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:08:18.389 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:08:18.390 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:08:29.677 [DEBUG] [Thread-199916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:08:31.704 [DEBUG] [Thread-199917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:08:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:08:33.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:08:33.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:08:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 8, 4), 3.58477, 78.3606, 0.0, 10.0235, 11.4373, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:08:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:08:04
2026-04-13T02:08:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:08:35.437 [DEBUG] [Thread-199918] [transport.py] [_log()] starting thread (client mode): 0xa7959660
2026-04-13T02:08:35.437 [DEBUG] [Thread-199918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:08:35.456 [DEBUG] [Thread-199918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:08:35.456 [INFO] [Thread-199918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] client lang: <none>
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] server lang: <none>
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] kex follows: False
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] Compression: none
2026-04-13T02:08:35.460 [DEBUG] [Thread-199918] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:08:35.477 [DEBUG] [Thread-199918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:08:35.478 [DEBUG] [Thread-199918] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:08:35.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:08:35.479 [DEBUG] [Thread-199918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:08:35.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:08:35.481 [DEBUG] [Thread-199918] [transport.py] [_log()] userauth is OK
2026-04-13T02:08:35.481 [DEBUG] [Thread-199918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:08:35.481 [DEBUG] [Thread-199918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:08:35.481 [DEBUG] [Thread-199918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:08:35.482 [DEBUG] [Thread-199918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:08:35.506 [INFO] [Thread-199918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:08:35.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:08:36.276 [DEBUG] [Thread-199918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:08:36.276 [DEBUG] [Thread-199918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:08:36.277 [DEBUG] [Thread-199918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:08:36.317 [DEBUG] [Thread-199918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:08:36.317 [DEBUG] [Thread-199918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:08:36.321 [DEBUG] [Thread-199918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:08:36.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:08:36.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:08:36.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:08:36.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:08:36.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:08:36.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:08:36.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.005307 -999.00  +10.90   2.93     87   +8.90 1 2 1 2 1     0    0 -999.00 0.00 zN.S. 2.9 2.9 233.5 8.2 11.6 -21.7 11.4 -20.7 11.2 -18.7 11.4 -20.6
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.005307
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:08:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:08:04', tmtdew=3.58477, humidity=78.3606, cloud=0.0, wind=10.0235, temperature=11.4373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:07:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:08:36.352 [DEBUG] [Thread-199918] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:08:36.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:08:36.437 [DEBUG] [Thread-199921] [transport.py] [_log()] starting thread (client mode): 0xae52e4a0
2026-04-13T02:08:36.437 [DEBUG] [Thread-199921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:08:36.451 [DEBUG] [Thread-199921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:08:36.451 [INFO] [Thread-199921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:08:36.459 [DEBUG] [Thread-199921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:08:36.459 [DEBUG] [Thread-199921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:08:36.459 [DEBUG] [Thread-199921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] client lang: <none>
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] server lang: <none>
2026-04-13T02:08:36.460 [DEBUG] [Thread-199921] [transport.py] [_log()] kex follows: False
2026-04-13T02:08:36.461 [DEBUG] [Thread-199921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:08:36.461 [DEBUG] [Thread-199921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:08:36.461 [DEBUG] [Thread-199921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:08:36.461 [DEBUG] [Thread-199921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:08:36.461 [DEBUG] [Thread-199921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:08:36.461 [DEBUG] [Thread-199921] [transport.py] [_log()] Compression: none
2026-04-13T02:08:36.461 [DEBUG] [Thread-199921] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:08:36.517 [DEBUG] [Thread-199921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:08:36.518 [DEBUG] [Thread-199921] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:08:36.518 [DEBUG] [Thread-199921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:08:36.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:08:36.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:08:36.573 [DEBUG] [Thread-199921] [transport.py] [_log()] userauth is OK
2026-04-13T02:08:36.574 [DEBUG] [Thread-199921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:08:36.574 [DEBUG] [Thread-199921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:08:36.574 [DEBUG] [Thread-199921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:08:36.574 [DEBUG] [Thread-199921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:08:36.593 [INFO] [Thread-199921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:08:36.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:08:36.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:08:37.467 [DEBUG] [Thread-199921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:08:37.468 [DEBUG] [Thread-199921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:08:37.515 [DEBUG] [Thread-199921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:08:37.516 [DEBUG] [Thread-199921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:08:37.525 [DEBUG] [Thread-199921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:08:37.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:08:37.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:08:37.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:08:37.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:08:37.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:08:37.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:08:37.564 [DEBUG] [Thread-199921] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:08:44.713 [DEBUG] [Thread-199923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:08:59.770 [DEBUG] [Thread-199924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:09:07.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:09:07.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:09:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:09:08.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 8, 40), 3.33452, 79.9203, 0.0, 11.2579, 11.5409, 0, 0, 0, 2, 0, 0),)
2026-04-13T02:09:08.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:08:40
2026-04-13T02:09:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:09:09.415 [DEBUG] [Thread-199925] [transport.py] [_log()] starting thread (client mode): 0xae5178e0
2026-04-13T02:09:09.415 [DEBUG] [Thread-199925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:09:09.434 [DEBUG] [Thread-199925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:09:09.435 [INFO] [Thread-199925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] client lang: <none>
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] server lang: <none>
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] kex follows: False
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:09:09.438 [DEBUG] [Thread-199925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:09:09.439 [DEBUG] [Thread-199925] [transport.py] [_log()] Compression: none
2026-04-13T02:09:09.439 [DEBUG] [Thread-199925] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:09:09.455 [DEBUG] [Thread-199925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:09:09.456 [DEBUG] [Thread-199925] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:09:09.456 [DEBUG] [Thread-199925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:09:09.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:09:09.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:09:09.501 [DEBUG] [Thread-199925] [transport.py] [_log()] userauth is OK
2026-04-13T02:09:09.501 [DEBUG] [Thread-199925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:09:09.501 [DEBUG] [Thread-199925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:09:09.501 [DEBUG] [Thread-199925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:09:09.501 [DEBUG] [Thread-199925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:09:09.523 [INFO] [Thread-199925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:09:09.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:09:10.307 [DEBUG] [Thread-199925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:09:10.307 [DEBUG] [Thread-199925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:09:10.308 [DEBUG] [Thread-199925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:09:10.348 [DEBUG] [Thread-199925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:09:10.348 [DEBUG] [Thread-199925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:09:10.352 [DEBUG] [Thread-199925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:09:10.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:09:10.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:09:10.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:09:10.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:09:10.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:09:10.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:09:10.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:09:10.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:09:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:09:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.006001 -999.00  +10.90   6.45     87   +9.00 1 2 1 2 1     0    0 -999.00 0.00 ZN.S. 6.5 6.5 210.0 7.4 11.6 -21.8 11.4 -20.8 11.1 -18.7 11.4 -20.7
2026-04-13T02:09:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:09:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:09:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.006001
2026-04-13T02:09:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:09:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:09:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:09:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:09:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:09:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:08:40', tmtdew=3.33452, humidity=79.9203, cloud=0.0, wind=11.2579, temperature=11.5409, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:08:38.486', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:09:10.381 [DEBUG] [Thread-199925] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:09:10.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:09:10.470 [DEBUG] [Thread-199928] [transport.py] [_log()] starting thread (client mode): 0xae5f0640
2026-04-13T02:09:10.470 [DEBUG] [Thread-199928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:09:10.485 [DEBUG] [Thread-199928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:09:10.485 [INFO] [Thread-199928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:09:10.492 [DEBUG] [Thread-199928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] client lang: <none>
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] server lang: <none>
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] kex follows: False
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] Compression: none
2026-04-13T02:09:10.493 [DEBUG] [Thread-199928] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:09:10.552 [DEBUG] [Thread-199928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:09:10.553 [DEBUG] [Thread-199928] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:09:10.553 [DEBUG] [Thread-199928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:09:10.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:09:10.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:09:10.608 [DEBUG] [Thread-199928] [transport.py] [_log()] userauth is OK
2026-04-13T02:09:10.608 [DEBUG] [Thread-199928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:09:10.608 [DEBUG] [Thread-199928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:09:10.608 [DEBUG] [Thread-199928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:09:10.608 [DEBUG] [Thread-199928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:09:10.622 [INFO] [Thread-199928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:09:10.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:09:10.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:09:11.446 [DEBUG] [Thread-199928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:09:11.447 [DEBUG] [Thread-199928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:09:11.494 [DEBUG] [Thread-199928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:09:11.494 [DEBUG] [Thread-199928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:09:11.503 [DEBUG] [Thread-199928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:09:11.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:09:11.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:09:11.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:09:11.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:09:11.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:09:11.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:09:11.540 [DEBUG] [Thread-199928] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:09:14.805 [DEBUG] [Thread-199930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:09:18.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:09:18.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:09:29.859 [DEBUG] [Thread-199931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:09:31.759 [DEBUG] [Thread-199932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:09:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:09:41.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:09:41.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:09:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 9, 16), 3.31545, 80.2421, 0.0, 9.21132, 11.3705, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:09:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:09:16
2026-04-13T02:09:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:09:43.375 [DEBUG] [Thread-199933] [transport.py] [_log()] starting thread (client mode): 0xae517160
2026-04-13T02:09:43.376 [DEBUG] [Thread-199933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:09:43.386 [DEBUG] [Thread-199933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:09:43.386 [INFO] [Thread-199933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] client lang: <none>
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] server lang: <none>
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] kex follows: False
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] Compression: none
2026-04-13T02:09:43.388 [DEBUG] [Thread-199933] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:09:43.398 [DEBUG] [Thread-199933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:09:43.399 [DEBUG] [Thread-199933] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:09:43.399 [DEBUG] [Thread-199933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:09:43.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:09:43.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:09:43.400 [DEBUG] [Thread-199933] [transport.py] [_log()] userauth is OK
2026-04-13T02:09:43.400 [DEBUG] [Thread-199933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:09:43.400 [DEBUG] [Thread-199933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:09:43.400 [DEBUG] [Thread-199933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:09:43.400 [DEBUG] [Thread-199933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:09:43.431 [INFO] [Thread-199933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:09:43.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:09:44.272 [DEBUG] [Thread-199933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:09:44.272 [DEBUG] [Thread-199933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:09:44.273 [DEBUG] [Thread-199933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:09:44.313 [DEBUG] [Thread-199933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:09:44.313 [DEBUG] [Thread-199933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:09:44.317 [DEBUG] [Thread-199933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:09:44.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:09:44.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:09:44.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:09:44.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:09:44.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:09:44.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:09:44.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:09:44.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:09:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:09:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.006348 -999.00  +10.90   5.64     88   +9.00 1 2 1 3 1     0    0 -999.00 0.00 ZN.S. 5.6 5.6 198.6 8.5 11.6 -21.8 11.4 -20.8 11.2 -18.8 11.5 -20.9
2026-04-13T02:09:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:09:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:09:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.006348
2026-04-13T02:09:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:09:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:09:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:09:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:09:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:09:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:09:16', tmtdew=3.31545, humidity=80.2421, cloud=0.0, wind=9.21132, temperature=11.3705, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:09:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:09:44.344 [DEBUG] [Thread-199933] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:09:44.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:09:44.438 [DEBUG] [Thread-199936] [transport.py] [_log()] starting thread (client mode): 0xae5154b0
2026-04-13T02:09:44.438 [DEBUG] [Thread-199936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:09:44.452 [DEBUG] [Thread-199936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:09:44.452 [INFO] [Thread-199936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:09:44.460 [DEBUG] [Thread-199936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:09:44.460 [DEBUG] [Thread-199936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:09:44.460 [DEBUG] [Thread-199936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] client lang: <none>
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] server lang: <none>
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] kex follows: False
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:09:44.461 [DEBUG] [Thread-199936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:09:44.462 [DEBUG] [Thread-199936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:09:44.462 [DEBUG] [Thread-199936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:09:44.462 [DEBUG] [Thread-199936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:09:44.462 [DEBUG] [Thread-199936] [transport.py] [_log()] Compression: none
2026-04-13T02:09:44.462 [DEBUG] [Thread-199936] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:09:44.518 [DEBUG] [Thread-199936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:09:44.519 [DEBUG] [Thread-199936] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:09:44.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:09:44.520 [DEBUG] [Thread-199936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:09:44.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:09:44.577 [DEBUG] [Thread-199936] [transport.py] [_log()] userauth is OK
2026-04-13T02:09:44.577 [DEBUG] [Thread-199936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:09:44.577 [DEBUG] [Thread-199936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:09:44.578 [DEBUG] [Thread-199936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:09:44.578 [DEBUG] [Thread-199936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:09:44.596 [INFO] [Thread-199936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:09:44.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:09:44.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:09:44.897 [DEBUG] [Thread-199938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:09:45.413 [DEBUG] [Thread-199936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:09:45.413 [DEBUG] [Thread-199936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:09:45.461 [DEBUG] [Thread-199936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:09:45.461 [DEBUG] [Thread-199936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:09:45.471 [DEBUG] [Thread-199936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:09:45.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:09:45.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:09:45.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:09:45.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:09:45.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:09:45.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:09:45.508 [DEBUG] [Thread-199936] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:09:59.953 [DEBUG] [Thread-199939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:10:14.995 [DEBUG] [Thread-199940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:10:15.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:10:15.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:10:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:10:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 9, 51), 3.09933, 81.2141, 0.0, 11.5049, 11.6073, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:10:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:09:51
2026-04-13T02:10:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:10:17.389 [DEBUG] [Thread-199941] [transport.py] [_log()] starting thread (client mode): 0xae52f8b0
2026-04-13T02:10:17.389 [DEBUG] [Thread-199941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:10:17.409 [DEBUG] [Thread-199941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:10:17.409 [INFO] [Thread-199941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] client lang: <none>
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] server lang: <none>
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] kex follows: False
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] Compression: none
2026-04-13T02:10:17.412 [DEBUG] [Thread-199941] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:10:17.429 [DEBUG] [Thread-199941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:10:17.429 [DEBUG] [Thread-199941] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:10:17.430 [DEBUG] [Thread-199941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:10:17.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:10:17.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:10:17.432 [DEBUG] [Thread-199941] [transport.py] [_log()] userauth is OK
2026-04-13T02:10:17.432 [DEBUG] [Thread-199941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:10:17.432 [DEBUG] [Thread-199941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:10:17.432 [DEBUG] [Thread-199941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:10:17.433 [DEBUG] [Thread-199941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:10:17.456 [INFO] [Thread-199941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:10:17.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:10:18.656 [DEBUG] [Thread-199941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:10:18.656 [DEBUG] [Thread-199941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:10:18.656 [DEBUG] [Thread-199941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:10:18.697 [DEBUG] [Thread-199941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:10:18.697 [DEBUG] [Thread-199941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:10:18.701 [DEBUG] [Thread-199941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:10:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:10:18.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:10:18.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:10:18.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:10:18.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:10:18.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:10:18.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:10:18.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:10:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:10:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.006695 -999.00  +10.80   3.22     88   +9.00 1 2 1 3 1     0    0 -999.00 0.00 ZNeS. 3.2 3.2 195.9 7.0 11.6 -21.8 11.4 -20.6 11.2 -18.7 11.4 -20.6
2026-04-13T02:10:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:10:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:10:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.006695
2026-04-13T02:10:18.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:10:18.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:10:18.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:10:18.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:10:18.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:10:18.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:09:51', tmtdew=3.09933, humidity=81.2141, cloud=0.0, wind=11.5049, temperature=11.6073, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:09:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:10:18.731 [DEBUG] [Thread-199941] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:10:18.800 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:10:18.801 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:10:18.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:10:18.821 [DEBUG] [Thread-199944] [transport.py] [_log()] starting thread (client mode): 0xb0fe8400
2026-04-13T02:10:18.822 [DEBUG] [Thread-199944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:10:18.837 [DEBUG] [Thread-199944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:10:18.837 [INFO] [Thread-199944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:10:18.844 [DEBUG] [Thread-199944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:10:18.844 [DEBUG] [Thread-199944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] client lang: <none>
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] server lang: <none>
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] kex follows: False
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] Compression: none
2026-04-13T02:10:18.845 [DEBUG] [Thread-199944] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:10:18.905 [DEBUG] [Thread-199944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:10:18.905 [DEBUG] [Thread-199944] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:10:18.906 [DEBUG] [Thread-199944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:10:18.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:10:18.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:10:18.961 [DEBUG] [Thread-199944] [transport.py] [_log()] userauth is OK
2026-04-13T02:10:18.961 [DEBUG] [Thread-199944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:10:18.961 [DEBUG] [Thread-199944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:10:18.961 [DEBUG] [Thread-199944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:10:18.962 [DEBUG] [Thread-199944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:10:18.980 [INFO] [Thread-199944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:10:18.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:10:18.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:10:19.810 [DEBUG] [Thread-199944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:10:19.810 [DEBUG] [Thread-199944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:10:19.858 [DEBUG] [Thread-199944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:10:19.858 [DEBUG] [Thread-199944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:10:19.867 [DEBUG] [Thread-199944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:10:19.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:10:19.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:10:19.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:10:19.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:10:19.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:10:19.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:10:19.904 [DEBUG] [Thread-199944] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:10:30.034 [DEBUG] [Thread-199946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:10:31.832 [DEBUG] [Thread-199947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:10:45.089 [DEBUG] [Thread-199948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:10:49.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:10:49.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:10:49.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:10:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 10, 27), 3.09894, 80.8891, 0.0, 8.99964, 11.4202, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:10:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:10:27
2026-04-13T02:10:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:10:51.736 [DEBUG] [Thread-199949] [transport.py] [_log()] starting thread (client mode): 0xb0fccf70
2026-04-13T02:10:51.736 [DEBUG] [Thread-199949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:10:51.759 [DEBUG] [Thread-199949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:10:51.759 [INFO] [Thread-199949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:10:51.763 [DEBUG] [Thread-199949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:10:51.763 [DEBUG] [Thread-199949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:10:51.772 [DEBUG] [Thread-199949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] client lang: <none>
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] server lang: <none>
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] kex follows: False
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:10:51.773 [DEBUG] [Thread-199949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:10:51.774 [DEBUG] [Thread-199949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:10:51.774 [DEBUG] [Thread-199949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:10:51.774 [DEBUG] [Thread-199949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:10:51.774 [DEBUG] [Thread-199949] [transport.py] [_log()] Compression: none
2026-04-13T02:10:51.774 [DEBUG] [Thread-199949] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:10:51.794 [DEBUG] [Thread-199949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:10:51.794 [DEBUG] [Thread-199949] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:10:51.795 [DEBUG] [Thread-199949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:10:51.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:10:51.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:10:51.797 [DEBUG] [Thread-199949] [transport.py] [_log()] userauth is OK
2026-04-13T02:10:51.797 [DEBUG] [Thread-199949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:10:51.797 [DEBUG] [Thread-199949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:10:51.797 [DEBUG] [Thread-199949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:10:51.797 [DEBUG] [Thread-199949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:10:51.833 [INFO] [Thread-199949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:10:51.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:10:52.654 [DEBUG] [Thread-199949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:10:52.654 [DEBUG] [Thread-199949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:10:52.655 [DEBUG] [Thread-199949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:10:52.695 [DEBUG] [Thread-199949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:10:52.695 [DEBUG] [Thread-199949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:10:52.698 [DEBUG] [Thread-199949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:10:52.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:10:52.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:10:52.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:10:52.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:10:52.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:10:52.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:10:52.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:10:52.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:10:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:10:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.007042 -999.00  +10.80   6.83     88   +9.00 1 2 1 3 1     0    0 -999.00 0.00 ZNeS. 6.8 6.8 220.6 9.4 11.6 -21.8 11.5 -20.6 11.2 -18.7 11.5 -20.8
2026-04-13T02:10:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:10:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:10:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.007042
2026-04-13T02:10:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:10:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:10:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:10:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:10:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:10:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:10:27', tmtdew=3.09894, humidity=80.8891, cloud=0.0, wind=8.99964, temperature=11.4202, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:10:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:10:52.720 [DEBUG] [Thread-199949] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:10:52.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:10:52.814 [DEBUG] [Thread-199952] [transport.py] [_log()] starting thread (client mode): 0xa79596f0
2026-04-13T02:10:52.814 [DEBUG] [Thread-199952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:10:52.830 [DEBUG] [Thread-199952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:10:52.830 [INFO] [Thread-199952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] client lang: <none>
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] server lang: <none>
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] kex follows: False
2026-04-13T02:10:52.838 [DEBUG] [Thread-199952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:10:52.839 [DEBUG] [Thread-199952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:10:52.839 [DEBUG] [Thread-199952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:10:52.839 [DEBUG] [Thread-199952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:10:52.839 [DEBUG] [Thread-199952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:10:52.839 [DEBUG] [Thread-199952] [transport.py] [_log()] Compression: none
2026-04-13T02:10:52.839 [DEBUG] [Thread-199952] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:10:52.897 [DEBUG] [Thread-199952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:10:52.897 [DEBUG] [Thread-199952] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:10:52.898 [DEBUG] [Thread-199952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:10:52.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:10:52.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:10:52.952 [DEBUG] [Thread-199952] [transport.py] [_log()] userauth is OK
2026-04-13T02:10:52.952 [DEBUG] [Thread-199952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:10:52.952 [DEBUG] [Thread-199952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:10:52.953 [DEBUG] [Thread-199952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:10:52.953 [DEBUG] [Thread-199952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:10:52.971 [INFO] [Thread-199952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:10:52.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:10:52.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:10:53.862 [DEBUG] [Thread-199952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:10:53.863 [DEBUG] [Thread-199952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:10:53.910 [DEBUG] [Thread-199952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:10:53.911 [DEBUG] [Thread-199952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:10:53.919 [DEBUG] [Thread-199952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:10:53.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:10:53.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:10:53.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:10:53.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:10:53.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:10:53.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:10:53.956 [DEBUG] [Thread-199952] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:11:00.127 [DEBUG] [Thread-199954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:11:15.179 [DEBUG] [Thread-199955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:11:19.005 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:11:19.006 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:11:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:11:23.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:11:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:11:25.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 11, 2), 3.07164, 81.0384, 0.0, 8.982, 11.4036, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:11:25.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:11:02
2026-04-13T02:11:25.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:11:25.787 [DEBUG] [Thread-199956] [transport.py] [_log()] starting thread (client mode): 0xae52dfc0
2026-04-13T02:11:25.787 [DEBUG] [Thread-199956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:11:25.808 [DEBUG] [Thread-199956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:11:25.808 [INFO] [Thread-199956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] client lang: <none>
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] server lang: <none>
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] kex follows: False
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] Compression: none
2026-04-13T02:11:25.811 [DEBUG] [Thread-199956] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:11:25.834 [DEBUG] [Thread-199956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:11:25.835 [DEBUG] [Thread-199956] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:11:25.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:11:25.836 [DEBUG] [Thread-199956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:11:25.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:11:25.877 [DEBUG] [Thread-199956] [transport.py] [_log()] userauth is OK
2026-04-13T02:11:25.877 [DEBUG] [Thread-199956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:11:25.877 [DEBUG] [Thread-199956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:11:25.877 [DEBUG] [Thread-199956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:11:25.877 [DEBUG] [Thread-199956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:11:25.909 [INFO] [Thread-199956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:11:25.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:11:26.713 [DEBUG] [Thread-199956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:11:26.713 [DEBUG] [Thread-199956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:11:26.713 [DEBUG] [Thread-199956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:11:26.754 [DEBUG] [Thread-199956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:11:26.754 [DEBUG] [Thread-199956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:11:26.758 [DEBUG] [Thread-199956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:11:26.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:11:26.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:11:26.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:11:26.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:11:26.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:11:26.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:11:26.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:11:26.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:11:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:11:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.007390 -999.00  +10.90   7.10     88   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZN.S. 7.1 7.1 215.0 10.1 11.5 -21.8 11.4 -20.7 11.1 -18.8 11.4 -20.8
2026-04-13T02:11:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:11:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:11:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.007390
2026-04-13T02:11:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:11:26.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:11:26.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:11:26.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:11:26.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:11:26.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:11:02', tmtdew=3.07164, humidity=81.0384, cloud=0.0, wind=8.982, temperature=11.4036, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:10:38.496', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:11:26.785 [DEBUG] [Thread-199956] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:11:26.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:11:26.878 [DEBUG] [Thread-199959] [transport.py] [_log()] starting thread (client mode): 0xae52c880
2026-04-13T02:11:26.878 [DEBUG] [Thread-199959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:11:26.892 [DEBUG] [Thread-199959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:11:26.892 [INFO] [Thread-199959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] client lang: <none>
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] server lang: <none>
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] kex follows: False
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] Compression: none
2026-04-13T02:11:26.900 [DEBUG] [Thread-199959] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:11:26.960 [DEBUG] [Thread-199959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:11:26.961 [DEBUG] [Thread-199959] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:11:26.962 [DEBUG] [Thread-199959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:11:26.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:11:26.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:11:27.017 [DEBUG] [Thread-199959] [transport.py] [_log()] userauth is OK
2026-04-13T02:11:27.017 [DEBUG] [Thread-199959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:11:27.017 [DEBUG] [Thread-199959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:11:27.017 [DEBUG] [Thread-199959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:11:27.018 [DEBUG] [Thread-199959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:11:27.037 [INFO] [Thread-199959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:11:27.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:11:27.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:11:27.882 [DEBUG] [Thread-199959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:11:27.882 [DEBUG] [Thread-199959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:11:27.930 [DEBUG] [Thread-199959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:11:27.931 [DEBUG] [Thread-199959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:11:27.939 [DEBUG] [Thread-199959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:11:27.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:11:27.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:11:27.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:11:27.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:11:27.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:11:27.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:11:27.971 [DEBUG] [Thread-199959] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:11:30.215 [DEBUG] [Thread-199961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:11:31.890 [DEBUG] [Thread-199962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:11:45.277 [DEBUG] [Thread-199963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:11:57.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:11:57.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:11:57.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:11:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 11, 38), 2.81757, 82.7734, 0.0, 10.7993, 11.5741, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:11:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:11:38
2026-04-13T02:11:59.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:11:59.806 [DEBUG] [Thread-199964] [transport.py] [_log()] starting thread (client mode): 0xb0feb430
2026-04-13T02:11:59.806 [DEBUG] [Thread-199964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:11:59.826 [DEBUG] [Thread-199964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:11:59.826 [INFO] [Thread-199964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] client lang: <none>
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] server lang: <none>
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] kex follows: False
2026-04-13T02:11:59.829 [DEBUG] [Thread-199964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:11:59.830 [DEBUG] [Thread-199964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:11:59.830 [DEBUG] [Thread-199964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:11:59.830 [DEBUG] [Thread-199964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:11:59.830 [DEBUG] [Thread-199964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:11:59.830 [DEBUG] [Thread-199964] [transport.py] [_log()] Compression: none
2026-04-13T02:11:59.830 [DEBUG] [Thread-199964] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:11:59.845 [DEBUG] [Thread-199964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:11:59.845 [DEBUG] [Thread-199964] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:11:59.845 [DEBUG] [Thread-199964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:11:59.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:11:59.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:11:59.846 [DEBUG] [Thread-199964] [transport.py] [_log()] userauth is OK
2026-04-13T02:11:59.846 [DEBUG] [Thread-199964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:11:59.846 [DEBUG] [Thread-199964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:11:59.846 [DEBUG] [Thread-199964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:11:59.847 [DEBUG] [Thread-199964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:11:59.864 [INFO] [Thread-199964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:11:59.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:12:00.315 [DEBUG] [Thread-199966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:12:00.684 [DEBUG] [Thread-199964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:12:00.685 [DEBUG] [Thread-199964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:12:00.685 [DEBUG] [Thread-199964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:12:00.726 [DEBUG] [Thread-199964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:12:00.726 [DEBUG] [Thread-199964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:12:00.729 [DEBUG] [Thread-199964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:12:00.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:12:00.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:12:00.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:12:00.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:12:00.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:12:00.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:12:00.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:12:00.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:12:00.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:12:00.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.007737 -999.00  +10.90   6.11     89   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNeS. 6.1 6.1 206.2 8.8 11.6 -21.8 11.4 -20.6 11.1 -18.7 11.4 -20.7
2026-04-13T02:12:00.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:12:00.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:12:00.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.007737
2026-04-13T02:12:00.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:12:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:12:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:12:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:12:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:12:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:11:38', tmtdew=2.81757, humidity=82.7734, cloud=0.0, wind=10.7993, temperature=11.5741, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:11:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[1.0267499999999998, 1.4982500000000005, 0.34474999999999945, 2.103999999999999, nan, nan, nan, nan, nan, 2.372, 0.3462499999999995, 1.2409999999999997, nan, nan, 0.3359999999999985, nan, 1.8707500000000001, 1.2424999999999997, 0.2530000000000001, 0.7502499999999985, 1.9239999999999986, 2.029749999999998, 1.4502500000000005, nan, 1.8369999999999989, 0.11350000000000016, 0.07774999999999999, 0.027499999999999858, 0.07500000000000107, 0.2525000000000013, 0.42600000000000104, 1.1460000000000008, 0.2967499999999994], zp_timestamp='2026-04-13T00:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:12:00.754 [DEBUG] [Thread-199964] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:12:00.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:12:00.855 [DEBUG] [Thread-199968] [transport.py] [_log()] starting thread (client mode): 0xae5b63e0
2026-04-13T02:12:00.855 [DEBUG] [Thread-199968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:12:00.870 [DEBUG] [Thread-199968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:12:00.870 [INFO] [Thread-199968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] client lang: <none>
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] server lang: <none>
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] kex follows: False
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:12:00.878 [DEBUG] [Thread-199968] [transport.py] [_log()] Compression: none
2026-04-13T02:12:00.879 [DEBUG] [Thread-199968] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:12:00.938 [DEBUG] [Thread-199968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:12:00.938 [DEBUG] [Thread-199968] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:12:00.939 [DEBUG] [Thread-199968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:12:00.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:12:00.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:12:00.996 [DEBUG] [Thread-199968] [transport.py] [_log()] userauth is OK
2026-04-13T02:12:00.997 [DEBUG] [Thread-199968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:12:00.997 [DEBUG] [Thread-199968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:12:00.997 [DEBUG] [Thread-199968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:12:00.997 [DEBUG] [Thread-199968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:12:01.018 [INFO] [Thread-199968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:12:01.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:12:01.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:12:01.889 [DEBUG] [Thread-199968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:12:01.889 [DEBUG] [Thread-199968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:12:01.936 [DEBUG] [Thread-199968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:12:01.936 [DEBUG] [Thread-199968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:12:01.944 [DEBUG] [Thread-199968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:12:01.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:12:01.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:12:01.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:12:01.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:12:01.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:12:01.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:12:01.978 [DEBUG] [Thread-199968] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:12:15.353 [DEBUG] [Thread-199970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:12:19.222 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:12:19.223 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:12:30.414 [DEBUG] [Thread-199971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:12:31.964 [DEBUG] [Thread-199972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:12:32.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:12:32.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:12:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:12:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 12, 13), 2.85265, 82.7019, 0.0, 8.85852, 11.3371, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:12:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:12:13
2026-04-13T02:12:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:12:33.888 [DEBUG] [Thread-199973] [transport.py] [_log()] starting thread (client mode): 0xae5f01c0
2026-04-13T02:12:33.888 [DEBUG] [Thread-199973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:12:33.909 [DEBUG] [Thread-199973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:12:33.909 [INFO] [Thread-199973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:12:33.912 [DEBUG] [Thread-199973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:12:33.912 [DEBUG] [Thread-199973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:12:33.912 [DEBUG] [Thread-199973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] client lang: <none>
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] server lang: <none>
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] kex follows: False
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:12:33.913 [DEBUG] [Thread-199973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:12:33.914 [DEBUG] [Thread-199973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:12:33.914 [DEBUG] [Thread-199973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:12:33.914 [DEBUG] [Thread-199973] [transport.py] [_log()] Compression: none
2026-04-13T02:12:33.914 [DEBUG] [Thread-199973] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:12:33.933 [DEBUG] [Thread-199973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:12:33.934 [DEBUG] [Thread-199973] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:12:33.934 [DEBUG] [Thread-199973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:12:33.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:12:33.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:12:33.936 [DEBUG] [Thread-199973] [transport.py] [_log()] userauth is OK
2026-04-13T02:12:33.936 [DEBUG] [Thread-199973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:12:33.936 [DEBUG] [Thread-199973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:12:33.936 [DEBUG] [Thread-199973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:12:33.936 [DEBUG] [Thread-199973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:12:33.959 [INFO] [Thread-199973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:12:33.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:12:34.736 [DEBUG] [Thread-199973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:12:34.736 [DEBUG] [Thread-199973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:12:34.736 [DEBUG] [Thread-199973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:12:34.777 [DEBUG] [Thread-199973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:12:34.777 [DEBUG] [Thread-199973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:12:34.779 [DEBUG] [Thread-199973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:12:34.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:12:34.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:12:34.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:12:34.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:12:34.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:12:34.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:12:34.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:12:34.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:12:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:12:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.008432 -999.00  +10.80   6.61     89   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNeS. 6.6 6.6 193.2 8.3 11.5 -21.8 11.4 -20.7 11.1 -18.7 11.4 -20.8
2026-04-13T02:12:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:12:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:12:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.008432
2026-04-13T02:12:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:12:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:12:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:12:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:12:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:12:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:12:13', tmtdew=2.85265, humidity=82.7019, cloud=0.0, wind=8.85852, temperature=11.3371, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:12:08.525', atlas_cloud=2, atlas_rain=1, zp_data=[1.1737499999999992, 1.0342500000000001, 0.42325000000000124, 2.331999999999999, nan, nan, 0.3484999999999996, nan, 1.4624999999999995, 1.5519999999999996, 0.2632499999999993, 0.6074999999999999, 1.2939999999999996, nan, 0.13799999999999812, nan, 1.8032500000000002, 1.2634999999999996, 0.24099999999999788, 0.6282499999999986, 1.839999999999999, 1.9807499999999987, 0.7112500000000006, 2.3717500000000005, 1.4019999999999992, 0.0884999999999998, 0.07874999999999943, 0.024499999999999744, 0.08050000000000068, 0.25900000000000123, 0.4665000000000008, 0.9315000000000007, 0.10274999999999856], zp_timestamp='2026-04-13T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:12:34.802 [DEBUG] [Thread-199973] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:12:34.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:12:34.892 [DEBUG] [Thread-199976] [transport.py] [_log()] starting thread (client mode): 0xae50b190
2026-04-13T02:12:34.892 [DEBUG] [Thread-199976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:12:34.906 [DEBUG] [Thread-199976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:12:34.907 [INFO] [Thread-199976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:12:34.915 [DEBUG] [Thread-199976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] client lang: <none>
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] server lang: <none>
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] kex follows: False
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:12:34.916 [DEBUG] [Thread-199976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:12:34.917 [DEBUG] [Thread-199976] [transport.py] [_log()] Compression: none
2026-04-13T02:12:34.917 [DEBUG] [Thread-199976] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:12:34.972 [DEBUG] [Thread-199976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:12:34.973 [DEBUG] [Thread-199976] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:12:34.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:12:34.974 [DEBUG] [Thread-199976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:12:34.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:12:35.028 [DEBUG] [Thread-199976] [transport.py] [_log()] userauth is OK
2026-04-13T02:12:35.028 [DEBUG] [Thread-199976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:12:35.029 [DEBUG] [Thread-199976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:12:35.029 [DEBUG] [Thread-199976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:12:35.029 [DEBUG] [Thread-199976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:12:35.052 [INFO] [Thread-199976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:12:35.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:12:35.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:12:35.850 [DEBUG] [Thread-199976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:12:35.851 [DEBUG] [Thread-199976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:12:35.899 [DEBUG] [Thread-199976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:12:35.900 [DEBUG] [Thread-199976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:12:35.909 [DEBUG] [Thread-199976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:12:35.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:12:35.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:12:35.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:12:35.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:12:35.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:12:35.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:12:35.945 [DEBUG] [Thread-199976] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:12:45.454 [DEBUG] [Thread-199978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:13:00.517 [DEBUG] [Thread-199979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:13:05.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:13:05.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:13:05.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:13:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 12, 48), 2.62433, 83.835, 0.0, 8.85888, 11.3419, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:13:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:12:48
2026-04-13T02:13:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:13:07.792 [DEBUG] [Thread-199980] [transport.py] [_log()] starting thread (client mode): 0xb0fcd0c0
2026-04-13T02:13:07.792 [DEBUG] [Thread-199980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:13:07.812 [DEBUG] [Thread-199980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:13:07.812 [INFO] [Thread-199980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] client lang: <none>
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] server lang: <none>
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] kex follows: False
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:13:07.816 [DEBUG] [Thread-199980] [transport.py] [_log()] Compression: none
2026-04-13T02:13:07.817 [DEBUG] [Thread-199980] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:13:07.833 [DEBUG] [Thread-199980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:13:07.834 [DEBUG] [Thread-199980] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:13:07.834 [DEBUG] [Thread-199980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:13:07.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:13:07.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:13:07.836 [DEBUG] [Thread-199980] [transport.py] [_log()] userauth is OK
2026-04-13T02:13:07.836 [DEBUG] [Thread-199980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:13:07.836 [DEBUG] [Thread-199980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:13:07.836 [DEBUG] [Thread-199980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:13:07.836 [DEBUG] [Thread-199980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:13:07.870 [INFO] [Thread-199980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:13:07.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:13:08.689 [DEBUG] [Thread-199980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:13:08.689 [DEBUG] [Thread-199980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:13:08.689 [DEBUG] [Thread-199980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:13:08.730 [DEBUG] [Thread-199980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:13:08.731 [DEBUG] [Thread-199980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:13:08.733 [DEBUG] [Thread-199980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:13:08.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:13:08.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:13:08.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:13:08.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:13:08.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:13:08.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:13:08.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:13:08.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:13:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:13:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.008778 -999.00  +10.80   5.63     89   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNeS. 5.6 5.6 225.3 9.1 11.6 -21.6 11.4 -20.8 11.1 -18.9 11.4 -20.7
2026-04-13T02:13:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:13:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:13:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.008778
2026-04-13T02:13:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:13:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:13:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:13:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:13:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:13:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:12:48', tmtdew=2.62433, humidity=83.835, cloud=0.0, wind=8.85888, temperature=11.3419, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:12:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[1.1737499999999992, 1.0342500000000001, 0.42325000000000124, 2.331999999999999, nan, nan, 0.3484999999999996, nan, 1.4624999999999995, 1.5519999999999996, 0.2632499999999993, 0.6074999999999999, 1.2939999999999996, nan, 0.13799999999999812, nan, 1.8032500000000002, 1.2634999999999996, 0.24099999999999788, 0.6282499999999986, 1.839999999999999, 1.9807499999999987, 0.7112500000000006, 2.3717500000000005, 1.4019999999999992, 0.0884999999999998, 0.07874999999999943, 0.024499999999999744, 0.08050000000000068, 0.25900000000000123, 0.4665000000000008, 0.9315000000000007, 0.10274999999999856], zp_timestamp='2026-04-13T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:13:08.756 [DEBUG] [Thread-199980] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:13:08.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:13:08.850 [DEBUG] [Thread-199983] [transport.py] [_log()] starting thread (client mode): 0xae5b4ac0
2026-04-13T02:13:08.851 [DEBUG] [Thread-199983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:13:08.866 [DEBUG] [Thread-199983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:13:08.866 [INFO] [Thread-199983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:13:08.873 [DEBUG] [Thread-199983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] client lang: <none>
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] server lang: <none>
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] kex follows: False
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] Compression: none
2026-04-13T02:13:08.874 [DEBUG] [Thread-199983] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:13:08.934 [DEBUG] [Thread-199983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:13:08.935 [DEBUG] [Thread-199983] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:13:08.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:13:08.936 [DEBUG] [Thread-199983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:13:08.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:13:08.992 [DEBUG] [Thread-199983] [transport.py] [_log()] userauth is OK
2026-04-13T02:13:08.993 [DEBUG] [Thread-199983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:13:08.993 [DEBUG] [Thread-199983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:13:08.993 [DEBUG] [Thread-199983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:13:08.993 [DEBUG] [Thread-199983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:13:09.012 [INFO] [Thread-199983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:13:09.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:13:09.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:13:09.842 [DEBUG] [Thread-199983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:13:09.842 [DEBUG] [Thread-199983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:13:09.890 [DEBUG] [Thread-199983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:13:09.890 [DEBUG] [Thread-199983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:13:09.899 [DEBUG] [Thread-199983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:13:09.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:13:09.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:13:09.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:13:09.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:13:09.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:13:09.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:13:09.936 [DEBUG] [Thread-199983] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:13:15.554 [DEBUG] [Thread-199985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:13:19.432 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:13:19.433 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:13:30.600 [DEBUG] [Thread-199986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:13:32.040 [DEBUG] [Thread-199987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:13:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:13:39.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:13: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
2026-04-13T02:13:41.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 13, 24), 2.68619, 83.5668, 0.0, 8.48808, 11.1875, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:13:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:13:24
2026-04-13T02:13:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:13:41.751 [DEBUG] [Thread-199988] [transport.py] [_log()] starting thread (client mode): 0xae5083a0
2026-04-13T02:13:41.751 [DEBUG] [Thread-199988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:13:41.772 [DEBUG] [Thread-199988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:13:41.772 [INFO] [Thread-199988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:13:41.775 [DEBUG] [Thread-199988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] client lang: <none>
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] server lang: <none>
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] kex follows: False
2026-04-13T02:13:41.776 [DEBUG] [Thread-199988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:13:41.777 [DEBUG] [Thread-199988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:13:41.777 [DEBUG] [Thread-199988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:13:41.777 [DEBUG] [Thread-199988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:13:41.777 [DEBUG] [Thread-199988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:13:41.777 [DEBUG] [Thread-199988] [transport.py] [_log()] Compression: none
2026-04-13T02:13:41.777 [DEBUG] [Thread-199988] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:13:41.794 [DEBUG] [Thread-199988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:13:41.795 [DEBUG] [Thread-199988] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:13:41.796 [DEBUG] [Thread-199988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:13:41.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:13:41.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:13:41.798 [DEBUG] [Thread-199988] [transport.py] [_log()] userauth is OK
2026-04-13T02:13:41.798 [DEBUG] [Thread-199988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:13:41.798 [DEBUG] [Thread-199988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:13:41.798 [DEBUG] [Thread-199988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:13:41.798 [DEBUG] [Thread-199988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:13:41.834 [INFO] [Thread-199988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:13:41.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:13:42.666 [DEBUG] [Thread-199988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:13:42.667 [DEBUG] [Thread-199988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:13:42.667 [DEBUG] [Thread-199988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:13:42.708 [DEBUG] [Thread-199988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:13:42.708 [DEBUG] [Thread-199988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:13:42.712 [DEBUG] [Thread-199988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:13:42.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:13:42.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:13:42.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:13:42.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:13:42.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:13:42.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:13:42.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:13:42.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:13:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.009126 -999.00  +10.80   6.42     89   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNeS. 6.4 6.4 216.8 8.2 11.6 -21.7 11.3 -20.7 11.1 -18.8 11.3 -20.7
2026-04-13T02:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.009126
2026-04-13T02:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:13:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:13:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:13:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:13:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:13:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:13:24', tmtdew=2.68619, humidity=83.5668, cloud=0.0, wind=8.48808, temperature=11.1875, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:13:08.486', atlas_cloud=2, atlas_rain=1, zp_data=[1.1737499999999992, 1.0342500000000001, 0.42325000000000124, 2.331999999999999, nan, nan, 0.3484999999999996, nan, 1.4624999999999995, 1.5519999999999996, 0.2632499999999993, 0.6074999999999999, 1.2939999999999996, nan, 0.13799999999999812, nan, 1.8032500000000002, 1.2634999999999996, 0.24099999999999788, 0.6282499999999986, 1.839999999999999, 1.9807499999999987, 0.7112500000000006, 2.3717500000000005, 1.4019999999999992, 0.0884999999999998, 0.07874999999999943, 0.024499999999999744, 0.08050000000000068, 0.25900000000000123, 0.4665000000000008, 0.9315000000000007, 0.10274999999999856], zp_timestamp='2026-04-13T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:13:42.740 [DEBUG] [Thread-199988] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:13:42.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:13:42.832 [DEBUG] [Thread-199991] [transport.py] [_log()] starting thread (client mode): 0xb0f54a90
2026-04-13T02:13:42.832 [DEBUG] [Thread-199991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:13:42.847 [DEBUG] [Thread-199991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:13:42.847 [INFO] [Thread-199991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:13:42.854 [DEBUG] [Thread-199991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] client lang: <none>
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] server lang: <none>
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] kex follows: False
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:13:42.855 [DEBUG] [Thread-199991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:13:42.856 [DEBUG] [Thread-199991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:13:42.856 [DEBUG] [Thread-199991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:13:42.856 [DEBUG] [Thread-199991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:13:42.856 [DEBUG] [Thread-199991] [transport.py] [_log()] Compression: none
2026-04-13T02:13:42.856 [DEBUG] [Thread-199991] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:13:42.913 [DEBUG] [Thread-199991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:13:42.913 [DEBUG] [Thread-199991] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:13:42.914 [DEBUG] [Thread-199991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:13:42.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:13:42.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:13:42.968 [DEBUG] [Thread-199991] [transport.py] [_log()] userauth is OK
2026-04-13T02:13:42.969 [DEBUG] [Thread-199991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:13:42.969 [DEBUG] [Thread-199991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:13:42.969 [DEBUG] [Thread-199991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:13:42.969 [DEBUG] [Thread-199991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:13:42.988 [INFO] [Thread-199991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:13:42.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:13:42.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:13:43.860 [DEBUG] [Thread-199991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:13:43.860 [DEBUG] [Thread-199991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:13:43.908 [DEBUG] [Thread-199991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:13:43.908 [DEBUG] [Thread-199991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:13:43.917 [DEBUG] [Thread-199991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:13:43.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:13:43.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:13:43.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:13:43.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:13:43.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:13:43.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:13:43.954 [DEBUG] [Thread-199991] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:13:45.636 [DEBUG] [Thread-199993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:14:00.687 [DEBUG] [Thread-199994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:14:13.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:14:13.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:14:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:14:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 13, 59), 2.57744, 84.3986, 0.0, 8.55864, 11.1544, 0, 1, 0, 2, 0, 0),)
2026-04-13T02:14:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:13:59
2026-04-13T02:14:15.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:14:15.721 [DEBUG] [Thread-199995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:14:15.733 [DEBUG] [Thread-199996] [transport.py] [_log()] starting thread (client mode): 0xae5f3d30
2026-04-13T02:14:15.733 [DEBUG] [Thread-199996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:14:15.754 [DEBUG] [Thread-199996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:14:15.754 [INFO] [Thread-199996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:14:15.757 [DEBUG] [Thread-199996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:14:15.757 [DEBUG] [Thread-199996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:14:15.757 [DEBUG] [Thread-199996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:14:15.757 [DEBUG] [Thread-199996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:14:15.757 [DEBUG] [Thread-199996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:14:15.757 [DEBUG] [Thread-199996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] client lang: <none>
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] server lang: <none>
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] kex follows: False
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:14:15.758 [DEBUG] [Thread-199996] [transport.py] [_log()] Compression: none
2026-04-13T02:14:15.759 [DEBUG] [Thread-199996] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:14:15.777 [DEBUG] [Thread-199996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:14:15.777 [DEBUG] [Thread-199996] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:14:15.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:14:15.778 [DEBUG] [Thread-199996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:14:15.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:14:15.781 [DEBUG] [Thread-199996] [transport.py] [_log()] userauth is OK
2026-04-13T02:14:15.781 [DEBUG] [Thread-199996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:14:15.781 [DEBUG] [Thread-199996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:14:15.781 [DEBUG] [Thread-199996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:14:15.781 [DEBUG] [Thread-199996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:14:15.799 [INFO] [Thread-199996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:14:15.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:14:16.580 [DEBUG] [Thread-199996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:14:16.581 [DEBUG] [Thread-199996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:14:16.581 [DEBUG] [Thread-199996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:14:16.621 [DEBUG] [Thread-199996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:14:16.621 [DEBUG] [Thread-199996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:14:16.623 [DEBUG] [Thread-199996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:14:16.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:14:16.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:14:16.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:14:16.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:14:16.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:14:16.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:14:16.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:14:16.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:14:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:14:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.009473 -999.00  +10.70   4.49     89   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .N.S. 4.5 4.5 188.0 8.3 11.5 -21.8 11.4 -20.7 11.1 -18.8 11.3 -20.7
2026-04-13T02:14:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:14:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:14:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.009473
2026-04-13T02:14:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:14:16.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:14:16.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:14:16.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:14:16.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:14:16.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:13:59', tmtdew=2.57744, humidity=84.3986, cloud=0.0, wind=8.55864, temperature=11.1544, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:13:38.467', atlas_cloud=2, atlas_rain=1, zp_data=[1.1737499999999992, 1.0342500000000001, 0.42325000000000124, 2.331999999999999, nan, nan, 0.3484999999999996, nan, 1.4624999999999995, 1.5519999999999996, 0.2632499999999993, 0.6074999999999999, 1.2939999999999996, nan, 0.13799999999999812, nan, 1.8032500000000002, 1.2634999999999996, 0.24099999999999788, 0.6282499999999986, 1.839999999999999, 1.9807499999999987, 0.7112500000000006, 2.3717500000000005, 1.4019999999999992, 0.0884999999999998, 0.07874999999999943, 0.024499999999999744, 0.08050000000000068, 0.25900000000000123, 0.4665000000000008, 0.9315000000000007, 0.10274999999999856], zp_timestamp='2026-04-13T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:14:16.642 [DEBUG] [Thread-199996] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:14:16.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:14:19.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:14:19.639 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:14:30.755 [DEBUG] [Thread-199999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:14:32.111 [DEBUG] [Thread-200000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:14:45.808 [DEBUG] [Thread-200001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:15:00.844 [DEBUG] [Thread-200002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:15:15.880 [DEBUG] [Thread-200003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:15:19.845 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:15:19.846 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:15:30.916 [DEBUG] [Thread-200004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:15:32.198 [DEBUG] [Thread-200005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:15:45.950 [DEBUG] [Thread-200006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:16:00.988 [DEBUG] [Thread-200007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:16:16.025 [DEBUG] [Thread-200008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:16:20.052 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:16:20.054 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:16:30.847 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T02:16:31.065 [DEBUG] [Thread-200009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:16:32.273 [DEBUG] [Thread-200010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:16:46.102 [DEBUG] [Thread-200011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:17:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:17:00.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:17:00.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:17:01.136 [DEBUG] [Thread-200012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:17:02.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 16, 21), 2.29411, 85.9436, 0.0, 9.12312, 10.8719, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:17:02.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:16:21
2026-04-13T02:17:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:17:02.773 [DEBUG] [Thread-200013] [transport.py] [_log()] starting thread (client mode): 0xae515720
2026-04-13T02:17:02.773 [DEBUG] [Thread-200013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:17:02.793 [DEBUG] [Thread-200013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:17:02.793 [INFO] [Thread-200013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:17:02.796 [DEBUG] [Thread-200013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] client lang: <none>
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] server lang: <none>
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] kex follows: False
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] Compression: none
2026-04-13T02:17:02.797 [DEBUG] [Thread-200013] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:17:02.814 [DEBUG] [Thread-200013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:17:02.814 [DEBUG] [Thread-200013] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:17:02.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:17:02.815 [DEBUG] [Thread-200013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:17:02.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:17:02.817 [DEBUG] [Thread-200013] [transport.py] [_log()] userauth is OK
2026-04-13T02:17:02.817 [DEBUG] [Thread-200013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:17:02.818 [DEBUG] [Thread-200013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:17:02.818 [DEBUG] [Thread-200013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:17:02.818 [DEBUG] [Thread-200013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:17:02.834 [INFO] [Thread-200013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:17:02.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:17:03.481 [DEBUG] [Thread-200013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:17:03.481 [DEBUG] [Thread-200013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:17:03.481 [DEBUG] [Thread-200013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:17:03.522 [DEBUG] [Thread-200013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:17:03.522 [DEBUG] [Thread-200013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:17:03.526 [DEBUG] [Thread-200013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:17:03.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:17:03.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:17:03.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:17:03.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:17:03.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:17:03.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:17:03.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:17:03.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:17:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:17:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.011556 -999.00  +10.50   5.73     90   +9.00 1 2 1 3 1     0    0 -999.00 0.00 .N.S. 5.7 5.7 224.0 7.9 11.4 -21.8 11.2 -20.7 11.0 -19.0 11.3 -20.8
2026-04-13T02:17:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:17:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:17:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.011556
2026-04-13T02:17:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:17:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:17:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:17:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:17:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:17:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:16:21', tmtdew=2.29411, humidity=85.9436, cloud=0.0, wind=9.12312, temperature=10.8719, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:16:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:17:03.555 [DEBUG] [Thread-200013] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:17:03.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:17:03.648 [DEBUG] [Thread-200016] [transport.py] [_log()] starting thread (client mode): 0xb0fcd0c0
2026-04-13T02:17:03.648 [DEBUG] [Thread-200016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:17:03.664 [DEBUG] [Thread-200016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:17:03.664 [INFO] [Thread-200016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:03.672 [DEBUG] [Thread-200016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] client lang: <none>
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] server lang: <none>
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] kex follows: False
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] Compression: none
2026-04-13T02:17:03.673 [DEBUG] [Thread-200016] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:17:03.732 [DEBUG] [Thread-200016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:17:03.733 [DEBUG] [Thread-200016] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:17:03.734 [DEBUG] [Thread-200016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:17:03.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:17:03.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:17:03.788 [DEBUG] [Thread-200016] [transport.py] [_log()] userauth is OK
2026-04-13T02:17:03.789 [DEBUG] [Thread-200016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:17:03.789 [DEBUG] [Thread-200016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:17:03.789 [DEBUG] [Thread-200016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:17:03.789 [DEBUG] [Thread-200016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:17:03.808 [INFO] [Thread-200016] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:17:03.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:17:03.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:17:04.631 [DEBUG] [Thread-200016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:17:04.632 [DEBUG] [Thread-200016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:17:04.680 [DEBUG] [Thread-200016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:17:04.680 [DEBUG] [Thread-200016] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:17:04.689 [DEBUG] [Thread-200016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:17:04.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:17:04.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:17:04.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:17:04.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:17:04.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:17:04.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:17:04.727 [DEBUG] [Thread-200016] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:17:16.171 [DEBUG] [Thread-200018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:17:20.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:17:20.262 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:17:31.234 [DEBUG] [Thread-200019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:17:32.371 [DEBUG] [Thread-200020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:17:34.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:17:34.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:17:34.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:17:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 16, 57), 2.14364, 86.7422, 0.0, 8.91144, 10.8385, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:17:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:16:57
2026-04-13T02:17:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:17:36.650 [DEBUG] [Thread-200021] [transport.py] [_log()] starting thread (client mode): 0xae516da0
2026-04-13T02:17:36.650 [DEBUG] [Thread-200021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:17:36.673 [DEBUG] [Thread-200021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:17:36.673 [INFO] [Thread-200021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:17:36.676 [DEBUG] [Thread-200021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:17:36.676 [DEBUG] [Thread-200021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:17:36.676 [DEBUG] [Thread-200021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:17:36.676 [DEBUG] [Thread-200021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:36.676 [DEBUG] [Thread-200021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:36.676 [DEBUG] [Thread-200021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] client lang: <none>
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] server lang: <none>
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] kex follows: False
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:17:36.677 [DEBUG] [Thread-200021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:17:36.678 [DEBUG] [Thread-200021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:17:36.678 [DEBUG] [Thread-200021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:17:36.678 [DEBUG] [Thread-200021] [transport.py] [_log()] Compression: none
2026-04-13T02:17:36.678 [DEBUG] [Thread-200021] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:17:36.696 [DEBUG] [Thread-200021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:17:36.697 [DEBUG] [Thread-200021] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:17:36.698 [DEBUG] [Thread-200021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:17:36.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:17:36.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:17:36.699 [DEBUG] [Thread-200021] [transport.py] [_log()] userauth is OK
2026-04-13T02:17:36.700 [DEBUG] [Thread-200021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:17:36.700 [DEBUG] [Thread-200021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:17:36.700 [DEBUG] [Thread-200021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:17:36.700 [DEBUG] [Thread-200021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:17:36.724 [INFO] [Thread-200021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:17:36.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:17:37.401 [DEBUG] [Thread-200021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:17:37.401 [DEBUG] [Thread-200021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:17:37.410 [DEBUG] [Thread-200021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:17:37.442 [DEBUG] [Thread-200021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:17:37.442 [DEBUG] [Thread-200021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:17:37.445 [DEBUG] [Thread-200021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:17:37.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:17:37.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:17:37.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:17:37.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:17:37.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:17:37.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:17:37.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:17:37.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:17:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:17:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.011903 -999.00  +10.50   2.53     90   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .N.Sw 2.5 2.5 182.4 7.8 11.4 -21.7 11.2 -20.7 11.0 -18.7 11.3 -20.7
2026-04-13T02:17:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:17:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:17:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.011903
2026-04-13T02:17:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:17:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:17:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:17:37.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:17:37.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:17:37.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:16:57', tmtdew=2.14364, humidity=86.7422, cloud=0.0, wind=8.91144, temperature=10.8385, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:17:08.419', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:17:37.472 [DEBUG] [Thread-200021] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:17:37.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:17:37.566 [DEBUG] [Thread-200024] [transport.py] [_log()] starting thread (client mode): 0xb0fb6110
2026-04-13T02:17:37.566 [DEBUG] [Thread-200024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:17:37.581 [DEBUG] [Thread-200024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:17:37.581 [INFO] [Thread-200024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:17:37.588 [DEBUG] [Thread-200024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] client lang: <none>
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] server lang: <none>
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] kex follows: False
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:17:37.589 [DEBUG] [Thread-200024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:17:37.590 [DEBUG] [Thread-200024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:17:37.590 [DEBUG] [Thread-200024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:17:37.590 [DEBUG] [Thread-200024] [transport.py] [_log()] Compression: none
2026-04-13T02:17:37.590 [DEBUG] [Thread-200024] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:17:37.647 [DEBUG] [Thread-200024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:17:37.648 [DEBUG] [Thread-200024] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:17:37.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:17:37.649 [DEBUG] [Thread-200024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:17:37.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:17:37.704 [DEBUG] [Thread-200024] [transport.py] [_log()] userauth is OK
2026-04-13T02:17:37.704 [DEBUG] [Thread-200024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:17:37.704 [DEBUG] [Thread-200024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:17:37.704 [DEBUG] [Thread-200024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:17:37.705 [DEBUG] [Thread-200024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:17:37.726 [INFO] [Thread-200024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:17:37.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:17:37.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:17:38.557 [DEBUG] [Thread-200024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:17:38.558 [DEBUG] [Thread-200024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:17:38.606 [DEBUG] [Thread-200024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:17:38.606 [DEBUG] [Thread-200024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:17:38.615 [DEBUG] [Thread-200024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:17:38.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:17:38.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:17:38.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:17:38.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:17:38.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:17:38.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:17:38.649 [DEBUG] [Thread-200024] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:17:46.270 [DEBUG] [Thread-200026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:18:01.324 [DEBUG] [Thread-200027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:18:08.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:18:08.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:18:08.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:18:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 17, 32), 2.10648, 86.9578, 0.0, 9.03492, 10.7887, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:18:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:17:32
2026-04-13T02:18:10.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:18:10.568 [DEBUG] [Thread-200028] [transport.py] [_log()] starting thread (client mode): 0xae508370
2026-04-13T02:18:10.568 [DEBUG] [Thread-200028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:18:10.588 [DEBUG] [Thread-200028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:18:10.588 [INFO] [Thread-200028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] client lang: <none>
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] server lang: <none>
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] kex follows: False
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] Compression: none
2026-04-13T02:18:10.590 [DEBUG] [Thread-200028] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:18:10.600 [DEBUG] [Thread-200028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:18:10.601 [DEBUG] [Thread-200028] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:18:10.601 [DEBUG] [Thread-200028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:18:10.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:18:10.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:18:10.603 [DEBUG] [Thread-200028] [transport.py] [_log()] userauth is OK
2026-04-13T02:18:10.603 [DEBUG] [Thread-200028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:18:10.603 [DEBUG] [Thread-200028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:18:10.603 [DEBUG] [Thread-200028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:18:10.603 [DEBUG] [Thread-200028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:18:10.621 [INFO] [Thread-200028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:18:10.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:18:11.244 [DEBUG] [Thread-200028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:18:11.244 [DEBUG] [Thread-200028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:18:11.244 [DEBUG] [Thread-200028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:18:11.286 [DEBUG] [Thread-200028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:18:11.286 [DEBUG] [Thread-200028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:18:11.288 [DEBUG] [Thread-200028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:18:11.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:18:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:18:11.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:18:11.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:18:11.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:18:11.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:18:11.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.012251 -999.00  +10.50   7.30     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .N.Sw 7.3 7.3 211.4 8.5 11.4 -21.8 11.2 -20.6 11.0 -18.8 11.3 -20.8
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.012251
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:18:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:17:32', tmtdew=2.10648, humidity=86.9578, cloud=0.0, wind=9.03492, temperature=10.7887, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:17:38.486', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:18:11.306 [DEBUG] [Thread-200028] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:18:11.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:18:11.385 [DEBUG] [Thread-200031] [transport.py] [_log()] starting thread (client mode): 0xae508e50
2026-04-13T02:18:11.385 [DEBUG] [Thread-200031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:18:11.400 [DEBUG] [Thread-200031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:18:11.400 [INFO] [Thread-200031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:18:11.407 [DEBUG] [Thread-200031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:18:11.408 [DEBUG] [Thread-200031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] client lang: <none>
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] server lang: <none>
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] kex follows: False
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:18:11.409 [DEBUG] [Thread-200031] [transport.py] [_log()] Compression: none
2026-04-13T02:18:11.410 [DEBUG] [Thread-200031] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:18:11.472 [DEBUG] [Thread-200031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:18:11.472 [DEBUG] [Thread-200031] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:18:11.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:18:11.473 [DEBUG] [Thread-200031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:18:11.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:18:11.528 [DEBUG] [Thread-200031] [transport.py] [_log()] userauth is OK
2026-04-13T02:18:11.528 [DEBUG] [Thread-200031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:18:11.528 [DEBUG] [Thread-200031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:18:11.528 [DEBUG] [Thread-200031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:18:11.528 [DEBUG] [Thread-200031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:18:11.549 [INFO] [Thread-200031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:18:11.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:18:11.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:18:12.378 [DEBUG] [Thread-200031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:18:12.378 [DEBUG] [Thread-200031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:18:12.426 [DEBUG] [Thread-200031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:18:12.427 [DEBUG] [Thread-200031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:18:12.437 [DEBUG] [Thread-200031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:18:12.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:18:12.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:18:12.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:18:12.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:18:12.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:18:12.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:18:12.474 [DEBUG] [Thread-200031] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:18:16.358 [DEBUG] [Thread-200033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:18:20.468 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:18:20.469 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:18:31.420 [DEBUG] [Thread-200034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:18:32.447 [DEBUG] [Thread-200035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:18:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:18:42.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:18:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:18:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 18, 7), 2.06442, 87.2067, 0.0, 9.17604, 10.7721, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:18:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:18:07
2026-04-13T02:18:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:18:44.402 [DEBUG] [Thread-200036] [transport.py] [_log()] starting thread (client mode): 0xb0fb5cf0
2026-04-13T02:18:44.402 [DEBUG] [Thread-200036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:18:44.422 [DEBUG] [Thread-200036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:18:44.423 [INFO] [Thread-200036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:18:44.425 [DEBUG] [Thread-200036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:18:44.425 [DEBUG] [Thread-200036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:18:44.425 [DEBUG] [Thread-200036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:18:44.425 [DEBUG] [Thread-200036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:44.425 [DEBUG] [Thread-200036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:44.425 [DEBUG] [Thread-200036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:44.425 [DEBUG] [Thread-200036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] client lang: <none>
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] server lang: <none>
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] kex follows: False
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] Compression: none
2026-04-13T02:18:44.426 [DEBUG] [Thread-200036] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:18:44.445 [DEBUG] [Thread-200036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:18:44.445 [DEBUG] [Thread-200036] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:18:44.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:18:44.447 [DEBUG] [Thread-200036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:18:44.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:18:44.449 [DEBUG] [Thread-200036] [transport.py] [_log()] userauth is OK
2026-04-13T02:18:44.449 [DEBUG] [Thread-200036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:18:44.450 [DEBUG] [Thread-200036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:18:44.450 [DEBUG] [Thread-200036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:18:44.450 [DEBUG] [Thread-200036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:18:44.470 [INFO] [Thread-200036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:18:44.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:18:45.062 [DEBUG] [Thread-200036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:18:45.062 [DEBUG] [Thread-200036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:18:45.062 [DEBUG] [Thread-200036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:18:45.103 [DEBUG] [Thread-200036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:18:45.103 [DEBUG] [Thread-200036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:18:45.106 [DEBUG] [Thread-200036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:18:45.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:18:45.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:18:45.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:18:45.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:18:45.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:18:45.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:18:45.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:18:45.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:18:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:18:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.012598 -999.00  +10.50   4.88     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .N.Sw 4.9 4.9 239.0 8.1 11.4 -21.7 11.2 -20.6 11.0 -18.7 11.3 -20.8
2026-04-13T02:18:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:18:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:18:45.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.012598
2026-04-13T02:18:45.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:18:45.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:18:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:18:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:18:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:18:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:18:07', tmtdew=2.06442, humidity=87.2067, cloud=0.0, wind=9.17604, temperature=10.7721, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:18:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:18:45.130 [DEBUG] [Thread-200036] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:18:45.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:18:45.224 [DEBUG] [Thread-200039] [transport.py] [_log()] starting thread (client mode): 0xb0fb4c40
2026-04-13T02:18:45.224 [DEBUG] [Thread-200039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:18:45.244 [DEBUG] [Thread-200039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:18:45.244 [INFO] [Thread-200039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:18:45.252 [DEBUG] [Thread-200039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] client lang: <none>
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] server lang: <none>
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] kex follows: False
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] Compression: none
2026-04-13T02:18:45.253 [DEBUG] [Thread-200039] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:18:45.312 [DEBUG] [Thread-200039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:18:45.313 [DEBUG] [Thread-200039] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:18:45.313 [DEBUG] [Thread-200039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:18:45.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:18:45.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:18:45.368 [DEBUG] [Thread-200039] [transport.py] [_log()] userauth is OK
2026-04-13T02:18:45.368 [DEBUG] [Thread-200039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:18:45.369 [DEBUG] [Thread-200039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:18:45.369 [DEBUG] [Thread-200039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:18:45.369 [DEBUG] [Thread-200039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:18:45.389 [INFO] [Thread-200039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:18:45.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:18:45.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:18:46.306 [DEBUG] [Thread-200039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:18:46.306 [DEBUG] [Thread-200039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:18:46.354 [DEBUG] [Thread-200039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:18:46.354 [DEBUG] [Thread-200039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:18:46.363 [DEBUG] [Thread-200039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:18:46.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:18:46.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:18:46.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:18:46.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:18:46.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:18:46.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:18:46.400 [DEBUG] [Thread-200039] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:18:46.458 [DEBUG] [Thread-200041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:01.510 [DEBUG] [Thread-200042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:16.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:19:16.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:19:16.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:19:16.550 [DEBUG] [Thread-200043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:17.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 18, 43), 1.81129, 88.5128, 0.0, 11.2932, 10.7779, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:19:17.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:18:43
2026-04-13T02:19:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:19:18.238 [DEBUG] [Thread-200044] [transport.py] [_log()] starting thread (client mode): 0xae5f2ec0
2026-04-13T02:19:18.239 [DEBUG] [Thread-200044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:19:18.259 [DEBUG] [Thread-200044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:19:18.259 [INFO] [Thread-200044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:19:18.261 [DEBUG] [Thread-200044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] client lang: <none>
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] server lang: <none>
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] kex follows: False
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] Compression: none
2026-04-13T02:19:18.262 [DEBUG] [Thread-200044] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:19:18.276 [DEBUG] [Thread-200044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:19:18.276 [DEBUG] [Thread-200044] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:19:18.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:19:18.277 [DEBUG] [Thread-200044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:19:18.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:19:18.279 [DEBUG] [Thread-200044] [transport.py] [_log()] userauth is OK
2026-04-13T02:19:18.280 [DEBUG] [Thread-200044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:19:18.280 [DEBUG] [Thread-200044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:19:18.280 [DEBUG] [Thread-200044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:19:18.280 [DEBUG] [Thread-200044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:19:18.299 [INFO] [Thread-200044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:19:18.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:19:18.929 [DEBUG] [Thread-200044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:19:18.929 [DEBUG] [Thread-200044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:19:18.930 [DEBUG] [Thread-200044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:19:18.970 [DEBUG] [Thread-200044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:19:18.970 [DEBUG] [Thread-200044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:19:18.974 [DEBUG] [Thread-200044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:19:18.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:19:18.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:19:18.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:19:18.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:19:18.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:19:18.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:19:18.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:19:18.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:19:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:19:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.013292 -999.00  +10.50   7.80     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .N.Sw 7.8 7.8 201.3 9.4 11.3 -21.7 11.2 -20.6 10.9 -18.7 11.2 -20.6
2026-04-13T02:19:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:19:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:19:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.013292
2026-04-13T02:19:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:19:19.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:19:19.000 [DEBUG] [Thread-200044] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:19:19.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:19:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:19:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:19:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:18:43', tmtdew=1.81129, humidity=88.5128, cloud=0.0, wind=11.2932, temperature=10.7779, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:19:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:19:19.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:19:19.094 [DEBUG] [Thread-200047] [transport.py] [_log()] starting thread (client mode): 0xae50b880
2026-04-13T02:19:19.094 [DEBUG] [Thread-200047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:19:19.108 [DEBUG] [Thread-200047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:19:19.109 [INFO] [Thread-200047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] client lang: <none>
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] server lang: <none>
2026-04-13T02:19:19.116 [DEBUG] [Thread-200047] [transport.py] [_log()] kex follows: False
2026-04-13T02:19:19.117 [DEBUG] [Thread-200047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:19:19.117 [DEBUG] [Thread-200047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:19:19.117 [DEBUG] [Thread-200047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:19:19.117 [DEBUG] [Thread-200047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:19:19.117 [DEBUG] [Thread-200047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:19:19.117 [DEBUG] [Thread-200047] [transport.py] [_log()] Compression: none
2026-04-13T02:19:19.117 [DEBUG] [Thread-200047] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:19:19.176 [DEBUG] [Thread-200047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:19:19.177 [DEBUG] [Thread-200047] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:19:19.177 [DEBUG] [Thread-200047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:19:19.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:19:19.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:19:19.234 [DEBUG] [Thread-200047] [transport.py] [_log()] userauth is OK
2026-04-13T02:19:19.234 [DEBUG] [Thread-200047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:19:19.234 [DEBUG] [Thread-200047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:19:19.234 [DEBUG] [Thread-200047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:19:19.234 [DEBUG] [Thread-200047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:19:19.253 [INFO] [Thread-200047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:19:19.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:19:19.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:19:20.075 [DEBUG] [Thread-200047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:19:20.075 [DEBUG] [Thread-200047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:19:20.123 [DEBUG] [Thread-200047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:19:20.123 [DEBUG] [Thread-200047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:19:20.133 [DEBUG] [Thread-200047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:19:20.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:19:20.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:19:20.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:19:20.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:19:20.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:19:20.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:19:20.170 [DEBUG] [Thread-200047] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:19:20.674 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:20.675 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:31.589 [DEBUG] [Thread-200049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:32.524 [DEBUG] [Thread-200050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:46.645 [DEBUG] [Thread-200051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:19:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:19:50.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:19:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:19:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 19, 20), 1.87005, 87.9721, 0.0, 10.9055, 10.7221, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:19:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:19:20
2026-04-13T02:19:51.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:19:52.015 [DEBUG] [Thread-200052] [transport.py] [_log()] starting thread (client mode): 0xae50bfd0
2026-04-13T02:19:52.015 [DEBUG] [Thread-200052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:19:52.028 [DEBUG] [Thread-200052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:19:52.028 [INFO] [Thread-200052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] client lang: <none>
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] server lang: <none>
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] kex follows: False
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] Compression: none
2026-04-13T02:19:52.029 [DEBUG] [Thread-200052] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:19:52.037 [DEBUG] [Thread-200052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:19:52.037 [DEBUG] [Thread-200052] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:19:52.037 [DEBUG] [Thread-200052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:19:52.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:19:52.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:19:52.038 [DEBUG] [Thread-200052] [transport.py] [_log()] userauth is OK
2026-04-13T02:19:52.038 [DEBUG] [Thread-200052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:19:52.038 [DEBUG] [Thread-200052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:19:52.038 [DEBUG] [Thread-200052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:19:52.038 [DEBUG] [Thread-200052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:19:52.052 [INFO] [Thread-200052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:19:52.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:19:52.619 [DEBUG] [Thread-200052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:19:52.619 [DEBUG] [Thread-200052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:19:52.620 [DEBUG] [Thread-200052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:19:52.660 [DEBUG] [Thread-200052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:19:52.660 [DEBUG] [Thread-200052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:19:52.662 [DEBUG] [Thread-200052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:19:52.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:19:52.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:19:52.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:19:52.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:19:52.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:19:52.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:19:52.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:19:52.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:19:52.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:19:52.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.013639 -999.00  +10.50   5.55     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .NeSW 5.5 5.5 218.6 8.1 11.3 -21.7 11.2 -20.7 10.9 -18.8 11.2 -20.7
2026-04-13T02:19:52.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:19:52.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:19:52.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.013639
2026-04-13T02:19:52.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:19:52.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:19:52.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:19:52.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:19:52.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:19:52.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:19:20', tmtdew=1.87005, humidity=87.9721, cloud=0.0, wind=10.9055, temperature=10.7221, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:19:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:19:52.689 [DEBUG] [Thread-200052] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:19:52.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:19:52.782 [DEBUG] [Thread-200055] [transport.py] [_log()] starting thread (client mode): 0xae509a20
2026-04-13T02:19:52.783 [DEBUG] [Thread-200055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:19:52.797 [DEBUG] [Thread-200055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:19:52.798 [INFO] [Thread-200055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:19:52.805 [DEBUG] [Thread-200055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:19:52.805 [DEBUG] [Thread-200055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] client lang: <none>
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] server lang: <none>
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] kex follows: False
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:19:52.806 [DEBUG] [Thread-200055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:19:52.807 [DEBUG] [Thread-200055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:19:52.807 [DEBUG] [Thread-200055] [transport.py] [_log()] Compression: none
2026-04-13T02:19:52.807 [DEBUG] [Thread-200055] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:19:52.864 [DEBUG] [Thread-200055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:19:52.865 [DEBUG] [Thread-200055] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:19:52.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:19:52.866 [DEBUG] [Thread-200055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:19:52.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:19:52.920 [DEBUG] [Thread-200055] [transport.py] [_log()] userauth is OK
2026-04-13T02:19:52.921 [DEBUG] [Thread-200055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:19:52.921 [DEBUG] [Thread-200055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:19:52.921 [DEBUG] [Thread-200055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:19:52.921 [DEBUG] [Thread-200055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:19:52.945 [INFO] [Thread-200055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:19:52.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:19:52.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:19:53.776 [DEBUG] [Thread-200055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:19:53.776 [DEBUG] [Thread-200055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:19:53.824 [DEBUG] [Thread-200055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:19:53.824 [DEBUG] [Thread-200055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:19:53.833 [DEBUG] [Thread-200055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:19:53.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:19:53.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:19:53.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:19:53.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:19:53.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:19:53.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:19:53.870 [DEBUG] [Thread-200055] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:20:01.680 [DEBUG] [Thread-200057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:20:16.735 [DEBUG] [Thread-200058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:20:20.882 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:20:20.883 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:20:23.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:20:23.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:20:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:20:25.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 19, 55), 1.80368, 88.5716, 0.0, 10.535, 10.7387, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:20:25.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:19:55
2026-04-13T02:20:25.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:20:25.683 [DEBUG] [Thread-200059] [transport.py] [_log()] starting thread (client mode): 0xb0fb75b0
2026-04-13T02:20:25.683 [DEBUG] [Thread-200059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:20:25.699 [DEBUG] [Thread-200059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:20:25.699 [INFO] [Thread-200059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:20:25.702 [DEBUG] [Thread-200059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:20:25.702 [DEBUG] [Thread-200059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] client lang: <none>
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] server lang: <none>
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] kex follows: False
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:20:25.711 [DEBUG] [Thread-200059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:20:25.712 [DEBUG] [Thread-200059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:20:25.712 [DEBUG] [Thread-200059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:20:25.712 [DEBUG] [Thread-200059] [transport.py] [_log()] Compression: none
2026-04-13T02:20:25.712 [DEBUG] [Thread-200059] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:20:25.723 [DEBUG] [Thread-200059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:20:25.723 [DEBUG] [Thread-200059] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:20:25.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:20:25.724 [DEBUG] [Thread-200059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:20:25.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:20:25.765 [DEBUG] [Thread-200059] [transport.py] [_log()] userauth is OK
2026-04-13T02:20:25.765 [DEBUG] [Thread-200059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:20:25.765 [DEBUG] [Thread-200059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:20:25.765 [DEBUG] [Thread-200059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:20:25.765 [DEBUG] [Thread-200059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:20:25.784 [INFO] [Thread-200059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:20:25.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:20:26.364 [DEBUG] [Thread-200059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:20:26.364 [DEBUG] [Thread-200059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:20:26.365 [DEBUG] [Thread-200059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:20:26.405 [DEBUG] [Thread-200059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:20:26.405 [DEBUG] [Thread-200059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:20:26.410 [DEBUG] [Thread-200059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:20:26.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:20:26.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:20:26.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:20:26.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:20:26.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:20:26.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:20:26.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:20:26.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:20:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:20:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.013986 -999.00  +10.50   5.30     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .NeSW 5.3 5.3 210.9 9.9 11.3 -21.6 11.2 -20.7 10.9 -18.6 11.2 -20.6
2026-04-13T02:20:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:20:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:20:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.013986
2026-04-13T02:20:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:20:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:20:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:20:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:20:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:20:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:19:55', tmtdew=1.80368, humidity=88.5716, cloud=0.0, wind=10.535, temperature=10.7387, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:20:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:20:26.430 [DEBUG] [Thread-200059] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:20:26.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:20:26.519 [DEBUG] [Thread-200062] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d00
2026-04-13T02:20:26.519 [DEBUG] [Thread-200062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:20:26.534 [DEBUG] [Thread-200062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:20:26.534 [INFO] [Thread-200062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:20:26.541 [DEBUG] [Thread-200062] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] client lang: <none>
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] server lang: <none>
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] kex follows: False
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] Compression: none
2026-04-13T02:20:26.542 [DEBUG] [Thread-200062] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:20:26.600 [DEBUG] [Thread-200062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:20:26.601 [DEBUG] [Thread-200062] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:20:26.601 [DEBUG] [Thread-200062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:20:26.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:20:26.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:20:26.656 [DEBUG] [Thread-200062] [transport.py] [_log()] userauth is OK
2026-04-13T02:20:26.657 [DEBUG] [Thread-200062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:20:26.657 [DEBUG] [Thread-200062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:20:26.657 [DEBUG] [Thread-200062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:20:26.657 [DEBUG] [Thread-200062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:20:26.675 [INFO] [Thread-200062] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:20:26.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:20:26.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:20:27.495 [DEBUG] [Thread-200062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:20:27.495 [DEBUG] [Thread-200062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:20:27.543 [DEBUG] [Thread-200062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:20:27.543 [DEBUG] [Thread-200062] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:20:27.552 [DEBUG] [Thread-200062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:20:27.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:20:27.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:20:27.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:20:27.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:20:27.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:20:27.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:20:27.589 [DEBUG] [Thread-200062] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:20:31.773 [DEBUG] [Thread-200064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:20:32.597 [DEBUG] [Thread-200065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:20:46.825 [DEBUG] [Thread-200066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:20:57.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:20:57.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:20:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:20:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 20, 30), 1.78733, 88.6711, 0.0, 10.2881, 10.7553, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:20:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:20:30
2026-04-13T02:20:59.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:20:59.458 [DEBUG] [Thread-200067] [transport.py] [_log()] starting thread (client mode): 0xb0fb6920
2026-04-13T02:20:59.458 [DEBUG] [Thread-200067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:20:59.478 [DEBUG] [Thread-200067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:20:59.478 [INFO] [Thread-200067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:20:59.481 [DEBUG] [Thread-200067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:20:59.481 [DEBUG] [Thread-200067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:20:59.481 [DEBUG] [Thread-200067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:20:59.481 [DEBUG] [Thread-200067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] client lang: <none>
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] server lang: <none>
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] kex follows: False
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:20:59.482 [DEBUG] [Thread-200067] [transport.py] [_log()] Compression: none
2026-04-13T02:20:59.483 [DEBUG] [Thread-200067] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:20:59.491 [DEBUG] [Thread-200067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:20:59.491 [DEBUG] [Thread-200067] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:20:59.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:20:59.492 [DEBUG] [Thread-200067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:20:59.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:20:59.494 [DEBUG] [Thread-200067] [transport.py] [_log()] userauth is OK
2026-04-13T02:20:59.494 [DEBUG] [Thread-200067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:20:59.494 [DEBUG] [Thread-200067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:20:59.495 [DEBUG] [Thread-200067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:20:59.495 [DEBUG] [Thread-200067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:20:59.511 [INFO] [Thread-200067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:20:59.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:21:00.125 [DEBUG] [Thread-200067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:21:00.125 [DEBUG] [Thread-200067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:21:00.125 [DEBUG] [Thread-200067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:21:00.166 [DEBUG] [Thread-200067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:21:00.166 [DEBUG] [Thread-200067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:21:00.170 [DEBUG] [Thread-200067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:21:00.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:21:00.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:21:00.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:21:00.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:21:00.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:21:00.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:21:00.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:21:00.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:21:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:21:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.014334 -999.00  +10.50   4.27     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNESw 4.3 4.3 201.5 9.1 11.3 -21.6 11.2 -20.7 10.9 -18.6 11.2 -20.6
2026-04-13T02:21:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:21:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:21:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.014334
2026-04-13T02:21:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:21:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:21:00.194 [DEBUG] [Thread-200067] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:21:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:21:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:21:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:21:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:20:30', tmtdew=1.78733, humidity=88.6711, cloud=0.0, wind=10.2881, temperature=10.7553, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:20:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[0.8727499999999999, nan, 1.4392500000000004, 2.5664999999999996, nan, nan, 0.2140000000000004, nan, nan, 2.1930000000000005, 0.38424999999999976, 0.9975000000000005, nan, nan, 0.22799999999999976, nan, 2.13525, 1.2225000000000001, 0.20500000000000007, 0.46224999999999916, 1.5239999999999991, 2.210749999999999, 1.5172500000000007, 2.55975, 1.8819999999999988, 0.11350000000000016, 0.11175000000000068, 0.054499999999999105, 0.12299999999999933, 0.2510000000000012, 0.40500000000000114, 0.8250000000000011, 0.22974999999999923], zp_timestamp='2026-04-13T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:21:00.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:21:00.285 [DEBUG] [Thread-200070] [transport.py] [_log()] starting thread (client mode): 0xb0fcce50
2026-04-13T02:21:00.285 [DEBUG] [Thread-200070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:21:00.299 [DEBUG] [Thread-200070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:21:00.299 [INFO] [Thread-200070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] client lang: <none>
2026-04-13T02:21:00.307 [DEBUG] [Thread-200070] [transport.py] [_log()] server lang: <none>
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] kex follows: False
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] Compression: none
2026-04-13T02:21:00.308 [DEBUG] [Thread-200070] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:21:00.364 [DEBUG] [Thread-200070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:21:00.365 [DEBUG] [Thread-200070] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:21:00.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:21:00.366 [DEBUG] [Thread-200070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:21:00.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:21:00.420 [DEBUG] [Thread-200070] [transport.py] [_log()] userauth is OK
2026-04-13T02:21:00.421 [DEBUG] [Thread-200070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:21:00.421 [DEBUG] [Thread-200070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:21:00.421 [DEBUG] [Thread-200070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:21:00.421 [DEBUG] [Thread-200070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:21:00.441 [INFO] [Thread-200070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:21:00.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:21:00.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:21:01.271 [DEBUG] [Thread-200070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:21:01.271 [DEBUG] [Thread-200070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:21:01.320 [DEBUG] [Thread-200070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:21:01.320 [DEBUG] [Thread-200070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:21:01.329 [DEBUG] [Thread-200070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:21:01.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:21:01.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:21:01.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:21:01.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:21:01.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:21:01.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:21:01.365 [DEBUG] [Thread-200070] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:21:01.859 [DEBUG] [Thread-200072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:21:16.905 [DEBUG] [Thread-200073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:21:21.088 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:21:21.089 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:21:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:21:31.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:21:31.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:21:31.941 [DEBUG] [Thread-200074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:21:32.656 [DEBUG] [Thread-200075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:21:32.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 21, 6), 1.77376, 88.7541, 0.0, 10.1117, 10.7719, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:21:32.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:21:06
2026-04-13T02:21:33.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:21:33.195 [DEBUG] [Thread-200076] [transport.py] [_log()] starting thread (client mode): 0xb0fccf70
2026-04-13T02:21:33.195 [DEBUG] [Thread-200076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:21:33.214 [DEBUG] [Thread-200076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:21:33.214 [INFO] [Thread-200076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] client lang: <none>
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] server lang: <none>
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] kex follows: False
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:21:33.217 [DEBUG] [Thread-200076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:21:33.218 [DEBUG] [Thread-200076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:21:33.218 [DEBUG] [Thread-200076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:21:33.218 [DEBUG] [Thread-200076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:21:33.218 [DEBUG] [Thread-200076] [transport.py] [_log()] Compression: none
2026-04-13T02:21:33.218 [DEBUG] [Thread-200076] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:21:33.233 [DEBUG] [Thread-200076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:21:33.233 [DEBUG] [Thread-200076] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:21:33.234 [DEBUG] [Thread-200076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:21:33.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:21:33.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:21:33.236 [DEBUG] [Thread-200076] [transport.py] [_log()] userauth is OK
2026-04-13T02:21:33.236 [DEBUG] [Thread-200076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:21:33.236 [DEBUG] [Thread-200076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:21:33.236 [DEBUG] [Thread-200076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:21:33.236 [DEBUG] [Thread-200076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:21:33.259 [INFO] [Thread-200076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:21:33.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:21:34.046 [DEBUG] [Thread-200076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:21:34.046 [DEBUG] [Thread-200076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:21:34.047 [DEBUG] [Thread-200076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:21:34.087 [DEBUG] [Thread-200076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:21:34.087 [DEBUG] [Thread-200076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:21:34.089 [DEBUG] [Thread-200076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:21:34.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:21:34.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:21:34.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:21:34.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:21:34.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:21:34.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:21:34.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:21:34.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:21:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:21:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.014334 -999.00  +10.50   4.27     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNESw 4.3 4.3 201.5 9.1 11.3 -21.6 11.2 -20.7 10.9 -18.6 11.2 -20.6
2026-04-13T02:21:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:21:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:21:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.014334
2026-04-13T02:21:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:21:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:21:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:21:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:21:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:21:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:21:06', tmtdew=1.77376, humidity=88.7541, cloud=0.0, wind=10.1117, temperature=10.7719, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:20:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:21:34.116 [DEBUG] [Thread-200076] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:21:34.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:21:34.207 [DEBUG] [Thread-200079] [transport.py] [_log()] starting thread (client mode): 0xb0fb49d0
2026-04-13T02:21:34.208 [DEBUG] [Thread-200079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:21:34.222 [DEBUG] [Thread-200079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:21:34.222 [INFO] [Thread-200079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:21:34.229 [DEBUG] [Thread-200079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:21:34.229 [DEBUG] [Thread-200079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] client lang: <none>
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] server lang: <none>
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] kex follows: False
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] Compression: none
2026-04-13T02:21:34.230 [DEBUG] [Thread-200079] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:21:34.287 [DEBUG] [Thread-200079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:21:34.288 [DEBUG] [Thread-200079] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:21:34.288 [DEBUG] [Thread-200079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:21:34.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:21:34.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:21:34.345 [DEBUG] [Thread-200079] [transport.py] [_log()] userauth is OK
2026-04-13T02:21:34.346 [DEBUG] [Thread-200079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:21:34.346 [DEBUG] [Thread-200079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:21:34.346 [DEBUG] [Thread-200079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:21:34.346 [DEBUG] [Thread-200079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:21:34.369 [INFO] [Thread-200079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:21:34.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:21:34.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:21:35.166 [DEBUG] [Thread-200079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:21:35.166 [DEBUG] [Thread-200079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:21:35.215 [DEBUG] [Thread-200079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:21:35.215 [DEBUG] [Thread-200079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:21:35.224 [DEBUG] [Thread-200079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:21:35.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:21:35.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:21:35.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:21:35.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:21:35.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:21:35.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:21:35.261 [DEBUG] [Thread-200079] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:21:46.978 [DEBUG] [Thread-200081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:22:02.036 [DEBUG] [Thread-200082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:22:05.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:22:05.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:22:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:22:06.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 21, 41), 1.65262, 89.4749, 0.0, 9.81144, 10.9106, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:22:06.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:21:41
2026-04-13T02:22:06.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:22:07.089 [DEBUG] [Thread-200083] [transport.py] [_log()] starting thread (client mode): 0xae509d50
2026-04-13T02:22:07.089 [DEBUG] [Thread-200083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:22:07.109 [DEBUG] [Thread-200083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:22:07.109 [INFO] [Thread-200083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:22:07.112 [DEBUG] [Thread-200083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:22:07.112 [DEBUG] [Thread-200083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] client lang: <none>
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] server lang: <none>
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] kex follows: False
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] Compression: none
2026-04-13T02:22:07.113 [DEBUG] [Thread-200083] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:22:07.132 [DEBUG] [Thread-200083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:22:07.132 [DEBUG] [Thread-200083] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:22:07.133 [DEBUG] [Thread-200083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:22:07.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:22:07.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:22:07.135 [DEBUG] [Thread-200083] [transport.py] [_log()] userauth is OK
2026-04-13T02:22:07.135 [DEBUG] [Thread-200083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:22:07.135 [DEBUG] [Thread-200083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:22:07.135 [DEBUG] [Thread-200083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:22:07.135 [DEBUG] [Thread-200083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:22:07.155 [INFO] [Thread-200083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:22:07.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:22:07.947 [DEBUG] [Thread-200083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:22:07.947 [DEBUG] [Thread-200083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:22:07.948 [DEBUG] [Thread-200083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:22:07.988 [DEBUG] [Thread-200083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:22:07.988 [DEBUG] [Thread-200083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:22:07.991 [DEBUG] [Thread-200083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:22:08.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:22:08.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:22:08.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:22:08.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:22:08.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:22:08.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:22:08.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:22:08.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:22:08.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:22:08.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.014681 -999.00  +10.50   5.90     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .nESw 5.9 5.9 213.8 10.4 11.3 -21.6 11.2 -20.7 10.9 -18.6 11.2 -20.5
2026-04-13T02:22:08.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:22:08.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:22:08.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.014681
2026-04-13T02:22:08.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:22:08.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:22:08.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:22:08.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:22:08.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:22:08.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:21:41', tmtdew=1.65262, humidity=89.4749, cloud=0.0, wind=9.81144, temperature=10.9106, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:21:08.438', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:22:08.012 [DEBUG] [Thread-200083] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:22:08.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:22:08.109 [DEBUG] [Thread-200086] [transport.py] [_log()] starting thread (client mode): 0xae5f3d30
2026-04-13T02:22:08.109 [DEBUG] [Thread-200086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:22:08.123 [DEBUG] [Thread-200086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:22:08.123 [INFO] [Thread-200086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:22:08.130 [DEBUG] [Thread-200086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:22:08.130 [DEBUG] [Thread-200086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:22:08.130 [DEBUG] [Thread-200086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] client lang: <none>
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] server lang: <none>
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] kex follows: False
2026-04-13T02:22:08.131 [DEBUG] [Thread-200086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:22:08.132 [DEBUG] [Thread-200086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:22:08.132 [DEBUG] [Thread-200086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:22:08.132 [DEBUG] [Thread-200086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:22:08.132 [DEBUG] [Thread-200086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:22:08.132 [DEBUG] [Thread-200086] [transport.py] [_log()] Compression: none
2026-04-13T02:22:08.132 [DEBUG] [Thread-200086] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:22:08.188 [DEBUG] [Thread-200086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:22:08.189 [DEBUG] [Thread-200086] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:22:08.189 [DEBUG] [Thread-200086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:22:08.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:22:08.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:22:08.244 [DEBUG] [Thread-200086] [transport.py] [_log()] userauth is OK
2026-04-13T02:22:08.244 [DEBUG] [Thread-200086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:22:08.244 [DEBUG] [Thread-200086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:22:08.244 [DEBUG] [Thread-200086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:22:08.244 [DEBUG] [Thread-200086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:22:08.262 [INFO] [Thread-200086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:22:08.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:22:08.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:22:09.106 [DEBUG] [Thread-200086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:22:09.106 [DEBUG] [Thread-200086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:22:09.154 [DEBUG] [Thread-200086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:22:09.154 [DEBUG] [Thread-200086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:22:09.163 [DEBUG] [Thread-200086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:22:09.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:22:09.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:22:09.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:22:09.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:22:09.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:22:09.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:22:09.200 [DEBUG] [Thread-200086] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:22:17.079 [DEBUG] [Thread-200088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:22:21.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:22:21.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:22:32.136 [DEBUG] [Thread-200089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:22:32.729 [DEBUG] [Thread-200090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:22:39.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:22:39.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:22:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:22:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 22, 17), 1.7202, 88.7706, 0.0, 10.782, 10.7056, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:22:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:22:17
2026-04-13T02:22:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:22:41.018 [DEBUG] [Thread-200091] [transport.py] [_log()] starting thread (client mode): 0xae5b4df0
2026-04-13T02:22:41.018 [DEBUG] [Thread-200091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:22:41.038 [DEBUG] [Thread-200091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:22:41.038 [INFO] [Thread-200091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:41.042 [DEBUG] [Thread-200091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] client lang: <none>
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] server lang: <none>
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] kex follows: False
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] Compression: none
2026-04-13T02:22:41.043 [DEBUG] [Thread-200091] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:22:41.063 [DEBUG] [Thread-200091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:22:41.063 [DEBUG] [Thread-200091] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:22:41.064 [DEBUG] [Thread-200091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:22:41.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:22:41.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:22:41.066 [DEBUG] [Thread-200091] [transport.py] [_log()] userauth is OK
2026-04-13T02:22:41.066 [DEBUG] [Thread-200091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:22:41.067 [DEBUG] [Thread-200091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:22:41.067 [DEBUG] [Thread-200091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:22:41.067 [DEBUG] [Thread-200091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:22:41.084 [INFO] [Thread-200091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:22:41.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:22:41.812 [DEBUG] [Thread-200091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:22:41.812 [DEBUG] [Thread-200091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:22:41.813 [DEBUG] [Thread-200091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:22:41.853 [DEBUG] [Thread-200091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:22:41.853 [DEBUG] [Thread-200091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:22:41.857 [DEBUG] [Thread-200091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:22:41.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:22:41.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:22:41.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:22:41.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:22:41.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:22:41.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:22:41.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:22:41.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:22:41.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:22:41.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.015028 -999.00  +10.50   4.68     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .nESw 4.7 4.7 197.8 10.0 11.3 -21.7 11.2 -20.6 10.9 -18.6 11.2 -20.5
2026-04-13T02:22:41.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:22:41.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:22:41.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.015028
2026-04-13T02:22:41.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:22:41.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:22:41.884 [DEBUG] [Thread-200091] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:22:41.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:22:41.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:22:41.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:22:41.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:22:17', tmtdew=1.7202, humidity=88.7706, cloud=0.0, wind=10.782, temperature=10.7056, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:21:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:22:41.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:22:41.977 [DEBUG] [Thread-200094] [transport.py] [_log()] starting thread (client mode): 0xb0feb070
2026-04-13T02:22:41.978 [DEBUG] [Thread-200094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:22:41.992 [DEBUG] [Thread-200094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:22:41.992 [INFO] [Thread-200094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:22:42.001 [DEBUG] [Thread-200094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:22:42.001 [DEBUG] [Thread-200094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:22:42.001 [DEBUG] [Thread-200094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:22:42.001 [DEBUG] [Thread-200094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:42.001 [DEBUG] [Thread-200094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:22:42.001 [DEBUG] [Thread-200094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] client lang: <none>
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] server lang: <none>
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] kex follows: False
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] Compression: none
2026-04-13T02:22:42.002 [DEBUG] [Thread-200094] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:22:42.061 [DEBUG] [Thread-200094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:22:42.061 [DEBUG] [Thread-200094] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:22:42.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:22:42.062 [DEBUG] [Thread-200094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:22:42.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:22:42.117 [DEBUG] [Thread-200094] [transport.py] [_log()] userauth is OK
2026-04-13T02:22:42.118 [DEBUG] [Thread-200094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:22:42.118 [DEBUG] [Thread-200094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:22:42.118 [DEBUG] [Thread-200094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:22:42.118 [DEBUG] [Thread-200094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:22:42.136 [INFO] [Thread-200094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:22:42.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:22:42.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:22:42.966 [DEBUG] [Thread-200094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:22:42.967 [DEBUG] [Thread-200094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:22:43.016 [DEBUG] [Thread-200094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:22:43.016 [DEBUG] [Thread-200094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:22:43.026 [DEBUG] [Thread-200094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:22:43.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:22:43.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:22:43.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:22:43.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:22:43.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:22:43.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:22:43.063 [DEBUG] [Thread-200094] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:22:47.172 [DEBUG] [Thread-200096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:02.222 [DEBUG] [Thread-200097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:13.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:23:13.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:23:13.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:23:14.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 22, 52), 1.62273, 89.6408, 0.0, 11.0462, 10.7116, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:23:14.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:22:52
2026-04-13T02:23:14.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:23:14.912 [DEBUG] [Thread-200098] [transport.py] [_log()] starting thread (client mode): 0xae50bfa0
2026-04-13T02:23:14.912 [DEBUG] [Thread-200098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:23:14.930 [DEBUG] [Thread-200098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:23:14.930 [INFO] [Thread-200098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:23:14.933 [DEBUG] [Thread-200098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:23:14.933 [DEBUG] [Thread-200098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:23:14.933 [DEBUG] [Thread-200098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:23:14.933 [DEBUG] [Thread-200098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:14.933 [DEBUG] [Thread-200098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:14.933 [DEBUG] [Thread-200098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:14.933 [DEBUG] [Thread-200098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] client lang: <none>
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] server lang: <none>
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] kex follows: False
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] Compression: none
2026-04-13T02:23:14.934 [DEBUG] [Thread-200098] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:23:14.951 [DEBUG] [Thread-200098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:23:14.952 [DEBUG] [Thread-200098] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:23:14.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:23:14.953 [DEBUG] [Thread-200098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:23:14.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:23:14.955 [DEBUG] [Thread-200098] [transport.py] [_log()] userauth is OK
2026-04-13T02:23:14.956 [DEBUG] [Thread-200098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:23:14.956 [DEBUG] [Thread-200098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:23:14.956 [DEBUG] [Thread-200098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:23:14.956 [DEBUG] [Thread-200098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:23:14.980 [INFO] [Thread-200098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:23:14.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:23:15.765 [DEBUG] [Thread-200098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:23:15.765 [DEBUG] [Thread-200098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:23:15.765 [DEBUG] [Thread-200098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:23:15.806 [DEBUG] [Thread-200098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:23:15.806 [DEBUG] [Thread-200098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:23:15.810 [DEBUG] [Thread-200098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:23:15.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:23:15.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:23:15.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:23:15.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:23:15.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:23:15.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:23:15.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:23:15.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:23:15.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:23:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.015723 -999.00  +10.50   6.03     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .NESW 6.0 6.0 198.4 8.6 11.3 -21.7 11.2 -20.5 10.9 -18.7 11.2 -20.6
2026-04-13T02:23:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:23:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:23:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.015723
2026-04-13T02:23:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:23:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:23:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:23:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:23:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:23:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:22:52', tmtdew=1.62273, humidity=89.6408, cloud=0.0, wind=11.0462, temperature=10.7116, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:22:38.467', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:23:15.838 [DEBUG] [Thread-200098] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:23:15.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:23:15.931 [DEBUG] [Thread-200101] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-13T02:23:15.931 [DEBUG] [Thread-200101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:23:15.945 [DEBUG] [Thread-200101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:23:15.945 [INFO] [Thread-200101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:23:15.953 [DEBUG] [Thread-200101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:23:15.953 [DEBUG] [Thread-200101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:23:15.953 [DEBUG] [Thread-200101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] client lang: <none>
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] server lang: <none>
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] kex follows: False
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] Compression: none
2026-04-13T02:23:15.954 [DEBUG] [Thread-200101] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:23:16.013 [DEBUG] [Thread-200101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:23:16.013 [DEBUG] [Thread-200101] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:23:16.014 [DEBUG] [Thread-200101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:23:16.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:23:16.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:23:16.069 [DEBUG] [Thread-200101] [transport.py] [_log()] userauth is OK
2026-04-13T02:23:16.069 [DEBUG] [Thread-200101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:23:16.069 [DEBUG] [Thread-200101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:23:16.069 [DEBUG] [Thread-200101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:23:16.069 [DEBUG] [Thread-200101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:23:16.088 [INFO] [Thread-200101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:23:16.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:23:16.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:23:16.880 [DEBUG] [Thread-200101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:23:16.880 [DEBUG] [Thread-200101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:23:16.928 [DEBUG] [Thread-200101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:23:16.928 [DEBUG] [Thread-200101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:23:16.937 [DEBUG] [Thread-200101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:23:16.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:23:16.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:23:16.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:23:16.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:23:16.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:23:16.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:23:16.974 [DEBUG] [Thread-200101] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:23:17.259 [DEBUG] [Thread-200103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:21.502 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:21.504 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:32.321 [DEBUG] [Thread-200104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:32.787 [DEBUG] [Thread-200105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:46.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:23:46.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:23:46.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:23:47.357 [DEBUG] [Thread-200106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:23:48.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 23, 28), 1.70353, 89.3702, 0.0, 10.782, 10.739, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:23:48.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:23:28
2026-04-13T02:23:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:23:48.850 [DEBUG] [Thread-200107] [transport.py] [_log()] starting thread (client mode): 0xae50b550
2026-04-13T02:23:48.850 [DEBUG] [Thread-200107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:23:48.870 [DEBUG] [Thread-200107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:23:48.870 [INFO] [Thread-200107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] client lang: <none>
2026-04-13T02:23:48.873 [DEBUG] [Thread-200107] [transport.py] [_log()] server lang: <none>
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] kex follows: False
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] Compression: none
2026-04-13T02:23:48.874 [DEBUG] [Thread-200107] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:23:48.892 [DEBUG] [Thread-200107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:23:48.892 [DEBUG] [Thread-200107] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:23:48.893 [DEBUG] [Thread-200107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:23:48.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:23:48.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:23:48.895 [DEBUG] [Thread-200107] [transport.py] [_log()] userauth is OK
2026-04-13T02:23:48.895 [DEBUG] [Thread-200107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:23:48.895 [DEBUG] [Thread-200107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:23:48.895 [DEBUG] [Thread-200107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:23:48.895 [DEBUG] [Thread-200107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:23:48.931 [INFO] [Thread-200107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:23:48.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:23:49.719 [DEBUG] [Thread-200107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:23:49.720 [DEBUG] [Thread-200107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:23:49.720 [DEBUG] [Thread-200107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:23:49.760 [DEBUG] [Thread-200107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:23:49.760 [DEBUG] [Thread-200107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:23:49.763 [DEBUG] [Thread-200107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:23:49.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:23:49.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:23:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:23:49.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:23:49.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:23:49.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:23:49.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:23:49.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:23:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:23:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.016070 -999.00  +10.50   4.82     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 .NESW 4.8 4.8 229.1 9.6 11.3 -21.6 11.2 -20.7 10.9 -18.7 11.2 -20.7
2026-04-13T02:23:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:23:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:23:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.016070
2026-04-13T02:23:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:23:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:23:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:23:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:23:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:23:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:23:28', tmtdew=1.70353, humidity=89.3702, cloud=0.0, wind=10.782, temperature=10.739, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:23:08.448', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:23:49.789 [DEBUG] [Thread-200107] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:23:49.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:23:49.888 [DEBUG] [Thread-200110] [transport.py] [_log()] starting thread (client mode): 0xae52ca60
2026-04-13T02:23:49.889 [DEBUG] [Thread-200110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:23:49.903 [DEBUG] [Thread-200110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:23:49.903 [INFO] [Thread-200110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:23:49.913 [DEBUG] [Thread-200110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:23:49.913 [DEBUG] [Thread-200110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] client lang: <none>
2026-04-13T02:23:49.914 [DEBUG] [Thread-200110] [transport.py] [_log()] server lang: <none>
2026-04-13T02:23:49.915 [DEBUG] [Thread-200110] [transport.py] [_log()] kex follows: False
2026-04-13T02:23:49.915 [DEBUG] [Thread-200110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:23:49.915 [DEBUG] [Thread-200110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:23:49.915 [DEBUG] [Thread-200110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:23:49.915 [DEBUG] [Thread-200110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:23:49.915 [DEBUG] [Thread-200110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:23:49.915 [DEBUG] [Thread-200110] [transport.py] [_log()] Compression: none
2026-04-13T02:23:49.916 [DEBUG] [Thread-200110] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:23:49.974 [DEBUG] [Thread-200110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:23:49.975 [DEBUG] [Thread-200110] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:23:49.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:23:49.976 [DEBUG] [Thread-200110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:23:49.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:23:50.035 [DEBUG] [Thread-200110] [transport.py] [_log()] userauth is OK
2026-04-13T02:23:50.035 [DEBUG] [Thread-200110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:23:50.035 [DEBUG] [Thread-200110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:23:50.035 [DEBUG] [Thread-200110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:23:50.035 [DEBUG] [Thread-200110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:23:50.054 [INFO] [Thread-200110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:23:50.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:23:50.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:23:50.858 [DEBUG] [Thread-200110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:23:50.858 [DEBUG] [Thread-200110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:23:50.906 [DEBUG] [Thread-200110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:23:50.906 [DEBUG] [Thread-200110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:23:50.915 [DEBUG] [Thread-200110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:23:50.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:23:50.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:23:50.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:23:50.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:23:50.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:23:50.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:23:50.952 [DEBUG] [Thread-200110] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:24:02.392 [DEBUG] [Thread-200112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:24:17.447 [DEBUG] [Thread-200113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:24:20.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:24:20.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:24:20.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:24:21.714 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:24:21.716 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:24:22.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 24, 4), 1.7002, 89.3868, 0.0, 10.8173, 10.6892, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:24:22.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:24:04
2026-04-13T02:24:22.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:24:22.797 [DEBUG] [Thread-200114] [transport.py] [_log()] starting thread (client mode): 0xae50b9d0
2026-04-13T02:24:22.797 [DEBUG] [Thread-200114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:24:22.818 [DEBUG] [Thread-200114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:24:22.818 [INFO] [Thread-200114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:24:22.821 [DEBUG] [Thread-200114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] client lang: <none>
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] server lang: <none>
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] kex follows: False
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] Compression: none
2026-04-13T02:24:22.822 [DEBUG] [Thread-200114] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:24:22.839 [DEBUG] [Thread-200114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:24:22.840 [DEBUG] [Thread-200114] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:24:22.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:24:22.841 [DEBUG] [Thread-200114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:24:22.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:24:22.843 [DEBUG] [Thread-200114] [transport.py] [_log()] userauth is OK
2026-04-13T02:24:22.844 [DEBUG] [Thread-200114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:24:22.844 [DEBUG] [Thread-200114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:24:22.844 [DEBUG] [Thread-200114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:24:22.844 [DEBUG] [Thread-200114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:24:22.868 [INFO] [Thread-200114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:24:22.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:24:23.651 [DEBUG] [Thread-200114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:24:23.651 [DEBUG] [Thread-200114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:24:23.652 [DEBUG] [Thread-200114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:24:23.692 [DEBUG] [Thread-200114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:24:23.693 [DEBUG] [Thread-200114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:24:23.696 [DEBUG] [Thread-200114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:24:23.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:24:23.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:24:23.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:24:23.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:24:23.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:24:23.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:24:23.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:24:23.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:24:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:24:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.016417 -999.00  +10.50   5.36     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNeSW 5.4 5.4 199.8 8.7 11.3 -21.7 11.2 -20.7 10.9 -18.7 11.2 -20.7
2026-04-13T02:24:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:24:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:24:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.016417
2026-04-13T02:24:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:24:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:24:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:24:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:24:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:24:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:24:04', tmtdew=1.7002, humidity=89.3868, cloud=0.0, wind=10.8173, temperature=10.6892, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:23:38.429', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:24:23.723 [DEBUG] [Thread-200114] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:24:23.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:24:23.816 [DEBUG] [Thread-200117] [transport.py] [_log()] starting thread (client mode): 0xb0fb6e90
2026-04-13T02:24:23.816 [DEBUG] [Thread-200117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:24:23.831 [DEBUG] [Thread-200117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:24:23.831 [INFO] [Thread-200117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:24:23.838 [DEBUG] [Thread-200117] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:24:23.838 [DEBUG] [Thread-200117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:24:23.838 [DEBUG] [Thread-200117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:24:23.838 [DEBUG] [Thread-200117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] client lang: <none>
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] server lang: <none>
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] kex follows: False
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] Compression: none
2026-04-13T02:24:23.839 [DEBUG] [Thread-200117] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:24:23.896 [DEBUG] [Thread-200117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:24:23.897 [DEBUG] [Thread-200117] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:24:23.898 [DEBUG] [Thread-200117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:24:23.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:24:23.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:24:23.953 [DEBUG] [Thread-200117] [transport.py] [_log()] userauth is OK
2026-04-13T02:24:23.953 [DEBUG] [Thread-200117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:24:23.953 [DEBUG] [Thread-200117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:24:23.953 [DEBUG] [Thread-200117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:24:23.953 [DEBUG] [Thread-200117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:24:23.972 [INFO] [Thread-200117] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:24:23.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:24:23.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:24:24.800 [DEBUG] [Thread-200117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:24:24.800 [DEBUG] [Thread-200117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:24:24.848 [DEBUG] [Thread-200117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:24:24.848 [DEBUG] [Thread-200117] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:24:24.858 [DEBUG] [Thread-200117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:24:24.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:24:24.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:24:24.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:24:24.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:24:24.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:24:24.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:24:24.894 [DEBUG] [Thread-200117] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:24:32.486 [DEBUG] [Thread-200119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:24:32.865 [DEBUG] [Thread-200120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:24:47.538 [DEBUG] [Thread-200121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:24:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:24:54.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:24:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:24:56.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 24, 40), 1.59454, 89.8067, 0.0, 10.517, 10.6452, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:24:56.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:24:40
2026-04-13T02:24:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:24:56.806 [DEBUG] [Thread-200122] [transport.py] [_log()] starting thread (client mode): 0xb0f551e0
2026-04-13T02:24:56.806 [DEBUG] [Thread-200122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:24:56.827 [DEBUG] [Thread-200122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:24:56.827 [INFO] [Thread-200122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:24:56.830 [DEBUG] [Thread-200122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] client lang: <none>
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] server lang: <none>
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] kex follows: False
2026-04-13T02:24:56.831 [DEBUG] [Thread-200122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:24:56.832 [DEBUG] [Thread-200122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:24:56.832 [DEBUG] [Thread-200122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:24:56.832 [DEBUG] [Thread-200122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:24:56.832 [DEBUG] [Thread-200122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:24:56.832 [DEBUG] [Thread-200122] [transport.py] [_log()] Compression: none
2026-04-13T02:24:56.832 [DEBUG] [Thread-200122] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:24:56.850 [DEBUG] [Thread-200122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:24:56.851 [DEBUG] [Thread-200122] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:24:56.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:24:56.852 [DEBUG] [Thread-200122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:24:56.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:24:56.855 [DEBUG] [Thread-200122] [transport.py] [_log()] userauth is OK
2026-04-13T02:24:56.855 [DEBUG] [Thread-200122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:24:56.855 [DEBUG] [Thread-200122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:24:56.855 [DEBUG] [Thread-200122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:24:56.856 [DEBUG] [Thread-200122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:24:56.891 [INFO] [Thread-200122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:24:56.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:24:57.664 [DEBUG] [Thread-200122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:24:57.664 [DEBUG] [Thread-200122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:24:57.665 [DEBUG] [Thread-200122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:24:57.706 [DEBUG] [Thread-200122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:24:57.706 [DEBUG] [Thread-200122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:24:57.708 [DEBUG] [Thread-200122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:24:57.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:24:57.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:24:57.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:24:57.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:24:57.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:24:57.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:24:57.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:24:57.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:24:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:24:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.016764 -999.00  +10.50   6.20     91   +9.10 1 2 1 3 1     0    0 -999.00 0.00 ZNeSW 6.2 6.2 204.6 8.0 11.3 -21.7 11.2 -20.6 10.9 -18.7 11.2 -20.5
2026-04-13T02:24:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:24:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:24:57.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.016764
2026-04-13T02:24:57.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:24:57.727 [DEBUG] [Thread-200122] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:24:57.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:24:57.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:24:57.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:24:57.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:24:57.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:24:40', tmtdew=1.59454, humidity=89.8067, cloud=0.0, wind=10.517, temperature=10.6452, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:24:08.410', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:24:57.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:24:57.824 [DEBUG] [Thread-200125] [transport.py] [_log()] starting thread (client mode): 0xae508c70
2026-04-13T02:24:57.824 [DEBUG] [Thread-200125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:24:57.843 [DEBUG] [Thread-200125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:24:57.843 [INFO] [Thread-200125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:24:57.851 [DEBUG] [Thread-200125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] client lang: <none>
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] server lang: <none>
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] kex follows: False
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] Compression: none
2026-04-13T02:24:57.852 [DEBUG] [Thread-200125] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:24:57.906 [DEBUG] [Thread-200125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:24:57.906 [DEBUG] [Thread-200125] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:24:57.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:24:57.907 [DEBUG] [Thread-200125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:24:57.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:24:57.964 [DEBUG] [Thread-200125] [transport.py] [_log()] userauth is OK
2026-04-13T02:24:57.964 [DEBUG] [Thread-200125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:24:57.964 [DEBUG] [Thread-200125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:24:57.964 [DEBUG] [Thread-200125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:24:57.964 [DEBUG] [Thread-200125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:24:57.978 [INFO] [Thread-200125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:24:57.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:24:57.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:24:58.777 [DEBUG] [Thread-200125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:24:58.778 [DEBUG] [Thread-200125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:24:58.826 [DEBUG] [Thread-200125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:24:58.826 [DEBUG] [Thread-200125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:24:58.838 [DEBUG] [Thread-200125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:24:58.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:24:58.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:24:58.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:24:58.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:24:58.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:24:58.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:24:58.877 [DEBUG] [Thread-200125] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:25:02.576 [DEBUG] [Thread-200127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:25:17.630 [DEBUG] [Thread-200128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:25:21.922 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:25:21.924 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:25:28.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:25:28.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:25:28.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:25:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 25, 15), 1.68123, 89.5029, 0.0, 8.69976, 10.7058, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:25:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:25:15
2026-04-13T02:25:30.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:25:30.818 [DEBUG] [Thread-200129] [transport.py] [_log()] starting thread (client mode): 0xae5b64a0
2026-04-13T02:25:30.818 [DEBUG] [Thread-200129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:25:30.838 [DEBUG] [Thread-200129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:25:30.838 [INFO] [Thread-200129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] client lang: <none>
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] server lang: <none>
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] kex follows: False
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] Compression: none
2026-04-13T02:25:30.840 [DEBUG] [Thread-200129] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:25:30.858 [DEBUG] [Thread-200129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:25:30.858 [DEBUG] [Thread-200129] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:25:30.859 [DEBUG] [Thread-200129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:25:30.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:25:30.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:25:30.860 [DEBUG] [Thread-200129] [transport.py] [_log()] userauth is OK
2026-04-13T02:25:30.861 [DEBUG] [Thread-200129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:25:30.861 [DEBUG] [Thread-200129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:25:30.861 [DEBUG] [Thread-200129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:25:30.861 [DEBUG] [Thread-200129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:25:30.878 [INFO] [Thread-200129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:25:30.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:25:31.904 [DEBUG] [Thread-200129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:25:31.904 [DEBUG] [Thread-200129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:25:31.905 [DEBUG] [Thread-200129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:25:31.945 [DEBUG] [Thread-200129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:25:31.945 [DEBUG] [Thread-200129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:25:31.949 [DEBUG] [Thread-200129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:25:31.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:25:31.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:25:31.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:25:31.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:25:31.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:25:31.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:25:31.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:25:31.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:25:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:25:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.017112 -999.00  +10.50   3.27     91   +9.10 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 3.3 3.3 239.3 7.4 11.3 -21.6 11.2 -20.6 10.9 -18.6 11.2 -20.7
2026-04-13T02:25:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:25:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:25:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.017112
2026-04-13T02:25:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:25:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:25:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:25:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:25:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:25:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:25:15', tmtdew=1.68123, humidity=89.5029, cloud=0.0, wind=8.69976, temperature=10.7058, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:24:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:25:31.978 [DEBUG] [Thread-200129] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:25:32.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:25:32.071 [DEBUG] [Thread-200132] [transport.py] [_log()] starting thread (client mode): 0xb0f56a10
2026-04-13T02:25:32.071 [DEBUG] [Thread-200132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:25:32.085 [DEBUG] [Thread-200132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:25:32.085 [INFO] [Thread-200132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:25:32.093 [DEBUG] [Thread-200132] [transport.py] [_log()] client lang: <none>
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] server lang: <none>
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] kex follows: False
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] Compression: none
2026-04-13T02:25:32.094 [DEBUG] [Thread-200132] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:25:32.160 [DEBUG] [Thread-200132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:25:32.160 [DEBUG] [Thread-200132] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:25:32.161 [DEBUG] [Thread-200132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:25:32.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:25:32.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:25:32.217 [DEBUG] [Thread-200132] [transport.py] [_log()] userauth is OK
2026-04-13T02:25:32.217 [DEBUG] [Thread-200132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:25:32.217 [DEBUG] [Thread-200132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:25:32.217 [DEBUG] [Thread-200132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:25:32.217 [DEBUG] [Thread-200132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:25:32.235 [INFO] [Thread-200132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:25:32.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:25:32.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:25:32.670 [DEBUG] [Thread-200134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:25:32.936 [DEBUG] [Thread-200135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:25:33.038 [DEBUG] [Thread-200132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:25:33.039 [DEBUG] [Thread-200132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:25:33.087 [DEBUG] [Thread-200132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:25:33.088 [DEBUG] [Thread-200132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:25:33.097 [DEBUG] [Thread-200132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:25:33.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:25:33.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:25: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
2026-04-13T02:25:33.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:25:33.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:25:33.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:25:33.133 [DEBUG] [Thread-200132] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:25:47.726 [DEBUG] [Thread-200136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:26:02.761 [DEBUG] [Thread-200137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:26:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:26:03.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:26:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:26:04.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 25, 51), 1.53514, 90.1716, 0.0, 10.129, 10.7116, 1, 2, 0, 2, 0, 0),)
2026-04-13T02:26:04.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:25:51
2026-04-13T02:26:04.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:26:04.976 [DEBUG] [Thread-200138] [transport.py] [_log()] starting thread (client mode): 0xae52c370
2026-04-13T02:26:04.976 [DEBUG] [Thread-200138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:26:04.988 [DEBUG] [Thread-200138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:26:04.988 [INFO] [Thread-200138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] client lang: <none>
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] server lang: <none>
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] kex follows: False
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:26:04.991 [DEBUG] [Thread-200138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:26:04.992 [DEBUG] [Thread-200138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:26:04.992 [DEBUG] [Thread-200138] [transport.py] [_log()] Compression: none
2026-04-13T02:26:04.992 [DEBUG] [Thread-200138] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:26:05.008 [DEBUG] [Thread-200138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:26:05.009 [DEBUG] [Thread-200138] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:26:05.009 [DEBUG] [Thread-200138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:26:05.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:26:05.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:26:05.011 [DEBUG] [Thread-200138] [transport.py] [_log()] userauth is OK
2026-04-13T02:26:05.011 [DEBUG] [Thread-200138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:26:05.011 [DEBUG] [Thread-200138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:26:05.011 [DEBUG] [Thread-200138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:26:05.011 [DEBUG] [Thread-200138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:26:05.029 [INFO] [Thread-200138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:26:05.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:26:05.790 [DEBUG] [Thread-200138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:26:05.791 [DEBUG] [Thread-200138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:26:05.791 [DEBUG] [Thread-200138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:26:05.832 [DEBUG] [Thread-200138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:26:05.832 [DEBUG] [Thread-200138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:26:05.835 [DEBUG] [Thread-200138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:26:05.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:26:05.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:26:05.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:26:05.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:26:05.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:26:05.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:26:05.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:26:05.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:26:05.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:26:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.017459 -999.00  +10.50   4.92     91   +9.10 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 4.9 4.9 216.1 7.7 11.3 -21.6 11.2 -20.7 10.9 -18.6 11.2 -20.5
2026-04-13T02:26:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:26:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:26:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.017459
2026-04-13T02:26:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:26:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:26:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:26:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:26:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:26:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:25:51', tmtdew=1.53514, humidity=90.1716, cloud=0.0, wind=10.129, temperature=10.7116, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:25:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:26:05.860 [DEBUG] [Thread-200138] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:26:05.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:26:05.954 [DEBUG] [Thread-200141] [transport.py] [_log()] starting thread (client mode): 0xae5b55d0
2026-04-13T02:26:05.954 [DEBUG] [Thread-200141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:26:05.969 [DEBUG] [Thread-200141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:26:05.969 [INFO] [Thread-200141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:26:05.976 [DEBUG] [Thread-200141] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:26:05.976 [DEBUG] [Thread-200141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:26:05.976 [DEBUG] [Thread-200141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:26:05.976 [DEBUG] [Thread-200141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] client lang: <none>
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] server lang: <none>
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] kex follows: False
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:26:05.977 [DEBUG] [Thread-200141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:26:05.978 [DEBUG] [Thread-200141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:26:05.978 [DEBUG] [Thread-200141] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:26:05.978 [DEBUG] [Thread-200141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:26:05.978 [DEBUG] [Thread-200141] [transport.py] [_log()] Compression: none
2026-04-13T02:26:05.978 [DEBUG] [Thread-200141] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:26:06.036 [DEBUG] [Thread-200141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:26:06.036 [DEBUG] [Thread-200141] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:26:06.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:26:06.037 [DEBUG] [Thread-200141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:26:06.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:26:06.092 [DEBUG] [Thread-200141] [transport.py] [_log()] userauth is OK
2026-04-13T02:26:06.092 [DEBUG] [Thread-200141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:26:06.092 [DEBUG] [Thread-200141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:26:06.092 [DEBUG] [Thread-200141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:26:06.093 [DEBUG] [Thread-200141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:26:06.112 [INFO] [Thread-200141] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:26:06.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:26:06.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:26:06.961 [DEBUG] [Thread-200141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:26:06.961 [DEBUG] [Thread-200141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:26:07.009 [DEBUG] [Thread-200141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:26:07.009 [DEBUG] [Thread-200141] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:26:07.018 [DEBUG] [Thread-200141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:26:07.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:26:07.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:26:07.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:26:07.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:26:07.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:26:07.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:26:07.051 [DEBUG] [Thread-200141] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:26:17.793 [DEBUG] [Thread-200143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:26:22.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:26:22.130 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:26:32.848 [DEBUG] [Thread-200144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:26:33.002 [DEBUG] [Thread-200145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:26:37.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:26:37.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:26:37.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:26:38.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 26, 26), 1.66974, 89.5692, 0.0, 8.66448, 10.656, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:26:38.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:26:26
2026-04-13T02:26:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:26:38.892 [DEBUG] [Thread-200146] [transport.py] [_log()] starting thread (client mode): 0xb0febfd0
2026-04-13T02:26:38.892 [DEBUG] [Thread-200146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:26:38.912 [DEBUG] [Thread-200146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:26:38.912 [INFO] [Thread-200146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:26:38.915 [DEBUG] [Thread-200146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:26:38.915 [DEBUG] [Thread-200146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:26:38.915 [DEBUG] [Thread-200146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:26:38.915 [DEBUG] [Thread-200146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:38.915 [DEBUG] [Thread-200146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] client lang: <none>
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] server lang: <none>
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] kex follows: False
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:26:38.916 [DEBUG] [Thread-200146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:26:38.917 [DEBUG] [Thread-200146] [transport.py] [_log()] Compression: none
2026-04-13T02:26:38.917 [DEBUG] [Thread-200146] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:26:38.936 [DEBUG] [Thread-200146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:26:38.937 [DEBUG] [Thread-200146] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:26:38.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:26:38.938 [DEBUG] [Thread-200146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:26:38.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:26:38.940 [DEBUG] [Thread-200146] [transport.py] [_log()] userauth is OK
2026-04-13T02:26:38.940 [DEBUG] [Thread-200146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:26:38.941 [DEBUG] [Thread-200146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:26:38.941 [DEBUG] [Thread-200146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:26:38.941 [DEBUG] [Thread-200146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:26:38.964 [INFO] [Thread-200146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:26:38.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:26:39.791 [DEBUG] [Thread-200146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:26:39.791 [DEBUG] [Thread-200146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:26:39.791 [DEBUG] [Thread-200146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:26:39.832 [DEBUG] [Thread-200146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:26:39.833 [DEBUG] [Thread-200146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:26:39.836 [DEBUG] [Thread-200146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:26:39.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:26:39.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:26:39.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:26:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:26:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:26:39.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:26:39.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:26:39.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:26:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:26:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.018154 -999.00  +10.40   3.87     90   +9.00 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 3.9 3.9 220.0 6.2 11.3 -21.6 11.2 -20.6 10.9 -18.7 11.2 -20.7
2026-04-13T02:26:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:26:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:26:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.018154
2026-04-13T02:26:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:26:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:26:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:26:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:26:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:26:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:26:26', tmtdew=1.66974, humidity=89.5692, cloud=0.0, wind=8.66448, temperature=10.656, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:26:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:26:39.860 [DEBUG] [Thread-200146] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:26:39.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:26:39.953 [DEBUG] [Thread-200149] [transport.py] [_log()] starting thread (client mode): 0xae52c7c0
2026-04-13T02:26:39.953 [DEBUG] [Thread-200149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:26:39.967 [DEBUG] [Thread-200149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:26:39.967 [INFO] [Thread-200149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] client lang: <none>
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] server lang: <none>
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] kex follows: False
2026-04-13T02:26:39.975 [DEBUG] [Thread-200149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:26:39.976 [DEBUG] [Thread-200149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:26:39.976 [DEBUG] [Thread-200149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:26:39.976 [DEBUG] [Thread-200149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:26:39.976 [DEBUG] [Thread-200149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:26:39.976 [DEBUG] [Thread-200149] [transport.py] [_log()] Compression: none
2026-04-13T02:26:39.976 [DEBUG] [Thread-200149] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:26:40.032 [DEBUG] [Thread-200149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:26:40.033 [DEBUG] [Thread-200149] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:26:40.034 [DEBUG] [Thread-200149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:26:40.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:26:40.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:26:40.089 [DEBUG] [Thread-200149] [transport.py] [_log()] userauth is OK
2026-04-13T02:26:40.089 [DEBUG] [Thread-200149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:26:40.089 [DEBUG] [Thread-200149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:26:40.089 [DEBUG] [Thread-200149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:26:40.089 [DEBUG] [Thread-200149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:26:40.114 [INFO] [Thread-200149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:26:40.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:26:40.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:26:40.977 [DEBUG] [Thread-200149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:26:40.978 [DEBUG] [Thread-200149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:26:41.025 [DEBUG] [Thread-200149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:26:41.025 [DEBUG] [Thread-200149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:26:41.035 [DEBUG] [Thread-200149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:26:41.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:26:41.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:26:41.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:26:41.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:26:41.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:26:41.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:26:41.072 [DEBUG] [Thread-200149] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:26:47.884 [DEBUG] [Thread-200151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:02.934 [DEBUG] [Thread-200152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:27:11.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:27:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:27:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 27, 2), 1.6641, 89.6024, 0.0, 8.57628, 10.6394, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:27:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:27:02
2026-04-13T02:27:12.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:27:12.944 [DEBUG] [Thread-200153] [transport.py] [_log()] starting thread (client mode): 0xb0fccd30
2026-04-13T02:27:12.944 [DEBUG] [Thread-200153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:27:12.959 [DEBUG] [Thread-200153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:27:12.959 [INFO] [Thread-200153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:27:12.962 [DEBUG] [Thread-200153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] client lang: <none>
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] server lang: <none>
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] kex follows: False
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] Compression: none
2026-04-13T02:27:12.963 [DEBUG] [Thread-200153] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:27:12.980 [DEBUG] [Thread-200153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:27:12.981 [DEBUG] [Thread-200153] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:27:12.981 [DEBUG] [Thread-200153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:27:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:27:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:27:12.983 [DEBUG] [Thread-200153] [transport.py] [_log()] userauth is OK
2026-04-13T02:27:12.983 [DEBUG] [Thread-200153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:27:12.984 [DEBUG] [Thread-200153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:27:12.984 [DEBUG] [Thread-200153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:27:12.984 [DEBUG] [Thread-200153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:27:13.002 [INFO] [Thread-200153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:27:13.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:27:13.777 [DEBUG] [Thread-200153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:27:13.778 [DEBUG] [Thread-200153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:27:13.778 [DEBUG] [Thread-200153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:27:13.819 [DEBUG] [Thread-200153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:27:13.819 [DEBUG] [Thread-200153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:27:13.823 [DEBUG] [Thread-200153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:27:13.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:27:13.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:27:13.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:27:13.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:27:13.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:27:13.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:27:13.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:27:13.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:27:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:27:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.018500 -999.00  +10.40   5.13     90   +9.00 1 2 1 3 1     0    0 -999.00 0.00 .NeSW 5.1 5.1 195.2 7.2 11.3 -21.6 11.1 -20.5 10.9 -18.7 11.2 -20.5
2026-04-13T02:27:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:27:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:27:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.018500
2026-04-13T02:27:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:27:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:27:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:27:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:27:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:27:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:27:02', tmtdew=1.6641, humidity=89.6024, cloud=0.0, wind=8.57628, temperature=10.6394, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:26:38.400', atlas_cloud=2, atlas_rain=1, zp_data=[1.6767499999999993, nan, 1.7672500000000007, 1.729499999999999, nan, nan, 0.23199999999999932, nan, nan, 2.258, 1.6487499999999997, 1.0110000000000001, nan, nan, -0.017000000000001236, nan, nan, 1.1464999999999996, 0.19599999999999973, 0.6392499999999988, 1.5909999999999984, 1.8322499999999984, nan, nan, 1.9849999999999994, 0.05850000000000044, 0.03775000000000084, -0.042500000000000426, 0.02800000000000047, 0.18100000000000094, 0.39800000000000146, 0.634500000000001, 0.22974999999999923], zp_timestamp='2026-04-13T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:27:13.849 [DEBUG] [Thread-200153] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:27:13.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:27:13.943 [DEBUG] [Thread-200156] [transport.py] [_log()] starting thread (client mode): 0xb0fcde40
2026-04-13T02:27:13.943 [DEBUG] [Thread-200156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:27:13.959 [DEBUG] [Thread-200156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:27:13.959 [INFO] [Thread-200156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] client lang: <none>
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] server lang: <none>
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] kex follows: False
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:27:13.967 [DEBUG] [Thread-200156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:27:13.968 [DEBUG] [Thread-200156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:27:13.968 [DEBUG] [Thread-200156] [transport.py] [_log()] Compression: none
2026-04-13T02:27:13.968 [DEBUG] [Thread-200156] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:27:14.025 [DEBUG] [Thread-200156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:27:14.025 [DEBUG] [Thread-200156] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:27:14.026 [DEBUG] [Thread-200156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:27:14.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:27:14.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:27:14.081 [DEBUG] [Thread-200156] [transport.py] [_log()] userauth is OK
2026-04-13T02:27:14.081 [DEBUG] [Thread-200156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:27:14.082 [DEBUG] [Thread-200156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:27:14.082 [DEBUG] [Thread-200156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:27:14.082 [DEBUG] [Thread-200156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:27:14.100 [INFO] [Thread-200156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:27:14.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:27:14.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:27:14.872 [DEBUG] [Thread-200156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:27:14.872 [DEBUG] [Thread-200156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:27:14.920 [DEBUG] [Thread-200156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:27:14.920 [DEBUG] [Thread-200156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:27:14.929 [DEBUG] [Thread-200156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:27:14.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:27:14.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:27:14.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:27:14.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:27:14.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:27:14.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:27:14.966 [DEBUG] [Thread-200156] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:27:17.970 [DEBUG] [Thread-200158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:22.337 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:22.339 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:33.031 [DEBUG] [Thread-200159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:33.079 [DEBUG] [Thread-200160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:27:44.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:27:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:27:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 27, 37), 1.50169, 90.3707, 0.0, 9.98784, 10.6452, 1, 2, 0, 2, 0, 0),)
2026-04-13T02:27:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:27:37
2026-04-13T02:27:46.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:27:46.758 [DEBUG] [Thread-200161] [transport.py] [_log()] starting thread (client mode): 0xae5099f0
2026-04-13T02:27:46.758 [DEBUG] [Thread-200161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:27:46.774 [DEBUG] [Thread-200161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:27:46.775 [INFO] [Thread-200161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] client lang: <none>
2026-04-13T02:27:46.778 [DEBUG] [Thread-200161] [transport.py] [_log()] server lang: <none>
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] kex follows: False
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] Compression: none
2026-04-13T02:27:46.779 [DEBUG] [Thread-200161] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:27:46.797 [DEBUG] [Thread-200161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:27:46.797 [DEBUG] [Thread-200161] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:27:46.798 [DEBUG] [Thread-200161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:27:46.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:27:46.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:27:46.800 [DEBUG] [Thread-200161] [transport.py] [_log()] userauth is OK
2026-04-13T02:27:46.801 [DEBUG] [Thread-200161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:27:46.801 [DEBUG] [Thread-200161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:27:46.801 [DEBUG] [Thread-200161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:27:46.801 [DEBUG] [Thread-200161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:27:46.815 [INFO] [Thread-200161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:27:46.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:27:47.631 [DEBUG] [Thread-200161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:27:47.631 [DEBUG] [Thread-200161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:27:47.632 [DEBUG] [Thread-200161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:27:47.672 [DEBUG] [Thread-200161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:27:47.672 [DEBUG] [Thread-200161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:27:47.675 [DEBUG] [Thread-200161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:27:47.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:27:47.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:27:47.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:27:47.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:27:47.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:27:47.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:27:47.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:27:47.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:27:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:27:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.018848 -999.00  +10.40   5.43     90   +9.00 1 2 1 3 1     0    0 -999.00 0.00 ZNeSW 5.4 5.4 192.4 6.6 11.3 -21.5 11.1 -20.5 10.9 -18.7 11.1 -20.8
2026-04-13T02:27:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:27:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:27:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.018848
2026-04-13T02:27:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:27:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:27:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:27:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:27:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:27:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:27:37', tmtdew=1.50169, humidity=90.3707, cloud=0.0, wind=9.98784, temperature=10.6452, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:27:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[1.7507499999999991, nan, nan, 3.1419999999999995, nan, nan, nan, nan, nan, 2.6110000000000007, 2.1062499999999993, 1.7640000000000002, nan, nan, nan, nan, nan, 1.3040000000000003, 0.17300000000000004, 0.5012499999999989, 1.384999999999998, 1.5007499999999983, nan, nan, 1.9854999999999992, 0.08649999999999913, 0.05874999999999986, -0.03550000000000075, 0.0884999999999998, 0.2350000000000012, 0.2950000000000008, 0.705000000000001, 0.21274999999999977], zp_timestamp='2026-04-13T00:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:27:47.697 [DEBUG] [Thread-200161] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:27:47.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:27:47.801 [DEBUG] [Thread-200164] [transport.py] [_log()] starting thread (client mode): 0xae52fac0
2026-04-13T02:27:47.801 [DEBUG] [Thread-200164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:27:47.815 [DEBUG] [Thread-200164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:27:47.815 [INFO] [Thread-200164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:27:47.822 [DEBUG] [Thread-200164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:27:47.822 [DEBUG] [Thread-200164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:27:47.822 [DEBUG] [Thread-200164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:27:47.822 [DEBUG] [Thread-200164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:47.822 [DEBUG] [Thread-200164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:27:47.822 [DEBUG] [Thread-200164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] client lang: <none>
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] server lang: <none>
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] kex follows: False
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] Compression: none
2026-04-13T02:27:47.823 [DEBUG] [Thread-200164] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:27:47.880 [DEBUG] [Thread-200164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:27:47.881 [DEBUG] [Thread-200164] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:27:47.882 [DEBUG] [Thread-200164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:27:47.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:27:47.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:27:47.936 [DEBUG] [Thread-200164] [transport.py] [_log()] userauth is OK
2026-04-13T02:27:47.937 [DEBUG] [Thread-200164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:27:47.937 [DEBUG] [Thread-200164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:27:47.937 [DEBUG] [Thread-200164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:27:47.937 [DEBUG] [Thread-200164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:27:47.956 [INFO] [Thread-200164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:27:47.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:27:47.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:27:48.066 [DEBUG] [Thread-200166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:27:48.837 [DEBUG] [Thread-200164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:27:48.838 [DEBUG] [Thread-200164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:27:48.885 [DEBUG] [Thread-200164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:27:48.885 [DEBUG] [Thread-200164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:27:48.894 [DEBUG] [Thread-200164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:27:48.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:27:48.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:27:48.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:27:48.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:27:48.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:27:48.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:27:48.932 [DEBUG] [Thread-200164] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:28:03.127 [DEBUG] [Thread-200167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:28:18.158 [DEBUG] [Thread-200168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:28:18.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:28:18.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:28:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:28:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 28, 13), 1.6425, 89.2351, 0.0, 8.66448, 10.606, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:28:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:28:13
2026-04-13T02:28:20.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:28:20.743 [DEBUG] [Thread-200169] [transport.py] [_log()] starting thread (client mode): 0xae514bb0
2026-04-13T02:28:20.743 [DEBUG] [Thread-200169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:28:20.764 [DEBUG] [Thread-200169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:28:20.764 [INFO] [Thread-200169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] client lang: <none>
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] server lang: <none>
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] kex follows: False
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] Compression: none
2026-04-13T02:28:20.768 [DEBUG] [Thread-200169] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:28:20.785 [DEBUG] [Thread-200169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:28:20.786 [DEBUG] [Thread-200169] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:28:20.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:28:20.787 [DEBUG] [Thread-200169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:28:20.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:28:20.789 [DEBUG] [Thread-200169] [transport.py] [_log()] userauth is OK
2026-04-13T02:28:20.789 [DEBUG] [Thread-200169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:28:20.789 [DEBUG] [Thread-200169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:28:20.789 [DEBUG] [Thread-200169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:28:20.789 [DEBUG] [Thread-200169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:28:20.807 [INFO] [Thread-200169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:28:20.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:28:21.602 [DEBUG] [Thread-200169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:28:21.602 [DEBUG] [Thread-200169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:28:21.603 [DEBUG] [Thread-200169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:28:21.643 [DEBUG] [Thread-200169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:28:21.643 [DEBUG] [Thread-200169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:28:21.646 [DEBUG] [Thread-200169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:28:21.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:28:21.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:28:21.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:28:21.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:28:21.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:28:21.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:28:21.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:28:21.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:28:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:28:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.019195 -999.00  +10.50   4.64     90   +9.00 1 2 1 3 1     0    0 -999.00 0.00 ZNeSW 4.6 4.6 199.0 7.0 11.3 -21.7 11.2 -20.6 10.8 -18.6 11.2 -20.8
2026-04-13T02:28:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:28:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:28:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.019195
2026-04-13T02:28:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:28:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:28:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:28:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:28:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:28:21.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:28:13', tmtdew=1.6425, humidity=89.2351, cloud=0.0, wind=8.66448, temperature=10.606, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:27:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[1.7507499999999991, nan, nan, 3.1419999999999995, nan, nan, nan, nan, nan, 2.6110000000000007, 2.1062499999999993, 1.7640000000000002, nan, nan, nan, nan, nan, 1.3040000000000003, 0.17300000000000004, 0.5012499999999989, 1.384999999999998, 1.5007499999999983, nan, nan, 1.9854999999999992, 0.08649999999999913, 0.05874999999999986, -0.03550000000000075, 0.0884999999999998, 0.2350000000000012, 0.2950000000000008, 0.705000000000001, 0.21274999999999977], zp_timestamp='2026-04-13T00:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:28:21.669 [DEBUG] [Thread-200169] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:28:21.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:28:21.762 [DEBUG] [Thread-200172] [transport.py] [_log()] starting thread (client mode): 0xae5b55d0
2026-04-13T02:28:21.762 [DEBUG] [Thread-200172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:28:21.776 [DEBUG] [Thread-200172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:28:21.777 [INFO] [Thread-200172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:28:21.784 [DEBUG] [Thread-200172] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:28:21.784 [DEBUG] [Thread-200172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] client lang: <none>
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] server lang: <none>
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] kex follows: False
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] Compression: none
2026-04-13T02:28:21.785 [DEBUG] [Thread-200172] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:28:21.845 [DEBUG] [Thread-200172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:28:21.846 [DEBUG] [Thread-200172] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:28:21.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:28:21.847 [DEBUG] [Thread-200172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:28:21.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:28:21.901 [DEBUG] [Thread-200172] [transport.py] [_log()] userauth is OK
2026-04-13T02:28:21.901 [DEBUG] [Thread-200172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:28:21.902 [DEBUG] [Thread-200172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:28:21.902 [DEBUG] [Thread-200172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:28:21.902 [DEBUG] [Thread-200172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:28:21.921 [INFO] [Thread-200172] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:28:21.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:28:21.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:28:22.543 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:28:22.545 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:28:22.738 [DEBUG] [Thread-200172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:28:22.738 [DEBUG] [Thread-200172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:28:22.786 [DEBUG] [Thread-200172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:28:22.786 [DEBUG] [Thread-200172] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:28:22.795 [DEBUG] [Thread-200172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:28:22.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:28:22.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:28:22.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:28:22.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:28:22.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:28:22.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:28:22.831 [DEBUG] [Thread-200172] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:28:33.145 [DEBUG] [Thread-200174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:28:33.193 [DEBUG] [Thread-200175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:28:48.254 [DEBUG] [Thread-200176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:28:52.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:28:52.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:28:52.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:28:54.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 28, 13), 1.6425, 89.2351, 0.0, 8.66448, 10.606, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:28:54.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:28:13
2026-04-13T02:28:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:28:54.730 [DEBUG] [Thread-200177] [transport.py] [_log()] starting thread (client mode): 0xae5f3dc0
2026-04-13T02:28:54.730 [DEBUG] [Thread-200177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:28:54.749 [DEBUG] [Thread-200177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:28:54.749 [INFO] [Thread-200177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:54.752 [DEBUG] [Thread-200177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] client lang: <none>
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] server lang: <none>
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] kex follows: False
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] Compression: none
2026-04-13T02:28:54.753 [DEBUG] [Thread-200177] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:28:54.771 [DEBUG] [Thread-200177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:28:54.772 [DEBUG] [Thread-200177] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:28:54.772 [DEBUG] [Thread-200177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:28:54.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:28:54.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:28:54.774 [DEBUG] [Thread-200177] [transport.py] [_log()] userauth is OK
2026-04-13T02:28:54.775 [DEBUG] [Thread-200177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:28:54.775 [DEBUG] [Thread-200177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:28:54.775 [DEBUG] [Thread-200177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:28:54.775 [DEBUG] [Thread-200177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:28:54.799 [INFO] [Thread-200177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:28:54.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:28:55.605 [DEBUG] [Thread-200177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:28:55.605 [DEBUG] [Thread-200177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:28:55.606 [DEBUG] [Thread-200177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:28:55.646 [DEBUG] [Thread-200177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:28:55.646 [DEBUG] [Thread-200177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:28:55.650 [DEBUG] [Thread-200177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:28:55.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:28:55.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:28:55.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:28:55.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:28:55.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:28:55.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:28:55.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:28:55.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:28:55.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:28:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.019542 -999.00  +10.50   5.31     90   +9.00 1 2 1 3 1     0    0 -999.00 0.00 .NESW 5.3 5.3 202.2 6.7 11.3 -21.6 11.1 -20.5 10.8 -18.7 11.1 -20.5
2026-04-13T02:28:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:28:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:28:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.019542
2026-04-13T02:28:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:28:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:28:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:28:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:28:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:28:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:28:13', tmtdew=1.6425, humidity=89.2351, cloud=0.0, wind=8.66448, temperature=10.606, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:28:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[1.7507499999999991, nan, nan, 3.1419999999999995, nan, nan, nan, nan, nan, 2.6110000000000007, 2.1062499999999993, 1.7640000000000002, nan, nan, nan, nan, nan, 1.3040000000000003, 0.17300000000000004, 0.5012499999999989, 1.384999999999998, 1.5007499999999983, nan, nan, 1.9854999999999992, 0.08649999999999913, 0.05874999999999986, -0.03550000000000075, 0.0884999999999998, 0.2350000000000012, 0.2950000000000008, 0.705000000000001, 0.21274999999999977], zp_timestamp='2026-04-13T00:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:28:55.678 [DEBUG] [Thread-200177] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:28:55.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:28:55.770 [DEBUG] [Thread-200180] [transport.py] [_log()] starting thread (client mode): 0xb0fceec0
2026-04-13T02:28:55.770 [DEBUG] [Thread-200180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:28:55.786 [DEBUG] [Thread-200180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:28:55.786 [INFO] [Thread-200180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:28:55.797 [DEBUG] [Thread-200180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:28:55.797 [DEBUG] [Thread-200180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:28:55.797 [DEBUG] [Thread-200180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:28:55.797 [DEBUG] [Thread-200180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:55.797 [DEBUG] [Thread-200180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:28:55.797 [DEBUG] [Thread-200180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] client lang: <none>
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] server lang: <none>
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] kex follows: False
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] Compression: none
2026-04-13T02:28:55.798 [DEBUG] [Thread-200180] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:28:55.857 [DEBUG] [Thread-200180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:28:55.857 [DEBUG] [Thread-200180] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:28:55.858 [DEBUG] [Thread-200180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:28:55.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:28:55.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:28:55.915 [DEBUG] [Thread-200180] [transport.py] [_log()] userauth is OK
2026-04-13T02:28:55.915 [DEBUG] [Thread-200180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:28:55.916 [DEBUG] [Thread-200180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:28:55.916 [DEBUG] [Thread-200180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:28:55.916 [DEBUG] [Thread-200180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:28:55.934 [INFO] [Thread-200180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:28:55.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:28:55.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:28:56.750 [DEBUG] [Thread-200180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:28:56.750 [DEBUG] [Thread-200180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:28:56.798 [DEBUG] [Thread-200180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:28:56.798 [DEBUG] [Thread-200180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:28:56.807 [DEBUG] [Thread-200180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:28:56.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:28: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')
2026-04-13T02:28:56.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:28:56.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:28:56.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:28:56.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:28:56.850 [DEBUG] [Thread-200180] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:29:03.295 [DEBUG] [Thread-200182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:29:18.346 [DEBUG] [Thread-200183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:29:22.750 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:29:22.752 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:29:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:29:26.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:29:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:29:28.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 28, 48), 1.47375, 90.5366, 0.0, 10.0584, 10.5789, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:29:28.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:28:48
2026-04-13T02:29:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:29:28.659 [DEBUG] [Thread-200184] [transport.py] [_log()] starting thread (client mode): 0xae516230
2026-04-13T02:29:28.659 [DEBUG] [Thread-200184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:29:28.679 [DEBUG] [Thread-200184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:29:28.679 [INFO] [Thread-200184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:29:28.682 [DEBUG] [Thread-200184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:29:28.682 [DEBUG] [Thread-200184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:29:28.682 [DEBUG] [Thread-200184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:29:28.682 [DEBUG] [Thread-200184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] client lang: <none>
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] server lang: <none>
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] kex follows: False
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] Compression: none
2026-04-13T02:29:28.683 [DEBUG] [Thread-200184] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:29:28.701 [DEBUG] [Thread-200184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:29:28.701 [DEBUG] [Thread-200184] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:29:28.702 [DEBUG] [Thread-200184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:29:28.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:29:28.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:29:28.744 [DEBUG] [Thread-200184] [transport.py] [_log()] userauth is OK
2026-04-13T02:29:28.744 [DEBUG] [Thread-200184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:29:28.744 [DEBUG] [Thread-200184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:29:28.745 [DEBUG] [Thread-200184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:29:28.745 [DEBUG] [Thread-200184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:29:28.778 [INFO] [Thread-200184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:29:28.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:29:29.574 [DEBUG] [Thread-200184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:29:29.574 [DEBUG] [Thread-200184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:29:29.574 [DEBUG] [Thread-200184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:29:29.615 [DEBUG] [Thread-200184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:29:29.615 [DEBUG] [Thread-200184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:29:29.618 [DEBUG] [Thread-200184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:29:29.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:29:29.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:29:29.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:29:29.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:29:29.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:29:29.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:29:29.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:29:29.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:29:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:29:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.019889 -999.00  +10.50   4.27     90   +9.00 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 4.3 4.3 193.5 7.1 11.3 -21.6 11.1 -20.7 10.9 -18.6 11.1 -20.8
2026-04-13T02:29:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:29:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:29:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.019889
2026-04-13T02:29:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:29:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:29:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:29:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:29:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:29:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:28:48', tmtdew=1.47375, humidity=90.5366, cloud=0.0, wind=10.0584, temperature=10.5789, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:28:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[1.7507499999999991, nan, nan, 3.1419999999999995, nan, nan, nan, nan, nan, 2.6110000000000007, 2.1062499999999993, 1.7640000000000002, nan, nan, nan, nan, nan, 1.3040000000000003, 0.17300000000000004, 0.5012499999999989, 1.384999999999998, 1.5007499999999983, nan, nan, 1.9854999999999992, 0.08649999999999913, 0.05874999999999986, -0.03550000000000075, 0.0884999999999998, 0.2350000000000012, 0.2950000000000008, 0.705000000000001, 0.21274999999999977], zp_timestamp='2026-04-13T00:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:29:29.644 [DEBUG] [Thread-200184] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:29:29.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:29:29.737 [DEBUG] [Thread-200187] [transport.py] [_log()] starting thread (client mode): 0xae50a710
2026-04-13T02:29:29.737 [DEBUG] [Thread-200187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:29:29.752 [DEBUG] [Thread-200187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:29:29.752 [INFO] [Thread-200187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:29:29.759 [DEBUG] [Thread-200187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] client lang: <none>
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] server lang: <none>
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] kex follows: False
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] Compression: none
2026-04-13T02:29:29.760 [DEBUG] [Thread-200187] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:29:29.817 [DEBUG] [Thread-200187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:29:29.818 [DEBUG] [Thread-200187] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:29:29.818 [DEBUG] [Thread-200187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:29:29.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:29:29.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:29:29.872 [DEBUG] [Thread-200187] [transport.py] [_log()] userauth is OK
2026-04-13T02:29:29.872 [DEBUG] [Thread-200187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:29:29.872 [DEBUG] [Thread-200187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:29:29.873 [DEBUG] [Thread-200187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:29:29.873 [DEBUG] [Thread-200187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:29:29.890 [INFO] [Thread-200187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:29:29.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:29:29.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:29:30.701 [DEBUG] [Thread-200187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:29:30.701 [DEBUG] [Thread-200187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:29:30.749 [DEBUG] [Thread-200187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:29:30.750 [DEBUG] [Thread-200187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:29:30.759 [DEBUG] [Thread-200187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:29:30.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:29:30.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:29:30.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:29:30.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:29:30.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:29:30.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:29:30.795 [DEBUG] [Thread-200187] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:29:33.207 [DEBUG] [Thread-200189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:29:33.382 [DEBUG] [Thread-200190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:29:48.434 [DEBUG] [Thread-200191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:30:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:30:00.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:30:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:30:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 29, 24), 1.63416, 89.2849, 0.0, 8.50572, 10.5894, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:30:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:29:24
2026-04-13T02:30:02.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:30:02.623 [DEBUG] [Thread-200192] [transport.py] [_log()] starting thread (client mode): 0xae516920
2026-04-13T02:30:02.623 [DEBUG] [Thread-200192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:30:02.643 [DEBUG] [Thread-200192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:30:02.643 [INFO] [Thread-200192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:30:02.646 [DEBUG] [Thread-200192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] client lang: <none>
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] server lang: <none>
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] kex follows: False
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] Compression: none
2026-04-13T02:30:02.647 [DEBUG] [Thread-200192] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:30:02.659 [DEBUG] [Thread-200192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:30:02.659 [DEBUG] [Thread-200192] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:30:02.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:30:02.660 [DEBUG] [Thread-200192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:30:02.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:30:02.662 [DEBUG] [Thread-200192] [transport.py] [_log()] userauth is OK
2026-04-13T02:30:02.662 [DEBUG] [Thread-200192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:30:02.662 [DEBUG] [Thread-200192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:30:02.662 [DEBUG] [Thread-200192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:30:02.662 [DEBUG] [Thread-200192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:30:02.681 [INFO] [Thread-200192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:30:02.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:30:03.468 [DEBUG] [Thread-200194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:30:03.610 [DEBUG] [Thread-200192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:30:03.610 [DEBUG] [Thread-200192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:30:03.611 [DEBUG] [Thread-200192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:30:03.651 [DEBUG] [Thread-200192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:30:03.651 [DEBUG] [Thread-200192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:30:03.655 [DEBUG] [Thread-200192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:30:03.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:30:03.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:30:03.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:30:03.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:30:03.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:30:03.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:30:03.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.020236 -999.00  +10.50   4.84     90   +9.00 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 4.8 4.8 189.8 5.7 11.3 -21.7 11.1 -20.7 10.9 -18.8 11.1 -20.7
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.020236
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:30:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:29:24', tmtdew=1.63416, humidity=89.2849, cloud=0.0, wind=8.50572, temperature=10.5894, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:29:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[1.7507499999999991, nan, nan, 3.1419999999999995, nan, nan, nan, nan, nan, 2.6110000000000007, 2.1062499999999993, 1.7640000000000002, nan, nan, nan, nan, nan, 1.3040000000000003, 0.17300000000000004, 0.5012499999999989, 1.384999999999998, 1.5007499999999983, nan, nan, 1.9854999999999992, 0.08649999999999913, 0.05874999999999986, -0.03550000000000075, 0.0884999999999998, 0.2350000000000012, 0.2950000000000008, 0.705000000000001, 0.21274999999999977], zp_timestamp='2026-04-13T00:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:30:03.677 [DEBUG] [Thread-200192] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:30:03.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:30:03.759 [DEBUG] [Thread-200196] [transport.py] [_log()] starting thread (client mode): 0xae514d60
2026-04-13T02:30:03.759 [DEBUG] [Thread-200196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:30:03.773 [DEBUG] [Thread-200196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:30:03.774 [INFO] [Thread-200196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:30:03.781 [DEBUG] [Thread-200196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:30:03.781 [DEBUG] [Thread-200196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] client lang: <none>
2026-04-13T02:30:03.782 [DEBUG] [Thread-200196] [transport.py] [_log()] server lang: <none>
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] kex follows: False
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] Compression: none
2026-04-13T02:30:03.783 [DEBUG] [Thread-200196] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:30:03.841 [DEBUG] [Thread-200196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:30:03.842 [DEBUG] [Thread-200196] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:30:03.842 [DEBUG] [Thread-200196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:30:03.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:30:03.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:30:03.897 [DEBUG] [Thread-200196] [transport.py] [_log()] userauth is OK
2026-04-13T02:30:03.897 [DEBUG] [Thread-200196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:30:03.898 [DEBUG] [Thread-200196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:30:03.898 [DEBUG] [Thread-200196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:30:03.898 [DEBUG] [Thread-200196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:30:03.917 [INFO] [Thread-200196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:30:03.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:30:03.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:30:04.813 [DEBUG] [Thread-200196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:30:04.813 [DEBUG] [Thread-200196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:30:04.861 [DEBUG] [Thread-200196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:30:04.861 [DEBUG] [Thread-200196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:30:04.870 [DEBUG] [Thread-200196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:30:04.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:30:04.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:30:04.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:30:04.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:30:04.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:30:04.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:30:04.909 [DEBUG] [Thread-200196] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:30:18.504 [DEBUG] [Thread-200198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:30:22.957 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:30:22.959 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:30:33.275 [DEBUG] [Thread-200199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:30:33.565 [DEBUG] [Thread-200200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:30:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:30:34.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:30:34.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:30:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 29, 59), 1.68109, 89.3015, 0.0, 8.7174, 10.5563, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:30:36.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:29:59
2026-04-13T02:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:30:36.880 [DEBUG] [Thread-200201] [transport.py] [_log()] starting thread (client mode): 0xae515a50
2026-04-13T02:30:36.881 [DEBUG] [Thread-200201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:30:36.898 [DEBUG] [Thread-200201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:30:36.898 [INFO] [Thread-200201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:36.901 [DEBUG] [Thread-200201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] client lang: <none>
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] server lang: <none>
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] kex follows: False
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] Compression: none
2026-04-13T02:30:36.902 [DEBUG] [Thread-200201] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:30:36.918 [DEBUG] [Thread-200201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:30:36.919 [DEBUG] [Thread-200201] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:30:36.919 [DEBUG] [Thread-200201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:30:36.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:30:36.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:30:36.922 [DEBUG] [Thread-200201] [transport.py] [_log()] userauth is OK
2026-04-13T02:30:36.923 [DEBUG] [Thread-200201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:30:36.923 [DEBUG] [Thread-200201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:30:36.923 [DEBUG] [Thread-200201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:30:36.923 [DEBUG] [Thread-200201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:30:36.944 [INFO] [Thread-200201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:30:36.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:30:37.741 [DEBUG] [Thread-200201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:30:37.741 [DEBUG] [Thread-200201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:30:37.742 [DEBUG] [Thread-200201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:30:37.783 [DEBUG] [Thread-200201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:30:37.783 [DEBUG] [Thread-200201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:30:37.785 [DEBUG] [Thread-200201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:30:37.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:30:37.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:30:37.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:30:37.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:30:37.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:30:37.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:30:37.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:30:37.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:30:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:30:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.020930 -999.00  +10.50   6.62     90   +9.00 1 1 1 3 1     0    0 0.20 -48.42 ZNESW 6.6 6.6 194.8 7.3 11.3 -21.7 11.1 -20.5 10.9 -18.6 11.1 -20.7
2026-04-13T02:30:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:30:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:30:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.020930
2026-04-13T02:30:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:30:37.809 [DEBUG] [Thread-200201] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:30:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:30:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:30:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:30:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:30:37.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:29:59', tmtdew=1.68109, humidity=89.3015, cloud=0.0, wind=8.7174, temperature=10.5563, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:30:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:30:37.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:30:37.920 [DEBUG] [Thread-200204] [transport.py] [_log()] starting thread (client mode): 0xae514310
2026-04-13T02:30:37.920 [DEBUG] [Thread-200204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:30:37.934 [DEBUG] [Thread-200204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:30:37.934 [INFO] [Thread-200204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] client lang: <none>
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] server lang: <none>
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] kex follows: False
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] Compression: none
2026-04-13T02:30:37.942 [DEBUG] [Thread-200204] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:30:38.000 [DEBUG] [Thread-200204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:30:38.001 [DEBUG] [Thread-200204] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:30:38.001 [DEBUG] [Thread-200204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:30:38.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:30:38.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:30:38.057 [DEBUG] [Thread-200204] [transport.py] [_log()] userauth is OK
2026-04-13T02:30:38.058 [DEBUG] [Thread-200204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:30:38.058 [DEBUG] [Thread-200204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:30:38.059 [DEBUG] [Thread-200204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:30:38.059 [DEBUG] [Thread-200204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:30:38.078 [INFO] [Thread-200204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:30:38.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:30:38.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:30:38.894 [DEBUG] [Thread-200204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:30:38.894 [DEBUG] [Thread-200204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:30:38.942 [DEBUG] [Thread-200204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:30:38.942 [DEBUG] [Thread-200204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:30:38.952 [DEBUG] [Thread-200204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:30:38.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:30:38.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:30:38.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:30:38.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:30:38.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:30:38.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:30:38.989 [DEBUG] [Thread-200204] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:30:48.601 [DEBUG] [Thread-200206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:31:03.665 [DEBUG] [Thread-200207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:31:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:31:09.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:31:09.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:31:10.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 30, 34), 1.45132, 90.6693, 0.0, 10.3054, 10.5125, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:31:10.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:30:34
2026-04-13T02:31:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:31:10.826 [DEBUG] [Thread-200208] [transport.py] [_log()] starting thread (client mode): 0xae516560
2026-04-13T02:31:10.826 [DEBUG] [Thread-200208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:31:10.847 [DEBUG] [Thread-200208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:31:10.847 [INFO] [Thread-200208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] client lang: <none>
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] server lang: <none>
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] kex follows: False
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] Compression: none
2026-04-13T02:31:10.851 [DEBUG] [Thread-200208] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:31:10.870 [DEBUG] [Thread-200208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:31:10.870 [DEBUG] [Thread-200208] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:31:10.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:31:10.871 [DEBUG] [Thread-200208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:31:10.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:31:10.873 [DEBUG] [Thread-200208] [transport.py] [_log()] userauth is OK
2026-04-13T02:31:10.873 [DEBUG] [Thread-200208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:31:10.873 [DEBUG] [Thread-200208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:31:10.874 [DEBUG] [Thread-200208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:31:10.874 [DEBUG] [Thread-200208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:31:10.897 [INFO] [Thread-200208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:31:10.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:31:11.707 [DEBUG] [Thread-200208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:31:11.708 [DEBUG] [Thread-200208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:31:11.708 [DEBUG] [Thread-200208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:31:11.748 [DEBUG] [Thread-200208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:31:11.749 [DEBUG] [Thread-200208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:31:11.752 [DEBUG] [Thread-200208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:31:11.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:31:11.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:31:11.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:31:11.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:31:11.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:31:11.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:31:11.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:31:11.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:31:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:31:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.021278 -999.00  +10.50   6.56     90   +9.00 1 1 1 3 1     0    0 0.17 -48.81 ZNESW 6.6 6.6 195.8 7.2 11.2 -21.7 11.1 -20.7 10.9 -18.7 11.1 -20.5
2026-04-13T02:31:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:31:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:31:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.021278
2026-04-13T02:31:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:31:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:31:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:31:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:31:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:31:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:30:34', tmtdew=1.45132, humidity=90.6693, cloud=0.0, wind=10.3054, temperature=10.5125, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:30:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:31:11.779 [DEBUG] [Thread-200208] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:31:11.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:31:11.871 [DEBUG] [Thread-200211] [transport.py] [_log()] starting thread (client mode): 0xae52e890
2026-04-13T02:31:11.872 [DEBUG] [Thread-200211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:31:11.886 [DEBUG] [Thread-200211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:31:11.886 [INFO] [Thread-200211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] client lang: <none>
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] server lang: <none>
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] kex follows: False
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:31:11.894 [DEBUG] [Thread-200211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:31:11.895 [DEBUG] [Thread-200211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:31:11.895 [DEBUG] [Thread-200211] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:31:11.895 [DEBUG] [Thread-200211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:31:11.895 [DEBUG] [Thread-200211] [transport.py] [_log()] Compression: none
2026-04-13T02:31:11.895 [DEBUG] [Thread-200211] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:31:11.953 [DEBUG] [Thread-200211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:31:11.954 [DEBUG] [Thread-200211] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:31:11.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:31:11.955 [DEBUG] [Thread-200211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:31:11.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:31:12.009 [DEBUG] [Thread-200211] [transport.py] [_log()] userauth is OK
2026-04-13T02:31:12.010 [DEBUG] [Thread-200211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:31:12.010 [DEBUG] [Thread-200211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:31:12.010 [DEBUG] [Thread-200211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:31:12.010 [DEBUG] [Thread-200211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:31:12.028 [INFO] [Thread-200211] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:31:12.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:31:12.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:31:12.833 [DEBUG] [Thread-200211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:31:12.833 [DEBUG] [Thread-200211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:31:12.881 [DEBUG] [Thread-200211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:31:12.881 [DEBUG] [Thread-200211] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:31:12.891 [DEBUG] [Thread-200211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:31:12.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:31:12.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:31:12.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:31:12.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:31:12.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:31:12.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:31:12.927 [DEBUG] [Thread-200211] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:31:18.703 [DEBUG] [Thread-200213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:31:23.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:31:23.163 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:31:33.353 [DEBUG] [Thread-200214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:31:33.761 [DEBUG] [Thread-200215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:31:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:31:42.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:31:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:31:44.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 31, 10), 1.68109, 89.3015, 0.0, 8.99964, 10.5563, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:31:44.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:31:10
2026-04-13T02:31:44.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:31:44.824 [DEBUG] [Thread-200216] [transport.py] [_log()] starting thread (client mode): 0xae50ad70
2026-04-13T02:31:44.824 [DEBUG] [Thread-200216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:31:44.844 [DEBUG] [Thread-200216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:31:44.844 [INFO] [Thread-200216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:31:44.847 [DEBUG] [Thread-200216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:31:44.847 [DEBUG] [Thread-200216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:31:44.847 [DEBUG] [Thread-200216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] client lang: <none>
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] server lang: <none>
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] kex follows: False
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:31:44.848 [DEBUG] [Thread-200216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:31:44.849 [DEBUG] [Thread-200216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:31:44.849 [DEBUG] [Thread-200216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:31:44.849 [DEBUG] [Thread-200216] [transport.py] [_log()] Compression: none
2026-04-13T02:31:44.849 [DEBUG] [Thread-200216] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:31:44.866 [DEBUG] [Thread-200216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:31:44.867 [DEBUG] [Thread-200216] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:31:44.868 [DEBUG] [Thread-200216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:31:44.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:31:44.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:31:44.871 [DEBUG] [Thread-200216] [transport.py] [_log()] userauth is OK
2026-04-13T02:31:44.871 [DEBUG] [Thread-200216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:31:44.871 [DEBUG] [Thread-200216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:31:44.871 [DEBUG] [Thread-200216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:31:44.871 [DEBUG] [Thread-200216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:31:44.906 [INFO] [Thread-200216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:31:44.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:31:45.687 [DEBUG] [Thread-200216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:31:45.688 [DEBUG] [Thread-200216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:31:45.688 [DEBUG] [Thread-200216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:31:45.729 [DEBUG] [Thread-200216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:31:45.729 [DEBUG] [Thread-200216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:31:45.733 [DEBUG] [Thread-200216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:31:45.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:31:45.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:31:45.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:31:45.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:31:45.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:31:45.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:31:45.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:31:45.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:31:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:31:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.021625 -999.00  +10.50   5.67     90   +9.10 1 2 1 3 1     0    0 0.07 -52.11 .NESW 5.7 5.7 193.8 6.9 11.3 -21.7 11.1 -20.8 10.8 -18.6 11.1 -20.7
2026-04-13T02:31:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:31:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:31:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.021625
2026-04-13T02:31:45.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:31:45.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:31:45.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:31:45.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:31:45.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:31:45.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:31:10', tmtdew=1.68109, humidity=89.3015, cloud=0.0, wind=8.99964, temperature=10.5563, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:31:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:31:45.757 [DEBUG] [Thread-200216] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:31:45.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:31:45.849 [DEBUG] [Thread-200219] [transport.py] [_log()] starting thread (client mode): 0xae50bee0
2026-04-13T02:31:45.849 [DEBUG] [Thread-200219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:31:45.863 [DEBUG] [Thread-200219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:31:45.864 [INFO] [Thread-200219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:31:45.871 [DEBUG] [Thread-200219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] client lang: <none>
2026-04-13T02:31:45.872 [DEBUG] [Thread-200219] [transport.py] [_log()] server lang: <none>
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] kex follows: False
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] Compression: none
2026-04-13T02:31:45.873 [DEBUG] [Thread-200219] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:31:45.930 [DEBUG] [Thread-200219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:31:45.931 [DEBUG] [Thread-200219] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:31:45.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:31:45.932 [DEBUG] [Thread-200219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:31:45.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:31:45.990 [DEBUG] [Thread-200219] [transport.py] [_log()] userauth is OK
2026-04-13T02:31:45.990 [DEBUG] [Thread-200219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:31:45.990 [DEBUG] [Thread-200219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:31:45.991 [DEBUG] [Thread-200219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:31:45.991 [DEBUG] [Thread-200219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:31:46.009 [INFO] [Thread-200219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:31:46.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:31:46.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:31:46.826 [DEBUG] [Thread-200219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:31:46.826 [DEBUG] [Thread-200219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:31:46.874 [DEBUG] [Thread-200219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:31:46.874 [DEBUG] [Thread-200219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:31:46.883 [DEBUG] [Thread-200219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:31:46.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:31:46.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:31:46.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:31:46.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:31:46.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:31:46.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:31:46.920 [DEBUG] [Thread-200219] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:31:48.798 [DEBUG] [Thread-200221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:03.862 [DEBUG] [Thread-200222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:32:16.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:32:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:32:18.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 31, 45), 1.44555, 90.7024, 0.0, 10.764, 10.4794, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:32:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:31:45
2026-04-13T02:32:18.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:32:18.774 [DEBUG] [Thread-200223] [transport.py] [_log()] starting thread (client mode): 0xb0feb010
2026-04-13T02:32:18.774 [DEBUG] [Thread-200223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:32:18.794 [DEBUG] [Thread-200223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:32:18.795 [INFO] [Thread-200223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:32:18.798 [DEBUG] [Thread-200223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:32:18.798 [DEBUG] [Thread-200223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:32:18.798 [DEBUG] [Thread-200223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:32:18.798 [DEBUG] [Thread-200223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:18.798 [DEBUG] [Thread-200223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] client lang: <none>
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] server lang: <none>
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] kex follows: False
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] Compression: none
2026-04-13T02:32:18.799 [DEBUG] [Thread-200223] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:32:18.817 [DEBUG] [Thread-200223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:32:18.818 [DEBUG] [Thread-200223] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:32:18.818 [DEBUG] [Thread-200223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:32:18.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:32:18.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:32:18.821 [DEBUG] [Thread-200223] [transport.py] [_log()] userauth is OK
2026-04-13T02:32:18.821 [DEBUG] [Thread-200223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:32:18.821 [DEBUG] [Thread-200223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:32:18.821 [DEBUG] [Thread-200223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:32:18.821 [DEBUG] [Thread-200223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:32:18.844 [INFO] [Thread-200223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:32:18.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:32:18.900 [DEBUG] [Thread-200225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:19.628 [DEBUG] [Thread-200223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:32:19.628 [DEBUG] [Thread-200223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:32:19.629 [DEBUG] [Thread-200223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:32:19.669 [DEBUG] [Thread-200223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:32:19.669 [DEBUG] [Thread-200223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:32:19.673 [DEBUG] [Thread-200223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:32:19.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:32:19.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:32:19.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:32:19.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:32:19.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:32:19.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:32:19.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:32:19.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:32:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:32:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.021972 -999.00  +10.50   5.39     90   +9.00 1 2 1 3 1     0    0 -0.07 -55.35 .NESW 5.4 5.4 197.0 6.4 11.3 -21.7 11.1 -20.7 10.8 -18.8 11.1 -20.6
2026-04-13T02:32:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:32:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:32:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.021972
2026-04-13T02:32:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:32:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:32:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:32:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:32:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:32:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:31:45', tmtdew=1.44555, humidity=90.7024, cloud=0.0, wind=10.764, temperature=10.4794, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:31:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:32:19.703 [DEBUG] [Thread-200223] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:32:19.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:32:19.796 [DEBUG] [Thread-200227] [transport.py] [_log()] starting thread (client mode): 0xb0fe8f40
2026-04-13T02:32:19.796 [DEBUG] [Thread-200227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:32:19.811 [DEBUG] [Thread-200227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:32:19.811 [INFO] [Thread-200227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] client lang: <none>
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] server lang: <none>
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] kex follows: False
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:32:19.819 [DEBUG] [Thread-200227] [transport.py] [_log()] Compression: none
2026-04-13T02:32:19.820 [DEBUG] [Thread-200227] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:32:19.882 [DEBUG] [Thread-200227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:32:19.882 [DEBUG] [Thread-200227] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:32:19.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:32:19.883 [DEBUG] [Thread-200227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:32:19.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:32:19.939 [DEBUG] [Thread-200227] [transport.py] [_log()] userauth is OK
2026-04-13T02:32:19.939 [DEBUG] [Thread-200227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:32:19.939 [DEBUG] [Thread-200227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:32:19.939 [DEBUG] [Thread-200227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:32:19.940 [DEBUG] [Thread-200227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:32:19.963 [INFO] [Thread-200227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:32:19.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:32:19.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:32:20.776 [DEBUG] [Thread-200227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:32:20.776 [DEBUG] [Thread-200227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:32:20.823 [DEBUG] [Thread-200227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:32:20.824 [DEBUG] [Thread-200227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:32:20.832 [DEBUG] [Thread-200227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:32:20.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:32:20.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:32:20.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:32:20.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:32:20.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:32:20.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:32:20.868 [DEBUG] [Thread-200227] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:32:23.375 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:23.376 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:33.435 [DEBUG] [Thread-200229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:33.936 [DEBUG] [Thread-200230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:48.990 [DEBUG] [Thread-200231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:32:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:32:50.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:32:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:32:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 32, 21), 1.66464, 89.401, 0.0, 8.96436, 10.5397, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:32:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:32:21
2026-04-13T02:32:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:32:52.662 [DEBUG] [Thread-200232] [transport.py] [_log()] starting thread (client mode): 0xae516320
2026-04-13T02:32:52.662 [DEBUG] [Thread-200232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:32:52.682 [DEBUG] [Thread-200232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:32:52.682 [INFO] [Thread-200232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:32:52.683 [DEBUG] [Thread-200232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:32:52.683 [DEBUG] [Thread-200232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:32:52.683 [DEBUG] [Thread-200232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:32:52.683 [DEBUG] [Thread-200232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:52.683 [DEBUG] [Thread-200232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:52.683 [DEBUG] [Thread-200232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:52.683 [DEBUG] [Thread-200232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] client lang: <none>
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] server lang: <none>
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] kex follows: False
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] Compression: none
2026-04-13T02:32:52.684 [DEBUG] [Thread-200232] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:32:52.692 [DEBUG] [Thread-200232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:32:52.693 [DEBUG] [Thread-200232] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:32:52.693 [DEBUG] [Thread-200232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:32:52.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:32:52.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:32:52.695 [DEBUG] [Thread-200232] [transport.py] [_log()] userauth is OK
2026-04-13T02:32:52.696 [DEBUG] [Thread-200232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:32:52.696 [DEBUG] [Thread-200232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:32:52.696 [DEBUG] [Thread-200232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:32:52.696 [DEBUG] [Thread-200232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:32:52.732 [INFO] [Thread-200232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:32:52.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:32:53.383 [DEBUG] [Thread-200232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:32:53.384 [DEBUG] [Thread-200232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:32:53.384 [DEBUG] [Thread-200232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:32:53.425 [DEBUG] [Thread-200232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:32:53.425 [DEBUG] [Thread-200232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:32:53.429 [DEBUG] [Thread-200232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:32:53.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:32:53.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:32:53.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:32:53.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:32:53.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:32:53.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:32:53.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:32:53.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:32:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:32:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.022320 -999.00  +10.50   5.54     90   +9.00 1 1 1 3 1     0    0 0.25 -45.05 ZNESW 5.5 5.5 195.6 7.1 11.3 -21.8 11.1 -20.6 10.8 -18.8 11.1 -20.8
2026-04-13T02:32:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:32:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:32:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.022320
2026-04-13T02:32:53.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:32:53.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:32:53.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:32:53.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:32:53.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:32:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:32:21', tmtdew=1.66464, humidity=89.401, cloud=0.0, wind=8.96436, temperature=10.5397, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:32:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:32:53.455 [DEBUG] [Thread-200232] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:32:53.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:32:53.549 [DEBUG] [Thread-200235] [transport.py] [_log()] starting thread (client mode): 0xae515270
2026-04-13T02:32:53.549 [DEBUG] [Thread-200235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:32:53.563 [DEBUG] [Thread-200235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:32:53.563 [INFO] [Thread-200235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:32:53.571 [DEBUG] [Thread-200235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] client lang: <none>
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] server lang: <none>
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] kex follows: False
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] Compression: none
2026-04-13T02:32:53.572 [DEBUG] [Thread-200235] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:32:53.629 [DEBUG] [Thread-200235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:32:53.630 [DEBUG] [Thread-200235] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:32:53.630 [DEBUG] [Thread-200235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:32:53.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:32:53.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:32:53.685 [DEBUG] [Thread-200235] [transport.py] [_log()] userauth is OK
2026-04-13T02:32:53.685 [DEBUG] [Thread-200235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:32:53.685 [DEBUG] [Thread-200235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:32:53.685 [DEBUG] [Thread-200235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:32:53.685 [DEBUG] [Thread-200235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:32:53.703 [INFO] [Thread-200235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:32:53.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:32:53.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:32:54.537 [DEBUG] [Thread-200235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:32:54.538 [DEBUG] [Thread-200235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:32:54.585 [DEBUG] [Thread-200235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:32:54.586 [DEBUG] [Thread-200235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:32:54.595 [DEBUG] [Thread-200235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:32:54.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:32:54.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:32:54.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:32:54.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:32:54.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:32:54.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:32:54.633 [DEBUG] [Thread-200235] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:33:04.033 [DEBUG] [Thread-200237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:33:19.086 [DEBUG] [Thread-200238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:33:23.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:33:23.583 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:33:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:33:24.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:33:24.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:33:25.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 32, 56), 1.67155, 89.3512, 0.0, 9.01728, 10.4236, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:33:25.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:32:56
2026-04-13T02:33:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:33:26.498 [DEBUG] [Thread-200239] [transport.py] [_log()] starting thread (client mode): 0xae52c190
2026-04-13T02:33:26.498 [DEBUG] [Thread-200239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:33:26.518 [DEBUG] [Thread-200239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:33:26.518 [INFO] [Thread-200239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:33:26.521 [DEBUG] [Thread-200239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] client lang: <none>
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] server lang: <none>
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] kex follows: False
2026-04-13T02:33:26.522 [DEBUG] [Thread-200239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:33:26.523 [DEBUG] [Thread-200239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:33:26.523 [DEBUG] [Thread-200239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:33:26.523 [DEBUG] [Thread-200239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:33:26.523 [DEBUG] [Thread-200239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:33:26.523 [DEBUG] [Thread-200239] [transport.py] [_log()] Compression: none
2026-04-13T02:33:26.523 [DEBUG] [Thread-200239] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:33:26.540 [DEBUG] [Thread-200239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:33:26.541 [DEBUG] [Thread-200239] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:33:26.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:33:26.543 [DEBUG] [Thread-200239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:33:26.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:33:26.545 [DEBUG] [Thread-200239] [transport.py] [_log()] userauth is OK
2026-04-13T02:33:26.545 [DEBUG] [Thread-200239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:33:26.545 [DEBUG] [Thread-200239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:33:26.545 [DEBUG] [Thread-200239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:33:26.545 [DEBUG] [Thread-200239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:33:26.580 [INFO] [Thread-200239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:33:26.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:33:27.234 [DEBUG] [Thread-200239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:33:27.235 [DEBUG] [Thread-200239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:33:27.235 [DEBUG] [Thread-200239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:33:27.276 [DEBUG] [Thread-200239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:33:27.276 [DEBUG] [Thread-200239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:33:27.279 [DEBUG] [Thread-200239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:33:27.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:33:27.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:33:27.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:33:27.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:33:27.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:33:27.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:33:27.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:33:27.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:33:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:33:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.023014 -999.00  +10.50   5.58     90   +9.00 1 1 1 3 1     0    0 0.42 -39.00 ZNESW 5.6 5.6 191.0 6.4 11.2 -21.7 11.1 -20.9 10.9 -18.8 11.1 -20.7
2026-04-13T02:33:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:33:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:33:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.023014
2026-04-13T02:33:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:33:27.304 [DEBUG] [Thread-200239] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:33:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:33:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:33:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:33:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:33:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:32:56', tmtdew=1.67155, humidity=89.3512, cloud=0.0, wind=9.01728, temperature=10.4236, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:33:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:33:27.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:33:27.403 [DEBUG] [Thread-200242] [transport.py] [_log()] starting thread (client mode): 0xae52d840
2026-04-13T02:33:27.403 [DEBUG] [Thread-200242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:33:27.421 [DEBUG] [Thread-200242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:33:27.422 [INFO] [Thread-200242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:33:27.434 [DEBUG] [Thread-200242] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:33:27.434 [DEBUG] [Thread-200242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:33:27.434 [DEBUG] [Thread-200242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:33:27.434 [DEBUG] [Thread-200242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] client lang: <none>
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] server lang: <none>
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] kex follows: False
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] Compression: none
2026-04-13T02:33:27.435 [DEBUG] [Thread-200242] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:33:27.487 [DEBUG] [Thread-200242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:33:27.488 [DEBUG] [Thread-200242] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:33:27.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:33:27.489 [DEBUG] [Thread-200242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:33:27.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:33:27.550 [DEBUG] [Thread-200242] [transport.py] [_log()] userauth is OK
2026-04-13T02:33:27.551 [DEBUG] [Thread-200242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:33:27.551 [DEBUG] [Thread-200242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:33:27.551 [DEBUG] [Thread-200242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:33:27.551 [DEBUG] [Thread-200242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:33:27.569 [INFO] [Thread-200242] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:33:27.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:33:27.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:33:28.420 [DEBUG] [Thread-200242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:33:28.420 [DEBUG] [Thread-200242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:33:28.468 [DEBUG] [Thread-200242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:33:28.468 [DEBUG] [Thread-200242] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:33:28.477 [DEBUG] [Thread-200242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:33:28.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:33:28.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:33:28.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:33:28.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:33:28.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:33:28.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:33:28.513 [DEBUG] [Thread-200242] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:33:33.508 [DEBUG] [Thread-200244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:33:34.125 [DEBUG] [Thread-200245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:33:49.176 [DEBUG] [Thread-200246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:33:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:33:58.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:33:58.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:33:59.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 33, 32), 1.66666, 89.3844, 0.0, 9.17604, 10.4733, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:33:59.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:33:32
2026-04-13T02:34:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:34:00.404 [DEBUG] [Thread-200247] [transport.py] [_log()] starting thread (client mode): 0xae5b7d90
2026-04-13T02:34:00.404 [DEBUG] [Thread-200247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:34:00.422 [DEBUG] [Thread-200247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:34:00.422 [INFO] [Thread-200247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:34:00.425 [DEBUG] [Thread-200247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] client lang: <none>
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] server lang: <none>
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] kex follows: False
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] Compression: none
2026-04-13T02:34:00.426 [DEBUG] [Thread-200247] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:34:00.443 [DEBUG] [Thread-200247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:34:00.444 [DEBUG] [Thread-200247] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:34:00.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:34:00.444 [DEBUG] [Thread-200247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:34:00.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:34:00.446 [DEBUG] [Thread-200247] [transport.py] [_log()] userauth is OK
2026-04-13T02:34:00.447 [DEBUG] [Thread-200247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:34:00.447 [DEBUG] [Thread-200247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:34:00.447 [DEBUG] [Thread-200247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:34:00.447 [DEBUG] [Thread-200247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:34:00.482 [INFO] [Thread-200247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:34:00.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:34:01.106 [DEBUG] [Thread-200247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:34:01.106 [DEBUG] [Thread-200247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:34:01.106 [DEBUG] [Thread-200247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:34:01.147 [DEBUG] [Thread-200247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:34:01.147 [DEBUG] [Thread-200247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:34:01.149 [DEBUG] [Thread-200247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:34:01.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:34:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:34:01.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:34:01.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:34:01.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:34:01.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:34:01.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:34:01.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.023361 -999.00  +10.60   5.23     90   +9.10 1 1 1 3 1     0    0 0.51 -36.80 ZNESW 5.2 5.2 186.2 6.3 11.2 -21.8 11.1 -20.6 10.8 -18.8 11.1 -20.9
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.023361
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:34:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:33:32', tmtdew=1.66666, humidity=89.3844, cloud=0.0, wind=9.17604, temperature=10.4733, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:33:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:34:01.169 [DEBUG] [Thread-200247] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:34:01.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:34:01.250 [DEBUG] [Thread-200250] [transport.py] [_log()] starting thread (client mode): 0xb0f57cd0
2026-04-13T02:34:01.250 [DEBUG] [Thread-200250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:34:01.265 [DEBUG] [Thread-200250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:34:01.265 [INFO] [Thread-200250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:34:01.273 [DEBUG] [Thread-200250] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:34:01.273 [DEBUG] [Thread-200250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:34:01.273 [DEBUG] [Thread-200250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:34:01.273 [DEBUG] [Thread-200250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:01.273 [DEBUG] [Thread-200250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:01.273 [DEBUG] [Thread-200250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] client lang: <none>
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] server lang: <none>
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] kex follows: False
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] Compression: none
2026-04-13T02:34:01.274 [DEBUG] [Thread-200250] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:34:01.332 [DEBUG] [Thread-200250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:34:01.333 [DEBUG] [Thread-200250] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:34:01.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:34:01.335 [DEBUG] [Thread-200250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:34:01.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:34:01.389 [DEBUG] [Thread-200250] [transport.py] [_log()] userauth is OK
2026-04-13T02:34:01.389 [DEBUG] [Thread-200250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:34:01.389 [DEBUG] [Thread-200250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:34:01.389 [DEBUG] [Thread-200250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:34:01.389 [DEBUG] [Thread-200250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:34:01.403 [INFO] [Thread-200250] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:34:01.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:34:01.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:34:02.228 [DEBUG] [Thread-200250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:34:02.228 [DEBUG] [Thread-200250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:34:02.276 [DEBUG] [Thread-200250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:34:02.276 [DEBUG] [Thread-200250] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:34:02.285 [DEBUG] [Thread-200250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:34:02.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:34:02.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:34:02.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:34:02.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:34:02.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:34:02.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:34:02.323 [DEBUG] [Thread-200250] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:34:04.213 [DEBUG] [Thread-200252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:34:19.257 [DEBUG] [Thread-200253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:34:23.789 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:34:23.790 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:34:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:34:32.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:34:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:34:33.573 [DEBUG] [Thread-200254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:34:33.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 34, 7), 1.6692, 89.3678, 0.0, 9.14076, 10.4567, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:34:33.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:34:07
2026-04-13T02:34:34.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:34:34.168 [DEBUG] [Thread-200255] [transport.py] [_log()] starting thread (client mode): 0xae52fc70
2026-04-13T02:34:34.168 [DEBUG] [Thread-200255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:34:34.187 [DEBUG] [Thread-200255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:34:34.187 [INFO] [Thread-200255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:34:34.190 [DEBUG] [Thread-200255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] client lang: <none>
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] server lang: <none>
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] kex follows: False
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] Compression: none
2026-04-13T02:34:34.191 [DEBUG] [Thread-200255] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:34:34.208 [DEBUG] [Thread-200255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:34:34.209 [DEBUG] [Thread-200255] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:34:34.209 [DEBUG] [Thread-200255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:34:34.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:34:34.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:34:34.211 [DEBUG] [Thread-200255] [transport.py] [_log()] userauth is OK
2026-04-13T02:34:34.211 [DEBUG] [Thread-200255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:34:34.211 [DEBUG] [Thread-200255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:34:34.211 [DEBUG] [Thread-200255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:34:34.211 [DEBUG] [Thread-200255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:34:34.238 [INFO] [Thread-200255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:34:34.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:34:34.301 [DEBUG] [Thread-200257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:34:34.850 [DEBUG] [Thread-200255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:34:34.851 [DEBUG] [Thread-200255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:34:34.851 [DEBUG] [Thread-200255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:34:34.892 [DEBUG] [Thread-200255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:34:34.892 [DEBUG] [Thread-200255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:34:34.896 [DEBUG] [Thread-200255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:34:34.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:34:34.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:34:34.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:34:34.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:34:34.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:34:34.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:34:34.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:34:34.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:34:34.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.023709 -999.00  +10.60   5.15     90   +9.10 1 2 1 3 1     0    0 0.51 -35.85 ZnESW 5.2 5.2 178.4 7.1 11.2 -21.7 11.1 -20.7 10.8 -18.8 11.1 -20.6
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.023709
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:34:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:34:07', tmtdew=1.6692, humidity=89.3678, cloud=0.0, wind=9.14076, temperature=10.4567, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:34:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:34:34.913 [DEBUG] [Thread-200255] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:34:34.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:34:34.994 [DEBUG] [Thread-200259] [transport.py] [_log()] starting thread (client mode): 0xae5f3d30
2026-04-13T02:34:34.994 [DEBUG] [Thread-200259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:34:35.010 [DEBUG] [Thread-200259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:34:35.010 [INFO] [Thread-200259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] client lang: <none>
2026-04-13T02:34:35.018 [DEBUG] [Thread-200259] [transport.py] [_log()] server lang: <none>
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] kex follows: False
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] Compression: none
2026-04-13T02:34:35.019 [DEBUG] [Thread-200259] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:34:35.074 [DEBUG] [Thread-200259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:34:35.075 [DEBUG] [Thread-200259] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:34:35.075 [DEBUG] [Thread-200259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:34:35.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:34:35.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:34:35.131 [DEBUG] [Thread-200259] [transport.py] [_log()] userauth is OK
2026-04-13T02:34:35.131 [DEBUG] [Thread-200259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:34:35.131 [DEBUG] [Thread-200259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:34:35.131 [DEBUG] [Thread-200259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:34:35.131 [DEBUG] [Thread-200259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:34:35.149 [INFO] [Thread-200259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:34:35.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:34:35.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:34:35.958 [DEBUG] [Thread-200259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:34:35.959 [DEBUG] [Thread-200259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:34:36.007 [DEBUG] [Thread-200259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:34:36.007 [DEBUG] [Thread-200259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:34:36.015 [DEBUG] [Thread-200259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:34:36.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:34:36.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:34:36.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:34:36.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:34:36.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:34:36.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:34:36.051 [DEBUG] [Thread-200259] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:34:49.339 [DEBUG] [Thread-200261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:35:04.392 [DEBUG] [Thread-200262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:35:06.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:35:06.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:35:06.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:35:07.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 34, 43), 1.43734, 90.7356, 0.0, 11.1168, 10.2139, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:35:07.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:34:43
2026-04-13T02:35:07.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:35:07.902 [DEBUG] [Thread-200263] [transport.py] [_log()] starting thread (client mode): 0xae5b6050
2026-04-13T02:35:07.902 [DEBUG] [Thread-200263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:35:07.917 [DEBUG] [Thread-200263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:35:07.917 [INFO] [Thread-200263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] client lang: <none>
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] server lang: <none>
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] kex follows: False
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] Compression: none
2026-04-13T02:35:07.919 [DEBUG] [Thread-200263] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:35:07.927 [DEBUG] [Thread-200263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:35:07.927 [DEBUG] [Thread-200263] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:35:07.928 [DEBUG] [Thread-200263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:35:07.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:35:07.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:35:07.929 [DEBUG] [Thread-200263] [transport.py] [_log()] userauth is OK
2026-04-13T02:35:07.929 [DEBUG] [Thread-200263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:35:07.929 [DEBUG] [Thread-200263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:35:07.929 [DEBUG] [Thread-200263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:35:07.929 [DEBUG] [Thread-200263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:35:07.943 [INFO] [Thread-200263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:35:07.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:35:08.829 [DEBUG] [Thread-200263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:35:08.829 [DEBUG] [Thread-200263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:35:08.830 [DEBUG] [Thread-200263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:35:08.870 [DEBUG] [Thread-200263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:35:08.870 [DEBUG] [Thread-200263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:35:08.873 [DEBUG] [Thread-200263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:35:08.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:35:08.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:35:08.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:35:08.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:35:08.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:35:08.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:35:08.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:35:08.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:35:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:35:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.024056 -999.00  +10.60   5.56     90   +9.10 1 2 1 3 1     0    0 0.52 -35.71 ZNESw 5.6 5.6 175.4 7.5 11.2 -21.7 11.1 -20.9 10.8 -18.9 11.1 -20.6
2026-04-13T02:35:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:35:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:35:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.024056
2026-04-13T02:35:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:35:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:35:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:35:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:35:08.901 [DEBUG] [Thread-200263] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:35:08.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:35:08.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:34:43', tmtdew=1.43734, humidity=90.7356, cloud=0.0, wind=11.1168, temperature=10.2139, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:34:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:35:08.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:35:09.005 [DEBUG] [Thread-200266] [transport.py] [_log()] starting thread (client mode): 0xae52f8b0
2026-04-13T02:35:09.005 [DEBUG] [Thread-200266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:35:09.020 [DEBUG] [Thread-200266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:35:09.020 [INFO] [Thread-200266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:09.028 [DEBUG] [Thread-200266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] client lang: <none>
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] server lang: <none>
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] kex follows: False
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:35:09.029 [DEBUG] [Thread-200266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:35:09.030 [DEBUG] [Thread-200266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:35:09.030 [DEBUG] [Thread-200266] [transport.py] [_log()] Compression: none
2026-04-13T02:35:09.030 [DEBUG] [Thread-200266] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:35:09.085 [DEBUG] [Thread-200266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:35:09.086 [DEBUG] [Thread-200266] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:35:09.087 [DEBUG] [Thread-200266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:35:09.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:35:09.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:35:09.140 [DEBUG] [Thread-200266] [transport.py] [_log()] userauth is OK
2026-04-13T02:35:09.140 [DEBUG] [Thread-200266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:35:09.141 [DEBUG] [Thread-200266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:35:09.141 [DEBUG] [Thread-200266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:35:09.141 [DEBUG] [Thread-200266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:35:09.164 [INFO] [Thread-200266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:35:09.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:35:09.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:35:09.987 [DEBUG] [Thread-200266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:35:09.987 [DEBUG] [Thread-200266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:35:10.035 [DEBUG] [Thread-200266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:35:10.035 [DEBUG] [Thread-200266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:35:10.045 [DEBUG] [Thread-200266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:35:10.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:35:10.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:35:10.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:35:10.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:35:10.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:35:10.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:35:10.081 [DEBUG] [Thread-200266] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:35:19.429 [DEBUG] [Thread-200268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:35:23.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:35:23.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:35:33.627 [DEBUG] [Thread-200269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:35:34.483 [DEBUG] [Thread-200270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:35:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:35:40.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:35:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:35:41.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 35, 18), 1.71545, 89.3844, 0.0, 9.14076, 10.3072, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:35:41.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:35:18
2026-04-13T02:35:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:35:41.918 [DEBUG] [Thread-200271] [transport.py] [_log()] starting thread (client mode): 0xae5b7fa0
2026-04-13T02:35:41.918 [DEBUG] [Thread-200271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:35:41.937 [DEBUG] [Thread-200271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:35:41.938 [INFO] [Thread-200271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:35:41.940 [DEBUG] [Thread-200271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] client lang: <none>
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] server lang: <none>
2026-04-13T02:35:41.941 [DEBUG] [Thread-200271] [transport.py] [_log()] kex follows: False
2026-04-13T02:35:41.942 [DEBUG] [Thread-200271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:35:41.942 [DEBUG] [Thread-200271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:35:41.942 [DEBUG] [Thread-200271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:35:41.942 [DEBUG] [Thread-200271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:35:41.942 [DEBUG] [Thread-200271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:35:41.942 [DEBUG] [Thread-200271] [transport.py] [_log()] Compression: none
2026-04-13T02:35:41.942 [DEBUG] [Thread-200271] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:35:41.960 [DEBUG] [Thread-200271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:35:41.961 [DEBUG] [Thread-200271] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:35:41.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:35:41.962 [DEBUG] [Thread-200271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:35:41.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:35:41.964 [DEBUG] [Thread-200271] [transport.py] [_log()] userauth is OK
2026-04-13T02:35:41.964 [DEBUG] [Thread-200271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:35:41.965 [DEBUG] [Thread-200271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:35:41.965 [DEBUG] [Thread-200271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:35:41.965 [DEBUG] [Thread-200271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:35:41.989 [INFO] [Thread-200271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:35:41.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:35:42.640 [DEBUG] [Thread-200271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:35:42.641 [DEBUG] [Thread-200271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:35:42.641 [DEBUG] [Thread-200271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:35:42.681 [DEBUG] [Thread-200271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:35:42.681 [DEBUG] [Thread-200271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:35:42.685 [DEBUG] [Thread-200271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:35:42.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:35:42.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:35:42.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:35:42.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:35:42.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:35:42.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:35:42.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:35:42.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:35:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:35:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.024403 -999.00  +10.60   6.47     90   +9.10 1 2 1 3 1     0    0 0.52 -34.58 ZNESw 6.5 6.5 174.6 8.1 11.3 -21.7 11.1 -20.7 10.9 -18.7 11.1 -20.7
2026-04-13T02:35:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:35:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:35:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.024403
2026-04-13T02:35:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:35:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:35:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:35:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:35:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:35:42.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:35:18', tmtdew=1.71545, humidity=89.3844, cloud=0.0, wind=9.14076, temperature=10.3072, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:35:08.419', atlas_cloud=2, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:35:42.711 [DEBUG] [Thread-200271] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:35:42.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:35:42.805 [DEBUG] [Thread-200274] [transport.py] [_log()] starting thread (client mode): 0xb0f57eb0
2026-04-13T02:35:42.805 [DEBUG] [Thread-200274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:35:42.820 [DEBUG] [Thread-200274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:35:42.820 [INFO] [Thread-200274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:35:42.828 [DEBUG] [Thread-200274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:35:42.828 [DEBUG] [Thread-200274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:35:42.828 [DEBUG] [Thread-200274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] client lang: <none>
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] server lang: <none>
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] kex follows: False
2026-04-13T02:35:42.829 [DEBUG] [Thread-200274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:35:42.830 [DEBUG] [Thread-200274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:35:42.830 [DEBUG] [Thread-200274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:35:42.830 [DEBUG] [Thread-200274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:35:42.830 [DEBUG] [Thread-200274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:35:42.830 [DEBUG] [Thread-200274] [transport.py] [_log()] Compression: none
2026-04-13T02:35:42.830 [DEBUG] [Thread-200274] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:35:42.885 [DEBUG] [Thread-200274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:35:42.885 [DEBUG] [Thread-200274] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:35:42.886 [DEBUG] [Thread-200274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:35:42.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:35:42.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:35:42.943 [DEBUG] [Thread-200274] [transport.py] [_log()] userauth is OK
2026-04-13T02:35:42.944 [DEBUG] [Thread-200274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:35:42.944 [DEBUG] [Thread-200274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:35:42.944 [DEBUG] [Thread-200274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:35:42.944 [DEBUG] [Thread-200274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:35:42.968 [INFO] [Thread-200274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:35:42.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:35:42.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:35:43.789 [DEBUG] [Thread-200274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:35:43.790 [DEBUG] [Thread-200274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:35:43.838 [DEBUG] [Thread-200274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:35:43.838 [DEBUG] [Thread-200274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:35:43.847 [DEBUG] [Thread-200274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:35:43.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:35:43.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:35:43.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:35:43.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:35:43.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:35:43.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:35:43.884 [DEBUG] [Thread-200274] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:35:49.519 [DEBUG] [Thread-200276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:04.570 [DEBUG] [Thread-200277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:36:13.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:36:13.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:36:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 35, 54), 1.39952, 90.9678, 0.0, 10.7993, 10.2139, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:36:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:35:54
2026-04-13T02:36:15.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:36:15.788 [DEBUG] [Thread-200278] [transport.py] [_log()] starting thread (client mode): 0xb0f56dd0
2026-04-13T02:36:15.788 [DEBUG] [Thread-200278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:36:15.808 [DEBUG] [Thread-200278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:36:15.809 [INFO] [Thread-200278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:36:15.812 [DEBUG] [Thread-200278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:36:15.812 [DEBUG] [Thread-200278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] client lang: <none>
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] server lang: <none>
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] kex follows: False
2026-04-13T02:36:15.813 [DEBUG] [Thread-200278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:36:15.814 [DEBUG] [Thread-200278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:36:15.814 [DEBUG] [Thread-200278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:36:15.814 [DEBUG] [Thread-200278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:36:15.814 [DEBUG] [Thread-200278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:36:15.814 [DEBUG] [Thread-200278] [transport.py] [_log()] Compression: none
2026-04-13T02:36:15.814 [DEBUG] [Thread-200278] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:36:15.834 [DEBUG] [Thread-200278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:36:15.835 [DEBUG] [Thread-200278] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:36:15.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:36:15.836 [DEBUG] [Thread-200278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:36:15.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:36:15.839 [DEBUG] [Thread-200278] [transport.py] [_log()] userauth is OK
2026-04-13T02:36:15.839 [DEBUG] [Thread-200278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:36:15.839 [DEBUG] [Thread-200278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:36:15.839 [DEBUG] [Thread-200278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:36:15.839 [DEBUG] [Thread-200278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:36:15.864 [INFO] [Thread-200278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:36:15.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:36:16.499 [DEBUG] [Thread-200278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:36:16.500 [DEBUG] [Thread-200278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:36:16.500 [DEBUG] [Thread-200278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:36:16.541 [DEBUG] [Thread-200278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:36:16.541 [DEBUG] [Thread-200278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:36:16.543 [DEBUG] [Thread-200278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:36:16.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:36:16.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:36:16.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:36:16.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:36:16.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:36:16.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:36:16.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:36:16.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:36:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:36:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.024750 -999.00  +10.60   5.90     90   +9.20 1 1 1 3 1     0    0 0.58 -32.17 ZNESW 5.9 5.9 179.6 6.8 11.2 -21.8 11.1 -20.8 10.8 -18.8 11.1 -20.8
2026-04-13T02:36:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:36:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:36:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.024750
2026-04-13T02:36:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:36:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:36:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:36:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:36:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T02:36:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:35:54', tmtdew=1.39952, humidity=90.9678, cloud=0.0, wind=10.7993, temperature=10.2139, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:35:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[1.8752499999999994, nan, nan, 2.9354999999999993, nan, nan, 0.15949999999999953, nan, nan, 2.7670000000000003, 2.0722500000000004, 1.7400000000000002, nan, nan, 0.045999999999999375, nan, nan, 1.2195, 0.24450000000000038, 0.4612499999999997, 1.5089999999999986, nan, nan, 2.01225, 2.031999999999999, 0.15850000000000009, 0.1407500000000006, 0.029500000000000526, 0.16249999999999964, 0.291500000000001, 0.5200000000000014, 0.745000000000001, 0.340749999999999], zp_timestamp='2026-04-13T00:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:36:16.571 [DEBUG] [Thread-200278] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:36:16.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:36:16.663 [DEBUG] [Thread-200281] [transport.py] [_log()] starting thread (client mode): 0xb0f575b0
2026-04-13T02:36:16.663 [DEBUG] [Thread-200281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:36:16.679 [DEBUG] [Thread-200281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:36:16.679 [INFO] [Thread-200281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:36:16.686 [DEBUG] [Thread-200281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:36:16.686 [DEBUG] [Thread-200281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] client lang: <none>
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] server lang: <none>
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] kex follows: False
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:36:16.687 [DEBUG] [Thread-200281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:36:16.688 [DEBUG] [Thread-200281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:36:16.688 [DEBUG] [Thread-200281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:36:16.688 [DEBUG] [Thread-200281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:36:16.688 [DEBUG] [Thread-200281] [transport.py] [_log()] Compression: none
2026-04-13T02:36:16.688 [DEBUG] [Thread-200281] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:36:16.744 [DEBUG] [Thread-200281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:36:16.745 [DEBUG] [Thread-200281] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:36:16.745 [DEBUG] [Thread-200281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:36:16.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:36:16.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:36:16.802 [DEBUG] [Thread-200281] [transport.py] [_log()] userauth is OK
2026-04-13T02:36:16.802 [DEBUG] [Thread-200281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:36:16.802 [DEBUG] [Thread-200281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:36:16.802 [DEBUG] [Thread-200281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:36:16.802 [DEBUG] [Thread-200281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:36:16.821 [INFO] [Thread-200281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:36:16.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:36:16.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:36:17.640 [DEBUG] [Thread-200281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:36:17.640 [DEBUG] [Thread-200281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:36:17.688 [DEBUG] [Thread-200281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:36:17.688 [DEBUG] [Thread-200281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:36:17.696 [DEBUG] [Thread-200281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:36:17.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:36:17.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:36:17.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:36:17.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:36:17.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:36:17.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:36:17.730 [DEBUG] [Thread-200281] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:36:19.608 [DEBUG] [Thread-200283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:24.205 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:24.206 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:33.693 [DEBUG] [Thread-200284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:34.659 [DEBUG] [Thread-200285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:47.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:36:47.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:36:47.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:36:49.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 36, 29), 1.64453, 89.5171, 0.0, 8.7174, 10.3736, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:36:49.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:36:29
2026-04-13T02:36:49.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:36:49.570 [DEBUG] [Thread-200286] [transport.py] [_log()] starting thread (client mode): 0xae52efb0
2026-04-13T02:36:49.571 [DEBUG] [Thread-200286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:36:49.591 [DEBUG] [Thread-200286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:36:49.591 [INFO] [Thread-200286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:36:49.594 [DEBUG] [Thread-200286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:36:49.594 [DEBUG] [Thread-200286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:36:49.594 [DEBUG] [Thread-200286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:36:49.594 [DEBUG] [Thread-200286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:49.594 [DEBUG] [Thread-200286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] client lang: <none>
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] server lang: <none>
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] kex follows: False
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:36:49.595 [DEBUG] [Thread-200286] [transport.py] [_log()] Compression: none
2026-04-13T02:36:49.596 [DEBUG] [Thread-200286] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:36:49.614 [DEBUG] [Thread-200286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:36:49.614 [DEBUG] [Thread-200286] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:36:49.615 [DEBUG] [Thread-200286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:36:49.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:36:49.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:36:49.617 [DEBUG] [Thread-200286] [transport.py] [_log()] userauth is OK
2026-04-13T02:36:49.617 [DEBUG] [Thread-200286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:36:49.617 [DEBUG] [Thread-200286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:36:49.618 [DEBUG] [Thread-200286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:36:49.618 [DEBUG] [Thread-200286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:36:49.641 [INFO] [Thread-200286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:36:49.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:36:49.688 [DEBUG] [Thread-200288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:36:50.306 [DEBUG] [Thread-200286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:36:50.306 [DEBUG] [Thread-200286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:36:50.306 [DEBUG] [Thread-200286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:36:50.347 [DEBUG] [Thread-200286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:36:50.347 [DEBUG] [Thread-200286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:36:50.351 [DEBUG] [Thread-200286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:36:50.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:36:50.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:36:50.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:36:50.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:36:50.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:36:50.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:36:50.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:36:50.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:36:50.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:36:50.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.025445 -999.00  +10.60   5.24     91   +9.20 1 2 1 3 1     0    0 0.81 -24.75 zneSW 5.2 5.2 173.6 6.3 11.2 -21.8 11.1 -20.7 10.8 -18.8 11.1 -20.9
2026-04-13T02:36:50.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:36:50.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:36:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.025445
2026-04-13T02:36:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:36:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:36:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:36:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:36:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:36:50.379 [DEBUG] [Thread-200286] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:36:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:36:29', tmtdew=1.64453, humidity=89.5171, cloud=0.0, wind=8.7174, temperature=10.3736, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:36:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:36:50.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:36:50.484 [DEBUG] [Thread-200290] [transport.py] [_log()] starting thread (client mode): 0xae5b54e0
2026-04-13T02:36:50.484 [DEBUG] [Thread-200290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:36:50.499 [DEBUG] [Thread-200290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:36:50.499 [INFO] [Thread-200290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:36:50.507 [DEBUG] [Thread-200290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:36:50.507 [DEBUG] [Thread-200290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:36:50.507 [DEBUG] [Thread-200290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:36:50.507 [DEBUG] [Thread-200290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:50.507 [DEBUG] [Thread-200290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:36:50.507 [DEBUG] [Thread-200290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:50.507 [DEBUG] [Thread-200290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] client lang: <none>
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] server lang: <none>
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] kex follows: False
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:36:50.508 [DEBUG] [Thread-200290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:36:50.509 [DEBUG] [Thread-200290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:36:50.509 [DEBUG] [Thread-200290] [transport.py] [_log()] Compression: none
2026-04-13T02:36:50.509 [DEBUG] [Thread-200290] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:36:50.566 [DEBUG] [Thread-200290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:36:50.566 [DEBUG] [Thread-200290] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:36:50.567 [DEBUG] [Thread-200290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:36:50.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:36:50.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:36:50.624 [DEBUG] [Thread-200290] [transport.py] [_log()] userauth is OK
2026-04-13T02:36:50.625 [DEBUG] [Thread-200290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:36:50.625 [DEBUG] [Thread-200290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:36:50.625 [DEBUG] [Thread-200290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:36:50.625 [DEBUG] [Thread-200290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:36:50.650 [INFO] [Thread-200290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:36:50.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:36:50.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:36:51.487 [DEBUG] [Thread-200290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:36:51.487 [DEBUG] [Thread-200290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:36:51.535 [DEBUG] [Thread-200290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:36:51.535 [DEBUG] [Thread-200290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:36:51.544 [DEBUG] [Thread-200290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:36:51.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:36:51.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:36:51.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:36:51.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:36:51.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:36:51.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:36:51.581 [DEBUG] [Thread-200290] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:37:04.726 [DEBUG] [Thread-200292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:37:19.790 [DEBUG] [Thread-200293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:37:21.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:37:21.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:37:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:37:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 37, 5), 1.6474, 89.5005, 0.0, 8.8938, 10.3901, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:37:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:37:05
2026-04-13T02:37:23.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:37:23.474 [DEBUG] [Thread-200294] [transport.py] [_log()] starting thread (client mode): 0xae5145e0
2026-04-13T02:37:23.474 [DEBUG] [Thread-200294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:37:23.494 [DEBUG] [Thread-200294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:37:23.494 [INFO] [Thread-200294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:37:23.497 [DEBUG] [Thread-200294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:37:23.497 [DEBUG] [Thread-200294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] client lang: <none>
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] server lang: <none>
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] kex follows: False
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:37:23.498 [DEBUG] [Thread-200294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:37:23.499 [DEBUG] [Thread-200294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:37:23.499 [DEBUG] [Thread-200294] [transport.py] [_log()] Compression: none
2026-04-13T02:37:23.499 [DEBUG] [Thread-200294] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:37:23.515 [DEBUG] [Thread-200294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:37:23.516 [DEBUG] [Thread-200294] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:37:23.516 [DEBUG] [Thread-200294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:37:23.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:37:23.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:37:23.519 [DEBUG] [Thread-200294] [transport.py] [_log()] userauth is OK
2026-04-13T02:37:23.519 [DEBUG] [Thread-200294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:37:23.519 [DEBUG] [Thread-200294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:37:23.519 [DEBUG] [Thread-200294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:37:23.519 [DEBUG] [Thread-200294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:37:23.536 [INFO] [Thread-200294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:37:23.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:37:24.133 [DEBUG] [Thread-200294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:37:24.134 [DEBUG] [Thread-200294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:37:24.134 [DEBUG] [Thread-200294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:37:24.175 [DEBUG] [Thread-200294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:37:24.175 [DEBUG] [Thread-200294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:37:24.179 [DEBUG] [Thread-200294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:37:24.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:37:24.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:37:24.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:37:24.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:37:24.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:37:24.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:37:24.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:37:24.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:37:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:37:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.025792 -999.00  +10.50   4.38     91   +9.10 1 2 1 3 1     0    0 0.90 -20.25 ZnES. 4.4 4.4 162.1 5.7 11.2 -21.7 11.1 -21.1 10.8 -19.0 11.1 -20.7
2026-04-13T02:37:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:37:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:37:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.025792
2026-04-13T02:37:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:37:24.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:37:24.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:37:24.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:37:24.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:37:24.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:37:05', tmtdew=1.6474, humidity=89.5005, cloud=0.0, wind=8.8938, temperature=10.3901, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:37:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:37:24.206 [DEBUG] [Thread-200294] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:37:24.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:37:24.304 [DEBUG] [Thread-200297] [transport.py] [_log()] starting thread (client mode): 0xae52cc10
2026-04-13T02:37:24.304 [DEBUG] [Thread-200297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:37:24.318 [DEBUG] [Thread-200297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:37:24.318 [INFO] [Thread-200297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:37:24.326 [DEBUG] [Thread-200297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:37:24.327 [DEBUG] [Thread-200297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:37:24.327 [DEBUG] [Thread-200297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:37:24.327 [DEBUG] [Thread-200297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:24.327 [DEBUG] [Thread-200297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:24.327 [DEBUG] [Thread-200297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:24.327 [DEBUG] [Thread-200297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:24.327 [DEBUG] [Thread-200297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] client lang: <none>
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] server lang: <none>
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] kex follows: False
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:37:24.328 [DEBUG] [Thread-200297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:37:24.329 [DEBUG] [Thread-200297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:37:24.329 [DEBUG] [Thread-200297] [transport.py] [_log()] Compression: none
2026-04-13T02:37:24.329 [DEBUG] [Thread-200297] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:37:24.387 [DEBUG] [Thread-200297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:37:24.388 [DEBUG] [Thread-200297] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:37:24.388 [DEBUG] [Thread-200297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:37:24.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:37:24.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:37:24.414 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:37:24.415 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:37:24.443 [DEBUG] [Thread-200297] [transport.py] [_log()] userauth is OK
2026-04-13T02:37:24.443 [DEBUG] [Thread-200297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:37:24.443 [DEBUG] [Thread-200297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:37:24.444 [DEBUG] [Thread-200297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:37:24.444 [DEBUG] [Thread-200297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:37:24.462 [INFO] [Thread-200297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:37:24.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:37:24.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:37:25.301 [DEBUG] [Thread-200297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:37:25.301 [DEBUG] [Thread-200297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:37:25.349 [DEBUG] [Thread-200297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:37:25.349 [DEBUG] [Thread-200297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:37:25.360 [DEBUG] [Thread-200297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:37:25.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:37:25.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:37:25.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:37:25.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:37:25.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:37:25.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:37:25.401 [DEBUG] [Thread-200297] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:37:33.759 [DEBUG] [Thread-200299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:37:34.830 [DEBUG] [Thread-200300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:37:49.896 [DEBUG] [Thread-200301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:37:55.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:37:55.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:37:55.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:37:56.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 37, 40), 1.39952, 90.9678, 0.0, 9.74088, 10.2139, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:37:56.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:37:40
2026-04-13T02:37:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:37:57.226 [DEBUG] [Thread-200302] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d90
2026-04-13T02:37:57.226 [DEBUG] [Thread-200302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:37:57.241 [DEBUG] [Thread-200302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:37:57.241 [INFO] [Thread-200302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:37:57.242 [DEBUG] [Thread-200302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:37:57.242 [DEBUG] [Thread-200302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] client lang: <none>
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] server lang: <none>
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] kex follows: False
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] Compression: none
2026-04-13T02:37:57.243 [DEBUG] [Thread-200302] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:37:57.255 [DEBUG] [Thread-200302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:37:57.255 [DEBUG] [Thread-200302] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:37:57.256 [DEBUG] [Thread-200302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:37:57.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:37:57.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:37:57.257 [DEBUG] [Thread-200302] [transport.py] [_log()] userauth is OK
2026-04-13T02:37:57.257 [DEBUG] [Thread-200302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:37:57.257 [DEBUG] [Thread-200302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:37:57.257 [DEBUG] [Thread-200302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:37:57.258 [DEBUG] [Thread-200302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:37:57.274 [INFO] [Thread-200302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:37:57.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:37:57.870 [DEBUG] [Thread-200302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:37:57.870 [DEBUG] [Thread-200302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:37:57.870 [DEBUG] [Thread-200302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:37:57.911 [DEBUG] [Thread-200302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:37:57.911 [DEBUG] [Thread-200302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:37:57.913 [DEBUG] [Thread-200302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:37:57.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:37:57.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:37:57.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:37:57.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:37:57.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:37:57.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:37:57.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:37:57.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:37:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:37:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.026139 -999.00  +10.50   5.62     91   +9.10 1 2 1 3 1     0    0 0.91 -19.21 ZnES. 5.6 5.6 182.2 6.4 11.2 -21.8 11.1 -20.8 10.8 -18.8 11.1 -20.9
2026-04-13T02:37:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:37:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:37:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.026139
2026-04-13T02:37:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:37:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:37:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:37:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:37:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:37:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:37:40', tmtdew=1.39952, humidity=90.9678, cloud=0.0, wind=9.74088, temperature=10.2139, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:37:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:37:57.930 [DEBUG] [Thread-200302] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:37:58.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:37:58.036 [DEBUG] [Thread-200305] [transport.py] [_log()] starting thread (client mode): 0xb0fb4a00
2026-04-13T02:37:58.036 [DEBUG] [Thread-200305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:37:58.052 [DEBUG] [Thread-200305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:37:58.053 [INFO] [Thread-200305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:37:58.060 [DEBUG] [Thread-200305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:37:58.060 [DEBUG] [Thread-200305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:37:58.060 [DEBUG] [Thread-200305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:37:58.060 [DEBUG] [Thread-200305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:58.060 [DEBUG] [Thread-200305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] client lang: <none>
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] server lang: <none>
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] kex follows: False
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:37:58.061 [DEBUG] [Thread-200305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:37:58.062 [DEBUG] [Thread-200305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:37:58.062 [DEBUG] [Thread-200305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:37:58.062 [DEBUG] [Thread-200305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:37:58.062 [DEBUG] [Thread-200305] [transport.py] [_log()] Compression: none
2026-04-13T02:37:58.062 [DEBUG] [Thread-200305] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:37:58.117 [DEBUG] [Thread-200305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:37:58.117 [DEBUG] [Thread-200305] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:37:58.118 [DEBUG] [Thread-200305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:37:58.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:37:58.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:37:58.173 [DEBUG] [Thread-200305] [transport.py] [_log()] userauth is OK
2026-04-13T02:37:58.174 [DEBUG] [Thread-200305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:37:58.174 [DEBUG] [Thread-200305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:37:58.174 [DEBUG] [Thread-200305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:37:58.174 [DEBUG] [Thread-200305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:37:58.197 [INFO] [Thread-200305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:37:58.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:37:58.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:37:59.033 [DEBUG] [Thread-200305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:37:59.033 [DEBUG] [Thread-200305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:37:59.081 [DEBUG] [Thread-200305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:37:59.081 [DEBUG] [Thread-200305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:37:59.091 [DEBUG] [Thread-200305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:37:59.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:37:59.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:37:59.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:37:59.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:37:59.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:37:59.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:37:59.128 [DEBUG] [Thread-200305] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:38:04.934 [DEBUG] [Thread-200307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:38:19.994 [DEBUG] [Thread-200308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:38:24.622 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:38:24.623 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:38:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:38:29.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:38:29.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:38:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 38, 16), 1.60212, 89.9673, 0.0, 8.7174, 10.2738, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:38:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:38:16
2026-04-13T02:38:30.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:38:30.977 [DEBUG] [Thread-200309] [transport.py] [_log()] starting thread (client mode): 0xb0fb6ad0
2026-04-13T02:38:30.977 [DEBUG] [Thread-200309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:38:30.997 [DEBUG] [Thread-200309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:38:30.997 [INFO] [Thread-200309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:38:31.000 [DEBUG] [Thread-200309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:38:31.000 [DEBUG] [Thread-200309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] client lang: <none>
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] server lang: <none>
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] kex follows: False
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:38:31.001 [DEBUG] [Thread-200309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:38:31.002 [DEBUG] [Thread-200309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:38:31.002 [DEBUG] [Thread-200309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:38:31.002 [DEBUG] [Thread-200309] [transport.py] [_log()] Compression: none
2026-04-13T02:38:31.002 [DEBUG] [Thread-200309] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:38:31.020 [DEBUG] [Thread-200309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:38:31.021 [DEBUG] [Thread-200309] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:38:31.022 [DEBUG] [Thread-200309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:38:31.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:38:31.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:38:31.024 [DEBUG] [Thread-200309] [transport.py] [_log()] userauth is OK
2026-04-13T02:38:31.024 [DEBUG] [Thread-200309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:38:31.025 [DEBUG] [Thread-200309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:38:31.025 [DEBUG] [Thread-200309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:38:31.025 [DEBUG] [Thread-200309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:38:31.048 [INFO] [Thread-200309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:38:31.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:38:31.651 [DEBUG] [Thread-200309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:38:31.651 [DEBUG] [Thread-200309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:38:31.652 [DEBUG] [Thread-200309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:38:31.692 [DEBUG] [Thread-200309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:38:31.692 [DEBUG] [Thread-200309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:38:31.695 [DEBUG] [Thread-200309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:38:31.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:38:31.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:38:31.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:38:31.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:38:31.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:38:31.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:38:31.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:38:31.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:38:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:38:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.026486 -999.00  +10.50   6.49     91   +9.10 1 2 1 3 1     0    0 0.89 -19.93 .NESW 6.5 6.5 178.6 8.0 11.2 -21.8 11.0 -20.9 10.8 -18.9 11.1 -20.7
2026-04-13T02:38:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:38:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:38:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.026486
2026-04-13T02:38:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:38:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:38:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:38:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:38:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:38:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:38:16', tmtdew=1.60212, humidity=89.9673, cloud=0.0, wind=8.7174, temperature=10.2738, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:38:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:38:31.714 [DEBUG] [Thread-200309] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:38:31.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:38:31.812 [DEBUG] [Thread-200312] [transport.py] [_log()] starting thread (client mode): 0xae515870
2026-04-13T02:38:31.812 [DEBUG] [Thread-200312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:38:31.831 [DEBUG] [Thread-200312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:38:31.832 [INFO] [Thread-200312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:38:31.843 [DEBUG] [Thread-200312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:38:31.843 [DEBUG] [Thread-200312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:38:31.843 [DEBUG] [Thread-200312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:38:31.843 [DEBUG] [Thread-200312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:38:31.843 [DEBUG] [Thread-200312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:38:31.843 [DEBUG] [Thread-200312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:38:31.844 [DEBUG] [Thread-200312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:38:31.844 [DEBUG] [Thread-200312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:38:31.844 [DEBUG] [Thread-200312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:38:31.844 [DEBUG] [Thread-200312] [transport.py] [_log()] client lang: <none>
2026-04-13T02:38:31.844 [DEBUG] [Thread-200312] [transport.py] [_log()] server lang: <none>
2026-04-13T02:38:31.844 [DEBUG] [Thread-200312] [transport.py] [_log()] kex follows: False
2026-04-13T02:38:31.845 [DEBUG] [Thread-200312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:38:31.845 [DEBUG] [Thread-200312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:38:31.845 [DEBUG] [Thread-200312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:38:31.845 [DEBUG] [Thread-200312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:38:31.845 [DEBUG] [Thread-200312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:38:31.845 [DEBUG] [Thread-200312] [transport.py] [_log()] Compression: none
2026-04-13T02:38:31.845 [DEBUG] [Thread-200312] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:38:31.903 [DEBUG] [Thread-200312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:38:31.904 [DEBUG] [Thread-200312] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:38:31.905 [DEBUG] [Thread-200312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:38:31.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:38:31.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:38:31.967 [DEBUG] [Thread-200312] [transport.py] [_log()] userauth is OK
2026-04-13T02:38:31.967 [DEBUG] [Thread-200312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:38:31.967 [DEBUG] [Thread-200312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:38:31.967 [DEBUG] [Thread-200312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:38:31.968 [DEBUG] [Thread-200312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:38:31.997 [INFO] [Thread-200312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:38:31.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:38:31.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:38:32.763 [DEBUG] [Thread-200312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:38:32.764 [DEBUG] [Thread-200312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:38:32.813 [DEBUG] [Thread-200312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:38:32.814 [DEBUG] [Thread-200312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:38:32.827 [DEBUG] [Thread-200312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:38:32.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:38:32.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:38: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
2026-04-13T02:38:32.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:38:32.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:38:32.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:38:32.874 [DEBUG] [Thread-200312] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:38:33.815 [DEBUG] [Thread-200314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:38:35.035 [DEBUG] [Thread-200315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:38:50.088 [DEBUG] [Thread-200316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:39:02.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:39:02.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:39:02.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
2026-04-13T02:39:04.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 38, 51), 1.37828, 91.1005, 0.0, 9.84672, 10.2471, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:39:04.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:38:51
2026-04-13T02:39:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:39:04.705 [DEBUG] [Thread-200317] [transport.py] [_log()] starting thread (client mode): 0xb0feaf80
2026-04-13T02:39:04.705 [DEBUG] [Thread-200317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:39:04.724 [DEBUG] [Thread-200317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:39:04.724 [INFO] [Thread-200317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:39:04.726 [DEBUG] [Thread-200317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:39:04.726 [DEBUG] [Thread-200317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:39:04.726 [DEBUG] [Thread-200317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:39:04.726 [DEBUG] [Thread-200317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] client lang: <none>
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] server lang: <none>
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] kex follows: False
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] Compression: none
2026-04-13T02:39:04.727 [DEBUG] [Thread-200317] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:39:04.739 [DEBUG] [Thread-200317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:39:04.740 [DEBUG] [Thread-200317] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:39:04.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:39:04.741 [DEBUG] [Thread-200317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:39:04.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:39:04.743 [DEBUG] [Thread-200317] [transport.py] [_log()] userauth is OK
2026-04-13T02:39:04.743 [DEBUG] [Thread-200317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:39:04.743 [DEBUG] [Thread-200317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:39:04.744 [DEBUG] [Thread-200317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:39:04.744 [DEBUG] [Thread-200317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:39:04.768 [INFO] [Thread-200317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:39:04.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:39:05.123 [DEBUG] [Thread-200319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:39:05.391 [DEBUG] [Thread-200317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:39:05.391 [DEBUG] [Thread-200317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:39:05.391 [DEBUG] [Thread-200317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:39:05.432 [DEBUG] [Thread-200317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:39:05.432 [DEBUG] [Thread-200317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:39:05.436 [DEBUG] [Thread-200317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:39:05.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:39:05.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:39:05.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:39:05.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:39:05.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:39:05.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:39:05.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:39:05.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:39:05.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:39:05.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.026833 -999.00  +10.50   5.45     91   +9.10 1 2 1 3 1     0    0 0.98 -17.17 .NESW 5.5 5.5 186.2 5.9 11.2 -21.8 11.1 -20.7 10.8 -18.8 11.1 -20.7
2026-04-13T02:39:05.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:39:05.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:39:05.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.026833
2026-04-13T02:39:05.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:39:05.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:39:05.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:39:05.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:39:05.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:39:05.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:38:51', tmtdew=1.37828, humidity=91.1005, cloud=0.0, wind=9.84672, temperature=10.2471, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:38:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:39:05.464 [DEBUG] [Thread-200317] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:39:05.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:39:05.558 [DEBUG] [Thread-200321] [transport.py] [_log()] starting thread (client mode): 0xae5153f0
2026-04-13T02:39:05.558 [DEBUG] [Thread-200321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:39:05.572 [DEBUG] [Thread-200321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:39:05.573 [INFO] [Thread-200321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:39:05.580 [DEBUG] [Thread-200321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:39:05.580 [DEBUG] [Thread-200321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:39:05.581 [DEBUG] [Thread-200321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:39:05.581 [DEBUG] [Thread-200321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:05.581 [DEBUG] [Thread-200321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:05.581 [DEBUG] [Thread-200321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:05.581 [DEBUG] [Thread-200321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:05.581 [DEBUG] [Thread-200321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:39:05.581 [DEBUG] [Thread-200321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] client lang: <none>
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] server lang: <none>
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] kex follows: False
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] Compression: none
2026-04-13T02:39:05.582 [DEBUG] [Thread-200321] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:39:05.644 [DEBUG] [Thread-200321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:39:05.644 [DEBUG] [Thread-200321] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:39:05.645 [DEBUG] [Thread-200321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:39:05.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:39:05.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:39:05.703 [DEBUG] [Thread-200321] [transport.py] [_log()] userauth is OK
2026-04-13T02:39:05.703 [DEBUG] [Thread-200321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:39:05.703 [DEBUG] [Thread-200321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:39:05.704 [DEBUG] [Thread-200321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:39:05.704 [DEBUG] [Thread-200321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:39:05.723 [INFO] [Thread-200321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:39:05.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:39:05.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:39:06.603 [DEBUG] [Thread-200321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:39:06.603 [DEBUG] [Thread-200321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:39:06.651 [DEBUG] [Thread-200321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:39:06.651 [DEBUG] [Thread-200321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:39:06.660 [DEBUG] [Thread-200321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:39:06.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:39:06.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:39:06.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:39:06.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:39:06.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:39:06.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:39:06.696 [DEBUG] [Thread-200321] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:39:20.161 [DEBUG] [Thread-200323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:39:24.829 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:39:24.830 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:39:33.871 [DEBUG] [Thread-200324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:39:35.222 [DEBUG] [Thread-200325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:39:36.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:39:36.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:39:36.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:39:37.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 39, 26), 1.53358, 90.0834, 0.0, 8.4528, 10.307, 1, 2, 0, 2, 0, 0),)
2026-04-13T02:39:37.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:39:26
2026-04-13T02:39:38.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:39:38.517 [DEBUG] [Thread-200326] [transport.py] [_log()] starting thread (client mode): 0xae5b2bf0
2026-04-13T02:39:38.517 [DEBUG] [Thread-200326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:39:38.536 [DEBUG] [Thread-200326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:39:38.536 [INFO] [Thread-200326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:39:38.539 [DEBUG] [Thread-200326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:39:38.539 [DEBUG] [Thread-200326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:39:38.539 [DEBUG] [Thread-200326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:39:38.539 [DEBUG] [Thread-200326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:38.539 [DEBUG] [Thread-200326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:38.539 [DEBUG] [Thread-200326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] client lang: <none>
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] server lang: <none>
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] kex follows: False
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] Compression: none
2026-04-13T02:39:38.540 [DEBUG] [Thread-200326] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:39:38.556 [DEBUG] [Thread-200326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:39:38.556 [DEBUG] [Thread-200326] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:39:38.557 [DEBUG] [Thread-200326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:39:38.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:39:38.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:39:38.559 [DEBUG] [Thread-200326] [transport.py] [_log()] userauth is OK
2026-04-13T02:39:38.559 [DEBUG] [Thread-200326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:39:38.559 [DEBUG] [Thread-200326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:39:38.559 [DEBUG] [Thread-200326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:39:38.559 [DEBUG] [Thread-200326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:39:38.584 [INFO] [Thread-200326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:39:38.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:39:39.173 [DEBUG] [Thread-200326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:39:39.173 [DEBUG] [Thread-200326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:39:39.174 [DEBUG] [Thread-200326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:39:39.214 [DEBUG] [Thread-200326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:39:39.214 [DEBUG] [Thread-200326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:39:39.217 [DEBUG] [Thread-200326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:39:39.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:39:39.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:39:39.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:39:39.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:39:39.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:39:39.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:39:39.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:39:39.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:39:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:39:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.027181 -999.00  +10.50   5.01     91   +9.10 1 2 1 3 1     0    0 0.99 -16.50 .nESW 5.0 5.0 175.6 6.6 11.2 -21.8 11.1 -20.9 10.8 -18.8 11.1 -20.9
2026-04-13T02:39:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:39:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:39:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.027181
2026-04-13T02:39:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:39:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:39:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:39:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:39:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:39:39.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:39:26', tmtdew=1.53358, humidity=90.0834, cloud=0.0, wind=8.4528, temperature=10.307, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:39:08.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:39:39.242 [DEBUG] [Thread-200326] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:39:39.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:39:39.336 [DEBUG] [Thread-200329] [transport.py] [_log()] starting thread (client mode): 0xae52f040
2026-04-13T02:39:39.336 [DEBUG] [Thread-200329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:39:39.350 [DEBUG] [Thread-200329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:39:39.351 [INFO] [Thread-200329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:39:39.358 [DEBUG] [Thread-200329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:39:39.358 [DEBUG] [Thread-200329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] client lang: <none>
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] server lang: <none>
2026-04-13T02:39:39.359 [DEBUG] [Thread-200329] [transport.py] [_log()] kex follows: False
2026-04-13T02:39:39.360 [DEBUG] [Thread-200329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:39:39.360 [DEBUG] [Thread-200329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:39:39.360 [DEBUG] [Thread-200329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:39:39.360 [DEBUG] [Thread-200329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:39:39.360 [DEBUG] [Thread-200329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:39:39.360 [DEBUG] [Thread-200329] [transport.py] [_log()] Compression: none
2026-04-13T02:39:39.360 [DEBUG] [Thread-200329] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:39:39.418 [DEBUG] [Thread-200329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:39:39.419 [DEBUG] [Thread-200329] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:39:39.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:39:39.420 [DEBUG] [Thread-200329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:39:39.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:39:39.477 [DEBUG] [Thread-200329] [transport.py] [_log()] userauth is OK
2026-04-13T02:39:39.478 [DEBUG] [Thread-200329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:39:39.478 [DEBUG] [Thread-200329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:39:39.479 [DEBUG] [Thread-200329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:39:39.479 [DEBUG] [Thread-200329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:39:39.497 [INFO] [Thread-200329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:39:39.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:39:39.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:39:40.324 [DEBUG] [Thread-200329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:39:40.325 [DEBUG] [Thread-200329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:39:40.374 [DEBUG] [Thread-200329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:39:40.374 [DEBUG] [Thread-200329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:39:40.387 [DEBUG] [Thread-200329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:39:40.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:39: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')
2026-04-13T02:39:40.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:39:40.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:39:40.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:39:40.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:39:40.424 [DEBUG] [Thread-200329] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:39:50.258 [DEBUG] [Thread-200331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:40:05.315 [DEBUG] [Thread-200332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:40:10.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:40:10.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:40:10.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:40:11.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 40, 2), 1.52787, 90.1166, 0.0, 8.59392, 10.2738, 1, 2, 0, 2, 0, 0),)
2026-04-13T02:40:11.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:40:02
2026-04-13T02:40:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:40:12.239 [DEBUG] [Thread-200333] [transport.py] [_log()] starting thread (client mode): 0xb0fb79d0
2026-04-13T02:40:12.239 [DEBUG] [Thread-200333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:40:12.259 [DEBUG] [Thread-200333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:40:12.259 [INFO] [Thread-200333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:40:12.262 [DEBUG] [Thread-200333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] client lang: <none>
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] server lang: <none>
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] kex follows: False
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:40:12.263 [DEBUG] [Thread-200333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:40:12.264 [DEBUG] [Thread-200333] [transport.py] [_log()] Compression: none
2026-04-13T02:40:12.264 [DEBUG] [Thread-200333] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:40:12.283 [DEBUG] [Thread-200333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:40:12.283 [DEBUG] [Thread-200333] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:40:12.284 [DEBUG] [Thread-200333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:40:12.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:40:12.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:40:12.286 [DEBUG] [Thread-200333] [transport.py] [_log()] userauth is OK
2026-04-13T02:40:12.286 [DEBUG] [Thread-200333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:40:12.286 [DEBUG] [Thread-200333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:40:12.286 [DEBUG] [Thread-200333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:40:12.286 [DEBUG] [Thread-200333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:40:12.311 [INFO] [Thread-200333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:40:12.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:40:13.457 [DEBUG] [Thread-200333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:40:13.458 [DEBUG] [Thread-200333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:40:13.458 [DEBUG] [Thread-200333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:40:13.498 [DEBUG] [Thread-200333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:40:13.498 [DEBUG] [Thread-200333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:40:13.502 [DEBUG] [Thread-200333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:40:13.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:40:13.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:40:13.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:40:13.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:40:13.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:40:13.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:40:13.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:40:13.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:40:13.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:40:13.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.027181 -999.00  +10.50   5.01     91   +9.10 1 2 1 3 1     0    0 0.99 -16.50 .nESW 5.0 5.0 175.6 6.6 11.2 -21.8 11.1 -20.9 10.8 -18.8 11.1 -20.9
2026-04-13T02:40:13.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:40:13.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:40:13.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.027181
2026-04-13T02:40:13.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:40:13.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:40:13.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:40:13.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:40:13.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:40:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:40:02', tmtdew=1.52787, humidity=90.1166, cloud=0.0, wind=8.59392, temperature=10.2738, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:39:08.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:40:13.530 [DEBUG] [Thread-200333] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:40:13.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:40:13.625 [DEBUG] [Thread-200336] [transport.py] [_log()] starting thread (client mode): 0xae52c040
2026-04-13T02:40:13.625 [DEBUG] [Thread-200336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:40:13.640 [DEBUG] [Thread-200336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:40:13.640 [INFO] [Thread-200336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:40:13.648 [DEBUG] [Thread-200336] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:40:13.648 [DEBUG] [Thread-200336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:40:13.648 [DEBUG] [Thread-200336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] client lang: <none>
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] server lang: <none>
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] kex follows: False
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] Compression: none
2026-04-13T02:40:13.649 [DEBUG] [Thread-200336] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:40:13.708 [DEBUG] [Thread-200336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:40:13.709 [DEBUG] [Thread-200336] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:40:13.710 [DEBUG] [Thread-200336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:40:13.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:40:13.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:40:13.764 [DEBUG] [Thread-200336] [transport.py] [_log()] userauth is OK
2026-04-13T02:40:13.765 [DEBUG] [Thread-200336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:40:13.765 [DEBUG] [Thread-200336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:40:13.765 [DEBUG] [Thread-200336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:40:13.765 [DEBUG] [Thread-200336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:40:13.784 [INFO] [Thread-200336] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:40:13.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:40:13.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:40:14.587 [DEBUG] [Thread-200336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:40:14.587 [DEBUG] [Thread-200336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:40:14.635 [DEBUG] [Thread-200336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:40:14.635 [DEBUG] [Thread-200336] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:40:14.644 [DEBUG] [Thread-200336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:40:14.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:40:14.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:40:14.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:40:14.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:40:14.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:40:14.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:40:14.681 [DEBUG] [Thread-200336] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:40:20.352 [DEBUG] [Thread-200338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:40:25.036 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:40:25.037 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:40:33.928 [DEBUG] [Thread-200339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:40:35.404 [DEBUG] [Thread-200340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:40:44.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:40:44.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:40:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:40:45.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 40, 37), 1.34499, 91.2996, 0.0, 9.98784, 10.1476, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:40:45.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:40:37
2026-04-13T02:40:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:40:46.551 [DEBUG] [Thread-200341] [transport.py] [_log()] starting thread (client mode): 0xae5f3cd0
2026-04-13T02:40:46.551 [DEBUG] [Thread-200341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:40:46.571 [DEBUG] [Thread-200341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:40:46.571 [INFO] [Thread-200341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:40:46.574 [DEBUG] [Thread-200341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] client lang: <none>
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] server lang: <none>
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] kex follows: False
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] Compression: none
2026-04-13T02:40:46.575 [DEBUG] [Thread-200341] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:40:46.592 [DEBUG] [Thread-200341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:40:46.593 [DEBUG] [Thread-200341] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:40:46.593 [DEBUG] [Thread-200341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:40:46.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:40:46.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:40:46.595 [DEBUG] [Thread-200341] [transport.py] [_log()] userauth is OK
2026-04-13T02:40:46.595 [DEBUG] [Thread-200341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:40:46.595 [DEBUG] [Thread-200341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:40:46.595 [DEBUG] [Thread-200341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:40:46.595 [DEBUG] [Thread-200341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:40:46.611 [INFO] [Thread-200341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:40:46.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:40:47.347 [DEBUG] [Thread-200341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:40:47.348 [DEBUG] [Thread-200341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:40:47.348 [DEBUG] [Thread-200341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:40:47.388 [DEBUG] [Thread-200341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:40:47.388 [DEBUG] [Thread-200341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:40:47.391 [DEBUG] [Thread-200341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:40:47.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:40:47.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:40:47.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:40:47.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:40:47.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:40:47.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:40:47.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:40:47.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:40:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:40:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.027875 -999.00  +10.50   4.80     91   +9.10 1 2 1 3 1     0    0 1.12 -12.26 .nESw 4.8 4.8 166.8 6.4 11.2 -21.8 11.1 -20.8 10.8 -18.9 11.1 -20.8
2026-04-13T02:40:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:40:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:40:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.027875
2026-04-13T02:40:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:40:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:40:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:40:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:40:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:40:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:40:37', tmtdew=1.34499, humidity=91.2996, cloud=0.0, wind=9.98784, temperature=10.1476, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:40:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:40:47.418 [DEBUG] [Thread-200341] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:40:47.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:40:47.517 [DEBUG] [Thread-200344] [transport.py] [_log()] starting thread (client mode): 0xae5b0c40
2026-04-13T02:40:47.517 [DEBUG] [Thread-200344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:40:47.535 [DEBUG] [Thread-200344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:40:47.535 [INFO] [Thread-200344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:40:47.542 [DEBUG] [Thread-200344] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] client lang: <none>
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] server lang: <none>
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] kex follows: False
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] Compression: none
2026-04-13T02:40:47.543 [DEBUG] [Thread-200344] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:40:47.597 [DEBUG] [Thread-200344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:40:47.597 [DEBUG] [Thread-200344] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:40:47.597 [DEBUG] [Thread-200344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:40:47.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:40:47.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:40:47.659 [DEBUG] [Thread-200344] [transport.py] [_log()] userauth is OK
2026-04-13T02:40:47.659 [DEBUG] [Thread-200344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:40:47.659 [DEBUG] [Thread-200344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:40:47.659 [DEBUG] [Thread-200344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:40:47.659 [DEBUG] [Thread-200344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:40:47.674 [INFO] [Thread-200344] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:40:47.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:40:47.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:40:48.503 [DEBUG] [Thread-200344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:40:48.503 [DEBUG] [Thread-200344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:40:48.551 [DEBUG] [Thread-200344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:40:48.551 [DEBUG] [Thread-200344] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:40:48.561 [DEBUG] [Thread-200344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:40:48.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:40:48.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:40:48.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:40:48.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:40:48.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:40:48.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:40:48.598 [DEBUG] [Thread-200344] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:40:50.439 [DEBUG] [Thread-200346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:05.482 [DEBUG] [Thread-200347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:18.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:41:18.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:41:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:41:19.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 40, 37), 1.34499, 91.2996, 0.0, 9.98784, 10.1476, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:41:19.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:40:37
2026-04-13T02:41:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:41:20.407 [DEBUG] [Thread-200348] [transport.py] [_log()] starting thread (client mode): 0xae5b3df0
2026-04-13T02:41:20.407 [DEBUG] [Thread-200348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:41:20.428 [DEBUG] [Thread-200348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:41:20.428 [INFO] [Thread-200348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:41:20.431 [DEBUG] [Thread-200348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:41:20.431 [DEBUG] [Thread-200348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] client lang: <none>
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] server lang: <none>
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] kex follows: False
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] Compression: none
2026-04-13T02:41:20.432 [DEBUG] [Thread-200348] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:41:20.451 [DEBUG] [Thread-200348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:41:20.452 [DEBUG] [Thread-200348] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:41:20.452 [DEBUG] [Thread-200348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:41:20.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:41:20.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:41:20.455 [DEBUG] [Thread-200348] [transport.py] [_log()] userauth is OK
2026-04-13T02:41:20.455 [DEBUG] [Thread-200348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:41:20.455 [DEBUG] [Thread-200348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:41:20.455 [DEBUG] [Thread-200348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:41:20.455 [DEBUG] [Thread-200348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:41:20.474 [INFO] [Thread-200348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:41:20.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:41:20.524 [DEBUG] [Thread-200350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:21.291 [DEBUG] [Thread-200348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:41:21.291 [DEBUG] [Thread-200348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:41:21.292 [DEBUG] [Thread-200348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:41:21.332 [DEBUG] [Thread-200348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:41:21.332 [DEBUG] [Thread-200348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:41:21.336 [DEBUG] [Thread-200348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:41:21.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:41:21.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:41:21.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:41:21.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:41:21.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:41:21.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:41:21.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:41:21.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:41:21.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:41:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.028222 -999.00  +10.50   4.60     91   +9.10 1 2 1 3 1     0    0 1.12 -10.61 .nESw 4.6 4.6 181.0 6.7 11.2 -21.7 11.1 -20.7 10.8 -18.9 11.1 -20.5
2026-04-13T02:41:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:41:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:41:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.028222
2026-04-13T02:41:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:41:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:41:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:41:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:41:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:41:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:40:37', tmtdew=1.34499, humidity=91.2996, cloud=0.0, wind=9.98784, temperature=10.1476, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:40:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:41:21.363 [DEBUG] [Thread-200348] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:41:21.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:41:21.457 [DEBUG] [Thread-200352] [transport.py] [_log()] starting thread (client mode): 0xae5b1180
2026-04-13T02:41:21.457 [DEBUG] [Thread-200352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:41:21.472 [DEBUG] [Thread-200352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:41:21.472 [INFO] [Thread-200352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:21.479 [DEBUG] [Thread-200352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] client lang: <none>
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] server lang: <none>
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] kex follows: False
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] Compression: none
2026-04-13T02:41:21.480 [DEBUG] [Thread-200352] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:41:21.538 [DEBUG] [Thread-200352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:41:21.539 [DEBUG] [Thread-200352] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:41:21.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:41:21.540 [DEBUG] [Thread-200352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:41:21.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:41:21.594 [DEBUG] [Thread-200352] [transport.py] [_log()] userauth is OK
2026-04-13T02:41:21.594 [DEBUG] [Thread-200352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:41:21.594 [DEBUG] [Thread-200352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:41:21.594 [DEBUG] [Thread-200352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:41:21.595 [DEBUG] [Thread-200352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:41:21.618 [INFO] [Thread-200352] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:41:21.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:41:21.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:41:22.507 [DEBUG] [Thread-200352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:41:22.507 [DEBUG] [Thread-200352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:41:22.555 [DEBUG] [Thread-200352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:41:22.555 [DEBUG] [Thread-200352] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:41:22.564 [DEBUG] [Thread-200352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:41:22.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:41:22.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:41:22.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:41:22.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:41:22.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:41:22.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:41:22.600 [DEBUG] [Thread-200352] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:41:25.242 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:25.244 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:33.983 [DEBUG] [Thread-200354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:35.565 [DEBUG] [Thread-200355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:50.614 [DEBUG] [Thread-200356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:41:52.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:41:52.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:41:52.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:41:53.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 41, 13), 1.46696, 90.683, 0.0, 8.41752, 10.2072, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:41:53.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:41:13
2026-04-13T02:41:54.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:41:54.470 [DEBUG] [Thread-200357] [transport.py] [_log()] starting thread (client mode): 0xae5b22f0
2026-04-13T02:41:54.470 [DEBUG] [Thread-200357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:41:54.491 [DEBUG] [Thread-200357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:41:54.492 [INFO] [Thread-200357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:41:54.494 [DEBUG] [Thread-200357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] client lang: <none>
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] server lang: <none>
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] kex follows: False
2026-04-13T02:41:54.495 [DEBUG] [Thread-200357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:41:54.496 [DEBUG] [Thread-200357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:41:54.496 [DEBUG] [Thread-200357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:41:54.496 [DEBUG] [Thread-200357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:41:54.496 [DEBUG] [Thread-200357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:41:54.496 [DEBUG] [Thread-200357] [transport.py] [_log()] Compression: none
2026-04-13T02:41:54.496 [DEBUG] [Thread-200357] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:41:54.515 [DEBUG] [Thread-200357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:41:54.515 [DEBUG] [Thread-200357] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:41:54.516 [DEBUG] [Thread-200357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:41:54.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:41:54.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:41:54.518 [DEBUG] [Thread-200357] [transport.py] [_log()] userauth is OK
2026-04-13T02:41:54.518 [DEBUG] [Thread-200357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:41:54.518 [DEBUG] [Thread-200357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:41:54.518 [DEBUG] [Thread-200357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:41:54.518 [DEBUG] [Thread-200357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:41:54.555 [INFO] [Thread-200357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:41:54.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:41:55.361 [DEBUG] [Thread-200357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:41:55.361 [DEBUG] [Thread-200357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:41:55.361 [DEBUG] [Thread-200357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:41:55.402 [DEBUG] [Thread-200357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:41:55.402 [DEBUG] [Thread-200357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:41:55.406 [DEBUG] [Thread-200357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:41:55.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:41:55.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:41:55.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:41:55.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:41:55.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:41:55.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:41:55.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:41:55.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:41:55.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:41:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.028569 -999.00  +10.50   4.98     91   +9.10 1 2 1 3 1     0    0 1.22 -8.89 .NES. 5.0 5.0 183.2 6.4 11.2 -21.6 11.1 -20.9 10.8 -18.8 11.1 -20.6
2026-04-13T02:41:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:41:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:41:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.028569
2026-04-13T02:41:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:41:55.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:41:55.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:41:55.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:41:55.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:41:55.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:41:13', tmtdew=1.46696, humidity=90.683, cloud=0.0, wind=8.41752, temperature=10.2072, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:41:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:41:55.432 [DEBUG] [Thread-200357] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:41:55.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:41:55.525 [DEBUG] [Thread-200360] [transport.py] [_log()] starting thread (client mode): 0xae5b0850
2026-04-13T02:41:55.526 [DEBUG] [Thread-200360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:41:55.540 [DEBUG] [Thread-200360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:41:55.540 [INFO] [Thread-200360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] client lang: <none>
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] server lang: <none>
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] kex follows: False
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:41:55.548 [DEBUG] [Thread-200360] [transport.py] [_log()] Compression: none
2026-04-13T02:41:55.549 [DEBUG] [Thread-200360] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:41:55.605 [DEBUG] [Thread-200360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:41:55.606 [DEBUG] [Thread-200360] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:41:55.606 [DEBUG] [Thread-200360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:41:55.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:41:55.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:41:55.661 [DEBUG] [Thread-200360] [transport.py] [_log()] userauth is OK
2026-04-13T02:41:55.661 [DEBUG] [Thread-200360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:41:55.661 [DEBUG] [Thread-200360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:41:55.661 [DEBUG] [Thread-200360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:41:55.661 [DEBUG] [Thread-200360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:41:55.675 [INFO] [Thread-200360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:41:55.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:41:55.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:41:56.497 [DEBUG] [Thread-200360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:41:56.497 [DEBUG] [Thread-200360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:41:56.545 [DEBUG] [Thread-200360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:41:56.546 [DEBUG] [Thread-200360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:41:56.554 [DEBUG] [Thread-200360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:41:56.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:41:56.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:41:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:41:56.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:41:56.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:41:56.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:41:56.590 [DEBUG] [Thread-200360] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:42:05.651 [DEBUG] [Thread-200362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:42:20.706 [DEBUG] [Thread-200363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:42:25.450 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:42:25.452 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:42:26.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:42:26.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:42:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:42:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 41, 48), 1.32191, 91.4323, 0.0, 10.0584, 9.98171, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:42:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:41:48
2026-04-13T02:42:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:42:28.522 [DEBUG] [Thread-200364] [transport.py] [_log()] starting thread (client mode): 0xae5b14b0
2026-04-13T02:42:28.522 [DEBUG] [Thread-200364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:42:28.542 [DEBUG] [Thread-200364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:42:28.542 [INFO] [Thread-200364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] client lang: <none>
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] server lang: <none>
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] kex follows: False
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:42:28.546 [DEBUG] [Thread-200364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:42:28.547 [DEBUG] [Thread-200364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:42:28.547 [DEBUG] [Thread-200364] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:42:28.547 [DEBUG] [Thread-200364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:42:28.547 [DEBUG] [Thread-200364] [transport.py] [_log()] Compression: none
2026-04-13T02:42:28.547 [DEBUG] [Thread-200364] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:42:28.566 [DEBUG] [Thread-200364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:42:28.566 [DEBUG] [Thread-200364] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:42:28.567 [DEBUG] [Thread-200364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:42:28.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:42:28.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:42:28.569 [DEBUG] [Thread-200364] [transport.py] [_log()] userauth is OK
2026-04-13T02:42:28.569 [DEBUG] [Thread-200364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:42:28.569 [DEBUG] [Thread-200364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:42:28.569 [DEBUG] [Thread-200364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:42:28.569 [DEBUG] [Thread-200364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:42:28.593 [INFO] [Thread-200364] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:42:28.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:42:29.357 [DEBUG] [Thread-200364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:42:29.357 [DEBUG] [Thread-200364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:42:29.357 [DEBUG] [Thread-200364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:42:29.399 [DEBUG] [Thread-200364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:42:29.399 [DEBUG] [Thread-200364] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:42:29.403 [DEBUG] [Thread-200364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:42:29.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:42:29.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:42:29.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:42:29.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:42:29.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:42:29.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:42:29.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:42:29.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:42:29.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:42:29.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.028917 -999.00  +10.50   5.54     91   +9.10 1 2 1 3 1     0    0 1.22 -8.02 ..ES. 5.5 5.5 172.0 7.1 11.2 -21.6 11.1 -20.7 10.8 -18.7 11.1 -20.5
2026-04-13T02:42:29.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:42:29.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:42:29.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.028917
2026-04-13T02:42:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:42:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:42:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:42:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:42:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:42:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:41:48', tmtdew=1.32191, humidity=91.4323, cloud=0.0, wind=10.0584, temperature=9.98171, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:41:38.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0202500000000008, nan, 1.889499999999999, nan, nan, 0.26699999999999946, nan, nan, 3.0165000000000006, 1.2462499999999999, 1.2989999999999995, nan, nan, 0.11599999999999966, nan, nan, 0.9995000000000003, 0.16199999999999903, 0.3612499999999983, 1.4979999999999984, 2.047249999999999, nan, 2.89375, 0.6639999999999988, 0.125, 0.08275000000000077, 0.008000000000000895, 0.10800000000000054, 0.2890000000000006, 0.4350000000000014, 0.5070000000000006, 0.2857499999999984], zp_timestamp='2026-04-13T00:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:42:29.430 [DEBUG] [Thread-200364] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:42:29.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:42:29.523 [DEBUG] [Thread-200367] [transport.py] [_log()] starting thread (client mode): 0xae5b28c0
2026-04-13T02:42:29.523 [DEBUG] [Thread-200367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:42:29.538 [DEBUG] [Thread-200367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:42:29.538 [INFO] [Thread-200367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:42:29.548 [DEBUG] [Thread-200367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:42:29.548 [DEBUG] [Thread-200367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:42:29.548 [DEBUG] [Thread-200367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:42:29.548 [DEBUG] [Thread-200367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:42:29.548 [DEBUG] [Thread-200367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:42:29.548 [DEBUG] [Thread-200367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:42:29.548 [DEBUG] [Thread-200367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] client lang: <none>
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] server lang: <none>
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] kex follows: False
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] Compression: none
2026-04-13T02:42:29.549 [DEBUG] [Thread-200367] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:42:29.604 [DEBUG] [Thread-200367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:42:29.605 [DEBUG] [Thread-200367] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:42:29.615 [DEBUG] [Thread-200367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:42:29.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:42:29.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:42:29.661 [DEBUG] [Thread-200367] [transport.py] [_log()] userauth is OK
2026-04-13T02:42:29.662 [DEBUG] [Thread-200367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:42:29.662 [DEBUG] [Thread-200367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:42:29.662 [DEBUG] [Thread-200367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:42:29.662 [DEBUG] [Thread-200367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:42:29.681 [INFO] [Thread-200367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:42:29.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:42:29.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:42:30.513 [DEBUG] [Thread-200367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:42:30.513 [DEBUG] [Thread-200367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:42:30.561 [DEBUG] [Thread-200367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:42:30.561 [DEBUG] [Thread-200367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:42:30.570 [DEBUG] [Thread-200367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:42:30.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:42: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')
2026-04-13T02:42:30.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:42:30.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:42:30.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:42:30.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:42:30.607 [DEBUG] [Thread-200367] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:42:34.041 [DEBUG] [Thread-200369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:42:35.746 [DEBUG] [Thread-200370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:42:50.804 [DEBUG] [Thread-200371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:43:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:43:00.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:43:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:43:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 42, 24), 1.40039, 90.7825, 0.0, 8.66448, 10.2074, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:43:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:42:24
2026-04-13T02:43:02.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:43:02.465 [DEBUG] [Thread-200372] [transport.py] [_log()] starting thread (client mode): 0xae5b3c70
2026-04-13T02:43:02.465 [DEBUG] [Thread-200372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:43:02.486 [DEBUG] [Thread-200372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:43:02.486 [INFO] [Thread-200372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:43:02.489 [DEBUG] [Thread-200372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:43:02.489 [DEBUG] [Thread-200372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] client lang: <none>
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] server lang: <none>
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] kex follows: False
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] Compression: none
2026-04-13T02:43:02.490 [DEBUG] [Thread-200372] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:43:02.508 [DEBUG] [Thread-200372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:43:02.509 [DEBUG] [Thread-200372] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:43:02.509 [DEBUG] [Thread-200372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:43:02.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:43:02.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:43:02.511 [DEBUG] [Thread-200372] [transport.py] [_log()] userauth is OK
2026-04-13T02:43:02.511 [DEBUG] [Thread-200372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:43:02.511 [DEBUG] [Thread-200372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:43:02.512 [DEBUG] [Thread-200372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:43:02.512 [DEBUG] [Thread-200372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:43:02.530 [INFO] [Thread-200372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:43:02.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:43:03.303 [DEBUG] [Thread-200372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:43:03.303 [DEBUG] [Thread-200372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:43:03.303 [DEBUG] [Thread-200372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:43:03.344 [DEBUG] [Thread-200372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:43:03.344 [DEBUG] [Thread-200372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:43:03.348 [DEBUG] [Thread-200372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:43:03.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:43:03.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:43:03.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:43:03.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:43:03.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:43:03.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:43:03.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:43:03.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:43:03.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:43:03.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.029264 -999.00  +10.50   4.68     91   +9.10 1 2 1 3 1     0    0 1.26 -5.89 ..ES. 4.7 4.7 186.6 6.0 11.2 -21.7 11.1 -20.8 10.8 -18.8 11.1 -20.7
2026-04-13T02:43:03.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:43:03.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:43:03.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.029264
2026-04-13T02:43:03.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:43:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:43:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:43:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:43:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:43:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:42:24', tmtdew=1.40039, humidity=90.7825, cloud=0.0, wind=8.66448, temperature=10.2074, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:42:08.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.9932499999999997, nan, 1.2574999999999994, nan, nan, 0.4084999999999983, nan, nan, nan, 3.03125, 2.1209999999999996, nan, nan, 0.006999999999999673, nan, nan, 1.1215000000000002, 0.25649999999999906, 0.5957499999999989, 1.9239999999999986, nan, nan, nan, 2.0889999999999995, 0.13250000000000028, 0.11125000000000007, 0.08050000000000068, 0.15399999999999991, 0.29100000000000037, 0.471000000000001, 0.6810000000000009, 0.3922499999999989], zp_timestamp='2026-04-13T00:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:43:03.376 [DEBUG] [Thread-200372] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:43:03.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:43:03.470 [DEBUG] [Thread-200375] [transport.py] [_log()] starting thread (client mode): 0xae5b10f0
2026-04-13T02:43:03.470 [DEBUG] [Thread-200375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:43:03.485 [DEBUG] [Thread-200375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:43:03.485 [INFO] [Thread-200375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] client lang: <none>
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] server lang: <none>
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] kex follows: False
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] Compression: none
2026-04-13T02:43:03.492 [DEBUG] [Thread-200375] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:43:03.551 [DEBUG] [Thread-200375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:43:03.551 [DEBUG] [Thread-200375] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:43:03.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:43:03.552 [DEBUG] [Thread-200375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:43:03.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:43:03.609 [DEBUG] [Thread-200375] [transport.py] [_log()] userauth is OK
2026-04-13T02:43:03.609 [DEBUG] [Thread-200375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:43:03.609 [DEBUG] [Thread-200375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:43:03.609 [DEBUG] [Thread-200375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:43:03.609 [DEBUG] [Thread-200375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:43:03.627 [INFO] [Thread-200375] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:43:03.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:43:03.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:43:04.503 [DEBUG] [Thread-200375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:43:04.504 [DEBUG] [Thread-200375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:43:04.552 [DEBUG] [Thread-200375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:43:04.552 [DEBUG] [Thread-200375] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:43:04.561 [DEBUG] [Thread-200375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:43:04.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:43:04.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:43:04.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:43:04.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:43:04.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:43:04.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:43:04.595 [DEBUG] [Thread-200375] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:43:05.836 [DEBUG] [Thread-200377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:43:20.897 [DEBUG] [Thread-200378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:43:25.655 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:43:25.656 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:43:34.100 [DEBUG] [Thread-200379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:43:34.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:43:34.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:43:34.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:43:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 42, 59), 1.40292, 90.7659, 0.0, 8.77032, 10.1909, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:43:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:42:59
2026-04-13T02:43:35.936 [DEBUG] [Thread-200380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:43:36.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:43:36.457 [DEBUG] [Thread-200381] [transport.py] [_log()] starting thread (client mode): 0xb0fcc070
2026-04-13T02:43:36.458 [DEBUG] [Thread-200381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:43:36.477 [DEBUG] [Thread-200381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:43:36.477 [INFO] [Thread-200381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:43:36.480 [DEBUG] [Thread-200381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:43:36.480 [DEBUG] [Thread-200381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:43:36.480 [DEBUG] [Thread-200381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:43:36.480 [DEBUG] [Thread-200381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] client lang: <none>
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] server lang: <none>
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] kex follows: False
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] Compression: none
2026-04-13T02:43:36.481 [DEBUG] [Thread-200381] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:43:36.499 [DEBUG] [Thread-200381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:43:36.500 [DEBUG] [Thread-200381] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:43:36.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:43:36.501 [DEBUG] [Thread-200381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:43:36.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:43:36.503 [DEBUG] [Thread-200381] [transport.py] [_log()] userauth is OK
2026-04-13T02:43:36.503 [DEBUG] [Thread-200381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:43:36.503 [DEBUG] [Thread-200381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:43:36.503 [DEBUG] [Thread-200381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:43:36.503 [DEBUG] [Thread-200381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:43:36.540 [INFO] [Thread-200381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:43:36.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:43:37.376 [DEBUG] [Thread-200381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:43:37.376 [DEBUG] [Thread-200381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:43:37.377 [DEBUG] [Thread-200381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:43:37.417 [DEBUG] [Thread-200381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:43:37.417 [DEBUG] [Thread-200381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:43:37.420 [DEBUG] [Thread-200381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:43:37.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:43:37.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:43:37.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:43:37.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:43:37.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:43:37.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:43:37.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:43:37.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:43:37.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:43:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.029611 -999.00  +10.50   4.56     91   +9.10 1 2 1 3 1     0    0 1.28 -5.14 ..ES. 4.6 4.6 184.8 5.7 11.2 -21.7 11.1 -20.7 10.8 -18.7 11.1 -20.7
2026-04-13T02:43:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:43:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:43:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.029611
2026-04-13T02:43:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:43:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:43:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:43:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:43:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:43:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:42:59', tmtdew=1.40292, humidity=90.7659, cloud=0.0, wind=8.77032, temperature=10.1909, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:42:38.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.9932499999999997, nan, 1.2574999999999994, nan, nan, 0.4084999999999983, nan, nan, nan, 3.03125, 2.1209999999999996, nan, nan, 0.006999999999999673, nan, nan, 1.1215000000000002, 0.25649999999999906, 0.5957499999999989, 1.9239999999999986, nan, nan, nan, 2.0889999999999995, 0.13250000000000028, 0.11125000000000007, 0.08050000000000068, 0.15399999999999991, 0.29100000000000037, 0.471000000000001, 0.6810000000000009, 0.3922499999999989], zp_timestamp='2026-04-13T00:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:43:37.446 [DEBUG] [Thread-200381] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:43:37.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:43:37.540 [DEBUG] [Thread-200384] [transport.py] [_log()] starting thread (client mode): 0xae5b0250
2026-04-13T02:43:37.540 [DEBUG] [Thread-200384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:43:37.554 [DEBUG] [Thread-200384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:43:37.554 [INFO] [Thread-200384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] client lang: <none>
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] server lang: <none>
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] kex follows: False
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] Compression: none
2026-04-13T02:43:37.562 [DEBUG] [Thread-200384] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:43:37.622 [DEBUG] [Thread-200384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:43:37.623 [DEBUG] [Thread-200384] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:43:37.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:43:37.624 [DEBUG] [Thread-200384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:43:37.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:43:37.679 [DEBUG] [Thread-200384] [transport.py] [_log()] userauth is OK
2026-04-13T02:43:37.679 [DEBUG] [Thread-200384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:43:37.679 [DEBUG] [Thread-200384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:43:37.679 [DEBUG] [Thread-200384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:43:37.679 [DEBUG] [Thread-200384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:43:37.703 [INFO] [Thread-200384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:43:37.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:43:37.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:43:38.511 [DEBUG] [Thread-200384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:43:38.511 [DEBUG] [Thread-200384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:43:38.559 [DEBUG] [Thread-200384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:43:38.559 [DEBUG] [Thread-200384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:43:38.568 [DEBUG] [Thread-200384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:43:38.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:43:38.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:43:38.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:43:38.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:43:38.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:43:38.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:43:38.605 [DEBUG] [Thread-200384] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:43:50.972 [DEBUG] [Thread-200386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:44:06.035 [DEBUG] [Thread-200387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:44:08.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:44:08.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:44:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:44:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 43, 35), 1.27341, 91.7309, 0.0, 10.1642, 9.94854, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:44:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:43:35
2026-04-13T02:44:10.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:44:10.371 [DEBUG] [Thread-200388] [transport.py] [_log()] starting thread (client mode): 0xae5b1570
2026-04-13T02:44:10.371 [DEBUG] [Thread-200388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:44:10.393 [DEBUG] [Thread-200388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:44:10.393 [INFO] [Thread-200388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] client lang: <none>
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] server lang: <none>
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] kex follows: False
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] Compression: none
2026-04-13T02:44:10.394 [DEBUG] [Thread-200388] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:44:10.412 [DEBUG] [Thread-200388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:44:10.413 [DEBUG] [Thread-200388] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:44:10.413 [DEBUG] [Thread-200388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:44:10.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:44:10.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:44:10.416 [DEBUG] [Thread-200388] [transport.py] [_log()] userauth is OK
2026-04-13T02:44:10.416 [DEBUG] [Thread-200388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:44:10.416 [DEBUG] [Thread-200388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:44:10.416 [DEBUG] [Thread-200388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:44:10.416 [DEBUG] [Thread-200388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:44:10.441 [INFO] [Thread-200388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:44:10.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:44:11.237 [DEBUG] [Thread-200388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:44:11.237 [DEBUG] [Thread-200388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:44:11.238 [DEBUG] [Thread-200388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:44:11.279 [DEBUG] [Thread-200388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:44:11.279 [DEBUG] [Thread-200388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:44:11.283 [DEBUG] [Thread-200388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:44:11.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:44:11.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:44:11.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:44:11.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:44:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:44:11.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:44:11.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:44:11.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:44:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:44:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.030306 -999.00  +10.50   5.05     91   +9.10 1 2 1 3 1     0    0 1.35 -3.24 .NESW 5.0 5.0 183.4 5.8 11.2 -21.6 11.1 -20.8 10.8 -18.7 11.1 -20.7
2026-04-13T02:44:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:44:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:44:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.030306
2026-04-13T02:44:11.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:44:11.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:44:11.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:44:11.305 [DEBUG] [Thread-200388] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:44:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:44:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:44:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:43:35', tmtdew=1.27341, humidity=91.7309, cloud=0.0, wind=10.1642, temperature=9.94854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:43:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.9932499999999997, nan, 1.2574999999999994, nan, nan, 0.4084999999999983, nan, nan, nan, 3.03125, 2.1209999999999996, nan, nan, 0.006999999999999673, nan, nan, 1.1215000000000002, 0.25649999999999906, 0.5957499999999989, 1.9239999999999986, nan, nan, nan, 2.0889999999999995, 0.13250000000000028, 0.11125000000000007, 0.08050000000000068, 0.15399999999999991, 0.29100000000000037, 0.471000000000001, 0.6810000000000009, 0.3922499999999989], zp_timestamp='2026-04-13T00:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:44:11.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:44:21.074 [DEBUG] [Thread-200391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:44:25.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:44:25.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:44:34.166 [DEBUG] [Thread-200392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:44:36.125 [DEBUG] [Thread-200393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:44:51.162 [DEBUG] [Thread-200394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:45:06.204 [DEBUG] [Thread-200395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:45:21.242 [DEBUG] [Thread-200396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:45:26.075 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:45:26.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:45:34.227 [DEBUG] [Thread-200397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:45:36.284 [DEBUG] [Thread-200398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:45:51.323 [DEBUG] [Thread-200399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:06.359 [DEBUG] [Thread-200400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:21.396 [DEBUG] [Thread-200401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:24.895 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T02:46:26.279 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:26.280 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:34.285 [DEBUG] [Thread-200402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:36.432 [DEBUG] [Thread-200403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:51.469 [DEBUG] [Thread-200404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:46:54.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:46:54.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:46:54.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:46:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 46, 33), 1.19958, 92.1953, 0.0, 9.07056, 10.0481, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:46:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:46:33
2026-04-13T02:46:56.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:46:56.889 [DEBUG] [Thread-200405] [transport.py] [_log()] starting thread (client mode): 0xae5b25c0
2026-04-13T02:46:56.889 [DEBUG] [Thread-200405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:46:56.909 [DEBUG] [Thread-200405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:46:56.909 [INFO] [Thread-200405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] client lang: <none>
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] server lang: <none>
2026-04-13T02:46:56.913 [DEBUG] [Thread-200405] [transport.py] [_log()] kex follows: False
2026-04-13T02:46:56.914 [DEBUG] [Thread-200405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:46:56.914 [DEBUG] [Thread-200405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:46:56.914 [DEBUG] [Thread-200405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:46:56.914 [DEBUG] [Thread-200405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:46:56.914 [DEBUG] [Thread-200405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:46:56.914 [DEBUG] [Thread-200405] [transport.py] [_log()] Compression: none
2026-04-13T02:46:56.914 [DEBUG] [Thread-200405] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:46:56.935 [DEBUG] [Thread-200405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:46:56.935 [DEBUG] [Thread-200405] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:46:56.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:46:56.937 [DEBUG] [Thread-200405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:46:56.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:46:56.939 [DEBUG] [Thread-200405] [transport.py] [_log()] userauth is OK
2026-04-13T02:46:56.939 [DEBUG] [Thread-200405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:46:56.939 [DEBUG] [Thread-200405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:46:56.939 [DEBUG] [Thread-200405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:46:56.939 [DEBUG] [Thread-200405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:46:56.964 [INFO] [Thread-200405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:46:56.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:46:57.730 [DEBUG] [Thread-200405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:46:57.730 [DEBUG] [Thread-200405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:46:57.730 [DEBUG] [Thread-200405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:46:57.773 [DEBUG] [Thread-200405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:46:57.773 [DEBUG] [Thread-200405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:46:57.775 [DEBUG] [Thread-200405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:46:57.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:46:57.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:46:57.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:46:57.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:46:57.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:46:57.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:46:57.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:46:57.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:46:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:46:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.032042 -999.00  +10.50   5.20     90   +9.10 1 2 1 3 1     0    0 1.40 -0.62 .NeS. 5.2 5.2 193.8 6.3 11.2 -21.7 11.1 -20.8 10.8 -18.8 11.1 -20.6
2026-04-13T02:46:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:46:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:46:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.032042
2026-04-13T02:46:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:46:57.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:46:57.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:46:57.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:46:57.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:46:57.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:46:33', tmtdew=1.19958, humidity=92.1953, cloud=0.0, wind=9.07056, temperature=10.0481, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:46:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.385250000000001, nan, 2.1864999999999997, nan, nan, nan, nan, nan, nan, nan, 2.0460000000000003, nan, nan, nan, nan, nan, 1.2175000000000002, 0.2259999999999991, 0.5822499999999984, 1.991999999999999, nan, nan, nan, 2.419999999999999, 0.10100000000000087, 0.11175000000000068, 0.05400000000000027, 0.19899999999999984, 0.3050000000000006, 0.519000000000001, 0.6190000000000007, 0.24274999999999913], zp_timestamp='2026-04-13T00:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:46:57.795 [DEBUG] [Thread-200405] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:46:57.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:46:57.890 [DEBUG] [Thread-200408] [transport.py] [_log()] starting thread (client mode): 0xae5b3ee0
2026-04-13T02:46:57.890 [DEBUG] [Thread-200408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:46:57.905 [DEBUG] [Thread-200408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:46:57.905 [INFO] [Thread-200408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:46:57.912 [DEBUG] [Thread-200408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:46:57.912 [DEBUG] [Thread-200408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:46:57.912 [DEBUG] [Thread-200408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] client lang: <none>
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] server lang: <none>
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] kex follows: False
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] Compression: none
2026-04-13T02:46:57.913 [DEBUG] [Thread-200408] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:46:57.969 [DEBUG] [Thread-200408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:46:57.969 [DEBUG] [Thread-200408] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:46:57.970 [DEBUG] [Thread-200408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:46:57.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:46:57.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:46:58.026 [DEBUG] [Thread-200408] [transport.py] [_log()] userauth is OK
2026-04-13T02:46:58.026 [DEBUG] [Thread-200408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:46:58.026 [DEBUG] [Thread-200408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:46:58.027 [DEBUG] [Thread-200408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:46:58.027 [DEBUG] [Thread-200408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:46:58.050 [INFO] [Thread-200408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:46:58.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:46:58.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:46:58.860 [DEBUG] [Thread-200408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:46:58.861 [DEBUG] [Thread-200408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:46:58.909 [DEBUG] [Thread-200408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:46:58.909 [DEBUG] [Thread-200408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:46:58.918 [DEBUG] [Thread-200408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:46:58.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:46:58.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:46:58.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:46:58.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:46:58.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:46:58.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:46:58.954 [DEBUG] [Thread-200408] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:47:06.507 [DEBUG] [Thread-200410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:47:21.560 [DEBUG] [Thread-200411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:47:26.485 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:47:26.486 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:47:28.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:47:28.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:47:28.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:47:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 47, 8), 1.40202, 90.5811, 0.0, 8.29404, 10.2743, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:47:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:47:08
2026-04-13T02:47:30.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:47:30.827 [DEBUG] [Thread-200412] [transport.py] [_log()] starting thread (client mode): 0xae5b12d0
2026-04-13T02:47:30.827 [DEBUG] [Thread-200412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:47:30.848 [DEBUG] [Thread-200412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:47:30.848 [INFO] [Thread-200412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:47:30.851 [DEBUG] [Thread-200412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:47:30.851 [DEBUG] [Thread-200412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:47:30.851 [DEBUG] [Thread-200412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] client lang: <none>
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] server lang: <none>
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] kex follows: False
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:47:30.852 [DEBUG] [Thread-200412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:47:30.853 [DEBUG] [Thread-200412] [transport.py] [_log()] Compression: none
2026-04-13T02:47:30.853 [DEBUG] [Thread-200412] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:47:30.870 [DEBUG] [Thread-200412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:47:30.870 [DEBUG] [Thread-200412] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:47:30.871 [DEBUG] [Thread-200412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:47:30.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:47:30.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:47:30.872 [DEBUG] [Thread-200412] [transport.py] [_log()] userauth is OK
2026-04-13T02:47:30.873 [DEBUG] [Thread-200412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:47:30.873 [DEBUG] [Thread-200412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:47:30.873 [DEBUG] [Thread-200412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:47:30.873 [DEBUG] [Thread-200412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:47:30.897 [INFO] [Thread-200412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:47:30.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:47:31.643 [DEBUG] [Thread-200412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:47:31.643 [DEBUG] [Thread-200412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:47:31.644 [DEBUG] [Thread-200412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:47:31.686 [DEBUG] [Thread-200412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:47:31.686 [DEBUG] [Thread-200412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:47:31.689 [DEBUG] [Thread-200412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:47:31.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:47:31.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:47:31.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:47:31.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:47:31.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:47:31.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:47:31.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:47:31.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:47:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:47:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.032736 -999.00  +10.50   4.37     90   +9.00 1 2 1 3 1     0    0 1.43 -0.29 .nESW 4.4 4.4 195.8 4.9 11.2 -21.7 11.1 -20.9 10.8 -18.7 11.1 -20.7
2026-04-13T02:47:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:47:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:47:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.032736
2026-04-13T02:47:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:47:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:47:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:47:31.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:47:31.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:47:31.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:47:08', tmtdew=1.40202, humidity=90.5811, cloud=0.0, wind=8.29404, temperature=10.2743, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:47:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.385250000000001, nan, 2.1864999999999997, nan, nan, nan, nan, nan, nan, nan, 2.0460000000000003, nan, nan, nan, nan, nan, 1.2175000000000002, 0.2259999999999991, 0.5822499999999984, 1.991999999999999, nan, nan, nan, 2.419999999999999, 0.10100000000000087, 0.11175000000000068, 0.05400000000000027, 0.19899999999999984, 0.3050000000000006, 0.519000000000001, 0.6190000000000007, 0.24274999999999913], zp_timestamp='2026-04-13T00:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:47:31.714 [DEBUG] [Thread-200412] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:47:31.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:47:31.806 [DEBUG] [Thread-200415] [transport.py] [_log()] starting thread (client mode): 0xae5b1300
2026-04-13T02:47:31.806 [DEBUG] [Thread-200415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:47:31.820 [DEBUG] [Thread-200415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:47:31.821 [INFO] [Thread-200415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:47:31.828 [DEBUG] [Thread-200415] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:47:31.829 [DEBUG] [Thread-200415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] client lang: <none>
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] server lang: <none>
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] kex follows: False
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] Compression: none
2026-04-13T02:47:31.830 [DEBUG] [Thread-200415] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:47:31.889 [DEBUG] [Thread-200415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:47:31.890 [DEBUG] [Thread-200415] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:47:31.890 [DEBUG] [Thread-200415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:47:31.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:47:31.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:47:31.945 [DEBUG] [Thread-200415] [transport.py] [_log()] userauth is OK
2026-04-13T02:47:31.945 [DEBUG] [Thread-200415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:47:31.945 [DEBUG] [Thread-200415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:47:31.945 [DEBUG] [Thread-200415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:47:31.945 [DEBUG] [Thread-200415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:47:31.959 [INFO] [Thread-200415] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:47:31.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:47:31.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:47:32.761 [DEBUG] [Thread-200415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:47:32.761 [DEBUG] [Thread-200415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:47:32.809 [DEBUG] [Thread-200415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:47:32.809 [DEBUG] [Thread-200415] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:47:32.819 [DEBUG] [Thread-200415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:47:32.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:47:32.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:47:32.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:47:32.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:47:32.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:47:32.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:47:32.859 [DEBUG] [Thread-200415] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:47:34.341 [DEBUG] [Thread-200417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:47:36.592 [DEBUG] [Thread-200418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:47:51.646 [DEBUG] [Thread-200419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:48:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:48:02.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:48:02.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:48:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 47, 44), 1.18922, 92.2617, 0.0, 9.31752, 10.0812, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:48:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:47:44
2026-04-13T02:48:04.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:48:04.705 [DEBUG] [Thread-200420] [transport.py] [_log()] starting thread (client mode): 0xb0fb59f0
2026-04-13T02:48:04.705 [DEBUG] [Thread-200420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:48:04.725 [DEBUG] [Thread-200420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:48:04.726 [INFO] [Thread-200420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] client lang: <none>
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] server lang: <none>
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] kex follows: False
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] Compression: none
2026-04-13T02:48:04.729 [DEBUG] [Thread-200420] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:48:04.738 [DEBUG] [Thread-200420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:48:04.739 [DEBUG] [Thread-200420] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:48:04.739 [DEBUG] [Thread-200420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:48:04.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:48:04.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:48:04.741 [DEBUG] [Thread-200420] [transport.py] [_log()] userauth is OK
2026-04-13T02:48:04.742 [DEBUG] [Thread-200420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:48:04.742 [DEBUG] [Thread-200420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:48:04.742 [DEBUG] [Thread-200420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:48:04.742 [DEBUG] [Thread-200420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:48:04.760 [INFO] [Thread-200420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:48:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:48:05.536 [DEBUG] [Thread-200420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:48:05.536 [DEBUG] [Thread-200420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:48:05.536 [DEBUG] [Thread-200420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:48:05.578 [DEBUG] [Thread-200420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:48:05.578 [DEBUG] [Thread-200420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:48:05.580 [DEBUG] [Thread-200420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:48:05.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:48:05.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:48:05.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:48:05.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:48:05.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:48:05.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:48:05.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:48:05.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:48:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:48:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.033083 -999.00  +10.50   4.64     90   +9.00 1 2 1 3 1     0    0 1.42 -0.10 ..eS. 4.6 4.6 200.0 5.4 11.2 -21.7 11.1 -20.7 10.8 -18.7 11.1 -20.7
2026-04-13T02:48:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:48:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:48:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.033083
2026-04-13T02:48:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:48:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:48:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:48:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:48:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:48:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:47:44', tmtdew=1.18922, humidity=92.2617, cloud=0.0, wind=9.31752, temperature=10.0812, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:47:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.385250000000001, nan, 2.1864999999999997, nan, nan, nan, nan, nan, nan, nan, 2.0460000000000003, nan, nan, nan, nan, nan, 1.2175000000000002, 0.2259999999999991, 0.5822499999999984, 1.991999999999999, nan, nan, nan, 2.419999999999999, 0.10100000000000087, 0.11175000000000068, 0.05400000000000027, 0.19899999999999984, 0.3050000000000006, 0.519000000000001, 0.6190000000000007, 0.24274999999999913], zp_timestamp='2026-04-13T00:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:48:05.606 [DEBUG] [Thread-200420] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:48:05.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:48:05.699 [DEBUG] [Thread-200423] [transport.py] [_log()] starting thread (client mode): 0xb0fb5300
2026-04-13T02:48:05.699 [DEBUG] [Thread-200423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:48:05.715 [DEBUG] [Thread-200423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:48:05.716 [INFO] [Thread-200423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:48:05.723 [DEBUG] [Thread-200423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:48:05.723 [DEBUG] [Thread-200423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] client lang: <none>
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] server lang: <none>
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] kex follows: False
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] Compression: none
2026-04-13T02:48:05.724 [DEBUG] [Thread-200423] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:48:05.780 [DEBUG] [Thread-200423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:48:05.781 [DEBUG] [Thread-200423] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:48:05.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:48:05.782 [DEBUG] [Thread-200423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:48:05.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:48:05.836 [DEBUG] [Thread-200423] [transport.py] [_log()] userauth is OK
2026-04-13T02:48:05.837 [DEBUG] [Thread-200423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:48:05.837 [DEBUG] [Thread-200423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:48:05.837 [DEBUG] [Thread-200423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:48:05.837 [DEBUG] [Thread-200423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:48:05.856 [INFO] [Thread-200423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:48:05.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:48:05.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:48:06.684 [DEBUG] [Thread-200425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:48:06.685 [DEBUG] [Thread-200423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:48:06.685 [DEBUG] [Thread-200423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:48:06.732 [DEBUG] [Thread-200423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:48:06.733 [DEBUG] [Thread-200423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:48:06.741 [DEBUG] [Thread-200423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:48:06.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:48:06.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:48:06.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:48:06.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:48:06.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:48:06.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:48:06.775 [DEBUG] [Thread-200423] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:48:21.738 [DEBUG] [Thread-200426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:48:26.693 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:48:26.694 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:48:34.415 [DEBUG] [Thread-200427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:48:36.774 [DEBUG] [Thread-200428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:48:36.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:48:36.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:48:36.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:48:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 48, 19), 1.44194, 90.6474, 0.0, 8.17056, 10.3906, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:48:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:48:19
2026-04-13T02:48:38.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:48:38.593 [DEBUG] [Thread-200429] [transport.py] [_log()] starting thread (client mode): 0xae5b09a0
2026-04-13T02:48:38.594 [DEBUG] [Thread-200429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:48:38.614 [DEBUG] [Thread-200429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:48:38.614 [INFO] [Thread-200429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:48:38.617 [DEBUG] [Thread-200429] [transport.py] [_log()] client lang: <none>
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] server lang: <none>
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] kex follows: False
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] Compression: none
2026-04-13T02:48:38.618 [DEBUG] [Thread-200429] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:48:38.634 [DEBUG] [Thread-200429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:48:38.634 [DEBUG] [Thread-200429] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:48:38.635 [DEBUG] [Thread-200429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:48:38.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:48:38.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:48:38.637 [DEBUG] [Thread-200429] [transport.py] [_log()] userauth is OK
2026-04-13T02:48:38.637 [DEBUG] [Thread-200429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:48:38.637 [DEBUG] [Thread-200429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:48:38.638 [DEBUG] [Thread-200429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:48:38.638 [DEBUG] [Thread-200429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:48:38.660 [INFO] [Thread-200429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:48:38.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:48:39.452 [DEBUG] [Thread-200429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:48:39.452 [DEBUG] [Thread-200429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:48:39.453 [DEBUG] [Thread-200429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:48:39.493 [DEBUG] [Thread-200429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:48:39.493 [DEBUG] [Thread-200429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:48:39.497 [DEBUG] [Thread-200429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:48:39.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:48:39.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:48:39.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:48:39.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:48:39.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:48:39.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:48:39.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:48:39.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:48:39.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:48:39.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.033430 -999.00  +10.50   4.29     90   +9.00 1 2 1 3 1     0    0 1.44 0.07 ..ESW 4.3 4.3 198.8 5.8 11.2 -21.7 11.1 -20.7 10.8 -18.8 11.0 -20.8
2026-04-13T02:48:39.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:48:39.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:48:39.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.033430
2026-04-13T02:48:39.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:48:39.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:48:39.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:48:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:48:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:48:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:48:19', tmtdew=1.44194, humidity=90.6474, cloud=0.0, wind=8.17056, temperature=10.3906, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:48:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.385250000000001, nan, 2.1864999999999997, nan, nan, nan, nan, nan, nan, nan, 2.0460000000000003, nan, nan, nan, nan, nan, 1.2175000000000002, 0.2259999999999991, 0.5822499999999984, 1.991999999999999, nan, nan, nan, 2.419999999999999, 0.10100000000000087, 0.11175000000000068, 0.05400000000000027, 0.19899999999999984, 0.3050000000000006, 0.519000000000001, 0.6190000000000007, 0.24274999999999913], zp_timestamp='2026-04-13T00:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:48:39.525 [DEBUG] [Thread-200429] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:48:39.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:48:39.608 [DEBUG] [Thread-200432] [transport.py] [_log()] starting thread (client mode): 0xae5b39a0
2026-04-13T02:48:39.608 [DEBUG] [Thread-200432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:48:39.623 [DEBUG] [Thread-200432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:48:39.623 [INFO] [Thread-200432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:48:39.630 [DEBUG] [Thread-200432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:48:39.630 [DEBUG] [Thread-200432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:48:39.630 [DEBUG] [Thread-200432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:48:39.630 [DEBUG] [Thread-200432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:39.630 [DEBUG] [Thread-200432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] client lang: <none>
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] server lang: <none>
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] kex follows: False
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] Compression: none
2026-04-13T02:48:39.631 [DEBUG] [Thread-200432] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:48:39.688 [DEBUG] [Thread-200432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:48:39.688 [DEBUG] [Thread-200432] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:48:39.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:48:39.690 [DEBUG] [Thread-200432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:48:39.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:48:39.744 [DEBUG] [Thread-200432] [transport.py] [_log()] userauth is OK
2026-04-13T02:48:39.744 [DEBUG] [Thread-200432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:48:39.744 [DEBUG] [Thread-200432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:48:39.744 [DEBUG] [Thread-200432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:48:39.744 [DEBUG] [Thread-200432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:48:39.762 [INFO] [Thread-200432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:48:39.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:48:39.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:48:40.592 [DEBUG] [Thread-200432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:48:40.593 [DEBUG] [Thread-200432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:48:40.641 [DEBUG] [Thread-200432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:48:40.641 [DEBUG] [Thread-200432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:48:40.650 [DEBUG] [Thread-200432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:48:40.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:48: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')
2026-04-13T02:48: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
2026-04-13T02:48:40.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:48:40.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:48:40.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:48:40.687 [DEBUG] [Thread-200432] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:48:51.817 [DEBUG] [Thread-200434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:49:06.877 [DEBUG] [Thread-200435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:49:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:49:10.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:49:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:49:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 48, 55), 1.489, 90.164, 0.0, 8.13528, 10.4074, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:49:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:48:55
2026-04-13T02:49:12.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:49:12.474 [DEBUG] [Thread-200436] [transport.py] [_log()] starting thread (client mode): 0xb0f577f0
2026-04-13T02:49:12.474 [DEBUG] [Thread-200436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:49:12.495 [DEBUG] [Thread-200436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:49:12.495 [INFO] [Thread-200436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] client lang: <none>
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] server lang: <none>
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] kex follows: False
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:49:12.498 [DEBUG] [Thread-200436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:49:12.499 [DEBUG] [Thread-200436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:49:12.499 [DEBUG] [Thread-200436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:49:12.499 [DEBUG] [Thread-200436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:49:12.499 [DEBUG] [Thread-200436] [transport.py] [_log()] Compression: none
2026-04-13T02:49:12.499 [DEBUG] [Thread-200436] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:49:12.516 [DEBUG] [Thread-200436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:49:12.516 [DEBUG] [Thread-200436] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:49:12.517 [DEBUG] [Thread-200436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:49:12.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:49:12.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:49:12.518 [DEBUG] [Thread-200436] [transport.py] [_log()] userauth is OK
2026-04-13T02:49:12.518 [DEBUG] [Thread-200436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:49:12.518 [DEBUG] [Thread-200436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:49:12.518 [DEBUG] [Thread-200436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:49:12.518 [DEBUG] [Thread-200436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:49:12.531 [INFO] [Thread-200436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:49:12.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:49:13.151 [DEBUG] [Thread-200436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:49:13.151 [DEBUG] [Thread-200436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:49:13.151 [DEBUG] [Thread-200436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:49:13.192 [DEBUG] [Thread-200436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:49:13.192 [DEBUG] [Thread-200436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:49:13.195 [DEBUG] [Thread-200436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:49:13.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:49:13.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:49:13.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:49:13.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:49:13.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:49:13.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:49:13.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:49:13.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:49:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:49:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.033778 -999.00  +10.50   2.95     90   +8.90 1 2 1 3 1     0    0 1.46 0.29 ..ESW 3.0 3.0 184.4 4.9 11.2 -21.8 11.1 -20.6 10.8 -18.8 11.1 -20.8
2026-04-13T02:49:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:49:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:49:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.033778
2026-04-13T02:49:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:49:13.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:49:13.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:49:13.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:49:13.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:49:13.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:48:55', tmtdew=1.489, humidity=90.164, cloud=0.0, wind=8.13528, temperature=10.4074, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:48:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.385250000000001, nan, 2.1864999999999997, nan, nan, nan, nan, nan, nan, nan, 2.0460000000000003, nan, nan, nan, nan, nan, 1.2175000000000002, 0.2259999999999991, 0.5822499999999984, 1.991999999999999, nan, nan, nan, 2.419999999999999, 0.10100000000000087, 0.11175000000000068, 0.05400000000000027, 0.19899999999999984, 0.3050000000000006, 0.519000000000001, 0.6190000000000007, 0.24274999999999913], zp_timestamp='2026-04-13T00:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:49:13.222 [DEBUG] [Thread-200436] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:49:13.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:49:13.314 [DEBUG] [Thread-200439] [transport.py] [_log()] starting thread (client mode): 0xb0f56dd0
2026-04-13T02:49:13.314 [DEBUG] [Thread-200439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:49:13.329 [DEBUG] [Thread-200439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:49:13.329 [INFO] [Thread-200439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] client lang: <none>
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] server lang: <none>
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] kex follows: False
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:49:13.337 [DEBUG] [Thread-200439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:49:13.338 [DEBUG] [Thread-200439] [transport.py] [_log()] Compression: none
2026-04-13T02:49:13.338 [DEBUG] [Thread-200439] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:49:13.395 [DEBUG] [Thread-200439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:49:13.396 [DEBUG] [Thread-200439] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:49:13.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:49:13.397 [DEBUG] [Thread-200439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:49:13.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:49:13.451 [DEBUG] [Thread-200439] [transport.py] [_log()] userauth is OK
2026-04-13T02:49:13.451 [DEBUG] [Thread-200439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:49:13.451 [DEBUG] [Thread-200439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:49:13.451 [DEBUG] [Thread-200439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:49:13.452 [DEBUG] [Thread-200439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:49:13.474 [INFO] [Thread-200439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:49:13.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:49:13.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:49:14.291 [DEBUG] [Thread-200439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:49:14.292 [DEBUG] [Thread-200439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:49:14.340 [DEBUG] [Thread-200439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:49:14.340 [DEBUG] [Thread-200439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:49:14.350 [DEBUG] [Thread-200439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:49:14.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:49:14.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:49:14.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:49:14.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:49:14.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:49:14.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:49:14.386 [DEBUG] [Thread-200439] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:49:21.914 [DEBUG] [Thread-200441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:49:26.904 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:49:26.905 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:49:34.482 [DEBUG] [Thread-200442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:49:36.963 [DEBUG] [Thread-200443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:49:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:49:44.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:49:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:49:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 49, 30), 1.48144, 90.2138, 0.0, 8.17056, 10.4572, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:49:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:49:30
2026-04-13T02:49:46.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:49:46.179 [DEBUG] [Thread-200444] [transport.py] [_log()] starting thread (client mode): 0xb0fb7400
2026-04-13T02:49:46.179 [DEBUG] [Thread-200444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:49:46.199 [DEBUG] [Thread-200444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:49:46.199 [INFO] [Thread-200444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:49:46.202 [DEBUG] [Thread-200444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:49:46.202 [DEBUG] [Thread-200444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:49:46.202 [DEBUG] [Thread-200444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:49:46.202 [DEBUG] [Thread-200444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:49:46.202 [DEBUG] [Thread-200444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:49:46.202 [DEBUG] [Thread-200444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:49:46.202 [DEBUG] [Thread-200444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] client lang: <none>
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] server lang: <none>
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] kex follows: False
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] Compression: none
2026-04-13T02:49:46.203 [DEBUG] [Thread-200444] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:49:46.222 [DEBUG] [Thread-200444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:49:46.223 [DEBUG] [Thread-200444] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:49:46.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:49:46.224 [DEBUG] [Thread-200444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:49:46.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:49:46.226 [DEBUG] [Thread-200444] [transport.py] [_log()] userauth is OK
2026-04-13T02:49:46.226 [DEBUG] [Thread-200444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:49:46.226 [DEBUG] [Thread-200444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:49:46.227 [DEBUG] [Thread-200444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:49:46.227 [DEBUG] [Thread-200444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:49:46.250 [INFO] [Thread-200444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:49:46.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:49:46.881 [DEBUG] [Thread-200444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:49:46.881 [DEBUG] [Thread-200444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:49:46.882 [DEBUG] [Thread-200444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:49:46.922 [DEBUG] [Thread-200444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:49:46.922 [DEBUG] [Thread-200444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:49:46.926 [DEBUG] [Thread-200444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:49:46.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:49:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:49:46.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:49:46.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:49:46.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:49:46.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:49:46.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:49:46.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:49:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:49:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.034125 -999.00  +10.50   4.39     90   +8.90 1 2 1 3 1     0    0 1.44 0.85 ..eS. 4.4 4.4 205.8 5.3 11.2 -21.7 11.1 -20.6 10.8 -18.9 11.1 -20.7
2026-04-13T02:49:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:49:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:49:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.034125
2026-04-13T02:49:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:49:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:49:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:49:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:49:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:49:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:49:30', tmtdew=1.48144, humidity=90.2138, cloud=0.0, wind=8.17056, temperature=10.4572, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:49:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.385250000000001, nan, 2.1864999999999997, nan, nan, nan, nan, nan, nan, nan, 2.0460000000000003, nan, nan, nan, nan, nan, 1.2175000000000002, 0.2259999999999991, 0.5822499999999984, 1.991999999999999, nan, nan, nan, 2.419999999999999, 0.10100000000000087, 0.11175000000000068, 0.05400000000000027, 0.19899999999999984, 0.3050000000000006, 0.519000000000001, 0.6190000000000007, 0.24274999999999913], zp_timestamp='2026-04-13T00:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:49:46.951 [DEBUG] [Thread-200444] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:49:47.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:49:52.003 [DEBUG] [Thread-200447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:50:07.060 [DEBUG] [Thread-200448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:50:22.096 [DEBUG] [Thread-200449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:50:27.108 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:50:27.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:50:34.545 [DEBUG] [Thread-200450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:50:37.135 [DEBUG] [Thread-200451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:50:52.171 [DEBUG] [Thread-200452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:51:07.211 [DEBUG] [Thread-200453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:51:22.251 [DEBUG] [Thread-200454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:51:27.315 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:51:27.317 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:51:34.626 [DEBUG] [Thread-200455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:51:37.286 [DEBUG] [Thread-200456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:51:52.325 [DEBUG] [Thread-200457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:52:00.767 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T02:52:07.366 [DEBUG] [Thread-200458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:52:22.402 [DEBUG] [Thread-200459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:52:27.522 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:52:27.523 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:52:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:52:30.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:52:30.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:52:32.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 51, 52), 1.19511, 92.2285, 0.0, 10.0937, 10.1476, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:52:32.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:51:52
2026-04-13T02:52:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:52:32.672 [DEBUG] [Thread-200460] [transport.py] [_log()] starting thread (client mode): 0xae5b6b60
2026-04-13T02:52:32.672 [DEBUG] [Thread-200460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:52:32.692 [DEBUG] [Thread-200460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:52:32.693 [INFO] [Thread-200460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] client lang: <none>
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] server lang: <none>
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] kex follows: False
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] Compression: none
2026-04-13T02:52:32.694 [DEBUG] [Thread-200460] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:52:32.713 [DEBUG] [Thread-200460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:52:32.713 [DEBUG] [Thread-200460] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:52:32.714 [DEBUG] [Thread-200460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:52:32.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:52:32.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:52:32.716 [DEBUG] [Thread-200460] [transport.py] [_log()] userauth is OK
2026-04-13T02:52:32.716 [DEBUG] [Thread-200460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:52:32.716 [DEBUG] [Thread-200460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:52:32.716 [DEBUG] [Thread-200460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:52:32.716 [DEBUG] [Thread-200460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:52:32.733 [INFO] [Thread-200460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:52:32.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:52:33.347 [DEBUG] [Thread-200460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:52:33.347 [DEBUG] [Thread-200460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:52:33.347 [DEBUG] [Thread-200460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:52:33.388 [DEBUG] [Thread-200460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:52:33.388 [DEBUG] [Thread-200460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:52:33.392 [DEBUG] [Thread-200460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:52:33.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:52:33.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:52:33.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:52:33.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:52:33.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:52:33.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:52:33.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:52:33.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:52:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:52:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.036208 -999.00  +10.50   5.62     89   +9.00 1 2 1 3 1     0    0 1.56 2.73 .nESW 5.6 5.6 208.0 5.8 11.2 -21.6 11.1 -20.8 10.8 -18.7 11.1 -20.7
2026-04-13T02:52:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:52:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:52:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.036208
2026-04-13T02:52:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:52:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:52:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:52:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:52:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:52:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:51:52', tmtdew=1.19511, humidity=92.2285, cloud=0.0, wind=10.0937, temperature=10.1476, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:52:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:52:33.420 [DEBUG] [Thread-200460] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:52:33.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:52:33.514 [DEBUG] [Thread-200463] [transport.py] [_log()] starting thread (client mode): 0xae5b7cd0
2026-04-13T02:52:33.514 [DEBUG] [Thread-200463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:52:33.529 [DEBUG] [Thread-200463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:52:33.530 [INFO] [Thread-200463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:52:33.537 [DEBUG] [Thread-200463] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] client lang: <none>
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] server lang: <none>
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] kex follows: False
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] Compression: none
2026-04-13T02:52:33.538 [DEBUG] [Thread-200463] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:52:33.595 [DEBUG] [Thread-200463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:52:33.596 [DEBUG] [Thread-200463] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:52:33.596 [DEBUG] [Thread-200463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:52:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:52:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:52:33.652 [DEBUG] [Thread-200463] [transport.py] [_log()] userauth is OK
2026-04-13T02:52:33.652 [DEBUG] [Thread-200463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:52:33.652 [DEBUG] [Thread-200463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:52:33.652 [DEBUG] [Thread-200463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:52:33.652 [DEBUG] [Thread-200463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:52:33.672 [INFO] [Thread-200463] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:52:33.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:52:33.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:52:34.561 [DEBUG] [Thread-200463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:52:34.561 [DEBUG] [Thread-200463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:52:34.609 [DEBUG] [Thread-200463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:52:34.609 [DEBUG] [Thread-200463] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:52:34.618 [DEBUG] [Thread-200463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:52:34.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:52:34.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:52:34.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:52:34.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:52:34.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:52:34.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:52:34.653 [DEBUG] [Thread-200463] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:52:34.687 [DEBUG] [Thread-200465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:52:37.439 [DEBUG] [Thread-200466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:52:52.493 [DEBUG] [Thread-200467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:53:04.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:53:04.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:53:04.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
2026-04-13T02:53:05.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 52, 27), 1.70317, 89.0811, 0.0, 8.55864, 10.607, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:53:05.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:52:27
2026-04-13T02:53:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:53:06.587 [DEBUG] [Thread-200468] [transport.py] [_log()] starting thread (client mode): 0xb0fb7580
2026-04-13T02:53:06.588 [DEBUG] [Thread-200468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:53:06.609 [DEBUG] [Thread-200468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:53:06.609 [INFO] [Thread-200468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:53:06.611 [DEBUG] [Thread-200468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:53:06.618 [DEBUG] [Thread-200468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] client lang: <none>
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] server lang: <none>
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] kex follows: False
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:53:06.619 [DEBUG] [Thread-200468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:53:06.620 [DEBUG] [Thread-200468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:53:06.620 [DEBUG] [Thread-200468] [transport.py] [_log()] Compression: none
2026-04-13T02:53:06.620 [DEBUG] [Thread-200468] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:53:06.631 [DEBUG] [Thread-200468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:53:06.632 [DEBUG] [Thread-200468] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:53:06.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:53:06.633 [DEBUG] [Thread-200468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:53:06.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:53:06.635 [DEBUG] [Thread-200468] [transport.py] [_log()] userauth is OK
2026-04-13T02:53:06.635 [DEBUG] [Thread-200468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:53:06.635 [DEBUG] [Thread-200468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:53:06.635 [DEBUG] [Thread-200468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:53:06.635 [DEBUG] [Thread-200468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:53:06.652 [INFO] [Thread-200468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:53:06.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:53:07.209 [DEBUG] [Thread-200468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:53:07.209 [DEBUG] [Thread-200468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:53:07.210 [DEBUG] [Thread-200468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:53:07.250 [DEBUG] [Thread-200468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:53:07.250 [DEBUG] [Thread-200468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:53:07.254 [DEBUG] [Thread-200468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:53:07.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:53:07.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:53:07.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:53:07.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:53:07.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:53:07.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:53:07.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:53:07.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:53:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:53:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.036555 -999.00  +10.60   4.79     89   +9.00 1 2 1 3 1     0    0 1.55 3.18 .nESW 4.8 4.8 202.4 6.0 11.2 -21.8 11.1 -20.7 10.8 -18.8 11.1 -20.6
2026-04-13T02:53:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:53:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:53:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.036555
2026-04-13T02:53:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:53:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:53:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:53:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:53:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:53:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:52:27', tmtdew=1.70317, humidity=89.0811, cloud=0.0, wind=8.55864, temperature=10.607, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:52:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:53:07.283 [DEBUG] [Thread-200468] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:53:07.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:53:07.375 [DEBUG] [Thread-200471] [transport.py] [_log()] starting thread (client mode): 0xae5b12a0
2026-04-13T02:53:07.376 [DEBUG] [Thread-200471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:53:07.393 [DEBUG] [Thread-200471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:53:07.393 [INFO] [Thread-200471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:53:07.401 [DEBUG] [Thread-200471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:53:07.401 [DEBUG] [Thread-200471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:53:07.401 [DEBUG] [Thread-200471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:53:07.401 [DEBUG] [Thread-200471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:07.401 [DEBUG] [Thread-200471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:07.401 [DEBUG] [Thread-200471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] client lang: <none>
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] server lang: <none>
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] kex follows: False
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] Compression: none
2026-04-13T02:53:07.402 [DEBUG] [Thread-200471] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:53:07.459 [DEBUG] [Thread-200471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:53:07.460 [DEBUG] [Thread-200471] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:53:07.460 [DEBUG] [Thread-200471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:53:07.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:53:07.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:53:07.516 [DEBUG] [Thread-200471] [transport.py] [_log()] userauth is OK
2026-04-13T02:53:07.516 [DEBUG] [Thread-200471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:53:07.516 [DEBUG] [Thread-200471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:53:07.516 [DEBUG] [Thread-200471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:53:07.516 [DEBUG] [Thread-200471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:53:07.532 [DEBUG] [Thread-200473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:53:07.536 [INFO] [Thread-200471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:53:07.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:53:07.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:53:08.383 [DEBUG] [Thread-200471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:53:08.383 [DEBUG] [Thread-200471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:53:08.431 [DEBUG] [Thread-200471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:53:08.431 [DEBUG] [Thread-200471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:53:08.441 [DEBUG] [Thread-200471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:53:08.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:53:08.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:53:08.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:53:08.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:53:08.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:53:08.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:53:08.478 [DEBUG] [Thread-200471] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:53:22.588 [DEBUG] [Thread-200474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:53:27.726 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:53:27.727 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:53:34.739 [DEBUG] [Thread-200475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:53:37.627 [DEBUG] [Thread-200476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:53:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:53:38.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:53:38.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:53:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 53, 2), 1.70346, 89.0811, 0.0, 8.541, 10.6401, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:53:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:53:02
2026-04-13T02:53:40.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:53:40.445 [DEBUG] [Thread-200477] [transport.py] [_log()] starting thread (client mode): 0xae5b5c60
2026-04-13T02:53:40.445 [DEBUG] [Thread-200477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:53:40.459 [DEBUG] [Thread-200477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:53:40.459 [INFO] [Thread-200477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] client lang: <none>
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] server lang: <none>
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] kex follows: False
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:53:40.462 [DEBUG] [Thread-200477] [transport.py] [_log()] Compression: none
2026-04-13T02:53:40.463 [DEBUG] [Thread-200477] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:53:40.472 [DEBUG] [Thread-200477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:53:40.472 [DEBUG] [Thread-200477] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:53:40.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:53:40.474 [DEBUG] [Thread-200477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:53:40.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:53:40.475 [DEBUG] [Thread-200477] [transport.py] [_log()] userauth is OK
2026-04-13T02:53:40.476 [DEBUG] [Thread-200477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:53:40.476 [DEBUG] [Thread-200477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:53:40.476 [DEBUG] [Thread-200477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:53:40.476 [DEBUG] [Thread-200477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:53:40.502 [INFO] [Thread-200477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:53:40.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:53:41.102 [DEBUG] [Thread-200477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:53:41.102 [DEBUG] [Thread-200477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:53:41.103 [DEBUG] [Thread-200477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:53:41.143 [DEBUG] [Thread-200477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:53:41.143 [DEBUG] [Thread-200477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:53:41.146 [DEBUG] [Thread-200477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:53:41.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:53:41.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:53:41.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:53:41.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:53:41.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:53:41.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:53:41.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:53:41.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:53:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:53:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.036902 -999.00  +10.60   4.23     89   +9.00 1 2 1 3 1     0    0 1.57 3.75 ..ESW 4.2 4.2 213.4 6.2 11.2 -21.7 11.1 -20.7 10.8 -18.8 11.1 -20.6
2026-04-13T02:53:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:53:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:53:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.036902
2026-04-13T02:53:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:53:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:53:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:53:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:53:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:53:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:53:02', tmtdew=1.70346, humidity=89.0811, cloud=0.0, wind=8.541, temperature=10.6401, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:53:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:53:41.168 [DEBUG] [Thread-200477] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:53:41.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:53:41.261 [DEBUG] [Thread-200480] [transport.py] [_log()] starting thread (client mode): 0xb0fb7e80
2026-04-13T02:53:41.261 [DEBUG] [Thread-200480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:53:41.276 [DEBUG] [Thread-200480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:53:41.276 [INFO] [Thread-200480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] client lang: <none>
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] server lang: <none>
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] kex follows: False
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] Compression: none
2026-04-13T02:53:41.284 [DEBUG] [Thread-200480] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:53:41.343 [DEBUG] [Thread-200480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:53:41.343 [DEBUG] [Thread-200480] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:53:41.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:53:41.345 [DEBUG] [Thread-200480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:53:41.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:53:41.399 [DEBUG] [Thread-200480] [transport.py] [_log()] userauth is OK
2026-04-13T02:53:41.399 [DEBUG] [Thread-200480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:53:41.400 [DEBUG] [Thread-200480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:53:41.400 [DEBUG] [Thread-200480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:53:41.400 [DEBUG] [Thread-200480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:53:41.419 [INFO] [Thread-200480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:53:41.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:53:41.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:53:42.243 [DEBUG] [Thread-200480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:53:42.244 [DEBUG] [Thread-200480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:53:42.293 [DEBUG] [Thread-200480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:53:42.293 [DEBUG] [Thread-200480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:53:42.305 [DEBUG] [Thread-200480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:53:42.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:53:42.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:53:42.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:53:42.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:53:42.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:53:42.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:53:42.344 [DEBUG] [Thread-200480] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:53:52.659 [DEBUG] [Thread-200482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:54:07.719 [DEBUG] [Thread-200483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:54:12.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:54:12.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:54:12.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:54:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 53, 38), 1.24998, 91.8968, 0.0, 9.81144, 10.3135, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:54:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:53:38
2026-04-13T02:54:14.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:54:14.211 [DEBUG] [Thread-200484] [transport.py] [_log()] starting thread (client mode): 0xae52dff0
2026-04-13T02:54:14.211 [DEBUG] [Thread-200484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:54:14.231 [DEBUG] [Thread-200484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:54:14.231 [INFO] [Thread-200484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:54:14.234 [DEBUG] [Thread-200484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:54:14.234 [DEBUG] [Thread-200484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] client lang: <none>
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] server lang: <none>
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] kex follows: False
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] Compression: none
2026-04-13T02:54:14.235 [DEBUG] [Thread-200484] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:54:14.250 [DEBUG] [Thread-200484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:54:14.250 [DEBUG] [Thread-200484] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:54:14.251 [DEBUG] [Thread-200484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:54:14.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:54:14.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:54:14.253 [DEBUG] [Thread-200484] [transport.py] [_log()] userauth is OK
2026-04-13T02:54:14.253 [DEBUG] [Thread-200484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:54:14.253 [DEBUG] [Thread-200484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:54:14.253 [DEBUG] [Thread-200484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:54:14.254 [DEBUG] [Thread-200484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:54:14.280 [INFO] [Thread-200484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:54:14.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:54:14.848 [DEBUG] [Thread-200484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:54:14.848 [DEBUG] [Thread-200484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:54:14.848 [DEBUG] [Thread-200484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:54:14.889 [DEBUG] [Thread-200484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:54:14.889 [DEBUG] [Thread-200484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:54:14.893 [DEBUG] [Thread-200484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:54:14.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:54:14.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:54:14.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:54:14.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:54:14.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:54:14.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:54:14.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:54:14.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:54:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:54:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.037597 -999.00  +10.60   3.69     89   +9.00 1 2 1 3 1     0    0 1.61 4.38 Z.ESW 3.7 3.7 217.2 5.6 11.2 -21.6 11.1 -20.6 10.8 -18.7 11.1 -20.7
2026-04-13T02:54:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:54:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:54:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.037597
2026-04-13T02:54:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:54:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:54:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:54:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:54:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:54:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:53:38', tmtdew=1.24998, humidity=91.8968, cloud=0.0, wind=9.81144, temperature=10.3135, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:54:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:54:14.919 [DEBUG] [Thread-200484] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:54:15.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:54:15.013 [DEBUG] [Thread-200487] [transport.py] [_log()] starting thread (client mode): 0xae52d090
2026-04-13T02:54:15.013 [DEBUG] [Thread-200487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:54:15.028 [DEBUG] [Thread-200487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:54:15.028 [INFO] [Thread-200487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:54:15.035 [DEBUG] [Thread-200487] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:54:15.035 [DEBUG] [Thread-200487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] client lang: <none>
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] server lang: <none>
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] kex follows: False
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:54:15.036 [DEBUG] [Thread-200487] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:54:15.037 [DEBUG] [Thread-200487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:54:15.037 [DEBUG] [Thread-200487] [transport.py] [_log()] Compression: none
2026-04-13T02:54:15.037 [DEBUG] [Thread-200487] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:54:15.094 [DEBUG] [Thread-200487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:54:15.095 [DEBUG] [Thread-200487] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:54:15.095 [DEBUG] [Thread-200487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:54:15.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:54:15.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:54:15.150 [DEBUG] [Thread-200487] [transport.py] [_log()] userauth is OK
2026-04-13T02:54:15.150 [DEBUG] [Thread-200487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:54:15.151 [DEBUG] [Thread-200487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:54:15.151 [DEBUG] [Thread-200487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:54:15.151 [DEBUG] [Thread-200487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:54:15.174 [INFO] [Thread-200487] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:54:15.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:54:15.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:54:15.998 [DEBUG] [Thread-200487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:54:15.998 [DEBUG] [Thread-200487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:54:16.046 [DEBUG] [Thread-200487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:54:16.046 [DEBUG] [Thread-200487] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:54:16.055 [DEBUG] [Thread-200487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:54:16.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:54:16.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:54:16.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:54:16.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:54:16.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:54:16.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:54:16.086 [DEBUG] [Thread-200487] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:54:22.756 [DEBUG] [Thread-200489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:54:27.933 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:54:27.934 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:54:34.806 [DEBUG] [Thread-200490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:54:37.810 [DEBUG] [Thread-200491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:54:46.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:54:46.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:54:46.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:54:47.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 54, 14), 1.88065, 88.4152, 0.0, 8.4528, 10.7399, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:54:47.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:54:14
2026-04-13T02:54:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:54:47.907 [DEBUG] [Thread-200492] [transport.py] [_log()] starting thread (client mode): 0xb0f56b00
2026-04-13T02:54:47.907 [DEBUG] [Thread-200492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:54:47.926 [DEBUG] [Thread-200492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:54:47.926 [INFO] [Thread-200492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:54:47.929 [DEBUG] [Thread-200492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:54:47.929 [DEBUG] [Thread-200492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:54:47.929 [DEBUG] [Thread-200492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:54:47.929 [DEBUG] [Thread-200492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:47.929 [DEBUG] [Thread-200492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:47.929 [DEBUG] [Thread-200492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:47.929 [DEBUG] [Thread-200492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] client lang: <none>
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] server lang: <none>
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] kex follows: False
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] Compression: none
2026-04-13T02:54:47.930 [DEBUG] [Thread-200492] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:54:47.947 [DEBUG] [Thread-200492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:54:47.947 [DEBUG] [Thread-200492] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:54:47.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:54:47.948 [DEBUG] [Thread-200492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:54:47.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:54:47.950 [DEBUG] [Thread-200492] [transport.py] [_log()] userauth is OK
2026-04-13T02:54:47.950 [DEBUG] [Thread-200492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:54:47.951 [DEBUG] [Thread-200492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:54:47.951 [DEBUG] [Thread-200492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:54:47.951 [DEBUG] [Thread-200492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:54:47.975 [INFO] [Thread-200492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:54:47.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:54:48.727 [DEBUG] [Thread-200492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:54:48.728 [DEBUG] [Thread-200492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:54:48.728 [DEBUG] [Thread-200492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:54:48.768 [DEBUG] [Thread-200492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:54:48.768 [DEBUG] [Thread-200492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:54:48.771 [DEBUG] [Thread-200492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:54:48.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:54:48.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:54:48.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:54:48.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:54:48.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:54:48.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:54:48.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:54:48.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:54:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:54:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.037944 -999.00  +10.60   4.92     89   +9.00 1 2 1 3 1     0    0 1.62 4.96 Z.ESW 4.9 4.9 204.2 6.1 11.2 -21.8 11.1 -20.6 10.8 -18.8 11.1 -20.8
2026-04-13T02:54:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:54:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:54:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.037944
2026-04-13T02:54:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:54:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:54:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:54:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:54:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:54:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:54:14', tmtdew=1.88065, humidity=88.4152, cloud=0.0, wind=8.4528, temperature=10.7399, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:54:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:54:48.792 [DEBUG] [Thread-200492] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:54:48.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:54:48.888 [DEBUG] [Thread-200495] [transport.py] [_log()] starting thread (client mode): 0xae5b6350
2026-04-13T02:54:48.888 [DEBUG] [Thread-200495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:54:48.902 [DEBUG] [Thread-200495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:54:48.902 [INFO] [Thread-200495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] client lang: <none>
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] server lang: <none>
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] kex follows: False
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] Compression: none
2026-04-13T02:54:48.910 [DEBUG] [Thread-200495] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:54:48.970 [DEBUG] [Thread-200495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:54:48.971 [DEBUG] [Thread-200495] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:54:48.971 [DEBUG] [Thread-200495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:54:48.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:54:48.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:54:49.026 [DEBUG] [Thread-200495] [transport.py] [_log()] userauth is OK
2026-04-13T02:54:49.026 [DEBUG] [Thread-200495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:54:49.027 [DEBUG] [Thread-200495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:54:49.027 [DEBUG] [Thread-200495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:54:49.027 [DEBUG] [Thread-200495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:54:49.046 [INFO] [Thread-200495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:54:49.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:54:49.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:54:49.903 [DEBUG] [Thread-200495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:54:49.903 [DEBUG] [Thread-200495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:54:49.951 [DEBUG] [Thread-200495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:54:49.951 [DEBUG] [Thread-200495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:54:49.960 [DEBUG] [Thread-200495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:54:49.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:54:49.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:54:49.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:54:49.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:54:49.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:54:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:54:49.998 [DEBUG] [Thread-200495] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:54:52.847 [DEBUG] [Thread-200497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:07.912 [DEBUG] [Thread-200498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:55:20.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:55:20.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:55:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 54, 49), 1.29885, 91.5982, 0.0, 9.84672, 10.3798, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:55:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:54:49
2026-04-13T02:55:21.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:55:21.957 [DEBUG] [Thread-200499] [transport.py] [_log()] starting thread (client mode): 0xae5b1900
2026-04-13T02:55:21.957 [DEBUG] [Thread-200499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:55:21.978 [DEBUG] [Thread-200499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:55:21.978 [INFO] [Thread-200499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:55:21.981 [DEBUG] [Thread-200499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:55:21.981 [DEBUG] [Thread-200499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:55:21.981 [DEBUG] [Thread-200499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:55:21.981 [DEBUG] [Thread-200499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:21.981 [DEBUG] [Thread-200499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:21.981 [DEBUG] [Thread-200499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] client lang: <none>
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] server lang: <none>
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] kex follows: False
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:55:21.982 [DEBUG] [Thread-200499] [transport.py] [_log()] Compression: none
2026-04-13T02:55:21.983 [DEBUG] [Thread-200499] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:55:22.004 [DEBUG] [Thread-200499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:55:22.004 [DEBUG] [Thread-200499] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:55:22.005 [DEBUG] [Thread-200499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:55:22.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:55:22.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:55:22.007 [DEBUG] [Thread-200499] [transport.py] [_log()] userauth is OK
2026-04-13T02:55:22.007 [DEBUG] [Thread-200499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:55:22.007 [DEBUG] [Thread-200499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:55:22.007 [DEBUG] [Thread-200499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:55:22.007 [DEBUG] [Thread-200499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:55:22.032 [INFO] [Thread-200499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:55:22.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:55:22.948 [DEBUG] [Thread-200501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:23.198 [DEBUG] [Thread-200499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:55:23.199 [DEBUG] [Thread-200499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:55:23.199 [DEBUG] [Thread-200499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:55:23.240 [DEBUG] [Thread-200499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:55:23.240 [DEBUG] [Thread-200499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:55:23.243 [DEBUG] [Thread-200499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:55:23.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:55:23.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:55:23.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:55:23.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:55:23.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:55:23.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:55:23.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:55:23.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:55:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:55:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.037944 -999.00  +10.60   4.92     89   +9.00 1 2 1 3 1     0    0 1.62 4.96 Z.ESW 4.9 4.9 204.2 6.1 11.2 -21.8 11.1 -20.6 10.8 -18.8 11.1 -20.8
2026-04-13T02:55:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:55:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:55:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.037944
2026-04-13T02:55:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:55:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:55:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:55:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:55:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:55:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:54:49', tmtdew=1.29885, humidity=91.5982, cloud=0.0, wind=9.84672, temperature=10.3798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:54:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:55:23.276 [DEBUG] [Thread-200499] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:55:23.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:55:23.367 [DEBUG] [Thread-200503] [transport.py] [_log()] starting thread (client mode): 0xae5b6200
2026-04-13T02:55:23.367 [DEBUG] [Thread-200503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:55:23.382 [DEBUG] [Thread-200503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:55:23.382 [INFO] [Thread-200503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:55:23.389 [DEBUG] [Thread-200503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] client lang: <none>
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] server lang: <none>
2026-04-13T02:55:23.390 [DEBUG] [Thread-200503] [transport.py] [_log()] kex follows: False
2026-04-13T02:55:23.391 [DEBUG] [Thread-200503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:55:23.391 [DEBUG] [Thread-200503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:55:23.391 [DEBUG] [Thread-200503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:55:23.391 [DEBUG] [Thread-200503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:55:23.391 [DEBUG] [Thread-200503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:55:23.391 [DEBUG] [Thread-200503] [transport.py] [_log()] Compression: none
2026-04-13T02:55:23.391 [DEBUG] [Thread-200503] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:55:23.450 [DEBUG] [Thread-200503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:55:23.450 [DEBUG] [Thread-200503] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:55:23.451 [DEBUG] [Thread-200503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:55:23.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:55:23.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:55:23.505 [DEBUG] [Thread-200503] [transport.py] [_log()] userauth is OK
2026-04-13T02:55:23.505 [DEBUG] [Thread-200503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:55:23.505 [DEBUG] [Thread-200503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:55:23.505 [DEBUG] [Thread-200503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:55:23.505 [DEBUG] [Thread-200503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:55:23.519 [INFO] [Thread-200503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:55:23.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:55:23.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:55:24.369 [DEBUG] [Thread-200503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:55:24.369 [DEBUG] [Thread-200503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:55:24.420 [DEBUG] [Thread-200503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:55:24.420 [DEBUG] [Thread-200503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:55:24.430 [DEBUG] [Thread-200503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:55:24.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:55: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')
2026-04-13T02:55:24.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:55:24.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:55:24.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:55:24.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:55:24.467 [DEBUG] [Thread-200503] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:55:28.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:28.140 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:34.886 [DEBUG] [Thread-200505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:37.987 [DEBUG] [Thread-200506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:53.033 [DEBUG] [Thread-200507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:55:54.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:55:54.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:55:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:55:55.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 55, 24), 1.96318, 87.7161, 0.0, 8.43516, 10.7731, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:55:55.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:55:24
2026-04-13T02:55:56.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:55:56.297 [DEBUG] [Thread-200508] [transport.py] [_log()] starting thread (client mode): 0xae514c40
2026-04-13T02:55:56.297 [DEBUG] [Thread-200508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:55:56.317 [DEBUG] [Thread-200508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:55:56.317 [INFO] [Thread-200508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:55:56.320 [DEBUG] [Thread-200508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:55:56.320 [DEBUG] [Thread-200508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:55:56.320 [DEBUG] [Thread-200508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:55:56.320 [DEBUG] [Thread-200508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:56.320 [DEBUG] [Thread-200508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:56.320 [DEBUG] [Thread-200508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] client lang: <none>
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] server lang: <none>
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] kex follows: False
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] Compression: none
2026-04-13T02:55:56.321 [DEBUG] [Thread-200508] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:55:56.339 [DEBUG] [Thread-200508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:55:56.340 [DEBUG] [Thread-200508] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:55:56.340 [DEBUG] [Thread-200508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:55:56.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:55:56.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:55:56.342 [DEBUG] [Thread-200508] [transport.py] [_log()] userauth is OK
2026-04-13T02:55:56.342 [DEBUG] [Thread-200508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:55:56.342 [DEBUG] [Thread-200508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:55:56.342 [DEBUG] [Thread-200508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:55:56.342 [DEBUG] [Thread-200508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:55:56.360 [INFO] [Thread-200508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:55:56.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:55:57.155 [DEBUG] [Thread-200508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:55:57.155 [DEBUG] [Thread-200508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:55:57.155 [DEBUG] [Thread-200508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:55:57.195 [DEBUG] [Thread-200508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:55:57.196 [DEBUG] [Thread-200508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:55:57.197 [DEBUG] [Thread-200508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:55:57.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:55:57.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:55:57.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:55:57.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:55:57.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:55:57.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:55:57.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:55:57.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:55:57.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:55:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.038291 -999.00  +10.60   5.67     89   +9.00 1 2 1 3 1     0    0 1.63 5.43 ..ESW 5.7 5.7 204.8 6.7 11.2 -21.7 11.1 -20.7 10.8 -18.8 11.1 -20.7
2026-04-13T02:55:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:55:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:55:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.038291
2026-04-13T02:55:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:55:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:55:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:55:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:55:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:55:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:55:24', tmtdew=1.96318, humidity=87.7161, cloud=0.0, wind=8.43516, temperature=10.7731, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:55:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:55:57.212 [DEBUG] [Thread-200508] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:55:57.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:55:57.307 [DEBUG] [Thread-200511] [transport.py] [_log()] starting thread (client mode): 0xae5b2590
2026-04-13T02:55:57.307 [DEBUG] [Thread-200511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:55:57.321 [DEBUG] [Thread-200511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:55:57.322 [INFO] [Thread-200511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:55:57.329 [DEBUG] [Thread-200511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:55:57.329 [DEBUG] [Thread-200511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:55:57.329 [DEBUG] [Thread-200511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:55:57.329 [DEBUG] [Thread-200511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:57.329 [DEBUG] [Thread-200511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] client lang: <none>
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] server lang: <none>
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] kex follows: False
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:55:57.330 [DEBUG] [Thread-200511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:55:57.331 [DEBUG] [Thread-200511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:55:57.331 [DEBUG] [Thread-200511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:55:57.331 [DEBUG] [Thread-200511] [transport.py] [_log()] Compression: none
2026-04-13T02:55:57.331 [DEBUG] [Thread-200511] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:55:57.392 [DEBUG] [Thread-200511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:55:57.393 [DEBUG] [Thread-200511] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:55:57.394 [DEBUG] [Thread-200511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:55:57.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:55:57.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:55:57.448 [DEBUG] [Thread-200511] [transport.py] [_log()] userauth is OK
2026-04-13T02:55:57.448 [DEBUG] [Thread-200511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:55:57.448 [DEBUG] [Thread-200511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:55:57.448 [DEBUG] [Thread-200511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:55:57.449 [DEBUG] [Thread-200511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:55:57.468 [INFO] [Thread-200511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:55:57.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:55:57.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:55:58.351 [DEBUG] [Thread-200511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:55:58.352 [DEBUG] [Thread-200511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:55:58.399 [DEBUG] [Thread-200511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:55:58.399 [DEBUG] [Thread-200511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:55:58.408 [DEBUG] [Thread-200511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:55:58.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:55:58.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:55:58.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:55:58.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:55:58.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:55:58.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:55:58.442 [DEBUG] [Thread-200511] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:56:08.063 [DEBUG] [Thread-200513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:56:23.112 [DEBUG] [Thread-200514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:56:28.346 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:56:28.348 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:56:28.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:56:28.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:56:28.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:56:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 55, 24), 2.11318, 87.2161, 0.0, 8.43516, 10.8231, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:56:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:55:24
2026-04-13T02:56:30.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:56:30.257 [DEBUG] [Thread-200515] [transport.py] [_log()] starting thread (client mode): 0xb0f548b0
2026-04-13T02:56:30.257 [DEBUG] [Thread-200515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:56:30.276 [DEBUG] [Thread-200515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:56:30.276 [INFO] [Thread-200515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:56:30.279 [DEBUG] [Thread-200515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:56:30.279 [DEBUG] [Thread-200515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:56:30.279 [DEBUG] [Thread-200515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:56:30.279 [DEBUG] [Thread-200515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:56:30.279 [DEBUG] [Thread-200515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] client lang: <none>
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] server lang: <none>
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] kex follows: False
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] Compression: none
2026-04-13T02:56:30.280 [DEBUG] [Thread-200515] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:56:30.297 [DEBUG] [Thread-200515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:56:30.297 [DEBUG] [Thread-200515] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:56:30.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:56:30.298 [DEBUG] [Thread-200515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:56:30.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:56:30.301 [DEBUG] [Thread-200515] [transport.py] [_log()] userauth is OK
2026-04-13T02:56:30.301 [DEBUG] [Thread-200515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:56:30.301 [DEBUG] [Thread-200515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:56:30.301 [DEBUG] [Thread-200515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:56:30.301 [DEBUG] [Thread-200515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:56:30.325 [INFO] [Thread-200515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:56:30.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:56:31.130 [DEBUG] [Thread-200515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:56:31.131 [DEBUG] [Thread-200515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:56:31.131 [DEBUG] [Thread-200515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:56:31.172 [DEBUG] [Thread-200515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:56:31.172 [DEBUG] [Thread-200515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:56:31.175 [DEBUG] [Thread-200515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:56:31.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:56:31.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:56:31.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:56:31.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:56:31.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:56:31.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:56:31.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:56:31.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:56:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:56:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.038638 -999.00  +10.60   5.41     89   +9.00 1 2 1 3 1     0    0 1.68 6.34 ..ESW 5.4 5.4 211.0 6.4 11.2 -21.7 11.1 -20.6 10.8 -18.8 11.1 -20.5
2026-04-13T02:56:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:56:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:56:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.038638
2026-04-13T02:56:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:56:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:56:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:56:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:56:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:56:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:55:24', tmtdew=2.11318, humidity=87.2161, cloud=0.0, wind=8.43516, temperature=10.8231, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:55:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:56:31.201 [DEBUG] [Thread-200515] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:56:31.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:56:31.305 [DEBUG] [Thread-200518] [transport.py] [_log()] starting thread (client mode): 0xb0fb73d0
2026-04-13T02:56:31.305 [DEBUG] [Thread-200518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:56:31.321 [DEBUG] [Thread-200518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:56:31.321 [INFO] [Thread-200518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:56:31.329 [DEBUG] [Thread-200518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:56:31.329 [DEBUG] [Thread-200518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:56:31.329 [DEBUG] [Thread-200518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:56:31.329 [DEBUG] [Thread-200518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:56:31.329 [DEBUG] [Thread-200518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:56:31.329 [DEBUG] [Thread-200518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:56:31.329 [DEBUG] [Thread-200518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] client lang: <none>
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] server lang: <none>
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] kex follows: False
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:56:31.330 [DEBUG] [Thread-200518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:56:31.331 [DEBUG] [Thread-200518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:56:31.331 [DEBUG] [Thread-200518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:56:31.331 [DEBUG] [Thread-200518] [transport.py] [_log()] Compression: none
2026-04-13T02:56:31.331 [DEBUG] [Thread-200518] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:56:31.389 [DEBUG] [Thread-200518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:56:31.389 [DEBUG] [Thread-200518] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:56:31.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:56:31.391 [DEBUG] [Thread-200518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:56:31.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:56:31.448 [DEBUG] [Thread-200518] [transport.py] [_log()] userauth is OK
2026-04-13T02:56:31.449 [DEBUG] [Thread-200518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:56:31.449 [DEBUG] [Thread-200518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:56:31.449 [DEBUG] [Thread-200518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:56:31.449 [DEBUG] [Thread-200518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:56:31.468 [INFO] [Thread-200518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:56:31.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:56:31.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:56:32.305 [DEBUG] [Thread-200518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:56:32.305 [DEBUG] [Thread-200518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:56:32.353 [DEBUG] [Thread-200518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:56:32.353 [DEBUG] [Thread-200518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:56:32.362 [DEBUG] [Thread-200518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:56:32.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:56:32.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:56:32.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:56:32.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:56:32.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:56:32.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:56:32.401 [DEBUG] [Thread-200518] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:56:34.965 [DEBUG] [Thread-200520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:56:38.147 [DEBUG] [Thread-200521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:56:53.210 [DEBUG] [Thread-200522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:57:02.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:57:02.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:57:02.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:57:03.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 56, 36), 1.38701, 91.0674, 0.0, 9.3528, 10.5789, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:57:03.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:56:36
2026-04-13T02:57:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:57:04.223 [DEBUG] [Thread-200523] [transport.py] [_log()] starting thread (client mode): 0xae5163b0
2026-04-13T02:57:04.223 [DEBUG] [Thread-200523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:57:04.243 [DEBUG] [Thread-200523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:57:04.243 [INFO] [Thread-200523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:57:04.246 [DEBUG] [Thread-200523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] client lang: <none>
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] server lang: <none>
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] kex follows: False
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:57:04.247 [DEBUG] [Thread-200523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:57:04.248 [DEBUG] [Thread-200523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:57:04.248 [DEBUG] [Thread-200523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:57:04.248 [DEBUG] [Thread-200523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:57:04.248 [DEBUG] [Thread-200523] [transport.py] [_log()] Compression: none
2026-04-13T02:57:04.248 [DEBUG] [Thread-200523] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:57:04.266 [DEBUG] [Thread-200523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:57:04.267 [DEBUG] [Thread-200523] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:57:04.268 [DEBUG] [Thread-200523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:57:04.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:57:04.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:57:04.309 [DEBUG] [Thread-200523] [transport.py] [_log()] userauth is OK
2026-04-13T02:57:04.309 [DEBUG] [Thread-200523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:57:04.309 [DEBUG] [Thread-200523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:57:04.309 [DEBUG] [Thread-200523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:57:04.309 [DEBUG] [Thread-200523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:57:04.341 [INFO] [Thread-200523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:57:04.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:57:05.174 [DEBUG] [Thread-200523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:57:05.174 [DEBUG] [Thread-200523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:57:05.175 [DEBUG] [Thread-200523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:57:05.215 [DEBUG] [Thread-200523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:57:05.215 [DEBUG] [Thread-200523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:57:05.218 [DEBUG] [Thread-200523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:57:05.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:57:05.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:57:05.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:57:05.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:57:05.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:57:05.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:57:05.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:57:05.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:57:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:57:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.038986 -999.00  +10.60   5.50     89   +9.00 1 2 1 3 1     0    0 1.65 6.56 .NESW 5.5 5.5 201.4 6.3 11.2 -21.7 11.1 -20.5 10.8 -18.7 11.1 -20.5
2026-04-13T02:57:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:57:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:57:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.038986
2026-04-13T02:57:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:57:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:57:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:57:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:57:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:57:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:56:36', tmtdew=1.38701, humidity=91.0674, cloud=0.0, wind=9.3528, temperature=10.5789, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:56:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[0.9902499999999996, 0.8572500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4409999999999998, nan, nan, nan, nan, nan, 0.9995000000000003, 0.13299999999999912, 0.145249999999999, 1.1659999999999986, nan, 1.5112500000000004, 2.6877500000000003, 1.2704999999999993, 0.0495000000000001, 0.07724999999999937, -0.00849999999999973, 0.06899999999999906, 0.30650000000000244, 0.4225000000000012, 0.5290000000000008, 0.1872499999999988], zp_timestamp='2026-04-13T00:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:57:05.245 [DEBUG] [Thread-200523] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:57:05.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:57:05.338 [DEBUG] [Thread-200526] [transport.py] [_log()] starting thread (client mode): 0xae516ad0
2026-04-13T02:57:05.338 [DEBUG] [Thread-200526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:57:05.353 [DEBUG] [Thread-200526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:57:05.354 [INFO] [Thread-200526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:57:05.361 [DEBUG] [Thread-200526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:57:05.361 [DEBUG] [Thread-200526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:57:05.361 [DEBUG] [Thread-200526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] client lang: <none>
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] server lang: <none>
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] kex follows: False
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:57:05.362 [DEBUG] [Thread-200526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:57:05.363 [DEBUG] [Thread-200526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:57:05.363 [DEBUG] [Thread-200526] [transport.py] [_log()] Compression: none
2026-04-13T02:57:05.363 [DEBUG] [Thread-200526] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:57:05.420 [DEBUG] [Thread-200526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:57:05.420 [DEBUG] [Thread-200526] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:57:05.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:57:05.421 [DEBUG] [Thread-200526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:57:05.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:57:05.476 [DEBUG] [Thread-200526] [transport.py] [_log()] userauth is OK
2026-04-13T02:57:05.476 [DEBUG] [Thread-200526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:57:05.476 [DEBUG] [Thread-200526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:57:05.476 [DEBUG] [Thread-200526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:57:05.477 [DEBUG] [Thread-200526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:57:05.495 [INFO] [Thread-200526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:57:05.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:57:05.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:57:06.308 [DEBUG] [Thread-200526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:57:06.308 [DEBUG] [Thread-200526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:57:06.356 [DEBUG] [Thread-200526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:57:06.356 [DEBUG] [Thread-200526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:57:06.366 [DEBUG] [Thread-200526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:57:06.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:57:06.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:57:06.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:57:06.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:57:06.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:57:06.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:57:06.402 [DEBUG] [Thread-200526] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:57:08.248 [DEBUG] [Thread-200528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:57:23.303 [DEBUG] [Thread-200529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:57:28.552 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:57:28.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:57:35.042 [DEBUG] [Thread-200530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:57:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:57:36.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:57:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:57:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 57, 11), 2.2677, 85.8844, 0.0, 8.34696, 10.8729, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:57:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:57:11
2026-04-13T02:57:38.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:57:38.213 [DEBUG] [Thread-200531] [transport.py] [_log()] starting thread (client mode): 0xae515030
2026-04-13T02:57:38.214 [DEBUG] [Thread-200531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:57:38.234 [DEBUG] [Thread-200531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:57:38.234 [INFO] [Thread-200531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] client lang: <none>
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] server lang: <none>
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] kex follows: False
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] Compression: none
2026-04-13T02:57:38.237 [DEBUG] [Thread-200531] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:57:38.256 [DEBUG] [Thread-200531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:57:38.257 [DEBUG] [Thread-200531] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:57:38.258 [DEBUG] [Thread-200531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:57:38.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:57:38.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:57:38.260 [DEBUG] [Thread-200531] [transport.py] [_log()] userauth is OK
2026-04-13T02:57:38.260 [DEBUG] [Thread-200531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:57:38.260 [DEBUG] [Thread-200531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:57:38.260 [DEBUG] [Thread-200531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:57:38.261 [DEBUG] [Thread-200531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:57:38.283 [INFO] [Thread-200531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:57:38.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:57:38.342 [DEBUG] [Thread-200533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:57:39.064 [DEBUG] [Thread-200531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:57:39.064 [DEBUG] [Thread-200531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:57:39.064 [DEBUG] [Thread-200531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:57:39.105 [DEBUG] [Thread-200531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:57:39.105 [DEBUG] [Thread-200531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:57:39.109 [DEBUG] [Thread-200531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:57:39.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:57:39.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:57:39.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:57:39.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:57:39.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:57:39.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:57:39.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:57:39.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:57:39.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:57:39.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.039333 -999.00  +10.70   4.68     89   +9.00 1 2 1 3 1     0    0 1.69 6.93 .NESW 4.7 4.7 202.0 6.8 11.2 -21.7 11.1 -20.6 10.8 -18.8 11.1 -20.6
2026-04-13T02:57:39.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:57:39.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:57:39.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.039333
2026-04-13T02:57:39.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:57:39.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:57:39.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:57:39.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:57:39.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:57:39.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:57:11', tmtdew=2.2677, humidity=85.8844, cloud=0.0, wind=8.34696, temperature=10.8729, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:56:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[0.8377499999999998, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.926, nan, nan, nan, nan, nan, 0.9100000000000001, 0.12899999999999956, 0.16174999999999962, 1.1069999999999984, nan, nan, nan, nan, 0.08050000000000068, 0.09875000000000078, 0.012500000000001066, 0.07099999999999973, 0.2900000000000009, 0.40000000000000124, 0.4825000000000008, 0.22775000000000034], zp_timestamp='2026-04-13T00:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:57:39.129 [DEBUG] [Thread-200531] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:57:39.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:57:39.222 [DEBUG] [Thread-200535] [transport.py] [_log()] starting thread (client mode): 0xae5162c0
2026-04-13T02:57:39.222 [DEBUG] [Thread-200535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:57:39.237 [DEBUG] [Thread-200535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:57:39.237 [INFO] [Thread-200535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:57:39.244 [DEBUG] [Thread-200535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] client lang: <none>
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] server lang: <none>
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] kex follows: False
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] Compression: none
2026-04-13T02:57:39.245 [DEBUG] [Thread-200535] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:57:39.303 [DEBUG] [Thread-200535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:57:39.304 [DEBUG] [Thread-200535] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:57:39.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:57:39.305 [DEBUG] [Thread-200535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:57:39.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:57:39.360 [DEBUG] [Thread-200535] [transport.py] [_log()] userauth is OK
2026-04-13T02:57:39.360 [DEBUG] [Thread-200535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:57:39.360 [DEBUG] [Thread-200535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:57:39.360 [DEBUG] [Thread-200535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:57:39.360 [DEBUG] [Thread-200535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:57:39.379 [INFO] [Thread-200535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:57:39.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:57:39.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:57:40.222 [DEBUG] [Thread-200535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:57:40.223 [DEBUG] [Thread-200535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:57:40.270 [DEBUG] [Thread-200535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:57:40.270 [DEBUG] [Thread-200535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:57:40.279 [DEBUG] [Thread-200535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:57:40.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:57:40.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:57:40.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:57:40.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:57:40.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:57:40.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:57:40.314 [DEBUG] [Thread-200535] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:57:53.382 [DEBUG] [Thread-200537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:58:08.440 [DEBUG] [Thread-200538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:58:10.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:58:10.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:58:10.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:58:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 57, 48), 1.46761, 90.5697, 0.0, 9.24696, 10.5125, 2, 2, 0, 2, 0, 0),)
2026-04-13T02:58:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:57:48
2026-04-13T02:58:12.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:58:12.199 [DEBUG] [Thread-200539] [transport.py] [_log()] starting thread (client mode): 0xae517d00
2026-04-13T02:58:12.199 [DEBUG] [Thread-200539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:58:12.211 [DEBUG] [Thread-200539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:58:12.211 [INFO] [Thread-200539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:58:12.213 [DEBUG] [Thread-200539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] client lang: <none>
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] server lang: <none>
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] kex follows: False
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] Compression: none
2026-04-13T02:58:12.214 [DEBUG] [Thread-200539] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:58:12.229 [DEBUG] [Thread-200539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:58:12.229 [DEBUG] [Thread-200539] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:58:12.229 [DEBUG] [Thread-200539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:58:12.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:58:12.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:58:12.231 [DEBUG] [Thread-200539] [transport.py] [_log()] userauth is OK
2026-04-13T02:58:12.231 [DEBUG] [Thread-200539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:58:12.231 [DEBUG] [Thread-200539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:58:12.231 [DEBUG] [Thread-200539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:58:12.231 [DEBUG] [Thread-200539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:58:12.248 [INFO] [Thread-200539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:58:12.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:58:13.063 [DEBUG] [Thread-200539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:58:13.064 [DEBUG] [Thread-200539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:58:13.064 [DEBUG] [Thread-200539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:58:13.105 [DEBUG] [Thread-200539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:58:13.105 [DEBUG] [Thread-200539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:58:13.109 [DEBUG] [Thread-200539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:58:13.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:58:13.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:58:13.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:58:13.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:58:13.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:58:13.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:58:13.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:58:13.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:58:13.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:58:13.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.039680 -999.00  +10.70   4.42     89   +9.00 1 2 1 3 1     0    0 1.71 7.49 ..ESW 4.4 4.4 212.4 5.8 11.3 -21.6 11.1 -20.5 10.8 -18.7 11.1 -20.7
2026-04-13T02:58:13.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:58:13.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:58:13.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.039680
2026-04-13T02:58:13.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:58:13.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:58:13.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:58:13.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:58:13.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:58:13.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:57:48', tmtdew=1.46761, humidity=90.5697, cloud=0.0, wind=9.24696, temperature=10.5125, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:57:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[0.8377499999999998, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.926, nan, nan, nan, nan, nan, 0.9100000000000001, 0.12899999999999956, 0.16174999999999962, 1.1069999999999984, nan, nan, nan, nan, 0.08050000000000068, 0.09875000000000078, 0.012500000000001066, 0.07099999999999973, 0.2900000000000009, 0.40000000000000124, 0.4825000000000008, 0.22775000000000034], zp_timestamp='2026-04-13T00:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:58:13.134 [DEBUG] [Thread-200539] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:58:13.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:58:13.227 [DEBUG] [Thread-200542] [transport.py] [_log()] starting thread (client mode): 0xae5149a0
2026-04-13T02:58:13.227 [DEBUG] [Thread-200542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:58:13.242 [DEBUG] [Thread-200542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:58:13.242 [INFO] [Thread-200542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:58:13.250 [DEBUG] [Thread-200542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] client lang: <none>
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] server lang: <none>
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] kex follows: False
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] Compression: none
2026-04-13T02:58:13.251 [DEBUG] [Thread-200542] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:58:13.307 [DEBUG] [Thread-200542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:58:13.308 [DEBUG] [Thread-200542] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:58:13.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:58:13.309 [DEBUG] [Thread-200542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:58:13.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:58:13.363 [DEBUG] [Thread-200542] [transport.py] [_log()] userauth is OK
2026-04-13T02:58:13.364 [DEBUG] [Thread-200542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:58:13.364 [DEBUG] [Thread-200542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:58:13.364 [DEBUG] [Thread-200542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:58:13.364 [DEBUG] [Thread-200542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:58:13.383 [INFO] [Thread-200542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:58:13.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:58:13.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:58:14.253 [DEBUG] [Thread-200542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:58:14.253 [DEBUG] [Thread-200542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:58:14.301 [DEBUG] [Thread-200542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:58:14.301 [DEBUG] [Thread-200542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:58:14.310 [DEBUG] [Thread-200542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:58:14.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:58:14.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:58:14.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:58:14.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:58:14.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:58:14.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:58:14.346 [DEBUG] [Thread-200542] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:58:23.478 [DEBUG] [Thread-200544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:58:28.758 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:58:28.760 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:58:35.128 [DEBUG] [Thread-200545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:58:38.535 [DEBUG] [Thread-200546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:58:44.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:58:44.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:58:44.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:58:45.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 58, 24), 2.39486, 85.2185, 0.0, 8.20584, 10.9228, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:58:45.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:58:24
2026-04-13T02:58:46.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:58:46.189 [DEBUG] [Thread-200547] [transport.py] [_log()] starting thread (client mode): 0xae52e680
2026-04-13T02:58:46.189 [DEBUG] [Thread-200547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:58:46.209 [DEBUG] [Thread-200547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:58:46.209 [INFO] [Thread-200547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] client lang: <none>
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] server lang: <none>
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] kex follows: False
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] Compression: none
2026-04-13T02:58:46.212 [DEBUG] [Thread-200547] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:58:46.228 [DEBUG] [Thread-200547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:58:46.228 [DEBUG] [Thread-200547] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:58:46.229 [DEBUG] [Thread-200547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:58:46.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:58:46.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:58:46.230 [DEBUG] [Thread-200547] [transport.py] [_log()] userauth is OK
2026-04-13T02:58:46.231 [DEBUG] [Thread-200547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:58:46.231 [DEBUG] [Thread-200547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:58:46.231 [DEBUG] [Thread-200547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:58:46.231 [DEBUG] [Thread-200547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:58:46.254 [INFO] [Thread-200547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:58:46.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:58:47.042 [DEBUG] [Thread-200547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:58:47.042 [DEBUG] [Thread-200547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:58:47.042 [DEBUG] [Thread-200547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:58:47.083 [DEBUG] [Thread-200547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:58:47.083 [DEBUG] [Thread-200547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:58:47.087 [DEBUG] [Thread-200547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:58:47.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:58:47.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:58:47.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:58:47.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:58:47.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:58:47.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:58:47.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:58:47.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:58:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:58:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.040375 -999.00  +10.70   5.62     89   +9.00 1 2 1 3 1     0    0 1.75 8.51 .NESW 5.6 5.6 213.6 6.4 11.2 -21.7 11.1 -20.6 10.9 -18.8 11.1 -20.8
2026-04-13T02:58:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:58:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:58:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.040375
2026-04-13T02:58:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:58:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:58:47.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:58:47.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:58:47.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:58:47.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:58:24', tmtdew=2.39486, humidity=85.2185, cloud=0.0, wind=8.20584, temperature=10.9228, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:58:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[0.8377499999999998, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.926, nan, nan, nan, nan, nan, 0.9100000000000001, 0.12899999999999956, 0.16174999999999962, 1.1069999999999984, nan, nan, nan, nan, 0.08050000000000068, 0.09875000000000078, 0.012500000000001066, 0.07099999999999973, 0.2900000000000009, 0.40000000000000124, 0.4825000000000008, 0.22775000000000034], zp_timestamp='2026-04-13T00:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:58:47.115 [DEBUG] [Thread-200547] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:58:47.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:58:47.212 [DEBUG] [Thread-200550] [transport.py] [_log()] starting thread (client mode): 0xb0feab30
2026-04-13T02:58:47.212 [DEBUG] [Thread-200550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:58:47.226 [DEBUG] [Thread-200550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:58:47.227 [INFO] [Thread-200550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:58:47.234 [DEBUG] [Thread-200550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] client lang: <none>
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] server lang: <none>
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] kex follows: False
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:58:47.235 [DEBUG] [Thread-200550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:58:47.236 [DEBUG] [Thread-200550] [transport.py] [_log()] Compression: none
2026-04-13T02:58:47.236 [DEBUG] [Thread-200550] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:58:47.293 [DEBUG] [Thread-200550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:58:47.293 [DEBUG] [Thread-200550] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:58:47.293 [DEBUG] [Thread-200550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:58:47.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:58:47.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:58:47.350 [DEBUG] [Thread-200550] [transport.py] [_log()] userauth is OK
2026-04-13T02:58:47.350 [DEBUG] [Thread-200550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:58:47.350 [DEBUG] [Thread-200550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:58:47.350 [DEBUG] [Thread-200550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:58:47.350 [DEBUG] [Thread-200550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:58:47.367 [INFO] [Thread-200550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:58:47.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:58:47.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:58:48.177 [DEBUG] [Thread-200550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:58:48.177 [DEBUG] [Thread-200550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:58:48.226 [DEBUG] [Thread-200550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:58:48.226 [DEBUG] [Thread-200550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:58:48.235 [DEBUG] [Thread-200550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:58:48.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:58:48.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:58:48.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:58:48.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:58:48.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:58:48.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:58:48.272 [DEBUG] [Thread-200550] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:58:53.572 [DEBUG] [Thread-200552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:08.624 [DEBUG] [Thread-200553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:18.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:59:18.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:59:18.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:59:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 58, 59), 2.46081, 84.619, 0.0, 8.0118, 10.8897, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:59:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:58:59
2026-04-13T02:59:19.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:59:20.056 [DEBUG] [Thread-200554] [transport.py] [_log()] starting thread (client mode): 0xae52df00
2026-04-13T02:59:20.056 [DEBUG] [Thread-200554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:59:20.079 [DEBUG] [Thread-200554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:59:20.079 [INFO] [Thread-200554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:59:20.082 [DEBUG] [Thread-200554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] client lang: <none>
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] server lang: <none>
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] kex follows: False
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] Compression: none
2026-04-13T02:59:20.083 [DEBUG] [Thread-200554] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:59:20.099 [DEBUG] [Thread-200554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:59:20.099 [DEBUG] [Thread-200554] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:59:20.100 [DEBUG] [Thread-200554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:59:20.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:59:20.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:59:20.102 [DEBUG] [Thread-200554] [transport.py] [_log()] userauth is OK
2026-04-13T02:59:20.102 [DEBUG] [Thread-200554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:59:20.102 [DEBUG] [Thread-200554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:59:20.102 [DEBUG] [Thread-200554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:59:20.103 [DEBUG] [Thread-200554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:59:20.127 [INFO] [Thread-200554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:59:20.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:59:20.924 [DEBUG] [Thread-200554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:59:20.924 [DEBUG] [Thread-200554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:59:20.924 [DEBUG] [Thread-200554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:59:20.965 [DEBUG] [Thread-200554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:59:20.966 [DEBUG] [Thread-200554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:59:20.969 [DEBUG] [Thread-200554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:59:20.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:59:20.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:59:20.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:59:20.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:59:20.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:59:20.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:59:20.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:59:20.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:59:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:59:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.040722 -999.00  +10.70   4.46     89   +9.00 1 2 1 3 1     0    0 1.75 9.23 ..ESW 4.5 4.5 197.6 5.7 11.3 -21.6 11.1 -20.7 10.8 -18.7 11.1 -20.5
2026-04-13T02:59:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:59:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:59:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.040722
2026-04-13T02:59:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:59:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:59:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:59:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:59:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:59:20.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:58:59', tmtdew=2.46081, humidity=84.619, cloud=0.0, wind=8.0118, temperature=10.8897, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:58:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[0.8377499999999998, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.926, nan, nan, nan, nan, nan, 0.9100000000000001, 0.12899999999999956, 0.16174999999999962, 1.1069999999999984, nan, nan, nan, nan, 0.08050000000000068, 0.09875000000000078, 0.012500000000001066, 0.07099999999999973, 0.2900000000000009, 0.40000000000000124, 0.4825000000000008, 0.22775000000000034], zp_timestamp='2026-04-13T00:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:59:20.996 [DEBUG] [Thread-200554] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:59:21.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:59:21.090 [DEBUG] [Thread-200557] [transport.py] [_log()] starting thread (client mode): 0xae52d780
2026-04-13T02:59:21.091 [DEBUG] [Thread-200557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:59:21.107 [DEBUG] [Thread-200557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:59:21.107 [INFO] [Thread-200557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:59:21.114 [DEBUG] [Thread-200557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] client lang: <none>
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] server lang: <none>
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] kex follows: False
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:59:21.115 [DEBUG] [Thread-200557] [transport.py] [_log()] Compression: none
2026-04-13T02:59:21.116 [DEBUG] [Thread-200557] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:59:21.174 [DEBUG] [Thread-200557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:59:21.175 [DEBUG] [Thread-200557] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:59:21.175 [DEBUG] [Thread-200557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:59:21.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:59:21.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:59:21.230 [DEBUG] [Thread-200557] [transport.py] [_log()] userauth is OK
2026-04-13T02:59:21.231 [DEBUG] [Thread-200557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:59:21.231 [DEBUG] [Thread-200557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:59:21.231 [DEBUG] [Thread-200557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:59:21.231 [DEBUG] [Thread-200557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:59:21.250 [INFO] [Thread-200557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:59:21.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:59:21.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:59:22.080 [DEBUG] [Thread-200557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:59:22.080 [DEBUG] [Thread-200557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:59:22.128 [DEBUG] [Thread-200557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:59:22.128 [DEBUG] [Thread-200557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:59:22.137 [DEBUG] [Thread-200557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:59:22.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:59:22.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:59:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:59:22.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:59:22.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:59:22.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:59:22.175 [DEBUG] [Thread-200557] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:59:23.663 [DEBUG] [Thread-200559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:28.963 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:28.964 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:35.212 [DEBUG] [Thread-200560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:38.724 [DEBUG] [Thread-200561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:52.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T02:59:52.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T02:59:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T02:59:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 2, 59, 35), 1.56641, 89.9726, 0.0, 8.92944, 10.5789, 1, 1, 0, 2, 0, 0),)
2026-04-13T02:59:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 02:59:35
2026-04-13T02:59:53.764 [DEBUG] [Thread-200562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T02:59:53.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T02:59:54.053 [DEBUG] [Thread-200563] [transport.py] [_log()] starting thread (client mode): 0xae52eb90
2026-04-13T02:59:54.053 [DEBUG] [Thread-200563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:59:54.073 [DEBUG] [Thread-200563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T02:59:54.073 [INFO] [Thread-200563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] client lang: <none>
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] server lang: <none>
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] kex follows: False
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:59:54.076 [DEBUG] [Thread-200563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:59:54.077 [DEBUG] [Thread-200563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:59:54.077 [DEBUG] [Thread-200563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:59:54.077 [DEBUG] [Thread-200563] [transport.py] [_log()] Compression: none
2026-04-13T02:59:54.077 [DEBUG] [Thread-200563] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:59:54.094 [DEBUG] [Thread-200563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:59:54.095 [DEBUG] [Thread-200563] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:59:54.095 [DEBUG] [Thread-200563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T02:59:54.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T02:59:54.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:59:54.097 [DEBUG] [Thread-200563] [transport.py] [_log()] userauth is OK
2026-04-13T02:59:54.105 [DEBUG] [Thread-200563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:59:54.105 [DEBUG] [Thread-200563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:59:54.105 [DEBUG] [Thread-200563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T02:59:54.105 [DEBUG] [Thread-200563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:59:54.126 [INFO] [Thread-200563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:59:54.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:59:54.902 [DEBUG] [Thread-200563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:59:54.903 [DEBUG] [Thread-200563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:59:54.903 [DEBUG] [Thread-200563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T02:59:54.944 [DEBUG] [Thread-200563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:59:54.944 [DEBUG] [Thread-200563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:59:54.948 [DEBUG] [Thread-200563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:59:54.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:59:54.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T02:59:54.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T02:59:54.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T02:59:54.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:59:54.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T02:59:54.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:59:54.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:59:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T02:59:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.041069 -999.00  +10.70   4.15     89   +9.00 1 2 1 3 1     0    0 1.83 11.26 ..ESW 4.2 4.2 193.4 5.7 11.3 -21.7 11.1 -20.5 10.8 -18.8 11.1 -20.4
2026-04-13T02:59:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T02:59:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T02:59:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.041069
2026-04-13T02:59:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T02:59:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T02:59:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T02:59:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T02:59:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T02:59:54.976 [DEBUG] [Thread-200563] [transport.py] [_log()] EOF in transport thread
2026-04-13T02:59:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T02:59:35', tmtdew=1.56641, humidity=89.9726, cloud=0.0, wind=8.92944, temperature=10.5789, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:59:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[0.8377499999999998, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.926, nan, nan, nan, nan, nan, 0.9100000000000001, 0.12899999999999956, 0.16174999999999962, 1.1069999999999984, nan, nan, nan, nan, 0.08050000000000068, 0.09875000000000078, 0.012500000000001066, 0.07099999999999973, 0.2900000000000009, 0.40000000000000124, 0.4825000000000008, 0.22775000000000034], zp_timestamp='2026-04-13T00:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T02:59:55.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T02:59:55.063 [DEBUG] [Thread-200566] [transport.py] [_log()] starting thread (client mode): 0xae5b64a0
2026-04-13T02:59:55.063 [DEBUG] [Thread-200566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T02:59:55.078 [DEBUG] [Thread-200566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T02:59:55.078 [INFO] [Thread-200566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] client lang: <none>
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] server lang: <none>
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] kex follows: False
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T02:59:55.086 [DEBUG] [Thread-200566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T02:59:55.087 [DEBUG] [Thread-200566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T02:59:55.087 [DEBUG] [Thread-200566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T02:59:55.087 [DEBUG] [Thread-200566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T02:59:55.087 [DEBUG] [Thread-200566] [transport.py] [_log()] Compression: none
2026-04-13T02:59:55.087 [DEBUG] [Thread-200566] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T02:59:55.146 [DEBUG] [Thread-200566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T02:59:55.147 [DEBUG] [Thread-200566] [transport.py] [_log()] Switch to new keys ...
2026-04-13T02:59:55.147 [DEBUG] [Thread-200566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T02:59:55.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T02:59:55.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T02:59:55.201 [DEBUG] [Thread-200566] [transport.py] [_log()] userauth is OK
2026-04-13T02:59:55.202 [DEBUG] [Thread-200566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T02:59:55.202 [DEBUG] [Thread-200566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T02:59:55.202 [DEBUG] [Thread-200566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T02:59:55.202 [DEBUG] [Thread-200566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T02:59:55.227 [INFO] [Thread-200566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T02:59:55.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T02:59:55.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T02:59:56.056 [DEBUG] [Thread-200566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T02:59:56.057 [DEBUG] [Thread-200566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T02:59:56.105 [DEBUG] [Thread-200566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T02:59:56.105 [DEBUG] [Thread-200566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T02:59:56.115 [DEBUG] [Thread-200566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T02:59:56.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T02:59:56.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T02:59:56.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T02:59:56.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T02:59:56.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T02:59:56.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T02:59:56.152 [DEBUG] [Thread-200566] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:00:08.799 [DEBUG] [Thread-200568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:00:23.851 [DEBUG] [Thread-200569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:00:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:00:26.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:00:26.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:00:27.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 0, 10), 2.60783, 84.337, 0.0, 7.99416, 10.9894, 0, 1, 0, 2, 0, 0),)
2026-04-13T03:00:27.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:00:10
2026-04-13T03:00:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:00:27.981 [DEBUG] [Thread-200570] [transport.py] [_log()] starting thread (client mode): 0xae5170a0
2026-04-13T03:00:27.981 [DEBUG] [Thread-200570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:00:28.002 [DEBUG] [Thread-200570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:00:28.002 [INFO] [Thread-200570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] client lang: <none>
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] server lang: <none>
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] kex follows: False
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] Compression: none
2026-04-13T03:00:28.005 [DEBUG] [Thread-200570] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:00:28.023 [DEBUG] [Thread-200570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:00:28.024 [DEBUG] [Thread-200570] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:00:28.024 [DEBUG] [Thread-200570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:00:28.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:00:28.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:00:28.026 [DEBUG] [Thread-200570] [transport.py] [_log()] userauth is OK
2026-04-13T03:00:28.026 [DEBUG] [Thread-200570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:00:28.027 [DEBUG] [Thread-200570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:00:28.027 [DEBUG] [Thread-200570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:00:28.027 [DEBUG] [Thread-200570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:00:28.051 [INFO] [Thread-200570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:00:28.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:00:29.096 [DEBUG] [Thread-200570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:00:29.096 [DEBUG] [Thread-200570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:00:29.096 [DEBUG] [Thread-200570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:00:29.137 [DEBUG] [Thread-200570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:00:29.137 [DEBUG] [Thread-200570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:00:29.141 [DEBUG] [Thread-200570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:00:29.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:00:29.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:00:29.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:00:29.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:00:29.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:00:29.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:00:29.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:00:29.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:00:29.170 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:00:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:00:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.041416 -999.00  +10.70   5.57     89   +9.00 1 2 1 3 1     0    0 1.90 12.40 ..ESW 5.6 5.6 204.8 6.4 11.3 -21.7 11.1 -20.6 10.8 -18.6 11.1 -20.7
2026-04-13T03:00:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:00:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:00:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.041416
2026-04-13T03:00:29.172 [DEBUG] [Thread-200570] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:00:29.173 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:00:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:00:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:00:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:00:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:00:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:00:29.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:00:10', tmtdew=2.60783, humidity=84.337, cloud=0.0, wind=7.99416, temperature=10.9894, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T00:59:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[0.8377499999999998, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.926, nan, nan, nan, nan, nan, 0.9100000000000001, 0.12899999999999956, 0.16174999999999962, 1.1069999999999984, nan, nan, nan, nan, 0.08050000000000068, 0.09875000000000078, 0.012500000000001066, 0.07099999999999973, 0.2900000000000009, 0.40000000000000124, 0.4825000000000008, 0.22775000000000034], zp_timestamp='2026-04-13T00:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:00:29.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:00:29.268 [DEBUG] [Thread-200573] [transport.py] [_log()] starting thread (client mode): 0xae5165f0
2026-04-13T03:00:29.269 [DEBUG] [Thread-200573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:00:29.285 [DEBUG] [Thread-200573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:00:29.285 [INFO] [Thread-200573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:00:29.292 [DEBUG] [Thread-200573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:00:29.293 [DEBUG] [Thread-200573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:00:29.293 [DEBUG] [Thread-200573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:00:29.293 [DEBUG] [Thread-200573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:00:29.293 [DEBUG] [Thread-200573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:00:29.293 [DEBUG] [Thread-200573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:00:29.293 [DEBUG] [Thread-200573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:00:29.293 [DEBUG] [Thread-200573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] client lang: <none>
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] server lang: <none>
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] kex follows: False
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:00:29.294 [DEBUG] [Thread-200573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:00:29.295 [DEBUG] [Thread-200573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:00:29.295 [DEBUG] [Thread-200573] [transport.py] [_log()] Compression: none
2026-04-13T03:00:29.295 [DEBUG] [Thread-200573] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:00:29.349 [DEBUG] [Thread-200573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:00:29.350 [DEBUG] [Thread-200573] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:00:29.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:00:29.351 [DEBUG] [Thread-200573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:00:29.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:00:29.406 [DEBUG] [Thread-200573] [transport.py] [_log()] userauth is OK
2026-04-13T03:00:29.406 [DEBUG] [Thread-200573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:00:29.406 [DEBUG] [Thread-200573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:00:29.406 [DEBUG] [Thread-200573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:00:29.406 [DEBUG] [Thread-200573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:00:29.426 [INFO] [Thread-200573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:00:29.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:00:29.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:00:30.292 [DEBUG] [Thread-200573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:00:30.293 [DEBUG] [Thread-200573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:00:30.340 [DEBUG] [Thread-200573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:00:30.341 [DEBUG] [Thread-200573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:00:30.350 [DEBUG] [Thread-200573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:00:30.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:00:30.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:00:30.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:00:30.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:00:30.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:00:30.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:00:30.387 [DEBUG] [Thread-200573] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:00:35.270 [DEBUG] [Thread-200575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:00:38.888 [DEBUG] [Thread-200576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:00:53.940 [DEBUG] [Thread-200577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:01:00.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:01:00.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:01:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:01:01.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 0, 46), 1.6498, 89.4749, 0.0, 8.8236, 10.6784, 1, 1, 0, 2, 0, 0),)
2026-04-13T03:01:01.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:00:46
2026-04-13T03:01:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:01:02.222 [DEBUG] [Thread-200578] [transport.py] [_log()] starting thread (client mode): 0xae52efb0
2026-04-13T03:01:02.222 [DEBUG] [Thread-200578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:01:02.241 [DEBUG] [Thread-200578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:01:02.241 [INFO] [Thread-200578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:02.244 [DEBUG] [Thread-200578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] client lang: <none>
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] server lang: <none>
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] kex follows: False
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] Compression: none
2026-04-13T03:01:02.245 [DEBUG] [Thread-200578] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:01:02.264 [DEBUG] [Thread-200578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:01:02.264 [DEBUG] [Thread-200578] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:01:02.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:01:02.266 [DEBUG] [Thread-200578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:01:02.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:01:02.267 [DEBUG] [Thread-200578] [transport.py] [_log()] userauth is OK
2026-04-13T03:01:02.268 [DEBUG] [Thread-200578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:01:02.268 [DEBUG] [Thread-200578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:01:02.268 [DEBUG] [Thread-200578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:01:02.268 [DEBUG] [Thread-200578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:01:02.292 [INFO] [Thread-200578] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:01:02.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:01:03.125 [DEBUG] [Thread-200578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:01:03.125 [DEBUG] [Thread-200578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:01:03.126 [DEBUG] [Thread-200578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:01:03.166 [DEBUG] [Thread-200578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:01:03.166 [DEBUG] [Thread-200578] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:01:03.169 [DEBUG] [Thread-200578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:01:03.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:01:03.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:01:03.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:01:03.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:01:03.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:01:03.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:01:03.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:01:03.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:01:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:01:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.041763 -999.00  +10.70   5.26     88   +9.00 1 2 1 3 1     0    0 1.90 12.39 ..ESW 5.3 5.3 205.0 6.6 11.3 -21.7 11.1 -20.6 10.9 -18.8 11.1 -20.6
2026-04-13T03:01:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:01:03.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:01:03.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.041763
2026-04-13T03:01:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:01:03.196 [DEBUG] [Thread-200578] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:01:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:01:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:01:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:01:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:01:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:00:46', tmtdew=1.6498, humidity=89.4749, cloud=0.0, wind=8.8236, temperature=10.6784, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:00:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T00:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:01:03.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:01:03.285 [DEBUG] [Thread-200581] [transport.py] [_log()] starting thread (client mode): 0xb0fe90f0
2026-04-13T03:01:03.285 [DEBUG] [Thread-200581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:01:03.300 [DEBUG] [Thread-200581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:01:03.300 [INFO] [Thread-200581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] client lang: <none>
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] server lang: <none>
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] kex follows: False
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] Compression: none
2026-04-13T03:01:03.308 [DEBUG] [Thread-200581] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:01:03.365 [DEBUG] [Thread-200581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:01:03.365 [DEBUG] [Thread-200581] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:01:03.366 [DEBUG] [Thread-200581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:01:03.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:01:03.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:01:03.421 [DEBUG] [Thread-200581] [transport.py] [_log()] userauth is OK
2026-04-13T03:01:03.421 [DEBUG] [Thread-200581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:01:03.421 [DEBUG] [Thread-200581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:01:03.421 [DEBUG] [Thread-200581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:01:03.421 [DEBUG] [Thread-200581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:01:03.440 [INFO] [Thread-200581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:01:03.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:01:03.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:01:04.270 [DEBUG] [Thread-200581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:01:04.271 [DEBUG] [Thread-200581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:01:04.319 [DEBUG] [Thread-200581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:01:04.319 [DEBUG] [Thread-200581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:01:04.329 [DEBUG] [Thread-200581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:01:04.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:01:04.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:01:04.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:01:04.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:01:04.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:01:04.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:01:04.365 [DEBUG] [Thread-200581] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:01:08.980 [DEBUG] [Thread-200583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:01:24.045 [DEBUG] [Thread-200584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:01:29.379 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:01:29.380 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:01:34.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:01:34.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:01:34.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:01:35.346 [DEBUG] [Thread-200585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:01:35.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 1, 21), 2.58865, 84.1545, 0.0, 7.97652, 10.9892, 0, 1, 0, 2, 0, 0),)
2026-04-13T03:01:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:01:21
2026-04-13T03:01:35.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:01:36.161 [DEBUG] [Thread-200586] [transport.py] [_log()] starting thread (client mode): 0xb0feb3a0
2026-04-13T03:01:36.161 [DEBUG] [Thread-200586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:01:36.181 [DEBUG] [Thread-200586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:01:36.181 [INFO] [Thread-200586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:01:36.184 [DEBUG] [Thread-200586] [transport.py] [_log()] client lang: <none>
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] server lang: <none>
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] kex follows: False
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] Compression: none
2026-04-13T03:01:36.185 [DEBUG] [Thread-200586] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:01:36.203 [DEBUG] [Thread-200586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:01:36.203 [DEBUG] [Thread-200586] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:01:36.204 [DEBUG] [Thread-200586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:01:36.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:01:36.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:01:36.206 [DEBUG] [Thread-200586] [transport.py] [_log()] userauth is OK
2026-04-13T03:01:36.206 [DEBUG] [Thread-200586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:01:36.206 [DEBUG] [Thread-200586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:01:36.206 [DEBUG] [Thread-200586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:01:36.206 [DEBUG] [Thread-200586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:01:36.230 [INFO] [Thread-200586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:01:36.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:01:37.052 [DEBUG] [Thread-200586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:01:37.052 [DEBUG] [Thread-200586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:01:37.052 [DEBUG] [Thread-200586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:01:37.093 [DEBUG] [Thread-200586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:01:37.093 [DEBUG] [Thread-200586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:01:37.097 [DEBUG] [Thread-200586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:01:37.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:01:37.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:01:37.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:01:37.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:01:37.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:01:37.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:01:37.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:01:37.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:01:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:01:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.042111 -999.00  +10.70   4.83     88   +8.90 1 2 1 3 1     0    0 1.96 13.36 .nESW 4.8 4.8 211.4 5.3 11.3 -21.7 11.1 -20.7 10.8 -18.7 11.1 -20.7
2026-04-13T03:01:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:01:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:01:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.042111
2026-04-13T03:01:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:01:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:01:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:01:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:01:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:01:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:01:21', tmtdew=2.58865, humidity=84.1545, cloud=0.0, wind=7.97652, temperature=10.9892, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:00:38.390', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T00:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:01:37.125 [DEBUG] [Thread-200586] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:01:37.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:01:37.219 [DEBUG] [Thread-200589] [transport.py] [_log()] starting thread (client mode): 0xb0febc70
2026-04-13T03:01:37.219 [DEBUG] [Thread-200589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:01:37.233 [DEBUG] [Thread-200589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:01:37.233 [INFO] [Thread-200589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:01:37.241 [DEBUG] [Thread-200589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:01:37.241 [DEBUG] [Thread-200589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:01:37.242 [DEBUG] [Thread-200589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:01:37.242 [DEBUG] [Thread-200589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:37.242 [DEBUG] [Thread-200589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:01:37.242 [DEBUG] [Thread-200589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:37.242 [DEBUG] [Thread-200589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:01:37.242 [DEBUG] [Thread-200589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:01:37.242 [DEBUG] [Thread-200589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] client lang: <none>
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] server lang: <none>
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] kex follows: False
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] Compression: none
2026-04-13T03:01:37.243 [DEBUG] [Thread-200589] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:01:37.301 [DEBUG] [Thread-200589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:01:37.302 [DEBUG] [Thread-200589] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:01:37.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:01:37.303 [DEBUG] [Thread-200589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:01:37.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:01:37.361 [DEBUG] [Thread-200589] [transport.py] [_log()] userauth is OK
2026-04-13T03:01:37.361 [DEBUG] [Thread-200589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:01:37.361 [DEBUG] [Thread-200589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:01:37.361 [DEBUG] [Thread-200589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:01:37.361 [DEBUG] [Thread-200589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:01:37.383 [INFO] [Thread-200589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:01:37.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:01:37.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:01:38.184 [DEBUG] [Thread-200589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:01:38.184 [DEBUG] [Thread-200589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:01:38.232 [DEBUG] [Thread-200589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:01:38.232 [DEBUG] [Thread-200589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:01:38.242 [DEBUG] [Thread-200589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:01:38.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:01:38.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:01:38.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:01:38.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:01:38.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:01:38.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:01:38.278 [DEBUG] [Thread-200589] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:01:39.082 [DEBUG] [Thread-200591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:01:54.136 [DEBUG] [Thread-200592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:02:08.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:02:08.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:02:08.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:02:09.176 [DEBUG] [Thread-200593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:02:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 1, 57), 2.71919, 83.4721, 0.0, 8.20584, 11.0058, 0, 1, 0, 2, 0, 0),)
2026-04-13T03:02:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:01:57
2026-04-13T03:02:09.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:02:10.065 [DEBUG] [Thread-200594] [transport.py] [_log()] starting thread (client mode): 0xae52f8b0
2026-04-13T03:02:10.065 [DEBUG] [Thread-200594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:02:10.085 [DEBUG] [Thread-200594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:02:10.085 [INFO] [Thread-200594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] client lang: <none>
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] server lang: <none>
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] kex follows: False
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:02:10.089 [DEBUG] [Thread-200594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:02:10.090 [DEBUG] [Thread-200594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:02:10.090 [DEBUG] [Thread-200594] [transport.py] [_log()] Compression: none
2026-04-13T03:02:10.090 [DEBUG] [Thread-200594] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:02:10.109 [DEBUG] [Thread-200594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:02:10.109 [DEBUG] [Thread-200594] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:02:10.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:02:10.111 [DEBUG] [Thread-200594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:02:10.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:02:10.113 [DEBUG] [Thread-200594] [transport.py] [_log()] userauth is OK
2026-04-13T03:02:10.113 [DEBUG] [Thread-200594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:02:10.113 [DEBUG] [Thread-200594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:02:10.113 [DEBUG] [Thread-200594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:02:10.113 [DEBUG] [Thread-200594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:02:10.139 [INFO] [Thread-200594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:02:10.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:02:10.946 [DEBUG] [Thread-200594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:02:10.946 [DEBUG] [Thread-200594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:02:10.947 [DEBUG] [Thread-200594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:02:10.987 [DEBUG] [Thread-200594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:02:10.988 [DEBUG] [Thread-200594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:02:10.991 [DEBUG] [Thread-200594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:02:11.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:02:11.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:02:11.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:02:11.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:02:11.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:02:11.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:02:11.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:02:11.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:02:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:02:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.042805 -999.00  +10.70   4.02     88   +8.90 1 2 1 3 1     0    0 2.04 17.11 .NESW 4.0 4.0 200.7 5.5 11.3 -21.8 11.1 -20.7 10.9 -18.7 11.1 -20.7
2026-04-13T03:02:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:02:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:02:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.042805
2026-04-13T03:02:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:02:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:02:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:02:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:02:11.020 [DEBUG] [Thread-200594] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:02:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:02:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:01:57', tmtdew=2.71919, humidity=83.4721, cloud=0.0, wind=8.20584, temperature=11.0058, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:01:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T00:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:02:11.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:02:11.112 [DEBUG] [Thread-200597] [transport.py] [_log()] starting thread (client mode): 0xb0feae00
2026-04-13T03:02:11.112 [DEBUG] [Thread-200597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:02:11.127 [DEBUG] [Thread-200597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:02:11.127 [INFO] [Thread-200597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:02:11.134 [DEBUG] [Thread-200597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] client lang: <none>
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] server lang: <none>
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] kex follows: False
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] Compression: none
2026-04-13T03:02:11.135 [DEBUG] [Thread-200597] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:02:11.193 [DEBUG] [Thread-200597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:02:11.193 [DEBUG] [Thread-200597] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:02:11.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:02:11.195 [DEBUG] [Thread-200597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:02:11.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:02:11.248 [DEBUG] [Thread-200597] [transport.py] [_log()] userauth is OK
2026-04-13T03:02:11.249 [DEBUG] [Thread-200597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:02:11.249 [DEBUG] [Thread-200597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:02:11.249 [DEBUG] [Thread-200597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:02:11.249 [DEBUG] [Thread-200597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:02:11.268 [INFO] [Thread-200597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:02:11.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:02:11.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:02:12.098 [DEBUG] [Thread-200597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:02:12.098 [DEBUG] [Thread-200597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:02:12.145 [DEBUG] [Thread-200597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:02:12.146 [DEBUG] [Thread-200597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:02:12.154 [DEBUG] [Thread-200597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:02:12.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:02:12.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')
2026-04-13T03:02:12.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:02:12.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:02:12.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:02:12.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:02:12.190 [DEBUG] [Thread-200597] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:02:24.210 [DEBUG] [Thread-200599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:02:29.584 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:02:29.585 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:02:35.425 [DEBUG] [Thread-200600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:02:39.263 [DEBUG] [Thread-200601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:02:42.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:02:42.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:02:42.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:02:43.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 2, 32), 1.81594, 88.4797, 0.0, 9.45864, 10.7116, 1, 1, 0, 2, 0, 0),)
2026-04-13T03:02:43.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:02:32
2026-04-13T03:02:43.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:02:44.015 [DEBUG] [Thread-200602] [transport.py] [_log()] starting thread (client mode): 0xae52e2c0
2026-04-13T03:02:44.015 [DEBUG] [Thread-200602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:02:44.034 [DEBUG] [Thread-200602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:02:44.034 [INFO] [Thread-200602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] client lang: <none>
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] server lang: <none>
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] kex follows: False
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:02:44.037 [DEBUG] [Thread-200602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:02:44.038 [DEBUG] [Thread-200602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:02:44.038 [DEBUG] [Thread-200602] [transport.py] [_log()] Compression: none
2026-04-13T03:02:44.038 [DEBUG] [Thread-200602] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:02:44.056 [DEBUG] [Thread-200602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:02:44.056 [DEBUG] [Thread-200602] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:02:44.057 [DEBUG] [Thread-200602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:02:44.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:02:44.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:02:44.059 [DEBUG] [Thread-200602] [transport.py] [_log()] userauth is OK
2026-04-13T03:02:44.059 [DEBUG] [Thread-200602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:02:44.059 [DEBUG] [Thread-200602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:02:44.060 [DEBUG] [Thread-200602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:02:44.060 [DEBUG] [Thread-200602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:02:44.077 [INFO] [Thread-200602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:02:44.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:02:44.855 [DEBUG] [Thread-200602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:02:44.855 [DEBUG] [Thread-200602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:02:44.856 [DEBUG] [Thread-200602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:02:44.896 [DEBUG] [Thread-200602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:02:44.896 [DEBUG] [Thread-200602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:02:44.900 [DEBUG] [Thread-200602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:02:44.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:02:44.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:02:44.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:02:44.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:02:44.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:02:44.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:02:44.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:02:44.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:02:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:02:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.043152 -999.00  +10.70   3.63     88   +8.90 1 2 1 3 1     0    0 2.14 20.12 .NESW 3.6 3.6 216.6 5.5 11.3 -21.6 11.1 -20.7 10.9 -18.8 11.1 -20.6
2026-04-13T03:02:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:02:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:02:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.043152
2026-04-13T03:02:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:02:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:02:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:02:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:02:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:02:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:02:32', tmtdew=1.81594, humidity=88.4797, cloud=0.0, wind=9.45864, temperature=10.7116, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:02:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T00:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:02:44.931 [DEBUG] [Thread-200602] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:02:45.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:02:45.024 [DEBUG] [Thread-200605] [transport.py] [_log()] starting thread (client mode): 0xae52ed10
2026-04-13T03:02:45.024 [DEBUG] [Thread-200605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:02:45.038 [DEBUG] [Thread-200605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:02:45.038 [INFO] [Thread-200605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:02:45.046 [DEBUG] [Thread-200605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:02:45.046 [DEBUG] [Thread-200605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:02:45.046 [DEBUG] [Thread-200605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:02:45.046 [DEBUG] [Thread-200605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] client lang: <none>
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] server lang: <none>
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] kex follows: False
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] Compression: none
2026-04-13T03:02:45.047 [DEBUG] [Thread-200605] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:02:45.104 [DEBUG] [Thread-200605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:02:45.104 [DEBUG] [Thread-200605] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:02:45.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:02:45.105 [DEBUG] [Thread-200605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:02:45.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:02:45.160 [DEBUG] [Thread-200605] [transport.py] [_log()] userauth is OK
2026-04-13T03:02:45.160 [DEBUG] [Thread-200605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:02:45.161 [DEBUG] [Thread-200605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:02:45.161 [DEBUG] [Thread-200605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:02:45.161 [DEBUG] [Thread-200605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:02:45.184 [INFO] [Thread-200605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:02:45.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:02:45.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:02:46.011 [DEBUG] [Thread-200605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:02:46.011 [DEBUG] [Thread-200605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:02:46.059 [DEBUG] [Thread-200605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:02:46.059 [DEBUG] [Thread-200605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:02:46.068 [DEBUG] [Thread-200605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:02:46.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:02:46.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:02:46.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:02:46.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:02:46.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:02:46.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:02:46.110 [DEBUG] [Thread-200605] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:02:54.299 [DEBUG] [Thread-200607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:03:09.352 [DEBUG] [Thread-200608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:03:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:03:16.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:03:16.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:03:17.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 3, 8), 2.87767, 82.3251, 0.0, 8.24112, 11.0058, 0, 1, 0, 2, 0, 0),)
2026-04-13T03:03:17.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:03:08
2026-04-13T03:03:17.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:03:17.858 [DEBUG] [Thread-200609] [transport.py] [_log()] starting thread (client mode): 0xae52f0d0
2026-04-13T03:03:17.858 [DEBUG] [Thread-200609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:03:17.880 [DEBUG] [Thread-200609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:03:17.880 [INFO] [Thread-200609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] client lang: <none>
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] server lang: <none>
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] kex follows: False
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] Compression: none
2026-04-13T03:03:17.883 [DEBUG] [Thread-200609] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:03:17.900 [DEBUG] [Thread-200609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:03:17.901 [DEBUG] [Thread-200609] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:03:17.901 [DEBUG] [Thread-200609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:03:17.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:03:17.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:03:17.903 [DEBUG] [Thread-200609] [transport.py] [_log()] userauth is OK
2026-04-13T03:03:17.904 [DEBUG] [Thread-200609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:03:17.904 [DEBUG] [Thread-200609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:03:17.904 [DEBUG] [Thread-200609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:03:17.904 [DEBUG] [Thread-200609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:03:17.928 [INFO] [Thread-200609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:03:17.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:03:18.732 [DEBUG] [Thread-200609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:03:18.733 [DEBUG] [Thread-200609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:03:18.733 [DEBUG] [Thread-200609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:03:18.774 [DEBUG] [Thread-200609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:03:18.774 [DEBUG] [Thread-200609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:03:18.778 [DEBUG] [Thread-200609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:03:18.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:03:18.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:03:18.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:03:18.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:03:18.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:03:18.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:03:18.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:03:18.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:03:18.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:03:18.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.043499 -999.00  +10.70   3.20     88   +8.80 1 2 1 3 1     0    0 2.18 20.61 .NESW 3.2 3.2 218.7 5.4 11.2 -21.6 11.2 -20.6 10.9 -18.6 11.1 -20.5
2026-04-13T03:03:18.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:03:18.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:03:18.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.043499
2026-04-13T03:03:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:03:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:03:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:03:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:03:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:03:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:03:08', tmtdew=2.87767, humidity=82.3251, cloud=0.0, wind=8.24112, temperature=11.0058, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:02:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T00:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:03:18.807 [DEBUG] [Thread-200609] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:03:18.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:03:18.905 [DEBUG] [Thread-200612] [transport.py] [_log()] starting thread (client mode): 0xb0f546d0
2026-04-13T03:03:18.905 [DEBUG] [Thread-200612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:03:18.920 [DEBUG] [Thread-200612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:03:18.920 [INFO] [Thread-200612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:18.928 [DEBUG] [Thread-200612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] client lang: <none>
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] server lang: <none>
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] kex follows: False
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:03:18.929 [DEBUG] [Thread-200612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:03:18.930 [DEBUG] [Thread-200612] [transport.py] [_log()] Compression: none
2026-04-13T03:03:18.930 [DEBUG] [Thread-200612] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:03:18.988 [DEBUG] [Thread-200612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:03:18.989 [DEBUG] [Thread-200612] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:03:18.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:03:18.990 [DEBUG] [Thread-200612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:03:18.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:03:19.043 [DEBUG] [Thread-200612] [transport.py] [_log()] userauth is OK
2026-04-13T03:03:19.044 [DEBUG] [Thread-200612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:03:19.044 [DEBUG] [Thread-200612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:03:19.044 [DEBUG] [Thread-200612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:03:19.044 [DEBUG] [Thread-200612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:03:19.062 [INFO] [Thread-200612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:03:19.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:03:19.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:03:19.881 [DEBUG] [Thread-200612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:03:19.881 [DEBUG] [Thread-200612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:03:19.929 [DEBUG] [Thread-200612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:03:19.929 [DEBUG] [Thread-200612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:03:19.939 [DEBUG] [Thread-200612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:03:19.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:03:19.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:03:19.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:03:19.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:03:19.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:03:19.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:03:19.976 [DEBUG] [Thread-200612] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:03:24.389 [DEBUG] [Thread-200614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:03:29.790 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:03:29.791 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:03:35.498 [DEBUG] [Thread-200615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:03:39.441 [DEBUG] [Thread-200616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:03:49.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:03:49.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:03:50.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:03:51.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 3, 43), 2.0329, 87.1858, 0.0, 9.28224, 10.6452, 1, 1, 0, 2, 0, 0),)
2026-04-13T03:03:51.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:03:43
2026-04-13T03:03:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:03:51.819 [DEBUG] [Thread-200617] [transport.py] [_log()] starting thread (client mode): 0xae5b4670
2026-04-13T03:03:51.819 [DEBUG] [Thread-200617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:03:51.839 [DEBUG] [Thread-200617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:03:51.840 [INFO] [Thread-200617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:03:51.842 [DEBUG] [Thread-200617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:03:51.842 [DEBUG] [Thread-200617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] client lang: <none>
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] server lang: <none>
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] kex follows: False
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] Compression: none
2026-04-13T03:03:51.843 [DEBUG] [Thread-200617] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:03:51.859 [DEBUG] [Thread-200617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:03:51.860 [DEBUG] [Thread-200617] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:03:51.861 [DEBUG] [Thread-200617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:03:51.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:03:51.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:03:51.863 [DEBUG] [Thread-200617] [transport.py] [_log()] userauth is OK
2026-04-13T03:03:51.863 [DEBUG] [Thread-200617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:03:51.863 [DEBUG] [Thread-200617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:03:51.863 [DEBUG] [Thread-200617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:03:51.863 [DEBUG] [Thread-200617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:03:51.881 [INFO] [Thread-200617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:03:51.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:03:52.665 [DEBUG] [Thread-200617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:03:52.665 [DEBUG] [Thread-200617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:03:52.666 [DEBUG] [Thread-200617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:03:52.706 [DEBUG] [Thread-200617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:03:52.706 [DEBUG] [Thread-200617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:03:52.710 [DEBUG] [Thread-200617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:03:52.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:03:52.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:03:52.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:03:52.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:03:52.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:03:52.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:03:52.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:03:52.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:03:52.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:03:52.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.043847 -999.00  +10.70   4.78     87   +8.80 1 2 1 2 1     0    0 2.31 24.18 .NESW 4.8 4.8 211.2 6.0 11.3 -21.6 11.1 -20.5 10.8 -18.6 11.1 -20.5
2026-04-13T03:03:52.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:03:52.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:03:52.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.043847
2026-04-13T03:03:52.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:03:52.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:03:52.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:03:52.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:03:52.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:03:52.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:03:43', tmtdew=2.0329, humidity=87.1858, cloud=0.0, wind=9.28224, temperature=10.6452, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:03:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T01:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:03:52.736 [DEBUG] [Thread-200617] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:03:52.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:03:52.830 [DEBUG] [Thread-200620] [transport.py] [_log()] starting thread (client mode): 0xb0fe88b0
2026-04-13T03:03:52.830 [DEBUG] [Thread-200620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:03:52.845 [DEBUG] [Thread-200620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:03:52.845 [INFO] [Thread-200620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:03:52.855 [DEBUG] [Thread-200620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] client lang: <none>
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] server lang: <none>
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] kex follows: False
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] Compression: none
2026-04-13T03:03:52.856 [DEBUG] [Thread-200620] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:03:52.911 [DEBUG] [Thread-200620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:03:52.911 [DEBUG] [Thread-200620] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:03:52.912 [DEBUG] [Thread-200620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:03:52.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:03:52.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:03:52.973 [DEBUG] [Thread-200620] [transport.py] [_log()] userauth is OK
2026-04-13T03:03:52.973 [DEBUG] [Thread-200620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:03:52.973 [DEBUG] [Thread-200620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:03:52.973 [DEBUG] [Thread-200620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:03:52.973 [DEBUG] [Thread-200620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:03:52.996 [INFO] [Thread-200620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:03:52.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:03:52.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:03:53.809 [DEBUG] [Thread-200620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:03:53.810 [DEBUG] [Thread-200620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:03:53.857 [DEBUG] [Thread-200620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:03:53.857 [DEBUG] [Thread-200620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:03:53.866 [DEBUG] [Thread-200620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:03:53.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:03: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')
2026-04-13T03:03:53.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:03:53.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:03:53.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:03:53.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:03:53.903 [DEBUG] [Thread-200620] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:03:54.479 [DEBUG] [Thread-200622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:09.542 [DEBUG] [Thread-200623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:23.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:04:23.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:04:23.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:04:24.577 [DEBUG] [Thread-200624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:25.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 3, 43), 2.0329, 87.1858, 0.0, 9.28224, 10.6452, 1, 1, 0, 2, 0, 0),)
2026-04-13T03:04:25.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:03:43
2026-04-13T03:04:25.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:04:25.862 [DEBUG] [Thread-200625] [transport.py] [_log()] starting thread (client mode): 0xb0feab30
2026-04-13T03:04:25.862 [DEBUG] [Thread-200625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:04:25.881 [DEBUG] [Thread-200625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:04:25.881 [INFO] [Thread-200625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:04:25.883 [DEBUG] [Thread-200625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:04:25.883 [DEBUG] [Thread-200625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:04:25.883 [DEBUG] [Thread-200625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] client lang: <none>
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] server lang: <none>
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] kex follows: False
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] Compression: none
2026-04-13T03:04:25.884 [DEBUG] [Thread-200625] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:04:25.903 [DEBUG] [Thread-200625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:04:25.903 [DEBUG] [Thread-200625] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:04:25.904 [DEBUG] [Thread-200625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:04:25.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:04:25.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:04:25.906 [DEBUG] [Thread-200625] [transport.py] [_log()] userauth is OK
2026-04-13T03:04:25.906 [DEBUG] [Thread-200625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:04:25.906 [DEBUG] [Thread-200625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:04:25.906 [DEBUG] [Thread-200625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:04:25.906 [DEBUG] [Thread-200625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:04:25.940 [INFO] [Thread-200625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:04:25.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:04:26.741 [DEBUG] [Thread-200625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:04:26.741 [DEBUG] [Thread-200625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:04:26.742 [DEBUG] [Thread-200625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:04:26.783 [DEBUG] [Thread-200625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:04:26.783 [DEBUG] [Thread-200625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:04:26.785 [DEBUG] [Thread-200625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:04:26.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:04:26.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:04:26.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:04:26.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:04:26.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:04:26.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:04:26.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:04:26.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:04:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:04:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.044194 -999.00  +10.70   3.87     87   +8.70 1 2 1 2 1     0    0 2.29 24.43 Z.ES. 3.9 3.9 214.9 5.4 11.3 -21.7 11.1 -20.6 10.9 -18.6 11.2 -20.6
2026-04-13T03:04:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:04:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:04:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.044194
2026-04-13T03:04:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:04:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:04:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:04:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:04:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:04:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:03:43', tmtdew=2.0329, humidity=87.1858, cloud=0.0, wind=9.28224, temperature=10.6452, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:03:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T01:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:04:26.810 [DEBUG] [Thread-200625] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:04:26.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:04:26.901 [DEBUG] [Thread-200628] [transport.py] [_log()] starting thread (client mode): 0xb0f56560
2026-04-13T03:04:26.901 [DEBUG] [Thread-200628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:04:26.916 [DEBUG] [Thread-200628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:04:26.916 [INFO] [Thread-200628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:04:26.923 [DEBUG] [Thread-200628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] client lang: <none>
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] server lang: <none>
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] kex follows: False
2026-04-13T03:04:26.924 [DEBUG] [Thread-200628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:04:26.925 [DEBUG] [Thread-200628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:04:26.925 [DEBUG] [Thread-200628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:04:26.925 [DEBUG] [Thread-200628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:04:26.925 [DEBUG] [Thread-200628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:04:26.925 [DEBUG] [Thread-200628] [transport.py] [_log()] Compression: none
2026-04-13T03:04:26.925 [DEBUG] [Thread-200628] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:04:26.981 [DEBUG] [Thread-200628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:04:26.981 [DEBUG] [Thread-200628] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:04:26.982 [DEBUG] [Thread-200628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:04:26.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:04:26.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:04:27.038 [DEBUG] [Thread-200628] [transport.py] [_log()] userauth is OK
2026-04-13T03:04:27.038 [DEBUG] [Thread-200628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:04:27.038 [DEBUG] [Thread-200628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:04:27.038 [DEBUG] [Thread-200628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:04:27.038 [DEBUG] [Thread-200628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:04:27.060 [INFO] [Thread-200628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:04:27.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:04:27.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:04:27.928 [DEBUG] [Thread-200628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:04:27.929 [DEBUG] [Thread-200628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:04:27.976 [DEBUG] [Thread-200628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:04:27.977 [DEBUG] [Thread-200628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:04:27.985 [DEBUG] [Thread-200628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:04:27.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:04:27.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:04:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:04:28.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:04:28.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:04:28.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:04:28.019 [DEBUG] [Thread-200628] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:04:29.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:30.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:35.572 [DEBUG] [Thread-200630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:39.611 [DEBUG] [Thread-200631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:54.663 [DEBUG] [Thread-200632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:04:58.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:04:58.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:04:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:04:59.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 4, 18), 3.08702, 81.1782, 0.0, 8.2764, 10.9726, 0, 1, 0, 2, 0, 0),)
2026-04-13T03:04:59.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:04:18
2026-04-13T03:04:59.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:04:59.872 [DEBUG] [Thread-200633] [transport.py] [_log()] starting thread (client mode): 0xb0fb7b20
2026-04-13T03:04:59.872 [DEBUG] [Thread-200633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:04:59.892 [DEBUG] [Thread-200633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:04:59.892 [INFO] [Thread-200633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:04:59.895 [DEBUG] [Thread-200633] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] client lang: <none>
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] server lang: <none>
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] kex follows: False
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] Compression: none
2026-04-13T03:04:59.896 [DEBUG] [Thread-200633] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:04:59.911 [DEBUG] [Thread-200633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:04:59.912 [DEBUG] [Thread-200633] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:04:59.913 [DEBUG] [Thread-200633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:04:59.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:04:59.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:04:59.915 [DEBUG] [Thread-200633] [transport.py] [_log()] userauth is OK
2026-04-13T03:04:59.915 [DEBUG] [Thread-200633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:04:59.915 [DEBUG] [Thread-200633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:04:59.915 [DEBUG] [Thread-200633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:04:59.915 [DEBUG] [Thread-200633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:04:59.953 [INFO] [Thread-200633] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:04:59.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:05:00.738 [DEBUG] [Thread-200633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:05:00.738 [DEBUG] [Thread-200633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:05:00.738 [DEBUG] [Thread-200633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:05:00.779 [DEBUG] [Thread-200633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:05:00.779 [DEBUG] [Thread-200633] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:05:00.783 [DEBUG] [Thread-200633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:05:00.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:05:00.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:05:00.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:05:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:05:00.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:05:00.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:05:00.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:05:00.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:05:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:05:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.044541 -999.00  +10.80   3.68     86   +8.60 1 2 1 2 1     0    0 2.42 28.38 Z.ES. 3.7 3.7 208.2 6.3 11.3 -21.6 11.2 -20.6 10.9 -18.8 11.1 -20.5
2026-04-13T03:05:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:05:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:05:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.044541
2026-04-13T03:05:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:05:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:05:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:05:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:05:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:05:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:04:18', tmtdew=3.08702, humidity=81.1782, cloud=0.0, wind=8.2764, temperature=10.9726, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:04:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T01:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:05:00.808 [DEBUG] [Thread-200633] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:05:00.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:05:00.901 [DEBUG] [Thread-200636] [transport.py] [_log()] starting thread (client mode): 0xae517c40
2026-04-13T03:05:00.901 [DEBUG] [Thread-200636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:05:00.923 [DEBUG] [Thread-200636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:05:00.923 [INFO] [Thread-200636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:05:00.930 [DEBUG] [Thread-200636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] client lang: <none>
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] server lang: <none>
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] kex follows: False
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:05:00.931 [DEBUG] [Thread-200636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:05:00.932 [DEBUG] [Thread-200636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:05:00.932 [DEBUG] [Thread-200636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:05:00.932 [DEBUG] [Thread-200636] [transport.py] [_log()] Compression: none
2026-04-13T03:05:00.932 [DEBUG] [Thread-200636] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:05:00.990 [DEBUG] [Thread-200636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:05:00.991 [DEBUG] [Thread-200636] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:05:00.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:05:00.992 [DEBUG] [Thread-200636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:05:00.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:05:01.046 [DEBUG] [Thread-200636] [transport.py] [_log()] userauth is OK
2026-04-13T03:05:01.047 [DEBUG] [Thread-200636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:05:01.047 [DEBUG] [Thread-200636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:05:01.047 [DEBUG] [Thread-200636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:05:01.047 [DEBUG] [Thread-200636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:05:01.067 [INFO] [Thread-200636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:05:01.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:05:01.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:05:01.917 [DEBUG] [Thread-200636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:05:01.917 [DEBUG] [Thread-200636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:05:01.966 [DEBUG] [Thread-200636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:05:01.967 [DEBUG] [Thread-200636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:05:01.975 [DEBUG] [Thread-200636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:05:01.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:05:01.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:05:01.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:05:02.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:05:02.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:05:02.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:05:02.013 [DEBUG] [Thread-200636] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:05:09.700 [DEBUG] [Thread-200638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:05:24.755 [DEBUG] [Thread-200639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:05:30.205 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:05:30.206 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:05:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:05:32.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:05:32.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:05:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 4, 54), 2.32783, 85.4607, 0.0, 10.3054, 10.6452, 1, 1, 0, 2, 0, 0),)
2026-04-13T03:05:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:04:54
2026-04-13T03:05:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:05:33.870 [DEBUG] [Thread-200640] [transport.py] [_log()] starting thread (client mode): 0xb0fb6440
2026-04-13T03:05:33.870 [DEBUG] [Thread-200640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:05:33.885 [DEBUG] [Thread-200640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:05:33.885 [INFO] [Thread-200640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] client lang: <none>
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] server lang: <none>
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] kex follows: False
2026-04-13T03:05:33.888 [DEBUG] [Thread-200640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:05:33.889 [DEBUG] [Thread-200640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:05:33.889 [DEBUG] [Thread-200640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:05:33.889 [DEBUG] [Thread-200640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:05:33.889 [DEBUG] [Thread-200640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:05:33.889 [DEBUG] [Thread-200640] [transport.py] [_log()] Compression: none
2026-04-13T03:05:33.889 [DEBUG] [Thread-200640] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:05:33.902 [DEBUG] [Thread-200640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:05:33.903 [DEBUG] [Thread-200640] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:05:33.903 [DEBUG] [Thread-200640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:05:33.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:05:33.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:05:33.905 [DEBUG] [Thread-200640] [transport.py] [_log()] userauth is OK
2026-04-13T03:05:33.905 [DEBUG] [Thread-200640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:05:33.905 [DEBUG] [Thread-200640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:05:33.905 [DEBUG] [Thread-200640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:05:33.905 [DEBUG] [Thread-200640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:05:33.918 [INFO] [Thread-200640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:05:33.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:05:34.674 [DEBUG] [Thread-200640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:05:34.675 [DEBUG] [Thread-200640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:05:34.676 [DEBUG] [Thread-200640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:05:34.716 [DEBUG] [Thread-200640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:05:34.716 [DEBUG] [Thread-200640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:05:34.718 [DEBUG] [Thread-200640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:05:34.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:05:34.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:05:34.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:05:34.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:05:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:05:34.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:05:34.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.045235 -999.00  +10.80   4.90     86   +8.60 1 2 1 2 1     0    0 2.89 41.17 Z.ES. 4.9 4.9 203.6 6.0 11.3 -21.6 11.2 -20.6 10.9 -18.6 11.1 -20.5
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.045235
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:05:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:04:54', tmtdew=2.32783, humidity=85.4607, cloud=0.0, wind=10.3054, temperature=10.6452, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:05:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T01:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:05:34.735 [DEBUG] [Thread-200640] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:05:34.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:05:34.818 [DEBUG] [Thread-200643] [transport.py] [_log()] starting thread (client mode): 0xb0fb6500
2026-04-13T03:05:34.818 [DEBUG] [Thread-200643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:05:34.835 [DEBUG] [Thread-200643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:05:34.836 [INFO] [Thread-200643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:05:34.848 [DEBUG] [Thread-200643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:05:34.848 [DEBUG] [Thread-200643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:05:34.848 [DEBUG] [Thread-200643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] client lang: <none>
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] server lang: <none>
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] kex follows: False
2026-04-13T03:05:34.849 [DEBUG] [Thread-200643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:05:34.850 [DEBUG] [Thread-200643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:05:34.850 [DEBUG] [Thread-200643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:05:34.850 [DEBUG] [Thread-200643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:05:34.850 [DEBUG] [Thread-200643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:05:34.850 [DEBUG] [Thread-200643] [transport.py] [_log()] Compression: none
2026-04-13T03:05:34.850 [DEBUG] [Thread-200643] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:05:34.906 [DEBUG] [Thread-200643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:05:34.907 [DEBUG] [Thread-200643] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:05:34.907 [DEBUG] [Thread-200643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:05:34.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:05:34.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:05:34.966 [DEBUG] [Thread-200643] [transport.py] [_log()] userauth is OK
2026-04-13T03:05:34.966 [DEBUG] [Thread-200643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:05:34.966 [DEBUG] [Thread-200643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:05:34.966 [DEBUG] [Thread-200643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:05:34.966 [DEBUG] [Thread-200643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:05:34.985 [INFO] [Thread-200643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:05:34.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:05:34.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:05:35.650 [DEBUG] [Thread-200645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:05:35.811 [DEBUG] [Thread-200643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:05:35.811 [DEBUG] [Thread-200643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:05:35.861 [DEBUG] [Thread-200643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:05:35.861 [DEBUG] [Thread-200643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:05:35.871 [DEBUG] [Thread-200643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:05:35.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:05:35.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:05:35.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:05:35.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:05:35.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:05:35.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:05:35.912 [DEBUG] [Thread-200643] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:05:39.791 [DEBUG] [Thread-200646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:05:54.840 [DEBUG] [Thread-200647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:06:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:06:05.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:06:05.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:06:07.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 5, 30), 3.40566, 79.6995, 0.0, 8.82324, 11.006, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:06:07.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:05:30
2026-04-13T03:06:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:06:07.769 [DEBUG] [Thread-200648] [transport.py] [_log()] starting thread (client mode): 0xae5b45b0
2026-04-13T03:06:07.770 [DEBUG] [Thread-200648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:06:07.789 [DEBUG] [Thread-200648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:06:07.789 [INFO] [Thread-200648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] client lang: <none>
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] server lang: <none>
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] kex follows: False
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:06:07.793 [DEBUG] [Thread-200648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:06:07.794 [DEBUG] [Thread-200648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:06:07.794 [DEBUG] [Thread-200648] [transport.py] [_log()] Compression: none
2026-04-13T03:06:07.794 [DEBUG] [Thread-200648] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:06:07.811 [DEBUG] [Thread-200648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:06:07.811 [DEBUG] [Thread-200648] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:06:07.812 [DEBUG] [Thread-200648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:06:07.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:06:07.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:06:07.814 [DEBUG] [Thread-200648] [transport.py] [_log()] userauth is OK
2026-04-13T03:06:07.814 [DEBUG] [Thread-200648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:06:07.814 [DEBUG] [Thread-200648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:06:07.814 [DEBUG] [Thread-200648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:06:07.814 [DEBUG] [Thread-200648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:06:07.826 [INFO] [Thread-200648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:06:07.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:06:08.635 [DEBUG] [Thread-200648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:06:08.635 [DEBUG] [Thread-200648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:06:08.636 [DEBUG] [Thread-200648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:06:08.676 [DEBUG] [Thread-200648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:06:08.676 [DEBUG] [Thread-200648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:06:08.679 [DEBUG] [Thread-200648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:06:08.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:06:08.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:06:08.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:06:08.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:06:08.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:06:08.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:06:08.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:06:08.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:06:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:06:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.045583 -999.00  +10.80   3.98     86   +8.50 1 2 1 2 1     0    0 2.99 44.25 Z.ESw 4.0 4.0 202.2 5.7 11.3 -21.7 11.2 -20.6 10.9 -18.7 11.2 -20.7
2026-04-13T03:06:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:06:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:06:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.045583
2026-04-13T03:06:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:06:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:06:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:06:08.705 [DEBUG] [Thread-200648] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:06:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:06:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:06:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:05:30', tmtdew=3.40566, humidity=79.6995, cloud=0.0, wind=8.82324, temperature=11.006, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:05:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.850249999999999, 3.521, nan, nan, nan, nan, nan, 0.6065000000000005, 0.11899999999999977, 0.08774999999999977, 1.0469999999999988, nan, nan, nan, nan, 0.05349999999999966, 0.05424999999999969, -0.018499999999999517, 0.051000000000000156, 0.25450000000000106, 0.3600000000000012, 0.5360000000000005, 0.15974999999999895], zp_timestamp='2026-04-13T01:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:06:08.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:06:08.793 [DEBUG] [Thread-200651] [transport.py] [_log()] starting thread (client mode): 0xae516950
2026-04-13T03:06:08.793 [DEBUG] [Thread-200651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:06:08.813 [DEBUG] [Thread-200651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:06:08.813 [INFO] [Thread-200651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] client lang: <none>
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] server lang: <none>
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] kex follows: False
2026-04-13T03:06:08.822 [DEBUG] [Thread-200651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:06:08.823 [DEBUG] [Thread-200651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:06:08.823 [DEBUG] [Thread-200651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:06:08.823 [DEBUG] [Thread-200651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:06:08.823 [DEBUG] [Thread-200651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:06:08.823 [DEBUG] [Thread-200651] [transport.py] [_log()] Compression: none
2026-04-13T03:06:08.823 [DEBUG] [Thread-200651] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:06:08.885 [DEBUG] [Thread-200651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:06:08.885 [DEBUG] [Thread-200651] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:06:08.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:06:08.886 [DEBUG] [Thread-200651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:06:08.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:06:08.942 [DEBUG] [Thread-200651] [transport.py] [_log()] userauth is OK
2026-04-13T03:06:08.943 [DEBUG] [Thread-200651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:06:08.943 [DEBUG] [Thread-200651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:06:08.943 [DEBUG] [Thread-200651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:06:08.943 [DEBUG] [Thread-200651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:06:08.962 [INFO] [Thread-200651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:06:08.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:06:08.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:06:09.790 [DEBUG] [Thread-200651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:06:09.790 [DEBUG] [Thread-200651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:06:09.839 [DEBUG] [Thread-200651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:06:09.840 [DEBUG] [Thread-200651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:06:09.849 [DEBUG] [Thread-200651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:06:09.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:06:09.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:06:09.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:06:09.877 [DEBUG] [Thread-200653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:06:09.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:06:09.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:06:09.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:06:09.888 [DEBUG] [Thread-200651] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:06:24.937 [DEBUG] [Thread-200654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:06:30.414 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:06:30.415 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:06:35.725 [DEBUG] [Thread-200655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:06:39.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:06:39.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:06:39.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:06:39.972 [DEBUG] [Thread-200656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:06:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 6, 5), 3.51247, 79.1024, 0.0, 8.77032, 11.1055, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:06:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:06:05
2026-04-13T03:06:41.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:06:41.733 [DEBUG] [Thread-200657] [transport.py] [_log()] starting thread (client mode): 0xb0f55600
2026-04-13T03:06:41.733 [DEBUG] [Thread-200657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:06:41.754 [DEBUG] [Thread-200657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:06:41.755 [INFO] [Thread-200657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] client lang: <none>
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] server lang: <none>
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] kex follows: False
2026-04-13T03:06:41.758 [DEBUG] [Thread-200657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:06:41.759 [DEBUG] [Thread-200657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:06:41.759 [DEBUG] [Thread-200657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:06:41.759 [DEBUG] [Thread-200657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:06:41.759 [DEBUG] [Thread-200657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:06:41.759 [DEBUG] [Thread-200657] [transport.py] [_log()] Compression: none
2026-04-13T03:06:41.759 [DEBUG] [Thread-200657] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:06:41.768 [DEBUG] [Thread-200657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:06:41.768 [DEBUG] [Thread-200657] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:06:41.769 [DEBUG] [Thread-200657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:06:41.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:06:41.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:06:41.771 [DEBUG] [Thread-200657] [transport.py] [_log()] userauth is OK
2026-04-13T03:06:41.771 [DEBUG] [Thread-200657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:06:41.771 [DEBUG] [Thread-200657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:06:41.771 [DEBUG] [Thread-200657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:06:41.771 [DEBUG] [Thread-200657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:06:41.796 [INFO] [Thread-200657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:06:41.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:06:42.398 [DEBUG] [Thread-200657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:06:42.399 [DEBUG] [Thread-200657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:06:42.399 [DEBUG] [Thread-200657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:06:42.439 [DEBUG] [Thread-200657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:06:42.439 [DEBUG] [Thread-200657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:06:42.442 [DEBUG] [Thread-200657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:06:42.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:06:42.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:06:42.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:06:42.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:06:42.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:06:42.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:06:42.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:06:42.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:06:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:06:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.045930 -999.00  +10.80   5.43     85   +8.50 1 2 1 2 1     0    0 3.13 49.88 Z.ESw 5.4 5.4 207.2 6.5 11.3 -21.7 11.2 -20.6 10.9 -18.6 11.2 -20.4
2026-04-13T03:06:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:06:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:06:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.045930
2026-04-13T03:06:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:06:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:06:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:06:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:06:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:06:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:06:05', tmtdew=3.51247, humidity=79.1024, cloud=0.0, wind=8.77032, temperature=11.1055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:06:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:06:42.471 [DEBUG] [Thread-200657] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:06:42.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:06:42.566 [DEBUG] [Thread-200660] [transport.py] [_log()] starting thread (client mode): 0xae5b45b0
2026-04-13T03:06:42.566 [DEBUG] [Thread-200660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:06:42.580 [DEBUG] [Thread-200660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:06:42.581 [INFO] [Thread-200660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:06:42.588 [DEBUG] [Thread-200660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:06:42.588 [DEBUG] [Thread-200660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:06:42.588 [DEBUG] [Thread-200660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:06:42.588 [DEBUG] [Thread-200660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:42.588 [DEBUG] [Thread-200660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] client lang: <none>
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] server lang: <none>
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] kex follows: False
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] Compression: none
2026-04-13T03:06:42.589 [DEBUG] [Thread-200660] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:06:42.647 [DEBUG] [Thread-200660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:06:42.647 [DEBUG] [Thread-200660] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:06:42.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:06:42.648 [DEBUG] [Thread-200660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:06:42.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:06:42.703 [DEBUG] [Thread-200660] [transport.py] [_log()] userauth is OK
2026-04-13T03:06:42.703 [DEBUG] [Thread-200660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:06:42.703 [DEBUG] [Thread-200660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:06:42.703 [DEBUG] [Thread-200660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:06:42.704 [DEBUG] [Thread-200660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:06:42.723 [INFO] [Thread-200660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:06:42.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:06:42.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:06:43.592 [DEBUG] [Thread-200660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:06:43.592 [DEBUG] [Thread-200660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:06:43.640 [DEBUG] [Thread-200660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:06:43.640 [DEBUG] [Thread-200660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:06:43.649 [DEBUG] [Thread-200660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:06:43.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:06:43.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:06:43.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:06:43.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:06:43.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:06:43.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:06:43.687 [DEBUG] [Thread-200660] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:06:55.009 [DEBUG] [Thread-200662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:07:10.074 [DEBUG] [Thread-200663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:07:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:07:13.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:07:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:07:14.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 6, 41), 2.86114, 82.4417, 0.0, 10.3759, 10.8443, 0, 1, 0, 2, 0, 0),)
2026-04-13T03:07:14.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:06:41
2026-04-13T03:07:15.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:07:15.472 [DEBUG] [Thread-200664] [transport.py] [_log()] starting thread (client mode): 0xb0fb78e0
2026-04-13T03:07:15.472 [DEBUG] [Thread-200664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:07:15.491 [DEBUG] [Thread-200664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:07:15.491 [INFO] [Thread-200664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] client lang: <none>
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] server lang: <none>
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] kex follows: False
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:07:15.494 [DEBUG] [Thread-200664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:07:15.495 [DEBUG] [Thread-200664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:07:15.495 [DEBUG] [Thread-200664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:07:15.495 [DEBUG] [Thread-200664] [transport.py] [_log()] Compression: none
2026-04-13T03:07:15.495 [DEBUG] [Thread-200664] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:07:15.513 [DEBUG] [Thread-200664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:07:15.513 [DEBUG] [Thread-200664] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:07:15.514 [DEBUG] [Thread-200664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:07:15.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:07:15.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:07:15.516 [DEBUG] [Thread-200664] [transport.py] [_log()] userauth is OK
2026-04-13T03:07:15.516 [DEBUG] [Thread-200664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:07:15.516 [DEBUG] [Thread-200664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:07:15.517 [DEBUG] [Thread-200664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:07:15.517 [DEBUG] [Thread-200664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:07:15.541 [INFO] [Thread-200664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:07:15.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:07:16.170 [DEBUG] [Thread-200664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:07:16.171 [DEBUG] [Thread-200664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:07:16.171 [DEBUG] [Thread-200664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:07:16.212 [DEBUG] [Thread-200664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:07:16.212 [DEBUG] [Thread-200664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:07:16.215 [DEBUG] [Thread-200664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:07:16.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:07:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:07:16.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:07:16.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:07:16.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:07:16.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:07:16.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:07:16.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:07:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:07:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.046277 -999.00  +10.80   4.64     85   +8.40 1 2 1 2 1     0    0 3.19 49.88 Z.ESw 4.6 4.6 207.1 6.2 11.3 -21.6 11.2 -20.6 10.9 -18.5 11.2 -20.7
2026-04-13T03:07:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:07:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:07:16.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.046277
2026-04-13T03:07:16.237 [DEBUG] [Thread-200664] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:07:16.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:07:16.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:07:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:07:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:07:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:07:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:06:41', tmtdew=2.86114, humidity=82.4417, cloud=0.0, wind=10.3759, temperature=10.8443, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:06:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:07:16.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:07:16.344 [DEBUG] [Thread-200667] [transport.py] [_log()] starting thread (client mode): 0xae5b4df0
2026-04-13T03:07:16.344 [DEBUG] [Thread-200667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:07:16.362 [DEBUG] [Thread-200667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:07:16.362 [INFO] [Thread-200667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:07:16.369 [DEBUG] [Thread-200667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] client lang: <none>
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] server lang: <none>
2026-04-13T03:07:16.370 [DEBUG] [Thread-200667] [transport.py] [_log()] kex follows: False
2026-04-13T03:07:16.371 [DEBUG] [Thread-200667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:07:16.371 [DEBUG] [Thread-200667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:07:16.371 [DEBUG] [Thread-200667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:07:16.371 [DEBUG] [Thread-200667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:07:16.371 [DEBUG] [Thread-200667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:07:16.371 [DEBUG] [Thread-200667] [transport.py] [_log()] Compression: none
2026-04-13T03:07:16.371 [DEBUG] [Thread-200667] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:07:16.429 [DEBUG] [Thread-200667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:07:16.429 [DEBUG] [Thread-200667] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:07:16.430 [DEBUG] [Thread-200667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:07:16.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:07:16.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:07:16.484 [DEBUG] [Thread-200667] [transport.py] [_log()] userauth is OK
2026-04-13T03:07:16.484 [DEBUG] [Thread-200667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:07:16.484 [DEBUG] [Thread-200667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:07:16.485 [DEBUG] [Thread-200667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:07:16.485 [DEBUG] [Thread-200667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:07:16.508 [INFO] [Thread-200667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:07:16.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:07:16.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:07:17.400 [DEBUG] [Thread-200667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:07:17.400 [DEBUG] [Thread-200667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:07:17.448 [DEBUG] [Thread-200667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:07:17.448 [DEBUG] [Thread-200667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:07:17.456 [DEBUG] [Thread-200667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:07:17.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:07:17.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:07:17.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:07:17.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:07:17.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:07:17.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:07:17.488 [DEBUG] [Thread-200667] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:07:25.114 [DEBUG] [Thread-200669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:07:30.621 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:07:30.622 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:07:35.783 [DEBUG] [Thread-200670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:07:40.167 [DEBUG] [Thread-200671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:07:47.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:07:47.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:07:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:07:48.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 7, 16), 3.8773, 77.19, 0.0, 8.84088, 11.1885, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:07:48.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:07:16
2026-04-13T03:07:49.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:07:49.279 [DEBUG] [Thread-200672] [transport.py] [_log()] starting thread (client mode): 0xb0fb60e0
2026-04-13T03:07:49.280 [DEBUG] [Thread-200672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:07:49.297 [DEBUG] [Thread-200672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:07:49.297 [INFO] [Thread-200672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:07:49.300 [DEBUG] [Thread-200672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] client lang: <none>
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] server lang: <none>
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] kex follows: False
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:07:49.301 [DEBUG] [Thread-200672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:07:49.302 [DEBUG] [Thread-200672] [transport.py] [_log()] Compression: none
2026-04-13T03:07:49.302 [DEBUG] [Thread-200672] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:07:49.319 [DEBUG] [Thread-200672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:07:49.320 [DEBUG] [Thread-200672] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:07:49.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:07:49.322 [DEBUG] [Thread-200672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:07:49.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:07:49.324 [DEBUG] [Thread-200672] [transport.py] [_log()] userauth is OK
2026-04-13T03:07:49.324 [DEBUG] [Thread-200672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:07:49.324 [DEBUG] [Thread-200672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:07:49.324 [DEBUG] [Thread-200672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:07:49.324 [DEBUG] [Thread-200672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:07:49.347 [INFO] [Thread-200672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:07:49.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:07:49.994 [DEBUG] [Thread-200672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:07:49.994 [DEBUG] [Thread-200672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:07:49.994 [DEBUG] [Thread-200672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:07:50.035 [DEBUG] [Thread-200672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:07:50.035 [DEBUG] [Thread-200672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:07:50.039 [DEBUG] [Thread-200672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:07:50.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:07:50.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:07:50.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:07:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:07:50.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:07:50.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:07:50.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:07:50.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:07:50.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:07:50.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.046624 -999.00  +10.80   4.74     84   +8.30 1 2 1 2 1     0    0 3.10 46.86 Z.ESw 4.7 4.7 215.6 6.3 11.4 -21.6 11.2 -20.6 10.9 -18.6 11.2 -20.4
2026-04-13T03:07:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:07:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:07:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.046624
2026-04-13T03:07:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:07:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:07:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:07:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:07:50.068 [DEBUG] [Thread-200672] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:07:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:07:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:07:16', tmtdew=3.8773, humidity=77.19, cloud=0.0, wind=8.84088, temperature=11.1885, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:07:08.314', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:07:50.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:07:50.162 [DEBUG] [Thread-200675] [transport.py] [_log()] starting thread (client mode): 0xae515120
2026-04-13T03:07:50.162 [DEBUG] [Thread-200675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:07:50.177 [DEBUG] [Thread-200675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:07:50.177 [INFO] [Thread-200675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] client lang: <none>
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] server lang: <none>
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] kex follows: False
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:07:50.185 [DEBUG] [Thread-200675] [transport.py] [_log()] Compression: none
2026-04-13T03:07:50.186 [DEBUG] [Thread-200675] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:07:50.245 [DEBUG] [Thread-200675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:07:50.246 [DEBUG] [Thread-200675] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:07:50.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:07:50.247 [DEBUG] [Thread-200675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:07:50.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:07:50.305 [DEBUG] [Thread-200675] [transport.py] [_log()] userauth is OK
2026-04-13T03:07:50.305 [DEBUG] [Thread-200675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:07:50.306 [DEBUG] [Thread-200675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:07:50.306 [DEBUG] [Thread-200675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:07:50.306 [DEBUG] [Thread-200675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:07:50.324 [INFO] [Thread-200675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:07:50.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:07:50.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:07:51.162 [DEBUG] [Thread-200675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:07:51.163 [DEBUG] [Thread-200675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:07:51.211 [DEBUG] [Thread-200675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:07:51.211 [DEBUG] [Thread-200675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:07:51.220 [DEBUG] [Thread-200675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:07:51.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:07:51.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:07:51.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:07:51.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:07:51.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:07:51.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:07:51.258 [DEBUG] [Thread-200675] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:07:55.204 [DEBUG] [Thread-200677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:10.268 [DEBUG] [Thread-200678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:21.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:08:21.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:08:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:08:22.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 7, 52), 3.21874, 80.4843, 0.0, 10.517, 11.0433, 0, 1, 0, 2, 0, 0),)
2026-04-13T03:08:22.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:07:52
2026-04-13T03:08:22.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:08:23.138 [DEBUG] [Thread-200679] [transport.py] [_log()] starting thread (client mode): 0xae5b2770
2026-04-13T03:08:23.138 [DEBUG] [Thread-200679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:08:23.158 [DEBUG] [Thread-200679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:08:23.158 [INFO] [Thread-200679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] client lang: <none>
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] server lang: <none>
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] kex follows: False
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] Compression: none
2026-04-13T03:08:23.161 [DEBUG] [Thread-200679] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:08:23.177 [DEBUG] [Thread-200679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:08:23.177 [DEBUG] [Thread-200679] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:08:23.178 [DEBUG] [Thread-200679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:08:23.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:08:23.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:08:23.179 [DEBUG] [Thread-200679] [transport.py] [_log()] userauth is OK
2026-04-13T03:08:23.180 [DEBUG] [Thread-200679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:08:23.180 [DEBUG] [Thread-200679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:08:23.180 [DEBUG] [Thread-200679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:08:23.180 [DEBUG] [Thread-200679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:08:23.198 [INFO] [Thread-200679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:08:23.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:08:23.829 [DEBUG] [Thread-200679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:08:23.830 [DEBUG] [Thread-200679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:08:23.830 [DEBUG] [Thread-200679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:08:23.871 [DEBUG] [Thread-200679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:08:23.871 [DEBUG] [Thread-200679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:08:23.875 [DEBUG] [Thread-200679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:08:23.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:08:23.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:08:23.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:08:23.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:08:23.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:08:23.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:08:23.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:08:23.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:08:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:08:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.046972 -999.00  +10.80   3.71     84   +8.20 1 2 1 2 1     0    0 3.24 51.43 Z.ESw 3.7 3.7 243.7 6.5 11.3 -21.8 11.2 -20.7 10.9 -18.5 11.2 -20.5
2026-04-13T03:08:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:08:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:08:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.046972
2026-04-13T03:08:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:08:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:08:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:08:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:08:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:08:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:07:52', tmtdew=3.21874, humidity=80.4843, cloud=0.0, wind=10.517, temperature=11.0433, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:07:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:08:23.902 [DEBUG] [Thread-200679] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:08:23.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:08:23.995 [DEBUG] [Thread-200682] [transport.py] [_log()] starting thread (client mode): 0xae5b2e00
2026-04-13T03:08:23.995 [DEBUG] [Thread-200682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:08:24.009 [DEBUG] [Thread-200682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:08:24.009 [INFO] [Thread-200682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] client lang: <none>
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] server lang: <none>
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] kex follows: False
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:08:24.017 [DEBUG] [Thread-200682] [transport.py] [_log()] Compression: none
2026-04-13T03:08:24.018 [DEBUG] [Thread-200682] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:08:24.076 [DEBUG] [Thread-200682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:08:24.076 [DEBUG] [Thread-200682] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:08:24.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:08:24.077 [DEBUG] [Thread-200682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:08:24.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:08:24.138 [DEBUG] [Thread-200682] [transport.py] [_log()] userauth is OK
2026-04-13T03:08:24.138 [DEBUG] [Thread-200682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:08:24.138 [DEBUG] [Thread-200682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:08:24.138 [DEBUG] [Thread-200682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:08:24.138 [DEBUG] [Thread-200682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:08:24.157 [INFO] [Thread-200682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:08:24.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:08:24.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:08:25.038 [DEBUG] [Thread-200682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:08:25.038 [DEBUG] [Thread-200682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:08:25.086 [DEBUG] [Thread-200682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:08:25.086 [DEBUG] [Thread-200682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:08:25.095 [DEBUG] [Thread-200682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:08:25.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:08:25.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:08:25.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:08:25.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:08:25.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:08:25.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:08:25.132 [DEBUG] [Thread-200682] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:08:25.309 [DEBUG] [Thread-200684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:30.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:30.829 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:35.843 [DEBUG] [Thread-200685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:40.361 [DEBUG] [Thread-200686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:08:55.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:08:55.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:08:55.397 [DEBUG] [Thread-200687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:08:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 8, 27), 4.18885, 75.3109, 0.0, 8.84088, 11.2883, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:08:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:08:27
2026-04-13T03:08:56.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:08:57.015 [DEBUG] [Thread-200688] [transport.py] [_log()] starting thread (client mode): 0xae5b32e0
2026-04-13T03:08:57.015 [DEBUG] [Thread-200688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:08:57.036 [DEBUG] [Thread-200688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:08:57.036 [INFO] [Thread-200688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:08:57.039 [DEBUG] [Thread-200688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:08:57.039 [DEBUG] [Thread-200688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:08:57.039 [DEBUG] [Thread-200688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:08:57.039 [DEBUG] [Thread-200688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] client lang: <none>
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] server lang: <none>
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] kex follows: False
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] Compression: none
2026-04-13T03:08:57.040 [DEBUG] [Thread-200688] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:08:57.058 [DEBUG] [Thread-200688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:08:57.059 [DEBUG] [Thread-200688] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:08:57.059 [DEBUG] [Thread-200688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:08:57.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:08:57.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:08:57.062 [DEBUG] [Thread-200688] [transport.py] [_log()] userauth is OK
2026-04-13T03:08:57.062 [DEBUG] [Thread-200688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:08:57.062 [DEBUG] [Thread-200688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:08:57.062 [DEBUG] [Thread-200688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:08:57.062 [DEBUG] [Thread-200688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:08:57.080 [INFO] [Thread-200688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:08:57.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:08:57.692 [DEBUG] [Thread-200688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:08:57.693 [DEBUG] [Thread-200688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:08:57.693 [DEBUG] [Thread-200688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:08:57.733 [DEBUG] [Thread-200688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:08:57.733 [DEBUG] [Thread-200688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:08:57.736 [DEBUG] [Thread-200688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:08:57.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:08:57.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:08:57.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:08:57.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:08:57.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:08:57.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:08:57.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:08:57.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:08:57.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:08:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.047666 -999.00  +10.80   5.17     83   +8.20 1 2 1 2 1     0    0 3.46 56.01 ZNES. 5.2 5.2 204.4 7.0 11.4 -21.6 11.2 -20.6 11.0 -18.7 11.2 -20.6
2026-04-13T03:08:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:08:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:08:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.047666
2026-04-13T03:08:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:08:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:08:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:08:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:08:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:08:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:08:27', tmtdew=4.18885, humidity=75.3109, cloud=0.0, wind=8.84088, temperature=11.2883, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:08:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:08:57.755 [DEBUG] [Thread-200688] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:08:57.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:08:57.857 [DEBUG] [Thread-200691] [transport.py] [_log()] starting thread (client mode): 0xae5b1de0
2026-04-13T03:08:57.857 [DEBUG] [Thread-200691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:08:57.871 [DEBUG] [Thread-200691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:08:57.871 [INFO] [Thread-200691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:08:57.879 [DEBUG] [Thread-200691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:08:57.879 [DEBUG] [Thread-200691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:08:57.879 [DEBUG] [Thread-200691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:08:57.879 [DEBUG] [Thread-200691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] client lang: <none>
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] server lang: <none>
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] kex follows: False
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] Compression: none
2026-04-13T03:08:57.880 [DEBUG] [Thread-200691] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:08:57.938 [DEBUG] [Thread-200691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:08:57.938 [DEBUG] [Thread-200691] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:08:57.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:08:57.939 [DEBUG] [Thread-200691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:08:57.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:08:57.995 [DEBUG] [Thread-200691] [transport.py] [_log()] userauth is OK
2026-04-13T03:08:57.995 [DEBUG] [Thread-200691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:08:57.995 [DEBUG] [Thread-200691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:08:57.995 [DEBUG] [Thread-200691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:08:57.995 [DEBUG] [Thread-200691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:08:58.013 [INFO] [Thread-200691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:08:58.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:08:58.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:08:58.845 [DEBUG] [Thread-200691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:08:58.846 [DEBUG] [Thread-200691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:08:58.894 [DEBUG] [Thread-200691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:08:58.894 [DEBUG] [Thread-200691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:08:58.904 [DEBUG] [Thread-200691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:08:58.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:08:58.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:08:58.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:08:58.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:08:58.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:08:58.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:08:58.940 [DEBUG] [Thread-200691] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:09:10.434 [DEBUG] [Thread-200693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:09:25.485 [DEBUG] [Thread-200694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:09:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:09:28.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:09:28.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:09:30.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 9, 3), 4.23525, 75.062, 0.0, 8.91144, 11.3048, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:09:30.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:09:03
2026-04-13T03:09:30.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:09:30.799 [DEBUG] [Thread-200695] [transport.py] [_log()] starting thread (client mode): 0xae5b0cd0
2026-04-13T03:09:30.799 [DEBUG] [Thread-200695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:09:30.820 [DEBUG] [Thread-200695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:09:30.820 [INFO] [Thread-200695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:09:30.823 [DEBUG] [Thread-200695] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:09:30.823 [DEBUG] [Thread-200695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:09:30.823 [DEBUG] [Thread-200695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:09:30.823 [DEBUG] [Thread-200695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:09:30.823 [DEBUG] [Thread-200695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:09:30.823 [DEBUG] [Thread-200695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] client lang: <none>
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] server lang: <none>
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] kex follows: False
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] Compression: none
2026-04-13T03:09:30.824 [DEBUG] [Thread-200695] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:09:30.841 [DEBUG] [Thread-200695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:09:30.842 [DEBUG] [Thread-200695] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:09:30.842 [DEBUG] [Thread-200695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:09:30.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:09:30.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:09:30.844 [DEBUG] [Thread-200695] [transport.py] [_log()] userauth is OK
2026-04-13T03:09:30.844 [DEBUG] [Thread-200695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:09:30.844 [DEBUG] [Thread-200695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:09:30.844 [DEBUG] [Thread-200695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:09:30.844 [DEBUG] [Thread-200695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:09:30.868 [INFO] [Thread-200695] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:09:30.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:09:31.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:09:31.033 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:09:31.478 [DEBUG] [Thread-200695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:09:31.478 [DEBUG] [Thread-200695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:09:31.479 [DEBUG] [Thread-200695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:09:31.519 [DEBUG] [Thread-200695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:09:31.519 [DEBUG] [Thread-200695] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:09:31.523 [DEBUG] [Thread-200695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:09:31.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:09:31.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:09:31.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:09:31.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:09:31.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:09:31.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:09:31.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:09:31.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:09:31.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:09:31.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.048013 -999.00  +10.80   5.12     83   +8.20 1 2 1 2 1     0    0 3.58 59.55 ZNESw 5.1 5.1 199.8 6.7 11.3 -21.8 11.2 -20.6 10.9 -18.6 11.2 -20.5
2026-04-13T03:09:31.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:09:31.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:09:31.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.048013
2026-04-13T03:09:31.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:09:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:09:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:09:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:09:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:09:31.550 [DEBUG] [Thread-200695] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:09:31.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:09:03', tmtdew=4.23525, humidity=75.062, cloud=0.0, wind=8.91144, temperature=11.3048, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:09:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:05:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:09:31.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:09:31.644 [DEBUG] [Thread-200698] [transport.py] [_log()] starting thread (client mode): 0xae5b0670
2026-04-13T03:09:31.644 [DEBUG] [Thread-200698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:09:31.659 [DEBUG] [Thread-200698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:09:31.659 [INFO] [Thread-200698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:09:31.666 [DEBUG] [Thread-200698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] client lang: <none>
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] server lang: <none>
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] kex follows: False
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] Compression: none
2026-04-13T03:09:31.667 [DEBUG] [Thread-200698] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:09:31.727 [DEBUG] [Thread-200698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:09:31.727 [DEBUG] [Thread-200698] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:09:31.728 [DEBUG] [Thread-200698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:09:31.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:09:31.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:09:31.783 [DEBUG] [Thread-200698] [transport.py] [_log()] userauth is OK
2026-04-13T03:09:31.783 [DEBUG] [Thread-200698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:09:31.784 [DEBUG] [Thread-200698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:09:31.784 [DEBUG] [Thread-200698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:09:31.784 [DEBUG] [Thread-200698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:09:31.804 [INFO] [Thread-200698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:09:31.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:09:31.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:09:32.634 [DEBUG] [Thread-200698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:09:32.634 [DEBUG] [Thread-200698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:09:32.682 [DEBUG] [Thread-200698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:09:32.682 [DEBUG] [Thread-200698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:09:32.692 [DEBUG] [Thread-200698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:09:32.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:09:32.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:09:32.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:09:32.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:09:32.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:09:32.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:09:32.729 [DEBUG] [Thread-200698] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:09:35.899 [DEBUG] [Thread-200700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:09:40.521 [DEBUG] [Thread-200701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:09:55.575 [DEBUG] [Thread-200702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:10:02.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:10:02.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:10:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:10:04.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 9, 38), 3.63567, 78.2615, 0.0, 10.6582, 11.2756, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:10:04.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:09:38
2026-04-13T03:10:04.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:10:04.565 [DEBUG] [Thread-200703] [transport.py] [_log()] starting thread (client mode): 0xae5b35e0
2026-04-13T03:10:04.565 [DEBUG] [Thread-200703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:10:04.585 [DEBUG] [Thread-200703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:10:04.585 [INFO] [Thread-200703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:10:04.588 [DEBUG] [Thread-200703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:10:04.588 [DEBUG] [Thread-200703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] client lang: <none>
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] server lang: <none>
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] kex follows: False
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:10:04.589 [DEBUG] [Thread-200703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:10:04.590 [DEBUG] [Thread-200703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:10:04.590 [DEBUG] [Thread-200703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:10:04.590 [DEBUG] [Thread-200703] [transport.py] [_log()] Compression: none
2026-04-13T03:10:04.590 [DEBUG] [Thread-200703] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:10:04.598 [DEBUG] [Thread-200703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:10:04.598 [DEBUG] [Thread-200703] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:10:04.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:10:04.599 [DEBUG] [Thread-200703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:10:04.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:10:04.601 [DEBUG] [Thread-200703] [transport.py] [_log()] userauth is OK
2026-04-13T03:10:04.601 [DEBUG] [Thread-200703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:10:04.601 [DEBUG] [Thread-200703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:10:04.601 [DEBUG] [Thread-200703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:10:04.601 [DEBUG] [Thread-200703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:10:04.613 [INFO] [Thread-200703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:10:04.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:10:05.355 [DEBUG] [Thread-200703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:10:05.355 [DEBUG] [Thread-200703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:10:05.355 [DEBUG] [Thread-200703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:10:05.396 [DEBUG] [Thread-200703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:10:05.396 [DEBUG] [Thread-200703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:10:05.399 [DEBUG] [Thread-200703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:10:05.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:10:05.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:10:05.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:10:05.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:10:05.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:10:05.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:10:05.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.048360 -999.00  +10.80   5.50     83   +8.10 1 2 1 2 1     0    0 3.51 57.54 ZNESw 5.5 5.5 218.4 6.4 11.3 -21.7 11.2 -20.6 10.9 -18.8 11.2 -20.7
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.048360
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:10:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:09:38', tmtdew=3.63567, humidity=78.2615, cloud=0.0, wind=10.6582, temperature=11.2756, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:09:38.304', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:10:05.418 [DEBUG] [Thread-200703] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:10:05.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:10:05.499 [DEBUG] [Thread-200706] [transport.py] [_log()] starting thread (client mode): 0xae5b14e0
2026-04-13T03:10:05.499 [DEBUG] [Thread-200706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:10:05.517 [DEBUG] [Thread-200706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:10:05.517 [INFO] [Thread-200706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:10:05.524 [DEBUG] [Thread-200706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:10:05.525 [DEBUG] [Thread-200706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:10:05.525 [DEBUG] [Thread-200706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:10:05.525 [DEBUG] [Thread-200706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] client lang: <none>
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] server lang: <none>
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] kex follows: False
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] Compression: none
2026-04-13T03:10:05.526 [DEBUG] [Thread-200706] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:10:05.584 [DEBUG] [Thread-200706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:10:05.584 [DEBUG] [Thread-200706] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:10:05.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:10:05.586 [DEBUG] [Thread-200706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:10:05.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:10:05.639 [DEBUG] [Thread-200706] [transport.py] [_log()] userauth is OK
2026-04-13T03:10:05.640 [DEBUG] [Thread-200706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:10:05.640 [DEBUG] [Thread-200706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:10:05.640 [DEBUG] [Thread-200706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:10:05.640 [DEBUG] [Thread-200706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:10:05.659 [INFO] [Thread-200706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:10:05.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:10:05.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:10:06.532 [DEBUG] [Thread-200706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:10:06.533 [DEBUG] [Thread-200706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:10:06.581 [DEBUG] [Thread-200706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:10:06.581 [DEBUG] [Thread-200706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:10:06.590 [DEBUG] [Thread-200706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:10:06.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:10:06.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:10:06.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:10:06.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:10:06.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:10:06.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:10:06.628 [DEBUG] [Thread-200706] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:10:10.613 [DEBUG] [Thread-200708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:10:25.674 [DEBUG] [Thread-200709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:10:31.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:10:31.240 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:10:35.973 [DEBUG] [Thread-200710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:10:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:10:36.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:10:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:10:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 10, 14), 4.65723, 73.1663, 0.0, 8.99964, 11.5041, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:10:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:10:14
2026-04-13T03:10:38.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:10:38.489 [DEBUG] [Thread-200711] [transport.py] [_log()] starting thread (client mode): 0xae5b2da0
2026-04-13T03:10:38.489 [DEBUG] [Thread-200711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:10:38.509 [DEBUG] [Thread-200711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:10:38.509 [INFO] [Thread-200711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] client lang: <none>
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] server lang: <none>
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] kex follows: False
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] Compression: none
2026-04-13T03:10:38.513 [DEBUG] [Thread-200711] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:10:38.530 [DEBUG] [Thread-200711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:10:38.531 [DEBUG] [Thread-200711] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:10:38.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:10:38.532 [DEBUG] [Thread-200711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:10:38.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:10:38.534 [DEBUG] [Thread-200711] [transport.py] [_log()] userauth is OK
2026-04-13T03:10:38.534 [DEBUG] [Thread-200711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:10:38.534 [DEBUG] [Thread-200711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:10:38.534 [DEBUG] [Thread-200711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:10:38.534 [DEBUG] [Thread-200711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:10:38.558 [INFO] [Thread-200711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:10:38.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:10:39.143 [DEBUG] [Thread-200711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:10:39.143 [DEBUG] [Thread-200711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:10:39.143 [DEBUG] [Thread-200711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:10:39.184 [DEBUG] [Thread-200711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:10:39.184 [DEBUG] [Thread-200711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:10:39.187 [DEBUG] [Thread-200711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:10:39.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:10:39.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:10:39.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:10:39.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:10:39.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:10:39.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:10:39.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:10:39.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:10:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:10:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.048707 -999.00  +10.80   4.97     82   +8.00 1 2 1 2 1     0    0 3.72 63.50 ZNESw 5.0 5.0 213.4 6.6 11.3 -21.7 11.2 -20.6 10.9 -18.7 11.2 -20.4
2026-04-13T03:10:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:10:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:10:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.048707
2026-04-13T03:10:39.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:10:39.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:10:39.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:10:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:10:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:10:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:10:14', tmtdew=4.65723, humidity=73.1663, cloud=0.0, wind=8.99964, temperature=11.5041, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:10:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:10:39.214 [DEBUG] [Thread-200711] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:10:39.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:10:39.308 [DEBUG] [Thread-200714] [transport.py] [_log()] starting thread (client mode): 0xae5b3e50
2026-04-13T03:10:39.308 [DEBUG] [Thread-200714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:10:39.322 [DEBUG] [Thread-200714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:10:39.323 [INFO] [Thread-200714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:10:39.330 [DEBUG] [Thread-200714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:10:39.330 [DEBUG] [Thread-200714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:10:39.330 [DEBUG] [Thread-200714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:10:39.330 [DEBUG] [Thread-200714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:39.330 [DEBUG] [Thread-200714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] client lang: <none>
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] server lang: <none>
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] kex follows: False
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] Compression: none
2026-04-13T03:10:39.331 [DEBUG] [Thread-200714] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:10:39.388 [DEBUG] [Thread-200714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:10:39.389 [DEBUG] [Thread-200714] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:10:39.390 [DEBUG] [Thread-200714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:10:39.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:10:39.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:10:39.445 [DEBUG] [Thread-200714] [transport.py] [_log()] userauth is OK
2026-04-13T03:10:39.445 [DEBUG] [Thread-200714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:10:39.445 [DEBUG] [Thread-200714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:10:39.445 [DEBUG] [Thread-200714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:10:39.445 [DEBUG] [Thread-200714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:10:39.464 [INFO] [Thread-200714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:10:39.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:10:39.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:10:40.284 [DEBUG] [Thread-200714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:10:40.284 [DEBUG] [Thread-200714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:10:40.332 [DEBUG] [Thread-200714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:10:40.332 [DEBUG] [Thread-200714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:10:40.341 [DEBUG] [Thread-200714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:10:40.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:10:40.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:10:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:10:40.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:10:40.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:10:40.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:10:40.378 [DEBUG] [Thread-200714] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:10:40.713 [DEBUG] [Thread-200716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:10:55.764 [DEBUG] [Thread-200717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:11:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:11:10.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:11:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:11:10.801 [DEBUG] [Thread-200718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:11:11.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 10, 50), 3.89737, 76.9013, 0.0, 10.9757, 11.4414, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:11:11.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:10:50
2026-04-13T03:11:12.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:11:12.212 [DEBUG] [Thread-200719] [transport.py] [_log()] starting thread (client mode): 0xae5b3ee0
2026-04-13T03:11:12.212 [DEBUG] [Thread-200719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:11:12.232 [DEBUG] [Thread-200719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:11:12.233 [INFO] [Thread-200719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:11:12.236 [DEBUG] [Thread-200719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:11:12.242 [DEBUG] [Thread-200719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:11:12.242 [DEBUG] [Thread-200719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:11:12.242 [DEBUG] [Thread-200719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:12.242 [DEBUG] [Thread-200719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:12.242 [DEBUG] [Thread-200719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:12.242 [DEBUG] [Thread-200719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] client lang: <none>
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] server lang: <none>
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] kex follows: False
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:11:12.243 [DEBUG] [Thread-200719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:11:12.244 [DEBUG] [Thread-200719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:11:12.244 [DEBUG] [Thread-200719] [transport.py] [_log()] Compression: none
2026-04-13T03:11:12.244 [DEBUG] [Thread-200719] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:11:12.265 [DEBUG] [Thread-200719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:11:12.265 [DEBUG] [Thread-200719] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:11:12.266 [DEBUG] [Thread-200719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:11:12.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:11:12.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:11:12.268 [DEBUG] [Thread-200719] [transport.py] [_log()] userauth is OK
2026-04-13T03:11:12.268 [DEBUG] [Thread-200719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:11:12.268 [DEBUG] [Thread-200719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:11:12.268 [DEBUG] [Thread-200719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:11:12.268 [DEBUG] [Thread-200719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:11:12.293 [INFO] [Thread-200719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:11:12.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:11:12.910 [DEBUG] [Thread-200719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:11:12.910 [DEBUG] [Thread-200719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:11:12.910 [DEBUG] [Thread-200719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:11:12.951 [DEBUG] [Thread-200719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:11:12.951 [DEBUG] [Thread-200719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:11:12.955 [DEBUG] [Thread-200719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:11:12.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:11:12.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:11:12.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:11:12.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:11:12.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:11:12.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:11:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:11:12.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:11:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:11:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.049055 -999.00  +10.80   3.86     82   +7.90 1 2 1 2 1     0    0 3.98 70.12 ZNESw 3.9 3.9 209.2 7.5 11.3 -21.7 11.2 -20.6 11.0 -18.8 11.2 -20.7
2026-04-13T03:11:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:11:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:11:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.049055
2026-04-13T03:11:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:11:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:11:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:11:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:11:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:11:12.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:10:50', tmtdew=3.89737, humidity=76.9013, cloud=0.0, wind=10.9757, temperature=11.4414, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:10:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:11:12.982 [DEBUG] [Thread-200719] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:11:13.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:11:13.079 [DEBUG] [Thread-200722] [transport.py] [_log()] starting thread (client mode): 0xae5b13f0
2026-04-13T03:11:13.079 [DEBUG] [Thread-200722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:11:13.094 [DEBUG] [Thread-200722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:11:13.094 [INFO] [Thread-200722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:11:13.101 [DEBUG] [Thread-200722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] client lang: <none>
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] server lang: <none>
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] kex follows: False
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] Compression: none
2026-04-13T03:11:13.102 [DEBUG] [Thread-200722] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:11:13.161 [DEBUG] [Thread-200722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:11:13.161 [DEBUG] [Thread-200722] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:11:13.162 [DEBUG] [Thread-200722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:11:13.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:11:13.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:11:13.217 [DEBUG] [Thread-200722] [transport.py] [_log()] userauth is OK
2026-04-13T03:11:13.217 [DEBUG] [Thread-200722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:11:13.217 [DEBUG] [Thread-200722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:11:13.217 [DEBUG] [Thread-200722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:11:13.217 [DEBUG] [Thread-200722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:11:13.236 [INFO] [Thread-200722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:11:13.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:11:13.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:11:14.056 [DEBUG] [Thread-200722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:11:14.056 [DEBUG] [Thread-200722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:11:14.104 [DEBUG] [Thread-200722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:11:14.104 [DEBUG] [Thread-200722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:11:14.113 [DEBUG] [Thread-200722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:11:14.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:11:14.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:11:14.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:11:14.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:11:14.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:11:14.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:11:14.151 [DEBUG] [Thread-200722] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:11:25.838 [DEBUG] [Thread-200724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:11:31.443 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:11:31.444 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:11:36.029 [DEBUG] [Thread-200725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:11:40.904 [DEBUG] [Thread-200726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:11:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:11:44.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:11:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:11:45.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 11, 25), 4.7235, 72.818, 0.0, 9.12312, 11.5041, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:11:45.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:11:25
2026-04-13T03:11:45.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:11:45.973 [DEBUG] [Thread-200727] [transport.py] [_log()] starting thread (client mode): 0xae5b2ec0
2026-04-13T03:11:45.973 [DEBUG] [Thread-200727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:11:45.989 [DEBUG] [Thread-200727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:11:45.990 [INFO] [Thread-200727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] client lang: <none>
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] server lang: <none>
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] kex follows: False
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:11:45.992 [DEBUG] [Thread-200727] [transport.py] [_log()] Compression: none
2026-04-13T03:11:45.993 [DEBUG] [Thread-200727] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:11:46.006 [DEBUG] [Thread-200727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:11:46.007 [DEBUG] [Thread-200727] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:11:46.007 [DEBUG] [Thread-200727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:11:46.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:11:46.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:11:46.009 [DEBUG] [Thread-200727] [transport.py] [_log()] userauth is OK
2026-04-13T03:11:46.010 [DEBUG] [Thread-200727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:11:46.010 [DEBUG] [Thread-200727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:11:46.010 [DEBUG] [Thread-200727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:11:46.010 [DEBUG] [Thread-200727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:11:46.048 [INFO] [Thread-200727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:11:46.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:11:46.618 [DEBUG] [Thread-200727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:11:46.619 [DEBUG] [Thread-200727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:11:46.619 [DEBUG] [Thread-200727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:11:46.660 [DEBUG] [Thread-200727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:11:46.660 [DEBUG] [Thread-200727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:11:46.663 [DEBUG] [Thread-200727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:11:46.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:11:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:11:46.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:11:46.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:11:46.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:11:46.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:11:46.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:11:46.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:11:46.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:11:46.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.049402 -999.00  +10.80   5.80     82   +8.00 1 2 1 2 1     0    0 4.00 70.47 ZNESw 5.8 5.8 202.0 7.2 11.4 -21.8 11.2 -20.5 11.0 -18.7 11.2 -20.7
2026-04-13T03:11:46.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:11:46.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:11:46.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.049402
2026-04-13T03:11:46.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:11:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:11:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:11:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:11:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:11:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:11:25', tmtdew=4.7235, humidity=72.818, cloud=0.0, wind=9.12312, temperature=11.5041, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:11:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:11:46.685 [DEBUG] [Thread-200727] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:11:46.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:11:46.779 [DEBUG] [Thread-200730] [transport.py] [_log()] starting thread (client mode): 0xae5b1480
2026-04-13T03:11:46.779 [DEBUG] [Thread-200730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:11:46.797 [DEBUG] [Thread-200730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:11:46.797 [INFO] [Thread-200730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:11:46.808 [DEBUG] [Thread-200730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:11:46.808 [DEBUG] [Thread-200730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:11:46.808 [DEBUG] [Thread-200730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] client lang: <none>
2026-04-13T03:11:46.809 [DEBUG] [Thread-200730] [transport.py] [_log()] server lang: <none>
2026-04-13T03:11:46.810 [DEBUG] [Thread-200730] [transport.py] [_log()] kex follows: False
2026-04-13T03:11:46.810 [DEBUG] [Thread-200730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:11:46.810 [DEBUG] [Thread-200730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:11:46.810 [DEBUG] [Thread-200730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:11:46.810 [DEBUG] [Thread-200730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:11:46.810 [DEBUG] [Thread-200730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:11:46.810 [DEBUG] [Thread-200730] [transport.py] [_log()] Compression: none
2026-04-13T03:11:46.811 [DEBUG] [Thread-200730] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:11:46.869 [DEBUG] [Thread-200730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:11:46.870 [DEBUG] [Thread-200730] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:11:46.871 [DEBUG] [Thread-200730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:11:46.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:11:46.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:11:46.925 [DEBUG] [Thread-200730] [transport.py] [_log()] userauth is OK
2026-04-13T03:11:46.926 [DEBUG] [Thread-200730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:11:46.926 [DEBUG] [Thread-200730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:11:46.927 [DEBUG] [Thread-200730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:11:46.927 [DEBUG] [Thread-200730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:11:46.950 [INFO] [Thread-200730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:11:46.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:11:46.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:11:47.790 [DEBUG] [Thread-200730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:11:47.790 [DEBUG] [Thread-200730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:11:47.838 [DEBUG] [Thread-200730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:11:47.839 [DEBUG] [Thread-200730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:11:47.847 [DEBUG] [Thread-200730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:11:47.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:11:47.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:11:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:11:47.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:11:47.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:11:47.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:11:47.880 [DEBUG] [Thread-200730] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:11:55.942 [DEBUG] [Thread-200732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:12:10.996 [DEBUG] [Thread-200733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:12:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:12:17.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:12:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:12:19.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 12), 4.74355, 72.7184, 0.0, 9.19368, 11.5373, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:12:19.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:12:00
2026-04-13T03:12:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:12:19.746 [DEBUG] [Thread-200734] [transport.py] [_log()] starting thread (client mode): 0xae5b0130
2026-04-13T03:12:19.746 [DEBUG] [Thread-200734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:12:19.767 [DEBUG] [Thread-200734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:12:19.767 [INFO] [Thread-200734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:12:19.768 [DEBUG] [Thread-200734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:12:19.768 [DEBUG] [Thread-200734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:12:19.768 [DEBUG] [Thread-200734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:12:19.768 [DEBUG] [Thread-200734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:19.768 [DEBUG] [Thread-200734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] client lang: <none>
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] server lang: <none>
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] kex follows: False
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] Compression: none
2026-04-13T03:12:19.769 [DEBUG] [Thread-200734] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:12:19.778 [DEBUG] [Thread-200734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:12:19.778 [DEBUG] [Thread-200734] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:12:19.779 [DEBUG] [Thread-200734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:12:19.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:12:19.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:12:19.781 [DEBUG] [Thread-200734] [transport.py] [_log()] userauth is OK
2026-04-13T03:12:19.781 [DEBUG] [Thread-200734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:12:19.781 [DEBUG] [Thread-200734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:12:19.781 [DEBUG] [Thread-200734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:12:19.781 [DEBUG] [Thread-200734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:12:19.804 [INFO] [Thread-200734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:12:19.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:12:20.420 [DEBUG] [Thread-200734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:12:20.420 [DEBUG] [Thread-200734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:12:20.421 [DEBUG] [Thread-200734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:12:20.461 [DEBUG] [Thread-200734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:12:20.461 [DEBUG] [Thread-200734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:12:20.464 [DEBUG] [Thread-200734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:12:20.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:12:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:12:20.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:12:20.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:12:20.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:12:20.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:12:20.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:12:20.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:12:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:12:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.050097 -999.00  +10.90   5.69     81   +7.90 1 2 1 2 1     0    0 3.95 66.95 .NESw 5.7 5.7 203.5 7.4 11.4 -21.6 11.2 -20.6 11.0 -18.5 11.2 -20.7
2026-04-13T03:12:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:12:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:12:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.050097
2026-04-13T03:12:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:12:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:12:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:12:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:12:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:12:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:12:00', tmtdew=4.74355, humidity=72.7184, cloud=0.0, wind=9.19368, temperature=11.5373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:12:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[0.7547499999999996, -0.41825000000000045, nan, 1.0624999999999991, nan, nan, 0.5540000000000003, nan, nan, nan, 1.0342499999999992, 2.4530000000000003, nan, nan, 0.34249999999999936, nan, nan, 0.7305000000000001, 0.14550000000000018, 0.09774999999999778, 1.2369999999999983, nan, nan, 2.8817500000000003, 2.2529999999999992, 0.08900000000000041, 0.05775000000000041, 0.03950000000000031, 0.1120000000000001, 0.2900000000000009, 0.4640000000000004, 0.6250000000000009, 0.16274999999999906], zp_timestamp='2026-04-13T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:12:20.488 [DEBUG] [Thread-200734] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:12:20.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:12:20.589 [DEBUG] [Thread-200737] [transport.py] [_log()] starting thread (client mode): 0xae5b03d0
2026-04-13T03:12:20.589 [DEBUG] [Thread-200737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:12:20.603 [DEBUG] [Thread-200737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:12:20.604 [INFO] [Thread-200737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:12:20.611 [DEBUG] [Thread-200737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:12:20.612 [DEBUG] [Thread-200737] [transport.py] [_log()] client lang: <none>
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] server lang: <none>
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] kex follows: False
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:12:20.613 [DEBUG] [Thread-200737] [transport.py] [_log()] Compression: none
2026-04-13T03:12:20.614 [DEBUG] [Thread-200737] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:12:20.670 [DEBUG] [Thread-200737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:12:20.671 [DEBUG] [Thread-200737] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:12:20.671 [DEBUG] [Thread-200737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:12:20.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:12:20.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:12:20.726 [DEBUG] [Thread-200737] [transport.py] [_log()] userauth is OK
2026-04-13T03:12:20.727 [DEBUG] [Thread-200737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:12:20.727 [DEBUG] [Thread-200737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:12:20.727 [DEBUG] [Thread-200737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:12:20.727 [DEBUG] [Thread-200737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:12:20.746 [INFO] [Thread-200737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:12:20.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:12:20.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:12:21.590 [DEBUG] [Thread-200737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:12:21.590 [DEBUG] [Thread-200737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:12:21.638 [DEBUG] [Thread-200737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:12:21.638 [DEBUG] [Thread-200737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:12:21.647 [DEBUG] [Thread-200737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:12:21.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:12:21.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:12:21.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:12:21.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:12:21.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:12:21.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:12:21.685 [DEBUG] [Thread-200737] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:12:26.034 [DEBUG] [Thread-200739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:12:31.649 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:12:31.651 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:12:36.086 [DEBUG] [Thread-200740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:12:41.087 [DEBUG] [Thread-200741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:12:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:12:51.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:12:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:12:52.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 12, 36), 4.03801, 76.1715, 0.0, 11.1874, 11.4746, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:12:52.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:12:36
2026-04-13T03:12:53.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:12:53.456 [DEBUG] [Thread-200742] [transport.py] [_log()] starting thread (client mode): 0xb0fb6020
2026-04-13T03:12:53.456 [DEBUG] [Thread-200742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:12:53.475 [DEBUG] [Thread-200742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:12:53.475 [INFO] [Thread-200742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:12:53.477 [DEBUG] [Thread-200742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:12:53.477 [DEBUG] [Thread-200742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:12:53.477 [DEBUG] [Thread-200742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:12:53.477 [DEBUG] [Thread-200742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] client lang: <none>
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] server lang: <none>
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] kex follows: False
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] Compression: none
2026-04-13T03:12:53.478 [DEBUG] [Thread-200742] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:12:53.487 [DEBUG] [Thread-200742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:12:53.487 [DEBUG] [Thread-200742] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:12:53.487 [DEBUG] [Thread-200742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:12:53.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:12:53.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:12:53.489 [DEBUG] [Thread-200742] [transport.py] [_log()] userauth is OK
2026-04-13T03:12:53.489 [DEBUG] [Thread-200742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:12:53.489 [DEBUG] [Thread-200742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:12:53.489 [DEBUG] [Thread-200742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:12:53.489 [DEBUG] [Thread-200742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:12:53.518 [INFO] [Thread-200742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:12:53.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:12:54.088 [DEBUG] [Thread-200742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:12:54.088 [DEBUG] [Thread-200742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:12:54.089 [DEBUG] [Thread-200742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:12:54.130 [DEBUG] [Thread-200742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:12:54.130 [DEBUG] [Thread-200742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:12:54.133 [DEBUG] [Thread-200742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:12:54.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:12:54.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:12:54.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:12:54.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:12:54.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:12:54.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:12:54.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:12:54.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:12:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:12:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.050444 -999.00  +10.90   6.04     81   +7.90 1 2 1 2 1     0    0 4.00 68.16 .NESW 6.0 6.0 206.6 7.9 11.4 -21.7 11.2 -20.6 11.0 -18.7 11.2 -20.7
2026-04-13T03:12:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:12:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:12:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.050444
2026-04-13T03:12:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:12:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:12:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:12:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:12:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:12:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:12:36', tmtdew=4.03801, humidity=76.1715, cloud=0.0, wind=11.1874, temperature=11.4746, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:12:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[1.0247499999999992, 0.7772500000000004, 1.7867500000000005, 2.333499999999999, nan, nan, 0.5429999999999993, nan, nan, 2.3610000000000007, 0.286249999999999, 1.2839999999999998, nan, nan, 0.6959999999999997, nan, nan, 0.5664999999999996, 0.09899999999999842, 0.055749999999999744, 1.0459999999999985, 2.054249999999999, 0.7462500000000007, 2.44775, 0.8489999999999993, 0.026000000000001577, 0.04374999999999929, 0.005499999999999616, 0.038000000000000256, 0.2920000000000007, 0.48050000000000104, 0.37400000000000055, 0.11024999999999885], zp_timestamp='2026-04-13T01:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:12:54.154 [DEBUG] [Thread-200742] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:12:54.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:12:54.247 [DEBUG] [Thread-200745] [transport.py] [_log()] starting thread (client mode): 0xae52ca00
2026-04-13T03:12:54.247 [DEBUG] [Thread-200745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:12:54.261 [DEBUG] [Thread-200745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:12:54.261 [INFO] [Thread-200745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:12:54.268 [DEBUG] [Thread-200745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:12:54.268 [DEBUG] [Thread-200745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] client lang: <none>
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] server lang: <none>
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] kex follows: False
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:12:54.269 [DEBUG] [Thread-200745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:12:54.270 [DEBUG] [Thread-200745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:12:54.270 [DEBUG] [Thread-200745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:12:54.270 [DEBUG] [Thread-200745] [transport.py] [_log()] Compression: none
2026-04-13T03:12:54.270 [DEBUG] [Thread-200745] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:12:54.333 [DEBUG] [Thread-200745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:12:54.334 [DEBUG] [Thread-200745] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:12:54.334 [DEBUG] [Thread-200745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:12:54.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:12:54.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:12:54.394 [DEBUG] [Thread-200745] [transport.py] [_log()] userauth is OK
2026-04-13T03:12:54.394 [DEBUG] [Thread-200745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:12:54.394 [DEBUG] [Thread-200745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:12:54.394 [DEBUG] [Thread-200745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:12:54.394 [DEBUG] [Thread-200745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:12:54.415 [INFO] [Thread-200745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:12:54.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:12:54.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:12:55.242 [DEBUG] [Thread-200745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:12:55.243 [DEBUG] [Thread-200745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:12:55.291 [DEBUG] [Thread-200745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:12:55.291 [DEBUG] [Thread-200745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:12:55.300 [DEBUG] [Thread-200745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:12:55.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:12:55.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:12: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') -> 00000000
2026-04-13T03:12:55.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:12:55.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:12:55.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:12:55.334 [DEBUG] [Thread-200745] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:12:56.127 [DEBUG] [Thread-200747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:13:11.184 [DEBUG] [Thread-200748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:13:25.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:13:25.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:13: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
2026-04-13T03:13:26.225 [DEBUG] [Thread-200749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:13:26.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 13, 11), 4.76952, 72.5857, 0.0, 9.19368, 11.5539, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:13:26.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:13:11
2026-04-13T03:13:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:13:27.156 [DEBUG] [Thread-200750] [transport.py] [_log()] starting thread (client mode): 0xb0fb4220
2026-04-13T03:13:27.156 [DEBUG] [Thread-200750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:13:27.175 [DEBUG] [Thread-200750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:13:27.175 [INFO] [Thread-200750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] client lang: <none>
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] server lang: <none>
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] kex follows: False
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] Compression: none
2026-04-13T03:13:27.179 [DEBUG] [Thread-200750] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:13:27.195 [DEBUG] [Thread-200750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:13:27.196 [DEBUG] [Thread-200750] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:13:27.196 [DEBUG] [Thread-200750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:13:27.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:13:27.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:13:27.198 [DEBUG] [Thread-200750] [transport.py] [_log()] userauth is OK
2026-04-13T03:13:27.199 [DEBUG] [Thread-200750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:13:27.199 [DEBUG] [Thread-200750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:13:27.199 [DEBUG] [Thread-200750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:13:27.199 [DEBUG] [Thread-200750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:13:27.224 [INFO] [Thread-200750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:13:27.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:13:27.795 [DEBUG] [Thread-200750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:13:27.796 [DEBUG] [Thread-200750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:13:27.796 [DEBUG] [Thread-200750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:13:27.838 [DEBUG] [Thread-200750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:13:27.838 [DEBUG] [Thread-200750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:13:27.841 [DEBUG] [Thread-200750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:13:27.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:13:27.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:13:27.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:13:27.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:13:27.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:13:27.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:13:27.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:13:27.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:13:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:13:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.050791 -999.00  +10.90   4.74     81   +7.90 1 2 1 2 1     0    0 4.12 70.77 .NESW 4.7 4.7 191.6 7.0 11.4 -21.7 11.2 -20.7 11.0 -18.8 11.2 -20.9
2026-04-13T03:13:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:13:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:13:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.050791
2026-04-13T03:13:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:13:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:13:27.856 [DEBUG] [Thread-200750] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:13:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:13:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:13:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:13:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:13:11', tmtdew=4.76952, humidity=72.5857, cloud=0.0, wind=9.19368, temperature=11.5539, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:13:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[1.0247499999999992, 0.7772500000000004, 1.7867500000000005, 2.333499999999999, nan, nan, 0.5429999999999993, nan, nan, 2.3610000000000007, 0.286249999999999, 1.2839999999999998, nan, nan, 0.6959999999999997, nan, nan, 0.5664999999999996, 0.09899999999999842, 0.055749999999999744, 1.0459999999999985, 2.054249999999999, 0.7462500000000007, 2.44775, 0.8489999999999993, 0.026000000000001577, 0.04374999999999929, 0.005499999999999616, 0.038000000000000256, 0.2920000000000007, 0.48050000000000104, 0.37400000000000055, 0.11024999999999885], zp_timestamp='2026-04-13T01:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:13:27.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:13:31.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:13:31.861 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:13:36.148 [DEBUG] [Thread-200753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:13:41.261 [DEBUG] [Thread-200754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:13:56.315 [DEBUG] [Thread-200755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:14:11.352 [DEBUG] [Thread-200756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:14:26.395 [DEBUG] [Thread-200757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:14:32.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:14:32.065 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:14:36.229 [DEBUG] [Thread-200758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:14:41.431 [DEBUG] [Thread-200759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:14:56.471 [DEBUG] [Thread-200760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:15:11.515 [DEBUG] [Thread-200761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:15:26.554 [DEBUG] [Thread-200762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:15:32.270 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:15:32.271 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:15:36.298 [DEBUG] [Thread-200763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:15:41.591 [DEBUG] [Thread-200764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:15:42.079 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T03:15:56.633 [DEBUG] [Thread-200765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:16:11.670 [DEBUG] [Thread-200766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:16:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:16:12.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:16:12.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:16:13.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 15, 34), 4.11469, 75.7734, 0.0, 11.0815, 11.4746, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:16:13.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:15:34
2026-04-13T03:16:13.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:16:14.084 [DEBUG] [Thread-200767] [transport.py] [_log()] starting thread (client mode): 0xb0fb64a0
2026-04-13T03:16:14.084 [DEBUG] [Thread-200767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:16:14.104 [DEBUG] [Thread-200767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:16:14.104 [INFO] [Thread-200767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:16:14.107 [DEBUG] [Thread-200767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:16:14.107 [DEBUG] [Thread-200767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:16:14.107 [DEBUG] [Thread-200767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] client lang: <none>
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] server lang: <none>
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] kex follows: False
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] Compression: none
2026-04-13T03:16:14.108 [DEBUG] [Thread-200767] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:16:14.125 [DEBUG] [Thread-200767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:16:14.126 [DEBUG] [Thread-200767] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:16:14.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:16:14.127 [DEBUG] [Thread-200767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:16:14.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:16:14.129 [DEBUG] [Thread-200767] [transport.py] [_log()] userauth is OK
2026-04-13T03:16:14.129 [DEBUG] [Thread-200767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:16:14.129 [DEBUG] [Thread-200767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:16:14.130 [DEBUG] [Thread-200767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:16:14.130 [DEBUG] [Thread-200767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:16:14.155 [INFO] [Thread-200767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:16:14.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:16:14.950 [DEBUG] [Thread-200767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:16:14.951 [DEBUG] [Thread-200767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:16:14.951 [DEBUG] [Thread-200767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:16:14.992 [DEBUG] [Thread-200767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:16:14.992 [DEBUG] [Thread-200767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:16:14.994 [DEBUG] [Thread-200767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:16:15.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:16:15.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:16:15.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:16:15.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:16:15.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:16:15.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:16:15.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.052527 -999.00  +10.90   7.00     82   +8.00 1 2 1 2 1     0    0 4.61 81.40 .NESw 7.0 7.0 204.8 8.1 11.4 -21.8 11.2 -20.9 11.0 -18.9 11.3 -20.7
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.052527
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:16:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:15:34', tmtdew=4.11469, humidity=75.7734, cloud=0.0, wind=11.0815, temperature=11.4746, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:15:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:16:15.015 [DEBUG] [Thread-200767] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:16:15.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:16:15.096 [DEBUG] [Thread-200770] [transport.py] [_log()] starting thread (client mode): 0xae5b3940
2026-04-13T03:16:15.096 [DEBUG] [Thread-200770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:16:15.110 [DEBUG] [Thread-200770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:16:15.110 [INFO] [Thread-200770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:16:15.118 [DEBUG] [Thread-200770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:16:15.118 [DEBUG] [Thread-200770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:16:15.118 [DEBUG] [Thread-200770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] client lang: <none>
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] server lang: <none>
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] kex follows: False
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:16:15.119 [DEBUG] [Thread-200770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:16:15.120 [DEBUG] [Thread-200770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:16:15.120 [DEBUG] [Thread-200770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:16:15.120 [DEBUG] [Thread-200770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:16:15.120 [DEBUG] [Thread-200770] [transport.py] [_log()] Compression: none
2026-04-13T03:16:15.120 [DEBUG] [Thread-200770] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:16:15.177 [DEBUG] [Thread-200770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:16:15.177 [DEBUG] [Thread-200770] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:16:15.178 [DEBUG] [Thread-200770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:16:15.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:16:15.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:16:15.240 [DEBUG] [Thread-200770] [transport.py] [_log()] userauth is OK
2026-04-13T03:16:15.240 [DEBUG] [Thread-200770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:16:15.240 [DEBUG] [Thread-200770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:16:15.241 [DEBUG] [Thread-200770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:16:15.241 [DEBUG] [Thread-200770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:16:15.265 [INFO] [Thread-200770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:16:15.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:16:15.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:16:16.121 [DEBUG] [Thread-200770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:16:16.122 [DEBUG] [Thread-200770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:16:16.169 [DEBUG] [Thread-200770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:16:16.170 [DEBUG] [Thread-200770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:16:16.179 [DEBUG] [Thread-200770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:16:16.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:16:16.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:16:16.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:16:16.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:16:16.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:16:16.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:16:16.215 [DEBUG] [Thread-200770] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:16:26.708 [DEBUG] [Thread-200772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:16:32.484 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:16:32.485 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:16:36.356 [DEBUG] [Thread-200773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:16:41.763 [DEBUG] [Thread-200774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:16:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:16:46.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:16:46.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:16:47.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 16, 9), 4.72763, 72.7871, 0.0, 9.29952, 11.5705, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:16:47.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:16:09
2026-04-13T03:16:48.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:16:48.200 [DEBUG] [Thread-200775] [transport.py] [_log()] starting thread (client mode): 0xb0fb6680
2026-04-13T03:16:48.200 [DEBUG] [Thread-200775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:16:48.218 [DEBUG] [Thread-200775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:16:48.218 [INFO] [Thread-200775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] client lang: <none>
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] server lang: <none>
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] kex follows: False
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] Compression: none
2026-04-13T03:16:48.220 [DEBUG] [Thread-200775] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:16:48.238 [DEBUG] [Thread-200775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:16:48.239 [DEBUG] [Thread-200775] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:16:48.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:16:48.240 [DEBUG] [Thread-200775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:16:48.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:16:48.242 [DEBUG] [Thread-200775] [transport.py] [_log()] userauth is OK
2026-04-13T03:16:48.242 [DEBUG] [Thread-200775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:16:48.242 [DEBUG] [Thread-200775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:16:48.242 [DEBUG] [Thread-200775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:16:48.242 [DEBUG] [Thread-200775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:16:48.266 [INFO] [Thread-200775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:16:48.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:16:49.039 [DEBUG] [Thread-200775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:16:49.039 [DEBUG] [Thread-200775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:16:49.039 [DEBUG] [Thread-200775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:16:49.080 [DEBUG] [Thread-200775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:16:49.080 [DEBUG] [Thread-200775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:16:49.084 [DEBUG] [Thread-200775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:16:49.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:16:49.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:16:49.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:16:49.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:16:49.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:16:49.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:16:49.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:16:49.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:16:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:16:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.052874 -999.00  +10.90   6.34     82   +8.00 1 2 1 2 1     0    0 4.54 79.03 .NESw 6.3 6.3 214.6 8.8 11.4 -21.6 11.2 -20.7 10.9 -18.6 11.2 -20.4
2026-04-13T03:16:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:16:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:16:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.052874
2026-04-13T03:16:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:16:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:16:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:16:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:16:49.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:16:49.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:16:09', tmtdew=4.72763, humidity=72.7871, cloud=0.0, wind=9.29952, temperature=11.5705, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:16:08.314', atlas_cloud=2, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:16:49.110 [DEBUG] [Thread-200775] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:16:49.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:16:49.210 [DEBUG] [Thread-200778] [transport.py] [_log()] starting thread (client mode): 0xb0fb40d0
2026-04-13T03:16:49.210 [DEBUG] [Thread-200778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:16:49.229 [DEBUG] [Thread-200778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:16:49.230 [INFO] [Thread-200778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:16:49.237 [DEBUG] [Thread-200778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:16:49.237 [DEBUG] [Thread-200778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] client lang: <none>
2026-04-13T03:16:49.238 [DEBUG] [Thread-200778] [transport.py] [_log()] server lang: <none>
2026-04-13T03:16:49.239 [DEBUG] [Thread-200778] [transport.py] [_log()] kex follows: False
2026-04-13T03:16:49.239 [DEBUG] [Thread-200778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:16:49.239 [DEBUG] [Thread-200778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:16:49.239 [DEBUG] [Thread-200778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:16:49.239 [DEBUG] [Thread-200778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:16:49.239 [DEBUG] [Thread-200778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:16:49.239 [DEBUG] [Thread-200778] [transport.py] [_log()] Compression: none
2026-04-13T03:16:49.240 [DEBUG] [Thread-200778] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:16:49.300 [DEBUG] [Thread-200778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:16:49.301 [DEBUG] [Thread-200778] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:16:49.302 [DEBUG] [Thread-200778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:16:49.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:16:49.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:16:49.358 [DEBUG] [Thread-200778] [transport.py] [_log()] userauth is OK
2026-04-13T03:16:49.358 [DEBUG] [Thread-200778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:16:49.358 [DEBUG] [Thread-200778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:16:49.358 [DEBUG] [Thread-200778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:16:49.358 [DEBUG] [Thread-200778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:16:49.381 [INFO] [Thread-200778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:16:49.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:16:49.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:16:50.226 [DEBUG] [Thread-200778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:16:50.226 [DEBUG] [Thread-200778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:16:50.274 [DEBUG] [Thread-200778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:16:50.274 [DEBUG] [Thread-200778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:16:50.283 [DEBUG] [Thread-200778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:16:50.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:16:50.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:16:50.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:16:50.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:16:50.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:16:50.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:16:50.320 [DEBUG] [Thread-200778] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:16:56.800 [DEBUG] [Thread-200780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:11.852 [DEBUG] [Thread-200781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:20.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:17:20.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:17:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:17:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 16, 45), 4.19066, 75.3752, 0.0, 11.2579, 11.4414, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:17:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:16:45
2026-04-13T03:17:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:17:22.271 [DEBUG] [Thread-200782] [transport.py] [_log()] starting thread (client mode): 0xb0f54580
2026-04-13T03:17:22.271 [DEBUG] [Thread-200782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:17:22.291 [DEBUG] [Thread-200782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:17:22.291 [INFO] [Thread-200782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] client lang: <none>
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] server lang: <none>
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] kex follows: False
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:17:22.295 [DEBUG] [Thread-200782] [transport.py] [_log()] Compression: none
2026-04-13T03:17:22.296 [DEBUG] [Thread-200782] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:17:22.312 [DEBUG] [Thread-200782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:17:22.312 [DEBUG] [Thread-200782] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:17:22.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:17:22.313 [DEBUG] [Thread-200782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:17:22.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:17:22.357 [DEBUG] [Thread-200782] [transport.py] [_log()] userauth is OK
2026-04-13T03:17:22.357 [DEBUG] [Thread-200782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:17:22.357 [DEBUG] [Thread-200782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:17:22.357 [DEBUG] [Thread-200782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:17:22.357 [DEBUG] [Thread-200782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:17:22.391 [INFO] [Thread-200782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:17:22.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:17:23.143 [DEBUG] [Thread-200782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:17:23.143 [DEBUG] [Thread-200782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:17:23.143 [DEBUG] [Thread-200782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:17:23.184 [DEBUG] [Thread-200782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:17:23.184 [DEBUG] [Thread-200782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:17:23.188 [DEBUG] [Thread-200782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:17:23.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:17:23.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:17:23.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:17:23.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:17:23.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:17:23.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:17:23.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:17:23.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:17:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:17:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.053221 -999.00  +10.90   6.83     82   +8.10 1 2 1 2 1     0    0 4.46 75.67 .NESw 6.8 6.8 211.2 7.5 11.3 -21.8 11.3 -20.6 10.9 -18.9 11.3 -20.8
2026-04-13T03:17:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:17:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:17:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.053221
2026-04-13T03:17:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:17:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:17:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:17:23.215 [DEBUG] [Thread-200782] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:17:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:17:23.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:17:23.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:16:45', tmtdew=4.19066, humidity=75.3752, cloud=0.0, wind=11.2579, temperature=11.4414, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:16:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:17:23.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:17:23.309 [DEBUG] [Thread-200785] [transport.py] [_log()] starting thread (client mode): 0xb0f55960
2026-04-13T03:17:23.309 [DEBUG] [Thread-200785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:17:23.324 [DEBUG] [Thread-200785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:17:23.324 [INFO] [Thread-200785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:17:23.332 [DEBUG] [Thread-200785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:17:23.332 [DEBUG] [Thread-200785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:17:23.332 [DEBUG] [Thread-200785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:17:23.332 [DEBUG] [Thread-200785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:23.332 [DEBUG] [Thread-200785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] client lang: <none>
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] server lang: <none>
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] kex follows: False
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:17:23.333 [DEBUG] [Thread-200785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:17:23.334 [DEBUG] [Thread-200785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:17:23.334 [DEBUG] [Thread-200785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:17:23.334 [DEBUG] [Thread-200785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:17:23.334 [DEBUG] [Thread-200785] [transport.py] [_log()] Compression: none
2026-04-13T03:17:23.334 [DEBUG] [Thread-200785] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:17:23.391 [DEBUG] [Thread-200785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:17:23.392 [DEBUG] [Thread-200785] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:17:23.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:17:23.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:17:23.392 [DEBUG] [Thread-200785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:17:23.449 [DEBUG] [Thread-200785] [transport.py] [_log()] userauth is OK
2026-04-13T03:17:23.449 [DEBUG] [Thread-200785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:17:23.449 [DEBUG] [Thread-200785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:17:23.449 [DEBUG] [Thread-200785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:17:23.450 [DEBUG] [Thread-200785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:17:23.475 [INFO] [Thread-200785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:17:23.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:17:23.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:17:24.328 [DEBUG] [Thread-200785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:17:24.328 [DEBUG] [Thread-200785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:17:24.376 [DEBUG] [Thread-200785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:17:24.376 [DEBUG] [Thread-200785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:17:24.385 [DEBUG] [Thread-200785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:17:24.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:17:24.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:17:24.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
2026-04-13T03:17:24.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:17:24.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:17:24.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:17:24.421 [DEBUG] [Thread-200785] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:17:26.896 [DEBUG] [Thread-200787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:32.692 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:32.694 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:36.418 [DEBUG] [Thread-200788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:41.950 [DEBUG] [Thread-200789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:17:54.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:17:54.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:17:55.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 17, 20), 4.7211, 72.5549, 0.0, 8.4528, 11.4707, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:17:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:17:20
2026-04-13T03:17:56.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:17:56.247 [DEBUG] [Thread-200790] [transport.py] [_log()] starting thread (client mode): 0xb0fb5e40
2026-04-13T03:17:56.247 [DEBUG] [Thread-200790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:17:56.267 [DEBUG] [Thread-200790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:17:56.268 [INFO] [Thread-200790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:17:56.270 [DEBUG] [Thread-200790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] client lang: <none>
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] server lang: <none>
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] kex follows: False
2026-04-13T03:17:56.271 [DEBUG] [Thread-200790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:17:56.272 [DEBUG] [Thread-200790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:17:56.272 [DEBUG] [Thread-200790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:17:56.272 [DEBUG] [Thread-200790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:17:56.272 [DEBUG] [Thread-200790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:17:56.272 [DEBUG] [Thread-200790] [transport.py] [_log()] Compression: none
2026-04-13T03:17:56.272 [DEBUG] [Thread-200790] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:17:56.291 [DEBUG] [Thread-200790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:17:56.292 [DEBUG] [Thread-200790] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:17:56.293 [DEBUG] [Thread-200790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:17:56.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:17:56.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:17:56.336 [DEBUG] [Thread-200790] [transport.py] [_log()] userauth is OK
2026-04-13T03:17:56.337 [DEBUG] [Thread-200790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:17:56.337 [DEBUG] [Thread-200790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:17:56.337 [DEBUG] [Thread-200790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:17:56.337 [DEBUG] [Thread-200790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:17:56.357 [INFO] [Thread-200790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:17:56.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:17:56.988 [DEBUG] [Thread-200792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:17:57.115 [DEBUG] [Thread-200790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:17:57.115 [DEBUG] [Thread-200790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:17:57.115 [DEBUG] [Thread-200790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:17:57.156 [DEBUG] [Thread-200790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:17:57.156 [DEBUG] [Thread-200790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:17:57.159 [DEBUG] [Thread-200790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:17:57.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:17:57.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:17:57.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:17:57.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:17:57.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:17:57.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:17:57.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:17:57.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:17:57.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:17:57.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.053569 -999.00  +10.90   6.12     82   +8.10 1 2 1 2 1     0    0 4.60 79.26 .NES. 6.1 6.1 218.9 10.0 11.4 -21.7 11.2 -20.7 11.0 -18.8 11.2 -20.7
2026-04-13T03:17:57.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:17:57.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:17:57.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.053569
2026-04-13T03:17:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:17:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:17:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:17:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:17:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:17:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:17:20', tmtdew=4.7211, humidity=72.5549, cloud=0.0, wind=8.4528, temperature=11.4707, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:17:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:17:57.184 [DEBUG] [Thread-200790] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:17:57.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:17:57.276 [DEBUG] [Thread-200794] [transport.py] [_log()] starting thread (client mode): 0xae5b0610
2026-04-13T03:17:57.277 [DEBUG] [Thread-200794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:17:57.291 [DEBUG] [Thread-200794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:17:57.291 [INFO] [Thread-200794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] client lang: <none>
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] server lang: <none>
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] kex follows: False
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:17:57.299 [DEBUG] [Thread-200794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:17:57.300 [DEBUG] [Thread-200794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:17:57.300 [DEBUG] [Thread-200794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:17:57.300 [DEBUG] [Thread-200794] [transport.py] [_log()] Compression: none
2026-04-13T03:17:57.300 [DEBUG] [Thread-200794] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:17:57.357 [DEBUG] [Thread-200794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:17:57.357 [DEBUG] [Thread-200794] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:17:57.358 [DEBUG] [Thread-200794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:17:57.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:17:57.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:17:57.413 [DEBUG] [Thread-200794] [transport.py] [_log()] userauth is OK
2026-04-13T03:17:57.413 [DEBUG] [Thread-200794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:17:57.413 [DEBUG] [Thread-200794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:17:57.413 [DEBUG] [Thread-200794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:17:57.413 [DEBUG] [Thread-200794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:17:57.432 [INFO] [Thread-200794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:17:57.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:17:57.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:17:58.275 [DEBUG] [Thread-200794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:17:58.275 [DEBUG] [Thread-200794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:17:58.323 [DEBUG] [Thread-200794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:17:58.323 [DEBUG] [Thread-200794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:17:58.333 [DEBUG] [Thread-200794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:17:58.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:17:58.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:17:58.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:17:58.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:17:58.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:17:58.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:17:58.369 [DEBUG] [Thread-200794] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:18:12.026 [DEBUG] [Thread-200796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:18:27.089 [DEBUG] [Thread-200797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:18:28.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:18:28.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:18:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:18:29.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 17, 56), 4.6641, 73.1047, 0.0, 8.68212, 11.5037, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:18:29.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:17:56
2026-04-13T03:18:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:18:30.194 [DEBUG] [Thread-200798] [transport.py] [_log()] starting thread (client mode): 0xae5b1060
2026-04-13T03:18:30.194 [DEBUG] [Thread-200798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:18:30.212 [DEBUG] [Thread-200798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:18:30.212 [INFO] [Thread-200798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] client lang: <none>
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] server lang: <none>
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] kex follows: False
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] Compression: none
2026-04-13T03:18:30.215 [DEBUG] [Thread-200798] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:18:30.223 [DEBUG] [Thread-200798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:18:30.224 [DEBUG] [Thread-200798] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:18:30.224 [DEBUG] [Thread-200798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:18:30.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:18:30.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:18:30.226 [DEBUG] [Thread-200798] [transport.py] [_log()] userauth is OK
2026-04-13T03:18:30.226 [DEBUG] [Thread-200798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:18:30.226 [DEBUG] [Thread-200798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:18:30.226 [DEBUG] [Thread-200798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:18:30.226 [DEBUG] [Thread-200798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:18:30.251 [INFO] [Thread-200798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:18:30.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:18:31.071 [DEBUG] [Thread-200798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:18:31.072 [DEBUG] [Thread-200798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:18:31.072 [DEBUG] [Thread-200798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:18:31.112 [DEBUG] [Thread-200798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:18:31.112 [DEBUG] [Thread-200798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:18:31.116 [DEBUG] [Thread-200798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:18:31.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:18:31.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:18:31.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:18:31.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:18:31.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:18:31.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:18:31.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:18:31.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:18:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:18:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.053916 -999.00  +10.90   6.08     82   +8.10 1 2 1 2 1     0    0 4.72 83.37 zNESw 6.1 6.1 211.8 9.3 11.3 -21.8 11.2 -20.6 11.0 -18.7 11.3 -20.5
2026-04-13T03:18:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:18:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:18:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.053916
2026-04-13T03:18:31.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:18:31.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:18:31.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:18:31.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:18:31.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:18:31.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:17:56', tmtdew=4.6641, humidity=73.1047, cloud=0.0, wind=8.68212, temperature=11.5037, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:17:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:18:31.144 [DEBUG] [Thread-200798] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:18:31.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:18:31.237 [DEBUG] [Thread-200801] [transport.py] [_log()] starting thread (client mode): 0xae5b2080
2026-04-13T03:18:31.237 [DEBUG] [Thread-200801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:18:31.252 [DEBUG] [Thread-200801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:18:31.252 [INFO] [Thread-200801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:18:31.259 [DEBUG] [Thread-200801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:18:31.259 [DEBUG] [Thread-200801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:18:31.259 [DEBUG] [Thread-200801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:18:31.259 [DEBUG] [Thread-200801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:18:31.259 [DEBUG] [Thread-200801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] client lang: <none>
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] server lang: <none>
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] kex follows: False
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] Compression: none
2026-04-13T03:18:31.260 [DEBUG] [Thread-200801] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:18:31.317 [DEBUG] [Thread-200801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:18:31.318 [DEBUG] [Thread-200801] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:18:31.318 [DEBUG] [Thread-200801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:18:31.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:18:31.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:18:31.372 [DEBUG] [Thread-200801] [transport.py] [_log()] userauth is OK
2026-04-13T03:18:31.373 [DEBUG] [Thread-200801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:18:31.373 [DEBUG] [Thread-200801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:18:31.373 [DEBUG] [Thread-200801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:18:31.373 [DEBUG] [Thread-200801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:18:31.393 [INFO] [Thread-200801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:18:31.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:18:31.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:18:32.247 [DEBUG] [Thread-200801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:18:32.248 [DEBUG] [Thread-200801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:18:32.296 [DEBUG] [Thread-200801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:18:32.296 [DEBUG] [Thread-200801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:18:32.306 [DEBUG] [Thread-200801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:18:32.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:18:32.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:18:32.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:18:32.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:18:32.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:18:32.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:18:32.343 [DEBUG] [Thread-200801] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:18:32.899 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:18:32.901 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:18:36.492 [DEBUG] [Thread-200803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:18:42.127 [DEBUG] [Thread-200804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:18:57.181 [DEBUG] [Thread-200805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:19:02.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:19:02.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:19:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:19:03.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 18, 32), 4.64264, 73.2042, 0.0, 9.10548, 11.4373, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:19:03.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:18:32
2026-04-13T03:19:04.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:19:04.180 [DEBUG] [Thread-200806] [transport.py] [_log()] starting thread (client mode): 0xae5b0130
2026-04-13T03:19:04.180 [DEBUG] [Thread-200806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:19:04.200 [DEBUG] [Thread-200806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:19:04.200 [INFO] [Thread-200806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] client lang: <none>
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] server lang: <none>
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] kex follows: False
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] Compression: none
2026-04-13T03:19:04.203 [DEBUG] [Thread-200806] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:19:04.220 [DEBUG] [Thread-200806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:19:04.221 [DEBUG] [Thread-200806] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:19:04.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:19:04.222 [DEBUG] [Thread-200806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:19:04.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:19:04.224 [DEBUG] [Thread-200806] [transport.py] [_log()] userauth is OK
2026-04-13T03:19:04.224 [DEBUG] [Thread-200806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:19:04.224 [DEBUG] [Thread-200806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:19:04.224 [DEBUG] [Thread-200806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:19:04.224 [DEBUG] [Thread-200806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:19:04.242 [INFO] [Thread-200806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:19:04.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:19:05.009 [DEBUG] [Thread-200806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:19:05.009 [DEBUG] [Thread-200806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:19:05.009 [DEBUG] [Thread-200806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:19:05.050 [DEBUG] [Thread-200806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:19:05.050 [DEBUG] [Thread-200806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:19:05.054 [DEBUG] [Thread-200806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:19:05.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:19:05.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:19:05.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:19:05.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:19:05.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:19:05.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:19:05.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:19:05.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:19:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:19:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.054263 -999.00  +10.90   3.30     83   +8.10 1 2 1 2 1     0    0 4.81 85.47 zNESw 3.3 3.3 229.5 6.6 11.4 -21.7 11.2 -20.7 11.0 -18.8 11.3 -20.7
2026-04-13T03:19:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:19:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:19:05.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.054263
2026-04-13T03:19:05.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:19:05.081 [DEBUG] [Thread-200806] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:19:05.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:19:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:19:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:19:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-13T03:19:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:18:32', tmtdew=4.64264, humidity=73.2042, cloud=0.0, wind=9.10548, temperature=11.4373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:18:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:19:05.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:19:05.179 [DEBUG] [Thread-200809] [transport.py] [_log()] starting thread (client mode): 0xb0fea800
2026-04-13T03:19:05.179 [DEBUG] [Thread-200809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:19:05.193 [DEBUG] [Thread-200809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:19:05.194 [INFO] [Thread-200809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:19:05.201 [DEBUG] [Thread-200809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:19:05.201 [DEBUG] [Thread-200809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:19:05.201 [DEBUG] [Thread-200809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:19:05.201 [DEBUG] [Thread-200809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] client lang: <none>
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] server lang: <none>
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] kex follows: False
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] Compression: none
2026-04-13T03:19:05.202 [DEBUG] [Thread-200809] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:19:05.260 [DEBUG] [Thread-200809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:19:05.261 [DEBUG] [Thread-200809] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:19:05.262 [DEBUG] [Thread-200809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:19:05.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:19:05.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:19:05.317 [DEBUG] [Thread-200809] [transport.py] [_log()] userauth is OK
2026-04-13T03:19:05.318 [DEBUG] [Thread-200809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:19:05.318 [DEBUG] [Thread-200809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:19:05.318 [DEBUG] [Thread-200809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:19:05.318 [DEBUG] [Thread-200809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:19:05.336 [INFO] [Thread-200809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:19:05.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:19:05.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:19:06.174 [DEBUG] [Thread-200809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:19:06.174 [DEBUG] [Thread-200809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:19:06.226 [DEBUG] [Thread-200809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:19:06.226 [DEBUG] [Thread-200809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:19:06.235 [DEBUG] [Thread-200809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:19:06.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:19:06.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:19:06.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:19:06.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:19:06.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:19:06.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:19:06.272 [DEBUG] [Thread-200809] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:19:12.216 [DEBUG] [Thread-200811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:19:27.267 [DEBUG] [Thread-200812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:19:33.108 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:19:33.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:19:36.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:19:36.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:19:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:19:36.558 [DEBUG] [Thread-200813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:19:37.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 19, 7), 4.59515, 73.4364, 0.0, 9.12312, 11.3544, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:19:37.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:19:07
2026-04-13T03:19:38.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:19:38.190 [DEBUG] [Thread-200814] [transport.py] [_log()] starting thread (client mode): 0xae52d780
2026-04-13T03:19:38.190 [DEBUG] [Thread-200814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:19:38.209 [DEBUG] [Thread-200814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:19:38.209 [INFO] [Thread-200814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] client lang: <none>
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] server lang: <none>
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] kex follows: False
2026-04-13T03:19:38.212 [DEBUG] [Thread-200814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:19:38.213 [DEBUG] [Thread-200814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:19:38.213 [DEBUG] [Thread-200814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:19:38.213 [DEBUG] [Thread-200814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:19:38.213 [DEBUG] [Thread-200814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:19:38.213 [DEBUG] [Thread-200814] [transport.py] [_log()] Compression: none
2026-04-13T03:19:38.213 [DEBUG] [Thread-200814] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:19:38.229 [DEBUG] [Thread-200814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:19:38.229 [DEBUG] [Thread-200814] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:19:38.230 [DEBUG] [Thread-200814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:19:38.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:19:38.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:19:38.231 [DEBUG] [Thread-200814] [transport.py] [_log()] userauth is OK
2026-04-13T03:19:38.232 [DEBUG] [Thread-200814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:19:38.232 [DEBUG] [Thread-200814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:19:38.232 [DEBUG] [Thread-200814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:19:38.232 [DEBUG] [Thread-200814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:19:38.255 [INFO] [Thread-200814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:19:38.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:19:39.027 [DEBUG] [Thread-200814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:19:39.027 [DEBUG] [Thread-200814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:19:39.027 [DEBUG] [Thread-200814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:19:39.068 [DEBUG] [Thread-200814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:19:39.068 [DEBUG] [Thread-200814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:19:39.071 [DEBUG] [Thread-200814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:19:39.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:19:39.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:19:39.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:19:39.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:19:39.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:19:39.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:19:39.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:19:39.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:19:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:19:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.054957 -999.00  +10.90   4.98     82   +8.00 1 1 1 2 1     0    0 4.92 87.65 ZNESW 5.0 5.0 199.6 8.0 11.4 -21.7 11.2 -20.7 11.0 -18.7 11.3 -20.5
2026-04-13T03:19:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:19:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:19:39.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.054957
2026-04-13T03:19:39.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:19:39.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:19:39.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:19:39.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:19:39.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:19:39.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:19:07', tmtdew=4.59515, humidity=73.4364, cloud=0.0, wind=9.12312, temperature=11.3544, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:19:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:19:39.092 [DEBUG] [Thread-200814] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:19:39.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:19:39.189 [DEBUG] [Thread-200817] [transport.py] [_log()] starting thread (client mode): 0xae5b1ff0
2026-04-13T03:19:39.189 [DEBUG] [Thread-200817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:19:39.204 [DEBUG] [Thread-200817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:19:39.204 [INFO] [Thread-200817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:19:39.212 [DEBUG] [Thread-200817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:19:39.212 [DEBUG] [Thread-200817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:19:39.213 [DEBUG] [Thread-200817] [transport.py] [_log()] client lang: <none>
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] server lang: <none>
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] kex follows: False
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] Compression: none
2026-04-13T03:19:39.214 [DEBUG] [Thread-200817] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:19:39.273 [DEBUG] [Thread-200817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:19:39.273 [DEBUG] [Thread-200817] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:19:39.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:19:39.274 [DEBUG] [Thread-200817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:19:39.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:19:39.329 [DEBUG] [Thread-200817] [transport.py] [_log()] userauth is OK
2026-04-13T03:19:39.329 [DEBUG] [Thread-200817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:19:39.330 [DEBUG] [Thread-200817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:19:39.330 [DEBUG] [Thread-200817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:19:39.330 [DEBUG] [Thread-200817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:19:39.349 [INFO] [Thread-200817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:19:39.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:19:39.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:19:40.185 [DEBUG] [Thread-200817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:19:40.186 [DEBUG] [Thread-200817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:19:40.234 [DEBUG] [Thread-200817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:19:40.234 [DEBUG] [Thread-200817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:19:40.244 [DEBUG] [Thread-200817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:19:40.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:19:40.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:19:40.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:19:40.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:19:40.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:19:40.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:19:40.281 [DEBUG] [Thread-200817] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:19:42.303 [DEBUG] [Thread-200819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:19:57.360 [DEBUG] [Thread-200820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:20:10.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:20:10.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:20:10.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:20:11.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 19, 42), 4.06169, 76.0056, 0.0, 10.9757, 11.2092, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:20:11.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:19:42
2026-04-13T03:20:11.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:20:12.116 [DEBUG] [Thread-200821] [transport.py] [_log()] starting thread (client mode): 0xae5b1ba0
2026-04-13T03:20:12.116 [DEBUG] [Thread-200821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:20:12.138 [DEBUG] [Thread-200821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:20:12.138 [INFO] [Thread-200821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:20:12.140 [DEBUG] [Thread-200821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:20:12.140 [DEBUG] [Thread-200821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:20:12.140 [DEBUG] [Thread-200821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:20:12.140 [DEBUG] [Thread-200821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:12.140 [DEBUG] [Thread-200821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:12.140 [DEBUG] [Thread-200821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] client lang: <none>
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] server lang: <none>
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] kex follows: False
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:20:12.141 [DEBUG] [Thread-200821] [transport.py] [_log()] Compression: none
2026-04-13T03:20:12.142 [DEBUG] [Thread-200821] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:20:12.155 [DEBUG] [Thread-200821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:20:12.156 [DEBUG] [Thread-200821] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:20:12.156 [DEBUG] [Thread-200821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:20:12.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:20:12.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:20:12.158 [DEBUG] [Thread-200821] [transport.py] [_log()] userauth is OK
2026-04-13T03:20:12.159 [DEBUG] [Thread-200821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:20:12.159 [DEBUG] [Thread-200821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:20:12.159 [DEBUG] [Thread-200821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:20:12.159 [DEBUG] [Thread-200821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:20:12.182 [INFO] [Thread-200821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:20:12.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:20:12.397 [DEBUG] [Thread-200823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:20:13.337 [DEBUG] [Thread-200821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:20:13.337 [DEBUG] [Thread-200821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:20:13.337 [DEBUG] [Thread-200821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:20:13.379 [DEBUG] [Thread-200821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:20:13.379 [DEBUG] [Thread-200821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:20:13.383 [DEBUG] [Thread-200821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:20:13.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:20:13.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:20:13.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:20:13.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:20:13.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:20:13.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:20:13.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:20:13.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:20:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:20:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.055305 -999.00  +10.90   4.64     82   +8.00 1 1 1 2 1     0    0 5.03 90.01 ZNESW 4.6 4.6 199.3 7.1 11.4 -21.7 11.3 -20.7 11.0 -18.7 11.3 -20.6
2026-04-13T03:20:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:20:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:20:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.055305
2026-04-13T03:20:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:20:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:20:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:20:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:20:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:20:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:19:42', tmtdew=4.06169, humidity=76.0056, cloud=0.0, wind=10.9757, temperature=11.2092, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:19:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:20:13.413 [DEBUG] [Thread-200821] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:20:13.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:20:13.509 [DEBUG] [Thread-200825] [transport.py] [_log()] starting thread (client mode): 0xae5b13f0
2026-04-13T03:20:13.509 [DEBUG] [Thread-200825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:20:13.524 [DEBUG] [Thread-200825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:20:13.524 [INFO] [Thread-200825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] client lang: <none>
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] server lang: <none>
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] kex follows: False
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:20:13.532 [DEBUG] [Thread-200825] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:20:13.533 [DEBUG] [Thread-200825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:20:13.533 [DEBUG] [Thread-200825] [transport.py] [_log()] Compression: none
2026-04-13T03:20:13.533 [DEBUG] [Thread-200825] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:20:13.589 [DEBUG] [Thread-200825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:20:13.589 [DEBUG] [Thread-200825] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:20:13.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:20:13.591 [DEBUG] [Thread-200825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:20:13.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:20:13.645 [DEBUG] [Thread-200825] [transport.py] [_log()] userauth is OK
2026-04-13T03:20:13.646 [DEBUG] [Thread-200825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:20:13.646 [DEBUG] [Thread-200825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:20:13.646 [DEBUG] [Thread-200825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:20:13.646 [DEBUG] [Thread-200825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:20:13.667 [INFO] [Thread-200825] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:20:13.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:20:13.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:20:14.505 [DEBUG] [Thread-200825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:20:14.506 [DEBUG] [Thread-200825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:20:14.554 [DEBUG] [Thread-200825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:20:14.554 [DEBUG] [Thread-200825] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:20:14.564 [DEBUG] [Thread-200825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:20:14.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:20:14.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:20:14.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:20:14.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:20:14.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:20:14.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:20:14.601 [DEBUG] [Thread-200825] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:20:27.433 [DEBUG] [Thread-200827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:20:33.313 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:20:33.314 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:20:36.615 [DEBUG] [Thread-200828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:20:42.486 [DEBUG] [Thread-200829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:20:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:20:44.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:20:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:20:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 20, 18), 4.42585, 74.2848, 0.0, 9.01728, 11.3214, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:20:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:20:18
2026-04-13T03:20:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:20:46.434 [DEBUG] [Thread-200830] [transport.py] [_log()] starting thread (client mode): 0xae5b4d00
2026-04-13T03:20:46.434 [DEBUG] [Thread-200830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:20:46.451 [DEBUG] [Thread-200830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:20:46.451 [INFO] [Thread-200830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] client lang: <none>
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] server lang: <none>
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] kex follows: False
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] Compression: none
2026-04-13T03:20:46.453 [DEBUG] [Thread-200830] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:20:46.472 [DEBUG] [Thread-200830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:20:46.472 [DEBUG] [Thread-200830] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:20:46.473 [DEBUG] [Thread-200830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:20:46.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:20:46.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:20:46.474 [DEBUG] [Thread-200830] [transport.py] [_log()] userauth is OK
2026-04-13T03:20:46.474 [DEBUG] [Thread-200830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:20:46.474 [DEBUG] [Thread-200830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:20:46.475 [DEBUG] [Thread-200830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:20:46.475 [DEBUG] [Thread-200830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:20:46.488 [INFO] [Thread-200830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:20:46.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:20:47.281 [DEBUG] [Thread-200830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:20:47.281 [DEBUG] [Thread-200830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:20:47.281 [DEBUG] [Thread-200830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:20:47.322 [DEBUG] [Thread-200830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:20:47.322 [DEBUG] [Thread-200830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:20:47.326 [DEBUG] [Thread-200830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:20:47.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:20:47.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:20:47.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:20:47.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:20:47.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:20:47.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:20:47.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:20:47.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:20:47.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:20:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.055651 -999.00  +10.90   6.65     82   +8.10 1 1 1 2 1     0    0 5.15 91.86 ZNESW 6.7 6.7 195.0 7.2 11.4 -21.9 11.3 -20.9 11.0 -18.7 11.3 -20.6
2026-04-13T03:20:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:20:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:20:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.055651
2026-04-13T03:20:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:20:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:20:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:20:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:20:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:20:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:20:18', tmtdew=4.42585, humidity=74.2848, cloud=0.0, wind=9.01728, temperature=11.3214, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:20:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:20:47.351 [DEBUG] [Thread-200830] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:20:47.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:20:47.443 [DEBUG] [Thread-200833] [transport.py] [_log()] starting thread (client mode): 0xb0fb4070
2026-04-13T03:20:47.443 [DEBUG] [Thread-200833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:20:47.468 [DEBUG] [Thread-200833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:20:47.468 [INFO] [Thread-200833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:20:47.476 [DEBUG] [Thread-200833] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:20:47.477 [DEBUG] [Thread-200833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:20:47.477 [DEBUG] [Thread-200833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:20:47.477 [DEBUG] [Thread-200833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:47.477 [DEBUG] [Thread-200833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:20:47.477 [DEBUG] [Thread-200833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:47.477 [DEBUG] [Thread-200833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:20:47.477 [DEBUG] [Thread-200833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] client lang: <none>
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] server lang: <none>
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] kex follows: False
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:20:47.478 [DEBUG] [Thread-200833] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:20:47.479 [DEBUG] [Thread-200833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:20:47.479 [DEBUG] [Thread-200833] [transport.py] [_log()] Compression: none
2026-04-13T03:20:47.479 [DEBUG] [Thread-200833] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:20:47.538 [DEBUG] [Thread-200833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:20:47.538 [DEBUG] [Thread-200833] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:20:47.539 [DEBUG] [Thread-200833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:20:47.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:20:47.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:20:47.601 [DEBUG] [Thread-200833] [transport.py] [_log()] userauth is OK
2026-04-13T03:20:47.602 [DEBUG] [Thread-200833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:20:47.602 [DEBUG] [Thread-200833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:20:47.602 [DEBUG] [Thread-200833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:20:47.602 [DEBUG] [Thread-200833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:20:47.621 [INFO] [Thread-200833] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:20:47.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:20:47.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:20:48.479 [DEBUG] [Thread-200833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:20:48.479 [DEBUG] [Thread-200833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:20:48.527 [DEBUG] [Thread-200833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:20:48.527 [DEBUG] [Thread-200833] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:20:48.537 [DEBUG] [Thread-200833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:20:48.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:20:48.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:20:48.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
2026-04-13T03:20:48.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:20:48.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:20:48.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:20:48.575 [DEBUG] [Thread-200833] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:20:57.522 [DEBUG] [Thread-200835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:21:12.583 [DEBUG] [Thread-200836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:21:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:21:18.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:21:18.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:21:19.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 20, 53), 3.94769, 76.5696, 0.0, 11.0815, 11.0102, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:21:19.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:20:53
2026-04-13T03:21:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:21:20.492 [DEBUG] [Thread-200837] [transport.py] [_log()] starting thread (client mode): 0xae5b4580
2026-04-13T03:21:20.492 [DEBUG] [Thread-200837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:21:20.511 [DEBUG] [Thread-200837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:21:20.511 [INFO] [Thread-200837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:21:20.514 [DEBUG] [Thread-200837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] client lang: <none>
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] server lang: <none>
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] kex follows: False
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] Compression: none
2026-04-13T03:21:20.515 [DEBUG] [Thread-200837] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:21:20.522 [DEBUG] [Thread-200837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:21:20.522 [DEBUG] [Thread-200837] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:21:20.523 [DEBUG] [Thread-200837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:21:20.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:21:20.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:21:20.524 [DEBUG] [Thread-200837] [transport.py] [_log()] userauth is OK
2026-04-13T03:21:20.524 [DEBUG] [Thread-200837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:21:20.524 [DEBUG] [Thread-200837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:21:20.524 [DEBUG] [Thread-200837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:21:20.524 [DEBUG] [Thread-200837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:21:20.543 [INFO] [Thread-200837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:21:20.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:21:21.285 [DEBUG] [Thread-200837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:21:21.286 [DEBUG] [Thread-200837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:21:21.286 [DEBUG] [Thread-200837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:21:21.327 [DEBUG] [Thread-200837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:21:21.327 [DEBUG] [Thread-200837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:21:21.331 [DEBUG] [Thread-200837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:21:21.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:21:21.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:21:21.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:21:21.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:21:21.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:21:21.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:21:21.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:21:21.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:21:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:21:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.055999 -999.00  +11.00   4.38     82   +8.20 1 1 1 2 1     0    0 5.01 87.67 ZNESW 4.4 4.4 196.1 6.9 11.4 -21.7 11.3 -20.7 11.0 -18.7 11.3 -20.7
2026-04-13T03:21:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:21:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:21:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.055999
2026-04-13T03:21:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:21:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:21:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:21:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:21:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:21:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:20:53', tmtdew=3.94769, humidity=76.5696, cloud=0.0, wind=11.0815, temperature=11.0102, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:20:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[0.9272499999999999, 1.0207499999999996, 1.6982500000000007, 1.841499999999999, nan, nan, 0.4894999999999996, nan, nan, 1.4700000000000006, 0.2157499999999999, 0.8700000000000001, nan, nan, 0.2729999999999997, nan, 1.90625, 0.4555000000000007, 0.10199999999999854, 0.10174999999999912, 1.120499999999999, 1.675749999999999, 1.5622500000000006, 2.1107499999999995, 1.1579999999999995, 0.09800000000000075, 0.08675000000000033, 0.0035000000000007248, 0.042500000000000426, 0.22600000000000087, 0.402000000000001, 0.35000000000000053, 0.1737499999999983], zp_timestamp='2026-04-13T01:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:21:21.358 [DEBUG] [Thread-200837] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:21:21.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:21:21.450 [DEBUG] [Thread-200840] [transport.py] [_log()] starting thread (client mode): 0xb0f574c0
2026-04-13T03:21:21.450 [DEBUG] [Thread-200840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:21:21.465 [DEBUG] [Thread-200840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:21:21.465 [INFO] [Thread-200840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:21:21.473 [DEBUG] [Thread-200840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] client lang: <none>
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] server lang: <none>
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] kex follows: False
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] Compression: none
2026-04-13T03:21:21.474 [DEBUG] [Thread-200840] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:21:21.532 [DEBUG] [Thread-200840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:21:21.532 [DEBUG] [Thread-200840] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:21:21.532 [DEBUG] [Thread-200840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:21:21.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:21:21.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:21:21.589 [DEBUG] [Thread-200840] [transport.py] [_log()] userauth is OK
2026-04-13T03:21:21.589 [DEBUG] [Thread-200840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:21:21.589 [DEBUG] [Thread-200840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:21:21.589 [DEBUG] [Thread-200840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:21:21.589 [DEBUG] [Thread-200840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:21:21.603 [INFO] [Thread-200840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:21:21.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:21:21.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:21:22.420 [DEBUG] [Thread-200840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:21:22.421 [DEBUG] [Thread-200840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:21:22.469 [DEBUG] [Thread-200840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:21:22.469 [DEBUG] [Thread-200840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:21:22.478 [DEBUG] [Thread-200840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:21:22.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:21:22.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:21:22.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:21:22.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:21:22.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:21:22.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:21:22.513 [DEBUG] [Thread-200840] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:21:27.618 [DEBUG] [Thread-200842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:21:33.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:21:33.518 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:21:36.693 [DEBUG] [Thread-200843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:21:42.676 [DEBUG] [Thread-200844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:21:52.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:21:52.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:21:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:21:53.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 21, 29), 4.43334, 74.0004, 0.0, 9.03492, 11.2217, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:21:53.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:21:29
2026-04-13T03:21:54.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:21:54.489 [DEBUG] [Thread-200845] [transport.py] [_log()] starting thread (client mode): 0xae5b63e0
2026-04-13T03:21:54.490 [DEBUG] [Thread-200845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:21:54.509 [DEBUG] [Thread-200845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:21:54.510 [INFO] [Thread-200845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:21:54.512 [DEBUG] [Thread-200845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] client lang: <none>
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] server lang: <none>
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] kex follows: False
2026-04-13T03:21:54.513 [DEBUG] [Thread-200845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:21:54.514 [DEBUG] [Thread-200845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:21:54.514 [DEBUG] [Thread-200845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:21:54.514 [DEBUG] [Thread-200845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:21:54.514 [DEBUG] [Thread-200845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:21:54.514 [DEBUG] [Thread-200845] [transport.py] [_log()] Compression: none
2026-04-13T03:21:54.514 [DEBUG] [Thread-200845] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:21:54.532 [DEBUG] [Thread-200845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:21:54.533 [DEBUG] [Thread-200845] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:21:54.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:21:54.535 [DEBUG] [Thread-200845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:21:54.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:21:54.537 [DEBUG] [Thread-200845] [transport.py] [_log()] userauth is OK
2026-04-13T03:21:54.537 [DEBUG] [Thread-200845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:21:54.537 [DEBUG] [Thread-200845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:21:54.537 [DEBUG] [Thread-200845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:21:54.537 [DEBUG] [Thread-200845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:21:54.554 [INFO] [Thread-200845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:21:54.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:21:55.335 [DEBUG] [Thread-200845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:21:55.335 [DEBUG] [Thread-200845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:21:55.336 [DEBUG] [Thread-200845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:21:55.376 [DEBUG] [Thread-200845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:21:55.376 [DEBUG] [Thread-200845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:21:55.379 [DEBUG] [Thread-200845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:21:55.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:21:55.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:21:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:21:55.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:21:55.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:21:55.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:21:55.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:21:55.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:21:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:21:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.056346 -999.00  +10.90   5.35     82   +8.10 1 1 1 2 1     0    0 4.89 82.34 ZNESW 5.3 5.3 201.6 6.5 11.4 -21.9 11.3 -20.7 11.0 -18.7 11.2 -20.8
2026-04-13T03:21:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:21:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:21:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.056346
2026-04-13T03:21:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:21:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:21:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:21:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:21:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:21:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:21:29', tmtdew=4.43334, humidity=74.0004, cloud=0.0, wind=9.03492, temperature=11.2217, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:21:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:21:55.404 [DEBUG] [Thread-200845] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:21:55.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:21:55.498 [DEBUG] [Thread-200848] [transport.py] [_log()] starting thread (client mode): 0xae5175b0
2026-04-13T03:21:55.498 [DEBUG] [Thread-200848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:21:55.513 [DEBUG] [Thread-200848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:21:55.513 [INFO] [Thread-200848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:21:55.520 [DEBUG] [Thread-200848] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:21:55.520 [DEBUG] [Thread-200848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:21:55.520 [DEBUG] [Thread-200848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] client lang: <none>
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] server lang: <none>
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] kex follows: False
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] Compression: none
2026-04-13T03:21:55.521 [DEBUG] [Thread-200848] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:21:55.581 [DEBUG] [Thread-200848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:21:55.582 [DEBUG] [Thread-200848] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:21:55.582 [DEBUG] [Thread-200848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:21:55.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:21:55.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:21:55.637 [DEBUG] [Thread-200848] [transport.py] [_log()] userauth is OK
2026-04-13T03:21:55.637 [DEBUG] [Thread-200848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:21:55.637 [DEBUG] [Thread-200848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:21:55.638 [DEBUG] [Thread-200848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:21:55.638 [DEBUG] [Thread-200848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:21:55.656 [INFO] [Thread-200848] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:21:55.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:21:55.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:21:56.480 [DEBUG] [Thread-200848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:21:56.480 [DEBUG] [Thread-200848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:21:56.528 [DEBUG] [Thread-200848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:21:56.528 [DEBUG] [Thread-200848] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:21:56.537 [DEBUG] [Thread-200848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:21:56.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:21:56.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:21:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:21:56.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:21:56.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:21:56.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:21:56.575 [DEBUG] [Thread-200848] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:21:57.711 [DEBUG] [Thread-200850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:22:12.764 [DEBUG] [Thread-200851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:22:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:22:26.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:22:26.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:22:27.798 [DEBUG] [Thread-200852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:22:27.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 22, 4), 4.41448, 74.1, 0.0, 8.75268, 11.2217, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:22:27.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:22:04
2026-04-13T03:22:28.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:22:28.425 [DEBUG] [Thread-200853] [transport.py] [_log()] starting thread (client mode): 0xae5179a0
2026-04-13T03:22:28.425 [DEBUG] [Thread-200853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:22:28.445 [DEBUG] [Thread-200853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:22:28.446 [INFO] [Thread-200853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] client lang: <none>
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] server lang: <none>
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] kex follows: False
2026-04-13T03:22:28.449 [DEBUG] [Thread-200853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:22:28.450 [DEBUG] [Thread-200853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:22:28.450 [DEBUG] [Thread-200853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:22:28.450 [DEBUG] [Thread-200853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:22:28.450 [DEBUG] [Thread-200853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:22:28.450 [DEBUG] [Thread-200853] [transport.py] [_log()] Compression: none
2026-04-13T03:22:28.450 [DEBUG] [Thread-200853] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:22:28.468 [DEBUG] [Thread-200853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:22:28.468 [DEBUG] [Thread-200853] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:22:28.469 [DEBUG] [Thread-200853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:22:28.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:22:28.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:22:28.471 [DEBUG] [Thread-200853] [transport.py] [_log()] userauth is OK
2026-04-13T03:22:28.471 [DEBUG] [Thread-200853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:22:28.471 [DEBUG] [Thread-200853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:22:28.472 [DEBUG] [Thread-200853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:22:28.472 [DEBUG] [Thread-200853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:22:28.494 [INFO] [Thread-200853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:22:28.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:22:29.318 [DEBUG] [Thread-200853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:22:29.319 [DEBUG] [Thread-200853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:22:29.319 [DEBUG] [Thread-200853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:22:29.359 [DEBUG] [Thread-200853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:22:29.359 [DEBUG] [Thread-200853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:22:29.363 [DEBUG] [Thread-200853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:22:29.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:22:29.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:22:29.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:22:29.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:22:29.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:22:29.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:22:29.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:22:29.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:22:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:22:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.056694 -999.00  +10.90   4.21     82   +8.00 1 1 1 2 1     0    0 4.83 80.78 ZNESW 4.2 4.2 205.8 6.3 11.4 -21.8 11.3 -20.7 11.0 -18.7 11.3 -20.7
2026-04-13T03:22:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:22:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:22:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.056694
2026-04-13T03:22:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:22:29.390 [DEBUG] [Thread-200853] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:22:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:22:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:22:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:22:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:22:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:22:04', tmtdew=4.41448, humidity=74.1, cloud=0.0, wind=8.75268, temperature=11.2217, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:21:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:22:29.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:22:29.481 [DEBUG] [Thread-200856] [transport.py] [_log()] starting thread (client mode): 0xae517640
2026-04-13T03:22:29.481 [DEBUG] [Thread-200856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:22:29.496 [DEBUG] [Thread-200856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:22:29.496 [INFO] [Thread-200856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] client lang: <none>
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] server lang: <none>
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] kex follows: False
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:22:29.504 [DEBUG] [Thread-200856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:22:29.505 [DEBUG] [Thread-200856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:22:29.505 [DEBUG] [Thread-200856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:22:29.505 [DEBUG] [Thread-200856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:22:29.505 [DEBUG] [Thread-200856] [transport.py] [_log()] Compression: none
2026-04-13T03:22:29.505 [DEBUG] [Thread-200856] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:22:29.565 [DEBUG] [Thread-200856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:22:29.566 [DEBUG] [Thread-200856] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:22:29.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:22:29.567 [DEBUG] [Thread-200856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:22:29.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:22:29.621 [DEBUG] [Thread-200856] [transport.py] [_log()] userauth is OK
2026-04-13T03:22:29.621 [DEBUG] [Thread-200856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:22:29.621 [DEBUG] [Thread-200856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:22:29.621 [DEBUG] [Thread-200856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:22:29.622 [DEBUG] [Thread-200856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:22:29.646 [INFO] [Thread-200856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:22:29.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:22:29.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:22:30.514 [DEBUG] [Thread-200856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:22:30.514 [DEBUG] [Thread-200856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:22:30.562 [DEBUG] [Thread-200856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:22:30.562 [DEBUG] [Thread-200856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:22:30.572 [DEBUG] [Thread-200856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:22:30.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:22:30.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:22:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:22:30.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:22:30.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:22:30.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:22:30.607 [DEBUG] [Thread-200856] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:22:33.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:22:33.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:22:36.753 [DEBUG] [Thread-200858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:22:42.835 [DEBUG] [Thread-200859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:22:57.887 [DEBUG] [Thread-200860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:23:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:23:00.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:23:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:23:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 22, 40), 3.81641, 77.2663, 0.0, 10.9051, 11.0433, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:23:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:22:40
2026-04-13T03:23:02.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:23:02.490 [DEBUG] [Thread-200861] [transport.py] [_log()] starting thread (client mode): 0xae515b40
2026-04-13T03:23:02.490 [DEBUG] [Thread-200861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:23:02.511 [DEBUG] [Thread-200861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:23:02.511 [INFO] [Thread-200861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] client lang: <none>
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] server lang: <none>
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] kex follows: False
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:23:02.514 [DEBUG] [Thread-200861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:23:02.515 [DEBUG] [Thread-200861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:23:02.515 [DEBUG] [Thread-200861] [transport.py] [_log()] Compression: none
2026-04-13T03:23:02.515 [DEBUG] [Thread-200861] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:23:02.532 [DEBUG] [Thread-200861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:23:02.532 [DEBUG] [Thread-200861] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:23:02.533 [DEBUG] [Thread-200861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:23:02.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:23:02.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:23:02.535 [DEBUG] [Thread-200861] [transport.py] [_log()] userauth is OK
2026-04-13T03:23:02.535 [DEBUG] [Thread-200861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:23:02.535 [DEBUG] [Thread-200861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:23:02.535 [DEBUG] [Thread-200861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:23:02.535 [DEBUG] [Thread-200861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:23:02.559 [INFO] [Thread-200861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:23:02.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:23:03.361 [DEBUG] [Thread-200861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:23:03.361 [DEBUG] [Thread-200861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:23:03.362 [DEBUG] [Thread-200861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:23:03.402 [DEBUG] [Thread-200861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:23:03.402 [DEBUG] [Thread-200861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:23:03.405 [DEBUG] [Thread-200861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:23:03.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:23:03.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:23:03.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:23:03.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:23:03.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:23:03.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:23:03.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:23:03.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:23:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:23:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.057388 -999.00  +10.90   5.98     81   +7.90 1 1 1 2 1     0    0 4.69 73.85 ZNESW 6.0 6.0 199.6 6.9 11.4 -21.8 11.3 -20.7 10.9 -18.8 11.2 -20.7
2026-04-13T03:23:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:23:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:23:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.057388
2026-04-13T03:23:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:23:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:23:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:23:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:23:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:23:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:22:40', tmtdew=3.81641, humidity=77.2663, cloud=0.0, wind=10.9051, temperature=11.0433, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:22:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:23:03.431 [DEBUG] [Thread-200861] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:23:03.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:23:03.527 [DEBUG] [Thread-200864] [transport.py] [_log()] starting thread (client mode): 0xae5b5120
2026-04-13T03:23:03.527 [DEBUG] [Thread-200864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:23:03.542 [DEBUG] [Thread-200864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:23:03.542 [INFO] [Thread-200864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:23:03.550 [DEBUG] [Thread-200864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] client lang: <none>
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] server lang: <none>
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] kex follows: False
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:23:03.551 [DEBUG] [Thread-200864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:23:03.552 [DEBUG] [Thread-200864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:23:03.552 [DEBUG] [Thread-200864] [transport.py] [_log()] Compression: none
2026-04-13T03:23:03.552 [DEBUG] [Thread-200864] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:23:03.614 [DEBUG] [Thread-200864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:23:03.614 [DEBUG] [Thread-200864] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:23:03.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:23:03.615 [DEBUG] [Thread-200864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:23:03.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:23:03.675 [DEBUG] [Thread-200864] [transport.py] [_log()] userauth is OK
2026-04-13T03:23:03.675 [DEBUG] [Thread-200864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:23:03.675 [DEBUG] [Thread-200864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:23:03.675 [DEBUG] [Thread-200864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:23:03.675 [DEBUG] [Thread-200864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:23:03.694 [INFO] [Thread-200864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:23:03.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:23:03.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:23:04.491 [DEBUG] [Thread-200864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:23:04.491 [DEBUG] [Thread-200864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:23:04.540 [DEBUG] [Thread-200864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:23:04.540 [DEBUG] [Thread-200864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:23:04.549 [DEBUG] [Thread-200864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:23:04.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:23:04.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:23:04.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:23:04.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:23:04.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:23:04.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:23:04.586 [DEBUG] [Thread-200864] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:23:12.923 [DEBUG] [Thread-200866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:23:27.985 [DEBUG] [Thread-200867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:23:33.926 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:23:33.927 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:23:34.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:23:34.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:23: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
2026-04-13T03:23:35.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 23, 16), 4.62656, 73.0336, 0.0, 8.61156, 11.2551, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:23:35.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:23:16
2026-04-13T03:23:36.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:23:36.437 [DEBUG] [Thread-200868] [transport.py] [_log()] starting thread (client mode): 0xae50a710
2026-04-13T03:23:36.437 [DEBUG] [Thread-200868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:23:36.457 [DEBUG] [Thread-200868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:23:36.457 [INFO] [Thread-200868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] client lang: <none>
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] server lang: <none>
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] kex follows: False
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] Compression: none
2026-04-13T03:23:36.459 [DEBUG] [Thread-200868] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:23:36.471 [DEBUG] [Thread-200868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:23:36.471 [DEBUG] [Thread-200868] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:23:36.472 [DEBUG] [Thread-200868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:23:36.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:23:36.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:23:36.473 [DEBUG] [Thread-200868] [transport.py] [_log()] userauth is OK
2026-04-13T03:23:36.474 [DEBUG] [Thread-200868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:23:36.474 [DEBUG] [Thread-200868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:23:36.474 [DEBUG] [Thread-200868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:23:36.474 [DEBUG] [Thread-200868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:23:36.488 [INFO] [Thread-200868] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:23:36.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:23:36.839 [DEBUG] [Thread-200870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:23:37.250 [DEBUG] [Thread-200868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:23:37.251 [DEBUG] [Thread-200868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:23:37.251 [DEBUG] [Thread-200868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:23:37.293 [DEBUG] [Thread-200868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:23:37.293 [DEBUG] [Thread-200868] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:23:37.295 [DEBUG] [Thread-200868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:23:37.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:23:37.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:23:37.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:23:37.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:23:37.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:23:37.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:23:37.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:23:37.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:23:37.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:23:37.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.057735 -999.00  +10.90   6.82     81   +7.80 1 1 1 2 1     0    0 4.63 71.93 ZNESW 6.8 6.8 202.8 7.8 11.4 -21.8 11.2 -20.6 10.9 -18.7 11.3 -20.8
2026-04-13T03:23:37.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:23:37.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:23:37.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.057735
2026-04-13T03:23:37.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:23:37.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:23:37.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:23:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:23:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:23:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:23:16', tmtdew=4.62656, humidity=73.0336, cloud=0.0, wind=8.61156, temperature=11.2551, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:23:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:23:37.318 [DEBUG] [Thread-200868] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:23:37.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:23:37.411 [DEBUG] [Thread-200872] [transport.py] [_log()] starting thread (client mode): 0xb0fe9510
2026-04-13T03:23:37.412 [DEBUG] [Thread-200872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:23:37.426 [DEBUG] [Thread-200872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:23:37.426 [INFO] [Thread-200872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:23:37.433 [DEBUG] [Thread-200872] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:23:37.433 [DEBUG] [Thread-200872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:23:37.433 [DEBUG] [Thread-200872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] client lang: <none>
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] server lang: <none>
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] kex follows: False
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:23:37.434 [DEBUG] [Thread-200872] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:23:37.435 [DEBUG] [Thread-200872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:23:37.435 [DEBUG] [Thread-200872] [transport.py] [_log()] Compression: none
2026-04-13T03:23:37.435 [DEBUG] [Thread-200872] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:23:37.492 [DEBUG] [Thread-200872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:23:37.493 [DEBUG] [Thread-200872] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:23:37.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:23:37.494 [DEBUG] [Thread-200872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:23:37.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:23:37.553 [DEBUG] [Thread-200872] [transport.py] [_log()] userauth is OK
2026-04-13T03:23:37.553 [DEBUG] [Thread-200872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:23:37.553 [DEBUG] [Thread-200872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:23:37.554 [DEBUG] [Thread-200872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:23:37.554 [DEBUG] [Thread-200872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:23:37.579 [INFO] [Thread-200872] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:23:37.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:23:37.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:23:38.408 [DEBUG] [Thread-200872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:23:38.409 [DEBUG] [Thread-200872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:23:38.455 [DEBUG] [Thread-200872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:23:38.456 [DEBUG] [Thread-200872] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:23:38.464 [DEBUG] [Thread-200872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:23:38.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:23:38.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:23:38.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:23:38.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:23:38.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:23:38.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:23:38.498 [DEBUG] [Thread-200872] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:23:43.024 [DEBUG] [Thread-200874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:23:58.077 [DEBUG] [Thread-200875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:24:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:24:08.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:24:08.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:24:09.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 23, 51), 3.79133, 77.399, 0.0, 10.5876, 11.0433, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:24:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:23:51
2026-04-13T03:24:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:24:10.444 [DEBUG] [Thread-200876] [transport.py] [_log()] starting thread (client mode): 0xae515870
2026-04-13T03:24:10.444 [DEBUG] [Thread-200876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:24:10.464 [DEBUG] [Thread-200876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:24:10.464 [INFO] [Thread-200876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] client lang: <none>
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] server lang: <none>
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] kex follows: False
2026-04-13T03:24:10.467 [DEBUG] [Thread-200876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:24:10.468 [DEBUG] [Thread-200876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:24:10.468 [DEBUG] [Thread-200876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:24:10.468 [DEBUG] [Thread-200876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:24:10.468 [DEBUG] [Thread-200876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:24:10.468 [DEBUG] [Thread-200876] [transport.py] [_log()] Compression: none
2026-04-13T03:24:10.468 [DEBUG] [Thread-200876] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:24:10.484 [DEBUG] [Thread-200876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:24:10.485 [DEBUG] [Thread-200876] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:24:10.485 [DEBUG] [Thread-200876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:24:10.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:24:10.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:24:10.486 [DEBUG] [Thread-200876] [transport.py] [_log()] userauth is OK
2026-04-13T03:24:10.486 [DEBUG] [Thread-200876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:24:10.486 [DEBUG] [Thread-200876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:24:10.486 [DEBUG] [Thread-200876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:24:10.486 [DEBUG] [Thread-200876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:24:10.496 [INFO] [Thread-200876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:24:10.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:24:11.126 [DEBUG] [Thread-200876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:24:11.126 [DEBUG] [Thread-200876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:24:11.127 [DEBUG] [Thread-200876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:24:11.167 [DEBUG] [Thread-200876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:24:11.168 [DEBUG] [Thread-200876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:24:11.171 [DEBUG] [Thread-200876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:24:11.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:24:11.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:24:11.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:24:11.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:24:11.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:24:11.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:24:11.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:24:11.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:24:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:24:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.058082 -999.00  +10.90   5.68     81   +7.80 1 1 1 2 1     0    0 4.69 72.38 ZNESW 5.7 5.7 202.8 7.1 11.4 -21.8 11.2 -20.6 11.0 -18.7 11.3 -20.8
2026-04-13T03:24:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:24:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:24:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.058082
2026-04-13T03:24:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:24:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:24:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:24:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:24:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:24:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:23:51', tmtdew=3.79133, humidity=77.399, cloud=0.0, wind=10.5876, temperature=11.0433, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:23:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:24:11.201 [DEBUG] [Thread-200876] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:24:11.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:24:11.294 [DEBUG] [Thread-200879] [transport.py] [_log()] starting thread (client mode): 0xae514130
2026-04-13T03:24:11.294 [DEBUG] [Thread-200879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:24:11.309 [DEBUG] [Thread-200879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:24:11.309 [INFO] [Thread-200879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] client lang: <none>
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] server lang: <none>
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] kex follows: False
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] Compression: none
2026-04-13T03:24:11.317 [DEBUG] [Thread-200879] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:24:11.382 [DEBUG] [Thread-200879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:24:11.382 [DEBUG] [Thread-200879] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:24:11.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:24:11.383 [DEBUG] [Thread-200879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:24:11.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:24:11.441 [DEBUG] [Thread-200879] [transport.py] [_log()] userauth is OK
2026-04-13T03:24:11.441 [DEBUG] [Thread-200879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:24:11.442 [DEBUG] [Thread-200879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:24:11.442 [DEBUG] [Thread-200879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:24:11.442 [DEBUG] [Thread-200879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:24:11.461 [INFO] [Thread-200879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:24:11.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:24:11.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:24:12.309 [DEBUG] [Thread-200879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:24:12.309 [DEBUG] [Thread-200879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:24:12.357 [DEBUG] [Thread-200879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:24:12.357 [DEBUG] [Thread-200879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:24:12.366 [DEBUG] [Thread-200879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:24:12.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:24: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')
2026-04-13T03:24:12.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:24:12.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:24:12.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:24:12.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:24:12.401 [DEBUG] [Thread-200879] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:24:13.116 [DEBUG] [Thread-200881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:24:28.166 [DEBUG] [Thread-200882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:24:34.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:24:34.130 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:24:36.906 [DEBUG] [Thread-200883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:24:42.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:24:42.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:24: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
2026-04-13T03:24:43.206 [DEBUG] [Thread-200884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:24:43.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 24, 27), 4.5733, 73.3156, 0.0, 8.85852, 11.2551, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:24:43.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:24:27
2026-04-13T03:24:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:24:44.267 [DEBUG] [Thread-200885] [transport.py] [_log()] starting thread (client mode): 0xae509ae0
2026-04-13T03:24:44.268 [DEBUG] [Thread-200885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:24:44.287 [DEBUG] [Thread-200885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:24:44.288 [INFO] [Thread-200885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:24:44.291 [DEBUG] [Thread-200885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:24:44.291 [DEBUG] [Thread-200885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:24:44.291 [DEBUG] [Thread-200885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:24:44.291 [DEBUG] [Thread-200885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:44.291 [DEBUG] [Thread-200885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:44.291 [DEBUG] [Thread-200885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] client lang: <none>
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] server lang: <none>
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] kex follows: False
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:24:44.292 [DEBUG] [Thread-200885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:24:44.293 [DEBUG] [Thread-200885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:24:44.293 [DEBUG] [Thread-200885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:24:44.293 [DEBUG] [Thread-200885] [transport.py] [_log()] Compression: none
2026-04-13T03:24:44.293 [DEBUG] [Thread-200885] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:24:44.313 [DEBUG] [Thread-200885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:24:44.313 [DEBUG] [Thread-200885] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:24:44.314 [DEBUG] [Thread-200885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:24:44.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:24:44.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:24:44.356 [DEBUG] [Thread-200885] [transport.py] [_log()] userauth is OK
2026-04-13T03:24:44.357 [DEBUG] [Thread-200885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:24:44.357 [DEBUG] [Thread-200885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:24:44.357 [DEBUG] [Thread-200885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:24:44.357 [DEBUG] [Thread-200885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:24:44.391 [INFO] [Thread-200885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:24:44.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:24:44.998 [DEBUG] [Thread-200885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:24:44.998 [DEBUG] [Thread-200885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:24:44.998 [DEBUG] [Thread-200885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:24:45.039 [DEBUG] [Thread-200885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:24:45.039 [DEBUG] [Thread-200885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:24:45.043 [DEBUG] [Thread-200885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:24:45.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:24:45.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:24:45.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:24:45.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:24:45.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:24:45.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:24:45.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:24:45.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:24:45.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:24:45.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.058429 -999.00  +10.90   6.23     81   +7.80 1 1 1 2 1     0    0 4.86 77.19 ZNESW 6.2 6.2 196.8 7.2 11.4 -21.7 11.2 -20.7 10.9 -18.7 11.3 -20.7
2026-04-13T03:24:45.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:24:45.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:24:45.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.058429
2026-04-13T03:24:45.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:24:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:24:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:24:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:24:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:24:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:24:27', tmtdew=4.5733, humidity=73.3156, cloud=0.0, wind=8.85852, temperature=11.2551, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:24:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:24:45.071 [DEBUG] [Thread-200885] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:24:45.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:24:45.162 [DEBUG] [Thread-200888] [transport.py] [_log()] starting thread (client mode): 0xb0f54100
2026-04-13T03:24:45.163 [DEBUG] [Thread-200888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:24:45.182 [DEBUG] [Thread-200888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:24:45.182 [INFO] [Thread-200888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:24:45.193 [DEBUG] [Thread-200888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] client lang: <none>
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] server lang: <none>
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] kex follows: False
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:24:45.194 [DEBUG] [Thread-200888] [transport.py] [_log()] Compression: none
2026-04-13T03:24:45.195 [DEBUG] [Thread-200888] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:24:45.247 [DEBUG] [Thread-200888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:24:45.247 [DEBUG] [Thread-200888] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:24:45.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:24:45.248 [DEBUG] [Thread-200888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:24:45.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:24:45.305 [DEBUG] [Thread-200888] [transport.py] [_log()] userauth is OK
2026-04-13T03:24:45.305 [DEBUG] [Thread-200888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:24:45.305 [DEBUG] [Thread-200888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:24:45.305 [DEBUG] [Thread-200888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:24:45.305 [DEBUG] [Thread-200888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:24:45.323 [INFO] [Thread-200888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:24:45.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:24:45.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:24:46.138 [DEBUG] [Thread-200888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:24:46.138 [DEBUG] [Thread-200888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:24:46.186 [DEBUG] [Thread-200888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:24:46.186 [DEBUG] [Thread-200888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:24:46.195 [DEBUG] [Thread-200888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:24:46.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:24:46.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:24:46.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:24:46.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:24:46.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:24:46.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:24:46.231 [DEBUG] [Thread-200888] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:24:58.241 [DEBUG] [Thread-200890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:25:13.284 [DEBUG] [Thread-200891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:25:16.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:25:16.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:25:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:25:17.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 25, 2), 4.56469, 73.3488, 0.0, 8.85852, 11.1721, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:25:17.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:25:02
2026-04-13T03:25:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:25:18.102 [DEBUG] [Thread-200892] [transport.py] [_log()] starting thread (client mode): 0xae5b4100
2026-04-13T03:25:18.103 [DEBUG] [Thread-200892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:25:18.123 [DEBUG] [Thread-200892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:25:18.123 [INFO] [Thread-200892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] client lang: <none>
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] server lang: <none>
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] kex follows: False
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:25:18.126 [DEBUG] [Thread-200892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:25:18.127 [DEBUG] [Thread-200892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:25:18.127 [DEBUG] [Thread-200892] [transport.py] [_log()] Compression: none
2026-04-13T03:25:18.127 [DEBUG] [Thread-200892] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:25:18.144 [DEBUG] [Thread-200892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:25:18.145 [DEBUG] [Thread-200892] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:25:18.145 [DEBUG] [Thread-200892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:25:18.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:25:18.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:25:18.147 [DEBUG] [Thread-200892] [transport.py] [_log()] userauth is OK
2026-04-13T03:25:18.147 [DEBUG] [Thread-200892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:25:18.147 [DEBUG] [Thread-200892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:25:18.147 [DEBUG] [Thread-200892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:25:18.147 [DEBUG] [Thread-200892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:25:18.171 [INFO] [Thread-200892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:25:18.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:25:18.867 [DEBUG] [Thread-200892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:25:18.867 [DEBUG] [Thread-200892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:25:18.867 [DEBUG] [Thread-200892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:25:18.910 [DEBUG] [Thread-200892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:25:18.910 [DEBUG] [Thread-200892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:25:18.912 [DEBUG] [Thread-200892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:25:18.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:25:18.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:25:18.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:25:18.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:25:18.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:25:18.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:25:18.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:25:18.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:25:18.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:25:18.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.058777 -999.00  +10.90   5.59     81   +7.80 1 1 1 2 1     0    0 4.74 71.07 ZNESW 5.6 5.6 196.4 6.5 11.4 -21.8 11.2 -20.9 10.9 -18.8 11.2 -20.8
2026-04-13T03:25:18.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:25:18.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:25:18.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.058777
2026-04-13T03:25:18.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:25:18.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:25:18.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:25:18.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:25:18.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:25:18.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:25:02', tmtdew=4.56469, humidity=73.3488, cloud=0.0, wind=8.85852, temperature=11.1721, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:24:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:25:18.937 [DEBUG] [Thread-200892] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:25:19.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:25:19.026 [DEBUG] [Thread-200895] [transport.py] [_log()] starting thread (client mode): 0xae5b4670
2026-04-13T03:25:19.026 [DEBUG] [Thread-200895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:25:19.040 [DEBUG] [Thread-200895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:25:19.040 [INFO] [Thread-200895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] client lang: <none>
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] server lang: <none>
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] kex follows: False
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:25:19.048 [DEBUG] [Thread-200895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:25:19.049 [DEBUG] [Thread-200895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:25:19.049 [DEBUG] [Thread-200895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:25:19.049 [DEBUG] [Thread-200895] [transport.py] [_log()] Compression: none
2026-04-13T03:25:19.049 [DEBUG] [Thread-200895] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:25:19.105 [DEBUG] [Thread-200895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:25:19.105 [DEBUG] [Thread-200895] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:25:19.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:25:19.106 [DEBUG] [Thread-200895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:25:19.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:25:19.161 [DEBUG] [Thread-200895] [transport.py] [_log()] userauth is OK
2026-04-13T03:25:19.161 [DEBUG] [Thread-200895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:25:19.162 [DEBUG] [Thread-200895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:25:19.162 [DEBUG] [Thread-200895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:25:19.162 [DEBUG] [Thread-200895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:25:19.180 [INFO] [Thread-200895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:25:19.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:25:19.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:25:19.992 [DEBUG] [Thread-200895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:25:19.993 [DEBUG] [Thread-200895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:25:20.041 [DEBUG] [Thread-200895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:25:20.041 [DEBUG] [Thread-200895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:25:20.051 [DEBUG] [Thread-200895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:25:20.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:25:20.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:25:20.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:25:20.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:25:20.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:25:20.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:25:20.087 [DEBUG] [Thread-200895] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:25:28.323 [DEBUG] [Thread-200897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:25:34.334 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:25:34.335 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:25:36.984 [DEBUG] [Thread-200898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:25:43.375 [DEBUG] [Thread-200899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:25:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:25:50.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:25:50.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:25:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 25, 38), 3.66282, 78.0625, 0.0, 10.3759, 10.9106, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:25:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:25:38
2026-04-13T03:25:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:25:51.964 [DEBUG] [Thread-200900] [transport.py] [_log()] starting thread (client mode): 0xae5b4a30
2026-04-13T03:25:51.964 [DEBUG] [Thread-200900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:25:51.982 [DEBUG] [Thread-200900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:25:51.982 [INFO] [Thread-200900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:25:51.984 [DEBUG] [Thread-200900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:25:51.984 [DEBUG] [Thread-200900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] client lang: <none>
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] server lang: <none>
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] kex follows: False
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] Compression: none
2026-04-13T03:25:51.985 [DEBUG] [Thread-200900] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:25:51.999 [DEBUG] [Thread-200900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:25:51.999 [DEBUG] [Thread-200900] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:25:52.000 [DEBUG] [Thread-200900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:25:52.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:25:52.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:25:52.002 [DEBUG] [Thread-200900] [transport.py] [_log()] userauth is OK
2026-04-13T03:25:52.002 [DEBUG] [Thread-200900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:25:52.002 [DEBUG] [Thread-200900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:25:52.002 [DEBUG] [Thread-200900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:25:52.002 [DEBUG] [Thread-200900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:25:52.027 [INFO] [Thread-200900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:25:52.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:25:52.627 [DEBUG] [Thread-200900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:25:52.628 [DEBUG] [Thread-200900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:25:52.628 [DEBUG] [Thread-200900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:25:52.669 [DEBUG] [Thread-200900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:25:52.669 [DEBUG] [Thread-200900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:25:52.673 [DEBUG] [Thread-200900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:25:52.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:25:52.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:25:52.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:25:52.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:25:52.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:25:52.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:25:52.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:25:52.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:25:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:25:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.059123 -999.00  +10.90   5.75     81   +7.90 1 1 1 2 1     0    0 4.53 66.60 ZNESW 5.8 5.8 195.8 6.6 11.4 -21.8 11.3 -20.8 11.0 -18.7 11.3 -20.9
2026-04-13T03:25:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:25:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:25:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.059123
2026-04-13T03:25:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:25:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:25:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:25:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:25:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:25:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:25:38', tmtdew=3.66282, humidity=78.0625, cloud=0.0, wind=10.3759, temperature=10.9106, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:25:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:25:52.700 [DEBUG] [Thread-200900] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:25:52.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:25:52.797 [DEBUG] [Thread-200903] [transport.py] [_log()] starting thread (client mode): 0xae52cb50
2026-04-13T03:25:52.797 [DEBUG] [Thread-200903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:25:52.814 [DEBUG] [Thread-200903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:25:52.814 [INFO] [Thread-200903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] client lang: <none>
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] server lang: <none>
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] kex follows: False
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:25:52.822 [DEBUG] [Thread-200903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:25:52.823 [DEBUG] [Thread-200903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:25:52.823 [DEBUG] [Thread-200903] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:25:52.823 [DEBUG] [Thread-200903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:25:52.823 [DEBUG] [Thread-200903] [transport.py] [_log()] Compression: none
2026-04-13T03:25:52.823 [DEBUG] [Thread-200903] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:25:52.885 [DEBUG] [Thread-200903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:25:52.885 [DEBUG] [Thread-200903] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:25:52.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:25:52.887 [DEBUG] [Thread-200903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:25:52.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:25:52.945 [DEBUG] [Thread-200903] [transport.py] [_log()] userauth is OK
2026-04-13T03:25:52.945 [DEBUG] [Thread-200903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:25:52.945 [DEBUG] [Thread-200903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:25:52.945 [DEBUG] [Thread-200903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:25:52.945 [DEBUG] [Thread-200903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:25:52.964 [INFO] [Thread-200903] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:25:52.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:25:52.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:25:53.771 [DEBUG] [Thread-200903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:25:53.772 [DEBUG] [Thread-200903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:25:53.820 [DEBUG] [Thread-200903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:25:53.820 [DEBUG] [Thread-200903] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:25:53.830 [DEBUG] [Thread-200903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:25:53.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:25:53.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:25:53.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:25:53.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:25:53.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:25:53.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:25:53.869 [DEBUG] [Thread-200903] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:25:58.411 [DEBUG] [Thread-200905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:13.469 [DEBUG] [Thread-200906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:23.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:26:23.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:26:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:26:25.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 26, 13), 4.52289, 73.5644, 0.0, 8.78796, 11.1224, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:26:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:26:13
2026-04-13T03:26:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:26:25.698 [DEBUG] [Thread-200907] [transport.py] [_log()] starting thread (client mode): 0xae52d2a0
2026-04-13T03:26:25.698 [DEBUG] [Thread-200907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:26:25.718 [DEBUG] [Thread-200907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:26:25.718 [INFO] [Thread-200907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:26:25.721 [DEBUG] [Thread-200907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:26:25.721 [DEBUG] [Thread-200907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:26:25.721 [DEBUG] [Thread-200907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:26:25.721 [DEBUG] [Thread-200907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] client lang: <none>
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] server lang: <none>
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] kex follows: False
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] Compression: none
2026-04-13T03:26:25.722 [DEBUG] [Thread-200907] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:26:25.740 [DEBUG] [Thread-200907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:26:25.740 [DEBUG] [Thread-200907] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:26:25.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:26:25.741 [DEBUG] [Thread-200907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:26:25.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:26:25.743 [DEBUG] [Thread-200907] [transport.py] [_log()] userauth is OK
2026-04-13T03:26:25.744 [DEBUG] [Thread-200907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:26:25.744 [DEBUG] [Thread-200907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:26:25.744 [DEBUG] [Thread-200907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:26:25.744 [DEBUG] [Thread-200907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:26:25.762 [INFO] [Thread-200907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:26:25.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:26:26.417 [DEBUG] [Thread-200907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:26:26.417 [DEBUG] [Thread-200907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:26:26.417 [DEBUG] [Thread-200907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:26:26.458 [DEBUG] [Thread-200907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:26:26.458 [DEBUG] [Thread-200907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:26:26.461 [DEBUG] [Thread-200907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:26:26.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:26:26.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:26:26.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:26:26.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:26:26.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:26:26.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:26:26.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:26:26.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:26:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:26:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.059818 -999.00  +10.90   4.91     82   +7.90 1 1 1 2 1     0    0 4.42 61.33 ZNESW 4.9 4.9 192.0 6.7 11.4 -21.7 11.2 -20.8 11.0 -18.8 11.2 -20.8
2026-04-13T03:26:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:26:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:26:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.059818
2026-04-13T03:26:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:26:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:26:26.490 [DEBUG] [Thread-200907] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:26:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:26:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:26:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:26:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:26:13', tmtdew=4.52289, humidity=73.5644, cloud=0.0, wind=8.78796, temperature=11.1224, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:26:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:26:26.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:26:26.583 [DEBUG] [Thread-200910] [transport.py] [_log()] starting thread (client mode): 0xb0fe98d0
2026-04-13T03:26:26.583 [DEBUG] [Thread-200910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:26:26.599 [DEBUG] [Thread-200910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:26:26.599 [INFO] [Thread-200910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:26:26.606 [DEBUG] [Thread-200910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:26:26.606 [DEBUG] [Thread-200910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:26:26.606 [DEBUG] [Thread-200910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:26:26.606 [DEBUG] [Thread-200910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:26:26.606 [DEBUG] [Thread-200910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:26:26.606 [DEBUG] [Thread-200910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] client lang: <none>
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] server lang: <none>
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] kex follows: False
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] Compression: none
2026-04-13T03:26:26.607 [DEBUG] [Thread-200910] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:26:26.665 [DEBUG] [Thread-200910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:26:26.665 [DEBUG] [Thread-200910] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:26:26.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:26:26.666 [DEBUG] [Thread-200910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:26:26.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:26:26.721 [DEBUG] [Thread-200910] [transport.py] [_log()] userauth is OK
2026-04-13T03:26:26.721 [DEBUG] [Thread-200910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:26:26.721 [DEBUG] [Thread-200910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:26:26.721 [DEBUG] [Thread-200910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:26:26.722 [DEBUG] [Thread-200910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:26:26.740 [INFO] [Thread-200910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:26:26.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:26:26.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:26:27.590 [DEBUG] [Thread-200910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:26:27.590 [DEBUG] [Thread-200910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:26:27.638 [DEBUG] [Thread-200910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:26:27.638 [DEBUG] [Thread-200910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:26:27.648 [DEBUG] [Thread-200910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:26:27.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:26:27.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:26:27.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:26:27.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:26:27.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:26:27.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:26:27.686 [DEBUG] [Thread-200910] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:26:28.509 [DEBUG] [Thread-200912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:34.539 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:34.540 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:37.058 [DEBUG] [Thread-200913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:43.564 [DEBUG] [Thread-200914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:57.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:26:57.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:26:57.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:26:58.605 [DEBUG] [Thread-200915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:26:58.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 26, 49), 3.61482, 78.2947, 0.0, 10.1995, 10.7448, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:26:58.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:26:49
2026-04-13T03:26:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:26:59.517 [DEBUG] [Thread-200916] [transport.py] [_log()] starting thread (client mode): 0xb0f56f20
2026-04-13T03:26:59.517 [DEBUG] [Thread-200916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:26:59.537 [DEBUG] [Thread-200916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:26:59.537 [INFO] [Thread-200916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] client lang: <none>
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] server lang: <none>
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] kex follows: False
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:26:59.541 [DEBUG] [Thread-200916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:26:59.542 [DEBUG] [Thread-200916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:26:59.542 [DEBUG] [Thread-200916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:26:59.542 [DEBUG] [Thread-200916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:26:59.542 [DEBUG] [Thread-200916] [transport.py] [_log()] Compression: none
2026-04-13T03:26:59.542 [DEBUG] [Thread-200916] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:26:59.558 [DEBUG] [Thread-200916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:26:59.558 [DEBUG] [Thread-200916] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:26:59.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:26:59.559 [DEBUG] [Thread-200916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:26:59.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:26:59.562 [DEBUG] [Thread-200916] [transport.py] [_log()] userauth is OK
2026-04-13T03:26:59.562 [DEBUG] [Thread-200916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:26:59.562 [DEBUG] [Thread-200916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:26:59.562 [DEBUG] [Thread-200916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:26:59.562 [DEBUG] [Thread-200916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:26:59.598 [INFO] [Thread-200916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:26:59.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:27:00.230 [DEBUG] [Thread-200916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:27:00.230 [DEBUG] [Thread-200916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:27:00.231 [DEBUG] [Thread-200916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:27:00.271 [DEBUG] [Thread-200916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:27:00.271 [DEBUG] [Thread-200916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:27:00.275 [DEBUG] [Thread-200916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:27:00.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:27:00.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:27:00.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:27:00.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:27:00.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:27:00.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:27:00.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:27:00.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:27:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:27:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.060165 -999.00  +10.80   4.64     82   +7.90 1 1 1 2 1     0    0 4.33 56.88 ZNESW 4.6 4.6 199.6 6.3 11.3 -21.8 11.2 -20.6 11.0 -18.8 11.2 -21.0
2026-04-13T03:27:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:27:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:27:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.060165
2026-04-13T03:27:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:27:00.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:27:00.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:27:00.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:27:00.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:27:00.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:26:49', tmtdew=3.61482, humidity=78.2947, cloud=0.0, wind=10.1995, temperature=10.7448, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:26:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:27:00.302 [DEBUG] [Thread-200916] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:27:00.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:27:00.393 [DEBUG] [Thread-200919] [transport.py] [_log()] starting thread (client mode): 0xb0febca0
2026-04-13T03:27:00.393 [DEBUG] [Thread-200919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:27:00.409 [DEBUG] [Thread-200919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:27:00.409 [INFO] [Thread-200919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:27:00.416 [DEBUG] [Thread-200919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] client lang: <none>
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] server lang: <none>
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] kex follows: False
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] Compression: none
2026-04-13T03:27:00.417 [DEBUG] [Thread-200919] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:27:00.476 [DEBUG] [Thread-200919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:27:00.477 [DEBUG] [Thread-200919] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:27:00.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:27:00.478 [DEBUG] [Thread-200919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:27:00.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:27:00.533 [DEBUG] [Thread-200919] [transport.py] [_log()] userauth is OK
2026-04-13T03:27:00.533 [DEBUG] [Thread-200919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:27:00.533 [DEBUG] [Thread-200919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:27:00.533 [DEBUG] [Thread-200919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:27:00.533 [DEBUG] [Thread-200919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:27:00.552 [INFO] [Thread-200919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:27:00.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:27:00.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:27:01.395 [DEBUG] [Thread-200919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:27:01.396 [DEBUG] [Thread-200919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:27:01.443 [DEBUG] [Thread-200919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:27:01.443 [DEBUG] [Thread-200919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:27:01.454 [DEBUG] [Thread-200919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:27:01.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:27:01.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:27:01.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:27:01.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:27:01.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:27:01.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:27:01.493 [DEBUG] [Thread-200919] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:27:13.643 [DEBUG] [Thread-200921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:27:28.686 [DEBUG] [Thread-200922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:27:31.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:27:31.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:27:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:27:32.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 27, 24), 4.45386, 74.1639, 0.0, 8.66448, 11.1058, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:27:32.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:27:24
2026-04-13T03:27:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:27:33.340 [DEBUG] [Thread-200923] [transport.py] [_log()] starting thread (client mode): 0xb0f56740
2026-04-13T03:27:33.340 [DEBUG] [Thread-200923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:27:33.357 [DEBUG] [Thread-200923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:27:33.357 [INFO] [Thread-200923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] client lang: <none>
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] server lang: <none>
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] kex follows: False
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:27:33.360 [DEBUG] [Thread-200923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:27:33.361 [DEBUG] [Thread-200923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:27:33.361 [DEBUG] [Thread-200923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:27:33.361 [DEBUG] [Thread-200923] [transport.py] [_log()] Compression: none
2026-04-13T03:27:33.361 [DEBUG] [Thread-200923] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:27:33.378 [DEBUG] [Thread-200923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:27:33.379 [DEBUG] [Thread-200923] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:27:33.379 [DEBUG] [Thread-200923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:27:33.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:27:33.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:27:33.381 [DEBUG] [Thread-200923] [transport.py] [_log()] userauth is OK
2026-04-13T03:27:33.381 [DEBUG] [Thread-200923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:27:33.381 [DEBUG] [Thread-200923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:27:33.381 [DEBUG] [Thread-200923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:27:33.381 [DEBUG] [Thread-200923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:27:33.416 [INFO] [Thread-200923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:27:33.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:27:34.008 [DEBUG] [Thread-200923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:27:34.008 [DEBUG] [Thread-200923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:27:34.009 [DEBUG] [Thread-200923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:27:34.050 [DEBUG] [Thread-200923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:27:34.050 [DEBUG] [Thread-200923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:27:34.053 [DEBUG] [Thread-200923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:27:34.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:27:34.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:27:34.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:27:34.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:27:34.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:27:34.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:27:34.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:27:34.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:27:34.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:27:34.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.060513 -999.00  +10.80   4.42     82   +8.00 1 1 1 2 1     0    0 4.24 52.63 ZNESW 4.4 4.4 202.5 6.0 11.3 -21.9 11.2 -21.0 11.0 -18.8 11.2 -20.8
2026-04-13T03:27:34.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:27:34.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:27:34.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.060513
2026-04-13T03:27:34.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:27:34.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:27:34.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:27:34.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:27:34.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:27:34.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:27:24', tmtdew=4.45386, humidity=74.1639, cloud=0.0, wind=8.66448, temperature=11.1058, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:27:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[1.2967499999999994, 1.2872500000000002, 1.1892500000000004, 1.2005, 2.1304999999999996, nan, 0.4580000000000002, nan, 1.8114999999999997, 0.9730000000000016, 0.23925000000000018, 0.7370000000000001, nan, nan, 0.44599999999999973, nan, 1.7462499999999999, 0.33699999999999974, 0.13399999999999856, 0.11574999999999847, 0.5539999999999985, 1.6447499999999984, 1.4002500000000015, 1.5557499999999997, 1.1929999999999996, 0.1355000000000004, 0.09375, 0.0259999999999998, 0.1460000000000008, 0.22750000000000092, 0.4170000000000007, 0.34500000000000064, 0.2777499999999993], zp_timestamp='2026-04-13T01:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:27:34.077 [DEBUG] [Thread-200923] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:27:34.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:27:34.172 [DEBUG] [Thread-200926] [transport.py] [_log()] starting thread (client mode): 0xae5b46a0
2026-04-13T03:27:34.172 [DEBUG] [Thread-200926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:27:34.189 [DEBUG] [Thread-200926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:27:34.190 [INFO] [Thread-200926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:27:34.197 [DEBUG] [Thread-200926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] client lang: <none>
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] server lang: <none>
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] kex follows: False
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] Compression: none
2026-04-13T03:27:34.198 [DEBUG] [Thread-200926] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:27:34.261 [DEBUG] [Thread-200926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:27:34.261 [DEBUG] [Thread-200926] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:27:34.262 [DEBUG] [Thread-200926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:27:34.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:27:34.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:27:34.317 [DEBUG] [Thread-200926] [transport.py] [_log()] userauth is OK
2026-04-13T03:27:34.317 [DEBUG] [Thread-200926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:27:34.317 [DEBUG] [Thread-200926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:27:34.317 [DEBUG] [Thread-200926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:27:34.317 [DEBUG] [Thread-200926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:27:34.337 [INFO] [Thread-200926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:27:34.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:27:34.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:27:34.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:27:34.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:27:35.168 [DEBUG] [Thread-200926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:27:35.169 [DEBUG] [Thread-200926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:27:35.217 [DEBUG] [Thread-200926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:27:35.217 [DEBUG] [Thread-200926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:27:35.226 [DEBUG] [Thread-200926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:27:35.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:27:35.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:27:35.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:27:35.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:27:35.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:27:35.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:27:35.263 [DEBUG] [Thread-200926] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:27:37.143 [DEBUG] [Thread-200928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:27:43.721 [DEBUG] [Thread-200929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:27:58.774 [DEBUG] [Thread-200930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:28:05.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:28:05.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:28:05.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:28:06.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 27, 24), 4.45386, 74.1639, 0.0, 8.66448, 11.1058, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:28:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:27:24
2026-04-13T03:28:06.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:28:07.155 [DEBUG] [Thread-200931] [transport.py] [_log()] starting thread (client mode): 0xb0f545b0
2026-04-13T03:28:07.155 [DEBUG] [Thread-200931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:28:07.175 [DEBUG] [Thread-200931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:28:07.175 [INFO] [Thread-200931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:28:07.178 [DEBUG] [Thread-200931] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:28:07.178 [DEBUG] [Thread-200931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] client lang: <none>
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] server lang: <none>
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] kex follows: False
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:28:07.179 [DEBUG] [Thread-200931] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:28:07.180 [DEBUG] [Thread-200931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:28:07.180 [DEBUG] [Thread-200931] [transport.py] [_log()] Compression: none
2026-04-13T03:28:07.180 [DEBUG] [Thread-200931] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:28:07.200 [DEBUG] [Thread-200931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:28:07.201 [DEBUG] [Thread-200931] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:28:07.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:28:07.203 [DEBUG] [Thread-200931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:28:07.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:28:07.205 [DEBUG] [Thread-200931] [transport.py] [_log()] userauth is OK
2026-04-13T03:28:07.205 [DEBUG] [Thread-200931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:28:07.205 [DEBUG] [Thread-200931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:28:07.206 [DEBUG] [Thread-200931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:28:07.206 [DEBUG] [Thread-200931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:28:07.235 [INFO] [Thread-200931] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:28:07.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:28:07.856 [DEBUG] [Thread-200931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:28:07.857 [DEBUG] [Thread-200931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:28:07.857 [DEBUG] [Thread-200931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:28:07.899 [DEBUG] [Thread-200931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:28:07.899 [DEBUG] [Thread-200931] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:28:07.902 [DEBUG] [Thread-200931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:28:07.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:28:07.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:28:07.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:28:07.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:28:07.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:28:07.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:28:07.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:28:07.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:28:07.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:28:07.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.060860 -999.00  +10.80   5.90     83   +8.00 1 1 1 2 1     0    0 4.21 51.76 ZNESW 5.9 5.9 200.0 7.1 11.3 -21.8 11.2 -20.7 10.9 -18.9 11.2 -20.8
2026-04-13T03:28:07.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:28:07.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:28:07.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.060860
2026-04-13T03:28:07.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:28:07.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:28:07.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:28:07.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:28:07.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:28:07.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:27:24', tmtdew=4.45386, humidity=74.1639, cloud=0.0, wind=8.66448, temperature=11.1058, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:27:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[1.0467499999999994, 0.9227500000000006, 0.4722500000000007, 0.8804999999999996, 2.0525, 0.7032500000000006, 0.6044999999999998, nan, 1.160499999999999, 0.9250000000000007, 0.2182499999999994, 0.8460000000000001, 1.9179999999999993, 0.5717499999999998, 0.4924999999999997, nan, 1.5432500000000005, 0.4045000000000005, 0.1449999999999978, 0.1352499999999992, 0.38899999999999935, 1.1842499999999987, 0.6092500000000012, 1.8202499999999997, 0.9819999999999993, 0.14649999999999963, 0.1297499999999996, 0.04150000000000098, 0.16400000000000148, 0.245000000000001, 0.4090000000000007, 0.3310000000000022, 0.2292500000000004], zp_timestamp='2026-04-13T01:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:28:07.924 [DEBUG] [Thread-200931] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:28:08.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:28:08.017 [DEBUG] [Thread-200934] [transport.py] [_log()] starting thread (client mode): 0xb0f55210
2026-04-13T03:28:08.017 [DEBUG] [Thread-200934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:28:08.032 [DEBUG] [Thread-200934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:28:08.032 [INFO] [Thread-200934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] client lang: <none>
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] server lang: <none>
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] kex follows: False
2026-04-13T03:28:08.039 [DEBUG] [Thread-200934] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:28:08.040 [DEBUG] [Thread-200934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:28:08.040 [DEBUG] [Thread-200934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:28:08.040 [DEBUG] [Thread-200934] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:28:08.040 [DEBUG] [Thread-200934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:28:08.040 [DEBUG] [Thread-200934] [transport.py] [_log()] Compression: none
2026-04-13T03:28:08.040 [DEBUG] [Thread-200934] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:28:08.100 [DEBUG] [Thread-200934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:28:08.100 [DEBUG] [Thread-200934] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:28:08.101 [DEBUG] [Thread-200934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:28:08.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:28:08.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:28:08.156 [DEBUG] [Thread-200934] [transport.py] [_log()] userauth is OK
2026-04-13T03:28:08.157 [DEBUG] [Thread-200934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:28:08.157 [DEBUG] [Thread-200934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:28:08.157 [DEBUG] [Thread-200934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:28:08.157 [DEBUG] [Thread-200934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:28:08.177 [INFO] [Thread-200934] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:28:08.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:28:08.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:28:09.036 [DEBUG] [Thread-200934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:28:09.037 [DEBUG] [Thread-200934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:28:09.089 [DEBUG] [Thread-200934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:28:09.090 [DEBUG] [Thread-200934] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:28:09.099 [DEBUG] [Thread-200934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:28:09.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:28:09.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:28:09.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:28:09.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:28:09.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:28:09.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:28:09.137 [DEBUG] [Thread-200934] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:28:13.814 [DEBUG] [Thread-200936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:28:28.880 [DEBUG] [Thread-200937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:28:34.950 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:28:34.952 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:28:37.231 [DEBUG] [Thread-200938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:28:39.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:28:39.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:28:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:28:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 27, 59), 4.33797, 74.7469, 0.0, 8.4528, 11.0892, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:28:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:27:59
2026-04-13T03:28:40.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:28:41.031 [DEBUG] [Thread-200939] [transport.py] [_log()] starting thread (client mode): 0xae5b5330
2026-04-13T03:28:41.031 [DEBUG] [Thread-200939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:28:41.051 [DEBUG] [Thread-200939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:28:41.051 [INFO] [Thread-200939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:28:41.053 [DEBUG] [Thread-200939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] client lang: <none>
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] server lang: <none>
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] kex follows: False
2026-04-13T03:28:41.054 [DEBUG] [Thread-200939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:28:41.055 [DEBUG] [Thread-200939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:28:41.055 [DEBUG] [Thread-200939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:28:41.055 [DEBUG] [Thread-200939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:28:41.055 [DEBUG] [Thread-200939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:28:41.055 [DEBUG] [Thread-200939] [transport.py] [_log()] Compression: none
2026-04-13T03:28:41.055 [DEBUG] [Thread-200939] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:28:41.068 [DEBUG] [Thread-200939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:28:41.068 [DEBUG] [Thread-200939] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:28:41.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:28:41.069 [DEBUG] [Thread-200939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:28:41.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:28:41.071 [DEBUG] [Thread-200939] [transport.py] [_log()] userauth is OK
2026-04-13T03:28:41.071 [DEBUG] [Thread-200939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:28:41.071 [DEBUG] [Thread-200939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:28:41.071 [DEBUG] [Thread-200939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:28:41.071 [DEBUG] [Thread-200939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:28:41.089 [INFO] [Thread-200939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:28:41.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:28:41.726 [DEBUG] [Thread-200939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:28:41.726 [DEBUG] [Thread-200939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:28:41.727 [DEBUG] [Thread-200939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:28:41.767 [DEBUG] [Thread-200939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:28:41.768 [DEBUG] [Thread-200939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:28:41.771 [DEBUG] [Thread-200939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:28:41.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:28:41.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:28:41.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:28:41.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:28:41.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:28:41.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:28:41.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:28:41.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:28:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:28:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.061207 -999.00  +10.80   5.65     83   +8.10 1 1 1 2 1     0    0 4.24 51.72 ZNESW 5.7 5.7 202.4 7.0 11.4 -21.7 11.2 -20.7 10.9 -19.0 11.2 -20.9
2026-04-13T03:28:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:28:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:28:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.061207
2026-04-13T03:28:41.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:28:41.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:28:41.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:28:41.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:28:41.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:28:41.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:27:59', tmtdew=4.33797, humidity=74.7469, cloud=0.0, wind=8.4528, temperature=11.0892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:28:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[1.0467499999999994, 0.9227500000000006, 0.4722500000000007, 0.8804999999999996, 2.0525, 0.7032500000000006, 0.6044999999999998, nan, 1.160499999999999, 0.9250000000000007, 0.2182499999999994, 0.8460000000000001, 1.9179999999999993, 0.5717499999999998, 0.4924999999999997, nan, 1.5432500000000005, 0.4045000000000005, 0.1449999999999978, 0.1352499999999992, 0.38899999999999935, 1.1842499999999987, 0.6092500000000012, 1.8202499999999997, 0.9819999999999993, 0.14649999999999963, 0.1297499999999996, 0.04150000000000098, 0.16400000000000148, 0.245000000000001, 0.4090000000000007, 0.3310000000000022, 0.2292500000000004], zp_timestamp='2026-04-13T01:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:28:41.798 [DEBUG] [Thread-200939] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:28:41.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:28:41.891 [DEBUG] [Thread-200942] [transport.py] [_log()] starting thread (client mode): 0xae5146a0
2026-04-13T03:28:41.891 [DEBUG] [Thread-200942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:28:41.906 [DEBUG] [Thread-200942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:28:41.906 [INFO] [Thread-200942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:28:41.913 [DEBUG] [Thread-200942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:28:41.914 [DEBUG] [Thread-200942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:28:41.914 [DEBUG] [Thread-200942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:28:41.914 [DEBUG] [Thread-200942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:41.914 [DEBUG] [Thread-200942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:28:41.914 [DEBUG] [Thread-200942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:41.914 [DEBUG] [Thread-200942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:28:41.914 [DEBUG] [Thread-200942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] client lang: <none>
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] server lang: <none>
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] kex follows: False
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:28:41.915 [DEBUG] [Thread-200942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:28:41.916 [DEBUG] [Thread-200942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:28:41.916 [DEBUG] [Thread-200942] [transport.py] [_log()] Compression: none
2026-04-13T03:28:41.916 [DEBUG] [Thread-200942] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:28:41.973 [DEBUG] [Thread-200942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:28:41.974 [DEBUG] [Thread-200942] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:28:41.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:28:41.975 [DEBUG] [Thread-200942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:28:41.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:28:42.033 [DEBUG] [Thread-200942] [transport.py] [_log()] userauth is OK
2026-04-13T03:28:42.033 [DEBUG] [Thread-200942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:28:42.033 [DEBUG] [Thread-200942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:28:42.033 [DEBUG] [Thread-200942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:28:42.033 [DEBUG] [Thread-200942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:28:42.052 [INFO] [Thread-200942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:28:42.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:28:42.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:28:42.843 [DEBUG] [Thread-200942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:28:42.844 [DEBUG] [Thread-200942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:28:42.892 [DEBUG] [Thread-200942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:28:42.892 [DEBUG] [Thread-200942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:28:42.902 [DEBUG] [Thread-200942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:28:42.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:28:42.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:28:42.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:28:42.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:28:42.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:28:42.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:28:42.939 [DEBUG] [Thread-200942] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:28:43.913 [DEBUG] [Thread-200944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:28:58.954 [DEBUG] [Thread-200945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:29:12.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:29:12.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:29:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:29:13.994 [DEBUG] [Thread-200946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:29:14.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 28, 35), 3.51703, 78.8255, 0.0, 10.4112, 10.7779, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:29:14.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:28:35
2026-04-13T03:29:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:29:14.964 [DEBUG] [Thread-200947] [transport.py] [_log()] starting thread (client mode): 0xae5b5fc0
2026-04-13T03:29:14.964 [DEBUG] [Thread-200947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:29:14.982 [DEBUG] [Thread-200947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:29:14.982 [INFO] [Thread-200947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] client lang: <none>
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] server lang: <none>
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] kex follows: False
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] Compression: none
2026-04-13T03:29:14.984 [DEBUG] [Thread-200947] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:29:14.996 [DEBUG] [Thread-200947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:29:14.996 [DEBUG] [Thread-200947] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:29:14.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:29:14.997 [DEBUG] [Thread-200947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:29:14.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:29:14.999 [DEBUG] [Thread-200947] [transport.py] [_log()] userauth is OK
2026-04-13T03:29:14.999 [DEBUG] [Thread-200947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:29:14.999 [DEBUG] [Thread-200947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:29:14.999 [DEBUG] [Thread-200947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:29:14.999 [DEBUG] [Thread-200947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:29:15.017 [INFO] [Thread-200947] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:29:15.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:29:15.595 [DEBUG] [Thread-200947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:29:15.595 [DEBUG] [Thread-200947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:29:15.596 [DEBUG] [Thread-200947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:29:15.636 [DEBUG] [Thread-200947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:29:15.636 [DEBUG] [Thread-200947] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:29:15.640 [DEBUG] [Thread-200947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:29:15.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:29:15.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:29:15.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:29:15.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:29:15.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:29:15.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:29:15.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:29:15.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:29:15.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:29:15.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.061554 -999.00  +10.80   6.18     83   +8.10 1 1 1 2 1     0    0 4.28 52.45 ZNESW 6.2 6.2 201.6 7.0 11.3 -21.7 11.2 -20.6 10.9 -18.9 11.2 -20.6
2026-04-13T03:29:15.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:29:15.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:29:15.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.061554
2026-04-13T03:29:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:29:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:29:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:29:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:29:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:29:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:28:35', tmtdew=3.51703, humidity=78.8255, cloud=0.0, wind=10.4112, temperature=10.7779, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:28:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[1.0467499999999994, 0.9227500000000006, 0.4722500000000007, 0.8804999999999996, 2.0525, 0.7032500000000006, 0.6044999999999998, nan, 1.160499999999999, 0.9250000000000007, 0.2182499999999994, 0.8460000000000001, 1.9179999999999993, 0.5717499999999998, 0.4924999999999997, nan, 1.5432500000000005, 0.4045000000000005, 0.1449999999999978, 0.1352499999999992, 0.38899999999999935, 1.1842499999999987, 0.6092500000000012, 1.8202499999999997, 0.9819999999999993, 0.14649999999999963, 0.1297499999999996, 0.04150000000000098, 0.16400000000000148, 0.245000000000001, 0.4090000000000007, 0.3310000000000022, 0.2292500000000004], zp_timestamp='2026-04-13T01:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:29:15.667 [DEBUG] [Thread-200947] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:29:15.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:29:15.760 [DEBUG] [Thread-200950] [transport.py] [_log()] starting thread (client mode): 0xb0f56050
2026-04-13T03:29:15.761 [DEBUG] [Thread-200950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:29:15.775 [DEBUG] [Thread-200950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:29:15.775 [INFO] [Thread-200950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:29:15.783 [DEBUG] [Thread-200950] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:29:15.783 [DEBUG] [Thread-200950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:29:15.783 [DEBUG] [Thread-200950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:29:15.783 [DEBUG] [Thread-200950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] client lang: <none>
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] server lang: <none>
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] kex follows: False
2026-04-13T03:29:15.784 [DEBUG] [Thread-200950] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:29:15.785 [DEBUG] [Thread-200950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:29:15.785 [DEBUG] [Thread-200950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:29:15.785 [DEBUG] [Thread-200950] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:29:15.785 [DEBUG] [Thread-200950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:29:15.785 [DEBUG] [Thread-200950] [transport.py] [_log()] Compression: none
2026-04-13T03:29:15.785 [DEBUG] [Thread-200950] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:29:15.841 [DEBUG] [Thread-200950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:29:15.841 [DEBUG] [Thread-200950] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:29:15.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:29:15.843 [DEBUG] [Thread-200950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:29:15.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:29:15.897 [DEBUG] [Thread-200950] [transport.py] [_log()] userauth is OK
2026-04-13T03:29:15.898 [DEBUG] [Thread-200950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:29:15.898 [DEBUG] [Thread-200950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:29:15.898 [DEBUG] [Thread-200950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:29:15.898 [DEBUG] [Thread-200950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:29:15.916 [INFO] [Thread-200950] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:29:15.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:29:15.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:29:16.722 [DEBUG] [Thread-200950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:29:16.723 [DEBUG] [Thread-200950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:29:16.771 [DEBUG] [Thread-200950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:29:16.771 [DEBUG] [Thread-200950] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:29:16.781 [DEBUG] [Thread-200950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:29:16.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:29:16.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:29:16.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:29:16.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:29:16.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:29:16.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:29:16.819 [DEBUG] [Thread-200950] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:29:29.032 [DEBUG] [Thread-200952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:29:35.161 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:29:35.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:29:37.308 [DEBUG] [Thread-200953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:29:44.095 [DEBUG] [Thread-200954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:29:46.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:29:46.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:29:46.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:29:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 29, 10), 4.17957, 75.562, 0.0, 8.59392, 11.0892, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:29:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:29:10
2026-04-13T03:29:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:29:48.720 [DEBUG] [Thread-200955] [transport.py] [_log()] starting thread (client mode): 0xb0f57df0
2026-04-13T03:29:48.720 [DEBUG] [Thread-200955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:29:48.741 [DEBUG] [Thread-200955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:29:48.741 [INFO] [Thread-200955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] client lang: <none>
2026-04-13T03:29:48.743 [DEBUG] [Thread-200955] [transport.py] [_log()] server lang: <none>
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] kex follows: False
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] Compression: none
2026-04-13T03:29:48.744 [DEBUG] [Thread-200955] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:29:48.754 [DEBUG] [Thread-200955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:29:48.755 [DEBUG] [Thread-200955] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:29:48.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:29:48.756 [DEBUG] [Thread-200955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:29:48.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:29:48.758 [DEBUG] [Thread-200955] [transport.py] [_log()] userauth is OK
2026-04-13T03:29:48.758 [DEBUG] [Thread-200955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:29:48.758 [DEBUG] [Thread-200955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:29:48.758 [DEBUG] [Thread-200955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:29:48.758 [DEBUG] [Thread-200955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:29:48.776 [INFO] [Thread-200955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:29:48.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:29:49.394 [DEBUG] [Thread-200955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:29:49.395 [DEBUG] [Thread-200955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:29:49.395 [DEBUG] [Thread-200955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:29:49.435 [DEBUG] [Thread-200955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:29:49.435 [DEBUG] [Thread-200955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:29:49.438 [DEBUG] [Thread-200955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:29:49.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:29:49.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:29:49.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:29:49.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:29:49.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:29:49.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:29:49.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:29:49.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:29:49.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:29:49.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.062249 -999.00  +10.80   4.49     84   +8.20 1 1 1 2 1     0    0 4.00 41.35 ZNESW 4.5 4.5 195.6 5.9 11.4 -21.7 11.2 -20.6 10.9 -18.8 11.2 -20.7
2026-04-13T03:29:49.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:29:49.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:29:49.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.062249
2026-04-13T03:29:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:29:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:29:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:29:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:29:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:29:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:29:10', tmtdew=4.17957, humidity=75.562, cloud=0.0, wind=8.59392, temperature=11.0892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:29:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[1.0467499999999994, 0.9227500000000006, 0.4722500000000007, 0.8804999999999996, 2.0525, 0.7032500000000006, 0.6044999999999998, nan, 1.160499999999999, 0.9250000000000007, 0.2182499999999994, 0.8460000000000001, 1.9179999999999993, 0.5717499999999998, 0.4924999999999997, nan, 1.5432500000000005, 0.4045000000000005, 0.1449999999999978, 0.1352499999999992, 0.38899999999999935, 1.1842499999999987, 0.6092500000000012, 1.8202499999999997, 0.9819999999999993, 0.14649999999999963, 0.1297499999999996, 0.04150000000000098, 0.16400000000000148, 0.245000000000001, 0.4090000000000007, 0.3310000000000022, 0.2292500000000004], zp_timestamp='2026-04-13T01:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:29:49.464 [DEBUG] [Thread-200955] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:29:49.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:29:49.557 [DEBUG] [Thread-200958] [transport.py] [_log()] starting thread (client mode): 0xae52f160
2026-04-13T03:29:49.558 [DEBUG] [Thread-200958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:29:49.571 [DEBUG] [Thread-200958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:29:49.572 [INFO] [Thread-200958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:29:49.579 [DEBUG] [Thread-200958] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:29:49.579 [DEBUG] [Thread-200958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:29:49.579 [DEBUG] [Thread-200958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:29:49.579 [DEBUG] [Thread-200958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:49.579 [DEBUG] [Thread-200958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:29:49.579 [DEBUG] [Thread-200958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:49.579 [DEBUG] [Thread-200958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] client lang: <none>
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] server lang: <none>
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] kex follows: False
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] Compression: none
2026-04-13T03:29:49.580 [DEBUG] [Thread-200958] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:29:49.639 [DEBUG] [Thread-200958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:29:49.639 [DEBUG] [Thread-200958] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:29:49.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:29:49.640 [DEBUG] [Thread-200958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:29:49.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:29:49.696 [DEBUG] [Thread-200958] [transport.py] [_log()] userauth is OK
2026-04-13T03:29:49.697 [DEBUG] [Thread-200958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:29:49.697 [DEBUG] [Thread-200958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:29:49.697 [DEBUG] [Thread-200958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:29:49.697 [DEBUG] [Thread-200958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:29:49.718 [INFO] [Thread-200958] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:29:49.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:29:49.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:29:50.527 [DEBUG] [Thread-200958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:29:50.527 [DEBUG] [Thread-200958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:29:50.575 [DEBUG] [Thread-200958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:29:50.575 [DEBUG] [Thread-200958] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:29:50.585 [DEBUG] [Thread-200958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:29:50.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:29:50.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:29:50.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:29:50.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:29:50.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:29:50.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:29:50.622 [DEBUG] [Thread-200958] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:29:59.131 [DEBUG] [Thread-200960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:30:14.185 [DEBUG] [Thread-200961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:30:20.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:30:20.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:30:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:30:21.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 29, 46), 3.43465, 79.2568, 0.0, 9.84672, 10.6784, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:30:21.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:29:46
2026-04-13T03:30:22.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:30:22.481 [DEBUG] [Thread-200962] [transport.py] [_log()] starting thread (client mode): 0xb0fb5c60
2026-04-13T03:30:22.481 [DEBUG] [Thread-200962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:30:22.493 [DEBUG] [Thread-200962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:30:22.493 [INFO] [Thread-200962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] client lang: <none>
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] server lang: <none>
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] kex follows: False
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] Compression: none
2026-04-13T03:30:22.496 [DEBUG] [Thread-200962] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:30:22.510 [DEBUG] [Thread-200962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:30:22.510 [DEBUG] [Thread-200962] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:30:22.511 [DEBUG] [Thread-200962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:30:22.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:30:22.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:30:22.512 [DEBUG] [Thread-200962] [transport.py] [_log()] userauth is OK
2026-04-13T03:30:22.512 [DEBUG] [Thread-200962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:30:22.512 [DEBUG] [Thread-200962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:30:22.512 [DEBUG] [Thread-200962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:30:22.512 [DEBUG] [Thread-200962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:30:22.531 [INFO] [Thread-200962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:30:22.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:30:23.110 [DEBUG] [Thread-200962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:30:23.110 [DEBUG] [Thread-200962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:30:23.111 [DEBUG] [Thread-200962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:30:23.151 [DEBUG] [Thread-200962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:30:23.151 [DEBUG] [Thread-200962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:30:23.155 [DEBUG] [Thread-200962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:30:23.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:30:23.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:30:23.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:30:23.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:30:23.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:30:23.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:30:23.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:30:23.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:30:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:30:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.062596 -999.00  +10.80   5.69     83   +8.10 1 1 1 2 1     0    0 3.76 35.66 ZNESW 5.7 5.7 199.2 5.9 11.3 -21.8 11.1 -20.7 10.9 -18.8 11.2 -20.7
2026-04-13T03:30:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:30:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:30:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.062596
2026-04-13T03:30:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:30:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:30:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:30:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:30:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:30:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:29:46', tmtdew=3.43465, humidity=79.2568, cloud=0.0, wind=9.84672, temperature=10.6784, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:30:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[1.0467499999999994, 0.9227500000000006, 0.4722500000000007, 0.8804999999999996, 2.0525, 0.7032500000000006, 0.6044999999999998, nan, 1.160499999999999, 0.9250000000000007, 0.2182499999999994, 0.8460000000000001, 1.9179999999999993, 0.5717499999999998, 0.4924999999999997, nan, 1.5432500000000005, 0.4045000000000005, 0.1449999999999978, 0.1352499999999992, 0.38899999999999935, 1.1842499999999987, 0.6092500000000012, 1.8202499999999997, 0.9819999999999993, 0.14649999999999963, 0.1297499999999996, 0.04150000000000098, 0.16400000000000148, 0.245000000000001, 0.4090000000000007, 0.3310000000000022, 0.2292500000000004], zp_timestamp='2026-04-13T01:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:30:23.180 [DEBUG] [Thread-200962] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:30:23.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:30:23.275 [DEBUG] [Thread-200965] [transport.py] [_log()] starting thread (client mode): 0xb0f56ec0
2026-04-13T03:30:23.275 [DEBUG] [Thread-200965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:30:23.289 [DEBUG] [Thread-200965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:30:23.289 [INFO] [Thread-200965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:30:23.297 [DEBUG] [Thread-200965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:30:23.297 [DEBUG] [Thread-200965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:30:23.297 [DEBUG] [Thread-200965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:30:23.297 [DEBUG] [Thread-200965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:23.297 [DEBUG] [Thread-200965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:23.297 [DEBUG] [Thread-200965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] client lang: <none>
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] server lang: <none>
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] kex follows: False
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:30:23.298 [DEBUG] [Thread-200965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:30:23.299 [DEBUG] [Thread-200965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:30:23.299 [DEBUG] [Thread-200965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:30:23.299 [DEBUG] [Thread-200965] [transport.py] [_log()] Compression: none
2026-04-13T03:30:23.299 [DEBUG] [Thread-200965] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:30:23.357 [DEBUG] [Thread-200965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:30:23.358 [DEBUG] [Thread-200965] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:30:23.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:30:23.360 [DEBUG] [Thread-200965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:30:23.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:30:23.417 [DEBUG] [Thread-200965] [transport.py] [_log()] userauth is OK
2026-04-13T03:30:23.417 [DEBUG] [Thread-200965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:30:23.417 [DEBUG] [Thread-200965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:30:23.417 [DEBUG] [Thread-200965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:30:23.417 [DEBUG] [Thread-200965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:30:23.437 [INFO] [Thread-200965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:30:23.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:30:23.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:30:24.242 [DEBUG] [Thread-200965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:30:24.243 [DEBUG] [Thread-200965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:30:24.291 [DEBUG] [Thread-200965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:30:24.291 [DEBUG] [Thread-200965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:30:24.300 [DEBUG] [Thread-200965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:30:24.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:30:24.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:30:24.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:30:24.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:30:24.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:30:24.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:30:24.337 [DEBUG] [Thread-200965] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:30:29.223 [DEBUG] [Thread-200967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:30:35.370 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:30:35.372 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:30:37.385 [DEBUG] [Thread-200968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:30:44.273 [DEBUG] [Thread-200969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:30:54.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:30:54.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:30:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:30:55.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 30, 21), 4.09551, 75.7445, 0.0, 8.55864, 11.0726, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:30:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:30:21
2026-04-13T03:30:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:30:56.250 [DEBUG] [Thread-200970] [transport.py] [_log()] starting thread (client mode): 0xae517580
2026-04-13T03:30:56.250 [DEBUG] [Thread-200970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:30:56.272 [DEBUG] [Thread-200970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:30:56.272 [INFO] [Thread-200970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] client lang: <none>
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] server lang: <none>
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] kex follows: False
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:30:56.276 [DEBUG] [Thread-200970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:30:56.277 [DEBUG] [Thread-200970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:30:56.277 [DEBUG] [Thread-200970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:30:56.277 [DEBUG] [Thread-200970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:30:56.277 [DEBUG] [Thread-200970] [transport.py] [_log()] Compression: none
2026-04-13T03:30:56.277 [DEBUG] [Thread-200970] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:30:56.293 [DEBUG] [Thread-200970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:30:56.294 [DEBUG] [Thread-200970] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:30:56.294 [DEBUG] [Thread-200970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:30:56.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:30:56.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:30:56.296 [DEBUG] [Thread-200970] [transport.py] [_log()] userauth is OK
2026-04-13T03:30:56.296 [DEBUG] [Thread-200970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:30:56.296 [DEBUG] [Thread-200970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:30:56.297 [DEBUG] [Thread-200970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:30:56.297 [DEBUG] [Thread-200970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:30:56.319 [INFO] [Thread-200970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:30:56.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:30:57.138 [DEBUG] [Thread-200970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:30:57.138 [DEBUG] [Thread-200970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:30:57.139 [DEBUG] [Thread-200970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:30:57.179 [DEBUG] [Thread-200970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:30:57.179 [DEBUG] [Thread-200970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:30:57.182 [DEBUG] [Thread-200970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:30:57.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:30:57.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:30:57.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:30:57.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:30:57.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:30:57.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:30:57.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:30:57.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:30:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:30:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.062596 -999.00  +10.80   5.69     83   +8.10 1 1 1 2 1     0    0 3.76 35.66 ZNESW 5.7 5.7 199.2 5.9 11.3 -21.8 11.1 -20.7 10.9 -18.8 11.2 -20.7
2026-04-13T03:30:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:30:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:30:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.062596
2026-04-13T03:30:57.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:30:57.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:30:57.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:30:57.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:30:57.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:30:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:30:21', tmtdew=4.09551, humidity=75.7445, cloud=0.0, wind=8.55864, temperature=11.0726, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:30:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:30:57.211 [DEBUG] [Thread-200970] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:30:57.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:30:57.304 [DEBUG] [Thread-200973] [transport.py] [_log()] starting thread (client mode): 0xb0fb4760
2026-04-13T03:30:57.304 [DEBUG] [Thread-200973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:30:57.319 [DEBUG] [Thread-200973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:30:57.320 [INFO] [Thread-200973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:30:57.327 [DEBUG] [Thread-200973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:30:57.327 [DEBUG] [Thread-200973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] client lang: <none>
2026-04-13T03:30:57.328 [DEBUG] [Thread-200973] [transport.py] [_log()] server lang: <none>
2026-04-13T03:30:57.329 [DEBUG] [Thread-200973] [transport.py] [_log()] kex follows: False
2026-04-13T03:30:57.329 [DEBUG] [Thread-200973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:30:57.329 [DEBUG] [Thread-200973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:30:57.329 [DEBUG] [Thread-200973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:30:57.329 [DEBUG] [Thread-200973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:30:57.330 [DEBUG] [Thread-200973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:30:57.330 [DEBUG] [Thread-200973] [transport.py] [_log()] Compression: none
2026-04-13T03:30:57.330 [DEBUG] [Thread-200973] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:30:57.389 [DEBUG] [Thread-200973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:30:57.389 [DEBUG] [Thread-200973] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:30:57.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:30:57.391 [DEBUG] [Thread-200973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:30:57.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:30:57.448 [DEBUG] [Thread-200973] [transport.py] [_log()] userauth is OK
2026-04-13T03:30:57.449 [DEBUG] [Thread-200973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:30:57.449 [DEBUG] [Thread-200973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:30:57.449 [DEBUG] [Thread-200973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:30:57.449 [DEBUG] [Thread-200973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:30:57.468 [INFO] [Thread-200973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:30:57.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:30:57.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:30:58.303 [DEBUG] [Thread-200973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:30:58.304 [DEBUG] [Thread-200973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:30:58.353 [DEBUG] [Thread-200973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:30:58.353 [DEBUG] [Thread-200973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:30:58.362 [DEBUG] [Thread-200973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:30:58.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:30:58.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:30:58.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:30:58.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:30:58.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:30:58.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:30:58.399 [DEBUG] [Thread-200973] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:30:59.310 [DEBUG] [Thread-200975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:31:14.375 [DEBUG] [Thread-200976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:31:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:31:28.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:31:28.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:31:29.412 [DEBUG] [Thread-200977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:31:29.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 30, 57), 4.06507, 75.9104, 0.0, 8.55864, 11.0226, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:31:29.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:30:57
2026-04-13T03:31:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:31:30.200 [DEBUG] [Thread-200978] [transport.py] [_log()] starting thread (client mode): 0xb0feaf80
2026-04-13T03:31:30.200 [DEBUG] [Thread-200978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:31:30.219 [DEBUG] [Thread-200978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:31:30.219 [INFO] [Thread-200978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] client lang: <none>
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] server lang: <none>
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] kex follows: False
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] Compression: none
2026-04-13T03:31:30.221 [DEBUG] [Thread-200978] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:31:30.241 [DEBUG] [Thread-200978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:31:30.242 [DEBUG] [Thread-200978] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:31:30.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:31:30.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:31:30.243 [DEBUG] [Thread-200978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:31:30.244 [DEBUG] [Thread-200978] [transport.py] [_log()] userauth is OK
2026-04-13T03:31:30.244 [DEBUG] [Thread-200978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:31:30.244 [DEBUG] [Thread-200978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:31:30.244 [DEBUG] [Thread-200978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:31:30.245 [DEBUG] [Thread-200978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:31:30.267 [INFO] [Thread-200978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:31:30.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:31:31.026 [DEBUG] [Thread-200978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:31:31.027 [DEBUG] [Thread-200978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:31:31.027 [DEBUG] [Thread-200978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:31:31.067 [DEBUG] [Thread-200978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:31:31.068 [DEBUG] [Thread-200978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:31:31.071 [DEBUG] [Thread-200978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:31:31.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:31:31.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:31:31.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:31:31.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:31:31.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:31:31.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:31:31.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:31:31.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:31:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:31:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.062943 -999.00  +10.80   5.13     83   +8.10 1 1 1 2 1     0    0 3.70 32.36 ZNESW 5.1 5.1 201.8 6.5 11.3 -21.7 11.2 -20.8 10.9 -18.7 11.2 -20.7
2026-04-13T03:31:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:31:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:31:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.062943
2026-04-13T03:31:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:31:31.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:31:31.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:31:31.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:31:31.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:31:31.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:30:57', tmtdew=4.06507, humidity=75.9104, cloud=0.0, wind=8.55864, temperature=11.0226, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:30:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:31:31.101 [DEBUG] [Thread-200978] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:31:31.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:31:31.194 [DEBUG] [Thread-200981] [transport.py] [_log()] starting thread (client mode): 0xae50a710
2026-04-13T03:31:31.194 [DEBUG] [Thread-200981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:31:31.208 [DEBUG] [Thread-200981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:31:31.208 [INFO] [Thread-200981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] client lang: <none>
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] server lang: <none>
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] kex follows: False
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] Compression: none
2026-04-13T03:31:31.216 [DEBUG] [Thread-200981] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:31:31.276 [DEBUG] [Thread-200981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:31:31.277 [DEBUG] [Thread-200981] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:31:31.277 [DEBUG] [Thread-200981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:31:31.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:31:31.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:31:31.332 [DEBUG] [Thread-200981] [transport.py] [_log()] userauth is OK
2026-04-13T03:31:31.332 [DEBUG] [Thread-200981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:31:31.332 [DEBUG] [Thread-200981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:31:31.332 [DEBUG] [Thread-200981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:31:31.333 [DEBUG] [Thread-200981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:31:31.351 [INFO] [Thread-200981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:31:31.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:31:31.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:31:32.175 [DEBUG] [Thread-200981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:31:32.175 [DEBUG] [Thread-200981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:31:32.227 [DEBUG] [Thread-200981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:31:32.227 [DEBUG] [Thread-200981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:31:32.237 [DEBUG] [Thread-200981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:31:32.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:31:32.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:31:32.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:31:32.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:31:32.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:31:32.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:31:32.275 [DEBUG] [Thread-200981] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:31:35.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:31:35.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:31:37.442 [DEBUG] [Thread-200983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:31:44.448 [DEBUG] [Thread-200984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:31:59.499 [DEBUG] [Thread-200985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:32:02.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:32:02.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:32:02.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:32:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 31, 32), 4.07596, 75.844, 0.0, 8.47044, 10.9728, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:32:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:31:32
2026-04-13T03:32:03.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:32:04.134 [DEBUG] [Thread-200986] [transport.py] [_log()] starting thread (client mode): 0xb0f55780
2026-04-13T03:32:04.134 [DEBUG] [Thread-200986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:32:04.153 [DEBUG] [Thread-200986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:32:04.153 [INFO] [Thread-200986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:32:04.154 [DEBUG] [Thread-200986] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] client lang: <none>
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] server lang: <none>
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] kex follows: False
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] Compression: none
2026-04-13T03:32:04.155 [DEBUG] [Thread-200986] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:32:04.173 [DEBUG] [Thread-200986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:32:04.174 [DEBUG] [Thread-200986] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:32:04.174 [DEBUG] [Thread-200986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:32:04.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:32:04.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:32:04.176 [DEBUG] [Thread-200986] [transport.py] [_log()] userauth is OK
2026-04-13T03:32:04.176 [DEBUG] [Thread-200986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:32:04.176 [DEBUG] [Thread-200986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:32:04.176 [DEBUG] [Thread-200986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:32:04.176 [DEBUG] [Thread-200986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:32:04.199 [INFO] [Thread-200986] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:32:04.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:32:04.994 [DEBUG] [Thread-200986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:32:04.994 [DEBUG] [Thread-200986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:32:04.995 [DEBUG] [Thread-200986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:32:05.036 [DEBUG] [Thread-200986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:32:05.036 [DEBUG] [Thread-200986] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:32:05.039 [DEBUG] [Thread-200986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:32:05.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:32:05.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:32:05.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:32:05.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:32:05.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:32:05.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:32:05.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:32:05.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:32:05.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:32:05.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.063290 -999.00  +10.80   6.03     83   +8.10 1 1 1 2 1     0    0 3.57 27.30 ZNESW 6.0 6.0 197.8 6.5 11.3 -21.8 11.2 -20.6 10.9 -18.8 11.2 -20.8
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.063290
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:32:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:32:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:31:32', tmtdew=4.07596, humidity=75.844, cloud=0.0, wind=8.47044, temperature=10.9728, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:31:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:32:05.065 [DEBUG] [Thread-200986] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:32:05.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:32:05.154 [DEBUG] [Thread-200989] [transport.py] [_log()] starting thread (client mode): 0xb0fb79d0
2026-04-13T03:32:05.154 [DEBUG] [Thread-200989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:32:05.169 [DEBUG] [Thread-200989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:32:05.169 [INFO] [Thread-200989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:32:05.176 [DEBUG] [Thread-200989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:32:05.176 [DEBUG] [Thread-200989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:32:05.176 [DEBUG] [Thread-200989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:32:05.176 [DEBUG] [Thread-200989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:05.176 [DEBUG] [Thread-200989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:05.176 [DEBUG] [Thread-200989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] client lang: <none>
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] server lang: <none>
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] kex follows: False
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] Compression: none
2026-04-13T03:32:05.177 [DEBUG] [Thread-200989] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:32:05.235 [DEBUG] [Thread-200989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:32:05.235 [DEBUG] [Thread-200989] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:32:05.235 [DEBUG] [Thread-200989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:32:05.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:32:05.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:32:05.291 [DEBUG] [Thread-200989] [transport.py] [_log()] userauth is OK
2026-04-13T03:32:05.291 [DEBUG] [Thread-200989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:32:05.291 [DEBUG] [Thread-200989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:32:05.292 [DEBUG] [Thread-200989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:32:05.292 [DEBUG] [Thread-200989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:32:05.314 [INFO] [Thread-200989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:32:05.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:32:05.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:32:06.151 [DEBUG] [Thread-200989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:32:06.152 [DEBUG] [Thread-200989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:32:06.200 [DEBUG] [Thread-200989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:32:06.200 [DEBUG] [Thread-200989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:32:06.209 [DEBUG] [Thread-200989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:32:06.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:32:06.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:32:06.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:32:06.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:32:06.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:32:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:32:06.243 [DEBUG] [Thread-200989] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:32:14.537 [DEBUG] [Thread-200991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:32:29.591 [DEBUG] [Thread-200992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:32:35.784 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:32:35.785 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:32:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:32:36.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:32:36.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:32:37.504 [DEBUG] [Thread-200993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:32:37.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 32, 8), 4.07943, 75.8275, 0.0, 8.41752, 10.9894, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:32:37.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:32:08
2026-04-13T03:32:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:32:38.134 [DEBUG] [Thread-200994] [transport.py] [_log()] starting thread (client mode): 0xae5b40d0
2026-04-13T03:32:38.134 [DEBUG] [Thread-200994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:32:38.153 [DEBUG] [Thread-200994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:32:38.153 [INFO] [Thread-200994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:32:38.156 [DEBUG] [Thread-200994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:32:38.156 [DEBUG] [Thread-200994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:32:38.156 [DEBUG] [Thread-200994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:32:38.156 [DEBUG] [Thread-200994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:38.156 [DEBUG] [Thread-200994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] client lang: <none>
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] server lang: <none>
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] kex follows: False
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:32:38.157 [DEBUG] [Thread-200994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:32:38.158 [DEBUG] [Thread-200994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:32:38.158 [DEBUG] [Thread-200994] [transport.py] [_log()] Compression: none
2026-04-13T03:32:38.158 [DEBUG] [Thread-200994] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:32:38.175 [DEBUG] [Thread-200994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:32:38.176 [DEBUG] [Thread-200994] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:32:38.176 [DEBUG] [Thread-200994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:32:38.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:32:38.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:32:38.178 [DEBUG] [Thread-200994] [transport.py] [_log()] userauth is OK
2026-04-13T03:32:38.178 [DEBUG] [Thread-200994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:32:38.178 [DEBUG] [Thread-200994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:32:38.178 [DEBUG] [Thread-200994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:32:38.179 [DEBUG] [Thread-200994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:32:38.203 [INFO] [Thread-200994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:32:38.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:32:38.978 [DEBUG] [Thread-200994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:32:38.978 [DEBUG] [Thread-200994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:32:38.978 [DEBUG] [Thread-200994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:32:39.019 [DEBUG] [Thread-200994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:32:39.020 [DEBUG] [Thread-200994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:32:39.023 [DEBUG] [Thread-200994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:32:39.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:32:39.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:32:39.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:32:39.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:32:39.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:32:39.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:32:39.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:32:39.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:32:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:32:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.063637 -999.00  +10.80   4.46     83   +8.10 1 1 1 2 1     0    0 3.54 25.76 ZNESW 4.5 4.5 202.7 6.5 11.3 -21.8 11.2 -20.7 10.9 -18.8 11.2 -20.8
2026-04-13T03:32:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:32:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:32:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.063637
2026-04-13T03:32:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:32:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:32:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:32:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:32:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:32:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:32:08', tmtdew=4.07943, humidity=75.8275, cloud=0.0, wind=8.41752, temperature=10.9894, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:31:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:32:39.050 [DEBUG] [Thread-200994] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:32:39.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:32:39.140 [DEBUG] [Thread-200997] [transport.py] [_log()] starting thread (client mode): 0xb0fb69b0
2026-04-13T03:32:39.140 [DEBUG] [Thread-200997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:32:39.154 [DEBUG] [Thread-200997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:32:39.154 [INFO] [Thread-200997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:32:39.162 [DEBUG] [Thread-200997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:32:39.162 [DEBUG] [Thread-200997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:32:39.162 [DEBUG] [Thread-200997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:32:39.162 [DEBUG] [Thread-200997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:39.162 [DEBUG] [Thread-200997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:32:39.162 [DEBUG] [Thread-200997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:39.162 [DEBUG] [Thread-200997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] client lang: <none>
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] server lang: <none>
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] kex follows: False
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] Compression: none
2026-04-13T03:32:39.163 [DEBUG] [Thread-200997] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:32:39.220 [DEBUG] [Thread-200997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:32:39.220 [DEBUG] [Thread-200997] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:32:39.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:32:39.222 [DEBUG] [Thread-200997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:32:39.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:32:39.276 [DEBUG] [Thread-200997] [transport.py] [_log()] userauth is OK
2026-04-13T03:32:39.276 [DEBUG] [Thread-200997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:32:39.276 [DEBUG] [Thread-200997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:32:39.276 [DEBUG] [Thread-200997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:32:39.276 [DEBUG] [Thread-200997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:32:39.294 [INFO] [Thread-200997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:32:39.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:32:39.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:32:40.114 [DEBUG] [Thread-200997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:32:40.114 [DEBUG] [Thread-200997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:32:40.162 [DEBUG] [Thread-200997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:32:40.162 [DEBUG] [Thread-200997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:32:40.171 [DEBUG] [Thread-200997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:32:40.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:32:40.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:32:40.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:32:40.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:32:40.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:32:40.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:32:40.208 [DEBUG] [Thread-200997] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:32:44.628 [DEBUG] [Thread-200999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:32:59.681 [DEBUG] [Thread-201000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:33:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:33:10.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:33:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:33:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 32, 43), 3.36665, 79.6217, 0.0, 9.38808, 10.6452, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:33:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:32:43
2026-04-13T03:33:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:33:11.991 [DEBUG] [Thread-201001] [transport.py] [_log()] starting thread (client mode): 0xb0fb65f0
2026-04-13T03:33:11.991 [DEBUG] [Thread-201001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:33:12.010 [DEBUG] [Thread-201001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:33:12.011 [INFO] [Thread-201001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:33:12.013 [DEBUG] [Thread-201001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] client lang: <none>
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] server lang: <none>
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] kex follows: False
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:33:12.014 [DEBUG] [Thread-201001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:33:12.015 [DEBUG] [Thread-201001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:33:12.015 [DEBUG] [Thread-201001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:33:12.015 [DEBUG] [Thread-201001] [transport.py] [_log()] Compression: none
2026-04-13T03:33:12.015 [DEBUG] [Thread-201001] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:33:12.030 [DEBUG] [Thread-201001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:33:12.031 [DEBUG] [Thread-201001] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:33:12.031 [DEBUG] [Thread-201001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:33:12.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:33:12.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:33:12.033 [DEBUG] [Thread-201001] [transport.py] [_log()] userauth is OK
2026-04-13T03:33:12.033 [DEBUG] [Thread-201001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:33:12.034 [DEBUG] [Thread-201001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:33:12.034 [DEBUG] [Thread-201001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:33:12.034 [DEBUG] [Thread-201001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:33:12.054 [INFO] [Thread-201001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:33:12.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:33:12.826 [DEBUG] [Thread-201001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:33:12.826 [DEBUG] [Thread-201001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:33:12.826 [DEBUG] [Thread-201001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:33:12.867 [DEBUG] [Thread-201001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:33:12.868 [DEBUG] [Thread-201001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:33:12.871 [DEBUG] [Thread-201001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:33:12.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:33:12.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:33:12.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:33:12.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:33:12.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:33:12.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:33:12.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:33:12.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:33:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:33:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.063985 -999.00  +10.90   6.31     82   +7.90 1 1 1 2 1     0    0 3.47 25.26 ZNESW 6.3 6.3 194.8 6.9 11.3 -21.5 11.2 -20.5 10.9 -18.8 11.2 -20.7
2026-04-13T03:33:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:33:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:33:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.063985
2026-04-13T03:33:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:33:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:33:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:32:43', tmtdew=3.36665, humidity=79.6217, cloud=0.0, wind=9.38808, temperature=10.6452, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:32:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:33:12.898 [DEBUG] [Thread-201001] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:33:12.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:33:12.993 [DEBUG] [Thread-201004] [transport.py] [_log()] starting thread (client mode): 0xae5b1d50
2026-04-13T03:33:12.993 [DEBUG] [Thread-201004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:33:13.008 [DEBUG] [Thread-201004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:33:13.008 [INFO] [Thread-201004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] client lang: <none>
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] server lang: <none>
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] kex follows: False
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:33:13.016 [DEBUG] [Thread-201004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:33:13.017 [DEBUG] [Thread-201004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:33:13.017 [DEBUG] [Thread-201004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:33:13.017 [DEBUG] [Thread-201004] [transport.py] [_log()] Compression: none
2026-04-13T03:33:13.017 [DEBUG] [Thread-201004] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:33:13.075 [DEBUG] [Thread-201004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:33:13.076 [DEBUG] [Thread-201004] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:33:13.076 [DEBUG] [Thread-201004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:33:13.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:33:13.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:33:13.132 [DEBUG] [Thread-201004] [transport.py] [_log()] userauth is OK
2026-04-13T03:33:13.132 [DEBUG] [Thread-201004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:33:13.132 [DEBUG] [Thread-201004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:33:13.132 [DEBUG] [Thread-201004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:33:13.132 [DEBUG] [Thread-201004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:33:13.156 [INFO] [Thread-201004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:33:13.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:33:13.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:33:13.961 [DEBUG] [Thread-201004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:33:13.961 [DEBUG] [Thread-201004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:33:14.009 [DEBUG] [Thread-201004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:33:14.009 [DEBUG] [Thread-201004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:33:14.018 [DEBUG] [Thread-201004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:33:14.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:33:14.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:33: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
2026-04-13T03:33:14.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:33:14.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:33:14.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:33:14.055 [DEBUG] [Thread-201004] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:33:14.722 [DEBUG] [Thread-201006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:33:29.773 [DEBUG] [Thread-201007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:33:35.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:33:35.990 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:33:37.580 [DEBUG] [Thread-201008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:33:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:33:44.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:33:44.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:33:44.810 [DEBUG] [Thread-201009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:33:45.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 33, 18), 4.23637, 75.2943, 0.0, 8.25876, 11.0226, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:33:45.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:33:18
2026-04-13T03:33:45.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:33:45.850 [DEBUG] [Thread-201010] [transport.py] [_log()] starting thread (client mode): 0xae5b2620
2026-04-13T03:33:45.850 [DEBUG] [Thread-201010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:33:45.871 [DEBUG] [Thread-201010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:33:45.871 [INFO] [Thread-201010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] client lang: <none>
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] server lang: <none>
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] kex follows: False
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] Compression: none
2026-04-13T03:33:45.874 [DEBUG] [Thread-201010] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:33:45.892 [DEBUG] [Thread-201010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:33:45.892 [DEBUG] [Thread-201010] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:33:45.893 [DEBUG] [Thread-201010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:33:45.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:33:45.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:33:45.895 [DEBUG] [Thread-201010] [transport.py] [_log()] userauth is OK
2026-04-13T03:33:45.896 [DEBUG] [Thread-201010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:33:45.896 [DEBUG] [Thread-201010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:33:45.896 [DEBUG] [Thread-201010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:33:45.896 [DEBUG] [Thread-201010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:33:45.932 [INFO] [Thread-201010] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:33:45.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:33:46.718 [DEBUG] [Thread-201010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:33:46.718 [DEBUG] [Thread-201010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:33:46.719 [DEBUG] [Thread-201010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:33:46.759 [DEBUG] [Thread-201010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:33:46.759 [DEBUG] [Thread-201010] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:33:46.763 [DEBUG] [Thread-201010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:33:46.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:33:46.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:33:46.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:33:46.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:33:46.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:33:46.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:33:46.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:33:46.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:33:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:33:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.064679 -999.00  +11.00   5.64     81   +7.90 1 1 1 2 1     0    0 3.41 21.53 ZNESW 5.6 5.6 193.0 6.6 11.3 -21.7 11.2 -20.7 10.9 -18.8 11.2 -20.7
2026-04-13T03:33:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:33:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:33:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.064679
2026-04-13T03:33:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:33:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:33:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:33:46.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:33:46.793 [DEBUG] [Thread-201010] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:33:46.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:33:46.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:33:18', tmtdew=4.23637, humidity=75.2943, cloud=0.0, wind=8.25876, temperature=11.0226, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:33:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:33:46.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:33:46.887 [DEBUG] [Thread-201013] [transport.py] [_log()] starting thread (client mode): 0xae5b2dd0
2026-04-13T03:33:46.887 [DEBUG] [Thread-201013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:33:46.907 [DEBUG] [Thread-201013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:33:46.907 [INFO] [Thread-201013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:33:46.919 [DEBUG] [Thread-201013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:33:46.919 [DEBUG] [Thread-201013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:33:46.919 [DEBUG] [Thread-201013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] client lang: <none>
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] server lang: <none>
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] kex follows: False
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:33:46.920 [DEBUG] [Thread-201013] [transport.py] [_log()] Compression: none
2026-04-13T03:33:46.921 [DEBUG] [Thread-201013] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:33:46.976 [DEBUG] [Thread-201013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:33:46.976 [DEBUG] [Thread-201013] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:33:46.977 [DEBUG] [Thread-201013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:33:46.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:33:46.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:33:47.032 [DEBUG] [Thread-201013] [transport.py] [_log()] userauth is OK
2026-04-13T03:33:47.032 [DEBUG] [Thread-201013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:33:47.032 [DEBUG] [Thread-201013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:33:47.032 [DEBUG] [Thread-201013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:33:47.032 [DEBUG] [Thread-201013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:33:47.056 [INFO] [Thread-201013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:33:47.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:33:47.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:33:47.912 [DEBUG] [Thread-201013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:33:47.912 [DEBUG] [Thread-201013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:33:47.960 [DEBUG] [Thread-201013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:33:47.961 [DEBUG] [Thread-201013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:33:47.969 [DEBUG] [Thread-201013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:33:47.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:33:47.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:33:47.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:33:47.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:33:47.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:33:47.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:33:48.003 [DEBUG] [Thread-201013] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:33:59.851 [DEBUG] [Thread-201015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:34:14.903 [DEBUG] [Thread-201016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:34:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:34:18.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:34:18.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:34:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 33, 54), 3.39456, 79.4559, 0.0, 9.21168, 10.5457, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:34:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:33:54
2026-04-13T03:34:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:34:19.850 [DEBUG] [Thread-201017] [transport.py] [_log()] starting thread (client mode): 0xae5b1270
2026-04-13T03:34:19.850 [DEBUG] [Thread-201017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:34:19.869 [DEBUG] [Thread-201017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:34:19.870 [INFO] [Thread-201017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:34:19.872 [DEBUG] [Thread-201017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] client lang: <none>
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] server lang: <none>
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] kex follows: False
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:34:19.873 [DEBUG] [Thread-201017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:34:19.874 [DEBUG] [Thread-201017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:34:19.874 [DEBUG] [Thread-201017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:34:19.874 [DEBUG] [Thread-201017] [transport.py] [_log()] Compression: none
2026-04-13T03:34:19.874 [DEBUG] [Thread-201017] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:34:19.892 [DEBUG] [Thread-201017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:34:19.893 [DEBUG] [Thread-201017] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:34:19.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:34:19.895 [DEBUG] [Thread-201017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:34:19.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:34:19.897 [DEBUG] [Thread-201017] [transport.py] [_log()] userauth is OK
2026-04-13T03:34:19.897 [DEBUG] [Thread-201017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:34:19.898 [DEBUG] [Thread-201017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:34:19.898 [DEBUG] [Thread-201017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:34:19.898 [DEBUG] [Thread-201017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:34:19.922 [INFO] [Thread-201017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:34:19.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:34:20.713 [DEBUG] [Thread-201017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:34:20.713 [DEBUG] [Thread-201017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:34:20.713 [DEBUG] [Thread-201017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:34:20.754 [DEBUG] [Thread-201017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:34:20.754 [DEBUG] [Thread-201017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:34:20.756 [DEBUG] [Thread-201017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:34:20.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:34:20.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:34:20.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:34:20.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:34:20.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:34:20.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:34:20.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.065026 -999.00  +11.00   5.54     81   +7.90 1 1 1 2 1     0    0 3.28 18.21 ZNESW 5.5 5.5 197.4 6.0 11.4 -21.7 11.2 -20.6 10.9 -18.7 11.2 -20.8
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.065026
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:34:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:33:54', tmtdew=3.39456, humidity=79.4559, cloud=0.0, wind=9.21168, temperature=10.5457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:33:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:34:20.775 [DEBUG] [Thread-201017] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:34:20.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:34:20.856 [DEBUG] [Thread-201020] [transport.py] [_log()] starting thread (client mode): 0xae5b5000
2026-04-13T03:34:20.856 [DEBUG] [Thread-201020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:34:20.870 [DEBUG] [Thread-201020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:34:20.870 [INFO] [Thread-201020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] client lang: <none>
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] server lang: <none>
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] kex follows: False
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:34:20.878 [DEBUG] [Thread-201020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:34:20.879 [DEBUG] [Thread-201020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:34:20.879 [DEBUG] [Thread-201020] [transport.py] [_log()] Compression: none
2026-04-13T03:34:20.879 [DEBUG] [Thread-201020] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:34:20.936 [DEBUG] [Thread-201020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:34:20.936 [DEBUG] [Thread-201020] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:34:20.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:34:20.937 [DEBUG] [Thread-201020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:34:20.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:34:20.991 [DEBUG] [Thread-201020] [transport.py] [_log()] userauth is OK
2026-04-13T03:34:20.992 [DEBUG] [Thread-201020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:34:20.992 [DEBUG] [Thread-201020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:34:20.992 [DEBUG] [Thread-201020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:34:20.992 [DEBUG] [Thread-201020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:34:21.014 [INFO] [Thread-201020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:34:21.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:34:21.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:34:21.817 [DEBUG] [Thread-201020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:34:21.818 [DEBUG] [Thread-201020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:34:21.866 [DEBUG] [Thread-201020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:34:21.866 [DEBUG] [Thread-201020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:34:21.876 [DEBUG] [Thread-201020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:34:21.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:34: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')
2026-04-13T03:34:21.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:34:21.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:34:21.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:34:21.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:34:21.916 [DEBUG] [Thread-201020] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:34:29.939 [DEBUG] [Thread-201022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:34:36.195 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:34:36.197 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:34:37.647 [DEBUG] [Thread-201023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:34:44.992 [DEBUG] [Thread-201024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:34:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:34:51.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:34:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:34:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 34, 29), 4.25075, 75.2113, 0.0, 8.1882, 10.9894, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:34:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:34:29
2026-04-13T03:34:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:34:53.715 [DEBUG] [Thread-201025] [transport.py] [_log()] starting thread (client mode): 0xae5b2a40
2026-04-13T03:34:53.715 [DEBUG] [Thread-201025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:34:53.728 [DEBUG] [Thread-201025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:34:53.728 [INFO] [Thread-201025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:34:53.731 [DEBUG] [Thread-201025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:34:53.731 [DEBUG] [Thread-201025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:34:53.731 [DEBUG] [Thread-201025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] client lang: <none>
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] server lang: <none>
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] kex follows: False
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] Compression: none
2026-04-13T03:34:53.732 [DEBUG] [Thread-201025] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:34:53.741 [DEBUG] [Thread-201025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:34:53.742 [DEBUG] [Thread-201025] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:34:53.742 [DEBUG] [Thread-201025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:34:53.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:34:53.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:34:53.743 [DEBUG] [Thread-201025] [transport.py] [_log()] userauth is OK
2026-04-13T03:34:53.744 [DEBUG] [Thread-201025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:34:53.744 [DEBUG] [Thread-201025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:34:53.744 [DEBUG] [Thread-201025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:34:53.744 [DEBUG] [Thread-201025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:34:53.764 [INFO] [Thread-201025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:34:53.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:34:54.513 [DEBUG] [Thread-201025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:34:54.514 [DEBUG] [Thread-201025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:34:54.514 [DEBUG] [Thread-201025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:34:54.555 [DEBUG] [Thread-201025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:34:54.555 [DEBUG] [Thread-201025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:34:54.559 [DEBUG] [Thread-201025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:34:54.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:34:54.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:34:54.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:34:54.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:34:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:34:54.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:34:54.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:34:54.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:34:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:34:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.065374 -999.00  +11.00   5.09     81   +7.90 1 1 1 2 1     0    0 3.32 15.89 ZNESW 5.1 5.1 190.6 5.8 11.4 -21.8 11.2 -20.7 10.9 -18.8 11.2 -20.7
2026-04-13T03:34:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:34:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:34:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.065374
2026-04-13T03:34:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:34:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:34:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:34:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:34:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:34:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:34:29', tmtdew=4.25075, humidity=75.2113, cloud=0.0, wind=8.1882, temperature=10.9894, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:34:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:34:54.586 [DEBUG] [Thread-201025] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:34:54.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:34:54.681 [DEBUG] [Thread-201028] [transport.py] [_log()] starting thread (client mode): 0xae5b0be0
2026-04-13T03:34:54.681 [DEBUG] [Thread-201028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:34:54.695 [DEBUG] [Thread-201028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:34:54.695 [INFO] [Thread-201028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:34:54.703 [DEBUG] [Thread-201028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:34:54.703 [DEBUG] [Thread-201028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:34:54.703 [DEBUG] [Thread-201028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:34:54.703 [DEBUG] [Thread-201028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:54.703 [DEBUG] [Thread-201028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] client lang: <none>
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] server lang: <none>
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] kex follows: False
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] Compression: none
2026-04-13T03:34:54.704 [DEBUG] [Thread-201028] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:34:54.764 [DEBUG] [Thread-201028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:34:54.764 [DEBUG] [Thread-201028] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:34:54.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:34:54.765 [DEBUG] [Thread-201028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:34:54.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:34:54.819 [DEBUG] [Thread-201028] [transport.py] [_log()] userauth is OK
2026-04-13T03:34:54.820 [DEBUG] [Thread-201028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:34:54.820 [DEBUG] [Thread-201028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:34:54.820 [DEBUG] [Thread-201028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:34:54.820 [DEBUG] [Thread-201028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:34:54.844 [INFO] [Thread-201028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:34:54.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:34:54.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:34:55.638 [DEBUG] [Thread-201028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:34:55.639 [DEBUG] [Thread-201028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:34:55.686 [DEBUG] [Thread-201028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:34:55.686 [DEBUG] [Thread-201028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:34:55.695 [DEBUG] [Thread-201028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:34:55.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:34:55.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:34:55.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:34:55.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:34:55.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:34:55.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:34:55.729 [DEBUG] [Thread-201028] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:35:00.029 [DEBUG] [Thread-201030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:35:15.082 [DEBUG] [Thread-201031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:35:25.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:35:25.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:35:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:35:27.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 35, 4), 4.24814, 75.2279, 0.0, 8.06472, 11.006, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:35:27.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:35:04
2026-04-13T03:35:27.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:35:27.591 [DEBUG] [Thread-201032] [transport.py] [_log()] starting thread (client mode): 0xae5b2020
2026-04-13T03:35:27.592 [DEBUG] [Thread-201032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:35:27.611 [DEBUG] [Thread-201032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:35:27.611 [INFO] [Thread-201032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] client lang: <none>
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] server lang: <none>
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] kex follows: False
2026-04-13T03:35:27.614 [DEBUG] [Thread-201032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:35:27.615 [DEBUG] [Thread-201032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:35:27.615 [DEBUG] [Thread-201032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:35:27.615 [DEBUG] [Thread-201032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:35:27.615 [DEBUG] [Thread-201032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:35:27.615 [DEBUG] [Thread-201032] [transport.py] [_log()] Compression: none
2026-04-13T03:35:27.615 [DEBUG] [Thread-201032] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:35:27.623 [DEBUG] [Thread-201032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:35:27.624 [DEBUG] [Thread-201032] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:35:27.624 [DEBUG] [Thread-201032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:35:27.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:35:27.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:35:27.626 [DEBUG] [Thread-201032] [transport.py] [_log()] userauth is OK
2026-04-13T03:35:27.626 [DEBUG] [Thread-201032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:35:27.626 [DEBUG] [Thread-201032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:35:27.626 [DEBUG] [Thread-201032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:35:27.626 [DEBUG] [Thread-201032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:35:27.651 [INFO] [Thread-201032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:35:27.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:35:28.595 [DEBUG] [Thread-201032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:35:28.596 [DEBUG] [Thread-201032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:35:28.596 [DEBUG] [Thread-201032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:35:28.637 [DEBUG] [Thread-201032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:35:28.637 [DEBUG] [Thread-201032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:35:28.641 [DEBUG] [Thread-201032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:35:28.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:35:28.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:35:28.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:35:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:35:28.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:35:28.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:35:28.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:35:28.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:35:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:35:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.065721 -999.00  +11.00   5.05     80   +7.80 1 1 1 2 1     0    0 3.32 15.59 ZNESW 5.0 5.0 192.0 5.8 11.4 -21.7 11.3 -20.7 10.9 -18.7 11.3 -20.9
2026-04-13T03:35:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:35:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:35:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.065721
2026-04-13T03:35:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:35:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:35:28.710 [DEBUG] [Thread-201032] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:35:28.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:35:28.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:35:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:35:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:35:04', tmtdew=4.24814, humidity=75.2279, cloud=0.0, wind=8.06472, temperature=11.006, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:34:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:35:28.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:35:28.805 [DEBUG] [Thread-201035] [transport.py] [_log()] starting thread (client mode): 0xae5b2290
2026-04-13T03:35:28.805 [DEBUG] [Thread-201035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:35:28.820 [DEBUG] [Thread-201035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:35:28.820 [INFO] [Thread-201035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:35:28.827 [DEBUG] [Thread-201035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] client lang: <none>
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] server lang: <none>
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] kex follows: False
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] Compression: none
2026-04-13T03:35:28.828 [DEBUG] [Thread-201035] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:35:28.887 [DEBUG] [Thread-201035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:35:28.887 [DEBUG] [Thread-201035] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:35:28.888 [DEBUG] [Thread-201035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:35:28.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:35:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:35:28.943 [DEBUG] [Thread-201035] [transport.py] [_log()] userauth is OK
2026-04-13T03:35:28.943 [DEBUG] [Thread-201035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:35:28.943 [DEBUG] [Thread-201035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:35:28.943 [DEBUG] [Thread-201035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:35:28.943 [DEBUG] [Thread-201035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:35:28.961 [INFO] [Thread-201035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:35:28.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:35:28.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:35:29.786 [DEBUG] [Thread-201035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:35:29.786 [DEBUG] [Thread-201035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:35:29.834 [DEBUG] [Thread-201035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:35:29.834 [DEBUG] [Thread-201035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:35:29.843 [DEBUG] [Thread-201035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:35:29.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:35:29.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:35:29.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:35:29.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:35:29.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:35:29.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:35:29.880 [DEBUG] [Thread-201035] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:35:30.121 [DEBUG] [Thread-201037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:35:36.400 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:35:36.401 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:35:37.726 [DEBUG] [Thread-201038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:35:45.185 [DEBUG] [Thread-201039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:35:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:35:59.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:35:59.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:36:00.224 [DEBUG] [Thread-201040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:36:01.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 35, 40), 3.41631, 79.3563, 0.0, 9.10584, 10.6784, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:36:01.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:35:40
2026-04-13T03:36:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:36:01.733 [DEBUG] [Thread-201041] [transport.py] [_log()] starting thread (client mode): 0xae5b10c0
2026-04-13T03:36:01.733 [DEBUG] [Thread-201041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:36:01.752 [DEBUG] [Thread-201041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:36:01.752 [INFO] [Thread-201041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:36:01.755 [DEBUG] [Thread-201041] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] client lang: <none>
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] server lang: <none>
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] kex follows: False
2026-04-13T03:36:01.756 [DEBUG] [Thread-201041] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:36:01.757 [DEBUG] [Thread-201041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:36:01.757 [DEBUG] [Thread-201041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:36:01.757 [DEBUG] [Thread-201041] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:36:01.757 [DEBUG] [Thread-201041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:36:01.757 [DEBUG] [Thread-201041] [transport.py] [_log()] Compression: none
2026-04-13T03:36:01.757 [DEBUG] [Thread-201041] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:36:01.776 [DEBUG] [Thread-201041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:36:01.776 [DEBUG] [Thread-201041] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:36:01.777 [DEBUG] [Thread-201041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:36:01.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:36:01.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:36:01.778 [DEBUG] [Thread-201041] [transport.py] [_log()] userauth is OK
2026-04-13T03:36:01.778 [DEBUG] [Thread-201041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:36:01.778 [DEBUG] [Thread-201041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:36:01.778 [DEBUG] [Thread-201041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:36:01.778 [DEBUG] [Thread-201041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:36:01.796 [INFO] [Thread-201041] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:36:01.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:36:02.577 [DEBUG] [Thread-201041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:36:02.577 [DEBUG] [Thread-201041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:36:02.578 [DEBUG] [Thread-201041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:36:02.618 [DEBUG] [Thread-201041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:36:02.618 [DEBUG] [Thread-201041] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:36:02.622 [DEBUG] [Thread-201041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:36:02.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:36:02.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:36:02.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:36:02.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:36:02.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:36:02.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:36:02.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:36:02.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:36:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:36:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.066068 -999.00  +11.00   4.83     80   +7.80 1 1 1 2 1     0    0 3.36 14.33 ZNESW 4.8 4.8 189.8 5.7 11.4 -21.7 11.2 -20.6 11.0 -18.7 11.2 -20.8
2026-04-13T03:36:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:36:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:36:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.066068
2026-04-13T03:36:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:36:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:36:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:36:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:36:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:36:02.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:35:40', tmtdew=3.41631, humidity=79.3563, cloud=0.0, wind=9.10584, temperature=10.6784, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:35:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:36:02.657 [DEBUG] [Thread-201041] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:36:02.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:36:02.740 [DEBUG] [Thread-201044] [transport.py] [_log()] starting thread (client mode): 0xae5b62c0
2026-04-13T03:36:02.740 [DEBUG] [Thread-201044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:36:02.755 [DEBUG] [Thread-201044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:36:02.756 [INFO] [Thread-201044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:36:02.763 [DEBUG] [Thread-201044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:36:02.763 [DEBUG] [Thread-201044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] client lang: <none>
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] server lang: <none>
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] kex follows: False
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] Compression: none
2026-04-13T03:36:02.764 [DEBUG] [Thread-201044] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:36:02.824 [DEBUG] [Thread-201044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:36:02.825 [DEBUG] [Thread-201044] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:36:02.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:36:02.826 [DEBUG] [Thread-201044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:36:02.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:36:02.883 [DEBUG] [Thread-201044] [transport.py] [_log()] userauth is OK
2026-04-13T03:36:02.883 [DEBUG] [Thread-201044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:36:02.883 [DEBUG] [Thread-201044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:36:02.883 [DEBUG] [Thread-201044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:36:02.884 [DEBUG] [Thread-201044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:36:02.902 [INFO] [Thread-201044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:36:02.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:36:02.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:36:03.747 [DEBUG] [Thread-201044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:36:03.748 [DEBUG] [Thread-201044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:36:03.798 [DEBUG] [Thread-201044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:36:03.798 [DEBUG] [Thread-201044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:36:03.807 [DEBUG] [Thread-201044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:36:03.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:36:03.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:36:03.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:36:03.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:36:03.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:36:03.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:36:03.843 [DEBUG] [Thread-201044] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:36:15.263 [DEBUG] [Thread-201046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:36:30.321 [DEBUG] [Thread-201047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:36:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:36:33.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:36:33.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:36:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 36, 15), 4.32344, 74.5952, 0.0, 8.20584, 11.0392, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:36:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:36:15
2026-04-13T03:36:35.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:36:35.678 [DEBUG] [Thread-201048] [transport.py] [_log()] starting thread (client mode): 0xae5b5de0
2026-04-13T03:36:35.679 [DEBUG] [Thread-201048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:36:35.699 [DEBUG] [Thread-201048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:36:35.699 [INFO] [Thread-201048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:36:35.702 [DEBUG] [Thread-201048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] client lang: <none>
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] server lang: <none>
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] kex follows: False
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:36:35.703 [DEBUG] [Thread-201048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:36:35.704 [DEBUG] [Thread-201048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:36:35.704 [DEBUG] [Thread-201048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:36:35.704 [DEBUG] [Thread-201048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:36:35.704 [DEBUG] [Thread-201048] [transport.py] [_log()] Compression: none
2026-04-13T03:36:35.704 [DEBUG] [Thread-201048] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:36:35.723 [DEBUG] [Thread-201048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:36:35.724 [DEBUG] [Thread-201048] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:36:35.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:36:35.725 [DEBUG] [Thread-201048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:36:35.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:36:35.727 [DEBUG] [Thread-201048] [transport.py] [_log()] userauth is OK
2026-04-13T03:36:35.727 [DEBUG] [Thread-201048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:36:35.727 [DEBUG] [Thread-201048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:36:35.727 [DEBUG] [Thread-201048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:36:35.727 [DEBUG] [Thread-201048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:36:35.751 [INFO] [Thread-201048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:36:35.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:36:36.570 [DEBUG] [Thread-201048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:36:36.571 [DEBUG] [Thread-201048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:36:36.571 [DEBUG] [Thread-201048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:36:36.605 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:36:36.607 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:36:36.612 [DEBUG] [Thread-201048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:36:36.612 [DEBUG] [Thread-201048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:36:36.616 [DEBUG] [Thread-201048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:36:36.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:36:36.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:36:36.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:36:36.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:36:36.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:36:36.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:36:36.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:36:36.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:36:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:36:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.066415 -999.00  +11.10   5.23     80   +7.80 1 1 1 2 1     0    0 3.23 13.25 ZNESW 5.2 5.2 185.8 5.8 11.4 -21.7 11.3 -20.7 11.0 -18.7 11.2 -20.6
2026-04-13T03:36:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:36:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:36:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.066415
2026-04-13T03:36:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:36:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:36:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:36:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:36:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:36:36.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:36:15', tmtdew=4.32344, humidity=74.5952, cloud=0.0, wind=8.20584, temperature=11.0392, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:35:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[1.2792499999999993, 0.7422500000000003, 0.29725, 0.8114999999999997, 2.3375000000000004, 0.6337500000000009, 0.5649999999999995, nan, 0.9784999999999995, 0.9240000000000004, 0.22524999999999906, 0.5720000000000001, 1.609, 0.8992499999999994, 0.32099999999999973, nan, 1.37425, 0.27000000000000135, 0.11449999999999783, 0.11224999999999952, 0.3559999999999981, 1.1317499999999985, 0.5012500000000006, 1.44475, 0.6809999999999992, 0.08450000000000024, 0.11775000000000091, 0.02149999999999963, 0.15050000000000097, 0.1980000000000004, 0.35800000000000143, 0.31200000000000117, 0.20274999999999999], zp_timestamp='2026-04-13T01:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:36:36.644 [DEBUG] [Thread-201048] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:36:36.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:36:36.737 [DEBUG] [Thread-201051] [transport.py] [_log()] starting thread (client mode): 0xae5b3e20
2026-04-13T03:36:36.737 [DEBUG] [Thread-201051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:36:36.752 [DEBUG] [Thread-201051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:36:36.752 [INFO] [Thread-201051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:36:36.759 [DEBUG] [Thread-201051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:36:36.759 [DEBUG] [Thread-201051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] client lang: <none>
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] server lang: <none>
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] kex follows: False
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] Compression: none
2026-04-13T03:36:36.760 [DEBUG] [Thread-201051] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:36:36.819 [DEBUG] [Thread-201051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:36:36.820 [DEBUG] [Thread-201051] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:36:36.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:36:36.820 [DEBUG] [Thread-201051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:36:36.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:36:36.879 [DEBUG] [Thread-201051] [transport.py] [_log()] userauth is OK
2026-04-13T03:36:36.879 [DEBUG] [Thread-201051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:36:36.880 [DEBUG] [Thread-201051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:36:36.880 [DEBUG] [Thread-201051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:36:36.880 [DEBUG] [Thread-201051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:36:36.898 [INFO] [Thread-201051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:36:36.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:36:36.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:36:37.719 [DEBUG] [Thread-201051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:36:37.719 [DEBUG] [Thread-201051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:36:37.767 [DEBUG] [Thread-201051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:36:37.767 [DEBUG] [Thread-201051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:36:37.775 [DEBUG] [Thread-201051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:36:37.780 [DEBUG] [Thread-201053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:36:37.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:36:37.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:36:37.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:36:37.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:36:37.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:36:37.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:36:37.806 [DEBUG] [Thread-201051] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:36:45.358 [DEBUG] [Thread-201054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:00.411 [DEBUG] [Thread-201055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:07.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:37:07.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:37:07.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:37:09.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 36, 51), 3.47839, 79.0246, 0.0, 9.21168, 10.7116, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:37:09.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:36:51
2026-04-13T03:37:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:37:09.639 [DEBUG] [Thread-201056] [transport.py] [_log()] starting thread (client mode): 0xae5b2560
2026-04-13T03:37:09.639 [DEBUG] [Thread-201056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:37:09.658 [DEBUG] [Thread-201056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:37:09.658 [INFO] [Thread-201056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:37:09.661 [DEBUG] [Thread-201056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] client lang: <none>
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] server lang: <none>
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] kex follows: False
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:37:09.662 [DEBUG] [Thread-201056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:37:09.663 [DEBUG] [Thread-201056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:37:09.663 [DEBUG] [Thread-201056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:37:09.663 [DEBUG] [Thread-201056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:37:09.663 [DEBUG] [Thread-201056] [transport.py] [_log()] Compression: none
2026-04-13T03:37:09.663 [DEBUG] [Thread-201056] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:37:09.682 [DEBUG] [Thread-201056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:37:09.682 [DEBUG] [Thread-201056] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:37:09.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:37:09.683 [DEBUG] [Thread-201056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:37:09.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:37:09.685 [DEBUG] [Thread-201056] [transport.py] [_log()] userauth is OK
2026-04-13T03:37:09.685 [DEBUG] [Thread-201056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:37:09.685 [DEBUG] [Thread-201056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:37:09.685 [DEBUG] [Thread-201056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:37:09.686 [DEBUG] [Thread-201056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:37:09.709 [INFO] [Thread-201056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:37:09.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:37:10.517 [DEBUG] [Thread-201056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:37:10.517 [DEBUG] [Thread-201056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:37:10.517 [DEBUG] [Thread-201056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:37:10.558 [DEBUG] [Thread-201056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:37:10.558 [DEBUG] [Thread-201056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:37:10.561 [DEBUG] [Thread-201056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:37:10.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:37:10.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:37:10.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:37:10.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:37:10.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:37:10.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:37:10.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:37:10.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.067110 -999.00  +11.10   5.33     80   +7.80 1 1 1 2 1     0    0 3.25 13.21 ZNESW 5.3 5.3 184.2 5.8 11.4 -21.9 11.3 -20.6 11.1 -19.0 11.3 -20.8
2026-04-13T03:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.067110
2026-04-13T03:37:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:37:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:37:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:37:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:37:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:37:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:36:51', tmtdew=3.47839, humidity=79.0246, cloud=0.0, wind=9.21168, temperature=10.7116, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:36:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:37:10.585 [DEBUG] [Thread-201056] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:37:10.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:37:10.678 [DEBUG] [Thread-201059] [transport.py] [_log()] starting thread (client mode): 0xae5b07f0
2026-04-13T03:37:10.678 [DEBUG] [Thread-201059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:37:10.696 [DEBUG] [Thread-201059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:37:10.696 [INFO] [Thread-201059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:37:10.703 [DEBUG] [Thread-201059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] client lang: <none>
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] server lang: <none>
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] kex follows: False
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:37:10.704 [DEBUG] [Thread-201059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:37:10.705 [DEBUG] [Thread-201059] [transport.py] [_log()] Compression: none
2026-04-13T03:37:10.705 [DEBUG] [Thread-201059] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:37:10.763 [DEBUG] [Thread-201059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:37:10.763 [DEBUG] [Thread-201059] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:37:10.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:37:10.765 [DEBUG] [Thread-201059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:37:10.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:37:10.818 [DEBUG] [Thread-201059] [transport.py] [_log()] userauth is OK
2026-04-13T03:37:10.818 [DEBUG] [Thread-201059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:37:10.818 [DEBUG] [Thread-201059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:37:10.818 [DEBUG] [Thread-201059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:37:10.818 [DEBUG] [Thread-201059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:37:10.834 [INFO] [Thread-201059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:37:10.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:37:10.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:37:11.645 [DEBUG] [Thread-201059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:37:11.646 [DEBUG] [Thread-201059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:37:11.694 [DEBUG] [Thread-201059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:37:11.694 [DEBUG] [Thread-201059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:37:11.703 [DEBUG] [Thread-201059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:37:11.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:37:11.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:37:11.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:37:11.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:37:11.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:37:11.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:37:11.739 [DEBUG] [Thread-201059] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:37:15.448 [DEBUG] [Thread-201061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:30.510 [DEBUG] [Thread-201062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:36.813 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:36.815 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:37.842 [DEBUG] [Thread-201063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:41.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:37:41.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:37:41.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:37:43.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 37, 26), 4.34971, 74.4459, 0.0, 6.45876, 10.9894, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:37:43.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:37:26
2026-04-13T03:37:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:37:43.587 [DEBUG] [Thread-201064] [transport.py] [_log()] starting thread (client mode): 0xae5b58d0
2026-04-13T03:37:43.587 [DEBUG] [Thread-201064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:37:43.608 [DEBUG] [Thread-201064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:37:43.608 [INFO] [Thread-201064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:37:43.611 [DEBUG] [Thread-201064] [transport.py] [_log()] client lang: <none>
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] server lang: <none>
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] kex follows: False
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] Compression: none
2026-04-13T03:37:43.612 [DEBUG] [Thread-201064] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:37:43.631 [DEBUG] [Thread-201064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:37:43.631 [DEBUG] [Thread-201064] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:37:43.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:37:43.632 [DEBUG] [Thread-201064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:37:43.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:37:43.634 [DEBUG] [Thread-201064] [transport.py] [_log()] userauth is OK
2026-04-13T03:37:43.634 [DEBUG] [Thread-201064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:37:43.635 [DEBUG] [Thread-201064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:37:43.635 [DEBUG] [Thread-201064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:37:43.635 [DEBUG] [Thread-201064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:37:43.650 [INFO] [Thread-201064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:37:43.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:37:44.427 [DEBUG] [Thread-201064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:37:44.427 [DEBUG] [Thread-201064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:37:44.427 [DEBUG] [Thread-201064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:37:44.469 [DEBUG] [Thread-201064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:37:44.469 [DEBUG] [Thread-201064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:37:44.472 [DEBUG] [Thread-201064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:37:44.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:37:44.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:37:44.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:37:44.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:37:44.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:37:44.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:37:44.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:37:44.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:37:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:37:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.067457 -999.00  +11.10   5.21     79   +7.80 1 1 1 1 1     0    0 3.27 12.71 ZNESW 5.2 5.2 187.0 7.0 11.5 -21.8 11.3 -20.8 11.0 -18.9 11.3 -20.7
2026-04-13T03:37:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:37:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:37:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.067457
2026-04-13T03:37:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:37:44.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:37:44.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:37:44.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:37:44.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:37:44.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:37:26', tmtdew=4.34971, humidity=74.4459, cloud=0.0, wind=6.45876, temperature=10.9894, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:37:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:37:44.501 [DEBUG] [Thread-201064] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:37:44.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:37:44.596 [DEBUG] [Thread-201067] [transport.py] [_log()] starting thread (client mode): 0xae5b54e0
2026-04-13T03:37:44.596 [DEBUG] [Thread-201067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:37:44.611 [DEBUG] [Thread-201067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:37:44.611 [INFO] [Thread-201067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:37:44.618 [DEBUG] [Thread-201067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:37:44.618 [DEBUG] [Thread-201067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:37:44.618 [DEBUG] [Thread-201067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:37:44.618 [DEBUG] [Thread-201067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] client lang: <none>
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] server lang: <none>
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] kex follows: False
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] Compression: none
2026-04-13T03:37:44.619 [DEBUG] [Thread-201067] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:37:44.678 [DEBUG] [Thread-201067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:37:44.679 [DEBUG] [Thread-201067] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:37:44.679 [DEBUG] [Thread-201067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:37:44.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:37:44.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:37:44.735 [DEBUG] [Thread-201067] [transport.py] [_log()] userauth is OK
2026-04-13T03:37:44.735 [DEBUG] [Thread-201067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:37:44.735 [DEBUG] [Thread-201067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:37:44.735 [DEBUG] [Thread-201067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:37:44.735 [DEBUG] [Thread-201067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:37:44.754 [INFO] [Thread-201067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:37:44.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:37:44.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:37:45.549 [DEBUG] [Thread-201069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:37:45.556 [DEBUG] [Thread-201067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:37:45.556 [DEBUG] [Thread-201067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:37:45.604 [DEBUG] [Thread-201067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:37:45.605 [DEBUG] [Thread-201067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:37:45.614 [DEBUG] [Thread-201067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:37:45.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:37:45.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:37:45.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:37:45.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:37:45.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:37:45.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:37:45.651 [DEBUG] [Thread-201067] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:38:00.603 [DEBUG] [Thread-201070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:38:15.640 [DEBUG] [Thread-201071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:38:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:38:15.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:38:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:38:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 38, 1), 4.35015, 74.4459, 0.0, 6.3882, 11.006, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:38:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:38:01
2026-04-13T03:38:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:38:17.478 [DEBUG] [Thread-201072] [transport.py] [_log()] starting thread (client mode): 0xae5b4a00
2026-04-13T03:38:17.478 [DEBUG] [Thread-201072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:38:17.498 [DEBUG] [Thread-201072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:38:17.498 [INFO] [Thread-201072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:38:17.501 [DEBUG] [Thread-201072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:38:17.501 [DEBUG] [Thread-201072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] client lang: <none>
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] server lang: <none>
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] kex follows: False
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:38:17.502 [DEBUG] [Thread-201072] [transport.py] [_log()] Compression: none
2026-04-13T03:38:17.503 [DEBUG] [Thread-201072] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:38:17.520 [DEBUG] [Thread-201072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:38:17.521 [DEBUG] [Thread-201072] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:38:17.521 [DEBUG] [Thread-201072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:38:17.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:38:17.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:38:17.523 [DEBUG] [Thread-201072] [transport.py] [_log()] userauth is OK
2026-04-13T03:38:17.524 [DEBUG] [Thread-201072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:38:17.524 [DEBUG] [Thread-201072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:38:17.524 [DEBUG] [Thread-201072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:38:17.524 [DEBUG] [Thread-201072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:38:17.560 [INFO] [Thread-201072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:38:17.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:38:18.345 [DEBUG] [Thread-201072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:38:18.345 [DEBUG] [Thread-201072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:38:18.346 [DEBUG] [Thread-201072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:38:18.386 [DEBUG] [Thread-201072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:38:18.386 [DEBUG] [Thread-201072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:38:18.389 [DEBUG] [Thread-201072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:38:18.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:38:18.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:38:18.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:38:18.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:38:18.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:38:18.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:38:18.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:38:18.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:38:18.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:38:18.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.067804 -999.00  +11.20   5.39     79   +7.70 1 1 1 1 1     0    0 3.36 14.49 ZNESW 5.4 5.4 187.6 5.7 11.4 -21.8 11.3 -20.7 11.1 -18.7 11.3 -20.8
2026-04-13T03:38:18.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:38:18.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:38:18.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.067804
2026-04-13T03:38:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:38:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:38:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:38:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:38:18.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:38:18.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:38:01', tmtdew=4.35015, humidity=74.4459, cloud=0.0, wind=6.3882, temperature=11.006, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:37:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:38:18.414 [DEBUG] [Thread-201072] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:38:18.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:38:18.504 [DEBUG] [Thread-201075] [transport.py] [_log()] starting thread (client mode): 0xae5b3d00
2026-04-13T03:38:18.504 [DEBUG] [Thread-201075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:38:18.520 [DEBUG] [Thread-201075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:38:18.520 [INFO] [Thread-201075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:38:18.527 [DEBUG] [Thread-201075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] client lang: <none>
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] server lang: <none>
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] kex follows: False
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:38:18.528 [DEBUG] [Thread-201075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:38:18.529 [DEBUG] [Thread-201075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:38:18.529 [DEBUG] [Thread-201075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:38:18.529 [DEBUG] [Thread-201075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:38:18.529 [DEBUG] [Thread-201075] [transport.py] [_log()] Compression: none
2026-04-13T03:38:18.529 [DEBUG] [Thread-201075] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:38:18.586 [DEBUG] [Thread-201075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:38:18.587 [DEBUG] [Thread-201075] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:38:18.588 [DEBUG] [Thread-201075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:38:18.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:38:18.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:38:18.645 [DEBUG] [Thread-201075] [transport.py] [_log()] userauth is OK
2026-04-13T03:38:18.646 [DEBUG] [Thread-201075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:38:18.646 [DEBUG] [Thread-201075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:38:18.646 [DEBUG] [Thread-201075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:38:18.646 [DEBUG] [Thread-201075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:38:18.673 [INFO] [Thread-201075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:38:18.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:38:18.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:38:19.489 [DEBUG] [Thread-201075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:38:19.489 [DEBUG] [Thread-201075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:38:19.537 [DEBUG] [Thread-201075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:38:19.538 [DEBUG] [Thread-201075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:38:19.547 [DEBUG] [Thread-201075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:38:19.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:38:19.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:38:19.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:38:19.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:38:19.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:38:19.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:38:19.584 [DEBUG] [Thread-201075] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:38:30.676 [DEBUG] [Thread-201077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:38:37.016 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:38:37.017 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:38:37.911 [DEBUG] [Thread-201078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:38:45.726 [DEBUG] [Thread-201079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:38:49.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:38:49.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:38:49.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:38:50.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 38, 37), 3.48979, 78.9582, 0.0, 9.3528, 10.6784, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:38:50.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:38:37
2026-04-13T03:38:51.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:38:51.497 [DEBUG] [Thread-201080] [transport.py] [_log()] starting thread (client mode): 0xb0fb68c0
2026-04-13T03:38:51.497 [DEBUG] [Thread-201080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:38:51.517 [DEBUG] [Thread-201080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:38:51.518 [INFO] [Thread-201080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:38:51.521 [DEBUG] [Thread-201080] [transport.py] [_log()] client lang: <none>
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] server lang: <none>
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] kex follows: False
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] Compression: none
2026-04-13T03:38:51.522 [DEBUG] [Thread-201080] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:38:51.541 [DEBUG] [Thread-201080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:38:51.542 [DEBUG] [Thread-201080] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:38:51.542 [DEBUG] [Thread-201080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:38:51.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:38:51.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:38:51.544 [DEBUG] [Thread-201080] [transport.py] [_log()] userauth is OK
2026-04-13T03:38:51.544 [DEBUG] [Thread-201080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:38:51.545 [DEBUG] [Thread-201080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:38:51.545 [DEBUG] [Thread-201080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:38:51.545 [DEBUG] [Thread-201080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:38:51.581 [INFO] [Thread-201080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:38:51.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:38:52.374 [DEBUG] [Thread-201080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:38:52.375 [DEBUG] [Thread-201080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:38:52.375 [DEBUG] [Thread-201080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:38:52.416 [DEBUG] [Thread-201080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:38:52.416 [DEBUG] [Thread-201080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:38:52.420 [DEBUG] [Thread-201080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:38:52.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:38:52.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:38:52.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:38:52.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:38:52.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:38:52.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:38:52.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:38:52.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:38:52.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:38:52.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.068151 -999.00  +11.20   5.53     79   +7.80 1 1 1 1 1     0    0 3.39 15.56 ZNESW 5.5 5.5 190.0 6.1 11.4 -21.7 11.3 -20.6 11.1 -18.7 11.3 -20.7
2026-04-13T03:38:52.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:38:52.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:38:52.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.068151
2026-04-13T03:38:52.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:38:52.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:38:52.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:38:52.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:38:52.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:38:52.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:38:37', tmtdew=3.48979, humidity=78.9582, cloud=0.0, wind=9.3528, temperature=10.6784, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:38:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:38:52.449 [DEBUG] [Thread-201080] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:38:52.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:38:52.545 [DEBUG] [Thread-201083] [transport.py] [_log()] starting thread (client mode): 0xae52de70
2026-04-13T03:38:52.545 [DEBUG] [Thread-201083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:38:52.560 [DEBUG] [Thread-201083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:38:52.560 [INFO] [Thread-201083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:38:52.568 [DEBUG] [Thread-201083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:38:52.568 [DEBUG] [Thread-201083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:38:52.568 [DEBUG] [Thread-201083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:38:52.568 [DEBUG] [Thread-201083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] client lang: <none>
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] server lang: <none>
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] kex follows: False
2026-04-13T03:38:52.569 [DEBUG] [Thread-201083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:38:52.570 [DEBUG] [Thread-201083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:38:52.570 [DEBUG] [Thread-201083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:38:52.570 [DEBUG] [Thread-201083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:38:52.570 [DEBUG] [Thread-201083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:38:52.570 [DEBUG] [Thread-201083] [transport.py] [_log()] Compression: none
2026-04-13T03:38:52.570 [DEBUG] [Thread-201083] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:38:52.631 [DEBUG] [Thread-201083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:38:52.631 [DEBUG] [Thread-201083] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:38:52.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:38:52.632 [DEBUG] [Thread-201083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:38:52.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:38:52.687 [DEBUG] [Thread-201083] [transport.py] [_log()] userauth is OK
2026-04-13T03:38:52.687 [DEBUG] [Thread-201083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:38:52.687 [DEBUG] [Thread-201083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:38:52.687 [DEBUG] [Thread-201083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:38:52.687 [DEBUG] [Thread-201083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:38:52.706 [INFO] [Thread-201083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:38:52.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:38:52.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:38:53.503 [DEBUG] [Thread-201083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:38:53.504 [DEBUG] [Thread-201083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:38:53.552 [DEBUG] [Thread-201083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:38:53.552 [DEBUG] [Thread-201083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:38:53.562 [DEBUG] [Thread-201083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:38:53.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:38:53.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:38:53.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:38:53.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:38:53.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:38:53.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:38:53.599 [DEBUG] [Thread-201083] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:39:00.763 [DEBUG] [Thread-201085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:39:15.818 [DEBUG] [Thread-201086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:39:23.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:39:23.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:39:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:39:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 39, 12), 4.29841, 74.9625, 0.0, 8.25876, 11.0558, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:39:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:39:12
2026-04-13T03:39:25.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:39:25.513 [DEBUG] [Thread-201087] [transport.py] [_log()] starting thread (client mode): 0xae5b5750
2026-04-13T03:39:25.513 [DEBUG] [Thread-201087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:39:25.533 [DEBUG] [Thread-201087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:39:25.533 [INFO] [Thread-201087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:39:25.536 [DEBUG] [Thread-201087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] client lang: <none>
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] server lang: <none>
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] kex follows: False
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] Compression: none
2026-04-13T03:39:25.537 [DEBUG] [Thread-201087] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:39:25.558 [DEBUG] [Thread-201087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:39:25.559 [DEBUG] [Thread-201087] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:39:25.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:39:25.560 [DEBUG] [Thread-201087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:39:25.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:39:25.562 [DEBUG] [Thread-201087] [transport.py] [_log()] userauth is OK
2026-04-13T03:39:25.562 [DEBUG] [Thread-201087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:39:25.562 [DEBUG] [Thread-201087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:39:25.562 [DEBUG] [Thread-201087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:39:25.562 [DEBUG] [Thread-201087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:39:25.596 [INFO] [Thread-201087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:39:25.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:39:26.374 [DEBUG] [Thread-201087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:39:26.374 [DEBUG] [Thread-201087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:39:26.375 [DEBUG] [Thread-201087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:39:26.415 [DEBUG] [Thread-201087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:39:26.416 [DEBUG] [Thread-201087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:39:26.419 [DEBUG] [Thread-201087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:39:26.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:39:26.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:39:26.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:39:26.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:39:26.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:39:26.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:39:26.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:39:26.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:39:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:39:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.068499 -999.00  +11.20   6.17     79   +7.80 1 1 1 1 1     0    0 3.47 15.93 ZNESW 6.2 6.2 185.0 6.6 11.5 -21.8 11.3 -20.5 11.0 -18.7 11.3 -20.6
2026-04-13T03:39:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:39:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:39:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.068499
2026-04-13T03:39:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:39:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:39:26.445 [DEBUG] [Thread-201087] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:39:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:39:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:39:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:39:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:39:12', tmtdew=4.29841, humidity=74.9625, cloud=0.0, wind=8.25876, temperature=11.0558, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:38:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:39:26.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:39:26.536 [DEBUG] [Thread-201090] [transport.py] [_log()] starting thread (client mode): 0xb0fb5b10
2026-04-13T03:39:26.536 [DEBUG] [Thread-201090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:39:26.550 [DEBUG] [Thread-201090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:39:26.550 [INFO] [Thread-201090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:39:26.558 [DEBUG] [Thread-201090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:39:26.558 [DEBUG] [Thread-201090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:39:26.558 [DEBUG] [Thread-201090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:39:26.558 [DEBUG] [Thread-201090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] client lang: <none>
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] server lang: <none>
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] kex follows: False
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] Compression: none
2026-04-13T03:39:26.559 [DEBUG] [Thread-201090] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:39:26.618 [DEBUG] [Thread-201090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:39:26.618 [DEBUG] [Thread-201090] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:39:26.619 [DEBUG] [Thread-201090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:39:26.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:39:26.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:39:26.675 [DEBUG] [Thread-201090] [transport.py] [_log()] userauth is OK
2026-04-13T03:39:26.676 [DEBUG] [Thread-201090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:39:26.676 [DEBUG] [Thread-201090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:39:26.676 [DEBUG] [Thread-201090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:39:26.676 [DEBUG] [Thread-201090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:39:26.699 [INFO] [Thread-201090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:39:26.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:39:26.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:39:27.559 [DEBUG] [Thread-201090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:39:27.560 [DEBUG] [Thread-201090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:39:27.608 [DEBUG] [Thread-201090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:39:27.608 [DEBUG] [Thread-201090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:39:27.617 [DEBUG] [Thread-201090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:39:27.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:39:27.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:39:27.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:39:27.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:39:27.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:39:27.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:39:27.652 [DEBUG] [Thread-201090] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:39:30.854 [DEBUG] [Thread-201092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:39:37.221 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:39:37.223 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:39:37.971 [DEBUG] [Thread-201093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:39:45.904 [DEBUG] [Thread-201094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:39:57.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:39:57.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:39:57.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:39:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 39, 48), 3.52577, 78.7592, 0.0, 9.24696, 10.6452, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:39:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:39:48
2026-04-13T03:39:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:39:59.460 [DEBUG] [Thread-201095] [transport.py] [_log()] starting thread (client mode): 0xae52cac0
2026-04-13T03:39:59.460 [DEBUG] [Thread-201095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:39:59.480 [DEBUG] [Thread-201095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:39:59.480 [INFO] [Thread-201095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:39:59.483 [DEBUG] [Thread-201095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] client lang: <none>
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] server lang: <none>
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] kex follows: False
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:39:59.484 [DEBUG] [Thread-201095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:39:59.485 [DEBUG] [Thread-201095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:39:59.485 [DEBUG] [Thread-201095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:39:59.485 [DEBUG] [Thread-201095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:39:59.485 [DEBUG] [Thread-201095] [transport.py] [_log()] Compression: none
2026-04-13T03:39:59.485 [DEBUG] [Thread-201095] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:39:59.503 [DEBUG] [Thread-201095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:39:59.505 [DEBUG] [Thread-201095] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:39:59.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:39:59.506 [DEBUG] [Thread-201095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:39:59.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:39:59.508 [DEBUG] [Thread-201095] [transport.py] [_log()] userauth is OK
2026-04-13T03:39:59.508 [DEBUG] [Thread-201095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:39:59.508 [DEBUG] [Thread-201095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:39:59.508 [DEBUG] [Thread-201095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:39:59.508 [DEBUG] [Thread-201095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:39:59.532 [INFO] [Thread-201095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:39:59.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:40:00.317 [DEBUG] [Thread-201095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:40:00.318 [DEBUG] [Thread-201095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:40:00.318 [DEBUG] [Thread-201095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:40:00.358 [DEBUG] [Thread-201095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:40:00.358 [DEBUG] [Thread-201095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:40:00.362 [DEBUG] [Thread-201095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:40:00.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:40:00.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:40:00.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:40:00.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:40:00.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:40:00.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:40:00.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:40:00.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:40:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:40:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.068846 -999.00  +11.20   5.34     79   +7.80 1 1 1 1 1     0    0 3.44 15.60 ZNESW 5.3 5.3 195.6 5.9 11.4 -21.8 11.3 -20.7 11.0 -18.7 11.3 -20.8
2026-04-13T03:40:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:40:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:40:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.068846
2026-04-13T03:40:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:40:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:40:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:40:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:40:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:40:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:39:48', tmtdew=3.52577, humidity=78.7592, cloud=0.0, wind=9.24696, temperature=10.6452, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:39:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:40:00.391 [DEBUG] [Thread-201095] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:40:00.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:40:00.484 [DEBUG] [Thread-201098] [transport.py] [_log()] starting thread (client mode): 0xae5b0430
2026-04-13T03:40:00.484 [DEBUG] [Thread-201098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:40:00.499 [DEBUG] [Thread-201098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:40:00.499 [INFO] [Thread-201098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] client lang: <none>
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] server lang: <none>
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] kex follows: False
2026-04-13T03:40:00.507 [DEBUG] [Thread-201098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:40:00.508 [DEBUG] [Thread-201098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:40:00.508 [DEBUG] [Thread-201098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:40:00.508 [DEBUG] [Thread-201098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:40:00.508 [DEBUG] [Thread-201098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:40:00.508 [DEBUG] [Thread-201098] [transport.py] [_log()] Compression: none
2026-04-13T03:40:00.508 [DEBUG] [Thread-201098] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:40:00.566 [DEBUG] [Thread-201098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:40:00.567 [DEBUG] [Thread-201098] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:40:00.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:40:00.568 [DEBUG] [Thread-201098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:40:00.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:40:00.622 [DEBUG] [Thread-201098] [transport.py] [_log()] userauth is OK
2026-04-13T03:40:00.623 [DEBUG] [Thread-201098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:40:00.623 [DEBUG] [Thread-201098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:40:00.623 [DEBUG] [Thread-201098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:40:00.623 [DEBUG] [Thread-201098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:40:00.641 [INFO] [Thread-201098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:40:00.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:40:00.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:40:00.946 [DEBUG] [Thread-201100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:40:01.485 [DEBUG] [Thread-201098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:40:01.486 [DEBUG] [Thread-201098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:40:01.533 [DEBUG] [Thread-201098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:40:01.533 [DEBUG] [Thread-201098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:40:01.542 [DEBUG] [Thread-201098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:40:01.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:40:01.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:40:01.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:40:01.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:40:01.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:40:01.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:40:01.577 [DEBUG] [Thread-201098] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:40:15.999 [DEBUG] [Thread-201101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:40:31.037 [DEBUG] [Thread-201102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:40:31.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:40:31.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:40:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:40:32.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 40, 23), 4.20713, 75.4131, 0.0, 8.32932, 11.0395, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:40:32.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:40:23
2026-04-13T03:40:33.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:40:33.457 [DEBUG] [Thread-201103] [transport.py] [_log()] starting thread (client mode): 0xae5b4100
2026-04-13T03:40:33.457 [DEBUG] [Thread-201103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:40:33.478 [DEBUG] [Thread-201103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:40:33.478 [INFO] [Thread-201103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:40:33.481 [DEBUG] [Thread-201103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:40:33.481 [DEBUG] [Thread-201103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:40:33.481 [DEBUG] [Thread-201103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:40:33.481 [DEBUG] [Thread-201103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:40:33.481 [DEBUG] [Thread-201103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:40:33.481 [DEBUG] [Thread-201103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:40:33.481 [DEBUG] [Thread-201103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] client lang: <none>
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] server lang: <none>
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] kex follows: False
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:40:33.482 [DEBUG] [Thread-201103] [transport.py] [_log()] Compression: none
2026-04-13T03:40:33.483 [DEBUG] [Thread-201103] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:40:33.500 [DEBUG] [Thread-201103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:40:33.501 [DEBUG] [Thread-201103] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:40:33.502 [DEBUG] [Thread-201103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:40:33.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:40:33.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:40:33.504 [DEBUG] [Thread-201103] [transport.py] [_log()] userauth is OK
2026-04-13T03:40:33.504 [DEBUG] [Thread-201103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:40:33.504 [DEBUG] [Thread-201103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:40:33.504 [DEBUG] [Thread-201103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:40:33.504 [DEBUG] [Thread-201103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:40:33.527 [INFO] [Thread-201103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:40:33.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:40:34.272 [DEBUG] [Thread-201103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:40:34.272 [DEBUG] [Thread-201103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:40:34.272 [DEBUG] [Thread-201103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:40:34.313 [DEBUG] [Thread-201103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:40:34.313 [DEBUG] [Thread-201103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:40:34.316 [DEBUG] [Thread-201103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:40:34.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:40:34.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:40:34.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:40:34.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:40:34.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:40:34.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:40:34.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:40:34.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:40:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:40:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.069540 -999.00  +11.20   5.68     80   +7.90 1 1 1 2 1     0    0 3.52 16.55 ZNESW 5.7 5.7 194.0 6.2 11.5 -21.8 11.3 -20.8 11.1 -18.8 11.3 -20.7
2026-04-13T03:40:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:40:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:40:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.069540
2026-04-13T03:40:34.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:40:34.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:40:34.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:40:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:40:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:40:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:40:23', tmtdew=4.20713, humidity=75.4131, cloud=0.0, wind=8.32932, temperature=11.0395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:40:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:40:34.340 [DEBUG] [Thread-201103] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:40:34.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:40:34.433 [DEBUG] [Thread-201106] [transport.py] [_log()] starting thread (client mode): 0xae5b1840
2026-04-13T03:40:34.433 [DEBUG] [Thread-201106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:40:34.447 [DEBUG] [Thread-201106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:40:34.448 [INFO] [Thread-201106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:40:34.455 [DEBUG] [Thread-201106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:40:34.455 [DEBUG] [Thread-201106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:40:34.455 [DEBUG] [Thread-201106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] client lang: <none>
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] server lang: <none>
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] kex follows: False
2026-04-13T03:40:34.456 [DEBUG] [Thread-201106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:40:34.457 [DEBUG] [Thread-201106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:40:34.457 [DEBUG] [Thread-201106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:40:34.457 [DEBUG] [Thread-201106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:40:34.457 [DEBUG] [Thread-201106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:40:34.457 [DEBUG] [Thread-201106] [transport.py] [_log()] Compression: none
2026-04-13T03:40:34.457 [DEBUG] [Thread-201106] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:40:34.511 [DEBUG] [Thread-201106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:40:34.512 [DEBUG] [Thread-201106] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:40:34.512 [DEBUG] [Thread-201106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:40:34.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:40:34.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:40:34.569 [DEBUG] [Thread-201106] [transport.py] [_log()] userauth is OK
2026-04-13T03:40:34.569 [DEBUG] [Thread-201106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:40:34.569 [DEBUG] [Thread-201106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:40:34.569 [DEBUG] [Thread-201106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:40:34.569 [DEBUG] [Thread-201106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:40:34.587 [INFO] [Thread-201106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:40:34.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:40:34.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:40:35.409 [DEBUG] [Thread-201106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:40:35.409 [DEBUG] [Thread-201106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:40:35.457 [DEBUG] [Thread-201106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:40:35.457 [DEBUG] [Thread-201106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:40:35.465 [DEBUG] [Thread-201106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:40:35.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:40:35.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:40:35.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:40:35.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:40:35.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:40:35.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:40:35.496 [DEBUG] [Thread-201106] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:40:37.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:40:37.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:40:38.058 [DEBUG] [Thread-201108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:40:46.072 [DEBUG] [Thread-201109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:41:01.121 [DEBUG] [Thread-201110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:41:05.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:41:05.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:41:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:41:06.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 40, 59), 4.21591, 75.3633, 0.0, 8.32932, 11.0229, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:41:06.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:40:59
2026-04-13T03:41:07.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:41:07.404 [DEBUG] [Thread-201111] [transport.py] [_log()] starting thread (client mode): 0xae52ea10
2026-04-13T03:41:07.404 [DEBUG] [Thread-201111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:41:07.416 [DEBUG] [Thread-201111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:41:07.416 [INFO] [Thread-201111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:41:07.419 [DEBUG] [Thread-201111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:41:07.419 [DEBUG] [Thread-201111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:41:07.419 [DEBUG] [Thread-201111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:41:07.419 [DEBUG] [Thread-201111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:07.419 [DEBUG] [Thread-201111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] client lang: <none>
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] server lang: <none>
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] kex follows: False
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] Compression: none
2026-04-13T03:41:07.420 [DEBUG] [Thread-201111] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:41:07.439 [DEBUG] [Thread-201111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:41:07.439 [DEBUG] [Thread-201111] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:41:07.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:41:07.440 [DEBUG] [Thread-201111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:41:07.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:41:07.442 [DEBUG] [Thread-201111] [transport.py] [_log()] userauth is OK
2026-04-13T03:41:07.443 [DEBUG] [Thread-201111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:41:07.443 [DEBUG] [Thread-201111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:41:07.443 [DEBUG] [Thread-201111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:41:07.443 [DEBUG] [Thread-201111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:41:07.462 [INFO] [Thread-201111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:41:07.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:41:08.236 [DEBUG] [Thread-201111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:41:08.236 [DEBUG] [Thread-201111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:41:08.237 [DEBUG] [Thread-201111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:41:08.277 [DEBUG] [Thread-201111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:41:08.277 [DEBUG] [Thread-201111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:41:08.281 [DEBUG] [Thread-201111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:41:08.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:41:08.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:41:08.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:41:08.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:41:08.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:41:08.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:41:08.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:41:08.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:41:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:41:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.069887 -999.00  +11.20   5.68     80   +7.90 1 1 1 2 1     0    0 3.56 17.48 ZNESW 5.7 5.7 192.8 6.2 11.5 -21.9 11.3 -20.8 11.1 -18.8 11.3 -20.8
2026-04-13T03:41:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:41:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:41:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.069887
2026-04-13T03:41:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:41:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:41:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:41:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:41:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:41:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:40:59', tmtdew=4.21591, humidity=75.3633, cloud=0.0, wind=8.32932, temperature=11.0229, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:40:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:41:08.307 [DEBUG] [Thread-201111] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:41:08.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:41:08.411 [DEBUG] [Thread-201114] [transport.py] [_log()] starting thread (client mode): 0xae52d1b0
2026-04-13T03:41:08.411 [DEBUG] [Thread-201114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:41:08.427 [DEBUG] [Thread-201114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:41:08.427 [INFO] [Thread-201114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:41:08.434 [DEBUG] [Thread-201114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] client lang: <none>
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] server lang: <none>
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] kex follows: False
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] Compression: none
2026-04-13T03:41:08.435 [DEBUG] [Thread-201114] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:41:08.495 [DEBUG] [Thread-201114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:41:08.496 [DEBUG] [Thread-201114] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:41:08.497 [DEBUG] [Thread-201114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:41:08.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:41:08.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:41:08.551 [DEBUG] [Thread-201114] [transport.py] [_log()] userauth is OK
2026-04-13T03:41:08.551 [DEBUG] [Thread-201114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:41:08.552 [DEBUG] [Thread-201114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:41:08.552 [DEBUG] [Thread-201114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:41:08.552 [DEBUG] [Thread-201114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:41:08.572 [INFO] [Thread-201114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:41:08.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:41:08.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:41:09.386 [DEBUG] [Thread-201114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:41:09.386 [DEBUG] [Thread-201114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:41:09.434 [DEBUG] [Thread-201114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:41:09.434 [DEBUG] [Thread-201114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:41:09.443 [DEBUG] [Thread-201114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:41:09.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:41:09.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:41:09.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:41:09.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:41:09.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:41:09.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:41:09.480 [DEBUG] [Thread-201114] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:41:16.156 [DEBUG] [Thread-201116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:41:31.208 [DEBUG] [Thread-201117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:41:37.631 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:41:37.633 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:41:38.124 [DEBUG] [Thread-201118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:41:39.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:41:39.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:41:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:41:40.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 40, 59), 4.21591, 75.3633, 0.0, 8.32932, 11.0229, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:41:40.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:40:59
2026-04-13T03:41:41.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:41:41.321 [DEBUG] [Thread-201119] [transport.py] [_log()] starting thread (client mode): 0xb0fb6770
2026-04-13T03:41:41.321 [DEBUG] [Thread-201119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:41:41.341 [DEBUG] [Thread-201119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:41:41.342 [INFO] [Thread-201119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] client lang: <none>
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] server lang: <none>
2026-04-13T03:41:41.345 [DEBUG] [Thread-201119] [transport.py] [_log()] kex follows: False
2026-04-13T03:41:41.346 [DEBUG] [Thread-201119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:41:41.346 [DEBUG] [Thread-201119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:41:41.346 [DEBUG] [Thread-201119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:41:41.346 [DEBUG] [Thread-201119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:41:41.346 [DEBUG] [Thread-201119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:41:41.346 [DEBUG] [Thread-201119] [transport.py] [_log()] Compression: none
2026-04-13T03:41:41.346 [DEBUG] [Thread-201119] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:41:41.362 [DEBUG] [Thread-201119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:41:41.362 [DEBUG] [Thread-201119] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:41:41.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:41:41.363 [DEBUG] [Thread-201119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:41:41.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:41:41.366 [DEBUG] [Thread-201119] [transport.py] [_log()] userauth is OK
2026-04-13T03:41:41.366 [DEBUG] [Thread-201119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:41:41.366 [DEBUG] [Thread-201119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:41:41.366 [DEBUG] [Thread-201119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:41:41.366 [DEBUG] [Thread-201119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:41:41.389 [INFO] [Thread-201119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:41:41.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:41:42.202 [DEBUG] [Thread-201119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:41:42.202 [DEBUG] [Thread-201119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:41:42.202 [DEBUG] [Thread-201119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:41:42.243 [DEBUG] [Thread-201119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:41:42.243 [DEBUG] [Thread-201119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:41:42.247 [DEBUG] [Thread-201119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:41:42.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:41:42.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:41:42.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:41:42.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:41:42.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:41:42.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:41:42.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:41:42.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:41:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:41:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.070234 -999.00  +11.20   5.65     80   +8.00 1 1 1 2 1     0    0 3.51 17.68 ZNESW 5.7 5.7 196.2 6.4 11.5 -21.9 11.4 -20.7 11.1 -18.9 11.3 -20.8
2026-04-13T03:41:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:41:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:41:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.070234
2026-04-13T03:41:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:41:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:41:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:41:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:41:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:41:42.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:40:59', tmtdew=4.21591, humidity=75.3633, cloud=0.0, wind=8.32932, temperature=11.0229, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:41:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:41:42.275 [DEBUG] [Thread-201119] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:41:42.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:41:42.378 [DEBUG] [Thread-201122] [transport.py] [_log()] starting thread (client mode): 0xae5b2b60
2026-04-13T03:41:42.379 [DEBUG] [Thread-201122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:41:42.394 [DEBUG] [Thread-201122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:41:42.395 [INFO] [Thread-201122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:41:42.402 [DEBUG] [Thread-201122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:41:42.402 [DEBUG] [Thread-201122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] client lang: <none>
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] server lang: <none>
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] kex follows: False
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] Compression: none
2026-04-13T03:41:42.403 [DEBUG] [Thread-201122] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:41:42.470 [DEBUG] [Thread-201122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:41:42.471 [DEBUG] [Thread-201122] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:41:42.471 [DEBUG] [Thread-201122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:41:42.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:41:42.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:41:42.526 [DEBUG] [Thread-201122] [transport.py] [_log()] userauth is OK
2026-04-13T03:41:42.526 [DEBUG] [Thread-201122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:41:42.526 [DEBUG] [Thread-201122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:41:42.526 [DEBUG] [Thread-201122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:41:42.526 [DEBUG] [Thread-201122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:41:42.545 [INFO] [Thread-201122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:41:42.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:41:42.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:41:43.363 [DEBUG] [Thread-201122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:41:43.363 [DEBUG] [Thread-201122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:41:43.411 [DEBUG] [Thread-201122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:41:43.412 [DEBUG] [Thread-201122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:41:43.424 [DEBUG] [Thread-201122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:41:43.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:41:43.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:41:43.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:41:43.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:41:43.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:41:43.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:41:43.461 [DEBUG] [Thread-201122] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:41:46.250 [DEBUG] [Thread-201124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:01.298 [DEBUG] [Thread-201125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:13.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:42:13.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:42:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:42:14.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 41, 35), 3.51953, 78.7929, 0.0, 9.74088, 10.6456, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:42:14.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:41:35
2026-04-13T03:42:15.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:42:15.339 [DEBUG] [Thread-201126] [transport.py] [_log()] starting thread (client mode): 0xae516c20
2026-04-13T03:42:15.339 [DEBUG] [Thread-201126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:42:15.360 [DEBUG] [Thread-201126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:42:15.360 [INFO] [Thread-201126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:42:15.362 [DEBUG] [Thread-201126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:42:15.362 [DEBUG] [Thread-201126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:42:15.362 [DEBUG] [Thread-201126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:42:15.362 [DEBUG] [Thread-201126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] client lang: <none>
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] server lang: <none>
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] kex follows: False
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:42:15.363 [DEBUG] [Thread-201126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:42:15.364 [DEBUG] [Thread-201126] [transport.py] [_log()] Compression: none
2026-04-13T03:42:15.364 [DEBUG] [Thread-201126] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:42:15.372 [DEBUG] [Thread-201126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:42:15.373 [DEBUG] [Thread-201126] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:42:15.373 [DEBUG] [Thread-201126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:42:15.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:42:15.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:42:15.375 [DEBUG] [Thread-201126] [transport.py] [_log()] userauth is OK
2026-04-13T03:42:15.375 [DEBUG] [Thread-201126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:42:15.375 [DEBUG] [Thread-201126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:42:15.375 [DEBUG] [Thread-201126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:42:15.376 [DEBUG] [Thread-201126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:42:15.399 [INFO] [Thread-201126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:42:15.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:42:16.015 [DEBUG] [Thread-201126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:42:16.015 [DEBUG] [Thread-201126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:42:16.015 [DEBUG] [Thread-201126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:42:16.056 [DEBUG] [Thread-201126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:42:16.056 [DEBUG] [Thread-201126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:42:16.059 [DEBUG] [Thread-201126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:42:16.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:42:16.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:42:16.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:42:16.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:42:16.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:42:16.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:42:16.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:42:16.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:42:16.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:42:16.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.070582 -999.00  +11.20   5.17     80   +8.00 1 1 1 2 1     0    0 3.62 18.96 ZNESW 5.2 5.2 195.8 7.0 11.6 -21.9 11.4 -20.7 11.1 -18.9 11.3 -20.8
2026-04-13T03:42:16.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:42:16.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:42:16.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.070582
2026-04-13T03:42:16.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:42:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:42:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:42:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:42:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:42:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:41:35', tmtdew=3.51953, humidity=78.7929, cloud=0.0, wind=9.74088, temperature=10.6456, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:41:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[1.03925, 0.6652500000000003, 0.1922499999999996, 0.6994999999999996, 2.2204999999999995, 0.5792500000000009, 0.46950000000000003, nan, 1.1224999999999996, 0.71, 0.2052499999999995, 0.5470000000000006, 1.4245, 1.1572499999999994, 0.30100000000000016, nan, 1.43825, 0.23799999999999955, 0.11299999999999955, 0.10174999999999912, 0.2749999999999986, 1.1497499999999992, 0.5442500000000008, 1.4217500000000003, 0.5399999999999991, 0.12199999999999989, 0.09575000000000067, 0.057000000000000384, 0.12100000000000044, 0.1980000000000004, 0.41800000000000104, 0.3625000000000007, 0.21124999999999972], zp_timestamp='2026-04-13T01:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:42:16.090 [DEBUG] [Thread-201126] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:42:16.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:42:16.186 [DEBUG] [Thread-201129] [transport.py] [_log()] starting thread (client mode): 0xae514310
2026-04-13T03:42:16.186 [DEBUG] [Thread-201129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:42:16.200 [DEBUG] [Thread-201129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:42:16.200 [INFO] [Thread-201129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:42:16.208 [DEBUG] [Thread-201129] [transport.py] [_log()] client lang: <none>
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] server lang: <none>
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] kex follows: False
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] Compression: none
2026-04-13T03:42:16.209 [DEBUG] [Thread-201129] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:42:16.267 [DEBUG] [Thread-201129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:42:16.268 [DEBUG] [Thread-201129] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:42:16.268 [DEBUG] [Thread-201129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:42:16.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:42:16.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:42:16.323 [DEBUG] [Thread-201129] [transport.py] [_log()] userauth is OK
2026-04-13T03:42:16.323 [DEBUG] [Thread-201129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:42:16.323 [DEBUG] [Thread-201129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:42:16.323 [DEBUG] [Thread-201129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:42:16.323 [DEBUG] [Thread-201129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:42:16.333 [DEBUG] [Thread-201131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:16.337 [INFO] [Thread-201129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:42:16.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:42:16.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:42:17.223 [DEBUG] [Thread-201129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:42:17.224 [DEBUG] [Thread-201129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:42:17.272 [DEBUG] [Thread-201129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:42:17.272 [DEBUG] [Thread-201129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:42:17.281 [DEBUG] [Thread-201129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:42:17.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:42:17.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:42:17.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:42:17.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:42:17.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:42:17.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:42:17.318 [DEBUG] [Thread-201129] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:42:31.375 [DEBUG] [Thread-201132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:37.843 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:37.844 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:38.201 [DEBUG] [Thread-201133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:46.408 [DEBUG] [Thread-201134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:42:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:42:47.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:42: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
2026-04-13T03:42:48.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 42, 10), 4.21809, 75.3467, 0.0, 8.2764, 11.0396, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:42:48.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:42:10
2026-04-13T03:42:49.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:42:49.205 [DEBUG] [Thread-201135] [transport.py] [_log()] starting thread (client mode): 0xb0febe80
2026-04-13T03:42:49.205 [DEBUG] [Thread-201135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:42:49.224 [DEBUG] [Thread-201135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:42:49.224 [INFO] [Thread-201135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] client lang: <none>
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] server lang: <none>
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] kex follows: False
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] Compression: none
2026-04-13T03:42:49.228 [DEBUG] [Thread-201135] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:42:49.251 [DEBUG] [Thread-201135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:42:49.251 [DEBUG] [Thread-201135] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:42:49.252 [DEBUG] [Thread-201135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:42:49.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:42:49.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:42:49.254 [DEBUG] [Thread-201135] [transport.py] [_log()] userauth is OK
2026-04-13T03:42:49.254 [DEBUG] [Thread-201135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:42:49.254 [DEBUG] [Thread-201135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:42:49.254 [DEBUG] [Thread-201135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:42:49.254 [DEBUG] [Thread-201135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:42:49.290 [INFO] [Thread-201135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:42:49.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:42:49.931 [DEBUG] [Thread-201135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:42:49.931 [DEBUG] [Thread-201135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:42:49.931 [DEBUG] [Thread-201135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:42:49.972 [DEBUG] [Thread-201135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:42:49.972 [DEBUG] [Thread-201135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:42:49.976 [DEBUG] [Thread-201135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:42:49.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:42:49.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:42:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:42:49.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:42:49.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:42:50.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:42:50.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:42:50.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:42:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:42:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.070929 -999.00  +11.20   6.11     81   +8.00 1 1 1 2 1     0    0 3.70 21.02 ZNESW 6.1 6.1 197.0 7.2 11.5 -22.0 11.4 -20.7 11.1 -18.9 11.3 -20.8
2026-04-13T03:42:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:42:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:42:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.070929
2026-04-13T03:42:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:42:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:42:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:42:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:42:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:42:50.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:42:10', tmtdew=4.21809, humidity=75.3467, cloud=0.0, wind=8.2764, temperature=11.0396, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:42:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[1.0257499999999995, 0.7322500000000005, 0.09174999999999933, 0.8459999999999992, 1.8445, 0.37125000000000163, 0.46999999999999886, 1.8332500000000005, 1.6264999999999992, 0.6710000000000003, 0.15274999999999928, 0.6539999999999999, 1.1219999999999999, 0.7112499999999997, 0.15199999999999925, nan, 1.1862499999999994, 0.17900000000000027, 0.07449999999999868, 0.04274999999999807, 0.22699999999999854, 0.8597499999999991, 0.4072500000000012, 1.5412499999999998, 0.39899999999999913, 0.04300000000000104, 0.03725000000000023, -0.02149999999999963, 0.08000000000000007, 0.1960000000000015, 0.2900000000000009, 0.2060000000000013, 0.048749999999998295], zp_timestamp='2026-04-13T01:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:42:50.004 [DEBUG] [Thread-201135] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:42:50.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:43:01.443 [DEBUG] [Thread-201138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:43:16.497 [DEBUG] [Thread-201139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:43:31.534 [DEBUG] [Thread-201140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:43:38.045 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:43:38.046 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:43:38.268 [DEBUG] [Thread-201141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:43:46.574 [DEBUG] [Thread-201142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:44:01.611 [DEBUG] [Thread-201143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:44:16.650 [DEBUG] [Thread-201144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:44:31.693 [DEBUG] [Thread-201145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:44:38.250 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:44:38.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:44:38.327 [DEBUG] [Thread-201146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:44:46.734 [DEBUG] [Thread-201147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:45:01.771 [DEBUG] [Thread-201148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:45:03.359 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T03:45:16.804 [DEBUG] [Thread-201149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:45:31.842 [DEBUG] [Thread-201150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:45:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:45:33.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:45:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:45:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 45, 7), 3.94588, 76.7449, 0.0, 8.50572, 11.0395, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:45:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:45:07
2026-04-13T03:45:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:45:35.305 [DEBUG] [Thread-201151] [transport.py] [_log()] starting thread (client mode): 0xb0fb4280
2026-04-13T03:45:35.306 [DEBUG] [Thread-201151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:45:35.325 [DEBUG] [Thread-201151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:45:35.325 [INFO] [Thread-201151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:45:35.326 [DEBUG] [Thread-201151] [transport.py] [_log()] client lang: <none>
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] server lang: <none>
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] kex follows: False
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] Compression: none
2026-04-13T03:45:35.327 [DEBUG] [Thread-201151] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:45:35.346 [DEBUG] [Thread-201151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:45:35.347 [DEBUG] [Thread-201151] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:45:35.347 [DEBUG] [Thread-201151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:45:35.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:45:35.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:45:35.349 [DEBUG] [Thread-201151] [transport.py] [_log()] userauth is OK
2026-04-13T03:45:35.349 [DEBUG] [Thread-201151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:45:35.349 [DEBUG] [Thread-201151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:45:35.349 [DEBUG] [Thread-201151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:45:35.349 [DEBUG] [Thread-201151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:45:35.374 [INFO] [Thread-201151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:45:35.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:45:35.934 [DEBUG] [Thread-201151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:45:35.934 [DEBUG] [Thread-201151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:45:35.934 [DEBUG] [Thread-201151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:45:35.975 [DEBUG] [Thread-201151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:45:35.976 [DEBUG] [Thread-201151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:45:35.979 [DEBUG] [Thread-201151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:45:35.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:45:35.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:45:35.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:45:35.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:45:36.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:45:36.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:45:36.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:45:36.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:45:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:45:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.073012 -999.00  +11.20   5.04     82   +8.30 1 1 1 2 1     0    0 3.43 14.46 ZNESW 5.0 5.0 190.0 6.3 11.5 -21.8 11.4 -20.7 11.1 -18.9 11.4 -20.8
2026-04-13T03:45:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:45:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:45:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.073012
2026-04-13T03:45:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:45:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:45:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:45:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:45:36.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:45:36.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:45:07', tmtdew=3.94588, humidity=76.7449, cloud=0.0, wind=8.50572, temperature=11.0395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:45:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[1.0257499999999995, 0.7322500000000005, 0.09174999999999933, 0.8459999999999992, 1.8445, 0.37125000000000163, 0.46999999999999886, 1.8332500000000005, 1.6264999999999992, 0.6710000000000003, 0.15274999999999928, 0.6539999999999999, 1.1219999999999999, 0.7112499999999997, 0.15199999999999925, nan, 1.1862499999999994, 0.17900000000000027, 0.07449999999999868, 0.04274999999999807, 0.22699999999999854, 0.8597499999999991, 0.4072500000000012, 1.5412499999999998, 0.39899999999999913, 0.04300000000000104, 0.03725000000000023, -0.02149999999999963, 0.08000000000000007, 0.1960000000000015, 0.2900000000000009, 0.2060000000000013, 0.048749999999998295], zp_timestamp='2026-04-13T01:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:45:36.017 [DEBUG] [Thread-201151] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:45:36.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:45:36.116 [DEBUG] [Thread-201154] [transport.py] [_log()] starting thread (client mode): 0xb0feb5b0
2026-04-13T03:45:36.116 [DEBUG] [Thread-201154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:45:36.131 [DEBUG] [Thread-201154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:45:36.131 [INFO] [Thread-201154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:45:36.138 [DEBUG] [Thread-201154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:45:36.139 [DEBUG] [Thread-201154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] client lang: <none>
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] server lang: <none>
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] kex follows: False
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:45:36.140 [DEBUG] [Thread-201154] [transport.py] [_log()] Compression: none
2026-04-13T03:45:36.141 [DEBUG] [Thread-201154] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:45:36.199 [DEBUG] [Thread-201154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:45:36.199 [DEBUG] [Thread-201154] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:45:36.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:45:36.201 [DEBUG] [Thread-201154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:45:36.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:45:36.255 [DEBUG] [Thread-201154] [transport.py] [_log()] userauth is OK
2026-04-13T03:45:36.255 [DEBUG] [Thread-201154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:45:36.255 [DEBUG] [Thread-201154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:45:36.256 [DEBUG] [Thread-201154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:45:36.256 [DEBUG] [Thread-201154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:45:36.280 [INFO] [Thread-201154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:45:36.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:45:36.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:45:37.083 [DEBUG] [Thread-201154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:45:37.083 [DEBUG] [Thread-201154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:45:37.131 [DEBUG] [Thread-201154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:45:37.131 [DEBUG] [Thread-201154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:45:37.140 [DEBUG] [Thread-201154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:45:37.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:45:37.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:45:37.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:45:37.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:45:37.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:45:37.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:45:37.177 [DEBUG] [Thread-201154] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:45:38.386 [DEBUG] [Thread-201156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:45:38.457 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:45:38.459 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:45:46.882 [DEBUG] [Thread-201157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:46:01.937 [DEBUG] [Thread-201158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:46:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:46:07.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:46:07.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:46:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 45, 43), 3.39615, 79.4566, 0.0, 9.42336, 10.6126, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:46:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:45:43
2026-04-13T03:46:08.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:46:09.086 [DEBUG] [Thread-201159] [transport.py] [_log()] starting thread (client mode): 0xae52cc70
2026-04-13T03:46:09.087 [DEBUG] [Thread-201159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:46:09.100 [DEBUG] [Thread-201159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:46:09.100 [INFO] [Thread-201159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] client lang: <none>
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] server lang: <none>
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] kex follows: False
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:46:09.103 [DEBUG] [Thread-201159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:46:09.104 [DEBUG] [Thread-201159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:46:09.104 [DEBUG] [Thread-201159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:46:09.104 [DEBUG] [Thread-201159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:46:09.104 [DEBUG] [Thread-201159] [transport.py] [_log()] Compression: none
2026-04-13T03:46:09.104 [DEBUG] [Thread-201159] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:46:09.121 [DEBUG] [Thread-201159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:46:09.122 [DEBUG] [Thread-201159] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:46:09.123 [DEBUG] [Thread-201159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:46:09.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:46:09.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:46:09.125 [DEBUG] [Thread-201159] [transport.py] [_log()] userauth is OK
2026-04-13T03:46:09.125 [DEBUG] [Thread-201159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:46:09.125 [DEBUG] [Thread-201159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:46:09.125 [DEBUG] [Thread-201159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:46:09.125 [DEBUG] [Thread-201159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:46:09.143 [INFO] [Thread-201159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:46:09.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:46:09.744 [DEBUG] [Thread-201159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:46:09.744 [DEBUG] [Thread-201159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:46:09.745 [DEBUG] [Thread-201159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:46:09.785 [DEBUG] [Thread-201159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:46:09.785 [DEBUG] [Thread-201159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:46:09.789 [DEBUG] [Thread-201159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:46:09.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:46:09.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:46:09.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:46:09.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:46:09.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:46:09.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:46:09.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:46:09.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:46:09.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:46:09.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.073359 -999.00  +11.20   6.06     82   +8.30 1 1 1 2 1     0    0 3.42 13.33 ZNESW 6.1 6.1 194.0 6.8 11.5 -21.9 11.4 -21.0 11.1 -18.9 11.3 -20.7
2026-04-13T03:46:09.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:46:09.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:46:09.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.073359
2026-04-13T03:46:09.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:46:09.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:46:09.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:46:09.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:46:09.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:46:09.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:45:43', tmtdew=3.39615, humidity=79.4566, cloud=0.0, wind=9.42336, temperature=10.6126, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:45:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[1.07775, 0.4612499999999997, 0.10725000000000051, 0.910499999999999, 1.7655000000000003, 0.26174999999999926, 0.379999999999999, nan, 1.2284999999999995, 0.6080000000000005, 0.17575000000000074, 0.5899999999999999, 0.9550000000000001, 0.6512499999999992, 0.17050000000000054, 1.9849999999999994, 1.24925, 0.20800000000000018, 0.10599999999999987, 0.07724999999999937, 0.2969999999999988, 0.7067499999999987, 0.4292500000000006, 1.7247500000000002, 0.3929999999999989, 0.14449999999999896, 0.09474999999999945, 0.04550000000000054, 0.07399999999999984, 0.2060000000000013, 0.2870000000000008, 0.277000000000001, 0.08674999999999855], zp_timestamp='2026-04-13T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:46:09.824 [DEBUG] [Thread-201159] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:46:09.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:46:09.929 [DEBUG] [Thread-201162] [transport.py] [_log()] starting thread (client mode): 0xae52ea10
2026-04-13T03:46:09.929 [DEBUG] [Thread-201162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:46:09.944 [DEBUG] [Thread-201162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:46:09.944 [INFO] [Thread-201162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:46:09.952 [DEBUG] [Thread-201162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:46:09.952 [DEBUG] [Thread-201162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:46:09.952 [DEBUG] [Thread-201162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] client lang: <none>
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] server lang: <none>
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] kex follows: False
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] Compression: none
2026-04-13T03:46:09.953 [DEBUG] [Thread-201162] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:46:10.012 [DEBUG] [Thread-201162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:46:10.013 [DEBUG] [Thread-201162] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:46:10.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:46:10.014 [DEBUG] [Thread-201162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:46:10.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:46:10.068 [DEBUG] [Thread-201162] [transport.py] [_log()] userauth is OK
2026-04-13T03:46:10.068 [DEBUG] [Thread-201162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:46:10.068 [DEBUG] [Thread-201162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:46:10.069 [DEBUG] [Thread-201162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:46:10.069 [DEBUG] [Thread-201162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:46:10.088 [INFO] [Thread-201162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:46:10.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:46:10.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:46:10.911 [DEBUG] [Thread-201162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:46:10.911 [DEBUG] [Thread-201162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:46:10.959 [DEBUG] [Thread-201162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:46:10.959 [DEBUG] [Thread-201162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:46:10.968 [DEBUG] [Thread-201162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:46:10.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:46:10.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:46: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') -> 00000000
2026-04-13T03:46:10.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:46:10.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:46:11.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:46:11.008 [DEBUG] [Thread-201162] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:46:16.972 [DEBUG] [Thread-201164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:46:32.017 [DEBUG] [Thread-201165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:46:38.444 [DEBUG] [Thread-201166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:46:38.661 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:46:38.663 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:46:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:46:41.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:46:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:46:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 46, 19), 3.90548, 76.695, 0.0, 8.25876, 11.056, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:46:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:46:19
2026-04-13T03:46:42.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:46:42.851 [DEBUG] [Thread-201167] [transport.py] [_log()] starting thread (client mode): 0xae5b7310
2026-04-13T03:46:42.851 [DEBUG] [Thread-201167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:46:42.872 [DEBUG] [Thread-201167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:46:42.872 [INFO] [Thread-201167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:46:42.873 [DEBUG] [Thread-201167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:46:42.873 [DEBUG] [Thread-201167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:46:42.873 [DEBUG] [Thread-201167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:46:42.873 [DEBUG] [Thread-201167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:42.873 [DEBUG] [Thread-201167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] client lang: <none>
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] server lang: <none>
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] kex follows: False
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:46:42.874 [DEBUG] [Thread-201167] [transport.py] [_log()] Compression: none
2026-04-13T03:46:42.875 [DEBUG] [Thread-201167] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:46:42.886 [DEBUG] [Thread-201167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:46:42.886 [DEBUG] [Thread-201167] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:46:42.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:46:42.887 [DEBUG] [Thread-201167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:46:42.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:46:42.889 [DEBUG] [Thread-201167] [transport.py] [_log()] userauth is OK
2026-04-13T03:46:42.889 [DEBUG] [Thread-201167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:46:42.890 [DEBUG] [Thread-201167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:46:42.890 [DEBUG] [Thread-201167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:46:42.890 [DEBUG] [Thread-201167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:46:42.909 [INFO] [Thread-201167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:46:42.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:46:43.480 [DEBUG] [Thread-201167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:46:43.480 [DEBUG] [Thread-201167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:46:43.481 [DEBUG] [Thread-201167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:46:43.521 [DEBUG] [Thread-201167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:46:43.521 [DEBUG] [Thread-201167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:46:43.525 [DEBUG] [Thread-201167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:46:43.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:46:43.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:46:43.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:46:43.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:46:43.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:46:43.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:46:43.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:46:43.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:46:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:46:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.073707 -999.00  +11.20   5.59     82   +8.30 1 1 1 2 1     0    0 3.41 12.89 ZNESW 5.6 5.6 196.2 7.2 11.5 -21.8 11.4 -20.7 11.1 -19.0 11.4 -20.8
2026-04-13T03:46:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:46:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:46:43.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.073707
2026-04-13T03:46:43.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:46:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:46:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:46:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:46:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:46:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:46:19', tmtdew=3.90548, humidity=76.695, cloud=0.0, wind=8.25876, temperature=11.056, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:46:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[1.07775, 0.4612499999999997, 0.10725000000000051, 0.910499999999999, 1.7655000000000003, 0.26174999999999926, 0.379999999999999, nan, 1.2284999999999995, 0.6080000000000005, 0.17575000000000074, 0.5899999999999999, 0.9550000000000001, 0.6512499999999992, 0.17050000000000054, 1.9849999999999994, 1.24925, 0.20800000000000018, 0.10599999999999987, 0.07724999999999937, 0.2969999999999988, 0.7067499999999987, 0.4292500000000006, 1.7247500000000002, 0.3929999999999989, 0.14449999999999896, 0.09474999999999945, 0.04550000000000054, 0.07399999999999984, 0.2060000000000013, 0.2870000000000008, 0.277000000000001, 0.08674999999999855], zp_timestamp='2026-04-13T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:46:43.550 [DEBUG] [Thread-201167] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:46:43.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:46:43.647 [DEBUG] [Thread-201170] [transport.py] [_log()] starting thread (client mode): 0xae5165c0
2026-04-13T03:46:43.647 [DEBUG] [Thread-201170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:46:43.662 [DEBUG] [Thread-201170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:46:43.663 [INFO] [Thread-201170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:46:43.670 [DEBUG] [Thread-201170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:46:43.671 [DEBUG] [Thread-201170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:46:43.671 [DEBUG] [Thread-201170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:46:43.671 [DEBUG] [Thread-201170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:43.671 [DEBUG] [Thread-201170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:46:43.671 [DEBUG] [Thread-201170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:43.671 [DEBUG] [Thread-201170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:46:43.671 [DEBUG] [Thread-201170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] client lang: <none>
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] server lang: <none>
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] kex follows: False
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] Compression: none
2026-04-13T03:46:43.672 [DEBUG] [Thread-201170] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:46:43.733 [DEBUG] [Thread-201170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:46:43.733 [DEBUG] [Thread-201170] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:46:43.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:46:43.733 [DEBUG] [Thread-201170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:46:43.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:46:43.789 [DEBUG] [Thread-201170] [transport.py] [_log()] userauth is OK
2026-04-13T03:46:43.789 [DEBUG] [Thread-201170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:46:43.789 [DEBUG] [Thread-201170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:46:43.789 [DEBUG] [Thread-201170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:46:43.789 [DEBUG] [Thread-201170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:46:43.803 [INFO] [Thread-201170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:46:43.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:46:43.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:46:44.609 [DEBUG] [Thread-201170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:46:44.609 [DEBUG] [Thread-201170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:46:44.657 [DEBUG] [Thread-201170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:46:44.657 [DEBUG] [Thread-201170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:46:44.666 [DEBUG] [Thread-201170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:46:44.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:46:44.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:46:44.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:46:44.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:46:44.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:46:44.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:46:44.703 [DEBUG] [Thread-201170] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:46:47.054 [DEBUG] [Thread-201172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:02.104 [DEBUG] [Thread-201173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:47:14.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:47:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:47:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 46, 55), 3.93668, 76.8111, 0.0, 7.97652, 11.1555, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:47:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:46:55
2026-04-13T03:47:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:47:16.594 [DEBUG] [Thread-201174] [transport.py] [_log()] starting thread (client mode): 0xb0fb68f0
2026-04-13T03:47:16.594 [DEBUG] [Thread-201174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:47:16.609 [DEBUG] [Thread-201174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:47:16.609 [INFO] [Thread-201174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:47:16.611 [DEBUG] [Thread-201174] [transport.py] [_log()] client lang: <none>
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] server lang: <none>
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] kex follows: False
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] Compression: none
2026-04-13T03:47:16.612 [DEBUG] [Thread-201174] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:47:16.622 [DEBUG] [Thread-201174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:47:16.622 [DEBUG] [Thread-201174] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:47:16.622 [DEBUG] [Thread-201174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:47:16.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:47:16.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:47:16.624 [DEBUG] [Thread-201174] [transport.py] [_log()] userauth is OK
2026-04-13T03:47:16.624 [DEBUG] [Thread-201174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:47:16.624 [DEBUG] [Thread-201174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:47:16.624 [DEBUG] [Thread-201174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:47:16.624 [DEBUG] [Thread-201174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:47:16.637 [INFO] [Thread-201174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:47:16.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:47:17.143 [DEBUG] [Thread-201176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:17.255 [DEBUG] [Thread-201174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:47:17.255 [DEBUG] [Thread-201174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:47:17.256 [DEBUG] [Thread-201174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:47:17.296 [DEBUG] [Thread-201174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:47:17.296 [DEBUG] [Thread-201174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:47:17.300 [DEBUG] [Thread-201174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:47:17.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:47:17.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:47:17.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:47:17.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:47:17.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:47:17.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:47:17.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:47:17.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:47:17.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:47:17.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.074401 -999.00  +11.20   5.10     82   +8.30 1 1 1 2 1     0    0 3.35 11.25 ZNESW 5.1 5.1 188.6 6.0 11.5 -22.0 11.4 -21.0 11.1 -19.0 11.3 -20.9
2026-04-13T03:47:17.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:47:17.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:47:17.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.074401
2026-04-13T03:47:17.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:47:17.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:47:17.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:47:17.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:47:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:47:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:46:55', tmtdew=3.93668, humidity=76.8111, cloud=0.0, wind=7.97652, temperature=11.1555, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:47:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[1.07775, 0.4612499999999997, 0.10725000000000051, 0.910499999999999, 1.7655000000000003, 0.26174999999999926, 0.379999999999999, nan, 1.2284999999999995, 0.6080000000000005, 0.17575000000000074, 0.5899999999999999, 0.9550000000000001, 0.6512499999999992, 0.17050000000000054, 1.9849999999999994, 1.24925, 0.20800000000000018, 0.10599999999999987, 0.07724999999999937, 0.2969999999999988, 0.7067499999999987, 0.4292500000000006, 1.7247500000000002, 0.3929999999999989, 0.14449999999999896, 0.09474999999999945, 0.04550000000000054, 0.07399999999999984, 0.2060000000000013, 0.2870000000000008, 0.277000000000001, 0.08674999999999855], zp_timestamp='2026-04-13T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:47:17.325 [DEBUG] [Thread-201174] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:47:17.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:47:17.424 [DEBUG] [Thread-201178] [transport.py] [_log()] starting thread (client mode): 0xb0f579d0
2026-04-13T03:47:17.424 [DEBUG] [Thread-201178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:47:17.439 [DEBUG] [Thread-201178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:47:17.439 [INFO] [Thread-201178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:47:17.447 [DEBUG] [Thread-201178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:47:17.447 [DEBUG] [Thread-201178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:47:17.447 [DEBUG] [Thread-201178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:47:17.447 [DEBUG] [Thread-201178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] client lang: <none>
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] server lang: <none>
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] kex follows: False
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] Compression: none
2026-04-13T03:47:17.448 [DEBUG] [Thread-201178] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:47:17.507 [DEBUG] [Thread-201178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:47:17.507 [DEBUG] [Thread-201178] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:47:17.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:47:17.509 [DEBUG] [Thread-201178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:47:17.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:47:17.566 [DEBUG] [Thread-201178] [transport.py] [_log()] userauth is OK
2026-04-13T03:47:17.566 [DEBUG] [Thread-201178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:47:17.566 [DEBUG] [Thread-201178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:47:17.566 [DEBUG] [Thread-201178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:47:17.566 [DEBUG] [Thread-201178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:47:17.591 [INFO] [Thread-201178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:47:17.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:47:17.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:47:18.422 [DEBUG] [Thread-201178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:47:18.422 [DEBUG] [Thread-201178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:47:18.469 [DEBUG] [Thread-201178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:47:18.469 [DEBUG] [Thread-201178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:47:18.478 [DEBUG] [Thread-201178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:47:18.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:47:18.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:47:18.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-13T03:47:18.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:47:18.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:47:18.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:47:18.510 [DEBUG] [Thread-201178] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:47:32.191 [DEBUG] [Thread-201180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:38.526 [DEBUG] [Thread-201181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:38.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:38.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:47.252 [DEBUG] [Thread-201182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:47:48.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:47:48.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:47:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:47:49.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 47, 30), 3.94407, 76.7779, 0.0, 7.97652, 11.2053, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:47:49.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:47:30
2026-04-13T03:47:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:47:50.397 [DEBUG] [Thread-201183] [transport.py] [_log()] starting thread (client mode): 0xb0feb8b0
2026-04-13T03:47:50.397 [DEBUG] [Thread-201183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:47:50.417 [DEBUG] [Thread-201183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:47:50.417 [INFO] [Thread-201183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:47:50.420 [DEBUG] [Thread-201183] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:47:50.420 [DEBUG] [Thread-201183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:47:50.420 [DEBUG] [Thread-201183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] client lang: <none>
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] server lang: <none>
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] kex follows: False
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:47:50.421 [DEBUG] [Thread-201183] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:47:50.422 [DEBUG] [Thread-201183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:47:50.422 [DEBUG] [Thread-201183] [transport.py] [_log()] Compression: none
2026-04-13T03:47:50.422 [DEBUG] [Thread-201183] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:47:50.439 [DEBUG] [Thread-201183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:47:50.440 [DEBUG] [Thread-201183] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:47:50.441 [DEBUG] [Thread-201183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:47:50.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:47:50.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:47:50.443 [DEBUG] [Thread-201183] [transport.py] [_log()] userauth is OK
2026-04-13T03:47:50.443 [DEBUG] [Thread-201183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:47:50.443 [DEBUG] [Thread-201183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:47:50.443 [DEBUG] [Thread-201183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:47:50.444 [DEBUG] [Thread-201183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:47:50.466 [INFO] [Thread-201183] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:47:50.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:47:51.191 [DEBUG] [Thread-201183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:47:51.191 [DEBUG] [Thread-201183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:47:51.192 [DEBUG] [Thread-201183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:47:51.232 [DEBUG] [Thread-201183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:47:51.232 [DEBUG] [Thread-201183] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:47:51.236 [DEBUG] [Thread-201183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:47:51.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:47:51.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:47:51.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:47:51.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:47:51.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:47:51.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:47:51.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:47:51.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:47:51.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:47:51.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.074401 -999.00  +11.20   5.10     82   +8.30 1 1 1 2 1     0    0 3.35 11.25 ZNESW 5.1 5.1 188.6 6.0 11.5 -22.0 11.4 -21.0 11.1 -19.0 11.3 -20.9
2026-04-13T03:47:51.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:47:51.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:47:51.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.074401
2026-04-13T03:47:51.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:47:51.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:47:51.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:47:51.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:47:51.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:47:51.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:47:30', tmtdew=3.94407, humidity=76.7779, cloud=0.0, wind=7.97652, temperature=11.2053, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:47:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[1.07775, 0.4612499999999997, 0.10725000000000051, 0.910499999999999, 1.7655000000000003, 0.26174999999999926, 0.379999999999999, nan, 1.2284999999999995, 0.6080000000000005, 0.17575000000000074, 0.5899999999999999, 0.9550000000000001, 0.6512499999999992, 0.17050000000000054, 1.9849999999999994, 1.24925, 0.20800000000000018, 0.10599999999999987, 0.07724999999999937, 0.2969999999999988, 0.7067499999999987, 0.4292500000000006, 1.7247500000000002, 0.3929999999999989, 0.14449999999999896, 0.09474999999999945, 0.04550000000000054, 0.07399999999999984, 0.2060000000000013, 0.2870000000000008, 0.277000000000001, 0.08674999999999855], zp_timestamp='2026-04-13T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:47:51.265 [DEBUG] [Thread-201183] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:47:51.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:47:51.357 [DEBUG] [Thread-201186] [transport.py] [_log()] starting thread (client mode): 0xb0f548b0
2026-04-13T03:47:51.357 [DEBUG] [Thread-201186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:47:51.372 [DEBUG] [Thread-201186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-13T03:47:51.372 [INFO] [Thread-201186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-13T03:47:51.380 [DEBUG] [Thread-201186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:47:51.380 [DEBUG] [Thread-201186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-13T03:47:51.380 [DEBUG] [Thread-201186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:47:51.380 [DEBUG] [Thread-201186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:51.380 [DEBUG] [Thread-201186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:47:51.380 [DEBUG] [Thread-201186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:51.380 [DEBUG] [Thread-201186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] client lang: <none>
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] server lang: <none>
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] kex follows: False
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] Compression: none
2026-04-13T03:47:51.381 [DEBUG] [Thread-201186] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:47:51.440 [DEBUG] [Thread-201186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:47:51.440 [DEBUG] [Thread-201186] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:47:51.441 [DEBUG] [Thread-201186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-13T03:47:51.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-13T03:47:51.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:47:51.496 [DEBUG] [Thread-201186] [transport.py] [_log()] userauth is OK
2026-04-13T03:47:51.496 [DEBUG] [Thread-201186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:47:51.497 [DEBUG] [Thread-201186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:47:51.497 [DEBUG] [Thread-201186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-13T03:47:51.497 [DEBUG] [Thread-201186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:47:51.516 [INFO] [Thread-201186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:47:51.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-13T03:47:51.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:47:52.332 [DEBUG] [Thread-201186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:47:52.333 [DEBUG] [Thread-201186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:47:52.379 [DEBUG] [Thread-201186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:47:52.380 [DEBUG] [Thread-201186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:47:52.388 [DEBUG] [Thread-201186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:47:52.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:47:52.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-13T03:47:52.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
2026-04-13T03:47:52.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:47:52.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:47:52.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:47:52.419 [DEBUG] [Thread-201186] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:48:02.289 [DEBUG] [Thread-201188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:48:17.352 [DEBUG] [Thread-201189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:48:22.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:48:22.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:48:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:48:23.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 48, 6), 3.94017, 76.7945, 0.0, 8.1882, 11.172, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:48:23.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:48:06
2026-04-13T03:48:24.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:48:24.260 [DEBUG] [Thread-201190] [transport.py] [_log()] starting thread (client mode): 0xb0febe50
2026-04-13T03:48:24.260 [DEBUG] [Thread-201190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:48:24.282 [DEBUG] [Thread-201190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:48:24.282 [INFO] [Thread-201190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:48:24.285 [DEBUG] [Thread-201190] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:48:24.285 [DEBUG] [Thread-201190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:48:24.285 [DEBUG] [Thread-201190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:48:24.285 [DEBUG] [Thread-201190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:48:24.285 [DEBUG] [Thread-201190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:48:24.285 [DEBUG] [Thread-201190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:48:24.285 [DEBUG] [Thread-201190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] client lang: <none>
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] server lang: <none>
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] kex follows: False
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] Compression: none
2026-04-13T03:48:24.286 [DEBUG] [Thread-201190] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:48:24.303 [DEBUG] [Thread-201190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:48:24.304 [DEBUG] [Thread-201190] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:48:24.304 [DEBUG] [Thread-201190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:48:24.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:48:24.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:48:24.306 [DEBUG] [Thread-201190] [transport.py] [_log()] userauth is OK
2026-04-13T03:48:24.307 [DEBUG] [Thread-201190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:48:24.307 [DEBUG] [Thread-201190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:48:24.307 [DEBUG] [Thread-201190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:48:24.307 [DEBUG] [Thread-201190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:48:24.333 [INFO] [Thread-201190] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:48:24.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:48:25.081 [DEBUG] [Thread-201190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:48:25.082 [DEBUG] [Thread-201190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:48:25.082 [DEBUG] [Thread-201190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:48:25.123 [DEBUG] [Thread-201190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:48:25.123 [DEBUG] [Thread-201190] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:48:25.127 [DEBUG] [Thread-201190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:48:25.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:48:25.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:48:25.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:48:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:48:25.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:48:25.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:48:25.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:48:25.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:48:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:48:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.074748 -999.00  +11.20   4.96     82   +8.30 1 1 1 2 1     0    0 3.27 9.75 ZNESW 5.0 5.0 190.0 5.9 11.5 -22.0 11.4 -21.0 11.1 -18.9 11.4 -21.0
2026-04-13T03:48:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:48:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:48:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.074748
2026-04-13T03:48:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:48:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:48:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:48:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:48:25.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:48:25.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:48:06', tmtdew=3.94017, humidity=76.7945, cloud=0.0, wind=8.1882, temperature=11.172, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:47:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[1.07775, 0.4612499999999997, 0.10725000000000051, 0.910499999999999, 1.7655000000000003, 0.26174999999999926, 0.379999999999999, nan, 1.2284999999999995, 0.6080000000000005, 0.17575000000000074, 0.5899999999999999, 0.9550000000000001, 0.6512499999999992, 0.17050000000000054, 1.9849999999999994, 1.24925, 0.20800000000000018, 0.10599999999999987, 0.07724999999999937, 0.2969999999999988, 0.7067499999999987, 0.4292500000000006, 1.7247500000000002, 0.3929999999999989, 0.14449999999999896, 0.09474999999999945, 0.04550000000000054, 0.07399999999999984, 0.2060000000000013, 0.2870000000000008, 0.277000000000001, 0.08674999999999855], zp_timestamp='2026-04-13T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:48:25.156 [DEBUG] [Thread-201190] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:48:25.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-13T03:48:32.387 [DEBUG] [Thread-201193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:48:38.609 [DEBUG] [Thread-201194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:48:39.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:48:39.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:48:47.444 [DEBUG] [Thread-201195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:49:02.481 [DEBUG] [Thread-201196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:49:17.514 [DEBUG] [Thread-201197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:49:32.552 [DEBUG] [Thread-201198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:49:38.681 [DEBUG] [Thread-201199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:49:39.265 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:49:39.266 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:49:47.589 [DEBUG] [Thread-201200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:50:02.627 [DEBUG] [Thread-201201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:50:17.665 [DEBUG] [Thread-201202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:50:32.709 [DEBUG] [Thread-201203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:50:38.736 [DEBUG] [Thread-201204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:50:39.231 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-13T03:50:39.469 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:50:39.471 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:50:47.749 [DEBUG] [Thread-201205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:51:02.788 [DEBUG] [Thread-201206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-13T03:51:09.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-13T03:51:09.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-13T03:51:09.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-13T03:51:10.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 13, 3, 51, 2), 3.8321, 77.093, 0.0, 7.76484, 11.0393, 0, 0, 0, 2, 0, 0),)
2026-04-13T03:51:10.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-13 03:51:02
2026-04-13T03:51:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-13T03:51:11.103 [DEBUG] [Thread-201207] [transport.py] [_log()] starting thread (client mode): 0xb0feb220
2026-04-13T03:51:11.103 [DEBUG] [Thread-201207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-13T03:51:11.123 [DEBUG] [Thread-201207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-13T03:51:11.123 [INFO] [Thread-201207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-13T03:51:11.126 [DEBUG] [Thread-201207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-13T03:51:11.126 [DEBUG] [Thread-201207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-13T03:51:11.126 [DEBUG] [Thread-201207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-13T03:51:11.126 [DEBUG] [Thread-201207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:51:11.126 [DEBUG] [Thread-201207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-13T03:51:11.126 [DEBUG] [Thread-201207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] client lang: <none>
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] server lang: <none>
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] kex follows: False
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] Compression: none
2026-04-13T03:51:11.127 [DEBUG] [Thread-201207] [transport.py] [_log()] === End of kex handshake ===
2026-04-13T03:51:11.142 [DEBUG] [Thread-201207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-13T03:51:11.142 [DEBUG] [Thread-201207] [transport.py] [_log()] Switch to new keys ...
2026-04-13T03:51:11.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-13T03:51:11.143 [DEBUG] [Thread-201207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-13T03:51:11.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-13T03:51:11.184 [DEBUG] [Thread-201207] [transport.py] [_log()] userauth is OK
2026-04-13T03:51:11.185 [DEBUG] [Thread-201207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-13T03:51:11.185 [DEBUG] [Thread-201207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-13T03:51:11.185 [DEBUG] [Thread-201207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-13T03:51:11.185 [DEBUG] [Thread-201207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-13T03:51:11.202 [INFO] [Thread-201207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-13T03:51:11.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-13T03:51:12.018 [DEBUG] [Thread-201207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-13T03:51:12.018 [DEBUG] [Thread-201207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-13T03:51:12.019 [DEBUG] [Thread-201207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-13T03:51:12.059 [DEBUG] [Thread-201207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-13T03:51:12.059 [DEBUG] [Thread-201207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-13T03:51:12.062 [DEBUG] [Thread-201207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-13T03:51:12.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-13T03:51:12.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-13T03:51:12.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-13T03:51:12.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-13T03:51:12.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-13T03:51:12.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-13T03:51:12.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-13T03:51:12.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-13T03:51:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-13T03:51:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61143.076832 -999.00  +11.10   6.08     82   +8.20 1 1 1 2 1     0    0 3.16 4.87 ZNESW 6.1 6.1 193.6 7.0 11.5 -22.0 11.3 -21.0 11.1 -19.0 11.3 -21.0
2026-04-13T03:51:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-13T03:51:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-13T03:51:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61143.076832
2026-04-13T03:51:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-13T03:51:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-13T03:51:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-13T03:51:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-13T03:51:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-13T03:51:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-13T03:51:02', tmtdew=3.8321, humidity=77.093, cloud=0.0, wind=7.76484, temperature=11.0393, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-12T19:46:17', seeing=0.97, atlas_timestamp='2026-04-13T01:50:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[1.07775, 0.4612499999999997, 0.10725000000000051, 0.910499999999999, 1.7655000000000003, 0.26174999999999926, 0.379999999999999, nan, 1.2284999999999995, 0.6080000000000005, 0.17575000000000074, 0.5899999999999999, 0.9550000000000001, 0.6512499999999992, 0.17050000000000054, 1.9849999999999994, 1.24925, 0.20800000000000018, 0.10599999999999987, 0.07724999999999937, 0.2969999999999988, 0.7067499999999987, 0.4292500000000006, 1.7247500000000002, 0.3929999999999989, 0.14449999999999896, 0.09474999999999945, 0.04550000000000054, 0.07399999999999984, 0.2060000000000013, 0.2870000000000008, 0.277000000000001, 0.08674999999999855], zp_timestamp='2026-04-13T01:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-13T03:51:12.088 [DEBUG] [Thread-201207] [transport.py] [_log()] EOF in transport thread
2026-04-13T03:51:12.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private
[file cut: first 33554432 bytes kept]
[document cut: first 32645907 of 33554432 characters kept]
